From af978e79e68af701c45bab401afce5145aa4b80b Mon Sep 17 00:00:00 2001 From: Arnaud Diederen Date: Thu, 13 Mar 2025 16:17:53 +0100 Subject: [PATCH] IDAPython for IDA 9.1 --- PyQt5-shims/QtCore.py | 1 + PyQt5-shims/QtGui.py | 1 + PyQt5-shims/QtWidgets.py | 1 + PyQt5-shims/__init__.py | 17 + PyQt5-shims/sip.py | 1 + README.md | 2 +- README_python3.txt | 5 - STATUS.txt | 2 - Scripts/CallStackWalk.py | 4 +- Scripts/DrvsDispatch.py | 2 +- Scripts/ExchainDump.py | 2 +- Scripts/FindInstructions.py | 7 +- Scripts/SEHGraph.py | 2 +- Scripts/VaDump.py | 2 +- Scripts/VirusTotal.py | 2 +- api-examples/api-examples-toc.md | 72 + api-examples/dbg/filemon.py | 104 + api-examples/func/classify_ntdll_func.py | 56 + .../func/decompile_func_and_callees.py | 76 + api-examples/func/list_func_callees.py | 55 + api-examples/func/print_location_info.py | 50 + api-examples/func/sort_func_by_calls.py | 38 + api-examples/gdl/colorize_graph_node.py | 15 + .../hexrays/hr_decompile_func_and_callees.py | 74 + api-examples/idb/frame_event_listener.py | 65 + api-examples/idb/lt_event_listener.py | 68 + api-examples/idp/log_idp_events.py | 677 + api-examples/inf/print_basic_info.py | 84 + api-examples/inf/print_basic_info_plugin.py | 37 + api-examples/misc/find_binary_pattern.py | 103 + api-examples/misc/find_syscall.py | 27 + api-examples/readme.md | 21 + api-examples/segm/list_imports.py | 71 + api_contents.brief | 29631 +++--- api_contents.full | 77687 ++++++---------- api_contents_pro.brief | 14228 --- api_contents_pro.full | 67968 -------------- apidoc/ida_bytes.py | 242 + apidoc/ida_dbg.py | 125 + apidoc/ida_diskio.py | 16 + apidoc/ida_fpro.py | 109 + apidoc/ida_funcs.py | 63 + apidoc/ida_graph.py | 65 + apidoc/ida_hexrays.py | 31 + apidoc/ida_idaapi.py | 171 + apidoc/ida_idd.py | 71 + apidoc/ida_idp.py | 138 + apidoc/ida_kernwin.py | 466 + apidoc/ida_lines.py | 15 + apidoc/ida_loader.py | 36 + apidoc/ida_lumina.py | 9 + apidoc/ida_nalt.py | 21 + apidoc/ida_netnode.py | 22 + apidoc/ida_pro.py | 9 + apidoc/ida_segment.py | 15 + apidoc/ida_typeinf.py | 559 + apidoc/ida_ua.py | 29 + apidoc/ida_xref.py | 47 + copy_docs_to_p4.sh | 27 + examples-internal/dirtree_missing_inode.py | 138 + .../idapython_example_raise_exception.py | 4 + examples/README.md | 23 + examples/core/add_idc_hotkey.py | 30 - examples/core/bin_search.py | 94 - .../appcall/simple_appcall_common.py | 0 .../appcall/simple_appcall_linux.py | 4 +- .../appcall/simple_appcall_win.py | 6 +- .../test_programs/simple_appcall/makefile | 0 .../simple_appcall/simple_appcall.c | 0 .../simple_appcall/simple_appcall_linux32 | Bin .../simple_appcall/simple_appcall_linux64 | Bin .../simple_appcall/simple_appcall_win32.exe | Bin .../simple_appcall/simple_appcall_win64.exe | Bin .../dbghooks/automatic_steps.py | 2 + .../dbghooks/dbg_trace.py | 6 +- .../misc/print_call_stack.py | 17 +- .../misc/print_registers.py | 9 +- .../misc/registers_context_menu.py | 4 +- .../show_debug_names.py | 4 +- .../colorize_pseudocode_lines.py | 4 +- .../{hexrays => decompiler}/curpos_details.py | 4 +- .../decompile_entry_points.py | 14 +- .../{core => decompiler}/produce_c_file.py | 4 +- examples/{hexrays => decompiler}/vds1.py | 7 +- examples/{hexrays => decompiler}/vds10.py | 4 +- examples/{hexrays => decompiler}/vds11.py | 4 +- examples/{hexrays => decompiler}/vds12.py | 2 + examples/{hexrays => decompiler}/vds13.py | 4 +- examples/{hexrays => decompiler}/vds17.py | 4 +- examples/{hexrays => decompiler}/vds19.py | 4 +- examples/{hexrays => decompiler}/vds21.py | 2 + examples/{hexrays => decompiler}/vds3.py | 4 +- examples/{hexrays => decompiler}/vds4.py | 4 +- examples/{hexrays => decompiler}/vds5.py | 4 +- examples/{hexrays => decompiler}/vds6.py | 2 + examples/{hexrays => decompiler}/vds7.py | 4 +- examples/{hexrays => decompiler}/vds8.py | 4 +- .../vds_create_hint.py | 4 +- examples/{hexrays => decompiler}/vds_hooks.py | 24 +- .../vds_modify_user_lvars.py | 4 +- examples/{hexrays => decompiler}/vds_xrefs.py | 4 +- examples/disassembler/add_frame_member.py | 61 + .../{idphooks => disassembler}/ana_emu_out.py | 4 +- .../{idphooks => disassembler}/assemble.py | 4 +- .../custom_data_types_and_formats.py | 14 +- .../dump_extra_comments.py | 4 +- .../{core => disassembler}/dump_flowchart.py | 2 + .../dump_func_info.py | 4 +- examples/disassembler/dump_line_sections.py | 53 + examples/disassembler/find_string.py | 74 + .../disassembler/func_ti_changed_listener.py | 36 + .../install_user_defined_prefix.py | 6 +- .../{core => disassembler}/list_bookmarks.py | 4 +- .../list_function_items.py | 6 +- .../{core => disassembler}/list_imports.py | 2 + .../list_patched_bytes.py | 4 +- .../{core => disassembler}/list_problems.py | 6 +- .../list_segment_functions.py | 12 +- .../list_segment_functions_using_idautils.py | 14 +- .../{core => disassembler}/list_strings.py | 4 +- examples/disassembler/list_struct_accesses.py | 125 + .../log_idb_events.py | 120 +- examples/disassembler/log_idp_events.py | 44 + .../operand_changed.py | 14 +- .../produce_lst_file.py | 4 +- .../replay_prototypes_changes.py | 4 +- examples/index.css | 28 - examples/index.html | 4533 - examples/index.js | 72 - examples/index.md | 6563 +- examples/{ => misc}/cvt64/py_cvt64_sample.py | 12 +- examples/{core => misc}/extend_idc.py | 4 +- examples/{core => misc}/idapythonrc.py | 4 +- examples/{ => misc}/merge/py_mex1.py | 47 +- examples/{ => misc}/merge/py_mex3.py | 72 +- examples/types/apply_callee_tinfo.py | 49 + examples/types/change_stkvar_name.py | 56 + examples/types/change_stkvar_type.py | 173 + examples/types/create_array.py | 35 + examples/types/create_bfstruct.py | 37 + examples/types/create_bmenum.py | 25 + examples/types/create_libssh2_til.py | 74 + examples/types/create_struct_by_member.py | 50 + examples/types/create_struct_by_parsing.py | 33 + .../create_structure_programmatically.py | 93 +- examples/types/create_union_by_member.py | 39 + examples/types/create_user_shared_data.py | 59 + examples/types/del_struct_members.py | 52 + examples/types/gap_size_align_snippet.py | 34 + examples/types/get_best_fit_member.py | 39 + examples/types/get_innermost_member.py | 137 + examples/types/import_type_from_til.py | 45 + examples/types/insert_struct_member.py | 39 + examples/types/list_enum_member.py | 36 + examples/types/list_frame_info.py | 37 + examples/types/list_func_details.py | 26 + examples/{core => types}/list_stkvar_xrefs.py | 56 +- examples/types/list_struct_member.py | 45 + examples/types/list_struct_xrefs.py | 33 + examples/types/list_union_member.py | 33 + examples/types/mark_func_spoiled.py | 44 + examples/types/modify_struct_member.py | 47 + examples/types/operand_to_struct_member.py | 108 + examples/types/print_stkvar_xrefs.py | 68 + examples/types/setpehdr.py | 137 + examples/types/visit_tinfo.py | 54 + examples/{core => ui}/actions.py | 2 + examples/{core => ui}/add_hotkey.py | 4 +- .../auto_instantiate_widget_plugin.py | 4 +- examples/{core => ui}/colorize_disassembly.py | 6 +- .../colorize_disassembly_on_the_fly.py | 4 +- examples/{core => ui}/custom_cli.py | 33 +- examples/{core => ui}/dump_selection.py | 11 +- .../{widgets => ui}/forms/askusingform.py | 4 +- .../graphs/custom_graph_with_actions.py | 4 +- .../{widgets => ui}/graphs/sync_two_graphs.py | 4 +- .../{widgets => ui}/idaview/wrap_idaview.py | 4 +- .../{widgets => ui}/listings/custom_viewer.py | 2 + .../listings/jump_next_comment.py | 4 +- .../listings/save_and_restore_listing_pos.py | 9 +- examples/{widgets => ui}/misc/add_menus.py | 4 +- examples/{ => ui}/pyqt/inject_command.py | 4 +- examples/{ => ui}/pyqt/paint_over_graph.py | 7 +- examples/{ => ui}/pyqt/paint_over_navbar.py | 4 +- .../populate_pluginform_with_pyqt_widgets.py | 4 +- examples/{core => ui}/register_timer.py | 6 +- .../tabular_views/custom/choose.py | 4 +- .../tabular_views/custom/choose_multi.py | 4 +- .../custom/chooser_with_folders.py | 5 +- .../tabular_views/custom/func_chooser.py | 4 +- .../custom/lazy_loaded_chooser.py | 16 + .../string_window/show_selected_strings.py | 4 +- .../trigger_actions_programmatically.py | 4 +- .../{ => ui}/uihooks/func_chooser_coloring.py | 6 +- examples/{ => ui}/uihooks/lines_rendering.py | 4 +- examples/{ => ui}/uihooks/log_misc_events.py | 4 +- examples/{ => ui}/uihooks/prevent_jump.py | 4 +- .../waitbox/show_and_hide_waitbox.py | 4 +- extapi.cpp | 43 +- extapi.hpp | 2 + idapython.cfg | 2 +- idapython.cpp | 553 +- idapython.script | 2 + idapython_implib.def | 2 + libpython3.tbd | 552 - makefile | 500 +- out_of_tree/parsed_notifications.zip | Bin 4833094 -> 4992697 bytes python/idautils.py | 35 +- python/idc.py | 1733 +- python/init.py | 77 +- pywraps.cpp | 54 +- pywraps.hpp | 34 +- pywraps/py_bytes.hpp | 178 +- pywraps/py_bytes_custdata.hpp | 56 +- pywraps/py_bytes_custdata.py | 79 - pywraps/py_bytes_find_bytes.hpp | 23 + pywraps/py_bytes_find_bytes.py | 68 + pywraps/py_dbg.hpp | 121 +- pywraps/py_diskio.hpp | 61 +- pywraps/py_fpro.hpp | 79 +- pywraps/py_fpro_end.py | 5 + pywraps/py_frame.hpp | 29 - pywraps/py_funcs.hpp | 35 +- pywraps/py_graph.hpp | 40 +- pywraps/py_graph.py | 75 +- pywraps/py_hexrays.hpp | 5 +- pywraps/py_hexrays.py | 3 +- pywraps/py_ida.py | 13 - pywraps/py_idaapi.hpp | 85 +- pywraps/py_idaapi.py | 692 +- pywraps/py_idaapi_loader_input.hpp | 129 +- pywraps/py_idd.hpp | 81 +- pywraps/py_idd.py | 4 +- pywraps/py_idp.hpp | 223 +- pywraps/py_idp.py | 16 +- pywraps/py_ieee.hpp | 3 +- pywraps/py_ieee.py | 6 +- pywraps/py_kernwin.hpp | 563 +- pywraps/py_kernwin.py | 12 + pywraps/py_kernwin_askform.hpp | 4 +- pywraps/py_kernwin_askform.py | 11 +- pywraps/py_kernwin_choose.hpp | 4 +- pywraps/py_kernwin_cli.hpp | 54 +- pywraps/py_kernwin_cli.py | 12 +- pywraps/py_kernwin_custview.py | 65 - pywraps/py_kernwin_end.py | 5 + pywraps/py_kernwin_plgform.py | 27 +- pywraps/py_lines.hpp | 91 +- pywraps/py_loader.hpp | 43 +- pywraps/py_lumina.hpp | 4 +- pywraps/py_moves_end.py | 9 + pywraps/py_nalt.hpp | 30 +- pywraps/py_name.hpp | 2 +- pywraps/py_netnode_end.py | 3 + pywraps/py_pro.hpp | 11 - pywraps/py_search.hpp | 11 - pywraps/py_search.py | 1 - pywraps/py_segment.hpp | 20 - pywraps/py_struct.hpp | 39 - pywraps/py_typeinf.hpp | 227 +- pywraps/py_typeinf.py | 4 - pywraps/py_ua.hpp | 39 +- pywraps/py_xref.hpp | 57 +- pywraps/py_xref.py | 3 + pywraps/pywraps.vcproj | 4 - swig/bitrange.i | 6 + swig/bytes.i | 86 +- swig/dbg.i | 37 +- swig/diskio.i | 1 - swig/enum.i | 8 - swig/expr.i | 5 + swig/fpro.i | 48 +- swig/frame.i | 10 +- swig/funcs.i | 34 +- swig/graph.i | 59 +- swig/hexrays.i | 78 +- swig/ida.i | 6 +- swig/idaapi.i | 17 +- swig/idbhooks.i | 1 - swig/idd.i | 59 +- swig/idp.i | 43 +- swig/ieee.i | 42 +- swig/kernwin.i | 62 +- swig/libfuncs.i | 8 + swig/lines.i | 12 +- swig/loader.i | 2 + swig/lumina.i | 4 +- swig/merge.i | 34 +- swig/mergemod.i | 35 +- swig/moves.i | 9 + swig/name.i | 9 + swig/netnode.i | 16 + swig/pro.i | 46 +- swig/range.i | 4 + swig/regfinder.i | 12 +- swig/search.i | 5 + swig/struct.i | 75 - swig/typeinf.i | 333 +- swig/ua.i | 3 +- swig/undo.i | 22 + til_api_improvements.md | 324 + tools/astor_0_8_1/VERSION | 1 + tools/astor_0_8_1/__init__.py | 78 + tools/astor_0_8_1/code_gen.py | 901 + tools/astor_0_8_1/codegen.py | 11 + tools/astor_0_8_1/file_util.py | 111 + tools/astor_0_8_1/node_util.py | 208 + tools/astor_0_8_1/op_util.py | 110 + tools/astor_0_8_1/rtrip.py | 209 + tools/astor_0_8_1/source_repr.py | 273 + tools/astor_0_8_1/string_repr.py | 112 + tools/astor_0_8_1/tree_walk.py | 179 + tools/chkapi.py | 32 +- tools/collected_traces.txt | 18564 ---- tools/deploy.py | 6 +- tools/deploy/header.i.in | 344 +- tools/docs/hrdoc.py | 80 +- tools/docs/templates/md.mako | 168 + tools/examples_index_template.html | 103 - tools/examples_index_template.md | 126 +- tools/gen_examples_index.py | 148 +- tools/genhooks/all_recipes.py | 65 - tools/genhooks/genhooks.py | 2 +- tools/genhooks/recipe_hexrays.py | 11 + tools/genhooks/recipe_index.py | 91 + tools/genidaapi.py | 8 +- tools/hooks_utils.py | 52 +- tools/inject_pydoc.py | 2171 - tools/inject_pydoc/bytes.py | 13 - tools/inject_pydoc/idp.py | 5 - tools/inject_pydoc_cases.txt | 10 - tools/inspect.py | 10 +- tools/patch_codegen.py | 19 +- tools/patch_codegen/expr.py | 8 +- tools/patch_codegen/graph.py | 10 +- tools/patch_directors_cc.py | 6 +- tools/patch_h_codegen.py | 1 + tools/py_scanner.py | 133 +- tools/pydoc_injection.py | 296 + tools/pypasses.py | 64 + tools/pypasses/__init__.py | 61 + tools/pypasses/argsify_for_dispatching_cpp.py | 122 + tools/pypasses/doxy/__init__.py | 748 + tools/pypasses/inject_doxygen.py | 190 + tools/pypasses/proto_fix_known_types.py | 63 + tools/pypasses/proto_overrides.py | 57 + tools/pypasses/pydoc_overrides.py | 78 + .../pypasses/return_type_from_cpp_wrapper.py | 100 + 348 files changed, 62240 insertions(+), 180466 deletions(-) create mode 100644 PyQt5-shims/QtCore.py create mode 100644 PyQt5-shims/QtGui.py create mode 100644 PyQt5-shims/QtWidgets.py create mode 100644 PyQt5-shims/__init__.py create mode 100644 PyQt5-shims/sip.py create mode 100644 api-examples/api-examples-toc.md create mode 100644 api-examples/dbg/filemon.py create mode 100644 api-examples/func/classify_ntdll_func.py create mode 100644 api-examples/func/decompile_func_and_callees.py create mode 100644 api-examples/func/list_func_callees.py create mode 100644 api-examples/func/print_location_info.py create mode 100644 api-examples/func/sort_func_by_calls.py create mode 100644 api-examples/gdl/colorize_graph_node.py create mode 100644 api-examples/hexrays/hr_decompile_func_and_callees.py create mode 100644 api-examples/idb/frame_event_listener.py create mode 100644 api-examples/idb/lt_event_listener.py create mode 100644 api-examples/idp/log_idp_events.py create mode 100644 api-examples/inf/print_basic_info.py create mode 100644 api-examples/inf/print_basic_info_plugin.py create mode 100644 api-examples/misc/find_binary_pattern.py create mode 100644 api-examples/misc/find_syscall.py create mode 100644 api-examples/readme.md create mode 100644 api-examples/segm/list_imports.py delete mode 100644 api_contents_pro.brief delete mode 100644 api_contents_pro.full create mode 100644 apidoc/ida_bytes.py create mode 100644 apidoc/ida_dbg.py create mode 100644 apidoc/ida_diskio.py create mode 100644 apidoc/ida_fpro.py create mode 100644 apidoc/ida_funcs.py create mode 100644 apidoc/ida_graph.py create mode 100644 apidoc/ida_hexrays.py create mode 100644 apidoc/ida_idaapi.py create mode 100644 apidoc/ida_idd.py create mode 100644 apidoc/ida_idp.py create mode 100644 apidoc/ida_kernwin.py create mode 100644 apidoc/ida_lines.py create mode 100644 apidoc/ida_loader.py create mode 100644 apidoc/ida_lumina.py create mode 100644 apidoc/ida_nalt.py create mode 100644 apidoc/ida_netnode.py create mode 100644 apidoc/ida_pro.py create mode 100644 apidoc/ida_segment.py create mode 100644 apidoc/ida_typeinf.py create mode 100644 apidoc/ida_ua.py create mode 100644 apidoc/ida_xref.py create mode 100755 copy_docs_to_p4.sh create mode 100755 examples-internal/dirtree_missing_inode.py create mode 100644 examples-internal/idapython_example_raise_exception.py delete mode 100644 examples/core/add_idc_hotkey.py delete mode 100644 examples/core/bin_search.py rename examples/{debugging => debugger}/appcall/simple_appcall_common.py (100%) rename examples/{debugging => debugger}/appcall/simple_appcall_linux.py (90%) rename examples/{debugging => debugger}/appcall/simple_appcall_win.py (88%) rename examples/{debugging => debugger}/appcall/test_programs/simple_appcall/makefile (100%) rename examples/{debugging => debugger}/appcall/test_programs/simple_appcall/simple_appcall.c (100%) rename examples/{debugging => debugger}/appcall/test_programs/simple_appcall/simple_appcall_linux32 (100%) rename examples/{debugging => debugger}/appcall/test_programs/simple_appcall/simple_appcall_linux64 (100%) rename examples/{debugging => debugger}/appcall/test_programs/simple_appcall/simple_appcall_win32.exe (100%) rename examples/{debugging => debugger}/appcall/test_programs/simple_appcall/simple_appcall_win64.exe (100%) rename examples/{debugging => debugger}/dbghooks/automatic_steps.py (99%) rename examples/{debugging => debugger}/dbghooks/dbg_trace.py (97%) rename examples/{debugging => debugger}/misc/print_call_stack.py (79%) rename examples/{debugging => debugger}/misc/print_registers.py (88%) rename examples/{debugging => debugger}/misc/registers_context_menu.py (95%) rename examples/{debugging => debugger}/show_debug_names.py (89%) rename examples/{hexrays => decompiler}/colorize_pseudocode_lines.py (97%) rename examples/{hexrays => decompiler}/curpos_details.py (97%) rename examples/{hexrays => decompiler}/decompile_entry_points.py (87%) rename examples/{core => decompiler}/produce_c_file.py (93%) rename examples/{hexrays => decompiler}/vds1.py (84%) rename examples/{hexrays => decompiler}/vds10.py (96%) rename examples/{hexrays => decompiler}/vds11.py (97%) rename examples/{hexrays => decompiler}/vds12.py (99%) rename examples/{hexrays => decompiler}/vds13.py (92%) rename examples/{hexrays => decompiler}/vds17.py (99%) rename examples/{hexrays => decompiler}/vds19.py (96%) rename examples/{hexrays => decompiler}/vds21.py (99%) rename examples/{hexrays => decompiler}/vds3.py (99%) rename examples/{hexrays => decompiler}/vds4.py (97%) rename examples/{hexrays => decompiler}/vds5.py (99%) rename examples/{hexrays => decompiler}/vds6.py (99%) rename examples/{hexrays => decompiler}/vds7.py (95%) rename examples/{hexrays => decompiler}/vds8.py (96%) rename examples/{hexrays => decompiler}/vds_create_hint.py (94%) rename examples/{hexrays => decompiler}/vds_hooks.py (88%) rename examples/{hexrays => decompiler}/vds_modify_user_lvars.py (96%) rename examples/{hexrays => decompiler}/vds_xrefs.py (99%) create mode 100644 examples/disassembler/add_frame_member.py rename examples/{idphooks => disassembler}/ana_emu_out.py (94%) rename examples/{idphooks => disassembler}/assemble.py (94%) rename examples/{core => disassembler}/custom_data_types_and_formats.py (96%) rename examples/{core => disassembler}/dump_extra_comments.py (97%) rename examples/{core => disassembler}/dump_flowchart.py (99%) rename examples/{analysis => disassembler}/dump_func_info.py (98%) create mode 100644 examples/disassembler/dump_line_sections.py create mode 100644 examples/disassembler/find_string.py create mode 100644 examples/disassembler/func_ti_changed_listener.py rename examples/{core => disassembler}/install_user_defined_prefix.py (89%) rename examples/{core => disassembler}/list_bookmarks.py (95%) rename examples/{core => disassembler}/list_function_items.py (96%) rename examples/{core => disassembler}/list_imports.py (97%) rename examples/{core => disassembler}/list_patched_bytes.py (96%) rename examples/{core => disassembler}/list_problems.py (90%) rename examples/{core => disassembler}/list_segment_functions.py (84%) rename examples/{core => disassembler}/list_segment_functions_using_idautils.py (83%) rename examples/{core => disassembler}/list_strings.py (89%) create mode 100644 examples/disassembler/list_struct_accesses.py rename examples/{idbhooks => disassembler}/log_idb_events.py (79%) create mode 100644 examples/disassembler/log_idp_events.py rename examples/{idbhooks => disassembler}/operand_changed.py (92%) rename examples/{core => disassembler}/produce_lst_file.py (93%) rename examples/{idbhooks => disassembler}/replay_prototypes_changes.py (97%) delete mode 100644 examples/index.css delete mode 100644 examples/index.html delete mode 100644 examples/index.js rename examples/{ => misc}/cvt64/py_cvt64_sample.py (91%) rename examples/{core => misc}/extend_idc.py (89%) rename examples/{core => misc}/idapythonrc.py (97%) rename examples/{ => misc}/merge/py_mex1.py (92%) rename examples/{ => misc}/merge/py_mex3.py (91%) create mode 100644 examples/types/apply_callee_tinfo.py create mode 100644 examples/types/change_stkvar_name.py create mode 100644 examples/types/change_stkvar_type.py create mode 100644 examples/types/create_array.py create mode 100644 examples/types/create_bfstruct.py create mode 100644 examples/types/create_bmenum.py create mode 100644 examples/types/create_libssh2_til.py create mode 100644 examples/types/create_struct_by_member.py create mode 100644 examples/types/create_struct_by_parsing.py rename examples/{core => types}/create_structure_programmatically.py (50%) create mode 100644 examples/types/create_union_by_member.py create mode 100644 examples/types/create_user_shared_data.py create mode 100644 examples/types/del_struct_members.py create mode 100644 examples/types/gap_size_align_snippet.py create mode 100644 examples/types/get_best_fit_member.py create mode 100644 examples/types/get_innermost_member.py create mode 100644 examples/types/import_type_from_til.py create mode 100644 examples/types/insert_struct_member.py create mode 100644 examples/types/list_enum_member.py create mode 100644 examples/types/list_frame_info.py create mode 100644 examples/types/list_func_details.py rename examples/{core => types}/list_stkvar_xrefs.py (50%) create mode 100644 examples/types/list_struct_member.py create mode 100644 examples/types/list_struct_xrefs.py create mode 100644 examples/types/list_union_member.py create mode 100644 examples/types/mark_func_spoiled.py create mode 100644 examples/types/modify_struct_member.py create mode 100644 examples/types/operand_to_struct_member.py create mode 100644 examples/types/print_stkvar_xrefs.py create mode 100644 examples/types/setpehdr.py create mode 100644 examples/types/visit_tinfo.py rename examples/{core => ui}/actions.py (99%) rename examples/{core => ui}/add_hotkey.py (93%) rename examples/{core => ui}/auto_instantiate_widget_plugin.py (98%) rename examples/{core => ui}/colorize_disassembly.py (89%) rename examples/{core => ui}/colorize_disassembly_on_the_fly.py (98%) rename examples/{core => ui}/custom_cli.py (70%) rename examples/{core => ui}/dump_selection.py (92%) rename examples/{widgets => ui}/forms/askusingform.py (99%) rename examples/{widgets => ui}/graphs/custom_graph_with_actions.py (99%) rename examples/{widgets => ui}/graphs/sync_two_graphs.py (97%) rename examples/{widgets => ui}/idaview/wrap_idaview.py (97%) rename examples/{widgets => ui}/listings/custom_viewer.py (99%) rename examples/{widgets => ui}/listings/jump_next_comment.py (99%) rename examples/{widgets => ui}/listings/save_and_restore_listing_pos.py (91%) rename examples/{widgets => ui}/misc/add_menus.py (97%) rename examples/{ => ui}/pyqt/inject_command.py (98%) rename examples/{ => ui}/pyqt/paint_over_graph.py (97%) rename examples/{ => ui}/pyqt/paint_over_navbar.py (97%) rename examples/{ => ui}/pyqt/populate_pluginform_with_pyqt_widgets.py (92%) rename examples/{core => ui}/register_timer.py (92%) rename examples/{widgets => ui}/tabular_views/custom/choose.py (98%) rename examples/{widgets => ui}/tabular_views/custom/choose_multi.py (94%) rename examples/{widgets => ui}/tabular_views/custom/chooser_with_folders.py (98%) rename examples/{widgets => ui}/tabular_views/custom/func_chooser.py (95%) rename examples/{widgets => ui}/tabular_views/custom/lazy_loaded_chooser.py (90%) rename examples/{widgets => ui}/tabular_views/string_window/show_selected_strings.py (97%) rename examples/{core => ui}/trigger_actions_programmatically.py (97%) rename examples/{ => ui}/uihooks/func_chooser_coloring.py (85%) rename examples/{ => ui}/uihooks/lines_rendering.py (98%) rename examples/{ => ui}/uihooks/log_misc_events.py (98%) rename examples/{ => ui}/uihooks/prevent_jump.py (89%) rename examples/{widgets => ui}/waitbox/show_and_hide_waitbox.py (93%) delete mode 100644 libpython3.tbd create mode 100644 pywraps/py_bytes_find_bytes.hpp create mode 100644 pywraps/py_bytes_find_bytes.py create mode 100644 pywraps/py_fpro_end.py create mode 100644 pywraps/py_kernwin_end.py create mode 100644 pywraps/py_moves_end.py create mode 100644 pywraps/py_netnode_end.py delete mode 100644 pywraps/py_struct.hpp delete mode 100644 swig/enum.i create mode 100644 swig/libfuncs.i delete mode 100644 swig/struct.i create mode 100644 swig/undo.i create mode 100644 til_api_improvements.md create mode 100644 tools/astor_0_8_1/VERSION create mode 100644 tools/astor_0_8_1/__init__.py create mode 100644 tools/astor_0_8_1/code_gen.py create mode 100644 tools/astor_0_8_1/codegen.py create mode 100644 tools/astor_0_8_1/file_util.py create mode 100644 tools/astor_0_8_1/node_util.py create mode 100644 tools/astor_0_8_1/op_util.py create mode 100644 tools/astor_0_8_1/rtrip.py create mode 100644 tools/astor_0_8_1/source_repr.py create mode 100644 tools/astor_0_8_1/string_repr.py create mode 100644 tools/astor_0_8_1/tree_walk.py delete mode 100644 tools/collected_traces.txt create mode 100644 tools/docs/templates/md.mako delete mode 100644 tools/examples_index_template.html delete mode 100644 tools/genhooks/all_recipes.py create mode 100644 tools/genhooks/recipe_index.py delete mode 100644 tools/inject_pydoc.py delete mode 100644 tools/inject_pydoc/bytes.py delete mode 100644 tools/inject_pydoc/idp.py delete mode 100644 tools/inject_pydoc_cases.txt create mode 100644 tools/pydoc_injection.py create mode 100644 tools/pypasses.py create mode 100644 tools/pypasses/__init__.py create mode 100644 tools/pypasses/argsify_for_dispatching_cpp.py create mode 100644 tools/pypasses/doxy/__init__.py create mode 100644 tools/pypasses/inject_doxygen.py create mode 100644 tools/pypasses/proto_fix_known_types.py create mode 100644 tools/pypasses/proto_overrides.py create mode 100644 tools/pypasses/pydoc_overrides.py create mode 100644 tools/pypasses/return_type_from_cpp_wrapper.py diff --git a/PyQt5-shims/QtCore.py b/PyQt5-shims/QtCore.py new file mode 100644 index 0000000..c92b515 --- /dev/null +++ b/PyQt5-shims/QtCore.py @@ -0,0 +1 @@ +from PySide6.QtCore import * diff --git a/PyQt5-shims/QtGui.py b/PyQt5-shims/QtGui.py new file mode 100644 index 0000000..05af839 --- /dev/null +++ b/PyQt5-shims/QtGui.py @@ -0,0 +1 @@ +from PySide6.QtGui import * diff --git a/PyQt5-shims/QtWidgets.py b/PyQt5-shims/QtWidgets.py new file mode 100644 index 0000000..4b24a28 --- /dev/null +++ b/PyQt5-shims/QtWidgets.py @@ -0,0 +1 @@ +from PySide6.QtWidgets import * diff --git a/PyQt5-shims/__init__.py b/PyQt5-shims/__init__.py new file mode 100644 index 0000000..e845f43 --- /dev/null +++ b/PyQt5-shims/__init__.py @@ -0,0 +1,17 @@ +print("#" * 70) +print("""# Please note that IDA is now using Qt 6, and PyQt5 +# support will be dropped eventually. +# It is recommended to port your scripts/plugins to PySide6 +# as soon as possible. +# Essentially, that means rewriting statement such as: +# +# import PyQt5 +# import PyQt5.QtWidgets +# from PyQt5.QtGui import QGuiApplication +# +# into: +# +# import PySide6 +# import PySide6.QtWidgets +# from PySide6.QtGui import QGuiApplication""") +print("#" * 70) diff --git a/PyQt5-shims/sip.py b/PyQt5-shims/sip.py new file mode 100644 index 0000000..dcf2c80 --- /dev/null +++ b/PyQt5-shims/sip.py @@ -0,0 +1 @@ +# Placeholder diff --git a/README.md b/README.md index 000463f..b11e299 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Latest stable versions of IDAPython are available from ## Resources The full function cross-reference is readable online at - https://www.hex-rays.com/products/ida/support/idapython_docs/ + https://python.docs.hex-rays.com Mailing list for the project is hosted by Google Groups at https://groups.google.com/g/idapython diff --git a/README_python3.txt b/README_python3.txt index 156f4c6..fa40c6e 100644 --- a/README_python3.txt +++ b/README_python3.txt @@ -13,8 +13,3 @@ please run `idapyswitch` from the IDA 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. - -On Windows, you may need to run it as administrator -so it can patch sip.pyd (library required for PyQt bindings). - - diff --git a/STATUS.txt b/STATUS.txt index aa4a35d..a09e007 100644 --- a/STATUS.txt +++ b/STATUS.txt @@ -21,7 +21,6 @@ dbg.hpp - INCOMPLETE (SWIGs and lot of fixing to do) demangle.hpp - EXCLUDED diskio.hpp - INCOMPLETE (no SWIGs, some unwrapped) entry.hpp - COMPLETE -enum.hpp - COMPLETE err.h - EXCLUDED exehdr.h - EXCLUDED expr.hpp - COMPLETE (necessary SWIGs) @@ -57,7 +56,6 @@ segment.hpp - COMPLETE sistack.hpp - EXCLUDED segregs.hpp - INCOMPLETE (not wrapped at all) strlist.hpp - COMPLETE -struct.hpp - COMPLETE typeinf.hpp - INCOMPLETE (no SWIGs, lot of fixing to do) ua.hpp - INCOMPLETE (SWIGs and lot of fixing to do) va.hpp - EXCLUDED diff --git a/Scripts/CallStackWalk.py b/Scripts/CallStackWalk.py index 98ba75a..835acf0 100644 --- a/Scripts/CallStackWalk.py +++ b/Scripts/CallStackWalk.py @@ -4,7 +4,7 @@ A script that tries to determine the call stack Run the application with the debugger, suspend the debugger, select a thread and finally run the script. -Copyright (c) 1990-2024 Hex-Rays +Copyright (c) 1990-2025 Hex-Rays ALL RIGHTS RESERVED. """ import ida_ua @@ -169,7 +169,7 @@ def main(): return # get all debug namesp - dn = ida_name.get_debug_names(ida_ida.cvar.inf.min_ea, ida_ida.cvar.inf.max_ea) + dn = ida_name.get_debug_names(ida_ida.inf_get_min_ea(), ida_ida.inf_get_max_ea()) # initiate a nearest name search (using debug names) nn = ida_name.NearestName(dn) diff --git a/Scripts/DrvsDispatch.py b/Scripts/DrvsDispatch.py index c6464de..1eda3ab 100644 --- a/Scripts/DrvsDispatch.py +++ b/Scripts/DrvsDispatch.py @@ -2,7 +2,7 @@ A script to demonstrate how to send commands to the debugger and then parse and use the output in IDA -Copyright (c) 1990-2024 Hex-Rays +Copyright (c) 1990-2025 Hex-Rays ALL RIGHTS RESERVED. """ diff --git a/Scripts/ExchainDump.py b/Scripts/ExchainDump.py index 4f1c6e0..fe22061 100644 --- a/Scripts/ExchainDump.py +++ b/Scripts/ExchainDump.py @@ -2,7 +2,7 @@ This script shows how to send debugger commands and use the result in IDA -Copyright (c) 1990-2024 Hex-Rays +Copyright (c) 1990-2025 Hex-Rays ALL RIGHTS RESERVED. """ diff --git a/Scripts/FindInstructions.py b/Scripts/FindInstructions.py index 4158053..e84682c 100644 --- a/Scripts/FindInstructions.py +++ b/Scripts/FindInstructions.py @@ -13,7 +13,7 @@ The general syntax is: * To specify in which context the instructions should be assembled, pass asm_where=ea: find("jmp dword ptr [esp]", asm_where=here()) -Copyright (c) 1990-2024 Hex-Rays +Copyright (c) 1990-2025 Hex-Rays ALL RIGHTS RESERVED. """ from __future__ import print_function @@ -27,7 +27,6 @@ import ida_kernwin import ida_bytes import ida_ua import ida_ida -import ida_search import ida_funcs import idautils @@ -76,10 +75,10 @@ def FindInstructions(instr, asm_where=None): # find all binary strings print("Searching for: [%s]" % bin_str) - ea = ida_ida.cvar.inf.min_ea + ea = ida_ida.inf_get_min_ea() ret = [] while True: - ea = ida_search.find_binary(ea, ida_idaapi.BADADDR, bin_str, 16, ida_search.SEARCH_DOWN) + ea = ida_bytes.find_bytes(bin_str, ea, radix=16) if ea == ida_idaapi.BADADDR: break ret.append(ea) diff --git a/Scripts/SEHGraph.py b/Scripts/SEHGraph.py index 88aae57..b6d0bc0 100644 --- a/Scripts/SEHGraph.py +++ b/Scripts/SEHGraph.py @@ -4,7 +4,7 @@ A script that graphs all the exception handlers in a given process It will be easy to see what thread uses what handler and what handlers are commonly used between threads -Copyright (c) 1990-2024 Hex-Rays +Copyright (c) 1990-2025 Hex-Rays ALL RIGHTS RESERVED. """ from __future__ import print_function diff --git a/Scripts/VaDump.py b/Scripts/VaDump.py index 078d259..cc7adfe 100644 --- a/Scripts/VaDump.py +++ b/Scripts/VaDump.py @@ -2,7 +2,7 @@ This script shows how to send debugger commands and use the result in IDA -Copyright (c) 1990-2024 Hex-Rays +Copyright (c) 1990-2025 Hex-Rays ALL RIGHTS RESERVED. """ diff --git a/Scripts/VirusTotal.py b/Scripts/VirusTotal.py index db43ba0..cab751e 100644 --- a/Scripts/VirusTotal.py +++ b/Scripts/VirusTotal.py @@ -2,7 +2,7 @@ from __future__ import print_function # ----------------------------------------------------------------------- # VirusTotal IDA Plugin # By Elias Bachaalany -# (c) Hex-Rays 2011-2024 +# (c) Hex-Rays 2011-2025 # # Special thanks: # - VirusTotal team diff --git a/api-examples/api-examples-toc.md b/api-examples/api-examples-toc.md new file mode 100644 index 0000000..94cf8dc --- /dev/null +++ b/api-examples/api-examples-toc.md @@ -0,0 +1,72 @@ +# API examples + + +This file contains the list of all the IDA python examples. + + +## func + +* decompile_func_and_callees.py +* list_func_callees.py +* print_location_info.py +* sort_func_by_calls.py + +## gdl + +* colorize_graph_node.py + +## hexrays + +* hr_decompile_func_and_callees.py + +## idb + +* frame_event_listener.py +* lt_event_listener.py + +## idp + +* log_idp_events.py + +## inf + +* print_basic_info.py +* print_basic_info_plugin.py + +## misc + +* find_binary_pattern.py + +## segm + +* list_imports.py + +## typeinf + +* add_frame_member.py +* apply_callee_tinfo.py +* change_stkvar_name.py +* change_stkvar_type.py +* create_array.py +* create_bfstruct.py +* create_bmenum.py +* create_libssh2_til.py +* create_structs.py +* create_user_shared_data.py +* del_struct_members.py +* func_ti_changed_listener.py +* gap_size_align_snippet.py +* import_type_from_til.py +* insert_gap.py +* list_enum_member.py +* list_frame_info.py +* list_func_details.py +* list_stkvar_xrefs.py +* list_struct_accesses.py +* list_struct_member.py +* list_struct_xrefs.py +* list_union_member.py +* mark_func_spoiled.py +* operand_to_struct_member.py +* setpehdr.py +* visit_tinfo.py diff --git a/api-examples/dbg/filemon.py b/api-examples/dbg/filemon.py new file mode 100644 index 0000000..3490300 --- /dev/null +++ b/api-examples/dbg/filemon.py @@ -0,0 +1,104 @@ +import ida_idaapi +import ida_dbg +import ida_kernwin +import ida_name +import ida_idd +import ida_bytes +import ida_ida +import ida_ua +import idc +import os + +ST_NONE = 0 +ST_RUNTO = 1 +ST_ADD_BPT = 2 +ST_MONITOR = 3 + +func_name = 'kernelbase_CreateFileW' + +class filemon_dbg_hook_t(ida_dbg.DBG_Hooks): + def __init__(self): + ida_dbg.DBG_Hooks.__init__(self) + self.func_entry_ea = ida_idaapi.BADADDR + ida_dbg.run_to(ida_ida.inf_get_start_ea()) + self.stage = ST_RUNTO + + def dbg_process_start(self, pid, tid, ea, path, base, size): + name = os.path.basename(path) + ida_kernwin.msg(f'Process started: {name}.\n\tLoad address: {base:x}\n\tPID: {pid:x}\n') + + def dbg_run_to(self, pid, tid=0, ea=0): + if self.stage == ST_RUNTO: + ida_kernwin.msg(f'Run to: {ea:x}\n') + self.stage = ST_ADD_BPT + + def dbg_suspend_process(self): + all_good = True + if self.stage == ST_ADD_BPT: + ida_dbg.refresh_debugger_memory() + + self.func_entry_ea = ida_name.get_name_ea(ida_idaapi.BADADDR, func_name) + if self.func_entry_ea == ida_idaapi.BADADDR: + all_good = False + ida_kernwin.msg('Could not resolve \n') + else: + ida_kernwin.msg(f'{func_name} found @ {self.func_entry_ea:x}. Setting breakpoint.\n') + if ida_dbg.add_bpt(self.func_entry_ea): + ida_kernwin.msg('Breakpoint added\n') + else: + ida_kernwin.msg('Failed to add the breakpoint.\n') + + if not all_good: + ida_dbg.request_exit_process() + ida_dbg.run_requests() + else: + ida_dbg.continue_process() + self.stage = ST_MONITOR + + def dbg_bpt(self, tid, bpt_ea): + if self.stage == ST_MONITOR: + ida_kernwin.msg(f'In dbg_bpt {bpt_ea:x}.\n') + + if bpt_ea == self.func_entry_ea: + ida_kernwin.msg('Trying to retreive RCX: ') + rcx_val = ida_idd.regval_t() + if not ida_dbg.get_reg_val('rcx', rcx_val): + ida_kernwin.msg('Could not get rcx register.\n') + return 0 + + fn_ea = rcx_val.ival + ida_kernwin.msg(f'{fn_ea:x}\n') + if not ida_bytes.is_mapped(fn_ea): + ida_dbg.invalidate_dbgmem_config() + + ida_dbg.invalidate_dbgmem_contents(fn_ea, 1024) + len = ida_bytes.get_max_strlit_length(fn_ea, idc.STRTYPE_C_16) + ida_kernwin.msg(f'String length: {len}.\n') + if len: + raw = ida_bytes.get_strlit_contents(fn_ea, len, idc.STRTYPE_C_16) + ida_kernwin.msg(f' CreateFile -> {raw.decode('UTF-8')}\n') + + ida_dbg.continue_process() + + return 0 + + def dbg_process_exit(self, pid, tid, ea, code): + if not self.func_entry_ea == ida_idaapi.BADADDR: + ida_dbg.del_bpt(self.func_entry_ea) + self.func_entry_ea = ida_idaapi.BADADDR + self.stage = ST_NONE + +try: + dbg_hook_stat = "un" + print("Filemon DBG hook: checking for hook...") + dbg_hook + print("Filemon DBG hook: unhooking....") + dbg_hook_stat2 = "" + dbg_hook.unhook() + del dbg_hook +except: + print("Filemon DBG hook: not installed, installing now....") + dbg_hook_stat = "" + dbg_hook_stat2 = "un" + dbg_hook = filemon_dbg_hook_t() + dbg_hook.hook() \ No newline at end of file diff --git a/api-examples/func/classify_ntdll_func.py b/api-examples/func/classify_ntdll_func.py new file mode 100644 index 0000000..6885700 --- /dev/null +++ b/api-examples/func/classify_ntdll_func.py @@ -0,0 +1,56 @@ +""" +summary: This script shows an example of function clasification + using the dirtree API. + +description: + In this example we calssify the functions of ntdll.dll into + three categories (there are more but three is enough for this + example): + * Runtime library (Rtl). + * System calls (Zw). + * Kernel internal (Ki) + For each category we create a corresponding folder in the functions + dirtreee. Then we iterates through all the functions and use the + folder name as filter: namely if a function name starts with 'Rtl' + it is moved to the Rtl folder and so on. + +level: intermediate. +""" +import ida_funcs +import ida_dirtree +import idautils + +lst = ['Rtl', 'Zw', 'Ki'] + +def main(): + # + # Get the functions standard dirtree. + # + dt = ida_dirtree.get_std_dirtree(ida_dirtree.DIRTREE_FUNCS) + + # + # Create the folders. + # + for folder in lst: + result = dt.mkdir(folder) + if result != ida_dirtree.DTE_OK and result != ida_dirtree.DTE_ALREADY_EXISTS: + print(f'Not able to create folder {folder} ({result:x})') + return + + # + # For all the function in the base directory, check that the function name + # starts with the provided prefix. If it does we try to move it to the + # corresponding folder. + # + for func_ea in idautils.Functions(): + name = ida_funcs.get_func_name(func_ea) + for func_prefix in lst: + if name and name.startswith(func_prefix): + if dt.isfile(name): + if dt.rename(name, f'{func_prefix}/{name}') != ida_dirtree.DTE_OK: + print(f'Not able to move {name} inside {func_prefix} folder') + else: + print(f'{name} moved in {func_prefix} folder') + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/api-examples/func/decompile_func_and_callees.py b/api-examples/func/decompile_func_and_callees.py new file mode 100644 index 0000000..6774058 --- /dev/null +++ b/api-examples/func/decompile_func_and_callees.py @@ -0,0 +1,76 @@ +import idautils +import ida_kernwin +import ida_funcs +import ida_ua +import ida_allins +import ida_ida +import ida_hexrays +import ida_lines +import idc + +def build_function_list(func): + func_list = [] + + items = ida_funcs.func_item_iterator_t(func) + for item in items: + is_jmp = False + + insn = ida_ua.insn_t() + if not ida_ua.decode_insn(insn, item): + continue + + if not insn.itype == ida_allins.NN_call and not insn.itype == ida_allins.NN_jmp: + continue + + if insn.itype == ida_allins.NN_jmp: + is_jmp = True + + for xref in idautils.CodeRefsFrom(item, 0): + callee = ida_funcs.get_func(xref) + if not callee: + print(f'Unable to retrieve function object for {xref:x}. Skipping.') + continue + + if is_jmp and callee.start_ea == func.start_ea: + continue + + if callee not in func_list: + func_list.append(callee) + + return func_list + + +def print_pseudo_code(cfunc): + sv = cfunc.get_pseudocode() + for sline in sv: + print(ida_lines.tag_remove(sline.line)) + print('') + + +def decompile_and_print(func): + func_list = build_function_list(func) + func_list = [func, *func_list] + + for item in func_list: + cfunc = ida_hexrays.decompile(item) + if not cfunc: + print(f'Unable to decompile function {ida_funcs.get_func_name(item.start_ea)}') + return False + print_pseudo_code(cfunc) + + +def main(): + if not ida_ida.inf_get_procname() == 'metapc': + return False + + if not ida_hexrays.init_hexrays_plugin(): + return False + + func = ida_funcs.get_func(idc.here()) + if not func: + print('Please put the cursor inside a function and retry.') + + decompile_and_print(func) + +ida_kernwin.msg_clear() +main() \ No newline at end of file diff --git a/api-examples/func/list_func_callees.py b/api-examples/func/list_func_callees.py new file mode 100644 index 0000000..c287fe8 --- /dev/null +++ b/api-examples/func/list_func_callees.py @@ -0,0 +1,55 @@ +""" +summary: List all the functions called by the one in which the + cursor is currently located. + +description: + If the cursor is located inside a function: + * get the function object + * get the function name + * get a function item iterator + * iterate through the items, and for each one decode it + * if the item is a call get the address of the callee + - get its name + - display its name its address and address of the call. + * if no calle is found print a statement indicating this fact. +""" +import idautils +import ida_kernwin +import ida_funcs +import ida_ua +import ida_allins +import ida_ida +import idc + +ida_kernwin.msg_clear() + +if ida_ida.inf_get_procname() == 'metapc': + func = ida_funcs.get_func(idc.here()) + if func: + has_callee = False + func_name = ida_funcs.get_func_name(func.start_ea) + if not func_name: + func_name = hex(func.start_ea) + print(f'Function {func_name} [{func.start_ea:x}] calls:') + + items = ida_funcs.func_item_iterator_t(func) + for item in items: + insn = ida_ua.insn_t() + if not ida_ua.decode_insn(insn, item): + continue + + if not insn.itype == ida_allins.NN_call: + continue + + if not has_callee: + has_callee = True + + for xref in idautils.CodeRefsFrom(item, 0): + print(f'\t- {ida_funcs.get_func_name(xref)} [{xref:x}] @{item:x}') + + if not has_callee: + print('\t- no function.') + else: + print('Please place the cursor inside a function and retry.') +else: + print('This script will propely work for "metapc" procmod only.') diff --git a/api-examples/func/print_location_info.py b/api-examples/func/print_location_info.py new file mode 100644 index 0000000..4dd9608 --- /dev/null +++ b/api-examples/func/print_location_info.py @@ -0,0 +1,50 @@ +""" +summary: Print argument location information. + +description: + In this script, we iterate through a function + arguments and display information about their + location and size. For this we: + * get the function type information + * iterate through the arguments + * for each of them we print its location (register or stack), + offset (if in stack) and size +""" +import ida_nalt +import ida_funcs +import ida_typeinf +import idc +import ida_kernwin + +def print_argument_locations(func): + tif = ida_typeinf.tinfo_t() + if ida_nalt.get_tinfo(tif, func.start_ea): + fi = ida_typeinf.func_type_data_t() + if tif.get_func_details(fi): + if fi.size(): + print('Argument location:') + for item in fi: + if item.name: + ida_kernwin.msg(f'\t{item.name}: ') + else: + ida_kernwin.msg(f'\t????: ') + location = ida_typeinf.print_argloc(item.argloc) + if location: + ida_kernwin.msg(f'{location}.') + elif item.argloc.in_stack: + ida_kernwin.msg(f'stack({item.argloc.stkoff():x}).') + print(f'{item.type.get_size()}') + else: + print('No arguments') + else: + print('Problems retrieving function details') + else: + print('Problem retrieving function type info.') + + +if __name__ == '__main__': + func = ida_funcs.get_func(idc.here()) + if not func: + print('Place the cursor inside a function and retry.') + else: + print_argument_locations(func) \ No newline at end of file diff --git a/api-examples/func/sort_func_by_calls.py b/api-examples/func/sort_func_by_calls.py new file mode 100644 index 0000000..b18f7aa --- /dev/null +++ b/api-examples/func/sort_func_by_calls.py @@ -0,0 +1,38 @@ +""" +summary: Print the list of the functions in the currently loaded + IDB sorted (descending) by the number of code reference to + each of them. + +description: + In this script, we iterate through the list of function entry + points and fore each of them we: + * get its name + * get the number of code reference made to it + * put it in the map. + Once done we: + * sort the map in descending number of calls + * print it. +""" +import ida_kernwin +import ida_funcs +import idc +import idautils + +ida_kernwin.msg_clear() + +func_map = {} +for funcea in idautils.Functions(): + func_name = ida_funcs.get_func_name(funcea) + if not func_name: + func_name = hex(funcea) + else: + func_name = idc.demangle_name(func_name, idc.get_inf_attr(idc.INF_LONG_DN)) + call_count = 0 + for xref in idautils.CodeRefsTo(funcea, 1): + call_count += 1 + if call_count: + func_map[func_name] = call_count + +func_map_by_calls = sorted(func_map.items(), key=lambda x:x[1], reverse=True) +for func, calls in func_map_by_calls: + print(f'{func} called {calls} time(s)') diff --git a/api-examples/gdl/colorize_graph_node.py b/api-examples/gdl/colorize_graph_node.py new file mode 100644 index 0000000..6e03540 --- /dev/null +++ b/api-examples/gdl/colorize_graph_node.py @@ -0,0 +1,15 @@ +import ida_graph +import ida_funcs +import ida_gdl +import ida_kernwin +import idc + +func = ida_funcs.get_func(idc.here()) +qflow = ida_gdl.qflow_chart_t("", func, 0, 0, 0) +for n in range(qflow.size()): + node = qflow[n] + print(f'Start ea : {node.start_ea:x}, end ea: {node.end_ea:x}, index: {n}') + ni = ida_graph.node_info_t() + ni.bg_color = 0xFF00 + ida_graph.set_node_info(func.start_ea, n, ni, ida_graph.NIF_BG_COLOR) +ida_kernwin.refresh_idaview_anyway() \ No newline at end of file diff --git a/api-examples/hexrays/hr_decompile_func_and_callees.py b/api-examples/hexrays/hr_decompile_func_and_callees.py new file mode 100644 index 0000000..2c0f490 --- /dev/null +++ b/api-examples/hexrays/hr_decompile_func_and_callees.py @@ -0,0 +1,74 @@ +""" +summary: Python plugin that decompiles a function and its callees. + +description: + This script does the same as decompile_func_and_callee but instead + of using the cross-references, uses a ctree visitor to build the + list of callees. +""" +import ida_hexrays +import ida_lines +import ida_funcs +import ida_kernwin + + +def find_calls(cfunc): + class finder_t(ida_hexrays.ctree_visitor_t): + def __init__(self): + ida_hexrays.ctree_visitor_t.__init__(self, ida_hexrays.CV_FAST | ida_hexrays.CV_INSNS) + + self.results = [] + return + + def visit_insn(self, inst): + if inst.op == ida_hexrays.cit_expr and inst.cexpr.op == ida_hexrays.cot_call: + self.results.append(inst.cexpr.x.obj_ea) + return 0 + + finder = finder_t() + finder.apply_to(cfunc.body, None) + return finder.results + + +def print_pseudo_code(cfunc): + sv = cfunc.get_pseudocode(); + for sline in sv: + print(ida_lines.tag_remove(sline.line)) + + +def main(): + if not ida_hexrays.init_hexrays_plugin(): + return False + + print("Hex-rays version %s has been detected" % ida_hexrays.get_hexrays_version()) + + f = ida_funcs.get_func(ida_kernwin.get_screen_ea()) + if f is None: + print("Please position the cursor within a function") + return True + + cfunc = ida_hexrays.decompile(f); + if cfunc is None: + print("Failed to decompile!") + return True + + print_pseudo_code(cfunc) + + lst = find_calls(cfunc) + lst = list(set(lst)) + already = [] + for ea in lst: + f = ida_funcs.get_func(ea) + if f is None: + continue + + cfunc = ida_hexrays.decompile(f); + if cfunc is None: + print("Failed to decompile!") + return True + print_pseudo_code(cfunc) + + return True + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/api-examples/idb/frame_event_listener.py b/api-examples/idb/frame_event_listener.py new file mode 100644 index 0000000..3f3f389 --- /dev/null +++ b/api-examples/idb/frame_event_listener.py @@ -0,0 +1,65 @@ +""" +summary: log various frame events. + +description: + hooks to be notified about frame IDP events, and + dump their information to the "Output" window. +""" +import inspect +import ida_idp +import ida_ua + +class frame_logger_hooks_t(ida_idp.IDB_Hooks): + def __init__(self): + ida_idp.IDB_Hooks.__init__(self) + self.inhibit_log = 0 + + def _format_value(self, v): + return str(v) + + def _log(self, msg=None): + if self.inhibit_log <= 0: + if msg: + print(f'>>> frame_logger_hooks_f: {msg}') + else: + stack = inspect.stack() + frame, _, _, _, _, _ = stack[1] + args, _, _, values = inspect.getargvalues(frame) + method_name = inspect.getframeinfo(frame)[2] + argstrs = [] + for arg in args[1:]: + argstrs.append("%s=%s" % (arg, self._format_value(values[arg]))) + print(f'>>> frame_logger_hooks_t.{method_name}: {", ".join(args)}') + return 0 + + def frame_udm_created(self, func_ea, udm): + return self._log() + + def frame_udm_deleted(self, func_ea, udm_tid, udm): + return self._log() + + def frame_udm_renamed(self, func_ea, udm, oldname): + return self._log() + + def frame_udm_changed(self, func_ea, udm_tid, udmold, udmnew): + return self._log() + + + +# Remove an existing hook on second run +try: + frame_idp_hook_stat = "un" + print("Frame IDP hook: checking for hook...") + framehook + print("Frame IDP hook: unhooking....") + frame_idp_hook_stat2 = "" + framehook.unhook() + del framehook +except: + print("Frame IDP hook: not installed, installing now....") + frame_idp_hook_stat = "" + frame_idp_hook_stat2 = "un" + framehook = frame_logger_hooks_t() + framehook.hook() + +print(f'Frame IDB hook {frame_idp_hook_stat}installed. Run the script again to {frame_idp_hook_stat2}install') \ No newline at end of file diff --git a/api-examples/idb/lt_event_listener.py b/api-examples/idb/lt_event_listener.py new file mode 100644 index 0000000..0800372 --- /dev/null +++ b/api-examples/idb/lt_event_listener.py @@ -0,0 +1,68 @@ +""" +summary: log various local type events. + +description: + hooks to be notified about local type IDP events, + and dump their information to the "Output" window +""" +import inspect +import ida_idp +import ida_ua + +class lt_logger_hooks_t(ida_idp.IDB_Hooks): + def __init__(self): + ida_idp.IDB_Hooks.__init__(self) + self.inhibit_log = 0 + + def _format_value(self, v): + return str(v) + + def _log(self, msg=None): + if self.inhibit_log <= 0: + if msg: + print(f'>>> lt_logger_hooks_f: {msg}') + else: + stack = inspect.stack() + frame, _, _, _, _, _ = stack[1] + args, _, _, values = inspect.getargvalues(frame) + method_name = inspect.getframeinfo(frame)[2] + argstrs = [] + for arg in args[1:]: + argstrs.append("%s=%s" % (arg, self._format_value(values[arg]))) + print(f'>>> lt_logger_hooks_t.{method_name}: {", ".join(args)}') + return 0 + + def lt_udm_created(self, udtname, udm): + msg = f'UDM {udm.name} has been created in UDT {udtname}' + return self._log(msg) + + def lt_udm_deleted(self, udtname, udm_tid): + msg = f'UDM tid {udm_tid:x} has been deleted from {udtname}' + return self._log(msg) + + def lt_udm_renamed(self, udtname, udm, oldname): + msg = f'UDM {oldname} from UDT {udtname} has been renamed to {udm.name}' + return self._log(msg) + + def lt_udm_changed(self, udtname, udm_tid, udmold, udmnew): + return self._log() + + + +# Remove an existing hook on second run +try: + idp_hook_stat = "un" + print("Local type IDB hook: checking for hook...") + lthook + print("Local type IDB hook: unhooking....") + idp_hook_stat2 = "" + lthook.unhook() + del lthook +except: + print("local type IDB hook: not installed, installing now....") + idp_hook_stat = "" + idp_hook_stat2 = "un" + lthook = lt_logger_hooks_t() + lthook.hook() + +print(f'Local type IDB hook {idp_hook_stat}installed. Run the script again to {idp_hook_stat2}install') \ No newline at end of file diff --git a/api-examples/idp/log_idp_events.py b/api-examples/idp/log_idp_events.py new file mode 100644 index 0000000..f910ccc --- /dev/null +++ b/api-examples/idp/log_idp_events.py @@ -0,0 +1,677 @@ +""" +summary: being notified, and logging some IDP events + +description: + hooks to be notified about certain IDP events, and + dump their information to the "Output" window + See enum event_t in idp.hpp for additional. +""" +import inspect +import ida_idp +import ida_ua + +class idp_logger_hooks_t(ida_idp.IDP_Hooks): + def __init__(self): + ida_idp.IDP_Hooks.__init__(self) + self.inhibit_log = 0 + + def _format_value(self, v): + return str(v) + + def _log(self, msg=None): + if self.inhibit_log <= 0: + if msg: + print(f'>>> idp_logger_hooks_f: {msg}') + else: + stack = inspect.stack() + frame, _, _, _, _, _ = stack[1] + args, _, _, values = inspect.getargvalues(frame) + method_name = inspect.getframeinfo(frame)[2] + argstrs = [] + for arg in args[1:]: + argstrs.append("%s=%s" % (arg, self._format_value(values[arg]))) + print(f'>>> idp_logger_hooks_t.{method_name}: {", ".join(args)}') + return 0 + + def ev_init(self, idp_modname): + """ + The IDP module is just loaded. + idp_modname - processor module name + Returns: <0 on failure + """ + return self._log(f'idp_logger_hooks_t.ev_init(self, {idp_modname})') + + def ev_term(self): + """ + The IDP module is being unloaded + """ + return self._log() + + def ev_newprc(self, nproc, keep_cfg): + """ + Before changing proccesor type + nproc - processor number in the array of processor names + Returns: >=0-ok,<0-prohibit + """ + return self._log() + + def ev_newasm(self, asmnum): + """ + Before setting a new assembler. + """ + return self._log() + + def ev_newfile(self, fname): + """ + A new file has been loaded. + """ + return self._log() + + def ev_oldfile(self, filename): + """ + An old file has been loaded. + """ + return self._log() + + def ev_newbinary(self, filename, fileoff, basepara, binoff, nbytes): + """ + Before loading a binary file + """ + return self._log() + + def ev_endbinary(self, ok): + """ + After loading a binary file + Returns: >=0-ok + """ + return self._log() + + def ev_set_idp_options(self, keyword, value_type, value, idb_loaded): + """ + Set IDP-specific option + Returns: 1-ok, 0-not implemented, -1-error + """ + #msg = f'KEY: {keyword}, TYPE: {value_type}, value: {value}, loaded: {idb_loaded}' + return self._log() + + def ev_set_proc_options(self, options, confidence): + """ + Called if the user specified an option string in the command line: + Returns: <0-bad option string + """ + return self._log() + + def ev_ana_insn(self, insn): + """ + Decodes an instruction into insn + Returns: insn.size (=the size of the decoded instruction) or zero + """ + self._log() + return insn.size + + def ev_emu_insn(self, insn): + """ + 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. + Returns: -1, the kernel will delete the instruction. + """ + return self._log() + + def ev_out_header(self, ctx): + """ + Function to produce start of disassembled text + """ + self._log() + + def ev_out_footer(self, ctx): + """ + Function to produce end of disassembled text + """ + self._log() + + def ev_out_segstart(self, ctx, segment): + """ + Function to produce start of segment + Returns: 1-ok, 0-not implemented + """ + return self._log() + + def ev_out_insn(self, ctx): + """ + Generate text representation of an instruction in 'ctx.insn' structure. + This function shouldn't change the database, flags or anything else. + All these actions should be performed only by u_emu() function. + Returns: nothing + """ + self._log() + + def ev_out_segstart(self, ctx, segment): + """ + Function to produce start of segment + Returns: 1-ok, 0-not implemented + """ + return self._log() + + def ev_out_segend(self, ctx, segment): + """ + Function to produce end of segment + Returns: 1-ok, 0-not implemented + """ + return self._log() + + def ev_out_assumes(self, ctx): + """ + Function to produce assume directives + Returns: 1-ok, 0-not implemented + """ + return self._log() + + def ev_out_mnem(self, ctx): + """ + Generate text representation of an instruction in 'ctx.insn' + Returns: 1-if appended the mnemonics, 0-not implemented. + """ + return self._log() + + def ev_out_operand(self, ctx, op): + """ + Generate text representation of an instructon operand. + This function shouldn't change the database, flags or anything else. + All these actions should be performed only by u_emu() function. + Returns: 1-ok, -1-operand is hidden + """ + return self._log() + + def ev_out_data(self, ctx, analyze_only): + """ + Generate text represenation of data items + This function MAY change the database and create cross-references, etc. + Returns: 1-ok, 0-not implemented + """ + return self._log() + + def ev_out_label(self, ctx, label): + """ + The kernel is going to generate an instruction label line + or a function header. + Returns: <0-the kernel should not generate the label, 0-not implemented/continue + """ + return self._log() + + def ev_out_special_item(self, ctx, segtype): + """ + Generate text representation of an item in a special segment + i.e. absolute symbols, externs, communal definitions etc. + Returns: 1-ok, 0-not implemented, -1-overflow + """ + return self._log() + + def ev_gen_stkvar_def(self, ctx, mptr, v): + """ + Generate stack variable definition line. + Default line is varname = type ptr value, + where 'type' is one of byte,word,dword,qword,tbyte. + Returns: 1-ok, 0-not implemented. + """ + return self._log() + + def ev_gen_regvar_def(self, ctx, v): + """ + Generate register variable definition line. + Returns: >0-ok, 0-not implemented. + """ + return self._log() + + def ev_gen_src_file_lnnum(self, ctx, filename, lnnum): + """ + Callback: generate analog of#line "file.c" 123 + directive. + Returns: 1-ok, 0-not implemented + """ + return self._log() + + def ev_creating_segm(self, s): + """ + A new segment is about to be created. + Returns 1-ok, <0-should not be created + """ + return self._log() + + def ev_moving_segm(self, segment, to, flags): + """ + May the kernel move the segment? + returns: 0-yes, <0-the kernel should stop + """ + return self._log() + + def ev_coagulate(self, start_ea): + """ + Try to define some unexplored bytes + This notification will be called if the + kernel tried all possibilities and could + not find anything more useful than to + convert to array of bytes. + The module can help the kernel and convert + the bytes into something more useful. + Returns: number of converted bytes + """ + return self._log() + + def ev_undefine(self, ea): + """ + An item in the database (insn or data) is being deleted. + Returns: >=0-ok, <0-the kernel should stop + """ + return self._log() + + def ev_treat_hindering_item(self, hindering_item_ea, new_item_flags, new_item_ea, new_item_length): + """ + An item hinders creation of another item + Returns: 0-no reaction, <0-the kernel may delete the hindering item + """ + return self._log() + + def ev_rename(self, ea, new_name): + """ + The kernel is going to rename a byte + Returns: <0-then the kernel should not rename it + """ + return self._log() + + def ev_is_far_jump(self, icode): + """ + Is indirect far jump or call instruction? + meaningful only if the processor has 'near' and 'far' reference types. + Returns: 0-not implemented, 1-yes, -1-no + """ + return self._log() + + def ev_is_sane_insn(self, insn, no_crefs): + """ + Is the instruction sane for the current file type? + Returns: >=0-ok, <0-no + """ + return self._log() + + def ev_is_cond_insn(self, insn): + """ + Is conditional instruction? + Returns: 1-yes, -1-no, 0-not implemented. + """ + return self._log() + + def ev_is_call_insn(self, insn): + """ + Is the instruction a "call"? + Returns: 0-unknown, <0-no, 1-yes + """ + return self._log() + + def ev_is_ret_insn(self, insn, flags): + """ + Is the instruction a "return"? + Returns: 0-unknown, <0-no, 1-yes + """ + return self._log() + + def ev_may_be_func(self, insn, state): + """ + Can a function start here? + Returns: probability 0..100 + """ + return self._log() + + def ev_is_basic_block_end(self, insn, call_insn_stops_block): + """ + Is the current instruction end of a basic block? + Returns: 0-unknown, -1-no, 1-yes + """ + return self._log() + + def ev_is_indirect_jump(self, insn): + """ + Callback: determine if instruction is an indrect jump + If CF_JUMP bit cannot describe all jump types + jumps, please define this callback. + Returns: 0-use CF_JUMP, 1-no, 2-yes + """ + return self._log() + + def ev_is_switch(self, swi, insn): + """ + Find 'switch' idiom or override processor module's + decision. + Returns: 1-switch found, -1-no switch found, 0-not implmented + """ + return self._log() + + def ev_calc_switch_cases(self, casevec, targets, insn_ea, si): + """ + Calculate case values and targets for a custom jump table. + Returns: 1-ok, <=0-failed + """ + return self._log() + + def ev_create_switch_xrefs(self, jumpea, swi): + """ + Create xrefs for a custom jump table + Must return 1 + """ + self._log() + return 1 + + def ev_is_align_insn(self, ea): + """ + Is the instruction created only for alignment purposes? + Returns: number of bytes in the instruction + """ + return self._log() + + def ev_is_alloca_probe(self, ea): + """ + Does the function at 'ea' behave as __alloca_probe? + Returns: 1-yes, 0-no + """ + return self._log() + + def ev_delay_slot_insn(self, ea, bexec, fexec): + """ + Get delay slot instruction. + Returns 1-yes, <=O-ordianry insn. + """ + return self._log() + + def ev_is_sp_based(self, mode, insn, op): + """ + Check whether the operand is relative to stack pointer or frame pointer. + This function is used to determine how to output a stack variable + This function may be absent. If it is absent, then all operands + are sp based by default. + Define this function only if some stack references use frame pointer + instead of stack pointer. + Returns: 0-not implemented, 1-ok + """ + return self._log() + + def ev_can_have_type(self, op): + """ + Can the operand have a type as offset, segment, decimal, etc? + (for example, a register AX can't have a type, meaning that the user can't + change its representation. see bytes.hpp for information about types and flags) + Returns: 0-unknown, <0-no, 1-yes + """ + return self._log() + + def ev_cmp_operands(self, op1, op2): + """ + Compare instruction operands. + Returns 1-equal, -1-not equal, 0-not implemented + """ + return self._log() + + def ev_adjust_refinfo(self, ri, ea, n, fd): + """ + Called from apply_fixup before converting operand to reference. + Can be used for changing the reference info. + Returns: <0-do not create an offset, 0-not implemented + """ + return self._log() + + def ev_get_operand_string(self, buf, insn, opnum): + """ + Request text string for operand. + Returns: 0-no string (or empty), >0-original string length (without final 0) + """ + return self._log() + + def ev_get_reg_name(self, buf, reg, width, reghi): + """ + Generate text representation of a register. + Most processor modules do not need to implement this callback. + Returns: -1-error, strlen(buf)-success + """ + return self._log() + + def ev_str2reg(self, regname): + """ + Convert a register name to a register number + Returns: 0-not implemented, register number + 1 + """ + return self._log() + + def ev_get_autocmt(self, insn): + """ + Get instruction comment. 'insn' describes the instruction in question + @return: 1-new comment has been generated, 0-not been handled. + """ + return self._log() + + def ev_get_bg_color(self, color, ea): + """ + Get item background color. + Plugins can hook this callback to color disassembly lines dynamically. + Returns: 0-not implemented, 1-color set + """ + return self._log() + + def ev_is_jump_func(self, pfn, jump_target, func_pointer): + """ + Is the function a trivial "jump" function? + Returns: <0-no, 0-don't know, 1-yes + """ + return self._log() + + def ev_func_bounds(self, possible_return_code, pfn, max_func_end_ea): + """ + Find_func_bounds() finished its work. + The module may fine tune the function bounds. + Returns: None + """ + return self._log() + + def ev_verify_sp(self, pfn): + """ + All function instructions have been analyzed. + Now the processor module can analyze the stack pointer + for the whole function + Returns: 0-ok, <0-bad stack pointer + """ + return self._log() + + def ev_verify_noreturn(self, pfn): + """ + The kernel wants to set 'noreturn' flags for a function + Returns: 0-ok, <0-do not set 'noreturn' flag + """ + return self._log() + + def ev_create_func_frame(self, pfn): + """ + Create a function frame for a newly created function. + Set up frame size, its attributes etc. + Returns: 1-ok, 0-not implemented + """ + return self._log() + + def ev_get_frame_retsize(self, frsize, pfn): + """ + Get size of function return address in bytes + If this function is absent, the kernel will assume + 8 bytes for 64-bit function,4 bytes for 32-bit + function, c2 bytes otherwise. + Returns 1-ok, 0-not implemented + """ + return self._log() + + def ev_get_stkvar_scale_factor(self): + """ + Should stack variable references be multiplied by + a coefficient before being used in the stack frame? + Currently used by TMS320C55 because the references into + the stack should be multiplied by 2. + Returns: 0-not implemented, >0-scaling factor + """ + return self._log() + + def ev_demangle_name(self, out, res , demreq): + """ + Demangle a C++ (or another language) name into a user-readable string. + This event is called by ::demangle_name(). + Returns: 0-not implemented, 1-success + """ + return self._log() + + def ev_add_cref(self, frm, to, type): + """ + A code reference is being created. + Returns: 0-not implemented, <0-cancel cref creation + """ + return self._log() + + def ev_add_dref(self, frm, to, type): + """ + A data reference is being created. + Returns: 0-not implemented, <0-cancel dref creation + """ + return self._log() + + def ev_del_cref(self, frm, to, expand): + """ + A code reference is being deleted. + Returns: 0-not implemented, <0-cancel cref deletion + """ + return self._log() + + def ev_del_dref(self, frm, to): + """ + A data reference is being deleted. + Retuns: 0-not implemented, <0-cancel dref deletion + """ + return self._log() + + def ev_coagulate_dref(self, from_ea, to_ea, may_define, code_ea): + """ + Data reference is being analyzed. + plugin may correct code_ea (e.g. for thumb mode refs, we clear the last bit) + Returns: >0-new code_ea, -1-cancel dref analysis + """ + return self._log() + + def ev_may_show_sreg(self, current_ea): + """ + The kernel wants to display the segment registers + in the messages window. + Returns: 0-not implemented, <0-kernel should not show. + """ + return self._log() + + def ev_loader_elf_machine(self, li, machine_type, p_procname, p_pd, loader, reader): + """ + ELF loader machine type checkpoint. + A plugin check of the 'machine_type'. If it is the desired one, + the the plugin fills 'p_procname' with the processor name. + Returns: e_machine value + """ + pass + + def ev_auto_queue_empty(self, atype): + """ + One analysis queue is empty. + Returns: an int (?) + """ + return self._log() + + def ev_validate_flirt_func(self, start_ea, func_name): + """ + FLIRT has recognized a library function. + This callback can be used by a plugin or proc module + to intercept it and validate such a function. + Returns: -1-do not create, 0-validated + """ + return self._log() + + def ev_adjust_libfunc_ea(self, sig, libfun, ea): + """ + Called when a signature module has been matched against + bytes in the database. This is used to compute the + offset at which a particular module's libfunc should + be applied. + Returns: 1-ea has been modified, <=0 not modified + """ + return self._log() + + def ev_assemble(self, ea, cs, ip, use32, line): + """ + Assemble an instruction + (make sure that PR_ASSEMBLE flag is set in the processor flags) + (display a warning if an error occurs) + Returns opcode string-ok, None-failed + """ + return self._log() + + def ev_extract_address(self, out_ea, screen_ea, string, position): + """ + Extract address from a string. + Returns: 1-ok, 0-use standard algorithm, -1-error + """ + return self._log() + + def ev_realcvt(self, m,e, swt): + """ + Floating point -> IEEE conversion + Returns: 1-ok, 0-not implemented, REAL_ERROR_-error + """ + return self._log() + + def ev_gen_asm_or_lst(self, starting, fp, is_asm, flags, outline): + """ + Callback generating asm orlst file. + The kernel calls this callback twice, at the beginning + and at the end of listing generation. The processor + module can intercept this event and adjust its output. + Returns: None + """ + return self._log() + + def ev_gen_map_file(self, nlines, fp): + """ + Generate a map file. If not implemented + the kernel itself will create the map file. + Returns: 1-ok, 0-not implemented, -1-write error + """ + return self._log() + + def ev_create_flat_group(self, image_base, bitness, dataseg_sel): + """ + Create special segment representing the flat group. + Returns: return value ignored. + """ + return self._log() + + def ev_analyze_prolog(self, ea): + """ + Analyzes function prolog, epilog, and updates + purge, and function attributes + Returns: 1-ok, 0-not implemented. + """ + return self._log() + + +# Remove an existing hook on second run +try: + idp_hook_stat = "un" + print("IDP hook: checking for hook...") + idphook + print("IDP hook: unhooking....") + idp_hook_stat2 = "" + idphook.unhook() + del idphook +except: + print("IDP hook: not installed, installing now....") + idp_hook_stat = "" + idp_hook_stat2 = "un" + idphook = idp_logger_hooks_t() + idphook.hook() + +print(f'IDP hook {idp_hook_stat}installed. Run the script again to {idp_hook_stat2}install') diff --git a/api-examples/inf/print_basic_info.py b/api-examples/inf/print_basic_info.py new file mode 100644 index 0000000..6090496 --- /dev/null +++ b/api-examples/inf/print_basic_info.py @@ -0,0 +1,84 @@ +""" +summary: Print basic information about the currently loaded IDB. + +description: + In this script we display some basic information about the + current IDB: + * the compiler name and the size of some datatypes + * Other general IDB information including: application bitness, + file type, various address ranges, main address and start + addresses if exist. + For this we use some of the inf_get_xxx functions from the + ida_ida module. +""" +import ida_ida +import ida_kernwin +import ida_typeinf +import ida_idaapi + +ft_dict = { + ida_ida.f_EXE_old: 'MS DOS EXE File', + ida_ida.f_COM_old: 'MS DOS COM File', + ida_ida.f_BIN: 'Binary File', + ida_ida.f_DRV: 'MS DOS Driver', + ida_ida.f_WIN: 'New Executable (NE)', + ida_ida.f_HEX: 'Intel Hex Object File', + ida_ida.f_MEX: 'MOS Technology Hex Object File', + ida_ida.f_LX: 'Linear Executable (LX)', + ida_ida.f_LE: 'Linear Executable (LE)', + ida_ida.f_NLM: 'Netware Loadable Module (NLM)', + ida_ida.f_COFF: 'Common Object File Format (COFF)', + ida_ida.f_PE: 'Portable Executable (PE)', + ida_ida.f_OMF: 'Object Module Format', + ida_ida.f_SREC: 'Motorola SREC (S-record)', + ida_ida.f_ZIP: 'ZIP file (this file is never loaded to IDA database)', + ida_ida.f_OMFLIB: 'Library of OMF Modules', + ida_ida.f_AR: 'ar library', + ida_ida.f_LOADER: 'file is loaded using LOADER DLL', + ida_ida.f_ELF: 'Executable and Linkable Format (ELF)', + ida_ida.f_W32RUN: 'Watcom DOS32 Extender (W32RUN)', + ida_ida.f_AOUT: 'Linux a.out (AOUT)', + ida_ida.f_PRC: 'PalmPilot program file', + ida_ida.f_EXE: 'MS DOS EXE File', + ida_ida.f_COM: 'MS DOS COM File', + ida_ida.f_AIXAR: 'AIX ar library', + ida_ida.f_MACHO: 'Mac OS X Mach-O', + ida_ida.f_PSXOBJ: 'Sony Playstation PSX object file', + ida_ida.f_MD1IMG: 'Mediatek Firmware Image' +} + +def main(): + print('\nCompiler info:') + cc = ida_ida.compiler_info_t() + ida_ida.inf_get_cc(cc) + print(f'\tCompilateur: {ida_typeinf.get_compiler_name(cc.id)}') + print(f'\t\tByte size: {ida_ida.inf_get_cc_size_b()}') + print(f'\t\tShort size: {ida_ida.inf_get_cc_size_s()}') + print(f'\t\tEnum size: {ida_ida.inf_get_cc_size_e()}') + print(f'\t\tInteger size: {ida_ida.inf_get_cc_size_i()}') + print(f'\t\tLong size: {ida_ida.inf_get_cc_size_l()}') + print(f'\t\tLong double size: {ida_ida.inf_get_cc_size_ldbl()}') + print(f'\t\tLong long size: {ida_ida.inf_get_cc_size_ll()}') + + print('\nGeneral IDB information:') + print(f'\tApplication bitness: {ida_ida.inf_get_app_bitness()}-bit') + if ida_ida.inf_is_kernel_mode(): + land = 'Kernel' + else: + land = 'User' + print(f'\tExecution mode: {land}') + print(f'\tFile type: {ft_dict[ida_ida.inf_get_filetype()]}') + main_ea = ida_ida.inf_get_main() + if not main_ea == ida_idaapi.BADADDR: + print(f'\tMain entry point: {main_ea:x}') + start_ea = ida_ida.inf_get_start_ea() + if not start_ea == ida_idaapi.BADADDR: + print(f'Start entry: {start_ea:x}') + print(f'\tMinimum effective address: {ida_ida.inf_get_min_ea():x}') + print(f'\tMaximum effective address: {ida_ida.inf_get_max_ea():x}') + print(f'\tPrivate range start: {ida_ida.inf_get_privrange_start_ea():x}') + print(f'\tPrivate range end: {ida_ida.inf_get_privrange_end_ea():x}') + + +ida_kernwin.msg_clear() +main() \ No newline at end of file diff --git a/api-examples/inf/print_basic_info_plugin.py b/api-examples/inf/print_basic_info_plugin.py new file mode 100644 index 0000000..6e05b39 --- /dev/null +++ b/api-examples/inf/print_basic_info_plugin.py @@ -0,0 +1,37 @@ +""" +summary: Python plugin that print basic IDB information. + +description: + Demonstrates how to turn an IDA python script into + an IDA Python plugin. +""" +import ida_idaapi +import ida_kernwin +import print_basic_info + +class pbi_plugmod_t(ida_idaapi.plugmod_t): + def __del__(self): + ida_kernwin.msg("PBI >> unloaded pbi_plugmod\n") + + def run(self, arg): + ida_kernwin.msg("PBI >> run() called with %d!\n" % arg) + print_basic_info.main() + return True + +class pbi_plugin_t(ida_idaapi.plugin_t): + flags = ida_idaapi.PLUGIN_UNL | ida_idaapi.PLUGIN_MULTI + comment = "This is a simple plugin printing basic info" + help = "" + wanted_name = "Print Basic Info (PBI) plugin" + wanted_hotkey = "Ctrl-Alt-F12" + + + def init(self): + ida_kernwin.msg("PBI >> init() called!\n") + return pbi_plugmod_t() + + def term(self): + ida_kernwin.msg("PBI >> ERROR: term() called (should never be called)\n") + +def PLUGIN_ENTRY(): + return pbi_plugin_t() \ No newline at end of file diff --git a/api-examples/misc/find_binary_pattern.py b/api-examples/misc/find_binary_pattern.py new file mode 100644 index 0000000..9781b3b --- /dev/null +++ b/api-examples/misc/find_binary_pattern.py @@ -0,0 +1,103 @@ +''' +summary: Use bin_search to find the occurences of + "mov rax, cs:___security_cookie" + +description: + This example shows a way of finding the + "mov rax, cs:___security_cookie" instruction in a x64 database using + bin_search. For this we: + * check that the database is, indeed an x64 one + * build the binary pattern vector + * search for the pattern + * for each result we validate that operand 1 (Op2.addr) points to + __security_cookie + * once the list is built, print it ([index] func_name @ address) +''' + +import ida_bytes +import ida_idaapi +import ida_name +import ida_funcs +import ida_ua +import ida_ida + +message = 'Pattern \"mov rax, cs:__security_cookie\" found:' + +pattern_bytes = b'\x48\x8B\x05\x56\xAF\x35\x00' +pattern_mask = b'\x01\x01\x01\x00\x00\x00\x01' + +def is_pc_64(): + if ida_ida.inf_get_procname() != 'metapc' and not ida_ida.inf_is64bit(): + return False + return True + +def build_pattern_vec(bytes, mask = None): + pattern = ida_bytes.compiled_binpat_t() + pattern.bytes = bytes + if mask: + pattern.mask = mask + + pattern_vec = ida_bytes.compiled_binpat_vec_t() + pattern_vec.push_back(pattern) + + return pattern_vec + +def is_valid(ea, sc_ea): + insn = ida_ua.insn_t() + ida_ua.decode_insn(insn, ea) + + op = insn.Op2 + if op.type == 2 and op.dtype == 7 and op.addr == sc_ea: + return True + + return False + +def build_ea_list(start_ea, end_ea, pattern_vec, flags, sc_ea): + ea_list = [] + + while start_ea < end_ea: + start_ea, _ = ida_bytes.bin_search(start_ea, end_ea, pattern_vec, flags) + if start_ea == ida_idaapi.BADADDR: + break + + if is_valid(start_ea, sc_ea): + ea_list.append(start_ea) + + start_ea += 1 + + return ea_list + +def print_result(str, lst): + print(str) + + idx = 0 + for ea in lst: + fname = ida_funcs.get_func_name(ea) + dname = ida_name.demangle_name(fname, 0) + pname = fname + if dname: + pname = dname + + print(f'[{idx}] {pname} @ {ea:x}') + idx += 1 + + +def main(): + if not is_pc_64(): + print('This script will only work for x64 databases.') + return + + security_ea = ida_name.get_name_ea(ida_idaapi.BADADDR, '__security_cookie') + if security_ea == ida_idaapi.BADADDR: + print('No reference to __security_cookie.') + return + + pv = build_pattern_vec(pattern_bytes, pattern_mask) + + flags = ida_bytes.BIN_SEARCH_FORWARD | ida_bytes.BIN_SEARCH_NOCASE | ida_bytes.BIN_SEARCH_NOBREAK + lst = build_ea_list(ida_ida.inf_get_min_ea(), ida_ida.inf_get_max_ea(), pv, flags, security_ea) + + print_result(message, lst) + +if __name__ == '__main__': + main() diff --git a/api-examples/misc/find_syscall.py b/api-examples/misc/find_syscall.py new file mode 100644 index 0000000..3fa8052 --- /dev/null +++ b/api-examples/misc/find_syscall.py @@ -0,0 +1,27 @@ +import ida_ida +import ida_idaapi +import ida_bytes +import ida_funcs + +def main(): + if ida_ida.inf_get_filetype() != ida_ida.f_PE or not ida_ida.inf_is_64bit() or ida_ida.inf_get_procname() != 'metapc': + return + + pattern_bytes = b'\x75\x03\x0F\x05' + rstart = ida_ida.inf_get_min_ea() + + found = False + while True: + rstart = ida_bytes.find_bytes(pattern_bytes, rstart) + if rstart == ida_idaapi.BADADDR: + break + fname = ida_funcs.get_func_name(rstart) + if fname and not found: + found = True + print('Syscall found:') + if fname: + print(f'\t@ {rstart + 2:x} ({fname})') + rstart += 1 + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/api-examples/readme.md b/api-examples/readme.md new file mode 100644 index 0000000..efc55ae --- /dev/null +++ b/api-examples/readme.md @@ -0,0 +1,21 @@ +# TIL API examples: + +## Beginner level examples: +* list_enum_member.py +* list_struct_member.py +* list_union_member.py +* import_type_from_til.py +* list_struct_xref.py +* create_array.py + +## Intermediate level examples: +* create_structs.py +* create_libssh2.py +* create_bmenum.py +* create_bfstruct.py +* func_ti_changed_listener.py +* mark_func_spoiled.py +* setpehdr.py + +## Advanced level examples: +* operand_to_struct_member.py diff --git a/api-examples/segm/list_imports.py b/api-examples/segm/list_imports.py new file mode 100644 index 0000000..02c1373 --- /dev/null +++ b/api-examples/segm/list_imports.py @@ -0,0 +1,71 @@ +""" +summary: List the .idata section content and the corresponding + data and code references when it applies. + +description: + In this script, we iterate through the .idata PE section. + For each imported function we display: + * its name + * the data references to it (when applying) + * the code references to it (when applying, +""" +import ida_segment +import ida_name +import idautils +import ida_kernwin +import ida_funcs + +def is_code(ea): + return ida_segment.segtype(ea) == ida_segment.SEG_CODE + +def newline(): + print('') + +def list_refs(refs, code): + first = True + if code: + type = 'code' + else: + type = 'data' + + idx = 1 + for ref in refs: + if first: + print(f'\tList of {type} references:') + first = False + ida_kernwin.msg(f'\t* [{idx}] @ {ref:x}') + if is_code(ref): + name = ida_funcs.get_func_name(ref) + if name: + print(f' ({name})') + else: + newline() + else: + newline() + idx += 1 + + +def main(): + import_seg = ida_segment.get_segm_by_name('.idata') + + if import_seg: + curr_ea = import_seg.start_ea + end_ea = import_seg.end_ea + idx = 1 + while curr_ea < end_ea: + name = ida_name.get_ea_name(curr_ea) + print(f'Imported function [{idx}]: {name}') + + list_refs(idautils.DataRefsTo(curr_ea), False) + + list_refs(idautils.CodeRefsTo(curr_ea, 0), True) + + if import_seg.is_64bit(): + curr_ea += 8 + else: + curr_ea += 4 + idx += 1 + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/api_contents.brief b/api_contents.brief index 02b954c..bde6784 100644 --- a/api_contents.brief +++ b/api_contents.brief @@ -1,14561 +1,15070 @@ -ida_hexrays (module) -ida_hexrays.ACFL_BLKOPT (variable) -ida_hexrays.ACFL_GLBDEL (variable) -ida_hexrays.ACFL_GLBPROP (variable) -ida_hexrays.ACFL_GUESS (variable) -ida_hexrays.ACFL_LOCOPT (variable) -ida_hexrays.ALLOW_UNUSED_LABELS (variable) -ida_hexrays.ANCHOR_BLKCMT (variable) -ida_hexrays.ANCHOR_CITEM (variable) -ida_hexrays.ANCHOR_ITP (variable) -ida_hexrays.ANCHOR_LVAR (variable) -ida_hexrays.ANY_FPSIZE (variable) -ida_hexrays.ANY_REGSIZE (variable) -ida_hexrays.BLT_0WAY (variable) -ida_hexrays.BLT_1WAY (variable) -ida_hexrays.BLT_2WAY (variable) -ida_hexrays.BLT_NONE (variable) -ida_hexrays.BLT_NWAY (variable) -ida_hexrays.BLT_STOP (variable) -ida_hexrays.BLT_XTRN (variable) -ida_hexrays.CALC_CURLY_BRACES (variable) -ida_hexrays.CFL_FINAL (variable) -ida_hexrays.CFL_HELPER (variable) -ida_hexrays.CFL_NORET (variable) -ida_hexrays.CFS_BOUNDS (variable) -ida_hexrays.CFS_LOCKED (variable) -ida_hexrays.CFS_LVARS_HIDDEN (variable) -ida_hexrays.CFS_TEXT (variable) -ida_hexrays.CHF_FAKE (variable) -ida_hexrays.CHF_INITED (variable) -ida_hexrays.CHF_OVER (variable) -ida_hexrays.CHF_PASSTHRU (variable) -ida_hexrays.CHF_REPLACED (variable) -ida_hexrays.CHF_TERM (variable) -ida_hexrays.CIT_COLLAPSED (variable) -ida_hexrays.CMAT_BUILT (variable) -ida_hexrays.CMAT_CASTED (variable) -ida_hexrays.CMAT_CPA (variable) -ida_hexrays.CMAT_FINAL (variable) -ida_hexrays.CMAT_NICE (variable) -ida_hexrays.CMAT_TRANS1 (variable) -ida_hexrays.CMAT_TRANS2 (variable) -ida_hexrays.CMAT_TRANS3 (variable) -ida_hexrays.CMAT_ZERO (variable) -ida_hexrays.CMT_ALL (variable) -ida_hexrays.CMT_BLOCK1 (variable) -ida_hexrays.CMT_BLOCK2 (variable) -ida_hexrays.CMT_FUNC (variable) -ida_hexrays.CMT_LVAR (variable) -ida_hexrays.CMT_NONE (variable) -ida_hexrays.CMT_TAIL (variable) -ida_hexrays.CPBLK_FAST (variable) -ida_hexrays.CPBLK_MINREF (variable) -ida_hexrays.CPBLK_OPTJMP (variable) -ida_hexrays.CV_FAST (variable) -ida_hexrays.CV_INSNS (variable) -ida_hexrays.CV_PARENTS (variable) -ida_hexrays.CV_POST (variable) -ida_hexrays.CV_PRUNE (variable) -ida_hexrays.CV_RESTART (variable) -ida_hexrays.DECOMP_ALL_BLKS (variable) -ida_hexrays.DECOMP_GXREFS_DEFLT (variable) -ida_hexrays.DECOMP_GXREFS_FORCE (variable) -ida_hexrays.DECOMP_GXREFS_NOUPD (variable) -ida_hexrays.DECOMP_NO_CACHE (variable) -ida_hexrays.DECOMP_NO_FRAME (variable) -ida_hexrays.DECOMP_NO_HIDE (variable) -ida_hexrays.DECOMP_NO_WAIT (variable) -ida_hexrays.DECOMP_NO_XREFS (variable) -ida_hexrays.DECOMP_VOID_MBA (variable) -ida_hexrays.DECOMP_WARNINGS (variable) -ida_hexrays.DecompilationFailure (class) -ida_hexrays.EQ_CMPDEST (variable) -ida_hexrays.EQ_IGNCODE (variable) -ida_hexrays.EQ_IGNSIZE (variable) -ida_hexrays.EQ_OPTINSN (variable) -ida_hexrays.EXFL_ALL (variable) -ida_hexrays.EXFL_ALONE (variable) -ida_hexrays.EXFL_CPADONE (variable) -ida_hexrays.EXFL_CSTR (variable) -ida_hexrays.EXFL_FPOP (variable) -ida_hexrays.EXFL_JUMPOUT (variable) -ida_hexrays.EXFL_LVALUE (variable) -ida_hexrays.EXFL_PARTIAL (variable) -ida_hexrays.EXFL_UNDEF (variable) -ida_hexrays.EXFL_VFTABLE (variable) -ida_hexrays.FCI_DEAD (variable) -ida_hexrays.FCI_EXPLOCS (variable) -ida_hexrays.FCI_FINAL (variable) -ida_hexrays.FCI_HASCALL (variable) -ida_hexrays.FCI_HASFMT (variable) -ida_hexrays.FCI_NORET (variable) -ida_hexrays.FCI_NOSIDE (variable) -ida_hexrays.FCI_PROP (variable) -ida_hexrays.FCI_PURE (variable) -ida_hexrays.FCI_SPLOK (variable) -ida_hexrays.FD_BACKWARD (variable) -ida_hexrays.FD_DEF (variable) -ida_hexrays.FD_DIRTY (variable) -ida_hexrays.FD_FORWARD (variable) -ida_hexrays.FD_USE (variable) -ida_hexrays.FORBID_UNUSED_LABELS (variable) -ida_hexrays.GCA_ALLOC (variable) -ida_hexrays.GCA_EMPTY (variable) -ida_hexrays.GCA_NALLOC (variable) -ida_hexrays.GCA_OFIRST (variable) -ida_hexrays.GCA_OLAST (variable) -ida_hexrays.GCA_SPEC (variable) -ida_hexrays.GCO_DEF (variable) -ida_hexrays.GCO_REG (variable) -ida_hexrays.GCO_STK (variable) -ida_hexrays.GCO_USE (variable) -ida_hexrays.GC_ASR (variable) -ida_hexrays.GC_DIRTY_ALL (variable) -ida_hexrays.GC_END (variable) -ida_hexrays.GC_REGS_AND_STKVARS (variable) -ida_hexrays.GC_XDSU (variable) -ida_hexrays.GLN_ALL (variable) -ida_hexrays.GLN_CURRENT (variable) -ida_hexrays.GLN_GOTO_TARGET (variable) -ida_hexrays.Hexrays_Hooks (class) -ida_hexrays.Hexrays_Hooks.__disown__ (method) -ida_hexrays.Hexrays_Hooks.__init__ (method) -ida_hexrays.Hexrays_Hooks.build_callinfo (method) -ida_hexrays.Hexrays_Hooks.callinfo_built (method) -ida_hexrays.Hexrays_Hooks.calls_done (method) -ida_hexrays.Hexrays_Hooks.close_pseudocode (method) -ida_hexrays.Hexrays_Hooks.cmt_changed (method) -ida_hexrays.Hexrays_Hooks.combine (method) -ida_hexrays.Hexrays_Hooks.create_hint (method) -ida_hexrays.Hexrays_Hooks.curpos (method) -ida_hexrays.Hexrays_Hooks.double_click (method) -ida_hexrays.Hexrays_Hooks.flowchart (method) -ida_hexrays.Hexrays_Hooks.func_printed (method) -ida_hexrays.Hexrays_Hooks.glbopt (method) -ida_hexrays.Hexrays_Hooks.hook (method) -ida_hexrays.Hexrays_Hooks.interr (method) -ida_hexrays.Hexrays_Hooks.keyboard (method) -ida_hexrays.Hexrays_Hooks.locopt (method) -ida_hexrays.Hexrays_Hooks.lvar_cmt_changed (method) -ida_hexrays.Hexrays_Hooks.lvar_mapping_changed (method) -ida_hexrays.Hexrays_Hooks.lvar_name_changed (method) -ida_hexrays.Hexrays_Hooks.lvar_type_changed (method) -ida_hexrays.Hexrays_Hooks.maturity (method) -ida_hexrays.Hexrays_Hooks.microcode (method) -ida_hexrays.Hexrays_Hooks.open_pseudocode (method) -ida_hexrays.Hexrays_Hooks.populating_popup (method) -ida_hexrays.Hexrays_Hooks.prealloc (method) -ida_hexrays.Hexrays_Hooks.preoptimized (method) -ida_hexrays.Hexrays_Hooks.print_func (method) -ida_hexrays.Hexrays_Hooks.prolog (method) -ida_hexrays.Hexrays_Hooks.refresh_pseudocode (method) -ida_hexrays.Hexrays_Hooks.resolve_stkaddrs (method) -ida_hexrays.Hexrays_Hooks.right_click (method) -ida_hexrays.Hexrays_Hooks.stkpnts (method) -ida_hexrays.Hexrays_Hooks.structural (method) -ida_hexrays.Hexrays_Hooks.switch_pseudocode (method) -ida_hexrays.Hexrays_Hooks.text_ready (method) -ida_hexrays.Hexrays_Hooks.unhook (method) -ida_hexrays.IPROP_CLNPOP (variable) -ida_hexrays.IPROP_COMBINED (variable) -ida_hexrays.IPROP_DONT_COMB (variable) -ida_hexrays.IPROP_DONT_PROP (variable) -ida_hexrays.IPROP_EXTSTX (variable) -ida_hexrays.IPROP_FARCALL (variable) -ida_hexrays.IPROP_FPINSN (variable) -ida_hexrays.IPROP_IGNLOWSRC (variable) -ida_hexrays.IPROP_INV_JX (variable) -ida_hexrays.IPROP_MBARRIER (variable) -ida_hexrays.IPROP_MULTI_MOV (variable) -ida_hexrays.IPROP_OPTIONAL (variable) -ida_hexrays.IPROP_PERSIST (variable) -ida_hexrays.IPROP_SPLIT (variable) -ida_hexrays.IPROP_SPLIT1 (variable) -ida_hexrays.IPROP_SPLIT2 (variable) -ida_hexrays.IPROP_SPLIT4 (variable) -ida_hexrays.IPROP_SPLIT8 (variable) -ida_hexrays.IPROP_TAILCALL (variable) -ida_hexrays.IPROP_UNMERGED (variable) -ida_hexrays.IPROP_WAS_NORET (variable) -ida_hexrays.IPROP_WILDMATCH (variable) -ida_hexrays.ITP_ARG1 (variable) -ida_hexrays.ITP_ASM (variable) -ida_hexrays.ITP_BLOCK1 (variable) -ida_hexrays.ITP_BLOCK2 (variable) -ida_hexrays.ITP_BRACE2 (variable) -ida_hexrays.ITP_CASE (variable) -ida_hexrays.ITP_COLON (variable) -ida_hexrays.ITP_CURLY1 (variable) -ida_hexrays.ITP_CURLY2 (variable) -ida_hexrays.ITP_DO (variable) -ida_hexrays.ITP_ELSE (variable) -ida_hexrays.ITP_EMPTY (variable) -ida_hexrays.ITP_SEMI (variable) -ida_hexrays.ITP_SIGN (variable) -ida_hexrays.LOCOPT_ALL (variable) -ida_hexrays.LOCOPT_REFINE (variable) -ida_hexrays.LOCOPT_REFINE2 (variable) -ida_hexrays.LVINF_KEEP (variable) -ida_hexrays.LVINF_NOMAP (variable) -ida_hexrays.LVINF_NOPTR (variable) -ida_hexrays.LVINF_SPLIT (variable) -ida_hexrays.LVINF_UNUSED (variable) -ida_hexrays.MBA2_ARGIDX_OK (variable) -ida_hexrays.MBA2_ARGIDX_SORTED (variable) -ida_hexrays.MBA2_CODE16_BIT (variable) -ida_hexrays.MBA2_DONT_VERIFY (variable) -ida_hexrays.MBA2_HAS_OUTLINES (variable) -ida_hexrays.MBA2_IS_CTR (variable) -ida_hexrays.MBA2_IS_DTR (variable) -ida_hexrays.MBA2_LVARNAMES_OK (variable) -ida_hexrays.MBA2_LVARS_RENAMED (variable) -ida_hexrays.MBA2_NO_DUP_CALLS (variable) -ida_hexrays.MBA2_NO_DUP_LVARS (variable) -ida_hexrays.MBA2_NO_FRAME (variable) -ida_hexrays.MBA2_OVER_CHAINS (variable) -ida_hexrays.MBA2_PROP_COMPLEX (variable) -ida_hexrays.MBA2_STACK_RETVAL (variable) -ida_hexrays.MBA2_UNDEF_RETVAR (variable) -ida_hexrays.MBA2_VALRNG_DONE (variable) -ida_hexrays.MBA_ASRPROP (variable) -ida_hexrays.MBA_ASRTOK (variable) -ida_hexrays.MBA_CALLS (variable) -ida_hexrays.MBA_CHVARS (variable) -ida_hexrays.MBA_CMBBLK (variable) -ida_hexrays.MBA_CMNSTK (variable) -ida_hexrays.MBA_COLGDL (variable) -ida_hexrays.MBA_DELPAIRS (variable) -ida_hexrays.MBA_GLBOPT (variable) -ida_hexrays.MBA_INSGDL (variable) -ida_hexrays.MBA_LOADED (variable) -ida_hexrays.MBA_LVARS0 (variable) -ida_hexrays.MBA_LVARS1 (variable) -ida_hexrays.MBA_NICE (variable) -ida_hexrays.MBA_NOFUNC (variable) -ida_hexrays.MBA_NUMADDR (variable) -ida_hexrays.MBA_PASSREGS (variable) -ida_hexrays.MBA_PATTERN (variable) -ida_hexrays.MBA_PRCDEFS (variable) -ida_hexrays.MBA_PREOPT (variable) -ida_hexrays.MBA_REFINE (variable) -ida_hexrays.MBA_RETFP (variable) -ida_hexrays.MBA_RETREF (variable) -ida_hexrays.MBA_SAVRST (variable) -ida_hexrays.MBA_SHORT (variable) -ida_hexrays.MBA_SPLINFO (variable) -ida_hexrays.MBA_THUNK (variable) -ida_hexrays.MBA_VALNUM (variable) -ida_hexrays.MBA_WINGR32 (variable) -ida_hexrays.MBL_BACKPROP (variable) -ida_hexrays.MBL_CALL (variable) -ida_hexrays.MBL_COMB (variable) -ida_hexrays.MBL_DEAD (variable) -ida_hexrays.MBL_DMT64 (variable) -ida_hexrays.MBL_DSLOT (variable) -ida_hexrays.MBL_FAKE (variable) -ida_hexrays.MBL_GOTO (variable) -ida_hexrays.MBL_INCONST (variable) -ida_hexrays.MBL_KEEP (variable) -ida_hexrays.MBL_LIST (variable) -ida_hexrays.MBL_NONFAKE (variable) -ida_hexrays.MBL_NORET (variable) -ida_hexrays.MBL_PRIV (variable) -ida_hexrays.MBL_PROP (variable) -ida_hexrays.MBL_PUSH (variable) -ida_hexrays.MBL_TCAL (variable) -ida_hexrays.MBL_VALRANGES (variable) -ida_hexrays.MERR_BADARCH (variable) -ida_hexrays.MERR_BADBLK (variable) -ida_hexrays.MERR_BADCALL (variable) -ida_hexrays.MERR_BADFRAME (variable) -ida_hexrays.MERR_BADIDB (variable) -ida_hexrays.MERR_BADRANGES (variable) -ida_hexrays.MERR_BADSP (variable) -ida_hexrays.MERR_BITNESS (variable) -ida_hexrays.MERR_BLOCK (variable) -ida_hexrays.MERR_BUSY (variable) -ida_hexrays.MERR_CANCELED (variable) -ida_hexrays.MERR_COMPLEX (variable) -ida_hexrays.MERR_DSLOT (variable) -ida_hexrays.MERR_EXCEPTION (variable) -ida_hexrays.MERR_EXTERN (variable) -ida_hexrays.MERR_FARPTR (variable) -ida_hexrays.MERR_FUNCSIZE (variable) -ida_hexrays.MERR_HUGESTACK (variable) -ida_hexrays.MERR_INSN (variable) -ida_hexrays.MERR_INTERR (variable) -ida_hexrays.MERR_LICENSE (variable) -ida_hexrays.MERR_LOOP (variable) -ida_hexrays.MERR_LVARS (variable) -ida_hexrays.MERR_MEM (variable) -ida_hexrays.MERR_OK (variable) -ida_hexrays.MERR_ONLY32 (variable) -ida_hexrays.MERR_ONLY64 (variable) -ida_hexrays.MERR_OVERLAP (variable) -ida_hexrays.MERR_PARTINIT (variable) -ida_hexrays.MERR_PROLOG (variable) -ida_hexrays.MERR_RECDEPTH (variable) -ida_hexrays.MERR_REDO (variable) -ida_hexrays.MERR_SIZEOF (variable) -ida_hexrays.MERR_STOP (variable) -ida_hexrays.MERR_SWITCH (variable) -ida_hexrays.MERR_UNKTYPE (variable) -ida_hexrays.MLI_CLR_FLAGS (variable) -ida_hexrays.MLI_CMT (variable) -ida_hexrays.MLI_NAME (variable) -ida_hexrays.MLI_SET_FLAGS (variable) -ida_hexrays.MLI_TYPE (variable) -ida_hexrays.MMAT_CALLS (variable) -ida_hexrays.MMAT_GENERATED (variable) -ida_hexrays.MMAT_GLBOPT1 (variable) -ida_hexrays.MMAT_GLBOPT2 (variable) -ida_hexrays.MMAT_GLBOPT3 (variable) -ida_hexrays.MMAT_LOCOPT (variable) -ida_hexrays.MMAT_LVARS (variable) -ida_hexrays.MMAT_PREOPTIMIZED (variable) -ida_hexrays.MMAT_ZERO (variable) -ida_hexrays.MMIDX_GLBHIGH (variable) -ida_hexrays.MMIDX_GLBLOW (variable) -ida_hexrays.NALT_VD (variable) -ida_hexrays.NF_BINVDONE (variable) -ida_hexrays.NF_BITNOT (variable) -ida_hexrays.NF_FIXED (variable) -ida_hexrays.NF_NEGATE (variable) -ida_hexrays.NF_NEGDONE (variable) -ida_hexrays.NF_VALID (variable) -ida_hexrays.NOSIZE (variable) -ida_hexrays.NO_CURLY_BRACES (variable) -ida_hexrays.NO_SIDEFF (variable) -ida_hexrays.ONLY_SIDEFF (variable) -ida_hexrays.OPF_NEW_WINDOW (variable) -ida_hexrays.OPF_NO_WAIT (variable) -ida_hexrays.OPF_REUSE (variable) -ida_hexrays.OPF_REUSE_ACTIVE (variable) -ida_hexrays.OPROP_FLOAT (variable) -ida_hexrays.OPROP_IMPDONE (variable) -ida_hexrays.OPROP_LOWADDR (variable) -ida_hexrays.OPROP_UDEFVAL (variable) -ida_hexrays.OPROP_UDT (variable) -ida_hexrays.OPTI_ADDREXPRS (variable) -ida_hexrays.OPTI_COMBINSNS (variable) -ida_hexrays.OPTI_MINSTKREF (variable) -ida_hexrays.OPTI_NO_LDXOPT (variable) -ida_hexrays.RETRIEVE_ALWAYS (variable) -ida_hexrays.RETRIEVE_ONCE (variable) -ida_hexrays.ROLE_3WAYCMP0 (variable) -ida_hexrays.ROLE_3WAYCMP1 (variable) -ida_hexrays.ROLE_ABS (variable) -ida_hexrays.ROLE_ALLOCA (variable) -ida_hexrays.ROLE_BITTEST (variable) -ida_hexrays.ROLE_BITTESTANDCOMPLEMENT (variable) -ida_hexrays.ROLE_BITTESTANDRESET (variable) -ida_hexrays.ROLE_BITTESTANDSET (variable) -ida_hexrays.ROLE_BSWAP (variable) -ida_hexrays.ROLE_BUG (variable) -ida_hexrays.ROLE_CFSUB3 (variable) -ida_hexrays.ROLE_CONTAINING_RECORD (variable) -ida_hexrays.ROLE_EMPTY (variable) -ida_hexrays.ROLE_FASTFAIL (variable) -ida_hexrays.ROLE_IS_MUL_OK (variable) -ida_hexrays.ROLE_MEMCPY (variable) -ida_hexrays.ROLE_MEMSET (variable) -ida_hexrays.ROLE_MEMSET32 (variable) -ida_hexrays.ROLE_MEMSET64 (variable) -ida_hexrays.ROLE_OFSUB3 (variable) -ida_hexrays.ROLE_PRESENT (variable) -ida_hexrays.ROLE_READFLAGS (variable) -ida_hexrays.ROLE_ROL (variable) -ida_hexrays.ROLE_ROR (variable) -ida_hexrays.ROLE_SATURATED_MUL (variable) -ida_hexrays.ROLE_SSE_CMP4 (variable) -ida_hexrays.ROLE_SSE_CMP8 (variable) -ida_hexrays.ROLE_STRCAT (variable) -ida_hexrays.ROLE_STRCPY (variable) -ida_hexrays.ROLE_STRLEN (variable) -ida_hexrays.ROLE_TAIL (variable) -ida_hexrays.ROLE_UNK (variable) -ida_hexrays.ROLE_VA_ARG (variable) -ida_hexrays.ROLE_VA_COPY (variable) -ida_hexrays.ROLE_VA_END (variable) -ida_hexrays.ROLE_VA_START (variable) -ida_hexrays.ROLE_WCSCAT (variable) -ida_hexrays.ROLE_WCSCPY (variable) -ida_hexrays.ROLE_WCSLEN (variable) -ida_hexrays.ROLE_WMEMCPY (variable) -ida_hexrays.ROLE_WMEMSET (variable) -ida_hexrays.SHINS_LDXEA (variable) -ida_hexrays.SHINS_NUMADDR (variable) -ida_hexrays.SHINS_SHORT (variable) -ida_hexrays.SHINS_VALNUM (variable) -ida_hexrays.ULV_PRECISE_DEFEA (variable) -ida_hexrays.USE_CURLY_BRACES (variable) -ida_hexrays.USE_KEYBOARD (variable) -ida_hexrays.USE_MOUSE (variable) -ida_hexrays.VDI_EXPR (variable) -ida_hexrays.VDI_FUNC (variable) -ida_hexrays.VDI_LVAR (variable) -ida_hexrays.VDI_NONE (variable) -ida_hexrays.VDI_TAIL (variable) -ida_hexrays.VDRUN_APPEND (variable) -ida_hexrays.VDRUN_CMDLINE (variable) -ida_hexrays.VDRUN_LUMINA (variable) -ida_hexrays.VDRUN_MAYSTOP (variable) -ida_hexrays.VDRUN_NEWFILE (variable) -ida_hexrays.VDRUN_ONLYNEW (variable) -ida_hexrays.VDRUN_SENDIDB (variable) -ida_hexrays.VDRUN_SILENT (variable) -ida_hexrays.VDRUN_STATS (variable) -ida_hexrays.VDUI_VALID (variable) -ida_hexrays.VDUI_VISIBLE (variable) -ida_hexrays.VR_AT_END (variable) -ida_hexrays.VR_AT_START (variable) -ida_hexrays.VR_EXACT (variable) -ida_hexrays.WARN_ADDR_OUTARGS (variable) -ida_hexrays.WARN_ARRAY_INARG (variable) -ida_hexrays.WARN_BAD_CALL_SP (variable) -ida_hexrays.WARN_BAD_FIELD_TYPE (variable) -ida_hexrays.WARN_BAD_INSN (variable) -ida_hexrays.WARN_BAD_MAPDST (variable) -ida_hexrays.WARN_BAD_PURGED (variable) -ida_hexrays.WARN_BAD_RETVAR (variable) -ida_hexrays.WARN_BAD_SHADOW (variable) -ida_hexrays.WARN_BAD_SP (variable) -ida_hexrays.WARN_BAD_STD_TYPE (variable) -ida_hexrays.WARN_BAD_STKPNT (variable) -ida_hexrays.WARN_BAD_STROFF (variable) -ida_hexrays.WARN_BAD_VALRNG (variable) -ida_hexrays.WARN_BAD_VARSIZE (variable) -ida_hexrays.WARN_CBUILD_LOOPS (variable) -ida_hexrays.WARN_CR_BADOFF (variable) -ida_hexrays.WARN_CR_NOFIELD (variable) -ida_hexrays.WARN_DEP_UNK_CALLS (variable) -ida_hexrays.WARN_EXP_LINVAR (variable) -ida_hexrays.WARN_FIXED_MACRO (variable) -ida_hexrays.WARN_FRAG_LVAR (variable) -ida_hexrays.WARN_GUESSED_TYPE (variable) -ida_hexrays.WARN_HUGE_STKOFF (variable) -ida_hexrays.WARN_ILL_ELLIPSIS (variable) -ida_hexrays.WARN_ILL_FPU_STACK (variable) -ida_hexrays.WARN_ILL_FUNCTYPE (variable) -ida_hexrays.WARN_ILL_PURGED (variable) -ida_hexrays.WARN_JUMPOUT (variable) -ida_hexrays.WARN_MAX (variable) -ida_hexrays.WARN_MAX_ARGS (variable) -ida_hexrays.WARN_MISSED_SWITCH (variable) -ida_hexrays.WARN_MUST_RET_FP (variable) -ida_hexrays.WARN_NO_SAVE_REST (variable) -ida_hexrays.WARN_ODD_ABI (variable) -ida_hexrays.WARN_ODD_ADDR_USE (variable) -ida_hexrays.WARN_ODD_INPUT_REG (variable) -ida_hexrays.WARN_OPT_USELESS_JCND (variable) -ida_hexrays.WARN_OPT_VALRNG (variable) -ida_hexrays.WARN_OPT_VALRNG2 (variable) -ida_hexrays.WARN_OPT_VALRNG3 (variable) -ida_hexrays.WARN_RET_LOCREF (variable) -ida_hexrays.WARN_SELFREF_PROP (variable) -ida_hexrays.WARN_UNALIGNED_ARG (variable) -ida_hexrays.WARN_UNBALANCED_STACK (variable) -ida_hexrays.WARN_UNDEF_LVAR (variable) -ida_hexrays.WARN_UNINITED_REG (variable) -ida_hexrays.WARN_UNSUPP_REG (variable) -ida_hexrays.WARN_VARARG_MANY (variable) -ida_hexrays.WARN_VARARG_NOSTK (variable) -ida_hexrays.WARN_VARARG_REGS (variable) -ida_hexrays.WARN_VARARG_TCAL (variable) -ida_hexrays.WARN_WIDEN_CHAINS (variable) -ida_hexrays.WARN_WOULD_OVERLAP (variable) -ida_hexrays.WARN_WRITE_CONST (variable) -ida_hexrays.WARN_WRONG_VA_OFF (variable) -ida_hexrays.WITH_SIDEFF (variable) -ida_hexrays.__cbhooks_t (class) -ida_hexrays.__cbhooks_t.__init__ (method) -ida_hexrays.__cbhooks_t.close_pseudocode (method) -ida_hexrays.__cbhooks_t.create_hint (method) -ida_hexrays.__cbhooks_t.curpos (method) -ida_hexrays.__cbhooks_t.double_click (method) -ida_hexrays.__cbhooks_t.func_printed (method) -ida_hexrays.__cbhooks_t.interr (method) -ida_hexrays.__cbhooks_t.keyboard (method) -ida_hexrays.__cbhooks_t.maturity (method) -ida_hexrays.__cbhooks_t.open_pseudocode (method) -ida_hexrays.__cbhooks_t.populating_popup (method) -ida_hexrays.__cbhooks_t.print_func (method) -ida_hexrays.__cbhooks_t.refresh_pseudocode (method) -ida_hexrays.__cbhooks_t.right_click (method) -ida_hexrays.__cbhooks_t.switch_pseudocode (method) -ida_hexrays.__cbhooks_t.text_ready (method) -ida_hexrays._call_with_transferrable_ownership (function) -ida_hexrays._kludge_force_declare_TPopupMenu (function) -ida_hexrays._ll_call_helper (function) -ida_hexrays._ll_create_helper (function) -ida_hexrays._ll_dereference (function) -ida_hexrays._ll_lnot (function) -ida_hexrays._ll_make_num (function) -ida_hexrays._ll_make_ref (function) -ida_hexrays._ll_new_block (function) -ida_hexrays._map_as_dict (function) -ida_hexrays._map_as_dict._map___contains__ (function) -ida_hexrays._map_as_dict._map___delitem__ (function) -ida_hexrays._map_as_dict._map___getitem__ (function) -ida_hexrays._map_as_dict._map___iter__ (function) -ida_hexrays._map_as_dict._map___setitem__ (function) -ida_hexrays._map_as_dict._map_clear (function) -ida_hexrays._map_as_dict._map_copy (function) -ida_hexrays._map_as_dict._map_get (function) -ida_hexrays._map_as_dict._map_has_key (function) -ida_hexrays._map_as_dict._map_items (function) -ida_hexrays._map_as_dict._map_iteritems (function) -ida_hexrays._map_as_dict._map_iterkeys (function) -ida_hexrays._map_as_dict._map_itervalues (function) -ida_hexrays._map_as_dict._map_keys (function) -ida_hexrays._map_as_dict._map_pop (function) -ida_hexrays._map_as_dict._map_popitem (function) -ida_hexrays._map_as_dict._map_setdefault (function) -ida_hexrays._map_as_dict._map_values (function) -ida_hexrays.accepts_small_udts (function) -ida_hexrays.accepts_udts (function) -ida_hexrays.arglocs_overlap (function) -ida_hexrays.array_of_bitsets (class) -ida_hexrays.array_of_bitsets.__eq__ (method) -ida_hexrays.array_of_bitsets.__getitem__ (method) -ida_hexrays.array_of_bitsets.__init__ (method) -ida_hexrays.array_of_bitsets.__len__ (method) -ida_hexrays.array_of_bitsets.__ne__ (method) -ida_hexrays.array_of_bitsets.__setitem__ (method) -ida_hexrays.array_of_bitsets._del (method) -ida_hexrays.array_of_bitsets.add_unique (method) -ida_hexrays.array_of_bitsets.at (method) -ida_hexrays.array_of_bitsets.begin (method) -ida_hexrays.array_of_bitsets.capacity (method) -ida_hexrays.array_of_bitsets.clear (method) -ida_hexrays.array_of_bitsets.empty (method) -ida_hexrays.array_of_bitsets.end (method) -ida_hexrays.array_of_bitsets.erase (method) -ida_hexrays.array_of_bitsets.extract (method) -ida_hexrays.array_of_bitsets.find (method) -ida_hexrays.array_of_bitsets.grow (method) -ida_hexrays.array_of_bitsets.has (method) -ida_hexrays.array_of_bitsets.inject (method) -ida_hexrays.array_of_bitsets.insert (method) -ida_hexrays.array_of_bitsets.pop_back (method) -ida_hexrays.array_of_bitsets.push_back (method) -ida_hexrays.array_of_bitsets.qclear (method) -ida_hexrays.array_of_bitsets.reserve (method) -ida_hexrays.array_of_bitsets.resize (method) -ida_hexrays.array_of_bitsets.size (method) -ida_hexrays.array_of_bitsets.swap (method) -ida_hexrays.array_of_bitsets.truncate (method) -ida_hexrays.array_of_ivlsets (class) -ida_hexrays.array_of_ivlsets.__eq__ (method) -ida_hexrays.array_of_ivlsets.__getitem__ (method) -ida_hexrays.array_of_ivlsets.__init__ (method) -ida_hexrays.array_of_ivlsets.__len__ (method) -ida_hexrays.array_of_ivlsets.__ne__ (method) -ida_hexrays.array_of_ivlsets.__setitem__ (method) -ida_hexrays.array_of_ivlsets._del (method) -ida_hexrays.array_of_ivlsets.add_unique (method) -ida_hexrays.array_of_ivlsets.at (method) -ida_hexrays.array_of_ivlsets.begin (method) -ida_hexrays.array_of_ivlsets.capacity (method) -ida_hexrays.array_of_ivlsets.clear (method) -ida_hexrays.array_of_ivlsets.empty (method) -ida_hexrays.array_of_ivlsets.end (method) -ida_hexrays.array_of_ivlsets.erase (method) -ida_hexrays.array_of_ivlsets.extract (method) -ida_hexrays.array_of_ivlsets.find (method) -ida_hexrays.array_of_ivlsets.grow (method) -ida_hexrays.array_of_ivlsets.has (method) -ida_hexrays.array_of_ivlsets.inject (method) -ida_hexrays.array_of_ivlsets.insert (method) -ida_hexrays.array_of_ivlsets.pop_back (method) -ida_hexrays.array_of_ivlsets.push_back (method) -ida_hexrays.array_of_ivlsets.qclear (method) -ida_hexrays.array_of_ivlsets.reserve (method) -ida_hexrays.array_of_ivlsets.resize (method) -ida_hexrays.array_of_ivlsets.size (method) -ida_hexrays.array_of_ivlsets.swap (method) -ida_hexrays.array_of_ivlsets.truncate (method) -ida_hexrays.asgop (function) -ida_hexrays.asgop_revert (function) -ida_hexrays.bit_bound_t (class) -ida_hexrays.bit_bound_t.__init__ (method) -ida_hexrays.bitset_t (class) -ida_hexrays.bitset_t.__eq__ (method) -ida_hexrays.bitset_t.__ge__ (method) -ida_hexrays.bitset_t.__gt__ (method) -ida_hexrays.bitset_t.__init__ (method) -ida_hexrays.bitset_t.__iter__ (method) -ida_hexrays.bitset_t.__le__ (method) -ida_hexrays.bitset_t.__lt__ (method) -ida_hexrays.bitset_t.__ne__ (method) -ida_hexrays.bitset_t.add (method) -ida_hexrays.bitset_t.back (method) -ida_hexrays.bitset_t.begin (method) -ida_hexrays.bitset_t.clear (method) -ida_hexrays.bitset_t.compare (method) -ida_hexrays.bitset_t.copy (method) -ida_hexrays.bitset_t.count (method) -ida_hexrays.bitset_t.cut_at (method) -ida_hexrays.bitset_t.dstr (method) -ida_hexrays.bitset_t.empty (method) -ida_hexrays.bitset_t.end (method) -ida_hexrays.bitset_t.fill_with_ones (method) -ida_hexrays.bitset_t.front (method) -ida_hexrays.bitset_t.has (method) -ida_hexrays.bitset_t.has_all (method) -ida_hexrays.bitset_t.has_any (method) -ida_hexrays.bitset_t.has_common (method) -ida_hexrays.bitset_t.inc (method) -ida_hexrays.bitset_t.includes (method) -ida_hexrays.bitset_t.intersect (method) -ida_hexrays.bitset_t.is_subset_of (method) -ida_hexrays.bitset_t.itat (method) -ida_hexrays.bitset_t.itv (method) -ida_hexrays.bitset_t.last (method) -ida_hexrays.bitset_t.shift_down (method) -ida_hexrays.bitset_t.sub (method) -ida_hexrays.bitset_t.swap (method) -ida_hexrays.block_chains_begin (function) -ida_hexrays.block_chains_clear (function) -ida_hexrays.block_chains_end (function) -ida_hexrays.block_chains_erase (function) -ida_hexrays.block_chains_find (function) -ida_hexrays.block_chains_free (function) -ida_hexrays.block_chains_get (function) -ida_hexrays.block_chains_insert (function) -ida_hexrays.block_chains_iterator_t (class) -ida_hexrays.block_chains_iterator_t.__eq__ (method) -ida_hexrays.block_chains_iterator_t.__init__ (method) -ida_hexrays.block_chains_iterator_t.__ne__ (method) -ida_hexrays.block_chains_new (function) -ida_hexrays.block_chains_next (function) -ida_hexrays.block_chains_prev (function) -ida_hexrays.block_chains_size (function) -ida_hexrays.block_chains_t (class) -ida_hexrays.block_chains_t.__init__ (method) -ida_hexrays.block_chains_t._print (method) -ida_hexrays.block_chains_t.dstr (method) -ida_hexrays.block_chains_t.get_chain (method) -ida_hexrays.block_chains_t.get_reg_chain (method) -ida_hexrays.block_chains_t.get_stk_chain (method) -ida_hexrays.block_chains_vec_t (class) -ida_hexrays.block_chains_vec_t.__getitem__ (method) -ida_hexrays.block_chains_vec_t.__init__ (method) -ida_hexrays.block_chains_vec_t.__len__ (method) -ida_hexrays.block_chains_vec_t.__setitem__ (method) -ida_hexrays.block_chains_vec_t.at (method) -ida_hexrays.block_chains_vec_t.begin (method) -ida_hexrays.block_chains_vec_t.capacity (method) -ida_hexrays.block_chains_vec_t.clear (method) -ida_hexrays.block_chains_vec_t.empty (method) -ida_hexrays.block_chains_vec_t.end (method) -ida_hexrays.block_chains_vec_t.erase (method) -ida_hexrays.block_chains_vec_t.extract (method) -ida_hexrays.block_chains_vec_t.grow (method) -ida_hexrays.block_chains_vec_t.inject (method) -ida_hexrays.block_chains_vec_t.insert (method) -ida_hexrays.block_chains_vec_t.pop_back (method) -ida_hexrays.block_chains_vec_t.push_back (method) -ida_hexrays.block_chains_vec_t.qclear (method) -ida_hexrays.block_chains_vec_t.reserve (method) -ida_hexrays.block_chains_vec_t.resize (method) -ida_hexrays.block_chains_vec_t.size (method) -ida_hexrays.block_chains_vec_t.swap (method) -ida_hexrays.block_chains_vec_t.truncate (method) -ida_hexrays.boundaries_begin (function) -ida_hexrays.boundaries_clear (function) -ida_hexrays.boundaries_end (function) -ida_hexrays.boundaries_erase (function) -ida_hexrays.boundaries_find (function) -ida_hexrays.boundaries_first (function) -ida_hexrays.boundaries_free (function) -ida_hexrays.boundaries_insert (function) -ida_hexrays.boundaries_iterator_t (class) -ida_hexrays.boundaries_iterator_t.__eq__ (method) -ida_hexrays.boundaries_iterator_t.__init__ (method) -ida_hexrays.boundaries_iterator_t.__ne__ (method) -ida_hexrays.boundaries_new (function) -ida_hexrays.boundaries_next (function) -ida_hexrays.boundaries_prev (function) -ida_hexrays.boundaries_second (function) -ida_hexrays.boundaries_size (function) -ida_hexrays.boundaries_t (class) -ida_hexrays.boundaries_t.__init__ (method) -ida_hexrays.boundaries_t.at (method) -ida_hexrays.boundaries_t.size (method) -ida_hexrays.call_helper (function) -ida_hexrays.carg_t (class) -ida_hexrays.carg_t.__eq__ (method) -ida_hexrays.carg_t.__ge__ (method) -ida_hexrays.carg_t.__gt__ (method) -ida_hexrays.carg_t.__init__ (method) -ida_hexrays.carg_t.__le__ (method) -ida_hexrays.carg_t.__lt__ (method) -ida_hexrays.carg_t.__ne__ (method) -ida_hexrays.carg_t.compare (method) -ida_hexrays.carg_t.consume_cexpr (method) -ida_hexrays.carg_t.formal_type (variable) -ida_hexrays.carg_t.is_vararg (variable) -ida_hexrays.carglist_t (class) -ida_hexrays.carglist_t.__eq__ (method) -ida_hexrays.carglist_t.__ge__ (method) -ida_hexrays.carglist_t.__gt__ (method) -ida_hexrays.carglist_t.__init__ (method) -ida_hexrays.carglist_t.__le__ (method) -ida_hexrays.carglist_t.__lt__ (method) -ida_hexrays.carglist_t.__ne__ (method) -ida_hexrays.carglist_t.compare (method) -ida_hexrays.carglist_t.flags (variable) -ida_hexrays.carglist_t.functype (variable) -ida_hexrays.casm_t (class) -ida_hexrays.casm_t.__eq__ (method) -ida_hexrays.casm_t.__ge__ (method) -ida_hexrays.casm_t.__gt__ (method) -ida_hexrays.casm_t.__init__ (method) -ida_hexrays.casm_t.__le__ (method) -ida_hexrays.casm_t.__lt__ (method) -ida_hexrays.casm_t.__ne__ (method) -ida_hexrays.casm_t.compare (method) -ida_hexrays.casm_t.one_insn (method) -ida_hexrays.cblock_t (class) -ida_hexrays.cblock_t.__eq__ (method) -ida_hexrays.cblock_t.__ge__ (method) -ida_hexrays.cblock_t.__gt__ (method) -ida_hexrays.cblock_t.__init__ (method) -ida_hexrays.cblock_t.__le__ (method) -ida_hexrays.cblock_t.__lt__ (method) -ida_hexrays.cblock_t.__ne__ (method) -ida_hexrays.cblock_t._deregister (method) -ida_hexrays.cblock_t.compare (method) -ida_hexrays.ccase_t (class) -ida_hexrays.ccase_t.__eq__ (method) -ida_hexrays.ccase_t.__ge__ (method) -ida_hexrays.ccase_t.__gt__ (method) -ida_hexrays.ccase_t.__init__ (method) -ida_hexrays.ccase_t.__le__ (method) -ida_hexrays.ccase_t.__lt__ (method) -ida_hexrays.ccase_t.__ne__ (method) -ida_hexrays.ccase_t.compare (method) -ida_hexrays.ccase_t.size (method) -ida_hexrays.ccase_t.value (method) -ida_hexrays.ccase_t.values (variable) -ida_hexrays.ccases_t (class) -ida_hexrays.ccases_t.__eq__ (method) -ida_hexrays.ccases_t.__ge__ (method) -ida_hexrays.ccases_t.__gt__ (method) -ida_hexrays.ccases_t.__init__ (method) -ida_hexrays.ccases_t.__le__ (method) -ida_hexrays.ccases_t.__lt__ (method) -ida_hexrays.ccases_t.__ne__ (method) -ida_hexrays.ccases_t.compare (method) -ida_hexrays.cdg_insn_iterator_t (class) -ida_hexrays.cdg_insn_iterator_t.__init__ (method) -ida_hexrays.cdg_insn_iterator_t.dslot_with_xrefs (method) -ida_hexrays.cdg_insn_iterator_t.has_dslot (method) -ida_hexrays.cdg_insn_iterator_t.is_severed_dslot (method) -ida_hexrays.cdg_insn_iterator_t.next (method) -ida_hexrays.cdg_insn_iterator_t.ok (method) -ida_hexrays.cdg_insn_iterator_t.start (method) -ida_hexrays.cdo_t (class) -ida_hexrays.cdo_t.__eq__ (method) -ida_hexrays.cdo_t.__ge__ (method) -ida_hexrays.cdo_t.__gt__ (method) -ida_hexrays.cdo_t.__init__ (method) -ida_hexrays.cdo_t.__le__ (method) -ida_hexrays.cdo_t.__lt__ (method) -ida_hexrays.cdo_t.__ne__ (method) -ida_hexrays.cdo_t.compare (method) -ida_hexrays.ceinsn_t (class) -ida_hexrays.ceinsn_t.__init__ (method) -ida_hexrays.ceinsn_t.expr (variable) -ida_hexrays.cexpr_operands (function) -ida_hexrays.cexpr_t (class) -ida_hexrays.cexpr_t.__eq__ (method) -ida_hexrays.cexpr_t.__ge__ (method) -ida_hexrays.cexpr_t.__gt__ (method) -ida_hexrays.cexpr_t.__init__ (method) -ida_hexrays.cexpr_t.__le__ (method) -ida_hexrays.cexpr_t.__lt__ (method) -ida_hexrays.cexpr_t.__ne__ (method) -ida_hexrays.cexpr_t._deregister (method) -ida_hexrays.cexpr_t._get_a (method) -ida_hexrays.cexpr_t._get_fpc (method) -ida_hexrays.cexpr_t._get_helper (method) -ida_hexrays.cexpr_t._get_insn (method) -ida_hexrays.cexpr_t._get_m (method) -ida_hexrays.cexpr_t._get_n (method) -ida_hexrays.cexpr_t._get_obj_ea (method) -ida_hexrays.cexpr_t._get_ptrsize (method) -ida_hexrays.cexpr_t._get_refwidth (method) -ida_hexrays.cexpr_t._get_string (method) -ida_hexrays.cexpr_t._get_x (method) -ida_hexrays.cexpr_t._get_y (method) -ida_hexrays.cexpr_t._get_z (method) -ida_hexrays.cexpr_t._register (method) -ida_hexrays.cexpr_t._replace_by (method) -ida_hexrays.cexpr_t._set_a (method) -ida_hexrays.cexpr_t._set_fpc (method) -ida_hexrays.cexpr_t._set_helper (method) -ida_hexrays.cexpr_t._set_insn (method) -ida_hexrays.cexpr_t._set_m (method) -ida_hexrays.cexpr_t._set_n (method) -ida_hexrays.cexpr_t._set_obj_ea (method) -ida_hexrays.cexpr_t._set_ptrsize (method) -ida_hexrays.cexpr_t._set_refwidth (method) -ida_hexrays.cexpr_t._set_string (method) -ida_hexrays.cexpr_t._set_x (method) -ida_hexrays.cexpr_t._set_y (method) -ida_hexrays.cexpr_t._set_z (method) -ida_hexrays.cexpr_t.a (variable) -ida_hexrays.cexpr_t.assign (method) -ida_hexrays.cexpr_t.calc_type (method) -ida_hexrays.cexpr_t.cleanup (method) -ida_hexrays.cexpr_t.compare (method) -ida_hexrays.cexpr_t.contains_comma (method) -ida_hexrays.cexpr_t.contains_comma_or_insn_or_label (method) -ida_hexrays.cexpr_t.contains_insn (method) -ida_hexrays.cexpr_t.contains_insn_or_label (method) -ida_hexrays.cexpr_t.contains_operator (method) -ida_hexrays.cexpr_t.cpadone (method) -ida_hexrays.cexpr_t.dstr (method) -ida_hexrays.cexpr_t.equal_effect (method) -ida_hexrays.cexpr_t.exflags (variable) -ida_hexrays.cexpr_t.find_num_op (method) -ida_hexrays.cexpr_t.find_op (method) -ida_hexrays.cexpr_t.fpc (variable) -ida_hexrays.cexpr_t.get_1num_op (method) -ida_hexrays.cexpr_t.get_const_value (method) -ida_hexrays.cexpr_t.get_high_nbit_bound (method) -ida_hexrays.cexpr_t.get_low_nbit_bound (method) -ida_hexrays.cexpr_t.get_ptr_or_array (method) -ida_hexrays.cexpr_t.get_type_sign (method) -ida_hexrays.cexpr_t.get_v (method) -ida_hexrays.cexpr_t.has_side_effects (method) -ida_hexrays.cexpr_t.helper (variable) -ida_hexrays.cexpr_t.insn (variable) -ida_hexrays.cexpr_t.is_call_arg_of (method) -ida_hexrays.cexpr_t.is_call_object_of (method) -ida_hexrays.cexpr_t.is_child_of (method) -ida_hexrays.cexpr_t.is_const_value (method) -ida_hexrays.cexpr_t.is_cstr (method) -ida_hexrays.cexpr_t.is_fpop (method) -ida_hexrays.cexpr_t.is_jumpout (method) -ida_hexrays.cexpr_t.is_negative_const (method) -ida_hexrays.cexpr_t.is_nice_cond (method) -ida_hexrays.cexpr_t.is_nice_expr (method) -ida_hexrays.cexpr_t.is_non_negative_const (method) -ida_hexrays.cexpr_t.is_non_zero_const (method) -ida_hexrays.cexpr_t.is_odd_lvalue (method) -ida_hexrays.cexpr_t.is_type_signed (method) -ida_hexrays.cexpr_t.is_type_unsigned (method) -ida_hexrays.cexpr_t.is_undef_val (method) -ida_hexrays.cexpr_t.is_vftable (method) -ida_hexrays.cexpr_t.is_zero_const (method) -ida_hexrays.cexpr_t.m (variable) -ida_hexrays.cexpr_t.maybe_ptr (method) -ida_hexrays.cexpr_t.n (variable) -ida_hexrays.cexpr_t.numval (method) -ida_hexrays.cexpr_t.obj_ea (variable) -ida_hexrays.cexpr_t.print1 (method) -ida_hexrays.cexpr_t.ptrsize (variable) -ida_hexrays.cexpr_t.put_number (method) -ida_hexrays.cexpr_t.refwidth (variable) -ida_hexrays.cexpr_t.requires_lvalue (method) -ida_hexrays.cexpr_t.set_cpadone (method) -ida_hexrays.cexpr_t.set_v (method) -ida_hexrays.cexpr_t.set_vftable (method) -ida_hexrays.cexpr_t.string (variable) -ida_hexrays.cexpr_t.swap (method) -ida_hexrays.cexpr_t.theother (method) -ida_hexrays.cexpr_t.type (variable) -ida_hexrays.cexpr_t.v (variable) -ida_hexrays.cexpr_t.x (variable) -ida_hexrays.cexpr_t.y (variable) -ida_hexrays.cexpr_t.z (variable) -ida_hexrays.cfor_t (class) -ida_hexrays.cfor_t.__eq__ (method) -ida_hexrays.cfor_t.__ge__ (method) -ida_hexrays.cfor_t.__gt__ (method) -ida_hexrays.cfor_t.__init__ (method) -ida_hexrays.cfor_t.__le__ (method) -ida_hexrays.cfor_t.__lt__ (method) -ida_hexrays.cfor_t.__ne__ (method) -ida_hexrays.cfor_t.compare (method) -ida_hexrays.cfor_t.init (variable) -ida_hexrays.cfor_t.step (variable) -ida_hexrays.cfunc_parentee_t (class) -ida_hexrays.cfunc_parentee_t.__disown__ (method) -ida_hexrays.cfunc_parentee_t.__init__ (method) -ida_hexrays.cfunc_parentee_t.calc_rvalue_type (method) -ida_hexrays.cfunc_parentee_t.func (variable) -ida_hexrays.cfunc_t (class) -ida_hexrays.cfunc_t.__init__ (method) -ida_hexrays.cfunc_t.__str__ (method) -ida_hexrays.cfunc_t.argidx (variable) -ida_hexrays.cfunc_t.body (variable) -ida_hexrays.cfunc_t.build_c_tree (method) -ida_hexrays.cfunc_t.del_orphan_cmts (method) -ida_hexrays.cfunc_t.entry_ea (variable) -ida_hexrays.cfunc_t.find_item_coords (method) -ida_hexrays.cfunc_t.find_label (method) -ida_hexrays.cfunc_t.gather_derefs (method) -ida_hexrays.cfunc_t.get_boundaries (method) -ida_hexrays.cfunc_t.get_eamap (method) -ida_hexrays.cfunc_t.get_func_type (method) -ida_hexrays.cfunc_t.get_line_item (method) -ida_hexrays.cfunc_t.get_lvars (method) -ida_hexrays.cfunc_t.get_pseudocode (method) -ida_hexrays.cfunc_t.get_stkoff_delta (method) -ida_hexrays.cfunc_t.get_user_cmt (method) -ida_hexrays.cfunc_t.get_user_iflags (method) -ida_hexrays.cfunc_t.get_user_union_selection (method) -ida_hexrays.cfunc_t.get_warnings (method) -ida_hexrays.cfunc_t.has_orphan_cmts (method) -ida_hexrays.cfunc_t.hdrlines (variable) -ida_hexrays.cfunc_t.locked (method) -ida_hexrays.cfunc_t.maturity (variable) -ida_hexrays.cfunc_t.mba (variable) -ida_hexrays.cfunc_t.numforms (variable) -ida_hexrays.cfunc_t.print_dcl (method) -ida_hexrays.cfunc_t.print_func (method) -ida_hexrays.cfunc_t.refcnt (variable) -ida_hexrays.cfunc_t.refresh_func_ctext (method) -ida_hexrays.cfunc_t.release (method) -ida_hexrays.cfunc_t.remove_unused_labels (method) -ida_hexrays.cfunc_t.save_user_cmts (method) -ida_hexrays.cfunc_t.save_user_iflags (method) -ida_hexrays.cfunc_t.save_user_labels (method) -ida_hexrays.cfunc_t.save_user_numforms (method) -ida_hexrays.cfunc_t.save_user_unions (method) -ida_hexrays.cfunc_t.set_user_cmt (method) -ida_hexrays.cfunc_t.set_user_iflags (method) -ida_hexrays.cfunc_t.set_user_union_selection (method) -ida_hexrays.cfunc_t.statebits (variable) -ida_hexrays.cfunc_t.treeitems (variable) -ida_hexrays.cfunc_t.user_cmts (variable) -ida_hexrays.cfunc_t.user_iflags (variable) -ida_hexrays.cfunc_t.user_labels (variable) -ida_hexrays.cfunc_t.user_unions (variable) -ida_hexrays.cfunc_t.verify (method) -ida_hexrays.cfunc_type (function) -ida_hexrays.cfuncptr_t (class) -ida_hexrays.cfuncptr_t.__deref__ (method) -ida_hexrays.cfuncptr_t.__init__ (method) -ida_hexrays.cfuncptr_t.__ptrval__ (method) -ida_hexrays.cfuncptr_t.__ref__ (method) -ida_hexrays.cfuncptr_t.__str__ (method) -ida_hexrays.cfuncptr_t.build_c_tree (method) -ida_hexrays.cfuncptr_t.del_orphan_cmts (method) -ida_hexrays.cfuncptr_t.find_item_coords (method) -ida_hexrays.cfuncptr_t.find_label (method) -ida_hexrays.cfuncptr_t.gather_derefs (method) -ida_hexrays.cfuncptr_t.get_boundaries (method) -ida_hexrays.cfuncptr_t.get_eamap (method) -ida_hexrays.cfuncptr_t.get_func_type (method) -ida_hexrays.cfuncptr_t.get_line_item (method) -ida_hexrays.cfuncptr_t.get_lvars (method) -ida_hexrays.cfuncptr_t.get_pseudocode (method) -ida_hexrays.cfuncptr_t.get_stkoff_delta (method) -ida_hexrays.cfuncptr_t.get_user_cmt (method) -ida_hexrays.cfuncptr_t.get_user_iflags (method) -ida_hexrays.cfuncptr_t.get_user_union_selection (method) -ida_hexrays.cfuncptr_t.get_warnings (method) -ida_hexrays.cfuncptr_t.has_orphan_cmts (method) -ida_hexrays.cfuncptr_t.locked (method) -ida_hexrays.cfuncptr_t.print_dcl (method) -ida_hexrays.cfuncptr_t.print_func (method) -ida_hexrays.cfuncptr_t.refresh_func_ctext (method) -ida_hexrays.cfuncptr_t.release (method) -ida_hexrays.cfuncptr_t.remove_unused_labels (method) -ida_hexrays.cfuncptr_t.reset (method) -ida_hexrays.cfuncptr_t.save_user_cmts (method) -ida_hexrays.cfuncptr_t.save_user_iflags (method) -ida_hexrays.cfuncptr_t.save_user_labels (method) -ida_hexrays.cfuncptr_t.save_user_numforms (method) -ida_hexrays.cfuncptr_t.save_user_unions (method) -ida_hexrays.cfuncptr_t.set_user_cmt (method) -ida_hexrays.cfuncptr_t.set_user_iflags (method) -ida_hexrays.cfuncptr_t.set_user_union_selection (method) -ida_hexrays.cfuncptr_t.verify (method) -ida_hexrays.cgoto_t (class) -ida_hexrays.cgoto_t.__eq__ (method) -ida_hexrays.cgoto_t.__ge__ (method) -ida_hexrays.cgoto_t.__gt__ (method) -ida_hexrays.cgoto_t.__init__ (method) -ida_hexrays.cgoto_t.__le__ (method) -ida_hexrays.cgoto_t.__lt__ (method) -ida_hexrays.cgoto_t.__ne__ (method) -ida_hexrays.cgoto_t.compare (method) -ida_hexrays.cgoto_t.label_num (variable) -ida_hexrays.chain_keeper_t (class) -ida_hexrays.chain_keeper_t.__init__ (method) -ida_hexrays.chain_keeper_t.back (method) -ida_hexrays.chain_keeper_t.for_all_chains (method) -ida_hexrays.chain_keeper_t.front (method) -ida_hexrays.chain_t (class) -ida_hexrays.chain_t.__init__ (method) -ida_hexrays.chain_t.__lt__ (method) -ida_hexrays.chain_t._print (method) -ida_hexrays.chain_t.append_list (method) -ida_hexrays.chain_t.clear_varnum (method) -ida_hexrays.chain_t.dstr (method) -ida_hexrays.chain_t.endoff (method) -ida_hexrays.chain_t.flags (variable) -ida_hexrays.chain_t.get_reg (method) -ida_hexrays.chain_t.get_stkoff (method) -ida_hexrays.chain_t.includes (method) -ida_hexrays.chain_t.is_fake (method) -ida_hexrays.chain_t.is_inited (method) -ida_hexrays.chain_t.is_overlapped (method) -ida_hexrays.chain_t.is_passreg (method) -ida_hexrays.chain_t.is_reg (method) -ida_hexrays.chain_t.is_replaced (method) -ida_hexrays.chain_t.is_stkoff (method) -ida_hexrays.chain_t.is_term (method) -ida_hexrays.chain_t.key (method) -ida_hexrays.chain_t.overlap (method) -ida_hexrays.chain_t.set_inited (method) -ida_hexrays.chain_t.set_overlapped (method) -ida_hexrays.chain_t.set_replaced (method) -ida_hexrays.chain_t.set_term (method) -ida_hexrays.chain_t.set_value (method) -ida_hexrays.chain_t.varnum (variable) -ida_hexrays.chain_t.width (variable) -ida_hexrays.chain_visitor_t (class) -ida_hexrays.chain_visitor_t.__disown__ (method) -ida_hexrays.chain_visitor_t.__init__ (method) -ida_hexrays.chain_visitor_t.parent (variable) -ida_hexrays.chain_visitor_t.visit_chain (method) -ida_hexrays.change_hexrays_config (function) -ida_hexrays.checkout_hexrays_license (function) -ida_hexrays.cif_t (class) -ida_hexrays.cif_t.__eq__ (method) -ida_hexrays.cif_t.__ge__ (method) -ida_hexrays.cif_t.__gt__ (method) -ida_hexrays.cif_t.__init__ (method) -ida_hexrays.cif_t.__le__ (method) -ida_hexrays.cif_t.__lt__ (method) -ida_hexrays.cif_t.__ne__ (method) -ida_hexrays.cif_t.assign (method) -ida_hexrays.cif_t.cleanup (method) -ida_hexrays.cif_t.compare (method) -ida_hexrays.cif_t.ielse (variable) -ida_hexrays.cif_t.ithen (variable) -ida_hexrays.cinsn_details (function) -ida_hexrays.cinsn_list_t (class) -ida_hexrays.cinsn_list_t.__eq__ (method) -ida_hexrays.cinsn_list_t.__getitem__ (method) -ida_hexrays.cinsn_list_t.__init__ (method) -ida_hexrays.cinsn_list_t.__len__ (method) -ida_hexrays.cinsn_list_t.__ne__ (method) -ida_hexrays.cinsn_list_t.__setitem__ (method) -ida_hexrays.cinsn_list_t.at (method) -ida_hexrays.cinsn_list_t.back (method) -ida_hexrays.cinsn_list_t.begin (method) -ida_hexrays.cinsn_list_t.clear (method) -ida_hexrays.cinsn_list_t.empty (method) -ida_hexrays.cinsn_list_t.end (method) -ida_hexrays.cinsn_list_t.erase (method) -ida_hexrays.cinsn_list_t.find (method) -ida_hexrays.cinsn_list_t.front (method) -ida_hexrays.cinsn_list_t.index (method) -ida_hexrays.cinsn_list_t.insert (method) -ida_hexrays.cinsn_list_t.pop_back (method) -ida_hexrays.cinsn_list_t.pop_front (method) -ida_hexrays.cinsn_list_t.push_back (method) -ida_hexrays.cinsn_list_t.push_front (method) -ida_hexrays.cinsn_list_t.rbegin (method) -ida_hexrays.cinsn_list_t.remove (method) -ida_hexrays.cinsn_list_t.rend (method) -ida_hexrays.cinsn_list_t.size (method) -ida_hexrays.cinsn_list_t.swap (method) -ida_hexrays.cinsn_list_t_iterator (class) -ida_hexrays.cinsn_list_t_iterator.__eq__ (method) -ida_hexrays.cinsn_list_t_iterator.__init__ (method) -ida_hexrays.cinsn_list_t_iterator.__ne__ (method) -ida_hexrays.cinsn_list_t_iterator.__next__ (method) -ida_hexrays.cinsn_t (class) -ida_hexrays.cinsn_t.__eq__ (method) -ida_hexrays.cinsn_t.__ge__ (method) -ida_hexrays.cinsn_t.__gt__ (method) -ida_hexrays.cinsn_t.__init__ (method) -ida_hexrays.cinsn_t.__le__ (method) -ida_hexrays.cinsn_t.__lt__ (method) -ida_hexrays.cinsn_t.__ne__ (method) -ida_hexrays.cinsn_t._deregister (method) -ida_hexrays.cinsn_t._get_casm (method) -ida_hexrays.cinsn_t._get_cblock (method) -ida_hexrays.cinsn_t._get_cdo (method) -ida_hexrays.cinsn_t._get_cexpr (method) -ida_hexrays.cinsn_t._get_cfor (method) -ida_hexrays.cinsn_t._get_cgoto (method) -ida_hexrays.cinsn_t._get_cif (method) -ida_hexrays.cinsn_t._get_creturn (method) -ida_hexrays.cinsn_t._get_cswitch (method) -ida_hexrays.cinsn_t._get_cwhile (method) -ida_hexrays.cinsn_t._print (method) -ida_hexrays.cinsn_t._register (method) -ida_hexrays.cinsn_t._replace_by (method) -ida_hexrays.cinsn_t._set_casm (method) -ida_hexrays.cinsn_t._set_cblock (method) -ida_hexrays.cinsn_t._set_cdo (method) -ida_hexrays.cinsn_t._set_cexpr (method) -ida_hexrays.cinsn_t._set_cfor (method) -ida_hexrays.cinsn_t._set_cgoto (method) -ida_hexrays.cinsn_t._set_cif (method) -ida_hexrays.cinsn_t._set_creturn (method) -ida_hexrays.cinsn_t._set_cswitch (method) -ida_hexrays.cinsn_t._set_cwhile (method) -ida_hexrays.cinsn_t.assign (method) -ida_hexrays.cinsn_t.casm (variable) -ida_hexrays.cinsn_t.cblock (variable) -ida_hexrays.cinsn_t.cdo (variable) -ida_hexrays.cinsn_t.cexpr (variable) -ida_hexrays.cinsn_t.cfor (variable) -ida_hexrays.cinsn_t.cgoto (variable) -ida_hexrays.cinsn_t.cif (variable) -ida_hexrays.cinsn_t.cleanup (method) -ida_hexrays.cinsn_t.collect_free_breaks (method) -ida_hexrays.cinsn_t.collect_free_continues (method) -ida_hexrays.cinsn_t.compare (method) -ida_hexrays.cinsn_t.contains_free_break (method) -ida_hexrays.cinsn_t.contains_free_continue (method) -ida_hexrays.cinsn_t.contains_insn (method) -ida_hexrays.cinsn_t.create_if (method) -ida_hexrays.cinsn_t.creturn (variable) -ida_hexrays.cinsn_t.cswitch (variable) -ida_hexrays.cinsn_t.cwhile (variable) -ida_hexrays.cinsn_t.dstr (method) -ida_hexrays.cinsn_t.insn_is_epilog (method) -ida_hexrays.cinsn_t.is_epilog (method) -ida_hexrays.cinsn_t.is_ordinary_flow (method) -ida_hexrays.cinsn_t.new_insn (method) -ida_hexrays.cinsn_t.print1 (method) -ida_hexrays.cinsn_t.swap (method) -ida_hexrays.cinsn_t.zero (method) -ida_hexrays.cinsn_t_insn_is_epilog (function) -ida_hexrays.cinsnptrvec_t (class) -ida_hexrays.cinsnptrvec_t.__eq__ (method) -ida_hexrays.cinsnptrvec_t.__getitem__ (method) -ida_hexrays.cinsnptrvec_t.__init__ (method) -ida_hexrays.cinsnptrvec_t.__len__ (method) -ida_hexrays.cinsnptrvec_t.__ne__ (method) -ida_hexrays.cinsnptrvec_t.__setitem__ (method) -ida_hexrays.cinsnptrvec_t._del (method) -ida_hexrays.cinsnptrvec_t.add_unique (method) -ida_hexrays.cinsnptrvec_t.at (method) -ida_hexrays.cinsnptrvec_t.begin (method) -ida_hexrays.cinsnptrvec_t.capacity (method) -ida_hexrays.cinsnptrvec_t.clear (method) -ida_hexrays.cinsnptrvec_t.empty (method) -ida_hexrays.cinsnptrvec_t.end (method) -ida_hexrays.cinsnptrvec_t.erase (method) -ida_hexrays.cinsnptrvec_t.extract (method) -ida_hexrays.cinsnptrvec_t.find (method) -ida_hexrays.cinsnptrvec_t.has (method) -ida_hexrays.cinsnptrvec_t.inject (method) -ida_hexrays.cinsnptrvec_t.insert (method) -ida_hexrays.cinsnptrvec_t.pop_back (method) -ida_hexrays.cinsnptrvec_t.push_back (method) -ida_hexrays.cinsnptrvec_t.qclear (method) -ida_hexrays.cinsnptrvec_t.reserve (method) -ida_hexrays.cinsnptrvec_t.resize (method) -ida_hexrays.cinsnptrvec_t.size (method) -ida_hexrays.cinsnptrvec_t.swap (method) -ida_hexrays.cinsnptrvec_t.truncate (method) -ida_hexrays.cit_asm (variable) -ida_hexrays.cit_block (variable) -ida_hexrays.cit_break (variable) -ida_hexrays.cit_continue (variable) -ida_hexrays.cit_do (variable) -ida_hexrays.cit_empty (variable) -ida_hexrays.cit_expr (variable) -ida_hexrays.cit_for (variable) -ida_hexrays.cit_goto (variable) -ida_hexrays.cit_if (variable) -ida_hexrays.cit_return (variable) -ida_hexrays.cit_switch (variable) -ida_hexrays.cit_while (variable) -ida_hexrays.citem_cmt_t (class) -ida_hexrays.citem_cmt_t.__init__ (method) -ida_hexrays.citem_cmt_t.__str__ (method) -ida_hexrays.citem_cmt_t.c_str (method) -ida_hexrays.citem_cmt_t.used (variable) -ida_hexrays.citem_locator_t (class) -ida_hexrays.citem_locator_t.__eq__ (method) -ida_hexrays.citem_locator_t.__ge__ (method) -ida_hexrays.citem_locator_t.__gt__ (method) -ida_hexrays.citem_locator_t.__init__ (method) -ida_hexrays.citem_locator_t.__le__ (method) -ida_hexrays.citem_locator_t.__lt__ (method) -ida_hexrays.citem_locator_t.__ne__ (method) -ida_hexrays.citem_locator_t.compare (method) -ida_hexrays.citem_locator_t.ea (variable) -ida_hexrays.citem_locator_t.op (variable) -ida_hexrays.citem_t (class) -ida_hexrays.citem_t.__dbg_get_meminfo (method) -ida_hexrays.citem_t.__dbg_get_registered_kind (method) -ida_hexrays.citem_t.__init__ (method) -ida_hexrays.citem_t._acquire_ownership (method) -ida_hexrays.citem_t._ensure_cond (method) -ida_hexrays.citem_t._ensure_no_obj (method) -ida_hexrays.citem_t._ensure_no_op (method) -ida_hexrays.citem_t._ensure_ownership_transferrable (method) -ida_hexrays.citem_t._get_op (method) -ida_hexrays.citem_t._maybe_disown_and_deregister (method) -ida_hexrays.citem_t._meminfo (method) -ida_hexrays.citem_t._obj_id (method) -ida_hexrays.citem_t._own_and_register (method) -ida_hexrays.citem_t._set_op (method) -ida_hexrays.citem_t.contains_expr (method) -ida_hexrays.citem_t.contains_label (method) -ida_hexrays.citem_t.ea (variable) -ida_hexrays.citem_t.find_closest_addr (method) -ida_hexrays.citem_t.find_parent_of (method) -ida_hexrays.citem_t.index (variable) -ida_hexrays.citem_t.is_expr (method) -ida_hexrays.citem_t.label_num (variable) -ida_hexrays.citem_t.op (variable) -ida_hexrays.citem_t.print1 (method) -ida_hexrays.citem_t.replace_by (method) -ida_hexrays.citem_t.swap (method) -ida_hexrays.citem_to_specific_type (function) -ida_hexrays.clear_cached_cfuncs (function) -ida_hexrays.cloop_t (class) -ida_hexrays.cloop_t.__init__ (method) -ida_hexrays.cloop_t.assign (method) -ida_hexrays.cloop_t.cleanup (method) -ida_hexrays.close_hexrays_waitbox (function) -ida_hexrays.close_pseudocode (function) -ida_hexrays.cnumber_t (class) -ida_hexrays.cnumber_t.__eq__ (method) -ida_hexrays.cnumber_t.__ge__ (method) -ida_hexrays.cnumber_t.__gt__ (method) -ida_hexrays.cnumber_t.__init__ (method) -ida_hexrays.cnumber_t.__le__ (method) -ida_hexrays.cnumber_t.__lt__ (method) -ida_hexrays.cnumber_t.__ne__ (method) -ida_hexrays.cnumber_t._print (method) -ida_hexrays.cnumber_t._value (variable) -ida_hexrays.cnumber_t.assign (method) -ida_hexrays.cnumber_t.compare (method) -ida_hexrays.cnumber_t.nf (variable) -ida_hexrays.cnumber_t.value (method) -ida_hexrays.codegen_t (class) -ida_hexrays.codegen_t.__init__ (method) -ida_hexrays.codegen_t.analyze_prolog (method) -ida_hexrays.codegen_t.emit (method) -ida_hexrays.codegen_t.emit_micro_mvm (method) -ida_hexrays.codegen_t.gen_micro (method) -ida_hexrays.codegen_t.load_effective_address (method) -ida_hexrays.codegen_t.load_operand (method) -ida_hexrays.codegen_t.microgen_completed (method) -ida_hexrays.codegen_t.prepare_gen_micro (method) -ida_hexrays.codegen_t.store_operand (method) -ida_hexrays.convert_to_user_call (function) -ida_hexrays.cot_add (variable) -ida_hexrays.cot_asg (variable) -ida_hexrays.cot_asgadd (variable) -ida_hexrays.cot_asgband (variable) -ida_hexrays.cot_asgbor (variable) -ida_hexrays.cot_asgmul (variable) -ida_hexrays.cot_asgsdiv (variable) -ida_hexrays.cot_asgshl (variable) -ida_hexrays.cot_asgsmod (variable) -ida_hexrays.cot_asgsshr (variable) -ida_hexrays.cot_asgsub (variable) -ida_hexrays.cot_asgudiv (variable) -ida_hexrays.cot_asgumod (variable) -ida_hexrays.cot_asgushr (variable) -ida_hexrays.cot_asgxor (variable) -ida_hexrays.cot_band (variable) -ida_hexrays.cot_bnot (variable) -ida_hexrays.cot_bor (variable) -ida_hexrays.cot_call (variable) -ida_hexrays.cot_cast (variable) -ida_hexrays.cot_comma (variable) -ida_hexrays.cot_eq (variable) -ida_hexrays.cot_fadd (variable) -ida_hexrays.cot_fdiv (variable) -ida_hexrays.cot_fmul (variable) -ida_hexrays.cot_fneg (variable) -ida_hexrays.cot_fnum (variable) -ida_hexrays.cot_fsub (variable) -ida_hexrays.cot_helper (variable) -ida_hexrays.cot_idx (variable) -ida_hexrays.cot_insn (variable) -ida_hexrays.cot_land (variable) -ida_hexrays.cot_lnot (variable) -ida_hexrays.cot_lor (variable) -ida_hexrays.cot_memptr (variable) -ida_hexrays.cot_memref (variable) -ida_hexrays.cot_mul (variable) -ida_hexrays.cot_ne (variable) -ida_hexrays.cot_neg (variable) -ida_hexrays.cot_num (variable) -ida_hexrays.cot_obj (variable) -ida_hexrays.cot_postdec (variable) -ida_hexrays.cot_postinc (variable) -ida_hexrays.cot_predec (variable) -ida_hexrays.cot_preinc (variable) -ida_hexrays.cot_ptr (variable) -ida_hexrays.cot_ref (variable) -ida_hexrays.cot_sdiv (variable) -ida_hexrays.cot_sge (variable) -ida_hexrays.cot_sgt (variable) -ida_hexrays.cot_shl (variable) -ida_hexrays.cot_sizeof (variable) -ida_hexrays.cot_sle (variable) -ida_hexrays.cot_slt (variable) -ida_hexrays.cot_smod (variable) -ida_hexrays.cot_sshr (variable) -ida_hexrays.cot_str (variable) -ida_hexrays.cot_sub (variable) -ida_hexrays.cot_tern (variable) -ida_hexrays.cot_type (variable) -ida_hexrays.cot_udiv (variable) -ida_hexrays.cot_uge (variable) -ida_hexrays.cot_ugt (variable) -ida_hexrays.cot_ule (variable) -ida_hexrays.cot_ult (variable) -ida_hexrays.cot_umod (variable) -ida_hexrays.cot_ushr (variable) -ida_hexrays.cot_var (variable) -ida_hexrays.cot_xor (variable) -ida_hexrays.create_cfunc (function) -ida_hexrays.create_empty_mba (function) -ida_hexrays.create_field_name (function) -ida_hexrays.create_helper (function) -ida_hexrays.create_typedef (function) -ida_hexrays.creturn_t (class) -ida_hexrays.creturn_t.__eq__ (method) -ida_hexrays.creturn_t.__ge__ (method) -ida_hexrays.creturn_t.__gt__ (method) -ida_hexrays.creturn_t.__init__ (method) -ida_hexrays.creturn_t.__le__ (method) -ida_hexrays.creturn_t.__lt__ (method) -ida_hexrays.creturn_t.__ne__ (method) -ida_hexrays.creturn_t.compare (method) -ida_hexrays.cswitch_t (class) -ida_hexrays.cswitch_t.__eq__ (method) -ida_hexrays.cswitch_t.__ge__ (method) -ida_hexrays.cswitch_t.__gt__ (method) -ida_hexrays.cswitch_t.__init__ (method) -ida_hexrays.cswitch_t.__le__ (method) -ida_hexrays.cswitch_t.__lt__ (method) -ida_hexrays.cswitch_t.__ne__ (method) -ida_hexrays.cswitch_t.cases (variable) -ida_hexrays.cswitch_t.compare (method) -ida_hexrays.cswitch_t.mvnf (variable) -ida_hexrays.ctext_position_t (class) -ida_hexrays.ctext_position_t.__eq__ (method) -ida_hexrays.ctext_position_t.__ge__ (method) -ida_hexrays.ctext_position_t.__gt__ (method) -ida_hexrays.ctext_position_t.__init__ (method) -ida_hexrays.ctext_position_t.__le__ (method) -ida_hexrays.ctext_position_t.__lt__ (method) -ida_hexrays.ctext_position_t.__ne__ (method) -ida_hexrays.ctext_position_t.compare (method) -ida_hexrays.ctext_position_t.in_ctree (method) -ida_hexrays.ctext_position_t.lnnum (variable) -ida_hexrays.ctext_position_t.x (variable) -ida_hexrays.ctext_position_t.y (variable) -ida_hexrays.ctree_anchor_t (class) -ida_hexrays.ctree_anchor_t.__init__ (method) -ida_hexrays.ctree_anchor_t.get_index (method) -ida_hexrays.ctree_anchor_t.get_itp (method) -ida_hexrays.ctree_anchor_t.is_blkcmt_anchor (method) -ida_hexrays.ctree_anchor_t.is_citem_anchor (method) -ida_hexrays.ctree_anchor_t.is_itp_anchor (method) -ida_hexrays.ctree_anchor_t.is_lvar_anchor (method) -ida_hexrays.ctree_anchor_t.is_valid_anchor (method) -ida_hexrays.ctree_item_t (class) -ida_hexrays.ctree_item_t.__init__ (method) -ida_hexrays.ctree_item_t._get_e (method) -ida_hexrays.ctree_item_t._get_f (method) -ida_hexrays.ctree_item_t._get_i (method) -ida_hexrays.ctree_item_t._get_it (method) -ida_hexrays.ctree_item_t._get_l (method) -ida_hexrays.ctree_item_t._print (method) -ida_hexrays.ctree_item_t.citype (variable) -ida_hexrays.ctree_item_t.dstr (method) -ida_hexrays.ctree_item_t.get_ea (method) -ida_hexrays.ctree_item_t.get_edm (method) -ida_hexrays.ctree_item_t.get_label_num (method) -ida_hexrays.ctree_item_t.get_lvar (method) -ida_hexrays.ctree_item_t.get_memptr (method) -ida_hexrays.ctree_item_t.get_udm (method) -ida_hexrays.ctree_item_t.is_citem (method) -ida_hexrays.ctree_items_t (class) -ida_hexrays.ctree_items_t.__eq__ (method) -ida_hexrays.ctree_items_t.__getitem__ (method) -ida_hexrays.ctree_items_t.__init__ (method) -ida_hexrays.ctree_items_t.__len__ (method) -ida_hexrays.ctree_items_t.__ne__ (method) -ida_hexrays.ctree_items_t.__setitem__ (method) -ida_hexrays.ctree_items_t._del (method) -ida_hexrays.ctree_items_t.add_unique (method) -ida_hexrays.ctree_items_t.at (method) -ida_hexrays.ctree_items_t.begin (method) -ida_hexrays.ctree_items_t.capacity (method) -ida_hexrays.ctree_items_t.clear (method) -ida_hexrays.ctree_items_t.empty (method) -ida_hexrays.ctree_items_t.end (method) -ida_hexrays.ctree_items_t.erase (method) -ida_hexrays.ctree_items_t.extract (method) -ida_hexrays.ctree_items_t.find (method) -ida_hexrays.ctree_items_t.has (method) -ida_hexrays.ctree_items_t.inject (method) -ida_hexrays.ctree_items_t.insert (method) -ida_hexrays.ctree_items_t.pop_back (method) -ida_hexrays.ctree_items_t.push_back (method) -ida_hexrays.ctree_items_t.qclear (method) -ida_hexrays.ctree_items_t.reserve (method) -ida_hexrays.ctree_items_t.resize (method) -ida_hexrays.ctree_items_t.size (method) -ida_hexrays.ctree_items_t.swap (method) -ida_hexrays.ctree_items_t.truncate (method) -ida_hexrays.ctree_parentee_t (class) -ida_hexrays.ctree_parentee_t.__disown__ (method) -ida_hexrays.ctree_parentee_t.__init__ (method) -ida_hexrays.ctree_parentee_t.get_block (method) -ida_hexrays.ctree_parentee_t.recalc_parent_types (method) -ida_hexrays.ctree_visitor_t (class) -ida_hexrays.ctree_visitor_t.__disown__ (method) -ida_hexrays.ctree_visitor_t.__init__ (method) -ida_hexrays.ctree_visitor_t.apply_to (method) -ida_hexrays.ctree_visitor_t.apply_to_exprs (method) -ida_hexrays.ctree_visitor_t.clr_prune (method) -ida_hexrays.ctree_visitor_t.clr_restart (method) -ida_hexrays.ctree_visitor_t.cv_flags (variable) -ida_hexrays.ctree_visitor_t.is_postorder (method) -ida_hexrays.ctree_visitor_t.leave_expr (method) -ida_hexrays.ctree_visitor_t.leave_insn (method) -ida_hexrays.ctree_visitor_t.maintain_parents (method) -ida_hexrays.ctree_visitor_t.must_prune (method) -ida_hexrays.ctree_visitor_t.must_restart (method) -ida_hexrays.ctree_visitor_t.only_insns (method) -ida_hexrays.ctree_visitor_t.parent_expr (method) -ida_hexrays.ctree_visitor_t.parent_insn (method) -ida_hexrays.ctree_visitor_t.parents (variable) -ida_hexrays.ctree_visitor_t.prune_now (method) -ida_hexrays.ctree_visitor_t.set_restart (method) -ida_hexrays.ctree_visitor_t.visit_expr (method) -ida_hexrays.ctree_visitor_t.visit_insn (method) -ida_hexrays.cwhile_t (class) -ida_hexrays.cwhile_t.__eq__ (method) -ida_hexrays.cwhile_t.__ge__ (method) -ida_hexrays.cwhile_t.__gt__ (method) -ida_hexrays.cwhile_t.__init__ (method) -ida_hexrays.cwhile_t.__le__ (method) -ida_hexrays.cwhile_t.__lt__ (method) -ida_hexrays.cwhile_t.__ne__ (method) -ida_hexrays.cwhile_t.compare (method) -ida_hexrays.debug_hexrays_ctree (function) -ida_hexrays.decompile (function) -ida_hexrays.decompile (function) -ida_hexrays.decompile_func (function) -ida_hexrays.decompile_many (function) -ida_hexrays.dereference (function) -ida_hexrays.dstr (function) -ida_hexrays.dummy_ptrtype (function) -ida_hexrays.eamap_begin (function) -ida_hexrays.eamap_clear (function) -ida_hexrays.eamap_end (function) -ida_hexrays.eamap_erase (function) -ida_hexrays.eamap_find (function) -ida_hexrays.eamap_first (function) -ida_hexrays.eamap_free (function) -ida_hexrays.eamap_insert (function) -ida_hexrays.eamap_iterator_t (class) -ida_hexrays.eamap_iterator_t.__eq__ (method) -ida_hexrays.eamap_iterator_t.__init__ (method) -ida_hexrays.eamap_iterator_t.__ne__ (method) -ida_hexrays.eamap_new (function) -ida_hexrays.eamap_next (function) -ida_hexrays.eamap_prev (function) -ida_hexrays.eamap_second (function) -ida_hexrays.eamap_size (function) -ida_hexrays.eamap_t (class) -ida_hexrays.eamap_t.__init__ (method) -ida_hexrays.eamap_t.at (method) -ida_hexrays.eamap_t.size (method) -ida_hexrays.fnumber_t (class) -ida_hexrays.fnumber_t.__eq__ (method) -ida_hexrays.fnumber_t.__ge__ (method) -ida_hexrays.fnumber_t.__gt__ (method) -ida_hexrays.fnumber_t.__init__ (method) -ida_hexrays.fnumber_t.__le__ (method) -ida_hexrays.fnumber_t.__lt__ (method) -ida_hexrays.fnumber_t.__ne__ (method) -ida_hexrays.fnumber_t._print (method) -ida_hexrays.fnumber_t.compare (method) -ida_hexrays.fnumber_t.dereference_const_uint16 (method) -ida_hexrays.fnumber_t.dereference_uint16 (method) -ida_hexrays.fnumber_t.fnum (variable) -ida_hexrays.fnumber_t.nbytes (variable) -ida_hexrays.gco_info_t (class) -ida_hexrays.gco_info_t.__init__ (method) -ida_hexrays.gco_info_t.append_to_list (method) -ida_hexrays.gco_info_t.cvt_to_ivl (method) -ida_hexrays.gco_info_t.is_def (method) -ida_hexrays.gco_info_t.is_reg (method) -ida_hexrays.gco_info_t.is_use (method) -ida_hexrays.gco_info_t.name (variable) -ida_hexrays.gco_info_t.regnum (variable) -ida_hexrays.gco_info_t.size (variable) -ida_hexrays.gco_info_t.stkoff (variable) -ida_hexrays.gen_microcode (function) -ida_hexrays.get_ctype_name (function) -ida_hexrays.get_current_operand (function) -ida_hexrays.get_float_type (function) -ida_hexrays.get_hexrays_version (function) -ida_hexrays.get_int_type_by_width_and_sign (function) -ida_hexrays.get_member_type (function) -ida_hexrays.get_merror_desc (function) -ida_hexrays.get_mreg_name (function) -ida_hexrays.get_op_signness (function) -ida_hexrays.get_signed_mcode (function) -ida_hexrays.get_temp_regs (function) -ida_hexrays.get_type (function) -ida_hexrays.get_unk_type (function) -ida_hexrays.get_unsigned_mcode (function) -ida_hexrays.get_widget_vdui (function) -ida_hexrays.getb_reginsn (function) -ida_hexrays.getf_reginsn (function) -ida_hexrays.graph_chains_t (class) -ida_hexrays.graph_chains_t.__init__ (method) -ida_hexrays.graph_chains_t.acquire (method) -ida_hexrays.graph_chains_t.for_all_chains (method) -ida_hexrays.graph_chains_t.is_locked (method) -ida_hexrays.graph_chains_t.release (method) -ida_hexrays.graph_chains_t.swap (method) -ida_hexrays.has_cached_cfunc (function) -ida_hexrays.has_mcode_seloff (function) -ida_hexrays.hexrays_alloc (function) -ida_hexrays.hexrays_failure_t (class) -ida_hexrays.hexrays_failure_t.__init__ (method) -ida_hexrays.hexrays_failure_t.code (variable) -ida_hexrays.hexrays_failure_t.desc (method) -ida_hexrays.hexrays_failure_t.errea (variable) -ida_hexrays.hexrays_failure_t.str (variable) -ida_hexrays.hexrays_free (function) -ida_hexrays.hexwarn_t (class) -ida_hexrays.hexwarn_t.__eq__ (method) -ida_hexrays.hexwarn_t.__ge__ (method) -ida_hexrays.hexwarn_t.__gt__ (method) -ida_hexrays.hexwarn_t.__init__ (method) -ida_hexrays.hexwarn_t.__le__ (method) -ida_hexrays.hexwarn_t.__lt__ (method) -ida_hexrays.hexwarn_t.__ne__ (method) -ida_hexrays.hexwarn_t.compare (method) -ida_hexrays.hexwarn_t.ea (variable) -ida_hexrays.hexwarn_t.id (variable) -ida_hexrays.hexwarn_t.text (variable) -ida_hexrays.hexwarns_t (class) -ida_hexrays.hexwarns_t.__eq__ (method) -ida_hexrays.hexwarns_t.__getitem__ (method) -ida_hexrays.hexwarns_t.__init__ (method) -ida_hexrays.hexwarns_t.__len__ (method) -ida_hexrays.hexwarns_t.__ne__ (method) -ida_hexrays.hexwarns_t.__setitem__ (method) -ida_hexrays.hexwarns_t._del (method) -ida_hexrays.hexwarns_t.add_unique (method) -ida_hexrays.hexwarns_t.at (method) -ida_hexrays.hexwarns_t.begin (method) -ida_hexrays.hexwarns_t.capacity (method) -ida_hexrays.hexwarns_t.clear (method) -ida_hexrays.hexwarns_t.empty (method) -ida_hexrays.hexwarns_t.end (method) -ida_hexrays.hexwarns_t.erase (method) -ida_hexrays.hexwarns_t.extract (method) -ida_hexrays.hexwarns_t.find (method) -ida_hexrays.hexwarns_t.grow (method) -ida_hexrays.hexwarns_t.has (method) -ida_hexrays.hexwarns_t.inject (method) -ida_hexrays.hexwarns_t.insert (method) -ida_hexrays.hexwarns_t.pop_back (method) -ida_hexrays.hexwarns_t.push_back (method) -ida_hexrays.hexwarns_t.qclear (method) -ida_hexrays.hexwarns_t.reserve (method) -ida_hexrays.hexwarns_t.resize (method) -ida_hexrays.hexwarns_t.size (method) -ida_hexrays.hexwarns_t.swap (method) -ida_hexrays.hexwarns_t.truncate (method) -ida_hexrays.history_item_t (class) -ida_hexrays.history_item_t.__init__ (method) -ida_hexrays.history_item_t.ea (variable) -ida_hexrays.history_item_t.end (variable) -ida_hexrays.history_t (class) -ida_hexrays.history_t.__init__ (method) -ida_hexrays.history_t.pop (method) -ida_hexrays.history_t.push (method) -ida_hexrays.history_t.top (method) -ida_hexrays.hxe_build_callinfo (variable) -ida_hexrays.hxe_callinfo_built (variable) -ida_hexrays.hxe_calls_done (variable) -ida_hexrays.hxe_close_pseudocode (variable) -ida_hexrays.hxe_cmt_changed (variable) -ida_hexrays.hxe_combine (variable) -ida_hexrays.hxe_create_hint (variable) -ida_hexrays.hxe_curpos (variable) -ida_hexrays.hxe_double_click (variable) -ida_hexrays.hxe_flowchart (variable) -ida_hexrays.hxe_func_printed (variable) -ida_hexrays.hxe_glbopt (variable) -ida_hexrays.hxe_interr (variable) -ida_hexrays.hxe_keyboard (variable) -ida_hexrays.hxe_locopt (variable) -ida_hexrays.hxe_maturity (variable) -ida_hexrays.hxe_microcode (variable) -ida_hexrays.hxe_open_pseudocode (variable) -ida_hexrays.hxe_populating_popup (variable) -ida_hexrays.hxe_prealloc (variable) -ida_hexrays.hxe_preoptimized (variable) -ida_hexrays.hxe_print_func (variable) -ida_hexrays.hxe_prolog (variable) -ida_hexrays.hxe_refresh_pseudocode (variable) -ida_hexrays.hxe_resolve_stkaddrs (variable) -ida_hexrays.hxe_right_click (variable) -ida_hexrays.hxe_stkpnts (variable) -ida_hexrays.hxe_structural (variable) -ida_hexrays.hxe_switch_pseudocode (variable) -ida_hexrays.hxe_text_ready (variable) -ida_hexrays.init_hexrays_plugin (function) -ida_hexrays.install_hexrays_callback (function) -ida_hexrays.install_microcode_filter (function) -ida_hexrays.is_additive (function) -ida_hexrays.is_assignment (function) -ida_hexrays.is_binary (function) -ida_hexrays.is_bitop (function) -ida_hexrays.is_bool_type (function) -ida_hexrays.is_break_consumer (function) -ida_hexrays.is_commutative (function) -ida_hexrays.is_inplace_def (function) -ida_hexrays.is_kreg (function) -ida_hexrays.is_logical (function) -ida_hexrays.is_loop (function) -ida_hexrays.is_lvalue (function) -ida_hexrays.is_may_access (function) -ida_hexrays.is_mcode_addsub (function) -ida_hexrays.is_mcode_call (function) -ida_hexrays.is_mcode_commutative (function) -ida_hexrays.is_mcode_convertible_to_jmp (function) -ida_hexrays.is_mcode_convertible_to_set (function) -ida_hexrays.is_mcode_divmod (function) -ida_hexrays.is_mcode_fpu (function) -ida_hexrays.is_mcode_j1 (function) -ida_hexrays.is_mcode_jcond (function) -ida_hexrays.is_mcode_propagatable (function) -ida_hexrays.is_mcode_set (function) -ida_hexrays.is_mcode_set1 (function) -ida_hexrays.is_mcode_shift (function) -ida_hexrays.is_mcode_xdsu (function) -ida_hexrays.is_multiplicative (function) -ida_hexrays.is_nonbool_type (function) -ida_hexrays.is_paf (function) -ida_hexrays.is_prepost (function) -ida_hexrays.is_ptr_or_array (function) -ida_hexrays.is_relational (function) -ida_hexrays.is_signed_mcode (function) -ida_hexrays.is_small_udt (function) -ida_hexrays.is_type_correct (function) -ida_hexrays.is_unary (function) -ida_hexrays.is_unsigned_mcode (function) -ida_hexrays.iterator (class) -ida_hexrays.iterator.__eq__ (method) -ida_hexrays.iterator.__init__ (method) -ida_hexrays.iterator.__ne__ (method) -ida_hexrays.iterator.__ref__ (method) -ida_hexrays.ivl_t (class) -ida_hexrays.ivl_t.__eq__ (method) -ida_hexrays.ivl_t.__ge__ (method) -ida_hexrays.ivl_t.__gt__ (method) -ida_hexrays.ivl_t.__init__ (method) -ida_hexrays.ivl_t.__le__ (method) -ida_hexrays.ivl_t.__lt__ (method) -ida_hexrays.ivl_t.__ne__ (method) -ida_hexrays.ivl_t.clear (method) -ida_hexrays.ivl_t.compare (method) -ida_hexrays.ivl_t.contains (method) -ida_hexrays.ivl_t.dstr (method) -ida_hexrays.ivl_t.empty (method) -ida_hexrays.ivl_t.extend_to_cover (method) -ida_hexrays.ivl_t.includes (method) -ida_hexrays.ivl_t.intersect (method) -ida_hexrays.ivl_t.overlap (method) -ida_hexrays.ivl_with_name_t (class) -ida_hexrays.ivl_with_name_t.__init__ (method) -ida_hexrays.ivlset_t (class) -ida_hexrays.ivlset_t.__eq__ (method) -ida_hexrays.ivlset_t.__ge__ (method) -ida_hexrays.ivlset_t.__gt__ (method) -ida_hexrays.ivlset_t.__init__ (method) -ida_hexrays.ivlset_t.__le__ (method) -ida_hexrays.ivlset_t.__lt__ (method) -ida_hexrays.ivlset_t.__ne__ (method) -ida_hexrays.ivlset_t._print (method) -ida_hexrays.ivlset_t.add (method) -ida_hexrays.ivlset_t.addmasked (method) -ida_hexrays.ivlset_t.compare (method) -ida_hexrays.ivlset_t.contains (method) -ida_hexrays.ivlset_t.count (method) -ida_hexrays.ivlset_t.dstr (method) -ida_hexrays.ivlset_t.has_common (method) -ida_hexrays.ivlset_t.includes (method) -ida_hexrays.ivlset_t.intersect (method) -ida_hexrays.ivlset_t.sub (method) -ida_hexrays.jcnd2set (function) -ida_hexrays.lexcompare (function) -ida_hexrays.lnot (function) -ida_hexrays.locate_lvar (function) -ida_hexrays.lvar_locator_t (class) -ida_hexrays.lvar_locator_t.__eq__ (method) -ida_hexrays.lvar_locator_t.__ge__ (method) -ida_hexrays.lvar_locator_t.__gt__ (method) -ida_hexrays.lvar_locator_t.__init__ (method) -ida_hexrays.lvar_locator_t.__le__ (method) -ida_hexrays.lvar_locator_t.__lt__ (method) -ida_hexrays.lvar_locator_t.__ne__ (method) -ida_hexrays.lvar_locator_t.compare (method) -ida_hexrays.lvar_locator_t.defea (variable) -ida_hexrays.lvar_locator_t.get_reg1 (method) -ida_hexrays.lvar_locator_t.get_reg2 (method) -ida_hexrays.lvar_locator_t.get_scattered (method) -ida_hexrays.lvar_locator_t.get_stkoff (method) -ida_hexrays.lvar_locator_t.is_reg1 (method) -ida_hexrays.lvar_locator_t.is_reg2 (method) -ida_hexrays.lvar_locator_t.is_reg_var (method) -ida_hexrays.lvar_locator_t.is_scattered (method) -ida_hexrays.lvar_locator_t.is_stk_var (method) -ida_hexrays.lvar_locator_t.location (variable) -ida_hexrays.lvar_mapping_begin (function) -ida_hexrays.lvar_mapping_clear (function) -ida_hexrays.lvar_mapping_end (function) -ida_hexrays.lvar_mapping_erase (function) -ida_hexrays.lvar_mapping_find (function) -ida_hexrays.lvar_mapping_first (function) -ida_hexrays.lvar_mapping_free (function) -ida_hexrays.lvar_mapping_insert (function) -ida_hexrays.lvar_mapping_iterator_t (class) -ida_hexrays.lvar_mapping_iterator_t.__eq__ (method) -ida_hexrays.lvar_mapping_iterator_t.__init__ (method) -ida_hexrays.lvar_mapping_iterator_t.__ne__ (method) -ida_hexrays.lvar_mapping_new (function) -ida_hexrays.lvar_mapping_next (function) -ida_hexrays.lvar_mapping_prev (function) -ida_hexrays.lvar_mapping_second (function) -ida_hexrays.lvar_mapping_size (function) -ida_hexrays.lvar_mapping_t (class) -ida_hexrays.lvar_mapping_t.__init__ (method) -ida_hexrays.lvar_mapping_t.at (method) -ida_hexrays.lvar_mapping_t.size (method) -ida_hexrays.lvar_ref_t (class) -ida_hexrays.lvar_ref_t.__eq__ (method) -ida_hexrays.lvar_ref_t.__ge__ (method) -ida_hexrays.lvar_ref_t.__gt__ (method) -ida_hexrays.lvar_ref_t.__init__ (method) -ida_hexrays.lvar_ref_t.__le__ (method) -ida_hexrays.lvar_ref_t.__lt__ (method) -ida_hexrays.lvar_ref_t.__ne__ (method) -ida_hexrays.lvar_ref_t.compare (method) -ida_hexrays.lvar_ref_t.idx (variable) -ida_hexrays.lvar_ref_t.mba (variable) -ida_hexrays.lvar_ref_t.off (variable) -ida_hexrays.lvar_ref_t.swap (method) -ida_hexrays.lvar_ref_t.var (method) -ida_hexrays.lvar_saved_info_t (class) -ida_hexrays.lvar_saved_info_t.__eq__ (method) -ida_hexrays.lvar_saved_info_t.__init__ (method) -ida_hexrays.lvar_saved_info_t.__ne__ (method) -ida_hexrays.lvar_saved_info_t.clear_keep (method) -ida_hexrays.lvar_saved_info_t.clr_nomap_lvar (method) -ida_hexrays.lvar_saved_info_t.clr_noptr_lvar (method) -ida_hexrays.lvar_saved_info_t.clr_split_lvar (method) -ida_hexrays.lvar_saved_info_t.clr_unused_lvar (method) -ida_hexrays.lvar_saved_info_t.cmt (variable) -ida_hexrays.lvar_saved_info_t.flags (variable) -ida_hexrays.lvar_saved_info_t.has_info (method) -ida_hexrays.lvar_saved_info_t.is_kept (method) -ida_hexrays.lvar_saved_info_t.is_nomap_lvar (method) -ida_hexrays.lvar_saved_info_t.is_noptr_lvar (method) -ida_hexrays.lvar_saved_info_t.is_split_lvar (method) -ida_hexrays.lvar_saved_info_t.is_unused_lvar (method) -ida_hexrays.lvar_saved_info_t.ll (variable) -ida_hexrays.lvar_saved_info_t.name (variable) -ida_hexrays.lvar_saved_info_t.set_keep (method) -ida_hexrays.lvar_saved_info_t.set_nomap_lvar (method) -ida_hexrays.lvar_saved_info_t.set_noptr_lvar (method) -ida_hexrays.lvar_saved_info_t.set_split_lvar (method) -ida_hexrays.lvar_saved_info_t.set_unused_lvar (method) -ida_hexrays.lvar_saved_info_t.size (variable) -ida_hexrays.lvar_saved_info_t.type (variable) -ida_hexrays.lvar_saved_infos_t (class) -ida_hexrays.lvar_saved_infos_t.__eq__ (method) -ida_hexrays.lvar_saved_infos_t.__getitem__ (method) -ida_hexrays.lvar_saved_infos_t.__init__ (method) -ida_hexrays.lvar_saved_infos_t.__len__ (method) -ida_hexrays.lvar_saved_infos_t.__ne__ (method) -ida_hexrays.lvar_saved_infos_t.__setitem__ (method) -ida_hexrays.lvar_saved_infos_t._del (method) -ida_hexrays.lvar_saved_infos_t.add_unique (method) -ida_hexrays.lvar_saved_infos_t.at (method) -ida_hexrays.lvar_saved_infos_t.begin (method) -ida_hexrays.lvar_saved_infos_t.capacity (method) -ida_hexrays.lvar_saved_infos_t.clear (method) -ida_hexrays.lvar_saved_infos_t.empty (method) -ida_hexrays.lvar_saved_infos_t.end (method) -ida_hexrays.lvar_saved_infos_t.erase (method) -ida_hexrays.lvar_saved_infos_t.extract (method) -ida_hexrays.lvar_saved_infos_t.find (method) -ida_hexrays.lvar_saved_infos_t.grow (method) -ida_hexrays.lvar_saved_infos_t.has (method) -ida_hexrays.lvar_saved_infos_t.inject (method) -ida_hexrays.lvar_saved_infos_t.insert (method) -ida_hexrays.lvar_saved_infos_t.pop_back (method) -ida_hexrays.lvar_saved_infos_t.push_back (method) -ida_hexrays.lvar_saved_infos_t.qclear (method) -ida_hexrays.lvar_saved_infos_t.reserve (method) -ida_hexrays.lvar_saved_infos_t.resize (method) -ida_hexrays.lvar_saved_infos_t.size (method) -ida_hexrays.lvar_saved_infos_t.swap (method) -ida_hexrays.lvar_saved_infos_t.truncate (method) -ida_hexrays.lvar_t (class) -ida_hexrays.lvar_t.__init__ (method) -ida_hexrays.lvar_t.accepts_type (method) -ida_hexrays.lvar_t.append_list (method) -ida_hexrays.lvar_t.clear_used (method) -ida_hexrays.lvar_t.clr_arg_var (method) -ida_hexrays.lvar_t.clr_automapped (method) -ida_hexrays.lvar_t.clr_decl_unused (method) -ida_hexrays.lvar_t.clr_dummy_arg (method) -ida_hexrays.lvar_t.clr_fake_var (method) -ida_hexrays.lvar_t.clr_floating_var (method) -ida_hexrays.lvar_t.clr_mapdst_var (method) -ida_hexrays.lvar_t.clr_mreg_done (method) -ida_hexrays.lvar_t.clr_noptr_var (method) -ida_hexrays.lvar_t.clr_notarg (method) -ida_hexrays.lvar_t.clr_overlapped_var (method) -ida_hexrays.lvar_t.clr_shared (method) -ida_hexrays.lvar_t.clr_split_var (method) -ida_hexrays.lvar_t.clr_spoiled_var (method) -ida_hexrays.lvar_t.clr_thisarg (method) -ida_hexrays.lvar_t.clr_unknown_width (method) -ida_hexrays.lvar_t.clr_used_byref (method) -ida_hexrays.lvar_t.clr_user_info (method) -ida_hexrays.lvar_t.clr_user_name (method) -ida_hexrays.lvar_t.clr_user_type (method) -ida_hexrays.lvar_t.cmt (variable) -ida_hexrays.lvar_t.defblk (variable) -ida_hexrays.lvar_t.divisor (variable) -ida_hexrays.lvar_t.has_common (method) -ida_hexrays.lvar_t.has_common_bit (method) -ida_hexrays.lvar_t.has_nice_name (method) -ida_hexrays.lvar_t.has_regname (method) -ida_hexrays.lvar_t.has_user_info (method) -ida_hexrays.lvar_t.has_user_name (method) -ida_hexrays.lvar_t.has_user_type (method) -ida_hexrays.lvar_t.in_asm (method) -ida_hexrays.lvar_t.is_aliasable (method) -ida_hexrays.lvar_t.is_arg_var (method) -ida_hexrays.lvar_t.is_automapped (method) -ida_hexrays.lvar_t.is_decl_unused (method) -ida_hexrays.lvar_t.is_dummy_arg (method) -ida_hexrays.lvar_t.is_fake_var (method) -ida_hexrays.lvar_t.is_floating_var (method) -ida_hexrays.lvar_t.is_mapdst_var (method) -ida_hexrays.lvar_t.is_noptr_var (method) -ida_hexrays.lvar_t.is_notarg (method) -ida_hexrays.lvar_t.is_overlapped_var (method) -ida_hexrays.lvar_t.is_result_var (method) -ida_hexrays.lvar_t.is_shared (method) -ida_hexrays.lvar_t.is_split_var (method) -ida_hexrays.lvar_t.is_spoiled_var (method) -ida_hexrays.lvar_t.is_thisarg (method) -ida_hexrays.lvar_t.is_unknown_width (method) -ida_hexrays.lvar_t.is_used_byref (method) -ida_hexrays.lvar_t.mreg_done (method) -ida_hexrays.lvar_t.name (variable) -ida_hexrays.lvar_t.set_arg_var (method) -ida_hexrays.lvar_t.set_automapped (method) -ida_hexrays.lvar_t.set_decl_unused (method) -ida_hexrays.lvar_t.set_dummy_arg (method) -ida_hexrays.lvar_t.set_fake_var (method) -ida_hexrays.lvar_t.set_final_lvar_type (method) -ida_hexrays.lvar_t.set_floating_var (method) -ida_hexrays.lvar_t.set_lvar_type (method) -ida_hexrays.lvar_t.set_mapdst_var (method) -ida_hexrays.lvar_t.set_mreg_done (method) -ida_hexrays.lvar_t.set_non_typed (method) -ida_hexrays.lvar_t.set_noptr_var (method) -ida_hexrays.lvar_t.set_notarg (method) -ida_hexrays.lvar_t.set_overlapped_var (method) -ida_hexrays.lvar_t.set_shared (method) -ida_hexrays.lvar_t.set_split_var (method) -ida_hexrays.lvar_t.set_spoiled_var (method) -ida_hexrays.lvar_t.set_thisarg (method) -ida_hexrays.lvar_t.set_typed (method) -ida_hexrays.lvar_t.set_unknown_width (method) -ida_hexrays.lvar_t.set_used (method) -ida_hexrays.lvar_t.set_used_byref (method) -ida_hexrays.lvar_t.set_user_name (method) -ida_hexrays.lvar_t.set_user_type (method) -ida_hexrays.lvar_t.set_width (method) -ida_hexrays.lvar_t.tif (variable) -ida_hexrays.lvar_t.type (method) -ida_hexrays.lvar_t.typed (method) -ida_hexrays.lvar_t.used (method) -ida_hexrays.lvar_t.width (variable) -ida_hexrays.lvar_uservec_t (class) -ida_hexrays.lvar_uservec_t.__init__ (method) -ida_hexrays.lvar_uservec_t.clear (method) -ida_hexrays.lvar_uservec_t.empty (method) -ida_hexrays.lvar_uservec_t.find_info (method) -ida_hexrays.lvar_uservec_t.keep_info (method) -ida_hexrays.lvar_uservec_t.lmaps (variable) -ida_hexrays.lvar_uservec_t.lvvec (variable) -ida_hexrays.lvar_uservec_t.stkoff_delta (variable) -ida_hexrays.lvar_uservec_t.swap (method) -ida_hexrays.lvar_uservec_t.ulv_flags (variable) -ida_hexrays.lvars_t (class) -ida_hexrays.lvars_t.__init__ (method) -ida_hexrays.lvars_t.find (method) -ida_hexrays.lvars_t.find_input_lvar (method) -ida_hexrays.lvars_t.find_lvar (method) -ida_hexrays.lvars_t.find_stkvar (method) -ida_hexrays.lxe_lvar_cmt_changed (variable) -ida_hexrays.lxe_lvar_mapping_changed (variable) -ida_hexrays.lxe_lvar_name_changed (variable) -ida_hexrays.lxe_lvar_type_changed (variable) -ida_hexrays.make_num (function) -ida_hexrays.make_pointer (function) -ida_hexrays.make_ref (function) -ida_hexrays.mark_cfunc_dirty (function) -ida_hexrays.mba_range_iterator_t (class) -ida_hexrays.mba_range_iterator_t.__init__ (method) -ida_hexrays.mba_range_iterator_t.chunk (method) -ida_hexrays.mba_range_iterator_t.is_snippet (method) -ida_hexrays.mba_range_iterator_t.next (method) -ida_hexrays.mba_range_iterator_t.set (method) -ida_hexrays.mba_ranges_t (class) -ida_hexrays.mba_ranges_t.__init__ (method) -ida_hexrays.mba_ranges_t.clear (method) -ida_hexrays.mba_ranges_t.empty (method) -ida_hexrays.mba_ranges_t.is_fragmented (method) -ida_hexrays.mba_ranges_t.is_snippet (method) -ida_hexrays.mba_ranges_t.pfn (variable) -ida_hexrays.mba_ranges_t.ranges (variable) -ida_hexrays.mba_ranges_t.start (method) -ida_hexrays.mba_t (class) -ida_hexrays.mba_t.__init__ (method) -ida_hexrays.mba_t._deregister (method) -ida_hexrays.mba_t._print (method) -ida_hexrays.mba_t._register (method) -ida_hexrays.mba_t.aliased_args (variable) -ida_hexrays.mba_t.aliased_memory (variable) -ida_hexrays.mba_t.aliased_vars (variable) -ida_hexrays.mba_t.alloc_fict_ea (method) -ida_hexrays.mba_t.alloc_kreg (method) -ida_hexrays.mba_t.alloc_lvars (method) -ida_hexrays.mba_t.analyze_calls (method) -ida_hexrays.mba_t.arg (method) -ida_hexrays.mba_t.argbase (method) -ida_hexrays.mba_t.argidx (variable) -ida_hexrays.mba_t.argidx_ok (method) -ida_hexrays.mba_t.argidx_sorted (method) -ida_hexrays.mba_t.bad_call_sp_detected (method) -ida_hexrays.mba_t.blocks (variable) -ida_hexrays.mba_t.build_graph (method) -ida_hexrays.mba_t.calc_shins_flags (method) -ida_hexrays.mba_t.callinfo_built (method) -ida_hexrays.mba_t.cc (variable) -ida_hexrays.mba_t.chain_varnums_ok (method) -ida_hexrays.mba_t.clr_cdtr (method) -ida_hexrays.mba_t.clr_mba_flags (method) -ida_hexrays.mba_t.clr_mba_flags2 (method) -ida_hexrays.mba_t.code16_bit_removed (method) -ida_hexrays.mba_t.combine_blocks (method) -ida_hexrays.mba_t.common_stkvars_stkargs (method) -ida_hexrays.mba_t.consumed_argregs (variable) -ida_hexrays.mba_t.copy_block (method) -ida_hexrays.mba_t.create_helper_call (method) -ida_hexrays.mba_t.deleted_pairs (method) -ida_hexrays.mba_t.deprecated_idb_node (variable) -ida_hexrays.mba_t.deserialize (method) -ida_hexrays.mba_t.display_numaddrs (method) -ida_hexrays.mba_t.display_valnums (method) -ida_hexrays.mba_t.dump (method) -ida_hexrays.mba_t.dump_mba (method) -ida_hexrays.mba_t.error_ea (variable) -ida_hexrays.mba_t.final_type (variable) -ida_hexrays.mba_t.find_mop (method) -ida_hexrays.mba_t.for_all_insns (method) -ida_hexrays.mba_t.for_all_ops (method) -ida_hexrays.mba_t.for_all_topinsns (method) -ida_hexrays.mba_t.fpd (variable) -ida_hexrays.mba_t.free_kreg (method) -ida_hexrays.mba_t.frregs (variable) -ida_hexrays.mba_t.frsize (variable) -ida_hexrays.mba_t.fti_flags (variable) -ida_hexrays.mba_t.fullsize (variable) -ida_hexrays.mba_t.generated_asserts (method) -ida_hexrays.mba_t.get_args_region (method) -ida_hexrays.mba_t.get_curfunc (method) -ida_hexrays.mba_t.get_func_output_lists (method) -ida_hexrays.mba_t.get_graph (method) -ida_hexrays.mba_t.get_ida_argloc (method) -ida_hexrays.mba_t.get_lvars_region (method) -ida_hexrays.mba_t.get_mba_flags (method) -ida_hexrays.mba_t.get_mba_flags2 (method) -ida_hexrays.mba_t.get_mblock (method) -ida_hexrays.mba_t.get_shadow_region (method) -ida_hexrays.mba_t.get_stack_region (method) -ida_hexrays.mba_t.get_std_region (method) -ida_hexrays.mba_t.gotoff_stkvars (variable) -ida_hexrays.mba_t.graph_insns (method) -ida_hexrays.mba_t.has_bad_sp (method) -ida_hexrays.mba_t.has_outlines (method) -ida_hexrays.mba_t.has_over_chains (method) -ida_hexrays.mba_t.has_passregs (method) -ida_hexrays.mba_t.has_stack_retval (method) -ida_hexrays.mba_t.idaloc2vd (method) -ida_hexrays.mba_t.idb_spoiled (variable) -ida_hexrays.mba_t.idb_type (variable) -ida_hexrays.mba_t.inargoff (variable) -ida_hexrays.mba_t.insert_block (method) -ida_hexrays.mba_t.is_cdtr (method) -ida_hexrays.mba_t.is_ctr (method) -ida_hexrays.mba_t.is_dtr (method) -ida_hexrays.mba_t.is_pattern (method) -ida_hexrays.mba_t.is_snippet (method) -ida_hexrays.mba_t.is_stkarg (method) -ida_hexrays.mba_t.is_thunk (method) -ida_hexrays.mba_t.label (variable) -ida_hexrays.mba_t.loaded_gdl (method) -ida_hexrays.mba_t.lvar_names_ok (method) -ida_hexrays.mba_t.lvars_allocated (method) -ida_hexrays.mba_t.lvars_renamed (method) -ida_hexrays.mba_t.map_fict_ea (method) -ida_hexrays.mba_t.mark_chains_dirty (method) -ida_hexrays.mba_t.maturity (variable) -ida_hexrays.mba_t.may_refine_rettype (method) -ida_hexrays.mba_t.minargref (variable) -ida_hexrays.mba_t.minstkref (variable) -ida_hexrays.mba_t.minstkref_ea (variable) -ida_hexrays.mba_t.natural (variable) -ida_hexrays.mba_t.nodel_memory (variable) -ida_hexrays.mba_t.npurged (variable) -ida_hexrays.mba_t.optimize_global (method) -ida_hexrays.mba_t.optimize_local (method) -ida_hexrays.mba_t.optimized (method) -ida_hexrays.mba_t.pfn_flags (variable) -ida_hexrays.mba_t.precise_defeas (method) -ida_hexrays.mba_t.prop_complex (method) -ida_hexrays.mba_t.propagated_asserts (method) -ida_hexrays.mba_t.qty (variable) -ida_hexrays.mba_t.really_alloc (method) -ida_hexrays.mba_t.regargs_is_not_aligned (method) -ida_hexrays.mba_t.remove_block (method) -ida_hexrays.mba_t.remove_empty_and_unreachable_blocks (method) -ida_hexrays.mba_t.reqmat (variable) -ida_hexrays.mba_t.retsize (variable) -ida_hexrays.mba_t.returns_fpval (method) -ida_hexrays.mba_t.retvaridx (variable) -ida_hexrays.mba_t.rtype_refined (method) -ida_hexrays.mba_t.save_snapshot (method) -ida_hexrays.mba_t.saverest_done (method) -ida_hexrays.mba_t.serialize (method) -ida_hexrays.mba_t.set_lvar_name (method) -ida_hexrays.mba_t.set_maturity (method) -ida_hexrays.mba_t.set_mba_flags (method) -ida_hexrays.mba_t.set_mba_flags2 (method) -ida_hexrays.mba_t.set_nice_lvar_name (method) -ida_hexrays.mba_t.set_user_lvar_name (method) -ida_hexrays.mba_t.shadow_args (variable) -ida_hexrays.mba_t.short_display (method) -ida_hexrays.mba_t.should_beautify (method) -ida_hexrays.mba_t.show_reduction (method) -ida_hexrays.mba_t.spd_adjust (variable) -ida_hexrays.mba_t.spoiled_list (variable) -ida_hexrays.mba_t.stacksize (variable) -ida_hexrays.mba_t.std_ivls (variable) -ida_hexrays.mba_t.stkoff_ida2vd (method) -ida_hexrays.mba_t.stkoff_vd2ida (method) -ida_hexrays.mba_t.term (method) -ida_hexrays.mba_t.tmpstk_size (variable) -ida_hexrays.mba_t.use_frame (method) -ida_hexrays.mba_t.use_wingraph32 (method) -ida_hexrays.mba_t.valranges_done (method) -ida_hexrays.mba_t.vars (variable) -ida_hexrays.mba_t.vd2idaloc (method) -ida_hexrays.mba_t.verify (method) -ida_hexrays.mba_t.write_to_const_detected (method) -ida_hexrays.mba_t_deserialize (function) -ida_hexrays.mbl_graph_t (class) -ida_hexrays.mbl_graph_t.__init__ (method) -ida_hexrays.mbl_graph_t.get_chain_stamp (method) -ida_hexrays.mbl_graph_t.get_du (method) -ida_hexrays.mbl_graph_t.get_mblock (method) -ida_hexrays.mbl_graph_t.get_ud (method) -ida_hexrays.mbl_graph_t.is_du_chain_dirty (method) -ida_hexrays.mbl_graph_t.is_redefined_globally (method) -ida_hexrays.mbl_graph_t.is_ud_chain_dirty (method) -ida_hexrays.mbl_graph_t.is_used_globally (method) -ida_hexrays.mblock_t (class) -ida_hexrays.mblock_t.__init__ (method) -ida_hexrays.mblock_t._print (method) -ida_hexrays.mblock_t.append_def_list (method) -ida_hexrays.mblock_t.append_use_list (method) -ida_hexrays.mblock_t.build_def_list (method) -ida_hexrays.mblock_t.build_lists (method) -ida_hexrays.mblock_t.build_use_list (method) -ida_hexrays.mblock_t.dead_at_start (variable) -ida_hexrays.mblock_t.dnu (variable) -ida_hexrays.mblock_t.dump (method) -ida_hexrays.mblock_t.dump_block (method) -ida_hexrays.mblock_t.empty (method) -ida_hexrays.mblock_t.end (variable) -ida_hexrays.mblock_t.find_access (method) -ida_hexrays.mblock_t.find_def (method) -ida_hexrays.mblock_t.find_first_use (method) -ida_hexrays.mblock_t.find_redefinition (method) -ida_hexrays.mblock_t.find_use (method) -ida_hexrays.mblock_t.flags (variable) -ida_hexrays.mblock_t.for_all_insns (method) -ida_hexrays.mblock_t.for_all_ops (method) -ida_hexrays.mblock_t.for_all_uses (method) -ida_hexrays.mblock_t.get_reginsn_qty (method) -ida_hexrays.mblock_t.get_valranges (method) -ida_hexrays.mblock_t.head (variable) -ida_hexrays.mblock_t.insert_into_block (method) -ida_hexrays.mblock_t.is_branch (method) -ida_hexrays.mblock_t.is_call_block (method) -ida_hexrays.mblock_t.is_nway (method) -ida_hexrays.mblock_t.is_redefined (method) -ida_hexrays.mblock_t.is_rhs_redefined (method) -ida_hexrays.mblock_t.is_simple_goto_block (method) -ida_hexrays.mblock_t.is_simple_jcnd_block (method) -ida_hexrays.mblock_t.is_unknown_call (method) -ida_hexrays.mblock_t.is_used (method) -ida_hexrays.mblock_t.lists_dirty (method) -ida_hexrays.mblock_t.lists_ready (method) -ida_hexrays.mblock_t.make_lists_ready (method) -ida_hexrays.mblock_t.make_nop (method) -ida_hexrays.mblock_t.mark_lists_dirty (method) -ida_hexrays.mblock_t.maxbsp (variable) -ida_hexrays.mblock_t.maybdef (variable) -ida_hexrays.mblock_t.maybuse (variable) -ida_hexrays.mblock_t.mba (variable) -ida_hexrays.mblock_t.minbargref (variable) -ida_hexrays.mblock_t.minbstkref (variable) -ida_hexrays.mblock_t.mustbdef (variable) -ida_hexrays.mblock_t.mustbuse (variable) -ida_hexrays.mblock_t.needs_propagation (method) -ida_hexrays.mblock_t.nextb (variable) -ida_hexrays.mblock_t.npred (method) -ida_hexrays.mblock_t.nsucc (method) -ida_hexrays.mblock_t.optimize_block (method) -ida_hexrays.mblock_t.optimize_insn (method) -ida_hexrays.mblock_t.optimize_useless_jump (method) -ida_hexrays.mblock_t.pred (method) -ida_hexrays.mblock_t.preds (method) -ida_hexrays.mblock_t.predset (variable) -ida_hexrays.mblock_t.prevb (variable) -ida_hexrays.mblock_t.remove_from_block (method) -ida_hexrays.mblock_t.request_demote64 (method) -ida_hexrays.mblock_t.request_propagation (method) -ida_hexrays.mblock_t.serial (variable) -ida_hexrays.mblock_t.start (variable) -ida_hexrays.mblock_t.succ (method) -ida_hexrays.mblock_t.succs (method) -ida_hexrays.mblock_t.succset (variable) -ida_hexrays.mblock_t.tail (variable) -ida_hexrays.mblock_t.type (variable) -ida_hexrays.mcallarg_t (class) -ida_hexrays.mcallarg_t.__init__ (method) -ida_hexrays.mcallarg_t._print (method) -ida_hexrays.mcallarg_t.argloc (variable) -ida_hexrays.mcallarg_t.copy_mop (method) -ida_hexrays.mcallarg_t.dstr (method) -ida_hexrays.mcallarg_t.ea (variable) -ida_hexrays.mcallarg_t.flags (variable) -ida_hexrays.mcallarg_t.make_int (method) -ida_hexrays.mcallarg_t.make_uint (method) -ida_hexrays.mcallarg_t.name (variable) -ida_hexrays.mcallarg_t.set_regarg (method) -ida_hexrays.mcallarg_t.type (variable) -ida_hexrays.mcallargs_t (class) -ida_hexrays.mcallargs_t.__eq__ (method) -ida_hexrays.mcallargs_t.__getitem__ (method) -ida_hexrays.mcallargs_t.__init__ (method) -ida_hexrays.mcallargs_t.__len__ (method) -ida_hexrays.mcallargs_t.__ne__ (method) -ida_hexrays.mcallargs_t.__setitem__ (method) -ida_hexrays.mcallargs_t._del (method) -ida_hexrays.mcallargs_t.add_unique (method) -ida_hexrays.mcallargs_t.at (method) -ida_hexrays.mcallargs_t.begin (method) -ida_hexrays.mcallargs_t.capacity (method) -ida_hexrays.mcallargs_t.clear (method) -ida_hexrays.mcallargs_t.empty (method) -ida_hexrays.mcallargs_t.end (method) -ida_hexrays.mcallargs_t.erase (method) -ida_hexrays.mcallargs_t.extract (method) -ida_hexrays.mcallargs_t.find (method) -ida_hexrays.mcallargs_t.grow (method) -ida_hexrays.mcallargs_t.has (method) -ida_hexrays.mcallargs_t.inject (method) -ida_hexrays.mcallargs_t.insert (method) -ida_hexrays.mcallargs_t.pop_back (method) -ida_hexrays.mcallargs_t.push_back (method) -ida_hexrays.mcallargs_t.qclear (method) -ida_hexrays.mcallargs_t.reserve (method) -ida_hexrays.mcallargs_t.resize (method) -ida_hexrays.mcallargs_t.size (method) -ida_hexrays.mcallargs_t.swap (method) -ida_hexrays.mcallargs_t.truncate (method) -ida_hexrays.mcallinfo_t (class) -ida_hexrays.mcallinfo_t.__init__ (method) -ida_hexrays.mcallinfo_t._print (method) -ida_hexrays.mcallinfo_t.args (variable) -ida_hexrays.mcallinfo_t.call_spd (variable) -ida_hexrays.mcallinfo_t.callee (variable) -ida_hexrays.mcallinfo_t.cc (variable) -ida_hexrays.mcallinfo_t.dead_regs (variable) -ida_hexrays.mcallinfo_t.dstr (method) -ida_hexrays.mcallinfo_t.flags (variable) -ida_hexrays.mcallinfo_t.fti_attrs (variable) -ida_hexrays.mcallinfo_t.get_type (method) -ida_hexrays.mcallinfo_t.is_vararg (method) -ida_hexrays.mcallinfo_t.lexcompare (method) -ida_hexrays.mcallinfo_t.pass_regs (variable) -ida_hexrays.mcallinfo_t.retregs (variable) -ida_hexrays.mcallinfo_t.return_argloc (variable) -ida_hexrays.mcallinfo_t.return_regs (variable) -ida_hexrays.mcallinfo_t.return_type (variable) -ida_hexrays.mcallinfo_t.role (variable) -ida_hexrays.mcallinfo_t.set_type (method) -ida_hexrays.mcallinfo_t.solid_args (variable) -ida_hexrays.mcallinfo_t.spoiled (variable) -ida_hexrays.mcallinfo_t.stkargs_top (variable) -ida_hexrays.mcallinfo_t.visible_memory (variable) -ida_hexrays.mcases_t (class) -ida_hexrays.mcases_t.__eq__ (method) -ida_hexrays.mcases_t.__ge__ (method) -ida_hexrays.mcases_t.__gt__ (method) -ida_hexrays.mcases_t.__init__ (method) -ida_hexrays.mcases_t.__le__ (method) -ida_hexrays.mcases_t.__lt__ (method) -ida_hexrays.mcases_t.__ne__ (method) -ida_hexrays.mcases_t._print (method) -ida_hexrays.mcases_t.compare (method) -ida_hexrays.mcases_t.dstr (method) -ida_hexrays.mcases_t.empty (method) -ida_hexrays.mcases_t.resize (method) -ida_hexrays.mcases_t.size (method) -ida_hexrays.mcases_t.swap (method) -ida_hexrays.mcases_t.targets (variable) -ida_hexrays.mcases_t.values (variable) -ida_hexrays.mcode_modifies_d (function) -ida_hexrays.microcode_filter_t (class) -ida_hexrays.microcode_filter_t.__disown__ (method) -ida_hexrays.microcode_filter_t.__init__ (method) -ida_hexrays.microcode_filter_t.apply (method) -ida_hexrays.microcode_filter_t.match (method) -ida_hexrays.minsn_t (class) -ida_hexrays.minsn_t.__dbg_get_meminfo (method) -ida_hexrays.minsn_t.__dbg_get_registered_kind (method) -ida_hexrays.minsn_t.__init__ (method) -ida_hexrays.minsn_t.__lt__ (method) -ida_hexrays.minsn_t._acquire_ownership (method) -ida_hexrays.minsn_t._deregister (method) -ida_hexrays.minsn_t._ensure_cond (method) -ida_hexrays.minsn_t._ensure_no_obj (method) -ida_hexrays.minsn_t._ensure_ownership_transferrable (method) -ida_hexrays.minsn_t._make_nop (method) -ida_hexrays.minsn_t._maybe_disown_and_deregister (method) -ida_hexrays.minsn_t._meminfo (method) -ida_hexrays.minsn_t._obj_id (method) -ida_hexrays.minsn_t._own_and_register (method) -ida_hexrays.minsn_t._print (method) -ida_hexrays.minsn_t._register (method) -ida_hexrays.minsn_t.clr_assert (method) -ida_hexrays.minsn_t.clr_combinable (method) -ida_hexrays.minsn_t.clr_combined (method) -ida_hexrays.minsn_t.clr_fpinsn (method) -ida_hexrays.minsn_t.clr_ignlowsrc (method) -ida_hexrays.minsn_t.clr_multimov (method) -ida_hexrays.minsn_t.clr_noret_icall (method) -ida_hexrays.minsn_t.clr_propagatable (method) -ida_hexrays.minsn_t.clr_tailcall (method) -ida_hexrays.minsn_t.contains_call (method) -ida_hexrays.minsn_t.contains_opcode (method) -ida_hexrays.minsn_t.d (variable) -ida_hexrays.minsn_t.deserialize (method) -ida_hexrays.minsn_t.dstr (method) -ida_hexrays.minsn_t.ea (variable) -ida_hexrays.minsn_t.equal_insns (method) -ida_hexrays.minsn_t.find_call (method) -ida_hexrays.minsn_t.find_ins_op (method) -ida_hexrays.minsn_t.find_num_op (method) -ida_hexrays.minsn_t.find_opcode (method) -ida_hexrays.minsn_t.for_all_insns (method) -ida_hexrays.minsn_t.for_all_ops (method) -ida_hexrays.minsn_t.get_role (method) -ida_hexrays.minsn_t.get_split_size (method) -ida_hexrays.minsn_t.has_side_effects (method) -ida_hexrays.minsn_t.iprops (variable) -ida_hexrays.minsn_t.is_after (method) -ida_hexrays.minsn_t.is_alloca (method) -ida_hexrays.minsn_t.is_assert (method) -ida_hexrays.minsn_t.is_between (method) -ida_hexrays.minsn_t.is_bswap (method) -ida_hexrays.minsn_t.is_cleaning_pop (method) -ida_hexrays.minsn_t.is_combinable (method) -ida_hexrays.minsn_t.is_combined (method) -ida_hexrays.minsn_t.is_extstx (method) -ida_hexrays.minsn_t.is_farcall (method) -ida_hexrays.minsn_t.is_fpinsn (method) -ida_hexrays.minsn_t.is_helper (method) -ida_hexrays.minsn_t.is_ignlowsrc (method) -ida_hexrays.minsn_t.is_inverted_jx (method) -ida_hexrays.minsn_t.is_like_move (method) -ida_hexrays.minsn_t.is_mbarrier (method) -ida_hexrays.minsn_t.is_memcpy (method) -ida_hexrays.minsn_t.is_memset (method) -ida_hexrays.minsn_t.is_mov (method) -ida_hexrays.minsn_t.is_multimov (method) -ida_hexrays.minsn_t.is_noret_call (method) -ida_hexrays.minsn_t.is_optional (method) -ida_hexrays.minsn_t.is_persistent (method) -ida_hexrays.minsn_t.is_propagatable (method) -ida_hexrays.minsn_t.is_readflags (method) -ida_hexrays.minsn_t.is_tailcall (method) -ida_hexrays.minsn_t.is_unknown_call (method) -ida_hexrays.minsn_t.is_wild_match (method) -ida_hexrays.minsn_t.l (variable) -ida_hexrays.minsn_t.lexcompare (method) -ida_hexrays.minsn_t.may_use_aliased_memory (method) -ida_hexrays.minsn_t.modifies_d (method) -ida_hexrays.minsn_t.modifies_pair_mop (method) -ida_hexrays.minsn_t.next (variable) -ida_hexrays.minsn_t.opcode (variable) -ida_hexrays.minsn_t.optimize_solo (method) -ida_hexrays.minsn_t.optimize_subtree (method) -ida_hexrays.minsn_t.prev (variable) -ida_hexrays.minsn_t.r (variable) -ida_hexrays.minsn_t.replace_by (method) -ida_hexrays.minsn_t.serialize (method) -ida_hexrays.minsn_t.set_assert (method) -ida_hexrays.minsn_t.set_cleaning_pop (method) -ida_hexrays.minsn_t.set_combinable (method) -ida_hexrays.minsn_t.set_extstx (method) -ida_hexrays.minsn_t.set_farcall (method) -ida_hexrays.minsn_t.set_fpinsn (method) -ida_hexrays.minsn_t.set_ignlowsrc (method) -ida_hexrays.minsn_t.set_inverted_jx (method) -ida_hexrays.minsn_t.set_mbarrier (method) -ida_hexrays.minsn_t.set_multimov (method) -ida_hexrays.minsn_t.set_noret_icall (method) -ida_hexrays.minsn_t.set_optional (method) -ida_hexrays.minsn_t.set_persistent (method) -ida_hexrays.minsn_t.set_split_size (method) -ida_hexrays.minsn_t.set_tailcall (method) -ida_hexrays.minsn_t.set_unmerged (method) -ida_hexrays.minsn_t.set_wild_match (method) -ida_hexrays.minsn_t.setaddr (method) -ida_hexrays.minsn_t.swap (method) -ida_hexrays.minsn_t.was_noret_icall (method) -ida_hexrays.minsn_t.was_split (method) -ida_hexrays.minsn_t.was_unmerged (method) -ida_hexrays.minsn_visitor_t (class) -ida_hexrays.minsn_visitor_t.__disown__ (method) -ida_hexrays.minsn_visitor_t.__init__ (method) -ida_hexrays.minsn_visitor_t.visit_minsn (method) -ida_hexrays.mlist_mop_visitor_t (class) -ida_hexrays.mlist_mop_visitor_t.__disown__ (method) -ida_hexrays.mlist_mop_visitor_t.__init__ (method) -ida_hexrays.mlist_mop_visitor_t.visit_mop (method) -ida_hexrays.mlist_t (class) -ida_hexrays.mlist_t.__eq__ (method) -ida_hexrays.mlist_t.__ge__ (method) -ida_hexrays.mlist_t.__gt__ (method) -ida_hexrays.mlist_t.__init__ (method) -ida_hexrays.mlist_t.__le__ (method) -ida_hexrays.mlist_t.__lt__ (method) -ida_hexrays.mlist_t.__ne__ (method) -ida_hexrays.mlist_t._print (method) -ida_hexrays.mlist_t.add (method) -ida_hexrays.mlist_t.addmem (method) -ida_hexrays.mlist_t.clear (method) -ida_hexrays.mlist_t.compare (method) -ida_hexrays.mlist_t.count (method) -ida_hexrays.mlist_t.dstr (method) -ida_hexrays.mlist_t.empty (method) -ida_hexrays.mlist_t.has (method) -ida_hexrays.mlist_t.has_all (method) -ida_hexrays.mlist_t.has_any (method) -ida_hexrays.mlist_t.has_common (method) -ida_hexrays.mlist_t.has_memory (method) -ida_hexrays.mlist_t.includes (method) -ida_hexrays.mlist_t.intersect (method) -ida_hexrays.mlist_t.is_subset_of (method) -ida_hexrays.mlist_t.sub (method) -ida_hexrays.mlist_t.swap (method) -ida_hexrays.mnumber_t (class) -ida_hexrays.mnumber_t.__eq__ (method) -ida_hexrays.mnumber_t.__ge__ (method) -ida_hexrays.mnumber_t.__gt__ (method) -ida_hexrays.mnumber_t.__init__ (method) -ida_hexrays.mnumber_t.__le__ (method) -ida_hexrays.mnumber_t.__lt__ (method) -ida_hexrays.mnumber_t.__ne__ (method) -ida_hexrays.mnumber_t.compare (method) -ida_hexrays.mnumber_t.update_value (method) -ida_hexrays.modify_user_lvar_info (function) -ida_hexrays.modify_user_lvars (function) -ida_hexrays.mop_S (variable) -ida_hexrays.mop_addr_t (class) -ida_hexrays.mop_addr_t.__init__ (method) -ida_hexrays.mop_addr_t.lexcompare (method) -ida_hexrays.mop_b (variable) -ida_hexrays.mop_c (variable) -ida_hexrays.mop_d (variable) -ida_hexrays.mop_f (variable) -ida_hexrays.mop_fn (variable) -ida_hexrays.mop_h (variable) -ida_hexrays.mop_l (variable) -ida_hexrays.mop_n (variable) -ida_hexrays.mop_p (variable) -ida_hexrays.mop_pair_t (class) -ida_hexrays.mop_pair_t.__init__ (method) -ida_hexrays.mop_pair_t.hop (variable) -ida_hexrays.mop_pair_t.lop (variable) -ida_hexrays.mop_r (variable) -ida_hexrays.mop_sc (variable) -ida_hexrays.mop_str (variable) -ida_hexrays.mop_t (class) -ida_hexrays.mop_t.__dbg_get_meminfo (method) -ida_hexrays.mop_t.__dbg_get_registered_kind (method) -ida_hexrays.mop_t.__eq__ (method) -ida_hexrays.mop_t.__init__ (method) -ida_hexrays.mop_t.__lt__ (method) -ida_hexrays.mop_t.__ne__ (method) -ida_hexrays.mop_t._acquire_ownership (method) -ida_hexrays.mop_t._deregister (method) -ida_hexrays.mop_t._ensure_cond (method) -ida_hexrays.mop_t._ensure_no_obj (method) -ida_hexrays.mop_t._ensure_no_t (method) -ida_hexrays.mop_t._ensure_ownership_transferrable (method) -ida_hexrays.mop_t._get_a (method) -ida_hexrays.mop_t._get_b (method) -ida_hexrays.mop_t._get_c (method) -ida_hexrays.mop_t._get_cstr (method) -ida_hexrays.mop_t._get_d (method) -ida_hexrays.mop_t._get_f (method) -ida_hexrays.mop_t._get_fpc (method) -ida_hexrays.mop_t._get_g (method) -ida_hexrays.mop_t._get_helper (method) -ida_hexrays.mop_t._get_l (method) -ida_hexrays.mop_t._get_nnn (method) -ida_hexrays.mop_t._get_pair (method) -ida_hexrays.mop_t._get_r (method) -ida_hexrays.mop_t._get_s (method) -ida_hexrays.mop_t._get_scif (method) -ida_hexrays.mop_t._get_t (method) -ida_hexrays.mop_t._make_blkref (method) -ida_hexrays.mop_t._make_callinfo (method) -ida_hexrays.mop_t._make_cases (method) -ida_hexrays.mop_t._make_gvar (method) -ida_hexrays.mop_t._make_insn (method) -ida_hexrays.mop_t._make_lvar (method) -ida_hexrays.mop_t._make_pair (method) -ida_hexrays.mop_t._make_reg (method) -ida_hexrays.mop_t._make_stkvar (method) -ida_hexrays.mop_t._make_strlit (method) -ida_hexrays.mop_t._maybe_disown_and_deregister (method) -ida_hexrays.mop_t._meminfo (method) -ida_hexrays.mop_t._obj_id (method) -ida_hexrays.mop_t._own_and_register (method) -ida_hexrays.mop_t._print (method) -ida_hexrays.mop_t._register (method) -ida_hexrays.mop_t._set_a (method) -ida_hexrays.mop_t._set_b (method) -ida_hexrays.mop_t._set_c (method) -ida_hexrays.mop_t._set_cstr (method) -ida_hexrays.mop_t._set_d (method) -ida_hexrays.mop_t._set_f (method) -ida_hexrays.mop_t._set_fpc (method) -ida_hexrays.mop_t._set_g (method) -ida_hexrays.mop_t._set_helper (method) -ida_hexrays.mop_t._set_l (method) -ida_hexrays.mop_t._set_nnn (method) -ida_hexrays.mop_t._set_pair (method) -ida_hexrays.mop_t._set_r (method) -ida_hexrays.mop_t._set_s (method) -ida_hexrays.mop_t._set_scif (method) -ida_hexrays.mop_t._set_t (method) -ida_hexrays.mop_t.apply_ld_mcode (method) -ida_hexrays.mop_t.apply_xds (method) -ida_hexrays.mop_t.apply_xdu (method) -ida_hexrays.mop_t.assign (method) -ida_hexrays.mop_t.change_size (method) -ida_hexrays.mop_t.create_from_insn (method) -ida_hexrays.mop_t.create_from_ivlset (method) -ida_hexrays.mop_t.create_from_mlist (method) -ida_hexrays.mop_t.create_from_scattered_vdloc (method) -ida_hexrays.mop_t.create_from_vdloc (method) -ida_hexrays.mop_t.double_size (method) -ida_hexrays.mop_t.dstr (method) -ida_hexrays.mop_t.empty (method) -ida_hexrays.mop_t.equal_mops (method) -ida_hexrays.mop_t.erase (method) -ida_hexrays.mop_t.erase_but_keep_size (method) -ida_hexrays.mop_t.for_all_ops (method) -ida_hexrays.mop_t.for_all_scattered_submops (method) -ida_hexrays.mop_t.get_insn (method) -ida_hexrays.mop_t.get_stkoff (method) -ida_hexrays.mop_t.get_stkvar (method) -ida_hexrays.mop_t.has_side_effects (method) -ida_hexrays.mop_t.is01 (method) -ida_hexrays.mop_t.is_arglist (method) -ida_hexrays.mop_t.is_bit_reg (method) -ida_hexrays.mop_t.is_cc (method) -ida_hexrays.mop_t.is_ccflags (method) -ida_hexrays.mop_t.is_constant (method) -ida_hexrays.mop_t.is_equal_to (method) -ida_hexrays.mop_t.is_extended_from (method) -ida_hexrays.mop_t.is_glbaddr (method) -ida_hexrays.mop_t.is_glbaddr_from_fixup (method) -ida_hexrays.mop_t.is_impptr_done (method) -ida_hexrays.mop_t.is_insn (method) -ida_hexrays.mop_t.is_kreg (method) -ida_hexrays.mop_t.is_lowaddr (method) -ida_hexrays.mop_t.is_mob (method) -ida_hexrays.mop_t.is_negative_constant (method) -ida_hexrays.mop_t.is_one (method) -ida_hexrays.mop_t.is_pcval (method) -ida_hexrays.mop_t.is_positive_constant (method) -ida_hexrays.mop_t.is_reg (method) -ida_hexrays.mop_t.is_scattered (method) -ida_hexrays.mop_t.is_sign_extended_from (method) -ida_hexrays.mop_t.is_stkaddr (method) -ida_hexrays.mop_t.is_udt (method) -ida_hexrays.mop_t.is_undef_val (method) -ida_hexrays.mop_t.is_zero (method) -ida_hexrays.mop_t.is_zero_extended_from (method) -ida_hexrays.mop_t.lexcompare (method) -ida_hexrays.mop_t.make_blkref (method) -ida_hexrays.mop_t.make_first_half (method) -ida_hexrays.mop_t.make_fpnum (method) -ida_hexrays.mop_t.make_gvar (method) -ida_hexrays.mop_t.make_helper (method) -ida_hexrays.mop_t.make_high_half (method) -ida_hexrays.mop_t.make_insn (method) -ida_hexrays.mop_t.make_low_half (method) -ida_hexrays.mop_t.make_number (method) -ida_hexrays.mop_t.make_reg (method) -ida_hexrays.mop_t.make_reg_pair (method) -ida_hexrays.mop_t.make_second_half (method) -ida_hexrays.mop_t.make_stkvar (method) -ida_hexrays.mop_t.may_use_aliased_memory (method) -ida_hexrays.mop_t.oprops (variable) -ida_hexrays.mop_t.preserve_side_effects (method) -ida_hexrays.mop_t.probably_floating (method) -ida_hexrays.mop_t.replace_by (method) -ida_hexrays.mop_t.set_impptr_done (method) -ida_hexrays.mop_t.set_lowaddr (method) -ida_hexrays.mop_t.set_udt (method) -ida_hexrays.mop_t.set_undef_val (method) -ida_hexrays.mop_t.shift_mop (method) -ida_hexrays.mop_t.signed_value (method) -ida_hexrays.mop_t.size (variable) -ida_hexrays.mop_t.swap (method) -ida_hexrays.mop_t.t (variable) -ida_hexrays.mop_t.unsigned_value (method) -ida_hexrays.mop_t.update_numop_value (method) -ida_hexrays.mop_t.valnum (variable) -ida_hexrays.mop_t.value (method) -ida_hexrays.mop_t.zero (method) -ida_hexrays.mop_v (variable) -ida_hexrays.mop_visitor_t (class) -ida_hexrays.mop_visitor_t.__disown__ (method) -ida_hexrays.mop_visitor_t.__init__ (method) -ida_hexrays.mop_visitor_t.prune (variable) -ida_hexrays.mop_visitor_t.visit_mop (method) -ida_hexrays.mop_z (variable) -ida_hexrays.mopvec_t (class) -ida_hexrays.mopvec_t.__eq__ (method) -ida_hexrays.mopvec_t.__getitem__ (method) -ida_hexrays.mopvec_t.__init__ (method) -ida_hexrays.mopvec_t.__len__ (method) -ida_hexrays.mopvec_t.__ne__ (method) -ida_hexrays.mopvec_t.__setitem__ (method) -ida_hexrays.mopvec_t._del (method) -ida_hexrays.mopvec_t.add_unique (method) -ida_hexrays.mopvec_t.at (method) -ida_hexrays.mopvec_t.begin (method) -ida_hexrays.mopvec_t.capacity (method) -ida_hexrays.mopvec_t.clear (method) -ida_hexrays.mopvec_t.empty (method) -ida_hexrays.mopvec_t.end (method) -ida_hexrays.mopvec_t.erase (method) -ida_hexrays.mopvec_t.extract (method) -ida_hexrays.mopvec_t.find (method) -ida_hexrays.mopvec_t.grow (method) -ida_hexrays.mopvec_t.has (method) -ida_hexrays.mopvec_t.inject (method) -ida_hexrays.mopvec_t.insert (method) -ida_hexrays.mopvec_t.pop_back (method) -ida_hexrays.mopvec_t.push_back (method) -ida_hexrays.mopvec_t.qclear (method) -ida_hexrays.mopvec_t.reserve (method) -ida_hexrays.mopvec_t.resize (method) -ida_hexrays.mopvec_t.size (method) -ida_hexrays.mopvec_t.swap (method) -ida_hexrays.mopvec_t.truncate (method) -ida_hexrays.mreg2reg (function) -ida_hexrays.must_mcode_close_block (function) -ida_hexrays.negate_mcode_relation (function) -ida_hexrays.negated_relation (function) -ida_hexrays.new_block (function) -ida_hexrays.number_format_t (class) -ida_hexrays.number_format_t.__init__ (method) -ida_hexrays.number_format_t.flags (variable) -ida_hexrays.number_format_t.flags32 (variable) -ida_hexrays.number_format_t.get_radix (method) -ida_hexrays.number_format_t.has_unmutable_type (method) -ida_hexrays.number_format_t.is_char (method) -ida_hexrays.number_format_t.is_dec (method) -ida_hexrays.number_format_t.is_enum (method) -ida_hexrays.number_format_t.is_fixed (method) -ida_hexrays.number_format_t.is_hex (method) -ida_hexrays.number_format_t.is_numop (method) -ida_hexrays.number_format_t.is_oct (method) -ida_hexrays.number_format_t.is_stroff (method) -ida_hexrays.number_format_t.needs_to_be_inverted (method) -ida_hexrays.number_format_t.opnum (variable) -ida_hexrays.number_format_t.org_nbytes (variable) -ida_hexrays.number_format_t.serial (variable) -ida_hexrays.number_format_t.type_name (variable) -ida_hexrays.op_parent_info_t (class) -ida_hexrays.op_parent_info_t.__init__ (method) -ida_hexrays.op_uses_x (function) -ida_hexrays.op_uses_y (function) -ida_hexrays.op_uses_z (function) -ida_hexrays.open_pseudocode (function) -ida_hexrays.operand_locator_t (class) -ida_hexrays.operand_locator_t.__eq__ (method) -ida_hexrays.operand_locator_t.__ge__ (method) -ida_hexrays.operand_locator_t.__gt__ (method) -ida_hexrays.operand_locator_t.__init__ (method) -ida_hexrays.operand_locator_t.__le__ (method) -ida_hexrays.operand_locator_t.__lt__ (method) -ida_hexrays.operand_locator_t.__ne__ (method) -ida_hexrays.operand_locator_t.compare (method) -ida_hexrays.operand_locator_t.ea (variable) -ida_hexrays.operand_locator_t.opnum (variable) -ida_hexrays.optblock_t (class) -ida_hexrays.optblock_t.__disown__ (method) -ida_hexrays.optblock_t.__init__ (method) -ida_hexrays.optblock_t.func (method) -ida_hexrays.optblock_t.install (method) -ida_hexrays.optblock_t.remove (method) -ida_hexrays.optinsn_t (class) -ida_hexrays.optinsn_t.__disown__ (method) -ida_hexrays.optinsn_t.__init__ (method) -ida_hexrays.optinsn_t.func (method) -ida_hexrays.optinsn_t.install (method) -ida_hexrays.optinsn_t.remove (method) -ida_hexrays.parse_user_call (function) -ida_hexrays.partial_type_num (function) -ida_hexrays.print_vdloc (function) -ida_hexrays.property_op_to_typename (function) -ida_hexrays.qstring_printer_t (class) -ida_hexrays.qstring_printer_t.__init__ (method) -ida_hexrays.qstring_printer_t._print (method) -ida_hexrays.qstring_printer_t.get_s (method) -ida_hexrays.qstring_printer_t.s (variable) -ida_hexrays.qstring_printer_t.with_tags (variable) -ida_hexrays.qswap (function) -ida_hexrays.qvector_carg_t (class) -ida_hexrays.qvector_carg_t.__eq__ (method) -ida_hexrays.qvector_carg_t.__getitem__ (method) -ida_hexrays.qvector_carg_t.__init__ (method) -ida_hexrays.qvector_carg_t.__len__ (method) -ida_hexrays.qvector_carg_t.__ne__ (method) -ida_hexrays.qvector_carg_t.__setitem__ (method) -ida_hexrays.qvector_carg_t._del (method) -ida_hexrays.qvector_carg_t.add_unique (method) -ida_hexrays.qvector_carg_t.at (method) -ida_hexrays.qvector_carg_t.begin (method) -ida_hexrays.qvector_carg_t.capacity (method) -ida_hexrays.qvector_carg_t.clear (method) -ida_hexrays.qvector_carg_t.empty (method) -ida_hexrays.qvector_carg_t.end (method) -ida_hexrays.qvector_carg_t.erase (method) -ida_hexrays.qvector_carg_t.extract (method) -ida_hexrays.qvector_carg_t.find (method) -ida_hexrays.qvector_carg_t.grow (method) -ida_hexrays.qvector_carg_t.has (method) -ida_hexrays.qvector_carg_t.inject (method) -ida_hexrays.qvector_carg_t.insert (method) -ida_hexrays.qvector_carg_t.pop_back (method) -ida_hexrays.qvector_carg_t.push_back (method) -ida_hexrays.qvector_carg_t.qclear (method) -ida_hexrays.qvector_carg_t.reserve (method) -ida_hexrays.qvector_carg_t.resize (method) -ida_hexrays.qvector_carg_t.size (method) -ida_hexrays.qvector_carg_t.swap (method) -ida_hexrays.qvector_carg_t.truncate (method) -ida_hexrays.qvector_ccase_t (class) -ida_hexrays.qvector_ccase_t.__eq__ (method) -ida_hexrays.qvector_ccase_t.__getitem__ (method) -ida_hexrays.qvector_ccase_t.__init__ (method) -ida_hexrays.qvector_ccase_t.__len__ (method) -ida_hexrays.qvector_ccase_t.__ne__ (method) -ida_hexrays.qvector_ccase_t.__setitem__ (method) -ida_hexrays.qvector_ccase_t._del (method) -ida_hexrays.qvector_ccase_t.add_unique (method) -ida_hexrays.qvector_ccase_t.at (method) -ida_hexrays.qvector_ccase_t.begin (method) -ida_hexrays.qvector_ccase_t.capacity (method) -ida_hexrays.qvector_ccase_t.clear (method) -ida_hexrays.qvector_ccase_t.empty (method) -ida_hexrays.qvector_ccase_t.end (method) -ida_hexrays.qvector_ccase_t.erase (method) -ida_hexrays.qvector_ccase_t.extract (method) -ida_hexrays.qvector_ccase_t.find (method) -ida_hexrays.qvector_ccase_t.grow (method) -ida_hexrays.qvector_ccase_t.has (method) -ida_hexrays.qvector_ccase_t.inject (method) -ida_hexrays.qvector_ccase_t.insert (method) -ida_hexrays.qvector_ccase_t.pop_back (method) -ida_hexrays.qvector_ccase_t.push_back (method) -ida_hexrays.qvector_ccase_t.qclear (method) -ida_hexrays.qvector_ccase_t.reserve (method) -ida_hexrays.qvector_ccase_t.resize (method) -ida_hexrays.qvector_ccase_t.size (method) -ida_hexrays.qvector_ccase_t.swap (method) -ida_hexrays.qvector_ccase_t.truncate (method) -ida_hexrays.qvector_history_t (class) -ida_hexrays.qvector_history_t.__eq__ (method) -ida_hexrays.qvector_history_t.__getitem__ (method) -ida_hexrays.qvector_history_t.__init__ (method) -ida_hexrays.qvector_history_t.__len__ (method) -ida_hexrays.qvector_history_t.__ne__ (method) -ida_hexrays.qvector_history_t.__setitem__ (method) -ida_hexrays.qvector_history_t._del (method) -ida_hexrays.qvector_history_t.add_unique (method) -ida_hexrays.qvector_history_t.at (method) -ida_hexrays.qvector_history_t.begin (method) -ida_hexrays.qvector_history_t.capacity (method) -ida_hexrays.qvector_history_t.clear (method) -ida_hexrays.qvector_history_t.empty (method) -ida_hexrays.qvector_history_t.end (method) -ida_hexrays.qvector_history_t.erase (method) -ida_hexrays.qvector_history_t.extract (method) -ida_hexrays.qvector_history_t.find (method) -ida_hexrays.qvector_history_t.grow (method) -ida_hexrays.qvector_history_t.has (method) -ida_hexrays.qvector_history_t.inject (method) -ida_hexrays.qvector_history_t.insert (method) -ida_hexrays.qvector_history_t.pop_back (method) -ida_hexrays.qvector_history_t.push_back (method) -ida_hexrays.qvector_history_t.qclear (method) -ida_hexrays.qvector_history_t.reserve (method) -ida_hexrays.qvector_history_t.resize (method) -ida_hexrays.qvector_history_t.size (method) -ida_hexrays.qvector_history_t.swap (method) -ida_hexrays.qvector_history_t.truncate (method) -ida_hexrays.qvector_lvar_t (class) -ida_hexrays.qvector_lvar_t.__eq__ (method) -ida_hexrays.qvector_lvar_t.__getitem__ (method) -ida_hexrays.qvector_lvar_t.__init__ (method) -ida_hexrays.qvector_lvar_t.__len__ (method) -ida_hexrays.qvector_lvar_t.__ne__ (method) -ida_hexrays.qvector_lvar_t.__setitem__ (method) -ida_hexrays.qvector_lvar_t._del (method) -ida_hexrays.qvector_lvar_t.add_unique (method) -ida_hexrays.qvector_lvar_t.at (method) -ida_hexrays.qvector_lvar_t.begin (method) -ida_hexrays.qvector_lvar_t.capacity (method) -ida_hexrays.qvector_lvar_t.clear (method) -ida_hexrays.qvector_lvar_t.empty (method) -ida_hexrays.qvector_lvar_t.end (method) -ida_hexrays.qvector_lvar_t.erase (method) -ida_hexrays.qvector_lvar_t.extract (method) -ida_hexrays.qvector_lvar_t.find (method) -ida_hexrays.qvector_lvar_t.grow (method) -ida_hexrays.qvector_lvar_t.has (method) -ida_hexrays.qvector_lvar_t.inject (method) -ida_hexrays.qvector_lvar_t.insert (method) -ida_hexrays.qvector_lvar_t.pop_back (method) -ida_hexrays.qvector_lvar_t.push_back (method) -ida_hexrays.qvector_lvar_t.qclear (method) -ida_hexrays.qvector_lvar_t.reserve (method) -ida_hexrays.qvector_lvar_t.resize (method) -ida_hexrays.qvector_lvar_t.size (method) -ida_hexrays.qvector_lvar_t.swap (method) -ida_hexrays.qvector_lvar_t.truncate (method) -ida_hexrays.reg2mreg (function) -ida_hexrays.remitem (function) -ida_hexrays.remove_hexrays_callback (function) -ida_hexrays.rename_lvar (function) -ida_hexrays.restore_user_cmts (function) -ida_hexrays.restore_user_defined_calls (function) -ida_hexrays.restore_user_iflags (function) -ida_hexrays.restore_user_labels (function) -ida_hexrays.restore_user_labels2 (function) -ida_hexrays.restore_user_lvar_settings (function) -ida_hexrays.restore_user_numforms (function) -ida_hexrays.restore_user_unions (function) -ida_hexrays.rlist_t (class) -ida_hexrays.rlist_t.__init__ (method) -ida_hexrays.rlist_t.dstr (method) -ida_hexrays.save_user_cmts (function) -ida_hexrays.save_user_defined_calls (function) -ida_hexrays.save_user_iflags (function) -ida_hexrays.save_user_labels (function) -ida_hexrays.save_user_labels2 (function) -ida_hexrays.save_user_lvar_settings (function) -ida_hexrays.save_user_numforms (function) -ida_hexrays.save_user_unions (function) -ida_hexrays.scif_t (class) -ida_hexrays.scif_t.__init__ (method) -ida_hexrays.scif_t.mba (variable) -ida_hexrays.scif_t.name (variable) -ida_hexrays.scif_t.type (variable) -ida_hexrays.scif_visitor_t (class) -ida_hexrays.scif_visitor_t.__disown__ (method) -ida_hexrays.scif_visitor_t.__init__ (method) -ida_hexrays.scif_visitor_t.visit_scif_mop (method) -ida_hexrays.select_udt_by_offset (function) -ida_hexrays.send_database (function) -ida_hexrays.set2jcnd (function) -ida_hexrays.set_type (function) -ida_hexrays.simple_graph_t (class) -ida_hexrays.simple_graph_t.__init__ (method) -ida_hexrays.stkvar_ref_t (class) -ida_hexrays.stkvar_ref_t.__eq__ (method) -ida_hexrays.stkvar_ref_t.__ge__ (method) -ida_hexrays.stkvar_ref_t.__gt__ (method) -ida_hexrays.stkvar_ref_t.__init__ (method) -ida_hexrays.stkvar_ref_t.__le__ (method) -ida_hexrays.stkvar_ref_t.__lt__ (method) -ida_hexrays.stkvar_ref_t.__ne__ (method) -ida_hexrays.stkvar_ref_t.compare (method) -ida_hexrays.stkvar_ref_t.get_stkvar (method) -ida_hexrays.stkvar_ref_t.mba (variable) -ida_hexrays.stkvar_ref_t.off (variable) -ida_hexrays.stkvar_ref_t.swap (method) -ida_hexrays.swap_mcode_relation (function) -ida_hexrays.swapped_relation (function) -ida_hexrays.term_hexrays_plugin (function) -ida_hexrays.treeloc_t (class) -ida_hexrays.treeloc_t.__eq__ (method) -ida_hexrays.treeloc_t.__init__ (method) -ida_hexrays.treeloc_t.__lt__ (method) -ida_hexrays.udc_filter_t (class) -ida_hexrays.udc_filter_t.__disown__ (method) -ida_hexrays.udc_filter_t.__init__ (method) -ida_hexrays.udc_filter_t.apply (method) -ida_hexrays.udc_filter_t.cleanup (method) -ida_hexrays.udc_filter_t.empty (method) -ida_hexrays.udc_filter_t.init (method) -ida_hexrays.udc_filter_t.install (method) -ida_hexrays.udc_filter_t.match (method) -ida_hexrays.udc_filter_t.remove (method) -ida_hexrays.udcall_map_begin (function) -ida_hexrays.udcall_map_clear (function) -ida_hexrays.udcall_map_end (function) -ida_hexrays.udcall_map_erase (function) -ida_hexrays.udcall_map_find (function) -ida_hexrays.udcall_map_first (function) -ida_hexrays.udcall_map_free (function) -ida_hexrays.udcall_map_insert (function) -ida_hexrays.udcall_map_iterator_t (class) -ida_hexrays.udcall_map_iterator_t.__eq__ (method) -ida_hexrays.udcall_map_iterator_t.__init__ (method) -ida_hexrays.udcall_map_iterator_t.__ne__ (method) -ida_hexrays.udcall_map_new (function) -ida_hexrays.udcall_map_next (function) -ida_hexrays.udcall_map_prev (function) -ida_hexrays.udcall_map_second (function) -ida_hexrays.udcall_map_size (function) -ida_hexrays.udcall_t (class) -ida_hexrays.udcall_t.__eq__ (method) -ida_hexrays.udcall_t.__ge__ (method) -ida_hexrays.udcall_t.__gt__ (method) -ida_hexrays.udcall_t.__init__ (method) -ida_hexrays.udcall_t.__le__ (method) -ida_hexrays.udcall_t.__lt__ (method) -ida_hexrays.udcall_t.__ne__ (method) -ida_hexrays.udcall_t.compare (method) -ida_hexrays.udcall_t.empty (method) -ida_hexrays.ui_stroff_applicator_t (class) -ida_hexrays.ui_stroff_applicator_t.__disown__ (method) -ida_hexrays.ui_stroff_applicator_t.__init__ (method) -ida_hexrays.ui_stroff_applicator_t.apply (method) -ida_hexrays.ui_stroff_op_t (class) -ida_hexrays.ui_stroff_op_t.__eq__ (method) -ida_hexrays.ui_stroff_op_t.__init__ (method) -ida_hexrays.ui_stroff_op_t.__ne__ (method) -ida_hexrays.ui_stroff_op_t.offset (variable) -ida_hexrays.ui_stroff_op_t.text (variable) -ida_hexrays.ui_stroff_ops_t (class) -ida_hexrays.ui_stroff_ops_t.__eq__ (method) -ida_hexrays.ui_stroff_ops_t.__getitem__ (method) -ida_hexrays.ui_stroff_ops_t.__init__ (method) -ida_hexrays.ui_stroff_ops_t.__len__ (method) -ida_hexrays.ui_stroff_ops_t.__ne__ (method) -ida_hexrays.ui_stroff_ops_t.__setitem__ (method) -ida_hexrays.ui_stroff_ops_t._del (method) -ida_hexrays.ui_stroff_ops_t.add_unique (method) -ida_hexrays.ui_stroff_ops_t.at (method) -ida_hexrays.ui_stroff_ops_t.begin (method) -ida_hexrays.ui_stroff_ops_t.capacity (method) -ida_hexrays.ui_stroff_ops_t.clear (method) -ida_hexrays.ui_stroff_ops_t.empty (method) -ida_hexrays.ui_stroff_ops_t.end (method) -ida_hexrays.ui_stroff_ops_t.erase (method) -ida_hexrays.ui_stroff_ops_t.extract (method) -ida_hexrays.ui_stroff_ops_t.find (method) -ida_hexrays.ui_stroff_ops_t.grow (method) -ida_hexrays.ui_stroff_ops_t.has (method) -ida_hexrays.ui_stroff_ops_t.inject (method) -ida_hexrays.ui_stroff_ops_t.insert (method) -ida_hexrays.ui_stroff_ops_t.pop_back (method) -ida_hexrays.ui_stroff_ops_t.push_back (method) -ida_hexrays.ui_stroff_ops_t.qclear (method) -ida_hexrays.ui_stroff_ops_t.reserve (method) -ida_hexrays.ui_stroff_ops_t.resize (method) -ida_hexrays.ui_stroff_ops_t.size (method) -ida_hexrays.ui_stroff_ops_t.swap (method) -ida_hexrays.ui_stroff_ops_t.truncate (method) -ida_hexrays.user_cmts_begin (function) -ida_hexrays.user_cmts_clear (function) -ida_hexrays.user_cmts_end (function) -ida_hexrays.user_cmts_erase (function) -ida_hexrays.user_cmts_find (function) -ida_hexrays.user_cmts_first (function) -ida_hexrays.user_cmts_free (function) -ida_hexrays.user_cmts_insert (function) -ida_hexrays.user_cmts_iterator_t (class) -ida_hexrays.user_cmts_iterator_t.__eq__ (method) -ida_hexrays.user_cmts_iterator_t.__init__ (method) -ida_hexrays.user_cmts_iterator_t.__ne__ (method) -ida_hexrays.user_cmts_new (function) -ida_hexrays.user_cmts_next (function) -ida_hexrays.user_cmts_prev (function) -ida_hexrays.user_cmts_second (function) -ida_hexrays.user_cmts_size (function) -ida_hexrays.user_cmts_t (class) -ida_hexrays.user_cmts_t.__init__ (method) -ida_hexrays.user_cmts_t.at (method) -ida_hexrays.user_cmts_t.size (method) -ida_hexrays.user_iflags_begin (function) -ida_hexrays.user_iflags_clear (function) -ida_hexrays.user_iflags_end (function) -ida_hexrays.user_iflags_erase (function) -ida_hexrays.user_iflags_find (function) -ida_hexrays.user_iflags_first (function) -ida_hexrays.user_iflags_free (function) -ida_hexrays.user_iflags_insert (function) -ida_hexrays.user_iflags_iterator_t (class) -ida_hexrays.user_iflags_iterator_t.__eq__ (method) -ida_hexrays.user_iflags_iterator_t.__init__ (method) -ida_hexrays.user_iflags_iterator_t.__ne__ (method) -ida_hexrays.user_iflags_new (function) -ida_hexrays.user_iflags_next (function) -ida_hexrays.user_iflags_prev (function) -ida_hexrays.user_iflags_second (function) -ida_hexrays.user_iflags_size (function) -ida_hexrays.user_iflags_t (class) -ida_hexrays.user_iflags_t.__init__ (method) -ida_hexrays.user_iflags_t.at (method) -ida_hexrays.user_iflags_t.size (method) -ida_hexrays.user_labels_begin (function) -ida_hexrays.user_labels_clear (function) -ida_hexrays.user_labels_end (function) -ida_hexrays.user_labels_erase (function) -ida_hexrays.user_labels_find (function) -ida_hexrays.user_labels_first (function) -ida_hexrays.user_labels_free (function) -ida_hexrays.user_labels_insert (function) -ida_hexrays.user_labels_iterator_t (class) -ida_hexrays.user_labels_iterator_t.__eq__ (method) -ida_hexrays.user_labels_iterator_t.__init__ (method) -ida_hexrays.user_labels_iterator_t.__ne__ (method) -ida_hexrays.user_labels_new (function) -ida_hexrays.user_labels_next (function) -ida_hexrays.user_labels_prev (function) -ida_hexrays.user_labels_second (function) -ida_hexrays.user_labels_size (function) -ida_hexrays.user_labels_t (class) -ida_hexrays.user_labels_t.__init__ (method) -ida_hexrays.user_labels_t.at (method) -ida_hexrays.user_labels_t.size (method) -ida_hexrays.user_lvar_modifier_t (class) -ida_hexrays.user_lvar_modifier_t.__disown__ (method) -ida_hexrays.user_lvar_modifier_t.__init__ (method) -ida_hexrays.user_lvar_modifier_t.modify_lvars (method) -ida_hexrays.user_numforms_begin (function) -ida_hexrays.user_numforms_clear (function) -ida_hexrays.user_numforms_end (function) -ida_hexrays.user_numforms_erase (function) -ida_hexrays.user_numforms_find (function) -ida_hexrays.user_numforms_first (function) -ida_hexrays.user_numforms_free (function) -ida_hexrays.user_numforms_insert (function) -ida_hexrays.user_numforms_iterator_t (class) -ida_hexrays.user_numforms_iterator_t.__eq__ (method) -ida_hexrays.user_numforms_iterator_t.__init__ (method) -ida_hexrays.user_numforms_iterator_t.__ne__ (method) -ida_hexrays.user_numforms_new (function) -ida_hexrays.user_numforms_next (function) -ida_hexrays.user_numforms_prev (function) -ida_hexrays.user_numforms_second (function) -ida_hexrays.user_numforms_size (function) -ida_hexrays.user_numforms_t (class) -ida_hexrays.user_numforms_t.__init__ (method) -ida_hexrays.user_numforms_t.at (method) -ida_hexrays.user_numforms_t.size (method) -ida_hexrays.user_unions_begin (function) -ida_hexrays.user_unions_clear (function) -ida_hexrays.user_unions_end (function) -ida_hexrays.user_unions_erase (function) -ida_hexrays.user_unions_find (function) -ida_hexrays.user_unions_first (function) -ida_hexrays.user_unions_free (function) -ida_hexrays.user_unions_insert (function) -ida_hexrays.user_unions_iterator_t (class) -ida_hexrays.user_unions_iterator_t.__eq__ (method) -ida_hexrays.user_unions_iterator_t.__init__ (method) -ida_hexrays.user_unions_iterator_t.__ne__ (method) -ida_hexrays.user_unions_new (function) -ida_hexrays.user_unions_next (function) -ida_hexrays.user_unions_prev (function) -ida_hexrays.user_unions_second (function) -ida_hexrays.user_unions_size (function) -ida_hexrays.user_unions_t (class) -ida_hexrays.user_unions_t.__init__ (method) -ida_hexrays.user_unions_t.at (method) -ida_hexrays.user_unions_t.size (method) -ida_hexrays.uval_ivl_ivlset_t (class) -ida_hexrays.uval_ivl_ivlset_t.__eq__ (method) -ida_hexrays.uval_ivl_ivlset_t.__init__ (method) -ida_hexrays.uval_ivl_ivlset_t.__ne__ (method) -ida_hexrays.uval_ivl_ivlset_t.all_values (method) -ida_hexrays.uval_ivl_ivlset_t.begin (method) -ida_hexrays.uval_ivl_ivlset_t.clear (method) -ida_hexrays.uval_ivl_ivlset_t.empty (method) -ida_hexrays.uval_ivl_ivlset_t.end (method) -ida_hexrays.uval_ivl_ivlset_t.getivl (method) -ida_hexrays.uval_ivl_ivlset_t.lastivl (method) -ida_hexrays.uval_ivl_ivlset_t.nivls (method) -ida_hexrays.uval_ivl_ivlset_t.qclear (method) -ida_hexrays.uval_ivl_ivlset_t.set_all_values (method) -ida_hexrays.uval_ivl_ivlset_t.single_value (method) -ida_hexrays.uval_ivl_ivlset_t.swap (method) -ida_hexrays.uval_ivl_t (class) -ida_hexrays.uval_ivl_t.__init__ (method) -ida_hexrays.uval_ivl_t.end (method) -ida_hexrays.uval_ivl_t.last (method) -ida_hexrays.uval_ivl_t.valid (method) -ida_hexrays.valrng_t (class) -ida_hexrays.valrng_t.__eq__ (method) -ida_hexrays.valrng_t.__ge__ (method) -ida_hexrays.valrng_t.__gt__ (method) -ida_hexrays.valrng_t.__init__ (method) -ida_hexrays.valrng_t.__le__ (method) -ida_hexrays.valrng_t.__lt__ (method) -ida_hexrays.valrng_t.__ne__ (method) -ida_hexrays.valrng_t._deregister (method) -ida_hexrays.valrng_t._print (method) -ida_hexrays.valrng_t._register (method) -ida_hexrays.valrng_t.all_values (method) -ida_hexrays.valrng_t.compare (method) -ida_hexrays.valrng_t.cvt_to_cmp (method) -ida_hexrays.valrng_t.cvt_to_single_value (method) -ida_hexrays.valrng_t.dstr (method) -ida_hexrays.valrng_t.empty (method) -ida_hexrays.valrng_t.get_size (method) -ida_hexrays.valrng_t.has (method) -ida_hexrays.valrng_t.intersect_with (method) -ida_hexrays.valrng_t.inverse (method) -ida_hexrays.valrng_t.is_unknown (method) -ida_hexrays.valrng_t.max_svalue (method) -ida_hexrays.valrng_t.max_value (method) -ida_hexrays.valrng_t.min_svalue (method) -ida_hexrays.valrng_t.reduce_size (method) -ida_hexrays.valrng_t.set_all (method) -ida_hexrays.valrng_t.set_cmp (method) -ida_hexrays.valrng_t.set_eq (method) -ida_hexrays.valrng_t.set_none (method) -ida_hexrays.valrng_t.set_unk (method) -ida_hexrays.valrng_t.swap (method) -ida_hexrays.valrng_t.unite_with (method) -ida_hexrays.var_ref_t (class) -ida_hexrays.var_ref_t.__eq__ (method) -ida_hexrays.var_ref_t.__ge__ (method) -ida_hexrays.var_ref_t.__gt__ (method) -ida_hexrays.var_ref_t.__init__ (method) -ida_hexrays.var_ref_t.__le__ (method) -ida_hexrays.var_ref_t.__lt__ (method) -ida_hexrays.var_ref_t.__ne__ (method) -ida_hexrays.var_ref_t.compare (method) -ida_hexrays.var_ref_t.getv (method) -ida_hexrays.var_ref_t.idx (variable) -ida_hexrays.var_ref_t.mba (variable) -ida_hexrays.vc_printer_t (class) -ida_hexrays.vc_printer_t.__disown__ (method) -ida_hexrays.vc_printer_t.__init__ (method) -ida_hexrays.vc_printer_t.func (variable) -ida_hexrays.vc_printer_t.oneliner (method) -ida_hexrays.vd_failure_t (class) -ida_hexrays.vd_failure_t.__init__ (method) -ida_hexrays.vd_failure_t.desc (method) -ida_hexrays.vd_interr_t (class) -ida_hexrays.vd_interr_t.__init__ (method) -ida_hexrays.vd_printer_t (class) -ida_hexrays.vd_printer_t.__disown__ (method) -ida_hexrays.vd_printer_t.__init__ (method) -ida_hexrays.vd_printer_t._print (method) -ida_hexrays.vd_printer_t.hdrlines (variable) -ida_hexrays.vdloc_t (class) -ida_hexrays.vdloc_t.__eq__ (method) -ida_hexrays.vdloc_t.__ge__ (method) -ida_hexrays.vdloc_t.__gt__ (method) -ida_hexrays.vdloc_t.__init__ (method) -ida_hexrays.vdloc_t.__le__ (method) -ida_hexrays.vdloc_t.__lt__ (method) -ida_hexrays.vdloc_t.__ne__ (method) -ida_hexrays.vdloc_t._set_reg1 (method) -ida_hexrays.vdloc_t.compare (method) -ida_hexrays.vdloc_t.is_aliasable (method) -ida_hexrays.vdloc_t.reg1 (method) -ida_hexrays.vdloc_t.set_reg1 (method) -ida_hexrays.vdui_t (class) -ida_hexrays.vdui_t.__init__ (method) -ida_hexrays.vdui_t.calc_cmt_type (method) -ida_hexrays.vdui_t.cfunc (variable) -ida_hexrays.vdui_t.clear (method) -ida_hexrays.vdui_t.collapse_item (method) -ida_hexrays.vdui_t.collapse_lvars (method) -ida_hexrays.vdui_t.cpos (variable) -ida_hexrays.vdui_t.ct (variable) -ida_hexrays.vdui_t.ctree_to_disasm (method) -ida_hexrays.vdui_t.del_orphan_cmts (method) -ida_hexrays.vdui_t.edit_cmt (method) -ida_hexrays.vdui_t.edit_func_cmt (method) -ida_hexrays.vdui_t.flags (variable) -ida_hexrays.vdui_t.get_current_item (method) -ida_hexrays.vdui_t.get_current_label (method) -ida_hexrays.vdui_t.get_number (method) -ida_hexrays.vdui_t.head (variable) -ida_hexrays.vdui_t.in_ctree (method) -ida_hexrays.vdui_t.invert_bits (method) -ida_hexrays.vdui_t.invert_sign (method) -ida_hexrays.vdui_t.item (variable) -ida_hexrays.vdui_t.jump_enter (method) -ida_hexrays.vdui_t.last_code (variable) -ida_hexrays.vdui_t.locked (method) -ida_hexrays.vdui_t.map_lvar (method) -ida_hexrays.vdui_t.mba (variable) -ida_hexrays.vdui_t.refresh_cpos (method) -ida_hexrays.vdui_t.refresh_ctext (method) -ida_hexrays.vdui_t.refresh_view (method) -ida_hexrays.vdui_t.rename_global (method) -ida_hexrays.vdui_t.rename_label (method) -ida_hexrays.vdui_t.rename_lvar (method) -ida_hexrays.vdui_t.rename_strmem (method) -ida_hexrays.vdui_t.rename_udm (method) -ida_hexrays.vdui_t.set_global_type (method) -ida_hexrays.vdui_t.set_locked (method) -ida_hexrays.vdui_t.set_lvar_cmt (method) -ida_hexrays.vdui_t.set_lvar_type (method) -ida_hexrays.vdui_t.set_noptr_lvar (method) -ida_hexrays.vdui_t.set_num_enum (method) -ida_hexrays.vdui_t.set_num_radix (method) -ida_hexrays.vdui_t.set_num_stroff (method) -ida_hexrays.vdui_t.set_strmem_type (method) -ida_hexrays.vdui_t.set_udm_type (method) -ida_hexrays.vdui_t.set_valid (method) -ida_hexrays.vdui_t.set_visible (method) -ida_hexrays.vdui_t.split_item (method) -ida_hexrays.vdui_t.switch_to (method) -ida_hexrays.vdui_t.tail (variable) -ida_hexrays.vdui_t.ui_edit_lvar_cmt (method) -ida_hexrays.vdui_t.ui_map_lvar (method) -ida_hexrays.vdui_t.ui_rename_lvar (method) -ida_hexrays.vdui_t.ui_set_call_type (method) -ida_hexrays.vdui_t.ui_set_lvar_type (method) -ida_hexrays.vdui_t.ui_unmap_lvar (method) -ida_hexrays.vdui_t.valid (method) -ida_hexrays.vdui_t.view_idx (variable) -ida_hexrays.vdui_t.visible (method) -ida_hexrays.vivl_t (class) -ida_hexrays.vivl_t.__eq__ (method) -ida_hexrays.vivl_t.__ge__ (method) -ida_hexrays.vivl_t.__gt__ (method) -ida_hexrays.vivl_t.__init__ (method) -ida_hexrays.vivl_t.__le__ (method) -ida_hexrays.vivl_t.__lt__ (method) -ida_hexrays.vivl_t.__ne__ (method) -ida_hexrays.vivl_t._print (method) -ida_hexrays.vivl_t.compare (method) -ida_hexrays.vivl_t.contains (method) -ida_hexrays.vivl_t.dstr (method) -ida_hexrays.vivl_t.extend_to_cover (method) -ida_hexrays.vivl_t.includes (method) -ida_hexrays.vivl_t.intersect (method) -ida_hexrays.vivl_t.overlap (method) -ida_hexrays.vivl_t.set (method) -ida_hexrays.vivl_t.set_reg (method) -ida_hexrays.vivl_t.set_stkoff (method) -ida_hexrays.vivl_t.size (variable) -ida_hexrays.voff_t (class) -ida_hexrays.voff_t.__eq__ (method) -ida_hexrays.voff_t.__ge__ (method) -ida_hexrays.voff_t.__gt__ (method) -ida_hexrays.voff_t.__init__ (method) -ida_hexrays.voff_t.__le__ (method) -ida_hexrays.voff_t.__lt__ (method) -ida_hexrays.voff_t.__ne__ (method) -ida_hexrays.voff_t.add (method) -ida_hexrays.voff_t.compare (method) -ida_hexrays.voff_t.defined (method) -ida_hexrays.voff_t.diff (method) -ida_hexrays.voff_t.get_reg (method) -ida_hexrays.voff_t.get_stkoff (method) -ida_hexrays.voff_t.inc (method) -ida_hexrays.voff_t.is_reg (method) -ida_hexrays.voff_t.is_stkoff (method) -ida_hexrays.voff_t.off (variable) -ida_hexrays.voff_t.set (method) -ida_hexrays.voff_t.set_reg (method) -ida_hexrays.voff_t.set_stkoff (method) -ida_hexrays.voff_t.type (variable) -ida_hexrays.voff_t.undef (method) -ida_allins (module) -ida_auto (module) -ida_auto.AU_CHLB (variable) -ida_auto.AU_CODE (variable) -ida_auto.AU_FCHUNK (variable) -ida_auto.AU_FINAL (variable) -ida_auto.AU_LBF2 (variable) -ida_auto.AU_LBF3 (variable) -ida_auto.AU_LIBF (variable) -ida_auto.AU_NONE (variable) -ida_auto.AU_PROC (variable) -ida_auto.AU_TAIL (variable) -ida_auto.AU_TYPE (variable) -ida_auto.AU_UNK (variable) -ida_auto.AU_USD2 (variable) -ida_auto.AU_USED (variable) -ida_auto.AU_WEAK (variable) -ida_auto.auto_apply_tail (function) -ida_auto.auto_apply_type (function) -ida_auto.auto_cancel (function) -ida_auto.auto_display_t (class) -ida_auto.auto_display_t.__init__ (method) -ida_auto.auto_get (function) -ida_auto.auto_is_ok (function) -ida_auto.auto_make_code (function) -ida_auto.auto_make_proc (function) -ida_auto.auto_make_step (function) -ida_auto.auto_mark (function) -ida_auto.auto_mark_range (function) -ida_auto.auto_postpone_analysis (function) -ida_auto.auto_recreate_insn (function) -ida_auto.auto_unmark (function) -ida_auto.auto_wait (function) -ida_auto.auto_wait_range (function) -ida_auto.enable_auto (function) -ida_auto.get_auto_display (function) -ida_auto.get_auto_state (function) -ida_auto.is_auto_enabled (function) -ida_auto.may_create_stkvars (function) -ida_auto.may_trace_sp (function) -ida_auto.peek_auto_queue (function) -ida_auto.plan_and_wait (function) -ida_auto.plan_ea (function) -ida_auto.plan_range (function) -ida_auto.reanalyze_callers (function) -ida_auto.revert_ida_decisions (function) -ida_auto.set_auto_state (function) -ida_auto.set_ida_state (function) -ida_auto.show_addr (function) -ida_auto.show_auto (function) -ida_bitrange (module) -ida_bitrange.bitrange_t (class) -ida_bitrange.bitrange_t.__eq__ (method) -ida_bitrange.bitrange_t.__ge__ (method) -ida_bitrange.bitrange_t.__gt__ (method) -ida_bitrange.bitrange_t.__init__ (method) -ida_bitrange.bitrange_t.__le__ (method) -ida_bitrange.bitrange_t.__lt__ (method) -ida_bitrange.bitrange_t.__ne__ (method) -ida_bitrange.bitrange_t.__str__ (method) -ida_bitrange.bitrange_t.apply_mask (method) -ida_bitrange.bitrange_t.bitoff (method) -ida_bitrange.bitrange_t.bitsize (method) -ida_bitrange.bitrange_t.bytesize (method) -ida_bitrange.bitrange_t.compare (method) -ida_bitrange.bitrange_t.create_union (method) -ida_bitrange.bitrange_t.empty (method) -ida_bitrange.bitrange_t.extract (method) -ida_bitrange.bitrange_t.has_common (method) -ida_bitrange.bitrange_t.init (method) -ida_bitrange.bitrange_t.inject (method) -ida_bitrange.bitrange_t.intersect (method) -ida_bitrange.bitrange_t.mask64 (method) -ida_bitrange.bitrange_t.reset (method) -ida_bitrange.bitrange_t.shift_down (method) -ida_bitrange.bitrange_t.shift_up (method) -ida_bitrange.bitrange_t.sub (method) -ida_bytes (module) -ida_bytes.ALOPT_APPEND (variable) -ida_bytes.ALOPT_IGNCLT (variable) -ida_bytes.ALOPT_IGNHEADS (variable) -ida_bytes.ALOPT_IGNPRINT (variable) -ida_bytes.ALOPT_MAX4K (variable) -ida_bytes.ALOPT_ONLYTERM (variable) -ida_bytes.BIN_SEARCH_BACKWARD (variable) -ida_bytes.BIN_SEARCH_BITMASK (variable) -ida_bytes.BIN_SEARCH_CASE (variable) -ida_bytes.BIN_SEARCH_FORWARD (variable) -ida_bytes.BIN_SEARCH_INITED (variable) -ida_bytes.BIN_SEARCH_NOBREAK (variable) -ida_bytes.BIN_SEARCH_NOCASE (variable) -ida_bytes.BIN_SEARCH_NOSHOW (variable) -ida_bytes.DELIT_DELNAMES (variable) -ida_bytes.DELIT_EXPAND (variable) -ida_bytes.DELIT_KEEPFUNC (variable) -ida_bytes.DELIT_NOCMT (variable) -ida_bytes.DELIT_NOTRUNC (variable) -ida_bytes.DELIT_NOUNAME (variable) -ida_bytes.DELIT_SIMPLE (variable) -ida_bytes.DTP_NODUP (variable) -ida_bytes.DT_TYPE (variable) -ida_bytes.FF_ALIGN (variable) -ida_bytes.FF_BNOT (variable) -ida_bytes.FF_BYTE (variable) -ida_bytes.FF_CODE (variable) -ida_bytes.FF_COMM (variable) -ida_bytes.FF_CUSTOM (variable) -ida_bytes.FF_DATA (variable) -ida_bytes.FF_DOUBLE (variable) -ida_bytes.FF_DWORD (variable) -ida_bytes.FF_FLOAT (variable) -ida_bytes.FF_FLOW (variable) -ida_bytes.FF_FUNC (variable) -ida_bytes.FF_IMMD (variable) -ida_bytes.FF_IVL (variable) -ida_bytes.FF_JUMP (variable) -ida_bytes.FF_LABL (variable) -ida_bytes.FF_LINE (variable) -ida_bytes.FF_NAME (variable) -ida_bytes.FF_N_CHAR (variable) -ida_bytes.FF_N_CUST (variable) -ida_bytes.FF_N_ENUM (variable) -ida_bytes.FF_N_FLT (variable) -ida_bytes.FF_N_FOP (variable) -ida_bytes.FF_N_NUMB (variable) -ida_bytes.FF_N_NUMD (variable) -ida_bytes.FF_N_NUMH (variable) -ida_bytes.FF_N_NUMO (variable) -ida_bytes.FF_N_OFF (variable) -ida_bytes.FF_N_SEG (variable) -ida_bytes.FF_N_STK (variable) -ida_bytes.FF_N_STRO (variable) -ida_bytes.FF_N_VOID (variable) -ida_bytes.FF_OWORD (variable) -ida_bytes.FF_PACKREAL (variable) -ida_bytes.FF_QWORD (variable) -ida_bytes.FF_REF (variable) -ida_bytes.FF_SIGN (variable) -ida_bytes.FF_STRLIT (variable) -ida_bytes.FF_STRUCT (variable) -ida_bytes.FF_TAIL (variable) -ida_bytes.FF_TBYTE (variable) -ida_bytes.FF_UNK (variable) -ida_bytes.FF_UNUSED (variable) -ida_bytes.FF_WORD (variable) -ida_bytes.FF_YWORD (variable) -ida_bytes.FF_ZWORD (variable) -ida_bytes.GFE_IDB_VALUE (variable) -ida_bytes.GFE_VALUE (variable) -ida_bytes.GMB_READALL (variable) -ida_bytes.GMB_WAITBOX (variable) -ida_bytes.ITEM_END_CANCEL (variable) -ida_bytes.ITEM_END_FIXUP (variable) -ida_bytes.ITEM_END_INITED (variable) -ida_bytes.ITEM_END_NAME (variable) -ida_bytes.ITEM_END_XREF (variable) -ida_bytes.MS_CLS (variable) -ida_bytes.MS_CODE (variable) -ida_bytes.MS_COMM (variable) -ida_bytes.MS_N_TYPE (variable) -ida_bytes.MS_VAL (variable) -ida_bytes.OPND_ALL (variable) -ida_bytes.OPND_MASK (variable) -ida_bytes.OPND_OUTER (variable) -ida_bytes.PSTF_ATTRIB (variable) -ida_bytes.PSTF_ENC (variable) -ida_bytes.PSTF_HOTKEY (variable) -ida_bytes.PSTF_ONLY_ENC (variable) -ida_bytes.PSTF_TBRIEF (variable) -ida_bytes.PSTF_TINLIN (variable) -ida_bytes.PSTF_TMASK (variable) -ida_bytes.PSTF_TNORM (variable) -ida_bytes.STRCONV_ESCAPE (variable) -ida_bytes.STRCONV_INCLLEN (variable) -ida_bytes.STRCONV_REPLCHAR (variable) -ida_bytes.__walk_types_and_formats (function) -ida_bytes.add_byte (function) -ida_bytes.add_dword (function) -ida_bytes.add_hidden_range (function) -ida_bytes.add_mapping (function) -ida_bytes.add_qword (function) -ida_bytes.add_word (function) -ida_bytes.align_flag (function) -ida_bytes.append_cmt (function) -ida_bytes.attach_custom_data_format (function) -ida_bytes.bin_flag (function) -ida_bytes.bin_search (function) -ida_bytes.bin_search3 (function) -ida_bytes.byte_flag (function) -ida_bytes.bytesize (function) -ida_bytes.calc_def_align (function) -ida_bytes.calc_dflags (function) -ida_bytes.calc_max_align (function) -ida_bytes.calc_max_item_end (function) -ida_bytes.calc_min_align (function) -ida_bytes.can_define_item (function) -ida_bytes.change_storage_type (function) -ida_bytes.char_flag (function) -ida_bytes.chunk_size (function) -ida_bytes.chunk_start (function) -ida_bytes.clr_lzero (function) -ida_bytes.clr_op_type (function) -ida_bytes.code_flag (function) -ida_bytes.combine_flags (function) -ida_bytes.compiled_binpat_t (class) -ida_bytes.compiled_binpat_t.__eq__ (method) -ida_bytes.compiled_binpat_t.__init__ (method) -ida_bytes.compiled_binpat_t.__ne__ (method) -ida_bytes.compiled_binpat_t.all_bytes_defined (method) -ida_bytes.compiled_binpat_t.qclear (method) -ida_bytes.compiled_binpat_vec_t (class) -ida_bytes.compiled_binpat_vec_t.__eq__ (method) -ida_bytes.compiled_binpat_vec_t.__getitem__ (method) -ida_bytes.compiled_binpat_vec_t.__init__ (method) -ida_bytes.compiled_binpat_vec_t.__len__ (method) -ida_bytes.compiled_binpat_vec_t.__ne__ (method) -ida_bytes.compiled_binpat_vec_t.__setitem__ (method) -ida_bytes.compiled_binpat_vec_t._del (method) -ida_bytes.compiled_binpat_vec_t.add_unique (method) -ida_bytes.compiled_binpat_vec_t.at (method) -ida_bytes.compiled_binpat_vec_t.begin (method) -ida_bytes.compiled_binpat_vec_t.capacity (method) -ida_bytes.compiled_binpat_vec_t.clear (method) -ida_bytes.compiled_binpat_vec_t.empty (method) -ida_bytes.compiled_binpat_vec_t.end (method) -ida_bytes.compiled_binpat_vec_t.erase (method) -ida_bytes.compiled_binpat_vec_t.extract (method) -ida_bytes.compiled_binpat_vec_t.find (method) -ida_bytes.compiled_binpat_vec_t.grow (method) -ida_bytes.compiled_binpat_vec_t.has (method) -ida_bytes.compiled_binpat_vec_t.inject (method) -ida_bytes.compiled_binpat_vec_t.insert (method) -ida_bytes.compiled_binpat_vec_t.pop_back (method) -ida_bytes.compiled_binpat_vec_t.push_back (method) -ida_bytes.compiled_binpat_vec_t.qclear (method) -ida_bytes.compiled_binpat_vec_t.reserve (method) -ida_bytes.compiled_binpat_vec_t.resize (method) -ida_bytes.compiled_binpat_vec_t.size (method) -ida_bytes.compiled_binpat_vec_t.swap (method) -ida_bytes.compiled_binpat_vec_t.truncate (method) -ida_bytes.create_16bit_data (function) -ida_bytes.create_32bit_data (function) -ida_bytes.create_align (function) -ida_bytes.create_byte (function) -ida_bytes.create_custdata (function) -ida_bytes.create_data (function) -ida_bytes.create_double (function) -ida_bytes.create_dword (function) -ida_bytes.create_float (function) -ida_bytes.create_oword (function) -ida_bytes.create_packed_real (function) -ida_bytes.create_qword (function) -ida_bytes.create_strlit (function) -ida_bytes.create_struct (function) -ida_bytes.create_tbyte (function) -ida_bytes.create_word (function) -ida_bytes.create_yword (function) -ida_bytes.create_zword (function) -ida_bytes.cust_flag (function) -ida_bytes.custfmt_flag (function) -ida_bytes.data_format_t (class) -ida_bytes.data_format_t.__get_id (method) -ida_bytes.data_format_t.__init__ (method) -ida_bytes.data_format_t.__init__ (method) -ida_bytes.data_format_t.hotkey (variable) -ida_bytes.data_format_t.is_present_in_menus (method) -ida_bytes.data_format_t.menu_name (variable) -ida_bytes.data_format_t.name (variable) -ida_bytes.data_format_t.props (variable) -ida_bytes.data_format_t.text_width (variable) -ida_bytes.data_format_t.value_size (variable) -ida_bytes.data_type_t (class) -ida_bytes.data_type_t.__get_id (method) -ida_bytes.data_type_t.__init__ (method) -ida_bytes.data_type_t.__init__ (method) -ida_bytes.data_type_t.asm_keyword (variable) -ida_bytes.data_type_t.hotkey (variable) -ida_bytes.data_type_t.is_present_in_menus (method) -ida_bytes.data_type_t.menu_name (variable) -ida_bytes.data_type_t.name (variable) -ida_bytes.data_type_t.props (variable) -ida_bytes.data_type_t.value_size (variable) -ida_bytes.dec_flag (function) -ida_bytes.del_hidden_range (function) -ida_bytes.del_items (function) -ida_bytes.del_mapping (function) -ida_bytes.del_value (function) -ida_bytes.detach_custom_data_format (function) -ida_bytes.disable_flags (function) -ida_bytes.double_flag (function) -ida_bytes.dword_flag (function) -ida_bytes.enable_flags (function) -ida_bytes.enum_flag (function) -ida_bytes.equal_bytes (function) -ida_bytes.f_has_cmt (function) -ida_bytes.f_has_dummy_name (function) -ida_bytes.f_has_extra_cmts (function) -ida_bytes.f_has_name (function) -ida_bytes.f_has_user_name (function) -ida_bytes.f_has_xref (function) -ida_bytes.f_is_align (function) -ida_bytes.f_is_byte (function) -ida_bytes.f_is_code (function) -ida_bytes.f_is_custom (function) -ida_bytes.f_is_data (function) -ida_bytes.f_is_double (function) -ida_bytes.f_is_dword (function) -ida_bytes.f_is_float (function) -ida_bytes.f_is_head (function) -ida_bytes.f_is_not_tail (function) -ida_bytes.f_is_oword (function) -ida_bytes.f_is_pack_real (function) -ida_bytes.f_is_qword (function) -ida_bytes.f_is_strlit (function) -ida_bytes.f_is_struct (function) -ida_bytes.f_is_tail (function) -ida_bytes.f_is_tbyte (function) -ida_bytes.f_is_word (function) -ida_bytes.f_is_yword (function) -ida_bytes.find_byte (function) -ida_bytes.find_byter (function) -ida_bytes.find_custom_data_format (function) -ida_bytes.find_custom_data_type (function) -ida_bytes.find_free_chunk (function) -ida_bytes.float_flag (function) -ida_bytes.flt_flag (function) -ida_bytes.free_chunk (function) -ida_bytes.get_16bit (function) -ida_bytes.get_32bit (function) -ida_bytes.get_64bit (function) -ida_bytes.get_8bit (function) -ida_bytes.get_byte (function) -ida_bytes.get_bytes (function) -ida_bytes.get_bytes_and_mask (function) -ida_bytes.get_cmt (function) -ida_bytes.get_custom_data_format (function) -ida_bytes.get_custom_data_formats (function) -ida_bytes.get_custom_data_type (function) -ida_bytes.get_custom_data_types (function) -ida_bytes.get_data_elsize (function) -ida_bytes.get_data_value (function) -ida_bytes.get_db_byte (function) -ida_bytes.get_default_radix (function) -ida_bytes.get_dword (function) -ida_bytes.get_enum_id (function) -ida_bytes.get_first_hidden_range (function) -ida_bytes.get_flags (function) -ida_bytes.get_flags_by_size (function) -ida_bytes.get_flags_ex (function) -ida_bytes.get_forced_operand (function) -ida_bytes.get_full_data_elsize (function) -ida_bytes.get_full_flags (function) -ida_bytes.get_hidden_range (function) -ida_bytes.get_hidden_range_num (function) -ida_bytes.get_hidden_range_qty (function) -ida_bytes.get_item_end (function) -ida_bytes.get_item_flag (function) -ida_bytes.get_item_head (function) -ida_bytes.get_item_refinfo (function) -ida_bytes.get_item_size (function) -ida_bytes.get_last_hidden_range (function) -ida_bytes.get_manual_insn (function) -ida_bytes.get_mapping (function) -ida_bytes.get_mappings_qty (function) -ida_bytes.get_max_strlit_length (function) -ida_bytes.get_next_hidden_range (function) -ida_bytes.get_octet (function) -ida_bytes.get_octet2 (function) -ida_bytes.get_operand_flag (function) -ida_bytes.get_operand_type_shift (function) -ida_bytes.get_opinfo (function) -ida_bytes.get_optype_flags0 (function) -ida_bytes.get_optype_flags1 (function) -ida_bytes.get_original_byte (function) -ida_bytes.get_original_dword (function) -ida_bytes.get_original_qword (function) -ida_bytes.get_original_word (function) -ida_bytes.get_possible_item_varsize (function) -ida_bytes.get_predef_insn_cmt (function) -ida_bytes.get_prev_hidden_range (function) -ida_bytes.get_qword (function) -ida_bytes.get_radix (function) -ida_bytes.get_strlit_contents (function) -ida_bytes.get_stroff_path (function) -ida_bytes.get_wide_byte (function) -ida_bytes.get_wide_dword (function) -ida_bytes.get_wide_word (function) -ida_bytes.get_word (function) -ida_bytes.get_zero_ranges (function) -ida_bytes.getn_hidden_range (function) -ida_bytes.has_any_name (function) -ida_bytes.has_auto_name (function) -ida_bytes.has_cmt (function) -ida_bytes.has_dummy_name (function) -ida_bytes.has_extra_cmts (function) -ida_bytes.has_immd (function) -ida_bytes.has_name (function) -ida_bytes.has_user_name (function) -ida_bytes.has_value (function) -ida_bytes.has_xref (function) -ida_bytes.hex_flag (function) -ida_bytes.hidden_range_t (class) -ida_bytes.hidden_range_t.__init__ (method) -ida_bytes.hidden_range_t.color (variable) -ida_bytes.hidden_range_t.description (variable) -ida_bytes.hidden_range_t.footer (variable) -ida_bytes.hidden_range_t.header (variable) -ida_bytes.hidden_range_t.visible (variable) -ida_bytes.is_align (function) -ida_bytes.is_attached_custom_data_format (function) -ida_bytes.is_bnot (function) -ida_bytes.is_byte (function) -ida_bytes.is_char (function) -ida_bytes.is_char0 (function) -ida_bytes.is_char1 (function) -ida_bytes.is_code (function) -ida_bytes.is_custfmt (function) -ida_bytes.is_custfmt0 (function) -ida_bytes.is_custfmt1 (function) -ida_bytes.is_custom (function) -ida_bytes.is_data (function) -ida_bytes.is_defarg (function) -ida_bytes.is_defarg0 (function) -ida_bytes.is_defarg1 (function) -ida_bytes.is_double (function) -ida_bytes.is_dword (function) -ida_bytes.is_enum (function) -ida_bytes.is_enum0 (function) -ida_bytes.is_enum1 (function) -ida_bytes.is_flag_for_operand (function) -ida_bytes.is_float (function) -ida_bytes.is_float0 (function) -ida_bytes.is_float1 (function) -ida_bytes.is_flow (function) -ida_bytes.is_fltnum (function) -ida_bytes.is_forced_operand (function) -ida_bytes.is_func (function) -ida_bytes.is_head (function) -ida_bytes.is_invsign (function) -ida_bytes.is_loaded (function) -ida_bytes.is_lzero (function) -ida_bytes.is_manual (function) -ida_bytes.is_manual_insn (function) -ida_bytes.is_mapped (function) -ida_bytes.is_not_tail (function) -ida_bytes.is_numop (function) -ida_bytes.is_numop0 (function) -ida_bytes.is_numop1 (function) -ida_bytes.is_off (function) -ida_bytes.is_off0 (function) -ida_bytes.is_off1 (function) -ida_bytes.is_oword (function) -ida_bytes.is_pack_real (function) -ida_bytes.is_qword (function) -ida_bytes.is_same_data_type (function) -ida_bytes.is_seg (function) -ida_bytes.is_seg0 (function) -ida_bytes.is_seg1 (function) -ida_bytes.is_stkvar (function) -ida_bytes.is_stkvar0 (function) -ida_bytes.is_stkvar1 (function) -ida_bytes.is_strlit (function) -ida_bytes.is_stroff (function) -ida_bytes.is_stroff0 (function) -ida_bytes.is_stroff1 (function) -ida_bytes.is_struct (function) -ida_bytes.is_suspop (function) -ida_bytes.is_tail (function) -ida_bytes.is_tbyte (function) -ida_bytes.is_unknown (function) -ida_bytes.is_varsize_item (function) -ida_bytes.is_word (function) -ida_bytes.is_yword (function) -ida_bytes.is_zword (function) -ida_bytes.leading_zero_important (function) -ida_bytes.nbits (function) -ida_bytes.next_addr (function) -ida_bytes.next_chunk (function) -ida_bytes.next_head (function) -ida_bytes.next_inited (function) -ida_bytes.next_not_tail (function) -ida_bytes.next_that (function) -ida_bytes.next_unknown (function) -ida_bytes.next_visea (function) -ida_bytes.num_flag (function) -ida_bytes.oct_flag (function) -ida_bytes.octet_generator_t (class) -ida_bytes.octet_generator_t.__init__ (method) -ida_bytes.octet_generator_t.invert_byte_order (method) -ida_bytes.off_flag (function) -ida_bytes.op_adds_xrefs (function) -ida_bytes.op_based_stroff (function) -ida_bytes.op_bin (function) -ida_bytes.op_chr (function) -ida_bytes.op_custfmt (function) -ida_bytes.op_dec (function) -ida_bytes.op_enum (function) -ida_bytes.op_flt (function) -ida_bytes.op_hex (function) -ida_bytes.op_num (function) -ida_bytes.op_oct (function) -ida_bytes.op_seg (function) -ida_bytes.op_stkvar (function) -ida_bytes.op_stroff (function) -ida_bytes.oword_flag (function) -ida_bytes.packreal_flag (function) -ida_bytes.parse_binpat_str (function) -ida_bytes.patch_byte (function) -ida_bytes.patch_bytes (function) -ida_bytes.patch_dword (function) -ida_bytes.patch_qword (function) -ida_bytes.patch_word (function) -ida_bytes.prev_addr (function) -ida_bytes.prev_chunk (function) -ida_bytes.prev_head (function) -ida_bytes.prev_inited (function) -ida_bytes.prev_not_tail (function) -ida_bytes.prev_that (function) -ida_bytes.prev_unknown (function) -ida_bytes.prev_visea (function) -ida_bytes.print_strlit_type (function) -ida_bytes.put_byte (function) -ida_bytes.put_bytes (function) -ida_bytes.put_dword (function) -ida_bytes.put_qword (function) -ida_bytes.put_word (function) -ida_bytes.qword_flag (function) -ida_bytes.register_custom_data_format (function) -ida_bytes.register_custom_data_type (function) -ida_bytes.register_data_types_and_formats (function) -ida_bytes.register_data_types_and_formats.__reg_format (function) -ida_bytes.register_data_types_and_formats.__reg_type (function) -ida_bytes.revert_byte (function) -ida_bytes.seg_flag (function) -ida_bytes.set_cmt (function) -ida_bytes.set_forced_operand (function) -ida_bytes.set_immd (function) -ida_bytes.set_lzero (function) -ida_bytes.set_manual_insn (function) -ida_bytes.set_op_type (function) -ida_bytes.set_opinfo (function) -ida_bytes.stkvar_flag (function) -ida_bytes.strlit_flag (function) -ida_bytes.stroff_flag (function) -ida_bytes.stru_flag (function) -ida_bytes.tbyte_flag (function) -ida_bytes.toggle_bnot (function) -ida_bytes.toggle_lzero (function) -ida_bytes.toggle_sign (function) -ida_bytes.unregister_custom_data_format (function) -ida_bytes.unregister_custom_data_type (function) -ida_bytes.unregister_data_types_and_formats (function) -ida_bytes.unregister_data_types_and_formats.__unreg_format (function) -ida_bytes.unregister_data_types_and_formats.__unreg_type (function) -ida_bytes.update_hidden_range (function) -ida_bytes.use_mapping (function) -ida_bytes.visit_patched_bytes (function) -ida_bytes.word_flag (function) -ida_bytes.yword_flag (function) -ida_bytes.zword_flag (function) -ida_dbg (module) -ida_dbg.BKPT_ACTIVE (variable) -ida_dbg.BKPT_BADBPT (variable) -ida_dbg.BKPT_CNDREADY (variable) -ida_dbg.BKPT_FAKEPEND (variable) -ida_dbg.BKPT_LISTBPT (variable) -ida_dbg.BKPT_PAGE (variable) -ida_dbg.BKPT_PARTIAL (variable) -ida_dbg.BKPT_TRACE (variable) -ida_dbg.BPLT_ABS (variable) -ida_dbg.BPLT_REL (variable) -ida_dbg.BPLT_SRC (variable) -ida_dbg.BPTCK_ACT (variable) -ida_dbg.BPTCK_NO (variable) -ida_dbg.BPTCK_NONE (variable) -ida_dbg.BPTCK_YES (variable) -ida_dbg.BPTEV_ADDED (variable) -ida_dbg.BPTEV_CHANGED (variable) -ida_dbg.BPTEV_REMOVED (variable) -ida_dbg.BPT_BRK (variable) -ida_dbg.BPT_ELANG_SHIFT (variable) -ida_dbg.BPT_ENABLED (variable) -ida_dbg.BPT_LOWCND (variable) -ida_dbg.BPT_TRACE (variable) -ida_dbg.BPT_TRACEON (variable) -ida_dbg.BPT_TRACE_BBLK (variable) -ida_dbg.BPT_TRACE_FUNC (variable) -ida_dbg.BPT_TRACE_INSN (variable) -ida_dbg.BPT_TRACE_TYPES (variable) -ida_dbg.BPT_UPDMEM (variable) -ida_dbg.BT_LOG_INSTS (variable) -ida_dbg.DBGINV_ALL (variable) -ida_dbg.DBGINV_MEMCFG (variable) -ida_dbg.DBGINV_MEMORY (variable) -ida_dbg.DBGINV_NONE (variable) -ida_dbg.DBGINV_REDRAW (variable) -ida_dbg.DBGINV_REGS (variable) -ida_dbg.DBG_Hooks (class) -ida_dbg.DBG_Hooks.__disown__ (method) -ida_dbg.DBG_Hooks.__init__ (method) -ida_dbg.DBG_Hooks.dbg_bpt (method) -ida_dbg.DBG_Hooks.dbg_bpt_changed (method) -ida_dbg.DBG_Hooks.dbg_exception (method) -ida_dbg.DBG_Hooks.dbg_finished_loading_bpts (method) -ida_dbg.DBG_Hooks.dbg_information (method) -ida_dbg.DBG_Hooks.dbg_library_load (method) -ida_dbg.DBG_Hooks.dbg_library_unload (method) -ida_dbg.DBG_Hooks.dbg_process_attach (method) -ida_dbg.DBG_Hooks.dbg_process_detach (method) -ida_dbg.DBG_Hooks.dbg_process_exit (method) -ida_dbg.DBG_Hooks.dbg_process_start (method) -ida_dbg.DBG_Hooks.dbg_request_error (method) -ida_dbg.DBG_Hooks.dbg_run_to (method) -ida_dbg.DBG_Hooks.dbg_started_loading_bpts (method) -ida_dbg.DBG_Hooks.dbg_step_into (method) -ida_dbg.DBG_Hooks.dbg_step_over (method) -ida_dbg.DBG_Hooks.dbg_step_until_ret (method) -ida_dbg.DBG_Hooks.dbg_suspend_process (method) -ida_dbg.DBG_Hooks.dbg_thread_exit (method) -ida_dbg.DBG_Hooks.dbg_thread_start (method) -ida_dbg.DBG_Hooks.dbg_trace (method) -ida_dbg.DBG_Hooks.hook (method) -ida_dbg.DBG_Hooks.unhook (method) -ida_dbg.DEC_ERROR (variable) -ida_dbg.DEC_NOTASK (variable) -ida_dbg.DEC_TIMEOUT (variable) -ida_dbg.DOPT_BPT_MSGS (variable) -ida_dbg.DOPT_DISABLE_ASLR (variable) -ida_dbg.DOPT_END_BPT (variable) -ida_dbg.DOPT_ENTRY_BPT (variable) -ida_dbg.DOPT_EXCDLG (variable) -ida_dbg.DOPT_FAST_STEP (variable) -ida_dbg.DOPT_INFO_BPT (variable) -ida_dbg.DOPT_INFO_MSGS (variable) -ida_dbg.DOPT_LIB_BPT (variable) -ida_dbg.DOPT_LIB_MSGS (variable) -ida_dbg.DOPT_LOAD_DINFO (variable) -ida_dbg.DOPT_REAL_MEMORY (variable) -ida_dbg.DOPT_REDO_STACK (variable) -ida_dbg.DOPT_SEGM_MSGS (variable) -ida_dbg.DOPT_START_BPT (variable) -ida_dbg.DOPT_TEMP_HWBPT (variable) -ida_dbg.DOPT_THREAD_BPT (variable) -ida_dbg.DOPT_THREAD_MSGS (variable) -ida_dbg.DSTATE_NOTASK (variable) -ida_dbg.DSTATE_RUN (variable) -ida_dbg.DSTATE_SUSP (variable) -ida_dbg.EXCDLG_ALWAYS (variable) -ida_dbg.EXCDLG_NEVER (variable) -ida_dbg.EXCDLG_UNKNOWN (variable) -ida_dbg.FT_LOG_RET (variable) -ida_dbg.IT_LOG_SAME_IP (variable) -ida_dbg.SRCIT_EXPR (variable) -ida_dbg.SRCIT_FUNC (variable) -ida_dbg.SRCIT_LOCVAR (variable) -ida_dbg.SRCIT_MODULE (variable) -ida_dbg.SRCIT_NONE (variable) -ida_dbg.SRCIT_STMT (variable) -ida_dbg.SRCIT_STTVAR (variable) -ida_dbg.ST_ALREADY_LOGGED (variable) -ida_dbg.ST_OPTIONS_MASK (variable) -ida_dbg.ST_OVER_DEBUG_SEG (variable) -ida_dbg.ST_OVER_LIB_FUNC (variable) -ida_dbg.ST_SKIP_LOOPS (variable) -ida_dbg.WFNE_ANY (variable) -ida_dbg.WFNE_CONT (variable) -ida_dbg.WFNE_NOWAIT (variable) -ida_dbg.WFNE_SILENT (variable) -ida_dbg.WFNE_SUSP (variable) -ida_dbg.WFNE_USEC (variable) -ida_dbg.add_bpt (function) -ida_dbg.add_path_mapping (function) -ida_dbg.add_virt_module (function) -ida_dbg.attach_process (function) -ida_dbg.bpt_location_t (class) -ida_dbg.bpt_location_t.__eq__ (method) -ida_dbg.bpt_location_t.__ge__ (method) -ida_dbg.bpt_location_t.__gt__ (method) -ida_dbg.bpt_location_t.__init__ (method) -ida_dbg.bpt_location_t.__le__ (method) -ida_dbg.bpt_location_t.__lt__ (method) -ida_dbg.bpt_location_t.__ne__ (method) -ida_dbg.bpt_location_t.compare (method) -ida_dbg.bpt_location_t.ea (method) -ida_dbg.bpt_location_t.is_empty_path (method) -ida_dbg.bpt_location_t.lineno (method) -ida_dbg.bpt_location_t.offset (method) -ida_dbg.bpt_location_t.path (method) -ida_dbg.bpt_location_t.set_abs_bpt (method) -ida_dbg.bpt_location_t.set_rel_bpt (method) -ida_dbg.bpt_location_t.set_src_bpt (method) -ida_dbg.bpt_location_t.set_sym_bpt (method) -ida_dbg.bpt_location_t.symbol (method) -ida_dbg.bpt_location_t.type (method) -ida_dbg.bpt_t (class) -ida_dbg.bpt_t.__init__ (method) -ida_dbg.bpt_t.badbpt (method) -ida_dbg.bpt_t.bptid (variable) -ida_dbg.bpt_t.cb (variable) -ida_dbg.bpt_t.cndidx (variable) -ida_dbg.bpt_t.ea (variable) -ida_dbg.bpt_t.enabled (method) -ida_dbg.bpt_t.flags (variable) -ida_dbg.bpt_t.get_cnd_elang_idx (method) -ida_dbg.bpt_t.get_size (method) -ida_dbg.bpt_t.is_absbpt (method) -ida_dbg.bpt_t.is_active (method) -ida_dbg.bpt_t.is_compiled (method) -ida_dbg.bpt_t.is_hwbpt (method) -ida_dbg.bpt_t.is_inactive (method) -ida_dbg.bpt_t.is_low_level (method) -ida_dbg.bpt_t.is_page_bpt (method) -ida_dbg.bpt_t.is_partially_active (method) -ida_dbg.bpt_t.is_relbpt (method) -ida_dbg.bpt_t.is_srcbpt (method) -ida_dbg.bpt_t.is_symbpt (method) -ida_dbg.bpt_t.is_tracemodebpt (method) -ida_dbg.bpt_t.is_traceoffbpt (method) -ida_dbg.bpt_t.is_traceonbpt (method) -ida_dbg.bpt_t.listbpt (method) -ida_dbg.bpt_t.loc (variable) -ida_dbg.bpt_t.pass_count (variable) -ida_dbg.bpt_t.pid (variable) -ida_dbg.bpt_t.props (variable) -ida_dbg.bpt_t.set_abs_bpt (method) -ida_dbg.bpt_t.set_rel_bpt (method) -ida_dbg.bpt_t.set_src_bpt (method) -ida_dbg.bpt_t.set_sym_bpt (method) -ida_dbg.bpt_t.set_trace_action (method) -ida_dbg.bpt_t.size (variable) -ida_dbg.bpt_t.tid (variable) -ida_dbg.bpt_t.type (variable) -ida_dbg.bpt_vec_t (class) -ida_dbg.bpt_vec_t.__getitem__ (method) -ida_dbg.bpt_vec_t.__init__ (method) -ida_dbg.bpt_vec_t.__len__ (method) -ida_dbg.bpt_vec_t.__setitem__ (method) -ida_dbg.bpt_vec_t.at (method) -ida_dbg.bpt_vec_t.begin (method) -ida_dbg.bpt_vec_t.capacity (method) -ida_dbg.bpt_vec_t.clear (method) -ida_dbg.bpt_vec_t.empty (method) -ida_dbg.bpt_vec_t.end (method) -ida_dbg.bpt_vec_t.erase (method) -ida_dbg.bpt_vec_t.extract (method) -ida_dbg.bpt_vec_t.grow (method) -ida_dbg.bpt_vec_t.inject (method) -ida_dbg.bpt_vec_t.insert (method) -ida_dbg.bpt_vec_t.pop_back (method) -ida_dbg.bpt_vec_t.push_back (method) -ida_dbg.bpt_vec_t.qclear (method) -ida_dbg.bpt_vec_t.reserve (method) -ida_dbg.bpt_vec_t.resize (method) -ida_dbg.bpt_vec_t.size (method) -ida_dbg.bpt_vec_t.swap (method) -ida_dbg.bpt_vec_t.truncate (method) -ida_dbg.bptaddrs_t (class) -ida_dbg.bptaddrs_t.__init__ (method) -ida_dbg.bring_debugger_to_front (function) -ida_dbg.check_bpt (function) -ida_dbg.choose_trace_file (function) -ida_dbg.clear_requests_queue (function) -ida_dbg.clear_trace (function) -ida_dbg.collect_stack_trace (function) -ida_dbg.continue_process (function) -ida_dbg.create_source_viewer (function) -ida_dbg.dbg_add_bpt_tev (function) -ida_dbg.dbg_add_call_tev (function) -ida_dbg.dbg_add_debug_event (function) -ida_dbg.dbg_add_insn_tev (function) -ida_dbg.dbg_add_many_tevs (function) -ida_dbg.dbg_add_ret_tev (function) -ida_dbg.dbg_add_tev (function) -ida_dbg.dbg_add_thread (function) -ida_dbg.dbg_bin_search (function) -ida_dbg.dbg_bpt (variable) -ida_dbg.dbg_bpt_changed (variable) -ida_dbg.dbg_can_query (function) -ida_dbg.dbg_del_thread (function) -ida_dbg.dbg_finished_loading_bpts (variable) -ida_dbg.dbg_is_loaded (function) -ida_dbg.dbg_last (variable) -ida_dbg.dbg_process_attach (variable) -ida_dbg.dbg_process_detach (variable) -ida_dbg.dbg_process_exit (variable) -ida_dbg.dbg_process_start (variable) -ida_dbg.dbg_request_error (variable) -ida_dbg.dbg_started_loading_bpts (variable) -ida_dbg.dbg_suspend_process (variable) -ida_dbg.dbg_trace (variable) -ida_dbg.define_exception (function) -ida_dbg.del_bpt (function) -ida_dbg.del_bptgrp (function) -ida_dbg.del_virt_module (function) -ida_dbg.detach_process (function) -ida_dbg.diff_trace_file (function) -ida_dbg.disable_bblk_trace (function) -ida_dbg.disable_bpt (function) -ida_dbg.disable_func_trace (function) -ida_dbg.disable_insn_trace (function) -ida_dbg.disable_step_trace (function) -ida_dbg.edit_manual_regions (function) -ida_dbg.enable_bblk_trace (function) -ida_dbg.enable_bpt (function) -ida_dbg.enable_bptgrp (function) -ida_dbg.enable_func_trace (function) -ida_dbg.enable_insn_trace (function) -ida_dbg.enable_manual_regions (function) -ida_dbg.enable_step_trace (function) -ida_dbg.eval_ctx_t (class) -ida_dbg.eval_ctx_t.__init__ (method) -ida_dbg.exist_bpt (function) -ida_dbg.exit_process (function) -ida_dbg.find_bpt (function) -ida_dbg.get_bblk_trace_options (function) -ida_dbg.get_bpt (function) -ida_dbg.get_bpt_group (function) -ida_dbg.get_bpt_qty (function) -ida_dbg.get_bpt_tev_ea (function) -ida_dbg.get_bptloc_string (function) -ida_dbg.get_call_tev_callee (function) -ida_dbg.get_current_source_file (function) -ida_dbg.get_current_source_line (function) -ida_dbg.get_current_thread (function) -ida_dbg.get_dbg_byte (function) -ida_dbg.get_dbg_memory_info (function) -ida_dbg.get_dbg_reg_info (function) -ida_dbg.get_debug_event (function) -ida_dbg.get_debugger_event_cond (function) -ida_dbg.get_first_module (function) -ida_dbg.get_func_trace_options (function) -ida_dbg.get_global_var (function) -ida_dbg.get_grp_bpts (function) -ida_dbg.get_insn_tev_reg_mem (function) -ida_dbg.get_insn_tev_reg_result (function) -ida_dbg.get_insn_tev_reg_val (function) -ida_dbg.get_insn_trace_options (function) -ida_dbg.get_ip_val (function) -ida_dbg.get_local_var (function) -ida_dbg.get_local_vars (function) -ida_dbg.get_manual_regions (function) -ida_dbg.get_module_info (function) -ida_dbg.get_next_module (function) -ida_dbg.get_process_options (function) -ida_dbg.get_process_state (function) -ida_dbg.get_processes (function) -ida_dbg.get_reg_val (function) -ida_dbg.get_reg_vals (function) -ida_dbg.get_ret_tev_return (function) -ida_dbg.get_running_notification (function) -ida_dbg.get_running_request (function) -ida_dbg.get_sp_val (function) -ida_dbg.get_srcinfo_provider (function) -ida_dbg.get_step_trace_options (function) -ida_dbg.get_tev_ea (function) -ida_dbg.get_tev_event (function) -ida_dbg.get_tev_info (function) -ida_dbg.get_tev_memory_info (function) -ida_dbg.get_tev_qty (function) -ida_dbg.get_tev_reg_mem (function) -ida_dbg.get_tev_reg_mem_ea (function) -ida_dbg.get_tev_reg_mem_qty (function) -ida_dbg.get_tev_reg_val (function) -ida_dbg.get_tev_tid (function) -ida_dbg.get_tev_type (function) -ida_dbg.get_thread_qty (function) -ida_dbg.get_trace_base_address (function) -ida_dbg.get_trace_dynamic_register_set (function) -ida_dbg.get_trace_file_desc (function) -ida_dbg.get_trace_platform (function) -ida_dbg.getn_bpt (function) -ida_dbg.getn_thread (function) -ida_dbg.getn_thread_name (function) -ida_dbg.graph_trace (function) -ida_dbg.handle_debug_event (function) -ida_dbg.hide_all_bpts (function) -ida_dbg.internal_get_sreg_base (function) -ida_dbg.internal_ioctl (function) -ida_dbg.invalidate_dbg_state (function) -ida_dbg.invalidate_dbgmem_config (function) -ida_dbg.invalidate_dbgmem_contents (function) -ida_dbg.is_bblk_trace_enabled (function) -ida_dbg.is_debugger_busy (function) -ida_dbg.is_debugger_memory (function) -ida_dbg.is_debugger_on (function) -ida_dbg.is_func_trace_enabled (function) -ida_dbg.is_insn_trace_enabled (function) -ida_dbg.is_reg_custom (function) -ida_dbg.is_reg_float (function) -ida_dbg.is_reg_integer (function) -ida_dbg.is_request_running (function) -ida_dbg.is_step_trace_enabled (function) -ida_dbg.is_valid_dstate (function) -ida_dbg.is_valid_trace_file (function) -ida_dbg.list_bptgrps (function) -ida_dbg.load_debugger (function) -ida_dbg.load_trace_file (function) -ida_dbg.memreg_info_t (class) -ida_dbg.memreg_info_t.__init__ (method) -ida_dbg.memreg_info_t.get_bytes (method) -ida_dbg.memreg_infos_t (class) -ida_dbg.memreg_infos_t.__getitem__ (method) -ida_dbg.memreg_infos_t.__init__ (method) -ida_dbg.memreg_infos_t.__len__ (method) -ida_dbg.memreg_infos_t.__setitem__ (method) -ida_dbg.memreg_infos_t.at (method) -ida_dbg.memreg_infos_t.begin (method) -ida_dbg.memreg_infos_t.capacity (method) -ida_dbg.memreg_infos_t.clear (method) -ida_dbg.memreg_infos_t.empty (method) -ida_dbg.memreg_infos_t.end (method) -ida_dbg.memreg_infos_t.erase (method) -ida_dbg.memreg_infos_t.extract (method) -ida_dbg.memreg_infos_t.grow (method) -ida_dbg.memreg_infos_t.inject (method) -ida_dbg.memreg_infos_t.insert (method) -ida_dbg.memreg_infos_t.pop_back (method) -ida_dbg.memreg_infos_t.push_back (method) -ida_dbg.memreg_infos_t.qclear (method) -ida_dbg.memreg_infos_t.reserve (method) -ida_dbg.memreg_infos_t.resize (method) -ida_dbg.memreg_infos_t.size (method) -ida_dbg.memreg_infos_t.swap (method) -ida_dbg.memreg_infos_t.truncate (method) -ida_dbg.put_dbg_byte (function) -ida_dbg.read_dbg_memory (function) -ida_dbg.refresh_debugger_memory (function) -ida_dbg.rename_bptgrp (function) -ida_dbg.request_add_bpt (function) -ida_dbg.request_attach_process (function) -ida_dbg.request_clear_trace (function) -ida_dbg.request_continue_process (function) -ida_dbg.request_del_bpt (function) -ida_dbg.request_detach_process (function) -ida_dbg.request_disable_bblk_trace (function) -ida_dbg.request_disable_bpt (function) -ida_dbg.request_disable_func_trace (function) -ida_dbg.request_disable_insn_trace (function) -ida_dbg.request_disable_step_trace (function) -ida_dbg.request_enable_bblk_trace (function) -ida_dbg.request_enable_bpt (function) -ida_dbg.request_enable_func_trace (function) -ida_dbg.request_enable_insn_trace (function) -ida_dbg.request_enable_step_trace (function) -ida_dbg.request_exit_process (function) -ida_dbg.request_resume_thread (function) -ida_dbg.request_run_to (function) -ida_dbg.request_select_thread (function) -ida_dbg.request_set_bblk_trace_options (function) -ida_dbg.request_set_func_trace_options (function) -ida_dbg.request_set_insn_trace_options (function) -ida_dbg.request_set_reg_val (function) -ida_dbg.request_set_resume_mode (function) -ida_dbg.request_set_step_trace_options (function) -ida_dbg.request_start_process (function) -ida_dbg.request_step_into (function) -ida_dbg.request_step_over (function) -ida_dbg.request_step_until_ret (function) -ida_dbg.request_suspend_process (function) -ida_dbg.request_suspend_thread (function) -ida_dbg.resume_thread (function) -ida_dbg.retrieve_exceptions (function) -ida_dbg.run_requests (function) -ida_dbg.run_to (function) -ida_dbg.save_trace_file (function) -ida_dbg.select_thread (function) -ida_dbg.send_dbg_command (function) -ida_dbg.set_bblk_trace_options (function) -ida_dbg.set_bpt_group (function) -ida_dbg.set_bptloc_group (function) -ida_dbg.set_bptloc_string (function) -ida_dbg.set_debugger_event_cond (function) -ida_dbg.set_debugger_options (function) -ida_dbg.set_func_trace_options (function) -ida_dbg.set_highlight_trace_options (function) -ida_dbg.set_insn_trace_options (function) -ida_dbg.set_manual_regions (function) -ida_dbg.set_process_options (function) -ida_dbg.set_process_state (function) -ida_dbg.set_reg_val (function) -ida_dbg.set_remote_debugger (function) -ida_dbg.set_resume_mode (function) -ida_dbg.set_step_trace_options (function) -ida_dbg.set_trace_base_address (function) -ida_dbg.set_trace_dynamic_register_set (function) -ida_dbg.set_trace_file_desc (function) -ida_dbg.set_trace_platform (function) -ida_dbg.set_trace_size (function) -ida_dbg.srcdbg_request_step_into (function) -ida_dbg.srcdbg_request_step_over (function) -ida_dbg.srcdbg_request_step_until_ret (function) -ida_dbg.srcdbg_step_into (function) -ida_dbg.srcdbg_step_over (function) -ida_dbg.srcdbg_step_until_ret (function) -ida_dbg.start_process (function) -ida_dbg.step_into (function) -ida_dbg.step_over (function) -ida_dbg.step_until_ret (function) -ida_dbg.store_exceptions (function) -ida_dbg.suspend_process (function) -ida_dbg.suspend_thread (function) -ida_dbg.tev_bpt (variable) -ida_dbg.tev_call (variable) -ida_dbg.tev_event (variable) -ida_dbg.tev_info_reg_t (class) -ida_dbg.tev_info_reg_t.__init__ (method) -ida_dbg.tev_info_t (class) -ida_dbg.tev_info_t.__init__ (method) -ida_dbg.tev_info_t.ea (variable) -ida_dbg.tev_info_t.tid (variable) -ida_dbg.tev_info_t.type (variable) -ida_dbg.tev_insn (variable) -ida_dbg.tev_max (variable) -ida_dbg.tev_mem (variable) -ida_dbg.tev_none (variable) -ida_dbg.tev_reg_value_t (class) -ida_dbg.tev_reg_value_t.__init__ (method) -ida_dbg.tev_reg_values_t (class) -ida_dbg.tev_reg_values_t.__getitem__ (method) -ida_dbg.tev_reg_values_t.__init__ (method) -ida_dbg.tev_reg_values_t.__len__ (method) -ida_dbg.tev_reg_values_t.__setitem__ (method) -ida_dbg.tev_reg_values_t.at (method) -ida_dbg.tev_reg_values_t.begin (method) -ida_dbg.tev_reg_values_t.capacity (method) -ida_dbg.tev_reg_values_t.clear (method) -ida_dbg.tev_reg_values_t.empty (method) -ida_dbg.tev_reg_values_t.end (method) -ida_dbg.tev_reg_values_t.erase (method) -ida_dbg.tev_reg_values_t.extract (method) -ida_dbg.tev_reg_values_t.grow (method) -ida_dbg.tev_reg_values_t.inject (method) -ida_dbg.tev_reg_values_t.insert (method) -ida_dbg.tev_reg_values_t.pop_back (method) -ida_dbg.tev_reg_values_t.push_back (method) -ida_dbg.tev_reg_values_t.qclear (method) -ida_dbg.tev_reg_values_t.reserve (method) -ida_dbg.tev_reg_values_t.resize (method) -ida_dbg.tev_reg_values_t.size (method) -ida_dbg.tev_reg_values_t.swap (method) -ida_dbg.tev_reg_values_t.truncate (method) -ida_dbg.tev_ret (variable) -ida_dbg.tevinforeg_vec_t (class) -ida_dbg.tevinforeg_vec_t.__getitem__ (method) -ida_dbg.tevinforeg_vec_t.__init__ (method) -ida_dbg.tevinforeg_vec_t.__len__ (method) -ida_dbg.tevinforeg_vec_t.__setitem__ (method) -ida_dbg.tevinforeg_vec_t.at (method) -ida_dbg.tevinforeg_vec_t.begin (method) -ida_dbg.tevinforeg_vec_t.capacity (method) -ida_dbg.tevinforeg_vec_t.clear (method) -ida_dbg.tevinforeg_vec_t.empty (method) -ida_dbg.tevinforeg_vec_t.end (method) -ida_dbg.tevinforeg_vec_t.erase (method) -ida_dbg.tevinforeg_vec_t.extract (method) -ida_dbg.tevinforeg_vec_t.grow (method) -ida_dbg.tevinforeg_vec_t.inject (method) -ida_dbg.tevinforeg_vec_t.insert (method) -ida_dbg.tevinforeg_vec_t.pop_back (method) -ida_dbg.tevinforeg_vec_t.push_back (method) -ida_dbg.tevinforeg_vec_t.qclear (method) -ida_dbg.tevinforeg_vec_t.reserve (method) -ida_dbg.tevinforeg_vec_t.resize (method) -ida_dbg.tevinforeg_vec_t.size (method) -ida_dbg.tevinforeg_vec_t.swap (method) -ida_dbg.tevinforeg_vec_t.truncate (method) -ida_dbg.update_bpt (function) -ida_dbg.wait_for_next_event (function) -ida_dbg.write_dbg_memory (function) -ida_diskio (module) -ida_diskio.IDA_SUBDIR_IDADIR_FIRST (variable) -ida_diskio.IDA_SUBDIR_IDP (variable) -ida_diskio.IDA_SUBDIR_ONLY_EXISTING (variable) -ida_diskio.LINPUT_GENERIC (variable) -ida_diskio.LINPUT_LOCAL (variable) -ida_diskio.LINPUT_NONE (variable) -ida_diskio.LINPUT_PROCMEM (variable) -ida_diskio.LINPUT_RFILE (variable) -ida_diskio.choose_ioport_device2 (function) -ida_diskio.choose_ioport_parser_t (class) -ida_diskio.choose_ioport_parser_t.__disown__ (method) -ida_diskio.choose_ioport_parser_t.__init__ (method) -ida_diskio.choose_ioport_parser_t.parse (method) -ida_diskio.close_linput (function) -ida_diskio.create_bytearray_linput (function) -ida_diskio.create_generic_linput (function) -ida_diskio.create_memory_linput (function) -ida_diskio.eclose (function) -ida_diskio.enumerate_files (function) -ida_diskio.enumerate_files2 (function) -ida_diskio.file_enumerator_t (class) -ida_diskio.file_enumerator_t.__disown__ (method) -ida_diskio.file_enumerator_t.__init__ (method) -ida_diskio.file_enumerator_t.visit_file (method) -ida_diskio.fopenA (function) -ida_diskio.fopenM (function) -ida_diskio.fopenRB (function) -ida_diskio.fopenRT (function) -ida_diskio.fopenWB (function) -ida_diskio.fopenWT (function) -ida_diskio.generic_linput_t (class) -ida_diskio.generic_linput_t.__init__ (method) -ida_diskio.generic_linput_t.blocksize (variable) -ida_diskio.generic_linput_t.filesize (variable) -ida_diskio.generic_linput_t.read (method) -ida_diskio.get_ida_subdirs (function) -ida_diskio.get_linput_type (function) -ida_diskio.get_special_folder (function) -ida_diskio.get_user_idadir (function) -ida_diskio.getsysfile (function) -ida_diskio.idadir (function) -ida_diskio.ioports_fallback_t (class) -ida_diskio.ioports_fallback_t.__disown__ (method) -ida_diskio.ioports_fallback_t.__init__ (method) -ida_diskio.ioports_fallback_t.handle (method) -ida_diskio.open_linput (function) -ida_diskio.qlgetz (function) -ida_diskio.read_ioports2 (function) -ida_dirtree (module) -ida_dirtree.DTN_DISPLAY_NAME (variable) -ida_dirtree.DTN_FULL_NAME (variable) -ida_dirtree.direntry_t (class) -ida_dirtree.direntry_t.__eq__ (method) -ida_dirtree.direntry_t.__init__ (method) -ida_dirtree.direntry_t.__lt__ (method) -ida_dirtree.direntry_t.__ne__ (method) -ida_dirtree.direntry_t.idx (variable) -ida_dirtree.direntry_t.isdir (variable) -ida_dirtree.direntry_t.valid (method) -ida_dirtree.direntry_vec_t (class) -ida_dirtree.direntry_vec_t.__eq__ (method) -ida_dirtree.direntry_vec_t.__getitem__ (method) -ida_dirtree.direntry_vec_t.__init__ (method) -ida_dirtree.direntry_vec_t.__len__ (method) -ida_dirtree.direntry_vec_t.__ne__ (method) -ida_dirtree.direntry_vec_t.__setitem__ (method) -ida_dirtree.direntry_vec_t._del (method) -ida_dirtree.direntry_vec_t.add_unique (method) -ida_dirtree.direntry_vec_t.at (method) -ida_dirtree.direntry_vec_t.begin (method) -ida_dirtree.direntry_vec_t.capacity (method) -ida_dirtree.direntry_vec_t.clear (method) -ida_dirtree.direntry_vec_t.empty (method) -ida_dirtree.direntry_vec_t.end (method) -ida_dirtree.direntry_vec_t.erase (method) -ida_dirtree.direntry_vec_t.extract (method) -ida_dirtree.direntry_vec_t.find (method) -ida_dirtree.direntry_vec_t.grow (method) -ida_dirtree.direntry_vec_t.has (method) -ida_dirtree.direntry_vec_t.inject (method) -ida_dirtree.direntry_vec_t.insert (method) -ida_dirtree.direntry_vec_t.pop_back (method) -ida_dirtree.direntry_vec_t.push_back (method) -ida_dirtree.direntry_vec_t.qclear (method) -ida_dirtree.direntry_vec_t.reserve (method) -ida_dirtree.direntry_vec_t.resize (method) -ida_dirtree.direntry_vec_t.size (method) -ida_dirtree.direntry_vec_t.swap (method) -ida_dirtree.direntry_vec_t.truncate (method) -ida_dirtree.dirspec_t (class) -ida_dirtree.dirspec_t.__disown__ (method) -ida_dirtree.dirspec_t.__init__ (method) -ida_dirtree.dirspec_t.get_attrs (method) -ida_dirtree.dirspec_t.get_inode (method) -ida_dirtree.dirspec_t.get_name (method) -ida_dirtree.dirspec_t.is_orderable (method) -ida_dirtree.dirspec_t.rename_inode (method) -ida_dirtree.dirspec_t.unlink_inode (method) -ida_dirtree.dirtree_cursor_t (class) -ida_dirtree.dirtree_cursor_t.__eq__ (method) -ida_dirtree.dirtree_cursor_t.__ge__ (method) -ida_dirtree.dirtree_cursor_t.__gt__ (method) -ida_dirtree.dirtree_cursor_t.__init__ (method) -ida_dirtree.dirtree_cursor_t.__le__ (method) -ida_dirtree.dirtree_cursor_t.__lt__ (method) -ida_dirtree.dirtree_cursor_t.__ne__ (method) -ida_dirtree.dirtree_cursor_t.compare (method) -ida_dirtree.dirtree_cursor_t.is_root_cursor (method) -ida_dirtree.dirtree_cursor_t.parent (variable) -ida_dirtree.dirtree_cursor_t.rank (variable) -ida_dirtree.dirtree_cursor_t.root_cursor (method) -ida_dirtree.dirtree_cursor_t.set_root_cursor (method) -ida_dirtree.dirtree_cursor_t.valid (method) -ida_dirtree.dirtree_cursor_t_root_cursor (function) -ida_dirtree.dirtree_cursor_vec_t (class) -ida_dirtree.dirtree_cursor_vec_t.__eq__ (method) -ida_dirtree.dirtree_cursor_vec_t.__getitem__ (method) -ida_dirtree.dirtree_cursor_vec_t.__init__ (method) -ida_dirtree.dirtree_cursor_vec_t.__len__ (method) -ida_dirtree.dirtree_cursor_vec_t.__ne__ (method) -ida_dirtree.dirtree_cursor_vec_t.__setitem__ (method) -ida_dirtree.dirtree_cursor_vec_t._del (method) -ida_dirtree.dirtree_cursor_vec_t.add_unique (method) -ida_dirtree.dirtree_cursor_vec_t.at (method) -ida_dirtree.dirtree_cursor_vec_t.begin (method) -ida_dirtree.dirtree_cursor_vec_t.capacity (method) -ida_dirtree.dirtree_cursor_vec_t.clear (method) -ida_dirtree.dirtree_cursor_vec_t.empty (method) -ida_dirtree.dirtree_cursor_vec_t.end (method) -ida_dirtree.dirtree_cursor_vec_t.erase (method) -ida_dirtree.dirtree_cursor_vec_t.extract (method) -ida_dirtree.dirtree_cursor_vec_t.find (method) -ida_dirtree.dirtree_cursor_vec_t.grow (method) -ida_dirtree.dirtree_cursor_vec_t.has (method) -ida_dirtree.dirtree_cursor_vec_t.inject (method) -ida_dirtree.dirtree_cursor_vec_t.insert (method) -ida_dirtree.dirtree_cursor_vec_t.pop_back (method) -ida_dirtree.dirtree_cursor_vec_t.push_back (method) -ida_dirtree.dirtree_cursor_vec_t.qclear (method) -ida_dirtree.dirtree_cursor_vec_t.reserve (method) -ida_dirtree.dirtree_cursor_vec_t.resize (method) -ida_dirtree.dirtree_cursor_vec_t.size (method) -ida_dirtree.dirtree_cursor_vec_t.swap (method) -ida_dirtree.dirtree_cursor_vec_t.truncate (method) -ida_dirtree.dirtree_iterator_t (class) -ida_dirtree.dirtree_iterator_t.__init__ (method) -ida_dirtree.dirtree_selection_t (class) -ida_dirtree.dirtree_selection_t.__init__ (method) -ida_dirtree.dirtree_t (class) -ida_dirtree.dirtree_t.__init__ (method) -ida_dirtree.dirtree_t.change_rank (method) -ida_dirtree.dirtree_t.chdir (method) -ida_dirtree.dirtree_t.errstr (method) -ida_dirtree.dirtree_t.find_entry (method) -ida_dirtree.dirtree_t.findfirst (method) -ida_dirtree.dirtree_t.findnext (method) -ida_dirtree.dirtree_t.get_abspath (method) -ida_dirtree.dirtree_t.get_dir_size (method) -ida_dirtree.dirtree_t.get_entry_attrs (method) -ida_dirtree.dirtree_t.get_entry_name (method) -ida_dirtree.dirtree_t.get_id (method) -ida_dirtree.dirtree_t.get_parent_cursor (method) -ida_dirtree.dirtree_t.get_rank (method) -ida_dirtree.dirtree_t.getcwd (method) -ida_dirtree.dirtree_t.is_dir_ordered (method) -ida_dirtree.dirtree_t.is_orderable (method) -ida_dirtree.dirtree_t.isdir (method) -ida_dirtree.dirtree_t.isfile (method) -ida_dirtree.dirtree_t.link (method) -ida_dirtree.dirtree_t.load (method) -ida_dirtree.dirtree_t.mkdir (method) -ida_dirtree.dirtree_t.notify_dirtree (method) -ida_dirtree.dirtree_t.rename (method) -ida_dirtree.dirtree_t.resolve_cursor (method) -ida_dirtree.dirtree_t.resolve_path (method) -ida_dirtree.dirtree_t.rmdir (method) -ida_dirtree.dirtree_t.save (method) -ida_dirtree.dirtree_t.set_id (method) -ida_dirtree.dirtree_t.set_natural_order (method) -ida_dirtree.dirtree_t.traverse (method) -ida_dirtree.dirtree_t.unlink (method) -ida_dirtree.dirtree_t_errstr (function) -ida_dirtree.dirtree_visitor_t (class) -ida_dirtree.dirtree_visitor_t.__disown__ (method) -ida_dirtree.dirtree_visitor_t.__init__ (method) -ida_dirtree.dirtree_visitor_t.visit (method) -ida_dirtree.get_std_dirtree (function) -ida_entry (module) -ida_entry.AEF_IDBENC (variable) -ida_entry.AEF_NODUMMY (variable) -ida_entry.AEF_UTF8 (variable) -ida_entry.add_entry (function) -ida_entry.get_entry (function) -ida_entry.get_entry_forwarder (function) -ida_entry.get_entry_name (function) -ida_entry.get_entry_ordinal (function) -ida_entry.get_entry_qty (function) -ida_entry.rename_entry (function) -ida_entry.set_entry_forwarder (function) -ida_enum (module) -ida_enum.DEFMASK (variable) -ida_enum.ENFL_REGEX (variable) -ida_enum.ENUM_MEMBER_ERROR_ENUM (variable) -ida_enum.ENUM_MEMBER_ERROR_ILLV (variable) -ida_enum.ENUM_MEMBER_ERROR_MASK (variable) -ida_enum.ENUM_MEMBER_ERROR_NAME (variable) -ida_enum.ENUM_MEMBER_ERROR_VALUE (variable) -ida_enum.MAX_ENUM_SERIAL (variable) -ida_enum.add_enum (function) -ida_enum.add_enum_member (function) -ida_enum.del_enum (function) -ida_enum.del_enum_member (function) -ida_enum.enum_member_visitor_t (class) -ida_enum.enum_member_visitor_t.__disown__ (method) -ida_enum.enum_member_visitor_t.__init__ (method) -ida_enum.enum_member_visitor_t.visit_enum_member (method) -ida_enum.for_all_enum_members (function) -ida_enum.get_bmask_cmt (function) -ida_enum.get_bmask_name (function) -ida_enum.get_enum (function) -ida_enum.get_enum_cmt (function) -ida_enum.get_enum_flag (function) -ida_enum.get_enum_idx (function) -ida_enum.get_enum_member (function) -ida_enum.get_enum_member_bmask (function) -ida_enum.get_enum_member_by_name (function) -ida_enum.get_enum_member_cmt (function) -ida_enum.get_enum_member_enum (function) -ida_enum.get_enum_member_name (function) -ida_enum.get_enum_member_serial (function) -ida_enum.get_enum_member_value (function) -ida_enum.get_enum_name (function) -ida_enum.get_enum_name2 (function) -ida_enum.get_enum_qty (function) -ida_enum.get_enum_size (function) -ida_enum.get_enum_type_ordinal (function) -ida_enum.get_enum_width (function) -ida_enum.get_first_bmask (function) -ida_enum.get_first_enum_member (function) -ida_enum.get_first_serial_enum_member (function) -ida_enum.get_last_bmask (function) -ida_enum.get_last_enum_member (function) -ida_enum.get_last_serial_enum_member (function) -ida_enum.get_next_bmask (function) -ida_enum.get_next_enum_member (function) -ida_enum.get_next_serial_enum_member (function) -ida_enum.get_prev_bmask (function) -ida_enum.get_prev_enum_member (function) -ida_enum.get_prev_serial_enum_member (function) -ida_enum.getn_enum (function) -ida_enum.is_bf (function) -ida_enum.is_enum_fromtil (function) -ida_enum.is_enum_hidden (function) -ida_enum.is_ghost_enum (function) -ida_enum.is_one_bit_mask (function) -ida_enum.set_bmask_cmt (function) -ida_enum.set_bmask_name (function) -ida_enum.set_enum_bf (function) -ida_enum.set_enum_cmt (function) -ida_enum.set_enum_flag (function) -ida_enum.set_enum_fromtil (function) -ida_enum.set_enum_ghost (function) -ida_enum.set_enum_hidden (function) -ida_enum.set_enum_idx (function) -ida_enum.set_enum_member_cmt (function) -ida_enum.set_enum_member_name (function) -ida_enum.set_enum_name (function) -ida_enum.set_enum_type_ordinal (function) -ida_enum.set_enum_width (function) -ida_expr (module) -ida_expr.CPL_DEL_MACROS (variable) -ida_expr.CPL_ONLY_SAFE (variable) -ida_expr.CPL_USE_LABELS (variable) -ida_expr.EXTFUN_BASE (variable) -ida_expr.EXTFUN_NORET (variable) -ida_expr.EXTFUN_SAFE (variable) -ida_expr.IDC_LANG_EXT (variable) -ida_expr.VARSLICE_SINGLE (variable) -ida_expr.VREF_COPY (variable) -ida_expr.VREF_LOOP (variable) -ida_expr.VREF_ONCE (variable) -ida_expr.VT_FLOAT (variable) -ida_expr.VT_FUNC (variable) -ida_expr.VT_INT64 (variable) -ida_expr.VT_LONG (variable) -ida_expr.VT_OBJ (variable) -ida_expr.VT_PVOID (variable) -ida_expr.VT_REF (variable) -ida_expr.VT_STR (variable) -ida_expr.VT_WILD (variable) -ida_expr._IdcFunction (class) -ida_expr._IdcFunction.__call__ (method) -ida_expr._IdcFunction.__init__ (method) -ida_expr.add_idc_class (function) -ida_expr.add_idc_func (function) -ida_expr.add_idc_gvar (function) -ida_expr.call_idc_func__ (function) -ida_expr.compile_idc_file (function) -ida_expr.compile_idc_snippet (function) -ida_expr.compile_idc_text (function) -ida_expr.copy_idcv (function) -ida_expr.create_idcv_ref (function) -ida_expr.deep_copy_idcv (function) -ida_expr.del_idc_func (function) -ida_expr.del_idcv_attr (function) -ida_expr.deref_idcv (function) -ida_expr.eExecThrow (variable) -ida_expr.eval_expr (function) -ida_expr.eval_idc_expr (function) -ida_expr.exec_idc_script (function) -ida_expr.exec_system_script (function) -ida_expr.find_idc_class (function) -ida_expr.find_idc_func (function) -ida_expr.find_idc_gvar (function) -ida_expr.first_idcv_attr (function) -ida_expr.free_idcv (function) -ida_expr.get_idc_filename (function) -ida_expr.get_idcv_attr (function) -ida_expr.get_idcv_class_name (function) -ida_expr.get_idcv_slice (function) -ida_expr.highlighter_cbs_t (class) -ida_expr.highlighter_cbs_t.__disown__ (method) -ida_expr.highlighter_cbs_t.__init__ (method) -ida_expr.highlighter_cbs_t.cur_block_state (method) -ida_expr.highlighter_cbs_t.prev_block_state (method) -ida_expr.highlighter_cbs_t.set_block_state (method) -ida_expr.highlighter_cbs_t.set_style (method) -ida_expr.idc_global_t (class) -ida_expr.idc_global_t.__init__ (method) -ida_expr.idc_value_t (class) -ida_expr.idc_value_t.__init__ (method) -ida_expr.idc_value_t._create_empty_string (method) -ida_expr.idc_value_t.c_str (method) -ida_expr.idc_value_t.clear (method) -ida_expr.idc_value_t.create_empty_string (method) -ida_expr.idc_value_t.e (variable) -ida_expr.idc_value_t.funcidx (variable) -ida_expr.idc_value_t.i64 (variable) -ida_expr.idc_value_t.is_convertible (method) -ida_expr.idc_value_t.is_integral (method) -ida_expr.idc_value_t.is_zero (method) -ida_expr.idc_value_t.num (variable) -ida_expr.idc_value_t.pvoid (variable) -ida_expr.idc_value_t.qstr (method) -ida_expr.idc_value_t.reserve (variable) -ida_expr.idc_value_t.set_float (method) -ida_expr.idc_value_t.set_int64 (method) -ida_expr.idc_value_t.set_long (method) -ida_expr.idc_value_t.set_pvoid (method) -ida_expr.idc_value_t.set_string (method) -ida_expr.idc_value_t.swap (method) -ida_expr.idc_value_t.u_str (method) -ida_expr.idc_value_t.vtype (variable) -ida_expr.idc_values_t (class) -ida_expr.idc_values_t.__getitem__ (method) -ida_expr.idc_values_t.__init__ (method) -ida_expr.idc_values_t.__len__ (method) -ida_expr.idc_values_t.__setitem__ (method) -ida_expr.idc_values_t.at (method) -ida_expr.idc_values_t.begin (method) -ida_expr.idc_values_t.capacity (method) -ida_expr.idc_values_t.clear (method) -ida_expr.idc_values_t.empty (method) -ida_expr.idc_values_t.end (method) -ida_expr.idc_values_t.erase (method) -ida_expr.idc_values_t.extract (method) -ida_expr.idc_values_t.grow (method) -ida_expr.idc_values_t.inject (method) -ida_expr.idc_values_t.insert (method) -ida_expr.idc_values_t.pop_back (method) -ida_expr.idc_values_t.push_back (method) -ida_expr.idc_values_t.qclear (method) -ida_expr.idc_values_t.reserve (method) -ida_expr.idc_values_t.resize (method) -ida_expr.idc_values_t.size (method) -ida_expr.idc_values_t.swap (method) -ida_expr.idc_values_t.truncate (method) -ida_expr.idcv_float (function) -ida_expr.idcv_int64 (function) -ida_expr.idcv_long (function) -ida_expr.idcv_num (function) -ida_expr.idcv_object (function) -ida_expr.idcv_string (function) -ida_expr.last_idcv_attr (function) -ida_expr.move_idcv (function) -ida_expr.next_idcv_attr (function) -ida_expr.prev_idcv_attr (function) -ida_expr.print_idcv (function) -ida_expr.py_add_idc_func (function) -ida_expr.py_get_call_idc_func (function) -ida_expr.pyw_convert_defvals (function) -ida_expr.pyw_register_idc_func (function) -ida_expr.pyw_unregister_idc_func (function) -ida_expr.set_header_path (function) -ida_expr.set_idcv_attr (function) -ida_expr.set_idcv_slice (function) -ida_expr.swap_idcvs (function) -ida_expr.throw_idc_exception (function) -ida_fixup (module) -ida_fixup.FIXUPF_CREATED (variable) -ida_fixup.FIXUPF_EXTDEF (variable) -ida_fixup.FIXUPF_LOADER_MASK (variable) -ida_fixup.FIXUPF_REL (variable) -ida_fixup.FIXUPF_UNUSED (variable) -ida_fixup.FIXUP_CUSTOM (variable) -ida_fixup.FIXUP_HI16 (variable) -ida_fixup.FIXUP_HI8 (variable) -ida_fixup.FIXUP_LOW16 (variable) -ida_fixup.FIXUP_LOW8 (variable) -ida_fixup.FIXUP_OFF16 (variable) -ida_fixup.FIXUP_OFF16S (variable) -ida_fixup.FIXUP_OFF32 (variable) -ida_fixup.FIXUP_OFF32S (variable) -ida_fixup.FIXUP_OFF64 (variable) -ida_fixup.FIXUP_OFF8 (variable) -ida_fixup.FIXUP_OFF8S (variable) -ida_fixup.FIXUP_PTR16 (variable) -ida_fixup.FIXUP_PTR32 (variable) -ida_fixup.FIXUP_SEG16 (variable) -ida_fixup.V695_FIXUP_VHIGH (variable) -ida_fixup.V695_FIXUP_VLOW (variable) -ida_fixup.calc_fixup_size (function) -ida_fixup.contains_fixups (function) -ida_fixup.del_fixup (function) -ida_fixup.exists_fixup (function) -ida_fixup.find_custom_fixup (function) -ida_fixup.fixup_data_t (class) -ida_fixup.fixup_data_t.__init__ (method) -ida_fixup.fixup_data_t.calc_size (method) -ida_fixup.fixup_data_t.clr_extdef (method) -ida_fixup.fixup_data_t.clr_unused (method) -ida_fixup.fixup_data_t.displacement (variable) -ida_fixup.fixup_data_t.get (method) -ida_fixup.fixup_data_t.get_base (method) -ida_fixup.fixup_data_t.get_desc (method) -ida_fixup.fixup_data_t.get_flags (method) -ida_fixup.fixup_data_t.get_handler (method) -ida_fixup.fixup_data_t.get_type (method) -ida_fixup.fixup_data_t.get_value (method) -ida_fixup.fixup_data_t.has_base (method) -ida_fixup.fixup_data_t.is_custom (method) -ida_fixup.fixup_data_t.is_extdef (method) -ida_fixup.fixup_data_t.is_unused (method) -ida_fixup.fixup_data_t.off (variable) -ida_fixup.fixup_data_t.patch_value (method) -ida_fixup.fixup_data_t.sel (variable) -ida_fixup.fixup_data_t.set (method) -ida_fixup.fixup_data_t.set_base (method) -ida_fixup.fixup_data_t.set_extdef (method) -ida_fixup.fixup_data_t.set_sel (method) -ida_fixup.fixup_data_t.set_target_sel (method) -ida_fixup.fixup_data_t.set_type (method) -ida_fixup.fixup_data_t.set_type_and_flags (method) -ida_fixup.fixup_data_t.set_unused (method) -ida_fixup.fixup_data_t.was_created (method) -ida_fixup.fixup_info_t (class) -ida_fixup.fixup_info_t.__init__ (method) -ida_fixup.gen_fix_fixups (function) -ida_fixup.get_first_fixup_ea (function) -ida_fixup.get_fixup (function) -ida_fixup.get_fixup_desc (function) -ida_fixup.get_fixup_handler (function) -ida_fixup.get_fixup_value (function) -ida_fixup.get_fixups (function) -ida_fixup.get_next_fixup_ea (function) -ida_fixup.get_prev_fixup_ea (function) -ida_fixup.handle_fixups_in_macro (function) -ida_fixup.is_fixup_custom (function) -ida_fixup.patch_fixup_value (function) -ida_fixup.set_fixup (function) -ida_fpro (module) -ida_fpro.qfile_t (class) -ida_fpro.qfile_t.__init__ (method) -ida_fpro.qfile_t.close (method) -ida_fpro.qfile_t.filename (method) -ida_fpro.qfile_t.flush (method) -ida_fpro.qfile_t.from_capsule (method) -ida_fpro.qfile_t.from_fp (method) -ida_fpro.qfile_t.get_byte (method) -ida_fpro.qfile_t.get_fp (method) -ida_fpro.qfile_t.gets (method) -ida_fpro.qfile_t.open (method) -ida_fpro.qfile_t.opened (method) -ida_fpro.qfile_t.put_byte (method) -ida_fpro.qfile_t.puts (method) -ida_fpro.qfile_t.read (method) -ida_fpro.qfile_t.readbytes (method) -ida_fpro.qfile_t.seek (method) -ida_fpro.qfile_t.size (method) -ida_fpro.qfile_t.tell (method) -ida_fpro.qfile_t.tmpfile (method) -ida_fpro.qfile_t.write (method) -ida_fpro.qfile_t.writebytes (method) -ida_fpro.qfile_t_from_capsule (function) -ida_fpro.qfile_t_from_fp (function) -ida_fpro.qfile_t_tmpfile (function) -ida_frame (module) -ida_frame.REGVAR_ERROR_ARG (variable) -ida_frame.REGVAR_ERROR_NAME (variable) -ida_frame.REGVAR_ERROR_OK (variable) -ida_frame.REGVAR_ERROR_RANGE (variable) -ida_frame.STKVAR_VALID_SIZE (variable) -ida_frame.add_auto_stkpnt (function) -ida_frame.add_frame (function) -ida_frame.add_regvar (function) -ida_frame.add_user_stkpnt (function) -ida_frame.build_stkvar_name (function) -ida_frame.build_stkvar_xrefs (function) -ida_frame.calc_stkvar_struc_offset (function) -ida_frame.define_stkvar (function) -ida_frame.del_frame (function) -ida_frame.del_regvar (function) -ida_frame.del_stkpnt (function) -ida_frame.delete_unreferenced_stkvars (function) -ida_frame.delete_wrong_stkvar_ops (function) -ida_frame.find_regvar (function) -ida_frame.frame_off_args (function) -ida_frame.frame_off_lvars (function) -ida_frame.frame_off_retaddr (function) -ida_frame.frame_off_savregs (function) -ida_frame.free_regvar (function) -ida_frame.get_effective_spd (function) -ida_frame.get_frame (function) -ida_frame.get_frame_member_by_id (function) -ida_frame.get_frame_part (function) -ida_frame.get_frame_retsize (function) -ida_frame.get_frame_size (function) -ida_frame.get_func_by_frame (function) -ida_frame.get_min_spd_ea (function) -ida_frame.get_sp_delta (function) -ida_frame.get_spd (function) -ida_frame.get_stkvar (function) -ida_frame.has_regvar (function) -ida_frame.is_funcarg_off (function) -ida_frame.lvar_off (function) -ida_frame.recalc_spd (function) -ida_frame.recalc_spd_for_basic_block (function) -ida_frame.regvar_t (class) -ida_frame.regvar_t.__init__ (method) -ida_frame.regvar_t.canon (variable) -ida_frame.regvar_t.cmt (variable) -ida_frame.regvar_t.swap (method) -ida_frame.regvar_t.user (variable) -ida_frame.rename_regvar (function) -ida_frame.set_auto_spd (function) -ida_frame.set_frame_size (function) -ida_frame.set_purged (function) -ida_frame.set_regvar_cmt (function) -ida_frame.soff_to_fpoff (function) -ida_frame.stkpnt_t (class) -ida_frame.stkpnt_t.__eq__ (method) -ida_frame.stkpnt_t.__ge__ (method) -ida_frame.stkpnt_t.__gt__ (method) -ida_frame.stkpnt_t.__init__ (method) -ida_frame.stkpnt_t.__le__ (method) -ida_frame.stkpnt_t.__lt__ (method) -ida_frame.stkpnt_t.__ne__ (method) -ida_frame.stkpnt_t.compare (method) -ida_frame.stkpnts_t (class) -ida_frame.stkpnts_t.__eq__ (method) -ida_frame.stkpnts_t.__ge__ (method) -ida_frame.stkpnts_t.__gt__ (method) -ida_frame.stkpnts_t.__init__ (method) -ida_frame.stkpnts_t.__le__ (method) -ida_frame.stkpnts_t.__lt__ (method) -ida_frame.stkpnts_t.__ne__ (method) -ida_frame.stkpnts_t.compare (method) -ida_frame.update_fpd (function) -ida_frame.xreflist_entry_t (class) -ida_frame.xreflist_entry_t.__eq__ (method) -ida_frame.xreflist_entry_t.__ge__ (method) -ida_frame.xreflist_entry_t.__gt__ (method) -ida_frame.xreflist_entry_t.__init__ (method) -ida_frame.xreflist_entry_t.__le__ (method) -ida_frame.xreflist_entry_t.__lt__ (method) -ida_frame.xreflist_entry_t.__ne__ (method) -ida_frame.xreflist_entry_t.compare (method) -ida_frame.xreflist_entry_t.ea (variable) -ida_frame.xreflist_entry_t.opnum (variable) -ida_frame.xreflist_entry_t.type (variable) -ida_frame.xreflist_t (class) -ida_frame.xreflist_t.__eq__ (method) -ida_frame.xreflist_t.__getitem__ (method) -ida_frame.xreflist_t.__init__ (method) -ida_frame.xreflist_t.__len__ (method) -ida_frame.xreflist_t.__ne__ (method) -ida_frame.xreflist_t.__setitem__ (method) -ida_frame.xreflist_t._del (method) -ida_frame.xreflist_t.add_unique (method) -ida_frame.xreflist_t.at (method) -ida_frame.xreflist_t.begin (method) -ida_frame.xreflist_t.capacity (method) -ida_frame.xreflist_t.clear (method) -ida_frame.xreflist_t.empty (method) -ida_frame.xreflist_t.end (method) -ida_frame.xreflist_t.erase (method) -ida_frame.xreflist_t.extract (method) -ida_frame.xreflist_t.find (method) -ida_frame.xreflist_t.grow (method) -ida_frame.xreflist_t.has (method) -ida_frame.xreflist_t.inject (method) -ida_frame.xreflist_t.insert (method) -ida_frame.xreflist_t.pop_back (method) -ida_frame.xreflist_t.push_back (method) -ida_frame.xreflist_t.qclear (method) -ida_frame.xreflist_t.reserve (method) -ida_frame.xreflist_t.resize (method) -ida_frame.xreflist_t.size (method) -ida_frame.xreflist_t.swap (method) -ida_frame.xreflist_t.truncate (method) -ida_funcs (module) -ida_funcs.FIND_FUNC_DEFINE (variable) -ida_funcs.FIND_FUNC_EXIST (variable) -ida_funcs.FIND_FUNC_IGNOREFN (variable) -ida_funcs.FIND_FUNC_KEEPBD (variable) -ida_funcs.FIND_FUNC_NORMAL (variable) -ida_funcs.FIND_FUNC_OK (variable) -ida_funcs.FIND_FUNC_UNDEF (variable) -ida_funcs.FUNC_BOTTOMBP (variable) -ida_funcs.FUNC_FAR (variable) -ida_funcs.FUNC_FRAME (variable) -ida_funcs.FUNC_FUZZY_SP (variable) -ida_funcs.FUNC_HIDDEN (variable) -ida_funcs.FUNC_LIB (variable) -ida_funcs.FUNC_LUMINA (variable) -ida_funcs.FUNC_NORET (variable) -ida_funcs.FUNC_NORET_PENDING (variable) -ida_funcs.FUNC_OUTLINE (variable) -ida_funcs.FUNC_PROLOG_OK (variable) -ida_funcs.FUNC_PURGED_OK (variable) -ida_funcs.FUNC_REANALYZE (variable) -ida_funcs.FUNC_SP_READY (variable) -ida_funcs.FUNC_STATICDEF (variable) -ida_funcs.FUNC_TAIL (variable) -ida_funcs.FUNC_THUNK (variable) -ida_funcs.FUNC_USERFAR (variable) -ida_funcs.IDASGN_APPLIED (variable) -ida_funcs.IDASGN_BADARG (variable) -ida_funcs.IDASGN_CURRENT (variable) -ida_funcs.IDASGN_OK (variable) -ida_funcs.IDASGN_PLANNED (variable) -ida_funcs.LIBFUNC_DELAY (variable) -ida_funcs.LIBFUNC_FOUND (variable) -ida_funcs.LIBFUNC_NONE (variable) -ida_funcs.MOVE_FUNC_BADSTART (variable) -ida_funcs.MOVE_FUNC_NOCODE (variable) -ida_funcs.MOVE_FUNC_NOFUNC (variable) -ida_funcs.MOVE_FUNC_OK (variable) -ida_funcs.MOVE_FUNC_REFUSED (variable) -ida_funcs.add_func (function) -ida_funcs.add_func_ex (function) -ida_funcs.add_regarg (function) -ida_funcs.append_func_tail (function) -ida_funcs.apply_idasgn_to (function) -ida_funcs.apply_startup_sig (function) -ida_funcs.calc_func_size (function) -ida_funcs.calc_idasgn_state (function) -ida_funcs.calc_thunk_func_target (function) -ida_funcs.calc_thunk_func_target (function) -ida_funcs.del_func (function) -ida_funcs.del_idasgn (function) -ida_funcs.dyn_ea_array (class) -ida_funcs.dyn_ea_array.__getitem__ (method) -ida_funcs.dyn_ea_array.__init__ (method) -ida_funcs.dyn_ea_array.__len__ (method) -ida_funcs.dyn_ea_array.__setitem__ (method) -ida_funcs.dyn_range_array (class) -ida_funcs.dyn_range_array.__getitem__ (method) -ida_funcs.dyn_range_array.__init__ (method) -ida_funcs.dyn_range_array.__len__ (method) -ida_funcs.dyn_range_array.__setitem__ (method) -ida_funcs.dyn_regarg_array (class) -ida_funcs.dyn_regarg_array.__getitem__ (method) -ida_funcs.dyn_regarg_array.__init__ (method) -ida_funcs.dyn_regarg_array.__len__ (method) -ida_funcs.dyn_regarg_array.__setitem__ (method) -ida_funcs.dyn_regvar_array (class) -ida_funcs.dyn_regvar_array.__getitem__ (method) -ida_funcs.dyn_regvar_array.__init__ (method) -ida_funcs.dyn_regvar_array.__len__ (method) -ida_funcs.dyn_regvar_array.__setitem__ (method) -ida_funcs.dyn_stkpnt_array (class) -ida_funcs.dyn_stkpnt_array.__getitem__ (method) -ida_funcs.dyn_stkpnt_array.__init__ (method) -ida_funcs.dyn_stkpnt_array.__len__ (method) -ida_funcs.dyn_stkpnt_array.__setitem__ (method) -ida_funcs.f_any (function) -ida_funcs.find_func_bounds (function) -ida_funcs.free_regarg (function) -ida_funcs.func_contains (function) -ida_funcs.func_does_return (function) -ida_funcs.func_item_iterator_t (class) -ida_funcs.func_item_iterator_t.__init__ (method) -ida_funcs.func_item_iterator_t.__iter__ (method) -ida_funcs.func_item_iterator_t.__next__ (method) -ida_funcs.func_item_iterator_t.addresses (method) -ida_funcs.func_item_iterator_t.chunk (method) -ida_funcs.func_item_iterator_t.code_items (method) -ida_funcs.func_item_iterator_t.current (method) -ida_funcs.func_item_iterator_t.data_items (method) -ida_funcs.func_item_iterator_t.decode_preceding_insn (method) -ida_funcs.func_item_iterator_t.decode_prev_insn (method) -ida_funcs.func_item_iterator_t.first (method) -ida_funcs.func_item_iterator_t.head_items (method) -ida_funcs.func_item_iterator_t.last (method) -ida_funcs.func_item_iterator_t.next_addr (method) -ida_funcs.func_item_iterator_t.next_code (method) -ida_funcs.func_item_iterator_t.next_data (method) -ida_funcs.func_item_iterator_t.next_head (method) -ida_funcs.func_item_iterator_t.next_not_tail (method) -ida_funcs.func_item_iterator_t.not_tails (method) -ida_funcs.func_item_iterator_t.prev (method) -ida_funcs.func_item_iterator_t.prev_addr (method) -ida_funcs.func_item_iterator_t.prev_code (method) -ida_funcs.func_item_iterator_t.prev_data (method) -ida_funcs.func_item_iterator_t.prev_head (method) -ida_funcs.func_item_iterator_t.prev_not_tail (method) -ida_funcs.func_item_iterator_t.set (method) -ida_funcs.func_item_iterator_t.set_range (method) -ida_funcs.func_item_iterator_t.succ (method) -ida_funcs.func_item_iterator_t.succ_code (method) -ida_funcs.func_parent_iterator_set (function) -ida_funcs.func_parent_iterator_t (class) -ida_funcs.func_parent_iterator_t.__init__ (method) -ida_funcs.func_parent_iterator_t.__iter__ (method) -ida_funcs.func_parent_iterator_t.__next__ (method) -ida_funcs.func_parent_iterator_t.first (method) -ida_funcs.func_parent_iterator_t.last (method) -ida_funcs.func_parent_iterator_t.parent (method) -ida_funcs.func_parent_iterator_t.prev (method) -ida_funcs.func_parent_iterator_t.reset_fnt (method) -ida_funcs.func_parent_iterator_t.set (method) -ida_funcs.func_t (class) -ida_funcs.func_t.__get_points__ (method) -ida_funcs.func_t.__get_referers__ (method) -ida_funcs.func_t.__get_regargs__ (method) -ida_funcs.func_t.__get_regvars__ (method) -ida_funcs.func_t.__get_tails__ (method) -ida_funcs.func_t.__init__ (method) -ida_funcs.func_t.__iter__ (method) -ida_funcs.func_t.addresses (method) -ida_funcs.func_t.analyzed_sp (method) -ida_funcs.func_t.argsize (variable) -ida_funcs.func_t.code_items (method) -ida_funcs.func_t.color (variable) -ida_funcs.func_t.data_items (method) -ida_funcs.func_t.does_return (method) -ida_funcs.func_t.flags (variable) -ida_funcs.func_t.fpd (variable) -ida_funcs.func_t.frame (variable) -ida_funcs.func_t.frregs (variable) -ida_funcs.func_t.frsize (variable) -ida_funcs.func_t.head_items (method) -ida_funcs.func_t.is_far (method) -ida_funcs.func_t.need_prolog_analysis (method) -ida_funcs.func_t.not_tails (method) -ida_funcs.func_t.owner (variable) -ida_funcs.func_t.pntqty (variable) -ida_funcs.func_t.points (variable) -ida_funcs.func_t.referers (variable) -ida_funcs.func_t.refqty (variable) -ida_funcs.func_t.regargqty (variable) -ida_funcs.func_t.regargs (variable) -ida_funcs.func_t.regvarqty (variable) -ida_funcs.func_t.regvars (variable) -ida_funcs.func_t.tailqty (variable) -ida_funcs.func_t.tails (variable) -ida_funcs.func_t__from_ptrval__ (function) -ida_funcs.func_tail_iterator_set (function) -ida_funcs.func_tail_iterator_set_ea (function) -ida_funcs.func_tail_iterator_t (class) -ida_funcs.func_tail_iterator_t.__init__ (method) -ida_funcs.func_tail_iterator_t.__iter__ (method) -ida_funcs.func_tail_iterator_t.__next__ (method) -ida_funcs.func_tail_iterator_t.chunk (method) -ida_funcs.func_tail_iterator_t.first (method) -ida_funcs.func_tail_iterator_t.last (method) -ida_funcs.func_tail_iterator_t.main (method) -ida_funcs.func_tail_iterator_t.prev (method) -ida_funcs.func_tail_iterator_t.set (method) -ida_funcs.func_tail_iterator_t.set_ea (method) -ida_funcs.func_tail_iterator_t.set_range (method) -ida_funcs.get_current_idasgn (function) -ida_funcs.get_fchunk (function) -ida_funcs.get_fchunk_num (function) -ida_funcs.get_fchunk_qty (function) -ida_funcs.get_fchunk_referer (function) -ida_funcs.get_func (function) -ida_funcs.get_func_bitness (function) -ida_funcs.get_func_bits (function) -ida_funcs.get_func_bytes (function) -ida_funcs.get_func_chunknum (function) -ida_funcs.get_func_cmt (function) -ida_funcs.get_func_name (function) -ida_funcs.get_func_num (function) -ida_funcs.get_func_qty (function) -ida_funcs.get_func_ranges (function) -ida_funcs.get_idasgn_desc (function) -ida_funcs.get_idasgn_desc_with_matches (function) -ida_funcs.get_idasgn_qty (function) -ida_funcs.get_idasgn_title (function) -ida_funcs.get_next_fchunk (function) -ida_funcs.get_next_func (function) -ida_funcs.get_next_func_addr (function) -ida_funcs.get_prev_fchunk (function) -ida_funcs.get_prev_func (function) -ida_funcs.get_prev_func_addr (function) -ida_funcs.getn_fchunk (function) -ida_funcs.getn_func (function) -ida_funcs.is_finally_visible_func (function) -ida_funcs.is_func_entry (function) -ida_funcs.is_func_locked (function) -ida_funcs.is_func_tail (function) -ida_funcs.is_same_func (function) -ida_funcs.is_visible_func (function) -ida_funcs.lock_func (class) -ida_funcs.lock_func.__init__ (method) -ida_funcs.lock_func_range (function) -ida_funcs.lock_func_with_tails_t (class) -ida_funcs.lock_func_with_tails_t.__init__ (method) -ida_funcs.plan_to_apply_idasgn (function) -ida_funcs.read_regargs (function) -ida_funcs.reanalyze_function (function) -ida_funcs.reanalyze_noret_flag (function) -ida_funcs.regarg_t (class) -ida_funcs.regarg_t.__init__ (method) -ida_funcs.regarg_t.swap (method) -ida_funcs.remove_func_tail (function) -ida_funcs.set_func_cmt (function) -ida_funcs.set_func_end (function) -ida_funcs.set_func_name_if_jumpfunc (function) -ida_funcs.set_func_start (function) -ida_funcs.set_noret_insn (function) -ida_funcs.set_tail_owner (function) -ida_funcs.set_visible_func (function) -ida_funcs.try_to_add_libfunc (function) -ida_funcs.update_func (function) -ida_gdl (module) -ida_gdl.BasicBlock (class) -ida_gdl.BasicBlock.__init__ (method) -ida_gdl.BasicBlock.preds (method) -ida_gdl.BasicBlock.succs (method) -ida_gdl.CHART_FOLLOW_DIRECTION (variable) -ida_gdl.CHART_GEN_DOT (variable) -ida_gdl.CHART_GEN_GDL (variable) -ida_gdl.CHART_IGNORE_LIB_FROM (variable) -ida_gdl.CHART_IGNORE_LIB_TO (variable) -ida_gdl.CHART_NOLIBFUNCS (variable) -ida_gdl.CHART_PRINT_DOTS (variable) -ida_gdl.CHART_PRINT_NAMES (variable) -ida_gdl.CHART_RECURSIVE (variable) -ida_gdl.CHART_REFERENCED (variable) -ida_gdl.CHART_REFERENCING (variable) -ida_gdl.CHART_WINGRAPH (variable) -ida_gdl.FC_APPND (variable) -ida_gdl.FC_CALL_ENDS (variable) -ida_gdl.FC_CHKBREAK (variable) -ida_gdl.FC_NOEXT (variable) -ida_gdl.FC_NOPREDS (variable) -ida_gdl.FC_OUTLINES (variable) -ida_gdl.FC_PRINT (variable) -ida_gdl.FlowChart (class) -ida_gdl.FlowChart.__getitem__ (method) -ida_gdl.FlowChart.__init__ (method) -ida_gdl.FlowChart.__iter__ (method) -ida_gdl.FlowChart._getitem (method) -ida_gdl.FlowChart.refresh (method) -ida_gdl.FlowChart.size (variable) -ida_gdl.cancellable_graph_t (class) -ida_gdl.cancellable_graph_t.__disown__ (method) -ida_gdl.cancellable_graph_t.__init__ (method) -ida_gdl.display_gdl (function) -ida_gdl.fcb_cndret (variable) -ida_gdl.fcb_enoret (variable) -ida_gdl.fcb_error (variable) -ida_gdl.fcb_extern (variable) -ida_gdl.fcb_indjump (variable) -ida_gdl.fcb_noret (variable) -ida_gdl.fcb_normal (variable) -ida_gdl.fcb_ret (variable) -ida_gdl.gdl_graph_t (class) -ida_gdl.gdl_graph_t.__disown__ (method) -ida_gdl.gdl_graph_t.__init__ (method) -ida_gdl.gdl_graph_t.begin (method) -ida_gdl.gdl_graph_t.edge (method) -ida_gdl.gdl_graph_t.empty (method) -ida_gdl.gdl_graph_t.end (method) -ida_gdl.gdl_graph_t.entry (method) -ida_gdl.gdl_graph_t.exists (method) -ida_gdl.gdl_graph_t.exit (method) -ida_gdl.gdl_graph_t.front (method) -ida_gdl.gdl_graph_t.get_edge_color (method) -ida_gdl.gdl_graph_t.get_node_color (method) -ida_gdl.gdl_graph_t.get_node_label (method) -ida_gdl.gdl_graph_t.nedge (method) -ida_gdl.gdl_graph_t.node_qty (method) -ida_gdl.gdl_graph_t.npred (method) -ida_gdl.gdl_graph_t.nsucc (method) -ida_gdl.gdl_graph_t.pred (method) -ida_gdl.gdl_graph_t.print_edge (method) -ida_gdl.gdl_graph_t.print_graph_attributes (method) -ida_gdl.gdl_graph_t.print_node (method) -ida_gdl.gdl_graph_t.print_node_attributes (method) -ida_gdl.gdl_graph_t.size (method) -ida_gdl.gdl_graph_t.succ (method) -ida_gdl.gen_complex_call_chart (function) -ida_gdl.gen_flow_graph (function) -ida_gdl.gen_gdl (function) -ida_gdl.gen_simple_call_chart (function) -ida_gdl.is_noret_block (function) -ida_gdl.is_ret_block (function) -ida_gdl.node_iterator (class) -ida_gdl.node_iterator.__eq__ (method) -ida_gdl.node_iterator.__init__ (method) -ida_gdl.node_iterator.__ne__ (method) -ida_gdl.node_iterator.__ref__ (method) -ida_gdl.qbasic_block_t (class) -ida_gdl.qbasic_block_t.__init__ (method) -ida_gdl.qflow_chart_t (class) -ida_gdl.qflow_chart_t.__getitem__ (method) -ida_gdl.qflow_chart_t.__init__ (method) -ida_gdl.qflow_chart_t.append_to_flowchart (method) -ida_gdl.qflow_chart_t.bounds (variable) -ida_gdl.qflow_chart_t.calc_block_type (method) -ida_gdl.qflow_chart_t.create (method) -ida_gdl.qflow_chart_t.flags (variable) -ida_gdl.qflow_chart_t.get_node_label (method) -ida_gdl.qflow_chart_t.is_noret_block (method) -ida_gdl.qflow_chart_t.is_ret_block (method) -ida_gdl.qflow_chart_t.npred (method) -ida_gdl.qflow_chart_t.nproper (variable) -ida_gdl.qflow_chart_t.nsucc (method) -ida_gdl.qflow_chart_t.pfn (variable) -ida_gdl.qflow_chart_t.pred (method) -ida_gdl.qflow_chart_t.print_names (method) -ida_gdl.qflow_chart_t.print_node_attributes (method) -ida_gdl.qflow_chart_t.refresh (method) -ida_gdl.qflow_chart_t.size (method) -ida_gdl.qflow_chart_t.succ (method) -ida_graph (module) -ida_graph.GLICTL_CENTER (variable) -ida_graph.GraphViewer (class) -ida_graph.GraphViewer.AddCommand (method) -ida_graph.GraphViewer.AddEdge (method) -ida_graph.GraphViewer.AddNode (method) -ida_graph.GraphViewer.Clear (method) -ida_graph.GraphViewer.Close (method) -ida_graph.GraphViewer.Count (method) -ida_graph.GraphViewer.OnCommand (method) -ida_graph.GraphViewer.OnPopup (method) -ida_graph.GraphViewer.OnRefresh (method) -ida_graph.GraphViewer.Select (method) -ida_graph.GraphViewer.Show (method) -ida_graph.GraphViewer.UI_Hooks_Trampoline (class) -ida_graph.GraphViewer.UI_Hooks_Trampoline.__init__ (method) -ida_graph.GraphViewer.UI_Hooks_Trampoline.populating_widget_popup (method) -ida_graph.GraphViewer._OnBind (method) -ida_graph.GraphViewer.__getitem__ (method) -ida_graph.GraphViewer.__init__ (method) -ida_graph.GraphViewer.__init__._qccb (function) -ida_graph.GraphViewer.__iter__ (method) -ida_graph.MTG_DOT_NODE (variable) -ida_graph.MTG_GROUP_NODE (variable) -ida_graph.MTG_NON_DISPLAYABLE_NODE (variable) -ida_graph.NIF_BG_COLOR (variable) -ida_graph.NIF_EA (variable) -ida_graph.NIF_FLAGS (variable) -ida_graph.NIF_FRAME_COLOR (variable) -ida_graph.NIF_TEXT (variable) -ida_graph.TPointDouble (class) -ida_graph.TPointDouble.__eq__ (method) -ida_graph.TPointDouble.__init__ (method) -ida_graph.TPointDouble.__ne__ (method) -ida_graph.TPointDouble.add (method) -ida_graph.TPointDouble.negate (method) -ida_graph.TPointDouble.sub (method) -ida_graph.abstract_graph_t (class) -ida_graph.abstract_graph_t.__disown__ (method) -ida_graph.abstract_graph_t.__init__ (method) -ida_graph.abstract_graph_t.callback_ud (variable) -ida_graph.abstract_graph_t.circle_center (variable) -ida_graph.abstract_graph_t.circle_radius (variable) -ida_graph.abstract_graph_t.create_circle_layout (method) -ida_graph.abstract_graph_t.create_tree_layout (method) -ida_graph.abstract_graph_t.current_layout (variable) -ida_graph.abstract_graph_t.get_edge (method) -ida_graph.abstract_graph_t.grcall (method) -ida_graph.abstract_graph_t.nrect (method) -ida_graph.abstract_graph_t.rect_edges_made (variable) -ida_graph.abstract_graph_t.set_callback (method) -ida_graph.abstract_graph_t.title (variable) -ida_graph.calc_dist (function) -ida_graph.clr_node_info (function) -ida_graph.create_disasm_graph (function) -ida_graph.create_graph_viewer (function) -ida_graph.create_mutable_graph (function) -ida_graph.create_user_graph_place (function) -ida_graph.del_node_info (function) -ida_graph.delete_mutable_graph (function) -ida_graph.edge_info_t (class) -ida_graph.edge_info_t.__init__ (method) -ida_graph.edge_info_t.color (variable) -ida_graph.edge_info_t.layout (variable) -ida_graph.edge_info_t.reverse_layout (method) -ida_graph.edge_info_t.width (variable) -ida_graph.edge_infos_wrapper_t (class) -ida_graph.edge_infos_wrapper_t.__init__ (method) -ida_graph.edge_infos_wrapper_t.clear (method) -ida_graph.edge_layout_point_t (class) -ida_graph.edge_layout_point_t.__eq__ (method) -ida_graph.edge_layout_point_t.__init__ (method) -ida_graph.edge_layout_point_t.__ne__ (method) -ida_graph.edge_layout_point_t.compare (method) -ida_graph.edge_layout_point_t.e (variable) -ida_graph.edge_layout_point_t.pidx (variable) -ida_graph.edge_segment_t (class) -ida_graph.edge_segment_t.__init__ (method) -ida_graph.edge_segment_t.__lt__ (method) -ida_graph.edge_segment_t.length (method) -ida_graph.edge_segment_t.toright (method) -ida_graph.edge_t (class) -ida_graph.edge_t.__eq__ (method) -ida_graph.edge_t.__init__ (method) -ida_graph.edge_t.__lt__ (method) -ida_graph.edge_t.__ne__ (method) -ida_graph.edge_t.dst (variable) -ida_graph.edge_t.src (variable) -ida_graph.get_graph_viewer (function) -ida_graph.get_node_info (function) -ida_graph.get_viewer_graph (function) -ida_graph.git_edge (variable) -ida_graph.git_elp (variable) -ida_graph.git_node (variable) -ida_graph.git_none (variable) -ida_graph.git_text (variable) -ida_graph.git_tool (variable) -ida_graph.graph_item_t (class) -ida_graph.graph_item_t.__init__ (method) -ida_graph.graph_item_t.b (variable) -ida_graph.graph_item_t.e (variable) -ida_graph.graph_item_t.elp (variable) -ida_graph.graph_item_t.is_edge (method) -ida_graph.graph_item_t.is_node (method) -ida_graph.graph_item_t.n (variable) -ida_graph.graph_item_t.p (variable) -ida_graph.graph_item_t.type (variable) -ida_graph.graph_node_visitor_t (class) -ida_graph.graph_node_visitor_t.__disown__ (method) -ida_graph.graph_node_visitor_t.__init__ (method) -ida_graph.graph_node_visitor_t.is_forbidden_edge (method) -ida_graph.graph_node_visitor_t.is_visited (method) -ida_graph.graph_node_visitor_t.reinit (method) -ida_graph.graph_node_visitor_t.set_visited (method) -ida_graph.graph_node_visitor_t.visit_node (method) -ida_graph.graph_path_visitor_t (class) -ida_graph.graph_path_visitor_t.__disown__ (method) -ida_graph.graph_path_visitor_t.__init__ (method) -ida_graph.graph_path_visitor_t.path (variable) -ida_graph.graph_path_visitor_t.prune (variable) -ida_graph.graph_path_visitor_t.walk_backward (method) -ida_graph.graph_path_visitor_t.walk_forward (method) -ida_graph.graph_visitor_t (class) -ida_graph.graph_visitor_t.__disown__ (method) -ida_graph.graph_visitor_t.__init__ (method) -ida_graph.graph_visitor_t.visit_edge (method) -ida_graph.graph_visitor_t.visit_node (method) -ida_graph.grcode_calculating_layout (variable) -ida_graph.grcode_center_on (variable) -ida_graph.grcode_change_group_visibility (variable) -ida_graph.grcode_changed_graph (variable) -ida_graph.grcode_clear (variable) -ida_graph.grcode_clicked (variable) -ida_graph.grcode_create_circle_layout (variable) -ida_graph.grcode_create_digraph_layout (variable) -ida_graph.grcode_create_disasm_graph1 (variable) -ida_graph.grcode_create_disasm_graph2 (variable) -ida_graph.grcode_create_graph_viewer (variable) -ida_graph.grcode_create_group (variable) -ida_graph.grcode_create_mutable_graph (variable) -ida_graph.grcode_create_tree_layout (variable) -ida_graph.grcode_create_user_graph_place (variable) -ida_graph.grcode_creating_group (variable) -ida_graph.grcode_dblclicked (variable) -ida_graph.grcode_del_custom_layout (variable) -ida_graph.grcode_del_node_info (variable) -ida_graph.grcode_delete_group (variable) -ida_graph.grcode_delete_mutable_graph (variable) -ida_graph.grcode_deleting_group (variable) -ida_graph.grcode_destroyed (variable) -ida_graph.grcode_edge_infos_wrapper_clear (variable) -ida_graph.grcode_edge_infos_wrapper_copy (variable) -ida_graph.grcode_empty (variable) -ida_graph.grcode_find_subgraph_node (variable) -ida_graph.grcode_fit_window (variable) -ida_graph.grcode_get_curnode (variable) -ida_graph.grcode_get_custom_layout (variable) -ida_graph.grcode_get_gli (variable) -ida_graph.grcode_get_graph_groups (variable) -ida_graph.grcode_get_graph_viewer (variable) -ida_graph.grcode_get_node_info (variable) -ida_graph.grcode_get_node_representative (variable) -ida_graph.grcode_get_selection (variable) -ida_graph.grcode_get_viewer_graph (variable) -ida_graph.grcode_gotfocus (variable) -ida_graph.grcode_group_visibility (variable) -ida_graph.grcode_is_visible_node (variable) -ida_graph.grcode_layout_calculated (variable) -ida_graph.grcode_lostfocus (variable) -ida_graph.grcode_node_qty (variable) -ida_graph.grcode_nrect (variable) -ida_graph.grcode_refresh_viewer (variable) -ida_graph.grcode_set_custom_layout (variable) -ida_graph.grcode_set_edge (variable) -ida_graph.grcode_set_gli (variable) -ida_graph.grcode_set_graph_groups (variable) -ida_graph.grcode_set_node_info (variable) -ida_graph.grcode_set_titlebar_height (variable) -ida_graph.grcode_set_viewer_graph (variable) -ida_graph.grcode_user_draw (variable) -ida_graph.grcode_user_hint (variable) -ida_graph.grcode_user_refresh (variable) -ida_graph.grcode_user_size (variable) -ida_graph.grcode_user_text (variable) -ida_graph.grcode_user_title (variable) -ida_graph.grcode_viewer_create_groups_vec (variable) -ida_graph.grcode_viewer_delete_groups_vec (variable) -ida_graph.grcode_viewer_groups_visibility_vec (variable) -ida_graph.group_crinfo_t (class) -ida_graph.group_crinfo_t.__init__ (method) -ida_graph.interval_t (class) -ida_graph.interval_t.__eq__ (method) -ida_graph.interval_t.__init__ (method) -ida_graph.interval_t.__ne__ (method) -ida_graph.interval_t.contains (method) -ida_graph.interval_t.empty (method) -ida_graph.interval_t.intersect (method) -ida_graph.interval_t.length (method) -ida_graph.interval_t.make_union (method) -ida_graph.interval_t.move_by (method) -ida_graph.mutable_graph_t (class) -ida_graph.mutable_graph_t.__init__ (method) -ida_graph.mutable_graph_t.add_edge (method) -ida_graph.mutable_graph_t.add_node (method) -ida_graph.mutable_graph_t.belongs (variable) -ida_graph.mutable_graph_t.calc_group_ea (method) -ida_graph.mutable_graph_t.change_group_visibility (method) -ida_graph.mutable_graph_t.create_digraph_layout (method) -ida_graph.mutable_graph_t.create_group (method) -ida_graph.mutable_graph_t.del_custom_layout (method) -ida_graph.mutable_graph_t.del_edge (method) -ida_graph.mutable_graph_t.del_node (method) -ida_graph.mutable_graph_t.delete_group (method) -ida_graph.mutable_graph_t.empty (method) -ida_graph.mutable_graph_t.exists (method) -ida_graph.mutable_graph_t.get_custom_layout (method) -ida_graph.mutable_graph_t.get_first_subgraph_node (method) -ida_graph.mutable_graph_t.get_graph_groups (method) -ida_graph.mutable_graph_t.get_next_subgraph_node (method) -ida_graph.mutable_graph_t.get_node_group (method) -ida_graph.mutable_graph_t.get_node_representative (method) -ida_graph.mutable_graph_t.gid (variable) -ida_graph.mutable_graph_t.is_collapsed_node (method) -ida_graph.mutable_graph_t.is_deleted_node (method) -ida_graph.mutable_graph_t.is_displayable_node (method) -ida_graph.mutable_graph_t.is_dot_node (method) -ida_graph.mutable_graph_t.is_group_node (method) -ida_graph.mutable_graph_t.is_simple_node (method) -ida_graph.mutable_graph_t.is_subgraph_node (method) -ida_graph.mutable_graph_t.is_uncollapsed_node (method) -ida_graph.mutable_graph_t.is_user_graph (method) -ida_graph.mutable_graph_t.is_visible_node (method) -ida_graph.mutable_graph_t.node_flags (variable) -ida_graph.mutable_graph_t.node_qty (method) -ida_graph.mutable_graph_t.npred (method) -ida_graph.mutable_graph_t.nsucc (method) -ida_graph.mutable_graph_t.pred (method) -ida_graph.mutable_graph_t.predset (method) -ida_graph.mutable_graph_t.redo_layout (method) -ida_graph.mutable_graph_t.refresh (method) -ida_graph.mutable_graph_t.replace_edge (method) -ida_graph.mutable_graph_t.reset (method) -ida_graph.mutable_graph_t.resize (method) -ida_graph.mutable_graph_t.set_custom_layout (method) -ida_graph.mutable_graph_t.set_deleted_node (method) -ida_graph.mutable_graph_t.set_edge (method) -ida_graph.mutable_graph_t.set_graph_groups (method) -ida_graph.mutable_graph_t.set_node_group (method) -ida_graph.mutable_graph_t.set_nrect (method) -ida_graph.mutable_graph_t.size (method) -ida_graph.mutable_graph_t.succ (method) -ida_graph.mutable_graph_t.succset (method) -ida_graph.node_info_t (class) -ida_graph.node_info_t.__init__ (method) -ida_graph.node_info_t.bg_color (variable) -ida_graph.node_info_t.ea (variable) -ida_graph.node_info_t.flags (variable) -ida_graph.node_info_t.frame_color (variable) -ida_graph.node_info_t.get_flags_for_valid (method) -ida_graph.node_info_t.text (variable) -ida_graph.node_info_t.valid_bg_color (method) -ida_graph.node_info_t.valid_ea (method) -ida_graph.node_info_t.valid_flags (method) -ida_graph.node_info_t.valid_frame_color (method) -ida_graph.node_info_t.valid_text (method) -ida_graph.node_layout_t (class) -ida_graph.node_layout_t.__eq__ (method) -ida_graph.node_layout_t.__getitem__ (method) -ida_graph.node_layout_t.__init__ (method) -ida_graph.node_layout_t.__len__ (method) -ida_graph.node_layout_t.__ne__ (method) -ida_graph.node_layout_t.__setitem__ (method) -ida_graph.node_layout_t._del (method) -ida_graph.node_layout_t.add_unique (method) -ida_graph.node_layout_t.at (method) -ida_graph.node_layout_t.begin (method) -ida_graph.node_layout_t.capacity (method) -ida_graph.node_layout_t.clear (method) -ida_graph.node_layout_t.empty (method) -ida_graph.node_layout_t.end (method) -ida_graph.node_layout_t.erase (method) -ida_graph.node_layout_t.extract (method) -ida_graph.node_layout_t.find (method) -ida_graph.node_layout_t.grow (method) -ida_graph.node_layout_t.has (method) -ida_graph.node_layout_t.inject (method) -ida_graph.node_layout_t.insert (method) -ida_graph.node_layout_t.pop_back (method) -ida_graph.node_layout_t.push_back (method) -ida_graph.node_layout_t.qclear (method) -ida_graph.node_layout_t.reserve (method) -ida_graph.node_layout_t.resize (method) -ida_graph.node_layout_t.size (method) -ida_graph.node_layout_t.swap (method) -ida_graph.node_layout_t.truncate (method) -ida_graph.node_ordering_t (class) -ida_graph.node_ordering_t.__init__ (method) -ida_graph.node_ordering_t.clear (method) -ida_graph.node_ordering_t.clr (method) -ida_graph.node_ordering_t.node (method) -ida_graph.node_ordering_t.order (method) -ida_graph.node_ordering_t.resize (method) -ida_graph.node_ordering_t.set (method) -ida_graph.node_ordering_t.size (method) -ida_graph.point_t (class) -ida_graph.point_t.__eq__ (method) -ida_graph.point_t.__init__ (method) -ida_graph.point_t.__ne__ (method) -ida_graph.point_t.add (method) -ida_graph.point_t.negate (method) -ida_graph.point_t.sub (method) -ida_graph.pointseq_t (class) -ida_graph.pointseq_t.__init__ (method) -ida_graph.pointvec_t (class) -ida_graph.pointvec_t.__eq__ (method) -ida_graph.pointvec_t.__getitem__ (method) -ida_graph.pointvec_t.__init__ (method) -ida_graph.pointvec_t.__len__ (method) -ida_graph.pointvec_t.__ne__ (method) -ida_graph.pointvec_t.__setitem__ (method) -ida_graph.pointvec_t._del (method) -ida_graph.pointvec_t.add_unique (method) -ida_graph.pointvec_t.at (method) -ida_graph.pointvec_t.begin (method) -ida_graph.pointvec_t.capacity (method) -ida_graph.pointvec_t.clear (method) -ida_graph.pointvec_t.empty (method) -ida_graph.pointvec_t.end (method) -ida_graph.pointvec_t.erase (method) -ida_graph.pointvec_t.extract (method) -ida_graph.pointvec_t.find (method) -ida_graph.pointvec_t.grow (method) -ida_graph.pointvec_t.has (method) -ida_graph.pointvec_t.inject (method) -ida_graph.pointvec_t.insert (method) -ida_graph.pointvec_t.pop_back (method) -ida_graph.pointvec_t.push_back (method) -ida_graph.pointvec_t.qclear (method) -ida_graph.pointvec_t.reserve (method) -ida_graph.pointvec_t.resize (method) -ida_graph.pointvec_t.size (method) -ida_graph.pointvec_t.swap (method) -ida_graph.pointvec_t.truncate (method) -ida_graph.pyg_close (function) -ida_graph.pyg_select_node (function) -ida_graph.pyg_show (function) -ida_graph.rect_t (class) -ida_graph.rect_t.__eq__ (method) -ida_graph.rect_t.__init__ (method) -ida_graph.rect_t.__ne__ (method) -ida_graph.rect_t.area (method) -ida_graph.rect_t.bottomright (method) -ida_graph.rect_t.center (method) -ida_graph.rect_t.contains (method) -ida_graph.rect_t.empty (method) -ida_graph.rect_t.grow (method) -ida_graph.rect_t.height (method) -ida_graph.rect_t.intersect (method) -ida_graph.rect_t.is_intersection_empty (method) -ida_graph.rect_t.make_union (method) -ida_graph.rect_t.move_by (method) -ida_graph.rect_t.move_to (method) -ida_graph.rect_t.topleft (method) -ida_graph.rect_t.width (method) -ida_graph.refresh_viewer (function) -ida_graph.row_info_t (class) -ida_graph.row_info_t.__init__ (method) -ida_graph.row_info_t.bottom (variable) -ida_graph.row_info_t.height (method) -ida_graph.row_info_t.nodes (variable) -ida_graph.row_info_t.top (variable) -ida_graph.screen_graph_selection_base_t (class) -ida_graph.screen_graph_selection_base_t.__eq__ (method) -ida_graph.screen_graph_selection_base_t.__getitem__ (method) -ida_graph.screen_graph_selection_base_t.__init__ (method) -ida_graph.screen_graph_selection_base_t.__len__ (method) -ida_graph.screen_graph_selection_base_t.__ne__ (method) -ida_graph.screen_graph_selection_base_t.__setitem__ (method) -ida_graph.screen_graph_selection_base_t._del (method) -ida_graph.screen_graph_selection_base_t.add_unique (method) -ida_graph.screen_graph_selection_base_t.at (method) -ida_graph.screen_graph_selection_base_t.begin (method) -ida_graph.screen_graph_selection_base_t.capacity (method) -ida_graph.screen_graph_selection_base_t.clear (method) -ida_graph.screen_graph_selection_base_t.empty (method) -ida_graph.screen_graph_selection_base_t.end (method) -ida_graph.screen_graph_selection_base_t.erase (method) -ida_graph.screen_graph_selection_base_t.extract (method) -ida_graph.screen_graph_selection_base_t.find (method) -ida_graph.screen_graph_selection_base_t.grow (method) -ida_graph.screen_graph_selection_base_t.has (method) -ida_graph.screen_graph_selection_base_t.inject (method) -ida_graph.screen_graph_selection_base_t.insert (method) -ida_graph.screen_graph_selection_base_t.pop_back (method) -ida_graph.screen_graph_selection_base_t.push_back (method) -ida_graph.screen_graph_selection_base_t.qclear (method) -ida_graph.screen_graph_selection_base_t.reserve (method) -ida_graph.screen_graph_selection_base_t.resize (method) -ida_graph.screen_graph_selection_base_t.size (method) -ida_graph.screen_graph_selection_base_t.swap (method) -ida_graph.screen_graph_selection_base_t.truncate (method) -ida_graph.screen_graph_selection_t (class) -ida_graph.screen_graph_selection_t.__init__ (method) -ida_graph.screen_graph_selection_t.add (method) -ida_graph.screen_graph_selection_t.add_node (method) -ida_graph.screen_graph_selection_t.add_point (method) -ida_graph.screen_graph_selection_t.del_node (method) -ida_graph.screen_graph_selection_t.del_point (method) -ida_graph.screen_graph_selection_t.has (method) -ida_graph.screen_graph_selection_t.items_count (method) -ida_graph.screen_graph_selection_t.nodes_count (method) -ida_graph.screen_graph_selection_t.points_count (method) -ida_graph.screen_graph_selection_t.sub (method) -ida_graph.selection_item_t (class) -ida_graph.selection_item_t.__eq__ (method) -ida_graph.selection_item_t.__init__ (method) -ida_graph.selection_item_t.__lt__ (method) -ida_graph.selection_item_t.__ne__ (method) -ida_graph.selection_item_t.compare (method) -ida_graph.selection_item_t.elp (variable) -ida_graph.selection_item_t.is_node (variable) -ida_graph.selection_item_t.node (variable) -ida_graph.set_node_info (function) -ida_graph.set_viewer_graph (function) -ida_graph.user_graph_place_t (class) -ida_graph.user_graph_place_t.__init__ (method) -ida_graph.viewer_attach_menu_item (function) -ida_graph.viewer_center_on (function) -ida_graph.viewer_create_groups (function) -ida_graph.viewer_del_node_info (function) -ida_graph.viewer_delete_groups (function) -ida_graph.viewer_fit_window (function) -ida_graph.viewer_get_curnode (function) -ida_graph.viewer_get_gli (function) -ida_graph.viewer_get_node_info (function) -ida_graph.viewer_get_selection (function) -ida_graph.viewer_set_gli (function) -ida_graph.viewer_set_groups_visibility (function) -ida_graph.viewer_set_node_info (function) -ida_graph.viewer_set_titlebar_height (function) -ida_ida (module) -ida_ida.ABI_8ALIGN4 (variable) -ida_ida.ABI_BIGARG_ALIGN (variable) -ida_ida.ABI_GCC_LAYOUT (variable) -ida_ida.ABI_HARD_FLOAT (variable) -ida_ida.ABI_HUGEARG_ALIGN (variable) -ida_ida.ABI_MAP_STKARGS (variable) -ida_ida.ABI_PACK_STKARGS (variable) -ida_ida.ABI_SET_BY_USER (variable) -ida_ida.ABI_STACK_LDBL (variable) -ida_ida.ABI_STACK_VARARGS (variable) -ida_ida.AF2_DOEH (variable) -ida_ida.AF2_DORTTI (variable) -ida_ida.AF2_MACRO (variable) -ida_ida.AF2_MERGESTR (variable) -ida_ida.AF_ANORET (variable) -ida_ida.AF_CHKUNI (variable) -ida_ida.AF_CODE (variable) -ida_ida.AF_DATOFF (variable) -ida_ida.AF_DOCODE (variable) -ida_ida.AF_DODATA (variable) -ida_ida.AF_DREFOFF (variable) -ida_ida.AF_FINAL (variable) -ida_ida.AF_FIXUP (variable) -ida_ida.AF_FLIRT (variable) -ida_ida.AF_FTAIL (variable) -ida_ida.AF_HFLIRT (variable) -ida_ida.AF_IMMOFF (variable) -ida_ida.AF_JFUNC (variable) -ida_ida.AF_JUMPTBL (variable) -ida_ida.AF_LVAR (variable) -ida_ida.AF_MARKCODE (variable) -ida_ida.AF_MEMFUNC (variable) -ida_ida.AF_NULLSUB (variable) -ida_ida.AF_PROC (variable) -ida_ida.AF_PROCPTR (variable) -ida_ida.AF_PURDAT (variable) -ida_ida.AF_REGARG (variable) -ida_ida.AF_SIGCMT (variable) -ida_ida.AF_SIGMLT (variable) -ida_ida.AF_STKARG (variable) -ida_ida.AF_STRLIT (variable) -ida_ida.AF_TRACE (variable) -ida_ida.AF_TRFUNC (variable) -ida_ida.AF_UNK (variable) -ida_ida.AF_USED (variable) -ida_ida.AF_VERSP (variable) -ida_ida.DEMNAM_CMNT (variable) -ida_ida.DEMNAM_FIRST (variable) -ida_ida.DEMNAM_GCC3 (variable) -ida_ida.DEMNAM_MASK (variable) -ida_ida.DEMNAM_NAME (variable) -ida_ida.DEMNAM_NONE (variable) -ida_ida.IDAINFO_TAG_SIZE (variable) -ida_ida.IDB_COMPRESSED (variable) -ida_ida.IDB_PACKED (variable) -ida_ida.IDB_UNPACKED (variable) -ida_ida.IDI_BITMAP (variable) -ida_ida.IDI_BYTEARRAY (variable) -ida_ida.IDI_CSTR (variable) -ida_ida.IDI_DEC (variable) -ida_ida.IDI_EA_HEX (variable) -ida_ida.IDI_HASH (variable) -ida_ida.IDI_HEX (variable) -ida_ida.IDI_HLPSTRUC (variable) -ida_ida.IDI_INC (variable) -ida_ida.IDI_MAP_VAL (variable) -ida_ida.IDI_NOMERGE (variable) -ida_ida.IDI_ONOFF (variable) -ida_ida.IDI_QSTRING (variable) -ida_ida.IDI_READONLY (variable) -ida_ida.IDI_SCALAR (variable) -ida_ida.IDI_STRUCFLD (variable) -ida_ida.INFFL_ALLASM (variable) -ida_ida.INFFL_AUTO (variable) -ida_ida.INFFL_CHKOPS (variable) -ida_ida.INFFL_GRAPH_VIEW (variable) -ida_ida.INFFL_LOADIDC (variable) -ida_ida.INFFL_NMOPS (variable) -ida_ida.INFFL_NOUSER (variable) -ida_ida.INFFL_READONLY (variable) -ida_ida.INF_ABINAME (variable) -ida_ida.INF_ARCHIVE_PATH (variable) -ida_ida.INF_CRC32 (variable) -ida_ida.INF_CTIME (variable) -ida_ida.INF_C_MACROS (variable) -ida_ida.INF_DBG_BINPATHS (variable) -ida_ida.INF_DUALOP_GRAPH (variable) -ida_ida.INF_DUALOP_TEXT (variable) -ida_ida.INF_ELAPSED (variable) -ida_ida.INF_FILE_FORMAT_NAME (variable) -ida_ida.INF_FSIZE (variable) -ida_ida.INF_GROUPS (variable) -ida_ida.INF_H_PATH (variable) -ida_ida.INF_IDA_VERSION (variable) -ida_ida.INF_IDSNODE (variable) -ida_ida.INF_IMAGEBASE (variable) -ida_ida.INF_INCLUDE (variable) -ida_ida.INF_INITIAL_VERSION (variable) -ida_ida.INF_MD5 (variable) -ida_ida.INF_NOPENS (variable) -ida_ida.INF_NOTEPAD (variable) -ida_ida.INF_OUTFILEENC (variable) -ida_ida.INF_PROBLEMS (variable) -ida_ida.INF_SELECTORS (variable) -ida_ida.INF_SHA256 (variable) -ida_ida.INF_SRCDBG_PATHS (variable) -ida_ida.INF_SRCDBG_UNDESIRED (variable) -ida_ida.INF_STR_ENCODINGS (variable) -ida_ida.LFLG_64BIT (variable) -ida_ida.LFLG_COMPRESS (variable) -ida_ida.LFLG_DBG_NOPATH (variable) -ida_ida.LFLG_FLAT_OFF32 (variable) -ida_ida.LFLG_IS_DLL (variable) -ida_ida.LFLG_KERNMODE (variable) -ida_ida.LFLG_MSF (variable) -ida_ida.LFLG_PACK (variable) -ida_ida.LFLG_PC_FLAT (variable) -ida_ida.LFLG_PC_FPP (variable) -ida_ida.LFLG_SNAPSHOT (variable) -ida_ida.LFLG_WIDE_HBF (variable) -ida_ida.LMT_EMPTY (variable) -ida_ida.LMT_THICK (variable) -ida_ida.LMT_THIN (variable) -ida_ida.LN_AUTO (variable) -ida_ida.LN_NORMAL (variable) -ida_ida.LN_PUBLIC (variable) -ida_ida.LN_WEAK (variable) -ida_ida.OFLG_GEN_ASSUME (variable) -ida_ida.OFLG_GEN_NULL (variable) -ida_ida.OFLG_GEN_ORG (variable) -ida_ida.OFLG_GEN_TRYBLKS (variable) -ida_ida.OFLG_LZERO (variable) -ida_ida.OFLG_PREF_SEG (variable) -ida_ida.OFLG_SHOW_AUTO (variable) -ida_ida.OFLG_SHOW_PREF (variable) -ida_ida.OFLG_SHOW_VOID (variable) -ida_ida.PREF_FNCOFF (variable) -ida_ida.PREF_PFXTRUNC (variable) -ida_ida.PREF_SEGADR (variable) -ida_ida.PREF_STACK (variable) -ida_ida.SCF_ALLCMT (variable) -ida_ida.SCF_LINNUM (variable) -ida_ida.SCF_NOCMT (variable) -ida_ida.SCF_RPTCMT (variable) -ida_ida.SCF_SHHID_FUNC (variable) -ida_ida.SCF_SHHID_ITEM (variable) -ida_ida.SCF_SHHID_SEGM (variable) -ida_ida.SCF_TESTMODE (variable) -ida_ida.STRF_AUTO (variable) -ida_ida.STRF_COMMENT (variable) -ida_ida.STRF_GEN (variable) -ida_ida.STRF_SAVECASE (variable) -ida_ida.STRF_SERIAL (variable) -ida_ida.STRF_UNICODE (variable) -ida_ida.STT_CUR (variable) -ida_ida.STT_DBG (variable) -ida_ida.STT_MM (variable) -ida_ida.STT_VA (variable) -ida_ida.SW_SEGXRF (variable) -ida_ida.SW_XRFFNC (variable) -ida_ida.SW_XRFMRK (variable) -ida_ida.SW_XRFVAL (variable) -ida_ida.UA_MAXOP (variable) -ida_ida.VLD_AUTO_REPAIR (variable) -ida_ida.VLD_DIALOG (variable) -ida_ida.VLD_SILENT (variable) -ida_ida.__make_idainfo_accessors (function) -ida_ida.__make_idainfo_bound (function) -ida_ida.__make_idainfo_bound.__func (function) -ida_ida.__make_idainfo_getter (function) -ida_ida.__set_module_dynattrs (function) -ida_ida.__wrap_hooks_callback (function) -ida_ida.__wrap_hooks_callback.__wrapper (function) -ida_ida.calc_default_idaplace_flags (function) -ida_ida.compiler_info_t (class) -ida_ida.compiler_info_t.__init__ (method) -ida_ida.compiler_info_t.cm (variable) -ida_ida.compiler_info_t.defalign (variable) -ida_ida.compiler_info_t.id (variable) -ida_ida.compiler_info_t.size_b (variable) -ida_ida.compiler_info_t.size_e (variable) -ida_ida.compiler_info_t.size_i (variable) -ida_ida.compiler_info_t.size_l (variable) -ida_ida.compiler_info_t.size_ldbl (variable) -ida_ida.compiler_info_t.size_ll (variable) -ida_ida.compiler_info_t.size_s (variable) -ida_ida.delinf (function) -ida_ida.f_AIXAR (variable) -ida_ida.f_AOUT (variable) -ida_ida.f_AR (variable) -ida_ida.f_BIN (variable) -ida_ida.f_COFF (variable) -ida_ida.f_COM (variable) -ida_ida.f_COM_old (variable) -ida_ida.f_DRV (variable) -ida_ida.f_ELF (variable) -ida_ida.f_EXE (variable) -ida_ida.f_EXE_old (variable) -ida_ida.f_HEX (variable) -ida_ida.f_LE (variable) -ida_ida.f_LOADER (variable) -ida_ida.f_LX (variable) -ida_ida.f_MACHO (variable) -ida_ida.f_MEX (variable) -ida_ida.f_NLM (variable) -ida_ida.f_OMF (variable) -ida_ida.f_OMFLIB (variable) -ida_ida.f_PE (variable) -ida_ida.f_PRC (variable) -ida_ida.f_PSXOBJ (variable) -ida_ida.f_SREC (variable) -ida_ida.f_W32RUN (variable) -ida_ida.f_WIN (variable) -ida_ida.f_ZIP (variable) -ida_ida.get_dbctx_id (function) -ida_ida.get_dbctx_qty (function) -ida_ida.getinf_str (function) -ida_ida.idainfo (class) -ida_ida.idainfo.__init__ (method) -ida_ida.idainfo._get_lflags (method) -ida_ida.idainfo._set_lflags (method) -ida_ida.idainfo.abibits (variable) -ida_ida.idainfo.af (variable) -ida_ida.idainfo.af2 (variable) -ida_ida.idainfo.appcall_options (variable) -ida_ida.idainfo.apptype (variable) -ida_ida.idainfo.asmtype (variable) -ida_ida.idainfo.baseaddr (variable) -ida_ida.idainfo.bin_prefix_size (variable) -ida_ida.idainfo.cc (variable) -ida_ida.idainfo.cmt_indent (variable) -ida_ida.idainfo.database_change_count (variable) -ida_ida.idainfo.datatypes (variable) -ida_ida.idainfo.demnames (variable) -ida_ida.idainfo.filetype (variable) -ida_ida.idainfo.get_abiname (method) -ida_ida.idainfo.highoff (variable) -ida_ida.idainfo.indent (variable) -ida_ida.idainfo.lenxref (variable) -ida_ida.idainfo.lflags (variable) -ida_ida.idainfo.listnames (variable) -ida_ida.idainfo.long_demnames (variable) -ida_ida.idainfo.lowoff (variable) -ida_ida.idainfo.main (variable) -ida_ida.idainfo.margin (variable) -ida_ida.idainfo.max_autoname_len (variable) -ida_ida.idainfo.max_ea (variable) -ida_ida.idainfo.maxref (variable) -ida_ida.idainfo.min_ea (variable) -ida_ida.idainfo.nametype (variable) -ida_ida.idainfo.omax_ea (variable) -ida_ida.idainfo.omin_ea (variable) -ida_ida.idainfo.ostype (variable) -ida_ida.idainfo.outflags (variable) -ida_ida.idainfo.procname (variable) -ida_ida.idainfo.refcmtnum (variable) -ida_ida.idainfo.s_cmtflg (variable) -ida_ida.idainfo.s_genflags (variable) -ida_ida.idainfo.s_limiter (variable) -ida_ida.idainfo.s_prefflag (variable) -ida_ida.idainfo.s_xrefflag (variable) -ida_ida.idainfo.short_demnames (variable) -ida_ida.idainfo.specsegs (variable) -ida_ida.idainfo.start_cs (variable) -ida_ida.idainfo.start_ea (variable) -ida_ida.idainfo.start_ip (variable) -ida_ida.idainfo.start_sp (variable) -ida_ida.idainfo.start_ss (variable) -ida_ida.idainfo.strlit_break (variable) -ida_ida.idainfo.strlit_flags (variable) -ida_ida.idainfo.strlit_pref (variable) -ida_ida.idainfo.strlit_sernum (variable) -ida_ida.idainfo.strlit_zeroes (variable) -ida_ida.idainfo.strtype (variable) -ida_ida.idainfo.tag (variable) -ida_ida.idainfo.type_xrefnum (variable) -ida_ida.idainfo.version (variable) -ida_ida.idainfo.xrefnum (variable) -ida_ida.idainfo_is_32bit (function) -ida_ida.idbattr_info_t (class) -ida_ida.idbattr_info_t.__init__ (method) -ida_ida.idbattr_info_t.__lt__ (method) -ida_ida.idbattr_info_t.bitmask (variable) -ida_ida.idbattr_info_t.has_individual_node (method) -ida_ida.idbattr_info_t.hashname (method) -ida_ida.idbattr_info_t.individual_node (variable) -ida_ida.idbattr_info_t.is_bitfield (method) -ida_ida.idbattr_info_t.is_bitmap (method) -ida_ida.idbattr_info_t.is_boolean (method) -ida_ida.idbattr_info_t.is_buf_var (method) -ida_ida.idbattr_info_t.is_bytearray (method) -ida_ida.idbattr_info_t.is_cstr (method) -ida_ida.idbattr_info_t.is_decimal (method) -ida_ida.idbattr_info_t.is_hash (method) -ida_ida.idbattr_info_t.is_hexadecimal (method) -ida_ida.idbattr_info_t.is_incremented (method) -ida_ida.idbattr_info_t.is_node_altval (method) -ida_ida.idbattr_info_t.is_node_blob (method) -ida_ida.idbattr_info_t.is_node_supval (method) -ida_ida.idbattr_info_t.is_node_valobj (method) -ida_ida.idbattr_info_t.is_node_var (method) -ida_ida.idbattr_info_t.is_onoff (method) -ida_ida.idbattr_info_t.is_qstring (method) -ida_ida.idbattr_info_t.is_readonly_var (method) -ida_ida.idbattr_info_t.is_scalar_var (method) -ida_ida.idbattr_info_t.is_struc_field (method) -ida_ida.idbattr_info_t.is_val_mapped (method) -ida_ida.idbattr_info_t.maxsize (variable) -ida_ida.idbattr_info_t.name (variable) -ida_ida.idbattr_info_t.offset (variable) -ida_ida.idbattr_info_t.ridx (method) -ida_ida.idbattr_info_t.str_false (method) -ida_ida.idbattr_info_t.str_true (method) -ida_ida.idbattr_info_t.tag (variable) -ida_ida.idbattr_info_t.use_hlpstruc (method) -ida_ida.idbattr_info_t.vmap (variable) -ida_ida.idbattr_info_t.width (variable) -ida_ida.idbattr_valmap_t (class) -ida_ida.idbattr_valmap_t.__init__ (method) -ida_ida.inf_abi_set_by_user (function) -ida_ida.inf_allow_non_matched_ops (function) -ida_ida.inf_allow_sigmulti (function) -ida_ida.inf_append_sigcmt (function) -ida_ida.inf_big_arg_align (function) -ida_ida.inf_check_manual_ops (function) -ida_ida.inf_check_unicode_strlits (function) -ida_ida.inf_coagulate_code (function) -ida_ida.inf_coagulate_data (function) -ida_ida.inf_compress_idb (function) -ida_ida.inf_create_all_xrefs (function) -ida_ida.inf_create_func_from_call (function) -ida_ida.inf_create_func_from_ptr (function) -ida_ida.inf_create_func_tails (function) -ida_ida.inf_create_jump_tables (function) -ida_ida.inf_create_off_on_dref (function) -ida_ida.inf_create_off_using_fixup (function) -ida_ida.inf_create_strlit_on_xref (function) -ida_ida.inf_data_offset (function) -ida_ida.inf_dbg_no_store_path (function) -ida_ida.inf_decode_fpp (function) -ida_ida.inf_del_no_xref_insns (function) -ida_ida.inf_final_pass (function) -ida_ida.inf_full_sp_ana (function) -ida_ida.inf_gen_assume (function) -ida_ida.inf_gen_lzero (function) -ida_ida.inf_gen_null (function) -ida_ida.inf_gen_org (function) -ida_ida.inf_gen_tryblks (function) -ida_ida.inf_get_abibits (function) -ida_ida.inf_get_af (function) -ida_ida.inf_get_af2 (function) -ida_ida.inf_get_af2_low (function) -ida_ida.inf_get_af_high (function) -ida_ida.inf_get_af_low (function) -ida_ida.inf_get_app_bitness (function) -ida_ida.inf_get_appcall_options (function) -ida_ida.inf_get_apptype (function) -ida_ida.inf_get_asmtype (function) -ida_ida.inf_get_baseaddr (function) -ida_ida.inf_get_bin_prefix_size (function) -ida_ida.inf_get_cc (function) -ida_ida.inf_get_cc_cm (function) -ida_ida.inf_get_cc_defalign (function) -ida_ida.inf_get_cc_id (function) -ida_ida.inf_get_cc_size_b (function) -ida_ida.inf_get_cc_size_e (function) -ida_ida.inf_get_cc_size_i (function) -ida_ida.inf_get_cc_size_l (function) -ida_ida.inf_get_cc_size_ldbl (function) -ida_ida.inf_get_cc_size_ll (function) -ida_ida.inf_get_cc_size_s (function) -ida_ida.inf_get_cmt_indent (function) -ida_ida.inf_get_cmtflg (function) -ida_ida.inf_get_database_change_count (function) -ida_ida.inf_get_datatypes (function) -ida_ida.inf_get_demname_form (function) -ida_ida.inf_get_demnames (function) -ida_ida.inf_get_filetype (function) -ida_ida.inf_get_genflags (function) -ida_ida.inf_get_highoff (function) -ida_ida.inf_get_indent (function) -ida_ida.inf_get_lenxref (function) -ida_ida.inf_get_lflags (function) -ida_ida.inf_get_limiter (function) -ida_ida.inf_get_listnames (function) -ida_ida.inf_get_long_demnames (function) -ida_ida.inf_get_lowoff (function) -ida_ida.inf_get_main (function) -ida_ida.inf_get_margin (function) -ida_ida.inf_get_max_autoname_len (function) -ida_ida.inf_get_max_ea (function) -ida_ida.inf_get_maxref (function) -ida_ida.inf_get_min_ea (function) -ida_ida.inf_get_nametype (function) -ida_ida.inf_get_netdelta (function) -ida_ida.inf_get_omax_ea (function) -ida_ida.inf_get_omin_ea (function) -ida_ida.inf_get_ostype (function) -ida_ida.inf_get_outflags (function) -ida_ida.inf_get_pack_mode (function) -ida_ida.inf_get_prefflag (function) -ida_ida.inf_get_privrange (function) -ida_ida.inf_get_privrange_end_ea (function) -ida_ida.inf_get_privrange_start_ea (function) -ida_ida.inf_get_procname (function) -ida_ida.inf_get_refcmtnum (function) -ida_ida.inf_get_short_demnames (function) -ida_ida.inf_get_specsegs (function) -ida_ida.inf_get_start_cs (function) -ida_ida.inf_get_start_ea (function) -ida_ida.inf_get_start_ip (function) -ida_ida.inf_get_start_sp (function) -ida_ida.inf_get_start_ss (function) -ida_ida.inf_get_strlit_break (function) -ida_ida.inf_get_strlit_flags (function) -ida_ida.inf_get_strlit_pref (function) -ida_ida.inf_get_strlit_sernum (function) -ida_ida.inf_get_strlit_zeroes (function) -ida_ida.inf_get_strtype (function) -ida_ida.inf_get_type_xrefnum (function) -ida_ida.inf_get_version (function) -ida_ida.inf_get_xrefflag (function) -ida_ida.inf_get_xrefnum (function) -ida_ida.inf_guess_func_type (function) -ida_ida.inf_handle_eh (function) -ida_ida.inf_handle_rtti (function) -ida_ida.inf_hide_comments (function) -ida_ida.inf_hide_libfuncs (function) -ida_ida.inf_huge_arg_align (function) -ida_ida.inf_inc_database_change_count (function) -ida_ida.inf_is_16bit (function) -ida_ida.inf_is_32bit_exactly (function) -ida_ida.inf_is_32bit_or_higher (function) -ida_ida.inf_is_64bit (function) -ida_ida.inf_is_auto_enabled (function) -ida_ida.inf_is_be (function) -ida_ida.inf_is_dll (function) -ida_ida.inf_is_flat_off32 (function) -ida_ida.inf_is_graph_view (function) -ida_ida.inf_is_hard_float (function) -ida_ida.inf_is_kernel_mode (function) -ida_ida.inf_is_limiter_empty (function) -ida_ida.inf_is_limiter_thick (function) -ida_ida.inf_is_limiter_thin (function) -ida_ida.inf_is_mem_aligned4 (function) -ida_ida.inf_is_snapshot (function) -ida_ida.inf_is_wide_high_byte_first (function) -ida_ida.inf_like_binary (function) -ida_ida.inf_line_pref_with_seg (function) -ida_ida.inf_loading_idc (function) -ida_ida.inf_macros_enabled (function) -ida_ida.inf_map_stkargs (function) -ida_ida.inf_mark_code (function) -ida_ida.inf_merge_strlits (function) -ida_ida.inf_no_store_user_info (function) -ida_ida.inf_noflow_to_data (function) -ida_ida.inf_noret_ana (function) -ida_ida.inf_op_offset (function) -ida_ida.inf_pack_idb (function) -ida_ida.inf_pack_stkargs (function) -ida_ida.inf_postinc_strlit_sernum (function) -ida_ida.inf_prefix_show_funcoff (function) -ida_ida.inf_prefix_show_segaddr (function) -ida_ida.inf_prefix_show_stack (function) -ida_ida.inf_prefix_truncate_opcode_bytes (function) -ida_ida.inf_propagate_regargs (function) -ida_ida.inf_propagate_stkargs (function) -ida_ida.inf_readonly_idb (function) -ida_ida.inf_rename_jumpfunc (function) -ida_ida.inf_rename_nullsub (function) -ida_ida.inf_set_32bit (function) -ida_ida.inf_set_64bit (function) -ida_ida.inf_set_abi_set_by_user (function) -ida_ida.inf_set_abibits (function) -ida_ida.inf_set_af (function) -ida_ida.inf_set_af2 (function) -ida_ida.inf_set_af2_low (function) -ida_ida.inf_set_af_high (function) -ida_ida.inf_set_af_low (function) -ida_ida.inf_set_allow_non_matched_ops (function) -ida_ida.inf_set_allow_sigmulti (function) -ida_ida.inf_set_app_bitness (function) -ida_ida.inf_set_appcall_options (function) -ida_ida.inf_set_append_sigcmt (function) -ida_ida.inf_set_apptype (function) -ida_ida.inf_set_asmtype (function) -ida_ida.inf_set_auto_enabled (function) -ida_ida.inf_set_baseaddr (function) -ida_ida.inf_set_be (function) -ida_ida.inf_set_big_arg_align (function) -ida_ida.inf_set_bin_prefix_size (function) -ida_ida.inf_set_cc (function) -ida_ida.inf_set_cc_cm (function) -ida_ida.inf_set_cc_defalign (function) -ida_ida.inf_set_cc_id (function) -ida_ida.inf_set_cc_size_b (function) -ida_ida.inf_set_cc_size_e (function) -ida_ida.inf_set_cc_size_i (function) -ida_ida.inf_set_cc_size_l (function) -ida_ida.inf_set_cc_size_ldbl (function) -ida_ida.inf_set_cc_size_ll (function) -ida_ida.inf_set_cc_size_s (function) -ida_ida.inf_set_check_manual_ops (function) -ida_ida.inf_set_check_unicode_strlits (function) -ida_ida.inf_set_cmt_indent (function) -ida_ida.inf_set_cmtflg (function) -ida_ida.inf_set_coagulate_code (function) -ida_ida.inf_set_coagulate_data (function) -ida_ida.inf_set_compress_idb (function) -ida_ida.inf_set_create_all_xrefs (function) -ida_ida.inf_set_create_func_from_call (function) -ida_ida.inf_set_create_func_from_ptr (function) -ida_ida.inf_set_create_func_tails (function) -ida_ida.inf_set_create_jump_tables (function) -ida_ida.inf_set_create_off_on_dref (function) -ida_ida.inf_set_create_off_using_fixup (function) -ida_ida.inf_set_create_strlit_on_xref (function) -ida_ida.inf_set_data_offset (function) -ida_ida.inf_set_database_change_count (function) -ida_ida.inf_set_datatypes (function) -ida_ida.inf_set_dbg_no_store_path (function) -ida_ida.inf_set_decode_fpp (function) -ida_ida.inf_set_del_no_xref_insns (function) -ida_ida.inf_set_demnames (function) -ida_ida.inf_set_dll (function) -ida_ida.inf_set_filetype (function) -ida_ida.inf_set_final_pass (function) -ida_ida.inf_set_flat_off32 (function) -ida_ida.inf_set_full_sp_ana (function) -ida_ida.inf_set_gen_assume (function) -ida_ida.inf_set_gen_lzero (function) -ida_ida.inf_set_gen_null (function) -ida_ida.inf_set_gen_org (function) -ida_ida.inf_set_gen_tryblks (function) -ida_ida.inf_set_genflags (function) -ida_ida.inf_set_graph_view (function) -ida_ida.inf_set_guess_func_type (function) -ida_ida.inf_set_handle_eh (function) -ida_ida.inf_set_handle_rtti (function) -ida_ida.inf_set_hard_float (function) -ida_ida.inf_set_hide_comments (function) -ida_ida.inf_set_hide_libfuncs (function) -ida_ida.inf_set_highoff (function) -ida_ida.inf_set_huge_arg_align (function) -ida_ida.inf_set_indent (function) -ida_ida.inf_set_kernel_mode (function) -ida_ida.inf_set_lenxref (function) -ida_ida.inf_set_lflags (function) -ida_ida.inf_set_limiter (function) -ida_ida.inf_set_limiter_empty (function) -ida_ida.inf_set_limiter_thick (function) -ida_ida.inf_set_limiter_thin (function) -ida_ida.inf_set_line_pref_with_seg (function) -ida_ida.inf_set_listnames (function) -ida_ida.inf_set_loading_idc (function) -ida_ida.inf_set_long_demnames (function) -ida_ida.inf_set_lowoff (function) -ida_ida.inf_set_macros_enabled (function) -ida_ida.inf_set_main (function) -ida_ida.inf_set_map_stkargs (function) -ida_ida.inf_set_margin (function) -ida_ida.inf_set_mark_code (function) -ida_ida.inf_set_max_autoname_len (function) -ida_ida.inf_set_max_ea (function) -ida_ida.inf_set_maxref (function) -ida_ida.inf_set_mem_aligned4 (function) -ida_ida.inf_set_merge_strlits (function) -ida_ida.inf_set_min_ea (function) -ida_ida.inf_set_nametype (function) -ida_ida.inf_set_netdelta (function) -ida_ida.inf_set_no_store_user_info (function) -ida_ida.inf_set_noflow_to_data (function) -ida_ida.inf_set_noret_ana (function) -ida_ida.inf_set_omax_ea (function) -ida_ida.inf_set_omin_ea (function) -ida_ida.inf_set_op_offset (function) -ida_ida.inf_set_ostype (function) -ida_ida.inf_set_outflags (function) -ida_ida.inf_set_pack_idb (function) -ida_ida.inf_set_pack_mode (function) -ida_ida.inf_set_pack_stkargs (function) -ida_ida.inf_set_prefflag (function) -ida_ida.inf_set_prefix_show_funcoff (function) -ida_ida.inf_set_prefix_show_segaddr (function) -ida_ida.inf_set_prefix_show_stack (function) -ida_ida.inf_set_prefix_truncate_opcode_bytes (function) -ida_ida.inf_set_privrange (function) -ida_ida.inf_set_privrange_end_ea (function) -ida_ida.inf_set_privrange_start_ea (function) -ida_ida.inf_set_procname (function) -ida_ida.inf_set_propagate_regargs (function) -ida_ida.inf_set_propagate_stkargs (function) -ida_ida.inf_set_readonly_idb (function) -ida_ida.inf_set_refcmtnum (function) -ida_ida.inf_set_rename_jumpfunc (function) -ida_ida.inf_set_rename_nullsub (function) -ida_ida.inf_set_short_demnames (function) -ida_ida.inf_set_should_create_stkvars (function) -ida_ida.inf_set_should_trace_sp (function) -ida_ida.inf_set_show_all_comments (function) -ida_ida.inf_set_show_auto (function) -ida_ida.inf_set_show_hidden_funcs (function) -ida_ida.inf_set_show_hidden_insns (function) -ida_ida.inf_set_show_hidden_segms (function) -ida_ida.inf_set_show_line_pref (function) -ida_ida.inf_set_show_repeatables (function) -ida_ida.inf_set_show_src_linnum (function) -ida_ida.inf_set_show_void (function) -ida_ida.inf_set_show_xref_fncoff (function) -ida_ida.inf_set_show_xref_seg (function) -ida_ida.inf_set_show_xref_tmarks (function) -ida_ida.inf_set_show_xref_val (function) -ida_ida.inf_set_snapshot (function) -ida_ida.inf_set_specsegs (function) -ida_ida.inf_set_stack_ldbl (function) -ida_ida.inf_set_stack_varargs (function) -ida_ida.inf_set_start_cs (function) -ida_ida.inf_set_start_ea (function) -ida_ida.inf_set_start_ip (function) -ida_ida.inf_set_start_sp (function) -ida_ida.inf_set_start_ss (function) -ida_ida.inf_set_strlit_autocmt (function) -ida_ida.inf_set_strlit_break (function) -ida_ida.inf_set_strlit_flags (function) -ida_ida.inf_set_strlit_name_bit (function) -ida_ida.inf_set_strlit_names (function) -ida_ida.inf_set_strlit_pref (function) -ida_ida.inf_set_strlit_savecase (function) -ida_ida.inf_set_strlit_serial_names (function) -ida_ida.inf_set_strlit_sernum (function) -ida_ida.inf_set_strlit_zeroes (function) -ida_ida.inf_set_strtype (function) -ida_ida.inf_set_trace_flow (function) -ida_ida.inf_set_truncate_on_del (function) -ida_ida.inf_set_type_xrefnum (function) -ida_ida.inf_set_unicode_strlits (function) -ida_ida.inf_set_use_allasm (function) -ida_ida.inf_set_use_flirt (function) -ida_ida.inf_set_use_gcc_layout (function) -ida_ida.inf_set_version (function) -ida_ida.inf_set_wide_high_byte_first (function) -ida_ida.inf_set_xrefflag (function) -ida_ida.inf_set_xrefnum (function) -ida_ida.inf_should_create_stkvars (function) -ida_ida.inf_should_trace_sp (function) -ida_ida.inf_show_all_comments (function) -ida_ida.inf_show_auto (function) -ida_ida.inf_show_hidden_funcs (function) -ida_ida.inf_show_hidden_insns (function) -ida_ida.inf_show_hidden_segms (function) -ida_ida.inf_show_line_pref (function) -ida_ida.inf_show_repeatables (function) -ida_ida.inf_show_src_linnum (function) -ida_ida.inf_show_void (function) -ida_ida.inf_show_xref_fncoff (function) -ida_ida.inf_show_xref_seg (function) -ida_ida.inf_show_xref_tmarks (function) -ida_ida.inf_show_xref_val (function) -ida_ida.inf_stack_ldbl (function) -ida_ida.inf_stack_varargs (function) -ida_ida.inf_strlit_autocmt (function) -ida_ida.inf_strlit_name_bit (function) -ida_ida.inf_strlit_names (function) -ida_ida.inf_strlit_savecase (function) -ida_ida.inf_strlit_serial_names (function) -ida_ida.inf_test_mode (function) -ida_ida.inf_trace_flow (function) -ida_ida.inf_truncate_on_del (function) -ida_ida.inf_unicode_strlits (function) -ida_ida.inf_use_allasm (function) -ida_ida.inf_use_flirt (function) -ida_ida.inf_use_gcc_layout (function) -ida_ida.is_database_busy (function) -ida_ida.is_filetype_like_binary (function) -ida_ida.move_privrange (function) -ida_ida.switch_dbctx (function) -ida_ida.to_ea (function) -ida_ida.validate_idb (function) -ida_idaapi (module) -ida_idaapi.IDAPython_ExecScript (function) -ida_idaapi.IDAPython_ExecSystem (function) -ida_idaapi.IDAPython_FormatExc (function) -ida_idaapi.IDAPython_LoadProcMod (function) -ida_idaapi.IDAPython_UnLoadProcMod (function) -ida_idaapi.IDAPython_displayhook (class) -ida_idaapi.IDAPython_displayhook.__init__ (method) -ida_idaapi.IDAPython_displayhook._print_hex (method) -ida_idaapi.IDAPython_displayhook.displayhook (method) -ida_idaapi.IDAPython_displayhook.format_item (method) -ida_idaapi.IDAPython_displayhook.format_seq (method) -ida_idaapi.NW_CLOSEIDB (variable) -ida_idaapi.NW_INITIDA (variable) -ida_idaapi.NW_OPENIDB (variable) -ida_idaapi.NW_REMOVE (variable) -ida_idaapi.NW_TERMIDA (variable) -ida_idaapi.PY_ICID_BYREF (variable) -ida_idaapi.PY_ICID_INT64 (variable) -ida_idaapi.PY_ICID_OPAQUE (variable) -ida_idaapi.PyIdc_cvt_int64__ (class) -ida_idaapi.PyIdc_cvt_int64__.__add__ (method) -ida_idaapi.PyIdc_cvt_int64__.__div__ (method) -ida_idaapi.PyIdc_cvt_int64__.__init__ (method) -ida_idaapi.PyIdc_cvt_int64__.__mul__ (method) -ida_idaapi.PyIdc_cvt_int64__.__op (method) -ida_idaapi.PyIdc_cvt_int64__.__radd__ (method) -ida_idaapi.PyIdc_cvt_int64__.__rdiv__ (method) -ida_idaapi.PyIdc_cvt_int64__.__rmul__ (method) -ida_idaapi.PyIdc_cvt_int64__.__rsub__ (method) -ida_idaapi.PyIdc_cvt_int64__.__sub__ (method) -ida_idaapi.PyIdc_cvt_refclass__ (class) -ida_idaapi.PyIdc_cvt_refclass__.__init__ (method) -ida_idaapi.PyIdc_cvt_refclass__.cstr (method) -ida_idaapi.ST_OVER_DEBUG_SEG (variable) -ida_idaapi.ST_OVER_LIB_FUNC (variable) -ida_idaapi.TRUNC (function) -ida_idaapi.__IDAPython_Completion_Util (class) -ida_idaapi.__IDAPython_Completion_Util.__call__ (method) -ida_idaapi.__IDAPython_Completion_Util.__init__ (method) -ida_idaapi.__IDAPython_Completion_Util.debug (method) -ida_idaapi.__IDAPython_Completion_Util.dir_namespace (method) -ida_idaapi.__IDAPython_Completion_Util.get_candidates (method) -ida_idaapi.__IDAPython_Completion_Util.maybe_extend_syntactically (method) -ida_idaapi.__install_excepthook (function) -ida_idaapi._bounded_getitem_iterator (function) -ida_idaapi._listify_types (function) -ida_idaapi._make_missed_695bwcompat_property (function) -ida_idaapi._make_missed_695bwcompat_property._getter (function) -ida_idaapi._make_missed_695bwcompat_property._setter (function) -ida_idaapi._make_one_time_warning_message (function) -ida_idaapi._make_one_time_warning_message.f (function) -ida_idaapi._qvector_back (function) -ida_idaapi._qvector_front (function) -ida_idaapi._replace_module_function (function) -ida_idaapi.as_UTF16 (function) -ida_idaapi.as_cstr (function) -ida_idaapi.as_int32 (function) -ida_idaapi.as_signed (function) -ida_idaapi.as_uint32 (function) -ida_idaapi.copy_bits (function) -ida_idaapi.disable_script_timeout (function) -ida_idaapi.enable_extlang_python (function) -ida_idaapi.enable_python_cli (function) -ida_idaapi.format_basestring (function) -ida_idaapi.get_inf_structure (function) -ida_idaapi.loader_input_t (class) -ida_idaapi.loader_input_t.__init__ (method) -ida_idaapi.loader_input_t.close (method) -ida_idaapi.loader_input_t.file2base (method) -ida_idaapi.loader_input_t.filename (method) -ida_idaapi.loader_input_t.from_capsule (method) -ida_idaapi.loader_input_t.from_fp (method) -ida_idaapi.loader_input_t.from_linput (method) -ida_idaapi.loader_input_t.get_byte (method) -ida_idaapi.loader_input_t.get_linput (method) -ida_idaapi.loader_input_t.gets (method) -ida_idaapi.loader_input_t.getz (method) -ida_idaapi.loader_input_t.open (method) -ida_idaapi.loader_input_t.open_memory (method) -ida_idaapi.loader_input_t.opened (method) -ida_idaapi.loader_input_t.read (method) -ida_idaapi.loader_input_t.readbytes (method) -ida_idaapi.loader_input_t.seek (method) -ida_idaapi.loader_input_t.set_linput (method) -ida_idaapi.loader_input_t.size (method) -ida_idaapi.loader_input_t.tell (method) -ida_idaapi.loader_input_t_from_capsule (function) -ida_idaapi.loader_input_t_from_fp (function) -ida_idaapi.loader_input_t_from_linput (function) -ida_idaapi.notify_when (function) -ida_idaapi.object_t (class) -ida_idaapi.object_t.__getitem__ (method) -ida_idaapi.object_t.__init__ (method) -ida_idaapi.parse_command_line3 (function) -ida_idaapi.plugin_t (class) -ida_idaapi.plugin_t.run (method) -ida_idaapi.plugin_t.term (method) -ida_idaapi.plugmod_t (class) -ida_idaapi.py_clinked_object_t (class) -ida_idaapi.py_clinked_object_t.__del__ (method) -ida_idaapi.py_clinked_object_t.__init__ (method) -ida_idaapi.py_clinked_object_t._create_clink (method) -ida_idaapi.py_clinked_object_t._del_clink (method) -ida_idaapi.py_clinked_object_t._free (method) -ida_idaapi.py_clinked_object_t._get_clink_ptr (method) -ida_idaapi.py_clinked_object_t.assign (method) -ida_idaapi.py_clinked_object_t.clink (variable) -ida_idaapi.py_clinked_object_t.clink_ptr (variable) -ida_idaapi.py_clinked_object_t.copy (method) -ida_idaapi.pycim_get_widget (function) -ida_idaapi.pycim_view_close (function) -ida_idaapi.pygc_create_groups (function) -ida_idaapi.pygc_delete_groups (function) -ida_idaapi.pygc_refresh (function) -ida_idaapi.pygc_set_groups_visibility (function) -ida_idaapi.pyidc_cvt_helper__ (class) -ida_idaapi.pyidc_cvt_helper__.__get_value (method) -ida_idaapi.pyidc_cvt_helper__.__init__ (method) -ida_idaapi.pyidc_cvt_helper__.__set_value (method) -ida_idaapi.pyidc_opaque_object_t (class) -ida_idaapi.replfun (function) -ida_idaapi.require (function) -ida_idaapi.set_script_timeout (function) -ida_idaapi.struct_unpack (function) -ida_idc (module) -ida_idc.get_mark_comment (function) -ida_idc.get_marked_pos (function) -ida_idc.mark_position (function) -ida_idd (module) -ida_idd.APPCALL_DEBEV (variable) -ida_idd.APPCALL_MANUAL (variable) -ida_idd.APPCALL_TIMEOUT (variable) -ida_idd.Appcall__ (class) -ida_idd.Appcall__.APPCALL_DEBEV (variable) -ida_idd.Appcall__.APPCALL_MANUAL (variable) -ida_idd.Appcall__.APPCALL_TIMEOUT (variable) -ida_idd.Appcall__.Consts (variable) -ida_idd.Appcall__.UTF16 (method) -ida_idd.Appcall__.__get_consts (method) -ida_idd.Appcall__.__getattr__ (method) -ida_idd.Appcall__.__getitem__ (method) -ida_idd.Appcall__.__init__ (method) -ida_idd.Appcall__.__name_or_ea (method) -ida_idd.Appcall__.__typedecl_or_tinfo (method) -ida_idd.Appcall__.array (method) -ida_idd.Appcall__.buffer (method) -ida_idd.Appcall__.byref (method) -ida_idd.Appcall__.cleanup_appcall (method) -ida_idd.Appcall__.cstr (method) -ida_idd.Appcall__.get_appcall_options (method) -ida_idd.Appcall__.int64 (method) -ida_idd.Appcall__.obj (method) -ida_idd.Appcall__.proto (method) -ida_idd.Appcall__.set_appcall_options (method) -ida_idd.Appcall__.typedobj (method) -ida_idd.Appcall__.valueof (method) -ida_idd.Appcall_array__ (class) -ida_idd.Appcall_array__.__init__ (method) -ida_idd.Appcall_array__.pack (method) -ida_idd.Appcall_array__.try_to_convert_to_list (method) -ida_idd.Appcall_array__.unpack (method) -ida_idd.Appcall_callable__ (class) -ida_idd.Appcall_callable__.__call__ (method) -ida_idd.Appcall_callable__.__get_ea (method) -ida_idd.Appcall_callable__.__get_fields (method) -ida_idd.Appcall_callable__.__get_options (method) -ida_idd.Appcall_callable__.__get_size (method) -ida_idd.Appcall_callable__.__get_tif (method) -ida_idd.Appcall_callable__.__get_timeout (method) -ida_idd.Appcall_callable__.__get_type (method) -ida_idd.Appcall_callable__.__init__ (method) -ida_idd.Appcall_callable__.__set_ea (method) -ida_idd.Appcall_callable__.__set_options (method) -ida_idd.Appcall_callable__.__set_timeout (method) -ida_idd.Appcall_callable__.ea (variable) -ida_idd.Appcall_callable__.fields (variable) -ida_idd.Appcall_callable__.options (variable) -ida_idd.Appcall_callable__.retrieve (method) -ida_idd.Appcall_callable__.size (variable) -ida_idd.Appcall_callable__.store (method) -ida_idd.Appcall_callable__.tif (variable) -ida_idd.Appcall_callable__.timeout (variable) -ida_idd.Appcall_callable__.type (variable) -ida_idd.Appcall_consts__ (class) -ida_idd.Appcall_consts__.__getattr__ (method) -ida_idd.Appcall_consts__.__init__ (method) -ida_idd.BPT_BAD_ADDR (variable) -ida_idd.BPT_BAD_ALIGN (variable) -ida_idd.BPT_BAD_LEN (variable) -ida_idd.BPT_BAD_TYPE (variable) -ida_idd.BPT_DEFAULT (variable) -ida_idd.BPT_EXEC (variable) -ida_idd.BPT_INTERNAL_ERR (variable) -ida_idd.BPT_OK (variable) -ida_idd.BPT_PAGE_OK (variable) -ida_idd.BPT_RDWR (variable) -ida_idd.BPT_READ (variable) -ida_idd.BPT_READ_ERROR (variable) -ida_idd.BPT_SKIP (variable) -ida_idd.BPT_SOFT (variable) -ida_idd.BPT_TOO_MANY (variable) -ida_idd.BPT_WRITE (variable) -ida_idd.BPT_WRITE_ERROR (variable) -ida_idd.BREAKPOINT (variable) -ida_idd.DBG_FLAG_ADD_ENVS (variable) -ida_idd.DBG_FLAG_ANYSIZE_HWBPT (variable) -ida_idd.DBG_FLAG_CAN_CONT_BPT (variable) -ida_idd.DBG_FLAG_CLEAN_EXIT (variable) -ida_idd.DBG_FLAG_CONNSTRING (variable) -ida_idd.DBG_FLAG_DEBTHREAD (variable) -ida_idd.DBG_FLAG_DEBUG_DLL (variable) -ida_idd.DBG_FLAG_DONT_DISTURB (variable) -ida_idd.DBG_FLAG_EXITSHOTOK (variable) -ida_idd.DBG_FLAG_FAKE_ATTACH (variable) -ida_idd.DBG_FLAG_FAKE_MEMORY (variable) -ida_idd.DBG_FLAG_FAST_STEP (variable) -ida_idd.DBG_FLAG_HWDATBPT_ONE (variable) -ida_idd.DBG_FLAG_LAZY_WATCHPTS (variable) -ida_idd.DBG_FLAG_LOWCNDS (variable) -ida_idd.DBG_FLAG_MANMEMINFO (variable) -ida_idd.DBG_FLAG_MERGE_ENVS (variable) -ida_idd.DBG_FLAG_NEEDPORT (variable) -ida_idd.DBG_FLAG_NOHOST (variable) -ida_idd.DBG_FLAG_NOPARAMETERS (variable) -ida_idd.DBG_FLAG_NOPASSWORD (variable) -ida_idd.DBG_FLAG_NOSTARTDIR (variable) -ida_idd.DBG_FLAG_PREFER_SWBPTS (variable) -ida_idd.DBG_FLAG_REMOTE (variable) -ida_idd.DBG_FLAG_SAFE (variable) -ida_idd.DBG_FLAG_SMALLBLKS (variable) -ida_idd.DBG_FLAG_TRACER_MODULE (variable) -ida_idd.DBG_FLAG_USE_SREGS (variable) -ida_idd.DBG_FLAG_VIRTHREADS (variable) -ida_idd.DBG_HAS_APPCALL (variable) -ida_idd.DBG_HAS_ATTACH_PROCESS (variable) -ida_idd.DBG_HAS_CHECK_BPT (variable) -ida_idd.DBG_HAS_DETACH_PROCESS (variable) -ida_idd.DBG_HAS_GET_PROCESSES (variable) -ida_idd.DBG_HAS_MAP_ADDRESS (variable) -ida_idd.DBG_HAS_OPEN_FILE (variable) -ida_idd.DBG_HAS_REQUEST_PAUSE (variable) -ida_idd.DBG_HAS_REXEC (variable) -ida_idd.DBG_HAS_SET_EXCEPTION_INFO (variable) -ida_idd.DBG_HAS_SET_RESUME_MODE (variable) -ida_idd.DBG_HAS_THREAD_CONTINUE (variable) -ida_idd.DBG_HAS_THREAD_GET_SREG_BASE (variable) -ida_idd.DBG_HAS_THREAD_SUSPEND (variable) -ida_idd.DBG_HAS_UPDATE_CALL_STACK (variable) -ida_idd.DBG_HIDE_WINDOW (variable) -ida_idd.DBG_NO_ASLR (variable) -ida_idd.DBG_NO_TRACE (variable) -ida_idd.DBG_PROC_32BIT (variable) -ida_idd.DBG_PROC_64BIT (variable) -ida_idd.DBG_PROC_IS_DLL (variable) -ida_idd.DBG_PROC_IS_GUI (variable) -ida_idd.DBG_RESMOD_STEP_HANDLE (variable) -ida_idd.DBG_RESMOD_STEP_INTO (variable) -ida_idd.DBG_RESMOD_STEP_OUT (variable) -ida_idd.DBG_RESMOD_STEP_OVER (variable) -ida_idd.DBG_RESMOD_STEP_SRCINTO (variable) -ida_idd.DBG_RESMOD_STEP_SRCOUT (variable) -ida_idd.DBG_RESMOD_STEP_SRCOVER (variable) -ida_idd.DBG_RESMOD_STEP_USER (variable) -ida_idd.DBG_SUSPENDED (variable) -ida_idd.DEBUGGER_ID_6811_EMULATOR (variable) -ida_idd.DEBUGGER_ID_ARM_IPHONE_USER (variable) -ida_idd.DEBUGGER_ID_ARM_LINUX_USER (variable) -ida_idd.DEBUGGER_ID_ARM_MACOS_USER (variable) -ida_idd.DEBUGGER_ID_DALVIK_USER (variable) -ida_idd.DEBUGGER_ID_GDB_USER (variable) -ida_idd.DEBUGGER_ID_TRACE_REPLAYER (variable) -ida_idd.DEBUGGER_ID_WINDBG (variable) -ida_idd.DEBUGGER_ID_X86_DOSBOX_EMULATOR (variable) -ida_idd.DEBUGGER_ID_X86_IA32_BOCHS (variable) -ida_idd.DEBUGGER_ID_X86_IA32_LINUX_USER (variable) -ida_idd.DEBUGGER_ID_X86_IA32_MACOSX_USER (variable) -ida_idd.DEBUGGER_ID_X86_IA32_WIN32_USER (variable) -ida_idd.DEBUGGER_ID_X86_PIN_TRACER (variable) -ida_idd.DEBUGGER_ID_XNU_USER (variable) -ida_idd.DRC_CRC (variable) -ida_idd.DRC_ERROR (variable) -ida_idd.DRC_EVENTS (variable) -ida_idd.DRC_FAILED (variable) -ida_idd.DRC_IDBSEG (variable) -ida_idd.DRC_NETERR (variable) -ida_idd.DRC_NOCHG (variable) -ida_idd.DRC_NOFILE (variable) -ida_idd.DRC_NONE (variable) -ida_idd.DRC_NOPROC (variable) -ida_idd.DRC_OK (variable) -ida_idd.EXCEPTION (variable) -ida_idd.EXC_BREAK (variable) -ida_idd.EXC_HANDLE (variable) -ida_idd.EXC_MSG (variable) -ida_idd.EXC_SILENT (variable) -ida_idd.IDD_INTERFACE_VERSION (variable) -ida_idd.INFORMATION (variable) -ida_idd.LIB_LOADED (variable) -ida_idd.LIB_UNLOADED (variable) -ida_idd.NO_EVENT (variable) -ida_idd.NO_PROCESS (variable) -ida_idd.NO_THREAD (variable) -ida_idd.PROCESS_ATTACHED (variable) -ida_idd.PROCESS_DETACHED (variable) -ida_idd.PROCESS_EXITED (variable) -ida_idd.PROCESS_STARTED (variable) -ida_idd.PROCESS_SUSPENDED (variable) -ida_idd.REGISTER_ADDRESS (variable) -ida_idd.REGISTER_CS (variable) -ida_idd.REGISTER_CUSTFMT (variable) -ida_idd.REGISTER_FP (variable) -ida_idd.REGISTER_IP (variable) -ida_idd.REGISTER_NOLF (variable) -ida_idd.REGISTER_READONLY (variable) -ida_idd.REGISTER_SP (variable) -ida_idd.REGISTER_SS (variable) -ida_idd.RESMOD_HANDLE (variable) -ida_idd.RESMOD_INTO (variable) -ida_idd.RESMOD_NONE (variable) -ida_idd.RESMOD_OUT (variable) -ida_idd.RESMOD_OVER (variable) -ida_idd.RESMOD_SRCINTO (variable) -ida_idd.RESMOD_SRCOUT (variable) -ida_idd.RESMOD_SRCOVER (variable) -ida_idd.RESMOD_USER (variable) -ida_idd.RVT_FLOAT (variable) -ida_idd.RVT_INT (variable) -ida_idd.RVT_UNAVAILABLE (variable) -ida_idd.STEP (variable) -ida_idd.THREAD_EXITED (variable) -ida_idd.THREAD_STARTED (variable) -ida_idd.TRACE_FULL (variable) -ida_idd.appcall (function) -ida_idd.bptaddr_t (class) -ida_idd.bptaddr_t.__init__ (method) -ida_idd.bptaddr_t.hea (variable) -ida_idd.bptaddr_t.kea (variable) -ida_idd.call_stack_info_t (class) -ida_idd.call_stack_info_t.__eq__ (method) -ida_idd.call_stack_info_t.__init__ (method) -ida_idd.call_stack_info_t.__ne__ (method) -ida_idd.call_stack_info_t.callea (variable) -ida_idd.call_stack_info_t.fp (variable) -ida_idd.call_stack_info_t.funcea (variable) -ida_idd.call_stack_info_t.funcok (variable) -ida_idd.call_stack_info_vec_t (class) -ida_idd.call_stack_info_vec_t.__eq__ (method) -ida_idd.call_stack_info_vec_t.__getitem__ (method) -ida_idd.call_stack_info_vec_t.__init__ (method) -ida_idd.call_stack_info_vec_t.__len__ (method) -ida_idd.call_stack_info_vec_t.__ne__ (method) -ida_idd.call_stack_info_vec_t.__setitem__ (method) -ida_idd.call_stack_info_vec_t._del (method) -ida_idd.call_stack_info_vec_t.add_unique (method) -ida_idd.call_stack_info_vec_t.at (method) -ida_idd.call_stack_info_vec_t.begin (method) -ida_idd.call_stack_info_vec_t.capacity (method) -ida_idd.call_stack_info_vec_t.clear (method) -ida_idd.call_stack_info_vec_t.empty (method) -ida_idd.call_stack_info_vec_t.end (method) -ida_idd.call_stack_info_vec_t.erase (method) -ida_idd.call_stack_info_vec_t.extract (method) -ida_idd.call_stack_info_vec_t.find (method) -ida_idd.call_stack_info_vec_t.grow (method) -ida_idd.call_stack_info_vec_t.has (method) -ida_idd.call_stack_info_vec_t.inject (method) -ida_idd.call_stack_info_vec_t.insert (method) -ida_idd.call_stack_info_vec_t.pop_back (method) -ida_idd.call_stack_info_vec_t.push_back (method) -ida_idd.call_stack_info_vec_t.qclear (method) -ida_idd.call_stack_info_vec_t.reserve (method) -ida_idd.call_stack_info_vec_t.resize (method) -ida_idd.call_stack_info_vec_t.size (method) -ida_idd.call_stack_info_vec_t.swap (method) -ida_idd.call_stack_info_vec_t.truncate (method) -ida_idd.call_stack_t (class) -ida_idd.call_stack_t.__init__ (method) -ida_idd.can_exc_continue (function) -ida_idd.cleanup_appcall (function) -ida_idd.dbg_appcall (function) -ida_idd.dbg_get_memory_info (function) -ida_idd.dbg_get_name (function) -ida_idd.dbg_get_registers (function) -ida_idd.dbg_get_thread_sreg_base (function) -ida_idd.dbg_read_memory (function) -ida_idd.dbg_write_memory (function) -ida_idd.debapp_attrs_t (class) -ida_idd.debapp_attrs_t.__init__ (method) -ida_idd.debapp_attrs_t.addrsize (variable) -ida_idd.debapp_attrs_t.cbsize (variable) -ida_idd.debapp_attrs_t.platform (variable) -ida_idd.debug_event_t (class) -ida_idd.debug_event_t.__init__ (method) -ida_idd.debug_event_t.bpt (method) -ida_idd.debug_event_t.bpt_ea (method) -ida_idd.debug_event_t.clear (method) -ida_idd.debug_event_t.clear_all (method) -ida_idd.debug_event_t.copy (method) -ida_idd.debug_event_t.ea (variable) -ida_idd.debug_event_t.eid (method) -ida_idd.debug_event_t.exc (method) -ida_idd.debug_event_t.exit_code (method) -ida_idd.debug_event_t.handled (variable) -ida_idd.debug_event_t.info (method) -ida_idd.debug_event_t.modinfo (method) -ida_idd.debug_event_t.pid (variable) -ida_idd.debug_event_t.set_bpt (method) -ida_idd.debug_event_t.set_eid (method) -ida_idd.debug_event_t.set_exception (method) -ida_idd.debug_event_t.set_exit_code (method) -ida_idd.debug_event_t.set_info (method) -ida_idd.debug_event_t.set_modinfo (method) -ida_idd.debug_event_t.tid (variable) -ida_idd.debugger_t (class) -ida_idd.debugger_t.__get_bpt_bytes (method) -ida_idd.debugger_t.__get_nregs (method) -ida_idd.debugger_t.__get_regclasses (method) -ida_idd.debugger_t.__get_registers (method) -ida_idd.debugger_t.__init__ (method) -ida_idd.debugger_t.attach_process (method) -ida_idd.debugger_t.bin_search (method) -ida_idd.debugger_t.bpt_bytes (variable) -ida_idd.debugger_t.bpt_size (variable) -ida_idd.debugger_t.cache_block_size (method) -ida_idd.debugger_t.can_continue_from_bpt (method) -ida_idd.debugger_t.can_debug_standalone_dlls (method) -ida_idd.debugger_t.check_bpt (method) -ida_idd.debugger_t.cleanup_appcall (method) -ida_idd.debugger_t.close_file (method) -ida_idd.debugger_t.dbg_enable_trace (method) -ida_idd.debugger_t.default_regclasses (variable) -ida_idd.debugger_t.detach_process (method) -ida_idd.debugger_t.ev_appcall (variable) -ida_idd.debugger_t.ev_attach_process (variable) -ida_idd.debugger_t.ev_bin_search (variable) -ida_idd.debugger_t.ev_check_bpt (variable) -ida_idd.debugger_t.ev_cleanup_appcall (variable) -ida_idd.debugger_t.ev_close_file (variable) -ida_idd.debugger_t.ev_dbg_enable_trace (variable) -ida_idd.debugger_t.ev_detach_process (variable) -ida_idd.debugger_t.ev_eval_lowcnd (variable) -ida_idd.debugger_t.ev_exit_process (variable) -ida_idd.debugger_t.ev_get_debapp_attrs (variable) -ida_idd.debugger_t.ev_get_debmod_extensions (variable) -ida_idd.debugger_t.ev_get_debug_event (variable) -ida_idd.debugger_t.ev_get_memory_info (variable) -ida_idd.debugger_t.ev_get_processes (variable) -ida_idd.debugger_t.ev_get_srcinfo_path (variable) -ida_idd.debugger_t.ev_init_debugger (variable) -ida_idd.debugger_t.ev_is_tracing_enabled (variable) -ida_idd.debugger_t.ev_map_address (variable) -ida_idd.debugger_t.ev_open_file (variable) -ida_idd.debugger_t.ev_read_file (variable) -ida_idd.debugger_t.ev_read_memory (variable) -ida_idd.debugger_t.ev_read_registers (variable) -ida_idd.debugger_t.ev_rebase_if_required_to (variable) -ida_idd.debugger_t.ev_request_pause (variable) -ida_idd.debugger_t.ev_resume (variable) -ida_idd.debugger_t.ev_rexec (variable) -ida_idd.debugger_t.ev_send_ioctl (variable) -ida_idd.debugger_t.ev_set_exception_info (variable) -ida_idd.debugger_t.ev_set_resume_mode (variable) -ida_idd.debugger_t.ev_start_process (variable) -ida_idd.debugger_t.ev_suspended (variable) -ida_idd.debugger_t.ev_term_debugger (variable) -ida_idd.debugger_t.ev_thread_continue (variable) -ida_idd.debugger_t.ev_thread_get_sreg_base (variable) -ida_idd.debugger_t.ev_thread_suspend (variable) -ida_idd.debugger_t.ev_update_bpts (variable) -ida_idd.debugger_t.ev_update_call_stack (variable) -ida_idd.debugger_t.ev_update_lowcnds (variable) -ida_idd.debugger_t.ev_write_file (variable) -ida_idd.debugger_t.ev_write_memory (variable) -ida_idd.debugger_t.ev_write_register (variable) -ida_idd.debugger_t.eval_lowcnd (method) -ida_idd.debugger_t.exit_process (method) -ida_idd.debugger_t.fake_memory (method) -ida_idd.debugger_t.filetype (variable) -ida_idd.debugger_t.flags2 (variable) -ida_idd.debugger_t.get_debapp_attrs (method) -ida_idd.debugger_t.get_debmod_extensions (method) -ida_idd.debugger_t.get_debug_event (method) -ida_idd.debugger_t.get_memory_info (method) -ida_idd.debugger_t.get_processes (method) -ida_idd.debugger_t.get_srcinfo_path (method) -ida_idd.debugger_t.has_appcall (method) -ida_idd.debugger_t.has_attach_process (method) -ida_idd.debugger_t.has_check_bpt (method) -ida_idd.debugger_t.has_detach_process (method) -ida_idd.debugger_t.has_get_processes (method) -ida_idd.debugger_t.has_map_address (method) -ida_idd.debugger_t.has_open_file (method) -ida_idd.debugger_t.has_request_pause (method) -ida_idd.debugger_t.has_rexec (method) -ida_idd.debugger_t.has_set_exception_info (method) -ida_idd.debugger_t.has_set_resume_mode (method) -ida_idd.debugger_t.has_soft_bpt (method) -ida_idd.debugger_t.has_thread_continue (method) -ida_idd.debugger_t.has_thread_get_sreg_base (method) -ida_idd.debugger_t.has_thread_suspend (method) -ida_idd.debugger_t.has_update_call_stack (method) -ida_idd.debugger_t.id (variable) -ida_idd.debugger_t.init_debugger (method) -ida_idd.debugger_t.is_remote (method) -ida_idd.debugger_t.is_resmod_avail (method) -ida_idd.debugger_t.is_safe (method) -ida_idd.debugger_t.is_tracing_enabled (method) -ida_idd.debugger_t.map_address (method) -ida_idd.debugger_t.may_disturb (method) -ida_idd.debugger_t.may_take_exit_snapshot (method) -ida_idd.debugger_t.memory_page_size (variable) -ida_idd.debugger_t.must_have_hostname (method) -ida_idd.debugger_t.name (variable) -ida_idd.debugger_t.nregs (variable) -ida_idd.debugger_t.open_file (method) -ida_idd.debugger_t.processor (variable) -ida_idd.debugger_t.read_file (method) -ida_idd.debugger_t.read_memory (method) -ida_idd.debugger_t.read_registers (method) -ida_idd.debugger_t.rebase_if_required_to (method) -ida_idd.debugger_t.regclasses (variable) -ida_idd.debugger_t.registers (variable) -ida_idd.debugger_t.regs (method) -ida_idd.debugger_t.request_pause (method) -ida_idd.debugger_t.resume (method) -ida_idd.debugger_t.resume_modes (variable) -ida_idd.debugger_t.rexec (method) -ida_idd.debugger_t.send_ioctl (method) -ida_idd.debugger_t.set_exception_info (method) -ida_idd.debugger_t.set_resume_mode (method) -ida_idd.debugger_t.start_process (method) -ida_idd.debugger_t.supports_debthread (method) -ida_idd.debugger_t.supports_lowcnds (method) -ida_idd.debugger_t.suspended (method) -ida_idd.debugger_t.term_debugger (method) -ida_idd.debugger_t.thread_continue (method) -ida_idd.debugger_t.thread_get_sreg_base (method) -ida_idd.debugger_t.thread_suspend (method) -ida_idd.debugger_t.update_bpts (method) -ida_idd.debugger_t.update_call_stack (method) -ida_idd.debugger_t.update_lowcnds (method) -ida_idd.debugger_t.use_memregs (method) -ida_idd.debugger_t.use_sregs (method) -ida_idd.debugger_t.version (variable) -ida_idd.debugger_t.virtual_threads (method) -ida_idd.debugger_t.write_file (method) -ida_idd.debugger_t.write_memory (method) -ida_idd.debugger_t.write_register (method) -ida_idd.dyn_register_info_array (class) -ida_idd.dyn_register_info_array.__getitem__ (method) -ida_idd.dyn_register_info_array.__init__ (method) -ida_idd.dyn_register_info_array.__len__ (method) -ida_idd.dyn_register_info_array.__setitem__ (method) -ida_idd.exception_info_t (class) -ida_idd.exception_info_t.__init__ (method) -ida_idd.exception_info_t.break_on (method) -ida_idd.exception_info_t.code (variable) -ida_idd.exception_info_t.desc (variable) -ida_idd.exception_info_t.flags (variable) -ida_idd.exception_info_t.handle (method) -ida_idd.exception_info_t.name (variable) -ida_idd.excinfo_t (class) -ida_idd.excinfo_t.__init__ (method) -ida_idd.excinfo_t.can_cont (variable) -ida_idd.excinfo_t.code (variable) -ida_idd.excinfo_t.ea (variable) -ida_idd.excinfo_t.info (variable) -ida_idd.excvec_t (class) -ida_idd.excvec_t.__getitem__ (method) -ida_idd.excvec_t.__init__ (method) -ida_idd.excvec_t.__len__ (method) -ida_idd.excvec_t.__setitem__ (method) -ida_idd.excvec_t.at (method) -ida_idd.excvec_t.begin (method) -ida_idd.excvec_t.capacity (method) -ida_idd.excvec_t.clear (method) -ida_idd.excvec_t.empty (method) -ida_idd.excvec_t.end (method) -ida_idd.excvec_t.erase (method) -ida_idd.excvec_t.extract (method) -ida_idd.excvec_t.grow (method) -ida_idd.excvec_t.inject (method) -ida_idd.excvec_t.insert (method) -ida_idd.excvec_t.pop_back (method) -ida_idd.excvec_t.push_back (method) -ida_idd.excvec_t.qclear (method) -ida_idd.excvec_t.reserve (method) -ida_idd.excvec_t.resize (method) -ida_idd.excvec_t.size (method) -ida_idd.excvec_t.swap (method) -ida_idd.excvec_t.truncate (method) -ida_idd.get_dbg (function) -ida_idd.get_event_bpt_hea (function) -ida_idd.get_event_exc_code (function) -ida_idd.get_event_exc_ea (function) -ida_idd.get_event_exc_info (function) -ida_idd.get_event_info (function) -ida_idd.get_event_module_base (function) -ida_idd.get_event_module_name (function) -ida_idd.get_event_module_size (function) -ida_idd.launch_env_t (class) -ida_idd.launch_env_t.__init__ (method) -ida_idd.meminfo_vec_t (class) -ida_idd.meminfo_vec_t.__init__ (method) -ida_idd.meminfo_vec_template_t (class) -ida_idd.meminfo_vec_template_t.__eq__ (method) -ida_idd.meminfo_vec_template_t.__getitem__ (method) -ida_idd.meminfo_vec_template_t.__init__ (method) -ida_idd.meminfo_vec_template_t.__len__ (method) -ida_idd.meminfo_vec_template_t.__ne__ (method) -ida_idd.meminfo_vec_template_t.__setitem__ (method) -ida_idd.meminfo_vec_template_t._del (method) -ida_idd.meminfo_vec_template_t.add_unique (method) -ida_idd.meminfo_vec_template_t.at (method) -ida_idd.meminfo_vec_template_t.begin (method) -ida_idd.meminfo_vec_template_t.capacity (method) -ida_idd.meminfo_vec_template_t.clear (method) -ida_idd.meminfo_vec_template_t.empty (method) -ida_idd.meminfo_vec_template_t.end (method) -ida_idd.meminfo_vec_template_t.erase (method) -ida_idd.meminfo_vec_template_t.extract (method) -ida_idd.meminfo_vec_template_t.find (method) -ida_idd.meminfo_vec_template_t.grow (method) -ida_idd.meminfo_vec_template_t.has (method) -ida_idd.meminfo_vec_template_t.inject (method) -ida_idd.meminfo_vec_template_t.insert (method) -ida_idd.meminfo_vec_template_t.pop_back (method) -ida_idd.meminfo_vec_template_t.push_back (method) -ida_idd.meminfo_vec_template_t.qclear (method) -ida_idd.meminfo_vec_template_t.reserve (method) -ida_idd.meminfo_vec_template_t.resize (method) -ida_idd.meminfo_vec_template_t.size (method) -ida_idd.meminfo_vec_template_t.swap (method) -ida_idd.meminfo_vec_template_t.truncate (method) -ida_idd.memory_info_t (class) -ida_idd.memory_info_t.__eq__ (method) -ida_idd.memory_info_t.__init__ (method) -ida_idd.memory_info_t.__ne__ (method) -ida_idd.memory_info_t.bitness (variable) -ida_idd.memory_info_t.name (variable) -ida_idd.memory_info_t.perm (variable) -ida_idd.memory_info_t.sbase (variable) -ida_idd.memory_info_t.sclass (variable) -ida_idd.modinfo_t (class) -ida_idd.modinfo_t.__init__ (method) -ida_idd.modinfo_t.base (variable) -ida_idd.modinfo_t.name (variable) -ida_idd.modinfo_t.rebase_to (variable) -ida_idd.modinfo_t.size (variable) -ida_idd.process_info_t (class) -ida_idd.process_info_t.__init__ (method) -ida_idd.process_info_t.name (variable) -ida_idd.process_info_t.pid (variable) -ida_idd.procinfo_vec_t (class) -ida_idd.procinfo_vec_t.__getitem__ (method) -ida_idd.procinfo_vec_t.__init__ (method) -ida_idd.procinfo_vec_t.__len__ (method) -ida_idd.procinfo_vec_t.__setitem__ (method) -ida_idd.procinfo_vec_t.at (method) -ida_idd.procinfo_vec_t.begin (method) -ida_idd.procinfo_vec_t.capacity (method) -ida_idd.procinfo_vec_t.clear (method) -ida_idd.procinfo_vec_t.empty (method) -ida_idd.procinfo_vec_t.end (method) -ida_idd.procinfo_vec_t.erase (method) -ida_idd.procinfo_vec_t.extract (method) -ida_idd.procinfo_vec_t.grow (method) -ida_idd.procinfo_vec_t.inject (method) -ida_idd.procinfo_vec_t.insert (method) -ida_idd.procinfo_vec_t.pop_back (method) -ida_idd.procinfo_vec_t.push_back (method) -ida_idd.procinfo_vec_t.qclear (method) -ida_idd.procinfo_vec_t.reserve (method) -ida_idd.procinfo_vec_t.resize (method) -ida_idd.procinfo_vec_t.size (method) -ida_idd.procinfo_vec_t.swap (method) -ida_idd.procinfo_vec_t.truncate (method) -ida_idd.register_info_t (class) -ida_idd.register_info_t.__get_bit_strings (method) -ida_idd.register_info_t.__init__ (method) -ida_idd.register_info_t.bit_strings (variable) -ida_idd.register_info_t.default_bit_strings_mask (variable) -ida_idd.register_info_t.dtype (variable) -ida_idd.register_info_t.flags (variable) -ida_idd.register_info_t.name (variable) -ida_idd.register_info_t.register_class (variable) -ida_idd.regval_t (class) -ida_idd.regval_t.__eq__ (method) -ida_idd.regval_t.__init__ (method) -ida_idd.regval_t.__ne__ (method) -ida_idd.regval_t.bytes (method) -ida_idd.regval_t.clear (method) -ida_idd.regval_t.fval (variable) -ida_idd.regval_t.get_data (method) -ida_idd.regval_t.get_data_size (method) -ida_idd.regval_t.ival (variable) -ida_idd.regval_t.pyval (method) -ida_idd.regval_t.rvtype (variable) -ida_idd.regval_t.set_bytes (method) -ida_idd.regval_t.set_float (method) -ida_idd.regval_t.set_int (method) -ida_idd.regval_t.set_pyval (method) -ida_idd.regval_t.set_unavailable (method) -ida_idd.regval_t.swap (method) -ida_idd.regvals_t (class) -ida_idd.regvals_t.__eq__ (method) -ida_idd.regvals_t.__getitem__ (method) -ida_idd.regvals_t.__init__ (method) -ida_idd.regvals_t.__len__ (method) -ida_idd.regvals_t.__ne__ (method) -ida_idd.regvals_t.__setitem__ (method) -ida_idd.regvals_t._del (method) -ida_idd.regvals_t.add_unique (method) -ida_idd.regvals_t.at (method) -ida_idd.regvals_t.begin (method) -ida_idd.regvals_t.capacity (method) -ida_idd.regvals_t.clear (method) -ida_idd.regvals_t.empty (method) -ida_idd.regvals_t.end (method) -ida_idd.regvals_t.erase (method) -ida_idd.regvals_t.extract (method) -ida_idd.regvals_t.find (method) -ida_idd.regvals_t.grow (method) -ida_idd.regvals_t.has (method) -ida_idd.regvals_t.inject (method) -ida_idd.regvals_t.insert (method) -ida_idd.regvals_t.pop_back (method) -ida_idd.regvals_t.push_back (method) -ida_idd.regvals_t.qclear (method) -ida_idd.regvals_t.reserve (method) -ida_idd.regvals_t.resize (method) -ida_idd.regvals_t.size (method) -ida_idd.regvals_t.swap (method) -ida_idd.regvals_t.truncate (method) -ida_idd.scattered_segm_t (class) -ida_idd.scattered_segm_t.__init__ (method) -ida_idd.scattered_segm_t.name (variable) -ida_idd.set_debug_event_code (function) -ida_idd.thread_name_t (class) -ida_idd.thread_name_t.__init__ (method) -ida_idd.thread_name_t.name (variable) -ida_idd.thread_name_t.tid (variable) -ida_idp (module) -ida_idp.AS2_BRACE (variable) -ida_idp.AS2_BYTE1CHAR (variable) -ida_idp.AS2_COLONSUF (variable) -ida_idp.AS2_IDEALDSCR (variable) -ida_idp.AS2_STRINV (variable) -ida_idp.AS2_TERSESTR (variable) -ida_idp.AS2_YWORD (variable) -ida_idp.AS2_ZWORD (variable) -ida_idp.ASB_BINF0 (variable) -ida_idp.ASB_BINF1 (variable) -ida_idp.ASB_BINF2 (variable) -ida_idp.ASB_BINF3 (variable) -ida_idp.ASB_BINF4 (variable) -ida_idp.ASB_BINF5 (variable) -ida_idp.ASD_DECF0 (variable) -ida_idp.ASD_DECF1 (variable) -ida_idp.ASD_DECF2 (variable) -ida_idp.ASD_DECF3 (variable) -ida_idp.ASH_HEXF0 (variable) -ida_idp.ASH_HEXF1 (variable) -ida_idp.ASH_HEXF2 (variable) -ida_idp.ASH_HEXF3 (variable) -ida_idp.ASH_HEXF4 (variable) -ida_idp.ASH_HEXF5 (variable) -ida_idp.ASO_OCTF0 (variable) -ida_idp.ASO_OCTF1 (variable) -ida_idp.ASO_OCTF2 (variable) -ida_idp.ASO_OCTF3 (variable) -ida_idp.ASO_OCTF4 (variable) -ida_idp.ASO_OCTF5 (variable) -ida_idp.ASO_OCTF6 (variable) -ida_idp.ASO_OCTF7 (variable) -ida_idp.AS_1TEXT (variable) -ida_idp.AS_2CHRE (variable) -ida_idp.AS_ALIGN2 (variable) -ida_idp.AS_ASCIIC (variable) -ida_idp.AS_ASCIIZ (variable) -ida_idp.AS_BINFM (variable) -ida_idp.AS_COLON (variable) -ida_idp.AS_DECFM (variable) -ida_idp.AS_HEXFM (variable) -ida_idp.AS_LALIGN (variable) -ida_idp.AS_N2CHR (variable) -ida_idp.AS_NCHRE (variable) -ida_idp.AS_NCMAS (variable) -ida_idp.AS_NHIAS (variable) -ida_idp.AS_NOCODECLN (variable) -ida_idp.AS_NOSPACE (variable) -ida_idp.AS_NOXRF (variable) -ida_idp.AS_OCTFM (variable) -ida_idp.AS_OFFST (variable) -ida_idp.AS_ONEDUP (variable) -ida_idp.AS_RELSUP (variable) -ida_idp.AS_UDATA (variable) -ida_idp.AS_UNEQU (variable) -ida_idp.AS_XTRNTYPE (variable) -ida_idp.AssembleLine (function) -ida_idp.CF_CALL (variable) -ida_idp.CF_CHG1 (variable) -ida_idp.CF_CHG2 (variable) -ida_idp.CF_CHG3 (variable) -ida_idp.CF_CHG4 (variable) -ida_idp.CF_CHG5 (variable) -ida_idp.CF_CHG6 (variable) -ida_idp.CF_CHG7 (variable) -ida_idp.CF_CHG8 (variable) -ida_idp.CF_HLL (variable) -ida_idp.CF_JUMP (variable) -ida_idp.CF_SHFT (variable) -ida_idp.CF_STOP (variable) -ida_idp.CF_USE1 (variable) -ida_idp.CF_USE2 (variable) -ida_idp.CF_USE3 (variable) -ida_idp.CF_USE4 (variable) -ida_idp.CF_USE5 (variable) -ida_idp.CF_USE6 (variable) -ida_idp.CF_USE7 (variable) -ida_idp.CF_USE8 (variable) -ida_idp.CUSTOM_INSN_ITYPE (variable) -ida_idp.HKCB_GLOBAL (variable) -ida_idp.IDB_Hooks (class) -ida_idp.IDB_Hooks.__disown__ (method) -ida_idp.IDB_Hooks.__init__ (method) -ida_idp.IDB_Hooks.adding_segm (method) -ida_idp.IDB_Hooks.allsegs_moved (method) -ida_idp.IDB_Hooks.auto_empty (method) -ida_idp.IDB_Hooks.auto_empty_finally (method) -ida_idp.IDB_Hooks.bookmark_changed (method) -ida_idp.IDB_Hooks.byte_patched (method) -ida_idp.IDB_Hooks.callee_addr_changed (method) -ida_idp.IDB_Hooks.changing_cmt (method) -ida_idp.IDB_Hooks.changing_enum_bf (method) -ida_idp.IDB_Hooks.changing_enum_cmt (method) -ida_idp.IDB_Hooks.changing_op_ti (method) -ida_idp.IDB_Hooks.changing_op_type (method) -ida_idp.IDB_Hooks.changing_range_cmt (method) -ida_idp.IDB_Hooks.changing_segm_class (method) -ida_idp.IDB_Hooks.changing_segm_end (method) -ida_idp.IDB_Hooks.changing_segm_name (method) -ida_idp.IDB_Hooks.changing_segm_start (method) -ida_idp.IDB_Hooks.changing_struc_align (method) -ida_idp.IDB_Hooks.changing_struc_cmt (method) -ida_idp.IDB_Hooks.changing_struc_member (method) -ida_idp.IDB_Hooks.changing_ti (method) -ida_idp.IDB_Hooks.closebase (method) -ida_idp.IDB_Hooks.cmt_changed (method) -ida_idp.IDB_Hooks.compiler_changed (method) -ida_idp.IDB_Hooks.deleting_enum (method) -ida_idp.IDB_Hooks.deleting_enum_member (method) -ida_idp.IDB_Hooks.deleting_func (method) -ida_idp.IDB_Hooks.deleting_func_tail (method) -ida_idp.IDB_Hooks.deleting_segm (method) -ida_idp.IDB_Hooks.deleting_struc (method) -ida_idp.IDB_Hooks.deleting_struc_member (method) -ida_idp.IDB_Hooks.deleting_tryblks (method) -ida_idp.IDB_Hooks.destroyed_items (method) -ida_idp.IDB_Hooks.determined_main (method) -ida_idp.IDB_Hooks.dirtree_link (method) -ida_idp.IDB_Hooks.dirtree_mkdir (method) -ida_idp.IDB_Hooks.dirtree_move (method) -ida_idp.IDB_Hooks.dirtree_rank (method) -ida_idp.IDB_Hooks.dirtree_rmdir (method) -ida_idp.IDB_Hooks.dirtree_rminode (method) -ida_idp.IDB_Hooks.dirtree_segm_moved (method) -ida_idp.IDB_Hooks.enum_bf_changed (method) -ida_idp.IDB_Hooks.enum_cmt_changed (method) -ida_idp.IDB_Hooks.enum_created (method) -ida_idp.IDB_Hooks.enum_deleted (method) -ida_idp.IDB_Hooks.enum_flag_changed (method) -ida_idp.IDB_Hooks.enum_member_created (method) -ida_idp.IDB_Hooks.enum_member_deleted (method) -ida_idp.IDB_Hooks.enum_ordinal_changed (method) -ida_idp.IDB_Hooks.enum_renamed (method) -ida_idp.IDB_Hooks.enum_width_changed (method) -ida_idp.IDB_Hooks.expanding_struc (method) -ida_idp.IDB_Hooks.extlang_changed (method) -ida_idp.IDB_Hooks.extra_cmt_changed (method) -ida_idp.IDB_Hooks.flow_chart_created (method) -ida_idp.IDB_Hooks.frame_deleted (method) -ida_idp.IDB_Hooks.func_added (method) -ida_idp.IDB_Hooks.func_deleted (method) -ida_idp.IDB_Hooks.func_noret_changed (method) -ida_idp.IDB_Hooks.func_tail_appended (method) -ida_idp.IDB_Hooks.func_tail_deleted (method) -ida_idp.IDB_Hooks.func_updated (method) -ida_idp.IDB_Hooks.hook (method) -ida_idp.IDB_Hooks.idasgn_loaded (method) -ida_idp.IDB_Hooks.item_color_changed (method) -ida_idp.IDB_Hooks.kernel_config_loaded (method) -ida_idp.IDB_Hooks.loader_finished (method) -ida_idp.IDB_Hooks.local_types_changed (method) -ida_idp.IDB_Hooks.make_code (method) -ida_idp.IDB_Hooks.make_data (method) -ida_idp.IDB_Hooks.op_ti_changed (method) -ida_idp.IDB_Hooks.op_type_changed (method) -ida_idp.IDB_Hooks.range_cmt_changed (method) -ida_idp.IDB_Hooks.renamed (method) -ida_idp.IDB_Hooks.renaming_enum (method) -ida_idp.IDB_Hooks.renaming_struc (method) -ida_idp.IDB_Hooks.renaming_struc_member (method) -ida_idp.IDB_Hooks.savebase (method) -ida_idp.IDB_Hooks.segm_added (method) -ida_idp.IDB_Hooks.segm_attrs_updated (method) -ida_idp.IDB_Hooks.segm_class_changed (method) -ida_idp.IDB_Hooks.segm_deleted (method) -ida_idp.IDB_Hooks.segm_end_changed (method) -ida_idp.IDB_Hooks.segm_moved (method) -ida_idp.IDB_Hooks.segm_name_changed (method) -ida_idp.IDB_Hooks.segm_start_changed (method) -ida_idp.IDB_Hooks.set_func_end (method) -ida_idp.IDB_Hooks.set_func_start (method) -ida_idp.IDB_Hooks.sgr_changed (method) -ida_idp.IDB_Hooks.sgr_deleted (method) -ida_idp.IDB_Hooks.stkpnts_changed (method) -ida_idp.IDB_Hooks.struc_align_changed (method) -ida_idp.IDB_Hooks.struc_cmt_changed (method) -ida_idp.IDB_Hooks.struc_created (method) -ida_idp.IDB_Hooks.struc_deleted (method) -ida_idp.IDB_Hooks.struc_expanded (method) -ida_idp.IDB_Hooks.struc_member_changed (method) -ida_idp.IDB_Hooks.struc_member_created (method) -ida_idp.IDB_Hooks.struc_member_deleted (method) -ida_idp.IDB_Hooks.struc_member_renamed (method) -ida_idp.IDB_Hooks.struc_renamed (method) -ida_idp.IDB_Hooks.tail_owner_changed (method) -ida_idp.IDB_Hooks.thunk_func_created (method) -ida_idp.IDB_Hooks.ti_changed (method) -ida_idp.IDB_Hooks.tryblks_updated (method) -ida_idp.IDB_Hooks.unhook (method) -ida_idp.IDB_Hooks.updating_tryblks (method) -ida_idp.IDB_Hooks.upgraded (method) -ida_idp.IDP_Hooks (class) -ida_idp.IDP_Hooks.__disown__ (method) -ida_idp.IDP_Hooks.__init__ (method) -ida_idp.IDP_Hooks.ev_add_cref (method) -ida_idp.IDP_Hooks.ev_add_dref (method) -ida_idp.IDP_Hooks.ev_adjust_argloc (method) -ida_idp.IDP_Hooks.ev_adjust_libfunc_ea (method) -ida_idp.IDP_Hooks.ev_adjust_refinfo (method) -ida_idp.IDP_Hooks.ev_ana_insn (method) -ida_idp.IDP_Hooks.ev_analyze_prolog (method) -ida_idp.IDP_Hooks.ev_arch_changed (method) -ida_idp.IDP_Hooks.ev_arg_addrs_ready (method) -ida_idp.IDP_Hooks.ev_asm_installed (method) -ida_idp.IDP_Hooks.ev_assemble (method) -ida_idp.IDP_Hooks.ev_auto_queue_empty (method) -ida_idp.IDP_Hooks.ev_calc_arglocs (method) -ida_idp.IDP_Hooks.ev_calc_cdecl_purged_bytes (method) -ida_idp.IDP_Hooks.ev_calc_next_eas (method) -ida_idp.IDP_Hooks.ev_calc_purged_bytes (method) -ida_idp.IDP_Hooks.ev_calc_retloc (method) -ida_idp.IDP_Hooks.ev_calc_spdelta (method) -ida_idp.IDP_Hooks.ev_calc_step_over (method) -ida_idp.IDP_Hooks.ev_calc_switch_cases (method) -ida_idp.IDP_Hooks.ev_calc_varglocs (method) -ida_idp.IDP_Hooks.ev_calcrel (method) -ida_idp.IDP_Hooks.ev_can_have_type (method) -ida_idp.IDP_Hooks.ev_clean_tbit (method) -ida_idp.IDP_Hooks.ev_cmp_operands (method) -ida_idp.IDP_Hooks.ev_coagulate (method) -ida_idp.IDP_Hooks.ev_coagulate_dref (method) -ida_idp.IDP_Hooks.ev_create_flat_group (method) -ida_idp.IDP_Hooks.ev_create_func_frame (method) -ida_idp.IDP_Hooks.ev_create_merge_handlers (method) -ida_idp.IDP_Hooks.ev_create_switch_xrefs (method) -ida_idp.IDP_Hooks.ev_creating_segm (method) -ida_idp.IDP_Hooks.ev_cvt64_hashval (method) -ida_idp.IDP_Hooks.ev_cvt64_supval (method) -ida_idp.IDP_Hooks.ev_decorate_name (method) -ida_idp.IDP_Hooks.ev_del_cref (method) -ida_idp.IDP_Hooks.ev_del_dref (method) -ida_idp.IDP_Hooks.ev_delay_slot_insn (method) -ida_idp.IDP_Hooks.ev_demangle_name (method) -ida_idp.IDP_Hooks.ev_emu_insn (method) -ida_idp.IDP_Hooks.ev_endbinary (method) -ida_idp.IDP_Hooks.ev_ending_undo (method) -ida_idp.IDP_Hooks.ev_equal_reglocs (method) -ida_idp.IDP_Hooks.ev_extract_address (method) -ida_idp.IDP_Hooks.ev_find_op_value (method) -ida_idp.IDP_Hooks.ev_find_reg_value (method) -ida_idp.IDP_Hooks.ev_func_bounds (method) -ida_idp.IDP_Hooks.ev_gen_asm_or_lst (method) -ida_idp.IDP_Hooks.ev_gen_map_file (method) -ida_idp.IDP_Hooks.ev_gen_regvar_def (method) -ida_idp.IDP_Hooks.ev_gen_src_file_lnnum (method) -ida_idp.IDP_Hooks.ev_gen_stkvar_def (method) -ida_idp.IDP_Hooks.ev_get_abi_info (method) -ida_idp.IDP_Hooks.ev_get_autocmt (method) -ida_idp.IDP_Hooks.ev_get_bg_color (method) -ida_idp.IDP_Hooks.ev_get_cc_regs (method) -ida_idp.IDP_Hooks.ev_get_code16_mode (method) -ida_idp.IDP_Hooks.ev_get_dbr_opnum (method) -ida_idp.IDP_Hooks.ev_get_default_enum_size (method) -ida_idp.IDP_Hooks.ev_get_frame_retsize (method) -ida_idp.IDP_Hooks.ev_get_macro_insn_head (method) -ida_idp.IDP_Hooks.ev_get_operand_string (method) -ida_idp.IDP_Hooks.ev_get_procmod (method) -ida_idp.IDP_Hooks.ev_get_reg_accesses (method) -ida_idp.IDP_Hooks.ev_get_reg_info (method) -ida_idp.IDP_Hooks.ev_get_reg_name (method) -ida_idp.IDP_Hooks.ev_get_simd_types (method) -ida_idp.IDP_Hooks.ev_get_stkarg_area_info (method) -ida_idp.IDP_Hooks.ev_get_stkvar_scale_factor (method) -ida_idp.IDP_Hooks.ev_getreg (method) -ida_idp.IDP_Hooks.ev_init (method) -ida_idp.IDP_Hooks.ev_insn_reads_tbit (method) -ida_idp.IDP_Hooks.ev_is_align_insn (method) -ida_idp.IDP_Hooks.ev_is_alloca_probe (method) -ida_idp.IDP_Hooks.ev_is_basic_block_end (method) -ida_idp.IDP_Hooks.ev_is_call_insn (method) -ida_idp.IDP_Hooks.ev_is_cond_insn (method) -ida_idp.IDP_Hooks.ev_is_control_flow_guard (method) -ida_idp.IDP_Hooks.ev_is_far_jump (method) -ida_idp.IDP_Hooks.ev_is_indirect_jump (method) -ida_idp.IDP_Hooks.ev_is_insn_table_jump (method) -ida_idp.IDP_Hooks.ev_is_jump_func (method) -ida_idp.IDP_Hooks.ev_is_ret_insn (method) -ida_idp.IDP_Hooks.ev_is_sane_insn (method) -ida_idp.IDP_Hooks.ev_is_sp_based (method) -ida_idp.IDP_Hooks.ev_is_switch (method) -ida_idp.IDP_Hooks.ev_last_cb_before_loader (method) -ida_idp.IDP_Hooks.ev_loader (method) -ida_idp.IDP_Hooks.ev_lower_func_type (method) -ida_idp.IDP_Hooks.ev_max_ptr_size (method) -ida_idp.IDP_Hooks.ev_may_be_func (method) -ida_idp.IDP_Hooks.ev_may_show_sreg (method) -ida_idp.IDP_Hooks.ev_moving_segm (method) -ida_idp.IDP_Hooks.ev_newasm (method) -ida_idp.IDP_Hooks.ev_newbinary (method) -ida_idp.IDP_Hooks.ev_newfile (method) -ida_idp.IDP_Hooks.ev_newprc (method) -ida_idp.IDP_Hooks.ev_next_exec_insn (method) -ida_idp.IDP_Hooks.ev_oldfile (method) -ida_idp.IDP_Hooks.ev_out_assumes (method) -ida_idp.IDP_Hooks.ev_out_data (method) -ida_idp.IDP_Hooks.ev_out_footer (method) -ida_idp.IDP_Hooks.ev_out_header (method) -ida_idp.IDP_Hooks.ev_out_insn (method) -ida_idp.IDP_Hooks.ev_out_label (method) -ida_idp.IDP_Hooks.ev_out_mnem (method) -ida_idp.IDP_Hooks.ev_out_operand (method) -ida_idp.IDP_Hooks.ev_out_segend (method) -ida_idp.IDP_Hooks.ev_out_segstart (method) -ida_idp.IDP_Hooks.ev_out_special_item (method) -ida_idp.IDP_Hooks.ev_privrange_changed (method) -ida_idp.IDP_Hooks.ev_realcvt (method) -ida_idp.IDP_Hooks.ev_rename (method) -ida_idp.IDP_Hooks.ev_replaying_undo (method) -ida_idp.IDP_Hooks.ev_set_code16_mode (method) -ida_idp.IDP_Hooks.ev_set_idp_options (method) -ida_idp.IDP_Hooks.ev_set_proc_options (method) -ida_idp.IDP_Hooks.ev_setup_til (method) -ida_idp.IDP_Hooks.ev_str2reg (method) -ida_idp.IDP_Hooks.ev_term (method) -ida_idp.IDP_Hooks.ev_treat_hindering_item (method) -ida_idp.IDP_Hooks.ev_undefine (method) -ida_idp.IDP_Hooks.ev_update_call_stack (method) -ida_idp.IDP_Hooks.ev_use_arg_types (method) -ida_idp.IDP_Hooks.ev_use_regarg_type (method) -ida_idp.IDP_Hooks.ev_use_stkarg_type (method) -ida_idp.IDP_Hooks.ev_validate_flirt_func (method) -ida_idp.IDP_Hooks.ev_verify_noreturn (method) -ida_idp.IDP_Hooks.ev_verify_sp (method) -ida_idp.IDP_Hooks.hook (method) -ida_idp.IDP_Hooks.unhook (method) -ida_idp.IDP_INTERFACE_VERSION (variable) -ida_idp.OP_FP_BASED (variable) -ida_idp.OP_SP_ADD (variable) -ida_idp.OP_SP_BASED (variable) -ida_idp.OP_SP_SUB (variable) -ida_idp.PLFM_386 (variable) -ida_idp.PLFM_6502 (variable) -ida_idp.PLFM_65C816 (variable) -ida_idp.PLFM_6800 (variable) -ida_idp.PLFM_68K (variable) -ida_idp.PLFM_80196 (variable) -ida_idp.PLFM_8051 (variable) -ida_idp.PLFM_AD2106X (variable) -ida_idp.PLFM_AD218X (variable) -ida_idp.PLFM_ALPHA (variable) -ida_idp.PLFM_ARC (variable) -ida_idp.PLFM_ARM (variable) -ida_idp.PLFM_AVR (variable) -ida_idp.PLFM_C166 (variable) -ida_idp.PLFM_C39 (variable) -ida_idp.PLFM_CR16 (variable) -ida_idp.PLFM_DALVIK (variable) -ida_idp.PLFM_DSP56K (variable) -ida_idp.PLFM_DSP96K (variable) -ida_idp.PLFM_EBC (variable) -ida_idp.PLFM_F2MC (variable) -ida_idp.PLFM_FR (variable) -ida_idp.PLFM_H8 (variable) -ida_idp.PLFM_H8500 (variable) -ida_idp.PLFM_HPPA (variable) -ida_idp.PLFM_I860 (variable) -ida_idp.PLFM_I960 (variable) -ida_idp.PLFM_IA64 (variable) -ida_idp.PLFM_JAVA (variable) -ida_idp.PLFM_KR1878 (variable) -ida_idp.PLFM_M16C (variable) -ida_idp.PLFM_M32R (variable) -ida_idp.PLFM_M740 (variable) -ida_idp.PLFM_M7700 (variable) -ida_idp.PLFM_M7900 (variable) -ida_idp.PLFM_MC6812 (variable) -ida_idp.PLFM_MC6816 (variable) -ida_idp.PLFM_MIPS (variable) -ida_idp.PLFM_MN102L00 (variable) -ida_idp.PLFM_MSP430 (variable) -ida_idp.PLFM_NEC_78K0 (variable) -ida_idp.PLFM_NEC_78K0S (variable) -ida_idp.PLFM_NEC_V850X (variable) -ida_idp.PLFM_NET (variable) -ida_idp.PLFM_OAKDSP (variable) -ida_idp.PLFM_PDP (variable) -ida_idp.PLFM_PIC (variable) -ida_idp.PLFM_PIC16 (variable) -ida_idp.PLFM_PPC (variable) -ida_idp.PLFM_RISCV (variable) -ida_idp.PLFM_RL78 (variable) -ida_idp.PLFM_RX (variable) -ida_idp.PLFM_S390 (variable) -ida_idp.PLFM_SCR_ADPT (variable) -ida_idp.PLFM_SH (variable) -ida_idp.PLFM_SPARC (variable) -ida_idp.PLFM_SPC700 (variable) -ida_idp.PLFM_SPU (variable) -ida_idp.PLFM_ST20 (variable) -ida_idp.PLFM_ST7 (variable) -ida_idp.PLFM_ST9 (variable) -ida_idp.PLFM_TLCS900 (variable) -ida_idp.PLFM_TMS (variable) -ida_idp.PLFM_TMS320C1X (variable) -ida_idp.PLFM_TMS320C28 (variable) -ida_idp.PLFM_TMS320C3 (variable) -ida_idp.PLFM_TMS320C54 (variable) -ida_idp.PLFM_TMS320C55 (variable) -ida_idp.PLFM_TMSC6 (variable) -ida_idp.PLFM_TRICORE (variable) -ida_idp.PLFM_TRIMEDIA (variable) -ida_idp.PLFM_UNSP (variable) -ida_idp.PLFM_XTENSA (variable) -ida_idp.PLFM_Z8 (variable) -ida_idp.PLFM_Z80 (variable) -ida_idp.PR2_CODE16_BIT (variable) -ida_idp.PR2_FORCE_16BIT (variable) -ida_idp.PR2_IDP_OPTS (variable) -ida_idp.PR2_MACRO (variable) -ida_idp.PR2_MAPPINGS (variable) -ida_idp.PR2_REALCVT (variable) -ida_idp.PR2_REL_BITS (variable) -ida_idp.PR2_USE_CALCREL (variable) -ida_idp.PRN_BIN (variable) -ida_idp.PRN_DEC (variable) -ida_idp.PRN_HEX (variable) -ida_idp.PRN_OCT (variable) -ida_idp.PR_ADJSEGS (variable) -ida_idp.PR_ALIGN (variable) -ida_idp.PR_ALIGN_INSN (variable) -ida_idp.PR_ASSEMBLE (variable) -ida_idp.PR_BINMEM (variable) -ida_idp.PR_CHK_XREF (variable) -ida_idp.PR_CNDINSNS (variable) -ida_idp.PR_DEFNUM (variable) -ida_idp.PR_DEFSEG32 (variable) -ida_idp.PR_DEFSEG64 (variable) -ida_idp.PR_DELAYED (variable) -ida_idp.PR_NOCHANGE (variable) -ida_idp.PR_NO_SEGMOVE (variable) -ida_idp.PR_OUTER (variable) -ida_idp.PR_PURGING (variable) -ida_idp.PR_RNAMESOK (variable) -ida_idp.PR_SCALE_STKVARS (variable) -ida_idp.PR_SEGS (variable) -ida_idp.PR_SEGTRANS (variable) -ida_idp.PR_SGROTHER (variable) -ida_idp.PR_STACK_UP (variable) -ida_idp.PR_TYPEINFO (variable) -ida_idp.PR_USE32 (variable) -ida_idp.PR_USE64 (variable) -ida_idp.PR_USE_ARG_TYPES (variable) -ida_idp.PR_USE_TBYTE (variable) -ida_idp.PR_WORD_INS (variable) -ida_idp.REG_SPOIL (variable) -ida_idp.SETPROC_IDB (variable) -ida_idp.SETPROC_LOADER (variable) -ida_idp.SETPROC_LOADER_NON_FATAL (variable) -ida_idp.SETPROC_USER (variable) -ida_idp.__ph (class) -ida_idp._idp_cvar_t (class) -ida_idp._notify_when_dispatcher_t (class) -ida_idp._notify_when_dispatcher_t._IDB_Hooks (class) -ida_idp._notify_when_dispatcher_t._IDB_Hooks.__init__ (method) -ida_idp._notify_when_dispatcher_t._IDB_Hooks.closebase (method) -ida_idp._notify_when_dispatcher_t._IDP_Hooks (class) -ida_idp._notify_when_dispatcher_t._IDP_Hooks.__init__ (method) -ida_idp._notify_when_dispatcher_t._IDP_Hooks.ev_newfile (method) -ida_idp._notify_when_dispatcher_t._IDP_Hooks.ev_oldfile (method) -ida_idp._notify_when_dispatcher_t.__init__ (method) -ida_idp._notify_when_dispatcher_t._callback_t (class) -ida_idp._notify_when_dispatcher_t._callback_t.__init__ (method) -ida_idp._notify_when_dispatcher_t._find (method) -ida_idp._notify_when_dispatcher_t.dispatch (method) -ida_idp._notify_when_dispatcher_t.notify_when (method) -ida_idp._processor_t (class) -ida_idp._processor_t.__init__ (method) -ida_idp._processor_t.add_cref (method) -ida_idp._processor_t.add_dref (method) -ida_idp._processor_t.adjust_argloc (method) -ida_idp._processor_t.adjust_libfunc_ea (method) -ida_idp._processor_t.adjust_refinfo (method) -ida_idp._processor_t.ana_insn (method) -ida_idp._processor_t.analyze_prolog (method) -ida_idp._processor_t.arch_changed (method) -ida_idp._processor_t.arg_addrs_ready (method) -ida_idp._processor_t.asm_installed (method) -ida_idp._processor_t.assemble (method) -ida_idp._processor_t.auto_queue_empty (method) -ida_idp._processor_t.calc_arglocs (method) -ida_idp._processor_t.calc_cdecl_purged_bytes (method) -ida_idp._processor_t.calc_next_eas (method) -ida_idp._processor_t.calc_purged_bytes (method) -ida_idp._processor_t.calc_retloc (method) -ida_idp._processor_t.calc_spdelta (method) -ida_idp._processor_t.calc_step_over (method) -ida_idp._processor_t.calc_switch_cases (method) -ida_idp._processor_t.calc_varglocs (method) -ida_idp._processor_t.calcrel (method) -ida_idp._processor_t.calcrel_in_bits (method) -ida_idp._processor_t.can_have_type (method) -ida_idp._processor_t.cbsize (method) -ida_idp._processor_t.clean_tbit (method) -ida_idp._processor_t.cmp_operands (method) -ida_idp._processor_t.coagulate (method) -ida_idp._processor_t.coagulate_dref (method) -ida_idp._processor_t.create_flat_group (method) -ida_idp._processor_t.create_func_frame (method) -ida_idp._processor_t.create_merge_handlers (method) -ida_idp._processor_t.create_switch_xrefs (method) -ida_idp._processor_t.creating_segm (method) -ida_idp._processor_t.cvt64_hashval (method) -ida_idp._processor_t.cvt64_supval (method) -ida_idp._processor_t.dbsize (method) -ida_idp._processor_t.decorate_name (method) -ida_idp._processor_t.del_cref (method) -ida_idp._processor_t.del_dref (method) -ida_idp._processor_t.delay_slot_insn (method) -ida_idp._processor_t.demangle_name (method) -ida_idp._processor_t.emu_insn (method) -ida_idp._processor_t.endbinary (method) -ida_idp._processor_t.equal_reglocs (method) -ida_idp._processor_t.extract_address (method) -ida_idp._processor_t.find_op_value (method) -ida_idp._processor_t.find_reg_value (method) -ida_idp._processor_t.func_bounds (method) -ida_idp._processor_t.gen_asm_or_lst (method) -ida_idp._processor_t.gen_map_file (method) -ida_idp._processor_t.gen_regvar_def (method) -ida_idp._processor_t.gen_src_file_lnnum (method) -ida_idp._processor_t.gen_stkvar_def (method) -ida_idp._processor_t.get_abi_info (method) -ida_idp._processor_t.get_autocmt (method) -ida_idp._processor_t.get_bg_color (method) -ida_idp._processor_t.get_canon_feature (method) -ida_idp._processor_t.get_canon_mnem (method) -ida_idp._processor_t.get_cc_regs (method) -ida_idp._processor_t.get_code16_mode (method) -ida_idp._processor_t.get_dbr_opnum (method) -ida_idp._processor_t.get_default_segm_bitness (method) -ida_idp._processor_t.get_frame_retsize (method) -ida_idp._processor_t.get_idd_opinfo (method) -ida_idp._processor_t.get_macro_insn_head (method) -ida_idp._processor_t.get_operand_string (method) -ida_idp._processor_t.get_proc_index (method) -ida_idp._processor_t.get_reg_accesses (method) -ida_idp._processor_t.get_reg_info (method) -ida_idp._processor_t.get_reg_name (method) -ida_idp._processor_t.get_simd_types (method) -ida_idp._processor_t.get_stkarg_area_info (method) -ida_idp._processor_t.get_stkvar_scale (method) -ida_idp._processor_t.get_stkvar_scale_factor (method) -ida_idp._processor_t.getreg (method) -ida_idp._processor_t.has_code16_bit (method) -ida_idp._processor_t.has_idp_opts (method) -ida_idp._processor_t.has_realcvt (method) -ida_idp._processor_t.has_segregs (method) -ida_idp._processor_t.init (method) -ida_idp._processor_t.insn_reads_tbit (method) -ida_idp._processor_t.is_align_insn (method) -ida_idp._processor_t.is_alloca_probe (method) -ida_idp._processor_t.is_basic_block_end (method) -ida_idp._processor_t.is_call_insn (method) -ida_idp._processor_t.is_cond_insn (method) -ida_idp._processor_t.is_control_flow_guard (method) -ida_idp._processor_t.is_far_jump (method) -ida_idp._processor_t.is_indirect_jump (method) -ida_idp._processor_t.is_jump_func (method) -ida_idp._processor_t.is_ret_insn (method) -ida_idp._processor_t.is_sane_insn (method) -ida_idp._processor_t.is_sp_based (method) -ida_idp._processor_t.is_switch (method) -ida_idp._processor_t.loader_elf_machine (method) -ida_idp._processor_t.lower_func_type (method) -ida_idp._processor_t.max_ptr_size (method) -ida_idp._processor_t.may_be_func (method) -ida_idp._processor_t.may_show_sreg (method) -ida_idp._processor_t.moving_segm (method) -ida_idp._processor_t.newasm (method) -ida_idp._processor_t.newbinary (method) -ida_idp._processor_t.newfile (method) -ida_idp._processor_t.newprc (method) -ida_idp._processor_t.next_exec_insn (method) -ida_idp._processor_t.notify (method) -ida_idp._processor_t.oldfile (method) -ida_idp._processor_t.out_assumes (method) -ida_idp._processor_t.out_data (method) -ida_idp._processor_t.out_footer (method) -ida_idp._processor_t.out_header (method) -ida_idp._processor_t.out_insn (method) -ida_idp._processor_t.out_label (method) -ida_idp._processor_t.out_mnem (method) -ida_idp._processor_t.out_operand (method) -ida_idp._processor_t.out_segend (method) -ida_idp._processor_t.out_segstart (method) -ida_idp._processor_t.out_special_item (method) -ida_idp._processor_t.privrange_changed (method) -ida_idp._processor_t.realcvt (method) -ida_idp._processor_t.rename (method) -ida_idp._processor_t.set_code16_mode (method) -ida_idp._processor_t.set_idp_options (method) -ida_idp._processor_t.set_proc_options (method) -ida_idp._processor_t.setup_til (method) -ida_idp._processor_t.sizeof_ldbl (method) -ida_idp._processor_t.stkup (method) -ida_idp._processor_t.str2reg (method) -ida_idp._processor_t.supports_calcrel (method) -ida_idp._processor_t.supports_macros (method) -ida_idp._processor_t.term (method) -ida_idp._processor_t.ti (method) -ida_idp._processor_t.treat_hindering_item (method) -ida_idp._processor_t.undefine (method) -ida_idp._processor_t.update_call_stack (method) -ida_idp._processor_t.use32 (method) -ida_idp._processor_t.use64 (method) -ida_idp._processor_t.use_arg_types (method) -ida_idp._processor_t.use_mappings (method) -ida_idp._processor_t.use_regarg_type (method) -ida_idp._processor_t.use_stkarg_type (method) -ida_idp._processor_t.use_tbyte (method) -ida_idp._processor_t.validate_flirt_func (method) -ida_idp._processor_t.verify_noreturn (method) -ida_idp._processor_t.verify_sp (method) -ida_idp._processor_t_Trampoline_IDB_Hooks (class) -ida_idp._processor_t_Trampoline_IDB_Hooks.__dummy (method) -ida_idp._processor_t_Trampoline_IDB_Hooks.__init__ (method) -ida_idp._processor_t_Trampoline_IDB_Hooks.__make_parent_caller (method) -ida_idp._processor_t_Trampoline_IDB_Hooks.__make_parent_caller.call_parent (function) -ida_idp._processor_t_add_cref (function) -ida_idp._processor_t_add_dref (function) -ida_idp._processor_t_adjust_argloc (function) -ida_idp._processor_t_adjust_libfunc_ea (function) -ida_idp._processor_t_adjust_refinfo (function) -ida_idp._processor_t_ana_insn (function) -ida_idp._processor_t_analyze_prolog (function) -ida_idp._processor_t_arch_changed (function) -ida_idp._processor_t_arg_addrs_ready (function) -ida_idp._processor_t_asm_installed (function) -ida_idp._processor_t_assemble (function) -ida_idp._processor_t_auto_queue_empty (function) -ida_idp._processor_t_calc_arglocs (function) -ida_idp._processor_t_calc_cdecl_purged_bytes (function) -ida_idp._processor_t_calc_next_eas (function) -ida_idp._processor_t_calc_purged_bytes (function) -ida_idp._processor_t_calc_retloc (function) -ida_idp._processor_t_calc_spdelta (function) -ida_idp._processor_t_calc_step_over (function) -ida_idp._processor_t_calc_switch_cases (function) -ida_idp._processor_t_calc_varglocs (function) -ida_idp._processor_t_calcrel (function) -ida_idp._processor_t_can_have_type (function) -ida_idp._processor_t_clean_tbit (function) -ida_idp._processor_t_cmp_operands (function) -ida_idp._processor_t_coagulate (function) -ida_idp._processor_t_coagulate_dref (function) -ida_idp._processor_t_create_flat_group (function) -ida_idp._processor_t_create_func_frame (function) -ida_idp._processor_t_create_merge_handlers (function) -ida_idp._processor_t_create_switch_xrefs (function) -ida_idp._processor_t_creating_segm (function) -ida_idp._processor_t_decorate_name (function) -ida_idp._processor_t_del_cref (function) -ida_idp._processor_t_del_dref (function) -ida_idp._processor_t_demangle_name (function) -ida_idp._processor_t_emu_insn (function) -ida_idp._processor_t_endbinary (function) -ida_idp._processor_t_equal_reglocs (function) -ida_idp._processor_t_extract_address (function) -ida_idp._processor_t_find_op_value (function) -ida_idp._processor_t_find_reg_value (function) -ida_idp._processor_t_func_bounds (function) -ida_idp._processor_t_gen_asm_or_lst (function) -ida_idp._processor_t_gen_map_file (function) -ida_idp._processor_t_gen_regvar_def (function) -ida_idp._processor_t_gen_src_file_lnnum (function) -ida_idp._processor_t_gen_stkvar_def (function) -ida_idp._processor_t_get_abi_info (function) -ida_idp._processor_t_get_autocmt (function) -ida_idp._processor_t_get_bg_color (function) -ida_idp._processor_t_get_cc_regs (function) -ida_idp._processor_t_get_code16_mode (function) -ida_idp._processor_t_get_dbr_opnum (function) -ida_idp._processor_t_get_frame_retsize (function) -ida_idp._processor_t_get_idd_opinfo (function) -ida_idp._processor_t_get_macro_insn_head (function) -ida_idp._processor_t_get_operand_string (function) -ida_idp._processor_t_get_reg_accesses (function) -ida_idp._processor_t_get_reg_info (function) -ida_idp._processor_t_get_reg_name (function) -ida_idp._processor_t_get_simd_types (function) -ida_idp._processor_t_get_stkarg_area_info (function) -ida_idp._processor_t_get_stkvar_scale_factor (function) -ida_idp._processor_t_getreg (function) -ida_idp._processor_t_init (function) -ida_idp._processor_t_insn_reads_tbit (function) -ida_idp._processor_t_is_align_insn (function) -ida_idp._processor_t_is_alloca_probe (function) -ida_idp._processor_t_is_basic_block_end (function) -ida_idp._processor_t_is_call_insn (function) -ida_idp._processor_t_is_cond_insn (function) -ida_idp._processor_t_is_control_flow_guard (function) -ida_idp._processor_t_is_far_jump (function) -ida_idp._processor_t_is_indirect_jump (function) -ida_idp._processor_t_is_jump_func (function) -ida_idp._processor_t_is_ret_insn (function) -ida_idp._processor_t_is_sane_insn (function) -ida_idp._processor_t_is_sp_based (function) -ida_idp._processor_t_is_switch (function) -ida_idp._processor_t_loader_elf_machine (function) -ida_idp._processor_t_lower_func_type (function) -ida_idp._processor_t_max_ptr_size (function) -ida_idp._processor_t_may_be_func (function) -ida_idp._processor_t_may_show_sreg (function) -ida_idp._processor_t_moving_segm (function) -ida_idp._processor_t_newasm (function) -ida_idp._processor_t_newbinary (function) -ida_idp._processor_t_newfile (function) -ida_idp._processor_t_newprc (function) -ida_idp._processor_t_next_exec_insn (function) -ida_idp._processor_t_notify (function) -ida_idp._processor_t_oldfile (function) -ida_idp._processor_t_out_assumes (function) -ida_idp._processor_t_out_data (function) -ida_idp._processor_t_out_footer (function) -ida_idp._processor_t_out_header (function) -ida_idp._processor_t_out_insn (function) -ida_idp._processor_t_out_label (function) -ida_idp._processor_t_out_mnem (function) -ida_idp._processor_t_out_operand (function) -ida_idp._processor_t_out_segend (function) -ida_idp._processor_t_out_segstart (function) -ida_idp._processor_t_out_special_item (function) -ida_idp._processor_t_realcvt (function) -ida_idp._processor_t_rename (function) -ida_idp._processor_t_set_code16_mode (function) -ida_idp._processor_t_set_idp_options (function) -ida_idp._processor_t_set_proc_options (function) -ida_idp._processor_t_setup_til (function) -ida_idp._processor_t_str2reg (function) -ida_idp._processor_t_term (function) -ida_idp._processor_t_treat_hindering_item (function) -ida_idp._processor_t_undefine (function) -ida_idp._processor_t_update_call_stack (function) -ida_idp._processor_t_use_arg_types (function) -ida_idp._processor_t_use_regarg_type (function) -ida_idp._processor_t_use_stkarg_type (function) -ida_idp._processor_t_validate_flirt_func (function) -ida_idp._processor_t_verify_noreturn (function) -ida_idp._processor_t_verify_sp (function) -ida_idp.asm_t (class) -ida_idp.asm_t.__init__ (method) -ida_idp.asm_t.a_align (variable) -ida_idp.asm_t.a_ascii (variable) -ida_idp.asm_t.a_band (variable) -ida_idp.asm_t.a_bnot (variable) -ida_idp.asm_t.a_bor (variable) -ida_idp.asm_t.a_bss (variable) -ida_idp.asm_t.a_byte (variable) -ida_idp.asm_t.a_comdef (variable) -ida_idp.asm_t.a_curip (variable) -ida_idp.asm_t.a_double (variable) -ida_idp.asm_t.a_dups (variable) -ida_idp.asm_t.a_dword (variable) -ida_idp.asm_t.a_equ (variable) -ida_idp.asm_t.a_extrn (variable) -ida_idp.asm_t.a_float (variable) -ida_idp.asm_t.a_include_fmt (variable) -ida_idp.asm_t.a_mod (variable) -ida_idp.asm_t.a_oword (variable) -ida_idp.asm_t.a_packreal (variable) -ida_idp.asm_t.a_public (variable) -ida_idp.asm_t.a_qword (variable) -ida_idp.asm_t.a_rva (variable) -ida_idp.asm_t.a_seg (variable) -ida_idp.asm_t.a_shl (variable) -ida_idp.asm_t.a_shr (variable) -ida_idp.asm_t.a_sizeof_fmt (variable) -ida_idp.asm_t.a_tbyte (variable) -ida_idp.asm_t.a_vstruc_fmt (variable) -ida_idp.asm_t.a_weak (variable) -ida_idp.asm_t.a_word (variable) -ida_idp.asm_t.a_xor (variable) -ida_idp.asm_t.a_yword (variable) -ida_idp.asm_t.a_zword (variable) -ida_idp.asm_t.accsep (variable) -ida_idp.asm_t.ascsep (variable) -ida_idp.asm_t.cmnt (variable) -ida_idp.asm_t.cmnt2 (variable) -ida_idp.asm_t.end (variable) -ida_idp.asm_t.esccodes (variable) -ida_idp.asm_t.flag (variable) -ida_idp.asm_t.flag2 (variable) -ida_idp.asm_t.header (variable) -ida_idp.asm_t.help (variable) -ida_idp.asm_t.high16 (variable) -ida_idp.asm_t.high8 (variable) -ida_idp.asm_t.lbrace (variable) -ida_idp.asm_t.low16 (variable) -ida_idp.asm_t.low8 (variable) -ida_idp.asm_t.name (variable) -ida_idp.asm_t.origin (variable) -ida_idp.asm_t.rbrace (variable) -ida_idp.asm_t.uflag (variable) -ida_idp.assemble (function) -ida_idp.cfg_get_cc_header_path (function) -ida_idp.cfg_get_cc_parm (function) -ida_idp.cfg_get_cc_predefined_macros (function) -ida_idp.delay_slot_insn (function) -ida_idp.gen_idb_event (function) -ida_idp.get_ash (function) -ida_idp.get_config_value (function) -ida_idp.get_idb_notifier_addr (function) -ida_idp.get_idb_notifier_ud_addr (function) -ida_idp.get_idp_name (function) -ida_idp.get_idp_notifier_addr (function) -ida_idp.get_idp_notifier_ud_addr (function) -ida_idp.get_ph (function) -ida_idp.get_reg_info (function) -ida_idp.get_reg_name (function) -ida_idp.has_cf_chg (function) -ida_idp.has_cf_use (function) -ida_idp.has_insn_feature (function) -ida_idp.is_align_insn (function) -ida_idp.is_basic_block_end (function) -ida_idp.is_call_insn (function) -ida_idp.is_indirect_jump_insn (function) -ida_idp.is_ret_insn (function) -ida_idp.num_range_t (class) -ida_idp.num_range_t.__init__ (method) -ida_idp.params_t (class) -ida_idp.params_t.__init__ (method) -ida_idp.parse_reg_name (function) -ida_idp.ph_calcrel (function) -ida_idp.ph_find_op_value (function) -ida_idp.ph_find_reg_value (function) -ida_idp.ph_get_cnbits (function) -ida_idp.ph_get_dnbits (function) -ida_idp.ph_get_flag (function) -ida_idp.ph_get_icode_return (function) -ida_idp.ph_get_id (function) -ida_idp.ph_get_instruc (function) -ida_idp.ph_get_instruc_end (function) -ida_idp.ph_get_instruc_start (function) -ida_idp.ph_get_operand_info (function) -ida_idp.ph_get_reg_accesses (function) -ida_idp.ph_get_reg_code_sreg (function) -ida_idp.ph_get_reg_data_sreg (function) -ida_idp.ph_get_reg_first_sreg (function) -ida_idp.ph_get_reg_last_sreg (function) -ida_idp.ph_get_regnames (function) -ida_idp.ph_get_segreg_size (function) -ida_idp.ph_get_tbyte_size (function) -ida_idp.ph_get_version (function) -ida_idp.process_config_directive (function) -ida_idp.processor_t (class) -ida_idp.processor_t.__init__ (method) -ida_idp.processor_t._get_idb_notifier_addr (method) -ida_idp.processor_t._get_idb_notifier_ud_addr (method) -ida_idp.processor_t._get_idp_notifier_addr (method) -ida_idp.processor_t._get_idp_notifier_ud_addr (method) -ida_idp.processor_t._get_notify (method) -ida_idp.processor_t._make_forced_value_wrapper (method) -ida_idp.processor_t._make_forced_value_wrapper.f (function) -ida_idp.processor_t._make_int_returning_wrapper (method) -ida_idp.processor_t._make_int_returning_wrapper.f (function) -ida_idp.processor_t.auto_empty (method) -ida_idp.processor_t.auto_empty_finally (method) -ida_idp.processor_t.closebase (method) -ida_idp.processor_t.compiler_changed (method) -ida_idp.processor_t.deleting_func (method) -ida_idp.processor_t.determined_main (method) -ida_idp.processor_t.ev_ana_insn (method) -ida_idp.processor_t.ev_assemble (method) -ida_idp.processor_t.ev_auto_queue_empty (method) -ida_idp.processor_t.ev_calc_step_over (method) -ida_idp.processor_t.ev_can_have_type (method) -ida_idp.processor_t.ev_cmp_operands (method) -ida_idp.processor_t.ev_coagulate (method) -ida_idp.processor_t.ev_coagulate_dref (method) -ida_idp.processor_t.ev_create_func_frame (method) -ida_idp.processor_t.ev_create_switch_xrefs (method) -ida_idp.processor_t.ev_creating_segm (method) -ida_idp.processor_t.ev_emu_insn (method) -ida_idp.processor_t.ev_endbinary (method) -ida_idp.processor_t.ev_func_bounds (method) -ida_idp.processor_t.ev_gen_map_file (method) -ida_idp.processor_t.ev_gen_regvar_def (method) -ida_idp.processor_t.ev_gen_src_file_lnnum (method) -ida_idp.processor_t.ev_get_autocmt (method) -ida_idp.processor_t.ev_get_frame_retsize (method) -ida_idp.processor_t.ev_get_operand_string (method) -ida_idp.processor_t.ev_is_align_insn (method) -ida_idp.processor_t.ev_is_alloca_probe (method) -ida_idp.processor_t.ev_is_basic_block_end (method) -ida_idp.processor_t.ev_is_call_insn (method) -ida_idp.processor_t.ev_is_far_jump (method) -ida_idp.processor_t.ev_is_indirect_jump (method) -ida_idp.processor_t.ev_is_insn_table_jump (method) -ida_idp.processor_t.ev_is_ret_insn (method) -ida_idp.processor_t.ev_is_sane_insn (method) -ida_idp.processor_t.ev_is_sp_based (method) -ida_idp.processor_t.ev_is_switch (method) -ida_idp.processor_t.ev_may_be_func (method) -ida_idp.processor_t.ev_may_show_sreg (method) -ida_idp.processor_t.ev_moving_segm (method) -ida_idp.processor_t.ev_newbinary (method) -ida_idp.processor_t.ev_newfile (method) -ida_idp.processor_t.ev_newprc (method) -ida_idp.processor_t.ev_oldfile (method) -ida_idp.processor_t.ev_out_assumes (method) -ida_idp.processor_t.ev_out_data (method) -ida_idp.processor_t.ev_out_footer (method) -ida_idp.processor_t.ev_out_header (method) -ida_idp.processor_t.ev_out_insn (method) -ida_idp.processor_t.ev_out_label (method) -ida_idp.processor_t.ev_out_mnem (method) -ida_idp.processor_t.ev_out_operand (method) -ida_idp.processor_t.ev_out_segend (method) -ida_idp.processor_t.ev_out_segstart (method) -ida_idp.processor_t.ev_out_special_item (method) -ida_idp.processor_t.ev_rename (method) -ida_idp.processor_t.ev_set_idp_options (method) -ida_idp.processor_t.ev_set_proc_options (method) -ida_idp.processor_t.ev_str2reg (method) -ida_idp.processor_t.ev_treat_hindering_item (method) -ida_idp.processor_t.ev_undefine (method) -ida_idp.processor_t.ev_validate_flirt_func (method) -ida_idp.processor_t.ev_verify_noreturn (method) -ida_idp.processor_t.ev_verify_sp (method) -ida_idp.processor_t.func_added (method) -ida_idp.processor_t.get_auxpref (method) -ida_idp.processor_t.get_idpdesc (method) -ida_idp.processor_t.get_uFlag (method) -ida_idp.processor_t.idasgn_loaded (method) -ida_idp.processor_t.kernel_config_loaded (method) -ida_idp.processor_t.make_code (method) -ida_idp.processor_t.make_data (method) -ida_idp.processor_t.renamed (method) -ida_idp.processor_t.savebase (method) -ida_idp.processor_t.segm_moved (method) -ida_idp.processor_t.set_func_end (method) -ida_idp.processor_t.set_func_start (method) -ida_idp.processor_t.sgr_changed (method) -ida_idp.reg_access_t (class) -ida_idp.reg_access_t.__eq__ (method) -ida_idp.reg_access_t.__init__ (method) -ida_idp.reg_access_t.__ne__ (method) -ida_idp.reg_access_t.have_common_bits (method) -ida_idp.reg_access_t.opnum (variable) -ida_idp.reg_access_t.range (variable) -ida_idp.reg_access_t.regnum (variable) -ida_idp.reg_access_vec_t (class) -ida_idp.reg_access_vec_t.__eq__ (method) -ida_idp.reg_access_vec_t.__getitem__ (method) -ida_idp.reg_access_vec_t.__init__ (method) -ida_idp.reg_access_vec_t.__len__ (method) -ida_idp.reg_access_vec_t.__ne__ (method) -ida_idp.reg_access_vec_t.__setitem__ (method) -ida_idp.reg_access_vec_t._del (method) -ida_idp.reg_access_vec_t.add_unique (method) -ida_idp.reg_access_vec_t.at (method) -ida_idp.reg_access_vec_t.begin (method) -ida_idp.reg_access_vec_t.capacity (method) -ida_idp.reg_access_vec_t.clear (method) -ida_idp.reg_access_vec_t.empty (method) -ida_idp.reg_access_vec_t.end (method) -ida_idp.reg_access_vec_t.erase (method) -ida_idp.reg_access_vec_t.extract (method) -ida_idp.reg_access_vec_t.find (method) -ida_idp.reg_access_vec_t.grow (method) -ida_idp.reg_access_vec_t.has (method) -ida_idp.reg_access_vec_t.inject (method) -ida_idp.reg_access_vec_t.insert (method) -ida_idp.reg_access_vec_t.pop_back (method) -ida_idp.reg_access_vec_t.push_back (method) -ida_idp.reg_access_vec_t.qclear (method) -ida_idp.reg_access_vec_t.reserve (method) -ida_idp.reg_access_vec_t.resize (method) -ida_idp.reg_access_vec_t.size (method) -ida_idp.reg_access_vec_t.swap (method) -ida_idp.reg_access_vec_t.truncate (method) -ida_idp.reg_accesses_t (class) -ida_idp.reg_accesses_t.__init__ (method) -ida_idp.reg_info_t (class) -ida_idp.reg_info_t.__eq__ (method) -ida_idp.reg_info_t.__ge__ (method) -ida_idp.reg_info_t.__gt__ (method) -ida_idp.reg_info_t.__init__ (method) -ida_idp.reg_info_t.__le__ (method) -ida_idp.reg_info_t.__lt__ (method) -ida_idp.reg_info_t.__ne__ (method) -ida_idp.reg_info_t.compare (method) -ida_idp.reg_info_t.reg (variable) -ida_idp.reg_info_t.size (variable) -ida_idp.register_cfgopts (function) -ida_idp.set_processor_type (function) -ida_idp.set_target_assembler (function) -ida_idp.sizeof_ldbl (function) -ida_idp.str2reg (function) -ida_ieee (module) -ida_ieee.E_SPECIAL_EXP (variable) -ida_ieee.FPV_BADARG (variable) -ida_ieee.FPV_NAN (variable) -ida_ieee.FPV_NINF (variable) -ida_ieee.FPV_NORM (variable) -ida_ieee.FPV_PINF (variable) -ida_ieee.IEEE_EXONE (variable) -ida_ieee.REAL_ERROR_FPOVER (variable) -ida_ieee.REAL_ERROR_INTOVER (variable) -ida_ieee.REAL_ERROR_OK (variable) -ida_ieee.ecleaz (function) -ida_ieee.fpvalue_shorts_array_t (class) -ida_ieee.fpvalue_shorts_array_t.__getitem__ (method) -ida_ieee.fpvalue_shorts_array_t.__init__ (method) -ida_ieee.fpvalue_shorts_array_t.__len__ (method) -ida_ieee.fpvalue_shorts_array_t.__setitem__ (method) -ida_ieee.fpvalue_shorts_array_t._get_bytes (method) -ida_ieee.fpvalue_shorts_array_t._set_bytes (method) -ida_ieee.fpvalue_t (class) -ida_ieee.fpvalue_t.__add__ (method) -ida_ieee.fpvalue_t.__eq__ (method) -ida_ieee.fpvalue_t.__ge__ (method) -ida_ieee.fpvalue_t.__getitem__ (method) -ida_ieee.fpvalue_t.__gt__ (method) -ida_ieee.fpvalue_t.__init__ (method) -ida_ieee.fpvalue_t.__iter__ (method) -ida_ieee.fpvalue_t.__le__ (method) -ida_ieee.fpvalue_t.__lt__ (method) -ida_ieee.fpvalue_t.__mul__ (method) -ida_ieee.fpvalue_t.__ne__ (method) -ida_ieee.fpvalue_t.__setitem__ (method) -ida_ieee.fpvalue_t.__str__ (method) -ida_ieee.fpvalue_t.__sub__ (method) -ida_ieee.fpvalue_t.__truediv__ (method) -ida_ieee.fpvalue_t._get_10bytes (method) -ida_ieee.fpvalue_t._get_bytes (method) -ida_ieee.fpvalue_t._get_float (method) -ida_ieee.fpvalue_t._get_shorts (method) -ida_ieee.fpvalue_t._set_10bytes (method) -ida_ieee.fpvalue_t._set_bytes (method) -ida_ieee.fpvalue_t._set_float (method) -ida_ieee.fpvalue_t.assign (method) -ida_ieee.fpvalue_t.clear (method) -ida_ieee.fpvalue_t.compare (method) -ida_ieee.fpvalue_t.eabs (method) -ida_ieee.fpvalue_t.fadd (method) -ida_ieee.fpvalue_t.fdiv (method) -ida_ieee.fpvalue_t.fmul (method) -ida_ieee.fpvalue_t.from_10bytes (method) -ida_ieee.fpvalue_t.from_12bytes (method) -ida_ieee.fpvalue_t.from_int64 (method) -ida_ieee.fpvalue_t.from_str (method) -ida_ieee.fpvalue_t.from_sval (method) -ida_ieee.fpvalue_t.from_uint64 (method) -ida_ieee.fpvalue_t.fsub (method) -ida_ieee.fpvalue_t.get_kind (method) -ida_ieee.fpvalue_t.is_negative (method) -ida_ieee.fpvalue_t.mul_pow2 (method) -ida_ieee.fpvalue_t.negate (method) -ida_ieee.fpvalue_t.to_10bytes (method) -ida_ieee.fpvalue_t.to_12bytes (method) -ida_ieee.fpvalue_t.to_int64 (method) -ida_ieee.fpvalue_t.to_str (method) -ida_ieee.fpvalue_t.to_sval (method) -ida_ieee.fpvalue_t.to_uint64 (method) -ida_kernwin (module) -ida_kernwin.AA_CHECKABLE (variable) -ida_kernwin.AA_CHECKED (variable) -ida_kernwin.AA_ICON (variable) -ida_kernwin.AA_LABEL (variable) -ida_kernwin.AA_NONE (variable) -ida_kernwin.AA_SHORTCUT (variable) -ida_kernwin.AA_STATE (variable) -ida_kernwin.AA_TOOLTIP (variable) -ida_kernwin.AA_VISIBILITY (variable) -ida_kernwin.ACF_HAS_FIELD_DIRTREE_SELECTION (variable) -ida_kernwin.ACF_HAS_SELECTION (variable) -ida_kernwin.ACF_HAS_SOURCE (variable) -ida_kernwin.ACF_HAS_TYPE_REF (variable) -ida_kernwin.ACF_XTRN_EA (variable) -ida_kernwin.ADF_CHECKABLE (variable) -ida_kernwin.ADF_CHECKED (variable) -ida_kernwin.ADF_GLOBAL (variable) -ida_kernwin.ADF_NO_HIGHLIGHT (variable) -ida_kernwin.ADF_NO_UNDO (variable) -ida_kernwin.ADF_OT_MASK (variable) -ida_kernwin.ADF_OT_PLUGIN (variable) -ida_kernwin.ADF_OT_PLUGMOD (variable) -ida_kernwin.ADF_OT_PROCMOD (variable) -ida_kernwin.ADF_OWN_HANDLER (variable) -ida_kernwin.AHF_VERSION (variable) -ida_kernwin.AHF_VERSION_MASK (variable) -ida_kernwin.ASKBTN_BTN1 (variable) -ida_kernwin.ASKBTN_BTN2 (variable) -ida_kernwin.ASKBTN_BTN3 (variable) -ida_kernwin.ASKBTN_CANCEL (variable) -ida_kernwin.ASKBTN_NO (variable) -ida_kernwin.ASKBTN_YES (variable) -ida_kernwin.AST_DISABLE (variable) -ida_kernwin.AST_DISABLE_ALWAYS (variable) -ida_kernwin.AST_DISABLE_FOR_IDB (variable) -ida_kernwin.AST_DISABLE_FOR_WIDGET (variable) -ida_kernwin.AST_ENABLE (variable) -ida_kernwin.AST_ENABLE_ALWAYS (variable) -ida_kernwin.AST_ENABLE_FOR_IDB (variable) -ida_kernwin.AST_ENABLE_FOR_WIDGET (variable) -ida_kernwin.BWN_ADDRWATCH (variable) -ida_kernwin.BWN_BOOKMARKS (variable) -ida_kernwin.BWN_BPTS (variable) -ida_kernwin.BWN_CALLS (variable) -ida_kernwin.BWN_CALLS_CALLEES (variable) -ida_kernwin.BWN_CALLS_CALLERS (variable) -ida_kernwin.BWN_CALL_STACK (variable) -ida_kernwin.BWN_CHOOSER (variable) -ida_kernwin.BWN_CLI (variable) -ida_kernwin.BWN_CMDPALCSR (variable) -ida_kernwin.BWN_CMDPALWIN (variable) -ida_kernwin.BWN_CPUREGS (variable) -ida_kernwin.BWN_CUSTVIEW (variable) -ida_kernwin.BWN_CV_LINE_INFOS (variable) -ida_kernwin.BWN_DISASM (variable) -ida_kernwin.BWN_DISASMS (variable) -ida_kernwin.BWN_DISASM_ARROWS (variable) -ida_kernwin.BWN_DUMP (variable) -ida_kernwin.BWN_DUMPS (variable) -ida_kernwin.BWN_ENUMS (variable) -ida_kernwin.BWN_EXPORTS (variable) -ida_kernwin.BWN_FRAME (variable) -ida_kernwin.BWN_FUNCS (variable) -ida_kernwin.BWN_IMPORTS (variable) -ida_kernwin.BWN_LOCALS (variable) -ida_kernwin.BWN_LOCTYPS (variable) -ida_kernwin.BWN_MDVIEWCSR (variable) -ida_kernwin.BWN_MODULES (variable) -ida_kernwin.BWN_NAMES (variable) -ida_kernwin.BWN_NAVBAND (variable) -ida_kernwin.BWN_NOTEPAD (variable) -ida_kernwin.BWN_OUTPUT (variable) -ida_kernwin.BWN_PROBS (variable) -ida_kernwin.BWN_PSEUDOCODE (variable) -ida_kernwin.BWN_SCRIPTS_CSR (variable) -ida_kernwin.BWN_SEARCH (variable) -ida_kernwin.BWN_SEARCHS (variable) -ida_kernwin.BWN_SEGREGS (variable) -ida_kernwin.BWN_SEGS (variable) -ida_kernwin.BWN_SELS (variable) -ida_kernwin.BWN_SHORTCUTCSR (variable) -ida_kernwin.BWN_SHORTCUTWIN (variable) -ida_kernwin.BWN_SIGNS (variable) -ida_kernwin.BWN_SNIPPETS (variable) -ida_kernwin.BWN_SNIPPETS_CSR (variable) -ida_kernwin.BWN_SO_OFFSETS (variable) -ida_kernwin.BWN_SO_STRUCTS (variable) -ida_kernwin.BWN_SRCPTHMAP_CSR (variable) -ida_kernwin.BWN_SRCPTHUND_CSR (variable) -ida_kernwin.BWN_STACK (variable) -ida_kernwin.BWN_STKVIEW (variable) -ida_kernwin.BWN_STRINGS (variable) -ida_kernwin.BWN_STRUCTS (variable) -ida_kernwin.BWN_THREADS (variable) -ida_kernwin.BWN_TILIST (variable) -ida_kernwin.BWN_TILS (variable) -ida_kernwin.BWN_TRACE (variable) -ida_kernwin.BWN_UNDOHIST (variable) -ida_kernwin.BWN_UNKNOWN (variable) -ida_kernwin.BWN_WATCH (variable) -ida_kernwin.BWN_XREFS (variable) -ida_kernwin.CDVF_LINEICONS (variable) -ida_kernwin.CDVF_NOLINES (variable) -ida_kernwin.CDVF_STATUSBAR (variable) -ida_kernwin.CDVH_LINES_ALIGNMENT (variable) -ida_kernwin.CDVH_LINES_CLICK (variable) -ida_kernwin.CDVH_LINES_DBLCLICK (variable) -ida_kernwin.CDVH_LINES_DRAWICON (variable) -ida_kernwin.CDVH_LINES_ICONMARGIN (variable) -ida_kernwin.CDVH_LINES_LINENUM (variable) -ida_kernwin.CDVH_LINES_POPUP (variable) -ida_kernwin.CDVH_LINES_RADIX (variable) -ida_kernwin.CDVH_SRCVIEW (variable) -ida_kernwin.CDVH_USERDATA (variable) -ida_kernwin.CH2_LAZY_LOADED (variable) -ida_kernwin.CHCOL_DEC (variable) -ida_kernwin.CHCOL_DEFHIDDEN (variable) -ida_kernwin.CHCOL_DRAGHINT (variable) -ida_kernwin.CHCOL_EA (variable) -ida_kernwin.CHCOL_FNAME (variable) -ida_kernwin.CHCOL_FORMAT (variable) -ida_kernwin.CHCOL_HEX (variable) -ida_kernwin.CHCOL_INODENAME (variable) -ida_kernwin.CHCOL_PATH (variable) -ida_kernwin.CHCOL_PLAIN (variable) -ida_kernwin.CHITEM_BOLD (variable) -ida_kernwin.CHITEM_GRAY (variable) -ida_kernwin.CHITEM_ITALIC (variable) -ida_kernwin.CHITEM_STRIKE (variable) -ida_kernwin.CHITEM_UNDER (variable) -ida_kernwin.CHOOSER_NOMAINMENU (variable) -ida_kernwin.CHOOSER_NOSTATUSBAR (variable) -ida_kernwin.CH_ATTRS (variable) -ida_kernwin.CH_BUILTIN_MASK (variable) -ida_kernwin.CH_CAN_DEL (variable) -ida_kernwin.CH_CAN_EDIT (variable) -ida_kernwin.CH_CAN_INS (variable) -ida_kernwin.CH_CAN_REFRESH (variable) -ida_kernwin.CH_FORCE_DEFAULT (variable) -ida_kernwin.CH_HAS_DIFF (variable) -ida_kernwin.CH_HAS_DIRTREE (variable) -ida_kernwin.CH_KEEP (variable) -ida_kernwin.CH_MODAL (variable) -ida_kernwin.CH_MULTI (variable) -ida_kernwin.CH_MULTI_EDIT (variable) -ida_kernwin.CH_NOBTNS (variable) -ida_kernwin.CH_NON_PERSISTED_TREE (variable) -ida_kernwin.CH_NO_FILTER (variable) -ida_kernwin.CH_NO_SORT (variable) -ida_kernwin.CH_NO_STATUS_BAR (variable) -ida_kernwin.CH_QFLT (variable) -ida_kernwin.CH_QFTYP_DEFAULT (variable) -ida_kernwin.CH_QFTYP_FUZZY (variable) -ida_kernwin.CH_QFTYP_NORMAL (variable) -ida_kernwin.CH_QFTYP_REGEX (variable) -ida_kernwin.CH_QFTYP_WHOLE_WORDS (variable) -ida_kernwin.CH_RENAME_IS_EDIT (variable) -ida_kernwin.CH_RESTORE (variable) -ida_kernwin.CH_TM_FOLDERS_ONLY (variable) -ida_kernwin.CH_TM_FULL_TREE (variable) -ida_kernwin.CH_TM_NO_TREE (variable) -ida_kernwin.CK_EXTRA1 (variable) -ida_kernwin.CK_EXTRA10 (variable) -ida_kernwin.CK_EXTRA11 (variable) -ida_kernwin.CK_EXTRA12 (variable) -ida_kernwin.CK_EXTRA13 (variable) -ida_kernwin.CK_EXTRA14 (variable) -ida_kernwin.CK_EXTRA15 (variable) -ida_kernwin.CK_EXTRA16 (variable) -ida_kernwin.CK_EXTRA2 (variable) -ida_kernwin.CK_EXTRA3 (variable) -ida_kernwin.CK_EXTRA4 (variable) -ida_kernwin.CK_EXTRA5 (variable) -ida_kernwin.CK_EXTRA6 (variable) -ida_kernwin.CK_EXTRA7 (variable) -ida_kernwin.CK_EXTRA8 (variable) -ida_kernwin.CK_EXTRA9 (variable) -ida_kernwin.CK_TRACE (variable) -ida_kernwin.CK_TRACE_OVL (variable) -ida_kernwin.CLNL_FINDCMT (variable) -ida_kernwin.CLNL_LTRIM (variable) -ida_kernwin.CLNL_RTRIM (variable) -ida_kernwin.CREATETB_ADV (variable) -ida_kernwin.CVH_CLICK (variable) -ida_kernwin.CVH_CLOSE (variable) -ida_kernwin.CVH_CURPOS (variable) -ida_kernwin.CVH_DBLCLICK (variable) -ida_kernwin.CVH_HELP (variable) -ida_kernwin.CVH_KEYDOWN (variable) -ida_kernwin.CVH_MOUSEMOVE (variable) -ida_kernwin.CVH_POPUP (variable) -ida_kernwin.CVH_QT_AWARE (variable) -ida_kernwin.CVLF_USE_MOUSE (variable) -ida_kernwin.CVNF_ACT (variable) -ida_kernwin.CVNF_JUMP (variable) -ida_kernwin.CVNF_LAZY (variable) -ida_kernwin.Choose (class) -ida_kernwin.Choose.ALREADY_EXISTS (variable) -ida_kernwin.Choose.Activate (method) -ida_kernwin.Choose.AddCommand (method) -ida_kernwin.Choose.CH_CAN_DEL (variable) -ida_kernwin.Choose.CH_CAN_EDIT (variable) -ida_kernwin.Choose.CH_CAN_INS (variable) -ida_kernwin.Choose.CH_CAN_REFRESH (variable) -ida_kernwin.Choose.CH_FORCE_DEFAULT (variable) -ida_kernwin.Choose.CH_MODAL (variable) -ida_kernwin.Choose.CH_MULTI (variable) -ida_kernwin.Choose.CH_NOIDB (variable) -ida_kernwin.Choose.CH_NO_STATUS_BAR (variable) -ida_kernwin.Choose.CH_QFLT (variable) -ida_kernwin.Choose.CH_RENAME_IS_EDIT (variable) -ida_kernwin.Choose.CH_RESTORE (variable) -ida_kernwin.Choose.Close (method) -ida_kernwin.Choose.EMPTY_CHOOSER (variable) -ida_kernwin.Choose.Embedded (method) -ida_kernwin.Choose.GetEmbSelection (method) -ida_kernwin.Choose.GetWidget (method) -ida_kernwin.Choose.NO_ATTR (variable) -ida_kernwin.Choose.NO_SELECTION (variable) -ida_kernwin.Choose.OnClose (method) -ida_kernwin.Choose.OnDeleteLine (method) -ida_kernwin.Choose.OnEditLine (method) -ida_kernwin.Choose.OnGetDirTree (method) -ida_kernwin.Choose.OnGetEA (method) -ida_kernwin.Choose.OnGetIcon (method) -ida_kernwin.Choose.OnGetLine (method) -ida_kernwin.Choose.OnGetLineAttr (method) -ida_kernwin.Choose.OnGetSize (method) -ida_kernwin.Choose.OnIndexToDiffpos (method) -ida_kernwin.Choose.OnIndexToInode (method) -ida_kernwin.Choose.OnInit (method) -ida_kernwin.Choose.OnInsertLine (method) -ida_kernwin.Choose.OnLazyLoadDir (method) -ida_kernwin.Choose.OnPopup (method) -ida_kernwin.Choose.OnRefresh (method) -ida_kernwin.Choose.OnSelectLine (method) -ida_kernwin.Choose.OnSelectionChange (method) -ida_kernwin.Choose.Refresh (method) -ida_kernwin.Choose.Show (method) -ida_kernwin.Choose.UI_Hooks_Trampoline (class) -ida_kernwin.Choose.UI_Hooks_Trampoline.__init__ (method) -ida_kernwin.Choose.UI_Hooks_Trampoline.populating_widget_popup (method) -ida_kernwin.Choose.__init__ (method) -ida_kernwin.Choose.__init__._qccb (function) -ida_kernwin.Choose.adjust_last_item (method) -ida_kernwin.CustomIDAMemo (class) -ida_kernwin.CustomIDAMemo.CreateGroups (method) -ida_kernwin.CustomIDAMemo.DelNodesInfos (method) -ida_kernwin.CustomIDAMemo.DeleteGroups (method) -ida_kernwin.CustomIDAMemo.GetCurrentRendererType (method) -ida_kernwin.CustomIDAMemo.GetNodeInfo (method) -ida_kernwin.CustomIDAMemo.GetWidget (method) -ida_kernwin.CustomIDAMemo.GetWidgetAsGraphViewer (method) -ida_kernwin.CustomIDAMemo.Refresh (method) -ida_kernwin.CustomIDAMemo.SetCurrentRendererType (method) -ida_kernwin.CustomIDAMemo.SetGroupsVisibility (method) -ida_kernwin.CustomIDAMemo.SetNodeInfo (method) -ida_kernwin.CustomIDAMemo.SetNodesInfos (method) -ida_kernwin.CustomIDAMemo._OnBind (method) -ida_kernwin.CustomIDAMemo.__init__ (method) -ida_kernwin.CustomIDAMemo._dummy_cb (method) -ida_kernwin.CustomIDAMemo._get_cb (method) -ida_kernwin.CustomIDAMemo._get_cb_arity (method) -ida_kernwin.CustomIDAMemo._graph_item_tuple (method) -ida_kernwin.CustomIDAMemo.view_activated (method) -ida_kernwin.CustomIDAMemo.view_click (method) -ida_kernwin.CustomIDAMemo.view_close (method) -ida_kernwin.CustomIDAMemo.view_curpos (method) -ida_kernwin.CustomIDAMemo.view_dblclick (method) -ida_kernwin.CustomIDAMemo.view_deactivated (method) -ida_kernwin.CustomIDAMemo.view_keydown (method) -ida_kernwin.CustomIDAMemo.view_loc_changed (method) -ida_kernwin.CustomIDAMemo.view_mouse_moved (method) -ida_kernwin.CustomIDAMemo.view_mouse_over (method) -ida_kernwin.CustomIDAMemo.view_switched (method) -ida_kernwin.DP_BEFORE (variable) -ida_kernwin.DP_BOTTOM (variable) -ida_kernwin.DP_FLOATING (variable) -ida_kernwin.DP_INSIDE (variable) -ida_kernwin.DP_LEFT (variable) -ida_kernwin.DP_RIGHT (variable) -ida_kernwin.DP_SZHINT (variable) -ida_kernwin.DP_TAB (variable) -ida_kernwin.DP_TOP (variable) -ida_kernwin.Form (class) -ida_kernwin.Form.Add (method) -ida_kernwin.Form.AddControls (method) -ida_kernwin.Form.ButtonInput (class) -ida_kernwin.Form.ButtonInput.__init__ (method) -ida_kernwin.Form.ButtonInput.helper_cb (method) -ida_kernwin.Form.ButtonInput.is_input_field (method) -ida_kernwin.Form.ChkGroupControl (class) -ida_kernwin.Form.ChkGroupControl.ItemClass (variable) -ida_kernwin.Form.ChkGroupControl.__init__ (method) -ida_kernwin.Form.ChkGroupItemControl (class) -ida_kernwin.Form.ChkGroupItemControl.__get_value (method) -ida_kernwin.Form.ChkGroupItemControl.__init__ (method) -ida_kernwin.Form.ChkGroupItemControl.__set_value (method) -ida_kernwin.Form.ChkGroupItemControl.checked (variable) -ida_kernwin.Form.Close (method) -ida_kernwin.Form.ColorInput (class) -ida_kernwin.Form.ColorInput.__init__ (method) -ida_kernwin.Form.Compile (method) -ida_kernwin.Form.CompileEx (method) -ida_kernwin.Form.CompileEx.next_control (function) -ida_kernwin.Form.Compiled (method) -ida_kernwin.Form.Control (class) -ida_kernwin.Form.Control.__init__ (method) -ida_kernwin.Form.Control.free (method) -ida_kernwin.Form.Control.get_arg (method) -ida_kernwin.Form.Control.get_tag (method) -ida_kernwin.Form.Control.is_input_field (method) -ida_kernwin.Form.ControlToFieldTypeIdAndSize (method) -ida_kernwin.Form.DirInput (class) -ida_kernwin.Form.DirInput.__init__ (method) -ida_kernwin.Form.DropdownListControl (class) -ida_kernwin.Form.DropdownListControl.__get_selval (method) -ida_kernwin.Form.DropdownListControl.__init__ (method) -ida_kernwin.Form.DropdownListControl.__set_selval (method) -ida_kernwin.Form.DropdownListControl.free (method) -ida_kernwin.Form.DropdownListControl.selval (variable) -ida_kernwin.Form.DropdownListControl.set_items (method) -ida_kernwin.Form.EmbeddedChooserControl (class) -ida_kernwin.Form.EmbeddedChooserControl.__get_selection__ (method) -ida_kernwin.Form.EmbeddedChooserControl.__init__ (method) -ida_kernwin.Form.EmbeddedChooserControl.free (method) -ida_kernwin.Form.EmbeddedChooserControl.selection (variable) -ida_kernwin.Form.EmbeddedChooserControl.value (variable) -ida_kernwin.Form.EnableField (method) -ida_kernwin.Form.Execute (method) -ida_kernwin.Form.FT_ADDR (variable) -ida_kernwin.Form.FT_ASCII (variable) -ida_kernwin.Form.FT_BIN (variable) -ida_kernwin.Form.FT_BUTTON (variable) -ida_kernwin.Form.FT_CHAR (variable) -ida_kernwin.Form.FT_COLOR (variable) -ida_kernwin.Form.FT_DEC (variable) -ida_kernwin.Form.FT_DIR (variable) -ida_kernwin.Form.FT_DROPDOWN_LIST (variable) -ida_kernwin.Form.FT_ECHOOSER (variable) -ida_kernwin.Form.FT_FILE (variable) -ida_kernwin.Form.FT_FORMCHG (variable) -ida_kernwin.Form.FT_HEX (variable) -ida_kernwin.Form.FT_HTML_LABEL (variable) -ida_kernwin.Form.FT_IDENT (variable) -ida_kernwin.Form.FT_INT64 (variable) -ida_kernwin.Form.FT_MULTI_LINE_TEXT (variable) -ida_kernwin.Form.FT_OCT (variable) -ida_kernwin.Form.FT_RAWHEX (variable) -ida_kernwin.Form.FT_SEG (variable) -ida_kernwin.Form.FT_SHEX (variable) -ida_kernwin.Form.FT_TYPE (variable) -ida_kernwin.Form.FT_UINT64 (variable) -ida_kernwin.Form.FileInput (class) -ida_kernwin.Form.FileInput.__init__ (method) -ida_kernwin.Form.FindControlById (method) -ida_kernwin.Form.FormChangeCb (class) -ida_kernwin.Form.FormChangeCb.__init__ (method) -ida_kernwin.Form.FormChangeCb.free (method) -ida_kernwin.Form.FormChangeCb.get_tag (method) -ida_kernwin.Form.FormChangeCb.helper_cb (method) -ida_kernwin.Form.Free (method) -ida_kernwin.Form.GetControlValue (method) -ida_kernwin.Form.GetFocusedField (method) -ida_kernwin.Form.GroupControl (class) -ida_kernwin.Form.GroupControl.__init__ (method) -ida_kernwin.Form.GroupControl._reset (method) -ida_kernwin.Form.GroupControl.get_tag (method) -ida_kernwin.Form.GroupControl.next_child_pos (method) -ida_kernwin.Form.GroupItemControl (class) -ida_kernwin.Form.GroupItemControl.__init__ (method) -ida_kernwin.Form.GroupItemControl.assign_pos (method) -ida_kernwin.Form.GroupItemControl.get_tag (method) -ida_kernwin.Form.GroupItemControl.is_input_field (method) -ida_kernwin.Form.InputControl (class) -ida_kernwin.Form.InputControl.__init__ (method) -ida_kernwin.Form.InputControl.get_tag (method) -ida_kernwin.Form.InputControl.is_input_field (method) -ida_kernwin.Form.LabelControl (class) -ida_kernwin.Form.LabelControl.__init__ (method) -ida_kernwin.Form.LabelControl.get_tag (method) -ida_kernwin.Form.MoveField (method) -ida_kernwin.Form.MultiLineTextControl (class) -ida_kernwin.Form.MultiLineTextControl.__init__ (method) -ida_kernwin.Form.MultiLineTextControl.free (method) -ida_kernwin.Form.NumericArgument (class) -ida_kernwin.Form.NumericArgument.__init__ (method) -ida_kernwin.Form.NumericArgument.__set_value (method) -ida_kernwin.Form.NumericInput (class) -ida_kernwin.Form.NumericInput.__init__ (method) -ida_kernwin.Form.NumericLabel (class) -ida_kernwin.Form.NumericLabel.__init__ (method) -ida_kernwin.Form.Open (method) -ida_kernwin.Form.RadGroupControl (class) -ida_kernwin.Form.RadGroupControl.__init__ (method) -ida_kernwin.Form.RadGroupItemControl (class) -ida_kernwin.Form.RadGroupItemControl.__get_value (method) -ida_kernwin.Form.RadGroupItemControl.__init__ (method) -ida_kernwin.Form.RadGroupItemControl.__set_value (method) -ida_kernwin.Form.RadGroupItemControl.selected (variable) -ida_kernwin.Form.RefreshField (method) -ida_kernwin.Form.SetControlValue (method) -ida_kernwin.Form.SetFocusedField (method) -ida_kernwin.Form.ShowField (method) -ida_kernwin.Form.StringArgument (class) -ida_kernwin.Form.StringArgument.__get_value (method) -ida_kernwin.Form.StringArgument.__init__ (method) -ida_kernwin.Form.StringArgument.__set_value (method) -ida_kernwin.Form.StringInput (class) -ida_kernwin.Form.StringInput.__init__ (method) -ida_kernwin.Form.StringLabel (class) -ida_kernwin.Form.StringLabel.__init__ (method) -ida_kernwin.Form._AddGroup (method) -ida_kernwin.Form._ChkCompiled (method) -ida_kernwin.Form._FT_USHORT (variable) -ida_kernwin.Form._ParseFormTitle (method) -ida_kernwin.Form.__getitem__ (method) -ida_kernwin.Form.__init__ (method) -ida_kernwin.Form._reset (method) -ida_kernwin.Form.create_string_buffer (method) -ida_kernwin.Form.fieldtype_to_ctype (method) -ida_kernwin.GCRF_ALL (variable) -ida_kernwin.GCRF_CURRENT (variable) -ida_kernwin.GCRF_HEADER (variable) -ida_kernwin.GCRF_SELECTION (variable) -ida_kernwin.HIF_IDENTIFIER (variable) -ida_kernwin.HIF_LOCKED (variable) -ida_kernwin.HIF_NOCASE (variable) -ida_kernwin.HIF_REGISTER (variable) -ida_kernwin.HIF_SLOT_0 (variable) -ida_kernwin.HIF_SLOT_1 (variable) -ida_kernwin.HIF_SLOT_2 (variable) -ida_kernwin.HIF_SLOT_3 (variable) -ida_kernwin.HIF_SLOT_4 (variable) -ida_kernwin.HIF_SLOT_5 (variable) -ida_kernwin.HIF_SLOT_6 (variable) -ida_kernwin.HIF_SLOT_7 (variable) -ida_kernwin.HIF_SLOT_SHIFT (variable) -ida_kernwin.HIF_USE_SLOT (variable) -ida_kernwin.HIST_CMD (variable) -ida_kernwin.HIST_CMT (variable) -ida_kernwin.HIST_DIR (variable) -ida_kernwin.HIST_FILE (variable) -ida_kernwin.HIST_IDENT (variable) -ida_kernwin.HIST_IDENT2 (variable) -ida_kernwin.HIST_SEG (variable) -ida_kernwin.HIST_SRCH (variable) -ida_kernwin.HIST_TYPE (variable) -ida_kernwin.IDAViewWrapper (class) -ida_kernwin.IDAViewWrapper.Bind (method) -ida_kernwin.IDAViewWrapper.Unbind (method) -ida_kernwin.IDAViewWrapper.__init__ (method) -ida_kernwin.IDA_DEBUG_ACCESSIBILITY (variable) -ida_kernwin.IDA_DEBUG_ALREADY (variable) -ida_kernwin.IDA_DEBUG_ALWAYS (variable) -ida_kernwin.IDA_DEBUG_APPCALL (variable) -ida_kernwin.IDA_DEBUG_CHECKMEM (variable) -ida_kernwin.IDA_DEBUG_CONFIG (variable) -ida_kernwin.IDA_DEBUG_DBGINFO (variable) -ida_kernwin.IDA_DEBUG_DEBUGGER (variable) -ida_kernwin.IDA_DEBUG_DEMANGLE (variable) -ida_kernwin.IDA_DEBUG_DREFS (variable) -ida_kernwin.IDA_DEBUG_FLIRT (variable) -ida_kernwin.IDA_DEBUG_IDP (variable) -ida_kernwin.IDA_DEBUG_IDS (variable) -ida_kernwin.IDA_DEBUG_INTERNET (variable) -ida_kernwin.IDA_DEBUG_LDR (variable) -ida_kernwin.IDA_DEBUG_LICENSE (variable) -ida_kernwin.IDA_DEBUG_LUMINA (variable) -ida_kernwin.IDA_DEBUG_NETWORK (variable) -ida_kernwin.IDA_DEBUG_NOTIFY (variable) -ida_kernwin.IDA_DEBUG_OFFSET (variable) -ida_kernwin.IDA_DEBUG_PLUGIN (variable) -ida_kernwin.IDA_DEBUG_QUEUE (variable) -ida_kernwin.IDA_DEBUG_REGEX (variable) -ida_kernwin.IDA_DEBUG_ROLLBACK (variable) -ida_kernwin.IDA_DEBUG_SIMPLEX (variable) -ida_kernwin.IDA_DEBUG_SRCDBG (variable) -ida_kernwin.IDA_DEBUG_SUBPROC (variable) -ida_kernwin.IDA_DEBUG_THEMES (variable) -ida_kernwin.IDA_DEBUG_TIL (variable) -ida_kernwin.IDCHK_ARG (variable) -ida_kernwin.IDCHK_KEY (variable) -ida_kernwin.IDCHK_MAX (variable) -ida_kernwin.IDCHK_OK (variable) -ida_kernwin.IWID_ADDRWATCH (variable) -ida_kernwin.IWID_ALL (variable) -ida_kernwin.IWID_BOOKMARKS (variable) -ida_kernwin.IWID_BPTS (variable) -ida_kernwin.IWID_CALLS (variable) -ida_kernwin.IWID_CALLS_CALLEES (variable) -ida_kernwin.IWID_CALLS_CALLERS (variable) -ida_kernwin.IWID_CALL_STACK (variable) -ida_kernwin.IWID_CHOOSER (variable) -ida_kernwin.IWID_CLI (variable) -ida_kernwin.IWID_CMDPALCSR (variable) -ida_kernwin.IWID_CMDPALWIN (variable) -ida_kernwin.IWID_CPUREGS (variable) -ida_kernwin.IWID_CUSTVIEW (variable) -ida_kernwin.IWID_CV_LINE_INFOS (variable) -ida_kernwin.IWID_DISASM (variable) -ida_kernwin.IWID_DISASM_ARROWS (variable) -ida_kernwin.IWID_DUMP (variable) -ida_kernwin.IWID_ENUMS (variable) -ida_kernwin.IWID_EXPORTS (variable) -ida_kernwin.IWID_FRAME (variable) -ida_kernwin.IWID_FUNCS (variable) -ida_kernwin.IWID_IMPORTS (variable) -ida_kernwin.IWID_LOCALS (variable) -ida_kernwin.IWID_LOCTYPS (variable) -ida_kernwin.IWID_MDVIEWCSR (variable) -ida_kernwin.IWID_MODULES (variable) -ida_kernwin.IWID_NAMES (variable) -ida_kernwin.IWID_NAVBAND (variable) -ida_kernwin.IWID_NOTEPAD (variable) -ida_kernwin.IWID_OUTPUT (variable) -ida_kernwin.IWID_PROBS (variable) -ida_kernwin.IWID_PSEUDOCODE (variable) -ida_kernwin.IWID_SCRIPTS_CSR (variable) -ida_kernwin.IWID_SEARCH (variable) -ida_kernwin.IWID_SEGREGS (variable) -ida_kernwin.IWID_SEGS (variable) -ida_kernwin.IWID_SELS (variable) -ida_kernwin.IWID_SHORTCUTCSR (variable) -ida_kernwin.IWID_SHORTCUTWIN (variable) -ida_kernwin.IWID_SIGNS (variable) -ida_kernwin.IWID_SNIPPETS (variable) -ida_kernwin.IWID_SNIPPETS_CSR (variable) -ida_kernwin.IWID_SO_OFFSETS (variable) -ida_kernwin.IWID_SO_STRUCTS (variable) -ida_kernwin.IWID_SRCPTHMAP_CSR (variable) -ida_kernwin.IWID_SRCPTHUND_CSR (variable) -ida_kernwin.IWID_STACK (variable) -ida_kernwin.IWID_STKVIEW (variable) -ida_kernwin.IWID_STRINGS (variable) -ida_kernwin.IWID_STRUCTS (variable) -ida_kernwin.IWID_THREADS (variable) -ida_kernwin.IWID_TILIST (variable) -ida_kernwin.IWID_TILS (variable) -ida_kernwin.IWID_TRACE (variable) -ida_kernwin.IWID_UNDOHIST (variable) -ida_kernwin.IWID_WATCH (variable) -ida_kernwin.IWID_XREFS (variable) -ida_kernwin.LROEF_CPS_RANGE (variable) -ida_kernwin.LROEF_FULL_LINE (variable) -ida_kernwin.MFF_FAST (variable) -ida_kernwin.MFF_NOWAIT (variable) -ida_kernwin.MFF_READ (variable) -ida_kernwin.MFF_WRITE (variable) -ida_kernwin.PCF_EA_CAPABLE (variable) -ida_kernwin.PCF_MAKEPLACE_ALLOCATES (variable) -ida_kernwin.PluginForm (class) -ida_kernwin.PluginForm.Close (method) -ida_kernwin.PluginForm.GetWidget (method) -ida_kernwin.PluginForm.OnClose (method) -ida_kernwin.PluginForm.OnCreate (method) -ida_kernwin.PluginForm.QtWidgetToTWidget (method) -ida_kernwin.PluginForm.Show (method) -ida_kernwin.PluginForm.TWidgetToPyQtWidget (method) -ida_kernwin.PluginForm.TWidgetToPySideWidget (method) -ida_kernwin.PluginForm.WCLS_DELETE_LATER (variable) -ida_kernwin.PluginForm.WCLS_DONT_SAVE_SIZE (variable) -ida_kernwin.PluginForm.WCLS_NO_CONTEXT (variable) -ida_kernwin.PluginForm.WCLS_SAVE (variable) -ida_kernwin.PluginForm.WOPN_DP_BEFORE (variable) -ida_kernwin.PluginForm.WOPN_DP_BOTTOM (variable) -ida_kernwin.PluginForm.WOPN_DP_FLOATING (variable) -ida_kernwin.PluginForm.WOPN_DP_INSIDE (variable) -ida_kernwin.PluginForm.WOPN_DP_LEFT (variable) -ida_kernwin.PluginForm.WOPN_DP_RIGHT (variable) -ida_kernwin.PluginForm.WOPN_DP_SZHINT (variable) -ida_kernwin.PluginForm.WOPN_DP_TAB (variable) -ida_kernwin.PluginForm.WOPN_DP_TOP (variable) -ida_kernwin.PluginForm.WOPN_PERSIST (variable) -ida_kernwin.PluginForm.WOPN_RESTORE (variable) -ida_kernwin.PluginForm.__init__ (method) -ida_kernwin.PluginForm._ensure_widget_deps (method) -ida_kernwin.RENADDR_HR (variable) -ida_kernwin.RENADDR_IDA (variable) -ida_kernwin.S2EAOPT_NOCALC (variable) -ida_kernwin.SETMENU_APP (variable) -ida_kernwin.SETMENU_ENSURE_SEP (variable) -ida_kernwin.SETMENU_FIRST (variable) -ida_kernwin.SETMENU_INS (variable) -ida_kernwin.SVF_COPY_LINES (variable) -ida_kernwin.SVF_LINES_BYPTR (variable) -ida_kernwin.TCCPT_ENUMPLACE (variable) -ida_kernwin.TCCPT_IDAPLACE (variable) -ida_kernwin.TCCPT_INVALID (variable) -ida_kernwin.TCCPT_PLACE (variable) -ida_kernwin.TCCPT_SIMPLELINE_PLACE (variable) -ida_kernwin.TCCPT_STRUCTPLACE (variable) -ida_kernwin.TCCPT_TIPLACE (variable) -ida_kernwin.TCCRT_FLAT (variable) -ida_kernwin.TCCRT_GRAPH (variable) -ida_kernwin.TCCRT_INVALID (variable) -ida_kernwin.TCCRT_PROXIMITY (variable) -ida_kernwin.TWidget__from_ptrval__ (function) -ida_kernwin.UIJMP_ACTIVATE (variable) -ida_kernwin.UIJMP_ANYVIEW (variable) -ida_kernwin.UIJMP_DONTPUSH (variable) -ida_kernwin.UIJMP_IDAVIEW (variable) -ida_kernwin.UIJMP_IDAVIEW_NEW (variable) -ida_kernwin.UI_Hooks (class) -ida_kernwin.UI_Hooks.__disown__ (method) -ida_kernwin.UI_Hooks.__init__ (method) -ida_kernwin.UI_Hooks.create_desktop_widget (method) -ida_kernwin.UI_Hooks.current_widget_changed (method) -ida_kernwin.UI_Hooks.database_closed (method) -ida_kernwin.UI_Hooks.database_inited (method) -ida_kernwin.UI_Hooks.debugger_menu_change (method) -ida_kernwin.UI_Hooks.desktop_applied (method) -ida_kernwin.UI_Hooks.destroying_plugmod (method) -ida_kernwin.UI_Hooks.destroying_procmod (method) -ida_kernwin.UI_Hooks.finish_populating_widget_popup (method) -ida_kernwin.UI_Hooks.get_chooser_item_attrs (method) -ida_kernwin.UI_Hooks.get_custom_viewer_hint (method) -ida_kernwin.UI_Hooks.get_ea_hint (method) -ida_kernwin.UI_Hooks.get_item_hint (method) -ida_kernwin.UI_Hooks.get_lines_rendering_info (method) -ida_kernwin.UI_Hooks.get_widget_config (method) -ida_kernwin.UI_Hooks.hook (method) -ida_kernwin.UI_Hooks.idcstart (method) -ida_kernwin.UI_Hooks.idcstop (method) -ida_kernwin.UI_Hooks.initing_database (method) -ida_kernwin.UI_Hooks.plugin_loaded (method) -ida_kernwin.UI_Hooks.plugin_unloading (method) -ida_kernwin.UI_Hooks.populating_widget_popup (method) -ida_kernwin.UI_Hooks.postprocess_action (method) -ida_kernwin.UI_Hooks.preprocess_action (method) -ida_kernwin.UI_Hooks.range (method) -ida_kernwin.UI_Hooks.ready_to_run (method) -ida_kernwin.UI_Hooks.resume (method) -ida_kernwin.UI_Hooks.saved (method) -ida_kernwin.UI_Hooks.saving (method) -ida_kernwin.UI_Hooks.screen_ea_changed (method) -ida_kernwin.UI_Hooks.set_widget_config (method) -ida_kernwin.UI_Hooks.suspend (method) -ida_kernwin.UI_Hooks.unhook (method) -ida_kernwin.UI_Hooks.updated_actions (method) -ida_kernwin.UI_Hooks.updating_actions (method) -ida_kernwin.UI_Hooks.widget_closing (method) -ida_kernwin.UI_Hooks.widget_invisible (method) -ida_kernwin.UI_Hooks.widget_visible (method) -ida_kernwin.VES_SHIFT (variable) -ida_kernwin.VME_LEFT_BUTTON (variable) -ida_kernwin.VME_MID_BUTTON (variable) -ida_kernwin.VME_RIGHT_BUTTON (variable) -ida_kernwin.VME_UNKNOWN (variable) -ida_kernwin.View_Hooks (class) -ida_kernwin.View_Hooks.__disown__ (method) -ida_kernwin.View_Hooks.__init__ (method) -ida_kernwin.View_Hooks.hook (method) -ida_kernwin.View_Hooks.unhook (method) -ida_kernwin.View_Hooks.view_activated (method) -ida_kernwin.View_Hooks.view_click (method) -ida_kernwin.View_Hooks.view_close (method) -ida_kernwin.View_Hooks.view_created (method) -ida_kernwin.View_Hooks.view_curpos (method) -ida_kernwin.View_Hooks.view_dblclick (method) -ida_kernwin.View_Hooks.view_deactivated (method) -ida_kernwin.View_Hooks.view_keydown (method) -ida_kernwin.View_Hooks.view_loc_changed (method) -ida_kernwin.View_Hooks.view_mouse_moved (method) -ida_kernwin.View_Hooks.view_mouse_over (method) -ida_kernwin.View_Hooks.view_switched (method) -ida_kernwin.WCLS_DELETE_LATER (variable) -ida_kernwin.WCLS_DONT_SAVE_SIZE (variable) -ida_kernwin.WCLS_NO_CONTEXT (variable) -ida_kernwin.WCLS_SAVE (variable) -ida_kernwin.WOPN_CLOSED_BY_ESC (variable) -ida_kernwin.WOPN_DP_BEFORE (variable) -ida_kernwin.WOPN_DP_BOTTOM (variable) -ida_kernwin.WOPN_DP_FLOATING (variable) -ida_kernwin.WOPN_DP_INSIDE (variable) -ida_kernwin.WOPN_DP_LEFT (variable) -ida_kernwin.WOPN_DP_RIGHT (variable) -ida_kernwin.WOPN_DP_SZHINT (variable) -ida_kernwin.WOPN_DP_TAB (variable) -ida_kernwin.WOPN_DP_TOP (variable) -ida_kernwin.WOPN_NOT_CLOSED_BY_ESC (variable) -ida_kernwin.WOPN_PERSIST (variable) -ida_kernwin.WOPN_RESTORE (variable) -ida_kernwin.__qtimer_t (class) -ida_kernwin.__qtimer_t.__init__ (method) -ida_kernwin._ask_addr (function) -ida_kernwin._ask_long (function) -ida_kernwin._ask_seg (function) -ida_kernwin._kludge_force_declare_dirspec_t (function) -ida_kernwin._kludge_force_declare_dirtree_t (function) -ida_kernwin.action_ctx_base_cur_sel_t (class) -ida_kernwin.action_ctx_base_cur_sel_t.__init__ (method) -ida_kernwin.action_ctx_base_cur_sel_t.reset (method) -ida_kernwin.action_ctx_base_cur_sel_t.to (variable) -ida_kernwin.action_ctx_base_source_t (class) -ida_kernwin.action_ctx_base_source_t.__init__ (method) -ida_kernwin.action_ctx_base_source_t.reset (method) -ida_kernwin.action_ctx_base_t (class) -ida_kernwin.action_ctx_base_t.__init__ (method) -ida_kernwin.action_ctx_base_t.action (variable) -ida_kernwin.action_ctx_base_t.chooser_selection (variable) -ida_kernwin.action_ctx_base_t.cur_ea (variable) -ida_kernwin.action_ctx_base_t.cur_enum (variable) -ida_kernwin.action_ctx_base_t.cur_fchunk (variable) -ida_kernwin.action_ctx_base_t.cur_flags (variable) -ida_kernwin.action_ctx_base_t.cur_func (variable) -ida_kernwin.action_ctx_base_t.cur_seg (variable) -ida_kernwin.action_ctx_base_t.cur_sel (variable) -ida_kernwin.action_ctx_base_t.cur_strmem (variable) -ida_kernwin.action_ctx_base_t.cur_struc (variable) -ida_kernwin.action_ctx_base_t.cur_value (variable) -ida_kernwin.action_ctx_base_t.dirtree_selection (variable) -ida_kernwin.action_ctx_base_t.focus (variable) -ida_kernwin.action_ctx_base_t.graph_selection (variable) -ida_kernwin.action_ctx_base_t.has_flag (method) -ida_kernwin.action_ctx_base_t.regname (variable) -ida_kernwin.action_ctx_base_t.reset (method) -ida_kernwin.action_ctx_base_t.source (variable) -ida_kernwin.action_ctx_base_t.type_ref (variable) -ida_kernwin.action_ctx_base_t.widget_title (variable) -ida_kernwin.action_ctx_base_t.widget_type (variable) -ida_kernwin.action_desc_t (class) -ida_kernwin.action_desc_t.__init__ (method) -ida_kernwin.action_desc_t.cb (variable) -ida_kernwin.action_desc_t.flags (variable) -ida_kernwin.action_desc_t.icon (variable) -ida_kernwin.action_desc_t.label (variable) -ida_kernwin.action_desc_t.name (variable) -ida_kernwin.action_desc_t.owner (variable) -ida_kernwin.action_desc_t.shortcut (variable) -ida_kernwin.action_desc_t.tooltip (variable) -ida_kernwin.action_handler_t (class) -ida_kernwin.action_handler_t.__init__ (method) -ida_kernwin.action_handler_t.activate (method) -ida_kernwin.action_handler_t.update (method) -ida_kernwin.activate_widget (function) -ida_kernwin.add_hotkey (function) -ida_kernwin.add_idc_hotkey (function) -ida_kernwin.add_spaces (function) -ida_kernwin.addon_count (function) -ida_kernwin.addon_info_t (class) -ida_kernwin.addon_info_t.__init__ (method) -ida_kernwin.analyzer_options (function) -ida_kernwin.ask_addr (function) -ida_kernwin.ask_buttons (function) -ida_kernwin.ask_file (function) -ida_kernwin.ask_for_feedback (function) -ida_kernwin.ask_form (function) -ida_kernwin.ask_ident (function) -ida_kernwin.ask_ident2 (function) -ida_kernwin.ask_long (function) -ida_kernwin.ask_seg (function) -ida_kernwin.ask_str (function) -ida_kernwin.ask_text (function) -ida_kernwin.ask_yn (function) -ida_kernwin.atoea (function) -ida_kernwin.attach_action_to_menu (function) -ida_kernwin.attach_action_to_popup (function) -ida_kernwin.attach_action_to_toolbar (function) -ida_kernwin.attach_dynamic_action_to_popup (function) -ida_kernwin.banner (function) -ida_kernwin.beep (function) -ida_kernwin.call_nav_colorizer (function) -ida_kernwin.cancel_exec_request (function) -ida_kernwin.cancel_thread_exec_requests (function) -ida_kernwin.choose_activate (function) -ida_kernwin.choose_choose (function) -ida_kernwin.choose_close (function) -ida_kernwin.choose_create_embedded_chobj (function) -ida_kernwin.choose_entry (function) -ida_kernwin.choose_enum (function) -ida_kernwin.choose_enum_by_value (function) -ida_kernwin.choose_find (function) -ida_kernwin.choose_func (function) -ida_kernwin.choose_get_widget (function) -ida_kernwin.choose_idasgn (function) -ida_kernwin.choose_name (function) -ida_kernwin.choose_refresh (function) -ida_kernwin.choose_segm (function) -ida_kernwin.choose_srcp (function) -ida_kernwin.choose_stkvar_xref (function) -ida_kernwin.choose_struc (function) -ida_kernwin.choose_struct (function) -ida_kernwin.choose_til (function) -ida_kernwin.choose_xref (function) -ida_kernwin.chooser_base_t (class) -ida_kernwin.chooser_base_t.__init__ (method) -ida_kernwin.chooser_base_t.ask_item_attrs (method) -ida_kernwin.chooser_base_t.can_del (method) -ida_kernwin.chooser_base_t.can_edit (method) -ida_kernwin.chooser_base_t.can_filter (method) -ida_kernwin.chooser_base_t.can_ins (method) -ida_kernwin.chooser_base_t.can_refresh (method) -ida_kernwin.chooser_base_t.can_sort (method) -ida_kernwin.chooser_base_t.columns (variable) -ida_kernwin.chooser_base_t.deflt_col (variable) -ida_kernwin.chooser_base_t.get_builtin_number (method) -ida_kernwin.chooser_base_t.get_count (method) -ida_kernwin.chooser_base_t.get_ea (method) -ida_kernwin.chooser_base_t.get_quick_filter_initial_mode (method) -ida_kernwin.chooser_base_t.get_row (method) -ida_kernwin.chooser_base_t.has_diff_capability (method) -ida_kernwin.chooser_base_t.has_dirtree (method) -ida_kernwin.chooser_base_t.has_inode_to_index (method) -ida_kernwin.chooser_base_t.header (variable) -ida_kernwin.chooser_base_t.height (variable) -ida_kernwin.chooser_base_t.icon (variable) -ida_kernwin.chooser_base_t.is_dirtree_persisted (method) -ida_kernwin.chooser_base_t.is_force_default (method) -ida_kernwin.chooser_base_t.is_lazy_loaded (method) -ida_kernwin.chooser_base_t.is_modal (method) -ida_kernwin.chooser_base_t.is_multi (method) -ida_kernwin.chooser_base_t.is_quick_filter_visible_initially (method) -ida_kernwin.chooser_base_t.is_same (method) -ida_kernwin.chooser_base_t.is_status_bar_hidden (method) -ida_kernwin.chooser_base_t.popup_allowed (method) -ida_kernwin.chooser_base_t.popup_names (variable) -ida_kernwin.chooser_base_t.should_rename_trigger_edit (method) -ida_kernwin.chooser_base_t.should_restore_geometry (method) -ida_kernwin.chooser_base_t.title (variable) -ida_kernwin.chooser_base_t.width (variable) -ida_kernwin.chooser_base_t.widths (variable) -ida_kernwin.chooser_base_t.x0 (variable) -ida_kernwin.chooser_item_attrs_t (class) -ida_kernwin.chooser_item_attrs_t.__eq__ (method) -ida_kernwin.chooser_item_attrs_t.__init__ (method) -ida_kernwin.chooser_item_attrs_t.color (variable) -ida_kernwin.chooser_item_attrs_t.flags (variable) -ida_kernwin.chooser_item_attrs_t.reset (method) -ida_kernwin.chooser_row_info_t (class) -ida_kernwin.chooser_row_info_t.__eq__ (method) -ida_kernwin.chooser_row_info_t.__init__ (method) -ida_kernwin.chooser_row_info_t.__ne__ (method) -ida_kernwin.chooser_row_info_t.attrs (variable) -ida_kernwin.chooser_row_info_t.icon (variable) -ida_kernwin.chooser_row_info_t.texts (variable) -ida_kernwin.chooser_row_info_vec_t (class) -ida_kernwin.chooser_row_info_vec_t.__eq__ (method) -ida_kernwin.chooser_row_info_vec_t.__getitem__ (method) -ida_kernwin.chooser_row_info_vec_t.__init__ (method) -ida_kernwin.chooser_row_info_vec_t.__len__ (method) -ida_kernwin.chooser_row_info_vec_t.__ne__ (method) -ida_kernwin.chooser_row_info_vec_t.__setitem__ (method) -ida_kernwin.chooser_row_info_vec_t._del (method) -ida_kernwin.chooser_row_info_vec_t.add_unique (method) -ida_kernwin.chooser_row_info_vec_t.at (method) -ida_kernwin.chooser_row_info_vec_t.begin (method) -ida_kernwin.chooser_row_info_vec_t.capacity (method) -ida_kernwin.chooser_row_info_vec_t.clear (method) -ida_kernwin.chooser_row_info_vec_t.empty (method) -ida_kernwin.chooser_row_info_vec_t.end (method) -ida_kernwin.chooser_row_info_vec_t.erase (method) -ida_kernwin.chooser_row_info_vec_t.extract (method) -ida_kernwin.chooser_row_info_vec_t.find (method) -ida_kernwin.chooser_row_info_vec_t.grow (method) -ida_kernwin.chooser_row_info_vec_t.has (method) -ida_kernwin.chooser_row_info_vec_t.inject (method) -ida_kernwin.chooser_row_info_vec_t.insert (method) -ida_kernwin.chooser_row_info_vec_t.pop_back (method) -ida_kernwin.chooser_row_info_vec_t.push_back (method) -ida_kernwin.chooser_row_info_vec_t.qclear (method) -ida_kernwin.chooser_row_info_vec_t.reserve (method) -ida_kernwin.chooser_row_info_vec_t.resize (method) -ida_kernwin.chooser_row_info_vec_t.size (method) -ida_kernwin.chooser_row_info_vec_t.swap (method) -ida_kernwin.chooser_row_info_vec_t.truncate (method) -ida_kernwin.chooser_stdact_desc_t (class) -ida_kernwin.chooser_stdact_desc_t.__disown__ (method) -ida_kernwin.chooser_stdact_desc_t.__init__ (method) -ida_kernwin.chooser_stdact_desc_t.label (variable) -ida_kernwin.chooser_stdact_desc_t.ucb (method) -ida_kernwin.chooser_stdact_desc_t.version (variable) -ida_kernwin.chtype_entry (variable) -ida_kernwin.chtype_enum (variable) -ida_kernwin.chtype_enum_by_value (variable) -ida_kernwin.chtype_enum_by_value_and_size (variable) -ida_kernwin.chtype_func (variable) -ida_kernwin.chtype_generic (variable) -ida_kernwin.chtype_idasgn (variable) -ida_kernwin.chtype_idatil (variable) -ida_kernwin.chtype_name (variable) -ida_kernwin.chtype_obsolete_enum (variable) -ida_kernwin.chtype_obsolete_enum_by_value_and_size (variable) -ida_kernwin.chtype_obsolete_struc (variable) -ida_kernwin.chtype_segm (variable) -ida_kernwin.chtype_srcp (variable) -ida_kernwin.chtype_stkvar_xref (variable) -ida_kernwin.chtype_strpath (variable) -ida_kernwin.chtype_struct (variable) -ida_kernwin.chtype_xref (variable) -ida_kernwin.clear_refresh_request (function) -ida_kernwin.cli_t (class) -ida_kernwin.cli_t.OnCompleteLine (method) -ida_kernwin.cli_t.OnExecuteLine (method) -ida_kernwin.cli_t.OnKeydown (method) -ida_kernwin.cli_t.__del__ (method) -ida_kernwin.cli_t.__init__ (method) -ida_kernwin.cli_t.register (method) -ida_kernwin.cli_t.unregister (method) -ida_kernwin.close_chooser (function) -ida_kernwin.close_widget (function) -ida_kernwin.clr_cancelled (function) -ida_kernwin.create_code_viewer (function) -ida_kernwin.create_empty_widget (function) -ida_kernwin.create_menu (function) -ida_kernwin.create_toolbar (function) -ida_kernwin.custom_viewer_jump (function) -ida_kernwin.del_hotkey (function) -ida_kernwin.del_idc_hotkey (function) -ida_kernwin.delete_menu (function) -ida_kernwin.delete_toolbar (function) -ida_kernwin.detach_action_from_menu (function) -ida_kernwin.detach_action_from_popup (function) -ida_kernwin.detach_action_from_toolbar (function) -ida_kernwin.disabled_script_timeout_t (class) -ida_kernwin.disabled_script_timeout_t.__enter__ (method) -ida_kernwin.disabled_script_timeout_t.__exit__ (method) -ida_kernwin.disasm_line_t (class) -ida_kernwin.disasm_line_t.__init__ (method) -ida_kernwin.disasm_text_t (class) -ida_kernwin.disasm_text_t.__getitem__ (method) -ida_kernwin.disasm_text_t.__init__ (method) -ida_kernwin.disasm_text_t.__len__ (method) -ida_kernwin.disasm_text_t.__setitem__ (method) -ida_kernwin.disasm_text_t.at (method) -ida_kernwin.disasm_text_t.begin (method) -ida_kernwin.disasm_text_t.capacity (method) -ida_kernwin.disasm_text_t.clear (method) -ida_kernwin.disasm_text_t.empty (method) -ida_kernwin.disasm_text_t.end (method) -ida_kernwin.disasm_text_t.erase (method) -ida_kernwin.disasm_text_t.extract (method) -ida_kernwin.disasm_text_t.grow (method) -ida_kernwin.disasm_text_t.inject (method) -ida_kernwin.disasm_text_t.insert (method) -ida_kernwin.disasm_text_t.pop_back (method) -ida_kernwin.disasm_text_t.push_back (method) -ida_kernwin.disasm_text_t.qclear (method) -ida_kernwin.disasm_text_t.reserve (method) -ida_kernwin.disasm_text_t.resize (method) -ida_kernwin.disasm_text_t.size (method) -ida_kernwin.disasm_text_t.swap (method) -ida_kernwin.disasm_text_t.truncate (method) -ida_kernwin.display_copyright_warning (function) -ida_kernwin.display_widget (function) -ida_kernwin.ea2str (function) -ida_kernwin.ea_viewer_history_push_and_jump (function) -ida_kernwin.enable_chooser_item_attrs (function) -ida_kernwin.enumplace_t (class) -ida_kernwin.enumplace_t.__init__ (method) -ida_kernwin.enumplace_t.bmask (variable) -ida_kernwin.enumplace_t.idx (variable) -ida_kernwin.enumplace_t.serial (variable) -ida_kernwin.enumplace_t.value (variable) -ida_kernwin.error (function) -ida_kernwin.execute_sync (function) -ida_kernwin.execute_ui_requests (function) -ida_kernwin.find_widget (function) -ida_kernwin.formchgcbfa_close (function) -ida_kernwin.formchgcbfa_enable_field (function) -ida_kernwin.formchgcbfa_get_field_value (function) -ida_kernwin.formchgcbfa_get_focused_field (function) -ida_kernwin.formchgcbfa_move_field (function) -ida_kernwin.formchgcbfa_refresh_field (function) -ida_kernwin.formchgcbfa_set_field_value (function) -ida_kernwin.formchgcbfa_set_focused_field (function) -ida_kernwin.formchgcbfa_show_field (function) -ida_kernwin.free_custom_icon (function) -ida_kernwin.gen_disasm_text (function) -ida_kernwin.get_action_checkable (function) -ida_kernwin.get_action_checked (function) -ida_kernwin.get_action_icon (function) -ida_kernwin.get_action_label (function) -ida_kernwin.get_action_shortcut (function) -ida_kernwin.get_action_state (function) -ida_kernwin.get_action_tooltip (function) -ida_kernwin.get_action_visibility (function) -ida_kernwin.get_active_modal_widget (function) -ida_kernwin.get_addon_info (function) -ida_kernwin.get_addon_info_idx (function) -ida_kernwin.get_chooser_data (function) -ida_kernwin.get_chooser_obj (function) -ida_kernwin.get_chooser_rows (function) -ida_kernwin.get_curline (function) -ida_kernwin.get_current_viewer (function) -ida_kernwin.get_current_widget (function) -ida_kernwin.get_cursor (function) -ida_kernwin.get_custom_viewer_curline (function) -ida_kernwin.get_custom_viewer_location (function) -ida_kernwin.get_custom_viewer_place (function) -ida_kernwin.get_custom_viewer_place_xcoord (function) -ida_kernwin.get_ea_viewer_history_info (function) -ida_kernwin.get_hexdump_ea (function) -ida_kernwin.get_highlight (function) -ida_kernwin.get_icon_id_by_name (function) -ida_kernwin.get_kernel_version (function) -ida_kernwin.get_key_code (function) -ida_kernwin.get_navband_ea (function) -ida_kernwin.get_navband_pixel (function) -ida_kernwin.get_opnum (function) -ida_kernwin.get_output_curline (function) -ida_kernwin.get_output_cursor (function) -ida_kernwin.get_output_selected_text (function) -ida_kernwin.get_place_class (function) -ida_kernwin.get_place_class_id (function) -ida_kernwin.get_place_class_template (function) -ida_kernwin.get_registered_actions (function) -ida_kernwin.get_screen_ea (function) -ida_kernwin.get_synced_group (function) -ida_kernwin.get_tab_size (function) -ida_kernwin.get_user_input_event (function) -ida_kernwin.get_user_strlist_options (function) -ida_kernwin.get_view_renderer_type (function) -ida_kernwin.get_viewer_place_type (function) -ida_kernwin.get_viewer_user_data (function) -ida_kernwin.get_widget_title (function) -ida_kernwin.get_widget_type (function) -ida_kernwin.get_window_id (function) -ida_kernwin.hide_wait_box (function) -ida_kernwin.idaplace_t (class) -ida_kernwin.idaplace_t.__init__ (method) -ida_kernwin.idaplace_t.ea (variable) -ida_kernwin.info (function) -ida_kernwin.input_event_keyboard_data_t (class) -ida_kernwin.input_event_keyboard_data_t.__init__ (method) -ida_kernwin.input_event_mouse_data_t (class) -ida_kernwin.input_event_mouse_data_t.__init__ (method) -ida_kernwin.input_event_shortcut_data_t (class) -ida_kernwin.input_event_shortcut_data_t.__init__ (method) -ida_kernwin.input_event_t (class) -ida_kernwin.input_event_t.__init__ (method) -ida_kernwin.input_event_t._source_as_size (method) -ida_kernwin.input_event_t._target_as_size (method) -ida_kernwin.input_event_t.cb (variable) -ida_kernwin.input_event_t.get_source_QEvent (method) -ida_kernwin.input_event_t.get_target_QWidget (method) -ida_kernwin.input_event_t.kind (variable) -ida_kernwin.input_event_t.modifiers (variable) -ida_kernwin.input_event_t.source (variable) -ida_kernwin.input_event_t.target (variable) -ida_kernwin.install_command_interpreter (function) -ida_kernwin.internal_register_place_class (function) -ida_kernwin.is_action_enabled (function) -ida_kernwin.is_chooser_widget (function) -ida_kernwin.is_idaq (function) -ida_kernwin.is_idaview (function) -ida_kernwin.is_msg_inited (function) -ida_kernwin.is_place_class_ea_capable (function) -ida_kernwin.is_refresh_requested (function) -ida_kernwin.is_tif_cursor_footer (function) -ida_kernwin.is_tif_cursor_header (function) -ida_kernwin.is_tif_cursor_index (function) -ida_kernwin.jobj_wrapper_t (class) -ida_kernwin.jobj_wrapper_t.__init__ (method) -ida_kernwin.jobj_wrapper_t.get_dict (method) -ida_kernwin.jumpto (function) -ida_kernwin.l_compare2 (function) -ida_kernwin.line_rendering_output_entries_refs_t (class) -ida_kernwin.line_rendering_output_entries_refs_t.__eq__ (method) -ida_kernwin.line_rendering_output_entries_refs_t.__getitem__ (method) -ida_kernwin.line_rendering_output_entries_refs_t.__init__ (method) -ida_kernwin.line_rendering_output_entries_refs_t.__len__ (method) -ida_kernwin.line_rendering_output_entries_refs_t.__ne__ (method) -ida_kernwin.line_rendering_output_entries_refs_t.__setitem__ (method) -ida_kernwin.line_rendering_output_entries_refs_t._del (method) -ida_kernwin.line_rendering_output_entries_refs_t._internal_push_back (method) -ida_kernwin.line_rendering_output_entries_refs_t.add_unique (method) -ida_kernwin.line_rendering_output_entries_refs_t.at (method) -ida_kernwin.line_rendering_output_entries_refs_t.begin (method) -ida_kernwin.line_rendering_output_entries_refs_t.capacity (method) -ida_kernwin.line_rendering_output_entries_refs_t.clear (method) -ida_kernwin.line_rendering_output_entries_refs_t.empty (method) -ida_kernwin.line_rendering_output_entries_refs_t.end (method) -ida_kernwin.line_rendering_output_entries_refs_t.erase (method) -ida_kernwin.line_rendering_output_entries_refs_t.extract (method) -ida_kernwin.line_rendering_output_entries_refs_t.find (method) -ida_kernwin.line_rendering_output_entries_refs_t.has (method) -ida_kernwin.line_rendering_output_entries_refs_t.inject (method) -ida_kernwin.line_rendering_output_entries_refs_t.insert (method) -ida_kernwin.line_rendering_output_entries_refs_t.pop_back (method) -ida_kernwin.line_rendering_output_entries_refs_t.push_back (method) -ida_kernwin.line_rendering_output_entries_refs_t.push_back (method) -ida_kernwin.line_rendering_output_entries_refs_t.qclear (method) -ida_kernwin.line_rendering_output_entries_refs_t.reserve (method) -ida_kernwin.line_rendering_output_entries_refs_t.resize (method) -ida_kernwin.line_rendering_output_entries_refs_t.size (method) -ida_kernwin.line_rendering_output_entries_refs_t.swap (method) -ida_kernwin.line_rendering_output_entries_refs_t.truncate (method) -ida_kernwin.line_rendering_output_entry_t (class) -ida_kernwin.line_rendering_output_entry_t.__eq__ (method) -ida_kernwin.line_rendering_output_entry_t.__init__ (method) -ida_kernwin.line_rendering_output_entry_t.__ne__ (method) -ida_kernwin.line_rendering_output_entry_t.cpx (variable) -ida_kernwin.line_rendering_output_entry_t.flags (variable) -ida_kernwin.line_rendering_output_entry_t.is_bg_color_direct (method) -ida_kernwin.line_rendering_output_entry_t.is_bg_color_empty (method) -ida_kernwin.line_rendering_output_entry_t.is_bg_color_key (method) -ida_kernwin.line_rendering_output_entry_t.nchars (variable) -ida_kernwin.line_section_t (class) -ida_kernwin.line_section_t.__init__ (method) -ida_kernwin.line_section_t.contains (method) -ida_kernwin.line_section_t.is_closed (method) -ida_kernwin.line_section_t.is_open (method) -ida_kernwin.line_section_t.valid (method) -ida_kernwin.linearray_t (class) -ida_kernwin.linearray_t.__init__ (method) -ida_kernwin.linearray_t.beginning (method) -ida_kernwin.linearray_t.down (method) -ida_kernwin.linearray_t.ending (method) -ida_kernwin.linearray_t.get_bg_color (method) -ida_kernwin.linearray_t.get_dlnnum (method) -ida_kernwin.linearray_t.get_linecnt (method) -ida_kernwin.linearray_t.get_pfx_color (method) -ida_kernwin.linearray_t.get_place (method) -ida_kernwin.linearray_t.set_place (method) -ida_kernwin.linearray_t.set_userdata (method) -ida_kernwin.linearray_t.up (method) -ida_kernwin.linearray_t.userdata (method) -ida_kernwin.lines_rendering_input_t (class) -ida_kernwin.lines_rendering_input_t.__init__ (method) -ida_kernwin.lines_rendering_input_t.sections_lines (variable) -ida_kernwin.lines_rendering_input_t.sync_group (variable) -ida_kernwin.lines_rendering_output_t (class) -ida_kernwin.lines_rendering_output_t.__eq__ (method) -ida_kernwin.lines_rendering_output_t.__init__ (method) -ida_kernwin.lines_rendering_output_t.__ne__ (method) -ida_kernwin.lines_rendering_output_t.clear (method) -ida_kernwin.lines_rendering_output_t.swap (method) -ida_kernwin.listing_location_t (class) -ida_kernwin.listing_location_t.__init__ (method) -ida_kernwin.load_custom_icon (function) -ida_kernwin.load_dbg_dbginfo (function) -ida_kernwin.lookup_key_code (function) -ida_kernwin.mbox_internal (variable) -ida_kernwin.msg (function) -ida_kernwin.msg_activated (variable) -ida_kernwin.msg_clear (function) -ida_kernwin.msg_click (variable) -ida_kernwin.msg_closed (variable) -ida_kernwin.msg_dblclick (variable) -ida_kernwin.msg_deactivated (variable) -ida_kernwin.msg_get_lines (function) -ida_kernwin.msg_keydown (variable) -ida_kernwin.msg_save (function) -ida_kernwin.nomem (function) -ida_kernwin.open_bookmarks_window (function) -ida_kernwin.open_bpts_window (function) -ida_kernwin.open_calls_window (function) -ida_kernwin.open_disasm_window (function) -ida_kernwin.open_enums_window (function) -ida_kernwin.open_exports_window (function) -ida_kernwin.open_form (function) -ida_kernwin.open_frame_window (function) -ida_kernwin.open_funcs_window (function) -ida_kernwin.open_hexdump_window (function) -ida_kernwin.open_imports_window (function) -ida_kernwin.open_loctypes_window (function) -ida_kernwin.open_modules_window (function) -ida_kernwin.open_names_window (function) -ida_kernwin.open_navband_window (function) -ida_kernwin.open_notepad_window (function) -ida_kernwin.open_problems_window (function) -ida_kernwin.open_segments_window (function) -ida_kernwin.open_segregs_window (function) -ida_kernwin.open_selectors_window (function) -ida_kernwin.open_signatures_window (function) -ida_kernwin.open_stack_window (function) -ida_kernwin.open_strings_window (function) -ida_kernwin.open_structs_window (function) -ida_kernwin.open_threads_window (function) -ida_kernwin.open_tils_window (function) -ida_kernwin.open_trace_window (function) -ida_kernwin.open_url (function) -ida_kernwin.open_xrefs_window (function) -ida_kernwin.place_t (class) -ida_kernwin.place_t.__init__ (method) -ida_kernwin.place_t._print (method) -ida_kernwin.place_t.adjust (method) -ida_kernwin.place_t.as_enumplace_t (method) -ida_kernwin.place_t.as_idaplace_t (method) -ida_kernwin.place_t.as_simpleline_place_t (method) -ida_kernwin.place_t.as_structplace_t (method) -ida_kernwin.place_t.as_tiplace_t (method) -ida_kernwin.place_t.beginning (method) -ida_kernwin.place_t.clone (method) -ida_kernwin.place_t.compare (method) -ida_kernwin.place_t.compare2 (method) -ida_kernwin.place_t.copyfrom (method) -ida_kernwin.place_t.deserialize (method) -ida_kernwin.place_t.ending (method) -ida_kernwin.place_t.enter (method) -ida_kernwin.place_t.generate (method) -ida_kernwin.place_t.id (method) -ida_kernwin.place_t.leave (method) -ida_kernwin.place_t.lnnum (variable) -ida_kernwin.place_t.makeplace (method) -ida_kernwin.place_t.name (method) -ida_kernwin.place_t.next (method) -ida_kernwin.place_t.prev (method) -ida_kernwin.place_t.rebase (method) -ida_kernwin.place_t.serialize (method) -ida_kernwin.place_t.toea (method) -ida_kernwin.place_t.touval (method) -ida_kernwin.place_t_as_enumplace_t (function) -ida_kernwin.place_t_as_idaplace_t (function) -ida_kernwin.place_t_as_simpleline_place_t (function) -ida_kernwin.place_t_as_structplace_t (function) -ida_kernwin.place_t_as_tiplace_t (function) -ida_kernwin.plgform_close (function) -ida_kernwin.plgform_get_widget (function) -ida_kernwin.plgform_new (function) -ida_kernwin.plgform_show (function) -ida_kernwin.process_ui_action (function) -ida_kernwin.py_chooser_base_t_get_row (function) -ida_kernwin.py_get_ask_form (function) -ida_kernwin.py_get_open_form (function) -ida_kernwin.py_load_custom_icon_data (function) -ida_kernwin.py_load_custom_icon_fn (function) -ida_kernwin.py_register_compiled_form (function) -ida_kernwin.py_unregister_compiled_form (function) -ida_kernwin.pyidag_bind (function) -ida_kernwin.pyidag_unbind (function) -ida_kernwin.pyscv_add_line (function) -ida_kernwin.pyscv_clear_lines (function) -ida_kernwin.pyscv_close (function) -ida_kernwin.pyscv_count (function) -ida_kernwin.pyscv_del_line (function) -ida_kernwin.pyscv_edit_line (function) -ida_kernwin.pyscv_get_current_line (function) -ida_kernwin.pyscv_get_current_word (function) -ida_kernwin.pyscv_get_line (function) -ida_kernwin.pyscv_get_pos (function) -ida_kernwin.pyscv_get_selection (function) -ida_kernwin.pyscv_get_widget (function) -ida_kernwin.pyscv_init (function) -ida_kernwin.pyscv_insert_line (function) -ida_kernwin.pyscv_is_focused (function) -ida_kernwin.pyscv_jumpto (function) -ida_kernwin.pyscv_patch_line (function) -ida_kernwin.pyscv_refresh (function) -ida_kernwin.pyscv_show (function) -ida_kernwin.qcleanline (function) -ida_kernwin.quick_widget_commands_t (class) -ida_kernwin.quick_widget_commands_t.__init__ (method) -ida_kernwin.quick_widget_commands_t._ah_t (class) -ida_kernwin.quick_widget_commands_t._ah_t.__init__ (method) -ida_kernwin.quick_widget_commands_t._ah_t.activate (method) -ida_kernwin.quick_widget_commands_t._ah_t.update (method) -ida_kernwin.quick_widget_commands_t._cmd_t (class) -ida_kernwin.quick_widget_commands_t._cmd_t.__init__ (method) -ida_kernwin.quick_widget_commands_t.add (method) -ida_kernwin.quick_widget_commands_t.populate_popup (method) -ida_kernwin.read_range_selection (function) -ida_kernwin.read_selection (function) -ida_kernwin.refresh_chooser (function) -ida_kernwin.refresh_choosers (function) -ida_kernwin.refresh_custom_viewer (function) -ida_kernwin.refresh_idaview (function) -ida_kernwin.refresh_idaview_anyway (function) -ida_kernwin.refresh_navband (function) -ida_kernwin.register_action (function) -ida_kernwin.register_addon (function) -ida_kernwin.register_and_attach_to_menu (function) -ida_kernwin.register_timer (function) -ida_kernwin.remove_command_interpreter (function) -ida_kernwin.renderer_pos_info_t (class) -ida_kernwin.renderer_pos_info_t.__eq__ (method) -ida_kernwin.renderer_pos_info_t.__init__ (method) -ida_kernwin.renderer_pos_info_t.__ne__ (method) -ida_kernwin.renderer_pos_info_t.cx (variable) -ida_kernwin.renderer_pos_info_t.cy (variable) -ida_kernwin.renderer_pos_info_t.node (variable) -ida_kernwin.renderer_pos_info_t.sx (variable) -ida_kernwin.repaint_custom_viewer (function) -ida_kernwin.replace_wait_box (function) -ida_kernwin.request_refresh (function) -ida_kernwin.restore_database_snapshot (function) -ida_kernwin.section_lines_refs_t (class) -ida_kernwin.section_lines_refs_t.__eq__ (method) -ida_kernwin.section_lines_refs_t.__getitem__ (method) -ida_kernwin.section_lines_refs_t.__init__ (method) -ida_kernwin.section_lines_refs_t.__len__ (method) -ida_kernwin.section_lines_refs_t.__ne__ (method) -ida_kernwin.section_lines_refs_t.__setitem__ (method) -ida_kernwin.section_lines_refs_t._del (method) -ida_kernwin.section_lines_refs_t.add_unique (method) -ida_kernwin.section_lines_refs_t.at (method) -ida_kernwin.section_lines_refs_t.begin (method) -ida_kernwin.section_lines_refs_t.capacity (method) -ida_kernwin.section_lines_refs_t.clear (method) -ida_kernwin.section_lines_refs_t.empty (method) -ida_kernwin.section_lines_refs_t.end (method) -ida_kernwin.section_lines_refs_t.erase (method) -ida_kernwin.section_lines_refs_t.extract (method) -ida_kernwin.section_lines_refs_t.find (method) -ida_kernwin.section_lines_refs_t.has (method) -ida_kernwin.section_lines_refs_t.inject (method) -ida_kernwin.section_lines_refs_t.insert (method) -ida_kernwin.section_lines_refs_t.pop_back (method) -ida_kernwin.section_lines_refs_t.push_back (method) -ida_kernwin.section_lines_refs_t.qclear (method) -ida_kernwin.section_lines_refs_t.reserve (method) -ida_kernwin.section_lines_refs_t.resize (method) -ida_kernwin.section_lines_refs_t.size (method) -ida_kernwin.section_lines_refs_t.swap (method) -ida_kernwin.section_lines_refs_t.truncate (method) -ida_kernwin.sections_lines_refs_t (class) -ida_kernwin.sections_lines_refs_t.__eq__ (method) -ida_kernwin.sections_lines_refs_t.__getitem__ (method) -ida_kernwin.sections_lines_refs_t.__init__ (method) -ida_kernwin.sections_lines_refs_t.__len__ (method) -ida_kernwin.sections_lines_refs_t.__ne__ (method) -ida_kernwin.sections_lines_refs_t.__setitem__ (method) -ida_kernwin.sections_lines_refs_t._del (method) -ida_kernwin.sections_lines_refs_t.add_unique (method) -ida_kernwin.sections_lines_refs_t.at (method) -ida_kernwin.sections_lines_refs_t.begin (method) -ida_kernwin.sections_lines_refs_t.capacity (method) -ida_kernwin.sections_lines_refs_t.clear (method) -ida_kernwin.sections_lines_refs_t.empty (method) -ida_kernwin.sections_lines_refs_t.end (method) -ida_kernwin.sections_lines_refs_t.erase (method) -ida_kernwin.sections_lines_refs_t.extract (method) -ida_kernwin.sections_lines_refs_t.find (method) -ida_kernwin.sections_lines_refs_t.grow (method) -ida_kernwin.sections_lines_refs_t.has (method) -ida_kernwin.sections_lines_refs_t.inject (method) -ida_kernwin.sections_lines_refs_t.insert (method) -ida_kernwin.sections_lines_refs_t.pop_back (method) -ida_kernwin.sections_lines_refs_t.push_back (method) -ida_kernwin.sections_lines_refs_t.qclear (method) -ida_kernwin.sections_lines_refs_t.reserve (method) -ida_kernwin.sections_lines_refs_t.resize (method) -ida_kernwin.sections_lines_refs_t.size (method) -ida_kernwin.sections_lines_refs_t.swap (method) -ida_kernwin.sections_lines_refs_t.truncate (method) -ida_kernwin.set_cancelled (function) -ida_kernwin.set_code_viewer_handler (function) -ida_kernwin.set_code_viewer_is_source (function) -ida_kernwin.set_code_viewer_line_handlers (function) -ida_kernwin.set_code_viewer_lines_alignment (function) -ida_kernwin.set_code_viewer_lines_icon_margin (function) -ida_kernwin.set_code_viewer_lines_radix (function) -ida_kernwin.set_code_viewer_user_data (function) -ida_kernwin.set_custom_viewer_qt_aware (function) -ida_kernwin.set_dock_pos (function) -ida_kernwin.set_highlight (function) -ida_kernwin.set_nav_colorizer (function) -ida_kernwin.set_view_renderer_type (function) -ida_kernwin.show_wait_box (function) -ida_kernwin.simplecustviewer_t (class) -ida_kernwin.simplecustviewer_t.AddLine (method) -ida_kernwin.simplecustviewer_t.ClearLines (method) -ida_kernwin.simplecustviewer_t.Close (method) -ida_kernwin.simplecustviewer_t.Count (method) -ida_kernwin.simplecustviewer_t.Create (method) -ida_kernwin.simplecustviewer_t.DelLine (method) -ida_kernwin.simplecustviewer_t.EditLine (method) -ida_kernwin.simplecustviewer_t.GetCurrentLine (method) -ida_kernwin.simplecustviewer_t.GetCurrentWord (method) -ida_kernwin.simplecustviewer_t.GetLine (method) -ida_kernwin.simplecustviewer_t.GetLineNo (method) -ida_kernwin.simplecustviewer_t.GetPos (method) -ida_kernwin.simplecustviewer_t.GetSelection (method) -ida_kernwin.simplecustviewer_t.GetWidget (method) -ida_kernwin.simplecustviewer_t.InsertLine (method) -ida_kernwin.simplecustviewer_t.IsFocused (method) -ida_kernwin.simplecustviewer_t.Jump (method) -ida_kernwin.simplecustviewer_t.OnPopup (method) -ida_kernwin.simplecustviewer_t.PatchLine (method) -ida_kernwin.simplecustviewer_t.Refresh (method) -ida_kernwin.simplecustviewer_t.RefreshCurrent (method) -ida_kernwin.simplecustviewer_t.Show (method) -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline (class) -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.__init__ (method) -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.populating_widget_popup (method) -ida_kernwin.simplecustviewer_t.__init__ (method) -ida_kernwin.simplecustviewer_t.__make_sl_arg (method) -ida_kernwin.simpleline_place_t (class) -ida_kernwin.simpleline_place_t.__init__ (method) -ida_kernwin.simpleline_place_t.n (variable) -ida_kernwin.simpleline_t (class) -ida_kernwin.simpleline_t.__init__ (method) -ida_kernwin.simpleline_t.bgcolor (variable) -ida_kernwin.simpleline_t.color (variable) -ida_kernwin.simpleline_t.line (variable) -ida_kernwin.str2ea (function) -ida_kernwin.str2ea_ex (function) -ida_kernwin.strarray (function) -ida_kernwin.strarray_t (class) -ida_kernwin.strarray_t.__init__ (method) -ida_kernwin.structplace_t (class) -ida_kernwin.structplace_t.__init__ (method) -ida_kernwin.structplace_t.idx (variable) -ida_kernwin.structplace_t.offset (variable) -ida_kernwin.sync_source_t (class) -ida_kernwin.sync_source_t.__eq__ (method) -ida_kernwin.sync_source_t.__init__ (method) -ida_kernwin.sync_source_t.__ne__ (method) -ida_kernwin.sync_source_t.get_register (method) -ida_kernwin.sync_source_t.get_widget (method) -ida_kernwin.sync_source_t.is_register (method) -ida_kernwin.sync_source_t.is_widget (method) -ida_kernwin.sync_source_vec_t (class) -ida_kernwin.sync_source_vec_t.__eq__ (method) -ida_kernwin.sync_source_vec_t.__getitem__ (method) -ida_kernwin.sync_source_vec_t.__init__ (method) -ida_kernwin.sync_source_vec_t.__len__ (method) -ida_kernwin.sync_source_vec_t.__ne__ (method) -ida_kernwin.sync_source_vec_t.__setitem__ (method) -ida_kernwin.sync_source_vec_t._del (method) -ida_kernwin.sync_source_vec_t.add_unique (method) -ida_kernwin.sync_source_vec_t.at (method) -ida_kernwin.sync_source_vec_t.begin (method) -ida_kernwin.sync_source_vec_t.capacity (method) -ida_kernwin.sync_source_vec_t.clear (method) -ida_kernwin.sync_source_vec_t.empty (method) -ida_kernwin.sync_source_vec_t.end (method) -ida_kernwin.sync_source_vec_t.erase (method) -ida_kernwin.sync_source_vec_t.extract (method) -ida_kernwin.sync_source_vec_t.find (method) -ida_kernwin.sync_source_vec_t.has (method) -ida_kernwin.sync_source_vec_t.inject (method) -ida_kernwin.sync_source_vec_t.insert (method) -ida_kernwin.sync_source_vec_t.pop_back (method) -ida_kernwin.sync_source_vec_t.push_back (method) -ida_kernwin.sync_source_vec_t.qclear (method) -ida_kernwin.sync_source_vec_t.reserve (method) -ida_kernwin.sync_source_vec_t.size (method) -ida_kernwin.sync_source_vec_t.swap (method) -ida_kernwin.sync_source_vec_t.truncate (method) -ida_kernwin.sync_sources (function) -ida_kernwin.synced_group_t (class) -ida_kernwin.synced_group_t.__init__ (method) -ida_kernwin.synced_group_t.has (method) -ida_kernwin.synced_group_t.has_register (method) -ida_kernwin.synced_group_t.has_widget (method) -ida_kernwin.tagged_line_section_t (class) -ida_kernwin.tagged_line_section_t.__init__ (method) -ida_kernwin.tagged_line_section_t.substr (method) -ida_kernwin.tagged_line_section_t.valid (method) -ida_kernwin.tagged_line_section_t.valid_in (method) -ida_kernwin.tagged_line_sections_t (class) -ida_kernwin.tagged_line_sections_t.__init__ (method) -ida_kernwin.tagged_line_sections_t.find_in (method) -ida_kernwin.tagged_line_sections_t.nearest_at (method) -ida_kernwin.tagged_line_sections_t.sections_at (method) -ida_kernwin.take_database_snapshot (function) -ida_kernwin.text_t (class) -ida_kernwin.text_t.__getitem__ (method) -ida_kernwin.text_t.__init__ (method) -ida_kernwin.text_t.__len__ (method) -ida_kernwin.text_t.__setitem__ (method) -ida_kernwin.text_t.at (method) -ida_kernwin.text_t.begin (method) -ida_kernwin.text_t.capacity (method) -ida_kernwin.text_t.clear (method) -ida_kernwin.text_t.empty (method) -ida_kernwin.text_t.end (method) -ida_kernwin.text_t.erase (method) -ida_kernwin.text_t.extract (method) -ida_kernwin.text_t.grow (method) -ida_kernwin.text_t.inject (method) -ida_kernwin.text_t.insert (method) -ida_kernwin.text_t.pop_back (method) -ida_kernwin.text_t.push_back (method) -ida_kernwin.text_t.qclear (method) -ida_kernwin.text_t.reserve (method) -ida_kernwin.text_t.resize (method) -ida_kernwin.text_t.size (method) -ida_kernwin.text_t.swap (method) -ida_kernwin.text_t.truncate (method) -ida_kernwin.textctrl_info_t (class) -ida_kernwin.textctrl_info_t.TXTF_ACCEPTTABS (variable) -ida_kernwin.textctrl_info_t.TXTF_AUTOINDENT (variable) -ida_kernwin.textctrl_info_t.TXTF_FIXEDFONT (variable) -ida_kernwin.textctrl_info_t.TXTF_MODIFIED (variable) -ida_kernwin.textctrl_info_t.TXTF_READONLY (variable) -ida_kernwin.textctrl_info_t.TXTF_SELECTED (variable) -ida_kernwin.textctrl_info_t.__get_flags__ (method) -ida_kernwin.textctrl_info_t.__get_tabsize__ (method) -ida_kernwin.textctrl_info_t.__get_text (method) -ida_kernwin.textctrl_info_t.__init__ (method) -ida_kernwin.textctrl_info_t.__set_flags__ (method) -ida_kernwin.textctrl_info_t.__set_tabsize__ (method) -ida_kernwin.textctrl_info_t.__set_text (method) -ida_kernwin.textctrl_info_t._create_clink (method) -ida_kernwin.textctrl_info_t._del_clink (method) -ida_kernwin.textctrl_info_t._get_clink_ptr (method) -ida_kernwin.textctrl_info_t.assign (method) -ida_kernwin.textctrl_info_t.flags (variable) -ida_kernwin.textctrl_info_t.tabsize (variable) -ida_kernwin.textctrl_info_t.text (variable) -ida_kernwin.textctrl_info_t.value (variable) -ida_kernwin.textctrl_info_t_assign (function) -ida_kernwin.textctrl_info_t_create (function) -ida_kernwin.textctrl_info_t_destroy (function) -ida_kernwin.textctrl_info_t_get_clink (function) -ida_kernwin.textctrl_info_t_get_clink_ptr (function) -ida_kernwin.textctrl_info_t_get_flags (function) -ida_kernwin.textctrl_info_t_get_tabsize (function) -ida_kernwin.textctrl_info_t_get_text (function) -ida_kernwin.textctrl_info_t_set_flags (function) -ida_kernwin.textctrl_info_t_set_tabsize (function) -ida_kernwin.textctrl_info_t_set_text (function) -ida_kernwin.tiplace_t (class) -ida_kernwin.tiplace_t.__init__ (method) -ida_kernwin.tiplace_t.calc_udm_offset (method) -ida_kernwin.tiplace_t.fill_type_ref (method) -ida_kernwin.tiplace_t.get_kind (method) -ida_kernwin.tiplace_t.is_footer (method) -ida_kernwin.tiplace_t.is_header (method) -ida_kernwin.tiplace_t.is_index (method) -ida_kernwin.tiplace_t.reset (method) -ida_kernwin.tiplace_t.set_footer (method) -ida_kernwin.tiplace_t.set_header (method) -ida_kernwin.tiplace_t.set_index_by_offset (method) -ida_kernwin.tiplace_t.valid_ord (method) -ida_kernwin.twinline_t (class) -ida_kernwin.twinline_t.__init__ (method) -ida_kernwin.twinline_t.at (variable) -ida_kernwin.twinline_t.bg_color (variable) -ida_kernwin.twinline_t.is_default (variable) -ida_kernwin.twinline_t.line (variable) -ida_kernwin.twinline_t.prefix_color (variable) -ida_kernwin.twinpos_t (class) -ida_kernwin.twinpos_t.__init__ (method) -ida_kernwin.twinpos_t.at (variable) -ida_kernwin.twinpos_t.place (method) -ida_kernwin.twinpos_t.place_as_enumplace_t (method) -ida_kernwin.twinpos_t.place_as_idaplace_t (method) -ida_kernwin.twinpos_t.place_as_simpleline_place_t (method) -ida_kernwin.twinpos_t.place_as_structplace_t (method) -ida_kernwin.twinpos_t.place_as_tiplace_t (method) -ida_kernwin.twinpos_t.x (variable) -ida_kernwin.ui_load_new_file (function) -ida_kernwin.ui_requests_t (class) -ida_kernwin.ui_requests_t.__init__ (method) -ida_kernwin.ui_run_debugger (function) -ida_kernwin.unmark_selection (function) -ida_kernwin.unregister_action (function) -ida_kernwin.unregister_timer (function) -ida_kernwin.update_action_checkable (function) -ida_kernwin.update_action_checked (function) -ida_kernwin.update_action_icon (function) -ida_kernwin.update_action_label (function) -ida_kernwin.update_action_shortcut (function) -ida_kernwin.update_action_state (function) -ida_kernwin.update_action_tooltip (function) -ida_kernwin.update_action_visibility (function) -ida_kernwin.user_cancelled (function) -ida_kernwin.view_activated (variable) -ida_kernwin.view_click (variable) -ida_kernwin.view_close (variable) -ida_kernwin.view_created (variable) -ida_kernwin.view_curpos (variable) -ida_kernwin.view_dblclick (variable) -ida_kernwin.view_deactivated (variable) -ida_kernwin.view_keydown (variable) -ida_kernwin.view_loc_changed (variable) -ida_kernwin.view_mouse_event_location_t (class) -ida_kernwin.view_mouse_event_location_t.__init__ (method) -ida_kernwin.view_mouse_event_location_t.ea (variable) -ida_kernwin.view_mouse_event_location_t.item (variable) -ida_kernwin.view_mouse_event_t (class) -ida_kernwin.view_mouse_event_t.__init__ (method) -ida_kernwin.view_mouse_event_t.button (variable) -ida_kernwin.view_mouse_event_t.location (variable) -ida_kernwin.view_mouse_event_t.renderer_pos (variable) -ida_kernwin.view_mouse_event_t.rtype (variable) -ida_kernwin.view_mouse_event_t.state (variable) -ida_kernwin.view_mouse_event_t.x (variable) -ida_kernwin.view_mouse_event_t.y (variable) -ida_kernwin.view_mouse_moved (variable) -ida_kernwin.view_mouse_over (variable) -ida_kernwin.view_switched (variable) -ida_kernwin.warning (function) -ida_lines (module) -ida_lines.COLOR_ADDR (variable) -ida_lines.COLOR_ADDR_SIZE (variable) -ida_lines.COLOR_ALTOP (variable) -ida_lines.COLOR_ASMDIR (variable) -ida_lines.COLOR_AUTOCMT (variable) -ida_lines.COLOR_BG_MAX (variable) -ida_lines.COLOR_BINPREF (variable) -ida_lines.COLOR_CHAR (variable) -ida_lines.COLOR_CNAME (variable) -ida_lines.COLOR_CODE (variable) -ida_lines.COLOR_CODNAME (variable) -ida_lines.COLOR_COLLAPSED (variable) -ida_lines.COLOR_CREF (variable) -ida_lines.COLOR_CREFTAIL (variable) -ida_lines.COLOR_CURITEM (variable) -ida_lines.COLOR_CURLINE (variable) -ida_lines.COLOR_DATA (variable) -ida_lines.COLOR_DATNAME (variable) -ida_lines.COLOR_DCHAR (variable) -ida_lines.COLOR_DEFAULT (variable) -ida_lines.COLOR_DEMNAME (variable) -ida_lines.COLOR_DNAME (variable) -ida_lines.COLOR_DNUM (variable) -ida_lines.COLOR_DREF (variable) -ida_lines.COLOR_DREFTAIL (variable) -ida_lines.COLOR_DSTR (variable) -ida_lines.COLOR_ERROR (variable) -ida_lines.COLOR_ESC (variable) -ida_lines.COLOR_EXTERN (variable) -ida_lines.COLOR_EXTRA (variable) -ida_lines.COLOR_FG_MAX (variable) -ida_lines.COLOR_HIDLINE (variable) -ida_lines.COLOR_HIDNAME (variable) -ida_lines.COLOR_IMPNAME (variable) -ida_lines.COLOR_INSN (variable) -ida_lines.COLOR_INV (variable) -ida_lines.COLOR_KEYWORD (variable) -ida_lines.COLOR_LIBFUNC (variable) -ida_lines.COLOR_LIBNAME (variable) -ida_lines.COLOR_LOCNAME (variable) -ida_lines.COLOR_LUMFUNC (variable) -ida_lines.COLOR_LUMINA (variable) -ida_lines.COLOR_MACRO (variable) -ida_lines.COLOR_NUMBER (variable) -ida_lines.COLOR_OFF (variable) -ida_lines.COLOR_ON (variable) -ida_lines.COLOR_OPND1 (variable) -ida_lines.COLOR_OPND2 (variable) -ida_lines.COLOR_OPND3 (variable) -ida_lines.COLOR_OPND4 (variable) -ida_lines.COLOR_OPND5 (variable) -ida_lines.COLOR_OPND6 (variable) -ida_lines.COLOR_OPND7 (variable) -ida_lines.COLOR_OPND8 (variable) -ida_lines.COLOR_PREFIX (variable) -ida_lines.COLOR_REG (variable) -ida_lines.COLOR_REGCMT (variable) -ida_lines.COLOR_REGFUNC (variable) -ida_lines.COLOR_RESERVED1 (variable) -ida_lines.COLOR_RPTCMT (variable) -ida_lines.COLOR_SEGNAME (variable) -ida_lines.COLOR_SELECTED (variable) -ida_lines.COLOR_STRING (variable) -ida_lines.COLOR_SYMBOL (variable) -ida_lines.COLOR_UNAME (variable) -ida_lines.COLOR_UNKNAME (variable) -ida_lines.COLOR_UNKNOWN (variable) -ida_lines.COLOR_VOIDOP (variable) -ida_lines.COLSTR (function) -ida_lines.SCOLOR_ADDR (variable) -ida_lines.SCOLOR_ALTOP (variable) -ida_lines.SCOLOR_ASMDIR (variable) -ida_lines.SCOLOR_AUTOCMT (variable) -ida_lines.SCOLOR_BINPREF (variable) -ida_lines.SCOLOR_CHAR (variable) -ida_lines.SCOLOR_CNAME (variable) -ida_lines.SCOLOR_CODNAME (variable) -ida_lines.SCOLOR_COLLAPSED (variable) -ida_lines.SCOLOR_CREF (variable) -ida_lines.SCOLOR_CREFTAIL (variable) -ida_lines.SCOLOR_DATNAME (variable) -ida_lines.SCOLOR_DCHAR (variable) -ida_lines.SCOLOR_DEFAULT (variable) -ida_lines.SCOLOR_DEMNAME (variable) -ida_lines.SCOLOR_DNAME (variable) -ida_lines.SCOLOR_DNUM (variable) -ida_lines.SCOLOR_DREF (variable) -ida_lines.SCOLOR_DREFTAIL (variable) -ida_lines.SCOLOR_DSTR (variable) -ida_lines.SCOLOR_ERROR (variable) -ida_lines.SCOLOR_ESC (variable) -ida_lines.SCOLOR_EXTRA (variable) -ida_lines.SCOLOR_HIDNAME (variable) -ida_lines.SCOLOR_IMPNAME (variable) -ida_lines.SCOLOR_INSN (variable) -ida_lines.SCOLOR_INV (variable) -ida_lines.SCOLOR_KEYWORD (variable) -ida_lines.SCOLOR_LIBNAME (variable) -ida_lines.SCOLOR_LOCNAME (variable) -ida_lines.SCOLOR_MACRO (variable) -ida_lines.SCOLOR_NUMBER (variable) -ida_lines.SCOLOR_OFF (variable) -ida_lines.SCOLOR_ON (variable) -ida_lines.SCOLOR_PREFIX (variable) -ida_lines.SCOLOR_REG (variable) -ida_lines.SCOLOR_REGCMT (variable) -ida_lines.SCOLOR_RPTCMT (variable) -ida_lines.SCOLOR_SEGNAME (variable) -ida_lines.SCOLOR_STRING (variable) -ida_lines.SCOLOR_SYMBOL (variable) -ida_lines.SCOLOR_UNAME (variable) -ida_lines.SCOLOR_UNKNAME (variable) -ida_lines.SCOLOR_VOIDOP (variable) -ida_lines.add_extra_cmt (function) -ida_lines.add_extra_line (function) -ida_lines.add_pgm_cmt (function) -ida_lines.add_sourcefile (function) -ida_lines.calc_bg_color (function) -ida_lines.calc_prefix_color (function) -ida_lines.create_encoding_helper (function) -ida_lines.del_extra_cmt (function) -ida_lines.del_sourcefile (function) -ida_lines.delete_extra_cmts (function) -ida_lines.generate_disasm_line (function) -ida_lines.generate_disassembly (function) -ida_lines.get_extra_cmt (function) -ida_lines.get_first_free_extra_cmtidx (function) -ida_lines.get_sourcefile (function) -ida_lines.install_user_defined_prefix (function) -ida_lines.requires_color_esc (function) -ida_lines.set_user_defined_prefix (function) -ida_lines.tag_addr (function) -ida_lines.tag_advance (function) -ida_lines.tag_remove (function) -ida_lines.tag_skipcode (function) -ida_lines.tag_skipcodes (function) -ida_lines.tag_strlen (function) -ida_lines.update_extra_cmt (function) -ida_lines.user_defined_prefix_t (class) -ida_lines.user_defined_prefix_t.__disown__ (method) -ida_lines.user_defined_prefix_t.__init__ (method) -ida_lines.user_defined_prefix_t.get_user_defined_prefix (method) -ida_loader (module) -ida_loader.ACCEPT_ARCHIVE (variable) -ida_loader.ACCEPT_CONTINUE (variable) -ida_loader.ACCEPT_FIRST (variable) -ida_loader.DBFL_BAK (variable) -ida_loader.DBFL_COMP (variable) -ida_loader.DBFL_KILL (variable) -ida_loader.DBFL_TEMP (variable) -ida_loader.FILEREG_NOTPATCHABLE (variable) -ida_loader.FILEREG_PATCHABLE (variable) -ida_loader.GENFLG_ASMINC (variable) -ida_loader.GENFLG_ASMTYPE (variable) -ida_loader.GENFLG_GENHTML (variable) -ida_loader.LDRF_RELOAD (variable) -ida_loader.LDRF_REQ_PROC (variable) -ida_loader.MAX_DATABASE_DESCRIPTION (variable) -ida_loader.NEF_CODE (variable) -ida_loader.NEF_FILL (variable) -ida_loader.NEF_FIRST (variable) -ida_loader.NEF_FLAT (variable) -ida_loader.NEF_IMPS (variable) -ida_loader.NEF_LALL (variable) -ida_loader.NEF_LOPT (variable) -ida_loader.NEF_MAN (variable) -ida_loader.NEF_MINI (variable) -ida_loader.NEF_NAME (variable) -ida_loader.NEF_RELOAD (variable) -ida_loader.NEF_RSCS (variable) -ida_loader.NEF_SEGS (variable) -ida_loader.OFILE_ASM (variable) -ida_loader.OFILE_DIF (variable) -ida_loader.OFILE_EXE (variable) -ida_loader.OFILE_IDC (variable) -ida_loader.OFILE_LST (variable) -ida_loader.OFILE_MAP (variable) -ida_loader.PATH_TYPE_CMD (variable) -ida_loader.PATH_TYPE_ID0 (variable) -ida_loader.PATH_TYPE_IDB (variable) -ida_loader.PLUGIN_DLL (variable) -ida_loader.SSF_AUTOMATIC (variable) -ida_loader.SSUF_DESC (variable) -ida_loader.SSUF_FLAGS (variable) -ida_loader.SSUF_PATH (variable) -ida_loader.base2file (function) -ida_loader.build_snapshot_tree (function) -ida_loader.clr_database_flag (function) -ida_loader.extract_module_from_archive (function) -ida_loader.file2base (function) -ida_loader.find_plugin (function) -ida_loader.flush_buffers (function) -ida_loader.gen_exe_file (function) -ida_loader.gen_file (function) -ida_loader.get_basic_file_type (function) -ida_loader.get_elf_debug_file_directory (function) -ida_loader.get_file_type_name (function) -ida_loader.get_fileregion_ea (function) -ida_loader.get_fileregion_offset (function) -ida_loader.get_path (function) -ida_loader.get_plugin_options (function) -ida_loader.idp_desc_t (class) -ida_loader.idp_desc_t.__init__ (method) -ida_loader.idp_desc_t.checked (variable) -ida_loader.idp_desc_t.family (variable) -ida_loader.idp_desc_t.is_script (variable) -ida_loader.idp_desc_t.mtime (variable) -ida_loader.idp_desc_t.names (variable) -ida_loader.idp_desc_t.path (variable) -ida_loader.idp_name_t (class) -ida_loader.idp_name_t.__init__ (method) -ida_loader.idp_name_t.hidden (variable) -ida_loader.idp_name_t.lname (variable) -ida_loader.idp_name_t.sname (variable) -ida_loader.is_database_flag (function) -ida_loader.is_trusted_idb (function) -ida_loader.load_and_run_plugin (function) -ida_loader.load_binary_file (function) -ida_loader.load_ids_module (function) -ida_loader.load_plugin (function) -ida_loader.loader_t (class) -ida_loader.loader_t.__init__ (method) -ida_loader.loader_t.flags (variable) -ida_loader.loader_t.version (variable) -ida_loader.mem2base (function) -ida_loader.plugin_info_t (class) -ida_loader.plugin_info_t.__init__ (method) -ida_loader.plugin_info_t.arg (variable) -ida_loader.plugin_info_t.comment (variable) -ida_loader.plugin_info_t.entry (variable) -ida_loader.plugin_info_t.flags (variable) -ida_loader.plugin_info_t.hotkey (variable) -ida_loader.plugin_info_t.name (variable) -ida_loader.plugin_info_t.next (variable) -ida_loader.plugin_info_t.org_hotkey (variable) -ida_loader.plugin_info_t.org_name (variable) -ida_loader.plugin_info_t.path (variable) -ida_loader.process_archive (function) -ida_loader.qvector_snapshotvec_t (class) -ida_loader.qvector_snapshotvec_t.__eq__ (method) -ida_loader.qvector_snapshotvec_t.__getitem__ (method) -ida_loader.qvector_snapshotvec_t.__init__ (method) -ida_loader.qvector_snapshotvec_t.__len__ (method) -ida_loader.qvector_snapshotvec_t.__ne__ (method) -ida_loader.qvector_snapshotvec_t.__setitem__ (method) -ida_loader.qvector_snapshotvec_t._del (method) -ida_loader.qvector_snapshotvec_t.add_unique (method) -ida_loader.qvector_snapshotvec_t.at (method) -ida_loader.qvector_snapshotvec_t.begin (method) -ida_loader.qvector_snapshotvec_t.capacity (method) -ida_loader.qvector_snapshotvec_t.clear (method) -ida_loader.qvector_snapshotvec_t.empty (method) -ida_loader.qvector_snapshotvec_t.end (method) -ida_loader.qvector_snapshotvec_t.erase (method) -ida_loader.qvector_snapshotvec_t.extract (method) -ida_loader.qvector_snapshotvec_t.find (method) -ida_loader.qvector_snapshotvec_t.has (method) -ida_loader.qvector_snapshotvec_t.inject (method) -ida_loader.qvector_snapshotvec_t.insert (method) -ida_loader.qvector_snapshotvec_t.pop_back (method) -ida_loader.qvector_snapshotvec_t.push_back (method) -ida_loader.qvector_snapshotvec_t.qclear (method) -ida_loader.qvector_snapshotvec_t.reserve (method) -ida_loader.qvector_snapshotvec_t.resize (method) -ida_loader.qvector_snapshotvec_t.size (method) -ida_loader.qvector_snapshotvec_t.swap (method) -ida_loader.qvector_snapshotvec_t.truncate (method) -ida_loader.reload_file (function) -ida_loader.run_plugin (function) -ida_loader.save_database (function) -ida_loader.set_database_flag (function) -ida_loader.set_import_name (function) -ida_loader.set_import_ordinal (function) -ida_loader.set_path (function) -ida_loader.snapshot_t (class) -ida_loader.snapshot_t.__eq__ (method) -ida_loader.snapshot_t.__ge__ (method) -ida_loader.snapshot_t.__gt__ (method) -ida_loader.snapshot_t.__init__ (method) -ida_loader.snapshot_t.__le__ (method) -ida_loader.snapshot_t.__lt__ (method) -ida_loader.snapshot_t.__ne__ (method) -ida_loader.snapshot_t.children (variable) -ida_loader.snapshot_t.clear (method) -ida_loader.snapshot_t.desc (variable) -ida_loader.snapshot_t.filename (variable) -ida_loader.snapshot_t.flags (variable) -ida_loader.snapshot_t.id (variable) -ida_lumina (module) -ida_lumina.AMDF_FORCE (variable) -ida_lumina.AMDF_UPGRADE (variable) -ida_lumina.apply_metadata (function) -ida_lumina.backup_metadata (function) -ida_lumina.calc_func_metadata (function) -ida_lumina.diff_metadata (function) -ida_lumina.extra_cmt_t (class) -ida_lumina.extra_cmt_t.__init__ (method) -ida_lumina.extra_cmts_t (class) -ida_lumina.extra_cmts_t.__getitem__ (method) -ida_lumina.extra_cmts_t.__init__ (method) -ida_lumina.extra_cmts_t.__len__ (method) -ida_lumina.extra_cmts_t.__setitem__ (method) -ida_lumina.extra_cmts_t.at (method) -ida_lumina.extra_cmts_t.begin (method) -ida_lumina.extra_cmts_t.capacity (method) -ida_lumina.extra_cmts_t.clear (method) -ida_lumina.extra_cmts_t.empty (method) -ida_lumina.extra_cmts_t.end (method) -ida_lumina.extra_cmts_t.erase (method) -ida_lumina.extra_cmts_t.extract (method) -ida_lumina.extra_cmts_t.grow (method) -ida_lumina.extra_cmts_t.inject (method) -ida_lumina.extra_cmts_t.insert (method) -ida_lumina.extra_cmts_t.pop_back (method) -ida_lumina.extra_cmts_t.push_back (method) -ida_lumina.extra_cmts_t.qclear (method) -ida_lumina.extra_cmts_t.reserve (method) -ida_lumina.extra_cmts_t.resize (method) -ida_lumina.extra_cmts_t.size (method) -ida_lumina.extra_cmts_t.swap (method) -ida_lumina.extra_cmts_t.truncate (method) -ida_lumina.extract_extra_cmts_from_metadata (function) -ida_lumina.extract_frame_desc_from_metadata (function) -ida_lumina.extract_insn_cmts_from_metadata (function) -ida_lumina.extract_insn_opreprs_from_metadata (function) -ida_lumina.extract_insn_opreprs_from_metadata_ex (function) -ida_lumina.extract_type_from_metadata (function) -ida_lumina.extract_user_stkpnts_from_metadata (function) -ida_lumina.frame_desc_t (class) -ida_lumina.frame_desc_t.__init__ (method) -ida_lumina.frame_mem_t (class) -ida_lumina.frame_mem_t.__init__ (method) -ida_lumina.frame_mems_t (class) -ida_lumina.frame_mems_t.__getitem__ (method) -ida_lumina.frame_mems_t.__init__ (method) -ida_lumina.frame_mems_t.__len__ (method) -ida_lumina.frame_mems_t.__setitem__ (method) -ida_lumina.frame_mems_t.at (method) -ida_lumina.frame_mems_t.begin (method) -ida_lumina.frame_mems_t.capacity (method) -ida_lumina.frame_mems_t.clear (method) -ida_lumina.frame_mems_t.empty (method) -ida_lumina.frame_mems_t.end (method) -ida_lumina.frame_mems_t.erase (method) -ida_lumina.frame_mems_t.extract (method) -ida_lumina.frame_mems_t.grow (method) -ida_lumina.frame_mems_t.inject (method) -ida_lumina.frame_mems_t.insert (method) -ida_lumina.frame_mems_t.pop_back (method) -ida_lumina.frame_mems_t.push_back (method) -ida_lumina.frame_mems_t.qclear (method) -ida_lumina.frame_mems_t.reserve (method) -ida_lumina.frame_mems_t.resize (method) -ida_lumina.frame_mems_t.size (method) -ida_lumina.frame_mems_t.swap (method) -ida_lumina.frame_mems_t.truncate (method) -ida_lumina.func_info_and_frequency_t (class) -ida_lumina.func_info_and_frequency_t.__init__ (method) -ida_lumina.func_info_and_frequency_vec_t (class) -ida_lumina.func_info_and_frequency_vec_t.__getitem__ (method) -ida_lumina.func_info_and_frequency_vec_t.__init__ (method) -ida_lumina.func_info_and_frequency_vec_t.__len__ (method) -ida_lumina.func_info_and_frequency_vec_t.__setitem__ (method) -ida_lumina.func_info_and_frequency_vec_t.at (method) -ida_lumina.func_info_and_frequency_vec_t.begin (method) -ida_lumina.func_info_and_frequency_vec_t.capacity (method) -ida_lumina.func_info_and_frequency_vec_t.clear (method) -ida_lumina.func_info_and_frequency_vec_t.empty (method) -ida_lumina.func_info_and_frequency_vec_t.end (method) -ida_lumina.func_info_and_frequency_vec_t.erase (method) -ida_lumina.func_info_and_frequency_vec_t.extract (method) -ida_lumina.func_info_and_frequency_vec_t.grow (method) -ida_lumina.func_info_and_frequency_vec_t.inject (method) -ida_lumina.func_info_and_frequency_vec_t.insert (method) -ida_lumina.func_info_and_frequency_vec_t.pop_back (method) -ida_lumina.func_info_and_frequency_vec_t.push_back (method) -ida_lumina.func_info_and_frequency_vec_t.qclear (method) -ida_lumina.func_info_and_frequency_vec_t.reserve (method) -ida_lumina.func_info_and_frequency_vec_t.resize (method) -ida_lumina.func_info_and_frequency_vec_t.size (method) -ida_lumina.func_info_and_frequency_vec_t.swap (method) -ida_lumina.func_info_and_frequency_vec_t.truncate (method) -ida_lumina.func_info_and_pattern_t (class) -ida_lumina.func_info_and_pattern_t.__init__ (method) -ida_lumina.func_info_and_pattern_vec_t (class) -ida_lumina.func_info_and_pattern_vec_t.__getitem__ (method) -ida_lumina.func_info_and_pattern_vec_t.__init__ (method) -ida_lumina.func_info_and_pattern_vec_t.__len__ (method) -ida_lumina.func_info_and_pattern_vec_t.__setitem__ (method) -ida_lumina.func_info_and_pattern_vec_t.at (method) -ida_lumina.func_info_and_pattern_vec_t.begin (method) -ida_lumina.func_info_and_pattern_vec_t.capacity (method) -ida_lumina.func_info_and_pattern_vec_t.clear (method) -ida_lumina.func_info_and_pattern_vec_t.empty (method) -ida_lumina.func_info_and_pattern_vec_t.end (method) -ida_lumina.func_info_and_pattern_vec_t.erase (method) -ida_lumina.func_info_and_pattern_vec_t.extract (method) -ida_lumina.func_info_and_pattern_vec_t.grow (method) -ida_lumina.func_info_and_pattern_vec_t.inject (method) -ida_lumina.func_info_and_pattern_vec_t.insert (method) -ida_lumina.func_info_and_pattern_vec_t.pop_back (method) -ida_lumina.func_info_and_pattern_vec_t.push_back (method) -ida_lumina.func_info_and_pattern_vec_t.qclear (method) -ida_lumina.func_info_and_pattern_vec_t.reserve (method) -ida_lumina.func_info_and_pattern_vec_t.resize (method) -ida_lumina.func_info_and_pattern_vec_t.size (method) -ida_lumina.func_info_and_pattern_vec_t.swap (method) -ida_lumina.func_info_and_pattern_vec_t.truncate (method) -ida_lumina.func_info_base_t (class) -ida_lumina.func_info_base_t.__init__ (method) -ida_lumina.func_info_pattern_and_frequency_t (class) -ida_lumina.func_info_pattern_and_frequency_t.__init__ (method) -ida_lumina.func_info_pattern_and_frequency_vec_t (class) -ida_lumina.func_info_pattern_and_frequency_vec_t.__getitem__ (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.__init__ (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.__len__ (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.__setitem__ (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.at (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.begin (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.capacity (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.clear (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.empty (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.end (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.erase (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.extract (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.grow (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.inject (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.insert (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.pop_back (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.push_back (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.qclear (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.reserve (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.resize (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.size (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.swap (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.truncate (method) -ida_lumina.func_info_t (class) -ida_lumina.func_info_t.__init__ (method) -ida_lumina.func_info_vec_t (class) -ida_lumina.func_info_vec_t.__getitem__ (method) -ida_lumina.func_info_vec_t.__init__ (method) -ida_lumina.func_info_vec_t.__len__ (method) -ida_lumina.func_info_vec_t.__setitem__ (method) -ida_lumina.func_info_vec_t.at (method) -ida_lumina.func_info_vec_t.begin (method) -ida_lumina.func_info_vec_t.capacity (method) -ida_lumina.func_info_vec_t.clear (method) -ida_lumina.func_info_vec_t.empty (method) -ida_lumina.func_info_vec_t.end (method) -ida_lumina.func_info_vec_t.erase (method) -ida_lumina.func_info_vec_t.extract (method) -ida_lumina.func_info_vec_t.grow (method) -ida_lumina.func_info_vec_t.inject (method) -ida_lumina.func_info_vec_t.insert (method) -ida_lumina.func_info_vec_t.pop_back (method) -ida_lumina.func_info_vec_t.push_back (method) -ida_lumina.func_info_vec_t.qclear (method) -ida_lumina.func_info_vec_t.reserve (method) -ida_lumina.func_info_vec_t.resize (method) -ida_lumina.func_info_vec_t.size (method) -ida_lumina.func_info_vec_t.swap (method) -ida_lumina.func_info_vec_t.truncate (method) -ida_lumina.func_md_diff_handler_t (class) -ida_lumina.func_md_diff_handler_t.__disown__ (method) -ida_lumina.func_md_diff_handler_t.__init__ (method) -ida_lumina.func_md_diff_handler_t.on_comment_changed (method) -ida_lumina.func_md_diff_handler_t.on_extra_comment_changed (method) -ida_lumina.func_md_diff_handler_t.on_frame_member_changed (method) -ida_lumina.func_md_diff_handler_t.on_function_comment_changed (method) -ida_lumina.func_md_diff_handler_t.on_insn_ops_repr_changed (method) -ida_lumina.func_md_diff_handler_t.on_name_changed (method) -ida_lumina.func_md_diff_handler_t.on_proto_changed (method) -ida_lumina.func_md_diff_handler_t.on_score_changed (method) -ida_lumina.func_md_diff_handler_t.on_user_stkpnt_changed (method) -ida_lumina.get_lumina_rpc_packet_t_index_from_base (function) -ida_lumina.get_server_connection (function) -ida_lumina.get_server_connection2 (function) -ida_lumina.has_backup_metadata (function) -ida_lumina.input_file_t (class) -ida_lumina.input_file_t.__init__ (method) -ida_lumina.insn_cmt_t (class) -ida_lumina.insn_cmt_t.__init__ (method) -ida_lumina.insn_cmts_t (class) -ida_lumina.insn_cmts_t.__getitem__ (method) -ida_lumina.insn_cmts_t.__init__ (method) -ida_lumina.insn_cmts_t.__len__ (method) -ida_lumina.insn_cmts_t.__setitem__ (method) -ida_lumina.insn_cmts_t.at (method) -ida_lumina.insn_cmts_t.begin (method) -ida_lumina.insn_cmts_t.capacity (method) -ida_lumina.insn_cmts_t.clear (method) -ida_lumina.insn_cmts_t.empty (method) -ida_lumina.insn_cmts_t.end (method) -ida_lumina.insn_cmts_t.erase (method) -ida_lumina.insn_cmts_t.extract (method) -ida_lumina.insn_cmts_t.grow (method) -ida_lumina.insn_cmts_t.inject (method) -ida_lumina.insn_cmts_t.insert (method) -ida_lumina.insn_cmts_t.pop_back (method) -ida_lumina.insn_cmts_t.push_back (method) -ida_lumina.insn_cmts_t.qclear (method) -ida_lumina.insn_cmts_t.reserve (method) -ida_lumina.insn_cmts_t.resize (method) -ida_lumina.insn_cmts_t.size (method) -ida_lumina.insn_cmts_t.swap (method) -ida_lumina.insn_cmts_t.truncate (method) -ida_lumina.insn_ops_repr_t (class) -ida_lumina.insn_ops_repr_t.__init__ (method) -ida_lumina.insn_ops_reprs_t (class) -ida_lumina.insn_ops_reprs_t.__getitem__ (method) -ida_lumina.insn_ops_reprs_t.__init__ (method) -ida_lumina.insn_ops_reprs_t.__len__ (method) -ida_lumina.insn_ops_reprs_t.__setitem__ (method) -ida_lumina.insn_ops_reprs_t.at (method) -ida_lumina.insn_ops_reprs_t.begin (method) -ida_lumina.insn_ops_reprs_t.capacity (method) -ida_lumina.insn_ops_reprs_t.clear (method) -ida_lumina.insn_ops_reprs_t.empty (method) -ida_lumina.insn_ops_reprs_t.end (method) -ida_lumina.insn_ops_reprs_t.erase (method) -ida_lumina.insn_ops_reprs_t.extract (method) -ida_lumina.insn_ops_reprs_t.grow (method) -ida_lumina.insn_ops_reprs_t.inject (method) -ida_lumina.insn_ops_reprs_t.insert (method) -ida_lumina.insn_ops_reprs_t.pop_back (method) -ida_lumina.insn_ops_reprs_t.push_back (method) -ida_lumina.insn_ops_reprs_t.qclear (method) -ida_lumina.insn_ops_reprs_t.reserve (method) -ida_lumina.insn_ops_reprs_t.resize (method) -ida_lumina.insn_ops_reprs_t.size (method) -ida_lumina.insn_ops_reprs_t.swap (method) -ida_lumina.insn_ops_reprs_t.truncate (method) -ida_lumina.insn_site_t (class) -ida_lumina.insn_site_t.__init__ (method) -ida_lumina.insn_site_t.toea (method) -ida_lumina.lumina_client_t (class) -ida_lumina.lumina_client_t.__init__ (method) -ida_lumina.lumina_client_t.del_history (method) -ida_lumina.lumina_client_t.get_pop (method) -ida_lumina.lumina_client_t.is_pattern_id (method) -ida_lumina.lumina_client_t.pull_md (method) -ida_lumina.lumina_client_t.push_md (method) -ida_lumina.lumina_client_t.set_pattern_id_md5 (method) -ida_lumina.lumina_info_t (class) -ida_lumina.lumina_info_t.__init__ (method) -ida_lumina.lumina_op_res_vec_t (class) -ida_lumina.lumina_op_res_vec_t.__eq__ (method) -ida_lumina.lumina_op_res_vec_t.__getitem__ (method) -ida_lumina.lumina_op_res_vec_t.__init__ (method) -ida_lumina.lumina_op_res_vec_t.__len__ (method) -ida_lumina.lumina_op_res_vec_t.__ne__ (method) -ida_lumina.lumina_op_res_vec_t.__setitem__ (method) -ida_lumina.lumina_op_res_vec_t._del (method) -ida_lumina.lumina_op_res_vec_t.add_unique (method) -ida_lumina.lumina_op_res_vec_t.at (method) -ida_lumina.lumina_op_res_vec_t.begin (method) -ida_lumina.lumina_op_res_vec_t.capacity (method) -ida_lumina.lumina_op_res_vec_t.clear (method) -ida_lumina.lumina_op_res_vec_t.empty (method) -ida_lumina.lumina_op_res_vec_t.end (method) -ida_lumina.lumina_op_res_vec_t.erase (method) -ida_lumina.lumina_op_res_vec_t.extract (method) -ida_lumina.lumina_op_res_vec_t.find (method) -ida_lumina.lumina_op_res_vec_t.grow (method) -ida_lumina.lumina_op_res_vec_t.has (method) -ida_lumina.lumina_op_res_vec_t.inject (method) -ida_lumina.lumina_op_res_vec_t.insert (method) -ida_lumina.lumina_op_res_vec_t.pop_back (method) -ida_lumina.lumina_op_res_vec_t.push_back (method) -ida_lumina.lumina_op_res_vec_t.qclear (method) -ida_lumina.lumina_op_res_vec_t.reserve (method) -ida_lumina.lumina_op_res_vec_t.resize (method) -ida_lumina.lumina_op_res_vec_t.size (method) -ida_lumina.lumina_op_res_vec_t.swap (method) -ida_lumina.lumina_op_res_vec_t.truncate (method) -ida_lumina.lumina_server_info_t (class) -ida_lumina.lumina_server_info_t.__init__ (method) -ida_lumina.lumina_user_t (class) -ida_lumina.lumina_user_t.__init__ (method) -ida_lumina.lumina_user_t.can_del_history (method) -ida_lumina.lumina_user_t.is_admin (method) -ida_lumina.lumina_user_t.set_can_del_history (method) -ida_lumina.lumina_user_t.set_is_admin (method) -ida_lumina.md_type_parts_t (class) -ida_lumina.md_type_parts_t.__eq__ (method) -ida_lumina.md_type_parts_t.__init__ (method) -ida_lumina.md_type_parts_t.__ne__ (method) -ida_lumina.metadata_iterator_t (class) -ida_lumina.metadata_iterator_t.__init__ (method) -ida_lumina.metadata_iterator_t.data_end (method) -ida_lumina.metadata_iterator_t.next (method) -ida_lumina.new_packet (function) -ida_lumina.oprepr_t (class) -ida_lumina.oprepr_t.__init__ (method) -ida_lumina.pattern_id_t (class) -ida_lumina.pattern_id_t.__init__ (method) -ida_lumina.peer_conn_t (class) -ida_lumina.peer_conn_t.__init__ (method) -ida_lumina.pkt_get_lumina_info_result_t (class) -ida_lumina.pkt_get_lumina_info_result_t.__init__ (method) -ida_lumina.pkt_get_lumina_info_t (class) -ida_lumina.pkt_get_lumina_info_t.__init__ (method) -ida_lumina.pkt_get_pop_result_t (class) -ida_lumina.pkt_get_pop_result_t.__init__ (method) -ida_lumina.pkt_get_pop_t (class) -ida_lumina.pkt_get_pop_t.__init__ (method) -ida_lumina.pkt_helo_result_t (class) -ida_lumina.pkt_helo_result_t.__init__ (method) -ida_lumina.pkt_helo_t (class) -ida_lumina.pkt_helo_t.__init__ (method) -ida_lumina.pkt_pull_md_result_t (class) -ida_lumina.pkt_pull_md_result_t.__init__ (method) -ida_lumina.pkt_pull_md_t (class) -ida_lumina.pkt_pull_md_t.__init__ (method) -ida_lumina.pkt_push_md_result_t (class) -ida_lumina.pkt_push_md_result_t.__init__ (method) -ida_lumina.pkt_push_md_t (class) -ida_lumina.pkt_push_md_t.__init__ (method) -ida_lumina.pkt_rpc_fail_t (class) -ida_lumina.pkt_rpc_fail_t.__init__ (method) -ida_lumina.pkt_rpc_notify_t (class) -ida_lumina.pkt_rpc_notify_t.__init__ (method) -ida_lumina.pkt_rpc_ok_t (class) -ida_lumina.pkt_rpc_ok_t.__init__ (method) -ida_lumina.pop_fun_t (class) -ida_lumina.pop_fun_t.__init__ (method) -ida_lumina.push_md_opts_t (class) -ida_lumina.push_md_opts_t.__init__ (method) -ida_lumina.push_md_result_t (class) -ida_lumina.push_md_result_t.__init__ (method) -ida_lumina.revert_metadata (function) -ida_lumina.score_metadata (function) -ida_lumina.serialized_tinfo (class) -ida_lumina.serialized_tinfo.__init__ (method) -ida_lumina.simple_idb_diff_handler_t (class) -ida_lumina.simple_idb_diff_handler_t.__init__ (method) -ida_lumina.simple_idb_diff_handler_t.ensure_header_generated (method) -ida_lumina.simple_idb_diff_handler_t.format_extra_cmt (method) -ida_lumina.simple_idb_diff_handler_t.format_frame_member (method) -ida_lumina.simple_idb_diff_handler_t.format_insn_ops (method) -ida_lumina.simple_idb_diff_handler_t.format_stkpnt (method) -ida_lumina.simple_idb_diff_handler_t.format_type (method) -ida_lumina.simple_idb_diff_handler_t.indenter_t (class) -ida_lumina.simple_idb_diff_handler_t.indenter_t.__del__ (method) -ida_lumina.simple_idb_diff_handler_t.indenter_t.__init__ (method) -ida_lumina.simple_idb_diff_handler_t.on_comment_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_extra_comment_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_frame_member_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_function_comment_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_insn_ops_repr_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_name_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_proto_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_score_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_user_stkpnt_changed (method) -ida_lumina.simple_idb_diff_handler_t.put (method) -ida_lumina.simple_idb_diff_handler_t.put2 (method) -ida_lumina.simple_idb_diff_handler_t.where (method) -ida_lumina.skipped_func_t (class) -ida_lumina.skipped_func_t.__init__ (method) -ida_lumina.skipped_funcs_t (class) -ida_lumina.skipped_funcs_t.__getitem__ (method) -ida_lumina.skipped_funcs_t.__init__ (method) -ida_lumina.skipped_funcs_t.__len__ (method) -ida_lumina.skipped_funcs_t.__setitem__ (method) -ida_lumina.skipped_funcs_t.at (method) -ida_lumina.skipped_funcs_t.begin (method) -ida_lumina.skipped_funcs_t.capacity (method) -ida_lumina.skipped_funcs_t.clear (method) -ida_lumina.skipped_funcs_t.empty (method) -ida_lumina.skipped_funcs_t.end (method) -ida_lumina.skipped_funcs_t.erase (method) -ida_lumina.skipped_funcs_t.extract (method) -ida_lumina.skipped_funcs_t.grow (method) -ida_lumina.skipped_funcs_t.inject (method) -ida_lumina.skipped_funcs_t.insert (method) -ida_lumina.skipped_funcs_t.pop_back (method) -ida_lumina.skipped_funcs_t.push_back (method) -ida_lumina.skipped_funcs_t.qclear (method) -ida_lumina.skipped_funcs_t.reserve (method) -ida_lumina.skipped_funcs_t.resize (method) -ida_lumina.skipped_funcs_t.size (method) -ida_lumina.skipped_funcs_t.swap (method) -ida_lumina.skipped_funcs_t.truncate (method) -ida_lumina.split_metadata (function) -ida_lumina.user_license_info_t (class) -ida_lumina.user_license_info_t.__init__ (method) -ida_lumina.user_stkpnt_t (class) -ida_lumina.user_stkpnt_t.__init__ (method) -ida_lumina.user_stkpnts_t (class) -ida_lumina.user_stkpnts_t.__getitem__ (method) -ida_lumina.user_stkpnts_t.__init__ (method) -ida_lumina.user_stkpnts_t.__len__ (method) -ida_lumina.user_stkpnts_t.__setitem__ (method) -ida_lumina.user_stkpnts_t.at (method) -ida_lumina.user_stkpnts_t.begin (method) -ida_lumina.user_stkpnts_t.capacity (method) -ida_lumina.user_stkpnts_t.clear (method) -ida_lumina.user_stkpnts_t.empty (method) -ida_lumina.user_stkpnts_t.end (method) -ida_lumina.user_stkpnts_t.erase (method) -ida_lumina.user_stkpnts_t.extract (method) -ida_lumina.user_stkpnts_t.grow (method) -ida_lumina.user_stkpnts_t.inject (method) -ida_lumina.user_stkpnts_t.insert (method) -ida_lumina.user_stkpnts_t.pop_back (method) -ida_lumina.user_stkpnts_t.push_back (method) -ida_lumina.user_stkpnts_t.qclear (method) -ida_lumina.user_stkpnts_t.reserve (method) -ida_lumina.user_stkpnts_t.resize (method) -ida_lumina.user_stkpnts_t.size (method) -ida_lumina.user_stkpnts_t.swap (method) -ida_lumina.user_stkpnts_t.truncate (method) -ida_moves (module) -ida_moves.bookmarks_t (class) -ida_moves.bookmarks_t.__getitem__ (method) -ida_moves.bookmarks_t.__init__ (method) -ida_moves.bookmarks_t.__init__ (method) -ida_moves.bookmarks_t.__iter__ (method) -ida_moves.bookmarks_t.__len__ (method) -ida_moves.bookmarks_t.erase (method) -ida_moves.bookmarks_t.find_index (method) -ida_moves.bookmarks_t.get (method) -ida_moves.bookmarks_t.get_desc (method) -ida_moves.bookmarks_t.get_dirtree_id (method) -ida_moves.bookmarks_t.mark (method) -ida_moves.bookmarks_t.size (method) -ida_moves.bookmarks_t_erase (function) -ida_moves.bookmarks_t_find_index (function) -ida_moves.bookmarks_t_get (function) -ida_moves.bookmarks_t_get_desc (function) -ida_moves.bookmarks_t_get_dirtree_id (function) -ida_moves.bookmarks_t_mark (function) -ida_moves.bookmarks_t_size (function) -ida_moves.graph_location_info_t (class) -ida_moves.graph_location_info_t.__eq__ (method) -ida_moves.graph_location_info_t.__init__ (method) -ida_moves.graph_location_info_t.__ne__ (method) -ida_moves.lochist_entry_t (class) -ida_moves.lochist_entry_t.__init__ (method) -ida_moves.lochist_entry_t.acquire_place (method) -ida_moves.lochist_entry_t.is_valid (method) -ida_moves.lochist_entry_t.place (method) -ida_moves.lochist_entry_t.renderer_info (method) -ida_moves.lochist_entry_t.set_place (method) -ida_moves.lochist_t (class) -ida_moves.lochist_t.__init__ (method) -ida_moves.lochist_t.back (method) -ida_moves.lochist_t.clear (method) -ida_moves.lochist_t.current_index (method) -ida_moves.lochist_t.fwd (method) -ida_moves.lochist_t.get (method) -ida_moves.lochist_t.get_current (method) -ida_moves.lochist_t.get_place_id (method) -ida_moves.lochist_t.get_template_place (method) -ida_moves.lochist_t.init (method) -ida_moves.lochist_t.is_history_enabled (method) -ida_moves.lochist_t.jump (method) -ida_moves.lochist_t.netcode (method) -ida_moves.lochist_t.save (method) -ida_moves.lochist_t.seek (method) -ida_moves.lochist_t.set (method) -ida_moves.lochist_t.set_current (method) -ida_moves.lochist_t.size (method) -ida_moves.renderer_info_pos_t (class) -ida_moves.renderer_info_pos_t.__eq__ (method) -ida_moves.renderer_info_pos_t.__init__ (method) -ida_moves.renderer_info_pos_t.__ne__ (method) -ida_moves.renderer_info_t (class) -ida_moves.renderer_info_t.__eq__ (method) -ida_moves.renderer_info_t.__init__ (method) -ida_moves.renderer_info_t.__ne__ (method) -ida_moves.segm_move_info_t (class) -ida_moves.segm_move_info_t.__eq__ (method) -ida_moves.segm_move_info_t.__init__ (method) -ida_moves.segm_move_info_t.__ne__ (method) -ida_moves.segm_move_info_vec_t (class) -ida_moves.segm_move_info_vec_t.__eq__ (method) -ida_moves.segm_move_info_vec_t.__getitem__ (method) -ida_moves.segm_move_info_vec_t.__init__ (method) -ida_moves.segm_move_info_vec_t.__len__ (method) -ida_moves.segm_move_info_vec_t.__ne__ (method) -ida_moves.segm_move_info_vec_t.__setitem__ (method) -ida_moves.segm_move_info_vec_t._del (method) -ida_moves.segm_move_info_vec_t.add_unique (method) -ida_moves.segm_move_info_vec_t.at (method) -ida_moves.segm_move_info_vec_t.begin (method) -ida_moves.segm_move_info_vec_t.capacity (method) -ida_moves.segm_move_info_vec_t.clear (method) -ida_moves.segm_move_info_vec_t.empty (method) -ida_moves.segm_move_info_vec_t.end (method) -ida_moves.segm_move_info_vec_t.erase (method) -ida_moves.segm_move_info_vec_t.extract (method) -ida_moves.segm_move_info_vec_t.find (method) -ida_moves.segm_move_info_vec_t.grow (method) -ida_moves.segm_move_info_vec_t.has (method) -ida_moves.segm_move_info_vec_t.inject (method) -ida_moves.segm_move_info_vec_t.insert (method) -ida_moves.segm_move_info_vec_t.pop_back (method) -ida_moves.segm_move_info_vec_t.push_back (method) -ida_moves.segm_move_info_vec_t.qclear (method) -ida_moves.segm_move_info_vec_t.reserve (method) -ida_moves.segm_move_info_vec_t.resize (method) -ida_moves.segm_move_info_vec_t.size (method) -ida_moves.segm_move_info_vec_t.swap (method) -ida_moves.segm_move_info_vec_t.truncate (method) -ida_moves.segm_move_infos_t (class) -ida_moves.segm_move_infos_t.__init__ (method) -ida_moves.segm_move_infos_t.find (method) -ida_nalt (module) -ida_nalt.AFL_ALIGNFLOW (variable) -ida_nalt.AFL_BNOT0 (variable) -ida_nalt.AFL_BNOT1 (variable) -ida_nalt.AFL_COLORED (variable) -ida_nalt.AFL_FIXEDSPD (variable) -ida_nalt.AFL_HIDDEN (variable) -ida_nalt.AFL_HR_DETERMINED (variable) -ida_nalt.AFL_HR_GUESSED_DATA (variable) -ida_nalt.AFL_HR_GUESSED_FUNC (variable) -ida_nalt.AFL_IDA_GUESSED (variable) -ida_nalt.AFL_LIB (variable) -ida_nalt.AFL_LINNUM (variable) -ida_nalt.AFL_LNAME (variable) -ida_nalt.AFL_LZERO0 (variable) -ida_nalt.AFL_LZERO1 (variable) -ida_nalt.AFL_MANUAL (variable) -ida_nalt.AFL_NOBRD (variable) -ida_nalt.AFL_NORET (variable) -ida_nalt.AFL_NOTCODE (variable) -ida_nalt.AFL_NOTPROC (variable) -ida_nalt.AFL_PUBNAM (variable) -ida_nalt.AFL_RETFP (variable) -ida_nalt.AFL_TERSESTR (variable) -ida_nalt.AFL_TI (variable) -ida_nalt.AFL_TI0 (variable) -ida_nalt.AFL_TI1 (variable) -ida_nalt.AFL_TILCMT (variable) -ida_nalt.AFL_TYPE_GUESSED (variable) -ida_nalt.AFL_USEMODSP (variable) -ida_nalt.AFL_USERSP (variable) -ida_nalt.AFL_USERTI (variable) -ida_nalt.AFL_WEAKNAM (variable) -ida_nalt.AFL_ZSTROFF (variable) -ida_nalt.AP_ALLOWDUPS (variable) -ida_nalt.AP_ARRAY (variable) -ida_nalt.AP_IDXBASEMASK (variable) -ida_nalt.AP_IDXBIN (variable) -ida_nalt.AP_IDXDEC (variable) -ida_nalt.AP_IDXHEX (variable) -ida_nalt.AP_IDXOCT (variable) -ida_nalt.AP_INDEX (variable) -ida_nalt.AP_SIGNED (variable) -ida_nalt.IDB_DESKTOPS_NODE_NAME (variable) -ida_nalt.IDB_DESKTOPS_TAG (variable) -ida_nalt.MAXSTRUCPATH (variable) -ida_nalt.NALT_ABSBASE (variable) -ida_nalt.NALT_AFLAGS (variable) -ida_nalt.NALT_ALIGN (variable) -ida_nalt.NALT_COLOR (variable) -ida_nalt.NALT_CREF_FROM (variable) -ida_nalt.NALT_CREF_TO (variable) -ida_nalt.NALT_DREF_FROM (variable) -ida_nalt.NALT_DREF_TO (variable) -ida_nalt.NALT_ENUM0 (variable) -ida_nalt.NALT_ENUM1 (variable) -ida_nalt.NALT_GR_LAYX (variable) -ida_nalt.NALT_LINNUM (variable) -ida_nalt.NALT_PURGE (variable) -ida_nalt.NALT_STRTYPE (variable) -ida_nalt.NALT_STRUCT (variable) -ida_nalt.NALT_SWITCH (variable) -ida_nalt.NSUP_ARGEAS (variable) -ida_nalt.NSUP_ARRAY (variable) -ida_nalt.NSUP_CMT (variable) -ida_nalt.NSUP_CUSTDT (variable) -ida_nalt.NSUP_EX_FLAGS (variable) -ida_nalt.NSUP_FOP1 (variable) -ida_nalt.NSUP_FOP2 (variable) -ida_nalt.NSUP_FOP3 (variable) -ida_nalt.NSUP_FOP4 (variable) -ida_nalt.NSUP_FOP5 (variable) -ida_nalt.NSUP_FOP6 (variable) -ida_nalt.NSUP_FOP7 (variable) -ida_nalt.NSUP_FOP8 (variable) -ida_nalt.NSUP_FTAILS (variable) -ida_nalt.NSUP_GROUP (variable) -ida_nalt.NSUP_GR_INFO (variable) -ida_nalt.NSUP_GR_LAYT (variable) -ida_nalt.NSUP_JINFO (variable) -ida_nalt.NSUP_LLABEL (variable) -ida_nalt.NSUP_MANUAL (variable) -ida_nalt.NSUP_OPTYPES (variable) -ida_nalt.NSUP_OREF0 (variable) -ida_nalt.NSUP_OREF1 (variable) -ida_nalt.NSUP_OREF2 (variable) -ida_nalt.NSUP_OREF3 (variable) -ida_nalt.NSUP_OREF4 (variable) -ida_nalt.NSUP_OREF5 (variable) -ida_nalt.NSUP_OREF6 (variable) -ida_nalt.NSUP_OREF7 (variable) -ida_nalt.NSUP_ORIGFMD (variable) -ida_nalt.NSUP_POINTS (variable) -ida_nalt.NSUP_REF0 (variable) -ida_nalt.NSUP_REF1 (variable) -ida_nalt.NSUP_REF2 (variable) -ida_nalt.NSUP_REF3 (variable) -ida_nalt.NSUP_REF4 (variable) -ida_nalt.NSUP_REF5 (variable) -ida_nalt.NSUP_REF6 (variable) -ida_nalt.NSUP_REF7 (variable) -ida_nalt.NSUP_REGARG (variable) -ida_nalt.NSUP_REGVAR (variable) -ida_nalt.NSUP_REPCMT (variable) -ida_nalt.NSUP_SEGTRANS (variable) -ida_nalt.NSUP_SWITCH (variable) -ida_nalt.NSUP_TYPEINFO (variable) -ida_nalt.NSUP_XREFPOS (variable) -ida_nalt.PATCH_TAG (variable) -ida_nalt.REFINFO_CUSTOM (variable) -ida_nalt.REFINFO_NOBASE (variable) -ida_nalt.REFINFO_NO_ONES (variable) -ida_nalt.REFINFO_NO_ZEROS (variable) -ida_nalt.REFINFO_PASTEND (variable) -ida_nalt.REFINFO_RVAOFF (variable) -ida_nalt.REFINFO_SELFREF (variable) -ida_nalt.REFINFO_SIGNEDOP (variable) -ida_nalt.REFINFO_SUBTRACT (variable) -ida_nalt.REFINFO_TYPE (variable) -ida_nalt.REF_HIGH16 (variable) -ida_nalt.REF_HIGH8 (variable) -ida_nalt.REF_LOW16 (variable) -ida_nalt.REF_LOW8 (variable) -ida_nalt.REF_OFF16 (variable) -ida_nalt.REF_OFF32 (variable) -ida_nalt.REF_OFF64 (variable) -ida_nalt.REF_OFF8 (variable) -ida_nalt.RIDX_ABINAME (variable) -ida_nalt.RIDX_ARCHIVE_PATH (variable) -ida_nalt.RIDX_C_MACROS (variable) -ida_nalt.RIDX_DBG_BINPATHS (variable) -ida_nalt.RIDX_DUALOP_GRAPH (variable) -ida_nalt.RIDX_DUALOP_TEXT (variable) -ida_nalt.RIDX_FILE_FORMAT_NAME (variable) -ida_nalt.RIDX_GROUPS (variable) -ida_nalt.RIDX_H_PATH (variable) -ida_nalt.RIDX_IDA_VERSION (variable) -ida_nalt.RIDX_INCLUDE (variable) -ida_nalt.RIDX_MD5 (variable) -ida_nalt.RIDX_NOTEPAD (variable) -ida_nalt.RIDX_PROBLEMS (variable) -ida_nalt.RIDX_SELECTORS (variable) -ida_nalt.RIDX_SHA256 (variable) -ida_nalt.RIDX_SMALL_IDC (variable) -ida_nalt.RIDX_SMALL_IDC_OLD (variable) -ida_nalt.RIDX_SRCDBG_PATHS (variable) -ida_nalt.RIDX_SRCDBG_UNDESIRED (variable) -ida_nalt.RIDX_STR_ENCODINGS (variable) -ida_nalt.STRENC_DEFAULT (variable) -ida_nalt.STRENC_NONE (variable) -ida_nalt.STRTYPE_C (variable) -ida_nalt.STRTYPE_C_16 (variable) -ida_nalt.STRTYPE_C_32 (variable) -ida_nalt.STRTYPE_LEN2 (variable) -ida_nalt.STRTYPE_LEN2_16 (variable) -ida_nalt.STRTYPE_LEN2_32 (variable) -ida_nalt.STRTYPE_LEN4 (variable) -ida_nalt.STRTYPE_LEN4_16 (variable) -ida_nalt.STRTYPE_PASCAL (variable) -ida_nalt.STRTYPE_PASCAL_16 (variable) -ida_nalt.STRTYPE_PASCAL_32 (variable) -ida_nalt.STRTYPE_TERMCHR (variable) -ida_nalt.SWI_CUSTOM (variable) -ida_nalt.SWI_DEFRET (variable) -ida_nalt.SWI_DEF_IN_TBL (variable) -ida_nalt.SWI_ELBASE (variable) -ida_nalt.SWI_HXNOLOWCASE (variable) -ida_nalt.SWI_INDIRECT (variable) -ida_nalt.SWI_J32 (variable) -ida_nalt.SWI_JMPINSN (variable) -ida_nalt.SWI_JMP_INV (variable) -ida_nalt.SWI_JSIZE (variable) -ida_nalt.SWI_SELFREL (variable) -ida_nalt.SWI_SEPARATE (variable) -ida_nalt.SWI_SHIFT_MASK (variable) -ida_nalt.SWI_SIGNED (variable) -ida_nalt.SWI_SPARSE (variable) -ida_nalt.SWI_STDTBL (variable) -ida_nalt.SWI_SUBTRACT (variable) -ida_nalt.SWI_USER (variable) -ida_nalt.SWI_V32 (variable) -ida_nalt.SWI_VERSION (variable) -ida_nalt.SWI_VSIZE (variable) -ida_nalt.SWI_VSPLIT (variable) -ida_nalt.V695_REF_OFF8 (variable) -ida_nalt.V695_REF_VHIGH (variable) -ida_nalt.V695_REF_VLOW (variable) -ida_nalt.add_encoding (function) -ida_nalt.array_parameters_t (class) -ida_nalt.array_parameters_t.__init__ (method) -ida_nalt.array_parameters_t.alignment (variable) -ida_nalt.array_parameters_t.is_default (method) -ida_nalt.array_parameters_t.lineitems (variable) -ida_nalt.clr__bnot0 (function) -ida_nalt.clr__bnot1 (function) -ida_nalt.clr__invsign0 (function) -ida_nalt.clr__invsign1 (function) -ida_nalt.clr_abits (function) -ida_nalt.clr_align_flow (function) -ida_nalt.clr_colored_item (function) -ida_nalt.clr_fixed_spd (function) -ida_nalt.clr_has_lname (function) -ida_nalt.clr_has_ti (function) -ida_nalt.clr_has_ti0 (function) -ida_nalt.clr_has_ti1 (function) -ida_nalt.clr_libitem (function) -ida_nalt.clr_lzero0 (function) -ida_nalt.clr_lzero1 (function) -ida_nalt.clr_noret (function) -ida_nalt.clr_notcode (function) -ida_nalt.clr_notproc (function) -ida_nalt.clr_retfp (function) -ida_nalt.clr_terse_struc (function) -ida_nalt.clr_tilcmt (function) -ida_nalt.clr_usemodsp (function) -ida_nalt.clr_usersp (function) -ida_nalt.clr_userti (function) -ida_nalt.clr_zstroff (function) -ida_nalt.custom_data_type_ids_fids_array (class) -ida_nalt.custom_data_type_ids_fids_array.__getitem__ (method) -ida_nalt.custom_data_type_ids_fids_array.__init__ (method) -ida_nalt.custom_data_type_ids_fids_array.__len__ (method) -ida_nalt.custom_data_type_ids_fids_array.__setitem__ (method) -ida_nalt.custom_data_type_ids_fids_array._get_bytes (method) -ida_nalt.custom_data_type_ids_fids_array._set_bytes (method) -ida_nalt.custom_data_type_ids_t (class) -ida_nalt.custom_data_type_ids_t.__getFids (method) -ida_nalt.custom_data_type_ids_t.__init__ (method) -ida_nalt.custom_data_type_ids_t.dtid (variable) -ida_nalt.custom_data_type_ids_t.fids (variable) -ida_nalt.custom_data_type_ids_t.get_dtid (method) -ida_nalt.custom_data_type_ids_t.set (method) -ida_nalt.dbg_get_input_path (function) -ida_nalt.del_absbase (function) -ida_nalt.del_aflags (function) -ida_nalt.del_alignment (function) -ida_nalt.del_array_parameters (function) -ida_nalt.del_custom_data_type_ids (function) -ida_nalt.del_encoding (function) -ida_nalt.del_ind_purged (function) -ida_nalt.del_item_color (function) -ida_nalt.del_op_tinfo (function) -ida_nalt.del_refinfo (function) -ida_nalt.del_source_linnum (function) -ida_nalt.del_str_type (function) -ida_nalt.del_switch_info (function) -ida_nalt.del_switch_parent (function) -ida_nalt.del_tinfo (function) -ida_nalt.delete_imports (function) -ida_nalt.ea2node (function) -ida_nalt.encoding_from_strtype (function) -ida_nalt.end_ea2node (function) -ida_nalt.enum_const_t (class) -ida_nalt.enum_const_t.__init__ (method) -ida_nalt.enum_import_names (function) -ida_nalt.find_custom_refinfo (function) -ida_nalt.get_abi_name (function) -ida_nalt.get_absbase (function) -ida_nalt.get_aflags (function) -ida_nalt.get_alignment (function) -ida_nalt.get_archive_path (function) -ida_nalt.get_array_parameters (function) -ida_nalt.get_asm_inc_file (function) -ida_nalt.get_custom_data_type_ids (function) -ida_nalt.get_custom_refinfo (function) -ida_nalt.get_default_encoding_idx (function) -ida_nalt.get_elapsed_secs (function) -ida_nalt.get_encoding_bpu (function) -ida_nalt.get_encoding_bpu_by_name (function) -ida_nalt.get_encoding_name (function) -ida_nalt.get_encoding_qty (function) -ida_nalt.get_gotea (function) -ida_nalt.get_ida_notepad_text (function) -ida_nalt.get_idb_ctime (function) -ida_nalt.get_idb_nopens (function) -ida_nalt.get_ids_modnode (function) -ida_nalt.get_imagebase (function) -ida_nalt.get_import_module_name (function) -ida_nalt.get_import_module_qty (function) -ida_nalt.get_ind_purged (function) -ida_nalt.get_initial_ida_version (function) -ida_nalt.get_initial_idb_version (function) -ida_nalt.get_input_file_path (function) -ida_nalt.get_item_color (function) -ida_nalt.get_loader_format_name (function) -ida_nalt.get_op_tinfo (function) -ida_nalt.get_outfile_encoding_idx (function) -ida_nalt.get_refinfo (function) -ida_nalt.get_reftype_by_size (function) -ida_nalt.get_root_filename (function) -ida_nalt.get_source_linnum (function) -ida_nalt.get_srcdbg_paths (function) -ida_nalt.get_srcdbg_undesired_paths (function) -ida_nalt.get_str_encoding_idx (function) -ida_nalt.get_str_term1 (function) -ida_nalt.get_str_term2 (function) -ida_nalt.get_str_type (function) -ida_nalt.get_str_type_code (function) -ida_nalt.get_str_type_prefix_length (function) -ida_nalt.get_strid (function) -ida_nalt.get_strtype_bpu (function) -ida_nalt.get_switch_info (function) -ida_nalt.get_switch_info (function) -ida_nalt.get_switch_parent (function) -ida_nalt.get_tinfo (function) -ida_nalt.getnode (function) -ida_nalt.has_aflag_linnum (function) -ida_nalt.has_aflag_lname (function) -ida_nalt.has_aflag_ti (function) -ida_nalt.has_aflag_ti0 (function) -ida_nalt.has_aflag_ti1 (function) -ida_nalt.has_lname (function) -ida_nalt.has_ti (function) -ida_nalt.has_ti0 (function) -ida_nalt.has_ti1 (function) -ida_nalt.hide_border (function) -ida_nalt.hide_item (function) -ida_nalt.is__bnot0 (function) -ida_nalt.is__bnot1 (function) -ida_nalt.is__invsign0 (function) -ida_nalt.is__invsign1 (function) -ida_nalt.is_aflag__bnot0 (function) -ida_nalt.is_aflag__bnot1 (function) -ida_nalt.is_aflag__invsign0 (function) -ida_nalt.is_aflag__invsign1 (function) -ida_nalt.is_aflag_align_flow (function) -ida_nalt.is_aflag_colored_item (function) -ida_nalt.is_aflag_data_guessed_by_hexrays (function) -ida_nalt.is_aflag_fixed_spd (function) -ida_nalt.is_aflag_func_guessed_by_hexrays (function) -ida_nalt.is_aflag_hidden_border (function) -ida_nalt.is_aflag_hidden_item (function) -ida_nalt.is_aflag_libitem (function) -ida_nalt.is_aflag_lzero0 (function) -ida_nalt.is_aflag_lzero1 (function) -ida_nalt.is_aflag_manual_insn (function) -ida_nalt.is_aflag_noret (function) -ida_nalt.is_aflag_notcode (function) -ida_nalt.is_aflag_notproc (function) -ida_nalt.is_aflag_public_name (function) -ida_nalt.is_aflag_retfp (function) -ida_nalt.is_aflag_terse_struc (function) -ida_nalt.is_aflag_tilcmt (function) -ida_nalt.is_aflag_type_determined_by_hexrays (function) -ida_nalt.is_aflag_type_guessed_by_hexrays (function) -ida_nalt.is_aflag_type_guessed_by_ida (function) -ida_nalt.is_aflag_usersp (function) -ida_nalt.is_aflag_userti (function) -ida_nalt.is_aflag_weak_name (function) -ida_nalt.is_aflag_zstroff (function) -ida_nalt.is_align_flow (function) -ida_nalt.is_colored_item (function) -ida_nalt.is_data_guessed_by_hexrays (function) -ida_nalt.is_finally_visible_item (function) -ida_nalt.is_fixed_spd (function) -ida_nalt.is_func_guessed_by_hexrays (function) -ida_nalt.is_hidden_border (function) -ida_nalt.is_hidden_item (function) -ida_nalt.is_libitem (function) -ida_nalt.is_lzero0 (function) -ida_nalt.is_lzero1 (function) -ida_nalt.is_noret (function) -ida_nalt.is_notcode (function) -ida_nalt.is_notproc (function) -ida_nalt.is_pascal (function) -ida_nalt.is_reftype_target_optional (function) -ida_nalt.is_retfp (function) -ida_nalt.is_terse_struc (function) -ida_nalt.is_tilcmt (function) -ida_nalt.is_type_determined_by_hexrays (function) -ida_nalt.is_type_guessed_by_hexrays (function) -ida_nalt.is_type_guessed_by_ida (function) -ida_nalt.is_usersp (function) -ida_nalt.is_userti (function) -ida_nalt.is_visible_item (function) -ida_nalt.is_zstroff (function) -ida_nalt.make_str_type (function) -ida_nalt.node2ea (function) -ida_nalt.opinfo_t (class) -ida_nalt.opinfo_t.__init__ (method) -ida_nalt.opinfo_t.cd (variable) -ida_nalt.opinfo_t.ec (variable) -ida_nalt.opinfo_t.path (variable) -ida_nalt.opinfo_t.ri (variable) -ida_nalt.opinfo_t.strtype (variable) -ida_nalt.opinfo_t.tid (variable) -ida_nalt.printop_t (class) -ida_nalt.printop_t.__init__ (method) -ida_nalt.printop_t.get_ti (method) -ida_nalt.printop_t.is_aflags_initialized (method) -ida_nalt.printop_t.is_f64 (method) -ida_nalt.printop_t.is_ti_initialized (method) -ida_nalt.printop_t.set_aflags_initialized (method) -ida_nalt.printop_t.set_ti_initialized (method) -ida_nalt.refinfo_t (class) -ida_nalt.refinfo_t.__init__ (method) -ida_nalt.refinfo_t.base (variable) -ida_nalt.refinfo_t.flags (variable) -ida_nalt.refinfo_t.init (method) -ida_nalt.refinfo_t.is_custom (method) -ida_nalt.refinfo_t.is_no_ones (method) -ida_nalt.refinfo_t.is_no_zeros (method) -ida_nalt.refinfo_t.is_pastend (method) -ida_nalt.refinfo_t.is_rvaoff (method) -ida_nalt.refinfo_t.is_selfref (method) -ida_nalt.refinfo_t.is_signed (method) -ida_nalt.refinfo_t.is_subtract (method) -ida_nalt.refinfo_t.is_target_optional (method) -ida_nalt.refinfo_t.no_base_xref (method) -ida_nalt.refinfo_t.set_type (method) -ida_nalt.refinfo_t.target (variable) -ida_nalt.refinfo_t.tdelta (variable) -ida_nalt.refinfo_t.type (method) -ida_nalt.rename_encoding (function) -ida_nalt.retrieve_input_file_crc32 (function) -ida_nalt.retrieve_input_file_md5 (function) -ida_nalt.retrieve_input_file_sha256 (function) -ida_nalt.retrieve_input_file_size (function) -ida_nalt.set__bnot0 (function) -ida_nalt.set__bnot1 (function) -ida_nalt.set__invsign0 (function) -ida_nalt.set__invsign1 (function) -ida_nalt.set_abits (function) -ida_nalt.set_absbase (function) -ida_nalt.set_aflags (function) -ida_nalt.set_align_flow (function) -ida_nalt.set_alignment (function) -ida_nalt.set_archive_path (function) -ida_nalt.set_array_parameters (function) -ida_nalt.set_asm_inc_file (function) -ida_nalt.set_colored_item (function) -ida_nalt.set_custom_data_type_ids (function) -ida_nalt.set_data_guessed_by_hexrays (function) -ida_nalt.set_default_encoding_idx (function) -ida_nalt.set_fixed_spd (function) -ida_nalt.set_func_guessed_by_hexrays (function) -ida_nalt.set_gotea (function) -ida_nalt.set_has_lname (function) -ida_nalt.set_has_ti (function) -ida_nalt.set_has_ti0 (function) -ida_nalt.set_has_ti1 (function) -ida_nalt.set_ida_notepad_text (function) -ida_nalt.set_ids_modnode (function) -ida_nalt.set_imagebase (function) -ida_nalt.set_item_color (function) -ida_nalt.set_libitem (function) -ida_nalt.set_loader_format_name (function) -ida_nalt.set_lzero0 (function) -ida_nalt.set_lzero1 (function) -ida_nalt.set_noret (function) -ida_nalt.set_notcode (function) -ida_nalt.set_notproc (function) -ida_nalt.set_op_tinfo (function) -ida_nalt.set_outfile_encoding_idx (function) -ida_nalt.set_refinfo (function) -ida_nalt.set_refinfo_ex (function) -ida_nalt.set_retfp (function) -ida_nalt.set_root_filename (function) -ida_nalt.set_source_linnum (function) -ida_nalt.set_srcdbg_paths (function) -ida_nalt.set_srcdbg_undesired_paths (function) -ida_nalt.set_str_encoding_idx (function) -ida_nalt.set_str_type (function) -ida_nalt.set_switch_info (function) -ida_nalt.set_switch_parent (function) -ida_nalt.set_terse_struc (function) -ida_nalt.set_tilcmt (function) -ida_nalt.set_tinfo (function) -ida_nalt.set_type_determined_by_hexrays (function) -ida_nalt.set_type_guessed_by_ida (function) -ida_nalt.set_usemodsp (function) -ida_nalt.set_usersp (function) -ida_nalt.set_userti (function) -ida_nalt.set_visible_item (function) -ida_nalt.set_zstroff (function) -ida_nalt.strpath_ids_array (class) -ida_nalt.strpath_ids_array.__getitem__ (method) -ida_nalt.strpath_ids_array.__init__ (method) -ida_nalt.strpath_ids_array.__len__ (method) -ida_nalt.strpath_ids_array.__setitem__ (method) -ida_nalt.strpath_ids_array._get_bytes (method) -ida_nalt.strpath_ids_array._set_bytes (method) -ida_nalt.strpath_t (class) -ida_nalt.strpath_t.__getIds (method) -ida_nalt.strpath_t.__init__ (method) -ida_nalt.switch_info_t (class) -ida_nalt.switch_info_t.__init__ (method) -ida_nalt.switch_info_t._get_values_lowcase (method) -ida_nalt.switch_info_t._set_values_lowcase (method) -ida_nalt.switch_info_t.assign (method) -ida_nalt.switch_info_t.clear (method) -ida_nalt.switch_info_t.custom (variable) -ida_nalt.switch_info_t.defjump (variable) -ida_nalt.switch_info_t.elbase (variable) -ida_nalt.switch_info_t.expr_ea (variable) -ida_nalt.switch_info_t.flags (variable) -ida_nalt.switch_info_t.get_jrange_vrange (method) -ida_nalt.switch_info_t.get_jtable_element_size (method) -ida_nalt.switch_info_t.get_jtable_size (method) -ida_nalt.switch_info_t.get_lowcase (method) -ida_nalt.switch_info_t.get_shift (method) -ida_nalt.switch_info_t.get_version (method) -ida_nalt.switch_info_t.get_vtable_element_size (method) -ida_nalt.switch_info_t.has_default (method) -ida_nalt.switch_info_t.has_elbase (method) -ida_nalt.switch_info_t.is_custom (method) -ida_nalt.switch_info_t.is_indirect (method) -ida_nalt.switch_info_t.is_nolowcase (method) -ida_nalt.switch_info_t.is_sparse (method) -ida_nalt.switch_info_t.is_subtract (method) -ida_nalt.switch_info_t.is_user_defined (method) -ida_nalt.switch_info_t.jcases (variable) -ida_nalt.switch_info_t.jumps (variable) -ida_nalt.switch_info_t.lowcase (variable) -ida_nalt.switch_info_t.marks (variable) -ida_nalt.switch_info_t.ncases (variable) -ida_nalt.switch_info_t.regdtype (variable) -ida_nalt.switch_info_t.regnum (variable) -ida_nalt.switch_info_t.set_elbase (method) -ida_nalt.switch_info_t.set_expr (method) -ida_nalt.switch_info_t.set_jtable_element_size (method) -ida_nalt.switch_info_t.set_jtable_size (method) -ida_nalt.switch_info_t.set_shift (method) -ida_nalt.switch_info_t.set_vtable_element_size (method) -ida_nalt.switch_info_t.startea (variable) -ida_nalt.switch_info_t.use_std_table (method) -ida_nalt.switch_info_t.values (variable) -ida_nalt.switch_info_t__from_ptrval__ (function) -ida_nalt.unhide_border (function) -ida_nalt.unhide_item (function) -ida_nalt.upd_abits (function) -ida_nalt.uses_aflag_modsp (function) -ida_nalt.uses_modsp (function) -ida_nalt.validate_idb_names (function) -ida_name (module) -ida_name.DEBNAME_EXACT (variable) -ida_name.DEBNAME_LOWER (variable) -ida_name.DEBNAME_NICE (variable) -ida_name.DEBNAME_UPPER (variable) -ida_name.FUNC_IMPORT_PREFIX (variable) -ida_name.GETN_APPZERO (variable) -ida_name.GETN_NODUMMY (variable) -ida_name.GETN_NOFIXUP (variable) -ida_name.GNCN_NOCOLOR (variable) -ida_name.GNCN_NODBGNM (variable) -ida_name.GNCN_NOFUNC (variable) -ida_name.GNCN_NOLABEL (variable) -ida_name.GNCN_NOSEG (variable) -ida_name.GNCN_PREFDBG (variable) -ida_name.GNCN_REQFUNC (variable) -ida_name.GNCN_REQNAME (variable) -ida_name.GNCN_SEGNUM (variable) -ida_name.GNCN_SEG_FUNC (variable) -ida_name.GN_COLORED (variable) -ida_name.GN_DEMANGLED (variable) -ida_name.GN_ISRET (variable) -ida_name.GN_LOCAL (variable) -ida_name.GN_LONG (variable) -ida_name.GN_NOT_DUMMY (variable) -ida_name.GN_NOT_ISRET (variable) -ida_name.GN_SHORT (variable) -ida_name.GN_STRICT (variable) -ida_name.GN_VISIBLE (variable) -ida_name.MAXNAMELEN (variable) -ida_name.NT_ABS (variable) -ida_name.NT_BMASK (variable) -ida_name.NT_BYTE (variable) -ida_name.NT_ENUM (variable) -ida_name.NT_LOCAL (variable) -ida_name.NT_NONE (variable) -ida_name.NT_REGVAR (variable) -ida_name.NT_SEG (variable) -ida_name.NT_STKVAR (variable) -ida_name.NT_STROFF (variable) -ida_name.NearestName (class) -ida_name.NearestName.__getitem__ (method) -ida_name.NearestName.__init__ (method) -ida_name.NearestName.__iter__ (method) -ida_name.NearestName._get_item (method) -ida_name.NearestName.find (method) -ida_name.NearestName.update (method) -ida_name.SN_AUTO (variable) -ida_name.SN_CHECK (variable) -ida_name.SN_DELTAIL (variable) -ida_name.SN_FORCE (variable) -ida_name.SN_IDBENC (variable) -ida_name.SN_LOCAL (variable) -ida_name.SN_NOCHECK (variable) -ida_name.SN_NODUMMY (variable) -ida_name.SN_NOLIST (variable) -ida_name.SN_NON_AUTO (variable) -ida_name.SN_NON_PUBLIC (variable) -ida_name.SN_NON_WEAK (variable) -ida_name.SN_NOWARN (variable) -ida_name.SN_PUBLIC (variable) -ida_name.SN_WEAK (variable) -ida_name.append_struct_fields (function) -ida_name.calc_gtn_flags (function) -ida_name.cleanup_name (function) -ida_name.del_debug_names (function) -ida_name.del_global_name (function) -ida_name.del_local_name (function) -ida_name.demangle_name (function) -ida_name.ea_name_t (class) -ida_name.ea_name_t.__init__ (method) -ida_name.ea_name_vec_t (class) -ida_name.ea_name_vec_t.__getitem__ (method) -ida_name.ea_name_vec_t.__init__ (method) -ida_name.ea_name_vec_t.__len__ (method) -ida_name.ea_name_vec_t.__setitem__ (method) -ida_name.ea_name_vec_t.at (method) -ida_name.ea_name_vec_t.begin (method) -ida_name.ea_name_vec_t.capacity (method) -ida_name.ea_name_vec_t.clear (method) -ida_name.ea_name_vec_t.empty (method) -ida_name.ea_name_vec_t.end (method) -ida_name.ea_name_vec_t.erase (method) -ida_name.ea_name_vec_t.extract (method) -ida_name.ea_name_vec_t.grow (method) -ida_name.ea_name_vec_t.inject (method) -ida_name.ea_name_vec_t.insert (method) -ida_name.ea_name_vec_t.pop_back (method) -ida_name.ea_name_vec_t.push_back (method) -ida_name.ea_name_vec_t.qclear (method) -ida_name.ea_name_vec_t.reserve (method) -ida_name.ea_name_vec_t.resize (method) -ida_name.ea_name_vec_t.size (method) -ida_name.ea_name_vec_t.swap (method) -ida_name.ea_name_vec_t.truncate (method) -ida_name.extract_name (function) -ida_name.force_name (function) -ida_name.get_colored_demangled_name (function) -ida_name.get_colored_long_name (function) -ida_name.get_colored_name (function) -ida_name.get_colored_short_name (function) -ida_name.get_cp_validity (function) -ida_name.get_debug_name (function) -ida_name.get_debug_name_ea (function) -ida_name.get_debug_names (function) -ida_name.get_demangled_name (function) -ida_name.get_ea_name (function) -ida_name.get_long_name (function) -ida_name.get_mangled_name_type (function) -ida_name.get_name (function) -ida_name.get_name_base_ea (function) -ida_name.get_name_color (function) -ida_name.get_name_ea (function) -ida_name.get_name_expr (function) -ida_name.get_name_value (function) -ida_name.get_nice_colored_name (function) -ida_name.get_nlist_ea (function) -ida_name.get_nlist_idx (function) -ida_name.get_nlist_name (function) -ida_name.get_nlist_size (function) -ida_name.get_short_name (function) -ida_name.get_visible_name (function) -ida_name.hide_name (function) -ida_name.is_ident (function) -ida_name.is_ident_cp (function) -ida_name.is_in_nlist (function) -ida_name.is_name_defined_locally (function) -ida_name.is_public_name (function) -ida_name.is_strlit_cp (function) -ida_name.is_uname (function) -ida_name.is_valid_cp (function) -ida_name.is_valid_name (function) -ida_name.is_valid_typename (function) -ida_name.is_visible_cp (function) -ida_name.is_weak_name (function) -ida_name.make_name_auto (function) -ida_name.make_name_non_public (function) -ida_name.make_name_non_weak (function) -ida_name.make_name_public (function) -ida_name.make_name_user (function) -ida_name.make_name_weak (function) -ida_name.rebuild_nlist (function) -ida_name.reorder_dummy_names (function) -ida_name.set_cp_validity (function) -ida_name.set_debug_name (function) -ida_name.set_dummy_name (function) -ida_name.set_name (function) -ida_name.show_name (function) -ida_name.validate_name (function) -ida_netnode (module) -ida_netnode.BADNODE (variable) -ida_netnode.MAXNAMESIZE (variable) -ida_netnode.MAXSPECSIZE (variable) -ida_netnode.MAX_NODENAME_SIZE (variable) -ida_netnode.atag (variable) -ida_netnode.exist (function) -ida_netnode.htag (variable) -ida_netnode.ltag (variable) -ida_netnode.netnode (class) -ida_netnode.netnode.__eq__ (method) -ida_netnode.netnode.__init__ (method) -ida_netnode.netnode.__ne__ (method) -ida_netnode.netnode.altdel (method) -ida_netnode.netnode.altdel_all (method) -ida_netnode.netnode.altdel_ea (method) -ida_netnode.netnode.altdel_idx8 (method) -ida_netnode.netnode.altfirst (method) -ida_netnode.netnode.altfirst_idx8 (method) -ida_netnode.netnode.altlast (method) -ida_netnode.netnode.altlast_idx8 (method) -ida_netnode.netnode.altnext (method) -ida_netnode.netnode.altnext_idx8 (method) -ida_netnode.netnode.altprev (method) -ida_netnode.netnode.altprev_idx8 (method) -ida_netnode.netnode.altset (method) -ida_netnode.netnode.altset_ea (method) -ida_netnode.netnode.altset_idx8 (method) -ida_netnode.netnode.altshift (method) -ida_netnode.netnode.altval (method) -ida_netnode.netnode.altval_ea (method) -ida_netnode.netnode.altval_idx8 (method) -ida_netnode.netnode.blobshift (method) -ida_netnode.netnode.blobsize (method) -ida_netnode.netnode.blobsize_ea (method) -ida_netnode.netnode.chardel (method) -ida_netnode.netnode.chardel_ea (method) -ida_netnode.netnode.chardel_idx8 (method) -ida_netnode.netnode.charfirst (method) -ida_netnode.netnode.charfirst_idx8 (method) -ida_netnode.netnode.charlast (method) -ida_netnode.netnode.charlast_idx8 (method) -ida_netnode.netnode.charnext (method) -ida_netnode.netnode.charnext_idx8 (method) -ida_netnode.netnode.charprev (method) -ida_netnode.netnode.charprev_idx8 (method) -ida_netnode.netnode.charset (method) -ida_netnode.netnode.charset_ea (method) -ida_netnode.netnode.charset_idx8 (method) -ida_netnode.netnode.charshift (method) -ida_netnode.netnode.charval (method) -ida_netnode.netnode.charval_ea (method) -ida_netnode.netnode.charval_idx8 (method) -ida_netnode.netnode.copyto (method) -ida_netnode.netnode.create (method) -ida_netnode.netnode.delblob (method) -ida_netnode.netnode.delblob_ea (method) -ida_netnode.netnode.delvalue (method) -ida_netnode.netnode.eadel (method) -ida_netnode.netnode.eadel_idx8 (method) -ida_netnode.netnode.eaget (method) -ida_netnode.netnode.eaget_idx (method) -ida_netnode.netnode.eaget_idx8 (method) -ida_netnode.netnode.easet (method) -ida_netnode.netnode.easet_idx (method) -ida_netnode.netnode.easet_idx8 (method) -ida_netnode.netnode.end (method) -ida_netnode.netnode.exist (method) -ida_netnode.netnode.get_name (method) -ida_netnode.netnode.getblob (method) -ida_netnode.netnode.getblob_ea (method) -ida_netnode.netnode.getclob (method) -ida_netnode.netnode.hashdel (method) -ida_netnode.netnode.hashdel_all (method) -ida_netnode.netnode.hashfirst (method) -ida_netnode.netnode.hashlast (method) -ida_netnode.netnode.hashnext (method) -ida_netnode.netnode.hashprev (method) -ida_netnode.netnode.hashset (method) -ida_netnode.netnode.hashset_buf (method) -ida_netnode.netnode.hashset_idx (method) -ida_netnode.netnode.hashstr (method) -ida_netnode.netnode.hashstr_buf (method) -ida_netnode.netnode.hashval (method) -ida_netnode.netnode.hashval_long (method) -ida_netnode.netnode.index (method) -ida_netnode.netnode.kill (method) -ida_netnode.netnode.long_value (method) -ida_netnode.netnode.lower_bound (method) -ida_netnode.netnode.lower_bound_ea (method) -ida_netnode.netnode.lower_bound_idx8 (method) -ida_netnode.netnode.moveto (method) -ida_netnode.netnode.next (method) -ida_netnode.netnode.prev (method) -ida_netnode.netnode.rename (method) -ida_netnode.netnode.set (method) -ida_netnode.netnode.set_long (method) -ida_netnode.netnode.setblob (method) -ida_netnode.netnode.setblob_ea (method) -ida_netnode.netnode.start (method) -ida_netnode.netnode.supdel (method) -ida_netnode.netnode.supdel_all (method) -ida_netnode.netnode.supdel_ea (method) -ida_netnode.netnode.supdel_idx8 (method) -ida_netnode.netnode.supdel_range (method) -ida_netnode.netnode.supdel_range_idx8 (method) -ida_netnode.netnode.supfirst (method) -ida_netnode.netnode.supfirst_idx8 (method) -ida_netnode.netnode.suplast (method) -ida_netnode.netnode.suplast_idx8 (method) -ida_netnode.netnode.supnext (method) -ida_netnode.netnode.supnext_idx8 (method) -ida_netnode.netnode.supprev (method) -ida_netnode.netnode.supprev_idx8 (method) -ida_netnode.netnode.supset (method) -ida_netnode.netnode.supset_ea (method) -ida_netnode.netnode.supset_idx8 (method) -ida_netnode.netnode.supshift (method) -ida_netnode.netnode.supstr (method) -ida_netnode.netnode.supstr_ea (method) -ida_netnode.netnode.supstr_idx8 (method) -ida_netnode.netnode.supval (method) -ida_netnode.netnode.supval_ea (method) -ida_netnode.netnode.supval_idx8 (method) -ida_netnode.netnode.valobj (method) -ida_netnode.netnode.valstr (method) -ida_netnode.netnode.value_exists (method) -ida_netnode.netnode_exist (function) -ida_netnode.ntag (variable) -ida_netnode.stag (variable) -ida_netnode.vtag (variable) -ida_offset (module) -ida_offset.add_refinfo_dref (function) -ida_offset.calc_basevalue (function) -ida_offset.calc_offset_base (function) -ida_offset.calc_probable_base_by_value (function) -ida_offset.calc_reference_data (function) -ida_offset.calc_target (function) -ida_offset.can_be_off32 (function) -ida_offset.get_default_reftype (function) -ida_offset.get_offbase (function) -ida_offset.get_offset_expr (function) -ida_offset.get_offset_expression (function) -ida_offset.op_offset (function) -ida_offset.op_offset_ex (function) -ida_offset.op_plain_offset (function) -ida_pro (module) -ida_pro.CP_UTF16 (variable) -ida_pro.IDA_SDK_VERSION (variable) -ida_pro.IDBDEC_ESCAPE (variable) -ida_pro.IOREDIR_APPEND (variable) -ida_pro.IOREDIR_INPUT (variable) -ida_pro.IOREDIR_OUTPUT (variable) -ida_pro.IOREDIR_QUOTED (variable) -ida_pro.MAXSTR (variable) -ida_pro.SUBSTCHAR (variable) -ida_pro.__MF__ (variable) -ida_pro.__qmutex_t (class) -ida_pro.__qmutex_t.__init__ (method) -ida_pro.__qsemaphore_t (class) -ida_pro.__qsemaphore_t.__init__ (method) -ida_pro.__qthread_t (class) -ida_pro.__qthread_t.__init__ (method) -ida_pro._qstrvec_t (class) -ida_pro._qstrvec_t.__get_size (method) -ida_pro._qstrvec_t.__getitem__ (method) -ida_pro._qstrvec_t.__init__ (method) -ida_pro._qstrvec_t.__setitem__ (method) -ida_pro._qstrvec_t._create_clink (method) -ida_pro._qstrvec_t._del_clink (method) -ida_pro._qstrvec_t._get_clink_ptr (method) -ida_pro._qstrvec_t.add (method) -ida_pro._qstrvec_t.addressof (method) -ida_pro._qstrvec_t.assign (method) -ida_pro._qstrvec_t.clear (method) -ida_pro._qstrvec_t.from_list (method) -ida_pro._qstrvec_t.insert (method) -ida_pro._qstrvec_t.remove (method) -ida_pro._qstrvec_t.size (variable) -ida_pro.boolvec_t (class) -ida_pro.boolvec_t.__eq__ (method) -ida_pro.boolvec_t.__getitem__ (method) -ida_pro.boolvec_t.__init__ (method) -ida_pro.boolvec_t.__len__ (method) -ida_pro.boolvec_t.__ne__ (method) -ida_pro.boolvec_t.__setitem__ (method) -ida_pro.boolvec_t._del (method) -ida_pro.boolvec_t.add_unique (method) -ida_pro.boolvec_t.at (method) -ida_pro.boolvec_t.begin (method) -ida_pro.boolvec_t.capacity (method) -ida_pro.boolvec_t.clear (method) -ida_pro.boolvec_t.empty (method) -ida_pro.boolvec_t.end (method) -ida_pro.boolvec_t.erase (method) -ida_pro.boolvec_t.extract (method) -ida_pro.boolvec_t.find (method) -ida_pro.boolvec_t.grow (method) -ida_pro.boolvec_t.has (method) -ida_pro.boolvec_t.inject (method) -ida_pro.boolvec_t.insert (method) -ida_pro.boolvec_t.pop_back (method) -ida_pro.boolvec_t.push_back (method) -ida_pro.boolvec_t.qclear (method) -ida_pro.boolvec_t.reserve (method) -ida_pro.boolvec_t.resize (method) -ida_pro.boolvec_t.size (method) -ida_pro.boolvec_t.swap (method) -ida_pro.boolvec_t.truncate (method) -ida_pro.channel_redir_t (class) -ida_pro.channel_redir_t.__init__ (method) -ida_pro.channel_redir_t.fd (variable) -ida_pro.channel_redir_t.file (variable) -ida_pro.channel_redir_t.flags (variable) -ida_pro.channel_redir_t.is_append (method) -ida_pro.channel_redir_t.is_input (method) -ida_pro.channel_redir_t.is_output (method) -ida_pro.channel_redir_t.is_quoted (method) -ida_pro.channel_redir_t.length (variable) -ida_pro.channel_redir_t.start (variable) -ida_pro.check_process_exit (function) -ida_pro.ea_array (class) -ida_pro.ea_array.__getitem__ (method) -ida_pro.ea_array.__init__ (method) -ida_pro.ea_array.__setitem__ (method) -ida_pro.ea_array.cast (method) -ida_pro.ea_array.frompointer (method) -ida_pro.ea_array_frompointer (function) -ida_pro.ea_pointer (class) -ida_pro.ea_pointer.__init__ (method) -ida_pro.ea_pointer.assign (method) -ida_pro.ea_pointer.cast (method) -ida_pro.ea_pointer.frompointer (method) -ida_pro.ea_pointer.value (method) -ida_pro.ea_pointer_frompointer (function) -ida_pro.extend_sign (function) -ida_pro.instant_dbgopts_t (class) -ida_pro.instant_dbgopts_t.__init__ (method) -ida_pro.instant_dbgopts_t.attach (variable) -ida_pro.instant_dbgopts_t.debmod (variable) -ida_pro.instant_dbgopts_t.env (variable) -ida_pro.instant_dbgopts_t.event_id (variable) -ida_pro.instant_dbgopts_t.host (variable) -ida_pro.instant_dbgopts_t.pid (variable) -ida_pro.instant_dbgopts_t.port (variable) -ida_pro.int64vec_t (class) -ida_pro.int64vec_t.__eq__ (method) -ida_pro.int64vec_t.__getitem__ (method) -ida_pro.int64vec_t.__init__ (method) -ida_pro.int64vec_t.__len__ (method) -ida_pro.int64vec_t.__ne__ (method) -ida_pro.int64vec_t.__setitem__ (method) -ida_pro.int64vec_t._del (method) -ida_pro.int64vec_t.add_unique (method) -ida_pro.int64vec_t.at (method) -ida_pro.int64vec_t.begin (method) -ida_pro.int64vec_t.capacity (method) -ida_pro.int64vec_t.clear (method) -ida_pro.int64vec_t.empty (method) -ida_pro.int64vec_t.end (method) -ida_pro.int64vec_t.erase (method) -ida_pro.int64vec_t.extract (method) -ida_pro.int64vec_t.find (method) -ida_pro.int64vec_t.has (method) -ida_pro.int64vec_t.inject (method) -ida_pro.int64vec_t.insert (method) -ida_pro.int64vec_t.pop_back (method) -ida_pro.int64vec_t.push_back (method) -ida_pro.int64vec_t.qclear (method) -ida_pro.int64vec_t.reserve (method) -ida_pro.int64vec_t.resize (method) -ida_pro.int64vec_t.size (method) -ida_pro.int64vec_t.swap (method) -ida_pro.int64vec_t.truncate (method) -ida_pro.int_pointer (class) -ida_pro.int_pointer.__init__ (method) -ida_pro.int_pointer.assign (method) -ida_pro.int_pointer.cast (method) -ida_pro.int_pointer.frompointer (method) -ida_pro.int_pointer.value (method) -ida_pro.int_pointer_frompointer (function) -ida_pro.intvec_t (class) -ida_pro.intvec_t.__eq__ (method) -ida_pro.intvec_t.__getitem__ (method) -ida_pro.intvec_t.__init__ (method) -ida_pro.intvec_t.__len__ (method) -ida_pro.intvec_t.__ne__ (method) -ida_pro.intvec_t.__setitem__ (method) -ida_pro.intvec_t._del (method) -ida_pro.intvec_t.add_unique (method) -ida_pro.intvec_t.at (method) -ida_pro.intvec_t.begin (method) -ida_pro.intvec_t.capacity (method) -ida_pro.intvec_t.clear (method) -ida_pro.intvec_t.empty (method) -ida_pro.intvec_t.end (method) -ida_pro.intvec_t.erase (method) -ida_pro.intvec_t.extract (method) -ida_pro.intvec_t.find (method) -ida_pro.intvec_t.has (method) -ida_pro.intvec_t.inject (method) -ida_pro.intvec_t.insert (method) -ida_pro.intvec_t.pop_back (method) -ida_pro.intvec_t.push_back (method) -ida_pro.intvec_t.qclear (method) -ida_pro.intvec_t.reserve (method) -ida_pro.intvec_t.resize (method) -ida_pro.intvec_t.size (method) -ida_pro.intvec_t.swap (method) -ida_pro.intvec_t.truncate (method) -ida_pro.is_control_tty (function) -ida_pro.is_cvt64 (function) -ida_pro.is_main_thread (function) -ida_pro.log2ceil (function) -ida_pro.log2floor (function) -ida_pro.parse_dbgopts (function) -ida_pro.qatoll (function) -ida_pro.qcontrol_tty (function) -ida_pro.qdetach_tty (function) -ida_pro.qexit (function) -ida_pro.qmutex_locker_t (class) -ida_pro.qmutex_locker_t.__init__ (method) -ida_pro.qrefcnt_obj_t (class) -ida_pro.qrefcnt_obj_t.__init__ (method) -ida_pro.qrefcnt_obj_t.refcnt (variable) -ida_pro.qrefcnt_obj_t.release (method) -ida_pro.qstrvec_t_add (function) -ida_pro.qstrvec_t_addressof (function) -ida_pro.qstrvec_t_assign (function) -ida_pro.qstrvec_t_clear (function) -ida_pro.qstrvec_t_create (function) -ida_pro.qstrvec_t_destroy (function) -ida_pro.qstrvec_t_from_list (function) -ida_pro.qstrvec_t_get (function) -ida_pro.qstrvec_t_get_clink (function) -ida_pro.qstrvec_t_get_clink_ptr (function) -ida_pro.qstrvec_t_insert (function) -ida_pro.qstrvec_t_remove (function) -ida_pro.qstrvec_t_set (function) -ida_pro.qstrvec_t_size (function) -ida_pro.qthread_equal (function) -ida_pro.quote_cmdline_arg (function) -ida_pro.qvector_reserve (function) -ida_pro.readbytes (function) -ida_pro.reloc_value (function) -ida_pro.relocate_relobj (function) -ida_pro.sel_array (class) -ida_pro.sel_array.__getitem__ (method) -ida_pro.sel_array.__init__ (method) -ida_pro.sel_array.__setitem__ (method) -ida_pro.sel_array.cast (method) -ida_pro.sel_array.frompointer (method) -ida_pro.sel_array_frompointer (function) -ida_pro.sel_pointer (class) -ida_pro.sel_pointer.__init__ (method) -ida_pro.sel_pointer.assign (method) -ida_pro.sel_pointer.cast (method) -ida_pro.sel_pointer.frompointer (method) -ida_pro.sel_pointer.value (method) -ida_pro.sel_pointer_frompointer (function) -ida_pro.sizevec_t (class) -ida_pro.sizevec_t.__eq__ (method) -ida_pro.sizevec_t.__getitem__ (method) -ida_pro.sizevec_t.__init__ (method) -ida_pro.sizevec_t.__len__ (method) -ida_pro.sizevec_t.__ne__ (method) -ida_pro.sizevec_t.__setitem__ (method) -ida_pro.sizevec_t._del (method) -ida_pro.sizevec_t.add_unique (method) -ida_pro.sizevec_t.at (method) -ida_pro.sizevec_t.begin (method) -ida_pro.sizevec_t.capacity (method) -ida_pro.sizevec_t.clear (method) -ida_pro.sizevec_t.empty (method) -ida_pro.sizevec_t.end (method) -ida_pro.sizevec_t.erase (method) -ida_pro.sizevec_t.extract (method) -ida_pro.sizevec_t.find (method) -ida_pro.sizevec_t.grow (method) -ida_pro.sizevec_t.has (method) -ida_pro.sizevec_t.inject (method) -ida_pro.sizevec_t.insert (method) -ida_pro.sizevec_t.pop_back (method) -ida_pro.sizevec_t.push_back (method) -ida_pro.sizevec_t.qclear (method) -ida_pro.sizevec_t.reserve (method) -ida_pro.sizevec_t.resize (method) -ida_pro.sizevec_t.size (method) -ida_pro.sizevec_t.swap (method) -ida_pro.sizevec_t.truncate (method) -ida_pro.str2user (function) -ida_pro.strvec_t (class) -ida_pro.strvec_t.__getitem__ (method) -ida_pro.strvec_t.__init__ (method) -ida_pro.strvec_t.__len__ (method) -ida_pro.strvec_t.__setitem__ (method) -ida_pro.strvec_t.at (method) -ida_pro.strvec_t.begin (method) -ida_pro.strvec_t.capacity (method) -ida_pro.strvec_t.clear (method) -ida_pro.strvec_t.empty (method) -ida_pro.strvec_t.end (method) -ida_pro.strvec_t.erase (method) -ida_pro.strvec_t.extract (method) -ida_pro.strvec_t.grow (method) -ida_pro.strvec_t.inject (method) -ida_pro.strvec_t.insert (method) -ida_pro.strvec_t.pop_back (method) -ida_pro.strvec_t.push_back (method) -ida_pro.strvec_t.qclear (method) -ida_pro.strvec_t.reserve (method) -ida_pro.strvec_t.resize (method) -ida_pro.strvec_t.size (method) -ida_pro.strvec_t.swap (method) -ida_pro.strvec_t.truncate (method) -ida_pro.sval_pointer (class) -ida_pro.sval_pointer.__init__ (method) -ida_pro.sval_pointer.assign (method) -ida_pro.sval_pointer.cast (method) -ida_pro.sval_pointer.frompointer (method) -ida_pro.sval_pointer.value (method) -ida_pro.sval_pointer_frompointer (function) -ida_pro.tid_array (class) -ida_pro.tid_array.__getitem__ (method) -ida_pro.tid_array.__init__ (method) -ida_pro.tid_array.__setitem__ (method) -ida_pro.tid_array.cast (method) -ida_pro.tid_array.frompointer (method) -ida_pro.tid_array_frompointer (function) -ida_pro.uchar_array (class) -ida_pro.uchar_array.__getitem__ (method) -ida_pro.uchar_array.__init__ (method) -ida_pro.uchar_array.__setitem__ (method) -ida_pro.uchar_array.cast (method) -ida_pro.uchar_array.frompointer (method) -ida_pro.uchar_array_frompointer (function) -ida_pro.uint64vec_t (class) -ida_pro.uint64vec_t.__eq__ (method) -ida_pro.uint64vec_t.__getitem__ (method) -ida_pro.uint64vec_t.__init__ (method) -ida_pro.uint64vec_t.__len__ (method) -ida_pro.uint64vec_t.__ne__ (method) -ida_pro.uint64vec_t.__setitem__ (method) -ida_pro.uint64vec_t._del (method) -ida_pro.uint64vec_t.add_unique (method) -ida_pro.uint64vec_t.at (method) -ida_pro.uint64vec_t.begin (method) -ida_pro.uint64vec_t.capacity (method) -ida_pro.uint64vec_t.clear (method) -ida_pro.uint64vec_t.empty (method) -ida_pro.uint64vec_t.end (method) -ida_pro.uint64vec_t.erase (method) -ida_pro.uint64vec_t.extract (method) -ida_pro.uint64vec_t.find (method) -ida_pro.uint64vec_t.has (method) -ida_pro.uint64vec_t.inject (method) -ida_pro.uint64vec_t.insert (method) -ida_pro.uint64vec_t.pop_back (method) -ida_pro.uint64vec_t.push_back (method) -ida_pro.uint64vec_t.qclear (method) -ida_pro.uint64vec_t.reserve (method) -ida_pro.uint64vec_t.resize (method) -ida_pro.uint64vec_t.size (method) -ida_pro.uint64vec_t.swap (method) -ida_pro.uint64vec_t.truncate (method) -ida_pro.uintvec_t (class) -ida_pro.uintvec_t.__eq__ (method) -ida_pro.uintvec_t.__getitem__ (method) -ida_pro.uintvec_t.__init__ (method) -ida_pro.uintvec_t.__len__ (method) -ida_pro.uintvec_t.__ne__ (method) -ida_pro.uintvec_t.__setitem__ (method) -ida_pro.uintvec_t._del (method) -ida_pro.uintvec_t.add_unique (method) -ida_pro.uintvec_t.at (method) -ida_pro.uintvec_t.begin (method) -ida_pro.uintvec_t.capacity (method) -ida_pro.uintvec_t.clear (method) -ida_pro.uintvec_t.empty (method) -ida_pro.uintvec_t.end (method) -ida_pro.uintvec_t.erase (method) -ida_pro.uintvec_t.extract (method) -ida_pro.uintvec_t.find (method) -ida_pro.uintvec_t.has (method) -ida_pro.uintvec_t.inject (method) -ida_pro.uintvec_t.insert (method) -ida_pro.uintvec_t.pop_back (method) -ida_pro.uintvec_t.push_back (method) -ida_pro.uintvec_t.qclear (method) -ida_pro.uintvec_t.reserve (method) -ida_pro.uintvec_t.resize (method) -ida_pro.uintvec_t.size (method) -ida_pro.uintvec_t.swap (method) -ida_pro.uintvec_t.truncate (method) -ida_pro.uval_array (class) -ida_pro.uval_array.__getitem__ (method) -ida_pro.uval_array.__init__ (method) -ida_pro.uval_array.__setitem__ (method) -ida_pro.uval_array.cast (method) -ida_pro.uval_array.frompointer (method) -ida_pro.uval_array_frompointer (function) -ida_pro.writebytes (function) -ida_problems (module) -ida_problems.PR_ATTN (variable) -ida_problems.PR_BADSTACK (variable) -ida_problems.PR_COLLISION (variable) -ida_problems.PR_DECIMP (variable) -ida_problems.PR_DISASM (variable) -ida_problems.PR_END (variable) -ida_problems.PR_FINAL (variable) -ida_problems.PR_HEAD (variable) -ida_problems.PR_ILLADDR (variable) -ida_problems.PR_JUMP (variable) -ida_problems.PR_MANYLINES (variable) -ida_problems.PR_NOBASE (variable) -ida_problems.PR_NOCMT (variable) -ida_problems.PR_NOFOP (variable) -ida_problems.PR_NONAME (variable) -ida_problems.PR_NOXREFS (variable) -ida_problems.PR_ROLLED (variable) -ida_problems.forget_problem (function) -ida_problems.get_problem (function) -ida_problems.get_problem_desc (function) -ida_problems.get_problem_name (function) -ida_problems.is_problem_present (function) -ida_problems.remember_problem (function) -ida_problems.was_ida_decision (function) -ida_range (module) -ida_range.RANGE_KIND_FUNC (variable) -ida_range.RANGE_KIND_HIDDEN_RANGE (variable) -ida_range.RANGE_KIND_SEGMENT (variable) -ida_range.array_of_rangesets (class) -ida_range.array_of_rangesets.__eq__ (method) -ida_range.array_of_rangesets.__getitem__ (method) -ida_range.array_of_rangesets.__init__ (method) -ida_range.array_of_rangesets.__len__ (method) -ida_range.array_of_rangesets.__ne__ (method) -ida_range.array_of_rangesets.__setitem__ (method) -ida_range.array_of_rangesets._del (method) -ida_range.array_of_rangesets.add_unique (method) -ida_range.array_of_rangesets.at (method) -ida_range.array_of_rangesets.begin (method) -ida_range.array_of_rangesets.capacity (method) -ida_range.array_of_rangesets.clear (method) -ida_range.array_of_rangesets.empty (method) -ida_range.array_of_rangesets.end (method) -ida_range.array_of_rangesets.erase (method) -ida_range.array_of_rangesets.extract (method) -ida_range.array_of_rangesets.find (method) -ida_range.array_of_rangesets.grow (method) -ida_range.array_of_rangesets.has (method) -ida_range.array_of_rangesets.inject (method) -ida_range.array_of_rangesets.insert (method) -ida_range.array_of_rangesets.pop_back (method) -ida_range.array_of_rangesets.push_back (method) -ida_range.array_of_rangesets.qclear (method) -ida_range.array_of_rangesets.reserve (method) -ida_range.array_of_rangesets.resize (method) -ida_range.array_of_rangesets.size (method) -ida_range.array_of_rangesets.swap (method) -ida_range.array_of_rangesets.truncate (method) -ida_range.range_t (class) -ida_range.range_t.__eq__ (method) -ida_range.range_t.__ge__ (method) -ida_range.range_t.__gt__ (method) -ida_range.range_t.__init__ (method) -ida_range.range_t.__le__ (method) -ida_range.range_t.__lt__ (method) -ida_range.range_t.__ne__ (method) -ida_range.range_t._print (method) -ida_range.range_t.clear (method) -ida_range.range_t.compare (method) -ida_range.range_t.contains (method) -ida_range.range_t.empty (method) -ida_range.range_t.end_ea (variable) -ida_range.range_t.extend (method) -ida_range.range_t.intersect (method) -ida_range.range_t.overlaps (method) -ida_range.range_t.size (method) -ida_range.range_t.start_ea (variable) -ida_range.range_t_print (function) -ida_range.rangeset_t (class) -ida_range.rangeset_t.__eq__ (method) -ida_range.rangeset_t.__getitem__ (method) -ida_range.rangeset_t.__init__ (method) -ida_range.rangeset_t.__ne__ (method) -ida_range.rangeset_t._print (method) -ida_range.rangeset_t.add (method) -ida_range.rangeset_t.begin (method) -ida_range.rangeset_t.cached_range (method) -ida_range.rangeset_t.clear (method) -ida_range.rangeset_t.contains (method) -ida_range.rangeset_t.empty (method) -ida_range.rangeset_t.end (method) -ida_range.rangeset_t.find_range (method) -ida_range.rangeset_t.getrange (method) -ida_range.rangeset_t.has_common (method) -ida_range.rangeset_t.includes (method) -ida_range.rangeset_t.intersect (method) -ida_range.rangeset_t.is_equal (method) -ida_range.rangeset_t.is_subset_of (method) -ida_range.rangeset_t.lastrange (method) -ida_range.rangeset_t.next_addr (method) -ida_range.rangeset_t.next_range (method) -ida_range.rangeset_t.nranges (method) -ida_range.rangeset_t.prev_addr (method) -ida_range.rangeset_t.prev_range (method) -ida_range.rangeset_t.sub (method) -ida_range.rangeset_t.swap (method) -ida_range.rangevec_base_t (class) -ida_range.rangevec_base_t.__eq__ (method) -ida_range.rangevec_base_t.__getitem__ (method) -ida_range.rangevec_base_t.__init__ (method) -ida_range.rangevec_base_t.__len__ (method) -ida_range.rangevec_base_t.__ne__ (method) -ida_range.rangevec_base_t.__setitem__ (method) -ida_range.rangevec_base_t._del (method) -ida_range.rangevec_base_t.add_unique (method) -ida_range.rangevec_base_t.at (method) -ida_range.rangevec_base_t.begin (method) -ida_range.rangevec_base_t.capacity (method) -ida_range.rangevec_base_t.clear (method) -ida_range.rangevec_base_t.empty (method) -ida_range.rangevec_base_t.end (method) -ida_range.rangevec_base_t.erase (method) -ida_range.rangevec_base_t.extract (method) -ida_range.rangevec_base_t.find (method) -ida_range.rangevec_base_t.grow (method) -ida_range.rangevec_base_t.has (method) -ida_range.rangevec_base_t.inject (method) -ida_range.rangevec_base_t.insert (method) -ida_range.rangevec_base_t.pop_back (method) -ida_range.rangevec_base_t.push_back (method) -ida_range.rangevec_base_t.qclear (method) -ida_range.rangevec_base_t.reserve (method) -ida_range.rangevec_base_t.resize (method) -ida_range.rangevec_base_t.size (method) -ida_range.rangevec_base_t.swap (method) -ida_range.rangevec_base_t.truncate (method) -ida_range.rangevec_t (class) -ida_range.rangevec_t.__init__ (method) -ida_registry (module) -ida_registry.ROOT_KEY_NAME (variable) -ida_registry.reg_binary (variable) -ida_registry.reg_data_type (function) -ida_registry.reg_delete (function) -ida_registry.reg_delete_subkey (function) -ida_registry.reg_delete_tree (function) -ida_registry.reg_dword (variable) -ida_registry.reg_exists (function) -ida_registry.reg_flush (function) -ida_registry.reg_load (function) -ida_registry.reg_read_binary (function) -ida_registry.reg_read_bool (function) -ida_registry.reg_read_int (function) -ida_registry.reg_read_string (function) -ida_registry.reg_read_strlist (function) -ida_registry.reg_subkey_exists (function) -ida_registry.reg_subkey_subkeys (function) -ida_registry.reg_subkey_values (function) -ida_registry.reg_sz (variable) -ida_registry.reg_unknown (variable) -ida_registry.reg_update_filestrlist (function) -ida_registry.reg_update_strlist (function) -ida_registry.reg_write_binary (function) -ida_registry.reg_write_bool (function) -ida_registry.reg_write_int (function) -ida_registry.reg_write_string (function) -ida_registry.set_registry_root (function) -ida_regfinder (module) -ida_regfinder.find_nearest_rvi (function) -ida_regfinder.find_reg_value (function) -ida_regfinder.find_reg_value_info (function) -ida_regfinder.find_sp_value (function) -ida_regfinder.invalidate_regfinder_cache (function) -ida_regfinder.reg_value_def_t (class) -ida_regfinder.reg_value_def_t.LIKE_GOT (variable) -ida_regfinder.reg_value_def_t.NOVAL (variable) -ida_regfinder.reg_value_def_t.PC_BASED (variable) -ida_regfinder.reg_value_def_t.SHORT_INSN (variable) -ida_regfinder.reg_value_def_t.SPVAL (variable) -ida_regfinder.reg_value_def_t.UVAL (variable) -ida_regfinder.reg_value_def_t.__eq__ (method) -ida_regfinder.reg_value_def_t.__init__ (method) -ida_regfinder.reg_value_def_t.__lt__ (method) -ida_regfinder.reg_value_def_t.def_ea (variable) -ida_regfinder.reg_value_def_t.def_itype (variable) -ida_regfinder.reg_value_def_t.dstr (method) -ida_regfinder.reg_value_def_t.flags (variable) -ida_regfinder.reg_value_def_t.is_like_got (method) -ida_regfinder.reg_value_def_t.is_pc_based (method) -ida_regfinder.reg_value_def_t.is_short_insn (method) -ida_regfinder.reg_value_def_t.val (variable) -ida_regfinder.reg_value_info_t (class) -ida_regfinder.reg_value_info_t.CONTAINED (variable) -ida_regfinder.reg_value_info_t.CONTAINS (variable) -ida_regfinder.reg_value_info_t.EQUAL (variable) -ida_regfinder.reg_value_info_t.NOT_COMPARABLE (variable) -ida_regfinder.reg_value_info_t.__getitem__ (method) -ida_regfinder.reg_value_info_t.__init__ (method) -ida_regfinder.reg_value_info_t.__len__ (method) -ida_regfinder.reg_value_info_t.__str__ (method) -ida_regfinder.reg_value_info_t.aborted (method) -ida_regfinder.reg_value_info_t.add (method) -ida_regfinder.reg_value_info_t.add_num (method) -ida_regfinder.reg_value_info_t.band (method) -ida_regfinder.reg_value_info_t.bandnot (method) -ida_regfinder.reg_value_info_t.bnot (method) -ida_regfinder.reg_value_info_t.bor (method) -ida_regfinder.reg_value_info_t.bxor (method) -ida_regfinder.reg_value_info_t.clear (method) -ida_regfinder.reg_value_info_t.empty (method) -ida_regfinder.reg_value_info_t.extend (method) -ida_regfinder.reg_value_info_t.get_def_ea (method) -ida_regfinder.reg_value_info_t.get_def_itype (method) -ida_regfinder.reg_value_info_t.get_num (method) -ida_regfinder.reg_value_info_t.get_spd (method) -ida_regfinder.reg_value_info_t.have_all_vals_flag (method) -ida_regfinder.reg_value_info_t.is_all_vals_like_got (method) -ida_regfinder.reg_value_info_t.is_all_vals_pc_based (method) -ida_regfinder.reg_value_info_t.is_badinsn (method) -ida_regfinder.reg_value_info_t.is_dead_end (method) -ida_regfinder.reg_value_info_t.is_known (method) -ida_regfinder.reg_value_info_t.is_num (method) -ida_regfinder.reg_value_info_t.is_spd (method) -ida_regfinder.reg_value_info_t.is_special (method) -ida_regfinder.reg_value_info_t.is_unkfunc (method) -ida_regfinder.reg_value_info_t.is_unkinsn (method) -ida_regfinder.reg_value_info_t.is_unkloop (method) -ida_regfinder.reg_value_info_t.is_unkmult (method) -ida_regfinder.reg_value_info_t.is_unknown (method) -ida_regfinder.reg_value_info_t.is_value_unique (method) -ida_regfinder.reg_value_info_t.make_aborted (method) -ida_regfinder.reg_value_info_t.make_badinsn (method) -ida_regfinder.reg_value_info_t.make_dead_end (method) -ida_regfinder.reg_value_info_t.make_initial_sp (method) -ida_regfinder.reg_value_info_t.make_num (method) -ida_regfinder.reg_value_info_t.make_unkfunc (method) -ida_regfinder.reg_value_info_t.make_unkinsn (method) -ida_regfinder.reg_value_info_t.make_unkloop (method) -ida_regfinder.reg_value_info_t.make_unkmult (method) -ida_regfinder.reg_value_info_t.neg (method) -ida_regfinder.reg_value_info_t.set_aborted (method) -ida_regfinder.reg_value_info_t.set_badinsn (method) -ida_regfinder.reg_value_info_t.set_dead_end (method) -ida_regfinder.reg_value_info_t.set_num (method) -ida_regfinder.reg_value_info_t.set_unkfunc (method) -ida_regfinder.reg_value_info_t.set_unkinsn (method) -ida_regfinder.reg_value_info_t.set_unkloop (method) -ida_regfinder.reg_value_info_t.set_unkmult (method) -ida_regfinder.reg_value_info_t.shift_left (method) -ida_regfinder.reg_value_info_t.shift_right (method) -ida_regfinder.reg_value_info_t.sll (method) -ida_regfinder.reg_value_info_t.slr (method) -ida_regfinder.reg_value_info_t.sub (method) -ida_regfinder.reg_value_info_t.trunc_uval (method) -ida_regfinder.reg_value_info_t.vals_union (method) -ida_regfinder.reg_value_info_t_make_aborted (function) -ida_regfinder.reg_value_info_t_make_badinsn (function) -ida_regfinder.reg_value_info_t_make_dead_end (function) -ida_regfinder.reg_value_info_t_make_initial_sp (function) -ida_regfinder.reg_value_info_t_make_num (function) -ida_regfinder.reg_value_info_t_make_unkfunc (function) -ida_regfinder.reg_value_info_t_make_unkinsn (function) -ida_regfinder.reg_value_info_t_make_unkloop (function) -ida_regfinder.reg_value_info_t_make_unkmult (function) -ida_search (module) -ida_search.SEARCH_BRK (variable) -ida_search.SEARCH_CASE (variable) -ida_search.SEARCH_DOWN (variable) -ida_search.SEARCH_IDENT (variable) -ida_search.SEARCH_NEXT (variable) -ida_search.SEARCH_NOBRK (variable) -ida_search.SEARCH_NOSHOW (variable) -ida_search.SEARCH_REGEX (variable) -ida_search.SEARCH_UP (variable) -ida_search.SEARCH_USESEL (variable) -ida_search.find_binary (function) -ida_search.find_code (function) -ida_search.find_data (function) -ida_search.find_defined (function) -ida_search.find_error (function) -ida_search.find_imm (function) -ida_search.find_not_func (function) -ida_search.find_notype (function) -ida_search.find_reg_access (function) -ida_search.find_suspop (function) -ida_search.find_text (function) -ida_search.find_unknown (function) -ida_search.search_down (function) -ida_segment (module) -ida_segment.ADDSEG_FILLGAP (variable) -ida_segment.ADDSEG_IDBENC (variable) -ida_segment.ADDSEG_NOAA (variable) -ida_segment.ADDSEG_NOSREG (variable) -ida_segment.ADDSEG_NOTRUNC (variable) -ida_segment.ADDSEG_OR_DIE (variable) -ida_segment.ADDSEG_QUIET (variable) -ida_segment.ADDSEG_SPARSE (variable) -ida_segment.CSS_BREAK (variable) -ida_segment.CSS_NODBG (variable) -ida_segment.CSS_NOMEM (variable) -ida_segment.CSS_NORANGE (variable) -ida_segment.CSS_OK (variable) -ida_segment.MAX_GROUPS (variable) -ida_segment.MAX_SEGM_TRANSLATIONS (variable) -ida_segment.MOVE_SEGM_CHUNK (variable) -ida_segment.MOVE_SEGM_DEBUG (variable) -ida_segment.MOVE_SEGM_IDP (variable) -ida_segment.MOVE_SEGM_INVAL (variable) -ida_segment.MOVE_SEGM_LOADER (variable) -ida_segment.MOVE_SEGM_MAPPING (variable) -ida_segment.MOVE_SEGM_ODD (variable) -ida_segment.MOVE_SEGM_OK (variable) -ida_segment.MOVE_SEGM_ORPHAN (variable) -ida_segment.MOVE_SEGM_PARAM (variable) -ida_segment.MOVE_SEGM_ROOM (variable) -ida_segment.MOVE_SEGM_SOURCEFILES (variable) -ida_segment.MSF_FIXONCE (variable) -ida_segment.MSF_LDKEEP (variable) -ida_segment.MSF_NETNODES (variable) -ida_segment.MSF_NOFIX (variable) -ida_segment.MSF_PRIORITY (variable) -ida_segment.MSF_SILENT (variable) -ida_segment.SEGMOD_KEEP (variable) -ida_segment.SEGMOD_KEEP0 (variable) -ida_segment.SEGMOD_KEEPSEL (variable) -ida_segment.SEGMOD_KILL (variable) -ida_segment.SEGMOD_NOMOVE (variable) -ida_segment.SEGMOD_SILENT (variable) -ida_segment.SEGMOD_SPARSE (variable) -ida_segment.SEGPERM_EXEC (variable) -ida_segment.SEGPERM_READ (variable) -ida_segment.SEGPERM_WRITE (variable) -ida_segment.SEG_ABSSYM (variable) -ida_segment.SEG_BSS (variable) -ida_segment.SEG_CODE (variable) -ida_segment.SEG_COMM (variable) -ida_segment.SEG_DATA (variable) -ida_segment.SEG_GRP (variable) -ida_segment.SEG_IMEM (variable) -ida_segment.SEG_NORM (variable) -ida_segment.SEG_NULL (variable) -ida_segment.SEG_UNDF (variable) -ida_segment.SEG_XTRN (variable) -ida_segment.SFL_COMORG (variable) -ida_segment.SFL_DEBUG (variable) -ida_segment.SFL_HEADER (variable) -ida_segment.SFL_HIDDEN (variable) -ida_segment.SFL_HIDETYPE (variable) -ida_segment.SFL_LOADER (variable) -ida_segment.SFL_OBOK (variable) -ida_segment.SNAP_ALL_SEG (variable) -ida_segment.SNAP_CUR_SEG (variable) -ida_segment.SNAP_LOAD_SEG (variable) -ida_segment.SREG_NUM (variable) -ida_segment.add_segm (function) -ida_segment.add_segm_ex (function) -ida_segment.add_segment_translation (function) -ida_segment.allocate_selector (function) -ida_segment.change_segment_status (function) -ida_segment.del_segm (function) -ida_segment.del_segment_translations (function) -ida_segment.del_selector (function) -ida_segment.find_free_selector (function) -ida_segment.find_selector (function) -ida_segment.get_defsr (function) -ida_segment.get_first_seg (function) -ida_segment.get_group_selector (function) -ida_segment.get_last_seg (function) -ida_segment.get_next_seg (function) -ida_segment.get_prev_seg (function) -ida_segment.get_segm_base (function) -ida_segment.get_segm_by_name (function) -ida_segment.get_segm_by_sel (function) -ida_segment.get_segm_class (function) -ida_segment.get_segm_name (function) -ida_segment.get_segm_num (function) -ida_segment.get_segm_para (function) -ida_segment.get_segm_qty (function) -ida_segment.get_segment_alignment (function) -ida_segment.get_segment_cmt (function) -ida_segment.get_segment_combination (function) -ida_segment.get_segment_translations (function) -ida_segment.get_selector_qty (function) -ida_segment.get_visible_segm_name (function) -ida_segment.getn_selector (function) -ida_segment.getnseg (function) -ida_segment.getseg (function) -ida_segment.is_finally_visible_segm (function) -ida_segment.is_miniidb (function) -ida_segment.is_segm_locked (function) -ida_segment.is_spec_ea (function) -ida_segment.is_spec_segm (function) -ida_segment.is_visible_segm (function) -ida_segment.lock_segm (function) -ida_segment.lock_segment (class) -ida_segment.lock_segment.__init__ (method) -ida_segment.move_segm (function) -ida_segment.move_segm_start (function) -ida_segment.move_segm_strerror (function) -ida_segment.rebase_program (function) -ida_segment.saAbs (variable) -ida_segment.saGroup (variable) -ida_segment.saRel1024Bytes (variable) -ida_segment.saRel128Bytes (variable) -ida_segment.saRel2048Bytes (variable) -ida_segment.saRel32Bytes (variable) -ida_segment.saRel4K (variable) -ida_segment.saRel512Bytes (variable) -ida_segment.saRel64Bytes (variable) -ida_segment.saRelByte (variable) -ida_segment.saRelDble (variable) -ida_segment.saRelPage (variable) -ida_segment.saRelPara (variable) -ida_segment.saRelQword (variable) -ida_segment.saRelWord (variable) -ida_segment.scCommon (variable) -ida_segment.scGroup (variable) -ida_segment.scPriv (variable) -ida_segment.scPub (variable) -ida_segment.scPub2 (variable) -ida_segment.scPub3 (variable) -ida_segment.scStack (variable) -ida_segment.segm_adjust_diff (function) -ida_segment.segm_adjust_ea (function) -ida_segment.segment_defsr_array (class) -ida_segment.segment_defsr_array.__getitem__ (method) -ida_segment.segment_defsr_array.__init__ (method) -ida_segment.segment_defsr_array.__len__ (method) -ida_segment.segment_defsr_array.__setitem__ (method) -ida_segment.segment_defsr_array._get_bytes (method) -ida_segment.segment_defsr_array._set_bytes (method) -ida_segment.segment_t (class) -ida_segment.segment_t.__getDefsr (method) -ida_segment.segment_t.__init__ (method) -ida_segment.segment_t.abits (method) -ida_segment.segment_t.abytes (method) -ida_segment.segment_t.align (variable) -ida_segment.segment_t.bitness (variable) -ida_segment.segment_t.clr_comorg (method) -ida_segment.segment_t.clr_ob_ok (method) -ida_segment.segment_t.color (variable) -ida_segment.segment_t.comb (variable) -ida_segment.segment_t.comorg (method) -ida_segment.segment_t.defsr (variable) -ida_segment.segment_t.flags (variable) -ida_segment.segment_t.is_16bit (method) -ida_segment.segment_t.is_32bit (method) -ida_segment.segment_t.is_64bit (method) -ida_segment.segment_t.is_header_segm (method) -ida_segment.segment_t.is_hidden_segtype (method) -ida_segment.segment_t.is_loader_segm (method) -ida_segment.segment_t.is_visible_segm (method) -ida_segment.segment_t.name (variable) -ida_segment.segment_t.ob_ok (method) -ida_segment.segment_t.orgbase (variable) -ida_segment.segment_t.perm (variable) -ida_segment.segment_t.sclass (variable) -ida_segment.segment_t.sel (variable) -ida_segment.segment_t.set_comorg (method) -ida_segment.segment_t.set_debugger_segm (method) -ida_segment.segment_t.set_header_segm (method) -ida_segment.segment_t.set_hidden_segtype (method) -ida_segment.segment_t.set_loader_segm (method) -ida_segment.segment_t.set_ob_ok (method) -ida_segment.segment_t.set_visible_segm (method) -ida_segment.segment_t.type (variable) -ida_segment.segment_t.update (method) -ida_segment.segtype (function) -ida_segment.sel2ea (function) -ida_segment.sel2para (function) -ida_segment.set_defsr (function) -ida_segment.set_group_selector (function) -ida_segment.set_segm_addressing (function) -ida_segment.set_segm_base (function) -ida_segment.set_segm_class (function) -ida_segment.set_segm_end (function) -ida_segment.set_segm_name (function) -ida_segment.set_segm_start (function) -ida_segment.set_segment_cmt (function) -ida_segment.set_segment_translations (function) -ida_segment.set_selector (function) -ida_segment.set_visible_segm (function) -ida_segment.setup_selector (function) -ida_segment.std_out_segm_footer (function) -ida_segment.take_memory_snapshot (function) -ida_segment.update_segm (function) -ida_segregs (module) -ida_segregs.SR_auto (variable) -ida_segregs.SR_autostart (variable) -ida_segregs.SR_inherit (variable) -ida_segregs.SR_user (variable) -ida_segregs.copy_sreg_ranges (function) -ida_segregs.del_sreg_range (function) -ida_segregs.get_prev_sreg_range (function) -ida_segregs.get_sreg (function) -ida_segregs.get_sreg_range (function) -ida_segregs.get_sreg_range_num (function) -ida_segregs.get_sreg_ranges_qty (function) -ida_segregs.getn_sreg_range (function) -ida_segregs.set_default_dataseg (function) -ida_segregs.set_default_sreg_value (function) -ida_segregs.set_sreg_at_next_code (function) -ida_segregs.split_sreg_range (function) -ida_segregs.sreg_range_t (class) -ida_segregs.sreg_range_t.__init__ (method) -ida_segregs.sreg_range_t.tag (variable) -ida_segregs.sreg_range_t.val (variable) -ida_srclang (module) -ida_srclang.SRCLANG_C (variable) -ida_srclang.SRCLANG_CPP (variable) -ida_srclang.SRCLANG_GO (variable) -ida_srclang.SRCLANG_OBJC (variable) -ida_srclang.SRCLANG_SWIFT (variable) -ida_srclang.parse_decls_for_srclang (function) -ida_srclang.parse_decls_with_parser (function) -ida_srclang.select_parser_by_name (function) -ida_srclang.select_parser_by_srclang (function) -ida_srclang.set_parser_argv (function) -ida_strlist (module) -ida_strlist.build_strlist (function) -ida_strlist.clear_strlist (function) -ida_strlist.get_strlist_item (function) -ida_strlist.get_strlist_options (function) -ida_strlist.get_strlist_qty (function) -ida_strlist.string_info_t (class) -ida_strlist.string_info_t.__init__ (method) -ida_strlist.string_info_t.__lt__ (method) -ida_strlist.strwinsetup_t (class) -ida_strlist.strwinsetup_t.__init__ (method) -ida_strlist.strwinsetup_t._get_strtypes (method) -ida_strlist.strwinsetup_t._set_strtypes (method) -ida_struct (module) -ida_struct.MF_BASECLASS (variable) -ida_struct.MF_BYTIL (variable) -ida_struct.MF_DTOR (variable) -ida_struct.MF_DUPNAME (variable) -ida_struct.MF_HASTI (variable) -ida_struct.MF_HASUNI (variable) -ida_struct.MF_OK (variable) -ida_struct.MF_UNIMEM (variable) -ida_struct.SET_MEMTI_BYTIL (variable) -ida_struct.SET_MEMTI_COMPATIBLE (variable) -ida_struct.SET_MEMTI_FUNCARG (variable) -ida_struct.SET_MEMTI_MAY_DESTROY (variable) -ida_struct.SET_MEMTI_USERTI (variable) -ida_struct.SF_ALIGN (variable) -ida_struct.SF_FRAME (variable) -ida_struct.SF_GHOST (variable) -ida_struct.SF_HASUNI (variable) -ida_struct.SF_HIDDEN (variable) -ida_struct.SF_NOLIST (variable) -ida_struct.SF_TYPLIB (variable) -ida_struct.SF_UNION (variable) -ida_struct.SF_VAR (variable) -ida_struct.SMT_ARRAY (variable) -ida_struct.SMT_BADARG (variable) -ida_struct.SMT_FAILED (variable) -ida_struct.SMT_KEEP (variable) -ida_struct.SMT_NOCOMPAT (variable) -ida_struct.SMT_OVERLAP (variable) -ida_struct.SMT_SIZE (variable) -ida_struct.SMT_WORSE (variable) -ida_struct.STRNFL_REGEX (variable) -ida_struct.STRUC_ERROR_MEMBER_LTUDT (variable) -ida_struct.STRUC_ERROR_MEMBER_NAME (variable) -ida_struct.STRUC_ERROR_MEMBER_NESTED (variable) -ida_struct.STRUC_ERROR_MEMBER_OFFSET (variable) -ida_struct.STRUC_ERROR_MEMBER_OK (variable) -ida_struct.STRUC_ERROR_MEMBER_SIZE (variable) -ida_struct.STRUC_ERROR_MEMBER_STRUCT (variable) -ida_struct.STRUC_ERROR_MEMBER_TINFO (variable) -ida_struct.STRUC_ERROR_MEMBER_UNIVAR (variable) -ida_struct.STRUC_ERROR_MEMBER_VARLAST (variable) -ida_struct.STRUC_SEPARATOR (variable) -ida_struct.add_struc (function) -ida_struct.add_struc_member (function) -ida_struct.del_member_tinfo (function) -ida_struct.del_struc (function) -ida_struct.del_struc_member (function) -ida_struct.del_struc_members (function) -ida_struct.dyn_member_ref_array (class) -ida_struct.dyn_member_ref_array.__getitem__ (method) -ida_struct.dyn_member_ref_array.__init__ (method) -ida_struct.dyn_member_ref_array.__len__ (method) -ida_struct.dyn_member_ref_array.__setitem__ (method) -ida_struct.expand_struc (function) -ida_struct.get_best_fit_member (function) -ida_struct.get_first_struc_idx (function) -ida_struct.get_innermost_member (function) -ida_struct.get_last_struc_idx (function) -ida_struct.get_max_offset (function) -ida_struct.get_member (function) -ida_struct.get_member_by_fullname (function) -ida_struct.get_member_by_id (function) -ida_struct.get_member_by_name (function) -ida_struct.get_member_cmt (function) -ida_struct.get_member_fullname (function) -ida_struct.get_member_id (function) -ida_struct.get_member_name (function) -ida_struct.get_member_size (function) -ida_struct.get_member_struc (function) -ida_struct.get_member_tinfo (function) -ida_struct.get_next_member_idx (function) -ida_struct.get_next_struc_idx (function) -ida_struct.get_or_guess_member_tinfo (function) -ida_struct.get_prev_member_idx (function) -ida_struct.get_prev_struc_idx (function) -ida_struct.get_sptr (function) -ida_struct.get_struc (function) -ida_struct.get_struc_by_idx (function) -ida_struct.get_struc_cmt (function) -ida_struct.get_struc_first_offset (function) -ida_struct.get_struc_id (function) -ida_struct.get_struc_idx (function) -ida_struct.get_struc_last_offset (function) -ida_struct.get_struc_name (function) -ida_struct.get_struc_next_offset (function) -ida_struct.get_struc_prev_offset (function) -ida_struct.get_struc_qty (function) -ida_struct.get_struc_size (function) -ida_struct.is_anonymous_member_name (function) -ida_struct.is_dummy_member_name (function) -ida_struct.is_member_id (function) -ida_struct.is_special_member (function) -ida_struct.is_union (function) -ida_struct.is_varmember (function) -ida_struct.is_varstr (function) -ida_struct.member_t (class) -ida_struct.member_t.__init__ (method) -ida_struct.member_t.by_til (method) -ida_struct.member_t.eoff (variable) -ida_struct.member_t.flag (variable) -ida_struct.member_t.get_size (method) -ida_struct.member_t.get_soff (method) -ida_struct.member_t.has_ti (method) -ida_struct.member_t.has_union (method) -ida_struct.member_t.id (variable) -ida_struct.member_t.is_baseclass (method) -ida_struct.member_t.is_destructor (method) -ida_struct.member_t.is_dupname (method) -ida_struct.member_t.props (variable) -ida_struct.member_t.soff (variable) -ida_struct.member_t.unimem (method) -ida_struct.retrieve_member_info (function) -ida_struct.save_struc (function) -ida_struct.set_member_cmt (function) -ida_struct.set_member_name (function) -ida_struct.set_member_tinfo (function) -ida_struct.set_member_type (function) -ida_struct.set_struc_align (function) -ida_struct.set_struc_cmt (function) -ida_struct.set_struc_hidden (function) -ida_struct.set_struc_idx (function) -ida_struct.set_struc_listed (function) -ida_struct.set_struc_name (function) -ida_struct.stroff_as_size (function) -ida_struct.struc_t (class) -ida_struct.struc_t.__get_members__ (method) -ida_struct.struc_t.__init__ (method) -ida_struct.struc_t.age (variable) -ida_struct.struc_t.from_til (method) -ida_struct.struc_t.get_alignment (method) -ida_struct.struc_t.get_last_member (method) -ida_struct.struc_t.get_member (method) -ida_struct.struc_t.has_union (method) -ida_struct.struc_t.id (variable) -ida_struct.struc_t.is_choosable (method) -ida_struct.struc_t.is_copyof (method) -ida_struct.struc_t.is_frame (method) -ida_struct.struc_t.is_ghost (method) -ida_struct.struc_t.is_hidden (method) -ida_struct.struc_t.is_mappedto (method) -ida_struct.struc_t.is_synced (method) -ida_struct.struc_t.is_union (method) -ida_struct.struc_t.is_varstr (method) -ida_struct.struc_t.like_union (method) -ida_struct.struc_t.members (variable) -ida_struct.struc_t.memqty (variable) -ida_struct.struc_t.ordinal (variable) -ida_struct.struc_t.props (variable) -ida_struct.struc_t.set_alignment (method) -ida_struct.struct_field_visitor_t (class) -ida_struct.struct_field_visitor_t.__disown__ (method) -ida_struct.struct_field_visitor_t.__init__ (method) -ida_struct.struct_field_visitor_t.visit_field (method) -ida_struct.udm_visitor_t (class) -ida_struct.udm_visitor_t.__disown__ (method) -ida_struct.udm_visitor_t.__init__ (method) -ida_struct.udm_visitor_t.visit_udm (method) -ida_struct.unsync_and_delete_struc (function) -ida_struct.visit_stroff_fields (function) -ida_struct.visit_stroff_udms (function) -ida_tryblks (module) -ida_tryblks.TBERR_EMPTY (variable) -ida_tryblks.TBERR_END (variable) -ida_tryblks.TBERR_INTERSECT (variable) -ida_tryblks.TBERR_KIND (variable) -ida_tryblks.TBERR_NO_CATCHES (variable) -ida_tryblks.TBERR_OK (variable) -ida_tryblks.TBERR_ORDER (variable) -ida_tryblks.TBERR_START (variable) -ida_tryblks.add_tryblk (function) -ida_tryblks.catch_t (class) -ida_tryblks.catch_t.__init__ (method) -ida_tryblks.catchvec_t (class) -ida_tryblks.catchvec_t.__eq__ (method) -ida_tryblks.catchvec_t.__getitem__ (method) -ida_tryblks.catchvec_t.__init__ (method) -ida_tryblks.catchvec_t.__len__ (method) -ida_tryblks.catchvec_t.__ne__ (method) -ida_tryblks.catchvec_t.__setitem__ (method) -ida_tryblks.catchvec_t._del (method) -ida_tryblks.catchvec_t.add_unique (method) -ida_tryblks.catchvec_t.at (method) -ida_tryblks.catchvec_t.begin (method) -ida_tryblks.catchvec_t.capacity (method) -ida_tryblks.catchvec_t.clear (method) -ida_tryblks.catchvec_t.empty (method) -ida_tryblks.catchvec_t.end (method) -ida_tryblks.catchvec_t.erase (method) -ida_tryblks.catchvec_t.extract (method) -ida_tryblks.catchvec_t.find (method) -ida_tryblks.catchvec_t.grow (method) -ida_tryblks.catchvec_t.has (method) -ida_tryblks.catchvec_t.inject (method) -ida_tryblks.catchvec_t.insert (method) -ida_tryblks.catchvec_t.pop_back (method) -ida_tryblks.catchvec_t.push_back (method) -ida_tryblks.catchvec_t.qclear (method) -ida_tryblks.catchvec_t.reserve (method) -ida_tryblks.catchvec_t.resize (method) -ida_tryblks.catchvec_t.size (method) -ida_tryblks.catchvec_t.swap (method) -ida_tryblks.catchvec_t.truncate (method) -ida_tryblks.del_tryblks (function) -ida_tryblks.find_syseh (function) -ida_tryblks.get_tryblks (function) -ida_tryblks.is_ea_tryblks (function) -ida_tryblks.seh_t (class) -ida_tryblks.seh_t.__init__ (method) -ida_tryblks.seh_t.clear (method) -ida_tryblks.try_handler_t (class) -ida_tryblks.try_handler_t.__init__ (method) -ida_tryblks.try_handler_t.clear (method) -ida_tryblks.tryblk_t (class) -ida_tryblks.tryblk_t.__init__ (method) -ida_tryblks.tryblk_t.clear (method) -ida_tryblks.tryblk_t.cpp (method) -ida_tryblks.tryblk_t.empty (method) -ida_tryblks.tryblk_t.get_kind (method) -ida_tryblks.tryblk_t.is_cpp (method) -ida_tryblks.tryblk_t.is_seh (method) -ida_tryblks.tryblk_t.seh (method) -ida_tryblks.tryblk_t.set_cpp (method) -ida_tryblks.tryblk_t.set_seh (method) -ida_tryblks.tryblks_t (class) -ida_tryblks.tryblks_t.__eq__ (method) -ida_tryblks.tryblks_t.__getitem__ (method) -ida_tryblks.tryblks_t.__init__ (method) -ida_tryblks.tryblks_t.__len__ (method) -ida_tryblks.tryblks_t.__ne__ (method) -ida_tryblks.tryblks_t.__setitem__ (method) -ida_tryblks.tryblks_t._del (method) -ida_tryblks.tryblks_t.add_unique (method) -ida_tryblks.tryblks_t.at (method) -ida_tryblks.tryblks_t.begin (method) -ida_tryblks.tryblks_t.capacity (method) -ida_tryblks.tryblks_t.clear (method) -ida_tryblks.tryblks_t.empty (method) -ida_tryblks.tryblks_t.end (method) -ida_tryblks.tryblks_t.erase (method) -ida_tryblks.tryblks_t.extract (method) -ida_tryblks.tryblks_t.find (method) -ida_tryblks.tryblks_t.grow (method) -ida_tryblks.tryblks_t.has (method) -ida_tryblks.tryblks_t.inject (method) -ida_tryblks.tryblks_t.insert (method) -ida_tryblks.tryblks_t.pop_back (method) -ida_tryblks.tryblks_t.push_back (method) -ida_tryblks.tryblks_t.qclear (method) -ida_tryblks.tryblks_t.reserve (method) -ida_tryblks.tryblks_t.resize (method) -ida_tryblks.tryblks_t.size (method) -ida_tryblks.tryblks_t.swap (method) -ida_tryblks.tryblks_t.truncate (method) -ida_typeinf (module) -ida_typeinf.ADDTIL_ABORTED (variable) -ida_typeinf.ADDTIL_COMP (variable) -ida_typeinf.ADDTIL_DEFAULT (variable) -ida_typeinf.ADDTIL_FAILED (variable) -ida_typeinf.ADDTIL_INCOMP (variable) -ida_typeinf.ADDTIL_OK (variable) -ida_typeinf.ADDTIL_SILENT (variable) -ida_typeinf.ALOC_CUSTOM (variable) -ida_typeinf.ALOC_DIST (variable) -ida_typeinf.ALOC_NONE (variable) -ida_typeinf.ALOC_REG1 (variable) -ida_typeinf.ALOC_REG2 (variable) -ida_typeinf.ALOC_RREL (variable) -ida_typeinf.ALOC_STACK (variable) -ida_typeinf.ALOC_STATIC (variable) -ida_typeinf.ARGREGS_BY_SLOTS (variable) -ida_typeinf.ARGREGS_FP_CONSUME_GP (variable) -ida_typeinf.ARGREGS_GP_ONLY (variable) -ida_typeinf.ARGREGS_INDEPENDENT (variable) -ida_typeinf.ARGREGS_MIPS_O32 (variable) -ida_typeinf.BADSIZE (variable) -ida_typeinf.BFA_FUNC_EXT_FORMAT (variable) -ida_typeinf.BFA_FUNC_MARKER (variable) -ida_typeinf.BFA_HIGH (variable) -ida_typeinf.BFA_NORET (variable) -ida_typeinf.BFA_PURE (variable) -ida_typeinf.BFA_STATIC (variable) -ida_typeinf.BFA_VIRTUAL (variable) -ida_typeinf.BTE_ALWAYS (variable) -ida_typeinf.BTE_BITMASK (variable) -ida_typeinf.BTE_CHAR (variable) -ida_typeinf.BTE_HEX (variable) -ida_typeinf.BTE_OUT_MASK (variable) -ida_typeinf.BTE_RESERVED (variable) -ida_typeinf.BTE_SDEC (variable) -ida_typeinf.BTE_SIZE_MASK (variable) -ida_typeinf.BTE_UDEC (variable) -ida_typeinf.BTF_BOOL (variable) -ida_typeinf.BTF_BYTE (variable) -ida_typeinf.BTF_CHAR (variable) -ida_typeinf.BTF_DOUBLE (variable) -ida_typeinf.BTF_ENUM (variable) -ida_typeinf.BTF_FLOAT (variable) -ida_typeinf.BTF_INT (variable) -ida_typeinf.BTF_INT128 (variable) -ida_typeinf.BTF_INT16 (variable) -ida_typeinf.BTF_INT32 (variable) -ida_typeinf.BTF_INT64 (variable) -ida_typeinf.BTF_INT8 (variable) -ida_typeinf.BTF_LDOUBLE (variable) -ida_typeinf.BTF_SINT (variable) -ida_typeinf.BTF_STRUCT (variable) -ida_typeinf.BTF_TBYTE (variable) -ida_typeinf.BTF_TYPEDEF (variable) -ida_typeinf.BTF_UCHAR (variable) -ida_typeinf.BTF_UINT (variable) -ida_typeinf.BTF_UINT128 (variable) -ida_typeinf.BTF_UINT16 (variable) -ida_typeinf.BTF_UINT32 (variable) -ida_typeinf.BTF_UINT64 (variable) -ida_typeinf.BTF_UINT8 (variable) -ida_typeinf.BTF_UNION (variable) -ida_typeinf.BTF_UNK (variable) -ida_typeinf.BTF_VOID (variable) -ida_typeinf.BTMT_ARRESERV (variable) -ida_typeinf.BTMT_BFLDI16 (variable) -ida_typeinf.BTMT_BFLDI32 (variable) -ida_typeinf.BTMT_BFLDI64 (variable) -ida_typeinf.BTMT_BFLDI8 (variable) -ida_typeinf.BTMT_BOOL1 (variable) -ida_typeinf.BTMT_BOOL2 (variable) -ida_typeinf.BTMT_BOOL4 (variable) -ida_typeinf.BTMT_BOOL8 (variable) -ida_typeinf.BTMT_CHAR (variable) -ida_typeinf.BTMT_CLOSURE (variable) -ida_typeinf.BTMT_DEFBOOL (variable) -ida_typeinf.BTMT_DEFCALL (variable) -ida_typeinf.BTMT_DEFPTR (variable) -ida_typeinf.BTMT_DOUBLE (variable) -ida_typeinf.BTMT_FAR (variable) -ida_typeinf.BTMT_FARCALL (variable) -ida_typeinf.BTMT_FLOAT (variable) -ida_typeinf.BTMT_INTCALL (variable) -ida_typeinf.BTMT_LNGDBL (variable) -ida_typeinf.BTMT_NEAR (variable) -ida_typeinf.BTMT_NEARCALL (variable) -ida_typeinf.BTMT_NONBASED (variable) -ida_typeinf.BTMT_SIGNED (variable) -ida_typeinf.BTMT_SIZE0 (variable) -ida_typeinf.BTMT_SIZE12 (variable) -ida_typeinf.BTMT_SIZE128 (variable) -ida_typeinf.BTMT_SIZE48 (variable) -ida_typeinf.BTMT_SPECFLT (variable) -ida_typeinf.BTMT_TYPEDEF (variable) -ida_typeinf.BTMT_UNKSIGN (variable) -ida_typeinf.BTMT_USIGNED (variable) -ida_typeinf.BTM_CONST (variable) -ida_typeinf.BTM_VOLATILE (variable) -ida_typeinf.BT_ARRAY (variable) -ida_typeinf.BT_BITFIELD (variable) -ida_typeinf.BT_BOOL (variable) -ida_typeinf.BT_COMPLEX (variable) -ida_typeinf.BT_FLOAT (variable) -ida_typeinf.BT_FUNC (variable) -ida_typeinf.BT_INT (variable) -ida_typeinf.BT_INT128 (variable) -ida_typeinf.BT_INT16 (variable) -ida_typeinf.BT_INT32 (variable) -ida_typeinf.BT_INT64 (variable) -ida_typeinf.BT_INT8 (variable) -ida_typeinf.BT_PTR (variable) -ida_typeinf.BT_RESERVED (variable) -ida_typeinf.BT_SEGREG (variable) -ida_typeinf.BT_UNK (variable) -ida_typeinf.BT_UNKNOWN (variable) -ida_typeinf.BT_UNK_BYTE (variable) -ida_typeinf.BT_UNK_DWORD (variable) -ida_typeinf.BT_UNK_OWORD (variable) -ida_typeinf.BT_UNK_QWORD (variable) -ida_typeinf.BT_UNK_WORD (variable) -ida_typeinf.BT_VOID (variable) -ida_typeinf.CC_ALLOW_ARGPERM (variable) -ida_typeinf.CC_ALLOW_REGHOLES (variable) -ida_typeinf.CC_CDECL_OK (variable) -ida_typeinf.CC_GOLANG_OK (variable) -ida_typeinf.CC_HAS_ELLIPSIS (variable) -ida_typeinf.CM_CC_CDECL (variable) -ida_typeinf.CM_CC_ELLIPSIS (variable) -ida_typeinf.CM_CC_FASTCALL (variable) -ida_typeinf.CM_CC_GOLANG (variable) -ida_typeinf.CM_CC_INVALID (variable) -ida_typeinf.CM_CC_PASCAL (variable) -ida_typeinf.CM_CC_SPECIALE (variable) -ida_typeinf.CM_CC_SPECIALP (variable) -ida_typeinf.CM_CC_SPOILED (variable) -ida_typeinf.CM_CC_STDCALL (variable) -ida_typeinf.CM_CC_SWIFT (variable) -ida_typeinf.CM_CC_THISCALL (variable) -ida_typeinf.CM_CC_UNKNOWN (variable) -ida_typeinf.CM_CC_VOIDARG (variable) -ida_typeinf.CM_N16_F32 (variable) -ida_typeinf.CM_N32_F48 (variable) -ida_typeinf.CM_N64 (variable) -ida_typeinf.CM_N8_F16 (variable) -ida_typeinf.CM_UNKNOWN (variable) -ida_typeinf.COMP_BC (variable) -ida_typeinf.COMP_BP (variable) -ida_typeinf.COMP_GNU (variable) -ida_typeinf.COMP_MS (variable) -ida_typeinf.COMP_UNK (variable) -ida_typeinf.COMP_UNSURE (variable) -ida_typeinf.COMP_VISAGE (variable) -ida_typeinf.COMP_WATCOM (variable) -ida_typeinf.DEFMASK64 (variable) -ida_typeinf.ETF_ASMENUM (variable) -ida_typeinf.ETF_AUTONAME (variable) -ida_typeinf.ETF_COMPATIBLE (variable) -ida_typeinf.ETF_FORCENAME (variable) -ida_typeinf.ETF_FUNCARG (variable) -ida_typeinf.ETF_MAY_DESTROY (variable) -ida_typeinf.ETF_NO_IDBSYNC (variable) -ida_typeinf.ETF_NO_LAYOUT (variable) -ida_typeinf.ETF_NO_SAVE (variable) -ida_typeinf.FAH_BYTE (variable) -ida_typeinf.FAI_ARRAY (variable) -ida_typeinf.FAI_HIDDEN (variable) -ida_typeinf.FAI_RETPTR (variable) -ida_typeinf.FAI_STRUCT (variable) -ida_typeinf.FAI_UNUSED (variable) -ida_typeinf.FIRST_NONTRIVIAL_TYPID (variable) -ida_typeinf.FRB_CHAR (variable) -ida_typeinf.FRB_CUSTOM (variable) -ida_typeinf.FRB_ENUM (variable) -ida_typeinf.FRB_FLOAT (variable) -ida_typeinf.FRB_INVBITS (variable) -ida_typeinf.FRB_INVSIGN (variable) -ida_typeinf.FRB_LZERO (variable) -ida_typeinf.FRB_MASK (variable) -ida_typeinf.FRB_NUMB (variable) -ida_typeinf.FRB_NUMD (variable) -ida_typeinf.FRB_NUMH (variable) -ida_typeinf.FRB_NUMO (variable) -ida_typeinf.FRB_OFFSET (variable) -ida_typeinf.FRB_SEG (variable) -ida_typeinf.FRB_SIGNED (variable) -ida_typeinf.FRB_STRLIT (variable) -ida_typeinf.FRB_STROFF (variable) -ida_typeinf.FRB_TABFORM (variable) -ida_typeinf.FRB_UNK (variable) -ida_typeinf.FTI_ALL (variable) -ida_typeinf.FTI_ARGLOCS (variable) -ida_typeinf.FTI_CALLTYPE (variable) -ida_typeinf.FTI_CONST (variable) -ida_typeinf.FTI_CTOR (variable) -ida_typeinf.FTI_DEFCALL (variable) -ida_typeinf.FTI_DTOR (variable) -ida_typeinf.FTI_EXPLOCS (variable) -ida_typeinf.FTI_FARCALL (variable) -ida_typeinf.FTI_HIGH (variable) -ida_typeinf.FTI_INTCALL (variable) -ida_typeinf.FTI_NEARCALL (variable) -ida_typeinf.FTI_NORET (variable) -ida_typeinf.FTI_PURE (variable) -ida_typeinf.FTI_SPOILED (variable) -ida_typeinf.FTI_STATIC (variable) -ida_typeinf.FTI_VIRTUAL (variable) -ida_typeinf.GTD_CALC_ARGLOCS (variable) -ida_typeinf.GTD_CALC_LAYOUT (variable) -ida_typeinf.GTD_DEL_BITFLDS (variable) -ida_typeinf.GTD_NO_ARGLOCS (variable) -ida_typeinf.GTD_NO_LAYOUT (variable) -ida_typeinf.GTS_BASECLASS (variable) -ida_typeinf.GTS_NESTED (variable) -ida_typeinf.GUESS_FUNC_FAILED (variable) -ida_typeinf.GUESS_FUNC_OK (variable) -ida_typeinf.GUESS_FUNC_TRIVIAL (variable) -ida_typeinf.HTI_CPP (variable) -ida_typeinf.HTI_DCL (variable) -ida_typeinf.HTI_FIL (variable) -ida_typeinf.HTI_HIGH (variable) -ida_typeinf.HTI_LOWER (variable) -ida_typeinf.HTI_MAC (variable) -ida_typeinf.HTI_NDC (variable) -ida_typeinf.HTI_NER (variable) -ida_typeinf.HTI_NOBASE (variable) -ida_typeinf.HTI_NWR (variable) -ida_typeinf.HTI_PAK (variable) -ida_typeinf.HTI_PAK1 (variable) -ida_typeinf.HTI_PAK16 (variable) -ida_typeinf.HTI_PAK2 (variable) -ida_typeinf.HTI_PAK4 (variable) -ida_typeinf.HTI_PAK8 (variable) -ida_typeinf.HTI_PAKDEF (variable) -ida_typeinf.HTI_PAK_SHIFT (variable) -ida_typeinf.HTI_RAWARGS (variable) -ida_typeinf.HTI_RELAXED (variable) -ida_typeinf.HTI_TST (variable) -ida_typeinf.IMPTYPE_LOCAL (variable) -ida_typeinf.MAX_FUNC_ARGS (variable) -ida_typeinf.NTF_64BIT (variable) -ida_typeinf.NTF_CHKSYNC (variable) -ida_typeinf.NTF_COPY (variable) -ida_typeinf.NTF_FIXNAME (variable) -ida_typeinf.NTF_IDBENC (variable) -ida_typeinf.NTF_NOBASE (variable) -ida_typeinf.NTF_NOCUR (variable) -ida_typeinf.NTF_NO_NAMECHK (variable) -ida_typeinf.NTF_REPLACE (variable) -ida_typeinf.NTF_SYMM (variable) -ida_typeinf.NTF_SYMU (variable) -ida_typeinf.NTF_TYPE (variable) -ida_typeinf.NTF_UMANGLED (variable) -ida_typeinf.PDF_DEF_BASE (variable) -ida_typeinf.PDF_DEF_FWD (variable) -ida_typeinf.PDF_HEADER_CMT (variable) -ida_typeinf.PDF_INCL_DEPS (variable) -ida_typeinf.PIO_IGNORE_PTRS (variable) -ida_typeinf.PIO_NOATTR_FAIL (variable) -ida_typeinf.PRALOC_STKOFF (variable) -ida_typeinf.PRALOC_VERIFY (variable) -ida_typeinf.PRTYPE_1LINCMT (variable) -ida_typeinf.PRTYPE_1LINE (variable) -ida_typeinf.PRTYPE_COLORED (variable) -ida_typeinf.PRTYPE_CPP (variable) -ida_typeinf.PRTYPE_HEADER (variable) -ida_typeinf.PRTYPE_MAXSTR (variable) -ida_typeinf.PRTYPE_MULTI (variable) -ida_typeinf.PRTYPE_NOREGEX (variable) -ida_typeinf.PRTYPE_PRAGMA (variable) -ida_typeinf.PRTYPE_SEMI (variable) -ida_typeinf.PRTYPE_TYPE (variable) -ida_typeinf.PT_HIGH (variable) -ida_typeinf.PT_LOWER (variable) -ida_typeinf.PT_NDC (variable) -ida_typeinf.PT_PACKMASK (variable) -ida_typeinf.PT_RAWARGS (variable) -ida_typeinf.PT_RELAXED (variable) -ida_typeinf.PT_REPLACE (variable) -ida_typeinf.PT_SIL (variable) -ida_typeinf.PT_TYP (variable) -ida_typeinf.PT_VAR (variable) -ida_typeinf.RESERVED_BYTE (variable) -ida_typeinf.SC_AUTO (variable) -ida_typeinf.SC_EXT (variable) -ida_typeinf.SC_FRIEND (variable) -ida_typeinf.SC_REG (variable) -ida_typeinf.SC_STAT (variable) -ida_typeinf.SC_TYPE (variable) -ida_typeinf.SC_UNK (variable) -ida_typeinf.SC_VIRT (variable) -ida_typeinf.SETCOMP_BY_USER (variable) -ida_typeinf.SETCOMP_ONLY_ABI (variable) -ida_typeinf.SETCOMP_ONLY_ID (variable) -ida_typeinf.SETCOMP_OVERRIDE (variable) -ida_typeinf.STI_ACCHAR (variable) -ida_typeinf.STI_ACHAR (variable) -ida_typeinf.STI_ACUCHAR (variable) -ida_typeinf.STI_AEABI_LCMP (variable) -ida_typeinf.STI_AEABI_MEMCLR (variable) -ida_typeinf.STI_AEABI_MEMCPY (variable) -ida_typeinf.STI_AEABI_MEMSET (variable) -ida_typeinf.STI_AEABI_ULCMP (variable) -ida_typeinf.STI_AUCHAR (variable) -ida_typeinf.STI_COMPLEX128 (variable) -ida_typeinf.STI_COMPLEX64 (variable) -ida_typeinf.STI_DONT_USE (variable) -ida_typeinf.STI_FDELOP (variable) -ida_typeinf.STI_FPURGING (variable) -ida_typeinf.STI_MSGSEND (variable) -ida_typeinf.STI_PBYTE (variable) -ida_typeinf.STI_PCCHAR (variable) -ida_typeinf.STI_PCHAR (variable) -ida_typeinf.STI_PCUCHAR (variable) -ida_typeinf.STI_PCVOID (variable) -ida_typeinf.STI_PINT (variable) -ida_typeinf.STI_PPVOID (variable) -ida_typeinf.STI_PUCHAR (variable) -ida_typeinf.STI_PUINT (variable) -ida_typeinf.STI_PVOID (variable) -ida_typeinf.STI_RTC_CHECK_2 (variable) -ida_typeinf.STI_RTC_CHECK_4 (variable) -ida_typeinf.STI_RTC_CHECK_8 (variable) -ida_typeinf.STI_SIZE_T (variable) -ida_typeinf.STI_SSIZE_T (variable) -ida_typeinf.STRMEM_ANON (variable) -ida_typeinf.STRMEM_AUTO (variable) -ida_typeinf.STRMEM_CASTABLE_TO (variable) -ida_typeinf.STRMEM_INDEX (variable) -ida_typeinf.STRMEM_MAXS (variable) -ida_typeinf.STRMEM_MINS (variable) -ida_typeinf.STRMEM_NAME (variable) -ida_typeinf.STRMEM_OFFSET (variable) -ida_typeinf.STRMEM_SIZE (variable) -ida_typeinf.STRMEM_SKIP_EMPTY (variable) -ida_typeinf.STRMEM_TYPE (variable) -ida_typeinf.STRMEM_VFTABLE (variable) -ida_typeinf.SUDT_ALIGN (variable) -ida_typeinf.SUDT_CONST (variable) -ida_typeinf.SUDT_FAST (variable) -ida_typeinf.SUDT_GAPS (variable) -ida_typeinf.SUDT_SORT (variable) -ida_typeinf.SUDT_UNEX (variable) -ida_typeinf.SUDT_VOLATILE (variable) -ida_typeinf.TAFLD_METHOD (variable) -ida_typeinf.TAH_ALL (variable) -ida_typeinf.TAH_BYTE (variable) -ida_typeinf.TAH_HASATTRS (variable) -ida_typeinf.TA_FORMAT (variable) -ida_typeinf.TA_ORG_ARRDIM (variable) -ida_typeinf.TA_ORG_TYPEDEF (variable) -ida_typeinf.TA_VALUE_REPR (variable) -ida_typeinf.TCMP_ANYBASE (variable) -ida_typeinf.TCMP_AUTOCAST (variable) -ida_typeinf.TCMP_CALL (variable) -ida_typeinf.TCMP_DECL (variable) -ida_typeinf.TCMP_DELPTR (variable) -ida_typeinf.TCMP_EQUAL (variable) -ida_typeinf.TCMP_IGNMODS (variable) -ida_typeinf.TCMP_MANCAST (variable) -ida_typeinf.TCMP_SKIPTHIS (variable) -ida_typeinf.TERR_ALIEN_NAME (variable) -ida_typeinf.TERR_BAD_ARG (variable) -ida_typeinf.TERR_BAD_ARRAY (variable) -ida_typeinf.TERR_BAD_BASE (variable) -ida_typeinf.TERR_BAD_BF (variable) -ida_typeinf.TERR_BAD_BMASK (variable) -ida_typeinf.TERR_BAD_GAP (variable) -ida_typeinf.TERR_BAD_GROUPS (variable) -ida_typeinf.TERR_BAD_INDEX (variable) -ida_typeinf.TERR_BAD_LAYOUT (variable) -ida_typeinf.TERR_BAD_MSKVAL (variable) -ida_typeinf.TERR_BAD_NAME (variable) -ida_typeinf.TERR_BAD_OFFSET (variable) -ida_typeinf.TERR_BAD_REPR (variable) -ida_typeinf.TERR_BAD_SERIAL (variable) -ida_typeinf.TERR_BAD_SIZE (variable) -ida_typeinf.TERR_BAD_SUBTYPE (variable) -ida_typeinf.TERR_BAD_SYNC (variable) -ida_typeinf.TERR_BAD_TAH (variable) -ida_typeinf.TERR_BAD_TYPE (variable) -ida_typeinf.TERR_BAD_UNIVAR (variable) -ida_typeinf.TERR_BAD_VALUE (variable) -ida_typeinf.TERR_BAD_VARLAST (variable) -ida_typeinf.TERR_DUPNAME (variable) -ida_typeinf.TERR_ENUM_SIZE (variable) -ida_typeinf.TERR_GRP_NOEMPTY (variable) -ida_typeinf.TERR_NESTED (variable) -ida_typeinf.TERR_NOT_COMPAT (variable) -ida_typeinf.TERR_NOT_IMPL (variable) -ida_typeinf.TERR_NO_BMASK (variable) -ida_typeinf.TERR_OK (variable) -ida_typeinf.TERR_OVERLAP (variable) -ida_typeinf.TERR_SAVE_ERROR (variable) -ida_typeinf.TERR_SERIALIZE (variable) -ida_typeinf.TERR_STOCK (variable) -ida_typeinf.TERR_UNION_BF (variable) -ida_typeinf.TIL_ADD_ALREADY (variable) -ida_typeinf.TIL_ADD_FAILED (variable) -ida_typeinf.TIL_ADD_OK (variable) -ida_typeinf.TIL_ALI (variable) -ida_typeinf.TIL_ESI (variable) -ida_typeinf.TIL_MAC (variable) -ida_typeinf.TIL_MOD (variable) -ida_typeinf.TIL_ORD (variable) -ida_typeinf.TIL_SLD (variable) -ida_typeinf.TIL_STM (variable) -ida_typeinf.TIL_UNI (variable) -ida_typeinf.TIL_ZIP (variable) -ida_typeinf.TINFO_DEFINITE (variable) -ida_typeinf.TINFO_DELAYFUNC (variable) -ida_typeinf.TINFO_GUESSED (variable) -ida_typeinf.TINFO_STRICT (variable) -ida_typeinf.TVIS_CMT (variable) -ida_typeinf.TVIS_NAME (variable) -ida_typeinf.TVIS_RPTCMT (variable) -ida_typeinf.TVIS_TYPE (variable) -ida_typeinf.TVST_DEF (variable) -ida_typeinf.TVST_PRUNE (variable) -ida_typeinf.TYPE_BASE_MASK (variable) -ida_typeinf.TYPE_FLAGS_MASK (variable) -ida_typeinf.TYPE_FULL_MASK (variable) -ida_typeinf.TYPE_MODIF_MASK (variable) -ida_typeinf.TYPID_ISREF (variable) -ida_typeinf.TYPID_SHIFT (variable) -ida_typeinf.VALSTR_OPEN (variable) -ida_typeinf._BT_LAST_BASIC (variable) -ida_typeinf._wrap_cvar (class) -ida_typeinf._wrap_cvar.__getattr__ (method) -ida_typeinf._wrap_cvar.__setattr__ (method) -ida_typeinf.add_til (function) -ida_typeinf.alloc_type_ordinal (function) -ida_typeinf.alloc_type_ordinals (function) -ida_typeinf.aloc_visitor_t (class) -ida_typeinf.aloc_visitor_t.__disown__ (method) -ida_typeinf.aloc_visitor_t.__init__ (method) -ida_typeinf.aloc_visitor_t.visit_location (method) -ida_typeinf.append_abi_opts (function) -ida_typeinf.append_argloc (function) -ida_typeinf.append_tinfo_covered (function) -ida_typeinf.apply_callee_tinfo (function) -ida_typeinf.apply_cdecl (function) -ida_typeinf.apply_named_type (function) -ida_typeinf.apply_once_tinfo_and_name (function) -ida_typeinf.apply_tinfo (function) -ida_typeinf.apply_tinfo_to_stkarg (function) -ida_typeinf.apply_type (function) -ida_typeinf.argloc_t (class) -ida_typeinf.argloc_t.__eq__ (method) -ida_typeinf.argloc_t.__ge__ (method) -ida_typeinf.argloc_t.__gt__ (method) -ida_typeinf.argloc_t.__init__ (method) -ida_typeinf.argloc_t.__le__ (method) -ida_typeinf.argloc_t.__lt__ (method) -ida_typeinf.argloc_t.__ne__ (method) -ida_typeinf.argloc_t._consume_rrel (method) -ida_typeinf.argloc_t._consume_scattered (method) -ida_typeinf.argloc_t._set_badloc (method) -ida_typeinf.argloc_t._set_biggest (method) -ida_typeinf.argloc_t._set_custom (method) -ida_typeinf.argloc_t._set_ea (method) -ida_typeinf.argloc_t._set_reg1 (method) -ida_typeinf.argloc_t._set_reg2 (method) -ida_typeinf.argloc_t._set_stkoff (method) -ida_typeinf.argloc_t.advance (method) -ida_typeinf.argloc_t.align_reg_high (method) -ida_typeinf.argloc_t.align_stkoff_high (method) -ida_typeinf.argloc_t.atype (method) -ida_typeinf.argloc_t.calc_offset (method) -ida_typeinf.argloc_t.compare (method) -ida_typeinf.argloc_t.consume_rrel (method) -ida_typeinf.argloc_t.consume_scattered (method) -ida_typeinf.argloc_t.get_biggest (method) -ida_typeinf.argloc_t.get_custom (method) -ida_typeinf.argloc_t.get_ea (method) -ida_typeinf.argloc_t.get_reginfo (method) -ida_typeinf.argloc_t.get_rrel (method) -ida_typeinf.argloc_t.has_reg (method) -ida_typeinf.argloc_t.has_stkoff (method) -ida_typeinf.argloc_t.in_stack (method) -ida_typeinf.argloc_t.is_badloc (method) -ida_typeinf.argloc_t.is_custom (method) -ida_typeinf.argloc_t.is_ea (method) -ida_typeinf.argloc_t.is_fragmented (method) -ida_typeinf.argloc_t.is_mixed_scattered (method) -ida_typeinf.argloc_t.is_reg (method) -ida_typeinf.argloc_t.is_reg1 (method) -ida_typeinf.argloc_t.is_reg2 (method) -ida_typeinf.argloc_t.is_rrel (method) -ida_typeinf.argloc_t.is_scattered (method) -ida_typeinf.argloc_t.is_stkoff (method) -ida_typeinf.argloc_t.reg1 (method) -ida_typeinf.argloc_t.reg2 (method) -ida_typeinf.argloc_t.regoff (method) -ida_typeinf.argloc_t.scattered (method) -ida_typeinf.argloc_t.set_badloc (method) -ida_typeinf.argloc_t.set_ea (method) -ida_typeinf.argloc_t.set_reg1 (method) -ida_typeinf.argloc_t.set_reg2 (method) -ida_typeinf.argloc_t.set_stkoff (method) -ida_typeinf.argloc_t.stkoff (method) -ida_typeinf.argloc_t.swap (method) -ida_typeinf.argpart_t (class) -ida_typeinf.argpart_t.__init__ (method) -ida_typeinf.argpart_t.__lt__ (method) -ida_typeinf.argpart_t.bad_offset (method) -ida_typeinf.argpart_t.bad_size (method) -ida_typeinf.argpart_t.off (variable) -ida_typeinf.argpart_t.size (variable) -ida_typeinf.argpart_t.swap (method) -ida_typeinf.argpartvec_t (class) -ida_typeinf.argpartvec_t.__eq__ (method) -ida_typeinf.argpartvec_t.__getitem__ (method) -ida_typeinf.argpartvec_t.__init__ (method) -ida_typeinf.argpartvec_t.__len__ (method) -ida_typeinf.argpartvec_t.__ne__ (method) -ida_typeinf.argpartvec_t.__setitem__ (method) -ida_typeinf.argpartvec_t._del (method) -ida_typeinf.argpartvec_t.add_unique (method) -ida_typeinf.argpartvec_t.at (method) -ida_typeinf.argpartvec_t.begin (method) -ida_typeinf.argpartvec_t.capacity (method) -ida_typeinf.argpartvec_t.clear (method) -ida_typeinf.argpartvec_t.empty (method) -ida_typeinf.argpartvec_t.end (method) -ida_typeinf.argpartvec_t.erase (method) -ida_typeinf.argpartvec_t.extract (method) -ida_typeinf.argpartvec_t.find (method) -ida_typeinf.argpartvec_t.grow (method) -ida_typeinf.argpartvec_t.has (method) -ida_typeinf.argpartvec_t.inject (method) -ida_typeinf.argpartvec_t.insert (method) -ida_typeinf.argpartvec_t.pop_back (method) -ida_typeinf.argpartvec_t.push_back (method) -ida_typeinf.argpartvec_t.qclear (method) -ida_typeinf.argpartvec_t.reserve (method) -ida_typeinf.argpartvec_t.resize (method) -ida_typeinf.argpartvec_t.size (method) -ida_typeinf.argpartvec_t.swap (method) -ida_typeinf.argpartvec_t.truncate (method) -ida_typeinf.argtinfo_helper_t (class) -ida_typeinf.argtinfo_helper_t.__disown__ (method) -ida_typeinf.argtinfo_helper_t.__init__ (method) -ida_typeinf.argtinfo_helper_t.has_delay_slot (method) -ida_typeinf.argtinfo_helper_t.is_stkarg_load (method) -ida_typeinf.argtinfo_helper_t.set_op_tinfo (method) -ida_typeinf.argtinfo_helper_t.use_arg_tinfos (method) -ida_typeinf.array_type_data_t (class) -ida_typeinf.array_type_data_t.__init__ (method) -ida_typeinf.array_type_data_t.base (variable) -ida_typeinf.array_type_data_t.elem_type (variable) -ida_typeinf.array_type_data_t.nelems (variable) -ida_typeinf.array_type_data_t.swap (method) -ida_typeinf.begin_type_updating (function) -ida_typeinf.bitfield_type_data_t (class) -ida_typeinf.bitfield_type_data_t.__eq__ (method) -ida_typeinf.bitfield_type_data_t.__ge__ (method) -ida_typeinf.bitfield_type_data_t.__gt__ (method) -ida_typeinf.bitfield_type_data_t.__init__ (method) -ida_typeinf.bitfield_type_data_t.__le__ (method) -ida_typeinf.bitfield_type_data_t.__lt__ (method) -ida_typeinf.bitfield_type_data_t.__ne__ (method) -ida_typeinf.bitfield_type_data_t.compare (method) -ida_typeinf.bitfield_type_data_t.is_unsigned (variable) -ida_typeinf.bitfield_type_data_t.is_valid_bitfield (method) -ida_typeinf.bitfield_type_data_t.nbytes (variable) -ida_typeinf.bitfield_type_data_t.swap (method) -ida_typeinf.bitfield_type_data_t.width (variable) -ida_typeinf.calc_c_cpp_name (function) -ida_typeinf.calc_number_of_children (function) -ida_typeinf.calc_tinfo_gaps (function) -ida_typeinf.calc_type_size (function) -ida_typeinf.callregs_t (class) -ida_typeinf.callregs_t.__init__ (method) -ida_typeinf.callregs_t.by_slots (method) -ida_typeinf.callregs_t.fpregs (variable) -ida_typeinf.callregs_t.gpregs (variable) -ida_typeinf.callregs_t.init_regs (method) -ida_typeinf.callregs_t.nregs (variable) -ida_typeinf.callregs_t.policy (variable) -ida_typeinf.callregs_t.regcount (method) -ida_typeinf.callregs_t.reginds (method) -ida_typeinf.callregs_t.reset (method) -ida_typeinf.callregs_t.set (method) -ida_typeinf.callregs_t.swap (method) -ida_typeinf.callregs_t_regcount (function) -ida_typeinf.choose_local_tinfo (function) -ida_typeinf.choose_local_tinfo_and_delta (function) -ida_typeinf.choose_named_type (function) -ida_typeinf.clear_tinfo_t (function) -ida_typeinf.compact_til (function) -ida_typeinf.compare_tinfo (function) -ida_typeinf.const_aloc_visitor_t (class) -ida_typeinf.const_aloc_visitor_t.__disown__ (method) -ida_typeinf.const_aloc_visitor_t.__init__ (method) -ida_typeinf.const_aloc_visitor_t.visit_location (method) -ida_typeinf.convert_pt_flags_to_hti (function) -ida_typeinf.copy_named_type (function) -ida_typeinf.copy_tinfo_t (function) -ida_typeinf.create_enum_type (function) -ida_typeinf.create_numbered_type_name (function) -ida_typeinf.create_tinfo (function) -ida_typeinf.create_tinfo2 (function) -ida_typeinf.custom_data_type_info_t (class) -ida_typeinf.custom_data_type_info_t.__init__ (method) -ida_typeinf.custom_data_type_info_t.dtid (variable) -ida_typeinf.custom_data_type_info_t.fid (variable) -ida_typeinf.default_compiler (function) -ida_typeinf.del_named_type (function) -ida_typeinf.del_numbered_type (function) -ida_typeinf.del_til (function) -ida_typeinf.del_tinfo_attr (function) -ida_typeinf.del_vftable_ea (function) -ida_typeinf.deref_ptr (function) -ida_typeinf.deserialize_tinfo (function) -ida_typeinf.dstr_tinfo (function) -ida_typeinf.dump_func_type_data (function) -ida_typeinf.edm_t (class) -ida_typeinf.edm_t.__eq__ (method) -ida_typeinf.edm_t.__init__ (method) -ida_typeinf.edm_t.__ne__ (method) -ida_typeinf.edm_t.get_tid (method) -ida_typeinf.edm_t.swap (method) -ida_typeinf.edmvec_t (class) -ida_typeinf.edmvec_t.__eq__ (method) -ida_typeinf.edmvec_t.__getitem__ (method) -ida_typeinf.edmvec_t.__init__ (method) -ida_typeinf.edmvec_t.__len__ (method) -ida_typeinf.edmvec_t.__ne__ (method) -ida_typeinf.edmvec_t.__setitem__ (method) -ida_typeinf.edmvec_t._del (method) -ida_typeinf.edmvec_t.add_unique (method) -ida_typeinf.edmvec_t.at (method) -ida_typeinf.edmvec_t.begin (method) -ida_typeinf.edmvec_t.capacity (method) -ida_typeinf.edmvec_t.clear (method) -ida_typeinf.edmvec_t.empty (method) -ida_typeinf.edmvec_t.end (method) -ida_typeinf.edmvec_t.erase (method) -ida_typeinf.edmvec_t.extract (method) -ida_typeinf.edmvec_t.find (method) -ida_typeinf.edmvec_t.grow (method) -ida_typeinf.edmvec_t.has (method) -ida_typeinf.edmvec_t.inject (method) -ida_typeinf.edmvec_t.insert (method) -ida_typeinf.edmvec_t.pop_back (method) -ida_typeinf.edmvec_t.push_back (method) -ida_typeinf.edmvec_t.qclear (method) -ida_typeinf.edmvec_t.reserve (method) -ida_typeinf.edmvec_t.resize (method) -ida_typeinf.edmvec_t.size (method) -ida_typeinf.edmvec_t.swap (method) -ida_typeinf.edmvec_t.truncate (method) -ida_typeinf.enable_numbered_types (function) -ida_typeinf.end_type_updating (function) -ida_typeinf.enum_type_data_t (class) -ida_typeinf.enum_type_data_t.__init__ (method) -ida_typeinf.enum_type_data_t.add_constant (method) -ida_typeinf.enum_type_data_t.bte (variable) -ida_typeinf.enum_type_data_t.calc_mask (method) -ida_typeinf.enum_type_data_t.calc_nbytes (method) -ida_typeinf.enum_type_data_t.find_member (method) -ida_typeinf.enum_type_data_t.get_constant_group (method) -ida_typeinf.enum_type_data_t.get_enum_radix (method) -ida_typeinf.enum_type_data_t.group_sizes (variable) -ida_typeinf.enum_type_data_t.has_lzero (method) -ida_typeinf.enum_type_data_t.is_bf (method) -ida_typeinf.enum_type_data_t.is_bin (method) -ida_typeinf.enum_type_data_t.is_char (method) -ida_typeinf.enum_type_data_t.is_dec (method) -ida_typeinf.enum_type_data_t.is_group_mask_at (method) -ida_typeinf.enum_type_data_t.is_hex (method) -ida_typeinf.enum_type_data_t.is_number_signed (method) -ida_typeinf.enum_type_data_t.is_oct (method) -ida_typeinf.enum_type_data_t.is_sbin (method) -ida_typeinf.enum_type_data_t.is_shex (method) -ida_typeinf.enum_type_data_t.is_soct (method) -ida_typeinf.enum_type_data_t.is_udec (method) -ida_typeinf.enum_type_data_t.is_valid_group_sizes (method) -ida_typeinf.enum_type_data_t.set_enum_radix (method) -ida_typeinf.enum_type_data_t.set_lzero (method) -ida_typeinf.enum_type_data_t.set_nbytes (method) -ida_typeinf.enum_type_data_t.set_value_repr (method) -ida_typeinf.enum_type_data_t.store_64bit_values (method) -ida_typeinf.enum_type_data_t.swap (method) -ida_typeinf.enum_type_data_t.taenum_bits (variable) -ida_typeinf.enum_type_data_t__get_max_serial (function) -ida_typeinf.extract_argloc (function) -ida_typeinf.find_tinfo_udt_member (function) -ida_typeinf.first_named_type (function) -ida_typeinf.for_all_arglocs (function) -ida_typeinf.for_all_const_arglocs (function) -ida_typeinf.free_til (function) -ida_typeinf.func_has_stkframe_hole (function) -ida_typeinf.func_type_data_t (class) -ida_typeinf.func_type_data_t.__init__ (method) -ida_typeinf.func_type_data_t.cc (variable) -ida_typeinf.func_type_data_t.dump (method) -ida_typeinf.func_type_data_t.flags (variable) -ida_typeinf.func_type_data_t.get_call_method (method) -ida_typeinf.func_type_data_t.guess_cc (method) -ida_typeinf.func_type_data_t.is_const (method) -ida_typeinf.func_type_data_t.is_ctor (method) -ida_typeinf.func_type_data_t.is_dtor (method) -ida_typeinf.func_type_data_t.is_golang_cc (method) -ida_typeinf.func_type_data_t.is_high (method) -ida_typeinf.func_type_data_t.is_noret (method) -ida_typeinf.func_type_data_t.is_pure (method) -ida_typeinf.func_type_data_t.is_static (method) -ida_typeinf.func_type_data_t.is_swift_cc (method) -ida_typeinf.func_type_data_t.is_vararg_cc (method) -ida_typeinf.func_type_data_t.is_virtual (method) -ida_typeinf.func_type_data_t.retloc (variable) -ida_typeinf.func_type_data_t.rettype (variable) -ida_typeinf.func_type_data_t.spoiled (variable) -ida_typeinf.func_type_data_t.stkargs (variable) -ida_typeinf.func_type_data_t.swap (method) -ida_typeinf.funcarg_t (class) -ida_typeinf.funcarg_t.__eq__ (method) -ida_typeinf.funcarg_t.__init__ (method) -ida_typeinf.funcarg_t.__ne__ (method) -ida_typeinf.funcarg_t.argloc (variable) -ida_typeinf.funcarg_t.cmt (variable) -ida_typeinf.funcarg_t.flags (variable) -ida_typeinf.funcarg_t.name (variable) -ida_typeinf.funcarg_t.type (variable) -ida_typeinf.funcargvec_t (class) -ida_typeinf.funcargvec_t.__eq__ (method) -ida_typeinf.funcargvec_t.__getitem__ (method) -ida_typeinf.funcargvec_t.__init__ (method) -ida_typeinf.funcargvec_t.__len__ (method) -ida_typeinf.funcargvec_t.__ne__ (method) -ida_typeinf.funcargvec_t.__setitem__ (method) -ida_typeinf.funcargvec_t._del (method) -ida_typeinf.funcargvec_t.add_unique (method) -ida_typeinf.funcargvec_t.at (method) -ida_typeinf.funcargvec_t.begin (method) -ida_typeinf.funcargvec_t.capacity (method) -ida_typeinf.funcargvec_t.clear (method) -ida_typeinf.funcargvec_t.empty (method) -ida_typeinf.funcargvec_t.end (method) -ida_typeinf.funcargvec_t.erase (method) -ida_typeinf.funcargvec_t.extract (method) -ida_typeinf.funcargvec_t.find (method) -ida_typeinf.funcargvec_t.grow (method) -ida_typeinf.funcargvec_t.has (method) -ida_typeinf.funcargvec_t.inject (method) -ida_typeinf.funcargvec_t.insert (method) -ida_typeinf.funcargvec_t.pop_back (method) -ida_typeinf.funcargvec_t.push_back (method) -ida_typeinf.funcargvec_t.qclear (method) -ida_typeinf.funcargvec_t.reserve (method) -ida_typeinf.funcargvec_t.resize (method) -ida_typeinf.funcargvec_t.size (method) -ida_typeinf.funcargvec_t.swap (method) -ida_typeinf.funcargvec_t.truncate (method) -ida_typeinf.gcc_layout (function) -ida_typeinf.gen_decorate_name (function) -ida_typeinf.gen_use_arg_tinfos (function) -ida_typeinf.gen_use_arg_tinfos2 (function) -ida_typeinf.get_abi_name (function) -ida_typeinf.get_alias_target (function) -ida_typeinf.get_arg_addrs (function) -ida_typeinf.get_base_type (function) -ida_typeinf.get_c_header_path (function) -ida_typeinf.get_c_macros (function) -ida_typeinf.get_comp (function) -ida_typeinf.get_compiler_abbr (function) -ida_typeinf.get_compiler_name (function) -ida_typeinf.get_compilers (function) -ida_typeinf.get_enum_member_expr (function) -ida_typeinf.get_full_type (function) -ida_typeinf.get_idainfo64_by_type (function) -ida_typeinf.get_idainfo_by_type (function) -ida_typeinf.get_idati (function) -ida_typeinf.get_named_type (function) -ida_typeinf.get_named_type64 (function) -ida_typeinf.get_named_type_tid (function) -ida_typeinf.get_numbered_type (function) -ida_typeinf.get_numbered_type_name (function) -ida_typeinf.get_ordinal_count (function) -ida_typeinf.get_ordinal_from_idb_type (function) -ida_typeinf.get_ordinal_limit (function) -ida_typeinf.get_ordinal_qty (function) -ida_typeinf.get_scalar_bt (function) -ida_typeinf.get_stock_tinfo (function) -ida_typeinf.get_tid_name (function) -ida_typeinf.get_tid_ordinal (function) -ida_typeinf.get_tinfo_attr (function) -ida_typeinf.get_tinfo_attrs (function) -ida_typeinf.get_tinfo_by_flags (function) -ida_typeinf.get_tinfo_details (function) -ida_typeinf.get_tinfo_details2 (function) -ida_typeinf.get_tinfo_pdata (function) -ida_typeinf.get_tinfo_property (function) -ida_typeinf.get_tinfo_property4 (function) -ida_typeinf.get_tinfo_size (function) -ida_typeinf.get_tinfo_tid (function) -ida_typeinf.get_type_flags (function) -ida_typeinf.get_type_ordinal (function) -ida_typeinf.get_udm_by_fullname (function) -ida_typeinf.get_udm_tid (function) -ida_typeinf.get_vftable_ea (function) -ida_typeinf.get_vftable_ordinal (function) -ida_typeinf.guess_func_cc (function) -ida_typeinf.guess_tinfo (function) -ida_typeinf.ida_lowertype_helper_t (class) -ida_typeinf.ida_lowertype_helper_t.__init__ (method) -ida_typeinf.ida_lowertype_helper_t.func_has_stkframe_hole (method) -ida_typeinf.ida_lowertype_helper_t.get_func_purged_bytes (method) -ida_typeinf.idc_get_local_type (function) -ida_typeinf.idc_get_local_type_name (function) -ida_typeinf.idc_get_local_type_raw (function) -ida_typeinf.idc_get_type (function) -ida_typeinf.idc_get_type_raw (function) -ida_typeinf.idc_guess_type (function) -ida_typeinf.idc_parse_decl (function) -ida_typeinf.idc_parse_types (function) -ida_typeinf.idc_print_type (function) -ida_typeinf.idc_set_local_type (function) -ida_typeinf.import_type (function) -ida_typeinf.inf_big_arg_align (function) -ida_typeinf.inf_huge_arg_align (function) -ida_typeinf.inf_pack_stkargs (function) -ida_typeinf.is_autosync (function) -ida_typeinf.is_code_far (function) -ida_typeinf.is_comp_unsure (function) -ida_typeinf.is_data_far (function) -ida_typeinf.is_gcc (function) -ida_typeinf.is_gcc32 (function) -ida_typeinf.is_gcc64 (function) -ida_typeinf.is_golang_cc (function) -ida_typeinf.is_ordinal_name (function) -ida_typeinf.is_purging_cc (function) -ida_typeinf.is_restype_enum (function) -ida_typeinf.is_restype_struct (function) -ida_typeinf.is_restype_struni (function) -ida_typeinf.is_restype_void (function) -ida_typeinf.is_sdacl_byte (function) -ida_typeinf.is_swift_cc (function) -ida_typeinf.is_tah_byte (function) -ida_typeinf.is_type_arithmetic (function) -ida_typeinf.is_type_array (function) -ida_typeinf.is_type_bitfld (function) -ida_typeinf.is_type_bool (function) -ida_typeinf.is_type_char (function) -ida_typeinf.is_type_choosable (function) -ida_typeinf.is_type_complex (function) -ida_typeinf.is_type_const (function) -ida_typeinf.is_type_double (function) -ida_typeinf.is_type_enum (function) -ida_typeinf.is_type_ext_arithmetic (function) -ida_typeinf.is_type_ext_integral (function) -ida_typeinf.is_type_float (function) -ida_typeinf.is_type_floating (function) -ida_typeinf.is_type_func (function) -ida_typeinf.is_type_int (function) -ida_typeinf.is_type_int128 (function) -ida_typeinf.is_type_int16 (function) -ida_typeinf.is_type_int32 (function) -ida_typeinf.is_type_int64 (function) -ida_typeinf.is_type_integral (function) -ida_typeinf.is_type_ldouble (function) -ida_typeinf.is_type_paf (function) -ida_typeinf.is_type_partial (function) -ida_typeinf.is_type_ptr (function) -ida_typeinf.is_type_ptr_or_array (function) -ida_typeinf.is_type_struct (function) -ida_typeinf.is_type_struni (function) -ida_typeinf.is_type_sue (function) -ida_typeinf.is_type_tbyte (function) -ida_typeinf.is_type_typedef (function) -ida_typeinf.is_type_uchar (function) -ida_typeinf.is_type_uint (function) -ida_typeinf.is_type_uint128 (function) -ida_typeinf.is_type_uint16 (function) -ida_typeinf.is_type_uint32 (function) -ida_typeinf.is_type_uint64 (function) -ida_typeinf.is_type_union (function) -ida_typeinf.is_type_unknown (function) -ida_typeinf.is_type_void (function) -ida_typeinf.is_type_volatile (function) -ida_typeinf.is_typeid_last (function) -ida_typeinf.is_user_cc (function) -ida_typeinf.is_vararg_cc (function) -ida_typeinf.lexcompare_tinfo (function) -ida_typeinf.load_til (function) -ida_typeinf.load_til_header (function) -ida_typeinf.lower_type (function) -ida_typeinf.lowertype_helper_t (class) -ida_typeinf.lowertype_helper_t.__init__ (method) -ida_typeinf.lowertype_helper_t.func_has_stkframe_hole (method) -ida_typeinf.lowertype_helper_t.get_func_purged_bytes (method) -ida_typeinf.new_til (function) -ida_typeinf.next_named_type (function) -ida_typeinf.no_sign (variable) -ida_typeinf.optimize_argloc (function) -ida_typeinf.pack_idcobj_to_bv (function) -ida_typeinf.pack_idcobj_to_idb (function) -ida_typeinf.pack_object_to_bv (function) -ida_typeinf.pack_object_to_idb (function) -ida_typeinf.parse_decl (function) -ida_typeinf.parse_decls (function) -ida_typeinf.predicate_t (class) -ida_typeinf.predicate_t.__disown__ (method) -ida_typeinf.predicate_t.__init__ (method) -ida_typeinf.predicate_t.should_display (method) -ida_typeinf.print_argloc (function) -ida_typeinf.print_decls (function) -ida_typeinf.print_tinfo (function) -ida_typeinf.print_type (function) -ida_typeinf.ptr_type_data_t (class) -ida_typeinf.ptr_type_data_t.__eq__ (method) -ida_typeinf.ptr_type_data_t.__init__ (method) -ida_typeinf.ptr_type_data_t.__ne__ (method) -ida_typeinf.ptr_type_data_t.closure (variable) -ida_typeinf.ptr_type_data_t.delta (variable) -ida_typeinf.ptr_type_data_t.is_code_ptr (method) -ida_typeinf.ptr_type_data_t.is_shifted (method) -ida_typeinf.ptr_type_data_t.obj_type (variable) -ida_typeinf.ptr_type_data_t.parent (variable) -ida_typeinf.ptr_type_data_t.swap (method) -ida_typeinf.ptr_type_data_t.taptr_bits (variable) -ida_typeinf.read_tinfo_bitfield_value (function) -ida_typeinf.reginfovec_t (class) -ida_typeinf.reginfovec_t.__eq__ (method) -ida_typeinf.reginfovec_t.__getitem__ (method) -ida_typeinf.reginfovec_t.__init__ (method) -ida_typeinf.reginfovec_t.__len__ (method) -ida_typeinf.reginfovec_t.__ne__ (method) -ida_typeinf.reginfovec_t.__setitem__ (method) -ida_typeinf.reginfovec_t._del (method) -ida_typeinf.reginfovec_t.add_unique (method) -ida_typeinf.reginfovec_t.at (method) -ida_typeinf.reginfovec_t.begin (method) -ida_typeinf.reginfovec_t.capacity (method) -ida_typeinf.reginfovec_t.clear (method) -ida_typeinf.reginfovec_t.empty (method) -ida_typeinf.reginfovec_t.end (method) -ida_typeinf.reginfovec_t.erase (method) -ida_typeinf.reginfovec_t.extract (method) -ida_typeinf.reginfovec_t.find (method) -ida_typeinf.reginfovec_t.grow (method) -ida_typeinf.reginfovec_t.has (method) -ida_typeinf.reginfovec_t.inject (method) -ida_typeinf.reginfovec_t.insert (method) -ida_typeinf.reginfovec_t.pop_back (method) -ida_typeinf.reginfovec_t.push_back (method) -ida_typeinf.reginfovec_t.qclear (method) -ida_typeinf.reginfovec_t.reserve (method) -ida_typeinf.reginfovec_t.resize (method) -ida_typeinf.reginfovec_t.size (method) -ida_typeinf.reginfovec_t.swap (method) -ida_typeinf.reginfovec_t.truncate (method) -ida_typeinf.regobj_t (class) -ida_typeinf.regobj_t.__init__ (method) -ida_typeinf.regobj_t.regidx (variable) -ida_typeinf.regobj_t.relocate (variable) -ida_typeinf.regobj_t.size (method) -ida_typeinf.regobjs_t (class) -ida_typeinf.regobjs_t.__init__ (method) -ida_typeinf.regobjvec_t (class) -ida_typeinf.regobjvec_t.__getitem__ (method) -ida_typeinf.regobjvec_t.__init__ (method) -ida_typeinf.regobjvec_t.__len__ (method) -ida_typeinf.regobjvec_t.__setitem__ (method) -ida_typeinf.regobjvec_t.at (method) -ida_typeinf.regobjvec_t.begin (method) -ida_typeinf.regobjvec_t.capacity (method) -ida_typeinf.regobjvec_t.clear (method) -ida_typeinf.regobjvec_t.empty (method) -ida_typeinf.regobjvec_t.end (method) -ida_typeinf.regobjvec_t.erase (method) -ida_typeinf.regobjvec_t.extract (method) -ida_typeinf.regobjvec_t.grow (method) -ida_typeinf.regobjvec_t.inject (method) -ida_typeinf.regobjvec_t.insert (method) -ida_typeinf.regobjvec_t.pop_back (method) -ida_typeinf.regobjvec_t.push_back (method) -ida_typeinf.regobjvec_t.qclear (method) -ida_typeinf.regobjvec_t.reserve (method) -ida_typeinf.regobjvec_t.resize (method) -ida_typeinf.regobjvec_t.size (method) -ida_typeinf.regobjvec_t.swap (method) -ida_typeinf.regobjvec_t.truncate (method) -ida_typeinf.remove_abi_opts (function) -ida_typeinf.remove_pointer (function) -ida_typeinf.remove_tinfo_pointer (function) -ida_typeinf.replace_ordinal_typerefs (function) -ida_typeinf.resolve_typedef (function) -ida_typeinf.rrel_t (class) -ida_typeinf.rrel_t.__init__ (method) -ida_typeinf.rrel_t.off (variable) -ida_typeinf.rrel_t.reg (variable) -ida_typeinf.save_tinfo (function) -ida_typeinf.scattered_aloc_t (class) -ida_typeinf.scattered_aloc_t.__init__ (method) -ida_typeinf.score_tinfo (function) -ida_typeinf.serialize_tinfo (function) -ida_typeinf.set_abi_name (function) -ida_typeinf.set_c_header_path (function) -ida_typeinf.set_c_macros (function) -ida_typeinf.set_compiler (function) -ida_typeinf.set_compiler_id (function) -ida_typeinf.set_compiler_string (function) -ida_typeinf.set_numbered_type (function) -ida_typeinf.set_tinfo_attr (function) -ida_typeinf.set_tinfo_attrs (function) -ida_typeinf.set_tinfo_property (function) -ida_typeinf.set_tinfo_property4 (function) -ida_typeinf.set_type_alias (function) -ida_typeinf.set_type_choosable (function) -ida_typeinf.set_vftable_ea (function) -ida_typeinf.simd_info_t (class) -ida_typeinf.simd_info_t.__init__ (method) -ida_typeinf.simd_info_t.match_pattern (method) -ida_typeinf.simd_info_t.memtype (variable) -ida_typeinf.simd_info_t.name (variable) -ida_typeinf.simd_info_t.size (variable) -ida_typeinf.simd_info_t.tif (variable) -ida_typeinf.stkarg_area_info_t (class) -ida_typeinf.stkarg_area_info_t.__init__ (method) -ida_typeinf.stkarg_area_info_t.linkage_area (variable) -ida_typeinf.stkarg_area_info_t.shadow_size (variable) -ida_typeinf.stkarg_area_info_t.stkarg_offset (variable) -ida_typeinf.store_til (function) -ida_typeinf.switch_to_golang (function) -ida_typeinf.text_sink_t (class) -ida_typeinf.text_sink_t.__disown__ (method) -ida_typeinf.text_sink_t.__init__ (method) -ida_typeinf.text_sink_t._print (method) -ida_typeinf.til_symbol_t (class) -ida_typeinf.til_symbol_t.__init__ (method) -ida_typeinf.til_symbol_t.name (variable) -ida_typeinf.til_symbol_t.til (variable) -ida_typeinf.til_t (class) -ida_typeinf.til_t.__init__ (method) -ida_typeinf.til_t.base (method) -ida_typeinf.til_t.cc (variable) -ida_typeinf.til_t.desc (variable) -ida_typeinf.til_t.flags (variable) -ida_typeinf.til_t.is_dirty (method) -ida_typeinf.til_t.name (variable) -ida_typeinf.til_t.nbases (variable) -ida_typeinf.til_t.nrefs (variable) -ida_typeinf.til_t.nstreams (variable) -ida_typeinf.til_t.set_dirty (method) -ida_typeinf.til_t.streams (variable) -ida_typeinf.tinfo_errstr (function) -ida_typeinf.tinfo_t (class) -ida_typeinf.tinfo_t.ENUMBM_AUTO (variable) -ida_typeinf.tinfo_t.ENUMBM_OFF (variable) -ida_typeinf.tinfo_t.ENUMBM_ON (variable) -ida_typeinf.tinfo_t.__eq__ (method) -ida_typeinf.tinfo_t.__ge__ (method) -ida_typeinf.tinfo_t.__gt__ (method) -ida_typeinf.tinfo_t.__init__ (method) -ida_typeinf.tinfo_t.__le__ (method) -ida_typeinf.tinfo_t.__lt__ (method) -ida_typeinf.tinfo_t.__ne__ (method) -ida_typeinf.tinfo_t.__str__ (method) -ida_typeinf.tinfo_t._print (method) -ida_typeinf.tinfo_t.add_edm (method) -ida_typeinf.tinfo_t.add_udm (method) -ida_typeinf.tinfo_t.append_covered (method) -ida_typeinf.tinfo_t.calc_gaps (method) -ida_typeinf.tinfo_t.calc_purged_bytes (method) -ida_typeinf.tinfo_t.calc_score (method) -ida_typeinf.tinfo_t.calc_udt_aligns (method) -ida_typeinf.tinfo_t.change_sign (method) -ida_typeinf.tinfo_t.clear (method) -ida_typeinf.tinfo_t.clr_const (method) -ida_typeinf.tinfo_t.clr_const_volatile (method) -ida_typeinf.tinfo_t.clr_decl_const_volatile (method) -ida_typeinf.tinfo_t.clr_volatile (method) -ida_typeinf.tinfo_t.compare (method) -ida_typeinf.tinfo_t.compare_with (method) -ida_typeinf.tinfo_t.convert_array_to_ptr (method) -ida_typeinf.tinfo_t.copy (method) -ida_typeinf.tinfo_t.copy_type (method) -ida_typeinf.tinfo_t.create_array (method) -ida_typeinf.tinfo_t.create_bitfield (method) -ida_typeinf.tinfo_t.create_enum (method) -ida_typeinf.tinfo_t.create_forward_decl (method) -ida_typeinf.tinfo_t.create_func (method) -ida_typeinf.tinfo_t.create_ptr (method) -ida_typeinf.tinfo_t.create_simple_type (method) -ida_typeinf.tinfo_t.create_typedef (method) -ida_typeinf.tinfo_t.create_udt (method) -ida_typeinf.tinfo_t.del_attr (method) -ida_typeinf.tinfo_t.del_attrs (method) -ida_typeinf.tinfo_t.del_edm (method) -ida_typeinf.tinfo_t.del_edms (method) -ida_typeinf.tinfo_t.del_udm (method) -ida_typeinf.tinfo_t.del_udms (method) -ida_typeinf.tinfo_t.deserialize (method) -ida_typeinf.tinfo_t.dstr (method) -ida_typeinf.tinfo_t.edit_array (method) -ida_typeinf.tinfo_t.edit_bitfield (method) -ida_typeinf.tinfo_t.edit_edm (method) -ida_typeinf.tinfo_t.edit_enum (method) -ida_typeinf.tinfo_t.edit_func (method) -ida_typeinf.tinfo_t.edit_ptr (method) -ida_typeinf.tinfo_t.edit_udt (method) -ida_typeinf.tinfo_t.empty (method) -ida_typeinf.tinfo_t.equals_to (method) -ida_typeinf.tinfo_t.expand_udt (method) -ida_typeinf.tinfo_t.find_edm (method) -ida_typeinf.tinfo_t.find_udm (method) -ida_typeinf.tinfo_t.force_tid (method) -ida_typeinf.tinfo_t.get_alias_target (method) -ida_typeinf.tinfo_t.get_array_details (method) -ida_typeinf.tinfo_t.get_array_element (method) -ida_typeinf.tinfo_t.get_array_nelems (method) -ida_typeinf.tinfo_t.get_attr (method) -ida_typeinf.tinfo_t.get_attrs (method) -ida_typeinf.tinfo_t.get_bit_buckets (method) -ida_typeinf.tinfo_t.get_bitfield_details (method) -ida_typeinf.tinfo_t.get_declalign (method) -ida_typeinf.tinfo_t.get_decltype (method) -ida_typeinf.tinfo_t.get_edm (method) -ida_typeinf.tinfo_t.get_edm_by_tid (method) -ida_typeinf.tinfo_t.get_enum_base_type (method) -ida_typeinf.tinfo_t.get_enum_details (method) -ida_typeinf.tinfo_t.get_enum_radix (method) -ida_typeinf.tinfo_t.get_final_element (method) -ida_typeinf.tinfo_t.get_final_ordinal (method) -ida_typeinf.tinfo_t.get_final_type_name (method) -ida_typeinf.tinfo_t.get_forward_type (method) -ida_typeinf.tinfo_t.get_func_details (method) -ida_typeinf.tinfo_t.get_innermost_udm (method) -ida_typeinf.tinfo_t.get_methods (method) -ida_typeinf.tinfo_t.get_modifiers (method) -ida_typeinf.tinfo_t.get_named_type (method) -ida_typeinf.tinfo_t.get_nargs (method) -ida_typeinf.tinfo_t.get_next_type_name (method) -ida_typeinf.tinfo_t.get_nice_type_name (method) -ida_typeinf.tinfo_t.get_nth_arg (method) -ida_typeinf.tinfo_t.get_numbered_type (method) -ida_typeinf.tinfo_t.get_onemember_type (method) -ida_typeinf.tinfo_t.get_ordinal (method) -ida_typeinf.tinfo_t.get_pointed_object (method) -ida_typeinf.tinfo_t.get_ptr_details (method) -ida_typeinf.tinfo_t.get_ptrarr_object (method) -ida_typeinf.tinfo_t.get_ptrarr_objsize (method) -ida_typeinf.tinfo_t.get_realtype (method) -ida_typeinf.tinfo_t.get_rettype (method) -ida_typeinf.tinfo_t.get_sign (method) -ida_typeinf.tinfo_t.get_size (method) -ida_typeinf.tinfo_t.get_stock (method) -ida_typeinf.tinfo_t.get_tid (method) -ida_typeinf.tinfo_t.get_til (method) -ida_typeinf.tinfo_t.get_type_by_edm_name (method) -ida_typeinf.tinfo_t.get_type_by_tid (method) -ida_typeinf.tinfo_t.get_type_cmt (method) -ida_typeinf.tinfo_t.get_type_name (method) -ida_typeinf.tinfo_t.get_type_rptcmt (method) -ida_typeinf.tinfo_t.get_udm_by_tid (method) -ida_typeinf.tinfo_t.get_udm_tid (method) -ida_typeinf.tinfo_t.get_udt_details (method) -ida_typeinf.tinfo_t.get_udt_nmembers (method) -ida_typeinf.tinfo_t.get_unpadded_size (method) -ida_typeinf.tinfo_t.has_details (method) -ida_typeinf.tinfo_t.has_union (method) -ida_typeinf.tinfo_t.has_vftable (method) -ida_typeinf.tinfo_t.is_aliased (method) -ida_typeinf.tinfo_t.is_anonymous_udt (method) -ida_typeinf.tinfo_t.is_arithmetic (method) -ida_typeinf.tinfo_t.is_array (method) -ida_typeinf.tinfo_t.is_bitfield (method) -ida_typeinf.tinfo_t.is_bitmask_enum (method) -ida_typeinf.tinfo_t.is_bool (method) -ida_typeinf.tinfo_t.is_castable_to (method) -ida_typeinf.tinfo_t.is_char (method) -ida_typeinf.tinfo_t.is_complex (method) -ida_typeinf.tinfo_t.is_const (method) -ida_typeinf.tinfo_t.is_correct (method) -ida_typeinf.tinfo_t.is_decl_array (method) -ida_typeinf.tinfo_t.is_decl_bitfield (method) -ida_typeinf.tinfo_t.is_decl_bool (method) -ida_typeinf.tinfo_t.is_decl_char (method) -ida_typeinf.tinfo_t.is_decl_complex (method) -ida_typeinf.tinfo_t.is_decl_const (method) -ida_typeinf.tinfo_t.is_decl_double (method) -ida_typeinf.tinfo_t.is_decl_enum (method) -ida_typeinf.tinfo_t.is_decl_float (method) -ida_typeinf.tinfo_t.is_decl_floating (method) -ida_typeinf.tinfo_t.is_decl_func (method) -ida_typeinf.tinfo_t.is_decl_int (method) -ida_typeinf.tinfo_t.is_decl_int128 (method) -ida_typeinf.tinfo_t.is_decl_int16 (method) -ida_typeinf.tinfo_t.is_decl_int32 (method) -ida_typeinf.tinfo_t.is_decl_int64 (method) -ida_typeinf.tinfo_t.is_decl_last (method) -ida_typeinf.tinfo_t.is_decl_ldouble (method) -ida_typeinf.tinfo_t.is_decl_paf (method) -ida_typeinf.tinfo_t.is_decl_partial (method) -ida_typeinf.tinfo_t.is_decl_ptr (method) -ida_typeinf.tinfo_t.is_decl_struct (method) -ida_typeinf.tinfo_t.is_decl_sue (method) -ida_typeinf.tinfo_t.is_decl_tbyte (method) -ida_typeinf.tinfo_t.is_decl_typedef (method) -ida_typeinf.tinfo_t.is_decl_uchar (method) -ida_typeinf.tinfo_t.is_decl_udt (method) -ida_typeinf.tinfo_t.is_decl_uint (method) -ida_typeinf.tinfo_t.is_decl_uint128 (method) -ida_typeinf.tinfo_t.is_decl_uint16 (method) -ida_typeinf.tinfo_t.is_decl_uint32 (method) -ida_typeinf.tinfo_t.is_decl_uint64 (method) -ida_typeinf.tinfo_t.is_decl_union (method) -ida_typeinf.tinfo_t.is_decl_unknown (method) -ida_typeinf.tinfo_t.is_decl_void (method) -ida_typeinf.tinfo_t.is_decl_volatile (method) -ida_typeinf.tinfo_t.is_double (method) -ida_typeinf.tinfo_t.is_empty_udt (method) -ida_typeinf.tinfo_t.is_enum (method) -ida_typeinf.tinfo_t.is_ext_arithmetic (method) -ida_typeinf.tinfo_t.is_ext_integral (method) -ida_typeinf.tinfo_t.is_float (method) -ida_typeinf.tinfo_t.is_floating (method) -ida_typeinf.tinfo_t.is_forward_decl (method) -ida_typeinf.tinfo_t.is_forward_enum (method) -ida_typeinf.tinfo_t.is_forward_struct (method) -ida_typeinf.tinfo_t.is_forward_union (method) -ida_typeinf.tinfo_t.is_from_subtil (method) -ida_typeinf.tinfo_t.is_func (method) -ida_typeinf.tinfo_t.is_funcptr (method) -ida_typeinf.tinfo_t.is_high_func (method) -ida_typeinf.tinfo_t.is_int (method) -ida_typeinf.tinfo_t.is_int128 (method) -ida_typeinf.tinfo_t.is_int16 (method) -ida_typeinf.tinfo_t.is_int32 (method) -ida_typeinf.tinfo_t.is_int64 (method) -ida_typeinf.tinfo_t.is_integral (method) -ida_typeinf.tinfo_t.is_ldouble (method) -ida_typeinf.tinfo_t.is_manually_castable_to (method) -ida_typeinf.tinfo_t.is_one_fpval (method) -ida_typeinf.tinfo_t.is_paf (method) -ida_typeinf.tinfo_t.is_partial (method) -ida_typeinf.tinfo_t.is_ptr (method) -ida_typeinf.tinfo_t.is_ptr_or_array (method) -ida_typeinf.tinfo_t.is_purging_cc (method) -ida_typeinf.tinfo_t.is_pvoid (method) -ida_typeinf.tinfo_t.is_scalar (method) -ida_typeinf.tinfo_t.is_shifted_ptr (method) -ida_typeinf.tinfo_t.is_signed (method) -ida_typeinf.tinfo_t.is_small_udt (method) -ida_typeinf.tinfo_t.is_sse_type (method) -ida_typeinf.tinfo_t.is_struct (method) -ida_typeinf.tinfo_t.is_sue (method) -ida_typeinf.tinfo_t.is_tbyte (method) -ida_typeinf.tinfo_t.is_typedef (method) -ida_typeinf.tinfo_t.is_typeref (method) -ida_typeinf.tinfo_t.is_uchar (method) -ida_typeinf.tinfo_t.is_udt (method) -ida_typeinf.tinfo_t.is_uint (method) -ida_typeinf.tinfo_t.is_uint128 (method) -ida_typeinf.tinfo_t.is_uint16 (method) -ida_typeinf.tinfo_t.is_uint32 (method) -ida_typeinf.tinfo_t.is_uint64 (method) -ida_typeinf.tinfo_t.is_union (method) -ida_typeinf.tinfo_t.is_unknown (method) -ida_typeinf.tinfo_t.is_unsigned (method) -ida_typeinf.tinfo_t.is_user_cc (method) -ida_typeinf.tinfo_t.is_vararg_cc (method) -ida_typeinf.tinfo_t.is_varmember (method) -ida_typeinf.tinfo_t.is_varstruct (method) -ida_typeinf.tinfo_t.is_vftable (method) -ida_typeinf.tinfo_t.is_void (method) -ida_typeinf.tinfo_t.is_volatile (method) -ida_typeinf.tinfo_t.is_well_defined (method) -ida_typeinf.tinfo_t.parse (method) -ida_typeinf.tinfo_t.present (method) -ida_typeinf.tinfo_t.read_bitfield_value (method) -ida_typeinf.tinfo_t.remove_ptr_or_array (method) -ida_typeinf.tinfo_t.rename_edm (method) -ida_typeinf.tinfo_t.rename_type (method) -ida_typeinf.tinfo_t.rename_udm (method) -ida_typeinf.tinfo_t.requires_qualifier (method) -ida_typeinf.tinfo_t.save_type (method) -ida_typeinf.tinfo_t.serialize (method) -ida_typeinf.tinfo_t.set_attr (method) -ida_typeinf.tinfo_t.set_attrs (method) -ida_typeinf.tinfo_t.set_const (method) -ida_typeinf.tinfo_t.set_declalign (method) -ida_typeinf.tinfo_t.set_edm_cmt (method) -ida_typeinf.tinfo_t.set_enum_is_bitmask (method) -ida_typeinf.tinfo_t.set_enum_repr (method) -ida_typeinf.tinfo_t.set_enum_sign (method) -ida_typeinf.tinfo_t.set_enum_width (method) -ida_typeinf.tinfo_t.set_methods (method) -ida_typeinf.tinfo_t.set_modifiers (method) -ida_typeinf.tinfo_t.set_named_type (method) -ida_typeinf.tinfo_t.set_numbered_type (method) -ida_typeinf.tinfo_t.set_symbol_type (method) -ida_typeinf.tinfo_t.set_type_alias (method) -ida_typeinf.tinfo_t.set_type_alignment (method) -ida_typeinf.tinfo_t.set_type_cmt (method) -ida_typeinf.tinfo_t.set_udm_cmt (method) -ida_typeinf.tinfo_t.set_udm_repr (method) -ida_typeinf.tinfo_t.set_udm_type (method) -ida_typeinf.tinfo_t.set_udt_alignment (method) -ida_typeinf.tinfo_t.set_udt_pack (method) -ida_typeinf.tinfo_t.set_volatile (method) -ida_typeinf.tinfo_t.swap (method) -ida_typeinf.tinfo_t.write_bitfield_value (method) -ida_typeinf.tinfo_t_get_stock (function) -ida_typeinf.tinfo_visitor_t (class) -ida_typeinf.tinfo_visitor_t.__disown__ (method) -ida_typeinf.tinfo_visitor_t.__init__ (method) -ida_typeinf.tinfo_visitor_t.apply_to (method) -ida_typeinf.tinfo_visitor_t.prune_now (method) -ida_typeinf.tinfo_visitor_t.state (variable) -ida_typeinf.tinfo_visitor_t.visit_type (method) -ida_typeinf.type_attr_t (class) -ida_typeinf.type_attr_t.__ge__ (method) -ida_typeinf.type_attr_t.__init__ (method) -ida_typeinf.type_attr_t.__lt__ (method) -ida_typeinf.type_attr_t.key (variable) -ida_typeinf.type_attr_t.value (variable) -ida_typeinf.type_attrs_t (class) -ida_typeinf.type_attrs_t.__getitem__ (method) -ida_typeinf.type_attrs_t.__init__ (method) -ida_typeinf.type_attrs_t.__len__ (method) -ida_typeinf.type_attrs_t.__setitem__ (method) -ida_typeinf.type_attrs_t.at (method) -ida_typeinf.type_attrs_t.begin (method) -ida_typeinf.type_attrs_t.capacity (method) -ida_typeinf.type_attrs_t.clear (method) -ida_typeinf.type_attrs_t.empty (method) -ida_typeinf.type_attrs_t.end (method) -ida_typeinf.type_attrs_t.erase (method) -ida_typeinf.type_attrs_t.extract (method) -ida_typeinf.type_attrs_t.grow (method) -ida_typeinf.type_attrs_t.inject (method) -ida_typeinf.type_attrs_t.insert (method) -ida_typeinf.type_attrs_t.pop_back (method) -ida_typeinf.type_attrs_t.push_back (method) -ida_typeinf.type_attrs_t.qclear (method) -ida_typeinf.type_attrs_t.reserve (method) -ida_typeinf.type_attrs_t.resize (method) -ida_typeinf.type_attrs_t.size (method) -ida_typeinf.type_attrs_t.swap (method) -ida_typeinf.type_attrs_t.truncate (method) -ida_typeinf.type_mods_t (class) -ida_typeinf.type_mods_t.__init__ (method) -ida_typeinf.type_mods_t.clear (method) -ida_typeinf.type_mods_t.cmt (variable) -ida_typeinf.type_mods_t.flags (variable) -ida_typeinf.type_mods_t.has_cmt (method) -ida_typeinf.type_mods_t.has_info (method) -ida_typeinf.type_mods_t.has_name (method) -ida_typeinf.type_mods_t.has_type (method) -ida_typeinf.type_mods_t.is_rptcmt (method) -ida_typeinf.type_mods_t.name (variable) -ida_typeinf.type_mods_t.set_new_cmt (method) -ida_typeinf.type_mods_t.set_new_name (method) -ida_typeinf.type_mods_t.set_new_type (method) -ida_typeinf.type_mods_t.type (variable) -ida_typeinf.type_signed (variable) -ida_typeinf.type_unsigned (variable) -ida_typeinf.typedef_type_data_t (class) -ida_typeinf.typedef_type_data_t.__init__ (method) -ida_typeinf.typedef_type_data_t.is_ordref (variable) -ida_typeinf.typedef_type_data_t.name (variable) -ida_typeinf.typedef_type_data_t.ordinal (variable) -ida_typeinf.typedef_type_data_t.resolve (variable) -ida_typeinf.typedef_type_data_t.swap (method) -ida_typeinf.typedef_type_data_t.til (variable) -ida_typeinf.udm_t (class) -ida_typeinf.udm_t.__eq__ (method) -ida_typeinf.udm_t.__init__ (method) -ida_typeinf.udm_t.__lt__ (method) -ida_typeinf.udm_t.__ne__ (method) -ida_typeinf.udm_t.begin (method) -ida_typeinf.udm_t.can_be_dtor (method) -ida_typeinf.udm_t.can_rename (method) -ida_typeinf.udm_t.clr_baseclass (method) -ida_typeinf.udm_t.clr_method (method) -ida_typeinf.udm_t.clr_unaligned (method) -ida_typeinf.udm_t.clr_vftable (method) -ida_typeinf.udm_t.clr_virtbase (method) -ida_typeinf.udm_t.cmt (variable) -ida_typeinf.udm_t.effalign (variable) -ida_typeinf.udm_t.end (method) -ida_typeinf.udm_t.fda (variable) -ida_typeinf.udm_t.is_anonymous_udm (method) -ida_typeinf.udm_t.is_baseclass (method) -ida_typeinf.udm_t.is_bitfield (method) -ida_typeinf.udm_t.is_gap (method) -ida_typeinf.udm_t.is_method (method) -ida_typeinf.udm_t.is_regcmt (method) -ida_typeinf.udm_t.is_unaligned (method) -ida_typeinf.udm_t.is_vftable (method) -ida_typeinf.udm_t.is_virtbase (method) -ida_typeinf.udm_t.is_zero_bitfield (method) -ida_typeinf.udm_t.make_gap (method) -ida_typeinf.udm_t.name (variable) -ida_typeinf.udm_t.offset (variable) -ida_typeinf.udm_t.repr (variable) -ida_typeinf.udm_t.set_baseclass (method) -ida_typeinf.udm_t.set_method (method) -ida_typeinf.udm_t.set_regcmt (method) -ida_typeinf.udm_t.set_unaligned (method) -ida_typeinf.udm_t.set_value_repr (method) -ida_typeinf.udm_t.set_vftable (method) -ida_typeinf.udm_t.set_virtbase (method) -ida_typeinf.udm_t.size (variable) -ida_typeinf.udm_t.swap (method) -ida_typeinf.udm_t.tafld_bits (variable) -ida_typeinf.udm_t.type (variable) -ida_typeinf.udm_t__make_gap (function) -ida_typeinf.udt_type_data_t (class) -ida_typeinf.udt_type_data_t.__init__ (method) -ida_typeinf.udt_type_data_t.effalign (variable) -ida_typeinf.udt_type_data_t.find_member (method) -ida_typeinf.udt_type_data_t.get_best_fit_member (method) -ida_typeinf.udt_type_data_t.is_cppobj (method) -ida_typeinf.udt_type_data_t.is_last_baseclass (method) -ida_typeinf.udt_type_data_t.is_msstruct (method) -ida_typeinf.udt_type_data_t.is_unaligned (method) -ida_typeinf.udt_type_data_t.is_union (variable) -ida_typeinf.udt_type_data_t.is_vftable (method) -ida_typeinf.udt_type_data_t.pack (variable) -ida_typeinf.udt_type_data_t.sda (variable) -ida_typeinf.udt_type_data_t.set_vftable (method) -ida_typeinf.udt_type_data_t.swap (method) -ida_typeinf.udt_type_data_t.taudt_bits (variable) -ida_typeinf.udt_type_data_t.total_size (variable) -ida_typeinf.udt_type_data_t.unpadded_size (variable) -ida_typeinf.udt_type_data_t.version (variable) -ida_typeinf.udt_type_data_t__find_member (function) -ida_typeinf.udt_type_data_t__get_best_fit_member (function) -ida_typeinf.udtmembervec_t (class) -ida_typeinf.udtmembervec_t.__init__ (method) -ida_typeinf.udtmembervec_template_t (class) -ida_typeinf.udtmembervec_template_t.__eq__ (method) -ida_typeinf.udtmembervec_template_t.__getitem__ (method) -ida_typeinf.udtmembervec_template_t.__init__ (method) -ida_typeinf.udtmembervec_template_t.__len__ (method) -ida_typeinf.udtmembervec_template_t.__ne__ (method) -ida_typeinf.udtmembervec_template_t.__setitem__ (method) -ida_typeinf.udtmembervec_template_t._del (method) -ida_typeinf.udtmembervec_template_t.add_unique (method) -ida_typeinf.udtmembervec_template_t.at (method) -ida_typeinf.udtmembervec_template_t.begin (method) -ida_typeinf.udtmembervec_template_t.capacity (method) -ida_typeinf.udtmembervec_template_t.clear (method) -ida_typeinf.udtmembervec_template_t.empty (method) -ida_typeinf.udtmembervec_template_t.end (method) -ida_typeinf.udtmembervec_template_t.erase (method) -ida_typeinf.udtmembervec_template_t.extract (method) -ida_typeinf.udtmembervec_template_t.find (method) -ida_typeinf.udtmembervec_template_t.grow (method) -ida_typeinf.udtmembervec_template_t.has (method) -ida_typeinf.udtmembervec_template_t.inject (method) -ida_typeinf.udtmembervec_template_t.insert (method) -ida_typeinf.udtmembervec_template_t.pop_back (method) -ida_typeinf.udtmembervec_template_t.push_back (method) -ida_typeinf.udtmembervec_template_t.qclear (method) -ida_typeinf.udtmembervec_template_t.reserve (method) -ida_typeinf.udtmembervec_template_t.resize (method) -ida_typeinf.udtmembervec_template_t.size (method) -ida_typeinf.udtmembervec_template_t.swap (method) -ida_typeinf.udtmembervec_template_t.truncate (method) -ida_typeinf.unpack_idcobj_from_bv (function) -ida_typeinf.unpack_idcobj_from_idb (function) -ida_typeinf.unpack_object_from_bv (function) -ida_typeinf.unpack_object_from_idb (function) -ida_typeinf.use_golang_cc (function) -ida_typeinf.valstr_t (class) -ida_typeinf.valstr_t.__init__ (method) -ida_typeinf.valstr_t.info (variable) -ida_typeinf.valstr_t.length (variable) -ida_typeinf.valstr_t.members (variable) -ida_typeinf.valstr_t.oneline (variable) -ida_typeinf.valstr_t.props (variable) -ida_typeinf.valstrs_t (class) -ida_typeinf.valstrs_t.__init__ (method) -ida_typeinf.valstrvec_t (class) -ida_typeinf.valstrvec_t.__getitem__ (method) -ida_typeinf.valstrvec_t.__init__ (method) -ida_typeinf.valstrvec_t.__len__ (method) -ida_typeinf.valstrvec_t.__setitem__ (method) -ida_typeinf.valstrvec_t.at (method) -ida_typeinf.valstrvec_t.begin (method) -ida_typeinf.valstrvec_t.capacity (method) -ida_typeinf.valstrvec_t.clear (method) -ida_typeinf.valstrvec_t.empty (method) -ida_typeinf.valstrvec_t.end (method) -ida_typeinf.valstrvec_t.erase (method) -ida_typeinf.valstrvec_t.extract (method) -ida_typeinf.valstrvec_t.grow (method) -ida_typeinf.valstrvec_t.inject (method) -ida_typeinf.valstrvec_t.insert (method) -ida_typeinf.valstrvec_t.pop_back (method) -ida_typeinf.valstrvec_t.push_back (method) -ida_typeinf.valstrvec_t.qclear (method) -ida_typeinf.valstrvec_t.reserve (method) -ida_typeinf.valstrvec_t.resize (method) -ida_typeinf.valstrvec_t.size (method) -ida_typeinf.valstrvec_t.swap (method) -ida_typeinf.valstrvec_t.truncate (method) -ida_typeinf.value_repr_t (class) -ida_typeinf.value_repr_t.__init__ (method) -ida_typeinf.value_repr_t.__str__ (method) -ida_typeinf.value_repr_t._print (method) -ida_typeinf.value_repr_t.ap (variable) -ida_typeinf.value_repr_t.cd (variable) -ida_typeinf.value_repr_t.clear (method) -ida_typeinf.value_repr_t.delta (variable) -ida_typeinf.value_repr_t.empty (method) -ida_typeinf.value_repr_t.from_opinfo (method) -ida_typeinf.value_repr_t.get_vtype (method) -ida_typeinf.value_repr_t.has_lzeroes (method) -ida_typeinf.value_repr_t.has_tabform (method) -ida_typeinf.value_repr_t.init_ap (method) -ida_typeinf.value_repr_t.is_custom (method) -ida_typeinf.value_repr_t.is_enum (method) -ida_typeinf.value_repr_t.is_offset (method) -ida_typeinf.value_repr_t.is_signed (method) -ida_typeinf.value_repr_t.is_strlit (method) -ida_typeinf.value_repr_t.is_stroff (method) -ida_typeinf.value_repr_t.is_typref (method) -ida_typeinf.value_repr_t.parse_value_repr (method) -ida_typeinf.value_repr_t.ri (variable) -ida_typeinf.value_repr_t.set_ap (method) -ida_typeinf.value_repr_t.set_lzeroes (method) -ida_typeinf.value_repr_t.set_signed (method) -ida_typeinf.value_repr_t.set_tabform (method) -ida_typeinf.value_repr_t.set_vtype (method) -ida_typeinf.value_repr_t.strtype (variable) -ida_typeinf.value_repr_t.swap (method) -ida_typeinf.value_repr_t.type_ordinal (variable) -ida_typeinf.value_repr_t__from_opinfo (function) -ida_typeinf.value_repr_t__print_ (function) -ida_typeinf.verify_argloc (function) -ida_typeinf.verify_tinfo (function) -ida_typeinf.visit_subtypes (function) -ida_typeinf.write_tinfo_bitfield_value (function) -ida_ua (module) -ida_ua.FCBF_CONT (variable) -ida_ua.FCBF_DELIM (variable) -ida_ua.FCBF_ERR_REPL (variable) -ida_ua.FCBF_FF_LIT (variable) -ida_ua.INSN_64BIT (variable) -ida_ua.INSN_MACRO (variable) -ida_ua.INSN_MODMAC (variable) -ida_ua.OF_NO_BASE_DISP (variable) -ida_ua.OF_NUMBER (variable) -ida_ua.OF_OUTER_DISP (variable) -ida_ua.OF_SHOW (variable) -ida_ua.OOFS_IFSIGN (variable) -ida_ua.OOFS_NEEDSIGN (variable) -ida_ua.OOFS_NOSIGN (variable) -ida_ua.OOFW_16 (variable) -ida_ua.OOFW_24 (variable) -ida_ua.OOFW_32 (variable) -ida_ua.OOFW_64 (variable) -ida_ua.OOFW_8 (variable) -ida_ua.OOFW_IMM (variable) -ida_ua.OOF_ADDR (variable) -ida_ua.OOF_ANYSERIAL (variable) -ida_ua.OOF_LZEROES (variable) -ida_ua.OOF_NOBNOT (variable) -ida_ua.OOF_NO_LZEROES (variable) -ida_ua.OOF_NUMBER (variable) -ida_ua.OOF_OUTER (variable) -ida_ua.OOF_SIGNED (variable) -ida_ua.OOF_SIGNMASK (variable) -ida_ua.OOF_SPACES (variable) -ida_ua.OOF_WIDTHMASK (variable) -ida_ua.OOF_ZSTROFF (variable) -ida_ua.PACK_FORM_DEF (variable) -ida_ua.STKVAR_VALID_SIZE (variable) -ida_ua.calc_dataseg (function) -ida_ua.can_decode (function) -ida_ua.construct_macro (function) -ida_ua.construct_macro2 (function) -ida_ua.create_insn (function) -ida_ua.create_outctx (function) -ida_ua.decode_insn (function) -ida_ua.decode_preceding_insn (function) -ida_ua.decode_prev_insn (function) -ida_ua.dt_bitfild (variable) -ida_ua.dt_byte (variable) -ida_ua.dt_byte16 (variable) -ida_ua.dt_byte32 (variable) -ida_ua.dt_byte64 (variable) -ida_ua.dt_code (variable) -ida_ua.dt_double (variable) -ida_ua.dt_dword (variable) -ida_ua.dt_float (variable) -ida_ua.dt_fword (variable) -ida_ua.dt_half (variable) -ida_ua.dt_ldbl (variable) -ida_ua.dt_packreal (variable) -ida_ua.dt_qword (variable) -ida_ua.dt_string (variable) -ida_ua.dt_tbyte (variable) -ida_ua.dt_unicode (variable) -ida_ua.dt_void (variable) -ida_ua.dt_word (variable) -ida_ua.get_dtype_by_size (function) -ida_ua.get_dtype_flag (function) -ida_ua.get_dtype_size (function) -ida_ua.get_immvals (function) -ida_ua.get_lookback (function) -ida_ua.get_printable_immvals (function) -ida_ua.insn_add_cref (function) -ida_ua.insn_add_dref (function) -ida_ua.insn_add_off_drefs (function) -ida_ua.insn_create_stkvar (function) -ida_ua.insn_t (class) -ida_ua.insn_t.__get_auxpref__ (method) -ida_ua.insn_t.__get_operand__ (method) -ida_ua.insn_t.__get_ops__ (method) -ida_ua.insn_t.__getitem__ (method) -ida_ua.insn_t.__init__ (method) -ida_ua.insn_t.__iter__ (method) -ida_ua.insn_t.__set_auxpref__ (method) -ida_ua.insn_t.add_cref (method) -ida_ua.insn_t.add_dref (method) -ida_ua.insn_t.add_off_drefs (method) -ida_ua.insn_t.assign (method) -ida_ua.insn_t.auxpref (variable) -ida_ua.insn_t.create_op_data (method) -ida_ua.insn_t.create_stkvar (method) -ida_ua.insn_t.cs (variable) -ida_ua.insn_t.ea (variable) -ida_ua.insn_t.flags (variable) -ida_ua.insn_t.get_canon_feature (method) -ida_ua.insn_t.get_canon_mnem (method) -ida_ua.insn_t.get_next_byte (method) -ida_ua.insn_t.get_next_dword (method) -ida_ua.insn_t.get_next_qword (method) -ida_ua.insn_t.get_next_word (method) -ida_ua.insn_t.insnpref (variable) -ida_ua.insn_t.ip (variable) -ida_ua.insn_t.is_64bit (method) -ida_ua.insn_t.is_canon_insn (method) -ida_ua.insn_t.is_macro (method) -ida_ua.insn_t.itype (variable) -ida_ua.insn_t.ops (variable) -ida_ua.insn_t.segpref (variable) -ida_ua.insn_t.size (variable) -ida_ua.insn_t__from_ptrval__ (function) -ida_ua.is_floating_dtype (function) -ida_ua.macro_constructor_t (class) -ida_ua.macro_constructor_t.__disown__ (method) -ida_ua.macro_constructor_t.__init__ (method) -ida_ua.macro_constructor_t.build_macro (method) -ida_ua.map_code_ea (function) -ida_ua.map_data_ea (function) -ida_ua.map_ea (function) -ida_ua.o_displ (variable) -ida_ua.o_far (variable) -ida_ua.o_idpspec0 (variable) -ida_ua.o_idpspec1 (variable) -ida_ua.o_idpspec2 (variable) -ida_ua.o_idpspec3 (variable) -ida_ua.o_idpspec4 (variable) -ida_ua.o_idpspec5 (variable) -ida_ua.o_imm (variable) -ida_ua.o_mem (variable) -ida_ua.o_near (variable) -ida_ua.o_phrase (variable) -ida_ua.o_reg (variable) -ida_ua.o_void (variable) -ida_ua.op_t (class) -ida_ua.op_t.__get_addr__ (method) -ida_ua.op_t.__get_reg_phrase__ (method) -ida_ua.op_t.__get_specval__ (method) -ida_ua.op_t.__get_value64__ (method) -ida_ua.op_t.__get_value__ (method) -ida_ua.op_t.__init__ (method) -ida_ua.op_t.__set_addr__ (method) -ida_ua.op_t.__set_reg_phrase__ (method) -ida_ua.op_t.__set_specval__ (method) -ida_ua.op_t.__set_value64__ (method) -ida_ua.op_t.__set_value__ (method) -ida_ua.op_t.addr (variable) -ida_ua.op_t.assign (method) -ida_ua.op_t.clr_shown (method) -ida_ua.op_t.dtype (variable) -ida_ua.op_t.flags (variable) -ida_ua.op_t.has_reg (method) -ida_ua.op_t.is_imm (method) -ida_ua.op_t.is_reg (method) -ida_ua.op_t.n (variable) -ida_ua.op_t.offb (variable) -ida_ua.op_t.offo (variable) -ida_ua.op_t.phrase (variable) -ida_ua.op_t.reg (variable) -ida_ua.op_t.set_shown (method) -ida_ua.op_t.shown (method) -ida_ua.op_t.specval (variable) -ida_ua.op_t.type (variable) -ida_ua.op_t.value (variable) -ida_ua.op_t__from_ptrval__ (function) -ida_ua.operands_array (class) -ida_ua.operands_array.__getitem__ (method) -ida_ua.operands_array.__init__ (method) -ida_ua.operands_array.__len__ (method) -ida_ua.operands_array.__setitem__ (method) -ida_ua.operands_array._get_bytes (method) -ida_ua.operands_array._set_bytes (method) -ida_ua.outctx_base_t (class) -ida_ua.outctx_base_t.__init__ (method) -ida_ua.outctx_base_t.close_comment (method) -ida_ua.outctx_base_t.clr_gen_label (method) -ida_ua.outctx_base_t.display_voids (method) -ida_ua.outctx_base_t.flush_buf (method) -ida_ua.outctx_base_t.flush_outbuf (method) -ida_ua.outctx_base_t.forbid_annotations (method) -ida_ua.outctx_base_t.force_code (method) -ida_ua.outctx_base_t.gen_block_cmt (method) -ida_ua.outctx_base_t.gen_border_line (method) -ida_ua.outctx_base_t.gen_cmt_line (method) -ida_ua.outctx_base_t.gen_collapsed_line (method) -ida_ua.outctx_base_t.gen_empty_line (method) -ida_ua.outctx_base_t.gen_empty_line_without_annotations (method) -ida_ua.outctx_base_t.gen_printf (method) -ida_ua.outctx_base_t.gen_xref_lines (method) -ida_ua.outctx_base_t.getF (method) -ida_ua.outctx_base_t.get_stkvar (method) -ida_ua.outctx_base_t.init_lines_array (method) -ida_ua.outctx_base_t.multiline (method) -ida_ua.outctx_base_t.only_main_line (method) -ida_ua.outctx_base_t.out_addr_tag (method) -ida_ua.outctx_base_t.out_btoa (method) -ida_ua.outctx_base_t.out_char (method) -ida_ua.outctx_base_t.out_chars (method) -ida_ua.outctx_base_t.out_colored_register_line (method) -ida_ua.outctx_base_t.out_keyword (method) -ida_ua.outctx_base_t.out_line (method) -ida_ua.outctx_base_t.out_long (method) -ida_ua.outctx_base_t.out_name_expr (method) -ida_ua.outctx_base_t.out_printf (method) -ida_ua.outctx_base_t.out_register (method) -ida_ua.outctx_base_t.out_spaces (method) -ida_ua.outctx_base_t.out_symbol (method) -ida_ua.outctx_base_t.out_tagoff (method) -ida_ua.outctx_base_t.out_tagon (method) -ida_ua.outctx_base_t.out_value (method) -ida_ua.outctx_base_t.print_label_now (method) -ida_ua.outctx_base_t.restore_ctxflags (method) -ida_ua.outctx_base_t.retrieve_cmt (method) -ida_ua.outctx_base_t.retrieve_name (method) -ida_ua.outctx_base_t.set_comment_addr (method) -ida_ua.outctx_base_t.set_dlbind_opnd (method) -ida_ua.outctx_base_t.set_gen_cmt (method) -ida_ua.outctx_base_t.set_gen_demangled_label (method) -ida_ua.outctx_base_t.set_gen_label (method) -ida_ua.outctx_base_t.set_gen_xrefs (method) -ida_ua.outctx_base_t.setup_outctx (method) -ida_ua.outctx_base_t.stack_view (method) -ida_ua.outctx_base_t.term_outctx (method) -ida_ua.outctx_base_t__from_ptrval__ (function) -ida_ua.outctx_t (class) -ida_ua.outctx_t.__init__ (method) -ida_ua.outctx_t.gen_func_footer (method) -ida_ua.outctx_t.gen_func_header (method) -ida_ua.outctx_t.gen_header (method) -ida_ua.outctx_t.gen_header_extra (method) -ida_ua.outctx_t.gen_xref_lines (method) -ida_ua.outctx_t.out_btoa (method) -ida_ua.outctx_t.out_custom_mnem (method) -ida_ua.outctx_t.out_data (method) -ida_ua.outctx_t.out_fcref_names (method) -ida_ua.outctx_t.out_immchar_cmts (method) -ida_ua.outctx_t.out_mnem (method) -ida_ua.outctx_t.out_mnemonic (method) -ida_ua.outctx_t.out_one_operand (method) -ida_ua.outctx_t.out_specea (method) -ida_ua.outctx_t.retrieve_cmt (method) -ida_ua.outctx_t.retrieve_name (method) -ida_ua.outctx_t.set_bin_state (method) -ida_ua.outctx_t.setup_outctx (method) -ida_ua.outctx_t.term_outctx (method) -ida_ua.outctx_t__from_ptrval__ (function) -ida_ua.print_insn_mnem (function) -ida_ua.print_operand (function) -ida_xref (module) -ida_xref.XREF_ALL (variable) -ida_xref.XREF_BASE (variable) -ida_xref.XREF_DATA (variable) -ida_xref.XREF_FAR (variable) -ida_xref.XREF_MASK (variable) -ida_xref.XREF_PASTEND (variable) -ida_xref.XREF_TAIL (variable) -ida_xref.XREF_USER (variable) -ida_xref.add_cref (function) -ida_xref.add_dref (function) -ida_xref.calc_switch_cases (function) -ida_xref.cases_and_targets_t (class) -ida_xref.cases_and_targets_t.__init__ (method) -ida_xref.casevec_t (class) -ida_xref.casevec_t.__eq__ (method) -ida_xref.casevec_t.__getitem__ (method) -ida_xref.casevec_t.__init__ (method) -ida_xref.casevec_t.__len__ (method) -ida_xref.casevec_t.__ne__ (method) -ida_xref.casevec_t.__setitem__ (method) -ida_xref.casevec_t._del (method) -ida_xref.casevec_t.add_unique (method) -ida_xref.casevec_t.at (method) -ida_xref.casevec_t.begin (method) -ida_xref.casevec_t.capacity (method) -ida_xref.casevec_t.clear (method) -ida_xref.casevec_t.empty (method) -ida_xref.casevec_t.end (method) -ida_xref.casevec_t.erase (method) -ida_xref.casevec_t.extract (method) -ida_xref.casevec_t.find (method) -ida_xref.casevec_t.grow (method) -ida_xref.casevec_t.has (method) -ida_xref.casevec_t.inject (method) -ida_xref.casevec_t.insert (method) -ida_xref.casevec_t.pop_back (method) -ida_xref.casevec_t.push_back (method) -ida_xref.casevec_t.qclear (method) -ida_xref.casevec_t.reserve (method) -ida_xref.casevec_t.resize (method) -ida_xref.casevec_t.size (method) -ida_xref.casevec_t.swap (method) -ida_xref.casevec_t.truncate (method) -ida_xref.create_switch_table (function) -ida_xref.create_switch_xrefs (function) -ida_xref.del_cref (function) -ida_xref.del_dref (function) -ida_xref.delete_switch_table (function) -ida_xref.dr_I (variable) -ida_xref.dr_O (variable) -ida_xref.dr_R (variable) -ida_xref.dr_S (variable) -ida_xref.dr_T (variable) -ida_xref.dr_U (variable) -ida_xref.dr_W (variable) -ida_xref.fl_CF (variable) -ida_xref.fl_CN (variable) -ida_xref.fl_F (variable) -ida_xref.fl_JF (variable) -ida_xref.fl_JN (variable) -ida_xref.fl_U (variable) -ida_xref.fl_USobsolete (variable) -ida_xref.get_first_cref_from (function) -ida_xref.get_first_cref_to (function) -ida_xref.get_first_dref_from (function) -ida_xref.get_first_dref_to (function) -ida_xref.get_first_fcref_from (function) -ida_xref.get_first_fcref_to (function) -ida_xref.get_next_cref_from (function) -ida_xref.get_next_cref_to (function) -ida_xref.get_next_dref_from (function) -ida_xref.get_next_dref_to (function) -ida_xref.get_next_fcref_from (function) -ida_xref.get_next_fcref_to (function) -ida_xref.has_external_refs (function) -ida_xref.xrefblk_t (class) -ida_xref.xrefblk_t.__init__ (method) -ida_xref.xrefblk_t.crefs_from (method) -ida_xref.xrefblk_t.crefs_to (method) -ida_xref.xrefblk_t.drefs_from (method) -ida_xref.xrefblk_t.drefs_to (method) -ida_xref.xrefblk_t.fcrefs_from (method) -ida_xref.xrefblk_t.fcrefs_to (method) -ida_xref.xrefblk_t.first_from (method) -ida_xref.xrefblk_t.first_to (method) -ida_xref.xrefblk_t.iscode (variable) -ida_xref.xrefblk_t.next_from (method) -ida_xref.xrefblk_t.next_to (method) -ida_xref.xrefblk_t.refs_from (method) -ida_xref.xrefblk_t.refs_from._copy_xref (function) -ida_xref.xrefblk_t.refs_to (method) -ida_xref.xrefblk_t.refs_to._copy_xref (function) -ida_xref.xrefblk_t.to (variable) -ida_xref.xrefblk_t.type (variable) -ida_xref.xrefblk_t.user (variable) -ida_xref.xrefchar (function) -ida_mergemod (module) -ida_mergemod.create_std_modmerge_handlers (function) -ida_merge (module) -ida_merge.MERGE_KIND_AFLAGS_EA (variable) -ida_merge.MERGE_KIND_AUTOQ (variable) -ida_merge.MERGE_KIND_BOOKMARKS (variable) -ida_merge.MERGE_KIND_BPTS (variable) -ida_merge.MERGE_KIND_BYTEVAL (variable) -ida_merge.MERGE_KIND_CREFS (variable) -ida_merge.MERGE_KIND_CUSTDATA (variable) -ida_merge.MERGE_KIND_DBG_MEMREGS (variable) -ida_merge.MERGE_KIND_DEBUGGER (variable) -ida_merge.MERGE_KIND_DEKSTOPS (variable) -ida_merge.MERGE_KIND_DIRTREE (variable) -ida_merge.MERGE_KIND_DREFS (variable) -ida_merge.MERGE_KIND_ENCODINGS (variable) -ida_merge.MERGE_KIND_ENCODINGS2 (variable) -ida_merge.MERGE_KIND_END (variable) -ida_merge.MERGE_KIND_ENUMS (variable) -ida_merge.MERGE_KIND_EXPORTS (variable) -ida_merge.MERGE_KIND_EXTRACMT (variable) -ida_merge.MERGE_KIND_FILEREGIONS (variable) -ida_merge.MERGE_KIND_FIXUPS (variable) -ida_merge.MERGE_KIND_FLAGS (variable) -ida_merge.MERGE_KIND_FLOWS (variable) -ida_merge.MERGE_KIND_FRAME (variable) -ida_merge.MERGE_KIND_FRAMEMGR (variable) -ida_merge.MERGE_KIND_FUNC (variable) -ida_merge.MERGE_KIND_GHSTRCMT (variable) -ida_merge.MERGE_KIND_HIDDENRANGES (variable) -ida_merge.MERGE_KIND_IGNOREMICRO (variable) -ida_merge.MERGE_KIND_IMPORTS (variable) -ida_merge.MERGE_KIND_INF (variable) -ida_merge.MERGE_KIND_LAST (variable) -ida_merge.MERGE_KIND_LOADER (variable) -ida_merge.MERGE_KIND_LUMINA (variable) -ida_merge.MERGE_KIND_MAPPING (variable) -ida_merge.MERGE_KIND_NETNODE (variable) -ida_merge.MERGE_KIND_NOTEPAD (variable) -ida_merge.MERGE_KIND_ORPHANS (variable) -ida_merge.MERGE_KIND_PATCHES (variable) -ida_merge.MERGE_KIND_PROBLEMS (variable) -ida_merge.MERGE_KIND_SCRIPTS (variable) -ida_merge.MERGE_KIND_SCRIPTS2 (variable) -ida_merge.MERGE_KIND_SEGGRPS (variable) -ida_merge.MERGE_KIND_SEGMENTS (variable) -ida_merge.MERGE_KIND_SEGREGS (variable) -ida_merge.MERGE_KIND_SELECTORS (variable) -ida_merge.MERGE_KIND_SIGNATURES (variable) -ida_merge.MERGE_KIND_SOURCEFILES (variable) -ida_merge.MERGE_KIND_STKPNTS (variable) -ida_merge.MERGE_KIND_STRMEM (variable) -ida_merge.MERGE_KIND_STRMEMCMT (variable) -ida_merge.MERGE_KIND_STRUCTS (variable) -ida_merge.MERGE_KIND_STT (variable) -ida_merge.MERGE_KIND_TILS (variable) -ida_merge.MERGE_KIND_TINFO (variable) -ida_merge.MERGE_KIND_TRYBLKS (variable) -ida_merge.MERGE_KIND_UDTMEM (variable) -ida_merge.MERGE_KIND_UI (variable) -ida_merge.MERGE_KIND_VFTABLES (variable) -ida_merge.MERGE_KIND_WATCHPOINTS (variable) -ida_merge.MH_LISTEN (variable) -ida_merge.MH_TERSE (variable) -ida_merge.MH_UI_CHAR_MASK (variable) -ida_merge.MH_UI_COLONNAME (variable) -ida_merge.MH_UI_COMMANAME (variable) -ida_merge.MH_UI_COMPLEX (variable) -ida_merge.MH_UI_DP_NOLINEDIFF (variable) -ida_merge.MH_UI_DP_SHORTNAME (variable) -ida_merge.MH_UI_INDENT (variable) -ida_merge.MH_UI_NODETAILS (variable) -ida_merge.MH_UI_SPLITNAME (variable) -ida_merge.NDS_BLOB (variable) -ida_merge.NDS_EV_FUNC (variable) -ida_merge.NDS_EV_RANGE (variable) -ida_merge.NDS_INC (variable) -ida_merge.NDS_IS_BOOL (variable) -ida_merge.NDS_IS_EA (variable) -ida_merge.NDS_IS_RELATIVE (variable) -ida_merge.NDS_IS_STR (variable) -ida_merge.NDS_MAP_IDX (variable) -ida_merge.NDS_MAP_VAL (variable) -ida_merge.NDS_SUPVAL (variable) -ida_merge.NDS_VAL8 (variable) -ida_merge.create_nodeval_merge_handler (function) -ida_merge.create_nodeval_merge_handlers (function) -ida_merge.destroy_moddata_merge_handlers (function) -ida_merge.get_ea_diffpos_name (function) -ida_merge.is_diff_merge_mode (function) -ida_merge.item_block_locator_t (class) -ida_merge.item_block_locator_t.__disown__ (method) -ida_merge.item_block_locator_t.__init__ (method) -ida_merge.item_block_locator_t.get_block_head (method) -ida_merge.item_block_locator_t.setup_blocks (method) -ida_merge.merge_data_t (class) -ida_merge.merge_data_t.__init__ (method) -ida_merge.merge_data_t.add_event_handler (method) -ida_merge.merge_data_t.base_id (method) -ida_merge.merge_data_t.compare_merging_tifs (method) -ida_merge.merge_data_t.dbctx_ids (variable) -ida_merge.merge_data_t.ev_handlers (variable) -ida_merge.merge_data_t.get_block_head (method) -ida_merge.merge_data_t.has_existing_node (method) -ida_merge.merge_data_t.local_id (method) -ida_merge.merge_data_t.map_privrange_id (method) -ida_merge.merge_data_t.map_tinfo (method) -ida_merge.merge_data_t.nbases (variable) -ida_merge.merge_data_t.remote_id (method) -ida_merge.merge_data_t.remove_event_handler (method) -ida_merge.merge_data_t.set_dbctx_ids (method) -ida_merge.merge_data_t.setup_blocks (method) -ida_merge.merge_handler_params_t (class) -ida_merge.merge_handler_params_t.__init__ (method) -ida_merge.merge_handler_params_t.insert_after (variable) -ida_merge.merge_handler_params_t.kind (variable) -ida_merge.merge_handler_params_t.ui_complex_details (method) -ida_merge.merge_handler_params_t.ui_complex_name (method) -ida_merge.merge_handler_params_t.ui_dp_shortname (method) -ida_merge.merge_handler_params_t.ui_has_details (method) -ida_merge.merge_handler_params_t.ui_indent (method) -ida_merge.merge_handler_params_t.ui_linediff (method) -ida_merge.merge_handler_params_t.ui_split_char (method) -ida_merge.merge_handler_params_t.ui_split_str (method) -ida_merge.merge_node_helper_t (class) -ida_merge.merge_node_helper_t.__disown__ (method) -ida_merge.merge_node_helper_t.__init__ (method) -ida_merge.merge_node_helper_t.append_eavec (method) -ida_merge.merge_node_helper_t.get_column_headers (method) -ida_merge.merge_node_helper_t.get_netnode (method) -ida_merge.merge_node_helper_t.is_mergeable (method) -ida_merge.merge_node_helper_t.map_scalar (method) -ida_merge.merge_node_helper_t.map_string (method) -ida_merge.merge_node_helper_t.print_entry_details (method) -ida_merge.merge_node_helper_t.print_entry_name (method) -ida_merge.merge_node_helper_t.refresh (method) -ida_merge.merge_node_helper_t_append_eavec (function) -ida_merge.merge_node_info_t (class) -ida_merge.merge_node_info_t.__init__ (method) -ida_merge.merge_node_info_t.name (variable) -ida_merge.merge_node_info_t.nds_flags (variable) -ida_merge.merge_node_info_t.tag (variable) -ida_merge.moddata_diff_helper_t (class) -ida_merge.moddata_diff_helper_t.__disown__ (method) -ida_merge.moddata_diff_helper_t.__init__ (method) -ida_merge.moddata_diff_helper_t.additional_mh_flags (variable) -ida_merge.moddata_diff_helper_t.fields (variable) -ida_merge.moddata_diff_helper_t.get_struc_ptr (method) -ida_merge.moddata_diff_helper_t.merge_ending (method) -ida_merge.moddata_diff_helper_t.merge_starting (method) -ida_merge.moddata_diff_helper_t.module_name (variable) -ida_merge.moddata_diff_helper_t.netnode_name (variable) -ida_merge.moddata_diff_helper_t.nfields (variable) -ida_merge.moddata_diff_helper_t.print_diffpos_details (method) -ida_merge.moddata_diff_helper_t.str2val (method) -ida_merge.moddata_diff_helper_t.val2str (method) +ida_hexrays +ida_hexrays.ACFL_BLKOPT +ida_hexrays.ACFL_GLBDEL +ida_hexrays.ACFL_GLBPROP +ida_hexrays.ACFL_GUESS +ida_hexrays.ACFL_LOCOPT +ida_hexrays.ALLOW_UNUSED_LABELS +ida_hexrays.ANCHOR_BLKCMT +ida_hexrays.ANCHOR_CITEM +ida_hexrays.ANCHOR_ITP +ida_hexrays.ANCHOR_LVAR +ida_hexrays.ANY_FPSIZE +ida_hexrays.ANY_REGSIZE +ida_hexrays.BLT_0WAY +ida_hexrays.BLT_1WAY +ida_hexrays.BLT_2WAY +ida_hexrays.BLT_NONE +ida_hexrays.BLT_NWAY +ida_hexrays.BLT_STOP +ida_hexrays.BLT_XTRN +ida_hexrays.CALC_CURLY_BRACES +ida_hexrays.CFL_FINAL +ida_hexrays.CFL_HELPER +ida_hexrays.CFL_NORET +ida_hexrays.CFS_BOUNDS +ida_hexrays.CFS_LOCKED +ida_hexrays.CFS_LVARS_HIDDEN +ida_hexrays.CFS_TEXT +ida_hexrays.CHF_FAKE +ida_hexrays.CHF_INITED +ida_hexrays.CHF_OVER +ida_hexrays.CHF_PASSTHRU +ida_hexrays.CHF_REPLACED +ida_hexrays.CHF_TERM +ida_hexrays.CIT_COLLAPSED +ida_hexrays.CMAT_BUILT +ida_hexrays.CMAT_CASTED +ida_hexrays.CMAT_CPA +ida_hexrays.CMAT_FINAL +ida_hexrays.CMAT_NICE +ida_hexrays.CMAT_TRANS1 +ida_hexrays.CMAT_TRANS2 +ida_hexrays.CMAT_TRANS3 +ida_hexrays.CMAT_ZERO +ida_hexrays.CMT_ALL +ida_hexrays.CMT_BLOCK1 +ida_hexrays.CMT_BLOCK2 +ida_hexrays.CMT_FUNC +ida_hexrays.CMT_LVAR +ida_hexrays.CMT_NONE +ida_hexrays.CMT_TAIL +ida_hexrays.CPBLK_FAST +ida_hexrays.CPBLK_MINREF +ida_hexrays.CPBLK_OPTJMP +ida_hexrays.CV_FAST +ida_hexrays.CV_INSNS +ida_hexrays.CV_PARENTS +ida_hexrays.CV_POST +ida_hexrays.CV_PRUNE +ida_hexrays.CV_RESTART +ida_hexrays.DECOMP_ALL_BLKS +ida_hexrays.DECOMP_GXREFS_DEFLT +ida_hexrays.DECOMP_GXREFS_FORCE +ida_hexrays.DECOMP_GXREFS_NOUPD +ida_hexrays.DECOMP_NO_CACHE +ida_hexrays.DECOMP_NO_FRAME +ida_hexrays.DECOMP_NO_HIDE +ida_hexrays.DECOMP_NO_WAIT +ida_hexrays.DECOMP_OUTLINE +ida_hexrays.DECOMP_VOID_MBA +ida_hexrays.DECOMP_WARNINGS +ida_hexrays.DecompilationFailure +ida_hexrays.EQ_CMPDEST +ida_hexrays.EQ_IGNCODE +ida_hexrays.EQ_IGNSIZE +ida_hexrays.EQ_OPTINSN +ida_hexrays.EXFL_ALL +ida_hexrays.EXFL_ALONE +ida_hexrays.EXFL_CPADONE +ida_hexrays.EXFL_CSTR +ida_hexrays.EXFL_FPOP +ida_hexrays.EXFL_JUMPOUT +ida_hexrays.EXFL_LVALUE +ida_hexrays.EXFL_PARTIAL +ida_hexrays.EXFL_UNDEF +ida_hexrays.EXFL_VFTABLE +ida_hexrays.FCI_DEAD +ida_hexrays.FCI_EXPLOCS +ida_hexrays.FCI_FINAL +ida_hexrays.FCI_HASCALL +ida_hexrays.FCI_HASFMT +ida_hexrays.FCI_NORET +ida_hexrays.FCI_NOSIDE +ida_hexrays.FCI_PROP +ida_hexrays.FCI_PURE +ida_hexrays.FCI_SPLOK +ida_hexrays.FD_BACKWARD +ida_hexrays.FD_DEF +ida_hexrays.FD_DIRTY +ida_hexrays.FD_FORWARD +ida_hexrays.FD_USE +ida_hexrays.FORBID_UNUSED_LABELS +ida_hexrays.GCA_ALLOC +ida_hexrays.GCA_EMPTY +ida_hexrays.GCA_NALLOC +ida_hexrays.GCA_OFIRST +ida_hexrays.GCA_OLAST +ida_hexrays.GCA_SPEC +ida_hexrays.GCO_DEF +ida_hexrays.GCO_REG +ida_hexrays.GCO_STK +ida_hexrays.GCO_USE +ida_hexrays.GC_ASR +ida_hexrays.GC_DIRTY_ALL +ida_hexrays.GC_END +ida_hexrays.GC_REGS_AND_STKVARS +ida_hexrays.GC_XDSU +ida_hexrays.GLN_ALL +ida_hexrays.GLN_CURRENT +ida_hexrays.GLN_GOTO_TARGET +ida_hexrays.Hexrays_Hooks +ida_hexrays.Hexrays_Hooks.__disown__ +ida_hexrays.Hexrays_Hooks.__init__ +ida_hexrays.Hexrays_Hooks.begin_inlining +ida_hexrays.Hexrays_Hooks.build_callinfo +ida_hexrays.Hexrays_Hooks.callinfo_built +ida_hexrays.Hexrays_Hooks.calls_done +ida_hexrays.Hexrays_Hooks.close_pseudocode +ida_hexrays.Hexrays_Hooks.cmt_changed +ida_hexrays.Hexrays_Hooks.collect_warnings +ida_hexrays.Hexrays_Hooks.combine +ida_hexrays.Hexrays_Hooks.create_hint +ida_hexrays.Hexrays_Hooks.curpos +ida_hexrays.Hexrays_Hooks.double_click +ida_hexrays.Hexrays_Hooks.flowchart +ida_hexrays.Hexrays_Hooks.func_printed +ida_hexrays.Hexrays_Hooks.glbopt +ida_hexrays.Hexrays_Hooks.hook +ida_hexrays.Hexrays_Hooks.inlined_func +ida_hexrays.Hexrays_Hooks.inlining_func +ida_hexrays.Hexrays_Hooks.interr +ida_hexrays.Hexrays_Hooks.keyboard +ida_hexrays.Hexrays_Hooks.locopt +ida_hexrays.Hexrays_Hooks.lvar_cmt_changed +ida_hexrays.Hexrays_Hooks.lvar_mapping_changed +ida_hexrays.Hexrays_Hooks.lvar_name_changed +ida_hexrays.Hexrays_Hooks.lvar_type_changed +ida_hexrays.Hexrays_Hooks.maturity +ida_hexrays.Hexrays_Hooks.microcode +ida_hexrays.Hexrays_Hooks.open_pseudocode +ida_hexrays.Hexrays_Hooks.populating_popup +ida_hexrays.Hexrays_Hooks.pre_structural +ida_hexrays.Hexrays_Hooks.prealloc +ida_hexrays.Hexrays_Hooks.preoptimized +ida_hexrays.Hexrays_Hooks.print_func +ida_hexrays.Hexrays_Hooks.prolog +ida_hexrays.Hexrays_Hooks.refresh_pseudocode +ida_hexrays.Hexrays_Hooks.resolve_stkaddrs +ida_hexrays.Hexrays_Hooks.right_click +ida_hexrays.Hexrays_Hooks.stkpnts +ida_hexrays.Hexrays_Hooks.structural +ida_hexrays.Hexrays_Hooks.switch_pseudocode +ida_hexrays.Hexrays_Hooks.text_ready +ida_hexrays.Hexrays_Hooks.unhook +ida_hexrays.INLINE_DONTCOPY +ida_hexrays.INLINE_EXTFRAME +ida_hexrays.IPROP_ASSERT +ida_hexrays.IPROP_CLNPOP +ida_hexrays.IPROP_COMBINED +ida_hexrays.IPROP_DONT_COMB +ida_hexrays.IPROP_DONT_PROP +ida_hexrays.IPROP_EXTSTX +ida_hexrays.IPROP_FARCALL +ida_hexrays.IPROP_FPINSN +ida_hexrays.IPROP_IGNLOWSRC +ida_hexrays.IPROP_INV_JX +ida_hexrays.IPROP_MBARRIER +ida_hexrays.IPROP_MULTI_MOV +ida_hexrays.IPROP_OPTIONAL +ida_hexrays.IPROP_PERSIST +ida_hexrays.IPROP_SPLIT +ida_hexrays.IPROP_SPLIT1 +ida_hexrays.IPROP_SPLIT2 +ida_hexrays.IPROP_SPLIT4 +ida_hexrays.IPROP_SPLIT8 +ida_hexrays.IPROP_TAILCALL +ida_hexrays.IPROP_UNMERGED +ida_hexrays.IPROP_UNPAIRED +ida_hexrays.IPROP_WAS_NORET +ida_hexrays.IPROP_WILDMATCH +ida_hexrays.ITP_ARG1 +ida_hexrays.ITP_ASM +ida_hexrays.ITP_BLOCK1 +ida_hexrays.ITP_BLOCK2 +ida_hexrays.ITP_BRACE2 +ida_hexrays.ITP_CASE +ida_hexrays.ITP_COLON +ida_hexrays.ITP_CURLY1 +ida_hexrays.ITP_CURLY2 +ida_hexrays.ITP_DO +ida_hexrays.ITP_ELSE +ida_hexrays.ITP_EMPTY +ida_hexrays.ITP_SEMI +ida_hexrays.ITP_SIGN +ida_hexrays.ITP_TRY +ida_hexrays.LOCOPT_ALL +ida_hexrays.LOCOPT_REFINE +ida_hexrays.LOCOPT_REFINE2 +ida_hexrays.LVINF_KEEP +ida_hexrays.LVINF_NOMAP +ida_hexrays.LVINF_NOPTR +ida_hexrays.LVINF_SPLIT +ida_hexrays.LVINF_UNUSED +ida_hexrays.MBA2_ARGIDX_OK +ida_hexrays.MBA2_ARGIDX_SORTED +ida_hexrays.MBA2_CODE16_BIT +ida_hexrays.MBA2_DONT_VERIFY +ida_hexrays.MBA2_HAS_OUTLINES +ida_hexrays.MBA2_IS_CTR +ida_hexrays.MBA2_IS_DTR +ida_hexrays.MBA2_LVARNAMES_OK +ida_hexrays.MBA2_LVARS_RENAMED +ida_hexrays.MBA2_NO_DUP_CALLS +ida_hexrays.MBA2_NO_DUP_LVARS +ida_hexrays.MBA2_NO_FRAME +ida_hexrays.MBA2_OVER_CHAINS +ida_hexrays.MBA2_PROP_COMPLEX +ida_hexrays.MBA2_STACK_RETVAL +ida_hexrays.MBA2_UNDEF_RETVAR +ida_hexrays.MBA2_VALRNG_DONE +ida_hexrays.MBA_ASRPROP +ida_hexrays.MBA_ASRTOK +ida_hexrays.MBA_CALLS +ida_hexrays.MBA_CHVARS +ida_hexrays.MBA_CMBBLK +ida_hexrays.MBA_CMNSTK +ida_hexrays.MBA_COLGDL +ida_hexrays.MBA_DELPAIRS +ida_hexrays.MBA_GLBOPT +ida_hexrays.MBA_INSGDL +ida_hexrays.MBA_LOADED +ida_hexrays.MBA_LVARS0 +ida_hexrays.MBA_LVARS1 +ida_hexrays.MBA_NICE +ida_hexrays.MBA_NOFUNC +ida_hexrays.MBA_NUMADDR +ida_hexrays.MBA_PASSREGS +ida_hexrays.MBA_PATTERN +ida_hexrays.MBA_PRCDEFS +ida_hexrays.MBA_PREOPT +ida_hexrays.MBA_REFINE +ida_hexrays.MBA_RETFP +ida_hexrays.MBA_RETREF +ida_hexrays.MBA_SAVRST +ida_hexrays.MBA_SHORT +ida_hexrays.MBA_SPLINFO +ida_hexrays.MBA_THUNK +ida_hexrays.MBA_VALNUM +ida_hexrays.MBA_WINGR32 +ida_hexrays.MBL_BACKPROP +ida_hexrays.MBL_CALL +ida_hexrays.MBL_COMB +ida_hexrays.MBL_DEAD +ida_hexrays.MBL_DMT64 +ida_hexrays.MBL_DSLOT +ida_hexrays.MBL_EXTFRAME +ida_hexrays.MBL_FAKE +ida_hexrays.MBL_GOTO +ida_hexrays.MBL_INCONST +ida_hexrays.MBL_INLINED +ida_hexrays.MBL_KEEP +ida_hexrays.MBL_LIST +ida_hexrays.MBL_NONFAKE +ida_hexrays.MBL_NORET +ida_hexrays.MBL_PRIV +ida_hexrays.MBL_PROP +ida_hexrays.MBL_PUSH +ida_hexrays.MBL_TCAL +ida_hexrays.MBL_VALRANGES +ida_hexrays.MERR_BADARCH +ida_hexrays.MERR_BADBLK +ida_hexrays.MERR_BADCALL +ida_hexrays.MERR_BADFRAME +ida_hexrays.MERR_BADIDB +ida_hexrays.MERR_BADRANGES +ida_hexrays.MERR_BADSP +ida_hexrays.MERR_BITNESS +ida_hexrays.MERR_BLOCK +ida_hexrays.MERR_BUSY +ida_hexrays.MERR_CANCELED +ida_hexrays.MERR_CLOUD +ida_hexrays.MERR_COMPLEX +ida_hexrays.MERR_DSLOT +ida_hexrays.MERR_EXCEPTION +ida_hexrays.MERR_EXTERN +ida_hexrays.MERR_FARPTR +ida_hexrays.MERR_FUNCSIZE +ida_hexrays.MERR_HUGESTACK +ida_hexrays.MERR_INSN +ida_hexrays.MERR_INTERR +ida_hexrays.MERR_LICENSE +ida_hexrays.MERR_LOOP +ida_hexrays.MERR_LVARS +ida_hexrays.MERR_MEM +ida_hexrays.MERR_OK +ida_hexrays.MERR_ONLY32 +ida_hexrays.MERR_ONLY64 +ida_hexrays.MERR_OVERLAP +ida_hexrays.MERR_PARTINIT +ida_hexrays.MERR_PROLOG +ida_hexrays.MERR_RECDEPTH +ida_hexrays.MERR_REDO +ida_hexrays.MERR_SIZEOF +ida_hexrays.MERR_STOP +ida_hexrays.MERR_SWITCH +ida_hexrays.MERR_UNKTYPE +ida_hexrays.MLI_CLR_FLAGS +ida_hexrays.MLI_CMT +ida_hexrays.MLI_NAME +ida_hexrays.MLI_SET_FLAGS +ida_hexrays.MLI_TYPE +ida_hexrays.MMAT_CALLS +ida_hexrays.MMAT_GENERATED +ida_hexrays.MMAT_GLBOPT1 +ida_hexrays.MMAT_GLBOPT2 +ida_hexrays.MMAT_GLBOPT3 +ida_hexrays.MMAT_LOCOPT +ida_hexrays.MMAT_LVARS +ida_hexrays.MMAT_PREOPTIMIZED +ida_hexrays.MMAT_ZERO +ida_hexrays.MMIDX_ARGS +ida_hexrays.MMIDX_GLBHIGH +ida_hexrays.MMIDX_GLBLOW +ida_hexrays.MMIDX_LVARS +ida_hexrays.MMIDX_RETADDR +ida_hexrays.MMIDX_SHADOW +ida_hexrays.NALT_VD +ida_hexrays.NF_BINVDONE +ida_hexrays.NF_BITNOT +ida_hexrays.NF_FIXED +ida_hexrays.NF_NEGATE +ida_hexrays.NF_NEGDONE +ida_hexrays.NF_VALID +ida_hexrays.NOSIZE +ida_hexrays.NO_CURLY_BRACES +ida_hexrays.NO_SIDEFF +ida_hexrays.ONLY_SIDEFF +ida_hexrays.OPF_NEW_WINDOW +ida_hexrays.OPF_NO_WAIT +ida_hexrays.OPF_REUSE +ida_hexrays.OPF_REUSE_ACTIVE +ida_hexrays.OPROP_CCFLAGS +ida_hexrays.OPROP_FLOAT +ida_hexrays.OPROP_IMPDONE +ida_hexrays.OPROP_LOWADDR +ida_hexrays.OPROP_UDEFVAL +ida_hexrays.OPROP_UDT +ida_hexrays.OPTI_ADDREXPRS +ida_hexrays.OPTI_COMBINSNS +ida_hexrays.OPTI_MINSTKREF +ida_hexrays.OPTI_NO_LDXOPT +ida_hexrays.OPTI_NO_VALRNG +ida_hexrays.RETRIEVE_ALWAYS +ida_hexrays.RETRIEVE_ONCE +ida_hexrays.ROLE_3WAYCMP0 +ida_hexrays.ROLE_3WAYCMP1 +ida_hexrays.ROLE_ABS +ida_hexrays.ROLE_ALLOCA +ida_hexrays.ROLE_BITTEST +ida_hexrays.ROLE_BITTESTANDCOMPLEMENT +ida_hexrays.ROLE_BITTESTANDRESET +ida_hexrays.ROLE_BITTESTANDSET +ida_hexrays.ROLE_BSWAP +ida_hexrays.ROLE_BUG +ida_hexrays.ROLE_CFSUB3 +ida_hexrays.ROLE_CONTAINING_RECORD +ida_hexrays.ROLE_EMPTY +ida_hexrays.ROLE_FASTFAIL +ida_hexrays.ROLE_IS_MUL_OK +ida_hexrays.ROLE_MEMCPY +ida_hexrays.ROLE_MEMSET +ida_hexrays.ROLE_MEMSET32 +ida_hexrays.ROLE_MEMSET64 +ida_hexrays.ROLE_OFSUB3 +ida_hexrays.ROLE_PRESENT +ida_hexrays.ROLE_READFLAGS +ida_hexrays.ROLE_ROL +ida_hexrays.ROLE_ROR +ida_hexrays.ROLE_SATURATED_MUL +ida_hexrays.ROLE_SSE_CMP4 +ida_hexrays.ROLE_SSE_CMP8 +ida_hexrays.ROLE_STRCAT +ida_hexrays.ROLE_STRCPY +ida_hexrays.ROLE_STRLEN +ida_hexrays.ROLE_TAIL +ida_hexrays.ROLE_UNK +ida_hexrays.ROLE_VA_ARG +ida_hexrays.ROLE_VA_COPY +ida_hexrays.ROLE_VA_END +ida_hexrays.ROLE_VA_START +ida_hexrays.ROLE_WCSCAT +ida_hexrays.ROLE_WCSCPY +ida_hexrays.ROLE_WCSLEN +ida_hexrays.ROLE_WMEMCPY +ida_hexrays.ROLE_WMEMSET +ida_hexrays.SHINS_LDXEA +ida_hexrays.SHINS_NUMADDR +ida_hexrays.SHINS_SHORT +ida_hexrays.SHINS_VALNUM +ida_hexrays.ULV_PRECISE_DEFEA +ida_hexrays.USE_CURLY_BRACES +ida_hexrays.USE_KEYBOARD +ida_hexrays.USE_MOUSE +ida_hexrays.VDI_EXPR +ida_hexrays.VDI_FUNC +ida_hexrays.VDI_LVAR +ida_hexrays.VDI_NONE +ida_hexrays.VDI_TAIL +ida_hexrays.VDRUN_APPEND +ida_hexrays.VDRUN_CMDLINE +ida_hexrays.VDRUN_LUMINA +ida_hexrays.VDRUN_MAYSTOP +ida_hexrays.VDRUN_NEWFILE +ida_hexrays.VDRUN_ONLYNEW +ida_hexrays.VDRUN_SENDIDB +ida_hexrays.VDRUN_SILENT +ida_hexrays.VDRUN_STATS +ida_hexrays.VDUI_VALID +ida_hexrays.VDUI_VISIBLE +ida_hexrays.VR_AT_END +ida_hexrays.VR_AT_START +ida_hexrays.VR_EXACT +ida_hexrays.WARN_ADDR_OUTARGS +ida_hexrays.WARN_ARRAY_INARG +ida_hexrays.WARN_BAD_CALL_SP +ida_hexrays.WARN_BAD_FIELD_TYPE +ida_hexrays.WARN_BAD_INSN +ida_hexrays.WARN_BAD_MAPDST +ida_hexrays.WARN_BAD_PURGED +ida_hexrays.WARN_BAD_RETVAR +ida_hexrays.WARN_BAD_SHADOW +ida_hexrays.WARN_BAD_SP +ida_hexrays.WARN_BAD_STD_TYPE +ida_hexrays.WARN_BAD_STKPNT +ida_hexrays.WARN_BAD_STROFF +ida_hexrays.WARN_BAD_VALRNG +ida_hexrays.WARN_BAD_VARSIZE +ida_hexrays.WARN_CBUILD_LOOPS +ida_hexrays.WARN_CR_BADOFF +ida_hexrays.WARN_CR_NOFIELD +ida_hexrays.WARN_DEP_UNK_CALLS +ida_hexrays.WARN_EXP_LINVAR +ida_hexrays.WARN_FIXED_INSN +ida_hexrays.WARN_FRAG_LVAR +ida_hexrays.WARN_GUESSED_TYPE +ida_hexrays.WARN_HUGE_STKOFF +ida_hexrays.WARN_ILL_ELLIPSIS +ida_hexrays.WARN_ILL_FPU_STACK +ida_hexrays.WARN_ILL_FUNCTYPE +ida_hexrays.WARN_ILL_PURGED +ida_hexrays.WARN_JUMPOUT +ida_hexrays.WARN_MAX +ida_hexrays.WARN_MAX_ARGS +ida_hexrays.WARN_MISSED_SWITCH +ida_hexrays.WARN_MUST_RET_FP +ida_hexrays.WARN_NO_SAVE_REST +ida_hexrays.WARN_ODD_ABI +ida_hexrays.WARN_ODD_ADDR_USE +ida_hexrays.WARN_ODD_INPUT_REG +ida_hexrays.WARN_OPT_USELESS_JCND +ida_hexrays.WARN_OPT_VALRNG +ida_hexrays.WARN_OPT_VALRNG2 +ida_hexrays.WARN_OPT_VALRNG3 +ida_hexrays.WARN_RET_LOCREF +ida_hexrays.WARN_SELFREF_PROP +ida_hexrays.WARN_SUBFRAME_OVERFLOW +ida_hexrays.WARN_UNALIGNED_ARG +ida_hexrays.WARN_UNBALANCED_STACK +ida_hexrays.WARN_UNDEF_LVAR +ida_hexrays.WARN_UNINITED_REG +ida_hexrays.WARN_UNSUPP_REG +ida_hexrays.WARN_VARARG_MANY +ida_hexrays.WARN_VARARG_NOSTK +ida_hexrays.WARN_VARARG_REGS +ida_hexrays.WARN_VARARG_TCAL +ida_hexrays.WARN_WIDEN_CHAINS +ida_hexrays.WARN_WOULD_OVERLAP +ida_hexrays.WARN_WRITE_CONST +ida_hexrays.WARN_WRONG_VA_OFF +ida_hexrays.WITH_SIDEFF +ida_hexrays.__cbhooks_t +ida_hexrays.__cbhooks_t.__init__ +ida_hexrays.__cbhooks_t.close_pseudocode +ida_hexrays.__cbhooks_t.create_hint +ida_hexrays.__cbhooks_t.curpos +ida_hexrays.__cbhooks_t.double_click +ida_hexrays.__cbhooks_t.func_printed +ida_hexrays.__cbhooks_t.interr +ida_hexrays.__cbhooks_t.keyboard +ida_hexrays.__cbhooks_t.maturity +ida_hexrays.__cbhooks_t.open_pseudocode +ida_hexrays.__cbhooks_t.populating_popup +ida_hexrays.__cbhooks_t.print_func +ida_hexrays.__cbhooks_t.refresh_pseudocode +ida_hexrays.__cbhooks_t.right_click +ida_hexrays.__cbhooks_t.switch_pseudocode +ida_hexrays.__cbhooks_t.text_ready +ida_hexrays._call_with_transferrable_ownership +ida_hexrays._kludge_force_declare_TPopupMenu +ida_hexrays._ll_call_helper +ida_hexrays._ll_create_helper +ida_hexrays._ll_dereference +ida_hexrays._ll_lnot +ida_hexrays._ll_make_num +ida_hexrays._ll_make_ref +ida_hexrays._ll_new_block +ida_hexrays._map_as_dict +ida_hexrays._map_as_dict._map___contains__ +ida_hexrays._map_as_dict._map___delitem__ +ida_hexrays._map_as_dict._map___getitem__ +ida_hexrays._map_as_dict._map___iter__ +ida_hexrays._map_as_dict._map___setitem__ +ida_hexrays._map_as_dict._map_clear +ida_hexrays._map_as_dict._map_copy +ida_hexrays._map_as_dict._map_get +ida_hexrays._map_as_dict._map_has_key +ida_hexrays._map_as_dict._map_items +ida_hexrays._map_as_dict._map_iteritems +ida_hexrays._map_as_dict._map_iterkeys +ida_hexrays._map_as_dict._map_itervalues +ida_hexrays._map_as_dict._map_keys +ida_hexrays._map_as_dict._map_pop +ida_hexrays._map_as_dict._map_popitem +ida_hexrays._map_as_dict._map_setdefault +ida_hexrays._map_as_dict._map_values +ida_hexrays.accepts_small_udts +ida_hexrays.accepts_udts +ida_hexrays.arglocs_overlap +ida_hexrays.array_of_bitsets +ida_hexrays.array_of_bitsets.__eq__ +ida_hexrays.array_of_bitsets.__getitem__ +ida_hexrays.array_of_bitsets.__init__ +ida_hexrays.array_of_bitsets.__len__ +ida_hexrays.array_of_bitsets.__ne__ +ida_hexrays.array_of_bitsets.__setitem__ +ida_hexrays.array_of_bitsets._del +ida_hexrays.array_of_bitsets.add_unique +ida_hexrays.array_of_bitsets.append +ida_hexrays.array_of_bitsets.at +ida_hexrays.array_of_bitsets.begin +ida_hexrays.array_of_bitsets.capacity +ida_hexrays.array_of_bitsets.clear +ida_hexrays.array_of_bitsets.empty +ida_hexrays.array_of_bitsets.end +ida_hexrays.array_of_bitsets.erase +ida_hexrays.array_of_bitsets.extend +ida_hexrays.array_of_bitsets.extract +ida_hexrays.array_of_bitsets.find +ida_hexrays.array_of_bitsets.grow +ida_hexrays.array_of_bitsets.has +ida_hexrays.array_of_bitsets.inject +ida_hexrays.array_of_bitsets.insert +ida_hexrays.array_of_bitsets.pop_back +ida_hexrays.array_of_bitsets.push_back +ida_hexrays.array_of_bitsets.qclear +ida_hexrays.array_of_bitsets.reserve +ida_hexrays.array_of_bitsets.resize +ida_hexrays.array_of_bitsets.size +ida_hexrays.array_of_bitsets.swap +ida_hexrays.array_of_bitsets.truncate +ida_hexrays.array_of_ivlsets +ida_hexrays.array_of_ivlsets.__eq__ +ida_hexrays.array_of_ivlsets.__getitem__ +ida_hexrays.array_of_ivlsets.__init__ +ida_hexrays.array_of_ivlsets.__len__ +ida_hexrays.array_of_ivlsets.__ne__ +ida_hexrays.array_of_ivlsets.__setitem__ +ida_hexrays.array_of_ivlsets._del +ida_hexrays.array_of_ivlsets.add_unique +ida_hexrays.array_of_ivlsets.append +ida_hexrays.array_of_ivlsets.at +ida_hexrays.array_of_ivlsets.begin +ida_hexrays.array_of_ivlsets.capacity +ida_hexrays.array_of_ivlsets.clear +ida_hexrays.array_of_ivlsets.empty +ida_hexrays.array_of_ivlsets.end +ida_hexrays.array_of_ivlsets.erase +ida_hexrays.array_of_ivlsets.extend +ida_hexrays.array_of_ivlsets.extract +ida_hexrays.array_of_ivlsets.find +ida_hexrays.array_of_ivlsets.grow +ida_hexrays.array_of_ivlsets.has +ida_hexrays.array_of_ivlsets.inject +ida_hexrays.array_of_ivlsets.insert +ida_hexrays.array_of_ivlsets.pop_back +ida_hexrays.array_of_ivlsets.push_back +ida_hexrays.array_of_ivlsets.qclear +ida_hexrays.array_of_ivlsets.reserve +ida_hexrays.array_of_ivlsets.resize +ida_hexrays.array_of_ivlsets.size +ida_hexrays.array_of_ivlsets.swap +ida_hexrays.array_of_ivlsets.truncate +ida_hexrays.array_of_node_bitset_t +ida_hexrays.array_of_node_bitset_t.__init__ +ida_hexrays.asgop +ida_hexrays.asgop_revert +ida_hexrays.bit_bound_t +ida_hexrays.bit_bound_t.__init__ +ida_hexrays.bitset_t +ida_hexrays.bitset_t.__eq__ +ida_hexrays.bitset_t.__ge__ +ida_hexrays.bitset_t.__gt__ +ida_hexrays.bitset_t.__init__ +ida_hexrays.bitset_t.__iter__ +ida_hexrays.bitset_t.__le__ +ida_hexrays.bitset_t.__lt__ +ida_hexrays.bitset_t.__ne__ +ida_hexrays.bitset_t.add +ida_hexrays.bitset_t.back +ida_hexrays.bitset_t.begin +ida_hexrays.bitset_t.clear +ida_hexrays.bitset_t.compare +ida_hexrays.bitset_t.copy +ida_hexrays.bitset_t.count +ida_hexrays.bitset_t.cut_at +ida_hexrays.bitset_t.dstr +ida_hexrays.bitset_t.empty +ida_hexrays.bitset_t.end +ida_hexrays.bitset_t.fill_with_ones +ida_hexrays.bitset_t.front +ida_hexrays.bitset_t.has +ida_hexrays.bitset_t.has_all +ida_hexrays.bitset_t.has_any +ida_hexrays.bitset_t.has_common +ida_hexrays.bitset_t.inc +ida_hexrays.bitset_t.includes +ida_hexrays.bitset_t.intersect +ida_hexrays.bitset_t.is_subset_of +ida_hexrays.bitset_t.itat +ida_hexrays.bitset_t.itv +ida_hexrays.bitset_t.last +ida_hexrays.bitset_t.shift_down +ida_hexrays.bitset_t.sub +ida_hexrays.bitset_t.swap +ida_hexrays.block_chains_begin +ida_hexrays.block_chains_clear +ida_hexrays.block_chains_end +ida_hexrays.block_chains_erase +ida_hexrays.block_chains_find +ida_hexrays.block_chains_free +ida_hexrays.block_chains_get +ida_hexrays.block_chains_insert +ida_hexrays.block_chains_iterator_t +ida_hexrays.block_chains_iterator_t.__eq__ +ida_hexrays.block_chains_iterator_t.__init__ +ida_hexrays.block_chains_iterator_t.__ne__ +ida_hexrays.block_chains_new +ida_hexrays.block_chains_next +ida_hexrays.block_chains_prev +ida_hexrays.block_chains_size +ida_hexrays.block_chains_t +ida_hexrays.block_chains_t.__init__ +ida_hexrays.block_chains_t._print +ida_hexrays.block_chains_t.dstr +ida_hexrays.block_chains_t.get_chain +ida_hexrays.block_chains_t.get_reg_chain +ida_hexrays.block_chains_t.get_stk_chain +ida_hexrays.block_chains_vec_t +ida_hexrays.block_chains_vec_t.__getitem__ +ida_hexrays.block_chains_vec_t.__init__ +ida_hexrays.block_chains_vec_t.__len__ +ida_hexrays.block_chains_vec_t.__setitem__ +ida_hexrays.block_chains_vec_t.append +ida_hexrays.block_chains_vec_t.at +ida_hexrays.block_chains_vec_t.begin +ida_hexrays.block_chains_vec_t.capacity +ida_hexrays.block_chains_vec_t.clear +ida_hexrays.block_chains_vec_t.empty +ida_hexrays.block_chains_vec_t.end +ida_hexrays.block_chains_vec_t.erase +ida_hexrays.block_chains_vec_t.extend +ida_hexrays.block_chains_vec_t.extract +ida_hexrays.block_chains_vec_t.grow +ida_hexrays.block_chains_vec_t.inject +ida_hexrays.block_chains_vec_t.insert +ida_hexrays.block_chains_vec_t.pop_back +ida_hexrays.block_chains_vec_t.push_back +ida_hexrays.block_chains_vec_t.qclear +ida_hexrays.block_chains_vec_t.reserve +ida_hexrays.block_chains_vec_t.resize +ida_hexrays.block_chains_vec_t.size +ida_hexrays.block_chains_vec_t.swap +ida_hexrays.block_chains_vec_t.truncate +ida_hexrays.boundaries_begin +ida_hexrays.boundaries_clear +ida_hexrays.boundaries_end +ida_hexrays.boundaries_erase +ida_hexrays.boundaries_find +ida_hexrays.boundaries_first +ida_hexrays.boundaries_free +ida_hexrays.boundaries_insert +ida_hexrays.boundaries_iterator_t +ida_hexrays.boundaries_iterator_t.__eq__ +ida_hexrays.boundaries_iterator_t.__init__ +ida_hexrays.boundaries_iterator_t.__ne__ +ida_hexrays.boundaries_new +ida_hexrays.boundaries_next +ida_hexrays.boundaries_prev +ida_hexrays.boundaries_second +ida_hexrays.boundaries_size +ida_hexrays.boundaries_t +ida_hexrays.boundaries_t.__init__ +ida_hexrays.boundaries_t.at +ida_hexrays.boundaries_t.size +ida_hexrays.call_helper +ida_hexrays.carg_t +ida_hexrays.carg_t.__eq__ +ida_hexrays.carg_t.__ge__ +ida_hexrays.carg_t.__gt__ +ida_hexrays.carg_t.__init__ +ida_hexrays.carg_t.__le__ +ida_hexrays.carg_t.__lt__ +ida_hexrays.carg_t.__ne__ +ida_hexrays.carg_t.compare +ida_hexrays.carg_t.consume_cexpr +ida_hexrays.carg_t.formal_type +ida_hexrays.carg_t.is_vararg +ida_hexrays.carglist_t +ida_hexrays.carglist_t.__eq__ +ida_hexrays.carglist_t.__ge__ +ida_hexrays.carglist_t.__gt__ +ida_hexrays.carglist_t.__init__ +ida_hexrays.carglist_t.__le__ +ida_hexrays.carglist_t.__lt__ +ida_hexrays.carglist_t.__ne__ +ida_hexrays.carglist_t.compare +ida_hexrays.carglist_t.flags +ida_hexrays.carglist_t.functype +ida_hexrays.casm_t +ida_hexrays.casm_t.__eq__ +ida_hexrays.casm_t.__ge__ +ida_hexrays.casm_t.__gt__ +ida_hexrays.casm_t.__init__ +ida_hexrays.casm_t.__le__ +ida_hexrays.casm_t.__lt__ +ida_hexrays.casm_t.__ne__ +ida_hexrays.casm_t.compare +ida_hexrays.casm_t.one_insn +ida_hexrays.catchexpr_t +ida_hexrays.catchexpr_t.__eq__ +ida_hexrays.catchexpr_t.__ge__ +ida_hexrays.catchexpr_t.__gt__ +ida_hexrays.catchexpr_t.__init__ +ida_hexrays.catchexpr_t.__le__ +ida_hexrays.catchexpr_t.__lt__ +ida_hexrays.catchexpr_t.__ne__ +ida_hexrays.catchexpr_t.compare +ida_hexrays.catchexpr_t.fake_type +ida_hexrays.catchexpr_t.is_catch_all +ida_hexrays.catchexpr_t.obj +ida_hexrays.catchexpr_t.swap +ida_hexrays.cblock_pos_t +ida_hexrays.cblock_pos_t.__init__ +ida_hexrays.cblock_pos_t.insn +ida_hexrays.cblock_pos_t.is_first_insn +ida_hexrays.cblock_pos_t.prev_insn +ida_hexrays.cblock_posvec_t +ida_hexrays.cblock_posvec_t.__getitem__ +ida_hexrays.cblock_posvec_t.__init__ +ida_hexrays.cblock_posvec_t.__len__ +ida_hexrays.cblock_posvec_t.__setitem__ +ida_hexrays.cblock_posvec_t.append +ida_hexrays.cblock_posvec_t.at +ida_hexrays.cblock_posvec_t.begin +ida_hexrays.cblock_posvec_t.capacity +ida_hexrays.cblock_posvec_t.clear +ida_hexrays.cblock_posvec_t.empty +ida_hexrays.cblock_posvec_t.end +ida_hexrays.cblock_posvec_t.erase +ida_hexrays.cblock_posvec_t.extend +ida_hexrays.cblock_posvec_t.extract +ida_hexrays.cblock_posvec_t.grow +ida_hexrays.cblock_posvec_t.inject +ida_hexrays.cblock_posvec_t.insert +ida_hexrays.cblock_posvec_t.pop_back +ida_hexrays.cblock_posvec_t.push_back +ida_hexrays.cblock_posvec_t.qclear +ida_hexrays.cblock_posvec_t.reserve +ida_hexrays.cblock_posvec_t.resize +ida_hexrays.cblock_posvec_t.size +ida_hexrays.cblock_posvec_t.swap +ida_hexrays.cblock_posvec_t.truncate +ida_hexrays.cblock_t +ida_hexrays.cblock_t.__eq__ +ida_hexrays.cblock_t.__ge__ +ida_hexrays.cblock_t.__gt__ +ida_hexrays.cblock_t.__init__ +ida_hexrays.cblock_t.__le__ +ida_hexrays.cblock_t.__lt__ +ida_hexrays.cblock_t.__ne__ +ida_hexrays.cblock_t._deregister +ida_hexrays.cblock_t.compare +ida_hexrays.ccase_t +ida_hexrays.ccase_t.__eq__ +ida_hexrays.ccase_t.__ge__ +ida_hexrays.ccase_t.__gt__ +ida_hexrays.ccase_t.__init__ +ida_hexrays.ccase_t.__le__ +ida_hexrays.ccase_t.__lt__ +ida_hexrays.ccase_t.__ne__ +ida_hexrays.ccase_t.compare +ida_hexrays.ccase_t.size +ida_hexrays.ccase_t.value +ida_hexrays.ccase_t.values +ida_hexrays.ccases_t +ida_hexrays.ccases_t.__eq__ +ida_hexrays.ccases_t.__ge__ +ida_hexrays.ccases_t.__gt__ +ida_hexrays.ccases_t.__init__ +ida_hexrays.ccases_t.__le__ +ida_hexrays.ccases_t.__lt__ +ida_hexrays.ccases_t.__ne__ +ida_hexrays.ccases_t.compare +ida_hexrays.ccatch_t +ida_hexrays.ccatch_t.__eq__ +ida_hexrays.ccatch_t.__ge__ +ida_hexrays.ccatch_t.__gt__ +ida_hexrays.ccatch_t.__init__ +ida_hexrays.ccatch_t.__le__ +ida_hexrays.ccatch_t.__lt__ +ida_hexrays.ccatch_t.__ne__ +ida_hexrays.ccatch_t.compare +ida_hexrays.ccatch_t.is_catch_all +ida_hexrays.ccatch_t.swap +ida_hexrays.cdg_insn_iterator_t +ida_hexrays.cdg_insn_iterator_t.__init__ +ida_hexrays.cdg_insn_iterator_t.dslot_with_xrefs +ida_hexrays.cdg_insn_iterator_t.has_dslot +ida_hexrays.cdg_insn_iterator_t.is_severed_dslot +ida_hexrays.cdg_insn_iterator_t.next +ida_hexrays.cdg_insn_iterator_t.ok +ida_hexrays.cdg_insn_iterator_t.start +ida_hexrays.cdo_t +ida_hexrays.cdo_t.__eq__ +ida_hexrays.cdo_t.__ge__ +ida_hexrays.cdo_t.__gt__ +ida_hexrays.cdo_t.__init__ +ida_hexrays.cdo_t.__le__ +ida_hexrays.cdo_t.__lt__ +ida_hexrays.cdo_t.__ne__ +ida_hexrays.cdo_t.compare +ida_hexrays.ceinsn_t +ida_hexrays.ceinsn_t.__init__ +ida_hexrays.ceinsn_t.expr +ida_hexrays.cexpr_operands +ida_hexrays.cexpr_t +ida_hexrays.cexpr_t.__eq__ +ida_hexrays.cexpr_t.__ge__ +ida_hexrays.cexpr_t.__gt__ +ida_hexrays.cexpr_t.__init__ +ida_hexrays.cexpr_t.__le__ +ida_hexrays.cexpr_t.__lt__ +ida_hexrays.cexpr_t.__ne__ +ida_hexrays.cexpr_t._deregister +ida_hexrays.cexpr_t._get_a +ida_hexrays.cexpr_t._get_fpc +ida_hexrays.cexpr_t._get_helper +ida_hexrays.cexpr_t._get_insn +ida_hexrays.cexpr_t._get_m +ida_hexrays.cexpr_t._get_n +ida_hexrays.cexpr_t._get_obj_ea +ida_hexrays.cexpr_t._get_ptrsize +ida_hexrays.cexpr_t._get_refwidth +ida_hexrays.cexpr_t._get_string +ida_hexrays.cexpr_t._get_x +ida_hexrays.cexpr_t._get_y +ida_hexrays.cexpr_t._get_z +ida_hexrays.cexpr_t._register +ida_hexrays.cexpr_t._replace_by +ida_hexrays.cexpr_t._set_a +ida_hexrays.cexpr_t._set_fpc +ida_hexrays.cexpr_t._set_helper +ida_hexrays.cexpr_t._set_insn +ida_hexrays.cexpr_t._set_m +ida_hexrays.cexpr_t._set_n +ida_hexrays.cexpr_t._set_obj_ea +ida_hexrays.cexpr_t._set_ptrsize +ida_hexrays.cexpr_t._set_refwidth +ida_hexrays.cexpr_t._set_string +ida_hexrays.cexpr_t._set_x +ida_hexrays.cexpr_t._set_y +ida_hexrays.cexpr_t._set_z +ida_hexrays.cexpr_t.a +ida_hexrays.cexpr_t.assign +ida_hexrays.cexpr_t.calc_type +ida_hexrays.cexpr_t.cleanup +ida_hexrays.cexpr_t.compare +ida_hexrays.cexpr_t.contains_comma +ida_hexrays.cexpr_t.contains_comma_or_insn_or_label +ida_hexrays.cexpr_t.contains_insn +ida_hexrays.cexpr_t.contains_insn_or_label +ida_hexrays.cexpr_t.contains_operator +ida_hexrays.cexpr_t.cpadone +ida_hexrays.cexpr_t.dstr +ida_hexrays.cexpr_t.equal_effect +ida_hexrays.cexpr_t.exflags +ida_hexrays.cexpr_t.find_num_op +ida_hexrays.cexpr_t.find_op +ida_hexrays.cexpr_t.fpc +ida_hexrays.cexpr_t.get_1num_op +ida_hexrays.cexpr_t.get_const_value +ida_hexrays.cexpr_t.get_high_nbit_bound +ida_hexrays.cexpr_t.get_low_nbit_bound +ida_hexrays.cexpr_t.get_ptr_or_array +ida_hexrays.cexpr_t.get_type_sign +ida_hexrays.cexpr_t.get_v +ida_hexrays.cexpr_t.has_side_effects +ida_hexrays.cexpr_t.helper +ida_hexrays.cexpr_t.insn +ida_hexrays.cexpr_t.is_call_arg_of +ida_hexrays.cexpr_t.is_call_object_of +ida_hexrays.cexpr_t.is_child_of +ida_hexrays.cexpr_t.is_const_value +ida_hexrays.cexpr_t.is_cstr +ida_hexrays.cexpr_t.is_fpop +ida_hexrays.cexpr_t.is_jumpout +ida_hexrays.cexpr_t.is_negative_const +ida_hexrays.cexpr_t.is_nice_cond +ida_hexrays.cexpr_t.is_nice_expr +ida_hexrays.cexpr_t.is_non_negative_const +ida_hexrays.cexpr_t.is_non_zero_const +ida_hexrays.cexpr_t.is_odd_lvalue +ida_hexrays.cexpr_t.is_type_signed +ida_hexrays.cexpr_t.is_type_unsigned +ida_hexrays.cexpr_t.is_undef_val +ida_hexrays.cexpr_t.is_vftable +ida_hexrays.cexpr_t.is_zero_const +ida_hexrays.cexpr_t.m +ida_hexrays.cexpr_t.maybe_ptr +ida_hexrays.cexpr_t.n +ida_hexrays.cexpr_t.numval +ida_hexrays.cexpr_t.obj_ea +ida_hexrays.cexpr_t.print1 +ida_hexrays.cexpr_t.ptrsize +ida_hexrays.cexpr_t.put_number +ida_hexrays.cexpr_t.refwidth +ida_hexrays.cexpr_t.requires_lvalue +ida_hexrays.cexpr_t.set_cpadone +ida_hexrays.cexpr_t.set_v +ida_hexrays.cexpr_t.set_vftable +ida_hexrays.cexpr_t.string +ida_hexrays.cexpr_t.swap +ida_hexrays.cexpr_t.theother +ida_hexrays.cexpr_t.type +ida_hexrays.cexpr_t.v +ida_hexrays.cexpr_t.x +ida_hexrays.cexpr_t.y +ida_hexrays.cexpr_t.z +ida_hexrays.cfor_t +ida_hexrays.cfor_t.__eq__ +ida_hexrays.cfor_t.__ge__ +ida_hexrays.cfor_t.__gt__ +ida_hexrays.cfor_t.__init__ +ida_hexrays.cfor_t.__le__ +ida_hexrays.cfor_t.__lt__ +ida_hexrays.cfor_t.__ne__ +ida_hexrays.cfor_t.compare +ida_hexrays.cfor_t.init +ida_hexrays.cfor_t.step +ida_hexrays.cfunc_parentee_t +ida_hexrays.cfunc_parentee_t.__disown__ +ida_hexrays.cfunc_parentee_t.__init__ +ida_hexrays.cfunc_parentee_t.calc_rvalue_type +ida_hexrays.cfunc_parentee_t.func +ida_hexrays.cfunc_t +ida_hexrays.cfunc_t.__init__ +ida_hexrays.cfunc_t.__str__ +ida_hexrays.cfunc_t.argidx +ida_hexrays.cfunc_t.body +ida_hexrays.cfunc_t.build_c_tree +ida_hexrays.cfunc_t.del_orphan_cmts +ida_hexrays.cfunc_t.entry_ea +ida_hexrays.cfunc_t.find_item_coords +ida_hexrays.cfunc_t.find_label +ida_hexrays.cfunc_t.gather_derefs +ida_hexrays.cfunc_t.get_boundaries +ida_hexrays.cfunc_t.get_eamap +ida_hexrays.cfunc_t.get_func_type +ida_hexrays.cfunc_t.get_line_item +ida_hexrays.cfunc_t.get_lvars +ida_hexrays.cfunc_t.get_pseudocode +ida_hexrays.cfunc_t.get_stkoff_delta +ida_hexrays.cfunc_t.get_user_cmt +ida_hexrays.cfunc_t.get_user_iflags +ida_hexrays.cfunc_t.get_user_union_selection +ida_hexrays.cfunc_t.get_warnings +ida_hexrays.cfunc_t.has_orphan_cmts +ida_hexrays.cfunc_t.hdrlines +ida_hexrays.cfunc_t.locked +ida_hexrays.cfunc_t.maturity +ida_hexrays.cfunc_t.mba +ida_hexrays.cfunc_t.numforms +ida_hexrays.cfunc_t.print_dcl +ida_hexrays.cfunc_t.print_func +ida_hexrays.cfunc_t.refcnt +ida_hexrays.cfunc_t.refresh_func_ctext +ida_hexrays.cfunc_t.release +ida_hexrays.cfunc_t.remove_unused_labels +ida_hexrays.cfunc_t.save_user_cmts +ida_hexrays.cfunc_t.save_user_iflags +ida_hexrays.cfunc_t.save_user_labels +ida_hexrays.cfunc_t.save_user_numforms +ida_hexrays.cfunc_t.save_user_unions +ida_hexrays.cfunc_t.set_user_cmt +ida_hexrays.cfunc_t.set_user_iflags +ida_hexrays.cfunc_t.set_user_union_selection +ida_hexrays.cfunc_t.statebits +ida_hexrays.cfunc_t.treeitems +ida_hexrays.cfunc_t.user_cmts +ida_hexrays.cfunc_t.user_iflags +ida_hexrays.cfunc_t.user_labels +ida_hexrays.cfunc_t.user_unions +ida_hexrays.cfunc_t.verify +ida_hexrays.cfunc_type +ida_hexrays.cfuncptr_t +ida_hexrays.cfuncptr_t.__deref__ +ida_hexrays.cfuncptr_t.__init__ +ida_hexrays.cfuncptr_t.__ptrval__ +ida_hexrays.cfuncptr_t.__ref__ +ida_hexrays.cfuncptr_t.__str__ +ida_hexrays.cfuncptr_t.build_c_tree +ida_hexrays.cfuncptr_t.del_orphan_cmts +ida_hexrays.cfuncptr_t.find_item_coords +ida_hexrays.cfuncptr_t.find_label +ida_hexrays.cfuncptr_t.gather_derefs +ida_hexrays.cfuncptr_t.get_boundaries +ida_hexrays.cfuncptr_t.get_eamap +ida_hexrays.cfuncptr_t.get_func_type +ida_hexrays.cfuncptr_t.get_line_item +ida_hexrays.cfuncptr_t.get_lvars +ida_hexrays.cfuncptr_t.get_pseudocode +ida_hexrays.cfuncptr_t.get_stkoff_delta +ida_hexrays.cfuncptr_t.get_user_cmt +ida_hexrays.cfuncptr_t.get_user_iflags +ida_hexrays.cfuncptr_t.get_user_union_selection +ida_hexrays.cfuncptr_t.get_warnings +ida_hexrays.cfuncptr_t.has_orphan_cmts +ida_hexrays.cfuncptr_t.locked +ida_hexrays.cfuncptr_t.print_dcl +ida_hexrays.cfuncptr_t.print_func +ida_hexrays.cfuncptr_t.refresh_func_ctext +ida_hexrays.cfuncptr_t.release +ida_hexrays.cfuncptr_t.remove_unused_labels +ida_hexrays.cfuncptr_t.reset +ida_hexrays.cfuncptr_t.save_user_cmts +ida_hexrays.cfuncptr_t.save_user_iflags +ida_hexrays.cfuncptr_t.save_user_labels +ida_hexrays.cfuncptr_t.save_user_numforms +ida_hexrays.cfuncptr_t.save_user_unions +ida_hexrays.cfuncptr_t.set_user_cmt +ida_hexrays.cfuncptr_t.set_user_iflags +ida_hexrays.cfuncptr_t.set_user_union_selection +ida_hexrays.cfuncptr_t.verify +ida_hexrays.cgoto_t +ida_hexrays.cgoto_t.__eq__ +ida_hexrays.cgoto_t.__ge__ +ida_hexrays.cgoto_t.__gt__ +ida_hexrays.cgoto_t.__init__ +ida_hexrays.cgoto_t.__le__ +ida_hexrays.cgoto_t.__lt__ +ida_hexrays.cgoto_t.__ne__ +ida_hexrays.cgoto_t.compare +ida_hexrays.cgoto_t.label_num +ida_hexrays.chain_keeper_t +ida_hexrays.chain_keeper_t.__init__ +ida_hexrays.chain_keeper_t.back +ida_hexrays.chain_keeper_t.for_all_chains +ida_hexrays.chain_keeper_t.front +ida_hexrays.chain_t +ida_hexrays.chain_t.__init__ +ida_hexrays.chain_t.__lt__ +ida_hexrays.chain_t._print +ida_hexrays.chain_t.append_list +ida_hexrays.chain_t.clear_varnum +ida_hexrays.chain_t.dstr +ida_hexrays.chain_t.endoff +ida_hexrays.chain_t.flags +ida_hexrays.chain_t.get_reg +ida_hexrays.chain_t.get_stkoff +ida_hexrays.chain_t.includes +ida_hexrays.chain_t.is_fake +ida_hexrays.chain_t.is_inited +ida_hexrays.chain_t.is_overlapped +ida_hexrays.chain_t.is_passreg +ida_hexrays.chain_t.is_reg +ida_hexrays.chain_t.is_replaced +ida_hexrays.chain_t.is_stkoff +ida_hexrays.chain_t.is_term +ida_hexrays.chain_t.key +ida_hexrays.chain_t.overlap +ida_hexrays.chain_t.set_inited +ida_hexrays.chain_t.set_overlapped +ida_hexrays.chain_t.set_replaced +ida_hexrays.chain_t.set_term +ida_hexrays.chain_t.set_value +ida_hexrays.chain_t.varnum +ida_hexrays.chain_t.width +ida_hexrays.chain_visitor_t +ida_hexrays.chain_visitor_t.__disown__ +ida_hexrays.chain_visitor_t.__init__ +ida_hexrays.chain_visitor_t.parent +ida_hexrays.chain_visitor_t.visit_chain +ida_hexrays.change_hexrays_config +ida_hexrays.cif_t +ida_hexrays.cif_t.__eq__ +ida_hexrays.cif_t.__ge__ +ida_hexrays.cif_t.__gt__ +ida_hexrays.cif_t.__init__ +ida_hexrays.cif_t.__le__ +ida_hexrays.cif_t.__lt__ +ida_hexrays.cif_t.__ne__ +ida_hexrays.cif_t.assign +ida_hexrays.cif_t.cleanup +ida_hexrays.cif_t.compare +ida_hexrays.cif_t.ielse +ida_hexrays.cif_t.ithen +ida_hexrays.cinsn_details +ida_hexrays.cinsn_list_t +ida_hexrays.cinsn_list_t.__eq__ +ida_hexrays.cinsn_list_t.__getitem__ +ida_hexrays.cinsn_list_t.__init__ +ida_hexrays.cinsn_list_t.__len__ +ida_hexrays.cinsn_list_t.__ne__ +ida_hexrays.cinsn_list_t.__setitem__ +ida_hexrays.cinsn_list_t.at +ida_hexrays.cinsn_list_t.back +ida_hexrays.cinsn_list_t.begin +ida_hexrays.cinsn_list_t.clear +ida_hexrays.cinsn_list_t.empty +ida_hexrays.cinsn_list_t.end +ida_hexrays.cinsn_list_t.erase +ida_hexrays.cinsn_list_t.find +ida_hexrays.cinsn_list_t.front +ida_hexrays.cinsn_list_t.index +ida_hexrays.cinsn_list_t.insert +ida_hexrays.cinsn_list_t.pop_back +ida_hexrays.cinsn_list_t.pop_front +ida_hexrays.cinsn_list_t.push_back +ida_hexrays.cinsn_list_t.push_front +ida_hexrays.cinsn_list_t.rbegin +ida_hexrays.cinsn_list_t.remove +ida_hexrays.cinsn_list_t.rend +ida_hexrays.cinsn_list_t.size +ida_hexrays.cinsn_list_t.splice +ida_hexrays.cinsn_list_t.swap +ida_hexrays.cinsn_list_t_iterator +ida_hexrays.cinsn_list_t_iterator.__eq__ +ida_hexrays.cinsn_list_t_iterator.__init__ +ida_hexrays.cinsn_list_t_iterator.__ne__ +ida_hexrays.cinsn_list_t_iterator.__next__ +ida_hexrays.cinsn_t +ida_hexrays.cinsn_t.__eq__ +ida_hexrays.cinsn_t.__ge__ +ida_hexrays.cinsn_t.__gt__ +ida_hexrays.cinsn_t.__init__ +ida_hexrays.cinsn_t.__le__ +ida_hexrays.cinsn_t.__lt__ +ida_hexrays.cinsn_t.__ne__ +ida_hexrays.cinsn_t._deregister +ida_hexrays.cinsn_t._get_casm +ida_hexrays.cinsn_t._get_cblock +ida_hexrays.cinsn_t._get_cdo +ida_hexrays.cinsn_t._get_cexpr +ida_hexrays.cinsn_t._get_cfor +ida_hexrays.cinsn_t._get_cgoto +ida_hexrays.cinsn_t._get_cif +ida_hexrays.cinsn_t._get_creturn +ida_hexrays.cinsn_t._get_cswitch +ida_hexrays.cinsn_t._get_cwhile +ida_hexrays.cinsn_t._print +ida_hexrays.cinsn_t._register +ida_hexrays.cinsn_t._replace_by +ida_hexrays.cinsn_t._set_casm +ida_hexrays.cinsn_t._set_cblock +ida_hexrays.cinsn_t._set_cdo +ida_hexrays.cinsn_t._set_cexpr +ida_hexrays.cinsn_t._set_cfor +ida_hexrays.cinsn_t._set_cgoto +ida_hexrays.cinsn_t._set_cif +ida_hexrays.cinsn_t._set_creturn +ida_hexrays.cinsn_t._set_cswitch +ida_hexrays.cinsn_t._set_cwhile +ida_hexrays.cinsn_t.assign +ida_hexrays.cinsn_t.casm +ida_hexrays.cinsn_t.cblock +ida_hexrays.cinsn_t.cdo +ida_hexrays.cinsn_t.cexpr +ida_hexrays.cinsn_t.cfor +ida_hexrays.cinsn_t.cgoto +ida_hexrays.cinsn_t.cif +ida_hexrays.cinsn_t.cleanup +ida_hexrays.cinsn_t.collect_free_breaks +ida_hexrays.cinsn_t.collect_free_continues +ida_hexrays.cinsn_t.compare +ida_hexrays.cinsn_t.contains_free_break +ida_hexrays.cinsn_t.contains_free_continue +ida_hexrays.cinsn_t.contains_insn +ida_hexrays.cinsn_t.create_if +ida_hexrays.cinsn_t.creturn +ida_hexrays.cinsn_t.cswitch +ida_hexrays.cinsn_t.cthrow +ida_hexrays.cinsn_t.ctry +ida_hexrays.cinsn_t.cwhile +ida_hexrays.cinsn_t.dstr +ida_hexrays.cinsn_t.insn_is_epilog +ida_hexrays.cinsn_t.is_epilog +ida_hexrays.cinsn_t.is_ordinary_flow +ida_hexrays.cinsn_t.new_insn +ida_hexrays.cinsn_t.print1 +ida_hexrays.cinsn_t.swap +ida_hexrays.cinsn_t.zero +ida_hexrays.cinsnptrvec_t +ida_hexrays.cinsnptrvec_t.__eq__ +ida_hexrays.cinsnptrvec_t.__getitem__ +ida_hexrays.cinsnptrvec_t.__init__ +ida_hexrays.cinsnptrvec_t.__len__ +ida_hexrays.cinsnptrvec_t.__ne__ +ida_hexrays.cinsnptrvec_t.__setitem__ +ida_hexrays.cinsnptrvec_t._del +ida_hexrays.cinsnptrvec_t.add_unique +ida_hexrays.cinsnptrvec_t.append +ida_hexrays.cinsnptrvec_t.at +ida_hexrays.cinsnptrvec_t.begin +ida_hexrays.cinsnptrvec_t.capacity +ida_hexrays.cinsnptrvec_t.clear +ida_hexrays.cinsnptrvec_t.empty +ida_hexrays.cinsnptrvec_t.end +ida_hexrays.cinsnptrvec_t.erase +ida_hexrays.cinsnptrvec_t.extend +ida_hexrays.cinsnptrvec_t.extract +ida_hexrays.cinsnptrvec_t.find +ida_hexrays.cinsnptrvec_t.has +ida_hexrays.cinsnptrvec_t.inject +ida_hexrays.cinsnptrvec_t.insert +ida_hexrays.cinsnptrvec_t.pop_back +ida_hexrays.cinsnptrvec_t.push_back +ida_hexrays.cinsnptrvec_t.qclear +ida_hexrays.cinsnptrvec_t.reserve +ida_hexrays.cinsnptrvec_t.resize +ida_hexrays.cinsnptrvec_t.size +ida_hexrays.cinsnptrvec_t.swap +ida_hexrays.cinsnptrvec_t.truncate +ida_hexrays.cit_asm +ida_hexrays.cit_block +ida_hexrays.cit_break +ida_hexrays.cit_continue +ida_hexrays.cit_do +ida_hexrays.cit_empty +ida_hexrays.cit_expr +ida_hexrays.cit_for +ida_hexrays.cit_goto +ida_hexrays.cit_if +ida_hexrays.cit_return +ida_hexrays.cit_switch +ida_hexrays.cit_throw +ida_hexrays.cit_try +ida_hexrays.cit_while +ida_hexrays.citem_cmt_t +ida_hexrays.citem_cmt_t.__init__ +ida_hexrays.citem_cmt_t.__str__ +ida_hexrays.citem_cmt_t.c_str +ida_hexrays.citem_cmt_t.used +ida_hexrays.citem_locator_t +ida_hexrays.citem_locator_t.__eq__ +ida_hexrays.citem_locator_t.__ge__ +ida_hexrays.citem_locator_t.__gt__ +ida_hexrays.citem_locator_t.__init__ +ida_hexrays.citem_locator_t.__le__ +ida_hexrays.citem_locator_t.__lt__ +ida_hexrays.citem_locator_t.__ne__ +ida_hexrays.citem_locator_t.compare +ida_hexrays.citem_locator_t.ea +ida_hexrays.citem_locator_t.op +ida_hexrays.citem_t +ida_hexrays.citem_t.__dbg_get_meminfo +ida_hexrays.citem_t.__dbg_get_registered_kind +ida_hexrays.citem_t.__init__ +ida_hexrays.citem_t._acquire_ownership +ida_hexrays.citem_t._ensure_cond +ida_hexrays.citem_t._ensure_no_obj +ida_hexrays.citem_t._ensure_no_op +ida_hexrays.citem_t._ensure_ownership_transferrable +ida_hexrays.citem_t._get_op +ida_hexrays.citem_t._maybe_disown_and_deregister +ida_hexrays.citem_t._meminfo +ida_hexrays.citem_t._obj_id +ida_hexrays.citem_t._own_and_register +ida_hexrays.citem_t._set_op +ida_hexrays.citem_t.contains_expr +ida_hexrays.citem_t.contains_label +ida_hexrays.citem_t.ea +ida_hexrays.citem_t.find_closest_addr +ida_hexrays.citem_t.find_parent_of +ida_hexrays.citem_t.index +ida_hexrays.citem_t.is_expr +ida_hexrays.citem_t.label_num +ida_hexrays.citem_t.op +ida_hexrays.citem_t.print1 +ida_hexrays.citem_t.replace_by +ida_hexrays.citem_t.swap +ida_hexrays.citem_to_specific_type +ida_hexrays.clear_cached_cfuncs +ida_hexrays.cloop_t +ida_hexrays.cloop_t.__init__ +ida_hexrays.cloop_t.assign +ida_hexrays.cloop_t.cleanup +ida_hexrays.close_hexrays_waitbox +ida_hexrays.close_pseudocode +ida_hexrays.cnumber_t +ida_hexrays.cnumber_t.__eq__ +ida_hexrays.cnumber_t.__ge__ +ida_hexrays.cnumber_t.__gt__ +ida_hexrays.cnumber_t.__init__ +ida_hexrays.cnumber_t.__le__ +ida_hexrays.cnumber_t.__lt__ +ida_hexrays.cnumber_t.__ne__ +ida_hexrays.cnumber_t._print +ida_hexrays.cnumber_t._value +ida_hexrays.cnumber_t.assign +ida_hexrays.cnumber_t.compare +ida_hexrays.cnumber_t.nf +ida_hexrays.cnumber_t.value +ida_hexrays.codegen_t +ida_hexrays.codegen_t.__init__ +ida_hexrays.codegen_t.analyze_prolog +ida_hexrays.codegen_t.clear +ida_hexrays.codegen_t.emit +ida_hexrays.codegen_t.emit_micro_mvm +ida_hexrays.codegen_t.gen_micro +ida_hexrays.codegen_t.load_effective_address +ida_hexrays.codegen_t.load_operand +ida_hexrays.codegen_t.microgen_completed +ida_hexrays.codegen_t.prepare_gen_micro +ida_hexrays.codegen_t.store_operand +ida_hexrays.convert_to_user_call +ida_hexrays.cot_add +ida_hexrays.cot_asg +ida_hexrays.cot_asgadd +ida_hexrays.cot_asgband +ida_hexrays.cot_asgbor +ida_hexrays.cot_asgmul +ida_hexrays.cot_asgsdiv +ida_hexrays.cot_asgshl +ida_hexrays.cot_asgsmod +ida_hexrays.cot_asgsshr +ida_hexrays.cot_asgsub +ida_hexrays.cot_asgudiv +ida_hexrays.cot_asgumod +ida_hexrays.cot_asgushr +ida_hexrays.cot_asgxor +ida_hexrays.cot_band +ida_hexrays.cot_bnot +ida_hexrays.cot_bor +ida_hexrays.cot_call +ida_hexrays.cot_cast +ida_hexrays.cot_comma +ida_hexrays.cot_eq +ida_hexrays.cot_fadd +ida_hexrays.cot_fdiv +ida_hexrays.cot_fmul +ida_hexrays.cot_fneg +ida_hexrays.cot_fnum +ida_hexrays.cot_fsub +ida_hexrays.cot_helper +ida_hexrays.cot_idx +ida_hexrays.cot_insn +ida_hexrays.cot_land +ida_hexrays.cot_lnot +ida_hexrays.cot_lor +ida_hexrays.cot_memptr +ida_hexrays.cot_memref +ida_hexrays.cot_mul +ida_hexrays.cot_ne +ida_hexrays.cot_neg +ida_hexrays.cot_num +ida_hexrays.cot_obj +ida_hexrays.cot_postdec +ida_hexrays.cot_postinc +ida_hexrays.cot_predec +ida_hexrays.cot_preinc +ida_hexrays.cot_ptr +ida_hexrays.cot_ref +ida_hexrays.cot_sdiv +ida_hexrays.cot_sge +ida_hexrays.cot_sgt +ida_hexrays.cot_shl +ida_hexrays.cot_sizeof +ida_hexrays.cot_sle +ida_hexrays.cot_slt +ida_hexrays.cot_smod +ida_hexrays.cot_sshr +ida_hexrays.cot_str +ida_hexrays.cot_sub +ida_hexrays.cot_tern +ida_hexrays.cot_type +ida_hexrays.cot_udiv +ida_hexrays.cot_uge +ida_hexrays.cot_ugt +ida_hexrays.cot_ule +ida_hexrays.cot_ult +ida_hexrays.cot_umod +ida_hexrays.cot_ushr +ida_hexrays.cot_var +ida_hexrays.cot_xor +ida_hexrays.create_cfunc +ida_hexrays.create_empty_mba +ida_hexrays.create_field_name +ida_hexrays.create_helper +ida_hexrays.create_typedef +ida_hexrays.creturn_t +ida_hexrays.creturn_t.__eq__ +ida_hexrays.creturn_t.__ge__ +ida_hexrays.creturn_t.__gt__ +ida_hexrays.creturn_t.__init__ +ida_hexrays.creturn_t.__le__ +ida_hexrays.creturn_t.__lt__ +ida_hexrays.creturn_t.__ne__ +ida_hexrays.creturn_t.compare +ida_hexrays.cswitch_t +ida_hexrays.cswitch_t.__eq__ +ida_hexrays.cswitch_t.__ge__ +ida_hexrays.cswitch_t.__gt__ +ida_hexrays.cswitch_t.__init__ +ida_hexrays.cswitch_t.__le__ +ida_hexrays.cswitch_t.__lt__ +ida_hexrays.cswitch_t.__ne__ +ida_hexrays.cswitch_t.cases +ida_hexrays.cswitch_t.compare +ida_hexrays.cswitch_t.mvnf +ida_hexrays.ctext_position_t +ida_hexrays.ctext_position_t.__eq__ +ida_hexrays.ctext_position_t.__ge__ +ida_hexrays.ctext_position_t.__gt__ +ida_hexrays.ctext_position_t.__init__ +ida_hexrays.ctext_position_t.__le__ +ida_hexrays.ctext_position_t.__lt__ +ida_hexrays.ctext_position_t.__ne__ +ida_hexrays.ctext_position_t.compare +ida_hexrays.ctext_position_t.in_ctree +ida_hexrays.ctext_position_t.lnnum +ida_hexrays.ctext_position_t.x +ida_hexrays.ctext_position_t.y +ida_hexrays.cthrow_t +ida_hexrays.cthrow_t.__eq__ +ida_hexrays.cthrow_t.__ge__ +ida_hexrays.cthrow_t.__gt__ +ida_hexrays.cthrow_t.__init__ +ida_hexrays.cthrow_t.__le__ +ida_hexrays.cthrow_t.__lt__ +ida_hexrays.cthrow_t.__ne__ +ida_hexrays.cthrow_t.compare +ida_hexrays.ctree_anchor_t +ida_hexrays.ctree_anchor_t.__init__ +ida_hexrays.ctree_anchor_t.get_index +ida_hexrays.ctree_anchor_t.get_itp +ida_hexrays.ctree_anchor_t.is_blkcmt_anchor +ida_hexrays.ctree_anchor_t.is_citem_anchor +ida_hexrays.ctree_anchor_t.is_itp_anchor +ida_hexrays.ctree_anchor_t.is_lvar_anchor +ida_hexrays.ctree_anchor_t.is_valid_anchor +ida_hexrays.ctree_item_t +ida_hexrays.ctree_item_t.__init__ +ida_hexrays.ctree_item_t._get_e +ida_hexrays.ctree_item_t._get_f +ida_hexrays.ctree_item_t._get_i +ida_hexrays.ctree_item_t._get_it +ida_hexrays.ctree_item_t._get_l +ida_hexrays.ctree_item_t._print +ida_hexrays.ctree_item_t.citype +ida_hexrays.ctree_item_t.dstr +ida_hexrays.ctree_item_t.e +ida_hexrays.ctree_item_t.e +ida_hexrays.ctree_item_t.f +ida_hexrays.ctree_item_t.f +ida_hexrays.ctree_item_t.get_ea +ida_hexrays.ctree_item_t.get_edm +ida_hexrays.ctree_item_t.get_label_num +ida_hexrays.ctree_item_t.get_lvar +ida_hexrays.ctree_item_t.get_udm +ida_hexrays.ctree_item_t.i +ida_hexrays.ctree_item_t.i +ida_hexrays.ctree_item_t.is_citem +ida_hexrays.ctree_item_t.l +ida_hexrays.ctree_item_t.l +ida_hexrays.ctree_item_t.loc +ida_hexrays.ctree_items_t +ida_hexrays.ctree_items_t.__eq__ +ida_hexrays.ctree_items_t.__getitem__ +ida_hexrays.ctree_items_t.__init__ +ida_hexrays.ctree_items_t.__len__ +ida_hexrays.ctree_items_t.__ne__ +ida_hexrays.ctree_items_t.__setitem__ +ida_hexrays.ctree_items_t._del +ida_hexrays.ctree_items_t.add_unique +ida_hexrays.ctree_items_t.append +ida_hexrays.ctree_items_t.at +ida_hexrays.ctree_items_t.begin +ida_hexrays.ctree_items_t.capacity +ida_hexrays.ctree_items_t.clear +ida_hexrays.ctree_items_t.empty +ida_hexrays.ctree_items_t.end +ida_hexrays.ctree_items_t.erase +ida_hexrays.ctree_items_t.extend +ida_hexrays.ctree_items_t.extract +ida_hexrays.ctree_items_t.find +ida_hexrays.ctree_items_t.has +ida_hexrays.ctree_items_t.inject +ida_hexrays.ctree_items_t.insert +ida_hexrays.ctree_items_t.pop_back +ida_hexrays.ctree_items_t.push_back +ida_hexrays.ctree_items_t.qclear +ida_hexrays.ctree_items_t.reserve +ida_hexrays.ctree_items_t.resize +ida_hexrays.ctree_items_t.size +ida_hexrays.ctree_items_t.swap +ida_hexrays.ctree_items_t.truncate +ida_hexrays.ctree_parentee_t +ida_hexrays.ctree_parentee_t.__disown__ +ida_hexrays.ctree_parentee_t.__init__ +ida_hexrays.ctree_parentee_t.recalc_parent_types +ida_hexrays.ctree_visitor_t +ida_hexrays.ctree_visitor_t.__disown__ +ida_hexrays.ctree_visitor_t.__init__ +ida_hexrays.ctree_visitor_t.apply_to +ida_hexrays.ctree_visitor_t.apply_to_exprs +ida_hexrays.ctree_visitor_t.bposvec +ida_hexrays.ctree_visitor_t.clr_prune +ida_hexrays.ctree_visitor_t.clr_restart +ida_hexrays.ctree_visitor_t.cv_flags +ida_hexrays.ctree_visitor_t.is_postorder +ida_hexrays.ctree_visitor_t.leave_expr +ida_hexrays.ctree_visitor_t.leave_insn +ida_hexrays.ctree_visitor_t.maintain_parents +ida_hexrays.ctree_visitor_t.must_prune +ida_hexrays.ctree_visitor_t.must_restart +ida_hexrays.ctree_visitor_t.only_insns +ida_hexrays.ctree_visitor_t.parent_expr +ida_hexrays.ctree_visitor_t.parent_insn +ida_hexrays.ctree_visitor_t.parents +ida_hexrays.ctree_visitor_t.prune_now +ida_hexrays.ctree_visitor_t.set_restart +ida_hexrays.ctree_visitor_t.visit_expr +ida_hexrays.ctree_visitor_t.visit_insn +ida_hexrays.ctry_t +ida_hexrays.ctry_t.__eq__ +ida_hexrays.ctry_t.__ge__ +ida_hexrays.ctry_t.__gt__ +ida_hexrays.ctry_t.__init__ +ida_hexrays.ctry_t.__le__ +ida_hexrays.ctry_t.__lt__ +ida_hexrays.ctry_t.__ne__ +ida_hexrays.ctry_t.catchs +ida_hexrays.ctry_t.compare +ida_hexrays.ctry_t.is_wind +ida_hexrays.ctry_t.new_state +ida_hexrays.ctry_t.old_state +ida_hexrays.cwhile_t +ida_hexrays.cwhile_t.__eq__ +ida_hexrays.cwhile_t.__ge__ +ida_hexrays.cwhile_t.__gt__ +ida_hexrays.cwhile_t.__init__ +ida_hexrays.cwhile_t.__le__ +ida_hexrays.cwhile_t.__lt__ +ida_hexrays.cwhile_t.__ne__ +ida_hexrays.cwhile_t.compare +ida_hexrays.debug_hexrays_ctree +ida_hexrays.decompile +ida_hexrays.decompile +ida_hexrays.decompile_func +ida_hexrays.decompile_many +ida_hexrays.dereference +ida_hexrays.dstr +ida_hexrays.dummy_ptrtype +ida_hexrays.eamap_begin +ida_hexrays.eamap_clear +ida_hexrays.eamap_end +ida_hexrays.eamap_erase +ida_hexrays.eamap_find +ida_hexrays.eamap_first +ida_hexrays.eamap_free +ida_hexrays.eamap_insert +ida_hexrays.eamap_iterator_t +ida_hexrays.eamap_iterator_t.__eq__ +ida_hexrays.eamap_iterator_t.__init__ +ida_hexrays.eamap_iterator_t.__ne__ +ida_hexrays.eamap_new +ida_hexrays.eamap_next +ida_hexrays.eamap_prev +ida_hexrays.eamap_second +ida_hexrays.eamap_size +ida_hexrays.eamap_t +ida_hexrays.eamap_t.__init__ +ida_hexrays.eamap_t.at +ida_hexrays.eamap_t.size +ida_hexrays.fnumber_t +ida_hexrays.fnumber_t.__eq__ +ida_hexrays.fnumber_t.__ge__ +ida_hexrays.fnumber_t.__gt__ +ida_hexrays.fnumber_t.__init__ +ida_hexrays.fnumber_t.__le__ +ida_hexrays.fnumber_t.__lt__ +ida_hexrays.fnumber_t.__ne__ +ida_hexrays.fnumber_t._print +ida_hexrays.fnumber_t.calc_max_exp +ida_hexrays.fnumber_t.compare +ida_hexrays.fnumber_t.dereference_const_uint16 +ida_hexrays.fnumber_t.dereference_uint16 +ida_hexrays.fnumber_t.fnum +ida_hexrays.fnumber_t.is_nan +ida_hexrays.fnumber_t.nbytes +ida_hexrays.gco_info_t +ida_hexrays.gco_info_t.__init__ +ida_hexrays.gco_info_t.append_to_list +ida_hexrays.gco_info_t.cvt_to_ivl +ida_hexrays.gco_info_t.is_def +ida_hexrays.gco_info_t.is_reg +ida_hexrays.gco_info_t.is_use +ida_hexrays.gco_info_t.name +ida_hexrays.gco_info_t.regnum +ida_hexrays.gco_info_t.size +ida_hexrays.gco_info_t.stkoff +ida_hexrays.gen_microcode +ida_hexrays.get_ctype_name +ida_hexrays.get_current_operand +ida_hexrays.get_float_type +ida_hexrays.get_hexrays_version +ida_hexrays.get_int_type_by_width_and_sign +ida_hexrays.get_merror_desc +ida_hexrays.get_mreg_name +ida_hexrays.get_op_signness +ida_hexrays.get_signed_mcode +ida_hexrays.get_temp_regs +ida_hexrays.get_type +ida_hexrays.get_unk_type +ida_hexrays.get_unsigned_mcode +ida_hexrays.get_widget_vdui +ida_hexrays.getb_reginsn +ida_hexrays.getf_reginsn +ida_hexrays.graph_chains_t +ida_hexrays.graph_chains_t.__init__ +ida_hexrays.graph_chains_t.acquire +ida_hexrays.graph_chains_t.for_all_chains +ida_hexrays.graph_chains_t.is_locked +ida_hexrays.graph_chains_t.release +ida_hexrays.graph_chains_t.swap +ida_hexrays.has_cached_cfunc +ida_hexrays.has_mcode_seloff +ida_hexrays.hexrays_alloc +ida_hexrays.hexrays_failure_t +ida_hexrays.hexrays_failure_t.__init__ +ida_hexrays.hexrays_failure_t.code +ida_hexrays.hexrays_failure_t.desc +ida_hexrays.hexrays_failure_t.errea +ida_hexrays.hexrays_failure_t.str +ida_hexrays.hexrays_free +ida_hexrays.hexwarn_t +ida_hexrays.hexwarn_t.__eq__ +ida_hexrays.hexwarn_t.__ge__ +ida_hexrays.hexwarn_t.__gt__ +ida_hexrays.hexwarn_t.__init__ +ida_hexrays.hexwarn_t.__le__ +ida_hexrays.hexwarn_t.__lt__ +ida_hexrays.hexwarn_t.__ne__ +ida_hexrays.hexwarn_t.compare +ida_hexrays.hexwarn_t.ea +ida_hexrays.hexwarn_t.id +ida_hexrays.hexwarn_t.text +ida_hexrays.hexwarns_t +ida_hexrays.hexwarns_t.__eq__ +ida_hexrays.hexwarns_t.__getitem__ +ida_hexrays.hexwarns_t.__init__ +ida_hexrays.hexwarns_t.__len__ +ida_hexrays.hexwarns_t.__ne__ +ida_hexrays.hexwarns_t.__setitem__ +ida_hexrays.hexwarns_t._del +ida_hexrays.hexwarns_t.add_unique +ida_hexrays.hexwarns_t.append +ida_hexrays.hexwarns_t.at +ida_hexrays.hexwarns_t.begin +ida_hexrays.hexwarns_t.capacity +ida_hexrays.hexwarns_t.clear +ida_hexrays.hexwarns_t.empty +ida_hexrays.hexwarns_t.end +ida_hexrays.hexwarns_t.erase +ida_hexrays.hexwarns_t.extend +ida_hexrays.hexwarns_t.extract +ida_hexrays.hexwarns_t.find +ida_hexrays.hexwarns_t.grow +ida_hexrays.hexwarns_t.has +ida_hexrays.hexwarns_t.inject +ida_hexrays.hexwarns_t.insert +ida_hexrays.hexwarns_t.pop_back +ida_hexrays.hexwarns_t.push_back +ida_hexrays.hexwarns_t.qclear +ida_hexrays.hexwarns_t.reserve +ida_hexrays.hexwarns_t.resize +ida_hexrays.hexwarns_t.size +ida_hexrays.hexwarns_t.swap +ida_hexrays.hexwarns_t.truncate +ida_hexrays.history_item_t +ida_hexrays.history_item_t.__init__ +ida_hexrays.history_item_t.curr_ea +ida_hexrays.history_item_t.end +ida_hexrays.history_item_t.func_ea +ida_hexrays.history_t +ida_hexrays.history_t.__init__ +ida_hexrays.history_t.pop +ida_hexrays.history_t.push +ida_hexrays.history_t.top +ida_hexrays.hxe_begin_inlining +ida_hexrays.hxe_build_callinfo +ida_hexrays.hxe_callinfo_built +ida_hexrays.hxe_calls_done +ida_hexrays.hxe_close_pseudocode +ida_hexrays.hxe_cmt_changed +ida_hexrays.hxe_collect_warnings +ida_hexrays.hxe_combine +ida_hexrays.hxe_create_hint +ida_hexrays.hxe_curpos +ida_hexrays.hxe_double_click +ida_hexrays.hxe_flowchart +ida_hexrays.hxe_func_printed +ida_hexrays.hxe_glbopt +ida_hexrays.hxe_inlined_func +ida_hexrays.hxe_inlining_func +ida_hexrays.hxe_interr +ida_hexrays.hxe_keyboard +ida_hexrays.hxe_locopt +ida_hexrays.hxe_maturity +ida_hexrays.hxe_microcode +ida_hexrays.hxe_open_pseudocode +ida_hexrays.hxe_populating_popup +ida_hexrays.hxe_pre_structural +ida_hexrays.hxe_prealloc +ida_hexrays.hxe_preoptimized +ida_hexrays.hxe_print_func +ida_hexrays.hxe_prolog +ida_hexrays.hxe_refresh_pseudocode +ida_hexrays.hxe_resolve_stkaddrs +ida_hexrays.hxe_right_click +ida_hexrays.hxe_stkpnts +ida_hexrays.hxe_structural +ida_hexrays.hxe_switch_pseudocode +ida_hexrays.hxe_text_ready +ida_hexrays.init_hexrays_plugin +ida_hexrays.install_hexrays_callback +ida_hexrays.install_microcode_filter +ida_hexrays.is_additive +ida_hexrays.is_assignment +ida_hexrays.is_binary +ida_hexrays.is_bitop +ida_hexrays.is_bool_type +ida_hexrays.is_break_consumer +ida_hexrays.is_cmpop_with_eq +ida_hexrays.is_cmpop_without_eq +ida_hexrays.is_commutative +ida_hexrays.is_inplace_def +ida_hexrays.is_kreg +ida_hexrays.is_logical +ida_hexrays.is_loop +ida_hexrays.is_lvalue +ida_hexrays.is_may_access +ida_hexrays.is_mcode_addsub +ida_hexrays.is_mcode_call +ida_hexrays.is_mcode_commutative +ida_hexrays.is_mcode_convertible_to_jmp +ida_hexrays.is_mcode_convertible_to_set +ida_hexrays.is_mcode_divmod +ida_hexrays.is_mcode_fpu +ida_hexrays.is_mcode_j1 +ida_hexrays.is_mcode_jcond +ida_hexrays.is_mcode_propagatable +ida_hexrays.is_mcode_set +ida_hexrays.is_mcode_set1 +ida_hexrays.is_mcode_shift +ida_hexrays.is_mcode_xdsu +ida_hexrays.is_multiplicative +ida_hexrays.is_nonbool_type +ida_hexrays.is_paf +ida_hexrays.is_prepost +ida_hexrays.is_ptr_or_array +ida_hexrays.is_relational +ida_hexrays.is_signed_cmpop +ida_hexrays.is_signed_mcode +ida_hexrays.is_small_udt +ida_hexrays.is_type_correct +ida_hexrays.is_unary +ida_hexrays.is_unsigned_cmpop +ida_hexrays.is_unsigned_mcode +ida_hexrays.iterator +ida_hexrays.iterator.__eq__ +ida_hexrays.iterator.__init__ +ida_hexrays.iterator.__ne__ +ida_hexrays.iterator.__ref__ +ida_hexrays.ivl_t +ida_hexrays.ivl_t.__eq__ +ida_hexrays.ivl_t.__ge__ +ida_hexrays.ivl_t.__gt__ +ida_hexrays.ivl_t.__init__ +ida_hexrays.ivl_t.__le__ +ida_hexrays.ivl_t.__lt__ +ida_hexrays.ivl_t.__ne__ +ida_hexrays.ivl_t.clear +ida_hexrays.ivl_t.compare +ida_hexrays.ivl_t.contains +ida_hexrays.ivl_t.dstr +ida_hexrays.ivl_t.empty +ida_hexrays.ivl_t.extend_to_cover +ida_hexrays.ivl_t.includes +ida_hexrays.ivl_t.intersect +ida_hexrays.ivl_t.overlap +ida_hexrays.ivl_with_name_t +ida_hexrays.ivl_with_name_t.__init__ +ida_hexrays.ivlset_t +ida_hexrays.ivlset_t.__eq__ +ida_hexrays.ivlset_t.__ge__ +ida_hexrays.ivlset_t.__gt__ +ida_hexrays.ivlset_t.__init__ +ida_hexrays.ivlset_t.__le__ +ida_hexrays.ivlset_t.__lt__ +ida_hexrays.ivlset_t.__ne__ +ida_hexrays.ivlset_t._print +ida_hexrays.ivlset_t.add +ida_hexrays.ivlset_t.addmasked +ida_hexrays.ivlset_t.compare +ida_hexrays.ivlset_t.contains +ida_hexrays.ivlset_t.count +ida_hexrays.ivlset_t.dstr +ida_hexrays.ivlset_t.has_common +ida_hexrays.ivlset_t.includes +ida_hexrays.ivlset_t.intersect +ida_hexrays.ivlset_t.sub +ida_hexrays.jcnd2set +ida_hexrays.lexcompare +ida_hexrays.lnot +ida_hexrays.locate_lvar +ida_hexrays.lvar_locator_t +ida_hexrays.lvar_locator_t.__eq__ +ida_hexrays.lvar_locator_t.__ge__ +ida_hexrays.lvar_locator_t.__gt__ +ida_hexrays.lvar_locator_t.__init__ +ida_hexrays.lvar_locator_t.__le__ +ida_hexrays.lvar_locator_t.__lt__ +ida_hexrays.lvar_locator_t.__ne__ +ida_hexrays.lvar_locator_t.compare +ida_hexrays.lvar_locator_t.defea +ida_hexrays.lvar_locator_t.get_reg1 +ida_hexrays.lvar_locator_t.get_reg2 +ida_hexrays.lvar_locator_t.get_scattered +ida_hexrays.lvar_locator_t.get_stkoff +ida_hexrays.lvar_locator_t.is_reg1 +ida_hexrays.lvar_locator_t.is_reg2 +ida_hexrays.lvar_locator_t.is_reg_var +ida_hexrays.lvar_locator_t.is_scattered +ida_hexrays.lvar_locator_t.is_stk_var +ida_hexrays.lvar_locator_t.location +ida_hexrays.lvar_mapping_begin +ida_hexrays.lvar_mapping_clear +ida_hexrays.lvar_mapping_end +ida_hexrays.lvar_mapping_erase +ida_hexrays.lvar_mapping_find +ida_hexrays.lvar_mapping_first +ida_hexrays.lvar_mapping_free +ida_hexrays.lvar_mapping_insert +ida_hexrays.lvar_mapping_iterator_t +ida_hexrays.lvar_mapping_iterator_t.__eq__ +ida_hexrays.lvar_mapping_iterator_t.__init__ +ida_hexrays.lvar_mapping_iterator_t.__ne__ +ida_hexrays.lvar_mapping_new +ida_hexrays.lvar_mapping_next +ida_hexrays.lvar_mapping_prev +ida_hexrays.lvar_mapping_second +ida_hexrays.lvar_mapping_size +ida_hexrays.lvar_mapping_t +ida_hexrays.lvar_mapping_t.__init__ +ida_hexrays.lvar_mapping_t.at +ida_hexrays.lvar_mapping_t.size +ida_hexrays.lvar_ref_t +ida_hexrays.lvar_ref_t.__eq__ +ida_hexrays.lvar_ref_t.__ge__ +ida_hexrays.lvar_ref_t.__gt__ +ida_hexrays.lvar_ref_t.__init__ +ida_hexrays.lvar_ref_t.__le__ +ida_hexrays.lvar_ref_t.__lt__ +ida_hexrays.lvar_ref_t.__ne__ +ida_hexrays.lvar_ref_t.compare +ida_hexrays.lvar_ref_t.idx +ida_hexrays.lvar_ref_t.mba +ida_hexrays.lvar_ref_t.off +ida_hexrays.lvar_ref_t.swap +ida_hexrays.lvar_ref_t.var +ida_hexrays.lvar_saved_info_t +ida_hexrays.lvar_saved_info_t.__eq__ +ida_hexrays.lvar_saved_info_t.__init__ +ida_hexrays.lvar_saved_info_t.__ne__ +ida_hexrays.lvar_saved_info_t.clear_keep +ida_hexrays.lvar_saved_info_t.clr_nomap_lvar +ida_hexrays.lvar_saved_info_t.clr_noptr_lvar +ida_hexrays.lvar_saved_info_t.clr_split_lvar +ida_hexrays.lvar_saved_info_t.clr_unused_lvar +ida_hexrays.lvar_saved_info_t.cmt +ida_hexrays.lvar_saved_info_t.flags +ida_hexrays.lvar_saved_info_t.has_info +ida_hexrays.lvar_saved_info_t.is_kept +ida_hexrays.lvar_saved_info_t.is_nomap_lvar +ida_hexrays.lvar_saved_info_t.is_noptr_lvar +ida_hexrays.lvar_saved_info_t.is_split_lvar +ida_hexrays.lvar_saved_info_t.is_unused_lvar +ida_hexrays.lvar_saved_info_t.ll +ida_hexrays.lvar_saved_info_t.name +ida_hexrays.lvar_saved_info_t.set_keep +ida_hexrays.lvar_saved_info_t.set_nomap_lvar +ida_hexrays.lvar_saved_info_t.set_noptr_lvar +ida_hexrays.lvar_saved_info_t.set_split_lvar +ida_hexrays.lvar_saved_info_t.set_unused_lvar +ida_hexrays.lvar_saved_info_t.size +ida_hexrays.lvar_saved_info_t.type +ida_hexrays.lvar_saved_infos_t +ida_hexrays.lvar_saved_infos_t.__eq__ +ida_hexrays.lvar_saved_infos_t.__getitem__ +ida_hexrays.lvar_saved_infos_t.__init__ +ida_hexrays.lvar_saved_infos_t.__len__ +ida_hexrays.lvar_saved_infos_t.__ne__ +ida_hexrays.lvar_saved_infos_t.__setitem__ +ida_hexrays.lvar_saved_infos_t._del +ida_hexrays.lvar_saved_infos_t.add_unique +ida_hexrays.lvar_saved_infos_t.append +ida_hexrays.lvar_saved_infos_t.at +ida_hexrays.lvar_saved_infos_t.begin +ida_hexrays.lvar_saved_infos_t.capacity +ida_hexrays.lvar_saved_infos_t.clear +ida_hexrays.lvar_saved_infos_t.empty +ida_hexrays.lvar_saved_infos_t.end +ida_hexrays.lvar_saved_infos_t.erase +ida_hexrays.lvar_saved_infos_t.extend +ida_hexrays.lvar_saved_infos_t.extract +ida_hexrays.lvar_saved_infos_t.find +ida_hexrays.lvar_saved_infos_t.grow +ida_hexrays.lvar_saved_infos_t.has +ida_hexrays.lvar_saved_infos_t.inject +ida_hexrays.lvar_saved_infos_t.insert +ida_hexrays.lvar_saved_infos_t.pop_back +ida_hexrays.lvar_saved_infos_t.push_back +ida_hexrays.lvar_saved_infos_t.qclear +ida_hexrays.lvar_saved_infos_t.reserve +ida_hexrays.lvar_saved_infos_t.resize +ida_hexrays.lvar_saved_infos_t.size +ida_hexrays.lvar_saved_infos_t.swap +ida_hexrays.lvar_saved_infos_t.truncate +ida_hexrays.lvar_t +ida_hexrays.lvar_t.__init__ +ida_hexrays.lvar_t.accepts_type +ida_hexrays.lvar_t.append_list +ida_hexrays.lvar_t.clear_used +ida_hexrays.lvar_t.clr_arg_var +ida_hexrays.lvar_t.clr_automapped +ida_hexrays.lvar_t.clr_decl_unused +ida_hexrays.lvar_t.clr_dummy_arg +ida_hexrays.lvar_t.clr_fake_var +ida_hexrays.lvar_t.clr_floating_var +ida_hexrays.lvar_t.clr_mapdst_var +ida_hexrays.lvar_t.clr_mreg_done +ida_hexrays.lvar_t.clr_noptr_var +ida_hexrays.lvar_t.clr_notarg +ida_hexrays.lvar_t.clr_overlapped_var +ida_hexrays.lvar_t.clr_scattered_arg +ida_hexrays.lvar_t.clr_shared +ida_hexrays.lvar_t.clr_split_var +ida_hexrays.lvar_t.clr_spoiled_var +ida_hexrays.lvar_t.clr_thisarg +ida_hexrays.lvar_t.clr_unknown_width +ida_hexrays.lvar_t.clr_used_byref +ida_hexrays.lvar_t.clr_user_info +ida_hexrays.lvar_t.clr_user_name +ida_hexrays.lvar_t.clr_user_type +ida_hexrays.lvar_t.cmt +ida_hexrays.lvar_t.defblk +ida_hexrays.lvar_t.divisor +ida_hexrays.lvar_t.has_common +ida_hexrays.lvar_t.has_common_bit +ida_hexrays.lvar_t.has_nice_name +ida_hexrays.lvar_t.has_regname +ida_hexrays.lvar_t.has_user_info +ida_hexrays.lvar_t.has_user_name +ida_hexrays.lvar_t.has_user_type +ida_hexrays.lvar_t.in_asm +ida_hexrays.lvar_t.is_aliasable +ida_hexrays.lvar_t.is_arg_var +ida_hexrays.lvar_t.is_automapped +ida_hexrays.lvar_t.is_decl_unused +ida_hexrays.lvar_t.is_dummy_arg +ida_hexrays.lvar_t.is_fake_var +ida_hexrays.lvar_t.is_floating_var +ida_hexrays.lvar_t.is_mapdst_var +ida_hexrays.lvar_t.is_noptr_var +ida_hexrays.lvar_t.is_notarg +ida_hexrays.lvar_t.is_overlapped_var +ida_hexrays.lvar_t.is_result_var +ida_hexrays.lvar_t.is_shared +ida_hexrays.lvar_t.is_split_var +ida_hexrays.lvar_t.is_spoiled_var +ida_hexrays.lvar_t.is_thisarg +ida_hexrays.lvar_t.is_unknown_width +ida_hexrays.lvar_t.is_used_byref +ida_hexrays.lvar_t.mreg_done +ida_hexrays.lvar_t.name +ida_hexrays.lvar_t.set_arg_var +ida_hexrays.lvar_t.set_automapped +ida_hexrays.lvar_t.set_decl_unused +ida_hexrays.lvar_t.set_dummy_arg +ida_hexrays.lvar_t.set_fake_var +ida_hexrays.lvar_t.set_final_lvar_type +ida_hexrays.lvar_t.set_floating_var +ida_hexrays.lvar_t.set_lvar_type +ida_hexrays.lvar_t.set_mapdst_var +ida_hexrays.lvar_t.set_mreg_done +ida_hexrays.lvar_t.set_non_typed +ida_hexrays.lvar_t.set_noptr_var +ida_hexrays.lvar_t.set_notarg +ida_hexrays.lvar_t.set_overlapped_var +ida_hexrays.lvar_t.set_scattered_arg +ida_hexrays.lvar_t.set_shared +ida_hexrays.lvar_t.set_split_var +ida_hexrays.lvar_t.set_spoiled_var +ida_hexrays.lvar_t.set_thisarg +ida_hexrays.lvar_t.set_typed +ida_hexrays.lvar_t.set_unknown_width +ida_hexrays.lvar_t.set_used +ida_hexrays.lvar_t.set_used_byref +ida_hexrays.lvar_t.set_user_name +ida_hexrays.lvar_t.set_user_type +ida_hexrays.lvar_t.set_width +ida_hexrays.lvar_t.tif +ida_hexrays.lvar_t.type +ida_hexrays.lvar_t.typed +ida_hexrays.lvar_t.used +ida_hexrays.lvar_t.was_scattered_arg +ida_hexrays.lvar_t.width +ida_hexrays.lvar_uservec_t +ida_hexrays.lvar_uservec_t.__init__ +ida_hexrays.lvar_uservec_t.clear +ida_hexrays.lvar_uservec_t.empty +ida_hexrays.lvar_uservec_t.find_info +ida_hexrays.lvar_uservec_t.keep_info +ida_hexrays.lvar_uservec_t.lmaps +ida_hexrays.lvar_uservec_t.lvvec +ida_hexrays.lvar_uservec_t.stkoff_delta +ida_hexrays.lvar_uservec_t.swap +ida_hexrays.lvar_uservec_t.ulv_flags +ida_hexrays.lvars_t +ida_hexrays.lvars_t.__init__ +ida_hexrays.lvars_t.find +ida_hexrays.lvars_t.find_input_lvar +ida_hexrays.lvars_t.find_input_reg +ida_hexrays.lvars_t.find_lvar +ida_hexrays.lvars_t.find_stkvar +ida_hexrays.lxe_lvar_cmt_changed +ida_hexrays.lxe_lvar_mapping_changed +ida_hexrays.lxe_lvar_name_changed +ida_hexrays.lxe_lvar_type_changed +ida_hexrays.make_num +ida_hexrays.make_pointer +ida_hexrays.make_ref +ida_hexrays.mark_cfunc_dirty +ida_hexrays.max_vlr_svalue +ida_hexrays.max_vlr_value +ida_hexrays.mba_range_iterator_t +ida_hexrays.mba_range_iterator_t.__init__ +ida_hexrays.mba_range_iterator_t.chunk +ida_hexrays.mba_range_iterator_t.is_snippet +ida_hexrays.mba_range_iterator_t.next +ida_hexrays.mba_range_iterator_t.set +ida_hexrays.mba_ranges_t +ida_hexrays.mba_ranges_t.__init__ +ida_hexrays.mba_ranges_t.clear +ida_hexrays.mba_ranges_t.empty +ida_hexrays.mba_ranges_t.is_fragmented +ida_hexrays.mba_ranges_t.is_snippet +ida_hexrays.mba_ranges_t.pfn +ida_hexrays.mba_ranges_t.ranges +ida_hexrays.mba_ranges_t.start +ida_hexrays.mba_t +ida_hexrays.mba_t.__init__ +ida_hexrays.mba_t._deregister +ida_hexrays.mba_t._print +ida_hexrays.mba_t._register +ida_hexrays.mba_t.aliased_memory +ida_hexrays.mba_t.alloc_fict_ea +ida_hexrays.mba_t.alloc_kreg +ida_hexrays.mba_t.alloc_lvars +ida_hexrays.mba_t.analyze_calls +ida_hexrays.mba_t.arg +ida_hexrays.mba_t.argbase +ida_hexrays.mba_t.argidx +ida_hexrays.mba_t.argidx_ok +ida_hexrays.mba_t.argidx_sorted +ida_hexrays.mba_t.bad_call_sp_detected +ida_hexrays.mba_t.blocks +ida_hexrays.mba_t.build_graph +ida_hexrays.mba_t.calc_shins_flags +ida_hexrays.mba_t.callinfo_built +ida_hexrays.mba_t.cc +ida_hexrays.mba_t.chain_varnums_ok +ida_hexrays.mba_t.clr_cdtr +ida_hexrays.mba_t.clr_mba_flags +ida_hexrays.mba_t.clr_mba_flags2 +ida_hexrays.mba_t.code16_bit_removed +ida_hexrays.mba_t.common_stkvars_stkargs +ida_hexrays.mba_t.consumed_argregs +ida_hexrays.mba_t.copy_block +ida_hexrays.mba_t.create_helper_call +ida_hexrays.mba_t.deleted_pairs +ida_hexrays.mba_t.deserialize +ida_hexrays.mba_t.display_numaddrs +ida_hexrays.mba_t.display_valnums +ida_hexrays.mba_t.dump +ida_hexrays.mba_t.dump_mba +ida_hexrays.mba_t.error_ea +ida_hexrays.mba_t.final_type +ida_hexrays.mba_t.find_mop +ida_hexrays.mba_t.for_all_insns +ida_hexrays.mba_t.for_all_ops +ida_hexrays.mba_t.for_all_topinsns +ida_hexrays.mba_t.fpd +ida_hexrays.mba_t.free_kreg +ida_hexrays.mba_t.frregs +ida_hexrays.mba_t.frsize +ida_hexrays.mba_t.fti_flags +ida_hexrays.mba_t.fullsize +ida_hexrays.mba_t.generated_asserts +ida_hexrays.mba_t.get_args_region +ida_hexrays.mba_t.get_curfunc +ida_hexrays.mba_t.get_func_output_lists +ida_hexrays.mba_t.get_graph +ida_hexrays.mba_t.get_ida_argloc +ida_hexrays.mba_t.get_lvars_region +ida_hexrays.mba_t.get_mba_flags +ida_hexrays.mba_t.get_mba_flags2 +ida_hexrays.mba_t.get_mblock +ida_hexrays.mba_t.get_shadow_region +ida_hexrays.mba_t.get_stack_region +ida_hexrays.mba_t.get_std_region +ida_hexrays.mba_t.gotoff_stkvars +ida_hexrays.mba_t.graph_insns +ida_hexrays.mba_t.has_bad_sp +ida_hexrays.mba_t.has_outlines +ida_hexrays.mba_t.has_over_chains +ida_hexrays.mba_t.has_passregs +ida_hexrays.mba_t.has_stack_retval +ida_hexrays.mba_t.idaloc2vd +ida_hexrays.mba_t.idb_spoiled +ida_hexrays.mba_t.idb_type +ida_hexrays.mba_t.inargoff +ida_hexrays.mba_t.inline_func +ida_hexrays.mba_t.insert_block +ida_hexrays.mba_t.is_cdtr +ida_hexrays.mba_t.is_ctr +ida_hexrays.mba_t.is_dtr +ida_hexrays.mba_t.is_pattern +ida_hexrays.mba_t.is_snippet +ida_hexrays.mba_t.is_stkarg +ida_hexrays.mba_t.is_thunk +ida_hexrays.mba_t.label +ida_hexrays.mba_t.loaded_gdl +ida_hexrays.mba_t.locate_stkpnt +ida_hexrays.mba_t.lvar_names_ok +ida_hexrays.mba_t.lvars_allocated +ida_hexrays.mba_t.lvars_renamed +ida_hexrays.mba_t.map_fict_ea +ida_hexrays.mba_t.mark_chains_dirty +ida_hexrays.mba_t.maturity +ida_hexrays.mba_t.may_refine_rettype +ida_hexrays.mba_t.merge_blocks +ida_hexrays.mba_t.minargref +ida_hexrays.mba_t.minstkref +ida_hexrays.mba_t.minstkref_ea +ida_hexrays.mba_t.natural +ida_hexrays.mba_t.nodel_memory +ida_hexrays.mba_t.npurged +ida_hexrays.mba_t.optimize_global +ida_hexrays.mba_t.optimize_local +ida_hexrays.mba_t.optimized +ida_hexrays.mba_t.pfn_flags +ida_hexrays.mba_t.precise_defeas +ida_hexrays.mba_t.prop_complex +ida_hexrays.mba_t.propagated_asserts +ida_hexrays.mba_t.qty +ida_hexrays.mba_t.really_alloc +ida_hexrays.mba_t.regargs_is_not_aligned +ida_hexrays.mba_t.remove_block +ida_hexrays.mba_t.remove_blocks +ida_hexrays.mba_t.remove_empty_and_unreachable_blocks +ida_hexrays.mba_t.reqmat +ida_hexrays.mba_t.retsize +ida_hexrays.mba_t.returns_fpval +ida_hexrays.mba_t.retvaridx +ida_hexrays.mba_t.rtype_refined +ida_hexrays.mba_t.save_snapshot +ida_hexrays.mba_t.saverest_done +ida_hexrays.mba_t.serialize +ida_hexrays.mba_t.set_lvar_name +ida_hexrays.mba_t.set_maturity +ida_hexrays.mba_t.set_mba_flags +ida_hexrays.mba_t.set_mba_flags2 +ida_hexrays.mba_t.set_nice_lvar_name +ida_hexrays.mba_t.set_user_lvar_name +ida_hexrays.mba_t.shadow_args +ida_hexrays.mba_t.short_display +ida_hexrays.mba_t.should_beautify +ida_hexrays.mba_t.show_reduction +ida_hexrays.mba_t.spd_adjust +ida_hexrays.mba_t.split_block +ida_hexrays.mba_t.spoiled_list +ida_hexrays.mba_t.stacksize +ida_hexrays.mba_t.std_ivls +ida_hexrays.mba_t.stkoff_ida2vd +ida_hexrays.mba_t.stkoff_vd2ida +ida_hexrays.mba_t.term +ida_hexrays.mba_t.tmpstk_size +ida_hexrays.mba_t.use_frame +ida_hexrays.mba_t.use_wingraph32 +ida_hexrays.mba_t.valranges_done +ida_hexrays.mba_t.vars +ida_hexrays.mba_t.vd2idaloc +ida_hexrays.mba_t.verify +ida_hexrays.mba_t.write_to_const_detected +ida_hexrays.mbl_graph_t +ida_hexrays.mbl_graph_t.__init__ +ida_hexrays.mbl_graph_t.get_chain_stamp +ida_hexrays.mbl_graph_t.get_du +ida_hexrays.mbl_graph_t.get_mblock +ida_hexrays.mbl_graph_t.get_ud +ida_hexrays.mbl_graph_t.is_du_chain_dirty +ida_hexrays.mbl_graph_t.is_redefined_globally +ida_hexrays.mbl_graph_t.is_ud_chain_dirty +ida_hexrays.mbl_graph_t.is_used_globally +ida_hexrays.mblock_t +ida_hexrays.mblock_t.__init__ +ida_hexrays.mblock_t._print +ida_hexrays.mblock_t.append_def_list +ida_hexrays.mblock_t.append_use_list +ida_hexrays.mblock_t.build_def_list +ida_hexrays.mblock_t.build_lists +ida_hexrays.mblock_t.build_use_list +ida_hexrays.mblock_t.dead_at_start +ida_hexrays.mblock_t.dnu +ida_hexrays.mblock_t.dump +ida_hexrays.mblock_t.dump_block +ida_hexrays.mblock_t.empty +ida_hexrays.mblock_t.end +ida_hexrays.mblock_t.find_access +ida_hexrays.mblock_t.find_def +ida_hexrays.mblock_t.find_first_use +ida_hexrays.mblock_t.find_redefinition +ida_hexrays.mblock_t.find_use +ida_hexrays.mblock_t.flags +ida_hexrays.mblock_t.for_all_insns +ida_hexrays.mblock_t.for_all_ops +ida_hexrays.mblock_t.for_all_uses +ida_hexrays.mblock_t.get_reginsn_qty +ida_hexrays.mblock_t.get_valranges +ida_hexrays.mblock_t.head +ida_hexrays.mblock_t.insert_into_block +ida_hexrays.mblock_t.is_branch +ida_hexrays.mblock_t.is_call_block +ida_hexrays.mblock_t.is_nway +ida_hexrays.mblock_t.is_redefined +ida_hexrays.mblock_t.is_rhs_redefined +ida_hexrays.mblock_t.is_simple_goto_block +ida_hexrays.mblock_t.is_simple_jcnd_block +ida_hexrays.mblock_t.is_unknown_call +ida_hexrays.mblock_t.is_used +ida_hexrays.mblock_t.lists_dirty +ida_hexrays.mblock_t.lists_ready +ida_hexrays.mblock_t.make_lists_ready +ida_hexrays.mblock_t.make_nop +ida_hexrays.mblock_t.mark_lists_dirty +ida_hexrays.mblock_t.maxbsp +ida_hexrays.mblock_t.maybdef +ida_hexrays.mblock_t.maybuse +ida_hexrays.mblock_t.mba +ida_hexrays.mblock_t.minbargref +ida_hexrays.mblock_t.minbstkref +ida_hexrays.mblock_t.mustbdef +ida_hexrays.mblock_t.mustbuse +ida_hexrays.mblock_t.needs_propagation +ida_hexrays.mblock_t.nextb +ida_hexrays.mblock_t.npred +ida_hexrays.mblock_t.nsucc +ida_hexrays.mblock_t.optimize_block +ida_hexrays.mblock_t.optimize_insn +ida_hexrays.mblock_t.optimize_useless_jump +ida_hexrays.mblock_t.pred +ida_hexrays.mblock_t.preds +ida_hexrays.mblock_t.predset +ida_hexrays.mblock_t.prevb +ida_hexrays.mblock_t.remove_from_block +ida_hexrays.mblock_t.request_demote64 +ida_hexrays.mblock_t.request_propagation +ida_hexrays.mblock_t.serial +ida_hexrays.mblock_t.start +ida_hexrays.mblock_t.succ +ida_hexrays.mblock_t.succs +ida_hexrays.mblock_t.succset +ida_hexrays.mblock_t.tail +ida_hexrays.mblock_t.type +ida_hexrays.mcallarg_t +ida_hexrays.mcallarg_t.__init__ +ida_hexrays.mcallarg_t._print +ida_hexrays.mcallarg_t.argloc +ida_hexrays.mcallarg_t.copy_mop +ida_hexrays.mcallarg_t.dstr +ida_hexrays.mcallarg_t.ea +ida_hexrays.mcallarg_t.flags +ida_hexrays.mcallarg_t.make_int +ida_hexrays.mcallarg_t.make_uint +ida_hexrays.mcallarg_t.name +ida_hexrays.mcallarg_t.set_regarg +ida_hexrays.mcallarg_t.type +ida_hexrays.mcallargs_t +ida_hexrays.mcallargs_t.__eq__ +ida_hexrays.mcallargs_t.__getitem__ +ida_hexrays.mcallargs_t.__init__ +ida_hexrays.mcallargs_t.__len__ +ida_hexrays.mcallargs_t.__ne__ +ida_hexrays.mcallargs_t.__setitem__ +ida_hexrays.mcallargs_t._del +ida_hexrays.mcallargs_t.add_unique +ida_hexrays.mcallargs_t.append +ida_hexrays.mcallargs_t.at +ida_hexrays.mcallargs_t.begin +ida_hexrays.mcallargs_t.capacity +ida_hexrays.mcallargs_t.clear +ida_hexrays.mcallargs_t.empty +ida_hexrays.mcallargs_t.end +ida_hexrays.mcallargs_t.erase +ida_hexrays.mcallargs_t.extend +ida_hexrays.mcallargs_t.extract +ida_hexrays.mcallargs_t.find +ida_hexrays.mcallargs_t.grow +ida_hexrays.mcallargs_t.has +ida_hexrays.mcallargs_t.inject +ida_hexrays.mcallargs_t.insert +ida_hexrays.mcallargs_t.pop_back +ida_hexrays.mcallargs_t.push_back +ida_hexrays.mcallargs_t.qclear +ida_hexrays.mcallargs_t.reserve +ida_hexrays.mcallargs_t.resize +ida_hexrays.mcallargs_t.size +ida_hexrays.mcallargs_t.swap +ida_hexrays.mcallargs_t.truncate +ida_hexrays.mcallinfo_t +ida_hexrays.mcallinfo_t.__init__ +ida_hexrays.mcallinfo_t._print +ida_hexrays.mcallinfo_t.args +ida_hexrays.mcallinfo_t.call_spd +ida_hexrays.mcallinfo_t.callee +ida_hexrays.mcallinfo_t.cc +ida_hexrays.mcallinfo_t.dead_regs +ida_hexrays.mcallinfo_t.dstr +ida_hexrays.mcallinfo_t.flags +ida_hexrays.mcallinfo_t.fti_attrs +ida_hexrays.mcallinfo_t.get_type +ida_hexrays.mcallinfo_t.is_vararg +ida_hexrays.mcallinfo_t.lexcompare +ida_hexrays.mcallinfo_t.pass_regs +ida_hexrays.mcallinfo_t.retregs +ida_hexrays.mcallinfo_t.return_argloc +ida_hexrays.mcallinfo_t.return_regs +ida_hexrays.mcallinfo_t.return_type +ida_hexrays.mcallinfo_t.role +ida_hexrays.mcallinfo_t.set_type +ida_hexrays.mcallinfo_t.solid_args +ida_hexrays.mcallinfo_t.spoiled +ida_hexrays.mcallinfo_t.stkargs_top +ida_hexrays.mcallinfo_t.visible_memory +ida_hexrays.mcases_t +ida_hexrays.mcases_t.__eq__ +ida_hexrays.mcases_t.__ge__ +ida_hexrays.mcases_t.__gt__ +ida_hexrays.mcases_t.__init__ +ida_hexrays.mcases_t.__le__ +ida_hexrays.mcases_t.__lt__ +ida_hexrays.mcases_t.__ne__ +ida_hexrays.mcases_t._print +ida_hexrays.mcases_t.compare +ida_hexrays.mcases_t.dstr +ida_hexrays.mcases_t.empty +ida_hexrays.mcases_t.resize +ida_hexrays.mcases_t.size +ida_hexrays.mcases_t.swap +ida_hexrays.mcases_t.targets +ida_hexrays.mcases_t.values +ida_hexrays.mcode_modifies_d +ida_hexrays.microcode_filter_t +ida_hexrays.microcode_filter_t.__disown__ +ida_hexrays.microcode_filter_t.__init__ +ida_hexrays.microcode_filter_t.apply +ida_hexrays.microcode_filter_t.match +ida_hexrays.min_vlr_svalue +ida_hexrays.minsn_t +ida_hexrays.minsn_t.__dbg_get_meminfo +ida_hexrays.minsn_t.__dbg_get_registered_kind +ida_hexrays.minsn_t.__init__ +ida_hexrays.minsn_t.__lt__ +ida_hexrays.minsn_t._acquire_ownership +ida_hexrays.minsn_t._deregister +ida_hexrays.minsn_t._ensure_cond +ida_hexrays.minsn_t._ensure_no_obj +ida_hexrays.minsn_t._ensure_ownership_transferrable +ida_hexrays.minsn_t._make_nop +ida_hexrays.minsn_t._maybe_disown_and_deregister +ida_hexrays.minsn_t._meminfo +ida_hexrays.minsn_t._obj_id +ida_hexrays.minsn_t._own_and_register +ida_hexrays.minsn_t._print +ida_hexrays.minsn_t._register +ida_hexrays.minsn_t.clr_assert +ida_hexrays.minsn_t.clr_combinable +ida_hexrays.minsn_t.clr_combined +ida_hexrays.minsn_t.clr_fpinsn +ida_hexrays.minsn_t.clr_ignlowsrc +ida_hexrays.minsn_t.clr_multimov +ida_hexrays.minsn_t.clr_noret_icall +ida_hexrays.minsn_t.clr_propagatable +ida_hexrays.minsn_t.clr_tailcall +ida_hexrays.minsn_t.contains_call +ida_hexrays.minsn_t.contains_opcode +ida_hexrays.minsn_t.d +ida_hexrays.minsn_t.deserialize +ida_hexrays.minsn_t.dstr +ida_hexrays.minsn_t.ea +ida_hexrays.minsn_t.equal_insns +ida_hexrays.minsn_t.find_call +ida_hexrays.minsn_t.find_ins_op +ida_hexrays.minsn_t.find_num_op +ida_hexrays.minsn_t.find_opcode +ida_hexrays.minsn_t.for_all_insns +ida_hexrays.minsn_t.for_all_ops +ida_hexrays.minsn_t.get_role +ida_hexrays.minsn_t.get_split_size +ida_hexrays.minsn_t.has_side_effects +ida_hexrays.minsn_t.iprops +ida_hexrays.minsn_t.is_after +ida_hexrays.minsn_t.is_alloca +ida_hexrays.minsn_t.is_assert +ida_hexrays.minsn_t.is_between +ida_hexrays.minsn_t.is_bswap +ida_hexrays.minsn_t.is_cleaning_pop +ida_hexrays.minsn_t.is_combinable +ida_hexrays.minsn_t.is_combined +ida_hexrays.minsn_t.is_extstx +ida_hexrays.minsn_t.is_farcall +ida_hexrays.minsn_t.is_fpinsn +ida_hexrays.minsn_t.is_helper +ida_hexrays.minsn_t.is_ignlowsrc +ida_hexrays.minsn_t.is_inverted_jx +ida_hexrays.minsn_t.is_like_move +ida_hexrays.minsn_t.is_mbarrier +ida_hexrays.minsn_t.is_memcpy +ida_hexrays.minsn_t.is_memset +ida_hexrays.minsn_t.is_mov +ida_hexrays.minsn_t.is_multimov +ida_hexrays.minsn_t.is_noret_call +ida_hexrays.minsn_t.is_optional +ida_hexrays.minsn_t.is_persistent +ida_hexrays.minsn_t.is_propagatable +ida_hexrays.minsn_t.is_readflags +ida_hexrays.minsn_t.is_tailcall +ida_hexrays.minsn_t.is_unknown_call +ida_hexrays.minsn_t.is_wild_match +ida_hexrays.minsn_t.l +ida_hexrays.minsn_t.lexcompare +ida_hexrays.minsn_t.may_use_aliased_memory +ida_hexrays.minsn_t.modifies_d +ida_hexrays.minsn_t.modifies_pair_mop +ida_hexrays.minsn_t.next +ida_hexrays.minsn_t.opcode +ida_hexrays.minsn_t.optimize_solo +ida_hexrays.minsn_t.optimize_subtree +ida_hexrays.minsn_t.prev +ida_hexrays.minsn_t.r +ida_hexrays.minsn_t.replace_by +ida_hexrays.minsn_t.serialize +ida_hexrays.minsn_t.set_assert +ida_hexrays.minsn_t.set_cleaning_pop +ida_hexrays.minsn_t.set_combinable +ida_hexrays.minsn_t.set_extstx +ida_hexrays.minsn_t.set_farcall +ida_hexrays.minsn_t.set_fpinsn +ida_hexrays.minsn_t.set_ignlowsrc +ida_hexrays.minsn_t.set_inverted_jx +ida_hexrays.minsn_t.set_mbarrier +ida_hexrays.minsn_t.set_multimov +ida_hexrays.minsn_t.set_noret_icall +ida_hexrays.minsn_t.set_optional +ida_hexrays.minsn_t.set_persistent +ida_hexrays.minsn_t.set_split_size +ida_hexrays.minsn_t.set_tailcall +ida_hexrays.minsn_t.set_unmerged +ida_hexrays.minsn_t.set_wild_match +ida_hexrays.minsn_t.setaddr +ida_hexrays.minsn_t.swap +ida_hexrays.minsn_t.was_noret_icall +ida_hexrays.minsn_t.was_split +ida_hexrays.minsn_t.was_unmerged +ida_hexrays.minsn_t.was_unpaired +ida_hexrays.minsn_visitor_t +ida_hexrays.minsn_visitor_t.__disown__ +ida_hexrays.minsn_visitor_t.__init__ +ida_hexrays.minsn_visitor_t.visit_minsn +ida_hexrays.mlist_mop_visitor_t +ida_hexrays.mlist_mop_visitor_t.__disown__ +ida_hexrays.mlist_mop_visitor_t.__init__ +ida_hexrays.mlist_mop_visitor_t.prune +ida_hexrays.mlist_mop_visitor_t.visit_mop +ida_hexrays.mlist_t +ida_hexrays.mlist_t.__eq__ +ida_hexrays.mlist_t.__ge__ +ida_hexrays.mlist_t.__gt__ +ida_hexrays.mlist_t.__init__ +ida_hexrays.mlist_t.__le__ +ida_hexrays.mlist_t.__lt__ +ida_hexrays.mlist_t.__ne__ +ida_hexrays.mlist_t._print +ida_hexrays.mlist_t.add +ida_hexrays.mlist_t.addmem +ida_hexrays.mlist_t.clear +ida_hexrays.mlist_t.compare +ida_hexrays.mlist_t.count +ida_hexrays.mlist_t.dstr +ida_hexrays.mlist_t.empty +ida_hexrays.mlist_t.has +ida_hexrays.mlist_t.has_all +ida_hexrays.mlist_t.has_any +ida_hexrays.mlist_t.has_common +ida_hexrays.mlist_t.has_memory +ida_hexrays.mlist_t.includes +ida_hexrays.mlist_t.intersect +ida_hexrays.mlist_t.is_subset_of +ida_hexrays.mlist_t.sub +ida_hexrays.mlist_t.swap +ida_hexrays.mnumber_t +ida_hexrays.mnumber_t.__eq__ +ida_hexrays.mnumber_t.__ge__ +ida_hexrays.mnumber_t.__gt__ +ida_hexrays.mnumber_t.__init__ +ida_hexrays.mnumber_t.__le__ +ida_hexrays.mnumber_t.__lt__ +ida_hexrays.mnumber_t.__ne__ +ida_hexrays.mnumber_t.compare +ida_hexrays.mnumber_t.update_value +ida_hexrays.modify_user_lvar_info +ida_hexrays.modify_user_lvars +ida_hexrays.mop_S +ida_hexrays.mop_a +ida_hexrays.mop_addr_t +ida_hexrays.mop_addr_t.__init__ +ida_hexrays.mop_addr_t.lexcompare +ida_hexrays.mop_b +ida_hexrays.mop_c +ida_hexrays.mop_d +ida_hexrays.mop_f +ida_hexrays.mop_fn +ida_hexrays.mop_h +ida_hexrays.mop_l +ida_hexrays.mop_n +ida_hexrays.mop_p +ida_hexrays.mop_pair_t +ida_hexrays.mop_pair_t.__init__ +ida_hexrays.mop_pair_t.hop +ida_hexrays.mop_pair_t.lop +ida_hexrays.mop_r +ida_hexrays.mop_sc +ida_hexrays.mop_str +ida_hexrays.mop_t +ida_hexrays.mop_t.__dbg_get_meminfo +ida_hexrays.mop_t.__dbg_get_registered_kind +ida_hexrays.mop_t.__eq__ +ida_hexrays.mop_t.__init__ +ida_hexrays.mop_t.__lt__ +ida_hexrays.mop_t.__ne__ +ida_hexrays.mop_t._acquire_ownership +ida_hexrays.mop_t._deregister +ida_hexrays.mop_t._ensure_cond +ida_hexrays.mop_t._ensure_no_obj +ida_hexrays.mop_t._ensure_no_t +ida_hexrays.mop_t._ensure_ownership_transferrable +ida_hexrays.mop_t._get_a +ida_hexrays.mop_t._get_b +ida_hexrays.mop_t._get_c +ida_hexrays.mop_t._get_cstr +ida_hexrays.mop_t._get_d +ida_hexrays.mop_t._get_f +ida_hexrays.mop_t._get_fpc +ida_hexrays.mop_t._get_g +ida_hexrays.mop_t._get_helper +ida_hexrays.mop_t._get_l +ida_hexrays.mop_t._get_nnn +ida_hexrays.mop_t._get_pair +ida_hexrays.mop_t._get_r +ida_hexrays.mop_t._get_s +ida_hexrays.mop_t._get_scif +ida_hexrays.mop_t._get_t +ida_hexrays.mop_t._make_blkref +ida_hexrays.mop_t._make_callinfo +ida_hexrays.mop_t._make_cases +ida_hexrays.mop_t._make_gvar +ida_hexrays.mop_t._make_insn +ida_hexrays.mop_t._make_lvar +ida_hexrays.mop_t._make_pair +ida_hexrays.mop_t._make_reg +ida_hexrays.mop_t._make_stkvar +ida_hexrays.mop_t._make_strlit +ida_hexrays.mop_t._maybe_disown_and_deregister +ida_hexrays.mop_t._meminfo +ida_hexrays.mop_t._obj_id +ida_hexrays.mop_t._own_and_register +ida_hexrays.mop_t._print +ida_hexrays.mop_t._register +ida_hexrays.mop_t._set_a +ida_hexrays.mop_t._set_b +ida_hexrays.mop_t._set_c +ida_hexrays.mop_t._set_cstr +ida_hexrays.mop_t._set_d +ida_hexrays.mop_t._set_f +ida_hexrays.mop_t._set_fpc +ida_hexrays.mop_t._set_g +ida_hexrays.mop_t._set_helper +ida_hexrays.mop_t._set_l +ida_hexrays.mop_t._set_nnn +ida_hexrays.mop_t._set_pair +ida_hexrays.mop_t._set_r +ida_hexrays.mop_t._set_s +ida_hexrays.mop_t._set_scif +ida_hexrays.mop_t._set_t +ida_hexrays.mop_t.apply_ld_mcode +ida_hexrays.mop_t.apply_xds +ida_hexrays.mop_t.apply_xdu +ida_hexrays.mop_t.assign +ida_hexrays.mop_t.change_size +ida_hexrays.mop_t.create_from_insn +ida_hexrays.mop_t.create_from_ivlset +ida_hexrays.mop_t.create_from_mlist +ida_hexrays.mop_t.create_from_scattered_vdloc +ida_hexrays.mop_t.create_from_vdloc +ida_hexrays.mop_t.double_size +ida_hexrays.mop_t.dstr +ida_hexrays.mop_t.empty +ida_hexrays.mop_t.equal_mops +ida_hexrays.mop_t.erase +ida_hexrays.mop_t.erase_but_keep_size +ida_hexrays.mop_t.for_all_ops +ida_hexrays.mop_t.for_all_scattered_submops +ida_hexrays.mop_t.get_insn +ida_hexrays.mop_t.get_stkoff +ida_hexrays.mop_t.get_stkvar +ida_hexrays.mop_t.has_side_effects +ida_hexrays.mop_t.is01 +ida_hexrays.mop_t.is_arglist +ida_hexrays.mop_t.is_bit_reg +ida_hexrays.mop_t.is_cc +ida_hexrays.mop_t.is_ccflags +ida_hexrays.mop_t.is_constant +ida_hexrays.mop_t.is_equal_to +ida_hexrays.mop_t.is_extended_from +ida_hexrays.mop_t.is_glbaddr +ida_hexrays.mop_t.is_glbaddr_from_fixup +ida_hexrays.mop_t.is_impptr_done +ida_hexrays.mop_t.is_insn +ida_hexrays.mop_t.is_kreg +ida_hexrays.mop_t.is_lowaddr +ida_hexrays.mop_t.is_mob +ida_hexrays.mop_t.is_negative_constant +ida_hexrays.mop_t.is_one +ida_hexrays.mop_t.is_pcval +ida_hexrays.mop_t.is_positive_constant +ida_hexrays.mop_t.is_reg +ida_hexrays.mop_t.is_scattered +ida_hexrays.mop_t.is_sign_extended_from +ida_hexrays.mop_t.is_stkaddr +ida_hexrays.mop_t.is_udt +ida_hexrays.mop_t.is_undef_val +ida_hexrays.mop_t.is_zero +ida_hexrays.mop_t.is_zero_extended_from +ida_hexrays.mop_t.lexcompare +ida_hexrays.mop_t.make_blkref +ida_hexrays.mop_t.make_first_half +ida_hexrays.mop_t.make_fpnum +ida_hexrays.mop_t.make_gvar +ida_hexrays.mop_t.make_helper +ida_hexrays.mop_t.make_high_half +ida_hexrays.mop_t.make_insn +ida_hexrays.mop_t.make_low_half +ida_hexrays.mop_t.make_number +ida_hexrays.mop_t.make_reg +ida_hexrays.mop_t.make_reg_pair +ida_hexrays.mop_t.make_second_half +ida_hexrays.mop_t.make_stkvar +ida_hexrays.mop_t.may_use_aliased_memory +ida_hexrays.mop_t.oprops +ida_hexrays.mop_t.preserve_side_effects +ida_hexrays.mop_t.probably_floating +ida_hexrays.mop_t.replace_by +ida_hexrays.mop_t.set_impptr_done +ida_hexrays.mop_t.set_lowaddr +ida_hexrays.mop_t.set_udt +ida_hexrays.mop_t.set_undef_val +ida_hexrays.mop_t.shift_mop +ida_hexrays.mop_t.signed_value +ida_hexrays.mop_t.size +ida_hexrays.mop_t.swap +ida_hexrays.mop_t.t +ida_hexrays.mop_t.t +ida_hexrays.mop_t.unsigned_value +ida_hexrays.mop_t.update_numop_value +ida_hexrays.mop_t.valnum +ida_hexrays.mop_t.value +ida_hexrays.mop_t.zero +ida_hexrays.mop_v +ida_hexrays.mop_visitor_t +ida_hexrays.mop_visitor_t.__disown__ +ida_hexrays.mop_visitor_t.__init__ +ida_hexrays.mop_visitor_t.prune +ida_hexrays.mop_visitor_t.visit_mop +ida_hexrays.mop_z +ida_hexrays.mopvec_t +ida_hexrays.mopvec_t.__eq__ +ida_hexrays.mopvec_t.__getitem__ +ida_hexrays.mopvec_t.__init__ +ida_hexrays.mopvec_t.__len__ +ida_hexrays.mopvec_t.__ne__ +ida_hexrays.mopvec_t.__setitem__ +ida_hexrays.mopvec_t._del +ida_hexrays.mopvec_t.add_unique +ida_hexrays.mopvec_t.append +ida_hexrays.mopvec_t.at +ida_hexrays.mopvec_t.begin +ida_hexrays.mopvec_t.capacity +ida_hexrays.mopvec_t.clear +ida_hexrays.mopvec_t.empty +ida_hexrays.mopvec_t.end +ida_hexrays.mopvec_t.erase +ida_hexrays.mopvec_t.extend +ida_hexrays.mopvec_t.extract +ida_hexrays.mopvec_t.find +ida_hexrays.mopvec_t.grow +ida_hexrays.mopvec_t.has +ida_hexrays.mopvec_t.inject +ida_hexrays.mopvec_t.insert +ida_hexrays.mopvec_t.pop_back +ida_hexrays.mopvec_t.push_back +ida_hexrays.mopvec_t.qclear +ida_hexrays.mopvec_t.reserve +ida_hexrays.mopvec_t.resize +ida_hexrays.mopvec_t.size +ida_hexrays.mopvec_t.swap +ida_hexrays.mopvec_t.truncate +ida_hexrays.mreg2reg +ida_hexrays.must_mcode_close_block +ida_hexrays.negate_mcode_relation +ida_hexrays.negated_relation +ida_hexrays.new_block +ida_hexrays.node_bitset_t +ida_hexrays.node_bitset_t.__init__ +ida_hexrays.number_format_t +ida_hexrays.number_format_t.__init__ +ida_hexrays.number_format_t.flags +ida_hexrays.number_format_t.flags32 +ida_hexrays.number_format_t.get_radix +ida_hexrays.number_format_t.has_unmutable_type +ida_hexrays.number_format_t.is_char +ida_hexrays.number_format_t.is_dec +ida_hexrays.number_format_t.is_enum +ida_hexrays.number_format_t.is_fixed +ida_hexrays.number_format_t.is_hex +ida_hexrays.number_format_t.is_numop +ida_hexrays.number_format_t.is_oct +ida_hexrays.number_format_t.is_stroff +ida_hexrays.number_format_t.needs_to_be_inverted +ida_hexrays.number_format_t.opnum +ida_hexrays.number_format_t.org_nbytes +ida_hexrays.number_format_t.props +ida_hexrays.number_format_t.serial +ida_hexrays.number_format_t.type_name +ida_hexrays.op_parent_info_t +ida_hexrays.op_parent_info_t.__disown__ +ida_hexrays.op_parent_info_t.__init__ +ida_hexrays.op_uses_x +ida_hexrays.op_uses_y +ida_hexrays.op_uses_z +ida_hexrays.open_pseudocode +ida_hexrays.operand_locator_t +ida_hexrays.operand_locator_t.__eq__ +ida_hexrays.operand_locator_t.__ge__ +ida_hexrays.operand_locator_t.__gt__ +ida_hexrays.operand_locator_t.__init__ +ida_hexrays.operand_locator_t.__le__ +ida_hexrays.operand_locator_t.__lt__ +ida_hexrays.operand_locator_t.__ne__ +ida_hexrays.operand_locator_t.compare +ida_hexrays.operand_locator_t.ea +ida_hexrays.operand_locator_t.opnum +ida_hexrays.optblock_t +ida_hexrays.optblock_t.__disown__ +ida_hexrays.optblock_t.__init__ +ida_hexrays.optblock_t.func +ida_hexrays.optblock_t.install +ida_hexrays.optblock_t.remove +ida_hexrays.optinsn_t +ida_hexrays.optinsn_t.__disown__ +ida_hexrays.optinsn_t.__init__ +ida_hexrays.optinsn_t.func +ida_hexrays.optinsn_t.install +ida_hexrays.optinsn_t.remove +ida_hexrays.parse_user_call +ida_hexrays.partial_type_num +ida_hexrays.print_vdloc +ida_hexrays.property_op_to_typename +ida_hexrays.qstring_printer_t +ida_hexrays.qstring_printer_t.__init__ +ida_hexrays.qstring_printer_t._print +ida_hexrays.qstring_printer_t.get_s +ida_hexrays.qstring_printer_t.s +ida_hexrays.qstring_printer_t.s +ida_hexrays.qstring_printer_t.with_tags +ida_hexrays.qswap +ida_hexrays.qvector_carg_t +ida_hexrays.qvector_carg_t.__eq__ +ida_hexrays.qvector_carg_t.__getitem__ +ida_hexrays.qvector_carg_t.__init__ +ida_hexrays.qvector_carg_t.__len__ +ida_hexrays.qvector_carg_t.__ne__ +ida_hexrays.qvector_carg_t.__setitem__ +ida_hexrays.qvector_carg_t._del +ida_hexrays.qvector_carg_t.add_unique +ida_hexrays.qvector_carg_t.append +ida_hexrays.qvector_carg_t.at +ida_hexrays.qvector_carg_t.begin +ida_hexrays.qvector_carg_t.capacity +ida_hexrays.qvector_carg_t.clear +ida_hexrays.qvector_carg_t.empty +ida_hexrays.qvector_carg_t.end +ida_hexrays.qvector_carg_t.erase +ida_hexrays.qvector_carg_t.extend +ida_hexrays.qvector_carg_t.extract +ida_hexrays.qvector_carg_t.find +ida_hexrays.qvector_carg_t.grow +ida_hexrays.qvector_carg_t.has +ida_hexrays.qvector_carg_t.inject +ida_hexrays.qvector_carg_t.insert +ida_hexrays.qvector_carg_t.pop_back +ida_hexrays.qvector_carg_t.push_back +ida_hexrays.qvector_carg_t.qclear +ida_hexrays.qvector_carg_t.reserve +ida_hexrays.qvector_carg_t.resize +ida_hexrays.qvector_carg_t.size +ida_hexrays.qvector_carg_t.swap +ida_hexrays.qvector_carg_t.truncate +ida_hexrays.qvector_catchexprs_t +ida_hexrays.qvector_catchexprs_t.__eq__ +ida_hexrays.qvector_catchexprs_t.__getitem__ +ida_hexrays.qvector_catchexprs_t.__init__ +ida_hexrays.qvector_catchexprs_t.__len__ +ida_hexrays.qvector_catchexprs_t.__ne__ +ida_hexrays.qvector_catchexprs_t.__setitem__ +ida_hexrays.qvector_catchexprs_t._del +ida_hexrays.qvector_catchexprs_t.add_unique +ida_hexrays.qvector_catchexprs_t.append +ida_hexrays.qvector_catchexprs_t.at +ida_hexrays.qvector_catchexprs_t.begin +ida_hexrays.qvector_catchexprs_t.capacity +ida_hexrays.qvector_catchexprs_t.clear +ida_hexrays.qvector_catchexprs_t.empty +ida_hexrays.qvector_catchexprs_t.end +ida_hexrays.qvector_catchexprs_t.erase +ida_hexrays.qvector_catchexprs_t.extend +ida_hexrays.qvector_catchexprs_t.extract +ida_hexrays.qvector_catchexprs_t.find +ida_hexrays.qvector_catchexprs_t.grow +ida_hexrays.qvector_catchexprs_t.has +ida_hexrays.qvector_catchexprs_t.inject +ida_hexrays.qvector_catchexprs_t.insert +ida_hexrays.qvector_catchexprs_t.pop_back +ida_hexrays.qvector_catchexprs_t.push_back +ida_hexrays.qvector_catchexprs_t.qclear +ida_hexrays.qvector_catchexprs_t.reserve +ida_hexrays.qvector_catchexprs_t.resize +ida_hexrays.qvector_catchexprs_t.size +ida_hexrays.qvector_catchexprs_t.swap +ida_hexrays.qvector_catchexprs_t.truncate +ida_hexrays.qvector_ccase_t +ida_hexrays.qvector_ccase_t.__eq__ +ida_hexrays.qvector_ccase_t.__getitem__ +ida_hexrays.qvector_ccase_t.__init__ +ida_hexrays.qvector_ccase_t.__len__ +ida_hexrays.qvector_ccase_t.__ne__ +ida_hexrays.qvector_ccase_t.__setitem__ +ida_hexrays.qvector_ccase_t._del +ida_hexrays.qvector_ccase_t.add_unique +ida_hexrays.qvector_ccase_t.append +ida_hexrays.qvector_ccase_t.at +ida_hexrays.qvector_ccase_t.begin +ida_hexrays.qvector_ccase_t.capacity +ida_hexrays.qvector_ccase_t.clear +ida_hexrays.qvector_ccase_t.empty +ida_hexrays.qvector_ccase_t.end +ida_hexrays.qvector_ccase_t.erase +ida_hexrays.qvector_ccase_t.extend +ida_hexrays.qvector_ccase_t.extract +ida_hexrays.qvector_ccase_t.find +ida_hexrays.qvector_ccase_t.grow +ida_hexrays.qvector_ccase_t.has +ida_hexrays.qvector_ccase_t.inject +ida_hexrays.qvector_ccase_t.insert +ida_hexrays.qvector_ccase_t.pop_back +ida_hexrays.qvector_ccase_t.push_back +ida_hexrays.qvector_ccase_t.qclear +ida_hexrays.qvector_ccase_t.reserve +ida_hexrays.qvector_ccase_t.resize +ida_hexrays.qvector_ccase_t.size +ida_hexrays.qvector_ccase_t.swap +ida_hexrays.qvector_ccase_t.truncate +ida_hexrays.qvector_ccatchvec_t +ida_hexrays.qvector_ccatchvec_t.__eq__ +ida_hexrays.qvector_ccatchvec_t.__getitem__ +ida_hexrays.qvector_ccatchvec_t.__init__ +ida_hexrays.qvector_ccatchvec_t.__len__ +ida_hexrays.qvector_ccatchvec_t.__ne__ +ida_hexrays.qvector_ccatchvec_t.__setitem__ +ida_hexrays.qvector_ccatchvec_t._del +ida_hexrays.qvector_ccatchvec_t.add_unique +ida_hexrays.qvector_ccatchvec_t.append +ida_hexrays.qvector_ccatchvec_t.at +ida_hexrays.qvector_ccatchvec_t.begin +ida_hexrays.qvector_ccatchvec_t.capacity +ida_hexrays.qvector_ccatchvec_t.clear +ida_hexrays.qvector_ccatchvec_t.empty +ida_hexrays.qvector_ccatchvec_t.end +ida_hexrays.qvector_ccatchvec_t.erase +ida_hexrays.qvector_ccatchvec_t.extend +ida_hexrays.qvector_ccatchvec_t.extract +ida_hexrays.qvector_ccatchvec_t.find +ida_hexrays.qvector_ccatchvec_t.grow +ida_hexrays.qvector_ccatchvec_t.has +ida_hexrays.qvector_ccatchvec_t.inject +ida_hexrays.qvector_ccatchvec_t.insert +ida_hexrays.qvector_ccatchvec_t.pop_back +ida_hexrays.qvector_ccatchvec_t.push_back +ida_hexrays.qvector_ccatchvec_t.qclear +ida_hexrays.qvector_ccatchvec_t.reserve +ida_hexrays.qvector_ccatchvec_t.resize +ida_hexrays.qvector_ccatchvec_t.size +ida_hexrays.qvector_ccatchvec_t.swap +ida_hexrays.qvector_ccatchvec_t.truncate +ida_hexrays.qvector_history_t +ida_hexrays.qvector_history_t.__eq__ +ida_hexrays.qvector_history_t.__getitem__ +ida_hexrays.qvector_history_t.__init__ +ida_hexrays.qvector_history_t.__len__ +ida_hexrays.qvector_history_t.__ne__ +ida_hexrays.qvector_history_t.__setitem__ +ida_hexrays.qvector_history_t._del +ida_hexrays.qvector_history_t.add_unique +ida_hexrays.qvector_history_t.append +ida_hexrays.qvector_history_t.at +ida_hexrays.qvector_history_t.begin +ida_hexrays.qvector_history_t.capacity +ida_hexrays.qvector_history_t.clear +ida_hexrays.qvector_history_t.empty +ida_hexrays.qvector_history_t.end +ida_hexrays.qvector_history_t.erase +ida_hexrays.qvector_history_t.extend +ida_hexrays.qvector_history_t.extract +ida_hexrays.qvector_history_t.find +ida_hexrays.qvector_history_t.grow +ida_hexrays.qvector_history_t.has +ida_hexrays.qvector_history_t.inject +ida_hexrays.qvector_history_t.insert +ida_hexrays.qvector_history_t.pop_back +ida_hexrays.qvector_history_t.push_back +ida_hexrays.qvector_history_t.qclear +ida_hexrays.qvector_history_t.reserve +ida_hexrays.qvector_history_t.resize +ida_hexrays.qvector_history_t.size +ida_hexrays.qvector_history_t.swap +ida_hexrays.qvector_history_t.truncate +ida_hexrays.qvector_lvar_t +ida_hexrays.qvector_lvar_t.__eq__ +ida_hexrays.qvector_lvar_t.__getitem__ +ida_hexrays.qvector_lvar_t.__init__ +ida_hexrays.qvector_lvar_t.__len__ +ida_hexrays.qvector_lvar_t.__ne__ +ida_hexrays.qvector_lvar_t.__setitem__ +ida_hexrays.qvector_lvar_t._del +ida_hexrays.qvector_lvar_t.add_unique +ida_hexrays.qvector_lvar_t.append +ida_hexrays.qvector_lvar_t.at +ida_hexrays.qvector_lvar_t.begin +ida_hexrays.qvector_lvar_t.capacity +ida_hexrays.qvector_lvar_t.clear +ida_hexrays.qvector_lvar_t.empty +ida_hexrays.qvector_lvar_t.end +ida_hexrays.qvector_lvar_t.erase +ida_hexrays.qvector_lvar_t.extend +ida_hexrays.qvector_lvar_t.extract +ida_hexrays.qvector_lvar_t.find +ida_hexrays.qvector_lvar_t.grow +ida_hexrays.qvector_lvar_t.has +ida_hexrays.qvector_lvar_t.inject +ida_hexrays.qvector_lvar_t.insert +ida_hexrays.qvector_lvar_t.pop_back +ida_hexrays.qvector_lvar_t.push_back +ida_hexrays.qvector_lvar_t.qclear +ida_hexrays.qvector_lvar_t.reserve +ida_hexrays.qvector_lvar_t.resize +ida_hexrays.qvector_lvar_t.size +ida_hexrays.qvector_lvar_t.swap +ida_hexrays.qvector_lvar_t.truncate +ida_hexrays.reg2mreg +ida_hexrays.remitem +ida_hexrays.remove_hexrays_callback +ida_hexrays.rename_lvar +ida_hexrays.restore_user_cmts +ida_hexrays.restore_user_defined_calls +ida_hexrays.restore_user_iflags +ida_hexrays.restore_user_labels +ida_hexrays.restore_user_lvar_settings +ida_hexrays.restore_user_numforms +ida_hexrays.restore_user_unions +ida_hexrays.rlist_t +ida_hexrays.rlist_t.__init__ +ida_hexrays.rlist_t.dstr +ida_hexrays.save_user_cmts +ida_hexrays.save_user_defined_calls +ida_hexrays.save_user_iflags +ida_hexrays.save_user_labels +ida_hexrays.save_user_lvar_settings +ida_hexrays.save_user_numforms +ida_hexrays.save_user_unions +ida_hexrays.scif_t +ida_hexrays.scif_t.__init__ +ida_hexrays.scif_t.mba +ida_hexrays.scif_t.name +ida_hexrays.scif_t.type +ida_hexrays.scif_visitor_t +ida_hexrays.scif_visitor_t.__disown__ +ida_hexrays.scif_visitor_t.__init__ +ida_hexrays.scif_visitor_t.visit_scif_mop +ida_hexrays.select_udt_by_offset +ida_hexrays.send_database +ida_hexrays.set2jcnd +ida_hexrays.set_type +ida_hexrays.simple_graph_t +ida_hexrays.simple_graph_t.__init__ +ida_hexrays.simple_graph_t.begin +ida_hexrays.simple_graph_t.compute_dominators +ida_hexrays.simple_graph_t.compute_immediate_dominators +ida_hexrays.simple_graph_t.depth_first_postorder +ida_hexrays.simple_graph_t.depth_first_preorder +ida_hexrays.simple_graph_t.end +ida_hexrays.simple_graph_t.front +ida_hexrays.simple_graph_t.goup +ida_hexrays.simple_graph_t.inc +ida_hexrays.stkvar_ref_t +ida_hexrays.stkvar_ref_t.__eq__ +ida_hexrays.stkvar_ref_t.__ge__ +ida_hexrays.stkvar_ref_t.__gt__ +ida_hexrays.stkvar_ref_t.__init__ +ida_hexrays.stkvar_ref_t.__le__ +ida_hexrays.stkvar_ref_t.__lt__ +ida_hexrays.stkvar_ref_t.__ne__ +ida_hexrays.stkvar_ref_t.compare +ida_hexrays.stkvar_ref_t.get_stkvar +ida_hexrays.stkvar_ref_t.mba +ida_hexrays.stkvar_ref_t.off +ida_hexrays.stkvar_ref_t.swap +ida_hexrays.swap_mcode_relation +ida_hexrays.swapped_relation +ida_hexrays.term_hexrays_plugin +ida_hexrays.treeloc_t +ida_hexrays.treeloc_t.__eq__ +ida_hexrays.treeloc_t.__init__ +ida_hexrays.treeloc_t.__lt__ +ida_hexrays.udc_filter_t +ida_hexrays.udc_filter_t.__disown__ +ida_hexrays.udc_filter_t.__init__ +ida_hexrays.udc_filter_t.apply +ida_hexrays.udc_filter_t.cleanup +ida_hexrays.udc_filter_t.empty +ida_hexrays.udc_filter_t.init +ida_hexrays.udc_filter_t.install +ida_hexrays.udc_filter_t.match +ida_hexrays.udc_filter_t.remove +ida_hexrays.udcall_map_begin +ida_hexrays.udcall_map_clear +ida_hexrays.udcall_map_end +ida_hexrays.udcall_map_erase +ida_hexrays.udcall_map_find +ida_hexrays.udcall_map_first +ida_hexrays.udcall_map_free +ida_hexrays.udcall_map_insert +ida_hexrays.udcall_map_iterator_t +ida_hexrays.udcall_map_iterator_t.__eq__ +ida_hexrays.udcall_map_iterator_t.__init__ +ida_hexrays.udcall_map_iterator_t.__ne__ +ida_hexrays.udcall_map_new +ida_hexrays.udcall_map_next +ida_hexrays.udcall_map_prev +ida_hexrays.udcall_map_second +ida_hexrays.udcall_map_size +ida_hexrays.udcall_t +ida_hexrays.udcall_t.__eq__ +ida_hexrays.udcall_t.__ge__ +ida_hexrays.udcall_t.__gt__ +ida_hexrays.udcall_t.__init__ +ida_hexrays.udcall_t.__le__ +ida_hexrays.udcall_t.__lt__ +ida_hexrays.udcall_t.__ne__ +ida_hexrays.udcall_t.compare +ida_hexrays.udcall_t.empty +ida_hexrays.ui_stroff_applicator_t +ida_hexrays.ui_stroff_applicator_t.__disown__ +ida_hexrays.ui_stroff_applicator_t.__init__ +ida_hexrays.ui_stroff_applicator_t.apply +ida_hexrays.ui_stroff_op_t +ida_hexrays.ui_stroff_op_t.__eq__ +ida_hexrays.ui_stroff_op_t.__init__ +ida_hexrays.ui_stroff_op_t.__ne__ +ida_hexrays.ui_stroff_op_t.offset +ida_hexrays.ui_stroff_op_t.text +ida_hexrays.ui_stroff_ops_t +ida_hexrays.ui_stroff_ops_t.__eq__ +ida_hexrays.ui_stroff_ops_t.__getitem__ +ida_hexrays.ui_stroff_ops_t.__init__ +ida_hexrays.ui_stroff_ops_t.__len__ +ida_hexrays.ui_stroff_ops_t.__ne__ +ida_hexrays.ui_stroff_ops_t.__setitem__ +ida_hexrays.ui_stroff_ops_t._del +ida_hexrays.ui_stroff_ops_t.add_unique +ida_hexrays.ui_stroff_ops_t.append +ida_hexrays.ui_stroff_ops_t.at +ida_hexrays.ui_stroff_ops_t.begin +ida_hexrays.ui_stroff_ops_t.capacity +ida_hexrays.ui_stroff_ops_t.clear +ida_hexrays.ui_stroff_ops_t.empty +ida_hexrays.ui_stroff_ops_t.end +ida_hexrays.ui_stroff_ops_t.erase +ida_hexrays.ui_stroff_ops_t.extend +ida_hexrays.ui_stroff_ops_t.extract +ida_hexrays.ui_stroff_ops_t.find +ida_hexrays.ui_stroff_ops_t.grow +ida_hexrays.ui_stroff_ops_t.has +ida_hexrays.ui_stroff_ops_t.inject +ida_hexrays.ui_stroff_ops_t.insert +ida_hexrays.ui_stroff_ops_t.pop_back +ida_hexrays.ui_stroff_ops_t.push_back +ida_hexrays.ui_stroff_ops_t.qclear +ida_hexrays.ui_stroff_ops_t.reserve +ida_hexrays.ui_stroff_ops_t.resize +ida_hexrays.ui_stroff_ops_t.size +ida_hexrays.ui_stroff_ops_t.swap +ida_hexrays.ui_stroff_ops_t.truncate +ida_hexrays.user_cmts_begin +ida_hexrays.user_cmts_clear +ida_hexrays.user_cmts_end +ida_hexrays.user_cmts_erase +ida_hexrays.user_cmts_find +ida_hexrays.user_cmts_first +ida_hexrays.user_cmts_free +ida_hexrays.user_cmts_insert +ida_hexrays.user_cmts_iterator_t +ida_hexrays.user_cmts_iterator_t.__eq__ +ida_hexrays.user_cmts_iterator_t.__init__ +ida_hexrays.user_cmts_iterator_t.__ne__ +ida_hexrays.user_cmts_new +ida_hexrays.user_cmts_next +ida_hexrays.user_cmts_prev +ida_hexrays.user_cmts_second +ida_hexrays.user_cmts_size +ida_hexrays.user_cmts_t +ida_hexrays.user_cmts_t.__init__ +ida_hexrays.user_cmts_t.at +ida_hexrays.user_cmts_t.size +ida_hexrays.user_iflags_begin +ida_hexrays.user_iflags_clear +ida_hexrays.user_iflags_end +ida_hexrays.user_iflags_erase +ida_hexrays.user_iflags_find +ida_hexrays.user_iflags_first +ida_hexrays.user_iflags_free +ida_hexrays.user_iflags_insert +ida_hexrays.user_iflags_iterator_t +ida_hexrays.user_iflags_iterator_t.__eq__ +ida_hexrays.user_iflags_iterator_t.__init__ +ida_hexrays.user_iflags_iterator_t.__ne__ +ida_hexrays.user_iflags_new +ida_hexrays.user_iflags_next +ida_hexrays.user_iflags_prev +ida_hexrays.user_iflags_second +ida_hexrays.user_iflags_size +ida_hexrays.user_iflags_t +ida_hexrays.user_iflags_t.__init__ +ida_hexrays.user_iflags_t.at +ida_hexrays.user_iflags_t.size +ida_hexrays.user_labels_begin +ida_hexrays.user_labels_clear +ida_hexrays.user_labels_end +ida_hexrays.user_labels_erase +ida_hexrays.user_labels_find +ida_hexrays.user_labels_first +ida_hexrays.user_labels_free +ida_hexrays.user_labels_insert +ida_hexrays.user_labels_iterator_t +ida_hexrays.user_labels_iterator_t.__eq__ +ida_hexrays.user_labels_iterator_t.__init__ +ida_hexrays.user_labels_iterator_t.__ne__ +ida_hexrays.user_labels_new +ida_hexrays.user_labels_next +ida_hexrays.user_labels_prev +ida_hexrays.user_labels_second +ida_hexrays.user_labels_size +ida_hexrays.user_labels_t +ida_hexrays.user_labels_t.__init__ +ida_hexrays.user_labels_t.at +ida_hexrays.user_labels_t.size +ida_hexrays.user_lvar_modifier_t +ida_hexrays.user_lvar_modifier_t.__disown__ +ida_hexrays.user_lvar_modifier_t.__init__ +ida_hexrays.user_lvar_modifier_t.modify_lvars +ida_hexrays.user_numforms_begin +ida_hexrays.user_numforms_clear +ida_hexrays.user_numforms_end +ida_hexrays.user_numforms_erase +ida_hexrays.user_numforms_find +ida_hexrays.user_numforms_first +ida_hexrays.user_numforms_free +ida_hexrays.user_numforms_insert +ida_hexrays.user_numforms_iterator_t +ida_hexrays.user_numforms_iterator_t.__eq__ +ida_hexrays.user_numforms_iterator_t.__init__ +ida_hexrays.user_numforms_iterator_t.__ne__ +ida_hexrays.user_numforms_new +ida_hexrays.user_numforms_next +ida_hexrays.user_numforms_prev +ida_hexrays.user_numforms_second +ida_hexrays.user_numforms_size +ida_hexrays.user_numforms_t +ida_hexrays.user_numforms_t.__init__ +ida_hexrays.user_numforms_t.at +ida_hexrays.user_numforms_t.size +ida_hexrays.user_unions_begin +ida_hexrays.user_unions_clear +ida_hexrays.user_unions_end +ida_hexrays.user_unions_erase +ida_hexrays.user_unions_find +ida_hexrays.user_unions_first +ida_hexrays.user_unions_free +ida_hexrays.user_unions_insert +ida_hexrays.user_unions_iterator_t +ida_hexrays.user_unions_iterator_t.__eq__ +ida_hexrays.user_unions_iterator_t.__init__ +ida_hexrays.user_unions_iterator_t.__ne__ +ida_hexrays.user_unions_new +ida_hexrays.user_unions_next +ida_hexrays.user_unions_prev +ida_hexrays.user_unions_second +ida_hexrays.user_unions_size +ida_hexrays.user_unions_t +ida_hexrays.user_unions_t.__init__ +ida_hexrays.user_unions_t.at +ida_hexrays.user_unions_t.size +ida_hexrays.uval_ivl_ivlset_t +ida_hexrays.uval_ivl_ivlset_t.__eq__ +ida_hexrays.uval_ivl_ivlset_t.__init__ +ida_hexrays.uval_ivl_ivlset_t.__ne__ +ida_hexrays.uval_ivl_ivlset_t.all_values +ida_hexrays.uval_ivl_ivlset_t.begin +ida_hexrays.uval_ivl_ivlset_t.clear +ida_hexrays.uval_ivl_ivlset_t.empty +ida_hexrays.uval_ivl_ivlset_t.end +ida_hexrays.uval_ivl_ivlset_t.getivl +ida_hexrays.uval_ivl_ivlset_t.lastivl +ida_hexrays.uval_ivl_ivlset_t.nivls +ida_hexrays.uval_ivl_ivlset_t.qclear +ida_hexrays.uval_ivl_ivlset_t.set_all_values +ida_hexrays.uval_ivl_ivlset_t.single_value +ida_hexrays.uval_ivl_ivlset_t.swap +ida_hexrays.uval_ivl_t +ida_hexrays.uval_ivl_t.__init__ +ida_hexrays.uval_ivl_t.end +ida_hexrays.uval_ivl_t.last +ida_hexrays.uval_ivl_t.valid +ida_hexrays.valrng_t +ida_hexrays.valrng_t.__eq__ +ida_hexrays.valrng_t.__ge__ +ida_hexrays.valrng_t.__gt__ +ida_hexrays.valrng_t.__init__ +ida_hexrays.valrng_t.__le__ +ida_hexrays.valrng_t.__lt__ +ida_hexrays.valrng_t.__ne__ +ida_hexrays.valrng_t._deregister +ida_hexrays.valrng_t._print +ida_hexrays.valrng_t._register +ida_hexrays.valrng_t.all_values +ida_hexrays.valrng_t.compare +ida_hexrays.valrng_t.cvt_to_cmp +ida_hexrays.valrng_t.cvt_to_single_value +ida_hexrays.valrng_t.dstr +ida_hexrays.valrng_t.empty +ida_hexrays.valrng_t.get_size +ida_hexrays.valrng_t.has +ida_hexrays.valrng_t.intersect_with +ida_hexrays.valrng_t.inverse +ida_hexrays.valrng_t.is_unknown +ida_hexrays.valrng_t.max_svalue +ida_hexrays.valrng_t.max_value +ida_hexrays.valrng_t.min_svalue +ida_hexrays.valrng_t.reduce_size +ida_hexrays.valrng_t.set_all +ida_hexrays.valrng_t.set_cmp +ida_hexrays.valrng_t.set_eq +ida_hexrays.valrng_t.set_none +ida_hexrays.valrng_t.set_unk +ida_hexrays.valrng_t.swap +ida_hexrays.valrng_t.unite_with +ida_hexrays.var_ref_t +ida_hexrays.var_ref_t.__eq__ +ida_hexrays.var_ref_t.__ge__ +ida_hexrays.var_ref_t.__gt__ +ida_hexrays.var_ref_t.__init__ +ida_hexrays.var_ref_t.__le__ +ida_hexrays.var_ref_t.__lt__ +ida_hexrays.var_ref_t.__ne__ +ida_hexrays.var_ref_t.compare +ida_hexrays.var_ref_t.getv +ida_hexrays.var_ref_t.idx +ida_hexrays.var_ref_t.mba +ida_hexrays.vc_printer_t +ida_hexrays.vc_printer_t.__disown__ +ida_hexrays.vc_printer_t.__init__ +ida_hexrays.vc_printer_t.func +ida_hexrays.vc_printer_t.lastchar +ida_hexrays.vc_printer_t.oneliner +ida_hexrays.vd_failure_t +ida_hexrays.vd_failure_t.__init__ +ida_hexrays.vd_failure_t.desc +ida_hexrays.vd_interr_t +ida_hexrays.vd_interr_t.__init__ +ida_hexrays.vd_printer_t +ida_hexrays.vd_printer_t.__disown__ +ida_hexrays.vd_printer_t.__init__ +ida_hexrays.vd_printer_t._print +ida_hexrays.vd_printer_t.hdrlines +ida_hexrays.vdloc_t +ida_hexrays.vdloc_t.__eq__ +ida_hexrays.vdloc_t.__ge__ +ida_hexrays.vdloc_t.__gt__ +ida_hexrays.vdloc_t.__init__ +ida_hexrays.vdloc_t.__le__ +ida_hexrays.vdloc_t.__lt__ +ida_hexrays.vdloc_t.__ne__ +ida_hexrays.vdloc_t._set_reg1 +ida_hexrays.vdloc_t.compare +ida_hexrays.vdloc_t.is_aliasable +ida_hexrays.vdloc_t.reg1 +ida_hexrays.vdloc_t.set_reg1 +ida_hexrays.vdui_t +ida_hexrays.vdui_t.__init__ +ida_hexrays.vdui_t.calc_cmt_type +ida_hexrays.vdui_t.cfunc +ida_hexrays.vdui_t.clear +ida_hexrays.vdui_t.collapse_item +ida_hexrays.vdui_t.collapse_lvars +ida_hexrays.vdui_t.cpos +ida_hexrays.vdui_t.ct +ida_hexrays.vdui_t.ctree_to_disasm +ida_hexrays.vdui_t.del_orphan_cmts +ida_hexrays.vdui_t.edit_cmt +ida_hexrays.vdui_t.edit_func_cmt +ida_hexrays.vdui_t.flags +ida_hexrays.vdui_t.get_current_item +ida_hexrays.vdui_t.get_current_label +ida_hexrays.vdui_t.get_number +ida_hexrays.vdui_t.head +ida_hexrays.vdui_t.in_ctree +ida_hexrays.vdui_t.invert_bits +ida_hexrays.vdui_t.invert_sign +ida_hexrays.vdui_t.item +ida_hexrays.vdui_t.jump_enter +ida_hexrays.vdui_t.last_code +ida_hexrays.vdui_t.locked +ida_hexrays.vdui_t.map_lvar +ida_hexrays.vdui_t.mba +ida_hexrays.vdui_t.refresh_cpos +ida_hexrays.vdui_t.refresh_ctext +ida_hexrays.vdui_t.refresh_view +ida_hexrays.vdui_t.rename_global +ida_hexrays.vdui_t.rename_label +ida_hexrays.vdui_t.rename_lvar +ida_hexrays.vdui_t.rename_udm +ida_hexrays.vdui_t.set_global_type +ida_hexrays.vdui_t.set_locked +ida_hexrays.vdui_t.set_lvar_cmt +ida_hexrays.vdui_t.set_lvar_type +ida_hexrays.vdui_t.set_noptr_lvar +ida_hexrays.vdui_t.set_num_enum +ida_hexrays.vdui_t.set_num_radix +ida_hexrays.vdui_t.set_num_stroff +ida_hexrays.vdui_t.set_udm_type +ida_hexrays.vdui_t.set_valid +ida_hexrays.vdui_t.set_visible +ida_hexrays.vdui_t.split_item +ida_hexrays.vdui_t.switch_to +ida_hexrays.vdui_t.tail +ida_hexrays.vdui_t.ui_edit_lvar_cmt +ida_hexrays.vdui_t.ui_map_lvar +ida_hexrays.vdui_t.ui_rename_lvar +ida_hexrays.vdui_t.ui_set_call_type +ida_hexrays.vdui_t.ui_set_lvar_type +ida_hexrays.vdui_t.ui_unmap_lvar +ida_hexrays.vdui_t.valid +ida_hexrays.vdui_t.view_idx +ida_hexrays.vdui_t.visible +ida_hexrays.vivl_t +ida_hexrays.vivl_t.__eq__ +ida_hexrays.vivl_t.__ge__ +ida_hexrays.vivl_t.__gt__ +ida_hexrays.vivl_t.__init__ +ida_hexrays.vivl_t.__le__ +ida_hexrays.vivl_t.__lt__ +ida_hexrays.vivl_t.__ne__ +ida_hexrays.vivl_t._print +ida_hexrays.vivl_t.compare +ida_hexrays.vivl_t.contains +ida_hexrays.vivl_t.dstr +ida_hexrays.vivl_t.extend_to_cover +ida_hexrays.vivl_t.includes +ida_hexrays.vivl_t.intersect +ida_hexrays.vivl_t.overlap +ida_hexrays.vivl_t.set +ida_hexrays.vivl_t.set_reg +ida_hexrays.vivl_t.set_stkoff +ida_hexrays.vivl_t.size +ida_hexrays.voff_t +ida_hexrays.voff_t.__eq__ +ida_hexrays.voff_t.__ge__ +ida_hexrays.voff_t.__gt__ +ida_hexrays.voff_t.__init__ +ida_hexrays.voff_t.__le__ +ida_hexrays.voff_t.__lt__ +ida_hexrays.voff_t.__ne__ +ida_hexrays.voff_t.add +ida_hexrays.voff_t.compare +ida_hexrays.voff_t.defined +ida_hexrays.voff_t.diff +ida_hexrays.voff_t.get_reg +ida_hexrays.voff_t.get_stkoff +ida_hexrays.voff_t.inc +ida_hexrays.voff_t.is_reg +ida_hexrays.voff_t.is_stkoff +ida_hexrays.voff_t.off +ida_hexrays.voff_t.set +ida_hexrays.voff_t.set_reg +ida_hexrays.voff_t.set_stkoff +ida_hexrays.voff_t.type +ida_hexrays.voff_t.undef +ida_allins +ida_auto +ida_auto.AU_CHLB +ida_auto.AU_CODE +ida_auto.AU_FCHUNK +ida_auto.AU_FINAL +ida_auto.AU_LBF2 +ida_auto.AU_LBF3 +ida_auto.AU_LIBF +ida_auto.AU_NONE +ida_auto.AU_PROC +ida_auto.AU_TAIL +ida_auto.AU_TYPE +ida_auto.AU_UNK +ida_auto.AU_USD2 +ida_auto.AU_USED +ida_auto.AU_WEAK +ida_auto.auto_apply_tail +ida_auto.auto_apply_type +ida_auto.auto_cancel +ida_auto.auto_display_t +ida_auto.auto_display_t.__init__ +ida_auto.auto_get +ida_auto.auto_is_ok +ida_auto.auto_make_code +ida_auto.auto_make_proc +ida_auto.auto_make_step +ida_auto.auto_mark +ida_auto.auto_mark_range +ida_auto.auto_postpone_analysis +ida_auto.auto_recreate_insn +ida_auto.auto_unmark +ida_auto.auto_wait +ida_auto.auto_wait_range +ida_auto.enable_auto +ida_auto.get_auto_display +ida_auto.get_auto_state +ida_auto.is_auto_enabled +ida_auto.may_create_stkvars +ida_auto.may_trace_sp +ida_auto.peek_auto_queue +ida_auto.plan_and_wait +ida_auto.plan_ea +ida_auto.plan_range +ida_auto.reanalyze_callers +ida_auto.revert_ida_decisions +ida_auto.set_auto_state +ida_auto.set_ida_state +ida_auto.show_addr +ida_auto.show_auto +ida_auto.st_Ready +ida_auto.st_Think +ida_auto.st_Waiting +ida_auto.st_Work +ida_bitrange +ida_bitrange.bitrange_t +ida_bitrange.bitrange_t.__eq__ +ida_bitrange.bitrange_t.__ge__ +ida_bitrange.bitrange_t.__gt__ +ida_bitrange.bitrange_t.__init__ +ida_bitrange.bitrange_t.__le__ +ida_bitrange.bitrange_t.__lt__ +ida_bitrange.bitrange_t.__ne__ +ida_bitrange.bitrange_t.__repr__ +ida_bitrange.bitrange_t.__str__ +ida_bitrange.bitrange_t.apply_mask +ida_bitrange.bitrange_t.bitoff +ida_bitrange.bitrange_t.bitsize +ida_bitrange.bitrange_t.bytesize +ida_bitrange.bitrange_t.compare +ida_bitrange.bitrange_t.create_union +ida_bitrange.bitrange_t.empty +ida_bitrange.bitrange_t.extract +ida_bitrange.bitrange_t.has_common +ida_bitrange.bitrange_t.init +ida_bitrange.bitrange_t.inject +ida_bitrange.bitrange_t.intersect +ida_bitrange.bitrange_t.mask64 +ida_bitrange.bitrange_t.reset +ida_bitrange.bitrange_t.shift_down +ida_bitrange.bitrange_t.shift_up +ida_bitrange.bitrange_t.sub +ida_bytes +ida_bytes.ALOPT_APPEND +ida_bytes.ALOPT_IGNCLT +ida_bytes.ALOPT_IGNHEADS +ida_bytes.ALOPT_IGNPRINT +ida_bytes.ALOPT_MAX4K +ida_bytes.ALOPT_ONLYTERM +ida_bytes.BIN_SEARCH_BACKWARD +ida_bytes.BIN_SEARCH_BITMASK +ida_bytes.BIN_SEARCH_CASE +ida_bytes.BIN_SEARCH_FORWARD +ida_bytes.BIN_SEARCH_INITED +ida_bytes.BIN_SEARCH_NOBREAK +ida_bytes.BIN_SEARCH_NOCASE +ida_bytes.BIN_SEARCH_NOSHOW +ida_bytes.DELIT_DELNAMES +ida_bytes.DELIT_EXPAND +ida_bytes.DELIT_KEEPFUNC +ida_bytes.DELIT_NOCMT +ida_bytes.DELIT_NOTRUNC +ida_bytes.DELIT_NOUNAME +ida_bytes.DELIT_SIMPLE +ida_bytes.DTP_NODUP +ida_bytes.DTP_NODUP +ida_bytes.DT_TYPE +ida_bytes.FF_ALIGN +ida_bytes.FF_ANYNAME +ida_bytes.FF_BNOT +ida_bytes.FF_BYTE +ida_bytes.FF_CODE +ida_bytes.FF_COMM +ida_bytes.FF_CUSTOM +ida_bytes.FF_DATA +ida_bytes.FF_DOUBLE +ida_bytes.FF_DWORD +ida_bytes.FF_FLOAT +ida_bytes.FF_FLOW +ida_bytes.FF_FUNC +ida_bytes.FF_IMMD +ida_bytes.FF_IVL +ida_bytes.FF_JUMP +ida_bytes.FF_LABL +ida_bytes.FF_LINE +ida_bytes.FF_NAME +ida_bytes.FF_N_CHAR +ida_bytes.FF_N_CUST +ida_bytes.FF_N_ENUM +ida_bytes.FF_N_FLT +ida_bytes.FF_N_FOP +ida_bytes.FF_N_NUMB +ida_bytes.FF_N_NUMD +ida_bytes.FF_N_NUMH +ida_bytes.FF_N_NUMO +ida_bytes.FF_N_OFF +ida_bytes.FF_N_SEG +ida_bytes.FF_N_STK +ida_bytes.FF_N_STRO +ida_bytes.FF_N_VOID +ida_bytes.FF_OWORD +ida_bytes.FF_PACKREAL +ida_bytes.FF_QWORD +ida_bytes.FF_REF +ida_bytes.FF_SIGN +ida_bytes.FF_STRLIT +ida_bytes.FF_STRUCT +ida_bytes.FF_TAIL +ida_bytes.FF_TBYTE +ida_bytes.FF_UNK +ida_bytes.FF_UNUSED +ida_bytes.FF_WORD +ida_bytes.FF_YWORD +ida_bytes.FF_ZWORD +ida_bytes.GFE_IDB_VALUE +ida_bytes.GFE_VALUE +ida_bytes.GMB_READALL +ida_bytes.GMB_WAITBOX +ida_bytes.ITEM_END_CANCEL +ida_bytes.ITEM_END_FIXUP +ida_bytes.ITEM_END_INITED +ida_bytes.ITEM_END_NAME +ida_bytes.ITEM_END_XREF +ida_bytes.MS_CLS +ida_bytes.MS_CODE +ida_bytes.MS_COMM +ida_bytes.MS_N_TYPE +ida_bytes.MS_VAL +ida_bytes.OPND_ALL +ida_bytes.OPND_MASK +ida_bytes.OPND_OUTER +ida_bytes.PBSENC_ALL +ida_bytes.PBSENC_DEF1BPU +ida_bytes.PSTF_ATTRIB +ida_bytes.PSTF_ENC +ida_bytes.PSTF_HOTKEY +ida_bytes.PSTF_ONLY_ENC +ida_bytes.PSTF_TBRIEF +ida_bytes.PSTF_TINLIN +ida_bytes.PSTF_TMASK +ida_bytes.PSTF_TNORM +ida_bytes.STRCONV_ESCAPE +ida_bytes.STRCONV_INCLLEN +ida_bytes.STRCONV_REPLCHAR +ida_bytes.__to_bytevec +ida_bytes.__walk_types_and_formats +ida_bytes.add_byte +ida_bytes.add_dword +ida_bytes.add_hidden_range +ida_bytes.add_mapping +ida_bytes.add_qword +ida_bytes.add_word +ida_bytes.align_flag +ida_bytes.append_cmt +ida_bytes.attach_custom_data_format +ida_bytes.bin_flag +ida_bytes.bin_search +ida_bytes.byte_flag +ida_bytes.bytesize +ida_bytes.calc_def_align +ida_bytes.calc_dflags +ida_bytes.calc_max_align +ida_bytes.calc_max_item_end +ida_bytes.calc_min_align +ida_bytes.can_define_item +ida_bytes.change_storage_type +ida_bytes.char_flag +ida_bytes.chunk_size +ida_bytes.chunk_start +ida_bytes.clr_lzero +ida_bytes.clr_op_type +ida_bytes.code_flag +ida_bytes.combine_flags +ida_bytes.compiled_binpat_t +ida_bytes.compiled_binpat_t.__eq__ +ida_bytes.compiled_binpat_t.__init__ +ida_bytes.compiled_binpat_t.__ne__ +ida_bytes.compiled_binpat_t.all_bytes_defined +ida_bytes.compiled_binpat_t.qclear +ida_bytes.compiled_binpat_vec_t +ida_bytes.compiled_binpat_vec_t.__eq__ +ida_bytes.compiled_binpat_vec_t.__getitem__ +ida_bytes.compiled_binpat_vec_t.__init__ +ida_bytes.compiled_binpat_vec_t.__len__ +ida_bytes.compiled_binpat_vec_t.__ne__ +ida_bytes.compiled_binpat_vec_t.__setitem__ +ida_bytes.compiled_binpat_vec_t._del +ida_bytes.compiled_binpat_vec_t.add_unique +ida_bytes.compiled_binpat_vec_t.append +ida_bytes.compiled_binpat_vec_t.at +ida_bytes.compiled_binpat_vec_t.begin +ida_bytes.compiled_binpat_vec_t.capacity +ida_bytes.compiled_binpat_vec_t.clear +ida_bytes.compiled_binpat_vec_t.empty +ida_bytes.compiled_binpat_vec_t.end +ida_bytes.compiled_binpat_vec_t.erase +ida_bytes.compiled_binpat_vec_t.extend +ida_bytes.compiled_binpat_vec_t.extract +ida_bytes.compiled_binpat_vec_t.find +ida_bytes.compiled_binpat_vec_t.grow +ida_bytes.compiled_binpat_vec_t.has +ida_bytes.compiled_binpat_vec_t.inject +ida_bytes.compiled_binpat_vec_t.insert +ida_bytes.compiled_binpat_vec_t.pop_back +ida_bytes.compiled_binpat_vec_t.push_back +ida_bytes.compiled_binpat_vec_t.qclear +ida_bytes.compiled_binpat_vec_t.reserve +ida_bytes.compiled_binpat_vec_t.resize +ida_bytes.compiled_binpat_vec_t.size +ida_bytes.compiled_binpat_vec_t.swap +ida_bytes.compiled_binpat_vec_t.truncate +ida_bytes.create_16bit_data +ida_bytes.create_32bit_data +ida_bytes.create_align +ida_bytes.create_byte +ida_bytes.create_custdata +ida_bytes.create_data +ida_bytes.create_double +ida_bytes.create_dword +ida_bytes.create_float +ida_bytes.create_oword +ida_bytes.create_packed_real +ida_bytes.create_qword +ida_bytes.create_strlit +ida_bytes.create_struct +ida_bytes.create_tbyte +ida_bytes.create_word +ida_bytes.create_yword +ida_bytes.create_zword +ida_bytes.cust_flag +ida_bytes.custfmt_flag +ida_bytes.data_format_t +ida_bytes.data_format_t.__get_id +ida_bytes.data_format_t.__init__ +ida_bytes.data_format_t.__init__ +ida_bytes.data_format_t.hotkey +ida_bytes.data_format_t.is_present_in_menus +ida_bytes.data_format_t.menu_name +ida_bytes.data_format_t.name +ida_bytes.data_format_t.props +ida_bytes.data_format_t.text_width +ida_bytes.data_format_t.value_size +ida_bytes.data_type_t +ida_bytes.data_type_t.__get_id +ida_bytes.data_type_t.__init__ +ida_bytes.data_type_t.__init__ +ida_bytes.data_type_t.asm_keyword +ida_bytes.data_type_t.hotkey +ida_bytes.data_type_t.is_present_in_menus +ida_bytes.data_type_t.menu_name +ida_bytes.data_type_t.name +ida_bytes.data_type_t.props +ida_bytes.data_type_t.value_size +ida_bytes.dec_flag +ida_bytes.del_hidden_range +ida_bytes.del_items +ida_bytes.del_mapping +ida_bytes.del_value +ida_bytes.detach_custom_data_format +ida_bytes.disable_flags +ida_bytes.double_flag +ida_bytes.dword_flag +ida_bytes.enable_flags +ida_bytes.enum_flag +ida_bytes.equal_bytes +ida_bytes.f_has_cmt +ida_bytes.f_has_dummy_name +ida_bytes.f_has_extra_cmts +ida_bytes.f_has_name +ida_bytes.f_has_user_name +ida_bytes.f_has_xref +ida_bytes.f_is_align +ida_bytes.f_is_byte +ida_bytes.f_is_code +ida_bytes.f_is_custom +ida_bytes.f_is_data +ida_bytes.f_is_double +ida_bytes.f_is_dword +ida_bytes.f_is_float +ida_bytes.f_is_head +ida_bytes.f_is_not_tail +ida_bytes.f_is_oword +ida_bytes.f_is_pack_real +ida_bytes.f_is_qword +ida_bytes.f_is_strlit +ida_bytes.f_is_struct +ida_bytes.f_is_tail +ida_bytes.f_is_tbyte +ida_bytes.f_is_word +ida_bytes.f_is_yword +ida_bytes.find_byte +ida_bytes.find_byter +ida_bytes.find_bytes +ida_bytes.find_custom_data_format +ida_bytes.find_custom_data_type +ida_bytes.find_free_chunk +ida_bytes.find_string +ida_bytes.float_flag +ida_bytes.flt_flag +ida_bytes.get_16bit +ida_bytes.get_32bit +ida_bytes.get_64bit +ida_bytes.get_byte +ida_bytes.get_bytes +ida_bytes.get_bytes_and_mask +ida_bytes.get_cmt +ida_bytes.get_custom_data_format +ida_bytes.get_custom_data_formats +ida_bytes.get_custom_data_type +ida_bytes.get_custom_data_types +ida_bytes.get_data_elsize +ida_bytes.get_data_value +ida_bytes.get_db_byte +ida_bytes.get_default_radix +ida_bytes.get_dword +ida_bytes.get_enum_id +ida_bytes.get_first_hidden_range +ida_bytes.get_flags +ida_bytes.get_flags_by_size +ida_bytes.get_flags_ex +ida_bytes.get_forced_operand +ida_bytes.get_full_data_elsize +ida_bytes.get_full_flags +ida_bytes.get_hidden_range +ida_bytes.get_hidden_range_num +ida_bytes.get_hidden_range_qty +ida_bytes.get_item_end +ida_bytes.get_item_flag +ida_bytes.get_item_head +ida_bytes.get_item_refinfo +ida_bytes.get_item_size +ida_bytes.get_last_hidden_range +ida_bytes.get_manual_insn +ida_bytes.get_mapping +ida_bytes.get_mappings_qty +ida_bytes.get_max_strlit_length +ida_bytes.get_next_hidden_range +ida_bytes.get_octet +ida_bytes.get_operand_flag +ida_bytes.get_operand_type_shift +ida_bytes.get_opinfo +ida_bytes.get_optype_flags0 +ida_bytes.get_optype_flags1 +ida_bytes.get_original_byte +ida_bytes.get_original_dword +ida_bytes.get_original_qword +ida_bytes.get_original_word +ida_bytes.get_possible_item_varsize +ida_bytes.get_predef_insn_cmt +ida_bytes.get_prev_hidden_range +ida_bytes.get_qword +ida_bytes.get_radix +ida_bytes.get_strlit_contents +ida_bytes.get_stroff_path +ida_bytes.get_wide_byte +ida_bytes.get_wide_dword +ida_bytes.get_wide_word +ida_bytes.get_word +ida_bytes.get_zero_ranges +ida_bytes.getn_hidden_range +ida_bytes.has_any_name +ida_bytes.has_auto_name +ida_bytes.has_cmt +ida_bytes.has_dummy_name +ida_bytes.has_extra_cmts +ida_bytes.has_immd +ida_bytes.has_name +ida_bytes.has_user_name +ida_bytes.has_value +ida_bytes.has_xref +ida_bytes.hex_flag +ida_bytes.hidden_range_t +ida_bytes.hidden_range_t.__init__ +ida_bytes.hidden_range_t.color +ida_bytes.hidden_range_t.description +ida_bytes.hidden_range_t.footer +ida_bytes.hidden_range_t.header +ida_bytes.hidden_range_t.visible +ida_bytes.is_align +ida_bytes.is_attached_custom_data_format +ida_bytes.is_bnot +ida_bytes.is_byte +ida_bytes.is_char +ida_bytes.is_char0 +ida_bytes.is_char1 +ida_bytes.is_code +ida_bytes.is_custfmt +ida_bytes.is_custfmt0 +ida_bytes.is_custfmt1 +ida_bytes.is_custom +ida_bytes.is_data +ida_bytes.is_defarg +ida_bytes.is_defarg0 +ida_bytes.is_defarg1 +ida_bytes.is_double +ida_bytes.is_dword +ida_bytes.is_enum +ida_bytes.is_enum0 +ida_bytes.is_enum1 +ida_bytes.is_flag_for_operand +ida_bytes.is_float +ida_bytes.is_float0 +ida_bytes.is_float1 +ida_bytes.is_flow +ida_bytes.is_fltnum +ida_bytes.is_forced_operand +ida_bytes.is_func +ida_bytes.is_head +ida_bytes.is_invsign +ida_bytes.is_loaded +ida_bytes.is_lzero +ida_bytes.is_manual +ida_bytes.is_manual_insn +ida_bytes.is_mapped +ida_bytes.is_not_tail +ida_bytes.is_numop +ida_bytes.is_numop0 +ida_bytes.is_numop1 +ida_bytes.is_off +ida_bytes.is_off0 +ida_bytes.is_off1 +ida_bytes.is_oword +ida_bytes.is_pack_real +ida_bytes.is_qword +ida_bytes.is_same_data_type +ida_bytes.is_seg +ida_bytes.is_seg0 +ida_bytes.is_seg1 +ida_bytes.is_stkvar +ida_bytes.is_stkvar0 +ida_bytes.is_stkvar1 +ida_bytes.is_strlit +ida_bytes.is_stroff +ida_bytes.is_stroff0 +ida_bytes.is_stroff1 +ida_bytes.is_struct +ida_bytes.is_suspop +ida_bytes.is_tail +ida_bytes.is_tbyte +ida_bytes.is_unknown +ida_bytes.is_varsize_item +ida_bytes.is_word +ida_bytes.is_yword +ida_bytes.is_zword +ida_bytes.leading_zero_important +ida_bytes.nbits +ida_bytes.next_addr +ida_bytes.next_chunk +ida_bytes.next_head +ida_bytes.next_inited +ida_bytes.next_not_tail +ida_bytes.next_that +ida_bytes.next_unknown +ida_bytes.next_visea +ida_bytes.num_flag +ida_bytes.oct_flag +ida_bytes.octet_generator_t +ida_bytes.octet_generator_t.__init__ +ida_bytes.octet_generator_t.invert_byte_order +ida_bytes.off_flag +ida_bytes.op_adds_xrefs +ida_bytes.op_based_stroff +ida_bytes.op_bin +ida_bytes.op_chr +ida_bytes.op_custfmt +ida_bytes.op_dec +ida_bytes.op_enum +ida_bytes.op_flt +ida_bytes.op_hex +ida_bytes.op_num +ida_bytes.op_oct +ida_bytes.op_seg +ida_bytes.op_stkvar +ida_bytes.op_stroff +ida_bytes.oword_flag +ida_bytes.packreal_flag +ida_bytes.parse_binpat_str +ida_bytes.patch_byte +ida_bytes.patch_bytes +ida_bytes.patch_dword +ida_bytes.patch_qword +ida_bytes.patch_word +ida_bytes.prev_addr +ida_bytes.prev_chunk +ida_bytes.prev_head +ida_bytes.prev_inited +ida_bytes.prev_not_tail +ida_bytes.prev_that +ida_bytes.prev_unknown +ida_bytes.prev_visea +ida_bytes.print_strlit_type +ida_bytes.put_byte +ida_bytes.put_bytes +ida_bytes.put_dword +ida_bytes.put_qword +ida_bytes.put_word +ida_bytes.qword_flag +ida_bytes.register_custom_data_format +ida_bytes.register_custom_data_type +ida_bytes.register_data_types_and_formats +ida_bytes.register_data_types_and_formats.__reg_format +ida_bytes.register_data_types_and_formats.__reg_type +ida_bytes.revert_byte +ida_bytes.seg_flag +ida_bytes.set_cmt +ida_bytes.set_forced_operand +ida_bytes.set_immd +ida_bytes.set_lzero +ida_bytes.set_manual_insn +ida_bytes.set_op_type +ida_bytes.set_opinfo +ida_bytes.stkvar_flag +ida_bytes.strlit_flag +ida_bytes.stroff_flag +ida_bytes.stru_flag +ida_bytes.tbyte_flag +ida_bytes.toggle_bnot +ida_bytes.toggle_lzero +ida_bytes.toggle_sign +ida_bytes.unregister_custom_data_format +ida_bytes.unregister_custom_data_type +ida_bytes.unregister_data_types_and_formats +ida_bytes.unregister_data_types_and_formats.__unreg_format +ida_bytes.unregister_data_types_and_formats.__unreg_type +ida_bytes.update_hidden_range +ida_bytes.use_mapping +ida_bytes.visit_patched_bytes +ida_bytes.word_flag +ida_bytes.yword_flag +ida_bytes.zword_flag +ida_dbg +ida_dbg.BKPT_ACTIVE +ida_dbg.BKPT_BADBPT +ida_dbg.BKPT_CNDREADY +ida_dbg.BKPT_FAKEPEND +ida_dbg.BKPT_LISTBPT +ida_dbg.BKPT_PAGE +ida_dbg.BKPT_PARTIAL +ida_dbg.BKPT_TRACE +ida_dbg.BPLT_ABS +ida_dbg.BPLT_REL +ida_dbg.BPLT_SRC +ida_dbg.BPLT_SYM +ida_dbg.BPTCK_ACT +ida_dbg.BPTCK_NO +ida_dbg.BPTCK_NONE +ida_dbg.BPTCK_YES +ida_dbg.BPTEV_ADDED +ida_dbg.BPTEV_CHANGED +ida_dbg.BPTEV_REMOVED +ida_dbg.BPT_BRK +ida_dbg.BPT_ELANG_SHIFT +ida_dbg.BPT_ENABLED +ida_dbg.BPT_LOWCND +ida_dbg.BPT_TRACE +ida_dbg.BPT_TRACEON +ida_dbg.BPT_TRACE_BBLK +ida_dbg.BPT_TRACE_FUNC +ida_dbg.BPT_TRACE_INSN +ida_dbg.BPT_TRACE_TYPES +ida_dbg.BPT_UPDMEM +ida_dbg.BT_LOG_INSTS +ida_dbg.DBGINV_ALL +ida_dbg.DBGINV_MEMCFG +ida_dbg.DBGINV_MEMORY +ida_dbg.DBGINV_NONE +ida_dbg.DBGINV_REDRAW +ida_dbg.DBGINV_REGS +ida_dbg.DBG_Hooks +ida_dbg.DBG_Hooks.__disown__ +ida_dbg.DBG_Hooks.__init__ +ida_dbg.DBG_Hooks.dbg_bpt +ida_dbg.DBG_Hooks.dbg_bpt_changed +ida_dbg.DBG_Hooks.dbg_exception +ida_dbg.DBG_Hooks.dbg_finished_loading_bpts +ida_dbg.DBG_Hooks.dbg_information +ida_dbg.DBG_Hooks.dbg_library_load +ida_dbg.DBG_Hooks.dbg_library_unload +ida_dbg.DBG_Hooks.dbg_process_attach +ida_dbg.DBG_Hooks.dbg_process_detach +ida_dbg.DBG_Hooks.dbg_process_exit +ida_dbg.DBG_Hooks.dbg_process_start +ida_dbg.DBG_Hooks.dbg_request_error +ida_dbg.DBG_Hooks.dbg_run_to +ida_dbg.DBG_Hooks.dbg_started_loading_bpts +ida_dbg.DBG_Hooks.dbg_step_into +ida_dbg.DBG_Hooks.dbg_step_over +ida_dbg.DBG_Hooks.dbg_step_until_ret +ida_dbg.DBG_Hooks.dbg_suspend_process +ida_dbg.DBG_Hooks.dbg_thread_exit +ida_dbg.DBG_Hooks.dbg_thread_start +ida_dbg.DBG_Hooks.dbg_trace +ida_dbg.DBG_Hooks.hook +ida_dbg.DBG_Hooks.unhook +ida_dbg.DEC_ERROR +ida_dbg.DEC_NOTASK +ida_dbg.DEC_TIMEOUT +ida_dbg.DOPT_BPT_MSGS +ida_dbg.DOPT_DISABLE_ASLR +ida_dbg.DOPT_END_BPT +ida_dbg.DOPT_ENTRY_BPT +ida_dbg.DOPT_EXCDLG +ida_dbg.DOPT_FAST_STEP +ida_dbg.DOPT_INFO_BPT +ida_dbg.DOPT_INFO_MSGS +ida_dbg.DOPT_LIB_BPT +ida_dbg.DOPT_LIB_MSGS +ida_dbg.DOPT_LOAD_DINFO +ida_dbg.DOPT_REAL_MEMORY +ida_dbg.DOPT_REDO_STACK +ida_dbg.DOPT_SEGM_MSGS +ida_dbg.DOPT_START_BPT +ida_dbg.DOPT_TEMP_HWBPT +ida_dbg.DOPT_THREAD_BPT +ida_dbg.DOPT_THREAD_MSGS +ida_dbg.DSTATE_NOTASK +ida_dbg.DSTATE_RUN +ida_dbg.DSTATE_SUSP +ida_dbg.EXCDLG_ALWAYS +ida_dbg.EXCDLG_NEVER +ida_dbg.EXCDLG_UNKNOWN +ida_dbg.FT_LOG_RET +ida_dbg.IT_LOG_SAME_IP +ida_dbg.MOVBPT_BAD_TYPE +ida_dbg.MOVBPT_DEST_BUSY +ida_dbg.MOVBPT_NOT_FOUND +ida_dbg.MOVBPT_OK +ida_dbg.SRCIT_EXPR +ida_dbg.SRCIT_FUNC +ida_dbg.SRCIT_LOCVAR +ida_dbg.SRCIT_MODULE +ida_dbg.SRCIT_NONE +ida_dbg.SRCIT_STMT +ida_dbg.SRCIT_STTVAR +ida_dbg.ST_ALREADY_LOGGED +ida_dbg.ST_DIFFERENTIAL +ida_dbg.ST_OPTIONS_MASK +ida_dbg.ST_OVER_DEBUG_SEG +ida_dbg.ST_OVER_LIB_FUNC +ida_dbg.ST_SKIP_LOOPS +ida_dbg.WFNE_ANY +ida_dbg.WFNE_CONT +ida_dbg.WFNE_NOWAIT +ida_dbg.WFNE_SILENT +ida_dbg.WFNE_SUSP +ida_dbg.WFNE_USEC +ida_dbg.add_bpt +ida_dbg.add_path_mapping +ida_dbg.add_virt_module +ida_dbg.attach_process +ida_dbg.bpt_location_t +ida_dbg.bpt_location_t.__eq__ +ida_dbg.bpt_location_t.__ge__ +ida_dbg.bpt_location_t.__gt__ +ida_dbg.bpt_location_t.__init__ +ida_dbg.bpt_location_t.__le__ +ida_dbg.bpt_location_t.__lt__ +ida_dbg.bpt_location_t.__ne__ +ida_dbg.bpt_location_t.compare +ida_dbg.bpt_location_t.ea +ida_dbg.bpt_location_t.is_empty_path +ida_dbg.bpt_location_t.lineno +ida_dbg.bpt_location_t.offset +ida_dbg.bpt_location_t.path +ida_dbg.bpt_location_t.set_abs_bpt +ida_dbg.bpt_location_t.set_rel_bpt +ida_dbg.bpt_location_t.set_src_bpt +ida_dbg.bpt_location_t.set_sym_bpt +ida_dbg.bpt_location_t.symbol +ida_dbg.bpt_location_t.type +ida_dbg.bpt_t +ida_dbg.bpt_t.__init__ +ida_dbg.bpt_t.badbpt +ida_dbg.bpt_t.bptid +ida_dbg.bpt_t.cb +ida_dbg.bpt_t.cndidx +ida_dbg.bpt_t.ea +ida_dbg.bpt_t.enabled +ida_dbg.bpt_t.flags +ida_dbg.bpt_t.get_cnd_elang_idx +ida_dbg.bpt_t.get_size +ida_dbg.bpt_t.is_absbpt +ida_dbg.bpt_t.is_active +ida_dbg.bpt_t.is_compiled +ida_dbg.bpt_t.is_hwbpt +ida_dbg.bpt_t.is_inactive +ida_dbg.bpt_t.is_low_level +ida_dbg.bpt_t.is_page_bpt +ida_dbg.bpt_t.is_partially_active +ida_dbg.bpt_t.is_relbpt +ida_dbg.bpt_t.is_srcbpt +ida_dbg.bpt_t.is_symbpt +ida_dbg.bpt_t.is_tracemodebpt +ida_dbg.bpt_t.is_traceoffbpt +ida_dbg.bpt_t.is_traceonbpt +ida_dbg.bpt_t.listbpt +ida_dbg.bpt_t.loc +ida_dbg.bpt_t.pass_count +ida_dbg.bpt_t.pid +ida_dbg.bpt_t.props +ida_dbg.bpt_t.set_abs_bpt +ida_dbg.bpt_t.set_rel_bpt +ida_dbg.bpt_t.set_src_bpt +ida_dbg.bpt_t.set_sym_bpt +ida_dbg.bpt_t.set_trace_action +ida_dbg.bpt_t.size +ida_dbg.bpt_t.tid +ida_dbg.bpt_t.type +ida_dbg.bpt_vec_t +ida_dbg.bpt_vec_t.__getitem__ +ida_dbg.bpt_vec_t.__init__ +ida_dbg.bpt_vec_t.__len__ +ida_dbg.bpt_vec_t.__setitem__ +ida_dbg.bpt_vec_t.append +ida_dbg.bpt_vec_t.at +ida_dbg.bpt_vec_t.begin +ida_dbg.bpt_vec_t.capacity +ida_dbg.bpt_vec_t.clear +ida_dbg.bpt_vec_t.empty +ida_dbg.bpt_vec_t.end +ida_dbg.bpt_vec_t.erase +ida_dbg.bpt_vec_t.extend +ida_dbg.bpt_vec_t.extract +ida_dbg.bpt_vec_t.grow +ida_dbg.bpt_vec_t.inject +ida_dbg.bpt_vec_t.insert +ida_dbg.bpt_vec_t.pop_back +ida_dbg.bpt_vec_t.push_back +ida_dbg.bpt_vec_t.qclear +ida_dbg.bpt_vec_t.reserve +ida_dbg.bpt_vec_t.resize +ida_dbg.bpt_vec_t.size +ida_dbg.bpt_vec_t.swap +ida_dbg.bpt_vec_t.truncate +ida_dbg.bptaddrs_t +ida_dbg.bptaddrs_t.__init__ +ida_dbg.bring_debugger_to_front +ida_dbg.check_bpt +ida_dbg.choose_trace_file +ida_dbg.clear_requests_queue +ida_dbg.clear_trace +ida_dbg.collect_stack_trace +ida_dbg.continue_backwards +ida_dbg.continue_process +ida_dbg.create_source_viewer +ida_dbg.dbg_add_bpt_tev +ida_dbg.dbg_add_call_tev +ida_dbg.dbg_add_debug_event +ida_dbg.dbg_add_insn_tev +ida_dbg.dbg_add_many_tevs +ida_dbg.dbg_add_ret_tev +ida_dbg.dbg_add_tev +ida_dbg.dbg_add_thread +ida_dbg.dbg_bin_search +ida_dbg.dbg_bpt +ida_dbg.dbg_bpt_changed +ida_dbg.dbg_can_query +ida_dbg.dbg_del_thread +ida_dbg.dbg_finished_loading_bpts +ida_dbg.dbg_is_loaded +ida_dbg.dbg_last +ida_dbg.dbg_request_error +ida_dbg.dbg_started_loading_bpts +ida_dbg.dbg_suspend_process +ida_dbg.dbg_trace +ida_dbg.define_exception +ida_dbg.del_bpt +ida_dbg.del_bptgrp +ida_dbg.del_virt_module +ida_dbg.detach_process +ida_dbg.diff_trace_file +ida_dbg.disable_bblk_trace +ida_dbg.disable_bpt +ida_dbg.disable_func_trace +ida_dbg.disable_insn_trace +ida_dbg.disable_step_trace +ida_dbg.edit_manual_regions +ida_dbg.enable_bblk_trace +ida_dbg.enable_bpt +ida_dbg.enable_bptgrp +ida_dbg.enable_func_trace +ida_dbg.enable_insn_trace +ida_dbg.enable_manual_regions +ida_dbg.enable_step_trace +ida_dbg.eval_ctx_t +ida_dbg.eval_ctx_t.__init__ +ida_dbg.exist_bpt +ida_dbg.exit_process +ida_dbg.find_bpt +ida_dbg.get_bblk_trace_options +ida_dbg.get_bpt +ida_dbg.get_bpt_group +ida_dbg.get_bpt_qty +ida_dbg.get_bpt_tev_ea +ida_dbg.get_bptloc_string +ida_dbg.get_call_tev_callee +ida_dbg.get_current_source_file +ida_dbg.get_current_source_line +ida_dbg.get_current_thread +ida_dbg.get_dbg_byte +ida_dbg.get_dbg_memory_info +ida_dbg.get_dbg_reg_info +ida_dbg.get_debug_event +ida_dbg.get_debugger_event_cond +ida_dbg.get_first_module +ida_dbg.get_func_trace_options +ida_dbg.get_global_var +ida_dbg.get_grp_bpts +ida_dbg.get_insn_tev_reg_mem +ida_dbg.get_insn_tev_reg_result +ida_dbg.get_insn_tev_reg_val +ida_dbg.get_insn_trace_options +ida_dbg.get_ip_val +ida_dbg.get_local_var +ida_dbg.get_local_vars +ida_dbg.get_manual_regions +ida_dbg.get_module_info +ida_dbg.get_next_module +ida_dbg.get_process_options +ida_dbg.get_process_options2 +ida_dbg.get_process_state +ida_dbg.get_processes +ida_dbg.get_reg_val +ida_dbg.get_reg_vals +ida_dbg.get_ret_tev_return +ida_dbg.get_running_notification +ida_dbg.get_running_request +ida_dbg.get_sp_val +ida_dbg.get_srcinfo_provider +ida_dbg.get_step_trace_options +ida_dbg.get_tev_ea +ida_dbg.get_tev_event +ida_dbg.get_tev_info +ida_dbg.get_tev_memory_info +ida_dbg.get_tev_qty +ida_dbg.get_tev_reg_mem +ida_dbg.get_tev_reg_mem_ea +ida_dbg.get_tev_reg_mem_qty +ida_dbg.get_tev_reg_val +ida_dbg.get_tev_tid +ida_dbg.get_tev_type +ida_dbg.get_thread_qty +ida_dbg.get_trace_base_address +ida_dbg.get_trace_dynamic_register_set +ida_dbg.get_trace_file_desc +ida_dbg.get_trace_platform +ida_dbg.getn_bpt +ida_dbg.getn_thread +ida_dbg.getn_thread_name +ida_dbg.graph_trace +ida_dbg.handle_debug_event +ida_dbg.hide_all_bpts +ida_dbg.internal_get_sreg_base +ida_dbg.internal_ioctl +ida_dbg.invalidate_dbg_state +ida_dbg.invalidate_dbgmem_config +ida_dbg.invalidate_dbgmem_contents +ida_dbg.is_bblk_trace_enabled +ida_dbg.is_debugger_busy +ida_dbg.is_debugger_memory +ida_dbg.is_debugger_on +ida_dbg.is_func_trace_enabled +ida_dbg.is_insn_trace_enabled +ida_dbg.is_reg_custom +ida_dbg.is_reg_float +ida_dbg.is_reg_integer +ida_dbg.is_request_running +ida_dbg.is_step_trace_enabled +ida_dbg.is_valid_dstate +ida_dbg.is_valid_trace_file +ida_dbg.list_bptgrps +ida_dbg.load_debugger +ida_dbg.load_trace_file +ida_dbg.memreg_info_t +ida_dbg.memreg_info_t.__init__ +ida_dbg.memreg_info_t.get_bytes +ida_dbg.memreg_infos_t +ida_dbg.memreg_infos_t.__getitem__ +ida_dbg.memreg_infos_t.__init__ +ida_dbg.memreg_infos_t.__len__ +ida_dbg.memreg_infos_t.__setitem__ +ida_dbg.memreg_infos_t.append +ida_dbg.memreg_infos_t.at +ida_dbg.memreg_infos_t.begin +ida_dbg.memreg_infos_t.capacity +ida_dbg.memreg_infos_t.clear +ida_dbg.memreg_infos_t.empty +ida_dbg.memreg_infos_t.end +ida_dbg.memreg_infos_t.erase +ida_dbg.memreg_infos_t.extend +ida_dbg.memreg_infos_t.extract +ida_dbg.memreg_infos_t.grow +ida_dbg.memreg_infos_t.inject +ida_dbg.memreg_infos_t.insert +ida_dbg.memreg_infos_t.pop_back +ida_dbg.memreg_infos_t.push_back +ida_dbg.memreg_infos_t.qclear +ida_dbg.memreg_infos_t.reserve +ida_dbg.memreg_infos_t.resize +ida_dbg.memreg_infos_t.size +ida_dbg.memreg_infos_t.swap +ida_dbg.memreg_infos_t.truncate +ida_dbg.put_dbg_byte +ida_dbg.read_dbg_memory +ida_dbg.refresh_debugger_memory +ida_dbg.rename_bptgrp +ida_dbg.request_add_bpt +ida_dbg.request_attach_process +ida_dbg.request_clear_trace +ida_dbg.request_continue_backwards +ida_dbg.request_continue_process +ida_dbg.request_del_bpt +ida_dbg.request_detach_process +ida_dbg.request_disable_bblk_trace +ida_dbg.request_disable_bpt +ida_dbg.request_disable_func_trace +ida_dbg.request_disable_insn_trace +ida_dbg.request_disable_step_trace +ida_dbg.request_enable_bblk_trace +ida_dbg.request_enable_bpt +ida_dbg.request_enable_func_trace +ida_dbg.request_enable_insn_trace +ida_dbg.request_enable_step_trace +ida_dbg.request_exit_process +ida_dbg.request_resume_thread +ida_dbg.request_run_to +ida_dbg.request_run_to_backwards +ida_dbg.request_select_thread +ida_dbg.request_set_bblk_trace_options +ida_dbg.request_set_func_trace_options +ida_dbg.request_set_insn_trace_options +ida_dbg.request_set_reg_val +ida_dbg.request_set_resume_mode +ida_dbg.request_set_step_trace_options +ida_dbg.request_start_process +ida_dbg.request_step_into +ida_dbg.request_step_into_backwards +ida_dbg.request_step_over +ida_dbg.request_step_over_backwards +ida_dbg.request_step_until_ret +ida_dbg.request_suspend_process +ida_dbg.request_suspend_thread +ida_dbg.resume_thread +ida_dbg.retrieve_exceptions +ida_dbg.run_requests +ida_dbg.run_to +ida_dbg.run_to_backwards +ida_dbg.save_trace_file +ida_dbg.select_thread +ida_dbg.send_dbg_command +ida_dbg.set_bblk_trace_options +ida_dbg.set_bpt_group +ida_dbg.set_bptloc_group +ida_dbg.set_bptloc_string +ida_dbg.set_debugger_event_cond +ida_dbg.set_debugger_options +ida_dbg.set_func_trace_options +ida_dbg.set_highlight_trace_options +ida_dbg.set_insn_trace_options +ida_dbg.set_manual_regions +ida_dbg.set_process_options +ida_dbg.set_process_state +ida_dbg.set_reg_val +ida_dbg.set_remote_debugger +ida_dbg.set_resume_mode +ida_dbg.set_step_trace_options +ida_dbg.set_trace_base_address +ida_dbg.set_trace_dynamic_register_set +ida_dbg.set_trace_file_desc +ida_dbg.set_trace_platform +ida_dbg.set_trace_size +ida_dbg.srcdbg_request_step_into +ida_dbg.srcdbg_request_step_over +ida_dbg.srcdbg_request_step_until_ret +ida_dbg.srcdbg_step_into +ida_dbg.srcdbg_step_over +ida_dbg.srcdbg_step_until_ret +ida_dbg.start_process +ida_dbg.step_into +ida_dbg.step_into_backwards +ida_dbg.step_over +ida_dbg.step_over_backwards +ida_dbg.step_until_ret +ida_dbg.store_exceptions +ida_dbg.suspend_process +ida_dbg.suspend_thread +ida_dbg.tev_bpt +ida_dbg.tev_call +ida_dbg.tev_event +ida_dbg.tev_info_reg_t +ida_dbg.tev_info_reg_t.__init__ +ida_dbg.tev_info_t +ida_dbg.tev_info_t.__init__ +ida_dbg.tev_info_t.ea +ida_dbg.tev_info_t.tid +ida_dbg.tev_info_t.type +ida_dbg.tev_insn +ida_dbg.tev_max +ida_dbg.tev_mem +ida_dbg.tev_none +ida_dbg.tev_reg_value_t +ida_dbg.tev_reg_value_t.__init__ +ida_dbg.tev_reg_values_t +ida_dbg.tev_reg_values_t.__getitem__ +ida_dbg.tev_reg_values_t.__init__ +ida_dbg.tev_reg_values_t.__len__ +ida_dbg.tev_reg_values_t.__setitem__ +ida_dbg.tev_reg_values_t.append +ida_dbg.tev_reg_values_t.at +ida_dbg.tev_reg_values_t.begin +ida_dbg.tev_reg_values_t.capacity +ida_dbg.tev_reg_values_t.clear +ida_dbg.tev_reg_values_t.empty +ida_dbg.tev_reg_values_t.end +ida_dbg.tev_reg_values_t.erase +ida_dbg.tev_reg_values_t.extend +ida_dbg.tev_reg_values_t.extract +ida_dbg.tev_reg_values_t.grow +ida_dbg.tev_reg_values_t.inject +ida_dbg.tev_reg_values_t.insert +ida_dbg.tev_reg_values_t.pop_back +ida_dbg.tev_reg_values_t.push_back +ida_dbg.tev_reg_values_t.qclear +ida_dbg.tev_reg_values_t.reserve +ida_dbg.tev_reg_values_t.resize +ida_dbg.tev_reg_values_t.size +ida_dbg.tev_reg_values_t.swap +ida_dbg.tev_reg_values_t.truncate +ida_dbg.tev_ret +ida_dbg.tevinforeg_vec_t +ida_dbg.tevinforeg_vec_t.__getitem__ +ida_dbg.tevinforeg_vec_t.__init__ +ida_dbg.tevinforeg_vec_t.__len__ +ida_dbg.tevinforeg_vec_t.__setitem__ +ida_dbg.tevinforeg_vec_t.append +ida_dbg.tevinforeg_vec_t.at +ida_dbg.tevinforeg_vec_t.begin +ida_dbg.tevinforeg_vec_t.capacity +ida_dbg.tevinforeg_vec_t.clear +ida_dbg.tevinforeg_vec_t.empty +ida_dbg.tevinforeg_vec_t.end +ida_dbg.tevinforeg_vec_t.erase +ida_dbg.tevinforeg_vec_t.extend +ida_dbg.tevinforeg_vec_t.extract +ida_dbg.tevinforeg_vec_t.grow +ida_dbg.tevinforeg_vec_t.inject +ida_dbg.tevinforeg_vec_t.insert +ida_dbg.tevinforeg_vec_t.pop_back +ida_dbg.tevinforeg_vec_t.push_back +ida_dbg.tevinforeg_vec_t.qclear +ida_dbg.tevinforeg_vec_t.reserve +ida_dbg.tevinforeg_vec_t.resize +ida_dbg.tevinforeg_vec_t.size +ida_dbg.tevinforeg_vec_t.swap +ida_dbg.tevinforeg_vec_t.truncate +ida_dbg.update_bpt +ida_dbg.wait_for_next_event +ida_dbg.write_dbg_memory +ida_diskio +ida_diskio.IDA_SUBDIR_IDADIR_FIRST +ida_diskio.IDA_SUBDIR_IDP +ida_diskio.IDA_SUBDIR_ONLY_EXISTING +ida_diskio.LOC_CLOSE +ida_diskio.LOC_KEEP +ida_diskio.LOC_UNMAKE +ida_diskio.VAULT_CACHE_FNAME +ida_diskio.VAULT_CACHE_SUBDIR +ida_diskio.choose_ioport_device2 +ida_diskio.choose_ioport_parser_t +ida_diskio.choose_ioport_parser_t.__disown__ +ida_diskio.choose_ioport_parser_t.__init__ +ida_diskio.choose_ioport_parser_t.parse +ida_diskio.close_linput +ida_diskio.create_bytearray_linput +ida_diskio.create_generic_linput +ida_diskio.create_memory_linput +ida_diskio.enumerate_files +ida_diskio.file_enumerator_t +ida_diskio.file_enumerator_t.__disown__ +ida_diskio.file_enumerator_t.__init__ +ida_diskio.file_enumerator_t.visit_file +ida_diskio.fopenA +ida_diskio.fopenM +ida_diskio.fopenRB +ida_diskio.fopenRT +ida_diskio.fopenWB +ida_diskio.fopenWT +ida_diskio.generic_linput_t +ida_diskio.generic_linput_t.__init__ +ida_diskio.generic_linput_t.read +ida_diskio.get_ida_subdirs +ida_diskio.get_linput_type +ida_diskio.get_special_folder +ida_diskio.get_user_idadir +ida_diskio.getsysfile +ida_diskio.idadir +ida_diskio.ioports_fallback_t +ida_diskio.ioports_fallback_t.__disown__ +ida_diskio.ioports_fallback_t.__init__ +ida_diskio.ioports_fallback_t.handle +ida_diskio.open_linput +ida_diskio.qlgetz +ida_diskio.read_ioports +ida_dirtree +ida_dirtree.DTE_ALREADY_EXISTS +ida_dirtree.DTE_BAD_PATH +ida_dirtree.DTE_CANT_RENAME +ida_dirtree.DTE_MAX_DIR +ida_dirtree.DTE_NOT_DIRECTORY +ida_dirtree.DTE_NOT_EMPTY +ida_dirtree.DTE_NOT_FOUND +ida_dirtree.DTE_OK +ida_dirtree.DTE_OWN_CHILD +ida_dirtree.DTN_DISPLAY_NAME +ida_dirtree.DTN_FULL_NAME +ida_dirtree.direntry_t +ida_dirtree.direntry_t.__eq__ +ida_dirtree.direntry_t.__init__ +ida_dirtree.direntry_t.__lt__ +ida_dirtree.direntry_t.__ne__ +ida_dirtree.direntry_t.idx +ida_dirtree.direntry_t.isdir +ida_dirtree.direntry_t.valid +ida_dirtree.direntry_vec_t +ida_dirtree.direntry_vec_t.__eq__ +ida_dirtree.direntry_vec_t.__getitem__ +ida_dirtree.direntry_vec_t.__init__ +ida_dirtree.direntry_vec_t.__len__ +ida_dirtree.direntry_vec_t.__ne__ +ida_dirtree.direntry_vec_t.__setitem__ +ida_dirtree.direntry_vec_t._del +ida_dirtree.direntry_vec_t.add_unique +ida_dirtree.direntry_vec_t.append +ida_dirtree.direntry_vec_t.at +ida_dirtree.direntry_vec_t.begin +ida_dirtree.direntry_vec_t.capacity +ida_dirtree.direntry_vec_t.clear +ida_dirtree.direntry_vec_t.empty +ida_dirtree.direntry_vec_t.end +ida_dirtree.direntry_vec_t.erase +ida_dirtree.direntry_vec_t.extend +ida_dirtree.direntry_vec_t.extract +ida_dirtree.direntry_vec_t.find +ida_dirtree.direntry_vec_t.grow +ida_dirtree.direntry_vec_t.has +ida_dirtree.direntry_vec_t.inject +ida_dirtree.direntry_vec_t.insert +ida_dirtree.direntry_vec_t.pop_back +ida_dirtree.direntry_vec_t.push_back +ida_dirtree.direntry_vec_t.qclear +ida_dirtree.direntry_vec_t.reserve +ida_dirtree.direntry_vec_t.resize +ida_dirtree.direntry_vec_t.size +ida_dirtree.direntry_vec_t.swap +ida_dirtree.direntry_vec_t.truncate +ida_dirtree.dirspec_t +ida_dirtree.dirspec_t.__disown__ +ida_dirtree.dirspec_t.__init__ +ida_dirtree.dirspec_t.get_attrs +ida_dirtree.dirspec_t.get_inode +ida_dirtree.dirspec_t.get_name +ida_dirtree.dirspec_t.is_orderable +ida_dirtree.dirspec_t.rename_inode +ida_dirtree.dirspec_t.unlink_inode +ida_dirtree.dirtree_cursor_t +ida_dirtree.dirtree_cursor_t.__eq__ +ida_dirtree.dirtree_cursor_t.__ge__ +ida_dirtree.dirtree_cursor_t.__gt__ +ida_dirtree.dirtree_cursor_t.__init__ +ida_dirtree.dirtree_cursor_t.__le__ +ida_dirtree.dirtree_cursor_t.__lt__ +ida_dirtree.dirtree_cursor_t.__ne__ +ida_dirtree.dirtree_cursor_t.compare +ida_dirtree.dirtree_cursor_t.is_root_cursor +ida_dirtree.dirtree_cursor_t.parent +ida_dirtree.dirtree_cursor_t.rank +ida_dirtree.dirtree_cursor_t.root_cursor +ida_dirtree.dirtree_cursor_t.set_root_cursor +ida_dirtree.dirtree_cursor_t.valid +ida_dirtree.dirtree_cursor_vec_t +ida_dirtree.dirtree_cursor_vec_t.__eq__ +ida_dirtree.dirtree_cursor_vec_t.__getitem__ +ida_dirtree.dirtree_cursor_vec_t.__init__ +ida_dirtree.dirtree_cursor_vec_t.__len__ +ida_dirtree.dirtree_cursor_vec_t.__ne__ +ida_dirtree.dirtree_cursor_vec_t.__setitem__ +ida_dirtree.dirtree_cursor_vec_t._del +ida_dirtree.dirtree_cursor_vec_t.add_unique +ida_dirtree.dirtree_cursor_vec_t.append +ida_dirtree.dirtree_cursor_vec_t.at +ida_dirtree.dirtree_cursor_vec_t.begin +ida_dirtree.dirtree_cursor_vec_t.capacity +ida_dirtree.dirtree_cursor_vec_t.clear +ida_dirtree.dirtree_cursor_vec_t.empty +ida_dirtree.dirtree_cursor_vec_t.end +ida_dirtree.dirtree_cursor_vec_t.erase +ida_dirtree.dirtree_cursor_vec_t.extend +ida_dirtree.dirtree_cursor_vec_t.extract +ida_dirtree.dirtree_cursor_vec_t.find +ida_dirtree.dirtree_cursor_vec_t.grow +ida_dirtree.dirtree_cursor_vec_t.has +ida_dirtree.dirtree_cursor_vec_t.inject +ida_dirtree.dirtree_cursor_vec_t.insert +ida_dirtree.dirtree_cursor_vec_t.pop_back +ida_dirtree.dirtree_cursor_vec_t.push_back +ida_dirtree.dirtree_cursor_vec_t.qclear +ida_dirtree.dirtree_cursor_vec_t.reserve +ida_dirtree.dirtree_cursor_vec_t.resize +ida_dirtree.dirtree_cursor_vec_t.size +ida_dirtree.dirtree_cursor_vec_t.swap +ida_dirtree.dirtree_cursor_vec_t.truncate +ida_dirtree.dirtree_iterator_t +ida_dirtree.dirtree_iterator_t.__init__ +ida_dirtree.dirtree_selection_t +ida_dirtree.dirtree_selection_t.__init__ +ida_dirtree.dirtree_t +ida_dirtree.dirtree_t.__init__ +ida_dirtree.dirtree_t.change_rank +ida_dirtree.dirtree_t.chdir +ida_dirtree.dirtree_t.errstr +ida_dirtree.dirtree_t.find_entry +ida_dirtree.dirtree_t.findfirst +ida_dirtree.dirtree_t.findnext +ida_dirtree.dirtree_t.get_abspath +ida_dirtree.dirtree_t.get_dir_size +ida_dirtree.dirtree_t.get_entry_attrs +ida_dirtree.dirtree_t.get_entry_name +ida_dirtree.dirtree_t.get_id +ida_dirtree.dirtree_t.get_parent_cursor +ida_dirtree.dirtree_t.get_rank +ida_dirtree.dirtree_t.getcwd +ida_dirtree.dirtree_t.is_dir_ordered +ida_dirtree.dirtree_t.is_orderable +ida_dirtree.dirtree_t.isdir +ida_dirtree.dirtree_t.isfile +ida_dirtree.dirtree_t.link +ida_dirtree.dirtree_t.load +ida_dirtree.dirtree_t.mkdir +ida_dirtree.dirtree_t.notify_dirtree +ida_dirtree.dirtree_t.rename +ida_dirtree.dirtree_t.resolve_cursor +ida_dirtree.dirtree_t.resolve_path +ida_dirtree.dirtree_t.rmdir +ida_dirtree.dirtree_t.save +ida_dirtree.dirtree_t.set_id +ida_dirtree.dirtree_t.set_natural_order +ida_dirtree.dirtree_t.traverse +ida_dirtree.dirtree_t.unlink +ida_dirtree.dirtree_visitor_t +ida_dirtree.dirtree_visitor_t.__disown__ +ida_dirtree.dirtree_visitor_t.__init__ +ida_dirtree.dirtree_visitor_t.visit +ida_dirtree.get_std_dirtree +ida_entry +ida_entry.AEF_IDBENC +ida_entry.AEF_NODUMMY +ida_entry.AEF_UTF8 +ida_entry.add_entry +ida_entry.get_entry +ida_entry.get_entry_forwarder +ida_entry.get_entry_name +ida_entry.get_entry_ordinal +ida_entry.get_entry_qty +ida_entry.rename_entry +ida_entry.set_entry_forwarder +ida_expr +ida_expr.CPL_DEL_MACROS +ida_expr.CPL_ONLY_SAFE +ida_expr.CPL_USE_LABELS +ida_expr.EXTFUN_BASE +ida_expr.EXTFUN_NORET +ida_expr.EXTFUN_SAFE +ida_expr.IDC_LANG_EXT +ida_expr.VARSLICE_SINGLE +ida_expr.VREF_COPY +ida_expr.VREF_LOOP +ida_expr.VREF_ONCE +ida_expr.VT_FLOAT +ida_expr.VT_FUNC +ida_expr.VT_INT64 +ida_expr.VT_LONG +ida_expr.VT_OBJ +ida_expr.VT_PVOID +ida_expr.VT_REF +ida_expr.VT_STR +ida_expr.VT_WILD +ida_expr._IdcFunction +ida_expr._IdcFunction.__call__ +ida_expr._IdcFunction.__init__ +ida_expr.add_idc_class +ida_expr.add_idc_func +ida_expr.add_idc_gvar +ida_expr.call_idc_func__ +ida_expr.compile_idc_file +ida_expr.compile_idc_snippet +ida_expr.compile_idc_text +ida_expr.copy_idcv +ida_expr.create_idcv_ref +ida_expr.deep_copy_idcv +ida_expr.del_idc_func +ida_expr.del_idcv_attr +ida_expr.deref_idcv +ida_expr.eExecThrow +ida_expr.eval_expr +ida_expr.eval_idc_expr +ida_expr.exec_idc_script +ida_expr.exec_system_script +ida_expr.find_idc_class +ida_expr.find_idc_func +ida_expr.find_idc_gvar +ida_expr.first_idcv_attr +ida_expr.free_idcv +ida_expr.get_idc_filename +ida_expr.get_idcv_attr +ida_expr.get_idcv_class_name +ida_expr.get_idcv_slice +ida_expr.highlighter_cbs_t +ida_expr.highlighter_cbs_t.__disown__ +ida_expr.highlighter_cbs_t.__init__ +ida_expr.highlighter_cbs_t.cur_block_state +ida_expr.highlighter_cbs_t.prev_block_state +ida_expr.highlighter_cbs_t.set_block_state +ida_expr.highlighter_cbs_t.set_style +ida_expr.idc_global_t +ida_expr.idc_global_t.__init__ +ida_expr.idc_value_t +ida_expr.idc_value_t.__init__ +ida_expr.idc_value_t._create_empty_string +ida_expr.idc_value_t.c_str +ida_expr.idc_value_t.clear +ida_expr.idc_value_t.create_empty_string +ida_expr.idc_value_t.e +ida_expr.idc_value_t.funcidx +ida_expr.idc_value_t.i64 +ida_expr.idc_value_t.is_convertible +ida_expr.idc_value_t.is_integral +ida_expr.idc_value_t.is_zero +ida_expr.idc_value_t.num +ida_expr.idc_value_t.pvoid +ida_expr.idc_value_t.qstr +ida_expr.idc_value_t.reserve +ida_expr.idc_value_t.set_float +ida_expr.idc_value_t.set_int64 +ida_expr.idc_value_t.set_long +ida_expr.idc_value_t.set_pvoid +ida_expr.idc_value_t.set_string +ida_expr.idc_value_t.swap +ida_expr.idc_value_t.u_str +ida_expr.idc_value_t.vtype +ida_expr.idc_values_t +ida_expr.idc_values_t.__getitem__ +ida_expr.idc_values_t.__init__ +ida_expr.idc_values_t.__len__ +ida_expr.idc_values_t.__setitem__ +ida_expr.idc_values_t.append +ida_expr.idc_values_t.at +ida_expr.idc_values_t.begin +ida_expr.idc_values_t.capacity +ida_expr.idc_values_t.clear +ida_expr.idc_values_t.empty +ida_expr.idc_values_t.end +ida_expr.idc_values_t.erase +ida_expr.idc_values_t.extend +ida_expr.idc_values_t.extract +ida_expr.idc_values_t.grow +ida_expr.idc_values_t.inject +ida_expr.idc_values_t.insert +ida_expr.idc_values_t.pop_back +ida_expr.idc_values_t.push_back +ida_expr.idc_values_t.qclear +ida_expr.idc_values_t.reserve +ida_expr.idc_values_t.resize +ida_expr.idc_values_t.size +ida_expr.idc_values_t.swap +ida_expr.idc_values_t.truncate +ida_expr.idcv_float +ida_expr.idcv_int64 +ida_expr.idcv_long +ida_expr.idcv_num +ida_expr.idcv_object +ida_expr.idcv_string +ida_expr.last_idcv_attr +ida_expr.move_idcv +ida_expr.next_idcv_attr +ida_expr.prev_idcv_attr +ida_expr.print_idcv +ida_expr.py_add_idc_func +ida_expr.py_get_call_idc_func +ida_expr.pyw_convert_defvals +ida_expr.pyw_register_idc_func +ida_expr.pyw_unregister_idc_func +ida_expr.set_header_path +ida_expr.set_idcv_attr +ida_expr.set_idcv_slice +ida_expr.swap_idcvs +ida_expr.throw_idc_exception +ida_fixup +ida_fixup.FIXUPF_CREATED +ida_fixup.FIXUPF_EXTDEF +ida_fixup.FIXUPF_LOADER_MASK +ida_fixup.FIXUPF_REL +ida_fixup.FIXUPF_UNUSED +ida_fixup.FIXUP_CUSTOM +ida_fixup.FIXUP_HI16 +ida_fixup.FIXUP_HI8 +ida_fixup.FIXUP_LOW16 +ida_fixup.FIXUP_LOW8 +ida_fixup.FIXUP_OFF16 +ida_fixup.FIXUP_OFF16S +ida_fixup.FIXUP_OFF32 +ida_fixup.FIXUP_OFF32S +ida_fixup.FIXUP_OFF64 +ida_fixup.FIXUP_OFF8 +ida_fixup.FIXUP_OFF8S +ida_fixup.FIXUP_PTR16 +ida_fixup.FIXUP_PTR32 +ida_fixup.FIXUP_SEG16 +ida_fixup.V695_FIXUP_VHIGH +ida_fixup.V695_FIXUP_VLOW +ida_fixup.calc_fixup_size +ida_fixup.contains_fixups +ida_fixup.del_fixup +ida_fixup.exists_fixup +ida_fixup.find_custom_fixup +ida_fixup.fixup_data_t +ida_fixup.fixup_data_t.__init__ +ida_fixup.fixup_data_t.calc_size +ida_fixup.fixup_data_t.clr_extdef +ida_fixup.fixup_data_t.clr_unused +ida_fixup.fixup_data_t.displacement +ida_fixup.fixup_data_t.get +ida_fixup.fixup_data_t.get_base +ida_fixup.fixup_data_t.get_desc +ida_fixup.fixup_data_t.get_flags +ida_fixup.fixup_data_t.get_handler +ida_fixup.fixup_data_t.get_type +ida_fixup.fixup_data_t.get_value +ida_fixup.fixup_data_t.has_base +ida_fixup.fixup_data_t.is_custom +ida_fixup.fixup_data_t.is_extdef +ida_fixup.fixup_data_t.is_unused +ida_fixup.fixup_data_t.off +ida_fixup.fixup_data_t.patch_value +ida_fixup.fixup_data_t.sel +ida_fixup.fixup_data_t.set +ida_fixup.fixup_data_t.set_base +ida_fixup.fixup_data_t.set_extdef +ida_fixup.fixup_data_t.set_sel +ida_fixup.fixup_data_t.set_target_sel +ida_fixup.fixup_data_t.set_type +ida_fixup.fixup_data_t.set_type_and_flags +ida_fixup.fixup_data_t.set_unused +ida_fixup.fixup_data_t.was_created +ida_fixup.fixup_info_t +ida_fixup.fixup_info_t.__init__ +ida_fixup.gen_fix_fixups +ida_fixup.get_first_fixup_ea +ida_fixup.get_fixup +ida_fixup.get_fixup_desc +ida_fixup.get_fixup_handler +ida_fixup.get_fixup_value +ida_fixup.get_fixups +ida_fixup.get_next_fixup_ea +ida_fixup.get_prev_fixup_ea +ida_fixup.handle_fixups_in_macro +ida_fixup.is_fixup_custom +ida_fixup.patch_fixup_value +ida_fixup.set_fixup +ida_fpro +ida_fpro.qfclose +ida_fpro.qfile_t +ida_fpro.qfile_t.__init__ +ida_fpro.qfile_t.close +ida_fpro.qfile_t.filename +ida_fpro.qfile_t.flush +ida_fpro.qfile_t.from_capsule +ida_fpro.qfile_t.from_fp +ida_fpro.qfile_t.get_byte +ida_fpro.qfile_t.get_fp +ida_fpro.qfile_t.gets +ida_fpro.qfile_t.open +ida_fpro.qfile_t.opened +ida_fpro.qfile_t.put_byte +ida_fpro.qfile_t.puts +ida_fpro.qfile_t.read +ida_fpro.qfile_t.readbytes +ida_fpro.qfile_t.seek +ida_fpro.qfile_t.size +ida_fpro.qfile_t.tell +ida_fpro.qfile_t.tmpfile +ida_fpro.qfile_t.write +ida_fpro.qfile_t.writebytes +ida_frame +ida_frame.REGVAR_ERROR_ARG +ida_frame.REGVAR_ERROR_NAME +ida_frame.REGVAR_ERROR_OK +ida_frame.REGVAR_ERROR_RANGE +ida_frame.STKVAR_VALID_SIZE +ida_frame.add_auto_stkpnt +ida_frame.add_frame +ida_frame.add_frame_member +ida_frame.add_regvar +ida_frame.add_user_stkpnt +ida_frame.build_stkvar_name +ida_frame.build_stkvar_xrefs +ida_frame.calc_frame_offset +ida_frame.calc_stkvar_struc_offset +ida_frame.define_stkvar +ida_frame.del_frame +ida_frame.del_regvar +ida_frame.del_stkpnt +ida_frame.delete_frame_members +ida_frame.find_regvar +ida_frame.frame_off_args +ida_frame.frame_off_lvars +ida_frame.frame_off_retaddr +ida_frame.frame_off_savregs +ida_frame.free_regvar +ida_frame.get_effective_spd +ida_frame.get_frame_part +ida_frame.get_frame_retsize +ida_frame.get_frame_size +ida_frame.get_func_frame +ida_frame.get_sp_delta +ida_frame.get_spd +ida_frame.has_regvar +ida_frame.is_anonymous_member_name +ida_frame.is_dummy_member_name +ida_frame.is_funcarg_off +ida_frame.is_special_frame_member +ida_frame.lvar_off +ida_frame.recalc_spd +ida_frame.recalc_spd_for_basic_block +ida_frame.regvar_t +ida_frame.regvar_t.__init__ +ida_frame.regvar_t.canon +ida_frame.regvar_t.cmt +ida_frame.regvar_t.swap +ida_frame.regvar_t.user +ida_frame.rename_regvar +ida_frame.set_auto_spd +ida_frame.set_frame_member_type +ida_frame.set_frame_size +ida_frame.set_purged +ida_frame.set_regvar_cmt +ida_frame.soff_to_fpoff +ida_frame.stkpnt_t +ida_frame.stkpnt_t.__eq__ +ida_frame.stkpnt_t.__ge__ +ida_frame.stkpnt_t.__gt__ +ida_frame.stkpnt_t.__init__ +ida_frame.stkpnt_t.__le__ +ida_frame.stkpnt_t.__lt__ +ida_frame.stkpnt_t.__ne__ +ida_frame.stkpnt_t.compare +ida_frame.stkpnts_t +ida_frame.stkpnts_t.__eq__ +ida_frame.stkpnts_t.__ge__ +ida_frame.stkpnts_t.__gt__ +ida_frame.stkpnts_t.__init__ +ida_frame.stkpnts_t.__le__ +ida_frame.stkpnts_t.__lt__ +ida_frame.stkpnts_t.__ne__ +ida_frame.stkpnts_t.compare +ida_frame.update_fpd +ida_frame.xreflist_entry_t +ida_frame.xreflist_entry_t.__eq__ +ida_frame.xreflist_entry_t.__ge__ +ida_frame.xreflist_entry_t.__gt__ +ida_frame.xreflist_entry_t.__init__ +ida_frame.xreflist_entry_t.__le__ +ida_frame.xreflist_entry_t.__lt__ +ida_frame.xreflist_entry_t.__ne__ +ida_frame.xreflist_entry_t.compare +ida_frame.xreflist_entry_t.ea +ida_frame.xreflist_entry_t.opnum +ida_frame.xreflist_entry_t.type +ida_frame.xreflist_t +ida_frame.xreflist_t.__eq__ +ida_frame.xreflist_t.__getitem__ +ida_frame.xreflist_t.__init__ +ida_frame.xreflist_t.__len__ +ida_frame.xreflist_t.__ne__ +ida_frame.xreflist_t.__setitem__ +ida_frame.xreflist_t._del +ida_frame.xreflist_t.add_unique +ida_frame.xreflist_t.append +ida_frame.xreflist_t.at +ida_frame.xreflist_t.begin +ida_frame.xreflist_t.capacity +ida_frame.xreflist_t.clear +ida_frame.xreflist_t.empty +ida_frame.xreflist_t.end +ida_frame.xreflist_t.erase +ida_frame.xreflist_t.extend +ida_frame.xreflist_t.extract +ida_frame.xreflist_t.find +ida_frame.xreflist_t.grow +ida_frame.xreflist_t.has +ida_frame.xreflist_t.inject +ida_frame.xreflist_t.insert +ida_frame.xreflist_t.pop_back +ida_frame.xreflist_t.push_back +ida_frame.xreflist_t.qclear +ida_frame.xreflist_t.reserve +ida_frame.xreflist_t.resize +ida_frame.xreflist_t.size +ida_frame.xreflist_t.swap +ida_frame.xreflist_t.truncate +ida_funcs +ida_funcs.FIND_FUNC_DEFINE +ida_funcs.FIND_FUNC_EXIST +ida_funcs.FIND_FUNC_IGNOREFN +ida_funcs.FIND_FUNC_KEEPBD +ida_funcs.FIND_FUNC_NORMAL +ida_funcs.FIND_FUNC_OK +ida_funcs.FIND_FUNC_UNDEF +ida_funcs.FUNC_BOTTOMBP +ida_funcs.FUNC_CATCH +ida_funcs.FUNC_FAR +ida_funcs.FUNC_FRAME +ida_funcs.FUNC_FUZZY_SP +ida_funcs.FUNC_HIDDEN +ida_funcs.FUNC_LIB +ida_funcs.FUNC_LUMINA +ida_funcs.FUNC_NORET +ida_funcs.FUNC_NORET_PENDING +ida_funcs.FUNC_OUTLINE +ida_funcs.FUNC_PROLOG_OK +ida_funcs.FUNC_PURGED_OK +ida_funcs.FUNC_REANALYZE +ida_funcs.FUNC_SP_READY +ida_funcs.FUNC_STATICDEF +ida_funcs.FUNC_TAIL +ida_funcs.FUNC_THUNK +ida_funcs.FUNC_UNWIND +ida_funcs.FUNC_USERFAR +ida_funcs.IDASGN_APPLIED +ida_funcs.IDASGN_BADARG +ida_funcs.IDASGN_CURRENT +ida_funcs.IDASGN_OK +ida_funcs.IDASGN_PLANNED +ida_funcs.LIBFUNC_DELAY +ida_funcs.LIBFUNC_FOUND +ida_funcs.LIBFUNC_NONE +ida_funcs.MOVE_FUNC_BADSTART +ida_funcs.MOVE_FUNC_NOCODE +ida_funcs.MOVE_FUNC_NOFUNC +ida_funcs.MOVE_FUNC_OK +ida_funcs.MOVE_FUNC_REFUSED +ida_funcs.add_func +ida_funcs.add_func_ex +ida_funcs.add_regarg +ida_funcs.append_func_tail +ida_funcs.apply_idasgn_to +ida_funcs.apply_startup_sig +ida_funcs.calc_func_size +ida_funcs.calc_idasgn_state +ida_funcs.calc_thunk_func_target +ida_funcs.calc_thunk_func_target +ida_funcs.del_func +ida_funcs.del_idasgn +ida_funcs.dyn_ea_array +ida_funcs.dyn_ea_array.__getitem__ +ida_funcs.dyn_ea_array.__init__ +ida_funcs.dyn_ea_array.__len__ +ida_funcs.dyn_ea_array.__setitem__ +ida_funcs.dyn_range_array +ida_funcs.dyn_range_array.__getitem__ +ida_funcs.dyn_range_array.__init__ +ida_funcs.dyn_range_array.__len__ +ida_funcs.dyn_range_array.__setitem__ +ida_funcs.dyn_regarg_array +ida_funcs.dyn_regarg_array.__getitem__ +ida_funcs.dyn_regarg_array.__init__ +ida_funcs.dyn_regarg_array.__len__ +ida_funcs.dyn_regarg_array.__setitem__ +ida_funcs.dyn_regvar_array +ida_funcs.dyn_regvar_array.__getitem__ +ida_funcs.dyn_regvar_array.__init__ +ida_funcs.dyn_regvar_array.__len__ +ida_funcs.dyn_regvar_array.__setitem__ +ida_funcs.dyn_stkpnt_array +ida_funcs.dyn_stkpnt_array.__getitem__ +ida_funcs.dyn_stkpnt_array.__init__ +ida_funcs.dyn_stkpnt_array.__len__ +ida_funcs.dyn_stkpnt_array.__setitem__ +ida_funcs.f_any +ida_funcs.find_func_bounds +ida_funcs.free_regarg +ida_funcs.func_contains +ida_funcs.func_does_return +ida_funcs.func_item_iterator_t +ida_funcs.func_item_iterator_t.__init__ +ida_funcs.func_item_iterator_t.__iter__ +ida_funcs.func_item_iterator_t.__next__ +ida_funcs.func_item_iterator_t.addresses +ida_funcs.func_item_iterator_t.chunk +ida_funcs.func_item_iterator_t.code_items +ida_funcs.func_item_iterator_t.current +ida_funcs.func_item_iterator_t.data_items +ida_funcs.func_item_iterator_t.decode_preceding_insn +ida_funcs.func_item_iterator_t.decode_prev_insn +ida_funcs.func_item_iterator_t.first +ida_funcs.func_item_iterator_t.head_items +ida_funcs.func_item_iterator_t.last +ida_funcs.func_item_iterator_t.next_addr +ida_funcs.func_item_iterator_t.next_code +ida_funcs.func_item_iterator_t.next_data +ida_funcs.func_item_iterator_t.next_head +ida_funcs.func_item_iterator_t.next_not_tail +ida_funcs.func_item_iterator_t.not_tails +ida_funcs.func_item_iterator_t.prev +ida_funcs.func_item_iterator_t.prev_addr +ida_funcs.func_item_iterator_t.prev_code +ida_funcs.func_item_iterator_t.prev_data +ida_funcs.func_item_iterator_t.prev_head +ida_funcs.func_item_iterator_t.prev_not_tail +ida_funcs.func_item_iterator_t.set +ida_funcs.func_item_iterator_t.set_ea +ida_funcs.func_item_iterator_t.set_range +ida_funcs.func_item_iterator_t.succ +ida_funcs.func_item_iterator_t.succ_code +ida_funcs.func_parent_iterator_set +ida_funcs.func_parent_iterator_t +ida_funcs.func_parent_iterator_t.__init__ +ida_funcs.func_parent_iterator_t.__iter__ +ida_funcs.func_parent_iterator_t.__next__ +ida_funcs.func_parent_iterator_t.first +ida_funcs.func_parent_iterator_t.last +ida_funcs.func_parent_iterator_t.parent +ida_funcs.func_parent_iterator_t.prev +ida_funcs.func_parent_iterator_t.reset_fnt +ida_funcs.func_parent_iterator_t.set +ida_funcs.func_t +ida_funcs.func_t.__get_points__ +ida_funcs.func_t.__get_referers__ +ida_funcs.func_t.__get_regargs__ +ida_funcs.func_t.__get_regvars__ +ida_funcs.func_t.__get_tails__ +ida_funcs.func_t.__init__ +ida_funcs.func_t.__iter__ +ida_funcs.func_t.addresses +ida_funcs.func_t.analyzed_sp +ida_funcs.func_t.argsize +ida_funcs.func_t.code_items +ida_funcs.func_t.color +ida_funcs.func_t.data_items +ida_funcs.func_t.does_return +ida_funcs.func_t.flags +ida_funcs.func_t.fpd +ida_funcs.func_t.frame +ida_funcs.func_t.frregs +ida_funcs.func_t.frsize +ida_funcs.func_t.get_frame_object +ida_funcs.func_t.get_name +ida_funcs.func_t.get_prototype +ida_funcs.func_t.head_items +ida_funcs.func_t.is_far +ida_funcs.func_t.need_prolog_analysis +ida_funcs.func_t.not_tails +ida_funcs.func_t.owner +ida_funcs.func_t.pntqty +ida_funcs.func_t.points +ida_funcs.func_t.points +ida_funcs.func_t.referers +ida_funcs.func_t.referers +ida_funcs.func_t.refqty +ida_funcs.func_t.regargqty +ida_funcs.func_t.regargs +ida_funcs.func_t.regargs +ida_funcs.func_t.regvarqty +ida_funcs.func_t.regvars +ida_funcs.func_t.regvars +ida_funcs.func_t.tailqty +ida_funcs.func_t.tails +ida_funcs.func_t.tails +ida_funcs.func_t__from_ptrval__ +ida_funcs.func_tail_iterator_set +ida_funcs.func_tail_iterator_set_ea +ida_funcs.func_tail_iterator_t +ida_funcs.func_tail_iterator_t.__init__ +ida_funcs.func_tail_iterator_t.__iter__ +ida_funcs.func_tail_iterator_t.__next__ +ida_funcs.func_tail_iterator_t.chunk +ida_funcs.func_tail_iterator_t.first +ida_funcs.func_tail_iterator_t.last +ida_funcs.func_tail_iterator_t.main +ida_funcs.func_tail_iterator_t.prev +ida_funcs.func_tail_iterator_t.set +ida_funcs.func_tail_iterator_t.set_ea +ida_funcs.func_tail_iterator_t.set_range +ida_funcs.get_current_idasgn +ida_funcs.get_fchunk +ida_funcs.get_fchunk_num +ida_funcs.get_fchunk_qty +ida_funcs.get_fchunk_referer +ida_funcs.get_func +ida_funcs.get_func_bitness +ida_funcs.get_func_bits +ida_funcs.get_func_bytes +ida_funcs.get_func_chunknum +ida_funcs.get_func_cmt +ida_funcs.get_func_name +ida_funcs.get_func_num +ida_funcs.get_func_qty +ida_funcs.get_func_ranges +ida_funcs.get_idasgn_desc +ida_funcs.get_idasgn_desc_with_matches +ida_funcs.get_idasgn_qty +ida_funcs.get_idasgn_title +ida_funcs.get_next_fchunk +ida_funcs.get_next_func +ida_funcs.get_next_func_addr +ida_funcs.get_prev_fchunk +ida_funcs.get_prev_func +ida_funcs.get_prev_func_addr +ida_funcs.getn_fchunk +ida_funcs.getn_func +ida_funcs.is_finally_visible_func +ida_funcs.is_func_entry +ida_funcs.is_func_locked +ida_funcs.is_func_tail +ida_funcs.is_same_func +ida_funcs.is_visible_func +ida_funcs.lock_func +ida_funcs.lock_func.__init__ +ida_funcs.lock_func_range +ida_funcs.lock_func_with_tails_t +ida_funcs.lock_func_with_tails_t.__init__ +ida_funcs.plan_to_apply_idasgn +ida_funcs.read_regargs +ida_funcs.reanalyze_function +ida_funcs.reanalyze_noret_flag +ida_funcs.regarg_t +ida_funcs.regarg_t.__init__ +ida_funcs.regarg_t.swap +ida_funcs.remove_func_tail +ida_funcs.set_func_cmt +ida_funcs.set_func_end +ida_funcs.set_func_name_if_jumpfunc +ida_funcs.set_func_start +ida_funcs.set_noret_insn +ida_funcs.set_tail_owner +ida_funcs.set_visible_func +ida_funcs.try_to_add_libfunc +ida_funcs.update_func +ida_gdl +ida_gdl.BasicBlock +ida_gdl.BasicBlock.__init__ +ida_gdl.BasicBlock.preds +ida_gdl.BasicBlock.succs +ida_gdl.CHART_FOLLOW_DIRECTION +ida_gdl.CHART_GEN_DOT +ida_gdl.CHART_GEN_GDL +ida_gdl.CHART_IGNORE_LIB_FROM +ida_gdl.CHART_IGNORE_LIB_TO +ida_gdl.CHART_NOLIBFUNCS +ida_gdl.CHART_PRINT_DOTS +ida_gdl.CHART_PRINT_NAMES +ida_gdl.CHART_RECURSIVE +ida_gdl.CHART_REFERENCED +ida_gdl.CHART_REFERENCING +ida_gdl.CHART_WINGRAPH +ida_gdl.FC_APPND +ida_gdl.FC_CALL_ENDS +ida_gdl.FC_CHKBREAK +ida_gdl.FC_NOEXT +ida_gdl.FC_NOPREDS +ida_gdl.FC_OUTLINES +ida_gdl.FC_PRINT +ida_gdl.FC_RESERVED +ida_gdl.FlowChart +ida_gdl.FlowChart.__getitem__ +ida_gdl.FlowChart.__init__ +ida_gdl.FlowChart.__iter__ +ida_gdl.FlowChart._getitem +ida_gdl.FlowChart.refresh +ida_gdl.FlowChart.size +ida_gdl.cancellable_graph_t +ida_gdl.cancellable_graph_t.__disown__ +ida_gdl.cancellable_graph_t.__init__ +ida_gdl.display_gdl +ida_gdl.edge_t +ida_gdl.edge_t.__eq__ +ida_gdl.edge_t.__init__ +ida_gdl.edge_t.__lt__ +ida_gdl.edge_t.__ne__ +ida_gdl.edge_t.dst +ida_gdl.edge_t.src +ida_gdl.edgevec_t +ida_gdl.edgevec_t.__init__ +ida_gdl.fcb_cndret +ida_gdl.fcb_enoret +ida_gdl.fcb_error +ida_gdl.fcb_extern +ida_gdl.fcb_indjump +ida_gdl.fcb_noret +ida_gdl.fcb_normal +ida_gdl.fcb_ret +ida_gdl.gdl_graph_t +ida_gdl.gdl_graph_t.__disown__ +ida_gdl.gdl_graph_t.__init__ +ida_gdl.gdl_graph_t.begin +ida_gdl.gdl_graph_t.edge +ida_gdl.gdl_graph_t.empty +ida_gdl.gdl_graph_t.end +ida_gdl.gdl_graph_t.entry +ida_gdl.gdl_graph_t.exists +ida_gdl.gdl_graph_t.exit +ida_gdl.gdl_graph_t.front +ida_gdl.gdl_graph_t.get_edge_color +ida_gdl.gdl_graph_t.get_node_color +ida_gdl.gdl_graph_t.get_node_label +ida_gdl.gdl_graph_t.nedge +ida_gdl.gdl_graph_t.node_qty +ida_gdl.gdl_graph_t.npred +ida_gdl.gdl_graph_t.nsucc +ida_gdl.gdl_graph_t.pred +ida_gdl.gdl_graph_t.print_edge +ida_gdl.gdl_graph_t.print_graph_attributes +ida_gdl.gdl_graph_t.print_node +ida_gdl.gdl_graph_t.print_node_attributes +ida_gdl.gdl_graph_t.size +ida_gdl.gdl_graph_t.succ +ida_gdl.gen_complex_call_chart +ida_gdl.gen_flow_graph +ida_gdl.gen_gdl +ida_gdl.gen_simple_call_chart +ida_gdl.is_noret_block +ida_gdl.is_ret_block +ida_gdl.node_iterator +ida_gdl.node_iterator.__eq__ +ida_gdl.node_iterator.__init__ +ida_gdl.node_iterator.__ne__ +ida_gdl.node_iterator.__ref__ +ida_gdl.node_ordering_t +ida_gdl.node_ordering_t.__init__ +ida_gdl.node_ordering_t.clear +ida_gdl.node_ordering_t.clr +ida_gdl.node_ordering_t.node +ida_gdl.node_ordering_t.order +ida_gdl.node_ordering_t.resize +ida_gdl.node_ordering_t.set +ida_gdl.node_ordering_t.size +ida_gdl.qbasic_block_t +ida_gdl.qbasic_block_t.__init__ +ida_gdl.qflow_chart_t +ida_gdl.qflow_chart_t.__getitem__ +ida_gdl.qflow_chart_t.__init__ +ida_gdl.qflow_chart_t.append_to_flowchart +ida_gdl.qflow_chart_t.bounds +ida_gdl.qflow_chart_t.calc_block_type +ida_gdl.qflow_chart_t.create +ida_gdl.qflow_chart_t.flags +ida_gdl.qflow_chart_t.get_node_label +ida_gdl.qflow_chart_t.is_noret_block +ida_gdl.qflow_chart_t.is_ret_block +ida_gdl.qflow_chart_t.npred +ida_gdl.qflow_chart_t.nproper +ida_gdl.qflow_chart_t.nsucc +ida_gdl.qflow_chart_t.pfn +ida_gdl.qflow_chart_t.pred +ida_gdl.qflow_chart_t.print_names +ida_gdl.qflow_chart_t.print_node_attributes +ida_gdl.qflow_chart_t.refresh +ida_gdl.qflow_chart_t.size +ida_gdl.qflow_chart_t.succ +ida_graph +ida_graph.GLICTL_CENTER +ida_graph.GraphViewer +ida_graph.GraphViewer.AddCommand +ida_graph.GraphViewer.AddEdge +ida_graph.GraphViewer.AddNode +ida_graph.GraphViewer.Clear +ida_graph.GraphViewer.Close +ida_graph.GraphViewer.Count +ida_graph.GraphViewer.OnCommand +ida_graph.GraphViewer.OnPopup +ida_graph.GraphViewer.OnRefresh +ida_graph.GraphViewer.Select +ida_graph.GraphViewer.Show +ida_graph.GraphViewer.UI_Hooks_Trampoline +ida_graph.GraphViewer.UI_Hooks_Trampoline.__init__ +ida_graph.GraphViewer.UI_Hooks_Trampoline.populating_widget_popup +ida_graph.GraphViewer._OnBind +ida_graph.GraphViewer.__getitem__ +ida_graph.GraphViewer.__init__ +ida_graph.GraphViewer.__init__._qccb +ida_graph.GraphViewer.__iter__ +ida_graph.MTG_DOT_NODE +ida_graph.MTG_GROUP_NODE +ida_graph.MTG_NON_DISPLAYABLE_NODE +ida_graph.NIF_BG_COLOR +ida_graph.NIF_EA +ida_graph.NIF_FLAGS +ida_graph.NIF_FRAME_COLOR +ida_graph.NIF_TEXT +ida_graph.TPointDouble +ida_graph.TPointDouble.__eq__ +ida_graph.TPointDouble.__init__ +ida_graph.TPointDouble.__ne__ +ida_graph.TPointDouble.add +ida_graph.TPointDouble.negate +ida_graph.TPointDouble.sub +ida_graph.calc_dist +ida_graph.clr_node_info +ida_graph.create_disasm_graph +ida_graph.create_graph_viewer +ida_graph.create_interactive_graph +ida_graph.create_user_graph_place +ida_graph.del_node_info +ida_graph.delete_interactive_graph +ida_graph.drawable_graph_t +ida_graph.drawable_graph_t.__disown__ +ida_graph.drawable_graph_t.__init__ +ida_graph.drawable_graph_t.callback_ud +ida_graph.drawable_graph_t.circle_center +ida_graph.drawable_graph_t.circle_radius +ida_graph.drawable_graph_t.create_circle_layout +ida_graph.drawable_graph_t.create_tree_layout +ida_graph.drawable_graph_t.current_layout +ida_graph.drawable_graph_t.get_edge +ida_graph.drawable_graph_t.grcall +ida_graph.drawable_graph_t.nrect +ida_graph.drawable_graph_t.rect_edges_made +ida_graph.drawable_graph_t.set_callback +ida_graph.drawable_graph_t.title +ida_graph.edge_info_t +ida_graph.edge_info_t.__init__ +ida_graph.edge_info_t.color +ida_graph.edge_info_t.dstoff +ida_graph.edge_info_t.layout +ida_graph.edge_info_t.reverse_layout +ida_graph.edge_info_t.srcoff +ida_graph.edge_info_t.width +ida_graph.edge_infos_wrapper_t +ida_graph.edge_infos_wrapper_t.__init__ +ida_graph.edge_infos_wrapper_t.clear +ida_graph.edge_layout_point_t +ida_graph.edge_layout_point_t.__eq__ +ida_graph.edge_layout_point_t.__init__ +ida_graph.edge_layout_point_t.__ne__ +ida_graph.edge_layout_point_t.compare +ida_graph.edge_layout_point_t.e +ida_graph.edge_layout_point_t.pidx +ida_graph.edge_segment_t +ida_graph.edge_segment_t.__init__ +ida_graph.edge_segment_t.__lt__ +ida_graph.edge_segment_t.length +ida_graph.edge_segment_t.toright +ida_graph.get_graph_viewer +ida_graph.get_node_info +ida_graph.get_viewer_graph +ida_graph.git_edge +ida_graph.git_elp +ida_graph.git_node +ida_graph.git_none +ida_graph.git_text +ida_graph.git_tool +ida_graph.graph_item_t +ida_graph.graph_item_t.__init__ +ida_graph.graph_item_t.b +ida_graph.graph_item_t.e +ida_graph.graph_item_t.elp +ida_graph.graph_item_t.is_edge +ida_graph.graph_item_t.is_node +ida_graph.graph_item_t.n +ida_graph.graph_item_t.p +ida_graph.graph_item_t.type +ida_graph.graph_node_visitor_t +ida_graph.graph_node_visitor_t.__disown__ +ida_graph.graph_node_visitor_t.__init__ +ida_graph.graph_node_visitor_t.is_forbidden_edge +ida_graph.graph_node_visitor_t.is_visited +ida_graph.graph_node_visitor_t.reinit +ida_graph.graph_node_visitor_t.set_visited +ida_graph.graph_node_visitor_t.visit_node +ida_graph.graph_path_visitor_t +ida_graph.graph_path_visitor_t.__disown__ +ida_graph.graph_path_visitor_t.__init__ +ida_graph.graph_path_visitor_t.path +ida_graph.graph_path_visitor_t.prune +ida_graph.graph_path_visitor_t.walk_backward +ida_graph.graph_path_visitor_t.walk_forward +ida_graph.graph_visitor_t +ida_graph.graph_visitor_t.__disown__ +ida_graph.graph_visitor_t.__init__ +ida_graph.graph_visitor_t.visit_edge +ida_graph.graph_visitor_t.visit_node +ida_graph.grcode_calculating_layout +ida_graph.grcode_center_on +ida_graph.grcode_change_group_visibility +ida_graph.grcode_changed_graph +ida_graph.grcode_clear +ida_graph.grcode_clicked +ida_graph.grcode_create_circle_layout +ida_graph.grcode_create_digraph_layout +ida_graph.grcode_create_disasm_graph1 +ida_graph.grcode_create_disasm_graph2 +ida_graph.grcode_create_graph_viewer +ida_graph.grcode_create_group +ida_graph.grcode_create_interactive_graph +ida_graph.grcode_create_tree_layout +ida_graph.grcode_create_user_graph_place +ida_graph.grcode_creating_group +ida_graph.grcode_dblclicked +ida_graph.grcode_del_custom_layout +ida_graph.grcode_del_node_info +ida_graph.grcode_delete_group +ida_graph.grcode_delete_interactive_graph +ida_graph.grcode_deleting_group +ida_graph.grcode_destroyed +ida_graph.grcode_edge_infos_wrapper_clear +ida_graph.grcode_edge_infos_wrapper_copy +ida_graph.grcode_empty +ida_graph.grcode_find_subgraph_node +ida_graph.grcode_fit_window +ida_graph.grcode_get_curnode +ida_graph.grcode_get_custom_layout +ida_graph.grcode_get_gli +ida_graph.grcode_get_graph_groups +ida_graph.grcode_get_graph_viewer +ida_graph.grcode_get_node_info +ida_graph.grcode_get_node_representative +ida_graph.grcode_get_selection +ida_graph.grcode_get_viewer_graph +ida_graph.grcode_gotfocus +ida_graph.grcode_group_visibility +ida_graph.grcode_is_visible_node +ida_graph.grcode_layout_calculated +ida_graph.grcode_lostfocus +ida_graph.grcode_node_qty +ida_graph.grcode_nrect +ida_graph.grcode_refresh_viewer +ida_graph.grcode_set_custom_layout +ida_graph.grcode_set_edge +ida_graph.grcode_set_gli +ida_graph.grcode_set_graph_groups +ida_graph.grcode_set_node_info +ida_graph.grcode_set_titlebar_height +ida_graph.grcode_set_viewer_graph +ida_graph.grcode_user_draw +ida_graph.grcode_user_hint +ida_graph.grcode_user_refresh +ida_graph.grcode_user_size +ida_graph.grcode_user_text +ida_graph.grcode_user_title +ida_graph.grcode_viewer_create_groups_vec +ida_graph.grcode_viewer_delete_groups_vec +ida_graph.grcode_viewer_groups_visibility_vec +ida_graph.group_crinfo_t +ida_graph.group_crinfo_t.__init__ +ida_graph.interactive_graph_t +ida_graph.interactive_graph_t.__init__ +ida_graph.interactive_graph_t.add_edge +ida_graph.interactive_graph_t.add_node +ida_graph.interactive_graph_t.belongs +ida_graph.interactive_graph_t.calc_group_ea +ida_graph.interactive_graph_t.change_group_visibility +ida_graph.interactive_graph_t.create_digraph_layout +ida_graph.interactive_graph_t.create_group +ida_graph.interactive_graph_t.del_custom_layout +ida_graph.interactive_graph_t.del_edge +ida_graph.interactive_graph_t.del_node +ida_graph.interactive_graph_t.delete_group +ida_graph.interactive_graph_t.empty +ida_graph.interactive_graph_t.exists +ida_graph.interactive_graph_t.get_custom_layout +ida_graph.interactive_graph_t.get_first_subgraph_node +ida_graph.interactive_graph_t.get_graph_groups +ida_graph.interactive_graph_t.get_next_subgraph_node +ida_graph.interactive_graph_t.get_node_group +ida_graph.interactive_graph_t.get_node_representative +ida_graph.interactive_graph_t.gid +ida_graph.interactive_graph_t.is_collapsed_node +ida_graph.interactive_graph_t.is_deleted_node +ida_graph.interactive_graph_t.is_displayable_node +ida_graph.interactive_graph_t.is_dot_node +ida_graph.interactive_graph_t.is_group_node +ida_graph.interactive_graph_t.is_simple_node +ida_graph.interactive_graph_t.is_subgraph_node +ida_graph.interactive_graph_t.is_uncollapsed_node +ida_graph.interactive_graph_t.is_user_graph +ida_graph.interactive_graph_t.is_visible_node +ida_graph.interactive_graph_t.node_flags +ida_graph.interactive_graph_t.node_qty +ida_graph.interactive_graph_t.npred +ida_graph.interactive_graph_t.nsucc +ida_graph.interactive_graph_t.pred +ida_graph.interactive_graph_t.predset +ida_graph.interactive_graph_t.redo_layout +ida_graph.interactive_graph_t.refresh +ida_graph.interactive_graph_t.replace_edge +ida_graph.interactive_graph_t.reset +ida_graph.interactive_graph_t.resize +ida_graph.interactive_graph_t.set_custom_layout +ida_graph.interactive_graph_t.set_deleted_node +ida_graph.interactive_graph_t.set_edge +ida_graph.interactive_graph_t.set_graph_groups +ida_graph.interactive_graph_t.set_node_group +ida_graph.interactive_graph_t.set_nrect +ida_graph.interactive_graph_t.size +ida_graph.interactive_graph_t.succ +ida_graph.interactive_graph_t.succset +ida_graph.interval_t +ida_graph.interval_t.__eq__ +ida_graph.interval_t.__init__ +ida_graph.interval_t.__ne__ +ida_graph.interval_t.contains +ida_graph.interval_t.empty +ida_graph.interval_t.intersect +ida_graph.interval_t.length +ida_graph.interval_t.make_union +ida_graph.interval_t.move_by +ida_graph.node_info_t +ida_graph.node_info_t.__init__ +ida_graph.node_info_t.bg_color +ida_graph.node_info_t.ea +ida_graph.node_info_t.flags +ida_graph.node_info_t.frame_color +ida_graph.node_info_t.get_flags_for_valid +ida_graph.node_info_t.text +ida_graph.node_info_t.valid_bg_color +ida_graph.node_info_t.valid_ea +ida_graph.node_info_t.valid_flags +ida_graph.node_info_t.valid_frame_color +ida_graph.node_info_t.valid_text +ida_graph.node_layout_t +ida_graph.node_layout_t.__eq__ +ida_graph.node_layout_t.__getitem__ +ida_graph.node_layout_t.__init__ +ida_graph.node_layout_t.__len__ +ida_graph.node_layout_t.__ne__ +ida_graph.node_layout_t.__setitem__ +ida_graph.node_layout_t._del +ida_graph.node_layout_t.add_unique +ida_graph.node_layout_t.append +ida_graph.node_layout_t.at +ida_graph.node_layout_t.begin +ida_graph.node_layout_t.capacity +ida_graph.node_layout_t.clear +ida_graph.node_layout_t.empty +ida_graph.node_layout_t.end +ida_graph.node_layout_t.erase +ida_graph.node_layout_t.extend +ida_graph.node_layout_t.extract +ida_graph.node_layout_t.find +ida_graph.node_layout_t.grow +ida_graph.node_layout_t.has +ida_graph.node_layout_t.inject +ida_graph.node_layout_t.insert +ida_graph.node_layout_t.pop_back +ida_graph.node_layout_t.push_back +ida_graph.node_layout_t.qclear +ida_graph.node_layout_t.reserve +ida_graph.node_layout_t.resize +ida_graph.node_layout_t.size +ida_graph.node_layout_t.swap +ida_graph.node_layout_t.truncate +ida_graph.point_t +ida_graph.point_t.__eq__ +ida_graph.point_t.__init__ +ida_graph.point_t.__ne__ +ida_graph.point_t.add +ida_graph.point_t.negate +ida_graph.point_t.sub +ida_graph.pointseq_t +ida_graph.pointseq_t.__init__ +ida_graph.pointvec_t +ida_graph.pointvec_t.__eq__ +ida_graph.pointvec_t.__getitem__ +ida_graph.pointvec_t.__init__ +ida_graph.pointvec_t.__len__ +ida_graph.pointvec_t.__ne__ +ida_graph.pointvec_t.__setitem__ +ida_graph.pointvec_t._del +ida_graph.pointvec_t.add_unique +ida_graph.pointvec_t.append +ida_graph.pointvec_t.at +ida_graph.pointvec_t.begin +ida_graph.pointvec_t.capacity +ida_graph.pointvec_t.clear +ida_graph.pointvec_t.empty +ida_graph.pointvec_t.end +ida_graph.pointvec_t.erase +ida_graph.pointvec_t.extend +ida_graph.pointvec_t.extract +ida_graph.pointvec_t.find +ida_graph.pointvec_t.grow +ida_graph.pointvec_t.has +ida_graph.pointvec_t.inject +ida_graph.pointvec_t.insert +ida_graph.pointvec_t.pop_back +ida_graph.pointvec_t.push_back +ida_graph.pointvec_t.qclear +ida_graph.pointvec_t.reserve +ida_graph.pointvec_t.resize +ida_graph.pointvec_t.size +ida_graph.pointvec_t.swap +ida_graph.pointvec_t.truncate +ida_graph.pyg_close +ida_graph.pyg_select_node +ida_graph.pyg_show +ida_graph.rect_t +ida_graph.rect_t.__eq__ +ida_graph.rect_t.__init__ +ida_graph.rect_t.__ne__ +ida_graph.rect_t.area +ida_graph.rect_t.bottomright +ida_graph.rect_t.center +ida_graph.rect_t.contains +ida_graph.rect_t.empty +ida_graph.rect_t.grow +ida_graph.rect_t.height +ida_graph.rect_t.intersect +ida_graph.rect_t.is_intersection_empty +ida_graph.rect_t.make_union +ida_graph.rect_t.move_by +ida_graph.rect_t.move_to +ida_graph.rect_t.topleft +ida_graph.rect_t.verify +ida_graph.rect_t.width +ida_graph.refresh_viewer +ida_graph.row_info_t +ida_graph.row_info_t.__init__ +ida_graph.row_info_t.bottom +ida_graph.row_info_t.height +ida_graph.row_info_t.nodes +ida_graph.row_info_t.top +ida_graph.screen_graph_selection_base_t +ida_graph.screen_graph_selection_base_t.__eq__ +ida_graph.screen_graph_selection_base_t.__getitem__ +ida_graph.screen_graph_selection_base_t.__init__ +ida_graph.screen_graph_selection_base_t.__len__ +ida_graph.screen_graph_selection_base_t.__ne__ +ida_graph.screen_graph_selection_base_t.__setitem__ +ida_graph.screen_graph_selection_base_t._del +ida_graph.screen_graph_selection_base_t.add_unique +ida_graph.screen_graph_selection_base_t.append +ida_graph.screen_graph_selection_base_t.at +ida_graph.screen_graph_selection_base_t.begin +ida_graph.screen_graph_selection_base_t.capacity +ida_graph.screen_graph_selection_base_t.clear +ida_graph.screen_graph_selection_base_t.empty +ida_graph.screen_graph_selection_base_t.end +ida_graph.screen_graph_selection_base_t.erase +ida_graph.screen_graph_selection_base_t.extend +ida_graph.screen_graph_selection_base_t.extract +ida_graph.screen_graph_selection_base_t.find +ida_graph.screen_graph_selection_base_t.grow +ida_graph.screen_graph_selection_base_t.has +ida_graph.screen_graph_selection_base_t.inject +ida_graph.screen_graph_selection_base_t.insert +ida_graph.screen_graph_selection_base_t.pop_back +ida_graph.screen_graph_selection_base_t.push_back +ida_graph.screen_graph_selection_base_t.qclear +ida_graph.screen_graph_selection_base_t.reserve +ida_graph.screen_graph_selection_base_t.resize +ida_graph.screen_graph_selection_base_t.size +ida_graph.screen_graph_selection_base_t.swap +ida_graph.screen_graph_selection_base_t.truncate +ida_graph.screen_graph_selection_t +ida_graph.screen_graph_selection_t.__init__ +ida_graph.screen_graph_selection_t.add +ida_graph.screen_graph_selection_t.add_node +ida_graph.screen_graph_selection_t.add_point +ida_graph.screen_graph_selection_t.del_node +ida_graph.screen_graph_selection_t.del_point +ida_graph.screen_graph_selection_t.has +ida_graph.screen_graph_selection_t.items_count +ida_graph.screen_graph_selection_t.nodes_count +ida_graph.screen_graph_selection_t.points_count +ida_graph.screen_graph_selection_t.sub +ida_graph.selection_item_t +ida_graph.selection_item_t.__eq__ +ida_graph.selection_item_t.__init__ +ida_graph.selection_item_t.__lt__ +ida_graph.selection_item_t.__ne__ +ida_graph.selection_item_t.compare +ida_graph.selection_item_t.elp +ida_graph.selection_item_t.is_node +ida_graph.selection_item_t.node +ida_graph.set_node_info +ida_graph.set_viewer_graph +ida_graph.user_graph_place_t +ida_graph.user_graph_place_t.__init__ +ida_graph.viewer_attach_menu_item +ida_graph.viewer_center_on +ida_graph.viewer_create_groups +ida_graph.viewer_del_node_info +ida_graph.viewer_delete_groups +ida_graph.viewer_fit_window +ida_graph.viewer_get_curnode +ida_graph.viewer_get_gli +ida_graph.viewer_get_node_info +ida_graph.viewer_get_selection +ida_graph.viewer_set_gli +ida_graph.viewer_set_groups_visibility +ida_graph.viewer_set_node_info +ida_graph.viewer_set_titlebar_height +ida_ida +ida_ida.ABI_8ALIGN4 +ida_ida.ABI_BIGARG_ALIGN +ida_ida.ABI_GCC_LAYOUT +ida_ida.ABI_HARD_FLOAT +ida_ida.ABI_HUGEARG_ALIGN +ida_ida.ABI_MAP_STKARGS +ida_ida.ABI_PACK_STKARGS +ida_ida.ABI_SET_BY_USER +ida_ida.ABI_STACK_LDBL +ida_ida.ABI_STACK_VARARGS +ida_ida.AF2_DOEH +ida_ida.AF2_DORTTI +ida_ida.AF2_MACRO +ida_ida.AF2_MERGESTR +ida_ida.AF_ANORET +ida_ida.AF_CHKUNI +ida_ida.AF_CODE +ida_ida.AF_DATOFF +ida_ida.AF_DOCODE +ida_ida.AF_DODATA +ida_ida.AF_DREFOFF +ida_ida.AF_FINAL +ida_ida.AF_FIXUP +ida_ida.AF_FLIRT +ida_ida.AF_FTAIL +ida_ida.AF_HFLIRT +ida_ida.AF_IMMOFF +ida_ida.AF_JFUNC +ida_ida.AF_JUMPTBL +ida_ida.AF_LVAR +ida_ida.AF_MARKCODE +ida_ida.AF_MEMFUNC +ida_ida.AF_NULLSUB +ida_ida.AF_PROC +ida_ida.AF_PROCPTR +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_TRACE +ida_ida.AF_TRFUNC +ida_ida.AF_UNK +ida_ida.AF_USED +ida_ida.AF_VERSP +ida_ida.DEMNAM_CMNT +ida_ida.DEMNAM_FIRST +ida_ida.DEMNAM_GCC3 +ida_ida.DEMNAM_MASK +ida_ida.DEMNAM_NAME +ida_ida.DEMNAM_NONE +ida_ida.IDAINFO_TAG_SIZE +ida_ida.IDB_COMPRESSED +ida_ida.IDB_PACKED +ida_ida.IDB_UNPACKED +ida_ida.IDI_ALTVAL +ida_ida.IDI_BITMAP +ida_ida.IDI_BLOB +ida_ida.IDI_BYTEARRAY +ida_ida.IDI_CSTR +ida_ida.IDI_DEC +ida_ida.IDI_EA_HEX +ida_ida.IDI_HASH +ida_ida.IDI_HEX +ida_ida.IDI_HLPSTRUC +ida_ida.IDI_INC +ida_ida.IDI_MAP_VAL +ida_ida.IDI_NOMERGE +ida_ida.IDI_ONOFF +ida_ida.IDI_QSTRING +ida_ida.IDI_READONLY +ida_ida.IDI_SCALAR +ida_ida.IDI_STRUCFLD +ida_ida.IDI_SUPVAL +ida_ida.IDI_VALOBJ +ida_ida.INFFL_ALLASM +ida_ida.INFFL_AUTO +ida_ida.INFFL_CHKOPS +ida_ida.INFFL_GRAPH_VIEW +ida_ida.INFFL_LOADIDC +ida_ida.INFFL_NMOPS +ida_ida.INFFL_NOUSER +ida_ida.INFFL_READONLY +ida_ida.INF_ABINAME +ida_ida.INF_ARCHIVE_PATH +ida_ida.INF_CRC32 +ida_ida.INF_CTIME +ida_ida.INF_C_MACROS +ida_ida.INF_DBG_BINPATHS +ida_ida.INF_DUALOP_GRAPH +ida_ida.INF_DUALOP_TEXT +ida_ida.INF_ELAPSED +ida_ida.INF_FILE_FORMAT_NAME +ida_ida.INF_FSIZE +ida_ida.INF_GROUPS +ida_ida.INF_H_PATH +ida_ida.INF_IDA_VERSION +ida_ida.INF_IDSNODE +ida_ida.INF_IMAGEBASE +ida_ida.INF_INCLUDE +ida_ida.INF_INITIAL_VERSION +ida_ida.INF_MD5 +ida_ida.INF_NOPENS +ida_ida.INF_NOTEPAD +ida_ida.INF_OUTFILEENC +ida_ida.INF_PROBLEMS +ida_ida.INF_SELECTORS +ida_ida.INF_SHA256 +ida_ida.INF_SRCDBG_PATHS +ida_ida.INF_SRCDBG_UNDESIRED +ida_ida.INF_STR_ENCODINGS +ida_ida.LFLG_64BIT +ida_ida.LFLG_COMPRESS +ida_ida.LFLG_DBG_NOPATH +ida_ida.LFLG_FLAT_OFF32 +ida_ida.LFLG_ILP32 +ida_ida.LFLG_IS_DLL +ida_ida.LFLG_KERNMODE +ida_ida.LFLG_MSF +ida_ida.LFLG_PACK +ida_ida.LFLG_PC_FLAT +ida_ida.LFLG_PC_FPP +ida_ida.LFLG_SNAPSHOT +ida_ida.LFLG_WIDE_HBF +ida_ida.LMT_EMPTY +ida_ida.LMT_THICK +ida_ida.LMT_THIN +ida_ida.LN_AUTO +ida_ida.LN_NORMAL +ida_ida.LN_PUBLIC +ida_ida.LN_WEAK +ida_ida.OFLG_GEN_ASSUME +ida_ida.OFLG_GEN_NULL +ida_ida.OFLG_GEN_ORG +ida_ida.OFLG_GEN_TRYBLKS +ida_ida.OFLG_LZERO +ida_ida.OFLG_PREF_SEG +ida_ida.OFLG_SHOW_AUTO +ida_ida.OFLG_SHOW_PREF +ida_ida.OFLG_SHOW_VOID +ida_ida.PREF_FNCOFF +ida_ida.PREF_PFXTRUNC +ida_ida.PREF_SEGADR +ida_ida.PREF_STACK +ida_ida.SCF_ALLCMT +ida_ida.SCF_LINNUM +ida_ida.SCF_NOCMT +ida_ida.SCF_RPTCMT +ida_ida.SCF_SHHID_FUNC +ida_ida.SCF_SHHID_ITEM +ida_ida.SCF_SHHID_SEGM +ida_ida.SCF_TESTMODE +ida_ida.STRF_AUTO +ida_ida.STRF_COMMENT +ida_ida.STRF_GEN +ida_ida.STRF_SAVECASE +ida_ida.STRF_SERIAL +ida_ida.STRF_UNICODE +ida_ida.STT_CUR +ida_ida.STT_DBG +ida_ida.STT_MM +ida_ida.STT_VA +ida_ida.SW_SEGXRF +ida_ida.SW_XRFFNC +ida_ida.SW_XRFMRK +ida_ida.SW_XRFVAL +ida_ida.UA_MAXOP +ida_ida.VLD_AUTO_REPAIR +ida_ida.VLD_DIALOG +ida_ida.VLD_SILENT +ida_ida.__make_idainfo_accessors +ida_ida.__make_idainfo_bound +ida_ida.__make_idainfo_bound.__func +ida_ida.__make_idainfo_getter +ida_ida.__set_module_dynattrs +ida_ida.__wrap_hooks_callback +ida_ida.__wrap_hooks_callback.__wrapper +ida_ida.calc_default_idaplace_flags +ida_ida.compiler_info_t +ida_ida.compiler_info_t.__init__ +ida_ida.compiler_info_t.cm +ida_ida.compiler_info_t.defalign +ida_ida.compiler_info_t.id +ida_ida.compiler_info_t.size_b +ida_ida.compiler_info_t.size_e +ida_ida.compiler_info_t.size_i +ida_ida.compiler_info_t.size_l +ida_ida.compiler_info_t.size_ldbl +ida_ida.compiler_info_t.size_ll +ida_ida.compiler_info_t.size_s +ida_ida.delinf +ida_ida.f_AIXAR +ida_ida.f_AOUT +ida_ida.f_AR +ida_ida.f_BIN +ida_ida.f_COFF +ida_ida.f_COM +ida_ida.f_COM_old +ida_ida.f_DRV +ida_ida.f_ELF +ida_ida.f_EXE +ida_ida.f_EXE_old +ida_ida.f_HEX +ida_ida.f_LE +ida_ida.f_LOADER +ida_ida.f_LX +ida_ida.f_MACHO +ida_ida.f_MD1IMG +ida_ida.f_MEX +ida_ida.f_NLM +ida_ida.f_OMF +ida_ida.f_OMFLIB +ida_ida.f_PE +ida_ida.f_PRC +ida_ida.f_PSXOBJ +ida_ida.f_SREC +ida_ida.f_W32RUN +ida_ida.f_WIN +ida_ida.f_ZIP +ida_ida.get_dbctx_id +ida_ida.get_dbctx_qty +ida_ida.getinf_str +ida_ida.idainfo +ida_ida.idainfo.__init__ +ida_ida.idainfo._get_lflags +ida_ida.idainfo._set_lflags +ida_ida.idainfo.abibits +ida_ida.idainfo.af +ida_ida.idainfo.af2 +ida_ida.idainfo.appcall_options +ida_ida.idainfo.apptype +ida_ida.idainfo.asmtype +ida_ida.idainfo.baseaddr +ida_ida.idainfo.bin_prefix_size +ida_ida.idainfo.cc +ida_ida.idainfo.cmt_indent +ida_ida.idainfo.database_change_count +ida_ida.idainfo.datatypes +ida_ida.idainfo.demnames +ida_ida.idainfo.filetype +ida_ida.idainfo.get_abiname +ida_ida.idainfo.highoff +ida_ida.idainfo.indent +ida_ida.idainfo.lenxref +ida_ida.idainfo.lflags +ida_ida.idainfo.listnames +ida_ida.idainfo.long_demnames +ida_ida.idainfo.lowoff +ida_ida.idainfo.main +ida_ida.idainfo.margin +ida_ida.idainfo.max_autoname_len +ida_ida.idainfo.max_ea +ida_ida.idainfo.maxref +ida_ida.idainfo.min_ea +ida_ida.idainfo.nametype +ida_ida.idainfo.omax_ea +ida_ida.idainfo.omin_ea +ida_ida.idainfo.ostype +ida_ida.idainfo.outflags +ida_ida.idainfo.procname +ida_ida.idainfo.refcmtnum +ida_ida.idainfo.s_cmtflg +ida_ida.idainfo.s_genflags +ida_ida.idainfo.s_limiter +ida_ida.idainfo.s_prefflag +ida_ida.idainfo.s_xrefflag +ida_ida.idainfo.short_demnames +ida_ida.idainfo.specsegs +ida_ida.idainfo.start_cs +ida_ida.idainfo.start_ea +ida_ida.idainfo.start_ip +ida_ida.idainfo.start_sp +ida_ida.idainfo.start_ss +ida_ida.idainfo.strlit_break +ida_ida.idainfo.strlit_flags +ida_ida.idainfo.strlit_pref +ida_ida.idainfo.strlit_sernum +ida_ida.idainfo.strlit_zeroes +ida_ida.idainfo.strtype +ida_ida.idainfo.tag +ida_ida.idainfo.type_xrefnum +ida_ida.idainfo.version +ida_ida.idainfo.xrefnum +ida_ida.idainfo_is_32bit +ida_ida.idbattr_info_t +ida_ida.idbattr_info_t.__init__ +ida_ida.idbattr_info_t.__lt__ +ida_ida.idbattr_info_t.bitmask +ida_ida.idbattr_info_t.has_individual_node +ida_ida.idbattr_info_t.hashname +ida_ida.idbattr_info_t.individual_node +ida_ida.idbattr_info_t.is_bitfield +ida_ida.idbattr_info_t.is_bitmap +ida_ida.idbattr_info_t.is_boolean +ida_ida.idbattr_info_t.is_buf_var +ida_ida.idbattr_info_t.is_bytearray +ida_ida.idbattr_info_t.is_cstr +ida_ida.idbattr_info_t.is_decimal +ida_ida.idbattr_info_t.is_hash +ida_ida.idbattr_info_t.is_hexadecimal +ida_ida.idbattr_info_t.is_incremented +ida_ida.idbattr_info_t.is_node_altval +ida_ida.idbattr_info_t.is_node_blob +ida_ida.idbattr_info_t.is_node_supval +ida_ida.idbattr_info_t.is_node_valobj +ida_ida.idbattr_info_t.is_node_var +ida_ida.idbattr_info_t.is_onoff +ida_ida.idbattr_info_t.is_qstring +ida_ida.idbattr_info_t.is_readonly_var +ida_ida.idbattr_info_t.is_scalar_var +ida_ida.idbattr_info_t.is_struc_field +ida_ida.idbattr_info_t.is_val_mapped +ida_ida.idbattr_info_t.maxsize +ida_ida.idbattr_info_t.name +ida_ida.idbattr_info_t.offset +ida_ida.idbattr_info_t.ridx +ida_ida.idbattr_info_t.str_false +ida_ida.idbattr_info_t.str_true +ida_ida.idbattr_info_t.tag +ida_ida.idbattr_info_t.use_hlpstruc +ida_ida.idbattr_info_t.vmap +ida_ida.idbattr_info_t.width +ida_ida.idbattr_valmap_t +ida_ida.idbattr_valmap_t.__init__ +ida_ida.inf_abi_set_by_user +ida_ida.inf_allow_non_matched_ops +ida_ida.inf_allow_sigmulti +ida_ida.inf_append_sigcmt +ida_ida.inf_big_arg_align +ida_ida.inf_check_manual_ops +ida_ida.inf_check_unicode_strlits +ida_ida.inf_coagulate_code +ida_ida.inf_coagulate_data +ida_ida.inf_compress_idb +ida_ida.inf_create_all_xrefs +ida_ida.inf_create_func_from_call +ida_ida.inf_create_func_from_ptr +ida_ida.inf_create_func_tails +ida_ida.inf_create_jump_tables +ida_ida.inf_create_off_on_dref +ida_ida.inf_create_off_using_fixup +ida_ida.inf_create_strlit_on_xref +ida_ida.inf_data_offset +ida_ida.inf_dbg_no_store_path +ida_ida.inf_decode_fpp +ida_ida.inf_del_no_xref_insns +ida_ida.inf_final_pass +ida_ida.inf_full_sp_ana +ida_ida.inf_gen_assume +ida_ida.inf_gen_lzero +ida_ida.inf_gen_null +ida_ida.inf_gen_org +ida_ida.inf_gen_tryblks +ida_ida.inf_get_abibits +ida_ida.inf_get_af +ida_ida.inf_get_af2 +ida_ida.inf_get_af2_low +ida_ida.inf_get_af_high +ida_ida.inf_get_af_low +ida_ida.inf_get_app_bitness +ida_ida.inf_get_appcall_options +ida_ida.inf_get_apptype +ida_ida.inf_get_asmtype +ida_ida.inf_get_baseaddr +ida_ida.inf_get_bin_prefix_size +ida_ida.inf_get_cc +ida_ida.inf_get_cc_cm +ida_ida.inf_get_cc_defalign +ida_ida.inf_get_cc_id +ida_ida.inf_get_cc_size_b +ida_ida.inf_get_cc_size_e +ida_ida.inf_get_cc_size_i +ida_ida.inf_get_cc_size_l +ida_ida.inf_get_cc_size_ldbl +ida_ida.inf_get_cc_size_ll +ida_ida.inf_get_cc_size_s +ida_ida.inf_get_cmt_indent +ida_ida.inf_get_cmtflg +ida_ida.inf_get_database_change_count +ida_ida.inf_get_datatypes +ida_ida.inf_get_demname_form +ida_ida.inf_get_demnames +ida_ida.inf_get_filetype +ida_ida.inf_get_genflags +ida_ida.inf_get_highoff +ida_ida.inf_get_indent +ida_ida.inf_get_lenxref +ida_ida.inf_get_lflags +ida_ida.inf_get_limiter +ida_ida.inf_get_listnames +ida_ida.inf_get_long_demnames +ida_ida.inf_get_lowoff +ida_ida.inf_get_main +ida_ida.inf_get_margin +ida_ida.inf_get_max_autoname_len +ida_ida.inf_get_max_ea +ida_ida.inf_get_maxref +ida_ida.inf_get_min_ea +ida_ida.inf_get_nametype +ida_ida.inf_get_netdelta +ida_ida.inf_get_omax_ea +ida_ida.inf_get_omin_ea +ida_ida.inf_get_ostype +ida_ida.inf_get_outflags +ida_ida.inf_get_pack_mode +ida_ida.inf_get_prefflag +ida_ida.inf_get_privrange +ida_ida.inf_get_privrange_end_ea +ida_ida.inf_get_privrange_start_ea +ida_ida.inf_get_procname +ida_ida.inf_get_refcmtnum +ida_ida.inf_get_short_demnames +ida_ida.inf_get_specsegs +ida_ida.inf_get_start_cs +ida_ida.inf_get_start_ea +ida_ida.inf_get_start_ip +ida_ida.inf_get_start_sp +ida_ida.inf_get_start_ss +ida_ida.inf_get_strlit_break +ida_ida.inf_get_strlit_flags +ida_ida.inf_get_strlit_pref +ida_ida.inf_get_strlit_sernum +ida_ida.inf_get_strlit_zeroes +ida_ida.inf_get_strtype +ida_ida.inf_get_type_xrefnum +ida_ida.inf_get_version +ida_ida.inf_get_xrefflag +ida_ida.inf_get_xrefnum +ida_ida.inf_guess_func_type +ida_ida.inf_handle_eh +ida_ida.inf_handle_rtti +ida_ida.inf_hide_comments +ida_ida.inf_hide_libfuncs +ida_ida.inf_huge_arg_align +ida_ida.inf_inc_database_change_count +ida_ida.inf_is_16bit +ida_ida.inf_is_32bit_exactly +ida_ida.inf_is_32bit_or_higher +ida_ida.inf_is_64bit +ida_ida.inf_is_auto_enabled +ida_ida.inf_is_be +ida_ida.inf_is_dll +ida_ida.inf_is_flat_off32 +ida_ida.inf_is_graph_view +ida_ida.inf_is_hard_float +ida_ida.inf_is_ilp32 +ida_ida.inf_is_kernel_mode +ida_ida.inf_is_limiter_empty +ida_ida.inf_is_limiter_thick +ida_ida.inf_is_limiter_thin +ida_ida.inf_is_mem_aligned4 +ida_ida.inf_is_snapshot +ida_ida.inf_is_wide_high_byte_first +ida_ida.inf_like_binary +ida_ida.inf_line_pref_with_seg +ida_ida.inf_loading_idc +ida_ida.inf_macros_enabled +ida_ida.inf_map_stkargs +ida_ida.inf_mark_code +ida_ida.inf_merge_strlits +ida_ida.inf_no_store_user_info +ida_ida.inf_noflow_to_data +ida_ida.inf_noret_ana +ida_ida.inf_op_offset +ida_ida.inf_pack_idb +ida_ida.inf_pack_stkargs +ida_ida.inf_postinc_strlit_sernum +ida_ida.inf_prefix_show_funcoff +ida_ida.inf_prefix_show_segaddr +ida_ida.inf_prefix_show_stack +ida_ida.inf_prefix_truncate_opcode_bytes +ida_ida.inf_propagate_regargs +ida_ida.inf_propagate_stkargs +ida_ida.inf_readonly_idb +ida_ida.inf_rename_jumpfunc +ida_ida.inf_rename_nullsub +ida_ida.inf_set_32bit +ida_ida.inf_set_64bit +ida_ida.inf_set_abi_set_by_user +ida_ida.inf_set_abibits +ida_ida.inf_set_af +ida_ida.inf_set_af2 +ida_ida.inf_set_af2_low +ida_ida.inf_set_af_high +ida_ida.inf_set_af_low +ida_ida.inf_set_allow_non_matched_ops +ida_ida.inf_set_allow_sigmulti +ida_ida.inf_set_app_bitness +ida_ida.inf_set_appcall_options +ida_ida.inf_set_append_sigcmt +ida_ida.inf_set_apptype +ida_ida.inf_set_asmtype +ida_ida.inf_set_auto_enabled +ida_ida.inf_set_baseaddr +ida_ida.inf_set_be +ida_ida.inf_set_big_arg_align +ida_ida.inf_set_bin_prefix_size +ida_ida.inf_set_cc +ida_ida.inf_set_cc_cm +ida_ida.inf_set_cc_defalign +ida_ida.inf_set_cc_id +ida_ida.inf_set_cc_size_b +ida_ida.inf_set_cc_size_e +ida_ida.inf_set_cc_size_i +ida_ida.inf_set_cc_size_l +ida_ida.inf_set_cc_size_ldbl +ida_ida.inf_set_cc_size_ll +ida_ida.inf_set_cc_size_s +ida_ida.inf_set_check_manual_ops +ida_ida.inf_set_check_unicode_strlits +ida_ida.inf_set_cmt_indent +ida_ida.inf_set_cmtflg +ida_ida.inf_set_coagulate_code +ida_ida.inf_set_coagulate_data +ida_ida.inf_set_compress_idb +ida_ida.inf_set_create_all_xrefs +ida_ida.inf_set_create_func_from_call +ida_ida.inf_set_create_func_from_ptr +ida_ida.inf_set_create_func_tails +ida_ida.inf_set_create_jump_tables +ida_ida.inf_set_create_off_on_dref +ida_ida.inf_set_create_off_using_fixup +ida_ida.inf_set_create_strlit_on_xref +ida_ida.inf_set_data_offset +ida_ida.inf_set_database_change_count +ida_ida.inf_set_datatypes +ida_ida.inf_set_dbg_no_store_path +ida_ida.inf_set_decode_fpp +ida_ida.inf_set_del_no_xref_insns +ida_ida.inf_set_demnames +ida_ida.inf_set_dll +ida_ida.inf_set_filetype +ida_ida.inf_set_final_pass +ida_ida.inf_set_flat_off32 +ida_ida.inf_set_full_sp_ana +ida_ida.inf_set_gen_assume +ida_ida.inf_set_gen_lzero +ida_ida.inf_set_gen_null +ida_ida.inf_set_gen_org +ida_ida.inf_set_gen_tryblks +ida_ida.inf_set_genflags +ida_ida.inf_set_graph_view +ida_ida.inf_set_guess_func_type +ida_ida.inf_set_handle_eh +ida_ida.inf_set_handle_rtti +ida_ida.inf_set_hard_float +ida_ida.inf_set_hide_comments +ida_ida.inf_set_hide_libfuncs +ida_ida.inf_set_highoff +ida_ida.inf_set_huge_arg_align +ida_ida.inf_set_ilp32 +ida_ida.inf_set_indent +ida_ida.inf_set_kernel_mode +ida_ida.inf_set_lenxref +ida_ida.inf_set_lflags +ida_ida.inf_set_limiter +ida_ida.inf_set_limiter_empty +ida_ida.inf_set_limiter_thick +ida_ida.inf_set_limiter_thin +ida_ida.inf_set_line_pref_with_seg +ida_ida.inf_set_listnames +ida_ida.inf_set_loading_idc +ida_ida.inf_set_long_demnames +ida_ida.inf_set_lowoff +ida_ida.inf_set_macros_enabled +ida_ida.inf_set_main +ida_ida.inf_set_map_stkargs +ida_ida.inf_set_margin +ida_ida.inf_set_mark_code +ida_ida.inf_set_max_autoname_len +ida_ida.inf_set_max_ea +ida_ida.inf_set_maxref +ida_ida.inf_set_mem_aligned4 +ida_ida.inf_set_merge_strlits +ida_ida.inf_set_min_ea +ida_ida.inf_set_nametype +ida_ida.inf_set_netdelta +ida_ida.inf_set_no_store_user_info +ida_ida.inf_set_noflow_to_data +ida_ida.inf_set_noret_ana +ida_ida.inf_set_omax_ea +ida_ida.inf_set_omin_ea +ida_ida.inf_set_op_offset +ida_ida.inf_set_ostype +ida_ida.inf_set_outflags +ida_ida.inf_set_pack_idb +ida_ida.inf_set_pack_mode +ida_ida.inf_set_pack_stkargs +ida_ida.inf_set_prefflag +ida_ida.inf_set_prefix_show_funcoff +ida_ida.inf_set_prefix_show_segaddr +ida_ida.inf_set_prefix_show_stack +ida_ida.inf_set_prefix_truncate_opcode_bytes +ida_ida.inf_set_privrange +ida_ida.inf_set_privrange_end_ea +ida_ida.inf_set_privrange_start_ea +ida_ida.inf_set_procname +ida_ida.inf_set_propagate_regargs +ida_ida.inf_set_propagate_stkargs +ida_ida.inf_set_readonly_idb +ida_ida.inf_set_refcmtnum +ida_ida.inf_set_rename_jumpfunc +ida_ida.inf_set_rename_nullsub +ida_ida.inf_set_short_demnames +ida_ida.inf_set_should_create_stkvars +ida_ida.inf_set_should_trace_sp +ida_ida.inf_set_show_all_comments +ida_ida.inf_set_show_auto +ida_ida.inf_set_show_hidden_funcs +ida_ida.inf_set_show_hidden_insns +ida_ida.inf_set_show_hidden_segms +ida_ida.inf_set_show_line_pref +ida_ida.inf_set_show_repeatables +ida_ida.inf_set_show_src_linnum +ida_ida.inf_set_show_void +ida_ida.inf_set_show_xref_fncoff +ida_ida.inf_set_show_xref_seg +ida_ida.inf_set_show_xref_tmarks +ida_ida.inf_set_show_xref_val +ida_ida.inf_set_snapshot +ida_ida.inf_set_specsegs +ida_ida.inf_set_stack_ldbl +ida_ida.inf_set_stack_varargs +ida_ida.inf_set_start_cs +ida_ida.inf_set_start_ea +ida_ida.inf_set_start_ip +ida_ida.inf_set_start_sp +ida_ida.inf_set_start_ss +ida_ida.inf_set_strlit_autocmt +ida_ida.inf_set_strlit_break +ida_ida.inf_set_strlit_flags +ida_ida.inf_set_strlit_name_bit +ida_ida.inf_set_strlit_names +ida_ida.inf_set_strlit_pref +ida_ida.inf_set_strlit_savecase +ida_ida.inf_set_strlit_serial_names +ida_ida.inf_set_strlit_sernum +ida_ida.inf_set_strlit_zeroes +ida_ida.inf_set_strtype +ida_ida.inf_set_trace_flow +ida_ida.inf_set_truncate_on_del +ida_ida.inf_set_type_xrefnum +ida_ida.inf_set_unicode_strlits +ida_ida.inf_set_use_allasm +ida_ida.inf_set_use_flirt +ida_ida.inf_set_use_gcc_layout +ida_ida.inf_set_version +ida_ida.inf_set_wide_high_byte_first +ida_ida.inf_set_xrefflag +ida_ida.inf_set_xrefnum +ida_ida.inf_should_create_stkvars +ida_ida.inf_should_trace_sp +ida_ida.inf_show_all_comments +ida_ida.inf_show_auto +ida_ida.inf_show_hidden_funcs +ida_ida.inf_show_hidden_insns +ida_ida.inf_show_hidden_segms +ida_ida.inf_show_line_pref +ida_ida.inf_show_repeatables +ida_ida.inf_show_src_linnum +ida_ida.inf_show_void +ida_ida.inf_show_xref_fncoff +ida_ida.inf_show_xref_seg +ida_ida.inf_show_xref_tmarks +ida_ida.inf_show_xref_val +ida_ida.inf_stack_ldbl +ida_ida.inf_stack_varargs +ida_ida.inf_strlit_autocmt +ida_ida.inf_strlit_name_bit +ida_ida.inf_strlit_names +ida_ida.inf_strlit_savecase +ida_ida.inf_strlit_serial_names +ida_ida.inf_test_mode +ida_ida.inf_trace_flow +ida_ida.inf_truncate_on_del +ida_ida.inf_unicode_strlits +ida_ida.inf_use_allasm +ida_ida.inf_use_flirt +ida_ida.inf_use_gcc_layout +ida_ida.is_database_busy +ida_ida.is_filetype_like_binary +ida_ida.move_privrange +ida_ida.switch_dbctx +ida_ida.to_ea +ida_ida.validate_idb +ida_idaapi +ida_idaapi.IDAPython_ExecScript +ida_idaapi.IDAPython_ExecSystem +ida_idaapi.IDAPython_FormatExc +ida_idaapi.IDAPython_GetDocstrings +ida_idaapi.IDAPython_GetDocstrings._dedent +ida_idaapi.IDAPython_GetDocstrings._nodes +ida_idaapi.IDAPython_GetDocstrings._nodes_iter +ida_idaapi.IDAPython_GetDocstrings._pairwise_longest +ida_idaapi.IDAPython_GetDocstrings._walk_tree +ida_idaapi.IDAPython_LoadProcMod +ida_idaapi.IDAPython_UnLoadProcMod +ida_idaapi.IDAPython_displayhook +ida_idaapi.IDAPython_displayhook.__init__ +ida_idaapi.IDAPython_displayhook._print_hex +ida_idaapi.IDAPython_displayhook.displayhook +ida_idaapi.IDAPython_displayhook.displayhook_format +ida_idaapi.IDAPython_displayhook.format_item +ida_idaapi.IDAPython_displayhook.format_seq +ida_idaapi.NW_CLOSEIDB +ida_idaapi.NW_INITIDA +ida_idaapi.NW_OPENIDB +ida_idaapi.NW_REMOVE +ida_idaapi.NW_TERMIDA +ida_idaapi.PY_ICID_BYREF +ida_idaapi.PY_ICID_INT64 +ida_idaapi.PY_ICID_OPAQUE +ida_idaapi.PyIdc_cvt_int64__ +ida_idaapi.PyIdc_cvt_int64__.__add__ +ida_idaapi.PyIdc_cvt_int64__.__div__ +ida_idaapi.PyIdc_cvt_int64__.__init__ +ida_idaapi.PyIdc_cvt_int64__.__mul__ +ida_idaapi.PyIdc_cvt_int64__.__op +ida_idaapi.PyIdc_cvt_int64__.__radd__ +ida_idaapi.PyIdc_cvt_int64__.__rdiv__ +ida_idaapi.PyIdc_cvt_int64__.__rmul__ +ida_idaapi.PyIdc_cvt_int64__.__rsub__ +ida_idaapi.PyIdc_cvt_int64__.__sub__ +ida_idaapi.PyIdc_cvt_refclass__ +ida_idaapi.PyIdc_cvt_refclass__.__init__ +ida_idaapi.PyIdc_cvt_refclass__.cstr +ida_idaapi.ST_OVER_DEBUG_SEG +ida_idaapi.ST_OVER_LIB_FUNC +ida_idaapi.TRUNC +ida_idaapi.__IDAPython_Completion_Util +ida_idaapi.__IDAPython_Completion_Util.__call__ +ida_idaapi.__IDAPython_Completion_Util.__init__ +ida_idaapi.__IDAPython_Completion_Util.__parse_arg +ida_idaapi.__IDAPython_Completion_Util.__proto_from_argspec +ida_idaapi.__IDAPython_Completion_Util.__proto_from_argspec.__repr_type +ida_idaapi.__IDAPython_Completion_Util.__proto_from_docstring +ida_idaapi.__IDAPython_Completion_Util.__render_args +ida_idaapi.__IDAPython_Completion_Util.__render_constant +ida_idaapi.__IDAPython_Completion_Util.__render_default +ida_idaapi.__IDAPython_Completion_Util.__render_docstr +ida_idaapi.__IDAPython_Completion_Util.__render_int_member +ida_idaapi.__IDAPython_Completion_Util.__render_proto +ida_idaapi.__IDAPython_Completion_Util.__render_rets +ida_idaapi.__IDAPython_Completion_Util.__resolve_type +ida_idaapi.__IDAPython_Completion_Util.build_hints +ida_idaapi.__IDAPython_Completion_Util.debug +ida_idaapi.__IDAPython_Completion_Util.dir_namespace +ida_idaapi.__IDAPython_Completion_Util.get_candidates +ida_idaapi.__IDAPython_Completion_Util.maybe_extend_syntactically +ida_idaapi.__install_excepthook +ida_idaapi._bounded_getitem_iterator +ida_idaapi._listify_types +ida_idaapi._make_missed_695bwcompat_property +ida_idaapi._make_missed_695bwcompat_property._getter +ida_idaapi._make_missed_695bwcompat_property._setter +ida_idaapi._make_one_time_warning_message +ida_idaapi._make_one_time_warning_message.f +ida_idaapi._qvector_back +ida_idaapi._qvector_front +ida_idaapi._replace_module_function +ida_idaapi.as_UTF16 +ida_idaapi.as_cstr +ida_idaapi.as_int32 +ida_idaapi.as_signed +ida_idaapi.as_uint32 +ida_idaapi.copy_bits +ida_idaapi.disable_script_timeout +ida_idaapi.enable_extlang_python +ida_idaapi.enable_python_cli +ida_idaapi.format_basestring +ida_idaapi.loader_input_t +ida_idaapi.loader_input_t.__init__ +ida_idaapi.loader_input_t.close +ida_idaapi.loader_input_t.file2base +ida_idaapi.loader_input_t.filename +ida_idaapi.loader_input_t.from_capsule +ida_idaapi.loader_input_t.from_fp +ida_idaapi.loader_input_t.from_linput +ida_idaapi.loader_input_t.get_byte +ida_idaapi.loader_input_t.get_linput +ida_idaapi.loader_input_t.gets +ida_idaapi.loader_input_t.getz +ida_idaapi.loader_input_t.open +ida_idaapi.loader_input_t.open_memory +ida_idaapi.loader_input_t.opened +ida_idaapi.loader_input_t.read +ida_idaapi.loader_input_t.readbytes +ida_idaapi.loader_input_t.seek +ida_idaapi.loader_input_t.set_linput +ida_idaapi.loader_input_t.size +ida_idaapi.loader_input_t.tell +ida_idaapi.notify_when +ida_idaapi.object_t +ida_idaapi.object_t.__getitem__ +ida_idaapi.object_t.__init__ +ida_idaapi.parse_command_line3 +ida_idaapi.plugin_t +ida_idaapi.plugin_t.run +ida_idaapi.plugin_t.term +ida_idaapi.plugmod_t +ida_idaapi.py_clinked_object_t +ida_idaapi.py_clinked_object_t.__del__ +ida_idaapi.py_clinked_object_t.__init__ +ida_idaapi.py_clinked_object_t._create_clink +ida_idaapi.py_clinked_object_t._del_clink +ida_idaapi.py_clinked_object_t._free +ida_idaapi.py_clinked_object_t._get_clink_ptr +ida_idaapi.py_clinked_object_t.assign +ida_idaapi.py_clinked_object_t.clink +ida_idaapi.py_clinked_object_t.clink_ptr +ida_idaapi.py_clinked_object_t.copy +ida_idaapi.pycim_get_widget +ida_idaapi.pycim_view_close +ida_idaapi.pygc_create_groups +ida_idaapi.pygc_delete_groups +ida_idaapi.pygc_refresh +ida_idaapi.pygc_set_groups_visibility +ida_idaapi.pyidc_cvt_helper__ +ida_idaapi.pyidc_cvt_helper__.__get_value +ida_idaapi.pyidc_cvt_helper__.__init__ +ida_idaapi.pyidc_cvt_helper__.__set_value +ida_idaapi.pyidc_opaque_object_t +ida_idaapi.replfun +ida_idaapi.require +ida_idaapi.set_script_timeout +ida_idaapi.struct_unpack +ida_idc +ida_idc.get_mark_comment +ida_idc.get_marked_pos +ida_idc.mark_position +ida_idd +ida_idd.APPCALL_DEBEV +ida_idd.APPCALL_MANUAL +ida_idd.APPCALL_TIMEOUT +ida_idd.Appcall__ +ida_idd.Appcall__.APPCALL_DEBEV +ida_idd.Appcall__.APPCALL_MANUAL +ida_idd.Appcall__.APPCALL_TIMEOUT +ida_idd.Appcall__.Consts +ida_idd.Appcall__.UTF16 +ida_idd.Appcall__.__get_consts +ida_idd.Appcall__.__getattr__ +ida_idd.Appcall__.__getitem__ +ida_idd.Appcall__.__init__ +ida_idd.Appcall__.__name_or_ea +ida_idd.Appcall__.__typedecl_or_tinfo +ida_idd.Appcall__.array +ida_idd.Appcall__.buffer +ida_idd.Appcall__.byref +ida_idd.Appcall__.cleanup_appcall +ida_idd.Appcall__.cstr +ida_idd.Appcall__.get_appcall_options +ida_idd.Appcall__.int64 +ida_idd.Appcall__.obj +ida_idd.Appcall__.proto +ida_idd.Appcall__.set_appcall_options +ida_idd.Appcall__.typedobj +ida_idd.Appcall__.valueof +ida_idd.Appcall_array__ +ida_idd.Appcall_array__.__init__ +ida_idd.Appcall_array__.pack +ida_idd.Appcall_array__.try_to_convert_to_list +ida_idd.Appcall_array__.unpack +ida_idd.Appcall_callable__ +ida_idd.Appcall_callable__.__call__ +ida_idd.Appcall_callable__.__get_ea +ida_idd.Appcall_callable__.__get_fields +ida_idd.Appcall_callable__.__get_options +ida_idd.Appcall_callable__.__get_size +ida_idd.Appcall_callable__.__get_tif +ida_idd.Appcall_callable__.__get_timeout +ida_idd.Appcall_callable__.__get_type +ida_idd.Appcall_callable__.__init__ +ida_idd.Appcall_callable__.__set_ea +ida_idd.Appcall_callable__.__set_options +ida_idd.Appcall_callable__.__set_timeout +ida_idd.Appcall_callable__.ea +ida_idd.Appcall_callable__.fields +ida_idd.Appcall_callable__.options +ida_idd.Appcall_callable__.retrieve +ida_idd.Appcall_callable__.size +ida_idd.Appcall_callable__.store +ida_idd.Appcall_callable__.tif +ida_idd.Appcall_callable__.timeout +ida_idd.Appcall_callable__.type +ida_idd.Appcall_consts__ +ida_idd.Appcall_consts__.__getattr__ +ida_idd.Appcall_consts__.__init__ +ida_idd.BBLK_TRACE +ida_idd.BITNESS_CHANGED +ida_idd.BPT_BAD_ADDR +ida_idd.BPT_BAD_ALIGN +ida_idd.BPT_BAD_LEN +ida_idd.BPT_BAD_TYPE +ida_idd.BPT_DEFAULT +ida_idd.BPT_EXEC +ida_idd.BPT_INTERNAL_ERR +ida_idd.BPT_OK +ida_idd.BPT_PAGE_OK +ida_idd.BPT_RDWR +ida_idd.BPT_READ +ida_idd.BPT_READ_ERROR +ida_idd.BPT_SKIP +ida_idd.BPT_SOFT +ida_idd.BPT_TOO_MANY +ida_idd.BPT_WRITE +ida_idd.BPT_WRITE_ERROR +ida_idd.BREAKPOINT +ida_idd.DBG_FLAG_ADD_ENVS +ida_idd.DBG_FLAG_ANYSIZE_HWBPT +ida_idd.DBG_FLAG_CAN_CONT_BPT +ida_idd.DBG_FLAG_CLEAN_EXIT +ida_idd.DBG_FLAG_CONNSTRING +ida_idd.DBG_FLAG_DEBTHREAD +ida_idd.DBG_FLAG_DEBUG_DLL +ida_idd.DBG_FLAG_DISABLE_ASLR +ida_idd.DBG_FLAG_DONT_DISTURB +ida_idd.DBG_FLAG_EXITSHOTOK +ida_idd.DBG_FLAG_FAKE_ATTACH +ida_idd.DBG_FLAG_FAKE_MEMORY +ida_idd.DBG_FLAG_FAST_STEP +ida_idd.DBG_FLAG_FULL_INSTR_BPT +ida_idd.DBG_FLAG_HWDATBPT_ONE +ida_idd.DBG_FLAG_LAZY_WATCHPTS +ida_idd.DBG_FLAG_LOWCNDS +ida_idd.DBG_FLAG_MANMEMINFO +ida_idd.DBG_FLAG_MERGE_ENVS +ida_idd.DBG_FLAG_NEEDPORT +ida_idd.DBG_FLAG_NOHOST +ida_idd.DBG_FLAG_NOPARAMETERS +ida_idd.DBG_FLAG_NOPASSWORD +ida_idd.DBG_FLAG_NOSTARTDIR +ida_idd.DBG_FLAG_PREFER_SWBPTS +ida_idd.DBG_FLAG_REMOTE +ida_idd.DBG_FLAG_SAFE +ida_idd.DBG_FLAG_SMALLBLKS +ida_idd.DBG_FLAG_TRACER_MODULE +ida_idd.DBG_FLAG_TTD +ida_idd.DBG_FLAG_USE_SREGS +ida_idd.DBG_FLAG_VIRTHREADS +ida_idd.DBG_HAS_APPCALL +ida_idd.DBG_HAS_ATTACH_PROCESS +ida_idd.DBG_HAS_CHECK_BPT +ida_idd.DBG_HAS_DETACH_PROCESS +ida_idd.DBG_HAS_GET_PROCESSES +ida_idd.DBG_HAS_MAP_ADDRESS +ida_idd.DBG_HAS_OPEN_FILE +ida_idd.DBG_HAS_REQUEST_PAUSE +ida_idd.DBG_HAS_REXEC +ida_idd.DBG_HAS_SET_EXCEPTION_INFO +ida_idd.DBG_HAS_SET_RESUME_MODE +ida_idd.DBG_HAS_THREAD_CONTINUE +ida_idd.DBG_HAS_THREAD_GET_SREG_BASE +ida_idd.DBG_HAS_THREAD_SUSPEND +ida_idd.DBG_HAS_UPDATE_CALL_STACK +ida_idd.DBG_HIDE_WINDOW +ida_idd.DBG_NO_ASLR +ida_idd.DBG_NO_TRACE +ida_idd.DBG_PROC_32BIT +ida_idd.DBG_PROC_64BIT +ida_idd.DBG_PROC_IS_DLL +ida_idd.DBG_PROC_IS_GUI +ida_idd.DBG_RESMOD_STEP_BACKINTO +ida_idd.DBG_RESMOD_STEP_HANDLE +ida_idd.DBG_RESMOD_STEP_INTO +ida_idd.DBG_RESMOD_STEP_OUT +ida_idd.DBG_RESMOD_STEP_OVER +ida_idd.DBG_RESMOD_STEP_SRCINTO +ida_idd.DBG_RESMOD_STEP_SRCOUT +ida_idd.DBG_RESMOD_STEP_SRCOVER +ida_idd.DBG_RESMOD_STEP_USER +ida_idd.DBG_SUSPENDED +ida_idd.DEBUGGER_ID_6811_EMULATOR +ida_idd.DEBUGGER_ID_ARM_IPHONE_USER +ida_idd.DEBUGGER_ID_ARM_LINUX_USER +ida_idd.DEBUGGER_ID_ARM_MACOS_USER +ida_idd.DEBUGGER_ID_DALVIK_USER +ida_idd.DEBUGGER_ID_GDB_USER +ida_idd.DEBUGGER_ID_TRACE_REPLAYER +ida_idd.DEBUGGER_ID_WINDBG +ida_idd.DEBUGGER_ID_X86_DOSBOX_EMULATOR +ida_idd.DEBUGGER_ID_X86_IA32_BOCHS +ida_idd.DEBUGGER_ID_X86_IA32_LINUX_USER +ida_idd.DEBUGGER_ID_X86_IA32_MACOSX_USER +ida_idd.DEBUGGER_ID_X86_IA32_WIN32_USER +ida_idd.DEBUGGER_ID_X86_PIN_TRACER +ida_idd.DEBUGGER_ID_XNU_USER +ida_idd.DRC_CRC +ida_idd.DRC_ERROR +ida_idd.DRC_EVENTS +ida_idd.DRC_FAILED +ida_idd.DRC_IDBSEG +ida_idd.DRC_NETERR +ida_idd.DRC_NOCHG +ida_idd.DRC_NOFILE +ida_idd.DRC_NONE +ida_idd.DRC_NOPROC +ida_idd.DRC_OK +ida_idd.EXCEPTION +ida_idd.EXC_BREAK +ida_idd.EXC_HANDLE +ida_idd.EXC_MSG +ida_idd.EXC_SILENT +ida_idd.FUNC_TRACE +ida_idd.IDD_INTERFACE_VERSION +ida_idd.INFORMATION +ida_idd.INSN_TRACE +ida_idd.LIB_LOADED +ida_idd.LIB_UNLOADED +ida_idd.NO_EVENT +ida_idd.NO_PROCESS +ida_idd.NO_THREAD +ida_idd.NO_THREAD +ida_idd.PROCESS_ATTACHED +ida_idd.PROCESS_DETACHED +ida_idd.PROCESS_EXITED +ida_idd.PROCESS_STARTED +ida_idd.PROCESS_SUSPENDED +ida_idd.REGISTER_ADDRESS +ida_idd.REGISTER_CS +ida_idd.REGISTER_CUSTFMT +ida_idd.REGISTER_FP +ida_idd.REGISTER_IP +ida_idd.REGISTER_NOLF +ida_idd.REGISTER_READONLY +ida_idd.REGISTER_SP +ida_idd.REGISTER_SS +ida_idd.RESMOD_BACKINTO +ida_idd.RESMOD_HANDLE +ida_idd.RESMOD_INTO +ida_idd.RESMOD_NONE +ida_idd.RESMOD_OUT +ida_idd.RESMOD_OVER +ida_idd.RESMOD_SRCINTO +ida_idd.RESMOD_SRCOUT +ida_idd.RESMOD_SRCOVER +ida_idd.RESMOD_USER +ida_idd.RQ_IDAIDLE +ida_idd.RQ_IGNWERR +ida_idd.RQ_MASKING +ida_idd.RQ_NOSUSP +ida_idd.RQ_PROCEXIT +ida_idd.RQ_RESMOD +ida_idd.RQ_RESUME +ida_idd.RQ_SILENT +ida_idd.RQ_SUSPEND +ida_idd.RQ_SUSPRUN +ida_idd.RQ_SWSCREEN +ida_idd.RQ_VERBOSE +ida_idd.RQ__NOTHRRF +ida_idd.RVT_FLOAT +ida_idd.RVT_INT +ida_idd.RVT_UNAVAILABLE +ida_idd.STATUS_MASK +ida_idd.STEP +ida_idd.STEP_TRACE +ida_idd.THREAD_EXITED +ida_idd.THREAD_STARTED +ida_idd.TRACE_FULL +ida_idd.appcall +ida_idd.bptaddr_t +ida_idd.bptaddr_t.__init__ +ida_idd.bptaddr_t.hea +ida_idd.bptaddr_t.kea +ida_idd.call_stack_info_t +ida_idd.call_stack_info_t.__eq__ +ida_idd.call_stack_info_t.__init__ +ida_idd.call_stack_info_t.__ne__ +ida_idd.call_stack_info_t.callea +ida_idd.call_stack_info_t.fp +ida_idd.call_stack_info_t.funcea +ida_idd.call_stack_info_t.funcok +ida_idd.call_stack_info_vec_t +ida_idd.call_stack_info_vec_t.__eq__ +ida_idd.call_stack_info_vec_t.__getitem__ +ida_idd.call_stack_info_vec_t.__init__ +ida_idd.call_stack_info_vec_t.__len__ +ida_idd.call_stack_info_vec_t.__ne__ +ida_idd.call_stack_info_vec_t.__setitem__ +ida_idd.call_stack_info_vec_t._del +ida_idd.call_stack_info_vec_t.add_unique +ida_idd.call_stack_info_vec_t.append +ida_idd.call_stack_info_vec_t.at +ida_idd.call_stack_info_vec_t.begin +ida_idd.call_stack_info_vec_t.capacity +ida_idd.call_stack_info_vec_t.clear +ida_idd.call_stack_info_vec_t.empty +ida_idd.call_stack_info_vec_t.end +ida_idd.call_stack_info_vec_t.erase +ida_idd.call_stack_info_vec_t.extend +ida_idd.call_stack_info_vec_t.extract +ida_idd.call_stack_info_vec_t.find +ida_idd.call_stack_info_vec_t.grow +ida_idd.call_stack_info_vec_t.has +ida_idd.call_stack_info_vec_t.inject +ida_idd.call_stack_info_vec_t.insert +ida_idd.call_stack_info_vec_t.pop_back +ida_idd.call_stack_info_vec_t.push_back +ida_idd.call_stack_info_vec_t.qclear +ida_idd.call_stack_info_vec_t.reserve +ida_idd.call_stack_info_vec_t.resize +ida_idd.call_stack_info_vec_t.size +ida_idd.call_stack_info_vec_t.swap +ida_idd.call_stack_info_vec_t.truncate +ida_idd.call_stack_t +ida_idd.call_stack_t.__init__ +ida_idd.can_exc_continue +ida_idd.cleanup_appcall +ida_idd.cpu2ieee +ida_idd.dbg_appcall +ida_idd.dbg_get_memory_info +ida_idd.dbg_get_name +ida_idd.dbg_get_registers +ida_idd.dbg_get_thread_sreg_base +ida_idd.dbg_read_memory +ida_idd.dbg_write_memory +ida_idd.debapp_attrs_t +ida_idd.debapp_attrs_t.__init__ +ida_idd.debapp_attrs_t.addrsize +ida_idd.debapp_attrs_t.cbsize +ida_idd.debapp_attrs_t.platform +ida_idd.debug_event_t +ida_idd.debug_event_t.__init__ +ida_idd.debug_event_t.bpt +ida_idd.debug_event_t.bpt_ea +ida_idd.debug_event_t.clear +ida_idd.debug_event_t.clear_all +ida_idd.debug_event_t.copy +ida_idd.debug_event_t.ea +ida_idd.debug_event_t.eid +ida_idd.debug_event_t.exc +ida_idd.debug_event_t.exit_code +ida_idd.debug_event_t.handled +ida_idd.debug_event_t.info +ida_idd.debug_event_t.is_bitness_changed +ida_idd.debug_event_t.modinfo +ida_idd.debug_event_t.pid +ida_idd.debug_event_t.set_bitness_changed +ida_idd.debug_event_t.set_bpt +ida_idd.debug_event_t.set_eid +ida_idd.debug_event_t.set_exception +ida_idd.debug_event_t.set_exit_code +ida_idd.debug_event_t.set_info +ida_idd.debug_event_t.set_modinfo +ida_idd.debug_event_t.tid +ida_idd.debugger_t +ida_idd.debugger_t.__get_bpt_bytes +ida_idd.debugger_t.__get_nregisters +ida_idd.debugger_t.__get_regclasses +ida_idd.debugger_t.__get_registers +ida_idd.debugger_t.__init__ +ida_idd.debugger_t.attach_process +ida_idd.debugger_t.bin_search +ida_idd.debugger_t.bpt_bytes +ida_idd.debugger_t.bpt_size +ida_idd.debugger_t.cache_block_size +ida_idd.debugger_t.can_continue_from_bpt +ida_idd.debugger_t.can_debug_standalone_dlls +ida_idd.debugger_t.check_bpt +ida_idd.debugger_t.cleanup_appcall +ida_idd.debugger_t.close_file +ida_idd.debugger_t.dbg_enable_trace +ida_idd.debugger_t.default_regclasses +ida_idd.debugger_t.detach_process +ida_idd.debugger_t.ev_appcall +ida_idd.debugger_t.ev_attach_process +ida_idd.debugger_t.ev_bin_search +ida_idd.debugger_t.ev_check_bpt +ida_idd.debugger_t.ev_cleanup_appcall +ida_idd.debugger_t.ev_dbg_enable_trace +ida_idd.debugger_t.ev_detach_process +ida_idd.debugger_t.ev_eval_lowcnd +ida_idd.debugger_t.ev_exit_process +ida_idd.debugger_t.ev_get_debapp_attrs +ida_idd.debugger_t.ev_get_debmod_extensions +ida_idd.debugger_t.ev_get_debug_event +ida_idd.debugger_t.ev_get_dynamic_register_set +ida_idd.debugger_t.ev_get_memory_info +ida_idd.debugger_t.ev_get_processes +ida_idd.debugger_t.ev_get_srcinfo_path +ida_idd.debugger_t.ev_init_debugger +ida_idd.debugger_t.ev_is_tracing_enabled +ida_idd.debugger_t.ev_map_address +ida_idd.debugger_t.ev_read_memory +ida_idd.debugger_t.ev_read_registers +ida_idd.debugger_t.ev_rebase_if_required_to +ida_idd.debugger_t.ev_request_pause +ida_idd.debugger_t.ev_resume +ida_idd.debugger_t.ev_rexec +ida_idd.debugger_t.ev_send_ioctl +ida_idd.debugger_t.ev_set_backwards +ida_idd.debugger_t.ev_set_dbg_options +ida_idd.debugger_t.ev_set_exception_info +ida_idd.debugger_t.ev_set_resume_mode +ida_idd.debugger_t.ev_start_process +ida_idd.debugger_t.ev_suspended +ida_idd.debugger_t.ev_term_debugger +ida_idd.debugger_t.ev_thread_continue +ida_idd.debugger_t.ev_thread_get_sreg_base +ida_idd.debugger_t.ev_thread_suspend +ida_idd.debugger_t.ev_update_bpts +ida_idd.debugger_t.ev_update_call_stack +ida_idd.debugger_t.ev_update_lowcnds +ida_idd.debugger_t.ev_write_memory +ida_idd.debugger_t.ev_write_register +ida_idd.debugger_t.eval_lowcnd +ida_idd.debugger_t.exit_process +ida_idd.debugger_t.fake_memory +ida_idd.debugger_t.filetype +ida_idd.debugger_t.get_debapp_attrs +ida_idd.debugger_t.get_debmod_extensions +ida_idd.debugger_t.get_debug_event +ida_idd.debugger_t.get_dynamic_register_set +ida_idd.debugger_t.get_memory_info +ida_idd.debugger_t.get_processes +ida_idd.debugger_t.get_srcinfo_path +ida_idd.debugger_t.has_appcall +ida_idd.debugger_t.has_attach_process +ida_idd.debugger_t.has_check_bpt +ida_idd.debugger_t.has_detach_process +ida_idd.debugger_t.has_get_processes +ida_idd.debugger_t.has_map_address +ida_idd.debugger_t.has_open_file +ida_idd.debugger_t.has_request_pause +ida_idd.debugger_t.has_rexec +ida_idd.debugger_t.has_set_exception_info +ida_idd.debugger_t.has_set_resume_mode +ida_idd.debugger_t.has_soft_bpt +ida_idd.debugger_t.has_thread_continue +ida_idd.debugger_t.has_thread_get_sreg_base +ida_idd.debugger_t.has_thread_suspend +ida_idd.debugger_t.has_update_call_stack +ida_idd.debugger_t.have_set_options +ida_idd.debugger_t.id +ida_idd.debugger_t.init_debugger +ida_idd.debugger_t.is_remote +ida_idd.debugger_t.is_resmod_avail +ida_idd.debugger_t.is_safe +ida_idd.debugger_t.is_tracing_enabled +ida_idd.debugger_t.is_ttd +ida_idd.debugger_t.map_address +ida_idd.debugger_t.may_disturb +ida_idd.debugger_t.may_take_exit_snapshot +ida_idd.debugger_t.memory_page_size +ida_idd.debugger_t.must_have_hostname +ida_idd.debugger_t.name +ida_idd.debugger_t.nregisters +ida_idd.debugger_t.open_file +ida_idd.debugger_t.processor +ida_idd.debugger_t.read_file +ida_idd.debugger_t.read_memory +ida_idd.debugger_t.read_registers +ida_idd.debugger_t.rebase_if_required_to +ida_idd.debugger_t.regclasses +ida_idd.debugger_t.registers +ida_idd.debugger_t.regs +ida_idd.debugger_t.request_pause +ida_idd.debugger_t.resume +ida_idd.debugger_t.resume_modes +ida_idd.debugger_t.rexec +ida_idd.debugger_t.send_ioctl +ida_idd.debugger_t.set_backwards +ida_idd.debugger_t.set_exception_info +ida_idd.debugger_t.set_resume_mode +ida_idd.debugger_t.start_process +ida_idd.debugger_t.supports_debthread +ida_idd.debugger_t.supports_lowcnds +ida_idd.debugger_t.suspended +ida_idd.debugger_t.term_debugger +ida_idd.debugger_t.thread_continue +ida_idd.debugger_t.thread_get_sreg_base +ida_idd.debugger_t.thread_suspend +ida_idd.debugger_t.update_bpts +ida_idd.debugger_t.update_call_stack +ida_idd.debugger_t.update_lowcnds +ida_idd.debugger_t.use_memregs +ida_idd.debugger_t.use_sregs +ida_idd.debugger_t.version +ida_idd.debugger_t.virtual_threads +ida_idd.debugger_t.write_file +ida_idd.debugger_t.write_memory +ida_idd.debugger_t.write_register +ida_idd.dyn_register_info_array +ida_idd.dyn_register_info_array.__getitem__ +ida_idd.dyn_register_info_array.__init__ +ida_idd.dyn_register_info_array.__len__ +ida_idd.dyn_register_info_array.__setitem__ +ida_idd.exception_info_t +ida_idd.exception_info_t.__init__ +ida_idd.exception_info_t.break_on +ida_idd.exception_info_t.code +ida_idd.exception_info_t.desc +ida_idd.exception_info_t.flags +ida_idd.exception_info_t.handle +ida_idd.exception_info_t.name +ida_idd.excinfo_t +ida_idd.excinfo_t.__init__ +ida_idd.excinfo_t.can_cont +ida_idd.excinfo_t.code +ida_idd.excinfo_t.ea +ida_idd.excinfo_t.info +ida_idd.excvec_t +ida_idd.excvec_t.__getitem__ +ida_idd.excvec_t.__init__ +ida_idd.excvec_t.__len__ +ida_idd.excvec_t.__setitem__ +ida_idd.excvec_t.append +ida_idd.excvec_t.at +ida_idd.excvec_t.begin +ida_idd.excvec_t.capacity +ida_idd.excvec_t.clear +ida_idd.excvec_t.empty +ida_idd.excvec_t.end +ida_idd.excvec_t.erase +ida_idd.excvec_t.extend +ida_idd.excvec_t.extract +ida_idd.excvec_t.grow +ida_idd.excvec_t.inject +ida_idd.excvec_t.insert +ida_idd.excvec_t.pop_back +ida_idd.excvec_t.push_back +ida_idd.excvec_t.qclear +ida_idd.excvec_t.reserve +ida_idd.excvec_t.resize +ida_idd.excvec_t.size +ida_idd.excvec_t.swap +ida_idd.excvec_t.truncate +ida_idd.get_dbg +ida_idd.get_debug_event_name +ida_idd.get_event_bpt_hea +ida_idd.get_event_exc_code +ida_idd.get_event_exc_ea +ida_idd.get_event_exc_info +ida_idd.get_event_info +ida_idd.get_event_module_base +ida_idd.get_event_module_name +ida_idd.get_event_module_size +ida_idd.ieee2cpu +ida_idd.launch_env_t +ida_idd.launch_env_t.__init__ +ida_idd.launch_env_t.envs +ida_idd.launch_env_t.set +ida_idd.meminfo_vec_t +ida_idd.meminfo_vec_t.__init__ +ida_idd.meminfo_vec_template_t +ida_idd.meminfo_vec_template_t.__eq__ +ida_idd.meminfo_vec_template_t.__getitem__ +ida_idd.meminfo_vec_template_t.__init__ +ida_idd.meminfo_vec_template_t.__len__ +ida_idd.meminfo_vec_template_t.__ne__ +ida_idd.meminfo_vec_template_t.__setitem__ +ida_idd.meminfo_vec_template_t._del +ida_idd.meminfo_vec_template_t.add_unique +ida_idd.meminfo_vec_template_t.append +ida_idd.meminfo_vec_template_t.at +ida_idd.meminfo_vec_template_t.begin +ida_idd.meminfo_vec_template_t.capacity +ida_idd.meminfo_vec_template_t.clear +ida_idd.meminfo_vec_template_t.empty +ida_idd.meminfo_vec_template_t.end +ida_idd.meminfo_vec_template_t.erase +ida_idd.meminfo_vec_template_t.extend +ida_idd.meminfo_vec_template_t.extract +ida_idd.meminfo_vec_template_t.find +ida_idd.meminfo_vec_template_t.grow +ida_idd.meminfo_vec_template_t.has +ida_idd.meminfo_vec_template_t.inject +ida_idd.meminfo_vec_template_t.insert +ida_idd.meminfo_vec_template_t.pop_back +ida_idd.meminfo_vec_template_t.push_back +ida_idd.meminfo_vec_template_t.qclear +ida_idd.meminfo_vec_template_t.reserve +ida_idd.meminfo_vec_template_t.resize +ida_idd.meminfo_vec_template_t.size +ida_idd.meminfo_vec_template_t.swap +ida_idd.meminfo_vec_template_t.truncate +ida_idd.memory_info_t +ida_idd.memory_info_t.__eq__ +ida_idd.memory_info_t.__init__ +ida_idd.memory_info_t.__ne__ +ida_idd.memory_info_t.bitness +ida_idd.memory_info_t.name +ida_idd.memory_info_t.perm +ida_idd.memory_info_t.sbase +ida_idd.memory_info_t.sclass +ida_idd.modinfo_t +ida_idd.modinfo_t.__init__ +ida_idd.modinfo_t.base +ida_idd.modinfo_t.name +ida_idd.modinfo_t.rebase_to +ida_idd.modinfo_t.size +ida_idd.process_info_t +ida_idd.process_info_t.__init__ +ida_idd.process_info_t.name +ida_idd.process_info_t.pid +ida_idd.procinfo_vec_t +ida_idd.procinfo_vec_t.__getitem__ +ida_idd.procinfo_vec_t.__init__ +ida_idd.procinfo_vec_t.__len__ +ida_idd.procinfo_vec_t.__setitem__ +ida_idd.procinfo_vec_t.append +ida_idd.procinfo_vec_t.at +ida_idd.procinfo_vec_t.begin +ida_idd.procinfo_vec_t.capacity +ida_idd.procinfo_vec_t.clear +ida_idd.procinfo_vec_t.empty +ida_idd.procinfo_vec_t.end +ida_idd.procinfo_vec_t.erase +ida_idd.procinfo_vec_t.extend +ida_idd.procinfo_vec_t.extract +ida_idd.procinfo_vec_t.grow +ida_idd.procinfo_vec_t.inject +ida_idd.procinfo_vec_t.insert +ida_idd.procinfo_vec_t.pop_back +ida_idd.procinfo_vec_t.push_back +ida_idd.procinfo_vec_t.qclear +ida_idd.procinfo_vec_t.reserve +ida_idd.procinfo_vec_t.resize +ida_idd.procinfo_vec_t.size +ida_idd.procinfo_vec_t.swap +ida_idd.procinfo_vec_t.truncate +ida_idd.register_info_t +ida_idd.register_info_t.__get_bit_strings +ida_idd.register_info_t.__init__ +ida_idd.register_info_t.bit_strings +ida_idd.register_info_t.default_bit_strings_mask +ida_idd.register_info_t.dtype +ida_idd.register_info_t.flags +ida_idd.register_info_t.name +ida_idd.register_info_t.register_class +ida_idd.regval_t +ida_idd.regval_t.__eq__ +ida_idd.regval_t.__init__ +ida_idd.regval_t.__ne__ +ida_idd.regval_t.bytes +ida_idd.regval_t.clear +ida_idd.regval_t.get_data +ida_idd.regval_t.get_data_size +ida_idd.regval_t.ival +ida_idd.regval_t.pyval +ida_idd.regval_t.rvtype +ida_idd.regval_t.set_bytes +ida_idd.regval_t.set_float +ida_idd.regval_t.set_int +ida_idd.regval_t.set_pyval +ida_idd.regval_t.set_unavailable +ida_idd.regval_t.swap +ida_idd.regval_t.use_bytevec +ida_idd.regvals_t +ida_idd.regvals_t.__eq__ +ida_idd.regvals_t.__getitem__ +ida_idd.regvals_t.__init__ +ida_idd.regvals_t.__len__ +ida_idd.regvals_t.__ne__ +ida_idd.regvals_t.__setitem__ +ida_idd.regvals_t._del +ida_idd.regvals_t.add_unique +ida_idd.regvals_t.append +ida_idd.regvals_t.at +ida_idd.regvals_t.begin +ida_idd.regvals_t.capacity +ida_idd.regvals_t.clear +ida_idd.regvals_t.empty +ida_idd.regvals_t.end +ida_idd.regvals_t.erase +ida_idd.regvals_t.extend +ida_idd.regvals_t.extract +ida_idd.regvals_t.find +ida_idd.regvals_t.grow +ida_idd.regvals_t.has +ida_idd.regvals_t.inject +ida_idd.regvals_t.insert +ida_idd.regvals_t.pop_back +ida_idd.regvals_t.push_back +ida_idd.regvals_t.qclear +ida_idd.regvals_t.reserve +ida_idd.regvals_t.resize +ida_idd.regvals_t.size +ida_idd.regvals_t.swap +ida_idd.regvals_t.truncate +ida_idd.scattered_segm_t +ida_idd.scattered_segm_t.__init__ +ida_idd.scattered_segm_t.name +ida_idd.set_debug_event_code +ida_idd.thread_name_t +ida_idd.thread_name_t.__init__ +ida_idd.thread_name_t.name +ida_idd.thread_name_t.tid +ida_idp +ida_idp.AS2_BRACE +ida_idp.AS2_BYTE1CHAR +ida_idp.AS2_COLONSUF +ida_idp.AS2_IDEALDSCR +ida_idp.AS2_STRINV +ida_idp.AS2_TERSESTR +ida_idp.AS2_YWORD +ida_idp.AS2_ZWORD +ida_idp.ASB_BINF0 +ida_idp.ASB_BINF1 +ida_idp.ASB_BINF2 +ida_idp.ASB_BINF3 +ida_idp.ASB_BINF4 +ida_idp.ASB_BINF5 +ida_idp.ASD_DECF0 +ida_idp.ASD_DECF1 +ida_idp.ASD_DECF2 +ida_idp.ASD_DECF3 +ida_idp.ASH_HEXF0 +ida_idp.ASH_HEXF1 +ida_idp.ASH_HEXF2 +ida_idp.ASH_HEXF3 +ida_idp.ASH_HEXF4 +ida_idp.ASH_HEXF5 +ida_idp.ASO_OCTF0 +ida_idp.ASO_OCTF1 +ida_idp.ASO_OCTF2 +ida_idp.ASO_OCTF3 +ida_idp.ASO_OCTF4 +ida_idp.ASO_OCTF5 +ida_idp.ASO_OCTF6 +ida_idp.ASO_OCTF7 +ida_idp.AS_1TEXT +ida_idp.AS_2CHRE +ida_idp.AS_ALIGN2 +ida_idp.AS_ASCIIC +ida_idp.AS_ASCIIZ +ida_idp.AS_BINFM +ida_idp.AS_COLON +ida_idp.AS_DECFM +ida_idp.AS_HEXFM +ida_idp.AS_LALIGN +ida_idp.AS_N2CHR +ida_idp.AS_NCHRE +ida_idp.AS_NCMAS +ida_idp.AS_NHIAS +ida_idp.AS_NOCODECLN +ida_idp.AS_NOSPACE +ida_idp.AS_NOXRF +ida_idp.AS_OCTFM +ida_idp.AS_OFFST +ida_idp.AS_ONEDUP +ida_idp.AS_RELSUP +ida_idp.AS_UDATA +ida_idp.AS_UNEQU +ida_idp.AS_XTRNTYPE +ida_idp.AssembleLine +ida_idp.CF_CALL +ida_idp.CF_CHG1 +ida_idp.CF_CHG2 +ida_idp.CF_CHG3 +ida_idp.CF_CHG4 +ida_idp.CF_CHG5 +ida_idp.CF_CHG6 +ida_idp.CF_CHG7 +ida_idp.CF_CHG8 +ida_idp.CF_HLL +ida_idp.CF_JUMP +ida_idp.CF_SHFT +ida_idp.CF_STOP +ida_idp.CF_USE1 +ida_idp.CF_USE2 +ida_idp.CF_USE3 +ida_idp.CF_USE4 +ida_idp.CF_USE5 +ida_idp.CF_USE6 +ida_idp.CF_USE7 +ida_idp.CF_USE8 +ida_idp.CUSTOM_INSN_ITYPE +ida_idp.HKCB_GLOBAL +ida_idp.IDB_Hooks +ida_idp.IDB_Hooks.__disown__ +ida_idp.IDB_Hooks.__init__ +ida_idp.IDB_Hooks.adding_segm +ida_idp.IDB_Hooks.allsegs_moved +ida_idp.IDB_Hooks.auto_empty +ida_idp.IDB_Hooks.auto_empty_finally +ida_idp.IDB_Hooks.bookmark_changed +ida_idp.IDB_Hooks.byte_patched +ida_idp.IDB_Hooks.callee_addr_changed +ida_idp.IDB_Hooks.changing_cmt +ida_idp.IDB_Hooks.changing_op_ti +ida_idp.IDB_Hooks.changing_op_type +ida_idp.IDB_Hooks.changing_range_cmt +ida_idp.IDB_Hooks.changing_segm_class +ida_idp.IDB_Hooks.changing_segm_end +ida_idp.IDB_Hooks.changing_segm_name +ida_idp.IDB_Hooks.changing_segm_start +ida_idp.IDB_Hooks.changing_ti +ida_idp.IDB_Hooks.closebase +ida_idp.IDB_Hooks.cmt_changed +ida_idp.IDB_Hooks.compiler_changed +ida_idp.IDB_Hooks.deleting_func +ida_idp.IDB_Hooks.deleting_func_tail +ida_idp.IDB_Hooks.deleting_segm +ida_idp.IDB_Hooks.deleting_tryblks +ida_idp.IDB_Hooks.destroyed_items +ida_idp.IDB_Hooks.determined_main +ida_idp.IDB_Hooks.dirtree_link +ida_idp.IDB_Hooks.dirtree_mkdir +ida_idp.IDB_Hooks.dirtree_move +ida_idp.IDB_Hooks.dirtree_rank +ida_idp.IDB_Hooks.dirtree_rmdir +ida_idp.IDB_Hooks.dirtree_rminode +ida_idp.IDB_Hooks.dirtree_segm_moved +ida_idp.IDB_Hooks.extlang_changed +ida_idp.IDB_Hooks.extra_cmt_changed +ida_idp.IDB_Hooks.flow_chart_created +ida_idp.IDB_Hooks.frame_created +ida_idp.IDB_Hooks.frame_deleted +ida_idp.IDB_Hooks.frame_expanded +ida_idp.IDB_Hooks.frame_udm_changed +ida_idp.IDB_Hooks.frame_udm_created +ida_idp.IDB_Hooks.frame_udm_deleted +ida_idp.IDB_Hooks.frame_udm_renamed +ida_idp.IDB_Hooks.func_added +ida_idp.IDB_Hooks.func_deleted +ida_idp.IDB_Hooks.func_noret_changed +ida_idp.IDB_Hooks.func_tail_appended +ida_idp.IDB_Hooks.func_tail_deleted +ida_idp.IDB_Hooks.func_updated +ida_idp.IDB_Hooks.hook +ida_idp.IDB_Hooks.idasgn_loaded +ida_idp.IDB_Hooks.idasgn_matched_ea +ida_idp.IDB_Hooks.item_color_changed +ida_idp.IDB_Hooks.kernel_config_loaded +ida_idp.IDB_Hooks.loader_finished +ida_idp.IDB_Hooks.local_types_changed +ida_idp.IDB_Hooks.lt_edm_changed +ida_idp.IDB_Hooks.lt_edm_created +ida_idp.IDB_Hooks.lt_edm_deleted +ida_idp.IDB_Hooks.lt_edm_renamed +ida_idp.IDB_Hooks.lt_udm_changed +ida_idp.IDB_Hooks.lt_udm_created +ida_idp.IDB_Hooks.lt_udm_deleted +ida_idp.IDB_Hooks.lt_udm_renamed +ida_idp.IDB_Hooks.lt_udt_expanded +ida_idp.IDB_Hooks.make_code +ida_idp.IDB_Hooks.make_data +ida_idp.IDB_Hooks.op_ti_changed +ida_idp.IDB_Hooks.op_type_changed +ida_idp.IDB_Hooks.range_cmt_changed +ida_idp.IDB_Hooks.renamed +ida_idp.IDB_Hooks.savebase +ida_idp.IDB_Hooks.segm_added +ida_idp.IDB_Hooks.segm_attrs_updated +ida_idp.IDB_Hooks.segm_class_changed +ida_idp.IDB_Hooks.segm_deleted +ida_idp.IDB_Hooks.segm_end_changed +ida_idp.IDB_Hooks.segm_moved +ida_idp.IDB_Hooks.segm_name_changed +ida_idp.IDB_Hooks.segm_start_changed +ida_idp.IDB_Hooks.set_func_end +ida_idp.IDB_Hooks.set_func_start +ida_idp.IDB_Hooks.sgr_changed +ida_idp.IDB_Hooks.sgr_deleted +ida_idp.IDB_Hooks.stkpnts_changed +ida_idp.IDB_Hooks.tail_owner_changed +ida_idp.IDB_Hooks.thunk_func_created +ida_idp.IDB_Hooks.ti_changed +ida_idp.IDB_Hooks.tryblks_updated +ida_idp.IDB_Hooks.unhook +ida_idp.IDB_Hooks.updating_tryblks +ida_idp.IDB_Hooks.upgraded +ida_idp.IDP_Hooks +ida_idp.IDP_Hooks.__disown__ +ida_idp.IDP_Hooks.__init__ +ida_idp.IDP_Hooks.ev_add_cref +ida_idp.IDP_Hooks.ev_add_dref +ida_idp.IDP_Hooks.ev_adjust_argloc +ida_idp.IDP_Hooks.ev_adjust_libfunc_ea +ida_idp.IDP_Hooks.ev_adjust_refinfo +ida_idp.IDP_Hooks.ev_ana_insn +ida_idp.IDP_Hooks.ev_analyze_prolog +ida_idp.IDP_Hooks.ev_arch_changed +ida_idp.IDP_Hooks.ev_arg_addrs_ready +ida_idp.IDP_Hooks.ev_asm_installed +ida_idp.IDP_Hooks.ev_assemble +ida_idp.IDP_Hooks.ev_auto_queue_empty +ida_idp.IDP_Hooks.ev_calc_arglocs +ida_idp.IDP_Hooks.ev_calc_cdecl_purged_bytes +ida_idp.IDP_Hooks.ev_calc_next_eas +ida_idp.IDP_Hooks.ev_calc_purged_bytes +ida_idp.IDP_Hooks.ev_calc_retloc +ida_idp.IDP_Hooks.ev_calc_spdelta +ida_idp.IDP_Hooks.ev_calc_step_over +ida_idp.IDP_Hooks.ev_calc_switch_cases +ida_idp.IDP_Hooks.ev_calc_varglocs +ida_idp.IDP_Hooks.ev_calcrel +ida_idp.IDP_Hooks.ev_can_have_type +ida_idp.IDP_Hooks.ev_clean_tbit +ida_idp.IDP_Hooks.ev_cmp_operands +ida_idp.IDP_Hooks.ev_coagulate +ida_idp.IDP_Hooks.ev_coagulate_dref +ida_idp.IDP_Hooks.ev_create_flat_group +ida_idp.IDP_Hooks.ev_create_func_frame +ida_idp.IDP_Hooks.ev_create_merge_handlers +ida_idp.IDP_Hooks.ev_create_switch_xrefs +ida_idp.IDP_Hooks.ev_creating_segm +ida_idp.IDP_Hooks.ev_cvt64_hashval +ida_idp.IDP_Hooks.ev_cvt64_supval +ida_idp.IDP_Hooks.ev_decorate_name +ida_idp.IDP_Hooks.ev_del_cref +ida_idp.IDP_Hooks.ev_del_dref +ida_idp.IDP_Hooks.ev_delay_slot_insn +ida_idp.IDP_Hooks.ev_demangle_name +ida_idp.IDP_Hooks.ev_emu_insn +ida_idp.IDP_Hooks.ev_endbinary +ida_idp.IDP_Hooks.ev_ending_undo +ida_idp.IDP_Hooks.ev_equal_reglocs +ida_idp.IDP_Hooks.ev_extract_address +ida_idp.IDP_Hooks.ev_find_op_value +ida_idp.IDP_Hooks.ev_find_reg_value +ida_idp.IDP_Hooks.ev_func_bounds +ida_idp.IDP_Hooks.ev_gen_asm_or_lst +ida_idp.IDP_Hooks.ev_gen_map_file +ida_idp.IDP_Hooks.ev_gen_regvar_def +ida_idp.IDP_Hooks.ev_gen_src_file_lnnum +ida_idp.IDP_Hooks.ev_gen_stkvar_def +ida_idp.IDP_Hooks.ev_get_abi_info +ida_idp.IDP_Hooks.ev_get_autocmt +ida_idp.IDP_Hooks.ev_get_bg_color +ida_idp.IDP_Hooks.ev_get_cc_regs +ida_idp.IDP_Hooks.ev_get_code16_mode +ida_idp.IDP_Hooks.ev_get_dbr_opnum +ida_idp.IDP_Hooks.ev_get_default_enum_size +ida_idp.IDP_Hooks.ev_get_frame_retsize +ida_idp.IDP_Hooks.ev_get_macro_insn_head +ida_idp.IDP_Hooks.ev_get_operand_string +ida_idp.IDP_Hooks.ev_get_procmod +ida_idp.IDP_Hooks.ev_get_reg_accesses +ida_idp.IDP_Hooks.ev_get_reg_info +ida_idp.IDP_Hooks.ev_get_reg_name +ida_idp.IDP_Hooks.ev_get_simd_types +ida_idp.IDP_Hooks.ev_get_stkarg_area_info +ida_idp.IDP_Hooks.ev_get_stkvar_scale_factor +ida_idp.IDP_Hooks.ev_getreg +ida_idp.IDP_Hooks.ev_init +ida_idp.IDP_Hooks.ev_insn_reads_tbit +ida_idp.IDP_Hooks.ev_is_align_insn +ida_idp.IDP_Hooks.ev_is_alloca_probe +ida_idp.IDP_Hooks.ev_is_basic_block_end +ida_idp.IDP_Hooks.ev_is_call_insn +ida_idp.IDP_Hooks.ev_is_cond_insn +ida_idp.IDP_Hooks.ev_is_control_flow_guard +ida_idp.IDP_Hooks.ev_is_far_jump +ida_idp.IDP_Hooks.ev_is_indirect_jump +ida_idp.IDP_Hooks.ev_is_insn_table_jump +ida_idp.IDP_Hooks.ev_is_jump_func +ida_idp.IDP_Hooks.ev_is_ret_insn +ida_idp.IDP_Hooks.ev_is_sane_insn +ida_idp.IDP_Hooks.ev_is_sp_based +ida_idp.IDP_Hooks.ev_is_switch +ida_idp.IDP_Hooks.ev_last_cb_before_loader +ida_idp.IDP_Hooks.ev_loader +ida_idp.IDP_Hooks.ev_lower_func_type +ida_idp.IDP_Hooks.ev_max_ptr_size +ida_idp.IDP_Hooks.ev_may_be_func +ida_idp.IDP_Hooks.ev_may_show_sreg +ida_idp.IDP_Hooks.ev_moving_segm +ida_idp.IDP_Hooks.ev_newasm +ida_idp.IDP_Hooks.ev_newbinary +ida_idp.IDP_Hooks.ev_newfile +ida_idp.IDP_Hooks.ev_newprc +ida_idp.IDP_Hooks.ev_next_exec_insn +ida_idp.IDP_Hooks.ev_oldfile +ida_idp.IDP_Hooks.ev_out_assumes +ida_idp.IDP_Hooks.ev_out_data +ida_idp.IDP_Hooks.ev_out_footer +ida_idp.IDP_Hooks.ev_out_header +ida_idp.IDP_Hooks.ev_out_insn +ida_idp.IDP_Hooks.ev_out_label +ida_idp.IDP_Hooks.ev_out_mnem +ida_idp.IDP_Hooks.ev_out_operand +ida_idp.IDP_Hooks.ev_out_segend +ida_idp.IDP_Hooks.ev_out_segstart +ida_idp.IDP_Hooks.ev_out_special_item +ida_idp.IDP_Hooks.ev_privrange_changed +ida_idp.IDP_Hooks.ev_realcvt +ida_idp.IDP_Hooks.ev_rename +ida_idp.IDP_Hooks.ev_replaying_undo +ida_idp.IDP_Hooks.ev_set_code16_mode +ida_idp.IDP_Hooks.ev_set_idp_options +ida_idp.IDP_Hooks.ev_set_proc_options +ida_idp.IDP_Hooks.ev_setup_til +ida_idp.IDP_Hooks.ev_str2reg +ida_idp.IDP_Hooks.ev_term +ida_idp.IDP_Hooks.ev_treat_hindering_item +ida_idp.IDP_Hooks.ev_undefine +ida_idp.IDP_Hooks.ev_update_call_stack +ida_idp.IDP_Hooks.ev_use_arg_types +ida_idp.IDP_Hooks.ev_use_regarg_type +ida_idp.IDP_Hooks.ev_use_stkarg_type +ida_idp.IDP_Hooks.ev_validate_flirt_func +ida_idp.IDP_Hooks.ev_verify_noreturn +ida_idp.IDP_Hooks.ev_verify_sp +ida_idp.IDP_Hooks.hook +ida_idp.IDP_Hooks.unhook +ida_idp.IDP_INTERFACE_VERSION +ida_idp.IRI_EXTENDED +ida_idp.IRI_RET_LITERALLY +ida_idp.IRI_SKIP_RETTARGET +ida_idp.LTC_ADDED +ida_idp.LTC_ALIASED +ida_idp.LTC_COMPILER +ida_idp.LTC_DELETED +ida_idp.LTC_EDITED +ida_idp.LTC_NONE +ida_idp.LTC_TIL_COMPACTED +ida_idp.LTC_TIL_LOADED +ida_idp.LTC_TIL_UNLOADED +ida_idp.OP_FP_BASED +ida_idp.OP_SP_ADD +ida_idp.OP_SP_BASED +ida_idp.OP_SP_SUB +ida_idp.PLFM_386 +ida_idp.PLFM_6502 +ida_idp.PLFM_65C816 +ida_idp.PLFM_6800 +ida_idp.PLFM_68K +ida_idp.PLFM_80196 +ida_idp.PLFM_8051 +ida_idp.PLFM_AD2106X +ida_idp.PLFM_AD218X +ida_idp.PLFM_ALPHA +ida_idp.PLFM_ARC +ida_idp.PLFM_ARM +ida_idp.PLFM_AVR +ida_idp.PLFM_C166 +ida_idp.PLFM_C39 +ida_idp.PLFM_CR16 +ida_idp.PLFM_DALVIK +ida_idp.PLFM_DSP56K +ida_idp.PLFM_DSP96K +ida_idp.PLFM_EBC +ida_idp.PLFM_F2MC +ida_idp.PLFM_FR +ida_idp.PLFM_H8 +ida_idp.PLFM_H8500 +ida_idp.PLFM_HPPA +ida_idp.PLFM_I860 +ida_idp.PLFM_I960 +ida_idp.PLFM_IA64 +ida_idp.PLFM_JAVA +ida_idp.PLFM_KR1878 +ida_idp.PLFM_M16C +ida_idp.PLFM_M32R +ida_idp.PLFM_M740 +ida_idp.PLFM_M7700 +ida_idp.PLFM_M7900 +ida_idp.PLFM_MC6812 +ida_idp.PLFM_MC6816 +ida_idp.PLFM_MIPS +ida_idp.PLFM_MN102L00 +ida_idp.PLFM_MSP430 +ida_idp.PLFM_NEC_78K0 +ida_idp.PLFM_NEC_78K0S +ida_idp.PLFM_NEC_V850X +ida_idp.PLFM_NET +ida_idp.PLFM_OAKDSP +ida_idp.PLFM_PDP +ida_idp.PLFM_PIC +ida_idp.PLFM_PIC16 +ida_idp.PLFM_PPC +ida_idp.PLFM_RISCV +ida_idp.PLFM_RL78 +ida_idp.PLFM_RX +ida_idp.PLFM_S390 +ida_idp.PLFM_SCR_ADPT +ida_idp.PLFM_SH +ida_idp.PLFM_SPARC +ida_idp.PLFM_SPC700 +ida_idp.PLFM_SPU +ida_idp.PLFM_ST20 +ida_idp.PLFM_ST7 +ida_idp.PLFM_ST9 +ida_idp.PLFM_TLCS900 +ida_idp.PLFM_TMS +ida_idp.PLFM_TMS320C1X +ida_idp.PLFM_TMS320C28 +ida_idp.PLFM_TMS320C3 +ida_idp.PLFM_TMS320C54 +ida_idp.PLFM_TMS320C55 +ida_idp.PLFM_TMSC6 +ida_idp.PLFM_TRICORE +ida_idp.PLFM_TRIMEDIA +ida_idp.PLFM_UNSP +ida_idp.PLFM_WASM +ida_idp.PLFM_XTENSA +ida_idp.PLFM_Z8 +ida_idp.PLFM_Z80 +ida_idp.PR2_CODE16_BIT +ida_idp.PR2_FORCE_16BIT +ida_idp.PR2_IDP_OPTS +ida_idp.PR2_MACRO +ida_idp.PR2_MAPPINGS +ida_idp.PR2_REL_BITS +ida_idp.PR2_USE_CALCREL +ida_idp.PRN_BIN +ida_idp.PRN_DEC +ida_idp.PRN_HEX +ida_idp.PRN_OCT +ida_idp.PR_ADJSEGS +ida_idp.PR_ALIGN +ida_idp.PR_ALIGN_INSN +ida_idp.PR_ASSEMBLE +ida_idp.PR_BINMEM +ida_idp.PR_CHK_XREF +ida_idp.PR_CNDINSNS +ida_idp.PR_DEFNUM +ida_idp.PR_DEFSEG32 +ida_idp.PR_DEFSEG64 +ida_idp.PR_DELAYED +ida_idp.PR_NOCHANGE +ida_idp.PR_NO_SEGMOVE +ida_idp.PR_OUTER +ida_idp.PR_PURGING +ida_idp.PR_RNAMESOK +ida_idp.PR_SCALE_STKVARS +ida_idp.PR_SEGS +ida_idp.PR_SEGTRANS +ida_idp.PR_SGROTHER +ida_idp.PR_STACK_UP +ida_idp.PR_TYPEINFO +ida_idp.PR_USE32 +ida_idp.PR_USE64 +ida_idp.PR_USE_ARG_TYPES +ida_idp.PR_USE_TBYTE +ida_idp.PR_WORD_INS +ida_idp.REG_SPOIL +ida_idp.SETPROC_IDB +ida_idp.SETPROC_LOADER +ida_idp.SETPROC_LOADER_NON_FATAL +ida_idp.SETPROC_USER +ida_idp.__ph +ida_idp._notify_when_dispatcher_t +ida_idp._notify_when_dispatcher_t._IDB_Hooks +ida_idp._notify_when_dispatcher_t._IDB_Hooks.__init__ +ida_idp._notify_when_dispatcher_t._IDB_Hooks.closebase +ida_idp._notify_when_dispatcher_t._IDP_Hooks +ida_idp._notify_when_dispatcher_t._IDP_Hooks.__init__ +ida_idp._notify_when_dispatcher_t._IDP_Hooks.ev_newfile +ida_idp._notify_when_dispatcher_t._IDP_Hooks.ev_oldfile +ida_idp._notify_when_dispatcher_t.__init__ +ida_idp._notify_when_dispatcher_t._callback_t +ida_idp._notify_when_dispatcher_t._callback_t.__init__ +ida_idp._notify_when_dispatcher_t._find +ida_idp._notify_when_dispatcher_t.dispatch +ida_idp._notify_when_dispatcher_t.notify_when +ida_idp._processor_t +ida_idp._processor_t.__init__ +ida_idp._processor_t.add_cref +ida_idp._processor_t.add_dref +ida_idp._processor_t.adjust_argloc +ida_idp._processor_t.adjust_libfunc_ea +ida_idp._processor_t.adjust_refinfo +ida_idp._processor_t.ana_insn +ida_idp._processor_t.analyze_prolog +ida_idp._processor_t.arch_changed +ida_idp._processor_t.arg_addrs_ready +ida_idp._processor_t.asm_installed +ida_idp._processor_t.assemble +ida_idp._processor_t.auto_queue_empty +ida_idp._processor_t.calc_arglocs +ida_idp._processor_t.calc_cdecl_purged_bytes +ida_idp._processor_t.calc_next_eas +ida_idp._processor_t.calc_purged_bytes +ida_idp._processor_t.calc_retloc +ida_idp._processor_t.calc_spdelta +ida_idp._processor_t.calc_step_over +ida_idp._processor_t.calc_switch_cases +ida_idp._processor_t.calc_varglocs +ida_idp._processor_t.calcrel +ida_idp._processor_t.calcrel_in_bits +ida_idp._processor_t.can_have_type +ida_idp._processor_t.cbsize +ida_idp._processor_t.clean_tbit +ida_idp._processor_t.cmp_operands +ida_idp._processor_t.coagulate +ida_idp._processor_t.coagulate_dref +ida_idp._processor_t.create_flat_group +ida_idp._processor_t.create_func_frame +ida_idp._processor_t.create_merge_handlers +ida_idp._processor_t.create_switch_xrefs +ida_idp._processor_t.creating_segm +ida_idp._processor_t.cvt64_hashval +ida_idp._processor_t.cvt64_supval +ida_idp._processor_t.dbsize +ida_idp._processor_t.decorate_name +ida_idp._processor_t.del_cref +ida_idp._processor_t.del_dref +ida_idp._processor_t.delay_slot_insn +ida_idp._processor_t.demangle_name +ida_idp._processor_t.emu_insn +ida_idp._processor_t.endbinary +ida_idp._processor_t.equal_reglocs +ida_idp._processor_t.extract_address +ida_idp._processor_t.find_op_value +ida_idp._processor_t.find_reg_value +ida_idp._processor_t.func_bounds +ida_idp._processor_t.gen_asm_or_lst +ida_idp._processor_t.gen_map_file +ida_idp._processor_t.gen_regvar_def +ida_idp._processor_t.gen_src_file_lnnum +ida_idp._processor_t.gen_stkvar_def +ida_idp._processor_t.get_abi_info +ida_idp._processor_t.get_autocmt +ida_idp._processor_t.get_bg_color +ida_idp._processor_t.get_canon_feature +ida_idp._processor_t.get_canon_mnem +ida_idp._processor_t.get_cc_regs +ida_idp._processor_t.get_code16_mode +ida_idp._processor_t.get_dbr_opnum +ida_idp._processor_t.get_default_segm_bitness +ida_idp._processor_t.get_frame_retsize +ida_idp._processor_t.get_idd_opinfo +ida_idp._processor_t.get_macro_insn_head +ida_idp._processor_t.get_operand_string +ida_idp._processor_t.get_proc_index +ida_idp._processor_t.get_reg_accesses +ida_idp._processor_t.get_reg_info +ida_idp._processor_t.get_reg_name +ida_idp._processor_t.get_simd_types +ida_idp._processor_t.get_stkarg_area_info +ida_idp._processor_t.get_stkvar_scale +ida_idp._processor_t.get_stkvar_scale_factor +ida_idp._processor_t.getreg +ida_idp._processor_t.has_code16_bit +ida_idp._processor_t.has_idp_opts +ida_idp._processor_t.has_segregs +ida_idp._processor_t.init +ida_idp._processor_t.insn_reads_tbit +ida_idp._processor_t.is_align_insn +ida_idp._processor_t.is_alloca_probe +ida_idp._processor_t.is_basic_block_end +ida_idp._processor_t.is_call_insn +ida_idp._processor_t.is_cond_insn +ida_idp._processor_t.is_control_flow_guard +ida_idp._processor_t.is_far_jump +ida_idp._processor_t.is_indirect_jump +ida_idp._processor_t.is_jump_func +ida_idp._processor_t.is_ret_insn +ida_idp._processor_t.is_sane_insn +ida_idp._processor_t.is_sp_based +ida_idp._processor_t.is_switch +ida_idp._processor_t.loader_elf_machine +ida_idp._processor_t.lower_func_type +ida_idp._processor_t.max_ptr_size +ida_idp._processor_t.may_be_func +ida_idp._processor_t.may_show_sreg +ida_idp._processor_t.moving_segm +ida_idp._processor_t.newasm +ida_idp._processor_t.newbinary +ida_idp._processor_t.newfile +ida_idp._processor_t.newprc +ida_idp._processor_t.next_exec_insn +ida_idp._processor_t.notify +ida_idp._processor_t.oldfile +ida_idp._processor_t.out_assumes +ida_idp._processor_t.out_data +ida_idp._processor_t.out_footer +ida_idp._processor_t.out_header +ida_idp._processor_t.out_insn +ida_idp._processor_t.out_label +ida_idp._processor_t.out_mnem +ida_idp._processor_t.out_operand +ida_idp._processor_t.out_segend +ida_idp._processor_t.out_segstart +ida_idp._processor_t.out_special_item +ida_idp._processor_t.privrange_changed +ida_idp._processor_t.realcvt +ida_idp._processor_t.rename +ida_idp._processor_t.set_code16_mode +ida_idp._processor_t.set_idp_options +ida_idp._processor_t.set_proc_options +ida_idp._processor_t.setup_til +ida_idp._processor_t.sizeof_ldbl +ida_idp._processor_t.stkup +ida_idp._processor_t.str2reg +ida_idp._processor_t.supports_calcrel +ida_idp._processor_t.supports_macros +ida_idp._processor_t.term +ida_idp._processor_t.ti +ida_idp._processor_t.treat_hindering_item +ida_idp._processor_t.undefine +ida_idp._processor_t.update_call_stack +ida_idp._processor_t.use32 +ida_idp._processor_t.use64 +ida_idp._processor_t.use_arg_types +ida_idp._processor_t.use_mappings +ida_idp._processor_t.use_regarg_type +ida_idp._processor_t.use_stkarg_type +ida_idp._processor_t.use_tbyte +ida_idp._processor_t.validate_flirt_func +ida_idp._processor_t.verify_noreturn +ida_idp._processor_t.verify_sp +ida_idp._processor_t_Trampoline_IDB_Hooks +ida_idp._processor_t_Trampoline_IDB_Hooks.__dummy +ida_idp._processor_t_Trampoline_IDB_Hooks.__init__ +ida_idp._processor_t_Trampoline_IDB_Hooks.__make_parent_caller +ida_idp._processor_t_Trampoline_IDB_Hooks.__make_parent_caller.call_parent +ida_idp.asm_t +ida_idp.asm_t.__init__ +ida_idp.asm_t.a_align +ida_idp.asm_t.a_ascii +ida_idp.asm_t.a_band +ida_idp.asm_t.a_bnot +ida_idp.asm_t.a_bor +ida_idp.asm_t.a_bss +ida_idp.asm_t.a_byte +ida_idp.asm_t.a_comdef +ida_idp.asm_t.a_curip +ida_idp.asm_t.a_double +ida_idp.asm_t.a_dups +ida_idp.asm_t.a_dword +ida_idp.asm_t.a_equ +ida_idp.asm_t.a_extrn +ida_idp.asm_t.a_float +ida_idp.asm_t.a_include_fmt +ida_idp.asm_t.a_mod +ida_idp.asm_t.a_oword +ida_idp.asm_t.a_packreal +ida_idp.asm_t.a_public +ida_idp.asm_t.a_qword +ida_idp.asm_t.a_rva +ida_idp.asm_t.a_seg +ida_idp.asm_t.a_shl +ida_idp.asm_t.a_shr +ida_idp.asm_t.a_sizeof_fmt +ida_idp.asm_t.a_tbyte +ida_idp.asm_t.a_vstruc_fmt +ida_idp.asm_t.a_weak +ida_idp.asm_t.a_word +ida_idp.asm_t.a_xor +ida_idp.asm_t.a_yword +ida_idp.asm_t.a_zword +ida_idp.asm_t.accsep +ida_idp.asm_t.ascsep +ida_idp.asm_t.cmnt +ida_idp.asm_t.cmnt2 +ida_idp.asm_t.end +ida_idp.asm_t.esccodes +ida_idp.asm_t.flag +ida_idp.asm_t.flag2 +ida_idp.asm_t.header +ida_idp.asm_t.help +ida_idp.asm_t.high16 +ida_idp.asm_t.high8 +ida_idp.asm_t.lbrace +ida_idp.asm_t.low16 +ida_idp.asm_t.low8 +ida_idp.asm_t.name +ida_idp.asm_t.origin +ida_idp.asm_t.rbrace +ida_idp.asm_t.uflag +ida_idp.assemble +ida_idp.cfg_get_cc_header_path +ida_idp.cfg_get_cc_parm +ida_idp.cfg_get_cc_predefined_macros +ida_idp.delay_slot_insn +ida_idp.gen_idb_event +ida_idp.get_ash +ida_idp.get_config_value +ida_idp.get_idb_notifier_addr +ida_idp.get_idb_notifier_ud_addr +ida_idp.get_idp_name +ida_idp.get_idp_notifier_addr +ida_idp.get_idp_notifier_ud_addr +ida_idp.get_ph +ida_idp.get_reg_info +ida_idp.get_reg_name +ida_idp.has_cf_chg +ida_idp.has_cf_use +ida_idp.has_insn_feature +ida_idp.is_align_insn +ida_idp.is_basic_block_end +ida_idp.is_call_insn +ida_idp.is_indirect_jump_insn +ida_idp.is_ret_insn +ida_idp.num_range_t +ida_idp.num_range_t.__init__ +ida_idp.params_t +ida_idp.params_t.__init__ +ida_idp.parse_reg_name +ida_idp.ph_calcrel +ida_idp.ph_find_op_value +ida_idp.ph_find_reg_value +ida_idp.ph_get_abi_info +ida_idp.ph_get_cnbits +ida_idp.ph_get_dnbits +ida_idp.ph_get_flag +ida_idp.ph_get_icode_return +ida_idp.ph_get_id +ida_idp.ph_get_instruc +ida_idp.ph_get_instruc_end +ida_idp.ph_get_instruc_start +ida_idp.ph_get_operand_info +ida_idp.ph_get_reg_accesses +ida_idp.ph_get_reg_code_sreg +ida_idp.ph_get_reg_data_sreg +ida_idp.ph_get_reg_first_sreg +ida_idp.ph_get_reg_last_sreg +ida_idp.ph_get_regnames +ida_idp.ph_get_segreg_size +ida_idp.ph_get_tbyte_size +ida_idp.ph_get_version +ida_idp.process_config_directive +ida_idp.processor_t +ida_idp.processor_t.__idc_cvt_id__ +ida_idp.processor_t.__init__ +ida_idp.processor_t._get_idb_notifier_addr +ida_idp.processor_t._get_idb_notifier_ud_addr +ida_idp.processor_t._get_idp_notifier_addr +ida_idp.processor_t._get_idp_notifier_ud_addr +ida_idp.processor_t._get_notify +ida_idp.processor_t._make_forced_value_wrapper +ida_idp.processor_t._make_forced_value_wrapper.f +ida_idp.processor_t._make_int_returning_wrapper +ida_idp.processor_t._make_int_returning_wrapper.f +ida_idp.processor_t.auto_empty +ida_idp.processor_t.auto_empty_finally +ida_idp.processor_t.closebase +ida_idp.processor_t.compiler_changed +ida_idp.processor_t.deleting_func +ida_idp.processor_t.determined_main +ida_idp.processor_t.ev_ana_insn +ida_idp.processor_t.ev_assemble +ida_idp.processor_t.ev_auto_queue_empty +ida_idp.processor_t.ev_calc_step_over +ida_idp.processor_t.ev_can_have_type +ida_idp.processor_t.ev_cmp_operands +ida_idp.processor_t.ev_coagulate +ida_idp.processor_t.ev_coagulate_dref +ida_idp.processor_t.ev_create_func_frame +ida_idp.processor_t.ev_create_switch_xrefs +ida_idp.processor_t.ev_creating_segm +ida_idp.processor_t.ev_emu_insn +ida_idp.processor_t.ev_endbinary +ida_idp.processor_t.ev_func_bounds +ida_idp.processor_t.ev_gen_map_file +ida_idp.processor_t.ev_gen_regvar_def +ida_idp.processor_t.ev_gen_src_file_lnnum +ida_idp.processor_t.ev_get_autocmt +ida_idp.processor_t.ev_get_frame_retsize +ida_idp.processor_t.ev_get_operand_string +ida_idp.processor_t.ev_is_align_insn +ida_idp.processor_t.ev_is_alloca_probe +ida_idp.processor_t.ev_is_basic_block_end +ida_idp.processor_t.ev_is_call_insn +ida_idp.processor_t.ev_is_far_jump +ida_idp.processor_t.ev_is_indirect_jump +ida_idp.processor_t.ev_is_insn_table_jump +ida_idp.processor_t.ev_is_ret_insn +ida_idp.processor_t.ev_is_sane_insn +ida_idp.processor_t.ev_is_sp_based +ida_idp.processor_t.ev_is_switch +ida_idp.processor_t.ev_may_be_func +ida_idp.processor_t.ev_may_show_sreg +ida_idp.processor_t.ev_moving_segm +ida_idp.processor_t.ev_newbinary +ida_idp.processor_t.ev_newfile +ida_idp.processor_t.ev_newprc +ida_idp.processor_t.ev_oldfile +ida_idp.processor_t.ev_out_assumes +ida_idp.processor_t.ev_out_data +ida_idp.processor_t.ev_out_footer +ida_idp.processor_t.ev_out_header +ida_idp.processor_t.ev_out_insn +ida_idp.processor_t.ev_out_label +ida_idp.processor_t.ev_out_mnem +ida_idp.processor_t.ev_out_operand +ida_idp.processor_t.ev_out_segend +ida_idp.processor_t.ev_out_segstart +ida_idp.processor_t.ev_out_special_item +ida_idp.processor_t.ev_rename +ida_idp.processor_t.ev_set_idp_options +ida_idp.processor_t.ev_set_proc_options +ida_idp.processor_t.ev_str2reg +ida_idp.processor_t.ev_treat_hindering_item +ida_idp.processor_t.ev_undefine +ida_idp.processor_t.ev_validate_flirt_func +ida_idp.processor_t.ev_verify_noreturn +ida_idp.processor_t.ev_verify_sp +ida_idp.processor_t.func_added +ida_idp.processor_t.get_auxpref +ida_idp.processor_t.get_idpdesc +ida_idp.processor_t.idasgn_loaded +ida_idp.processor_t.kernel_config_loaded +ida_idp.processor_t.make_code +ida_idp.processor_t.make_data +ida_idp.processor_t.renamed +ida_idp.processor_t.savebase +ida_idp.processor_t.segm_moved +ida_idp.processor_t.set_func_end +ida_idp.processor_t.set_func_start +ida_idp.processor_t.sgr_changed +ida_idp.reg_access_t +ida_idp.reg_access_t.__eq__ +ida_idp.reg_access_t.__init__ +ida_idp.reg_access_t.__ne__ +ida_idp.reg_access_t.have_common_bits +ida_idp.reg_access_t.opnum +ida_idp.reg_access_t.range +ida_idp.reg_access_t.regnum +ida_idp.reg_access_vec_t +ida_idp.reg_access_vec_t.__eq__ +ida_idp.reg_access_vec_t.__getitem__ +ida_idp.reg_access_vec_t.__init__ +ida_idp.reg_access_vec_t.__len__ +ida_idp.reg_access_vec_t.__ne__ +ida_idp.reg_access_vec_t.__setitem__ +ida_idp.reg_access_vec_t._del +ida_idp.reg_access_vec_t.add_unique +ida_idp.reg_access_vec_t.append +ida_idp.reg_access_vec_t.at +ida_idp.reg_access_vec_t.begin +ida_idp.reg_access_vec_t.capacity +ida_idp.reg_access_vec_t.clear +ida_idp.reg_access_vec_t.empty +ida_idp.reg_access_vec_t.end +ida_idp.reg_access_vec_t.erase +ida_idp.reg_access_vec_t.extend +ida_idp.reg_access_vec_t.extract +ida_idp.reg_access_vec_t.find +ida_idp.reg_access_vec_t.grow +ida_idp.reg_access_vec_t.has +ida_idp.reg_access_vec_t.inject +ida_idp.reg_access_vec_t.insert +ida_idp.reg_access_vec_t.pop_back +ida_idp.reg_access_vec_t.push_back +ida_idp.reg_access_vec_t.qclear +ida_idp.reg_access_vec_t.reserve +ida_idp.reg_access_vec_t.resize +ida_idp.reg_access_vec_t.size +ida_idp.reg_access_vec_t.swap +ida_idp.reg_access_vec_t.truncate +ida_idp.reg_accesses_t +ida_idp.reg_accesses_t.__init__ +ida_idp.reg_info_t +ida_idp.reg_info_t.__eq__ +ida_idp.reg_info_t.__ge__ +ida_idp.reg_info_t.__gt__ +ida_idp.reg_info_t.__init__ +ida_idp.reg_info_t.__le__ +ida_idp.reg_info_t.__lt__ +ida_idp.reg_info_t.__ne__ +ida_idp.reg_info_t.compare +ida_idp.reg_info_t.reg +ida_idp.reg_info_t.size +ida_idp.register_cfgopts +ida_idp.set_processor_type +ida_idp.set_target_assembler +ida_idp.sizeof_ldbl +ida_idp.str2reg +ida_idp.str2sreg +ida_ieee +ida_ieee.E_SPECIAL_EXP +ida_ieee.FPVAL_NWORDS +ida_ieee.FPV_BADARG +ida_ieee.FPV_NAN +ida_ieee.FPV_NINF +ida_ieee.FPV_NORM +ida_ieee.FPV_PINF +ida_ieee.IEEE_E +ida_ieee.IEEE_EXONE +ida_ieee.IEEE_M +ida_ieee.IEEE_NI +ida_ieee.REAL_ERROR_BADDATA +ida_ieee.REAL_ERROR_BADSTR +ida_ieee.REAL_ERROR_FORMAT +ida_ieee.REAL_ERROR_FPOVER +ida_ieee.REAL_ERROR_INTOVER +ida_ieee.REAL_ERROR_OK +ida_ieee.REAL_ERROR_RANGE +ida_ieee.REAL_ERROR_ZERODIV +ida_ieee.ecleaz +ida_ieee.fpvalue_shorts_array_t +ida_ieee.fpvalue_shorts_array_t.__getitem__ +ida_ieee.fpvalue_shorts_array_t.__init__ +ida_ieee.fpvalue_shorts_array_t.__len__ +ida_ieee.fpvalue_shorts_array_t.__setitem__ +ida_ieee.fpvalue_shorts_array_t._get_bytes +ida_ieee.fpvalue_shorts_array_t._set_bytes +ida_ieee.fpvalue_t +ida_ieee.fpvalue_t.__add__ +ida_ieee.fpvalue_t.__eq__ +ida_ieee.fpvalue_t.__ge__ +ida_ieee.fpvalue_t.__getitem__ +ida_ieee.fpvalue_t.__gt__ +ida_ieee.fpvalue_t.__init__ +ida_ieee.fpvalue_t.__iter__ +ida_ieee.fpvalue_t.__le__ +ida_ieee.fpvalue_t.__lt__ +ida_ieee.fpvalue_t.__mul__ +ida_ieee.fpvalue_t.__ne__ +ida_ieee.fpvalue_t.__repr__ +ida_ieee.fpvalue_t.__setitem__ +ida_ieee.fpvalue_t.__str__ +ida_ieee.fpvalue_t.__sub__ +ida_ieee.fpvalue_t.__truediv__ +ida_ieee.fpvalue_t._get_bytes +ida_ieee.fpvalue_t._get_float +ida_ieee.fpvalue_t._get_shorts +ida_ieee.fpvalue_t._set_bytes +ida_ieee.fpvalue_t._set_float +ida_ieee.fpvalue_t.assign +ida_ieee.fpvalue_t.clear +ida_ieee.fpvalue_t.compare +ida_ieee.fpvalue_t.copy +ida_ieee.fpvalue_t.eabs +ida_ieee.fpvalue_t.fadd +ida_ieee.fpvalue_t.fdiv +ida_ieee.fpvalue_t.fmul +ida_ieee.fpvalue_t.from_10bytes +ida_ieee.fpvalue_t.from_12bytes +ida_ieee.fpvalue_t.from_int64 +ida_ieee.fpvalue_t.from_str +ida_ieee.fpvalue_t.from_sval +ida_ieee.fpvalue_t.from_uint64 +ida_ieee.fpvalue_t.fsub +ida_ieee.fpvalue_t.get_kind +ida_ieee.fpvalue_t.is_negative +ida_ieee.fpvalue_t.mul_pow2 +ida_ieee.fpvalue_t.negate +ida_ieee.fpvalue_t.new_from_str +ida_ieee.fpvalue_t.to_10bytes +ida_ieee.fpvalue_t.to_12bytes +ida_ieee.fpvalue_t.to_int64 +ida_ieee.fpvalue_t.to_str +ida_ieee.fpvalue_t.to_sval +ida_ieee.fpvalue_t.to_uint64 +ida_kernwin +ida_kernwin.AA_CHECKABLE +ida_kernwin.AA_CHECKED +ida_kernwin.AA_ICON +ida_kernwin.AA_LABEL +ida_kernwin.AA_NONE +ida_kernwin.AA_SHORTCUT +ida_kernwin.AA_STATE +ida_kernwin.AA_TOOLTIP +ida_kernwin.AA_VISIBILITY +ida_kernwin.ACF_HAS_FIELD_DIRTREE_SELECTION +ida_kernwin.ACF_HAS_SELECTION +ida_kernwin.ACF_HAS_SOURCE +ida_kernwin.ACF_HAS_TYPE_REF +ida_kernwin.ACF_XTRN_EA +ida_kernwin.ADF_CHECKABLE +ida_kernwin.ADF_CHECKED +ida_kernwin.ADF_GLOBAL +ida_kernwin.ADF_NO_HIGHLIGHT +ida_kernwin.ADF_NO_UNDO +ida_kernwin.ADF_OT_MASK +ida_kernwin.ADF_OT_PLUGIN +ida_kernwin.ADF_OT_PLUGMOD +ida_kernwin.ADF_OT_PROCMOD +ida_kernwin.ADF_OWN_HANDLER +ida_kernwin.AHF_VERSION +ida_kernwin.AHF_VERSION_MASK +ida_kernwin.ASKBTN_BTN1 +ida_kernwin.ASKBTN_BTN2 +ida_kernwin.ASKBTN_BTN3 +ida_kernwin.ASKBTN_CANCEL +ida_kernwin.ASKBTN_NO +ida_kernwin.ASKBTN_YES +ida_kernwin.AST_DISABLE +ida_kernwin.AST_DISABLE_ALWAYS +ida_kernwin.AST_DISABLE_FOR_IDB +ida_kernwin.AST_DISABLE_FOR_WIDGET +ida_kernwin.AST_ENABLE +ida_kernwin.AST_ENABLE_ALWAYS +ida_kernwin.AST_ENABLE_FOR_IDB +ida_kernwin.AST_ENABLE_FOR_WIDGET +ida_kernwin.BWN_ADDRWATCH +ida_kernwin.BWN_BOOKMARKS +ida_kernwin.BWN_BPTS +ida_kernwin.BWN_CALLS +ida_kernwin.BWN_CALLS_CALLEES +ida_kernwin.BWN_CALLS_CALLERS +ida_kernwin.BWN_CALL_STACK +ida_kernwin.BWN_CHOOSER +ida_kernwin.BWN_CLI +ida_kernwin.BWN_CMDPALCSR +ida_kernwin.BWN_CMDPALWIN +ida_kernwin.BWN_CPUREGS +ida_kernwin.BWN_CUSTVIEW +ida_kernwin.BWN_CV_LINE_INFOS +ida_kernwin.BWN_DISASM +ida_kernwin.BWN_DISASM_ARROWS +ida_kernwin.BWN_EXPORTS +ida_kernwin.BWN_FRAME +ida_kernwin.BWN_FUNCS +ida_kernwin.BWN_HEXVIEW +ida_kernwin.BWN_IMPORTS +ida_kernwin.BWN_LOCALS +ida_kernwin.BWN_MDVIEWCSR +ida_kernwin.BWN_MODULES +ida_kernwin.BWN_NAMES +ida_kernwin.BWN_NAVBAND +ida_kernwin.BWN_NOTEPAD +ida_kernwin.BWN_OUTPUT +ida_kernwin.BWN_PROBS +ida_kernwin.BWN_PSEUDOCODE +ida_kernwin.BWN_SCRIPTS_CSR +ida_kernwin.BWN_SEARCH +ida_kernwin.BWN_SEGREGS +ida_kernwin.BWN_SEGS +ida_kernwin.BWN_SELS +ida_kernwin.BWN_SHORTCUTCSR +ida_kernwin.BWN_SHORTCUTWIN +ida_kernwin.BWN_SIGNS +ida_kernwin.BWN_SNIPPETS +ida_kernwin.BWN_SNIPPETS_CSR +ida_kernwin.BWN_SO_OFFSETS +ida_kernwin.BWN_SO_STRUCTS +ida_kernwin.BWN_SRCPTHMAP_CSR +ida_kernwin.BWN_SRCPTHUND_CSR +ida_kernwin.BWN_STKVIEW +ida_kernwin.BWN_STRINGS +ida_kernwin.BWN_THREADS +ida_kernwin.BWN_TICSR +ida_kernwin.BWN_TILIST +ida_kernwin.BWN_TILS +ida_kernwin.BWN_TIL_VIEW +ida_kernwin.BWN_TRACE +ida_kernwin.BWN_UNDOHIST +ida_kernwin.BWN_UNKNOWN +ida_kernwin.BWN_WATCH +ida_kernwin.BWN_XREFS +ida_kernwin.CDVF_LINEICONS +ida_kernwin.CDVF_NOLINES +ida_kernwin.CDVF_STATUSBAR +ida_kernwin.CDVH_LINES_ALIGNMENT +ida_kernwin.CDVH_LINES_CLICK +ida_kernwin.CDVH_LINES_DBLCLICK +ida_kernwin.CDVH_LINES_DRAWICON +ida_kernwin.CDVH_LINES_ICONMARGIN +ida_kernwin.CDVH_LINES_LINENUM +ida_kernwin.CDVH_LINES_POPUP +ida_kernwin.CDVH_LINES_RADIX +ida_kernwin.CDVH_SRCVIEW +ida_kernwin.CDVH_USERDATA +ida_kernwin.CH2_LAZY_LOADED +ida_kernwin.CHCOL_DEC +ida_kernwin.CHCOL_DEFHIDDEN +ida_kernwin.CHCOL_DRAGHINT +ida_kernwin.CHCOL_EA +ida_kernwin.CHCOL_FNAME +ida_kernwin.CHCOL_FORMAT +ida_kernwin.CHCOL_HEX +ida_kernwin.CHCOL_INODENAME +ida_kernwin.CHCOL_PATH +ida_kernwin.CHCOL_PLAIN +ida_kernwin.CHITEM_BOLD +ida_kernwin.CHITEM_GRAY +ida_kernwin.CHITEM_ITALIC +ida_kernwin.CHITEM_STRIKE +ida_kernwin.CHITEM_UNDER +ida_kernwin.CHOOSER_NOMAINMENU +ida_kernwin.CHOOSER_NOSTATUSBAR +ida_kernwin.CH_ATTRS +ida_kernwin.CH_BUILTIN_MASK +ida_kernwin.CH_CAN_DEL +ida_kernwin.CH_CAN_EDIT +ida_kernwin.CH_CAN_INS +ida_kernwin.CH_CAN_REFRESH +ida_kernwin.CH_FORCE_DEFAULT +ida_kernwin.CH_HAS_DIFF +ida_kernwin.CH_HAS_DIRTREE +ida_kernwin.CH_KEEP +ida_kernwin.CH_MODAL +ida_kernwin.CH_MULTI +ida_kernwin.CH_MULTI_EDIT +ida_kernwin.CH_NOBTNS +ida_kernwin.CH_NON_PERSISTED_TREE +ida_kernwin.CH_NO_FILTER +ida_kernwin.CH_NO_SORT +ida_kernwin.CH_NO_STATUS_BAR +ida_kernwin.CH_QFLT +ida_kernwin.CH_QFTYP_DEFAULT +ida_kernwin.CH_QFTYP_FUZZY +ida_kernwin.CH_QFTYP_NORMAL +ida_kernwin.CH_QFTYP_REGEX +ida_kernwin.CH_QFTYP_WHOLE_WORDS +ida_kernwin.CH_RENAME_IS_EDIT +ida_kernwin.CH_RESTORE +ida_kernwin.CH_TM_FOLDERS_ONLY +ida_kernwin.CH_TM_FULL_TREE +ida_kernwin.CH_TM_NO_TREE +ida_kernwin.CK_EXTRA1 +ida_kernwin.CK_EXTRA10 +ida_kernwin.CK_EXTRA11 +ida_kernwin.CK_EXTRA12 +ida_kernwin.CK_EXTRA13 +ida_kernwin.CK_EXTRA14 +ida_kernwin.CK_EXTRA15 +ida_kernwin.CK_EXTRA16 +ida_kernwin.CK_EXTRA2 +ida_kernwin.CK_EXTRA3 +ida_kernwin.CK_EXTRA4 +ida_kernwin.CK_EXTRA5 +ida_kernwin.CK_EXTRA6 +ida_kernwin.CK_EXTRA7 +ida_kernwin.CK_EXTRA8 +ida_kernwin.CK_EXTRA9 +ida_kernwin.CK_TRACE +ida_kernwin.CK_TRACE_OVL +ida_kernwin.CLNL_FINDCMT +ida_kernwin.CLNL_LTRIM +ida_kernwin.CLNL_RTRIM +ida_kernwin.CREATETB_ADV +ida_kernwin.CVH_CLICK +ida_kernwin.CVH_CLOSE +ida_kernwin.CVH_CURPOS +ida_kernwin.CVH_DBLCLICK +ida_kernwin.CVH_HELP +ida_kernwin.CVH_KEYDOWN +ida_kernwin.CVH_MOUSEMOVE +ida_kernwin.CVH_POPUP +ida_kernwin.CVH_QT_AWARE +ida_kernwin.CVLF_USE_MOUSE +ida_kernwin.CVNF_ACT +ida_kernwin.CVNF_JUMP +ida_kernwin.CVNF_LAZY +ida_kernwin.Choose +ida_kernwin.Choose.ALREADY_EXISTS +ida_kernwin.Choose.Activate +ida_kernwin.Choose.AddCommand +ida_kernwin.Choose.CHCOL_DEC +ida_kernwin.Choose.CHCOL_DEFHIDDEN +ida_kernwin.Choose.CHCOL_DRAGHINT +ida_kernwin.Choose.CHCOL_EA +ida_kernwin.Choose.CHCOL_FNAME +ida_kernwin.Choose.CHCOL_FORMAT +ida_kernwin.Choose.CHCOL_HEX +ida_kernwin.Choose.CHCOL_INODENAME +ida_kernwin.Choose.CHCOL_PATH +ida_kernwin.Choose.CHCOL_PLAIN +ida_kernwin.Choose.CH_ATTRS +ida_kernwin.Choose.CH_BUILTIN_MASK +ida_kernwin.Choose.CH_CAN_DEL +ida_kernwin.Choose.CH_CAN_EDIT +ida_kernwin.Choose.CH_CAN_INS +ida_kernwin.Choose.CH_CAN_REFRESH +ida_kernwin.Choose.CH_FORCE_DEFAULT +ida_kernwin.Choose.CH_HAS_DIFF +ida_kernwin.Choose.CH_HAS_DIRTREE +ida_kernwin.Choose.CH_MODAL +ida_kernwin.Choose.CH_MULTI +ida_kernwin.Choose.CH_NOBTNS +ida_kernwin.Choose.CH_NOIDB +ida_kernwin.Choose.CH_NO_STATUS_BAR +ida_kernwin.Choose.CH_QFLT +ida_kernwin.Choose.CH_QFTYP_DEFAULT +ida_kernwin.Choose.CH_QFTYP_FUZZY +ida_kernwin.Choose.CH_QFTYP_NORMAL +ida_kernwin.Choose.CH_QFTYP_REGEX +ida_kernwin.Choose.CH_QFTYP_WHOLE_WORDS +ida_kernwin.Choose.CH_RENAME_IS_EDIT +ida_kernwin.Choose.CH_RESTORE +ida_kernwin.Choose.Close +ida_kernwin.Choose.EMPTY_CHOOSER +ida_kernwin.Choose.Embedded +ida_kernwin.Choose.GetEmbSelection +ida_kernwin.Choose.GetWidget +ida_kernwin.Choose.NO_ATTR +ida_kernwin.Choose.NO_SELECTION +ida_kernwin.Choose.OnClose +ida_kernwin.Choose.OnDeleteLine +ida_kernwin.Choose.OnEditLine +ida_kernwin.Choose.OnGetDirTree +ida_kernwin.Choose.OnGetEA +ida_kernwin.Choose.OnGetIcon +ida_kernwin.Choose.OnGetLine +ida_kernwin.Choose.OnGetLineAttr +ida_kernwin.Choose.OnGetSize +ida_kernwin.Choose.OnIndexToDiffpos +ida_kernwin.Choose.OnIndexToInode +ida_kernwin.Choose.OnInit +ida_kernwin.Choose.OnInsertLine +ida_kernwin.Choose.OnLazyLoadDir +ida_kernwin.Choose.OnPopup +ida_kernwin.Choose.OnRefresh +ida_kernwin.Choose.OnSelectLine +ida_kernwin.Choose.OnSelectionChange +ida_kernwin.Choose.Refresh +ida_kernwin.Choose.Show +ida_kernwin.Choose.UI_Hooks_Trampoline +ida_kernwin.Choose.UI_Hooks_Trampoline.__init__ +ida_kernwin.Choose.UI_Hooks_Trampoline.populating_widget_popup +ida_kernwin.Choose.__init__ +ida_kernwin.Choose.__init__._qccb +ida_kernwin.Choose.adjust_last_item +ida_kernwin.CustomIDAMemo +ida_kernwin.CustomIDAMemo.CreateGroups +ida_kernwin.CustomIDAMemo.DelNodesInfos +ida_kernwin.CustomIDAMemo.DeleteGroups +ida_kernwin.CustomIDAMemo.GetCurrentRendererType +ida_kernwin.CustomIDAMemo.GetNodeInfo +ida_kernwin.CustomIDAMemo.GetWidget +ida_kernwin.CustomIDAMemo.GetWidgetAsGraphViewer +ida_kernwin.CustomIDAMemo.Refresh +ida_kernwin.CustomIDAMemo.SetCurrentRendererType +ida_kernwin.CustomIDAMemo.SetGroupsVisibility +ida_kernwin.CustomIDAMemo.SetNodeInfo +ida_kernwin.CustomIDAMemo.SetNodesInfos +ida_kernwin.CustomIDAMemo._OnBind +ida_kernwin.CustomIDAMemo.__init__ +ida_kernwin.CustomIDAMemo._dummy_cb +ida_kernwin.CustomIDAMemo._get_cb +ida_kernwin.CustomIDAMemo._get_cb_arity +ida_kernwin.CustomIDAMemo._graph_item_tuple +ida_kernwin.CustomIDAMemo.view_activated +ida_kernwin.CustomIDAMemo.view_click +ida_kernwin.CustomIDAMemo.view_close +ida_kernwin.CustomIDAMemo.view_curpos +ida_kernwin.CustomIDAMemo.view_dblclick +ida_kernwin.CustomIDAMemo.view_deactivated +ida_kernwin.CustomIDAMemo.view_keydown +ida_kernwin.CustomIDAMemo.view_loc_changed +ida_kernwin.CustomIDAMemo.view_mouse_moved +ida_kernwin.CustomIDAMemo.view_mouse_over +ida_kernwin.CustomIDAMemo.view_switched +ida_kernwin.DP_BEFORE +ida_kernwin.DP_BOTTOM +ida_kernwin.DP_FLOATING +ida_kernwin.DP_INSIDE +ida_kernwin.DP_LEFT +ida_kernwin.DP_RIGHT +ida_kernwin.DP_SZHINT +ida_kernwin.DP_TAB +ida_kernwin.DP_TOP +ida_kernwin.Form +ida_kernwin.Form.Add +ida_kernwin.Form.AddControls +ida_kernwin.Form.ButtonInput +ida_kernwin.Form.ButtonInput.__init__ +ida_kernwin.Form.ButtonInput.helper_cb +ida_kernwin.Form.ButtonInput.is_input_field +ida_kernwin.Form.ChkGroupControl +ida_kernwin.Form.ChkGroupControl.ItemClass +ida_kernwin.Form.ChkGroupControl.__init__ +ida_kernwin.Form.ChkGroupItemControl +ida_kernwin.Form.ChkGroupItemControl.__get_value +ida_kernwin.Form.ChkGroupItemControl.__init__ +ida_kernwin.Form.ChkGroupItemControl.__set_value +ida_kernwin.Form.ChkGroupItemControl.checked +ida_kernwin.Form.Close +ida_kernwin.Form.ColorInput +ida_kernwin.Form.ColorInput.__init__ +ida_kernwin.Form.Compile +ida_kernwin.Form.CompileEx +ida_kernwin.Form.CompileEx.next_control +ida_kernwin.Form.Compiled +ida_kernwin.Form.Control +ida_kernwin.Form.Control.__init__ +ida_kernwin.Form.Control.free +ida_kernwin.Form.Control.get_arg +ida_kernwin.Form.Control.get_tag +ida_kernwin.Form.Control.is_input_field +ida_kernwin.Form.ControlToFieldTypeIdAndSize +ida_kernwin.Form.DirInput +ida_kernwin.Form.DirInput.__init__ +ida_kernwin.Form.DropdownListControl +ida_kernwin.Form.DropdownListControl.__get_selval +ida_kernwin.Form.DropdownListControl.__init__ +ida_kernwin.Form.DropdownListControl.__set_selval +ida_kernwin.Form.DropdownListControl.free +ida_kernwin.Form.DropdownListControl.selval +ida_kernwin.Form.DropdownListControl.set_items +ida_kernwin.Form.EmbeddedChooserControl +ida_kernwin.Form.EmbeddedChooserControl.__get_selection__ +ida_kernwin.Form.EmbeddedChooserControl.__init__ +ida_kernwin.Form.EmbeddedChooserControl.free +ida_kernwin.Form.EmbeddedChooserControl.selection +ida_kernwin.Form.EmbeddedChooserControl.value +ida_kernwin.Form.EnableField +ida_kernwin.Form.Execute +ida_kernwin.Form.FT_ADDR +ida_kernwin.Form.FT_ASCII +ida_kernwin.Form.FT_BIN +ida_kernwin.Form.FT_BUTTON +ida_kernwin.Form.FT_CHAR +ida_kernwin.Form.FT_COLOR +ida_kernwin.Form.FT_DEC +ida_kernwin.Form.FT_DIR +ida_kernwin.Form.FT_DROPDOWN_LIST +ida_kernwin.Form.FT_ECHOOSER +ida_kernwin.Form.FT_FILE +ida_kernwin.Form.FT_FORMCHG +ida_kernwin.Form.FT_HEX +ida_kernwin.Form.FT_HTML_LABEL +ida_kernwin.Form.FT_IDENT +ida_kernwin.Form.FT_INT64 +ida_kernwin.Form.FT_MULTI_LINE_TEXT +ida_kernwin.Form.FT_OCT +ida_kernwin.Form.FT_RAWHEX +ida_kernwin.Form.FT_SEG +ida_kernwin.Form.FT_SHEX +ida_kernwin.Form.FT_TYPE +ida_kernwin.Form.FT_UINT64 +ida_kernwin.Form.FileInput +ida_kernwin.Form.FileInput.__init__ +ida_kernwin.Form.FindControlById +ida_kernwin.Form.FormChangeCb +ida_kernwin.Form.FormChangeCb.__init__ +ida_kernwin.Form.FormChangeCb.free +ida_kernwin.Form.FormChangeCb.get_tag +ida_kernwin.Form.FormChangeCb.helper_cb +ida_kernwin.Form.Free +ida_kernwin.Form.GetControlValue +ida_kernwin.Form.GetFocusedField +ida_kernwin.Form.GroupControl +ida_kernwin.Form.GroupControl.__init__ +ida_kernwin.Form.GroupControl._reset +ida_kernwin.Form.GroupControl.get_tag +ida_kernwin.Form.GroupControl.next_child_pos +ida_kernwin.Form.GroupItemControl +ida_kernwin.Form.GroupItemControl.__init__ +ida_kernwin.Form.GroupItemControl.assign_pos +ida_kernwin.Form.GroupItemControl.get_tag +ida_kernwin.Form.GroupItemControl.is_input_field +ida_kernwin.Form.InputControl +ida_kernwin.Form.InputControl.__init__ +ida_kernwin.Form.InputControl.get_tag +ida_kernwin.Form.InputControl.is_input_field +ida_kernwin.Form.LabelControl +ida_kernwin.Form.LabelControl.__init__ +ida_kernwin.Form.LabelControl.get_tag +ida_kernwin.Form.MoveField +ida_kernwin.Form.MultiLineTextControl +ida_kernwin.Form.MultiLineTextControl.__init__ +ida_kernwin.Form.MultiLineTextControl.free +ida_kernwin.Form.NumericArgument +ida_kernwin.Form.NumericArgument.__init__ +ida_kernwin.Form.NumericArgument.__set_value +ida_kernwin.Form.NumericInput +ida_kernwin.Form.NumericInput.__init__ +ida_kernwin.Form.NumericLabel +ida_kernwin.Form.NumericLabel.__init__ +ida_kernwin.Form.Open +ida_kernwin.Form.RadGroupControl +ida_kernwin.Form.RadGroupControl.__init__ +ida_kernwin.Form.RadGroupItemControl +ida_kernwin.Form.RadGroupItemControl.__get_value +ida_kernwin.Form.RadGroupItemControl.__init__ +ida_kernwin.Form.RadGroupItemControl.__set_value +ida_kernwin.Form.RadGroupItemControl.selected +ida_kernwin.Form.RefreshField +ida_kernwin.Form.SetControlValue +ida_kernwin.Form.SetFocusedField +ida_kernwin.Form.ShowField +ida_kernwin.Form.StringArgument +ida_kernwin.Form.StringArgument.__get_value +ida_kernwin.Form.StringArgument.__init__ +ida_kernwin.Form.StringArgument.__set_value +ida_kernwin.Form.StringInput +ida_kernwin.Form.StringInput.__init__ +ida_kernwin.Form.StringLabel +ida_kernwin.Form.StringLabel.__init__ +ida_kernwin.Form._AddGroup +ida_kernwin.Form._ChkCompiled +ida_kernwin.Form._FT_USHORT +ida_kernwin.Form._ParseFormTitle +ida_kernwin.Form.__getitem__ +ida_kernwin.Form.__init__ +ida_kernwin.Form._reset +ida_kernwin.Form.create_string_buffer +ida_kernwin.Form.fieldtype_to_ctype +ida_kernwin.GCRF_ALL +ida_kernwin.GCRF_CURRENT +ida_kernwin.GCRF_HEADER +ida_kernwin.GCRF_SELECTION +ida_kernwin.HIF_IDENTIFIER +ida_kernwin.HIF_LOCKED +ida_kernwin.HIF_NOCASE +ida_kernwin.HIF_REGISTER +ida_kernwin.HIF_SLOT_0 +ida_kernwin.HIF_SLOT_1 +ida_kernwin.HIF_SLOT_2 +ida_kernwin.HIF_SLOT_3 +ida_kernwin.HIF_SLOT_4 +ida_kernwin.HIF_SLOT_5 +ida_kernwin.HIF_SLOT_6 +ida_kernwin.HIF_SLOT_7 +ida_kernwin.HIF_SLOT_SHIFT +ida_kernwin.HIF_USE_SLOT +ida_kernwin.HIST_CMD +ida_kernwin.HIST_CMT +ida_kernwin.HIST_DIR +ida_kernwin.HIST_FILE +ida_kernwin.HIST_IDENT +ida_kernwin.HIST_IDENT2 +ida_kernwin.HIST_SEG +ida_kernwin.HIST_SRCH +ida_kernwin.HIST_TYPE +ida_kernwin.IDAViewWrapper +ida_kernwin.IDAViewWrapper.Bind +ida_kernwin.IDAViewWrapper.Unbind +ida_kernwin.IDAViewWrapper.__init__ +ida_kernwin.IDA_DEBUG_ACCESSIBILITY +ida_kernwin.IDA_DEBUG_ALREADY +ida_kernwin.IDA_DEBUG_ALWAYS +ida_kernwin.IDA_DEBUG_APPCALL +ida_kernwin.IDA_DEBUG_CHECKMEM +ida_kernwin.IDA_DEBUG_CONFIG +ida_kernwin.IDA_DEBUG_DBGINFO +ida_kernwin.IDA_DEBUG_DEBUGGER +ida_kernwin.IDA_DEBUG_DEMANGLE +ida_kernwin.IDA_DEBUG_DREFS +ida_kernwin.IDA_DEBUG_FLIRT +ida_kernwin.IDA_DEBUG_IDP +ida_kernwin.IDA_DEBUG_IDS +ida_kernwin.IDA_DEBUG_INTERNET +ida_kernwin.IDA_DEBUG_LDR +ida_kernwin.IDA_DEBUG_LICENSE +ida_kernwin.IDA_DEBUG_LUMINA +ida_kernwin.IDA_DEBUG_NETWORK +ida_kernwin.IDA_DEBUG_NOTIFY +ida_kernwin.IDA_DEBUG_OFFSET +ida_kernwin.IDA_DEBUG_PLUGIN +ida_kernwin.IDA_DEBUG_QUEUE +ida_kernwin.IDA_DEBUG_RANGECB +ida_kernwin.IDA_DEBUG_REGEX +ida_kernwin.IDA_DEBUG_ROLLBACK +ida_kernwin.IDA_DEBUG_SIMPLEX +ida_kernwin.IDA_DEBUG_SRCDBG +ida_kernwin.IDA_DEBUG_SUBPROC +ida_kernwin.IDA_DEBUG_THEMES +ida_kernwin.IDA_DEBUG_TIL +ida_kernwin.IDCHK_ARG +ida_kernwin.IDCHK_KEY +ida_kernwin.IDCHK_MAX +ida_kernwin.IDCHK_OK +ida_kernwin.IWID_ADDRWATCH +ida_kernwin.IWID_ALL +ida_kernwin.IWID_ANY_LISTING +ida_kernwin.IWID_BOOKMARKS +ida_kernwin.IWID_BPTS +ida_kernwin.IWID_CALLS +ida_kernwin.IWID_CALLS_CALLEES +ida_kernwin.IWID_CALLS_CALLERS +ida_kernwin.IWID_CALL_STACK +ida_kernwin.IWID_CHOOSER +ida_kernwin.IWID_CLI +ida_kernwin.IWID_CMDPALCSR +ida_kernwin.IWID_CMDPALWIN +ida_kernwin.IWID_CPUREGS +ida_kernwin.IWID_CUSTVIEW +ida_kernwin.IWID_CV_LINE_INFOS +ida_kernwin.IWID_DISASM +ida_kernwin.IWID_DISASM_ARROWS +ida_kernwin.IWID_EA_LISTING +ida_kernwin.IWID_EXPORTS +ida_kernwin.IWID_FRAME +ida_kernwin.IWID_FUNCS +ida_kernwin.IWID_HEXVIEW +ida_kernwin.IWID_IMPORTS +ida_kernwin.IWID_LOCALS +ida_kernwin.IWID_MDVIEWCSR +ida_kernwin.IWID_MODULES +ida_kernwin.IWID_NAMES +ida_kernwin.IWID_NAVBAND +ida_kernwin.IWID_NOTEPAD +ida_kernwin.IWID_OUTPUT +ida_kernwin.IWID_PROBS +ida_kernwin.IWID_PSEUDOCODE +ida_kernwin.IWID_SCRIPTS_CSR +ida_kernwin.IWID_SEARCH +ida_kernwin.IWID_SEGREGS +ida_kernwin.IWID_SEGS +ida_kernwin.IWID_SELS +ida_kernwin.IWID_SHORTCUTCSR +ida_kernwin.IWID_SHORTCUTWIN +ida_kernwin.IWID_SIGNS +ida_kernwin.IWID_SNIPPETS +ida_kernwin.IWID_SNIPPETS_CSR +ida_kernwin.IWID_SO_OFFSETS +ida_kernwin.IWID_SO_STRUCTS +ida_kernwin.IWID_SRCPTHMAP_CSR +ida_kernwin.IWID_SRCPTHUND_CSR +ida_kernwin.IWID_STKVIEW +ida_kernwin.IWID_STRINGS +ida_kernwin.IWID_THREADS +ida_kernwin.IWID_TICSR +ida_kernwin.IWID_TILIST +ida_kernwin.IWID_TILS +ida_kernwin.IWID_TIL_VIEW +ida_kernwin.IWID_TRACE +ida_kernwin.IWID_UNDOHIST +ida_kernwin.IWID_WATCH +ida_kernwin.IWID_XREFS +ida_kernwin.LROEF_CPS_RANGE +ida_kernwin.LROEF_FULL_LINE +ida_kernwin.MFF_FAST +ida_kernwin.MFF_NOWAIT +ida_kernwin.MFF_READ +ida_kernwin.MFF_WRITE +ida_kernwin.PCF_EA_CAPABLE +ida_kernwin.PCF_MAKEPLACE_ALLOCATES +ida_kernwin.PluginForm +ida_kernwin.PluginForm.Close +ida_kernwin.PluginForm.GetWidget +ida_kernwin.PluginForm.OnClose +ida_kernwin.PluginForm.OnCreate +ida_kernwin.PluginForm.QtWidgetToTWidget +ida_kernwin.PluginForm.Show +ida_kernwin.PluginForm.WCLS_DELETE_LATER +ida_kernwin.PluginForm.WCLS_DONT_SAVE_SIZE +ida_kernwin.PluginForm.WCLS_NO_CONTEXT +ida_kernwin.PluginForm.WCLS_SAVE +ida_kernwin.PluginForm.WOPN_DP_BEFORE +ida_kernwin.PluginForm.WOPN_DP_BOTTOM +ida_kernwin.PluginForm.WOPN_DP_FLOATING +ida_kernwin.PluginForm.WOPN_DP_INSIDE +ida_kernwin.PluginForm.WOPN_DP_LEFT +ida_kernwin.PluginForm.WOPN_DP_RIGHT +ida_kernwin.PluginForm.WOPN_DP_SZHINT +ida_kernwin.PluginForm.WOPN_DP_TAB +ida_kernwin.PluginForm.WOPN_DP_TOP +ida_kernwin.PluginForm.WOPN_PERSIST +ida_kernwin.PluginForm.WOPN_RESTORE +ida_kernwin.PluginForm.__init__ +ida_kernwin.PluginForm._ensure_widget_deps +ida_kernwin.RENADDR_HR +ida_kernwin.RENADDR_IDA +ida_kernwin.S2EAOPT_NOCALC +ida_kernwin.SETMENU_APP +ida_kernwin.SETMENU_ENSURE_SEP +ida_kernwin.SETMENU_FIRST +ida_kernwin.SETMENU_INS +ida_kernwin.SVF_COPY_LINES +ida_kernwin.SVF_LINES_BYPTR +ida_kernwin.TCCPT_IDAPLACE +ida_kernwin.TCCPT_INVALID +ida_kernwin.TCCPT_PLACE +ida_kernwin.TCCPT_SIMPLELINE_PLACE +ida_kernwin.TCCPT_TIPLACE +ida_kernwin.TCCRT_FLAT +ida_kernwin.TCCRT_GRAPH +ida_kernwin.TCCRT_INVALID +ida_kernwin.TCCRT_PROXIMITY +ida_kernwin.TWidget__from_ptrval__ +ida_kernwin.UIJMP_ACTIVATE +ida_kernwin.UIJMP_ANYVIEW +ida_kernwin.UIJMP_DONTPUSH +ida_kernwin.UIJMP_IDAVIEW +ida_kernwin.UIJMP_IDAVIEW_NEW +ida_kernwin.UI_Hooks +ida_kernwin.UI_Hooks.__disown__ +ida_kernwin.UI_Hooks.__init__ +ida_kernwin.UI_Hooks.create_desktop_widget +ida_kernwin.UI_Hooks.current_widget_changed +ida_kernwin.UI_Hooks.database_closed +ida_kernwin.UI_Hooks.database_inited +ida_kernwin.UI_Hooks.debugger_menu_change +ida_kernwin.UI_Hooks.desktop_applied +ida_kernwin.UI_Hooks.destroying_plugmod +ida_kernwin.UI_Hooks.destroying_procmod +ida_kernwin.UI_Hooks.finish_populating_widget_popup +ida_kernwin.UI_Hooks.get_chooser_item_attrs +ida_kernwin.UI_Hooks.get_custom_viewer_hint +ida_kernwin.UI_Hooks.get_ea_hint +ida_kernwin.UI_Hooks.get_item_hint +ida_kernwin.UI_Hooks.get_lines_rendering_info +ida_kernwin.UI_Hooks.get_widget_config +ida_kernwin.UI_Hooks.hook +ida_kernwin.UI_Hooks.idcstart +ida_kernwin.UI_Hooks.idcstop +ida_kernwin.UI_Hooks.initing_database +ida_kernwin.UI_Hooks.plugin_loaded +ida_kernwin.UI_Hooks.plugin_unloading +ida_kernwin.UI_Hooks.populating_widget_popup +ida_kernwin.UI_Hooks.postprocess_action +ida_kernwin.UI_Hooks.preprocess_action +ida_kernwin.UI_Hooks.range +ida_kernwin.UI_Hooks.ready_to_run +ida_kernwin.UI_Hooks.resume +ida_kernwin.UI_Hooks.saved +ida_kernwin.UI_Hooks.saving +ida_kernwin.UI_Hooks.screen_ea_changed +ida_kernwin.UI_Hooks.set_widget_config +ida_kernwin.UI_Hooks.suspend +ida_kernwin.UI_Hooks.unhook +ida_kernwin.UI_Hooks.updated_actions +ida_kernwin.UI_Hooks.updating_actions +ida_kernwin.UI_Hooks.widget_closing +ida_kernwin.UI_Hooks.widget_invisible +ida_kernwin.UI_Hooks.widget_visible +ida_kernwin.VES_SHIFT +ida_kernwin.VME_LEFT_BUTTON +ida_kernwin.VME_MID_BUTTON +ida_kernwin.VME_RIGHT_BUTTON +ida_kernwin.VME_UNKNOWN +ida_kernwin.View_Hooks +ida_kernwin.View_Hooks.__disown__ +ida_kernwin.View_Hooks.__init__ +ida_kernwin.View_Hooks.hook +ida_kernwin.View_Hooks.unhook +ida_kernwin.View_Hooks.view_activated +ida_kernwin.View_Hooks.view_click +ida_kernwin.View_Hooks.view_close +ida_kernwin.View_Hooks.view_created +ida_kernwin.View_Hooks.view_curpos +ida_kernwin.View_Hooks.view_dblclick +ida_kernwin.View_Hooks.view_deactivated +ida_kernwin.View_Hooks.view_keydown +ida_kernwin.View_Hooks.view_loc_changed +ida_kernwin.View_Hooks.view_mouse_moved +ida_kernwin.View_Hooks.view_mouse_over +ida_kernwin.View_Hooks.view_switched +ida_kernwin.WCLS_DELETE_LATER +ida_kernwin.WCLS_DONT_SAVE_SIZE +ida_kernwin.WCLS_NO_CONTEXT +ida_kernwin.WCLS_SAVE +ida_kernwin.WOPN_CLOSED_BY_ESC +ida_kernwin.WOPN_DP_BEFORE +ida_kernwin.WOPN_DP_BOTTOM +ida_kernwin.WOPN_DP_FLOATING +ida_kernwin.WOPN_DP_INSIDE +ida_kernwin.WOPN_DP_LEFT +ida_kernwin.WOPN_DP_RIGHT +ida_kernwin.WOPN_DP_SZHINT +ida_kernwin.WOPN_DP_TAB +ida_kernwin.WOPN_DP_TOP +ida_kernwin.WOPN_NOT_CLOSED_BY_ESC +ida_kernwin.WOPN_PERSIST +ida_kernwin.WOPN_RESTORE +ida_kernwin.__qtimer_t +ida_kernwin.__qtimer_t.__init__ +ida_kernwin._ask_addr +ida_kernwin._ask_long +ida_kernwin._ask_seg +ida_kernwin._kludge_force_declare_dirspec_t +ida_kernwin._kludge_force_declare_dirtree_t +ida_kernwin.action_ctx_base_cur_sel_t +ida_kernwin.action_ctx_base_cur_sel_t.__init__ +ida_kernwin.action_ctx_base_cur_sel_t.reset +ida_kernwin.action_ctx_base_cur_sel_t.to +ida_kernwin.action_ctx_base_t +ida_kernwin.action_ctx_base_t.__init__ +ida_kernwin.action_ctx_base_t.action +ida_kernwin.action_ctx_base_t.chooser +ida_kernwin.action_ctx_base_t.chooser_selection +ida_kernwin.action_ctx_base_t.cur_ea +ida_kernwin.action_ctx_base_t.cur_fchunk +ida_kernwin.action_ctx_base_t.cur_flags +ida_kernwin.action_ctx_base_t.cur_func +ida_kernwin.action_ctx_base_t.cur_seg +ida_kernwin.action_ctx_base_t.cur_sel +ida_kernwin.action_ctx_base_t.cur_value +ida_kernwin.action_ctx_base_t.dirtree_selection +ida_kernwin.action_ctx_base_t.focus +ida_kernwin.action_ctx_base_t.graph +ida_kernwin.action_ctx_base_t.graph_selection +ida_kernwin.action_ctx_base_t.has_flag +ida_kernwin.action_ctx_base_t.hovered +ida_kernwin.action_ctx_base_t.regname +ida_kernwin.action_ctx_base_t.reset +ida_kernwin.action_ctx_base_t.type_ref +ida_kernwin.action_ctx_base_t.widget_title +ida_kernwin.action_ctx_base_t.widget_type +ida_kernwin.action_desc_t +ida_kernwin.action_desc_t.__init__ +ida_kernwin.action_desc_t.cb +ida_kernwin.action_desc_t.flags +ida_kernwin.action_desc_t.icon +ida_kernwin.action_desc_t.label +ida_kernwin.action_desc_t.name +ida_kernwin.action_desc_t.owner +ida_kernwin.action_desc_t.shortcut +ida_kernwin.action_desc_t.tooltip +ida_kernwin.action_handler_t +ida_kernwin.action_handler_t.__init__ +ida_kernwin.action_handler_t.activate +ida_kernwin.action_handler_t.update +ida_kernwin.activate_widget +ida_kernwin.add_hotkey +ida_kernwin.add_idc_hotkey +ida_kernwin.add_spaces +ida_kernwin.addon_count +ida_kernwin.addon_info_t +ida_kernwin.addon_info_t.__init__ +ida_kernwin.analyzer_options +ida_kernwin.ask_addr +ida_kernwin.ask_buttons +ida_kernwin.ask_file +ida_kernwin.ask_for_feedback +ida_kernwin.ask_form +ida_kernwin.ask_ident +ida_kernwin.ask_ident2 +ida_kernwin.ask_long +ida_kernwin.ask_seg +ida_kernwin.ask_str +ida_kernwin.ask_text +ida_kernwin.ask_yn +ida_kernwin.atoea +ida_kernwin.attach_action_to_menu +ida_kernwin.attach_action_to_popup +ida_kernwin.attach_action_to_toolbar +ida_kernwin.attach_dynamic_action_to_popup +ida_kernwin.banner +ida_kernwin.beep +ida_kernwin.call_nav_colorizer +ida_kernwin.cancel_exec_request +ida_kernwin.cancel_thread_exec_requests +ida_kernwin.choose_activate +ida_kernwin.choose_choose +ida_kernwin.choose_close +ida_kernwin.choose_create_embedded_chobj +ida_kernwin.choose_entry +ida_kernwin.choose_enum +ida_kernwin.choose_enum_by_value +ida_kernwin.choose_find +ida_kernwin.choose_func +ida_kernwin.choose_get_widget +ida_kernwin.choose_idasgn +ida_kernwin.choose_name +ida_kernwin.choose_refresh +ida_kernwin.choose_segm +ida_kernwin.choose_srcp +ida_kernwin.choose_stkvar_xref +ida_kernwin.choose_struct +ida_kernwin.choose_til +ida_kernwin.choose_xref +ida_kernwin.chooser_base_t +ida_kernwin.chooser_base_t.__init__ +ida_kernwin.chooser_base_t.ask_item_attrs +ida_kernwin.chooser_base_t.can_del +ida_kernwin.chooser_base_t.can_edit +ida_kernwin.chooser_base_t.can_filter +ida_kernwin.chooser_base_t.can_ins +ida_kernwin.chooser_base_t.can_refresh +ida_kernwin.chooser_base_t.can_sort +ida_kernwin.chooser_base_t.columns +ida_kernwin.chooser_base_t.deflt_col +ida_kernwin.chooser_base_t.get_builtin_number +ida_kernwin.chooser_base_t.get_count +ida_kernwin.chooser_base_t.get_ea +ida_kernwin.chooser_base_t.get_quick_filter_initial_mode +ida_kernwin.chooser_base_t.get_row +ida_kernwin.chooser_base_t.has_diff_capability +ida_kernwin.chooser_base_t.has_dirtree +ida_kernwin.chooser_base_t.has_inode_to_index +ida_kernwin.chooser_base_t.has_widget_lifecycle +ida_kernwin.chooser_base_t.header +ida_kernwin.chooser_base_t.height +ida_kernwin.chooser_base_t.icon +ida_kernwin.chooser_base_t.is_dirtree_persisted +ida_kernwin.chooser_base_t.is_force_default +ida_kernwin.chooser_base_t.is_lazy_loaded +ida_kernwin.chooser_base_t.is_modal +ida_kernwin.chooser_base_t.is_multi +ida_kernwin.chooser_base_t.is_quick_filter_visible_initially +ida_kernwin.chooser_base_t.is_same +ida_kernwin.chooser_base_t.is_status_bar_hidden +ida_kernwin.chooser_base_t.popup_allowed +ida_kernwin.chooser_base_t.popup_names +ida_kernwin.chooser_base_t.should_rename_trigger_edit +ida_kernwin.chooser_base_t.should_restore_geometry +ida_kernwin.chooser_base_t.title +ida_kernwin.chooser_base_t.width +ida_kernwin.chooser_base_t.widths +ida_kernwin.chooser_base_t.x0 +ida_kernwin.chooser_item_attrs_t +ida_kernwin.chooser_item_attrs_t.__eq__ +ida_kernwin.chooser_item_attrs_t.__init__ +ida_kernwin.chooser_item_attrs_t.color +ida_kernwin.chooser_item_attrs_t.flags +ida_kernwin.chooser_item_attrs_t.reset +ida_kernwin.chooser_row_info_t +ida_kernwin.chooser_row_info_t.__eq__ +ida_kernwin.chooser_row_info_t.__init__ +ida_kernwin.chooser_row_info_t.__ne__ +ida_kernwin.chooser_row_info_t.attrs +ida_kernwin.chooser_row_info_t.icon +ida_kernwin.chooser_row_info_t.texts +ida_kernwin.chooser_row_info_vec_t +ida_kernwin.chooser_row_info_vec_t.__eq__ +ida_kernwin.chooser_row_info_vec_t.__getitem__ +ida_kernwin.chooser_row_info_vec_t.__init__ +ida_kernwin.chooser_row_info_vec_t.__len__ +ida_kernwin.chooser_row_info_vec_t.__ne__ +ida_kernwin.chooser_row_info_vec_t.__setitem__ +ida_kernwin.chooser_row_info_vec_t._del +ida_kernwin.chooser_row_info_vec_t.add_unique +ida_kernwin.chooser_row_info_vec_t.append +ida_kernwin.chooser_row_info_vec_t.at +ida_kernwin.chooser_row_info_vec_t.begin +ida_kernwin.chooser_row_info_vec_t.capacity +ida_kernwin.chooser_row_info_vec_t.clear +ida_kernwin.chooser_row_info_vec_t.empty +ida_kernwin.chooser_row_info_vec_t.end +ida_kernwin.chooser_row_info_vec_t.erase +ida_kernwin.chooser_row_info_vec_t.extend +ida_kernwin.chooser_row_info_vec_t.extract +ida_kernwin.chooser_row_info_vec_t.find +ida_kernwin.chooser_row_info_vec_t.grow +ida_kernwin.chooser_row_info_vec_t.has +ida_kernwin.chooser_row_info_vec_t.inject +ida_kernwin.chooser_row_info_vec_t.insert +ida_kernwin.chooser_row_info_vec_t.pop_back +ida_kernwin.chooser_row_info_vec_t.push_back +ida_kernwin.chooser_row_info_vec_t.qclear +ida_kernwin.chooser_row_info_vec_t.reserve +ida_kernwin.chooser_row_info_vec_t.resize +ida_kernwin.chooser_row_info_vec_t.size +ida_kernwin.chooser_row_info_vec_t.swap +ida_kernwin.chooser_row_info_vec_t.truncate +ida_kernwin.chooser_stdact_desc_t +ida_kernwin.chooser_stdact_desc_t.__disown__ +ida_kernwin.chooser_stdact_desc_t.__init__ +ida_kernwin.chooser_stdact_desc_t.label +ida_kernwin.chooser_stdact_desc_t.ucb +ida_kernwin.chooser_stdact_desc_t.version +ida_kernwin.chtype_entry +ida_kernwin.chtype_enum +ida_kernwin.chtype_enum_by_value_and_size +ida_kernwin.chtype_func +ida_kernwin.chtype_generic +ida_kernwin.chtype_idasgn +ida_kernwin.chtype_idatil +ida_kernwin.chtype_name +ida_kernwin.chtype_segm +ida_kernwin.chtype_srcp +ida_kernwin.chtype_stkvar_xref +ida_kernwin.chtype_strpath +ida_kernwin.chtype_struct +ida_kernwin.chtype_xref +ida_kernwin.clear_refresh_request +ida_kernwin.cli_t +ida_kernwin.cli_t.OnExecuteLine +ida_kernwin.cli_t.OnFindCompletions +ida_kernwin.cli_t.OnKeydown +ida_kernwin.cli_t.__del__ +ida_kernwin.cli_t.__init__ +ida_kernwin.cli_t.register +ida_kernwin.cli_t.unregister +ida_kernwin.close_chooser +ida_kernwin.close_widget +ida_kernwin.clr_cancelled +ida_kernwin.create_code_viewer +ida_kernwin.create_empty_widget +ida_kernwin.create_menu +ida_kernwin.create_toolbar +ida_kernwin.custom_viewer_jump +ida_kernwin.del_hotkey +ida_kernwin.del_idc_hotkey +ida_kernwin.delete_menu +ida_kernwin.delete_toolbar +ida_kernwin.detach_action_from_menu +ida_kernwin.detach_action_from_popup +ida_kernwin.detach_action_from_toolbar +ida_kernwin.disabled_script_timeout_t +ida_kernwin.disabled_script_timeout_t.__enter__ +ida_kernwin.disabled_script_timeout_t.__exit__ +ida_kernwin.disasm_line_t +ida_kernwin.disasm_line_t.__init__ +ida_kernwin.disasm_text_t +ida_kernwin.disasm_text_t.__getitem__ +ida_kernwin.disasm_text_t.__init__ +ida_kernwin.disasm_text_t.__len__ +ida_kernwin.disasm_text_t.__setitem__ +ida_kernwin.disasm_text_t.append +ida_kernwin.disasm_text_t.at +ida_kernwin.disasm_text_t.begin +ida_kernwin.disasm_text_t.capacity +ida_kernwin.disasm_text_t.clear +ida_kernwin.disasm_text_t.empty +ida_kernwin.disasm_text_t.end +ida_kernwin.disasm_text_t.erase +ida_kernwin.disasm_text_t.extend +ida_kernwin.disasm_text_t.extract +ida_kernwin.disasm_text_t.grow +ida_kernwin.disasm_text_t.inject +ida_kernwin.disasm_text_t.insert +ida_kernwin.disasm_text_t.pop_back +ida_kernwin.disasm_text_t.push_back +ida_kernwin.disasm_text_t.qclear +ida_kernwin.disasm_text_t.reserve +ida_kernwin.disasm_text_t.resize +ida_kernwin.disasm_text_t.size +ida_kernwin.disasm_text_t.swap +ida_kernwin.disasm_text_t.truncate +ida_kernwin.display_copyright_warning +ida_kernwin.display_widget +ida_kernwin.ea2str +ida_kernwin.ea_viewer_history_push_and_jump +ida_kernwin.enable_chooser_item_attrs +ida_kernwin.error +ida_kernwin.execute_sync +ida_kernwin.execute_ui_requests +ida_kernwin.find_widget +ida_kernwin.formchgcbfa_close +ida_kernwin.formchgcbfa_enable_field +ida_kernwin.formchgcbfa_get_field_value +ida_kernwin.formchgcbfa_get_focused_field +ida_kernwin.formchgcbfa_move_field +ida_kernwin.formchgcbfa_refresh_field +ida_kernwin.formchgcbfa_set_field_value +ida_kernwin.formchgcbfa_set_focused_field +ida_kernwin.formchgcbfa_show_field +ida_kernwin.free_custom_icon +ida_kernwin.gen_disasm_text +ida_kernwin.get_action_checkable +ida_kernwin.get_action_checked +ida_kernwin.get_action_icon +ida_kernwin.get_action_label +ida_kernwin.get_action_shortcut +ida_kernwin.get_action_state +ida_kernwin.get_action_tooltip +ida_kernwin.get_action_visibility +ida_kernwin.get_active_modal_widget +ida_kernwin.get_addon_info +ida_kernwin.get_addon_info_idx +ida_kernwin.get_chooser_data +ida_kernwin.get_chooser_obj +ida_kernwin.get_chooser_rows +ida_kernwin.get_curline +ida_kernwin.get_current_viewer +ida_kernwin.get_current_widget +ida_kernwin.get_cursor +ida_kernwin.get_custom_viewer_curline +ida_kernwin.get_custom_viewer_location +ida_kernwin.get_custom_viewer_place +ida_kernwin.get_custom_viewer_place_xcoord +ida_kernwin.get_ea_viewer_history_info +ida_kernwin.get_hexdump_ea +ida_kernwin.get_highlight +ida_kernwin.get_icon_id_by_name +ida_kernwin.get_kernel_version +ida_kernwin.get_key_code +ida_kernwin.get_last_widget +ida_kernwin.get_navband_ea +ida_kernwin.get_navband_pixel +ida_kernwin.get_opnum +ida_kernwin.get_output_curline +ida_kernwin.get_output_cursor +ida_kernwin.get_output_selected_text +ida_kernwin.get_place_class +ida_kernwin.get_place_class_id +ida_kernwin.get_place_class_template +ida_kernwin.get_registered_actions +ida_kernwin.get_screen_ea +ida_kernwin.get_synced_group +ida_kernwin.get_tab_size +ida_kernwin.get_user_input_event +ida_kernwin.get_user_strlist_options +ida_kernwin.get_view_renderer_type +ida_kernwin.get_viewer_place_type +ida_kernwin.get_viewer_user_data +ida_kernwin.get_widget_title +ida_kernwin.get_widget_type +ida_kernwin.get_window_id +ida_kernwin.hide_wait_box +ida_kernwin.idaplace_t +ida_kernwin.idaplace_t.__init__ +ida_kernwin.idaplace_t.ea +ida_kernwin.info +ida_kernwin.input_event_keyboard_data_t +ida_kernwin.input_event_keyboard_data_t.__init__ +ida_kernwin.input_event_mouse_data_t +ida_kernwin.input_event_mouse_data_t.__init__ +ida_kernwin.input_event_shortcut_data_t +ida_kernwin.input_event_shortcut_data_t.__init__ +ida_kernwin.input_event_t +ida_kernwin.input_event_t.__init__ +ida_kernwin.input_event_t._source_as_size +ida_kernwin.input_event_t._target_as_size +ida_kernwin.input_event_t.cb +ida_kernwin.input_event_t.get_source_QEvent +ida_kernwin.input_event_t.get_target_QWidget +ida_kernwin.input_event_t.kind +ida_kernwin.input_event_t.modifiers +ida_kernwin.input_event_t.source +ida_kernwin.input_event_t.target +ida_kernwin.install_command_interpreter +ida_kernwin.internal_register_place_class +ida_kernwin.is_action_enabled +ida_kernwin.is_chooser_widget +ida_kernwin.is_ida_library +ida_kernwin.is_idaq +ida_kernwin.is_idaview +ida_kernwin.is_msg_inited +ida_kernwin.is_place_class_ea_capable +ida_kernwin.is_refresh_requested +ida_kernwin.is_tif_cursor_footer +ida_kernwin.is_tif_cursor_header +ida_kernwin.is_tif_cursor_index +ida_kernwin.jobj_wrapper_t +ida_kernwin.jobj_wrapper_t.__init__ +ida_kernwin.jobj_wrapper_t.get_dict +ida_kernwin.jumpto +ida_kernwin.l_compare2 +ida_kernwin.line_rendering_output_entries_refs_t +ida_kernwin.line_rendering_output_entries_refs_t.__eq__ +ida_kernwin.line_rendering_output_entries_refs_t.__getitem__ +ida_kernwin.line_rendering_output_entries_refs_t.__init__ +ida_kernwin.line_rendering_output_entries_refs_t.__len__ +ida_kernwin.line_rendering_output_entries_refs_t.__ne__ +ida_kernwin.line_rendering_output_entries_refs_t.__setitem__ +ida_kernwin.line_rendering_output_entries_refs_t._del +ida_kernwin.line_rendering_output_entries_refs_t._internal_push_back +ida_kernwin.line_rendering_output_entries_refs_t.add_unique +ida_kernwin.line_rendering_output_entries_refs_t.append +ida_kernwin.line_rendering_output_entries_refs_t.at +ida_kernwin.line_rendering_output_entries_refs_t.begin +ida_kernwin.line_rendering_output_entries_refs_t.capacity +ida_kernwin.line_rendering_output_entries_refs_t.clear +ida_kernwin.line_rendering_output_entries_refs_t.empty +ida_kernwin.line_rendering_output_entries_refs_t.end +ida_kernwin.line_rendering_output_entries_refs_t.erase +ida_kernwin.line_rendering_output_entries_refs_t.extend +ida_kernwin.line_rendering_output_entries_refs_t.extract +ida_kernwin.line_rendering_output_entries_refs_t.find +ida_kernwin.line_rendering_output_entries_refs_t.has +ida_kernwin.line_rendering_output_entries_refs_t.inject +ida_kernwin.line_rendering_output_entries_refs_t.insert +ida_kernwin.line_rendering_output_entries_refs_t.pop_back +ida_kernwin.line_rendering_output_entries_refs_t.push_back +ida_kernwin.line_rendering_output_entries_refs_t.push_back +ida_kernwin.line_rendering_output_entries_refs_t.qclear +ida_kernwin.line_rendering_output_entries_refs_t.reserve +ida_kernwin.line_rendering_output_entries_refs_t.resize +ida_kernwin.line_rendering_output_entries_refs_t.size +ida_kernwin.line_rendering_output_entries_refs_t.swap +ida_kernwin.line_rendering_output_entries_refs_t.truncate +ida_kernwin.line_rendering_output_entry_t +ida_kernwin.line_rendering_output_entry_t.__eq__ +ida_kernwin.line_rendering_output_entry_t.__init__ +ida_kernwin.line_rendering_output_entry_t.__ne__ +ida_kernwin.line_rendering_output_entry_t.cpx +ida_kernwin.line_rendering_output_entry_t.flags +ida_kernwin.line_rendering_output_entry_t.is_bg_color_direct +ida_kernwin.line_rendering_output_entry_t.is_bg_color_empty +ida_kernwin.line_rendering_output_entry_t.is_bg_color_key +ida_kernwin.line_rendering_output_entry_t.nchars +ida_kernwin.line_section_t +ida_kernwin.line_section_t.__eq__ +ida_kernwin.line_section_t.__init__ +ida_kernwin.line_section_t.__ne__ +ida_kernwin.line_section_t.contains +ida_kernwin.line_section_t.is_closed +ida_kernwin.line_section_t.is_open +ida_kernwin.line_section_t.valid +ida_kernwin.linearray_t +ida_kernwin.linearray_t.__init__ +ida_kernwin.linearray_t.beginning +ida_kernwin.linearray_t.down +ida_kernwin.linearray_t.ending +ida_kernwin.linearray_t.get_bg_color +ida_kernwin.linearray_t.get_dlnnum +ida_kernwin.linearray_t.get_linecnt +ida_kernwin.linearray_t.get_pfx_color +ida_kernwin.linearray_t.get_place +ida_kernwin.linearray_t.set_place +ida_kernwin.linearray_t.set_userdata +ida_kernwin.linearray_t.up +ida_kernwin.linearray_t.userdata +ida_kernwin.lines_rendering_input_t +ida_kernwin.lines_rendering_input_t.__init__ +ida_kernwin.lines_rendering_input_t.sections_lines +ida_kernwin.lines_rendering_input_t.sync_group +ida_kernwin.lines_rendering_output_t +ida_kernwin.lines_rendering_output_t.__eq__ +ida_kernwin.lines_rendering_output_t.__init__ +ida_kernwin.lines_rendering_output_t.__ne__ +ida_kernwin.lines_rendering_output_t.clear +ida_kernwin.lines_rendering_output_t.swap +ida_kernwin.listing_location_t +ida_kernwin.listing_location_t.__init__ +ida_kernwin.load_custom_icon +ida_kernwin.load_dbg_dbginfo +ida_kernwin.lookup_key_code +ida_kernwin.mbox_internal +ida_kernwin.msg +ida_kernwin.msg_activated +ida_kernwin.msg_clear +ida_kernwin.msg_click +ida_kernwin.msg_closed +ida_kernwin.msg_dblclick +ida_kernwin.msg_deactivated +ida_kernwin.msg_get_lines +ida_kernwin.msg_keydown +ida_kernwin.msg_save +ida_kernwin.nomem +ida_kernwin.open_bookmarks_window +ida_kernwin.open_bpts_window +ida_kernwin.open_calls_window +ida_kernwin.open_disasm_window +ida_kernwin.open_exports_window +ida_kernwin.open_form +ida_kernwin.open_frame_window +ida_kernwin.open_funcs_window +ida_kernwin.open_hexdump_window +ida_kernwin.open_imports_window +ida_kernwin.open_loctypes_window +ida_kernwin.open_modules_window +ida_kernwin.open_names_window +ida_kernwin.open_navband_window +ida_kernwin.open_notepad_window +ida_kernwin.open_problems_window +ida_kernwin.open_segments_window +ida_kernwin.open_segregs_window +ida_kernwin.open_selectors_window +ida_kernwin.open_signatures_window +ida_kernwin.open_stack_window +ida_kernwin.open_strings_window +ida_kernwin.open_threads_window +ida_kernwin.open_til_view_window +ida_kernwin.open_tils_window +ida_kernwin.open_trace_window +ida_kernwin.open_url +ida_kernwin.open_xrefs_window +ida_kernwin.parse_tagged_line_sections +ida_kernwin.place_t +ida_kernwin.place_t.__init__ +ida_kernwin.place_t._print +ida_kernwin.place_t.adjust +ida_kernwin.place_t.as_idaplace_t +ida_kernwin.place_t.as_simpleline_place_t +ida_kernwin.place_t.as_tiplace_t +ida_kernwin.place_t.beginning +ida_kernwin.place_t.clone +ida_kernwin.place_t.compare +ida_kernwin.place_t.compare2 +ida_kernwin.place_t.copyfrom +ida_kernwin.place_t.deserialize +ida_kernwin.place_t.ending +ida_kernwin.place_t.enter +ida_kernwin.place_t.generate +ida_kernwin.place_t.id +ida_kernwin.place_t.leave +ida_kernwin.place_t.lnnum +ida_kernwin.place_t.makeplace +ida_kernwin.place_t.name +ida_kernwin.place_t.next +ida_kernwin.place_t.prev +ida_kernwin.place_t.rebase +ida_kernwin.place_t.serialize +ida_kernwin.place_t.toea +ida_kernwin.place_t.touval +ida_kernwin.plgform_close +ida_kernwin.plgform_get_widget +ida_kernwin.plgform_new +ida_kernwin.plgform_show +ida_kernwin.process_ui_action +ida_kernwin.prompt_function_prototype +ida_kernwin.py_chooser_base_t_get_row +ida_kernwin.py_get_ask_form +ida_kernwin.py_get_open_form +ida_kernwin.py_load_custom_icon_data +ida_kernwin.py_load_custom_icon_fn +ida_kernwin.py_register_compiled_form +ida_kernwin.py_unregister_compiled_form +ida_kernwin.pyidag_bind +ida_kernwin.pyidag_unbind +ida_kernwin.pyscv_add_line +ida_kernwin.pyscv_clear_lines +ida_kernwin.pyscv_close +ida_kernwin.pyscv_count +ida_kernwin.pyscv_del_line +ida_kernwin.pyscv_edit_line +ida_kernwin.pyscv_get_current_line +ida_kernwin.pyscv_get_current_word +ida_kernwin.pyscv_get_line +ida_kernwin.pyscv_get_pos +ida_kernwin.pyscv_get_selection +ida_kernwin.pyscv_get_widget +ida_kernwin.pyscv_init +ida_kernwin.pyscv_insert_line +ida_kernwin.pyscv_is_focused +ida_kernwin.pyscv_jumpto +ida_kernwin.pyscv_patch_line +ida_kernwin.pyscv_refresh +ida_kernwin.pyscv_show +ida_kernwin.qcleanline +ida_kernwin.quick_widget_commands_t +ida_kernwin.quick_widget_commands_t.__init__ +ida_kernwin.quick_widget_commands_t._ah_t +ida_kernwin.quick_widget_commands_t._ah_t.__init__ +ida_kernwin.quick_widget_commands_t._ah_t.activate +ida_kernwin.quick_widget_commands_t._ah_t.update +ida_kernwin.quick_widget_commands_t._cmd_t +ida_kernwin.quick_widget_commands_t._cmd_t.__init__ +ida_kernwin.quick_widget_commands_t.add +ida_kernwin.quick_widget_commands_t.populate_popup +ida_kernwin.read_range_selection +ida_kernwin.read_selection +ida_kernwin.refresh_chooser +ida_kernwin.refresh_choosers +ida_kernwin.refresh_custom_viewer +ida_kernwin.refresh_idaview +ida_kernwin.refresh_idaview_anyway +ida_kernwin.refresh_navband +ida_kernwin.register_action +ida_kernwin.register_addon +ida_kernwin.register_and_attach_to_menu +ida_kernwin.register_timer +ida_kernwin.remove_command_interpreter +ida_kernwin.renderer_pos_info_t +ida_kernwin.renderer_pos_info_t.__eq__ +ida_kernwin.renderer_pos_info_t.__init__ +ida_kernwin.renderer_pos_info_t.__ne__ +ida_kernwin.renderer_pos_info_t.cx +ida_kernwin.renderer_pos_info_t.cy +ida_kernwin.renderer_pos_info_t.node +ida_kernwin.renderer_pos_info_t.sx +ida_kernwin.repaint_custom_viewer +ida_kernwin.replace_wait_box +ida_kernwin.request_refresh +ida_kernwin.restore_database_snapshot +ida_kernwin.section_lines_refs_t +ida_kernwin.section_lines_refs_t.__eq__ +ida_kernwin.section_lines_refs_t.__getitem__ +ida_kernwin.section_lines_refs_t.__init__ +ida_kernwin.section_lines_refs_t.__len__ +ida_kernwin.section_lines_refs_t.__ne__ +ida_kernwin.section_lines_refs_t.__setitem__ +ida_kernwin.section_lines_refs_t._del +ida_kernwin.section_lines_refs_t.add_unique +ida_kernwin.section_lines_refs_t.append +ida_kernwin.section_lines_refs_t.at +ida_kernwin.section_lines_refs_t.begin +ida_kernwin.section_lines_refs_t.capacity +ida_kernwin.section_lines_refs_t.clear +ida_kernwin.section_lines_refs_t.empty +ida_kernwin.section_lines_refs_t.end +ida_kernwin.section_lines_refs_t.erase +ida_kernwin.section_lines_refs_t.extend +ida_kernwin.section_lines_refs_t.extract +ida_kernwin.section_lines_refs_t.find +ida_kernwin.section_lines_refs_t.has +ida_kernwin.section_lines_refs_t.inject +ida_kernwin.section_lines_refs_t.insert +ida_kernwin.section_lines_refs_t.pop_back +ida_kernwin.section_lines_refs_t.push_back +ida_kernwin.section_lines_refs_t.qclear +ida_kernwin.section_lines_refs_t.reserve +ida_kernwin.section_lines_refs_t.resize +ida_kernwin.section_lines_refs_t.size +ida_kernwin.section_lines_refs_t.swap +ida_kernwin.section_lines_refs_t.truncate +ida_kernwin.sections_lines_refs_t +ida_kernwin.sections_lines_refs_t.__eq__ +ida_kernwin.sections_lines_refs_t.__getitem__ +ida_kernwin.sections_lines_refs_t.__init__ +ida_kernwin.sections_lines_refs_t.__len__ +ida_kernwin.sections_lines_refs_t.__ne__ +ida_kernwin.sections_lines_refs_t.__setitem__ +ida_kernwin.sections_lines_refs_t._del +ida_kernwin.sections_lines_refs_t.add_unique +ida_kernwin.sections_lines_refs_t.append +ida_kernwin.sections_lines_refs_t.at +ida_kernwin.sections_lines_refs_t.begin +ida_kernwin.sections_lines_refs_t.capacity +ida_kernwin.sections_lines_refs_t.clear +ida_kernwin.sections_lines_refs_t.empty +ida_kernwin.sections_lines_refs_t.end +ida_kernwin.sections_lines_refs_t.erase +ida_kernwin.sections_lines_refs_t.extend +ida_kernwin.sections_lines_refs_t.extract +ida_kernwin.sections_lines_refs_t.find +ida_kernwin.sections_lines_refs_t.grow +ida_kernwin.sections_lines_refs_t.has +ida_kernwin.sections_lines_refs_t.inject +ida_kernwin.sections_lines_refs_t.insert +ida_kernwin.sections_lines_refs_t.pop_back +ida_kernwin.sections_lines_refs_t.push_back +ida_kernwin.sections_lines_refs_t.qclear +ida_kernwin.sections_lines_refs_t.reserve +ida_kernwin.sections_lines_refs_t.resize +ida_kernwin.sections_lines_refs_t.size +ida_kernwin.sections_lines_refs_t.swap +ida_kernwin.sections_lines_refs_t.truncate +ida_kernwin.set_cancelled +ida_kernwin.set_code_viewer_handler +ida_kernwin.set_code_viewer_is_source +ida_kernwin.set_code_viewer_line_handlers +ida_kernwin.set_code_viewer_lines_alignment +ida_kernwin.set_code_viewer_lines_icon_margin +ida_kernwin.set_code_viewer_lines_radix +ida_kernwin.set_code_viewer_user_data +ida_kernwin.set_custom_viewer_qt_aware +ida_kernwin.set_dock_pos +ida_kernwin.set_execute_sync_availability +ida_kernwin.set_highlight +ida_kernwin.set_nav_colorizer +ida_kernwin.set_view_renderer_type +ida_kernwin.show_wait_box +ida_kernwin.simplecustviewer_t +ida_kernwin.simplecustviewer_t.AddLine +ida_kernwin.simplecustviewer_t.ClearLines +ida_kernwin.simplecustviewer_t.Close +ida_kernwin.simplecustviewer_t.Count +ida_kernwin.simplecustviewer_t.Create +ida_kernwin.simplecustviewer_t.DelLine +ida_kernwin.simplecustviewer_t.EditLine +ida_kernwin.simplecustviewer_t.GetCurrentLine +ida_kernwin.simplecustviewer_t.GetCurrentWord +ida_kernwin.simplecustviewer_t.GetLine +ida_kernwin.simplecustviewer_t.GetLineNo +ida_kernwin.simplecustviewer_t.GetPos +ida_kernwin.simplecustviewer_t.GetSelection +ida_kernwin.simplecustviewer_t.GetWidget +ida_kernwin.simplecustviewer_t.InsertLine +ida_kernwin.simplecustviewer_t.IsFocused +ida_kernwin.simplecustviewer_t.Jump +ida_kernwin.simplecustviewer_t.OnPopup +ida_kernwin.simplecustviewer_t.PatchLine +ida_kernwin.simplecustviewer_t.Refresh +ida_kernwin.simplecustviewer_t.RefreshCurrent +ida_kernwin.simplecustviewer_t.Show +ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline +ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.__init__ +ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.populating_widget_popup +ida_kernwin.simplecustviewer_t.__init__ +ida_kernwin.simplecustviewer_t.__make_sl_arg +ida_kernwin.simpleline_place_t +ida_kernwin.simpleline_place_t.__init__ +ida_kernwin.simpleline_place_t.n +ida_kernwin.simpleline_t +ida_kernwin.simpleline_t.__init__ +ida_kernwin.simpleline_t.bgcolor +ida_kernwin.simpleline_t.color +ida_kernwin.simpleline_t.line +ida_kernwin.str2ea +ida_kernwin.str2ea_ex +ida_kernwin.strarray +ida_kernwin.strarray_t +ida_kernwin.strarray_t.__init__ +ida_kernwin.sync_source_t +ida_kernwin.sync_source_t.__eq__ +ida_kernwin.sync_source_t.__init__ +ida_kernwin.sync_source_t.__ne__ +ida_kernwin.sync_source_t.get_register +ida_kernwin.sync_source_t.get_widget +ida_kernwin.sync_source_t.is_register +ida_kernwin.sync_source_t.is_widget +ida_kernwin.sync_source_vec_t +ida_kernwin.sync_source_vec_t.__eq__ +ida_kernwin.sync_source_vec_t.__getitem__ +ida_kernwin.sync_source_vec_t.__init__ +ida_kernwin.sync_source_vec_t.__len__ +ida_kernwin.sync_source_vec_t.__ne__ +ida_kernwin.sync_source_vec_t.__setitem__ +ida_kernwin.sync_source_vec_t._del +ida_kernwin.sync_source_vec_t.add_unique +ida_kernwin.sync_source_vec_t.append +ida_kernwin.sync_source_vec_t.at +ida_kernwin.sync_source_vec_t.begin +ida_kernwin.sync_source_vec_t.capacity +ida_kernwin.sync_source_vec_t.clear +ida_kernwin.sync_source_vec_t.empty +ida_kernwin.sync_source_vec_t.end +ida_kernwin.sync_source_vec_t.erase +ida_kernwin.sync_source_vec_t.extend +ida_kernwin.sync_source_vec_t.extract +ida_kernwin.sync_source_vec_t.find +ida_kernwin.sync_source_vec_t.has +ida_kernwin.sync_source_vec_t.inject +ida_kernwin.sync_source_vec_t.insert +ida_kernwin.sync_source_vec_t.pop_back +ida_kernwin.sync_source_vec_t.push_back +ida_kernwin.sync_source_vec_t.qclear +ida_kernwin.sync_source_vec_t.reserve +ida_kernwin.sync_source_vec_t.size +ida_kernwin.sync_source_vec_t.swap +ida_kernwin.sync_source_vec_t.truncate +ida_kernwin.sync_sources +ida_kernwin.synced_group_t +ida_kernwin.synced_group_t.__init__ +ida_kernwin.synced_group_t.has +ida_kernwin.synced_group_t.has_register +ida_kernwin.synced_group_t.has_widget +ida_kernwin.tagged_line_section_t +ida_kernwin.tagged_line_section_t.__eq__ +ida_kernwin.tagged_line_section_t.__init__ +ida_kernwin.tagged_line_section_t.__ne__ +ida_kernwin.tagged_line_section_t.__str__ +ida_kernwin.tagged_line_section_t.substr +ida_kernwin.tagged_line_section_t.valid +ida_kernwin.tagged_line_section_t.valid_in +ida_kernwin.tagged_line_section_vec_t +ida_kernwin.tagged_line_section_vec_t.__eq__ +ida_kernwin.tagged_line_section_vec_t.__getitem__ +ida_kernwin.tagged_line_section_vec_t.__init__ +ida_kernwin.tagged_line_section_vec_t.__len__ +ida_kernwin.tagged_line_section_vec_t.__ne__ +ida_kernwin.tagged_line_section_vec_t.__setitem__ +ida_kernwin.tagged_line_section_vec_t._del +ida_kernwin.tagged_line_section_vec_t.add_unique +ida_kernwin.tagged_line_section_vec_t.append +ida_kernwin.tagged_line_section_vec_t.at +ida_kernwin.tagged_line_section_vec_t.begin +ida_kernwin.tagged_line_section_vec_t.capacity +ida_kernwin.tagged_line_section_vec_t.clear +ida_kernwin.tagged_line_section_vec_t.empty +ida_kernwin.tagged_line_section_vec_t.end +ida_kernwin.tagged_line_section_vec_t.erase +ida_kernwin.tagged_line_section_vec_t.extend +ida_kernwin.tagged_line_section_vec_t.extract +ida_kernwin.tagged_line_section_vec_t.find +ida_kernwin.tagged_line_section_vec_t.grow +ida_kernwin.tagged_line_section_vec_t.has +ida_kernwin.tagged_line_section_vec_t.inject +ida_kernwin.tagged_line_section_vec_t.insert +ida_kernwin.tagged_line_section_vec_t.pop_back +ida_kernwin.tagged_line_section_vec_t.push_back +ida_kernwin.tagged_line_section_vec_t.qclear +ida_kernwin.tagged_line_section_vec_t.reserve +ida_kernwin.tagged_line_section_vec_t.resize +ida_kernwin.tagged_line_section_vec_t.size +ida_kernwin.tagged_line_section_vec_t.swap +ida_kernwin.tagged_line_section_vec_t.truncate +ida_kernwin.tagged_line_sections_t +ida_kernwin.tagged_line_sections_t.__init__ +ida_kernwin.tagged_line_sections_t.first +ida_kernwin.tagged_line_sections_t.nearest_after +ida_kernwin.tagged_line_sections_t.nearest_at +ida_kernwin.tagged_line_sections_t.nearest_before +ida_kernwin.tagged_line_sections_t.sections_at +ida_kernwin.take_database_snapshot +ida_kernwin.text_t +ida_kernwin.text_t.__getitem__ +ida_kernwin.text_t.__init__ +ida_kernwin.text_t.__len__ +ida_kernwin.text_t.__setitem__ +ida_kernwin.text_t.append +ida_kernwin.text_t.at +ida_kernwin.text_t.begin +ida_kernwin.text_t.capacity +ida_kernwin.text_t.clear +ida_kernwin.text_t.empty +ida_kernwin.text_t.end +ida_kernwin.text_t.erase +ida_kernwin.text_t.extend +ida_kernwin.text_t.extract +ida_kernwin.text_t.grow +ida_kernwin.text_t.inject +ida_kernwin.text_t.insert +ida_kernwin.text_t.pop_back +ida_kernwin.text_t.push_back +ida_kernwin.text_t.qclear +ida_kernwin.text_t.reserve +ida_kernwin.text_t.resize +ida_kernwin.text_t.size +ida_kernwin.text_t.swap +ida_kernwin.text_t.truncate +ida_kernwin.textctrl_info_t +ida_kernwin.textctrl_info_t.TXTF_ACCEPTTABS +ida_kernwin.textctrl_info_t.TXTF_AUTOINDENT +ida_kernwin.textctrl_info_t.TXTF_FIXEDFONT +ida_kernwin.textctrl_info_t.TXTF_MODIFIED +ida_kernwin.textctrl_info_t.TXTF_READONLY +ida_kernwin.textctrl_info_t.TXTF_SELECTED +ida_kernwin.textctrl_info_t.__get_flags__ +ida_kernwin.textctrl_info_t.__get_tabsize__ +ida_kernwin.textctrl_info_t.__get_text +ida_kernwin.textctrl_info_t.__init__ +ida_kernwin.textctrl_info_t.__set_flags__ +ida_kernwin.textctrl_info_t.__set_tabsize__ +ida_kernwin.textctrl_info_t.__set_text +ida_kernwin.textctrl_info_t._create_clink +ida_kernwin.textctrl_info_t._del_clink +ida_kernwin.textctrl_info_t._get_clink_ptr +ida_kernwin.textctrl_info_t.assign +ida_kernwin.textctrl_info_t.flags +ida_kernwin.textctrl_info_t.tabsize +ida_kernwin.textctrl_info_t.text +ida_kernwin.textctrl_info_t.value +ida_kernwin.textctrl_info_t_assign +ida_kernwin.textctrl_info_t_create +ida_kernwin.textctrl_info_t_destroy +ida_kernwin.textctrl_info_t_get_clink +ida_kernwin.textctrl_info_t_get_clink_ptr +ida_kernwin.textctrl_info_t_get_flags +ida_kernwin.textctrl_info_t_get_tabsize +ida_kernwin.textctrl_info_t_get_text +ida_kernwin.textctrl_info_t_set_flags +ida_kernwin.textctrl_info_t_set_tabsize +ida_kernwin.textctrl_info_t_set_text +ida_kernwin.tiplace_t +ida_kernwin.tiplace_t.__init__ +ida_kernwin.tiplace_t.calc_udm_offset +ida_kernwin.tiplace_t.fill_type_ref +ida_kernwin.tiplace_t.get_kind +ida_kernwin.tiplace_t.is_footer +ida_kernwin.tiplace_t.is_header +ida_kernwin.tiplace_t.is_index +ida_kernwin.tiplace_t.reset +ida_kernwin.tiplace_t.set_footer +ida_kernwin.tiplace_t.set_header +ida_kernwin.tiplace_t.set_index_by_offset +ida_kernwin.tiplace_t.valid_ord +ida_kernwin.twinline_t +ida_kernwin.twinline_t.__init__ +ida_kernwin.twinline_t.at +ida_kernwin.twinline_t.bg_color +ida_kernwin.twinline_t.is_default +ida_kernwin.twinline_t.line +ida_kernwin.twinline_t.prefix_color +ida_kernwin.twinpos_t +ida_kernwin.twinpos_t.__init__ +ida_kernwin.twinpos_t.at +ida_kernwin.twinpos_t.place +ida_kernwin.twinpos_t.place_as_idaplace_t +ida_kernwin.twinpos_t.place_as_simpleline_place_t +ida_kernwin.twinpos_t.place_as_tiplace_t +ida_kernwin.twinpos_t.x +ida_kernwin.ui_load_new_file +ida_kernwin.ui_requests_t +ida_kernwin.ui_requests_t.__init__ +ida_kernwin.ui_run_debugger +ida_kernwin.unmark_selection +ida_kernwin.unregister_action +ida_kernwin.unregister_timer +ida_kernwin.update_action_checkable +ida_kernwin.update_action_checked +ida_kernwin.update_action_icon +ida_kernwin.update_action_label +ida_kernwin.update_action_shortcut +ida_kernwin.update_action_state +ida_kernwin.update_action_tooltip +ida_kernwin.update_action_visibility +ida_kernwin.user_cancelled +ida_kernwin.view_activated +ida_kernwin.view_click +ida_kernwin.view_close +ida_kernwin.view_created +ida_kernwin.view_curpos +ida_kernwin.view_dblclick +ida_kernwin.view_deactivated +ida_kernwin.view_keydown +ida_kernwin.view_loc_changed +ida_kernwin.view_mouse_event_location_t +ida_kernwin.view_mouse_event_location_t.__init__ +ida_kernwin.view_mouse_event_location_t.ea +ida_kernwin.view_mouse_event_location_t.item +ida_kernwin.view_mouse_event_t +ida_kernwin.view_mouse_event_t.__init__ +ida_kernwin.view_mouse_event_t.button +ida_kernwin.view_mouse_event_t.location +ida_kernwin.view_mouse_event_t.renderer_pos +ida_kernwin.view_mouse_event_t.rtype +ida_kernwin.view_mouse_event_t.state +ida_kernwin.view_mouse_event_t.x +ida_kernwin.view_mouse_event_t.y +ida_kernwin.view_mouse_moved +ida_kernwin.view_mouse_over +ida_kernwin.view_switched +ida_kernwin.warning +ida_libfuncs +ida_libfuncs.get_idasgn_header_by_short_name +ida_libfuncs.get_idasgn_path_by_short_name +ida_libfuncs.idasgn_header_t +ida_libfuncs.idasgn_header_t.__init__ +ida_lines +ida_lines.COLOR_ADDR +ida_lines.COLOR_ADDR_SIZE +ida_lines.COLOR_ALTOP +ida_lines.COLOR_ASMDIR +ida_lines.COLOR_AUTOCMT +ida_lines.COLOR_BG_MAX +ida_lines.COLOR_BINPREF +ida_lines.COLOR_CHAR +ida_lines.COLOR_CNAME +ida_lines.COLOR_CODE +ida_lines.COLOR_CODNAME +ida_lines.COLOR_COLLAPSED +ida_lines.COLOR_CREF +ida_lines.COLOR_CREFTAIL +ida_lines.COLOR_CURITEM +ida_lines.COLOR_CURLINE +ida_lines.COLOR_DATA +ida_lines.COLOR_DATNAME +ida_lines.COLOR_DCHAR +ida_lines.COLOR_DEFAULT +ida_lines.COLOR_DEMNAME +ida_lines.COLOR_DNAME +ida_lines.COLOR_DNUM +ida_lines.COLOR_DREF +ida_lines.COLOR_DREFTAIL +ida_lines.COLOR_DSTR +ida_lines.COLOR_ERROR +ida_lines.COLOR_ESC +ida_lines.COLOR_EXTERN +ida_lines.COLOR_EXTRA +ida_lines.COLOR_FG_MAX +ida_lines.COLOR_HIDLINE +ida_lines.COLOR_HIDNAME +ida_lines.COLOR_IMPNAME +ida_lines.COLOR_INSN +ida_lines.COLOR_INV +ida_lines.COLOR_KEYWORD +ida_lines.COLOR_LIBFUNC +ida_lines.COLOR_LIBNAME +ida_lines.COLOR_LOCNAME +ida_lines.COLOR_LUMFUNC +ida_lines.COLOR_LUMINA +ida_lines.COLOR_MACRO +ida_lines.COLOR_NUMBER +ida_lines.COLOR_OFF +ida_lines.COLOR_ON +ida_lines.COLOR_OPND1 +ida_lines.COLOR_OPND2 +ida_lines.COLOR_OPND3 +ida_lines.COLOR_OPND4 +ida_lines.COLOR_OPND5 +ida_lines.COLOR_OPND6 +ida_lines.COLOR_OPND7 +ida_lines.COLOR_OPND8 +ida_lines.COLOR_PREFIX +ida_lines.COLOR_REG +ida_lines.COLOR_REGCMT +ida_lines.COLOR_REGFUNC +ida_lines.COLOR_RESERVED1 +ida_lines.COLOR_RPTCMT +ida_lines.COLOR_SEGNAME +ida_lines.COLOR_SELECTED +ida_lines.COLOR_STRING +ida_lines.COLOR_SYMBOL +ida_lines.COLOR_UNAME +ida_lines.COLOR_UNKNAME +ida_lines.COLOR_UNKNOWN +ida_lines.COLOR_VOIDOP +ida_lines.COLSTR +ida_lines.SCOLOR_ADDR +ida_lines.SCOLOR_ALTOP +ida_lines.SCOLOR_ASMDIR +ida_lines.SCOLOR_AUTOCMT +ida_lines.SCOLOR_BINPREF +ida_lines.SCOLOR_CHAR +ida_lines.SCOLOR_CNAME +ida_lines.SCOLOR_CODNAME +ida_lines.SCOLOR_COLLAPSED +ida_lines.SCOLOR_CREF +ida_lines.SCOLOR_CREFTAIL +ida_lines.SCOLOR_DATNAME +ida_lines.SCOLOR_DCHAR +ida_lines.SCOLOR_DEFAULT +ida_lines.SCOLOR_DEMNAME +ida_lines.SCOLOR_DNAME +ida_lines.SCOLOR_DNUM +ida_lines.SCOLOR_DREF +ida_lines.SCOLOR_DREFTAIL +ida_lines.SCOLOR_DSTR +ida_lines.SCOLOR_ERROR +ida_lines.SCOLOR_ESC +ida_lines.SCOLOR_EXTRA +ida_lines.SCOLOR_HIDNAME +ida_lines.SCOLOR_IMPNAME +ida_lines.SCOLOR_INSN +ida_lines.SCOLOR_INV +ida_lines.SCOLOR_KEYWORD +ida_lines.SCOLOR_LIBNAME +ida_lines.SCOLOR_LOCNAME +ida_lines.SCOLOR_MACRO +ida_lines.SCOLOR_NUMBER +ida_lines.SCOLOR_OFF +ida_lines.SCOLOR_ON +ida_lines.SCOLOR_PREFIX +ida_lines.SCOLOR_REG +ida_lines.SCOLOR_REGCMT +ida_lines.SCOLOR_RPTCMT +ida_lines.SCOLOR_SEGNAME +ida_lines.SCOLOR_STRING +ida_lines.SCOLOR_SYMBOL +ida_lines.SCOLOR_UNAME +ida_lines.SCOLOR_UNKNAME +ida_lines.SCOLOR_VOIDOP +ida_lines.VEL_CMT +ida_lines.VEL_POST +ida_lines.add_extra_cmt +ida_lines.add_extra_line +ida_lines.add_pgm_cmt +ida_lines.add_sourcefile +ida_lines.calc_bg_color +ida_lines.calc_prefix_color +ida_lines.create_encoding_helper +ida_lines.del_extra_cmt +ida_lines.del_sourcefile +ida_lines.delete_extra_cmts +ida_lines.generate_disasm_line +ida_lines.generate_disassembly +ida_lines.get_extra_cmt +ida_lines.get_first_free_extra_cmtidx +ida_lines.get_sourcefile +ida_lines.install_user_defined_prefix +ida_lines.requires_color_esc +ida_lines.tag_addr +ida_lines.tag_advance +ida_lines.tag_remove +ida_lines.tag_skipcode +ida_lines.tag_skipcodes +ida_lines.tag_strlen +ida_lines.update_extra_cmt +ida_lines.user_defined_prefix_t +ida_lines.user_defined_prefix_t.__disown__ +ida_lines.user_defined_prefix_t.__init__ +ida_lines.user_defined_prefix_t.get_user_defined_prefix +ida_loader +ida_loader.ACCEPT_ARCHIVE +ida_loader.ACCEPT_CONTINUE +ida_loader.ACCEPT_FIRST +ida_loader.DBFL_BAK +ida_loader.DBFL_COMP +ida_loader.DBFL_KILL +ida_loader.DBFL_TEMP +ida_loader.FILEREG_NOTPATCHABLE +ida_loader.FILEREG_PATCHABLE +ida_loader.GENFLG_ASMINC +ida_loader.GENFLG_ASMTYPE +ida_loader.GENFLG_GENHTML +ida_loader.GENFLG_IDCTYPE +ida_loader.GENFLG_MAPDMNG +ida_loader.GENFLG_MAPLOC +ida_loader.GENFLG_MAPNAME +ida_loader.GENFLG_MAPSEG +ida_loader.LDRF_RELOAD +ida_loader.LDRF_REQ_PROC +ida_loader.MAX_DATABASE_DESCRIPTION +ida_loader.NEF_CODE +ida_loader.NEF_FILL +ida_loader.NEF_FIRST +ida_loader.NEF_FLAT +ida_loader.NEF_IMPS +ida_loader.NEF_LALL +ida_loader.NEF_LOPT +ida_loader.NEF_MAN +ida_loader.NEF_MINI +ida_loader.NEF_NAME +ida_loader.NEF_RELOAD +ida_loader.NEF_RSCS +ida_loader.NEF_SEGS +ida_loader.OFILE_ASM +ida_loader.OFILE_DIF +ida_loader.OFILE_EXE +ida_loader.OFILE_IDC +ida_loader.OFILE_LST +ida_loader.OFILE_MAP +ida_loader.PATH_TYPE_CMD +ida_loader.PATH_TYPE_ID0 +ida_loader.PATH_TYPE_IDB +ida_loader.PLUGIN_DLL +ida_loader.SSF_AUTOMATIC +ida_loader.SSUF_DESC +ida_loader.SSUF_FLAGS +ida_loader.SSUF_PATH +ida_loader.base2file +ida_loader.build_snapshot_tree +ida_loader.clr_database_flag +ida_loader.extract_module_from_archive +ida_loader.file2base +ida_loader.find_plugin +ida_loader.flush_buffers +ida_loader.gen_exe_file +ida_loader.gen_file +ida_loader.get_basic_file_type +ida_loader.get_elf_debug_file_directory +ida_loader.get_file_type_name +ida_loader.get_fileregion_ea +ida_loader.get_fileregion_offset +ida_loader.get_path +ida_loader.get_plugin_options +ida_loader.idp_desc_t +ida_loader.idp_desc_t.__init__ +ida_loader.idp_desc_t.checked +ida_loader.idp_desc_t.family +ida_loader.idp_desc_t.is_script +ida_loader.idp_desc_t.mtime +ida_loader.idp_desc_t.names +ida_loader.idp_desc_t.path +ida_loader.idp_name_t +ida_loader.idp_name_t.__init__ +ida_loader.idp_name_t.hidden +ida_loader.idp_name_t.lname +ida_loader.idp_name_t.sname +ida_loader.is_database_flag +ida_loader.is_trusted_idb +ida_loader.load_and_run_plugin +ida_loader.load_binary_file +ida_loader.load_ids_module +ida_loader.load_plugin +ida_loader.loader_t +ida_loader.loader_t.__init__ +ida_loader.loader_t.flags +ida_loader.loader_t.version +ida_loader.mem2base +ida_loader.plugin_info_t +ida_loader.plugin_info_t.__init__ +ida_loader.plugin_info_t.arg +ida_loader.plugin_info_t.comment +ida_loader.plugin_info_t.entry +ida_loader.plugin_info_t.flags +ida_loader.plugin_info_t.hotkey +ida_loader.plugin_info_t.idaplg_name +ida_loader.plugin_info_t.name +ida_loader.plugin_info_t.next +ida_loader.plugin_info_t.org_hotkey +ida_loader.plugin_info_t.org_name +ida_loader.plugin_info_t.path +ida_loader.process_archive +ida_loader.qvector_snapshotvec_t +ida_loader.qvector_snapshotvec_t.__eq__ +ida_loader.qvector_snapshotvec_t.__getitem__ +ida_loader.qvector_snapshotvec_t.__init__ +ida_loader.qvector_snapshotvec_t.__len__ +ida_loader.qvector_snapshotvec_t.__ne__ +ida_loader.qvector_snapshotvec_t.__setitem__ +ida_loader.qvector_snapshotvec_t._del +ida_loader.qvector_snapshotvec_t.add_unique +ida_loader.qvector_snapshotvec_t.append +ida_loader.qvector_snapshotvec_t.at +ida_loader.qvector_snapshotvec_t.begin +ida_loader.qvector_snapshotvec_t.capacity +ida_loader.qvector_snapshotvec_t.clear +ida_loader.qvector_snapshotvec_t.empty +ida_loader.qvector_snapshotvec_t.end +ida_loader.qvector_snapshotvec_t.erase +ida_loader.qvector_snapshotvec_t.extend +ida_loader.qvector_snapshotvec_t.extract +ida_loader.qvector_snapshotvec_t.find +ida_loader.qvector_snapshotvec_t.has +ida_loader.qvector_snapshotvec_t.inject +ida_loader.qvector_snapshotvec_t.insert +ida_loader.qvector_snapshotvec_t.pop_back +ida_loader.qvector_snapshotvec_t.push_back +ida_loader.qvector_snapshotvec_t.qclear +ida_loader.qvector_snapshotvec_t.reserve +ida_loader.qvector_snapshotvec_t.resize +ida_loader.qvector_snapshotvec_t.size +ida_loader.qvector_snapshotvec_t.swap +ida_loader.qvector_snapshotvec_t.truncate +ida_loader.reload_file +ida_loader.run_plugin +ida_loader.save_database +ida_loader.set_database_flag +ida_loader.set_import_name +ida_loader.set_import_ordinal +ida_loader.set_path +ida_loader.snapshot_t +ida_loader.snapshot_t.__eq__ +ida_loader.snapshot_t.__ge__ +ida_loader.snapshot_t.__gt__ +ida_loader.snapshot_t.__init__ +ida_loader.snapshot_t.__le__ +ida_loader.snapshot_t.__lt__ +ida_loader.snapshot_t.__ne__ +ida_loader.snapshot_t.children +ida_loader.snapshot_t.clear +ida_loader.snapshot_t.desc +ida_loader.snapshot_t.filename +ida_loader.snapshot_t.flags +ida_loader.snapshot_t.id +ida_lumina +ida_lumina.AMDF_FORCE +ida_lumina.AMDF_UPGRADE +ida_lumina.apply_metadata +ida_lumina.backup_metadata +ida_lumina.calc_func_metadata +ida_lumina.diff_metadata +ida_lumina.extra_cmt_t +ida_lumina.extra_cmt_t.__init__ +ida_lumina.extra_cmts_t +ida_lumina.extra_cmts_t.__getitem__ +ida_lumina.extra_cmts_t.__init__ +ida_lumina.extra_cmts_t.__len__ +ida_lumina.extra_cmts_t.__setitem__ +ida_lumina.extra_cmts_t.append +ida_lumina.extra_cmts_t.at +ida_lumina.extra_cmts_t.begin +ida_lumina.extra_cmts_t.capacity +ida_lumina.extra_cmts_t.clear +ida_lumina.extra_cmts_t.empty +ida_lumina.extra_cmts_t.end +ida_lumina.extra_cmts_t.erase +ida_lumina.extra_cmts_t.extend +ida_lumina.extra_cmts_t.extract +ida_lumina.extra_cmts_t.grow +ida_lumina.extra_cmts_t.inject +ida_lumina.extra_cmts_t.insert +ida_lumina.extra_cmts_t.pop_back +ida_lumina.extra_cmts_t.push_back +ida_lumina.extra_cmts_t.qclear +ida_lumina.extra_cmts_t.reserve +ida_lumina.extra_cmts_t.resize +ida_lumina.extra_cmts_t.size +ida_lumina.extra_cmts_t.swap +ida_lumina.extra_cmts_t.truncate +ida_lumina.extract_extra_cmts_from_metadata +ida_lumina.extract_frame_desc_from_metadata +ida_lumina.extract_insn_cmts_from_metadata +ida_lumina.extract_insn_opreprs_from_metadata +ida_lumina.extract_insn_opreprs_from_metadata_ex +ida_lumina.extract_type_from_metadata +ida_lumina.extract_user_stkpnts_from_metadata +ida_lumina.frame_desc_t +ida_lumina.frame_desc_t.__init__ +ida_lumina.frame_mem_t +ida_lumina.frame_mem_t.__init__ +ida_lumina.frame_mems_t +ida_lumina.frame_mems_t.__getitem__ +ida_lumina.frame_mems_t.__init__ +ida_lumina.frame_mems_t.__len__ +ida_lumina.frame_mems_t.__setitem__ +ida_lumina.frame_mems_t.append +ida_lumina.frame_mems_t.at +ida_lumina.frame_mems_t.begin +ida_lumina.frame_mems_t.capacity +ida_lumina.frame_mems_t.clear +ida_lumina.frame_mems_t.empty +ida_lumina.frame_mems_t.end +ida_lumina.frame_mems_t.erase +ida_lumina.frame_mems_t.extend +ida_lumina.frame_mems_t.extract +ida_lumina.frame_mems_t.grow +ida_lumina.frame_mems_t.inject +ida_lumina.frame_mems_t.insert +ida_lumina.frame_mems_t.pop_back +ida_lumina.frame_mems_t.push_back +ida_lumina.frame_mems_t.qclear +ida_lumina.frame_mems_t.reserve +ida_lumina.frame_mems_t.resize +ida_lumina.frame_mems_t.size +ida_lumina.frame_mems_t.swap +ida_lumina.frame_mems_t.truncate +ida_lumina.func_info_and_frequency_t +ida_lumina.func_info_and_frequency_t.__init__ +ida_lumina.func_info_and_frequency_vec_t +ida_lumina.func_info_and_frequency_vec_t.__getitem__ +ida_lumina.func_info_and_frequency_vec_t.__init__ +ida_lumina.func_info_and_frequency_vec_t.__len__ +ida_lumina.func_info_and_frequency_vec_t.__setitem__ +ida_lumina.func_info_and_frequency_vec_t.append +ida_lumina.func_info_and_frequency_vec_t.at +ida_lumina.func_info_and_frequency_vec_t.begin +ida_lumina.func_info_and_frequency_vec_t.capacity +ida_lumina.func_info_and_frequency_vec_t.clear +ida_lumina.func_info_and_frequency_vec_t.empty +ida_lumina.func_info_and_frequency_vec_t.end +ida_lumina.func_info_and_frequency_vec_t.erase +ida_lumina.func_info_and_frequency_vec_t.extend +ida_lumina.func_info_and_frequency_vec_t.extract +ida_lumina.func_info_and_frequency_vec_t.grow +ida_lumina.func_info_and_frequency_vec_t.inject +ida_lumina.func_info_and_frequency_vec_t.insert +ida_lumina.func_info_and_frequency_vec_t.pop_back +ida_lumina.func_info_and_frequency_vec_t.push_back +ida_lumina.func_info_and_frequency_vec_t.qclear +ida_lumina.func_info_and_frequency_vec_t.reserve +ida_lumina.func_info_and_frequency_vec_t.resize +ida_lumina.func_info_and_frequency_vec_t.size +ida_lumina.func_info_and_frequency_vec_t.swap +ida_lumina.func_info_and_frequency_vec_t.truncate +ida_lumina.func_info_and_pattern_t +ida_lumina.func_info_and_pattern_t.__init__ +ida_lumina.func_info_and_pattern_vec_t +ida_lumina.func_info_and_pattern_vec_t.__getitem__ +ida_lumina.func_info_and_pattern_vec_t.__init__ +ida_lumina.func_info_and_pattern_vec_t.__len__ +ida_lumina.func_info_and_pattern_vec_t.__setitem__ +ida_lumina.func_info_and_pattern_vec_t.append +ida_lumina.func_info_and_pattern_vec_t.at +ida_lumina.func_info_and_pattern_vec_t.begin +ida_lumina.func_info_and_pattern_vec_t.capacity +ida_lumina.func_info_and_pattern_vec_t.clear +ida_lumina.func_info_and_pattern_vec_t.empty +ida_lumina.func_info_and_pattern_vec_t.end +ida_lumina.func_info_and_pattern_vec_t.erase +ida_lumina.func_info_and_pattern_vec_t.extend +ida_lumina.func_info_and_pattern_vec_t.extract +ida_lumina.func_info_and_pattern_vec_t.grow +ida_lumina.func_info_and_pattern_vec_t.inject +ida_lumina.func_info_and_pattern_vec_t.insert +ida_lumina.func_info_and_pattern_vec_t.pop_back +ida_lumina.func_info_and_pattern_vec_t.push_back +ida_lumina.func_info_and_pattern_vec_t.qclear +ida_lumina.func_info_and_pattern_vec_t.reserve +ida_lumina.func_info_and_pattern_vec_t.resize +ida_lumina.func_info_and_pattern_vec_t.size +ida_lumina.func_info_and_pattern_vec_t.swap +ida_lumina.func_info_and_pattern_vec_t.truncate +ida_lumina.func_info_base_t +ida_lumina.func_info_base_t.__init__ +ida_lumina.func_info_pattern_and_frequency_t +ida_lumina.func_info_pattern_and_frequency_t.__init__ +ida_lumina.func_info_pattern_and_frequency_vec_t +ida_lumina.func_info_pattern_and_frequency_vec_t.__getitem__ +ida_lumina.func_info_pattern_and_frequency_vec_t.__init__ +ida_lumina.func_info_pattern_and_frequency_vec_t.__len__ +ida_lumina.func_info_pattern_and_frequency_vec_t.__setitem__ +ida_lumina.func_info_pattern_and_frequency_vec_t.append +ida_lumina.func_info_pattern_and_frequency_vec_t.at +ida_lumina.func_info_pattern_and_frequency_vec_t.begin +ida_lumina.func_info_pattern_and_frequency_vec_t.capacity +ida_lumina.func_info_pattern_and_frequency_vec_t.clear +ida_lumina.func_info_pattern_and_frequency_vec_t.empty +ida_lumina.func_info_pattern_and_frequency_vec_t.end +ida_lumina.func_info_pattern_and_frequency_vec_t.erase +ida_lumina.func_info_pattern_and_frequency_vec_t.extend +ida_lumina.func_info_pattern_and_frequency_vec_t.extract +ida_lumina.func_info_pattern_and_frequency_vec_t.grow +ida_lumina.func_info_pattern_and_frequency_vec_t.inject +ida_lumina.func_info_pattern_and_frequency_vec_t.insert +ida_lumina.func_info_pattern_and_frequency_vec_t.pop_back +ida_lumina.func_info_pattern_and_frequency_vec_t.push_back +ida_lumina.func_info_pattern_and_frequency_vec_t.qclear +ida_lumina.func_info_pattern_and_frequency_vec_t.reserve +ida_lumina.func_info_pattern_and_frequency_vec_t.resize +ida_lumina.func_info_pattern_and_frequency_vec_t.size +ida_lumina.func_info_pattern_and_frequency_vec_t.swap +ida_lumina.func_info_pattern_and_frequency_vec_t.truncate +ida_lumina.func_info_t +ida_lumina.func_info_t.__init__ +ida_lumina.func_info_vec_t +ida_lumina.func_info_vec_t.__getitem__ +ida_lumina.func_info_vec_t.__init__ +ida_lumina.func_info_vec_t.__len__ +ida_lumina.func_info_vec_t.__setitem__ +ida_lumina.func_info_vec_t.append +ida_lumina.func_info_vec_t.at +ida_lumina.func_info_vec_t.begin +ida_lumina.func_info_vec_t.capacity +ida_lumina.func_info_vec_t.clear +ida_lumina.func_info_vec_t.empty +ida_lumina.func_info_vec_t.end +ida_lumina.func_info_vec_t.erase +ida_lumina.func_info_vec_t.extend +ida_lumina.func_info_vec_t.extract +ida_lumina.func_info_vec_t.grow +ida_lumina.func_info_vec_t.inject +ida_lumina.func_info_vec_t.insert +ida_lumina.func_info_vec_t.pop_back +ida_lumina.func_info_vec_t.push_back +ida_lumina.func_info_vec_t.qclear +ida_lumina.func_info_vec_t.reserve +ida_lumina.func_info_vec_t.resize +ida_lumina.func_info_vec_t.size +ida_lumina.func_info_vec_t.swap +ida_lumina.func_info_vec_t.truncate +ida_lumina.func_md_diff_handler_t +ida_lumina.func_md_diff_handler_t.__disown__ +ida_lumina.func_md_diff_handler_t.__init__ +ida_lumina.func_md_diff_handler_t.on_comment_changed +ida_lumina.func_md_diff_handler_t.on_extra_comment_changed +ida_lumina.func_md_diff_handler_t.on_frame_member_changed +ida_lumina.func_md_diff_handler_t.on_function_comment_changed +ida_lumina.func_md_diff_handler_t.on_insn_ops_repr_changed +ida_lumina.func_md_diff_handler_t.on_name_changed +ida_lumina.func_md_diff_handler_t.on_proto_changed +ida_lumina.func_md_diff_handler_t.on_score_changed +ida_lumina.func_md_diff_handler_t.on_user_stkpnt_changed +ida_lumina.get_lumina_rpc_packet_t_index_from_base +ida_lumina.get_server_connection +ida_lumina.get_server_connection2 +ida_lumina.has_backup_metadata +ida_lumina.input_file_t +ida_lumina.input_file_t.__init__ +ida_lumina.insn_cmt_t +ida_lumina.insn_cmt_t.__init__ +ida_lumina.insn_cmts_t +ida_lumina.insn_cmts_t.__getitem__ +ida_lumina.insn_cmts_t.__init__ +ida_lumina.insn_cmts_t.__len__ +ida_lumina.insn_cmts_t.__setitem__ +ida_lumina.insn_cmts_t.append +ida_lumina.insn_cmts_t.at +ida_lumina.insn_cmts_t.begin +ida_lumina.insn_cmts_t.capacity +ida_lumina.insn_cmts_t.clear +ida_lumina.insn_cmts_t.empty +ida_lumina.insn_cmts_t.end +ida_lumina.insn_cmts_t.erase +ida_lumina.insn_cmts_t.extend +ida_lumina.insn_cmts_t.extract +ida_lumina.insn_cmts_t.grow +ida_lumina.insn_cmts_t.inject +ida_lumina.insn_cmts_t.insert +ida_lumina.insn_cmts_t.pop_back +ida_lumina.insn_cmts_t.push_back +ida_lumina.insn_cmts_t.qclear +ida_lumina.insn_cmts_t.reserve +ida_lumina.insn_cmts_t.resize +ida_lumina.insn_cmts_t.size +ida_lumina.insn_cmts_t.swap +ida_lumina.insn_cmts_t.truncate +ida_lumina.insn_ops_repr_t +ida_lumina.insn_ops_repr_t.__init__ +ida_lumina.insn_ops_reprs_t +ida_lumina.insn_ops_reprs_t.__getitem__ +ida_lumina.insn_ops_reprs_t.__init__ +ida_lumina.insn_ops_reprs_t.__len__ +ida_lumina.insn_ops_reprs_t.__setitem__ +ida_lumina.insn_ops_reprs_t.append +ida_lumina.insn_ops_reprs_t.at +ida_lumina.insn_ops_reprs_t.begin +ida_lumina.insn_ops_reprs_t.capacity +ida_lumina.insn_ops_reprs_t.clear +ida_lumina.insn_ops_reprs_t.empty +ida_lumina.insn_ops_reprs_t.end +ida_lumina.insn_ops_reprs_t.erase +ida_lumina.insn_ops_reprs_t.extend +ida_lumina.insn_ops_reprs_t.extract +ida_lumina.insn_ops_reprs_t.grow +ida_lumina.insn_ops_reprs_t.inject +ida_lumina.insn_ops_reprs_t.insert +ida_lumina.insn_ops_reprs_t.pop_back +ida_lumina.insn_ops_reprs_t.push_back +ida_lumina.insn_ops_reprs_t.qclear +ida_lumina.insn_ops_reprs_t.reserve +ida_lumina.insn_ops_reprs_t.resize +ida_lumina.insn_ops_reprs_t.size +ida_lumina.insn_ops_reprs_t.swap +ida_lumina.insn_ops_reprs_t.truncate +ida_lumina.insn_site_t +ida_lumina.insn_site_t.__init__ +ida_lumina.insn_site_t.toea +ida_lumina.lumina_client_t +ida_lumina.lumina_client_t.__init__ +ida_lumina.lumina_client_t.del_history +ida_lumina.lumina_client_t.get_pop +ida_lumina.lumina_client_t.is_pattern_id +ida_lumina.lumina_client_t.pull_md +ida_lumina.lumina_client_t.push_md +ida_lumina.lumina_client_t.set_pattern_id_md5 +ida_lumina.lumina_info_t +ida_lumina.lumina_info_t.__init__ +ida_lumina.lumina_op_res_vec_t +ida_lumina.lumina_op_res_vec_t.__eq__ +ida_lumina.lumina_op_res_vec_t.__getitem__ +ida_lumina.lumina_op_res_vec_t.__init__ +ida_lumina.lumina_op_res_vec_t.__len__ +ida_lumina.lumina_op_res_vec_t.__ne__ +ida_lumina.lumina_op_res_vec_t.__setitem__ +ida_lumina.lumina_op_res_vec_t._del +ida_lumina.lumina_op_res_vec_t.add_unique +ida_lumina.lumina_op_res_vec_t.append +ida_lumina.lumina_op_res_vec_t.at +ida_lumina.lumina_op_res_vec_t.begin +ida_lumina.lumina_op_res_vec_t.capacity +ida_lumina.lumina_op_res_vec_t.clear +ida_lumina.lumina_op_res_vec_t.empty +ida_lumina.lumina_op_res_vec_t.end +ida_lumina.lumina_op_res_vec_t.erase +ida_lumina.lumina_op_res_vec_t.extend +ida_lumina.lumina_op_res_vec_t.extract +ida_lumina.lumina_op_res_vec_t.find +ida_lumina.lumina_op_res_vec_t.grow +ida_lumina.lumina_op_res_vec_t.has +ida_lumina.lumina_op_res_vec_t.inject +ida_lumina.lumina_op_res_vec_t.insert +ida_lumina.lumina_op_res_vec_t.pop_back +ida_lumina.lumina_op_res_vec_t.push_back +ida_lumina.lumina_op_res_vec_t.qclear +ida_lumina.lumina_op_res_vec_t.reserve +ida_lumina.lumina_op_res_vec_t.resize +ida_lumina.lumina_op_res_vec_t.size +ida_lumina.lumina_op_res_vec_t.swap +ida_lumina.lumina_op_res_vec_t.truncate +ida_lumina.lumina_server_info_t +ida_lumina.lumina_server_info_t.__init__ +ida_lumina.lumina_user_t +ida_lumina.lumina_user_t.__init__ +ida_lumina.lumina_user_t.can_del_history +ida_lumina.lumina_user_t.is_admin +ida_lumina.lumina_user_t.set_can_del_history +ida_lumina.lumina_user_t.set_is_admin +ida_lumina.md_type_parts_t +ida_lumina.md_type_parts_t.__eq__ +ida_lumina.md_type_parts_t.__init__ +ida_lumina.md_type_parts_t.__ne__ +ida_lumina.metadata_iterator_t +ida_lumina.metadata_iterator_t.__init__ +ida_lumina.metadata_iterator_t.data_end +ida_lumina.metadata_iterator_t.next +ida_lumina.new_packet +ida_lumina.oprepr_t +ida_lumina.oprepr_t.__init__ +ida_lumina.pattern_id_t +ida_lumina.pattern_id_t.__init__ +ida_lumina.peer_conn_t +ida_lumina.peer_conn_t.__init__ +ida_lumina.pkt_get_lumina_info_result_t +ida_lumina.pkt_get_lumina_info_result_t.__init__ +ida_lumina.pkt_get_lumina_info_t +ida_lumina.pkt_get_lumina_info_t.__init__ +ida_lumina.pkt_get_pop_result_t +ida_lumina.pkt_get_pop_result_t.__init__ +ida_lumina.pkt_get_pop_t +ida_lumina.pkt_get_pop_t.__init__ +ida_lumina.pkt_helo_result_t +ida_lumina.pkt_helo_result_t.__init__ +ida_lumina.pkt_helo_t +ida_lumina.pkt_helo_t.__init__ +ida_lumina.pkt_pull_md_result_t +ida_lumina.pkt_pull_md_result_t.__init__ +ida_lumina.pkt_pull_md_t +ida_lumina.pkt_pull_md_t.__init__ +ida_lumina.pkt_push_md_result_t +ida_lumina.pkt_push_md_result_t.__init__ +ida_lumina.pkt_push_md_t +ida_lumina.pkt_push_md_t.__init__ +ida_lumina.pkt_rpc_fail_t +ida_lumina.pkt_rpc_fail_t.__init__ +ida_lumina.pkt_rpc_notify_t +ida_lumina.pkt_rpc_notify_t.__init__ +ida_lumina.pkt_rpc_ok_t +ida_lumina.pkt_rpc_ok_t.__init__ +ida_lumina.pop_fun_t +ida_lumina.pop_fun_t.__init__ +ida_lumina.push_md_opts_t +ida_lumina.push_md_opts_t.__init__ +ida_lumina.push_md_result_t +ida_lumina.push_md_result_t.__init__ +ida_lumina.revert_metadata +ida_lumina.score_metadata +ida_lumina.serialized_tinfo +ida_lumina.serialized_tinfo.__init__ +ida_lumina.simple_idb_diff_handler_t +ida_lumina.simple_idb_diff_handler_t.__init__ +ida_lumina.simple_idb_diff_handler_t.ensure_header_generated +ida_lumina.simple_idb_diff_handler_t.format_extra_cmt +ida_lumina.simple_idb_diff_handler_t.format_frame_member +ida_lumina.simple_idb_diff_handler_t.format_insn_ops +ida_lumina.simple_idb_diff_handler_t.format_stkpnt +ida_lumina.simple_idb_diff_handler_t.format_type +ida_lumina.simple_idb_diff_handler_t.indenter_t +ida_lumina.simple_idb_diff_handler_t.indenter_t.__del__ +ida_lumina.simple_idb_diff_handler_t.indenter_t.__init__ +ida_lumina.simple_idb_diff_handler_t.on_comment_changed +ida_lumina.simple_idb_diff_handler_t.on_extra_comment_changed +ida_lumina.simple_idb_diff_handler_t.on_frame_member_changed +ida_lumina.simple_idb_diff_handler_t.on_function_comment_changed +ida_lumina.simple_idb_diff_handler_t.on_insn_ops_repr_changed +ida_lumina.simple_idb_diff_handler_t.on_name_changed +ida_lumina.simple_idb_diff_handler_t.on_proto_changed +ida_lumina.simple_idb_diff_handler_t.on_score_changed +ida_lumina.simple_idb_diff_handler_t.on_user_stkpnt_changed +ida_lumina.simple_idb_diff_handler_t.put +ida_lumina.simple_idb_diff_handler_t.put2 +ida_lumina.simple_idb_diff_handler_t.where +ida_lumina.skipped_func_t +ida_lumina.skipped_func_t.__init__ +ida_lumina.skipped_funcs_t +ida_lumina.skipped_funcs_t.__getitem__ +ida_lumina.skipped_funcs_t.__init__ +ida_lumina.skipped_funcs_t.__len__ +ida_lumina.skipped_funcs_t.__setitem__ +ida_lumina.skipped_funcs_t.append +ida_lumina.skipped_funcs_t.at +ida_lumina.skipped_funcs_t.begin +ida_lumina.skipped_funcs_t.capacity +ida_lumina.skipped_funcs_t.clear +ida_lumina.skipped_funcs_t.empty +ida_lumina.skipped_funcs_t.end +ida_lumina.skipped_funcs_t.erase +ida_lumina.skipped_funcs_t.extend +ida_lumina.skipped_funcs_t.extract +ida_lumina.skipped_funcs_t.grow +ida_lumina.skipped_funcs_t.inject +ida_lumina.skipped_funcs_t.insert +ida_lumina.skipped_funcs_t.pop_back +ida_lumina.skipped_funcs_t.push_back +ida_lumina.skipped_funcs_t.qclear +ida_lumina.skipped_funcs_t.reserve +ida_lumina.skipped_funcs_t.resize +ida_lumina.skipped_funcs_t.size +ida_lumina.skipped_funcs_t.swap +ida_lumina.skipped_funcs_t.truncate +ida_lumina.split_metadata +ida_lumina.user_license_info_t +ida_lumina.user_license_info_t.__init__ +ida_lumina.user_stkpnt_t +ida_lumina.user_stkpnt_t.__init__ +ida_lumina.user_stkpnts_t +ida_lumina.user_stkpnts_t.__getitem__ +ida_lumina.user_stkpnts_t.__init__ +ida_lumina.user_stkpnts_t.__len__ +ida_lumina.user_stkpnts_t.__setitem__ +ida_lumina.user_stkpnts_t.append +ida_lumina.user_stkpnts_t.at +ida_lumina.user_stkpnts_t.begin +ida_lumina.user_stkpnts_t.capacity +ida_lumina.user_stkpnts_t.clear +ida_lumina.user_stkpnts_t.empty +ida_lumina.user_stkpnts_t.end +ida_lumina.user_stkpnts_t.erase +ida_lumina.user_stkpnts_t.extend +ida_lumina.user_stkpnts_t.extract +ida_lumina.user_stkpnts_t.grow +ida_lumina.user_stkpnts_t.inject +ida_lumina.user_stkpnts_t.insert +ida_lumina.user_stkpnts_t.pop_back +ida_lumina.user_stkpnts_t.push_back +ida_lumina.user_stkpnts_t.qclear +ida_lumina.user_stkpnts_t.reserve +ida_lumina.user_stkpnts_t.resize +ida_lumina.user_stkpnts_t.size +ida_lumina.user_stkpnts_t.swap +ida_lumina.user_stkpnts_t.truncate +ida_moves +ida_moves.UNHID_FUNC +ida_moves.UNHID_RANGE +ida_moves.UNHID_SEGM +ida_moves.bookmarks_t +ida_moves.bookmarks_t.__getitem__ +ida_moves.bookmarks_t.__init__ +ida_moves.bookmarks_t.__init__ +ida_moves.bookmarks_t.__iter__ +ida_moves.bookmarks_t.__len__ +ida_moves.bookmarks_t.erase +ida_moves.bookmarks_t.find_index +ida_moves.bookmarks_t.get +ida_moves.bookmarks_t.get_desc +ida_moves.bookmarks_t.get_dirtree_id +ida_moves.bookmarks_t.mark +ida_moves.bookmarks_t.size +ida_moves.graph_location_info_t +ida_moves.graph_location_info_t.__eq__ +ida_moves.graph_location_info_t.__init__ +ida_moves.graph_location_info_t.__ne__ +ida_moves.lochist_entry_t +ida_moves.lochist_entry_t.__init__ +ida_moves.lochist_entry_t.acquire_place +ida_moves.lochist_entry_t.is_valid +ida_moves.lochist_entry_t.place +ida_moves.lochist_entry_t.renderer_info +ida_moves.lochist_entry_t.set_place +ida_moves.lochist_t +ida_moves.lochist_t.__init__ +ida_moves.lochist_t.back +ida_moves.lochist_t.clear +ida_moves.lochist_t.current_index +ida_moves.lochist_t.fwd +ida_moves.lochist_t.get +ida_moves.lochist_t.get_current +ida_moves.lochist_t.get_place_id +ida_moves.lochist_t.get_template_place +ida_moves.lochist_t.init +ida_moves.lochist_t.is_history_enabled +ida_moves.lochist_t.jump +ida_moves.lochist_t.netcode +ida_moves.lochist_t.save +ida_moves.lochist_t.seek +ida_moves.lochist_t.set +ida_moves.lochist_t.set_current +ida_moves.lochist_t.size +ida_moves.renderer_info_pos_t +ida_moves.renderer_info_pos_t.__eq__ +ida_moves.renderer_info_pos_t.__init__ +ida_moves.renderer_info_pos_t.__ne__ +ida_moves.renderer_info_t +ida_moves.renderer_info_t.__eq__ +ida_moves.renderer_info_t.__init__ +ida_moves.renderer_info_t.__ne__ +ida_moves.segm_move_info_t +ida_moves.segm_move_info_t.__eq__ +ida_moves.segm_move_info_t.__init__ +ida_moves.segm_move_info_t.__ne__ +ida_moves.segm_move_info_vec_t +ida_moves.segm_move_info_vec_t.__eq__ +ida_moves.segm_move_info_vec_t.__getitem__ +ida_moves.segm_move_info_vec_t.__init__ +ida_moves.segm_move_info_vec_t.__len__ +ida_moves.segm_move_info_vec_t.__ne__ +ida_moves.segm_move_info_vec_t.__setitem__ +ida_moves.segm_move_info_vec_t._del +ida_moves.segm_move_info_vec_t.add_unique +ida_moves.segm_move_info_vec_t.append +ida_moves.segm_move_info_vec_t.at +ida_moves.segm_move_info_vec_t.begin +ida_moves.segm_move_info_vec_t.capacity +ida_moves.segm_move_info_vec_t.clear +ida_moves.segm_move_info_vec_t.empty +ida_moves.segm_move_info_vec_t.end +ida_moves.segm_move_info_vec_t.erase +ida_moves.segm_move_info_vec_t.extend +ida_moves.segm_move_info_vec_t.extract +ida_moves.segm_move_info_vec_t.find +ida_moves.segm_move_info_vec_t.grow +ida_moves.segm_move_info_vec_t.has +ida_moves.segm_move_info_vec_t.inject +ida_moves.segm_move_info_vec_t.insert +ida_moves.segm_move_info_vec_t.pop_back +ida_moves.segm_move_info_vec_t.push_back +ida_moves.segm_move_info_vec_t.qclear +ida_moves.segm_move_info_vec_t.reserve +ida_moves.segm_move_info_vec_t.resize +ida_moves.segm_move_info_vec_t.size +ida_moves.segm_move_info_vec_t.swap +ida_moves.segm_move_info_vec_t.truncate +ida_moves.segm_move_infos_t +ida_moves.segm_move_infos_t.__init__ +ida_moves.segm_move_infos_t.find +ida_nalt +ida_nalt.AFL_ALIGNFLOW +ida_nalt.AFL_BNOT0 +ida_nalt.AFL_BNOT1 +ida_nalt.AFL_COLORED +ida_nalt.AFL_FIXEDSPD +ida_nalt.AFL_HIDDEN +ida_nalt.AFL_HR_DETERMINED +ida_nalt.AFL_HR_GUESSED_DATA +ida_nalt.AFL_HR_GUESSED_FUNC +ida_nalt.AFL_IDA_GUESSED +ida_nalt.AFL_LIB +ida_nalt.AFL_LINNUM +ida_nalt.AFL_LNAME +ida_nalt.AFL_LZERO0 +ida_nalt.AFL_LZERO1 +ida_nalt.AFL_MANUAL +ida_nalt.AFL_NOBRD +ida_nalt.AFL_NORET +ida_nalt.AFL_NOTCODE +ida_nalt.AFL_NOTPROC +ida_nalt.AFL_PUBNAM +ida_nalt.AFL_RETFP +ida_nalt.AFL_SIGN0 +ida_nalt.AFL_SIGN1 +ida_nalt.AFL_TERSESTR +ida_nalt.AFL_TI +ida_nalt.AFL_TI0 +ida_nalt.AFL_TI1 +ida_nalt.AFL_TILCMT +ida_nalt.AFL_TYPE_GUESSED +ida_nalt.AFL_USEMODSP +ida_nalt.AFL_USERSP +ida_nalt.AFL_USERTI +ida_nalt.AFL_WEAKNAM +ida_nalt.AFL_ZSTROFF +ida_nalt.AP_ALLOWDUPS +ida_nalt.AP_ARRAY +ida_nalt.AP_IDXBASEMASK +ida_nalt.AP_IDXBIN +ida_nalt.AP_IDXDEC +ida_nalt.AP_IDXHEX +ida_nalt.AP_IDXOCT +ida_nalt.AP_INDEX +ida_nalt.AP_SIGNED +ida_nalt.GOTEA_NODE_NAME +ida_nalt.IDB_DESKTOPS_NODE_NAME +ida_nalt.IDB_DESKTOPS_TAG +ida_nalt.MAXSTRUCPATH +ida_nalt.NALT_ABSBASE +ida_nalt.NALT_AFLAGS +ida_nalt.NALT_ALIGN +ida_nalt.NALT_COLOR +ida_nalt.NALT_CREF_FROM +ida_nalt.NALT_CREF_TO +ida_nalt.NALT_DREF_FROM +ida_nalt.NALT_DREF_TO +ida_nalt.NALT_ENUM0 +ida_nalt.NALT_ENUM1 +ida_nalt.NALT_GR_LAYX +ida_nalt.NALT_LINNUM +ida_nalt.NALT_PURGE +ida_nalt.NALT_STRTYPE +ida_nalt.NALT_STRUCT +ida_nalt.NALT_SWITCH +ida_nalt.NSUP_ARGEAS +ida_nalt.NSUP_ARRAY +ida_nalt.NSUP_CMT +ida_nalt.NSUP_CUSTDT +ida_nalt.NSUP_EX_FLAGS +ida_nalt.NSUP_FOP1 +ida_nalt.NSUP_FOP2 +ida_nalt.NSUP_FOP3 +ida_nalt.NSUP_FOP4 +ida_nalt.NSUP_FOP5 +ida_nalt.NSUP_FOP6 +ida_nalt.NSUP_FOP7 +ida_nalt.NSUP_FOP8 +ida_nalt.NSUP_FRAME +ida_nalt.NSUP_FTAILS +ida_nalt.NSUP_GROUP +ida_nalt.NSUP_GROUPS +ida_nalt.NSUP_GR_INFO +ida_nalt.NSUP_GR_LAYT +ida_nalt.NSUP_JINFO +ida_nalt.NSUP_LLABEL +ida_nalt.NSUP_MANUAL +ida_nalt.NSUP_OMFGRP +ida_nalt.NSUP_OPTYPES +ida_nalt.NSUP_OREF0 +ida_nalt.NSUP_OREF1 +ida_nalt.NSUP_OREF2 +ida_nalt.NSUP_OREF3 +ida_nalt.NSUP_OREF4 +ida_nalt.NSUP_OREF5 +ida_nalt.NSUP_OREF6 +ida_nalt.NSUP_OREF7 +ida_nalt.NSUP_ORIGFMD +ida_nalt.NSUP_POINTS +ida_nalt.NSUP_REF0 +ida_nalt.NSUP_REF1 +ida_nalt.NSUP_REF2 +ida_nalt.NSUP_REF3 +ida_nalt.NSUP_REF4 +ida_nalt.NSUP_REF5 +ida_nalt.NSUP_REF6 +ida_nalt.NSUP_REF7 +ida_nalt.NSUP_REGARG +ida_nalt.NSUP_REGVAR +ida_nalt.NSUP_REPCMT +ida_nalt.NSUP_SEGTRANS +ida_nalt.NSUP_STROFF0 +ida_nalt.NSUP_STROFF1 +ida_nalt.NSUP_SWITCH +ida_nalt.NSUP_TYPEINFO +ida_nalt.NSUP_XREFPOS +ida_nalt.PATCH_TAG +ida_nalt.REFINFO_CUSTOM +ida_nalt.REFINFO_NOBASE +ida_nalt.REFINFO_NO_ONES +ida_nalt.REFINFO_NO_ZEROS +ida_nalt.REFINFO_PASTEND +ida_nalt.REFINFO_RVAOFF +ida_nalt.REFINFO_SELFREF +ida_nalt.REFINFO_SIGNEDOP +ida_nalt.REFINFO_SUBTRACT +ida_nalt.REFINFO_TYPE +ida_nalt.REF_HIGH16 +ida_nalt.REF_HIGH8 +ida_nalt.REF_LOW16 +ida_nalt.REF_LOW8 +ida_nalt.REF_OFF16 +ida_nalt.REF_OFF32 +ida_nalt.REF_OFF64 +ida_nalt.REF_OFF8 +ida_nalt.RIDX_ABINAME +ida_nalt.RIDX_ARCHIVE_PATH +ida_nalt.RIDX_C_MACROS +ida_nalt.RIDX_DBG_BINPATHS +ida_nalt.RIDX_DUALOP_GRAPH +ida_nalt.RIDX_DUALOP_TEXT +ida_nalt.RIDX_FILE_FORMAT_NAME +ida_nalt.RIDX_GROUPS +ida_nalt.RIDX_H_PATH +ida_nalt.RIDX_IDA_VERSION +ida_nalt.RIDX_INCLUDE +ida_nalt.RIDX_MD5 +ida_nalt.RIDX_NOTEPAD +ida_nalt.RIDX_PROBLEMS +ida_nalt.RIDX_SELECTORS +ida_nalt.RIDX_SHA256 +ida_nalt.RIDX_SMALL_IDC +ida_nalt.RIDX_SMALL_IDC_OLD +ida_nalt.RIDX_SRCDBG_PATHS +ida_nalt.RIDX_SRCDBG_UNDESIRED +ida_nalt.RIDX_STR_ENCODINGS +ida_nalt.STRENC_DEFAULT +ida_nalt.STRENC_NONE +ida_nalt.STRTYPE_C +ida_nalt.STRTYPE_C_16 +ida_nalt.STRTYPE_C_32 +ida_nalt.STRTYPE_LEN2 +ida_nalt.STRTYPE_LEN2_16 +ida_nalt.STRTYPE_LEN2_32 +ida_nalt.STRTYPE_LEN4 +ida_nalt.STRTYPE_LEN4_16 +ida_nalt.STRTYPE_PASCAL +ida_nalt.STRTYPE_PASCAL_16 +ida_nalt.STRTYPE_PASCAL_32 +ida_nalt.STRTYPE_TERMCHR +ida_nalt.SWI_CUSTOM +ida_nalt.SWI_DEFRET +ida_nalt.SWI_DEF_IN_TBL +ida_nalt.SWI_ELBASE +ida_nalt.SWI_HXNOLOWCASE +ida_nalt.SWI_INDIRECT +ida_nalt.SWI_J32 +ida_nalt.SWI_JMPINSN +ida_nalt.SWI_JMP_INV +ida_nalt.SWI_JSIZE +ida_nalt.SWI_SELFREL +ida_nalt.SWI_SEPARATE +ida_nalt.SWI_SHIFT_MASK +ida_nalt.SWI_SIGNED +ida_nalt.SWI_SPARSE +ida_nalt.SWI_STDTBL +ida_nalt.SWI_SUBTRACT +ida_nalt.SWI_USER +ida_nalt.SWI_V32 +ida_nalt.SWI_VERSION +ida_nalt.SWI_VSIZE +ida_nalt.SWI_VSPLIT +ida_nalt.V695_REF_OFF8 +ida_nalt.V695_REF_VHIGH +ida_nalt.V695_REF_VLOW +ida_nalt.add_encoding +ida_nalt.array_parameters_t +ida_nalt.array_parameters_t.__init__ +ida_nalt.array_parameters_t.alignment +ida_nalt.array_parameters_t.is_default +ida_nalt.array_parameters_t.lineitems +ida_nalt.clr__bnot0 +ida_nalt.clr__bnot1 +ida_nalt.clr__invsign0 +ida_nalt.clr__invsign1 +ida_nalt.clr_abits +ida_nalt.clr_align_flow +ida_nalt.clr_colored_item +ida_nalt.clr_fixed_spd +ida_nalt.clr_has_lname +ida_nalt.clr_has_ti +ida_nalt.clr_has_ti0 +ida_nalt.clr_has_ti1 +ida_nalt.clr_libitem +ida_nalt.clr_lzero0 +ida_nalt.clr_lzero1 +ida_nalt.clr_noret +ida_nalt.clr_notcode +ida_nalt.clr_notproc +ida_nalt.clr_retfp +ida_nalt.clr_terse_struc +ida_nalt.clr_tilcmt +ida_nalt.clr_usemodsp +ida_nalt.clr_usersp +ida_nalt.clr_userti +ida_nalt.clr_zstroff +ida_nalt.custom_data_type_ids_fids_array +ida_nalt.custom_data_type_ids_fids_array.__getitem__ +ida_nalt.custom_data_type_ids_fids_array.__init__ +ida_nalt.custom_data_type_ids_fids_array.__len__ +ida_nalt.custom_data_type_ids_fids_array.__setitem__ +ida_nalt.custom_data_type_ids_fids_array._get_bytes +ida_nalt.custom_data_type_ids_fids_array._set_bytes +ida_nalt.custom_data_type_ids_t +ida_nalt.custom_data_type_ids_t.__getFids +ida_nalt.custom_data_type_ids_t.__init__ +ida_nalt.custom_data_type_ids_t.dtid +ida_nalt.custom_data_type_ids_t.fids +ida_nalt.custom_data_type_ids_t.fids +ida_nalt.custom_data_type_ids_t.get_dtid +ida_nalt.custom_data_type_ids_t.set +ida_nalt.dbg_get_input_path +ida_nalt.del_absbase +ida_nalt.del_aflags +ida_nalt.del_alignment +ida_nalt.del_array_parameters +ida_nalt.del_custom_data_type_ids +ida_nalt.del_encoding +ida_nalt.del_ind_purged +ida_nalt.del_item_color +ida_nalt.del_op_tinfo +ida_nalt.del_refinfo +ida_nalt.del_source_linnum +ida_nalt.del_str_type +ida_nalt.del_switch_info +ida_nalt.del_switch_parent +ida_nalt.del_tinfo +ida_nalt.delete_imports +ida_nalt.ea2node +ida_nalt.encoding_from_strtype +ida_nalt.end_ea2node +ida_nalt.enum_const_t +ida_nalt.enum_const_t.__init__ +ida_nalt.enum_import_names +ida_nalt.find_custom_refinfo +ida_nalt.get_abi_name +ida_nalt.get_absbase +ida_nalt.get_aflags +ida_nalt.get_alignment +ida_nalt.get_archive_path +ida_nalt.get_array_parameters +ida_nalt.get_asm_inc_file +ida_nalt.get_custom_data_type_ids +ida_nalt.get_custom_refinfo +ida_nalt.get_default_encoding_idx +ida_nalt.get_elapsed_secs +ida_nalt.get_encoding_bpu +ida_nalt.get_encoding_bpu_by_name +ida_nalt.get_encoding_name +ida_nalt.get_encoding_qty +ida_nalt.get_gotea +ida_nalt.get_ida_notepad_text +ida_nalt.get_idb_ctime +ida_nalt.get_idb_nopens +ida_nalt.get_ids_modnode +ida_nalt.get_imagebase +ida_nalt.get_import_module_name +ida_nalt.get_import_module_qty +ida_nalt.get_ind_purged +ida_nalt.get_initial_ida_version +ida_nalt.get_initial_idb_version +ida_nalt.get_input_file_path +ida_nalt.get_item_color +ida_nalt.get_loader_format_name +ida_nalt.get_op_tinfo +ida_nalt.get_outfile_encoding_idx +ida_nalt.get_refinfo +ida_nalt.get_reftype_by_size +ida_nalt.get_root_filename +ida_nalt.get_source_linnum +ida_nalt.get_srcdbg_paths +ida_nalt.get_srcdbg_undesired_paths +ida_nalt.get_str_encoding_idx +ida_nalt.get_str_term1 +ida_nalt.get_str_term2 +ida_nalt.get_str_type +ida_nalt.get_str_type_code +ida_nalt.get_str_type_prefix_length +ida_nalt.get_strid +ida_nalt.get_strtype_bpu +ida_nalt.get_switch_info +ida_nalt.get_switch_info +ida_nalt.get_switch_parent +ida_nalt.get_tinfo +ida_nalt.getnode +ida_nalt.has_aflag_linnum +ida_nalt.has_aflag_lname +ida_nalt.has_aflag_ti +ida_nalt.has_aflag_ti0 +ida_nalt.has_aflag_ti1 +ida_nalt.has_lname +ida_nalt.has_ti +ida_nalt.has_ti0 +ida_nalt.has_ti1 +ida_nalt.hide_border +ida_nalt.hide_item +ida_nalt.is__bnot0 +ida_nalt.is__bnot1 +ida_nalt.is__invsign0 +ida_nalt.is__invsign1 +ida_nalt.is_aflag__bnot0 +ida_nalt.is_aflag__bnot1 +ida_nalt.is_aflag__invsign0 +ida_nalt.is_aflag__invsign1 +ida_nalt.is_aflag_align_flow +ida_nalt.is_aflag_colored_item +ida_nalt.is_aflag_data_guessed_by_hexrays +ida_nalt.is_aflag_fixed_spd +ida_nalt.is_aflag_func_guessed_by_hexrays +ida_nalt.is_aflag_hidden_border +ida_nalt.is_aflag_hidden_item +ida_nalt.is_aflag_libitem +ida_nalt.is_aflag_lzero0 +ida_nalt.is_aflag_lzero1 +ida_nalt.is_aflag_manual_insn +ida_nalt.is_aflag_noret +ida_nalt.is_aflag_notcode +ida_nalt.is_aflag_notproc +ida_nalt.is_aflag_public_name +ida_nalt.is_aflag_retfp +ida_nalt.is_aflag_terse_struc +ida_nalt.is_aflag_tilcmt +ida_nalt.is_aflag_type_determined_by_hexrays +ida_nalt.is_aflag_type_guessed_by_hexrays +ida_nalt.is_aflag_type_guessed_by_ida +ida_nalt.is_aflag_usersp +ida_nalt.is_aflag_userti +ida_nalt.is_aflag_weak_name +ida_nalt.is_aflag_zstroff +ida_nalt.is_align_flow +ida_nalt.is_colored_item +ida_nalt.is_data_guessed_by_hexrays +ida_nalt.is_finally_visible_item +ida_nalt.is_fixed_spd +ida_nalt.is_func_guessed_by_hexrays +ida_nalt.is_hidden_border +ida_nalt.is_hidden_item +ida_nalt.is_libitem +ida_nalt.is_lzero0 +ida_nalt.is_lzero1 +ida_nalt.is_noret +ida_nalt.is_notcode +ida_nalt.is_notproc +ida_nalt.is_pascal +ida_nalt.is_reftype_target_optional +ida_nalt.is_retfp +ida_nalt.is_terse_struc +ida_nalt.is_tilcmt +ida_nalt.is_type_determined_by_hexrays +ida_nalt.is_type_guessed_by_hexrays +ida_nalt.is_type_guessed_by_ida +ida_nalt.is_usersp +ida_nalt.is_userti +ida_nalt.is_visible_item +ida_nalt.is_zstroff +ida_nalt.make_str_type +ida_nalt.node2ea +ida_nalt.opinfo_t +ida_nalt.opinfo_t.__init__ +ida_nalt.opinfo_t.cd +ida_nalt.opinfo_t.ec +ida_nalt.opinfo_t.path +ida_nalt.opinfo_t.ri +ida_nalt.opinfo_t.strtype +ida_nalt.opinfo_t.tid +ida_nalt.printop_t +ida_nalt.printop_t.__init__ +ida_nalt.printop_t.get_ti +ida_nalt.printop_t.is_aflags_initialized +ida_nalt.printop_t.is_f64 +ida_nalt.printop_t.is_ti_initialized +ida_nalt.printop_t.set_aflags_initialized +ida_nalt.printop_t.set_ti_initialized +ida_nalt.refinfo_t +ida_nalt.refinfo_t.__init__ +ida_nalt.refinfo_t.base +ida_nalt.refinfo_t.flags +ida_nalt.refinfo_t.init +ida_nalt.refinfo_t.is_custom +ida_nalt.refinfo_t.is_no_ones +ida_nalt.refinfo_t.is_no_zeros +ida_nalt.refinfo_t.is_pastend +ida_nalt.refinfo_t.is_rvaoff +ida_nalt.refinfo_t.is_selfref +ida_nalt.refinfo_t.is_signed +ida_nalt.refinfo_t.is_subtract +ida_nalt.refinfo_t.is_target_optional +ida_nalt.refinfo_t.no_base_xref +ida_nalt.refinfo_t.set_type +ida_nalt.refinfo_t.target +ida_nalt.refinfo_t.tdelta +ida_nalt.refinfo_t.type +ida_nalt.rename_encoding +ida_nalt.retrieve_input_file_crc32 +ida_nalt.retrieve_input_file_md5 +ida_nalt.retrieve_input_file_sha256 +ida_nalt.retrieve_input_file_size +ida_nalt.set__bnot0 +ida_nalt.set__bnot1 +ida_nalt.set__invsign0 +ida_nalt.set__invsign1 +ida_nalt.set_abits +ida_nalt.set_absbase +ida_nalt.set_aflags +ida_nalt.set_align_flow +ida_nalt.set_alignment +ida_nalt.set_archive_path +ida_nalt.set_array_parameters +ida_nalt.set_asm_inc_file +ida_nalt.set_colored_item +ida_nalt.set_custom_data_type_ids +ida_nalt.set_data_guessed_by_hexrays +ida_nalt.set_default_encoding_idx +ida_nalt.set_fixed_spd +ida_nalt.set_func_guessed_by_hexrays +ida_nalt.set_gotea +ida_nalt.set_has_lname +ida_nalt.set_has_ti +ida_nalt.set_has_ti0 +ida_nalt.set_has_ti1 +ida_nalt.set_ida_notepad_text +ida_nalt.set_ids_modnode +ida_nalt.set_imagebase +ida_nalt.set_item_color +ida_nalt.set_libitem +ida_nalt.set_loader_format_name +ida_nalt.set_lzero0 +ida_nalt.set_lzero1 +ida_nalt.set_noret +ida_nalt.set_notcode +ida_nalt.set_notproc +ida_nalt.set_op_tinfo +ida_nalt.set_outfile_encoding_idx +ida_nalt.set_refinfo +ida_nalt.set_refinfo_ex +ida_nalt.set_retfp +ida_nalt.set_root_filename +ida_nalt.set_source_linnum +ida_nalt.set_srcdbg_paths +ida_nalt.set_srcdbg_undesired_paths +ida_nalt.set_str_encoding_idx +ida_nalt.set_str_type +ida_nalt.set_switch_info +ida_nalt.set_switch_parent +ida_nalt.set_terse_struc +ida_nalt.set_tilcmt +ida_nalt.set_tinfo +ida_nalt.set_type_determined_by_hexrays +ida_nalt.set_type_guessed_by_ida +ida_nalt.set_usemodsp +ida_nalt.set_usersp +ida_nalt.set_userti +ida_nalt.set_visible_item +ida_nalt.set_zstroff +ida_nalt.strpath_ids_array +ida_nalt.strpath_ids_array.__getitem__ +ida_nalt.strpath_ids_array.__init__ +ida_nalt.strpath_ids_array.__len__ +ida_nalt.strpath_ids_array.__setitem__ +ida_nalt.strpath_ids_array._get_bytes +ida_nalt.strpath_ids_array._set_bytes +ida_nalt.strpath_t +ida_nalt.strpath_t.__getIds +ida_nalt.strpath_t.__init__ +ida_nalt.switch_info_t +ida_nalt.switch_info_t.__init__ +ida_nalt.switch_info_t._get_values_lowcase +ida_nalt.switch_info_t._set_values_lowcase +ida_nalt.switch_info_t.assign +ida_nalt.switch_info_t.clear +ida_nalt.switch_info_t.custom +ida_nalt.switch_info_t.defjump +ida_nalt.switch_info_t.elbase +ida_nalt.switch_info_t.expr_ea +ida_nalt.switch_info_t.flags +ida_nalt.switch_info_t.get_jrange_vrange +ida_nalt.switch_info_t.get_jtable_element_size +ida_nalt.switch_info_t.get_jtable_size +ida_nalt.switch_info_t.get_lowcase +ida_nalt.switch_info_t.get_shift +ida_nalt.switch_info_t.get_version +ida_nalt.switch_info_t.get_vtable_element_size +ida_nalt.switch_info_t.has_default +ida_nalt.switch_info_t.has_elbase +ida_nalt.switch_info_t.is_custom +ida_nalt.switch_info_t.is_indirect +ida_nalt.switch_info_t.is_nolowcase +ida_nalt.switch_info_t.is_sparse +ida_nalt.switch_info_t.is_subtract +ida_nalt.switch_info_t.is_user_defined +ida_nalt.switch_info_t.jcases +ida_nalt.switch_info_t.jumps +ida_nalt.switch_info_t.lowcase +ida_nalt.switch_info_t.lowcase +ida_nalt.switch_info_t.marks +ida_nalt.switch_info_t.ncases +ida_nalt.switch_info_t.regdtype +ida_nalt.switch_info_t.regnum +ida_nalt.switch_info_t.set_elbase +ida_nalt.switch_info_t.set_expr +ida_nalt.switch_info_t.set_jtable_element_size +ida_nalt.switch_info_t.set_jtable_size +ida_nalt.switch_info_t.set_shift +ida_nalt.switch_info_t.set_vtable_element_size +ida_nalt.switch_info_t.startea +ida_nalt.switch_info_t.use_std_table +ida_nalt.switch_info_t.values +ida_nalt.switch_info_t.values +ida_nalt.switch_info_t__from_ptrval__ +ida_nalt.unhide_border +ida_nalt.unhide_item +ida_nalt.upd_abits +ida_nalt.uses_aflag_modsp +ida_nalt.uses_modsp +ida_name +ida_name.CN_KEEP_TRAILING_DIGITS +ida_name.CN_KEEP_UNDERSCORES +ida_name.DEBNAME_EXACT +ida_name.DEBNAME_LOWER +ida_name.DEBNAME_NICE +ida_name.DEBNAME_UPPER +ida_name.DQT_COMPILER +ida_name.DQT_FULL +ida_name.DQT_NAME_TYPE +ida_name.DQT_NPURGED_2 +ida_name.DQT_NPURGED_4 +ida_name.DQT_NPURGED_8 +ida_name.FUNC_IMPORT_PREFIX +ida_name.GETN_APPZERO +ida_name.GETN_NODUMMY +ida_name.GETN_NOFIXUP +ida_name.GNCN_NOCOLOR +ida_name.GNCN_NODBGNM +ida_name.GNCN_NOFUNC +ida_name.GNCN_NOLABEL +ida_name.GNCN_NOSEG +ida_name.GNCN_PREFDBG +ida_name.GNCN_REQFUNC +ida_name.GNCN_REQNAME +ida_name.GNCN_SEGNUM +ida_name.GNCN_SEG_FUNC +ida_name.GN_COLORED +ida_name.GN_DEMANGLED +ida_name.GN_ISRET +ida_name.GN_LOCAL +ida_name.GN_LONG +ida_name.GN_NOT_DUMMY +ida_name.GN_NOT_ISRET +ida_name.GN_SHORT +ida_name.GN_STRICT +ida_name.GN_VISIBLE +ida_name.MAXNAMELEN +ida_name.NT_ABS +ida_name.NT_BMASK +ida_name.NT_BYTE +ida_name.NT_ENUM +ida_name.NT_LOCAL +ida_name.NT_NONE +ida_name.NT_REGVAR +ida_name.NT_SEG +ida_name.NT_STKVAR +ida_name.NT_STROFF +ida_name.NearestName +ida_name.NearestName.__getitem__ +ida_name.NearestName.__init__ +ida_name.NearestName.__iter__ +ida_name.NearestName._get_item +ida_name.NearestName.find +ida_name.NearestName.update +ida_name.SN_AUTO +ida_name.SN_CHECK +ida_name.SN_DELTAIL +ida_name.SN_FORCE +ida_name.SN_IDBENC +ida_name.SN_LOCAL +ida_name.SN_NOCHECK +ida_name.SN_NODUMMY +ida_name.SN_NOLIST +ida_name.SN_NON_AUTO +ida_name.SN_NON_PUBLIC +ida_name.SN_NON_WEAK +ida_name.SN_NOWARN +ida_name.SN_PUBLIC +ida_name.SN_WEAK +ida_name.UCDR_MANGLED +ida_name.UCDR_NAME +ida_name.UCDR_STRLIT +ida_name.UCDR_TYPE +ida_name.VNT_IDENT +ida_name.VNT_STRLIT +ida_name.VNT_TYPE +ida_name.VNT_UDTMEM +ida_name.VNT_VISIBLE +ida_name.append_struct_fields +ida_name.calc_gtn_flags +ida_name.cleanup_name +ida_name.del_debug_names +ida_name.del_global_name +ida_name.del_local_name +ida_name.demangle_name +ida_name.ea_name_t +ida_name.ea_name_t.__init__ +ida_name.ea_name_vec_t +ida_name.ea_name_vec_t.__getitem__ +ida_name.ea_name_vec_t.__init__ +ida_name.ea_name_vec_t.__len__ +ida_name.ea_name_vec_t.__setitem__ +ida_name.ea_name_vec_t.append +ida_name.ea_name_vec_t.at +ida_name.ea_name_vec_t.begin +ida_name.ea_name_vec_t.capacity +ida_name.ea_name_vec_t.clear +ida_name.ea_name_vec_t.empty +ida_name.ea_name_vec_t.end +ida_name.ea_name_vec_t.erase +ida_name.ea_name_vec_t.extend +ida_name.ea_name_vec_t.extract +ida_name.ea_name_vec_t.grow +ida_name.ea_name_vec_t.inject +ida_name.ea_name_vec_t.insert +ida_name.ea_name_vec_t.pop_back +ida_name.ea_name_vec_t.push_back +ida_name.ea_name_vec_t.qclear +ida_name.ea_name_vec_t.reserve +ida_name.ea_name_vec_t.resize +ida_name.ea_name_vec_t.size +ida_name.ea_name_vec_t.swap +ida_name.ea_name_vec_t.truncate +ida_name.extract_name +ida_name.force_name +ida_name.get_colored_demangled_name +ida_name.get_colored_long_name +ida_name.get_colored_name +ida_name.get_colored_short_name +ida_name.get_cp_validity +ida_name.get_debug_name +ida_name.get_debug_name_ea +ida_name.get_debug_names +ida_name.get_demangled_name +ida_name.get_ea_name +ida_name.get_long_name +ida_name.get_mangled_name_type +ida_name.get_name +ida_name.get_name_base_ea +ida_name.get_name_color +ida_name.get_name_ea +ida_name.get_name_expr +ida_name.get_name_value +ida_name.get_nice_colored_name +ida_name.get_nlist_ea +ida_name.get_nlist_idx +ida_name.get_nlist_name +ida_name.get_nlist_size +ida_name.get_short_name +ida_name.get_visible_name +ida_name.hide_name +ida_name.is_ident +ida_name.is_ident_cp +ida_name.is_in_nlist +ida_name.is_name_defined_locally +ida_name.is_public_name +ida_name.is_strlit_cp +ida_name.is_uname +ida_name.is_valid_cp +ida_name.is_valid_typename +ida_name.is_visible_cp +ida_name.is_weak_name +ida_name.make_name_auto +ida_name.make_name_non_public +ida_name.make_name_non_weak +ida_name.make_name_public +ida_name.make_name_user +ida_name.make_name_weak +ida_name.rebuild_nlist +ida_name.reorder_dummy_names +ida_name.set_cp_validity +ida_name.set_debug_name +ida_name.set_dummy_name +ida_name.set_name +ida_name.show_name +ida_name.validate_name +ida_netnode +ida_netnode.BADNODE +ida_netnode.MAXNAMESIZE +ida_netnode.MAXSPECSIZE +ida_netnode.MAX_NODENAME_SIZE +ida_netnode.atag +ida_netnode.exist +ida_netnode.htag +ida_netnode.ltag +ida_netnode.netnode +ida_netnode.netnode.__eq__ +ida_netnode.netnode.__init__ +ida_netnode.netnode.__ne__ +ida_netnode.netnode.altdel +ida_netnode.netnode.altdel_all +ida_netnode.netnode.altdel_ea +ida_netnode.netnode.altdel_idx8 +ida_netnode.netnode.altfirst +ida_netnode.netnode.altfirst_idx8 +ida_netnode.netnode.altlast +ida_netnode.netnode.altlast_idx8 +ida_netnode.netnode.altnext +ida_netnode.netnode.altnext_idx8 +ida_netnode.netnode.altprev +ida_netnode.netnode.altprev_idx8 +ida_netnode.netnode.altset +ida_netnode.netnode.altset_ea +ida_netnode.netnode.altset_idx8 +ida_netnode.netnode.altshift +ida_netnode.netnode.altval +ida_netnode.netnode.altval_ea +ida_netnode.netnode.altval_idx8 +ida_netnode.netnode.blobshift +ida_netnode.netnode.blobsize +ida_netnode.netnode.blobsize_ea +ida_netnode.netnode.chardel +ida_netnode.netnode.chardel_ea +ida_netnode.netnode.chardel_idx8 +ida_netnode.netnode.charfirst +ida_netnode.netnode.charfirst_idx8 +ida_netnode.netnode.charlast +ida_netnode.netnode.charlast_idx8 +ida_netnode.netnode.charnext +ida_netnode.netnode.charnext_idx8 +ida_netnode.netnode.charprev +ida_netnode.netnode.charprev_idx8 +ida_netnode.netnode.charset +ida_netnode.netnode.charset_ea +ida_netnode.netnode.charset_idx8 +ida_netnode.netnode.charshift +ida_netnode.netnode.charval +ida_netnode.netnode.charval_ea +ida_netnode.netnode.charval_idx8 +ida_netnode.netnode.copyto +ida_netnode.netnode.create +ida_netnode.netnode.delblob +ida_netnode.netnode.delblob_ea +ida_netnode.netnode.delvalue +ida_netnode.netnode.eadel +ida_netnode.netnode.eadel_idx8 +ida_netnode.netnode.eaget +ida_netnode.netnode.eaget_idx +ida_netnode.netnode.eaget_idx8 +ida_netnode.netnode.easet +ida_netnode.netnode.easet_idx +ida_netnode.netnode.easet_idx8 +ida_netnode.netnode.end +ida_netnode.netnode.exist +ida_netnode.netnode.get_name +ida_netnode.netnode.getblob +ida_netnode.netnode.getblob_ea +ida_netnode.netnode.getclob +ida_netnode.netnode.hashdel +ida_netnode.netnode.hashdel_all +ida_netnode.netnode.hashfirst +ida_netnode.netnode.hashlast +ida_netnode.netnode.hashnext +ida_netnode.netnode.hashprev +ida_netnode.netnode.hashset +ida_netnode.netnode.hashset_buf +ida_netnode.netnode.hashset_idx +ida_netnode.netnode.hashstr +ida_netnode.netnode.hashstr_buf +ida_netnode.netnode.hashval +ida_netnode.netnode.hashval_long +ida_netnode.netnode.index +ida_netnode.netnode.kill +ida_netnode.netnode.long_value +ida_netnode.netnode.lower_bound +ida_netnode.netnode.lower_bound_ea +ida_netnode.netnode.lower_bound_idx8 +ida_netnode.netnode.moveto +ida_netnode.netnode.next +ida_netnode.netnode.prev +ida_netnode.netnode.rename +ida_netnode.netnode.set +ida_netnode.netnode.set_long +ida_netnode.netnode.setblob +ida_netnode.netnode.setblob_ea +ida_netnode.netnode.start +ida_netnode.netnode.supdel +ida_netnode.netnode.supdel_all +ida_netnode.netnode.supdel_ea +ida_netnode.netnode.supdel_idx8 +ida_netnode.netnode.supdel_range +ida_netnode.netnode.supdel_range_idx8 +ida_netnode.netnode.supfirst +ida_netnode.netnode.supfirst_idx8 +ida_netnode.netnode.suplast +ida_netnode.netnode.suplast_idx8 +ida_netnode.netnode.supnext +ida_netnode.netnode.supnext_idx8 +ida_netnode.netnode.supprev +ida_netnode.netnode.supprev_idx8 +ida_netnode.netnode.supset +ida_netnode.netnode.supset_ea +ida_netnode.netnode.supset_idx8 +ida_netnode.netnode.supshift +ida_netnode.netnode.supstr +ida_netnode.netnode.supstr_ea +ida_netnode.netnode.supstr_idx8 +ida_netnode.netnode.supval +ida_netnode.netnode.supval_ea +ida_netnode.netnode.supval_idx8 +ida_netnode.netnode.valobj +ida_netnode.netnode.valstr +ida_netnode.netnode.value_exists +ida_netnode.ntag +ida_netnode.stag +ida_netnode.vtag +ida_offset +ida_offset.add_refinfo_dref +ida_offset.calc_basevalue +ida_offset.calc_offset_base +ida_offset.calc_probable_base_by_value +ida_offset.calc_reference_data +ida_offset.calc_target +ida_offset.can_be_off32 +ida_offset.get_default_reftype +ida_offset.get_offbase +ida_offset.get_offset_expr +ida_offset.get_offset_expression +ida_offset.op_offset +ida_offset.op_offset_ex +ida_offset.op_plain_offset +ida_pro +ida_pro.CP_UTF16 +ida_pro.IDA_SDK_VERSION +ida_pro.IDBDEC_ESCAPE +ida_pro.IOREDIR_APPEND +ida_pro.IOREDIR_INPUT +ida_pro.IOREDIR_OUTPUT +ida_pro.IOREDIR_QUOTED +ida_pro.MAXSTR +ida_pro.SUBSTCHAR +ida_pro.__MF__ +ida_pro.__qmutex_t +ida_pro.__qmutex_t.__init__ +ida_pro.__qsemaphore_t +ida_pro.__qsemaphore_t.__init__ +ida_pro.__qthread_t +ida_pro.__qthread_t.__init__ +ida_pro._qstrvec_t +ida_pro._qstrvec_t.__get_size +ida_pro._qstrvec_t.__getitem__ +ida_pro._qstrvec_t.__init__ +ida_pro._qstrvec_t.__setitem__ +ida_pro._qstrvec_t._create_clink +ida_pro._qstrvec_t._del_clink +ida_pro._qstrvec_t._get_clink_ptr +ida_pro._qstrvec_t.add +ida_pro._qstrvec_t.addressof +ida_pro._qstrvec_t.assign +ida_pro._qstrvec_t.clear +ida_pro._qstrvec_t.from_list +ida_pro._qstrvec_t.insert +ida_pro._qstrvec_t.remove +ida_pro._qstrvec_t.size +ida_pro.adiff_pointer +ida_pro.adiff_pointer.__init__ +ida_pro.adiff_pointer.assign +ida_pro.adiff_pointer.cast +ida_pro.adiff_pointer.frompointer +ida_pro.adiff_pointer.value +ida_pro.asize_pointer +ida_pro.asize_pointer.__init__ +ida_pro.asize_pointer.assign +ida_pro.asize_pointer.cast +ida_pro.asize_pointer.frompointer +ida_pro.asize_pointer.value +ida_pro.bool_pointer +ida_pro.bool_pointer.__init__ +ida_pro.bool_pointer.assign +ida_pro.bool_pointer.cast +ida_pro.bool_pointer.frompointer +ida_pro.bool_pointer.value +ida_pro.boolvec_t +ida_pro.boolvec_t.__eq__ +ida_pro.boolvec_t.__getitem__ +ida_pro.boolvec_t.__init__ +ida_pro.boolvec_t.__len__ +ida_pro.boolvec_t.__ne__ +ida_pro.boolvec_t.__setitem__ +ida_pro.boolvec_t._del +ida_pro.boolvec_t.add_unique +ida_pro.boolvec_t.append +ida_pro.boolvec_t.at +ida_pro.boolvec_t.begin +ida_pro.boolvec_t.capacity +ida_pro.boolvec_t.clear +ida_pro.boolvec_t.empty +ida_pro.boolvec_t.end +ida_pro.boolvec_t.erase +ida_pro.boolvec_t.extend +ida_pro.boolvec_t.extract +ida_pro.boolvec_t.find +ida_pro.boolvec_t.grow +ida_pro.boolvec_t.has +ida_pro.boolvec_t.inject +ida_pro.boolvec_t.insert +ida_pro.boolvec_t.pop_back +ida_pro.boolvec_t.push_back +ida_pro.boolvec_t.qclear +ida_pro.boolvec_t.reserve +ida_pro.boolvec_t.resize +ida_pro.boolvec_t.size +ida_pro.boolvec_t.swap +ida_pro.boolvec_t.truncate +ida_pro.channel_redir_t +ida_pro.channel_redir_t.__init__ +ida_pro.channel_redir_t.fd +ida_pro.channel_redir_t.file +ida_pro.channel_redir_t.flags +ida_pro.channel_redir_t.is_append +ida_pro.channel_redir_t.is_input +ida_pro.channel_redir_t.is_output +ida_pro.channel_redir_t.is_quoted +ida_pro.channel_redir_t.length +ida_pro.channel_redir_t.start +ida_pro.char_pointer +ida_pro.char_pointer.__init__ +ida_pro.char_pointer.assign +ida_pro.char_pointer.cast +ida_pro.char_pointer.frompointer +ida_pro.char_pointer.value +ida_pro.check_process_exit +ida_pro.ea32_pointer +ida_pro.ea32_pointer.__init__ +ida_pro.ea32_pointer.assign +ida_pro.ea32_pointer.cast +ida_pro.ea32_pointer.frompointer +ida_pro.ea32_pointer.value +ida_pro.ea64_pointer +ida_pro.ea64_pointer.__init__ +ida_pro.ea64_pointer.assign +ida_pro.ea64_pointer.cast +ida_pro.ea64_pointer.frompointer +ida_pro.ea64_pointer.value +ida_pro.ea_array +ida_pro.ea_array.__getitem__ +ida_pro.ea_array.__init__ +ida_pro.ea_array.__setitem__ +ida_pro.ea_array.cast +ida_pro.ea_array.frompointer +ida_pro.ea_pointer +ida_pro.ea_pointer.__init__ +ida_pro.ea_pointer.assign +ida_pro.ea_pointer.cast +ida_pro.ea_pointer.frompointer +ida_pro.ea_pointer.value +ida_pro.extend_sign +ida_pro.flags64_pointer +ida_pro.flags64_pointer.__init__ +ida_pro.flags64_pointer.assign +ida_pro.flags64_pointer.cast +ida_pro.flags64_pointer.frompointer +ida_pro.flags64_pointer.value +ida_pro.flags_pointer +ida_pro.flags_pointer.__init__ +ida_pro.flags_pointer.assign +ida_pro.flags_pointer.cast +ida_pro.flags_pointer.frompointer +ida_pro.flags_pointer.value +ida_pro.get_available_core_count +ida_pro.get_logical_core_count +ida_pro.get_login_name +ida_pro.get_physical_core_count +ida_pro.instant_dbgopts_t +ida_pro.instant_dbgopts_t.__init__ +ida_pro.instant_dbgopts_t.attach +ida_pro.instant_dbgopts_t.debmod +ida_pro.instant_dbgopts_t.env +ida_pro.instant_dbgopts_t.event_id +ida_pro.instant_dbgopts_t.host +ida_pro.instant_dbgopts_t.pid +ida_pro.instant_dbgopts_t.port +ida_pro.int16_pointer +ida_pro.int16_pointer.__init__ +ida_pro.int16_pointer.assign +ida_pro.int16_pointer.cast +ida_pro.int16_pointer.frompointer +ida_pro.int16_pointer.value +ida_pro.int32_pointer +ida_pro.int32_pointer.__init__ +ida_pro.int32_pointer.assign +ida_pro.int32_pointer.cast +ida_pro.int32_pointer.frompointer +ida_pro.int32_pointer.value +ida_pro.int64_pointer +ida_pro.int64_pointer.__init__ +ida_pro.int64_pointer.assign +ida_pro.int64_pointer.cast +ida_pro.int64_pointer.frompointer +ida_pro.int64_pointer.value +ida_pro.int64vec_t +ida_pro.int64vec_t.__eq__ +ida_pro.int64vec_t.__getitem__ +ida_pro.int64vec_t.__init__ +ida_pro.int64vec_t.__len__ +ida_pro.int64vec_t.__ne__ +ida_pro.int64vec_t.__setitem__ +ida_pro.int64vec_t._del +ida_pro.int64vec_t.add_unique +ida_pro.int64vec_t.append +ida_pro.int64vec_t.at +ida_pro.int64vec_t.begin +ida_pro.int64vec_t.capacity +ida_pro.int64vec_t.clear +ida_pro.int64vec_t.empty +ida_pro.int64vec_t.end +ida_pro.int64vec_t.erase +ida_pro.int64vec_t.extend +ida_pro.int64vec_t.extract +ida_pro.int64vec_t.find +ida_pro.int64vec_t.has +ida_pro.int64vec_t.inject +ida_pro.int64vec_t.insert +ida_pro.int64vec_t.pop_back +ida_pro.int64vec_t.push_back +ida_pro.int64vec_t.qclear +ida_pro.int64vec_t.reserve +ida_pro.int64vec_t.resize +ida_pro.int64vec_t.size +ida_pro.int64vec_t.swap +ida_pro.int64vec_t.truncate +ida_pro.int8_pointer +ida_pro.int8_pointer.__init__ +ida_pro.int8_pointer.assign +ida_pro.int8_pointer.cast +ida_pro.int8_pointer.frompointer +ida_pro.int8_pointer.value +ida_pro.int_pointer +ida_pro.int_pointer.__init__ +ida_pro.int_pointer.assign +ida_pro.int_pointer.cast +ida_pro.int_pointer.frompointer +ida_pro.int_pointer.value +ida_pro.intvec_t +ida_pro.intvec_t.__eq__ +ida_pro.intvec_t.__getitem__ +ida_pro.intvec_t.__init__ +ida_pro.intvec_t.__len__ +ida_pro.intvec_t.__ne__ +ida_pro.intvec_t.__setitem__ +ida_pro.intvec_t._del +ida_pro.intvec_t.add_unique +ida_pro.intvec_t.append +ida_pro.intvec_t.at +ida_pro.intvec_t.begin +ida_pro.intvec_t.capacity +ida_pro.intvec_t.clear +ida_pro.intvec_t.empty +ida_pro.intvec_t.end +ida_pro.intvec_t.erase +ida_pro.intvec_t.extend +ida_pro.intvec_t.extract +ida_pro.intvec_t.find +ida_pro.intvec_t.has +ida_pro.intvec_t.inject +ida_pro.intvec_t.insert +ida_pro.intvec_t.pop_back +ida_pro.intvec_t.push_back +ida_pro.intvec_t.qclear +ida_pro.intvec_t.reserve +ida_pro.intvec_t.resize +ida_pro.intvec_t.size +ida_pro.intvec_t.swap +ida_pro.intvec_t.truncate +ida_pro.is_control_tty +ida_pro.is_cvt64 +ida_pro.is_main_thread +ida_pro.log2ceil +ida_pro.log2floor +ida_pro.parse_dbgopts +ida_pro.plugin_options_t +ida_pro.plugin_options_t.__init__ +ida_pro.plugin_options_t.erase +ida_pro.plugin_options_t.find +ida_pro.qatoll +ida_pro.qcontrol_tty +ida_pro.qdetach_tty +ida_pro.qexit +ida_pro.qmutex_locker_t +ida_pro.qmutex_locker_t.__init__ +ida_pro.qrefcnt_obj_t +ida_pro.qrefcnt_obj_t.__init__ +ida_pro.qrefcnt_obj_t.refcnt +ida_pro.qrefcnt_obj_t.release +ida_pro.qstrvec_t_add +ida_pro.qstrvec_t_addressof +ida_pro.qstrvec_t_assign +ida_pro.qstrvec_t_clear +ida_pro.qstrvec_t_create +ida_pro.qstrvec_t_destroy +ida_pro.qstrvec_t_from_list +ida_pro.qstrvec_t_get +ida_pro.qstrvec_t_get_clink +ida_pro.qstrvec_t_get_clink_ptr +ida_pro.qstrvec_t_insert +ida_pro.qstrvec_t_remove +ida_pro.qstrvec_t_set +ida_pro.qstrvec_t_size +ida_pro.qthread_equal +ida_pro.quote_cmdline_arg +ida_pro.qvector_reserve +ida_pro.readbytes +ida_pro.reloc_value +ida_pro.relocate_relobj +ida_pro.sel_array +ida_pro.sel_array.__getitem__ +ida_pro.sel_array.__init__ +ida_pro.sel_array.__setitem__ +ida_pro.sel_array.cast +ida_pro.sel_array.frompointer +ida_pro.sel_pointer +ida_pro.sel_pointer.__init__ +ida_pro.sel_pointer.assign +ida_pro.sel_pointer.cast +ida_pro.sel_pointer.frompointer +ida_pro.sel_pointer.value +ida_pro.short_pointer +ida_pro.short_pointer.__init__ +ida_pro.short_pointer.assign +ida_pro.short_pointer.cast +ida_pro.short_pointer.frompointer +ida_pro.short_pointer.value +ida_pro.sint8_pointer +ida_pro.sint8_pointer.__init__ +ida_pro.sint8_pointer.assign +ida_pro.sint8_pointer.cast +ida_pro.sint8_pointer.frompointer +ida_pro.sint8_pointer.value +ida_pro.sizevec_t +ida_pro.sizevec_t.__eq__ +ida_pro.sizevec_t.__getitem__ +ida_pro.sizevec_t.__init__ +ida_pro.sizevec_t.__len__ +ida_pro.sizevec_t.__ne__ +ida_pro.sizevec_t.__setitem__ +ida_pro.sizevec_t._del +ida_pro.sizevec_t.add_unique +ida_pro.sizevec_t.append +ida_pro.sizevec_t.at +ida_pro.sizevec_t.begin +ida_pro.sizevec_t.capacity +ida_pro.sizevec_t.clear +ida_pro.sizevec_t.empty +ida_pro.sizevec_t.end +ida_pro.sizevec_t.erase +ida_pro.sizevec_t.extend +ida_pro.sizevec_t.extract +ida_pro.sizevec_t.find +ida_pro.sizevec_t.grow +ida_pro.sizevec_t.has +ida_pro.sizevec_t.inject +ida_pro.sizevec_t.insert +ida_pro.sizevec_t.pop_back +ida_pro.sizevec_t.push_back +ida_pro.sizevec_t.qclear +ida_pro.sizevec_t.reserve +ida_pro.sizevec_t.resize +ida_pro.sizevec_t.size +ida_pro.sizevec_t.swap +ida_pro.sizevec_t.truncate +ida_pro.ssize_pointer +ida_pro.ssize_pointer.__init__ +ida_pro.ssize_pointer.assign +ida_pro.ssize_pointer.cast +ida_pro.ssize_pointer.frompointer +ida_pro.ssize_pointer.value +ida_pro.str2user +ida_pro.strvec_t +ida_pro.strvec_t.__getitem__ +ida_pro.strvec_t.__init__ +ida_pro.strvec_t.__len__ +ida_pro.strvec_t.__setitem__ +ida_pro.strvec_t.append +ida_pro.strvec_t.at +ida_pro.strvec_t.begin +ida_pro.strvec_t.capacity +ida_pro.strvec_t.clear +ida_pro.strvec_t.empty +ida_pro.strvec_t.end +ida_pro.strvec_t.erase +ida_pro.strvec_t.extend +ida_pro.strvec_t.extract +ida_pro.strvec_t.grow +ida_pro.strvec_t.inject +ida_pro.strvec_t.insert +ida_pro.strvec_t.pop_back +ida_pro.strvec_t.push_back +ida_pro.strvec_t.qclear +ida_pro.strvec_t.reserve +ida_pro.strvec_t.resize +ida_pro.strvec_t.size +ida_pro.strvec_t.swap +ida_pro.strvec_t.truncate +ida_pro.sval_pointer +ida_pro.sval_pointer.__init__ +ida_pro.sval_pointer.assign +ida_pro.sval_pointer.cast +ida_pro.sval_pointer.frompointer +ida_pro.sval_pointer.value +ida_pro.tid_array +ida_pro.tid_array.__getitem__ +ida_pro.tid_array.__init__ +ida_pro.tid_array.__setitem__ +ida_pro.tid_array.cast +ida_pro.tid_array.frompointer +ida_pro.tid_pointer +ida_pro.tid_pointer.__init__ +ida_pro.tid_pointer.assign +ida_pro.tid_pointer.cast +ida_pro.tid_pointer.frompointer +ida_pro.tid_pointer.value +ida_pro.uchar_array +ida_pro.uchar_array.__getitem__ +ida_pro.uchar_array.__init__ +ida_pro.uchar_array.__setitem__ +ida_pro.uchar_array.cast +ida_pro.uchar_array.frompointer +ida_pro.uchar_pointer +ida_pro.uchar_pointer.__init__ +ida_pro.uchar_pointer.assign +ida_pro.uchar_pointer.cast +ida_pro.uchar_pointer.frompointer +ida_pro.uchar_pointer.value +ida_pro.uint16_pointer +ida_pro.uint16_pointer.__init__ +ida_pro.uint16_pointer.assign +ida_pro.uint16_pointer.cast +ida_pro.uint16_pointer.frompointer +ida_pro.uint16_pointer.value +ida_pro.uint32_pointer +ida_pro.uint32_pointer.__init__ +ida_pro.uint32_pointer.assign +ida_pro.uint32_pointer.cast +ida_pro.uint32_pointer.frompointer +ida_pro.uint32_pointer.value +ida_pro.uint64_pointer +ida_pro.uint64_pointer.__init__ +ida_pro.uint64_pointer.assign +ida_pro.uint64_pointer.cast +ida_pro.uint64_pointer.frompointer +ida_pro.uint64_pointer.value +ida_pro.uint64vec_t +ida_pro.uint64vec_t.__eq__ +ida_pro.uint64vec_t.__getitem__ +ida_pro.uint64vec_t.__init__ +ida_pro.uint64vec_t.__len__ +ida_pro.uint64vec_t.__ne__ +ida_pro.uint64vec_t.__setitem__ +ida_pro.uint64vec_t._del +ida_pro.uint64vec_t.add_unique +ida_pro.uint64vec_t.append +ida_pro.uint64vec_t.at +ida_pro.uint64vec_t.begin +ida_pro.uint64vec_t.capacity +ida_pro.uint64vec_t.clear +ida_pro.uint64vec_t.empty +ida_pro.uint64vec_t.end +ida_pro.uint64vec_t.erase +ida_pro.uint64vec_t.extend +ida_pro.uint64vec_t.extract +ida_pro.uint64vec_t.find +ida_pro.uint64vec_t.has +ida_pro.uint64vec_t.inject +ida_pro.uint64vec_t.insert +ida_pro.uint64vec_t.pop_back +ida_pro.uint64vec_t.push_back +ida_pro.uint64vec_t.qclear +ida_pro.uint64vec_t.reserve +ida_pro.uint64vec_t.resize +ida_pro.uint64vec_t.size +ida_pro.uint64vec_t.swap +ida_pro.uint64vec_t.truncate +ida_pro.uint8_pointer +ida_pro.uint8_pointer.__init__ +ida_pro.uint8_pointer.assign +ida_pro.uint8_pointer.cast +ida_pro.uint8_pointer.frompointer +ida_pro.uint8_pointer.value +ida_pro.uint_pointer +ida_pro.uint_pointer.__init__ +ida_pro.uint_pointer.assign +ida_pro.uint_pointer.cast +ida_pro.uint_pointer.frompointer +ida_pro.uint_pointer.value +ida_pro.uintvec_t +ida_pro.uintvec_t.__eq__ +ida_pro.uintvec_t.__getitem__ +ida_pro.uintvec_t.__init__ +ida_pro.uintvec_t.__len__ +ida_pro.uintvec_t.__ne__ +ida_pro.uintvec_t.__setitem__ +ida_pro.uintvec_t._del +ida_pro.uintvec_t.add_unique +ida_pro.uintvec_t.append +ida_pro.uintvec_t.at +ida_pro.uintvec_t.begin +ida_pro.uintvec_t.capacity +ida_pro.uintvec_t.clear +ida_pro.uintvec_t.empty +ida_pro.uintvec_t.end +ida_pro.uintvec_t.erase +ida_pro.uintvec_t.extend +ida_pro.uintvec_t.extract +ida_pro.uintvec_t.find +ida_pro.uintvec_t.has +ida_pro.uintvec_t.inject +ida_pro.uintvec_t.insert +ida_pro.uintvec_t.pop_back +ida_pro.uintvec_t.push_back +ida_pro.uintvec_t.qclear +ida_pro.uintvec_t.reserve +ida_pro.uintvec_t.resize +ida_pro.uintvec_t.size +ida_pro.uintvec_t.swap +ida_pro.uintvec_t.truncate +ida_pro.ushort_pointer +ida_pro.ushort_pointer.__init__ +ida_pro.ushort_pointer.assign +ida_pro.ushort_pointer.cast +ida_pro.ushort_pointer.frompointer +ida_pro.ushort_pointer.value +ida_pro.uval_array +ida_pro.uval_array.__getitem__ +ida_pro.uval_array.__init__ +ida_pro.uval_array.__setitem__ +ida_pro.uval_array.cast +ida_pro.uval_array.frompointer +ida_pro.uval_pointer +ida_pro.uval_pointer.__init__ +ida_pro.uval_pointer.assign +ida_pro.uval_pointer.cast +ida_pro.uval_pointer.frompointer +ida_pro.uval_pointer.value +ida_pro.writebytes +ida_problems +ida_problems.PR_ATTN +ida_problems.PR_BADSTACK +ida_problems.PR_COLLISION +ida_problems.PR_DECIMP +ida_problems.PR_DISASM +ida_problems.PR_END +ida_problems.PR_FINAL +ida_problems.PR_HEAD +ida_problems.PR_ILLADDR +ida_problems.PR_JUMP +ida_problems.PR_MANYLINES +ida_problems.PR_NOBASE +ida_problems.PR_NOCMT +ida_problems.PR_NOFOP +ida_problems.PR_NONAME +ida_problems.PR_NOXREFS +ida_problems.PR_ROLLED +ida_problems.forget_problem +ida_problems.get_problem +ida_problems.get_problem_desc +ida_problems.get_problem_name +ida_problems.is_problem_present +ida_problems.remember_problem +ida_problems.was_ida_decision +ida_range +ida_range.RANGE_KIND_FUNC +ida_range.RANGE_KIND_HIDDEN_RANGE +ida_range.RANGE_KIND_SEGMENT +ida_range.array_of_rangesets +ida_range.array_of_rangesets.__eq__ +ida_range.array_of_rangesets.__getitem__ +ida_range.array_of_rangesets.__init__ +ida_range.array_of_rangesets.__len__ +ida_range.array_of_rangesets.__ne__ +ida_range.array_of_rangesets.__setitem__ +ida_range.array_of_rangesets._del +ida_range.array_of_rangesets.add_unique +ida_range.array_of_rangesets.append +ida_range.array_of_rangesets.at +ida_range.array_of_rangesets.begin +ida_range.array_of_rangesets.capacity +ida_range.array_of_rangesets.clear +ida_range.array_of_rangesets.empty +ida_range.array_of_rangesets.end +ida_range.array_of_rangesets.erase +ida_range.array_of_rangesets.extend +ida_range.array_of_rangesets.extract +ida_range.array_of_rangesets.find +ida_range.array_of_rangesets.grow +ida_range.array_of_rangesets.has +ida_range.array_of_rangesets.inject +ida_range.array_of_rangesets.insert +ida_range.array_of_rangesets.pop_back +ida_range.array_of_rangesets.push_back +ida_range.array_of_rangesets.qclear +ida_range.array_of_rangesets.reserve +ida_range.array_of_rangesets.resize +ida_range.array_of_rangesets.size +ida_range.array_of_rangesets.swap +ida_range.array_of_rangesets.truncate +ida_range.range_t +ida_range.range_t.__eq__ +ida_range.range_t.__ge__ +ida_range.range_t.__gt__ +ida_range.range_t.__init__ +ida_range.range_t.__le__ +ida_range.range_t.__lt__ +ida_range.range_t.__ne__ +ida_range.range_t._print +ida_range.range_t.clear +ida_range.range_t.compare +ida_range.range_t.contains +ida_range.range_t.empty +ida_range.range_t.end_ea +ida_range.range_t.extend +ida_range.range_t.intersect +ida_range.range_t.overlaps +ida_range.range_t.size +ida_range.range_t.start_ea +ida_range.range_t_print +ida_range.rangeset_t +ida_range.rangeset_t.__eq__ +ida_range.rangeset_t.__getitem__ +ida_range.rangeset_t.__init__ +ida_range.rangeset_t.__ne__ +ida_range.rangeset_t._print +ida_range.rangeset_t.add +ida_range.rangeset_t.begin +ida_range.rangeset_t.cached_range +ida_range.rangeset_t.clear +ida_range.rangeset_t.contains +ida_range.rangeset_t.empty +ida_range.rangeset_t.end +ida_range.rangeset_t.find_range +ida_range.rangeset_t.getrange +ida_range.rangeset_t.has_common +ida_range.rangeset_t.includes +ida_range.rangeset_t.intersect +ida_range.rangeset_t.is_equal +ida_range.rangeset_t.is_subset_of +ida_range.rangeset_t.lastrange +ida_range.rangeset_t.next_addr +ida_range.rangeset_t.next_range +ida_range.rangeset_t.nranges +ida_range.rangeset_t.prev_addr +ida_range.rangeset_t.prev_range +ida_range.rangeset_t.sub +ida_range.rangeset_t.swap +ida_range.rangevec_base_t +ida_range.rangevec_base_t.__eq__ +ida_range.rangevec_base_t.__getitem__ +ida_range.rangevec_base_t.__init__ +ida_range.rangevec_base_t.__len__ +ida_range.rangevec_base_t.__ne__ +ida_range.rangevec_base_t.__setitem__ +ida_range.rangevec_base_t._del +ida_range.rangevec_base_t.add_unique +ida_range.rangevec_base_t.append +ida_range.rangevec_base_t.at +ida_range.rangevec_base_t.begin +ida_range.rangevec_base_t.capacity +ida_range.rangevec_base_t.clear +ida_range.rangevec_base_t.empty +ida_range.rangevec_base_t.end +ida_range.rangevec_base_t.erase +ida_range.rangevec_base_t.extend +ida_range.rangevec_base_t.extract +ida_range.rangevec_base_t.find +ida_range.rangevec_base_t.grow +ida_range.rangevec_base_t.has +ida_range.rangevec_base_t.inject +ida_range.rangevec_base_t.insert +ida_range.rangevec_base_t.pop_back +ida_range.rangevec_base_t.push_back +ida_range.rangevec_base_t.qclear +ida_range.rangevec_base_t.reserve +ida_range.rangevec_base_t.resize +ida_range.rangevec_base_t.size +ida_range.rangevec_base_t.swap +ida_range.rangevec_base_t.truncate +ida_range.rangevec_t +ida_range.rangevec_t.__init__ +ida_registry +ida_registry.ROOT_KEY_NAME +ida_registry.reg_binary +ida_registry.reg_data_type +ida_registry.reg_delete +ida_registry.reg_delete_subkey +ida_registry.reg_delete_tree +ida_registry.reg_dword +ida_registry.reg_exists +ida_registry.reg_read_binary +ida_registry.reg_read_bool +ida_registry.reg_read_int +ida_registry.reg_read_string +ida_registry.reg_read_strlist +ida_registry.reg_subkey_exists +ida_registry.reg_subkey_subkeys +ida_registry.reg_subkey_values +ida_registry.reg_sz +ida_registry.reg_unknown +ida_registry.reg_update_filestrlist +ida_registry.reg_update_strlist +ida_registry.reg_write_binary +ida_registry.reg_write_bool +ida_registry.reg_write_int +ida_registry.reg_write_string +ida_registry.reg_write_strlist +ida_registry.set_registry_name +ida_regfinder +ida_regfinder.find_nearest_rvi +ida_regfinder.find_reg_value +ida_regfinder.find_reg_value_info +ida_regfinder.find_sp_value +ida_regfinder.invalidate_regfinder_cache +ida_regfinder.reg_value_def_t +ida_regfinder.reg_value_def_t.LIKE_GOT +ida_regfinder.reg_value_def_t.NOVAL +ida_regfinder.reg_value_def_t.PC_BASED +ida_regfinder.reg_value_def_t.SHORT_INSN +ida_regfinder.reg_value_def_t.SPVAL +ida_regfinder.reg_value_def_t.UVAL +ida_regfinder.reg_value_def_t.__eq__ +ida_regfinder.reg_value_def_t.__init__ +ida_regfinder.reg_value_def_t.__lt__ +ida_regfinder.reg_value_def_t.def_ea +ida_regfinder.reg_value_def_t.def_itype +ida_regfinder.reg_value_def_t.dstr +ida_regfinder.reg_value_def_t.flags +ida_regfinder.reg_value_def_t.is_like_got +ida_regfinder.reg_value_def_t.is_pc_based +ida_regfinder.reg_value_def_t.is_short_insn +ida_regfinder.reg_value_def_t.val +ida_regfinder.reg_value_info_t +ida_regfinder.reg_value_info_t.CONTAINED +ida_regfinder.reg_value_info_t.CONTAINS +ida_regfinder.reg_value_info_t.EQUAL +ida_regfinder.reg_value_info_t.NOT_COMPARABLE +ida_regfinder.reg_value_info_t.__getitem__ +ida_regfinder.reg_value_info_t.__init__ +ida_regfinder.reg_value_info_t.__len__ +ida_regfinder.reg_value_info_t.__str__ +ida_regfinder.reg_value_info_t.aborted +ida_regfinder.reg_value_info_t.add +ida_regfinder.reg_value_info_t.add_num +ida_regfinder.reg_value_info_t.band +ida_regfinder.reg_value_info_t.bandnot +ida_regfinder.reg_value_info_t.bnot +ida_regfinder.reg_value_info_t.bor +ida_regfinder.reg_value_info_t.bxor +ida_regfinder.reg_value_info_t.clear +ida_regfinder.reg_value_info_t.empty +ida_regfinder.reg_value_info_t.extend +ida_regfinder.reg_value_info_t.get_def_ea +ida_regfinder.reg_value_info_t.get_def_itype +ida_regfinder.reg_value_info_t.get_num +ida_regfinder.reg_value_info_t.get_spd +ida_regfinder.reg_value_info_t.has_any_vals_flag +ida_regfinder.reg_value_info_t.have_all_vals_flag +ida_regfinder.reg_value_info_t.is_all_vals_like_got +ida_regfinder.reg_value_info_t.is_all_vals_pc_based +ida_regfinder.reg_value_info_t.is_any_vals_like_got +ida_regfinder.reg_value_info_t.is_any_vals_pc_based +ida_regfinder.reg_value_info_t.is_badinsn +ida_regfinder.reg_value_info_t.is_dead_end +ida_regfinder.reg_value_info_t.is_known +ida_regfinder.reg_value_info_t.is_num +ida_regfinder.reg_value_info_t.is_spd +ida_regfinder.reg_value_info_t.is_special +ida_regfinder.reg_value_info_t.is_unkfunc +ida_regfinder.reg_value_info_t.is_unkinsn +ida_regfinder.reg_value_info_t.is_unkloop +ida_regfinder.reg_value_info_t.is_unkmult +ida_regfinder.reg_value_info_t.is_unknown +ida_regfinder.reg_value_info_t.is_unkvals +ida_regfinder.reg_value_info_t.is_unkxref +ida_regfinder.reg_value_info_t.is_value_unique +ida_regfinder.reg_value_info_t.make_aborted +ida_regfinder.reg_value_info_t.make_badinsn +ida_regfinder.reg_value_info_t.make_dead_end +ida_regfinder.reg_value_info_t.make_initial_sp +ida_regfinder.reg_value_info_t.make_num +ida_regfinder.reg_value_info_t.make_unkfunc +ida_regfinder.reg_value_info_t.make_unkinsn +ida_regfinder.reg_value_info_t.make_unkloop +ida_regfinder.reg_value_info_t.make_unkmult +ida_regfinder.reg_value_info_t.make_unkvals +ida_regfinder.reg_value_info_t.make_unkxref +ida_regfinder.reg_value_info_t.movt +ida_regfinder.reg_value_info_t.neg +ida_regfinder.reg_value_info_t.set_aborted +ida_regfinder.reg_value_info_t.set_all_vals_flag +ida_regfinder.reg_value_info_t.set_all_vals_got_based +ida_regfinder.reg_value_info_t.set_all_vals_pc_based +ida_regfinder.reg_value_info_t.set_badinsn +ida_regfinder.reg_value_info_t.set_dead_end +ida_regfinder.reg_value_info_t.set_num +ida_regfinder.reg_value_info_t.set_unkfunc +ida_regfinder.reg_value_info_t.set_unkinsn +ida_regfinder.reg_value_info_t.set_unkloop +ida_regfinder.reg_value_info_t.set_unkmult +ida_regfinder.reg_value_info_t.set_unkvals +ida_regfinder.reg_value_info_t.set_unkxref +ida_regfinder.reg_value_info_t.shift_left +ida_regfinder.reg_value_info_t.shift_right +ida_regfinder.reg_value_info_t.sll +ida_regfinder.reg_value_info_t.slr +ida_regfinder.reg_value_info_t.sub +ida_regfinder.reg_value_info_t.swap +ida_regfinder.reg_value_info_t.trunc_uval +ida_regfinder.reg_value_info_t.vals_union +ida_search +ida_search.SEARCH_BRK +ida_search.SEARCH_CASE +ida_search.SEARCH_DEF +ida_search.SEARCH_DOWN +ida_search.SEARCH_IDENT +ida_search.SEARCH_NEXT +ida_search.SEARCH_NOBRK +ida_search.SEARCH_NOSHOW +ida_search.SEARCH_REGEX +ida_search.SEARCH_UP +ida_search.SEARCH_USE +ida_search.SEARCH_USESEL +ida_search.find_code +ida_search.find_data +ida_search.find_defined +ida_search.find_error +ida_search.find_imm +ida_search.find_not_func +ida_search.find_notype +ida_search.find_reg_access +ida_search.find_suspop +ida_search.find_text +ida_search.find_unknown +ida_search.search_down +ida_segment +ida_segment.ADDSEG_FILLGAP +ida_segment.ADDSEG_IDBENC +ida_segment.ADDSEG_NOAA +ida_segment.ADDSEG_NOSREG +ida_segment.ADDSEG_NOTRUNC +ida_segment.ADDSEG_OR_DIE +ida_segment.ADDSEG_QUIET +ida_segment.ADDSEG_SPARSE +ida_segment.CSS_BREAK +ida_segment.CSS_NODBG +ida_segment.CSS_NOMEM +ida_segment.CSS_NORANGE +ida_segment.CSS_OK +ida_segment.MAX_GROUPS +ida_segment.MAX_SEGM_TRANSLATIONS +ida_segment.MOVE_SEGM_CHUNK +ida_segment.MOVE_SEGM_DEBUG +ida_segment.MOVE_SEGM_IDP +ida_segment.MOVE_SEGM_INVAL +ida_segment.MOVE_SEGM_LOADER +ida_segment.MOVE_SEGM_MAPPING +ida_segment.MOVE_SEGM_ODD +ida_segment.MOVE_SEGM_OK +ida_segment.MOVE_SEGM_ORPHAN +ida_segment.MOVE_SEGM_PARAM +ida_segment.MOVE_SEGM_ROOM +ida_segment.MOVE_SEGM_SOURCEFILES +ida_segment.MSF_FIXONCE +ida_segment.MSF_LDKEEP +ida_segment.MSF_NETNODES +ida_segment.MSF_NOFIX +ida_segment.MSF_PRIORITY +ida_segment.MSF_SILENT +ida_segment.SEGMOD_KEEP +ida_segment.SEGMOD_KEEP0 +ida_segment.SEGMOD_KEEPSEL +ida_segment.SEGMOD_KILL +ida_segment.SEGMOD_NOMOVE +ida_segment.SEGMOD_SILENT +ida_segment.SEGMOD_SPARSE +ida_segment.SEGPERM_EXEC +ida_segment.SEGPERM_MAXVAL +ida_segment.SEGPERM_READ +ida_segment.SEGPERM_WRITE +ida_segment.SEG_ABSSYM +ida_segment.SEG_BSS +ida_segment.SEG_CODE +ida_segment.SEG_COMM +ida_segment.SEG_DATA +ida_segment.SEG_GRP +ida_segment.SEG_IMEM +ida_segment.SEG_IMP +ida_segment.SEG_MAX_BITNESS_CODE +ida_segment.SEG_MAX_SEGTYPE_CODE +ida_segment.SEG_NORM +ida_segment.SEG_NULL +ida_segment.SEG_UNDF +ida_segment.SEG_XTRN +ida_segment.SFL_COMORG +ida_segment.SFL_DEBUG +ida_segment.SFL_HEADER +ida_segment.SFL_HIDDEN +ida_segment.SFL_HIDETYPE +ida_segment.SFL_LOADER +ida_segment.SFL_OBOK +ida_segment.SNAP_ALL_SEG +ida_segment.SNAP_CUR_SEG +ida_segment.SNAP_LOAD_SEG +ida_segment.SREG_NUM +ida_segment.add_segm +ida_segment.add_segm_ex +ida_segment.add_segment_translation +ida_segment.allocate_selector +ida_segment.change_segment_status +ida_segment.del_segm +ida_segment.del_segment_translations +ida_segment.del_selector +ida_segment.find_free_selector +ida_segment.find_selector +ida_segment.get_defsr +ida_segment.get_first_seg +ida_segment.get_group_selector +ida_segment.get_last_seg +ida_segment.get_next_seg +ida_segment.get_prev_seg +ida_segment.get_segm_base +ida_segment.get_segm_by_name +ida_segment.get_segm_by_sel +ida_segment.get_segm_class +ida_segment.get_segm_name +ida_segment.get_segm_num +ida_segment.get_segm_para +ida_segment.get_segm_qty +ida_segment.get_segment_alignment +ida_segment.get_segment_cmt +ida_segment.get_segment_combination +ida_segment.get_segment_translations +ida_segment.get_selector_qty +ida_segment.get_visible_segm_name +ida_segment.getn_selector +ida_segment.getnseg +ida_segment.getseg +ida_segment.is_finally_visible_segm +ida_segment.is_miniidb +ida_segment.is_segm_locked +ida_segment.is_spec_ea +ida_segment.is_spec_segm +ida_segment.is_visible_segm +ida_segment.lock_segm +ida_segment.lock_segment +ida_segment.lock_segment.__init__ +ida_segment.move_segm +ida_segment.move_segm_start +ida_segment.move_segm_strerror +ida_segment.rebase_program +ida_segment.saAbs +ida_segment.saGroup +ida_segment.saRel1024Bytes +ida_segment.saRel128Bytes +ida_segment.saRel2048Bytes +ida_segment.saRel32Bytes +ida_segment.saRel4K +ida_segment.saRel512Bytes +ida_segment.saRel64Bytes +ida_segment.saRelByte +ida_segment.saRelDble +ida_segment.saRelPage +ida_segment.saRelPara +ida_segment.saRelQword +ida_segment.saRelWord +ida_segment.scCommon +ida_segment.scGroup +ida_segment.scPriv +ida_segment.scPub +ida_segment.scPub2 +ida_segment.scPub3 +ida_segment.scStack +ida_segment.segm_adjust_diff +ida_segment.segm_adjust_ea +ida_segment.segment_defsr_array +ida_segment.segment_defsr_array.__getitem__ +ida_segment.segment_defsr_array.__init__ +ida_segment.segment_defsr_array.__len__ +ida_segment.segment_defsr_array.__setitem__ +ida_segment.segment_defsr_array._get_bytes +ida_segment.segment_defsr_array._set_bytes +ida_segment.segment_t +ida_segment.segment_t.__getDefsr +ida_segment.segment_t.__init__ +ida_segment.segment_t.abits +ida_segment.segment_t.abytes +ida_segment.segment_t.align +ida_segment.segment_t.bitness +ida_segment.segment_t.clr_comorg +ida_segment.segment_t.clr_ob_ok +ida_segment.segment_t.color +ida_segment.segment_t.comb +ida_segment.segment_t.comorg +ida_segment.segment_t.defsr +ida_segment.segment_t.defsr +ida_segment.segment_t.flags +ida_segment.segment_t.is_16bit +ida_segment.segment_t.is_32bit +ida_segment.segment_t.is_64bit +ida_segment.segment_t.is_header_segm +ida_segment.segment_t.is_hidden_segtype +ida_segment.segment_t.is_loader_segm +ida_segment.segment_t.is_visible_segm +ida_segment.segment_t.name +ida_segment.segment_t.ob_ok +ida_segment.segment_t.orgbase +ida_segment.segment_t.perm +ida_segment.segment_t.sclass +ida_segment.segment_t.sel +ida_segment.segment_t.set_comorg +ida_segment.segment_t.set_debugger_segm +ida_segment.segment_t.set_header_segm +ida_segment.segment_t.set_hidden_segtype +ida_segment.segment_t.set_loader_segm +ida_segment.segment_t.set_ob_ok +ida_segment.segment_t.set_visible_segm +ida_segment.segment_t.type +ida_segment.segment_t.update +ida_segment.segtype +ida_segment.sel2ea +ida_segment.sel2para +ida_segment.set_defsr +ida_segment.set_group_selector +ida_segment.set_segm_addressing +ida_segment.set_segm_base +ida_segment.set_segm_class +ida_segment.set_segm_end +ida_segment.set_segm_name +ida_segment.set_segm_start +ida_segment.set_segment_cmt +ida_segment.set_segment_translations +ida_segment.set_selector +ida_segment.set_visible_segm +ida_segment.setup_selector +ida_segment.std_out_segm_footer +ida_segment.take_memory_snapshot +ida_segment.update_segm +ida_segregs +ida_segregs.SR_auto +ida_segregs.SR_autostart +ida_segregs.SR_inherit +ida_segregs.SR_user +ida_segregs.copy_sreg_ranges +ida_segregs.del_sreg_range +ida_segregs.get_prev_sreg_range +ida_segregs.get_sreg +ida_segregs.get_sreg_range +ida_segregs.get_sreg_range_num +ida_segregs.get_sreg_ranges_qty +ida_segregs.getn_sreg_range +ida_segregs.set_default_dataseg +ida_segregs.set_default_sreg_value +ida_segregs.set_sreg_at_next_code +ida_segregs.split_sreg_range +ida_segregs.sreg_range_t +ida_segregs.sreg_range_t.__init__ +ida_segregs.sreg_range_t.tag +ida_segregs.sreg_range_t.val +ida_srclang +ida_srclang.SRCLANG_C +ida_srclang.SRCLANG_CPP +ida_srclang.SRCLANG_GO +ida_srclang.SRCLANG_OBJC +ida_srclang.SRCLANG_SWIFT +ida_srclang.parse_decls_for_srclang +ida_srclang.parse_decls_with_parser +ida_srclang.select_parser_by_name +ida_srclang.select_parser_by_srclang +ida_srclang.set_parser_argv +ida_strlist +ida_strlist.build_strlist +ida_strlist.clear_strlist +ida_strlist.get_strlist_item +ida_strlist.get_strlist_options +ida_strlist.get_strlist_qty +ida_strlist.string_info_t +ida_strlist.string_info_t.__init__ +ida_strlist.string_info_t.__lt__ +ida_strlist.strwinsetup_t +ida_strlist.strwinsetup_t.__init__ +ida_strlist.strwinsetup_t._get_strtypes +ida_strlist.strwinsetup_t._set_strtypes +ida_tryblks +ida_tryblks.TBEA_CATCH +ida_tryblks.TBEA_FALLTHRU +ida_tryblks.TBEA_SEHFILT +ida_tryblks.TBEA_SEHLPAD +ida_tryblks.TBEA_SEHTRY +ida_tryblks.TBEA_TRY +ida_tryblks.TBERR_EMPTY +ida_tryblks.TBERR_END +ida_tryblks.TBERR_INTERSECT +ida_tryblks.TBERR_KIND +ida_tryblks.TBERR_NO_CATCHES +ida_tryblks.TBERR_OK +ida_tryblks.TBERR_ORDER +ida_tryblks.TBERR_START +ida_tryblks.add_tryblk +ida_tryblks.catch_t +ida_tryblks.catch_t.__init__ +ida_tryblks.catchvec_t +ida_tryblks.catchvec_t.__eq__ +ida_tryblks.catchvec_t.__getitem__ +ida_tryblks.catchvec_t.__init__ +ida_tryblks.catchvec_t.__len__ +ida_tryblks.catchvec_t.__ne__ +ida_tryblks.catchvec_t.__setitem__ +ida_tryblks.catchvec_t._del +ida_tryblks.catchvec_t.add_unique +ida_tryblks.catchvec_t.append +ida_tryblks.catchvec_t.at +ida_tryblks.catchvec_t.begin +ida_tryblks.catchvec_t.capacity +ida_tryblks.catchvec_t.clear +ida_tryblks.catchvec_t.empty +ida_tryblks.catchvec_t.end +ida_tryblks.catchvec_t.erase +ida_tryblks.catchvec_t.extend +ida_tryblks.catchvec_t.extract +ida_tryblks.catchvec_t.find +ida_tryblks.catchvec_t.grow +ida_tryblks.catchvec_t.has +ida_tryblks.catchvec_t.inject +ida_tryblks.catchvec_t.insert +ida_tryblks.catchvec_t.pop_back +ida_tryblks.catchvec_t.push_back +ida_tryblks.catchvec_t.qclear +ida_tryblks.catchvec_t.reserve +ida_tryblks.catchvec_t.resize +ida_tryblks.catchvec_t.size +ida_tryblks.catchvec_t.swap +ida_tryblks.catchvec_t.truncate +ida_tryblks.del_tryblks +ida_tryblks.find_syseh +ida_tryblks.get_tryblks +ida_tryblks.is_ea_tryblks +ida_tryblks.seh_t +ida_tryblks.seh_t.__init__ +ida_tryblks.seh_t.clear +ida_tryblks.try_handler_t +ida_tryblks.try_handler_t.__init__ +ida_tryblks.try_handler_t.clear +ida_tryblks.tryblk_t +ida_tryblks.tryblk_t.__init__ +ida_tryblks.tryblk_t.clear +ida_tryblks.tryblk_t.cpp +ida_tryblks.tryblk_t.empty +ida_tryblks.tryblk_t.get_kind +ida_tryblks.tryblk_t.is_cpp +ida_tryblks.tryblk_t.is_seh +ida_tryblks.tryblk_t.seh +ida_tryblks.tryblk_t.set_cpp +ida_tryblks.tryblk_t.set_seh +ida_tryblks.tryblks_t +ida_tryblks.tryblks_t.__eq__ +ida_tryblks.tryblks_t.__getitem__ +ida_tryblks.tryblks_t.__init__ +ida_tryblks.tryblks_t.__len__ +ida_tryblks.tryblks_t.__ne__ +ida_tryblks.tryblks_t.__setitem__ +ida_tryblks.tryblks_t._del +ida_tryblks.tryblks_t.add_unique +ida_tryblks.tryblks_t.append +ida_tryblks.tryblks_t.at +ida_tryblks.tryblks_t.begin +ida_tryblks.tryblks_t.capacity +ida_tryblks.tryblks_t.clear +ida_tryblks.tryblks_t.empty +ida_tryblks.tryblks_t.end +ida_tryblks.tryblks_t.erase +ida_tryblks.tryblks_t.extend +ida_tryblks.tryblks_t.extract +ida_tryblks.tryblks_t.find +ida_tryblks.tryblks_t.grow +ida_tryblks.tryblks_t.has +ida_tryblks.tryblks_t.inject +ida_tryblks.tryblks_t.insert +ida_tryblks.tryblks_t.pop_back +ida_tryblks.tryblks_t.push_back +ida_tryblks.tryblks_t.qclear +ida_tryblks.tryblks_t.reserve +ida_tryblks.tryblks_t.resize +ida_tryblks.tryblks_t.size +ida_tryblks.tryblks_t.swap +ida_tryblks.tryblks_t.truncate +ida_typeinf +ida_typeinf.ADDTIL_ABORTED +ida_typeinf.ADDTIL_COMP +ida_typeinf.ADDTIL_DEFAULT +ida_typeinf.ADDTIL_FAILED +ida_typeinf.ADDTIL_INCOMP +ida_typeinf.ADDTIL_OK +ida_typeinf.ADDTIL_SILENT +ida_typeinf.ALOC_CUSTOM +ida_typeinf.ALOC_DIST +ida_typeinf.ALOC_NONE +ida_typeinf.ALOC_REG1 +ida_typeinf.ALOC_REG2 +ida_typeinf.ALOC_RREL +ida_typeinf.ALOC_STACK +ida_typeinf.ALOC_STATIC +ida_typeinf.ARGREGS_BY_SLOTS +ida_typeinf.ARGREGS_FP_MASKS_GP +ida_typeinf.ARGREGS_GP_ONLY +ida_typeinf.ARGREGS_INDEPENDENT +ida_typeinf.ARGREGS_MIPS_O32 +ida_typeinf.ARGREGS_RISCV +ida_typeinf.BADSIZE +ida_typeinf.BFA_FUNC_EXT_FORMAT +ida_typeinf.BFA_FUNC_MARKER +ida_typeinf.BFA_HIGH +ida_typeinf.BFA_NORET +ida_typeinf.BFA_PURE +ida_typeinf.BFA_STATIC +ida_typeinf.BFA_VIRTUAL +ida_typeinf.BTE_ALWAYS +ida_typeinf.BTE_BITMASK +ida_typeinf.BTE_CHAR +ida_typeinf.BTE_HEX +ida_typeinf.BTE_OUT_MASK +ida_typeinf.BTE_RESERVED +ida_typeinf.BTE_SDEC +ida_typeinf.BTE_SIZE_MASK +ida_typeinf.BTE_UDEC +ida_typeinf.BTF_BOOL +ida_typeinf.BTF_BYTE +ida_typeinf.BTF_CHAR +ida_typeinf.BTF_DOUBLE +ida_typeinf.BTF_ENUM +ida_typeinf.BTF_FLOAT +ida_typeinf.BTF_INT +ida_typeinf.BTF_INT128 +ida_typeinf.BTF_INT16 +ida_typeinf.BTF_INT32 +ida_typeinf.BTF_INT64 +ida_typeinf.BTF_INT8 +ida_typeinf.BTF_LDOUBLE +ida_typeinf.BTF_SINT +ida_typeinf.BTF_STRUCT +ida_typeinf.BTF_TBYTE +ida_typeinf.BTF_TYPEDEF +ida_typeinf.BTF_UCHAR +ida_typeinf.BTF_UINT +ida_typeinf.BTF_UINT128 +ida_typeinf.BTF_UINT16 +ida_typeinf.BTF_UINT32 +ida_typeinf.BTF_UINT64 +ida_typeinf.BTF_UINT8 +ida_typeinf.BTF_UNION +ida_typeinf.BTF_UNK +ida_typeinf.BTF_VOID +ida_typeinf.BTMT_ARRESERV +ida_typeinf.BTMT_BFLDI16 +ida_typeinf.BTMT_BFLDI32 +ida_typeinf.BTMT_BFLDI64 +ida_typeinf.BTMT_BFLDI8 +ida_typeinf.BTMT_BOOL1 +ida_typeinf.BTMT_BOOL2 +ida_typeinf.BTMT_BOOL4 +ida_typeinf.BTMT_BOOL8 +ida_typeinf.BTMT_CHAR +ida_typeinf.BTMT_CLOSURE +ida_typeinf.BTMT_DEFBOOL +ida_typeinf.BTMT_DEFCALL +ida_typeinf.BTMT_DEFPTR +ida_typeinf.BTMT_DOUBLE +ida_typeinf.BTMT_ENUM +ida_typeinf.BTMT_FAR +ida_typeinf.BTMT_FARCALL +ida_typeinf.BTMT_FLOAT +ida_typeinf.BTMT_INTCALL +ida_typeinf.BTMT_LNGDBL +ida_typeinf.BTMT_NEAR +ida_typeinf.BTMT_NEARCALL +ida_typeinf.BTMT_NONBASED +ida_typeinf.BTMT_SIGNED +ida_typeinf.BTMT_SIZE0 +ida_typeinf.BTMT_SIZE12 +ida_typeinf.BTMT_SIZE128 +ida_typeinf.BTMT_SIZE48 +ida_typeinf.BTMT_SPECFLT +ida_typeinf.BTMT_STRUCT +ida_typeinf.BTMT_TYPEDEF +ida_typeinf.BTMT_UNION +ida_typeinf.BTMT_UNKSIGN +ida_typeinf.BTMT_USIGNED +ida_typeinf.BTM_CONST +ida_typeinf.BTM_VOLATILE +ida_typeinf.BT_ARRAY +ida_typeinf.BT_BITFIELD +ida_typeinf.BT_BOOL +ida_typeinf.BT_COMPLEX +ida_typeinf.BT_FLOAT +ida_typeinf.BT_FUNC +ida_typeinf.BT_INT +ida_typeinf.BT_INT128 +ida_typeinf.BT_INT16 +ida_typeinf.BT_INT32 +ida_typeinf.BT_INT64 +ida_typeinf.BT_INT8 +ida_typeinf.BT_PTR +ida_typeinf.BT_RESERVED +ida_typeinf.BT_SEGREG +ida_typeinf.BT_UNK +ida_typeinf.BT_UNKNOWN +ida_typeinf.BT_UNK_BYTE +ida_typeinf.BT_UNK_DWORD +ida_typeinf.BT_UNK_OWORD +ida_typeinf.BT_UNK_QWORD +ida_typeinf.BT_UNK_WORD +ida_typeinf.BT_VOID +ida_typeinf.CC_ALLOW_ARGPERM +ida_typeinf.CC_ALLOW_REGHOLES +ida_typeinf.CC_CDECL_OK +ida_typeinf.CC_GOLANG_OK +ida_typeinf.CC_HAS_ELLIPSIS +ida_typeinf.CM_CC_CDECL +ida_typeinf.CM_CC_ELLIPSIS +ida_typeinf.CM_CC_FASTCALL +ida_typeinf.CM_CC_GOLANG +ida_typeinf.CM_CC_INVALID +ida_typeinf.CM_CC_PASCAL +ida_typeinf.CM_CC_SPECIAL +ida_typeinf.CM_CC_SPECIALE +ida_typeinf.CM_CC_SPECIALP +ida_typeinf.CM_CC_SPOILED +ida_typeinf.CM_CC_STDCALL +ida_typeinf.CM_CC_SWIFT +ida_typeinf.CM_CC_THISCALL +ida_typeinf.CM_CC_UNKNOWN +ida_typeinf.CM_CC_VOIDARG +ida_typeinf.CM_M_FF +ida_typeinf.CM_M_FN +ida_typeinf.CM_M_NF +ida_typeinf.CM_M_NN +ida_typeinf.CM_N16_F32 +ida_typeinf.CM_N32_F48 +ida_typeinf.CM_N64 +ida_typeinf.CM_N8_F16 +ida_typeinf.CM_UNKNOWN +ida_typeinf.COMP_BC +ida_typeinf.COMP_BP +ida_typeinf.COMP_GNU +ida_typeinf.COMP_MS +ida_typeinf.COMP_UNK +ida_typeinf.COMP_UNSURE +ida_typeinf.COMP_VISAGE +ida_typeinf.COMP_WATCOM +ida_typeinf.DEFMASK64 +ida_typeinf.ETF_AUTONAME +ida_typeinf.ETF_BYTIL +ida_typeinf.ETF_COMPATIBLE +ida_typeinf.ETF_FORCENAME +ida_typeinf.ETF_FUNCARG +ida_typeinf.ETF_MAY_DESTROY +ida_typeinf.ETF_NO_ARRAY +ida_typeinf.ETF_NO_LAYOUT +ida_typeinf.ETF_NO_SAVE +ida_typeinf.FAH_BYTE +ida_typeinf.FAI_ARRAY +ida_typeinf.FAI_HIDDEN +ida_typeinf.FAI_RETPTR +ida_typeinf.FAI_STRUCT +ida_typeinf.FAI_UNUSED +ida_typeinf.FIRST_NONTRIVIAL_TYPID +ida_typeinf.FRB_CHAR +ida_typeinf.FRB_CUSTOM +ida_typeinf.FRB_ENUM +ida_typeinf.FRB_FLOAT +ida_typeinf.FRB_INVBITS +ida_typeinf.FRB_INVSIGN +ida_typeinf.FRB_LZERO +ida_typeinf.FRB_MASK +ida_typeinf.FRB_NUMB +ida_typeinf.FRB_NUMD +ida_typeinf.FRB_NUMH +ida_typeinf.FRB_NUMO +ida_typeinf.FRB_OFFSET +ida_typeinf.FRB_SEG +ida_typeinf.FRB_SIGNED +ida_typeinf.FRB_STRLIT +ida_typeinf.FRB_STROFF +ida_typeinf.FRB_TABFORM +ida_typeinf.FRB_UNK +ida_typeinf.FTI_ALL +ida_typeinf.FTI_ARGLOCS +ida_typeinf.FTI_CALLTYPE +ida_typeinf.FTI_CONST +ida_typeinf.FTI_CTOR +ida_typeinf.FTI_DEFCALL +ida_typeinf.FTI_DTOR +ida_typeinf.FTI_EXPLOCS +ida_typeinf.FTI_FARCALL +ida_typeinf.FTI_HIGH +ida_typeinf.FTI_INTCALL +ida_typeinf.FTI_NEARCALL +ida_typeinf.FTI_NORET +ida_typeinf.FTI_PURE +ida_typeinf.FTI_SPOILED +ida_typeinf.FTI_STATIC +ida_typeinf.FTI_VIRTUAL +ida_typeinf.GTD_CALC_ARGLOCS +ida_typeinf.GTD_CALC_LAYOUT +ida_typeinf.GTD_DEL_BITFLDS +ida_typeinf.GTD_NO_ARGLOCS +ida_typeinf.GTD_NO_LAYOUT +ida_typeinf.GTS_BASECLASS +ida_typeinf.GTS_NESTED +ida_typeinf.GUESS_FUNC_FAILED +ida_typeinf.GUESS_FUNC_OK +ida_typeinf.GUESS_FUNC_TRIVIAL +ida_typeinf.HTI_CPP +ida_typeinf.HTI_DCL +ida_typeinf.HTI_EXT +ida_typeinf.HTI_FIL +ida_typeinf.HTI_HIGH +ida_typeinf.HTI_INT +ida_typeinf.HTI_LEX +ida_typeinf.HTI_LOWER +ida_typeinf.HTI_MAC +ida_typeinf.HTI_NDC +ida_typeinf.HTI_NER +ida_typeinf.HTI_NOBASE +ida_typeinf.HTI_NWR +ida_typeinf.HTI_PAK +ida_typeinf.HTI_PAK1 +ida_typeinf.HTI_PAK16 +ida_typeinf.HTI_PAK2 +ida_typeinf.HTI_PAK4 +ida_typeinf.HTI_PAK8 +ida_typeinf.HTI_PAKDEF +ida_typeinf.HTI_PAK_SHIFT +ida_typeinf.HTI_RAWARGS +ida_typeinf.HTI_RELAXED +ida_typeinf.HTI_SEMICOLON +ida_typeinf.HTI_TST +ida_typeinf.HTI_UNP +ida_typeinf.MAX_ENUM_SERIAL +ida_typeinf.MAX_FUNC_ARGS +ida_typeinf.NTF_64BIT +ida_typeinf.NTF_CHKSYNC +ida_typeinf.NTF_COPY +ida_typeinf.NTF_FIXNAME +ida_typeinf.NTF_IDBENC +ida_typeinf.NTF_NOBASE +ida_typeinf.NTF_NOCUR +ida_typeinf.NTF_NO_NAMECHK +ida_typeinf.NTF_REPLACE +ida_typeinf.NTF_SYMM +ida_typeinf.NTF_SYMU +ida_typeinf.NTF_TYPE +ida_typeinf.NTF_UMANGLED +ida_typeinf.PDF_DEF_BASE +ida_typeinf.PDF_DEF_FWD +ida_typeinf.PDF_HEADER_CMT +ida_typeinf.PDF_INCL_DEPS +ida_typeinf.PIO_IGNORE_PTRS +ida_typeinf.PIO_NOATTR_FAIL +ida_typeinf.PRALOC_STKOFF +ida_typeinf.PRALOC_VERIFY +ida_typeinf.PRTYPE_1LINCMT +ida_typeinf.PRTYPE_1LINE +ida_typeinf.PRTYPE_ARGLOCS +ida_typeinf.PRTYPE_COLORED +ida_typeinf.PRTYPE_CPP +ida_typeinf.PRTYPE_DEF +ida_typeinf.PRTYPE_HEADER +ida_typeinf.PRTYPE_MAXSTR +ida_typeinf.PRTYPE_METHODS +ida_typeinf.PRTYPE_MULTI +ida_typeinf.PRTYPE_NOARGS +ida_typeinf.PRTYPE_NOARRS +ida_typeinf.PRTYPE_NOREGEX +ida_typeinf.PRTYPE_NORES +ida_typeinf.PRTYPE_OFFSETS +ida_typeinf.PRTYPE_PRAGMA +ida_typeinf.PRTYPE_RESTORE +ida_typeinf.PRTYPE_SEMI +ida_typeinf.PRTYPE_TAIL +ida_typeinf.PRTYPE_TYPE +ida_typeinf.PT_EMPTY +ida_typeinf.PT_HIGH +ida_typeinf.PT_LOWER +ida_typeinf.PT_NDC +ida_typeinf.PT_PACKMASK +ida_typeinf.PT_RAWARGS +ida_typeinf.PT_RELAXED +ida_typeinf.PT_REPLACE +ida_typeinf.PT_SEMICOLON +ida_typeinf.PT_SIL +ida_typeinf.PT_TYP +ida_typeinf.PT_VAR +ida_typeinf.RESERVED_BYTE +ida_typeinf.SC_AUTO +ida_typeinf.SC_EXT +ida_typeinf.SC_FRIEND +ida_typeinf.SC_REG +ida_typeinf.SC_STAT +ida_typeinf.SC_TYPE +ida_typeinf.SC_UNK +ida_typeinf.SC_VIRT +ida_typeinf.SETCOMP_BY_USER +ida_typeinf.SETCOMP_ONLY_ABI +ida_typeinf.SETCOMP_ONLY_ID +ida_typeinf.SETCOMP_OVERRIDE +ida_typeinf.STI_ACCHAR +ida_typeinf.STI_ACHAR +ida_typeinf.STI_ACUCHAR +ida_typeinf.STI_AEABI_LCMP +ida_typeinf.STI_AEABI_MEMCLR +ida_typeinf.STI_AEABI_MEMCPY +ida_typeinf.STI_AEABI_MEMSET +ida_typeinf.STI_AEABI_ULCMP +ida_typeinf.STI_AUCHAR +ida_typeinf.STI_COMPLEX128 +ida_typeinf.STI_COMPLEX64 +ida_typeinf.STI_DONT_USE +ida_typeinf.STI_FDELOP +ida_typeinf.STI_FPURGING +ida_typeinf.STI_MSGSEND +ida_typeinf.STI_PBYTE +ida_typeinf.STI_PCCHAR +ida_typeinf.STI_PCHAR +ida_typeinf.STI_PCUCHAR +ida_typeinf.STI_PCVOID +ida_typeinf.STI_PINT +ida_typeinf.STI_PPVOID +ida_typeinf.STI_PUCHAR +ida_typeinf.STI_PUINT +ida_typeinf.STI_PUNKNOWN +ida_typeinf.STI_PVOID +ida_typeinf.STI_RTC_CHECK_2 +ida_typeinf.STI_RTC_CHECK_4 +ida_typeinf.STI_RTC_CHECK_8 +ida_typeinf.STI_SIZE_T +ida_typeinf.STI_SSIZE_T +ida_typeinf.STRMEM_ANON +ida_typeinf.STRMEM_AUTO +ida_typeinf.STRMEM_CASTABLE_TO +ida_typeinf.STRMEM_INDEX +ida_typeinf.STRMEM_LOWBND +ida_typeinf.STRMEM_MAXS +ida_typeinf.STRMEM_MINS +ida_typeinf.STRMEM_NAME +ida_typeinf.STRMEM_NEXT +ida_typeinf.STRMEM_OFFSET +ida_typeinf.STRMEM_SIZE +ida_typeinf.STRMEM_SKIP_EMPTY +ida_typeinf.STRMEM_SKIP_GAPS +ida_typeinf.STRMEM_TYPE +ida_typeinf.STRMEM_VFTABLE +ida_typeinf.STRUC_SEPARATOR +ida_typeinf.SUDT_ALIGN +ida_typeinf.SUDT_CONST +ida_typeinf.SUDT_FAST +ida_typeinf.SUDT_GAPS +ida_typeinf.SUDT_SERDEF +ida_typeinf.SUDT_SORT +ida_typeinf.SUDT_TRUNC +ida_typeinf.SUDT_UNEX +ida_typeinf.SUDT_VOLATILE +ida_typeinf.TAENUM_64BIT +ida_typeinf.TAENUM_BIN +ida_typeinf.TAENUM_LZERO +ida_typeinf.TAENUM_NUMSIGN +ida_typeinf.TAENUM_OCT +ida_typeinf.TAENUM_SIGNED +ida_typeinf.TAENUM_UNSIGNED +ida_typeinf.TAFLD_BASECLASS +ida_typeinf.TAFLD_BYTIL +ida_typeinf.TAFLD_FRAME_R +ida_typeinf.TAFLD_FRAME_S +ida_typeinf.TAFLD_GAP +ida_typeinf.TAFLD_METHOD +ida_typeinf.TAFLD_REGCMT +ida_typeinf.TAFLD_UNALIGNED +ida_typeinf.TAFLD_VFTABLE +ida_typeinf.TAFLD_VIRTBASE +ida_typeinf.TAH_ALL +ida_typeinf.TAH_BYTE +ida_typeinf.TAH_HASATTRS +ida_typeinf.TAPTR_PTR32 +ida_typeinf.TAPTR_PTR64 +ida_typeinf.TAPTR_RESTRICT +ida_typeinf.TAPTR_SHIFTED +ida_typeinf.TAUDT_CPPOBJ +ida_typeinf.TAUDT_FIXED +ida_typeinf.TAUDT_MSSTRUCT +ida_typeinf.TAUDT_UNALIGNED +ida_typeinf.TAUDT_VFTABLE +ida_typeinf.TA_FORMAT +ida_typeinf.TA_ORG_ARRDIM +ida_typeinf.TA_ORG_TYPEDEF +ida_typeinf.TA_VALUE_REPR +ida_typeinf.TCMP_ANYBASE +ida_typeinf.TCMP_AUTOCAST +ida_typeinf.TCMP_CALL +ida_typeinf.TCMP_DECL +ida_typeinf.TCMP_DELPTR +ida_typeinf.TCMP_EQUAL +ida_typeinf.TCMP_IGNMODS +ida_typeinf.TCMP_MANCAST +ida_typeinf.TCMP_SKIPTHIS +ida_typeinf.TERR_ALIEN_NAME +ida_typeinf.TERR_BAD_ARG +ida_typeinf.TERR_BAD_ARRAY +ida_typeinf.TERR_BAD_BASE +ida_typeinf.TERR_BAD_BF +ida_typeinf.TERR_BAD_BMASK +ida_typeinf.TERR_BAD_FX_SIZE +ida_typeinf.TERR_BAD_GAP +ida_typeinf.TERR_BAD_GROUPS +ida_typeinf.TERR_BAD_INDEX +ida_typeinf.TERR_BAD_LAYOUT +ida_typeinf.TERR_BAD_MSKVAL +ida_typeinf.TERR_BAD_NAME +ida_typeinf.TERR_BAD_OFFSET +ida_typeinf.TERR_BAD_REPR +ida_typeinf.TERR_BAD_SERIAL +ida_typeinf.TERR_BAD_SIZE +ida_typeinf.TERR_BAD_SUBTYPE +ida_typeinf.TERR_BAD_TAH +ida_typeinf.TERR_BAD_TYPE +ida_typeinf.TERR_BAD_UNIVAR +ida_typeinf.TERR_BAD_VALUE +ida_typeinf.TERR_BAD_VARLAST +ida_typeinf.TERR_DUPNAME +ida_typeinf.TERR_ENUM_SIZE +ida_typeinf.TERR_GRP_NOEMPTY +ida_typeinf.TERR_NESTED +ida_typeinf.TERR_NOT_COMPAT +ida_typeinf.TERR_NOT_FOUND +ida_typeinf.TERR_NOT_IMPL +ida_typeinf.TERR_NO_BMASK +ida_typeinf.TERR_OK +ida_typeinf.TERR_OVERLAP +ida_typeinf.TERR_SAVE_ERROR +ida_typeinf.TERR_SERIALIZE +ida_typeinf.TERR_STOCK +ida_typeinf.TERR_STRUCT_SIZE +ida_typeinf.TERR_TYPE_WORSE +ida_typeinf.TERR_UNION_BF +ida_typeinf.TIL_ADD_ALREADY +ida_typeinf.TIL_ADD_FAILED +ida_typeinf.TIL_ADD_OK +ida_typeinf.TIL_ALI +ida_typeinf.TIL_ESI +ida_typeinf.TIL_MAC +ida_typeinf.TIL_MOD +ida_typeinf.TIL_ORD +ida_typeinf.TIL_SLD +ida_typeinf.TIL_STM +ida_typeinf.TIL_UNI +ida_typeinf.TIL_ZIP +ida_typeinf.TINFO_DEFINITE +ida_typeinf.TINFO_DELAYFUNC +ida_typeinf.TINFO_GUESSED +ida_typeinf.TINFO_STRICT +ida_typeinf.TVIS_CMT +ida_typeinf.TVIS_NAME +ida_typeinf.TVIS_RPTCMT +ida_typeinf.TVIS_TYPE +ida_typeinf.TVST_DEF +ida_typeinf.TVST_PRUNE +ida_typeinf.TYPE_BASE_MASK +ida_typeinf.TYPE_FLAGS_MASK +ida_typeinf.TYPE_FULL_MASK +ida_typeinf.TYPE_MODIF_MASK +ida_typeinf.TYPID_ISREF +ida_typeinf.TYPID_SHIFT +ida_typeinf.VALSTR_OPEN +ida_typeinf._BT_LAST_BASIC +ida_typeinf._wrap_cvar +ida_typeinf._wrap_cvar.__getattr__ +ida_typeinf._wrap_cvar.__setattr__ +ida_typeinf.add_til +ida_typeinf.alloc_type_ordinal +ida_typeinf.alloc_type_ordinals +ida_typeinf.aloc_visitor_t +ida_typeinf.aloc_visitor_t.__disown__ +ida_typeinf.aloc_visitor_t.__init__ +ida_typeinf.aloc_visitor_t.visit_location +ida_typeinf.append_abi_opts +ida_typeinf.append_argloc +ida_typeinf.append_tinfo_covered +ida_typeinf.apply_callee_tinfo +ida_typeinf.apply_cdecl +ida_typeinf.apply_named_type +ida_typeinf.apply_once_tinfo_and_name +ida_typeinf.apply_tinfo +ida_typeinf.apply_tinfo_to_stkarg +ida_typeinf.apply_type +ida_typeinf.argloc_t +ida_typeinf.argloc_t.__eq__ +ida_typeinf.argloc_t.__ge__ +ida_typeinf.argloc_t.__gt__ +ida_typeinf.argloc_t.__init__ +ida_typeinf.argloc_t.__le__ +ida_typeinf.argloc_t.__lt__ +ida_typeinf.argloc_t.__ne__ +ida_typeinf.argloc_t._consume_rrel +ida_typeinf.argloc_t._consume_scattered +ida_typeinf.argloc_t._set_badloc +ida_typeinf.argloc_t._set_biggest +ida_typeinf.argloc_t._set_custom +ida_typeinf.argloc_t._set_ea +ida_typeinf.argloc_t._set_reg1 +ida_typeinf.argloc_t._set_reg2 +ida_typeinf.argloc_t._set_stkoff +ida_typeinf.argloc_t.advance +ida_typeinf.argloc_t.align_reg_high +ida_typeinf.argloc_t.align_stkoff_high +ida_typeinf.argloc_t.atype +ida_typeinf.argloc_t.calc_offset +ida_typeinf.argloc_t.compare +ida_typeinf.argloc_t.consume_rrel +ida_typeinf.argloc_t.consume_scattered +ida_typeinf.argloc_t.get_biggest +ida_typeinf.argloc_t.get_custom +ida_typeinf.argloc_t.get_ea +ida_typeinf.argloc_t.get_reginfo +ida_typeinf.argloc_t.get_rrel +ida_typeinf.argloc_t.has_reg +ida_typeinf.argloc_t.has_stkoff +ida_typeinf.argloc_t.in_stack +ida_typeinf.argloc_t.is_badloc +ida_typeinf.argloc_t.is_custom +ida_typeinf.argloc_t.is_ea +ida_typeinf.argloc_t.is_fragmented +ida_typeinf.argloc_t.is_mixed_scattered +ida_typeinf.argloc_t.is_reg +ida_typeinf.argloc_t.is_reg1 +ida_typeinf.argloc_t.is_reg2 +ida_typeinf.argloc_t.is_rrel +ida_typeinf.argloc_t.is_scattered +ida_typeinf.argloc_t.is_stkoff +ida_typeinf.argloc_t.reg1 +ida_typeinf.argloc_t.reg2 +ida_typeinf.argloc_t.regoff +ida_typeinf.argloc_t.scattered +ida_typeinf.argloc_t.set_badloc +ida_typeinf.argloc_t.set_ea +ida_typeinf.argloc_t.set_reg1 +ida_typeinf.argloc_t.set_reg2 +ida_typeinf.argloc_t.set_stkoff +ida_typeinf.argloc_t.stkoff +ida_typeinf.argloc_t.swap +ida_typeinf.argpart_t +ida_typeinf.argpart_t.__init__ +ida_typeinf.argpart_t.__lt__ +ida_typeinf.argpart_t.bad_offset +ida_typeinf.argpart_t.bad_size +ida_typeinf.argpart_t.off +ida_typeinf.argpart_t.size +ida_typeinf.argpart_t.swap +ida_typeinf.argpartvec_t +ida_typeinf.argpartvec_t.__eq__ +ida_typeinf.argpartvec_t.__getitem__ +ida_typeinf.argpartvec_t.__init__ +ida_typeinf.argpartvec_t.__len__ +ida_typeinf.argpartvec_t.__ne__ +ida_typeinf.argpartvec_t.__setitem__ +ida_typeinf.argpartvec_t._del +ida_typeinf.argpartvec_t.add_unique +ida_typeinf.argpartvec_t.append +ida_typeinf.argpartvec_t.at +ida_typeinf.argpartvec_t.begin +ida_typeinf.argpartvec_t.capacity +ida_typeinf.argpartvec_t.clear +ida_typeinf.argpartvec_t.empty +ida_typeinf.argpartvec_t.end +ida_typeinf.argpartvec_t.erase +ida_typeinf.argpartvec_t.extend +ida_typeinf.argpartvec_t.extract +ida_typeinf.argpartvec_t.find +ida_typeinf.argpartvec_t.grow +ida_typeinf.argpartvec_t.has +ida_typeinf.argpartvec_t.inject +ida_typeinf.argpartvec_t.insert +ida_typeinf.argpartvec_t.pop_back +ida_typeinf.argpartvec_t.push_back +ida_typeinf.argpartvec_t.qclear +ida_typeinf.argpartvec_t.reserve +ida_typeinf.argpartvec_t.resize +ida_typeinf.argpartvec_t.size +ida_typeinf.argpartvec_t.swap +ida_typeinf.argpartvec_t.truncate +ida_typeinf.argtinfo_helper_t +ida_typeinf.argtinfo_helper_t.__disown__ +ida_typeinf.argtinfo_helper_t.__init__ +ida_typeinf.argtinfo_helper_t.has_delay_slot +ida_typeinf.argtinfo_helper_t.is_stkarg_load +ida_typeinf.argtinfo_helper_t.set_op_tinfo +ida_typeinf.argtinfo_helper_t.use_arg_tinfos +ida_typeinf.array_type_data_t +ida_typeinf.array_type_data_t.__init__ +ida_typeinf.array_type_data_t.base +ida_typeinf.array_type_data_t.elem_type +ida_typeinf.array_type_data_t.nelems +ida_typeinf.array_type_data_t.swap +ida_typeinf.begin_type_updating +ida_typeinf.bitfield_type_data_t +ida_typeinf.bitfield_type_data_t.__eq__ +ida_typeinf.bitfield_type_data_t.__ge__ +ida_typeinf.bitfield_type_data_t.__gt__ +ida_typeinf.bitfield_type_data_t.__init__ +ida_typeinf.bitfield_type_data_t.__le__ +ida_typeinf.bitfield_type_data_t.__lt__ +ida_typeinf.bitfield_type_data_t.__ne__ +ida_typeinf.bitfield_type_data_t.compare +ida_typeinf.bitfield_type_data_t.is_unsigned +ida_typeinf.bitfield_type_data_t.is_valid_bitfield +ida_typeinf.bitfield_type_data_t.nbytes +ida_typeinf.bitfield_type_data_t.swap +ida_typeinf.bitfield_type_data_t.width +ida_typeinf.calc_c_cpp_name +ida_typeinf.calc_number_of_children +ida_typeinf.calc_tinfo_gaps +ida_typeinf.calc_type_size +ida_typeinf.callregs_t +ida_typeinf.callregs_t.__init__ +ida_typeinf.callregs_t.by_slots +ida_typeinf.callregs_t.fpregs +ida_typeinf.callregs_t.gpregs +ida_typeinf.callregs_t.init_regs +ida_typeinf.callregs_t.nregs +ida_typeinf.callregs_t.policy +ida_typeinf.callregs_t.regcount +ida_typeinf.callregs_t.reginds +ida_typeinf.callregs_t.reset +ida_typeinf.callregs_t.set +ida_typeinf.callregs_t.set_registers +ida_typeinf.callregs_t.swap +ida_typeinf.choose_local_tinfo +ida_typeinf.choose_local_tinfo_and_delta +ida_typeinf.choose_named_type +ida_typeinf.clear_tinfo_t +ida_typeinf.compact_til +ida_typeinf.compare_tinfo +ida_typeinf.const_aloc_visitor_t +ida_typeinf.const_aloc_visitor_t.__disown__ +ida_typeinf.const_aloc_visitor_t.__init__ +ida_typeinf.const_aloc_visitor_t.visit_location +ida_typeinf.convert_pt_flags_to_hti +ida_typeinf.copy_named_type +ida_typeinf.copy_tinfo_t +ida_typeinf.create_enum_type +ida_typeinf.create_numbered_type_name +ida_typeinf.create_tinfo +ida_typeinf.custom_data_type_info_t +ida_typeinf.custom_data_type_info_t.__init__ +ida_typeinf.custom_data_type_info_t.dtid +ida_typeinf.custom_data_type_info_t.fid +ida_typeinf.default_compiler +ida_typeinf.del_named_type +ida_typeinf.del_numbered_type +ida_typeinf.del_til +ida_typeinf.del_tinfo_attr +ida_typeinf.del_vftable_ea +ida_typeinf.deref_ptr +ida_typeinf.deserialize_tinfo +ida_typeinf.detach_tinfo_t +ida_typeinf.dstr_tinfo +ida_typeinf.dump_func_type_data +ida_typeinf.edm_t +ida_typeinf.edm_t.__eq__ +ida_typeinf.edm_t.__init__ +ida_typeinf.edm_t.__ne__ +ida_typeinf.edm_t.empty +ida_typeinf.edm_t.get_tid +ida_typeinf.edm_t.swap +ida_typeinf.edmvec_t +ida_typeinf.edmvec_t.__eq__ +ida_typeinf.edmvec_t.__getitem__ +ida_typeinf.edmvec_t.__init__ +ida_typeinf.edmvec_t.__len__ +ida_typeinf.edmvec_t.__ne__ +ida_typeinf.edmvec_t.__setitem__ +ida_typeinf.edmvec_t._del +ida_typeinf.edmvec_t.add_unique +ida_typeinf.edmvec_t.append +ida_typeinf.edmvec_t.at +ida_typeinf.edmvec_t.begin +ida_typeinf.edmvec_t.capacity +ida_typeinf.edmvec_t.clear +ida_typeinf.edmvec_t.empty +ida_typeinf.edmvec_t.end +ida_typeinf.edmvec_t.erase +ida_typeinf.edmvec_t.extend +ida_typeinf.edmvec_t.extract +ida_typeinf.edmvec_t.find +ida_typeinf.edmvec_t.grow +ida_typeinf.edmvec_t.has +ida_typeinf.edmvec_t.inject +ida_typeinf.edmvec_t.insert +ida_typeinf.edmvec_t.pop_back +ida_typeinf.edmvec_t.push_back +ida_typeinf.edmvec_t.qclear +ida_typeinf.edmvec_t.reserve +ida_typeinf.edmvec_t.resize +ida_typeinf.edmvec_t.size +ida_typeinf.edmvec_t.swap +ida_typeinf.edmvec_t.truncate +ida_typeinf.enable_numbered_types +ida_typeinf.end_type_updating +ida_typeinf.enum_type_data_t +ida_typeinf.enum_type_data_t.__init__ +ida_typeinf.enum_type_data_t.add_constant +ida_typeinf.enum_type_data_t.all_constants +ida_typeinf.enum_type_data_t.all_groups +ida_typeinf.enum_type_data_t.bte +ida_typeinf.enum_type_data_t.calc_mask +ida_typeinf.enum_type_data_t.calc_nbytes +ida_typeinf.enum_type_data_t.find_member +ida_typeinf.enum_type_data_t.get_constant_group +ida_typeinf.enum_type_data_t.get_enum_radix +ida_typeinf.enum_type_data_t.get_max_serial +ida_typeinf.enum_type_data_t.get_serial +ida_typeinf.enum_type_data_t.get_value_repr +ida_typeinf.enum_type_data_t.group_sizes +ida_typeinf.enum_type_data_t.has_lzero +ida_typeinf.enum_type_data_t.is_bf +ida_typeinf.enum_type_data_t.is_bin +ida_typeinf.enum_type_data_t.is_char +ida_typeinf.enum_type_data_t.is_dec +ida_typeinf.enum_type_data_t.is_group_mask_at +ida_typeinf.enum_type_data_t.is_hex +ida_typeinf.enum_type_data_t.is_number_signed +ida_typeinf.enum_type_data_t.is_oct +ida_typeinf.enum_type_data_t.is_sbin +ida_typeinf.enum_type_data_t.is_shex +ida_typeinf.enum_type_data_t.is_soct +ida_typeinf.enum_type_data_t.is_udec +ida_typeinf.enum_type_data_t.is_valid_group_sizes +ida_typeinf.enum_type_data_t.set_enum_radix +ida_typeinf.enum_type_data_t.set_lzero +ida_typeinf.enum_type_data_t.set_nbytes +ida_typeinf.enum_type_data_t.set_value_repr +ida_typeinf.enum_type_data_t.store_64bit_values +ida_typeinf.enum_type_data_t.swap +ida_typeinf.enum_type_data_t.taenum_bits +ida_typeinf.extract_argloc +ida_typeinf.find_tinfo_udt_member +ida_typeinf.first_named_type +ida_typeinf.for_all_arglocs +ida_typeinf.for_all_const_arglocs +ida_typeinf.free_til +ida_typeinf.func_has_stkframe_hole +ida_typeinf.func_type_data_t +ida_typeinf.func_type_data_t.__init__ +ida_typeinf.func_type_data_t.cc +ida_typeinf.func_type_data_t.dump +ida_typeinf.func_type_data_t.find_argument +ida_typeinf.func_type_data_t.flags +ida_typeinf.func_type_data_t.get_call_method +ida_typeinf.func_type_data_t.guess_cc +ida_typeinf.func_type_data_t.is_const +ida_typeinf.func_type_data_t.is_ctor +ida_typeinf.func_type_data_t.is_dtor +ida_typeinf.func_type_data_t.is_golang_cc +ida_typeinf.func_type_data_t.is_high +ida_typeinf.func_type_data_t.is_noret +ida_typeinf.func_type_data_t.is_pure +ida_typeinf.func_type_data_t.is_static +ida_typeinf.func_type_data_t.is_swift_cc +ida_typeinf.func_type_data_t.is_vararg_cc +ida_typeinf.func_type_data_t.is_virtual +ida_typeinf.func_type_data_t.retloc +ida_typeinf.func_type_data_t.rettype +ida_typeinf.func_type_data_t.spoiled +ida_typeinf.func_type_data_t.stkargs +ida_typeinf.func_type_data_t.swap +ida_typeinf.funcarg_t +ida_typeinf.funcarg_t.__eq__ +ida_typeinf.funcarg_t.__init__ +ida_typeinf.funcarg_t.__ne__ +ida_typeinf.funcarg_t.argloc +ida_typeinf.funcarg_t.cmt +ida_typeinf.funcarg_t.flags +ida_typeinf.funcarg_t.name +ida_typeinf.funcarg_t.type +ida_typeinf.funcargvec_t +ida_typeinf.funcargvec_t.__eq__ +ida_typeinf.funcargvec_t.__getitem__ +ida_typeinf.funcargvec_t.__init__ +ida_typeinf.funcargvec_t.__len__ +ida_typeinf.funcargvec_t.__ne__ +ida_typeinf.funcargvec_t.__setitem__ +ida_typeinf.funcargvec_t._del +ida_typeinf.funcargvec_t.add_unique +ida_typeinf.funcargvec_t.append +ida_typeinf.funcargvec_t.at +ida_typeinf.funcargvec_t.begin +ida_typeinf.funcargvec_t.capacity +ida_typeinf.funcargvec_t.clear +ida_typeinf.funcargvec_t.empty +ida_typeinf.funcargvec_t.end +ida_typeinf.funcargvec_t.erase +ida_typeinf.funcargvec_t.extend +ida_typeinf.funcargvec_t.extract +ida_typeinf.funcargvec_t.find +ida_typeinf.funcargvec_t.grow +ida_typeinf.funcargvec_t.has +ida_typeinf.funcargvec_t.inject +ida_typeinf.funcargvec_t.insert +ida_typeinf.funcargvec_t.pop_back +ida_typeinf.funcargvec_t.push_back +ida_typeinf.funcargvec_t.qclear +ida_typeinf.funcargvec_t.reserve +ida_typeinf.funcargvec_t.resize +ida_typeinf.funcargvec_t.size +ida_typeinf.funcargvec_t.swap +ida_typeinf.funcargvec_t.truncate +ida_typeinf.gcc_layout +ida_typeinf.gen_decorate_name +ida_typeinf.gen_use_arg_tinfos +ida_typeinf.get_abi_name +ida_typeinf.get_alias_target +ida_typeinf.get_arg_addrs +ida_typeinf.get_base_type +ida_typeinf.get_c_header_path +ida_typeinf.get_c_macros +ida_typeinf.get_comp +ida_typeinf.get_compiler_abbr +ida_typeinf.get_compiler_name +ida_typeinf.get_compilers +ida_typeinf.get_enum_member_expr +ida_typeinf.get_full_type +ida_typeinf.get_idainfo_by_type +ida_typeinf.get_idainfo_by_udm +ida_typeinf.get_idati +ida_typeinf.get_named_type +ida_typeinf.get_named_type64 +ida_typeinf.get_named_type_tid +ida_typeinf.get_numbered_type +ida_typeinf.get_numbered_type_name +ida_typeinf.get_ordinal_count +ida_typeinf.get_ordinal_limit +ida_typeinf.get_scalar_bt +ida_typeinf.get_stock_tinfo +ida_typeinf.get_tid_name +ida_typeinf.get_tid_ordinal +ida_typeinf.get_tinfo_attr +ida_typeinf.get_tinfo_attrs +ida_typeinf.get_tinfo_by_edm_name +ida_typeinf.get_tinfo_by_flags +ida_typeinf.get_tinfo_details +ida_typeinf.get_tinfo_pdata +ida_typeinf.get_tinfo_property +ida_typeinf.get_tinfo_property4 +ida_typeinf.get_tinfo_size +ida_typeinf.get_type_flags +ida_typeinf.get_type_ordinal +ida_typeinf.get_udm_by_fullname +ida_typeinf.get_vftable_ea +ida_typeinf.get_vftable_ordinal +ida_typeinf.guess_func_cc +ida_typeinf.guess_tinfo +ida_typeinf.ida_lowertype_helper_t +ida_typeinf.ida_lowertype_helper_t.__init__ +ida_typeinf.ida_lowertype_helper_t.func_has_stkframe_hole +ida_typeinf.ida_lowertype_helper_t.get_func_purged_bytes +ida_typeinf.idc_get_local_type +ida_typeinf.idc_get_local_type_name +ida_typeinf.idc_get_local_type_raw +ida_typeinf.idc_get_type +ida_typeinf.idc_get_type_raw +ida_typeinf.idc_guess_type +ida_typeinf.idc_parse_decl +ida_typeinf.idc_parse_types +ida_typeinf.idc_print_type +ida_typeinf.idc_set_local_type +ida_typeinf.inf_big_arg_align +ida_typeinf.inf_huge_arg_align +ida_typeinf.inf_pack_stkargs +ida_typeinf.is_code_far +ida_typeinf.is_comp_unsure +ida_typeinf.is_data_far +ida_typeinf.is_gcc +ida_typeinf.is_gcc32 +ida_typeinf.is_gcc64 +ida_typeinf.is_golang_cc +ida_typeinf.is_one_bit_mask +ida_typeinf.is_ordinal_name +ida_typeinf.is_purging_cc +ida_typeinf.is_restype_enum +ida_typeinf.is_restype_struct +ida_typeinf.is_restype_struni +ida_typeinf.is_restype_void +ida_typeinf.is_sdacl_byte +ida_typeinf.is_swift_cc +ida_typeinf.is_tah_byte +ida_typeinf.is_type_arithmetic +ida_typeinf.is_type_array +ida_typeinf.is_type_bitfld +ida_typeinf.is_type_bool +ida_typeinf.is_type_char +ida_typeinf.is_type_choosable +ida_typeinf.is_type_complex +ida_typeinf.is_type_const +ida_typeinf.is_type_double +ida_typeinf.is_type_enum +ida_typeinf.is_type_ext_arithmetic +ida_typeinf.is_type_ext_integral +ida_typeinf.is_type_float +ida_typeinf.is_type_floating +ida_typeinf.is_type_func +ida_typeinf.is_type_int +ida_typeinf.is_type_int128 +ida_typeinf.is_type_int16 +ida_typeinf.is_type_int32 +ida_typeinf.is_type_int64 +ida_typeinf.is_type_integral +ida_typeinf.is_type_ldouble +ida_typeinf.is_type_paf +ida_typeinf.is_type_partial +ida_typeinf.is_type_ptr +ida_typeinf.is_type_ptr_or_array +ida_typeinf.is_type_struct +ida_typeinf.is_type_struni +ida_typeinf.is_type_sue +ida_typeinf.is_type_tbyte +ida_typeinf.is_type_typedef +ida_typeinf.is_type_uchar +ida_typeinf.is_type_uint +ida_typeinf.is_type_uint128 +ida_typeinf.is_type_uint16 +ida_typeinf.is_type_uint32 +ida_typeinf.is_type_uint64 +ida_typeinf.is_type_union +ida_typeinf.is_type_unknown +ida_typeinf.is_type_void +ida_typeinf.is_type_volatile +ida_typeinf.is_typeid_last +ida_typeinf.is_user_cc +ida_typeinf.is_vararg_cc +ida_typeinf.lexcompare_tinfo +ida_typeinf.load_til +ida_typeinf.load_til_header +ida_typeinf.lower_type +ida_typeinf.lowertype_helper_t +ida_typeinf.lowertype_helper_t.__init__ +ida_typeinf.lowertype_helper_t.func_has_stkframe_hole +ida_typeinf.lowertype_helper_t.get_func_purged_bytes +ida_typeinf.new_til +ida_typeinf.next_named_type +ida_typeinf.no_sign +ida_typeinf.optimize_argloc +ida_typeinf.pack_idcobj_to_bv +ida_typeinf.pack_idcobj_to_idb +ida_typeinf.pack_object_to_bv +ida_typeinf.pack_object_to_idb +ida_typeinf.parse_decl +ida_typeinf.parse_decls +ida_typeinf.predicate_t +ida_typeinf.predicate_t.__disown__ +ida_typeinf.predicate_t.__init__ +ida_typeinf.predicate_t.should_display +ida_typeinf.print_argloc +ida_typeinf.print_decls +ida_typeinf.print_tinfo +ida_typeinf.print_type +ida_typeinf.ptr_type_data_t +ida_typeinf.ptr_type_data_t.__eq__ +ida_typeinf.ptr_type_data_t.__init__ +ida_typeinf.ptr_type_data_t.__ne__ +ida_typeinf.ptr_type_data_t.closure +ida_typeinf.ptr_type_data_t.delta +ida_typeinf.ptr_type_data_t.is_code_ptr +ida_typeinf.ptr_type_data_t.is_shifted +ida_typeinf.ptr_type_data_t.obj_type +ida_typeinf.ptr_type_data_t.parent +ida_typeinf.ptr_type_data_t.swap +ida_typeinf.ptr_type_data_t.taptr_bits +ida_typeinf.read_tinfo_bitfield_value +ida_typeinf.reginfovec_t +ida_typeinf.reginfovec_t.__eq__ +ida_typeinf.reginfovec_t.__getitem__ +ida_typeinf.reginfovec_t.__init__ +ida_typeinf.reginfovec_t.__len__ +ida_typeinf.reginfovec_t.__ne__ +ida_typeinf.reginfovec_t.__setitem__ +ida_typeinf.reginfovec_t._del +ida_typeinf.reginfovec_t.add_unique +ida_typeinf.reginfovec_t.append +ida_typeinf.reginfovec_t.at +ida_typeinf.reginfovec_t.begin +ida_typeinf.reginfovec_t.capacity +ida_typeinf.reginfovec_t.clear +ida_typeinf.reginfovec_t.empty +ida_typeinf.reginfovec_t.end +ida_typeinf.reginfovec_t.erase +ida_typeinf.reginfovec_t.extend +ida_typeinf.reginfovec_t.extract +ida_typeinf.reginfovec_t.find +ida_typeinf.reginfovec_t.grow +ida_typeinf.reginfovec_t.has +ida_typeinf.reginfovec_t.inject +ida_typeinf.reginfovec_t.insert +ida_typeinf.reginfovec_t.pop_back +ida_typeinf.reginfovec_t.push_back +ida_typeinf.reginfovec_t.qclear +ida_typeinf.reginfovec_t.reserve +ida_typeinf.reginfovec_t.resize +ida_typeinf.reginfovec_t.size +ida_typeinf.reginfovec_t.swap +ida_typeinf.reginfovec_t.truncate +ida_typeinf.regobj_t +ida_typeinf.regobj_t.__init__ +ida_typeinf.regobj_t.regidx +ida_typeinf.regobj_t.relocate +ida_typeinf.regobj_t.size +ida_typeinf.regobjs_t +ida_typeinf.regobjs_t.__init__ +ida_typeinf.regobjvec_t +ida_typeinf.regobjvec_t.__getitem__ +ida_typeinf.regobjvec_t.__init__ +ida_typeinf.regobjvec_t.__len__ +ida_typeinf.regobjvec_t.__setitem__ +ida_typeinf.regobjvec_t.append +ida_typeinf.regobjvec_t.at +ida_typeinf.regobjvec_t.begin +ida_typeinf.regobjvec_t.capacity +ida_typeinf.regobjvec_t.clear +ida_typeinf.regobjvec_t.empty +ida_typeinf.regobjvec_t.end +ida_typeinf.regobjvec_t.erase +ida_typeinf.regobjvec_t.extend +ida_typeinf.regobjvec_t.extract +ida_typeinf.regobjvec_t.grow +ida_typeinf.regobjvec_t.inject +ida_typeinf.regobjvec_t.insert +ida_typeinf.regobjvec_t.pop_back +ida_typeinf.regobjvec_t.push_back +ida_typeinf.regobjvec_t.qclear +ida_typeinf.regobjvec_t.reserve +ida_typeinf.regobjvec_t.resize +ida_typeinf.regobjvec_t.size +ida_typeinf.regobjvec_t.swap +ida_typeinf.regobjvec_t.truncate +ida_typeinf.remove_abi_opts +ida_typeinf.remove_pointer +ida_typeinf.remove_tinfo_pointer +ida_typeinf.replace_ordinal_typerefs +ida_typeinf.resolve_typedef +ida_typeinf.rrel_t +ida_typeinf.rrel_t.__init__ +ida_typeinf.rrel_t.off +ida_typeinf.rrel_t.reg +ida_typeinf.save_tinfo +ida_typeinf.scattered_aloc_t +ida_typeinf.scattered_aloc_t.__init__ +ida_typeinf.score_tinfo +ida_typeinf.serialize_tinfo +ida_typeinf.set_abi_name +ida_typeinf.set_c_header_path +ida_typeinf.set_c_macros +ida_typeinf.set_compiler +ida_typeinf.set_compiler_id +ida_typeinf.set_compiler_string +ida_typeinf.set_numbered_type +ida_typeinf.set_tinfo_attr +ida_typeinf.set_tinfo_attrs +ida_typeinf.set_tinfo_property +ida_typeinf.set_tinfo_property4 +ida_typeinf.set_type_alias +ida_typeinf.set_type_choosable +ida_typeinf.set_vftable_ea +ida_typeinf.simd_info_t +ida_typeinf.simd_info_t.__init__ +ida_typeinf.simd_info_t.match_pattern +ida_typeinf.simd_info_t.memtype +ida_typeinf.simd_info_t.name +ida_typeinf.simd_info_t.size +ida_typeinf.simd_info_t.tif +ida_typeinf.stkarg_area_info_t +ida_typeinf.stkarg_area_info_t.__init__ +ida_typeinf.stkarg_area_info_t.linkage_area +ida_typeinf.stkarg_area_info_t.shadow_size +ida_typeinf.stkarg_area_info_t.stkarg_offset +ida_typeinf.store_til +ida_typeinf.stroff_as_size +ida_typeinf.switch_to_golang +ida_typeinf.text_sink_t +ida_typeinf.text_sink_t.__disown__ +ida_typeinf.text_sink_t.__init__ +ida_typeinf.text_sink_t._print +ida_typeinf.til_symbol_t +ida_typeinf.til_symbol_t.__init__ +ida_typeinf.til_symbol_t.name +ida_typeinf.til_symbol_t.til +ida_typeinf.til_t +ida_typeinf.til_t.__eq__ +ida_typeinf.til_t.__init__ +ida_typeinf.til_t.__ne__ +ida_typeinf.til_t.base +ida_typeinf.til_t.cc +ida_typeinf.til_t.desc +ida_typeinf.til_t.find_base +ida_typeinf.til_t.flags +ida_typeinf.til_t.get_named_type +ida_typeinf.til_t.get_numbered_type +ida_typeinf.til_t.get_type_names +ida_typeinf.til_t.import_type +ida_typeinf.til_t.is_dirty +ida_typeinf.til_t.name +ida_typeinf.til_t.named_types +ida_typeinf.til_t.nbases +ida_typeinf.til_t.nrefs +ida_typeinf.til_t.nstreams +ida_typeinf.til_t.numbered_types +ida_typeinf.til_t.set_dirty +ida_typeinf.til_t.streams +ida_typeinf.til_type_ref_t +ida_typeinf.til_type_ref_t.__init__ +ida_typeinf.til_type_ref_t.clear +ida_typeinf.til_type_ref_t.edm +ida_typeinf.til_type_ref_t.fa +ida_typeinf.til_type_ref_t.is_enum +ida_typeinf.til_type_ref_t.is_func +ida_typeinf.til_type_ref_t.is_struct +ida_typeinf.til_type_ref_t.is_typedef +ida_typeinf.til_type_ref_t.is_udt +ida_typeinf.til_type_ref_t.is_union +ida_typeinf.til_type_ref_t.on_member +ida_typeinf.til_type_ref_t.udm +ida_typeinf.tinfo_errstr +ida_typeinf.tinfo_t +ida_typeinf.tinfo_t.ENUMBM_AUTO +ida_typeinf.tinfo_t.ENUMBM_OFF +ida_typeinf.tinfo_t.ENUMBM_ON +ida_typeinf.tinfo_t.__eq__ +ida_typeinf.tinfo_t.__ge__ +ida_typeinf.tinfo_t.__gt__ +ida_typeinf.tinfo_t.__init__ +ida_typeinf.tinfo_t.__le__ +ida_typeinf.tinfo_t.__lt__ +ida_typeinf.tinfo_t.__ne__ +ida_typeinf.tinfo_t.__repr__ +ida_typeinf.tinfo_t.__str__ +ida_typeinf.tinfo_t._print +ida_typeinf.tinfo_t.add_edm +ida_typeinf.tinfo_t.add_funcarg +ida_typeinf.tinfo_t.add_udm +ida_typeinf.tinfo_t.append_covered +ida_typeinf.tinfo_t.calc_enum_mask +ida_typeinf.tinfo_t.calc_gaps +ida_typeinf.tinfo_t.calc_purged_bytes +ida_typeinf.tinfo_t.calc_score +ida_typeinf.tinfo_t.calc_udt_aligns +ida_typeinf.tinfo_t.change_sign +ida_typeinf.tinfo_t.clear +ida_typeinf.tinfo_t.clr_const +ida_typeinf.tinfo_t.clr_const_volatile +ida_typeinf.tinfo_t.clr_decl_const_volatile +ida_typeinf.tinfo_t.clr_volatile +ida_typeinf.tinfo_t.compare +ida_typeinf.tinfo_t.compare_with +ida_typeinf.tinfo_t.convert_array_to_ptr +ida_typeinf.tinfo_t.copy +ida_typeinf.tinfo_t.copy_type +ida_typeinf.tinfo_t.create_array +ida_typeinf.tinfo_t.create_bitfield +ida_typeinf.tinfo_t.create_enum +ida_typeinf.tinfo_t.create_forward_decl +ida_typeinf.tinfo_t.create_func +ida_typeinf.tinfo_t.create_ptr +ida_typeinf.tinfo_t.create_simple_type +ida_typeinf.tinfo_t.create_typedef +ida_typeinf.tinfo_t.create_udt +ida_typeinf.tinfo_t.del_attr +ida_typeinf.tinfo_t.del_attrs +ida_typeinf.tinfo_t.del_edm +ida_typeinf.tinfo_t.del_edm_by_value +ida_typeinf.tinfo_t.del_edms +ida_typeinf.tinfo_t.del_funcarg +ida_typeinf.tinfo_t.del_funcargs +ida_typeinf.tinfo_t.del_udm +ida_typeinf.tinfo_t.del_udms +ida_typeinf.tinfo_t.deserialize +ida_typeinf.tinfo_t.detach +ida_typeinf.tinfo_t.dstr +ida_typeinf.tinfo_t.edit_edm +ida_typeinf.tinfo_t.empty +ida_typeinf.tinfo_t.equals_to +ida_typeinf.tinfo_t.expand_udt +ida_typeinf.tinfo_t.find_edm +ida_typeinf.tinfo_t.find_udm +ida_typeinf.tinfo_t.force_tid +ida_typeinf.tinfo_t.get_alias_target +ida_typeinf.tinfo_t.get_alignment +ida_typeinf.tinfo_t.get_array_details +ida_typeinf.tinfo_t.get_array_element +ida_typeinf.tinfo_t.get_array_nelems +ida_typeinf.tinfo_t.get_attr +ida_typeinf.tinfo_t.get_attrs +ida_typeinf.tinfo_t.get_bit_buckets +ida_typeinf.tinfo_t.get_bitfield_details +ida_typeinf.tinfo_t.get_by_edm_name +ida_typeinf.tinfo_t.get_declalign +ida_typeinf.tinfo_t.get_decltype +ida_typeinf.tinfo_t.get_edm +ida_typeinf.tinfo_t.get_edm_by_tid +ida_typeinf.tinfo_t.get_edm_by_value +ida_typeinf.tinfo_t.get_edm_tid +ida_typeinf.tinfo_t.get_enum_base_type +ida_typeinf.tinfo_t.get_enum_details +ida_typeinf.tinfo_t.get_enum_nmembers +ida_typeinf.tinfo_t.get_enum_radix +ida_typeinf.tinfo_t.get_enum_repr +ida_typeinf.tinfo_t.get_enum_width +ida_typeinf.tinfo_t.get_final_element +ida_typeinf.tinfo_t.get_final_ordinal +ida_typeinf.tinfo_t.get_final_type_name +ida_typeinf.tinfo_t.get_forward_type +ida_typeinf.tinfo_t.get_frame_func +ida_typeinf.tinfo_t.get_func_details +ida_typeinf.tinfo_t.get_func_frame +ida_typeinf.tinfo_t.get_innermost_member_type +ida_typeinf.tinfo_t.get_innermost_udm +ida_typeinf.tinfo_t.get_methods +ida_typeinf.tinfo_t.get_modifiers +ida_typeinf.tinfo_t.get_named_type +ida_typeinf.tinfo_t.get_nargs +ida_typeinf.tinfo_t.get_next_type_name +ida_typeinf.tinfo_t.get_nice_type_name +ida_typeinf.tinfo_t.get_nth_arg +ida_typeinf.tinfo_t.get_numbered_type +ida_typeinf.tinfo_t.get_onemember_type +ida_typeinf.tinfo_t.get_ordinal +ida_typeinf.tinfo_t.get_pointed_object +ida_typeinf.tinfo_t.get_ptr_details +ida_typeinf.tinfo_t.get_ptrarr_object +ida_typeinf.tinfo_t.get_ptrarr_objsize +ida_typeinf.tinfo_t.get_realtype +ida_typeinf.tinfo_t.get_rettype +ida_typeinf.tinfo_t.get_sign +ida_typeinf.tinfo_t.get_size +ida_typeinf.tinfo_t.get_stkvar +ida_typeinf.tinfo_t.get_stock +ida_typeinf.tinfo_t.get_tid +ida_typeinf.tinfo_t.get_til +ida_typeinf.tinfo_t.get_type_by_tid +ida_typeinf.tinfo_t.get_type_cmt +ida_typeinf.tinfo_t.get_type_name +ida_typeinf.tinfo_t.get_type_rptcmt +ida_typeinf.tinfo_t.get_udm +ida_typeinf.tinfo_t.get_udm_by_offset +ida_typeinf.tinfo_t.get_udm_by_tid +ida_typeinf.tinfo_t.get_udm_tid +ida_typeinf.tinfo_t.get_udt_details +ida_typeinf.tinfo_t.get_udt_nmembers +ida_typeinf.tinfo_t.get_unpadded_size +ida_typeinf.tinfo_t.has_details +ida_typeinf.tinfo_t.has_union +ida_typeinf.tinfo_t.has_vftable +ida_typeinf.tinfo_t.is_aliased +ida_typeinf.tinfo_t.is_anonymous_udt +ida_typeinf.tinfo_t.is_arithmetic +ida_typeinf.tinfo_t.is_array +ida_typeinf.tinfo_t.is_bitfield +ida_typeinf.tinfo_t.is_bitmask_enum +ida_typeinf.tinfo_t.is_bool +ida_typeinf.tinfo_t.is_castable_to +ida_typeinf.tinfo_t.is_char +ida_typeinf.tinfo_t.is_complex +ida_typeinf.tinfo_t.is_const +ida_typeinf.tinfo_t.is_correct +ida_typeinf.tinfo_t.is_decl_array +ida_typeinf.tinfo_t.is_decl_bitfield +ida_typeinf.tinfo_t.is_decl_bool +ida_typeinf.tinfo_t.is_decl_char +ida_typeinf.tinfo_t.is_decl_complex +ida_typeinf.tinfo_t.is_decl_const +ida_typeinf.tinfo_t.is_decl_double +ida_typeinf.tinfo_t.is_decl_enum +ida_typeinf.tinfo_t.is_decl_float +ida_typeinf.tinfo_t.is_decl_floating +ida_typeinf.tinfo_t.is_decl_func +ida_typeinf.tinfo_t.is_decl_int +ida_typeinf.tinfo_t.is_decl_int128 +ida_typeinf.tinfo_t.is_decl_int16 +ida_typeinf.tinfo_t.is_decl_int32 +ida_typeinf.tinfo_t.is_decl_int64 +ida_typeinf.tinfo_t.is_decl_last +ida_typeinf.tinfo_t.is_decl_ldouble +ida_typeinf.tinfo_t.is_decl_paf +ida_typeinf.tinfo_t.is_decl_partial +ida_typeinf.tinfo_t.is_decl_ptr +ida_typeinf.tinfo_t.is_decl_struct +ida_typeinf.tinfo_t.is_decl_sue +ida_typeinf.tinfo_t.is_decl_tbyte +ida_typeinf.tinfo_t.is_decl_typedef +ida_typeinf.tinfo_t.is_decl_uchar +ida_typeinf.tinfo_t.is_decl_udt +ida_typeinf.tinfo_t.is_decl_uint +ida_typeinf.tinfo_t.is_decl_uint128 +ida_typeinf.tinfo_t.is_decl_uint16 +ida_typeinf.tinfo_t.is_decl_uint32 +ida_typeinf.tinfo_t.is_decl_uint64 +ida_typeinf.tinfo_t.is_decl_union +ida_typeinf.tinfo_t.is_decl_unknown +ida_typeinf.tinfo_t.is_decl_void +ida_typeinf.tinfo_t.is_decl_volatile +ida_typeinf.tinfo_t.is_double +ida_typeinf.tinfo_t.is_empty_enum +ida_typeinf.tinfo_t.is_empty_udt +ida_typeinf.tinfo_t.is_enum +ida_typeinf.tinfo_t.is_ext_arithmetic +ida_typeinf.tinfo_t.is_ext_integral +ida_typeinf.tinfo_t.is_fixed_struct +ida_typeinf.tinfo_t.is_float +ida_typeinf.tinfo_t.is_floating +ida_typeinf.tinfo_t.is_forward_decl +ida_typeinf.tinfo_t.is_forward_enum +ida_typeinf.tinfo_t.is_forward_struct +ida_typeinf.tinfo_t.is_forward_union +ida_typeinf.tinfo_t.is_frame +ida_typeinf.tinfo_t.is_from_subtil +ida_typeinf.tinfo_t.is_func +ida_typeinf.tinfo_t.is_funcptr +ida_typeinf.tinfo_t.is_high_func +ida_typeinf.tinfo_t.is_int +ida_typeinf.tinfo_t.is_int128 +ida_typeinf.tinfo_t.is_int16 +ida_typeinf.tinfo_t.is_int32 +ida_typeinf.tinfo_t.is_int64 +ida_typeinf.tinfo_t.is_integral +ida_typeinf.tinfo_t.is_ldouble +ida_typeinf.tinfo_t.is_manually_castable_to +ida_typeinf.tinfo_t.is_one_fpval +ida_typeinf.tinfo_t.is_paf +ida_typeinf.tinfo_t.is_partial +ida_typeinf.tinfo_t.is_ptr +ida_typeinf.tinfo_t.is_ptr_or_array +ida_typeinf.tinfo_t.is_punknown +ida_typeinf.tinfo_t.is_purging_cc +ida_typeinf.tinfo_t.is_pvoid +ida_typeinf.tinfo_t.is_scalar +ida_typeinf.tinfo_t.is_shifted_ptr +ida_typeinf.tinfo_t.is_signed +ida_typeinf.tinfo_t.is_small_udt +ida_typeinf.tinfo_t.is_sse_type +ida_typeinf.tinfo_t.is_struct +ida_typeinf.tinfo_t.is_sue +ida_typeinf.tinfo_t.is_tbyte +ida_typeinf.tinfo_t.is_typedef +ida_typeinf.tinfo_t.is_typeref +ida_typeinf.tinfo_t.is_uchar +ida_typeinf.tinfo_t.is_udm_by_til +ida_typeinf.tinfo_t.is_udt +ida_typeinf.tinfo_t.is_uint +ida_typeinf.tinfo_t.is_uint128 +ida_typeinf.tinfo_t.is_uint16 +ida_typeinf.tinfo_t.is_uint32 +ida_typeinf.tinfo_t.is_uint64 +ida_typeinf.tinfo_t.is_union +ida_typeinf.tinfo_t.is_unknown +ida_typeinf.tinfo_t.is_unsigned +ida_typeinf.tinfo_t.is_user_cc +ida_typeinf.tinfo_t.is_vararg_cc +ida_typeinf.tinfo_t.is_varmember +ida_typeinf.tinfo_t.is_varstruct +ida_typeinf.tinfo_t.is_vftable +ida_typeinf.tinfo_t.is_void +ida_typeinf.tinfo_t.is_volatile +ida_typeinf.tinfo_t.is_well_defined +ida_typeinf.tinfo_t.iter_enum +ida_typeinf.tinfo_t.iter_func +ida_typeinf.tinfo_t.iter_struct +ida_typeinf.tinfo_t.iter_udt +ida_typeinf.tinfo_t.iter_union +ida_typeinf.tinfo_t.parse +ida_typeinf.tinfo_t.present +ida_typeinf.tinfo_t.read_bitfield_value +ida_typeinf.tinfo_t.remove_ptr_or_array +ida_typeinf.tinfo_t.rename_edm +ida_typeinf.tinfo_t.rename_funcarg +ida_typeinf.tinfo_t.rename_type +ida_typeinf.tinfo_t.rename_udm +ida_typeinf.tinfo_t.requires_qualifier +ida_typeinf.tinfo_t.save_type +ida_typeinf.tinfo_t.serialize +ida_typeinf.tinfo_t.set_attr +ida_typeinf.tinfo_t.set_attrs +ida_typeinf.tinfo_t.set_const +ida_typeinf.tinfo_t.set_declalign +ida_typeinf.tinfo_t.set_edm_cmt +ida_typeinf.tinfo_t.set_enum_is_bitmask +ida_typeinf.tinfo_t.set_enum_radix +ida_typeinf.tinfo_t.set_enum_repr +ida_typeinf.tinfo_t.set_enum_sign +ida_typeinf.tinfo_t.set_enum_width +ida_typeinf.tinfo_t.set_fixed_struct +ida_typeinf.tinfo_t.set_func_cc +ida_typeinf.tinfo_t.set_func_retloc +ida_typeinf.tinfo_t.set_func_rettype +ida_typeinf.tinfo_t.set_funcarg_loc +ida_typeinf.tinfo_t.set_funcarg_type +ida_typeinf.tinfo_t.set_methods +ida_typeinf.tinfo_t.set_modifiers +ida_typeinf.tinfo_t.set_named_type +ida_typeinf.tinfo_t.set_numbered_type +ida_typeinf.tinfo_t.set_struct_size +ida_typeinf.tinfo_t.set_symbol_type +ida_typeinf.tinfo_t.set_type_alias +ida_typeinf.tinfo_t.set_type_alignment +ida_typeinf.tinfo_t.set_type_cmt +ida_typeinf.tinfo_t.set_udm_by_til +ida_typeinf.tinfo_t.set_udm_cmt +ida_typeinf.tinfo_t.set_udm_repr +ida_typeinf.tinfo_t.set_udm_type +ida_typeinf.tinfo_t.set_udt_alignment +ida_typeinf.tinfo_t.set_udt_pack +ida_typeinf.tinfo_t.set_volatile +ida_typeinf.tinfo_t.swap +ida_typeinf.tinfo_t.write_bitfield_value +ida_typeinf.tinfo_visitor_t +ida_typeinf.tinfo_visitor_t.__disown__ +ida_typeinf.tinfo_visitor_t.__init__ +ida_typeinf.tinfo_visitor_t.apply_to +ida_typeinf.tinfo_visitor_t.prune_now +ida_typeinf.tinfo_visitor_t.state +ida_typeinf.tinfo_visitor_t.visit_type +ida_typeinf.type_attr_t +ida_typeinf.type_attr_t.__ge__ +ida_typeinf.type_attr_t.__init__ +ida_typeinf.type_attr_t.__lt__ +ida_typeinf.type_attr_t.key +ida_typeinf.type_attr_t.value +ida_typeinf.type_attrs_t +ida_typeinf.type_attrs_t.__getitem__ +ida_typeinf.type_attrs_t.__init__ +ida_typeinf.type_attrs_t.__len__ +ida_typeinf.type_attrs_t.__setitem__ +ida_typeinf.type_attrs_t.append +ida_typeinf.type_attrs_t.at +ida_typeinf.type_attrs_t.begin +ida_typeinf.type_attrs_t.capacity +ida_typeinf.type_attrs_t.clear +ida_typeinf.type_attrs_t.empty +ida_typeinf.type_attrs_t.end +ida_typeinf.type_attrs_t.erase +ida_typeinf.type_attrs_t.extend +ida_typeinf.type_attrs_t.extract +ida_typeinf.type_attrs_t.grow +ida_typeinf.type_attrs_t.inject +ida_typeinf.type_attrs_t.insert +ida_typeinf.type_attrs_t.pop_back +ida_typeinf.type_attrs_t.push_back +ida_typeinf.type_attrs_t.qclear +ida_typeinf.type_attrs_t.reserve +ida_typeinf.type_attrs_t.resize +ida_typeinf.type_attrs_t.size +ida_typeinf.type_attrs_t.swap +ida_typeinf.type_attrs_t.truncate +ida_typeinf.type_mods_t +ida_typeinf.type_mods_t.__init__ +ida_typeinf.type_mods_t.clear +ida_typeinf.type_mods_t.cmt +ida_typeinf.type_mods_t.flags +ida_typeinf.type_mods_t.has_cmt +ida_typeinf.type_mods_t.has_info +ida_typeinf.type_mods_t.has_name +ida_typeinf.type_mods_t.has_type +ida_typeinf.type_mods_t.is_rptcmt +ida_typeinf.type_mods_t.name +ida_typeinf.type_mods_t.set_new_cmt +ida_typeinf.type_mods_t.set_new_name +ida_typeinf.type_mods_t.set_new_type +ida_typeinf.type_mods_t.type +ida_typeinf.type_signed +ida_typeinf.type_unsigned +ida_typeinf.typedef_type_data_t +ida_typeinf.typedef_type_data_t.__init__ +ida_typeinf.typedef_type_data_t.is_ordref +ida_typeinf.typedef_type_data_t.name +ida_typeinf.typedef_type_data_t.ordinal +ida_typeinf.typedef_type_data_t.resolve +ida_typeinf.typedef_type_data_t.swap +ida_typeinf.typedef_type_data_t.til +ida_typeinf.udm_t +ida_typeinf.udm_t.__eq__ +ida_typeinf.udm_t.__init__ +ida_typeinf.udm_t.__lt__ +ida_typeinf.udm_t.__ne__ +ida_typeinf.udm_t.begin +ida_typeinf.udm_t.can_be_dtor +ida_typeinf.udm_t.can_rename +ida_typeinf.udm_t.clr_baseclass +ida_typeinf.udm_t.clr_method +ida_typeinf.udm_t.clr_unaligned +ida_typeinf.udm_t.clr_vftable +ida_typeinf.udm_t.clr_virtbase +ida_typeinf.udm_t.cmt +ida_typeinf.udm_t.effalign +ida_typeinf.udm_t.empty +ida_typeinf.udm_t.end +ida_typeinf.udm_t.fda +ida_typeinf.udm_t.is_anonymous_udm +ida_typeinf.udm_t.is_baseclass +ida_typeinf.udm_t.is_bitfield +ida_typeinf.udm_t.is_by_til +ida_typeinf.udm_t.is_gap +ida_typeinf.udm_t.is_method +ida_typeinf.udm_t.is_regcmt +ida_typeinf.udm_t.is_retaddr +ida_typeinf.udm_t.is_savregs +ida_typeinf.udm_t.is_special_member +ida_typeinf.udm_t.is_unaligned +ida_typeinf.udm_t.is_vftable +ida_typeinf.udm_t.is_virtbase +ida_typeinf.udm_t.is_zero_bitfield +ida_typeinf.udm_t.name +ida_typeinf.udm_t.offset +ida_typeinf.udm_t.repr +ida_typeinf.udm_t.set_baseclass +ida_typeinf.udm_t.set_by_til +ida_typeinf.udm_t.set_method +ida_typeinf.udm_t.set_regcmt +ida_typeinf.udm_t.set_retaddr +ida_typeinf.udm_t.set_savregs +ida_typeinf.udm_t.set_unaligned +ida_typeinf.udm_t.set_value_repr +ida_typeinf.udm_t.set_vftable +ida_typeinf.udm_t.set_virtbase +ida_typeinf.udm_t.size +ida_typeinf.udm_t.swap +ida_typeinf.udm_t.tafld_bits +ida_typeinf.udm_t.type +ida_typeinf.udm_visitor_t +ida_typeinf.udm_visitor_t.__disown__ +ida_typeinf.udm_visitor_t.__init__ +ida_typeinf.udm_visitor_t.visit_udm +ida_typeinf.udt_type_data_t +ida_typeinf.udt_type_data_t.__init__ +ida_typeinf.udt_type_data_t.add_member +ida_typeinf.udt_type_data_t.effalign +ida_typeinf.udt_type_data_t.find_member +ida_typeinf.udt_type_data_t.get_best_fit_member +ida_typeinf.udt_type_data_t.is_cppobj +ida_typeinf.udt_type_data_t.is_fixed +ida_typeinf.udt_type_data_t.is_last_baseclass +ida_typeinf.udt_type_data_t.is_msstruct +ida_typeinf.udt_type_data_t.is_unaligned +ida_typeinf.udt_type_data_t.is_union +ida_typeinf.udt_type_data_t.is_vftable +ida_typeinf.udt_type_data_t.pack +ida_typeinf.udt_type_data_t.sda +ida_typeinf.udt_type_data_t.set_fixed +ida_typeinf.udt_type_data_t.set_vftable +ida_typeinf.udt_type_data_t.swap +ida_typeinf.udt_type_data_t.taudt_bits +ida_typeinf.udt_type_data_t.total_size +ida_typeinf.udt_type_data_t.unpadded_size +ida_typeinf.udt_type_data_t.version +ida_typeinf.udt_type_data_t__find_member +ida_typeinf.udt_type_data_t__get_best_fit_member +ida_typeinf.udtmembervec_t +ida_typeinf.udtmembervec_t.__init__ +ida_typeinf.udtmembervec_template_t +ida_typeinf.udtmembervec_template_t.__eq__ +ida_typeinf.udtmembervec_template_t.__getitem__ +ida_typeinf.udtmembervec_template_t.__init__ +ida_typeinf.udtmembervec_template_t.__len__ +ida_typeinf.udtmembervec_template_t.__ne__ +ida_typeinf.udtmembervec_template_t.__setitem__ +ida_typeinf.udtmembervec_template_t._del +ida_typeinf.udtmembervec_template_t.add_unique +ida_typeinf.udtmembervec_template_t.append +ida_typeinf.udtmembervec_template_t.at +ida_typeinf.udtmembervec_template_t.begin +ida_typeinf.udtmembervec_template_t.capacity +ida_typeinf.udtmembervec_template_t.clear +ida_typeinf.udtmembervec_template_t.empty +ida_typeinf.udtmembervec_template_t.end +ida_typeinf.udtmembervec_template_t.erase +ida_typeinf.udtmembervec_template_t.extend +ida_typeinf.udtmembervec_template_t.extract +ida_typeinf.udtmembervec_template_t.find +ida_typeinf.udtmembervec_template_t.grow +ida_typeinf.udtmembervec_template_t.has +ida_typeinf.udtmembervec_template_t.inject +ida_typeinf.udtmembervec_template_t.insert +ida_typeinf.udtmembervec_template_t.pop_back +ida_typeinf.udtmembervec_template_t.push_back +ida_typeinf.udtmembervec_template_t.qclear +ida_typeinf.udtmembervec_template_t.reserve +ida_typeinf.udtmembervec_template_t.resize +ida_typeinf.udtmembervec_template_t.size +ida_typeinf.udtmembervec_template_t.swap +ida_typeinf.udtmembervec_template_t.truncate +ida_typeinf.unpack_idcobj_from_bv +ida_typeinf.unpack_idcobj_from_idb +ida_typeinf.unpack_object_from_bv +ida_typeinf.unpack_object_from_idb +ida_typeinf.use_golang_cc +ida_typeinf.valstr_t +ida_typeinf.valstr_t.__init__ +ida_typeinf.valstr_t.info +ida_typeinf.valstr_t.length +ida_typeinf.valstr_t.members +ida_typeinf.valstr_t.oneline +ida_typeinf.valstr_t.props +ida_typeinf.valstrs_t +ida_typeinf.valstrs_t.__init__ +ida_typeinf.valstrvec_t +ida_typeinf.valstrvec_t.__getitem__ +ida_typeinf.valstrvec_t.__init__ +ida_typeinf.valstrvec_t.__len__ +ida_typeinf.valstrvec_t.__setitem__ +ida_typeinf.valstrvec_t.append +ida_typeinf.valstrvec_t.at +ida_typeinf.valstrvec_t.begin +ida_typeinf.valstrvec_t.capacity +ida_typeinf.valstrvec_t.clear +ida_typeinf.valstrvec_t.empty +ida_typeinf.valstrvec_t.end +ida_typeinf.valstrvec_t.erase +ida_typeinf.valstrvec_t.extend +ida_typeinf.valstrvec_t.extract +ida_typeinf.valstrvec_t.grow +ida_typeinf.valstrvec_t.inject +ida_typeinf.valstrvec_t.insert +ida_typeinf.valstrvec_t.pop_back +ida_typeinf.valstrvec_t.push_back +ida_typeinf.valstrvec_t.qclear +ida_typeinf.valstrvec_t.reserve +ida_typeinf.valstrvec_t.resize +ida_typeinf.valstrvec_t.size +ida_typeinf.valstrvec_t.swap +ida_typeinf.valstrvec_t.truncate +ida_typeinf.value_repr_t +ida_typeinf.value_repr_t.__init__ +ida_typeinf.value_repr_t.__str__ +ida_typeinf.value_repr_t._print +ida_typeinf.value_repr_t.ap +ida_typeinf.value_repr_t.cd +ida_typeinf.value_repr_t.clear +ida_typeinf.value_repr_t.delta +ida_typeinf.value_repr_t.empty +ida_typeinf.value_repr_t.from_opinfo +ida_typeinf.value_repr_t.get_vtype +ida_typeinf.value_repr_t.has_lzeroes +ida_typeinf.value_repr_t.has_tabform +ida_typeinf.value_repr_t.init_ap +ida_typeinf.value_repr_t.is_custom +ida_typeinf.value_repr_t.is_enum +ida_typeinf.value_repr_t.is_offset +ida_typeinf.value_repr_t.is_signed +ida_typeinf.value_repr_t.is_strlit +ida_typeinf.value_repr_t.is_stroff +ida_typeinf.value_repr_t.is_typref +ida_typeinf.value_repr_t.parse_value_repr +ida_typeinf.value_repr_t.ri +ida_typeinf.value_repr_t.set_ap +ida_typeinf.value_repr_t.set_lzeroes +ida_typeinf.value_repr_t.set_signed +ida_typeinf.value_repr_t.set_tabform +ida_typeinf.value_repr_t.set_vtype +ida_typeinf.value_repr_t.strtype +ida_typeinf.value_repr_t.swap +ida_typeinf.value_repr_t.type_ordinal +ida_typeinf.value_repr_t__from_opinfo +ida_typeinf.value_repr_t__print_ +ida_typeinf.verify_argloc +ida_typeinf.verify_tinfo +ida_typeinf.visit_stroff_udms +ida_typeinf.visit_subtypes +ida_typeinf.write_tinfo_bitfield_value +ida_ua +ida_ua.BINOPSTATE_DONE +ida_ua.BINOPSTATE_GO +ida_ua.BINOPSTATE_NONE +ida_ua.COMMSTATE_DONE +ida_ua.COMMSTATE_GO +ida_ua.COMMSTATE_NONE +ida_ua.CTXF_BINOP_STATE +ida_ua.CTXF_BIT_PREFIX +ida_ua.CTXF_CMT_STATE +ida_ua.CTXF_CODE +ida_ua.CTXF_DBLIND_OPND +ida_ua.CTXF_DEMANGLED_LABEL +ida_ua.CTXF_DEMANGLED_OK +ida_ua.CTXF_GEN_CMT +ida_ua.CTXF_GEN_XREFS +ida_ua.CTXF_HIDDEN_ADDR +ida_ua.CTXF_LABEL_OK +ida_ua.CTXF_MAIN +ida_ua.CTXF_MULTI +ida_ua.CTXF_NORMAL_LABEL +ida_ua.CTXF_OUTCTX_T +ida_ua.CTXF_OVSTORE_PRNT +ida_ua.CTXF_STACK +ida_ua.CTXF_VOIDS +ida_ua.CTXF_XREF_STATE +ida_ua.FCBF_CONT +ida_ua.FCBF_DELIM +ida_ua.FCBF_ERR_REPL +ida_ua.FCBF_FF_LIT +ida_ua.GH_BYTESEX_HAS_HIGHBYTE +ida_ua.GH_PRINT_ASM +ida_ua.GH_PRINT_BYTESEX +ida_ua.GH_PRINT_HEADER +ida_ua.GH_PRINT_PROC +ida_ua.INSN_64BIT +ida_ua.INSN_MACRO +ida_ua.INSN_MODMAC +ida_ua.MAKELINE_BINPREF +ida_ua.MAKELINE_STACK +ida_ua.MAKELINE_VOID +ida_ua.OF_NO_BASE_DISP +ida_ua.OF_NUMBER +ida_ua.OF_OUTER_DISP +ida_ua.OF_SHOW +ida_ua.OOFS_IFSIGN +ida_ua.OOFS_NEEDSIGN +ida_ua.OOFS_NOSIGN +ida_ua.OOFW_16 +ida_ua.OOFW_24 +ida_ua.OOFW_32 +ida_ua.OOFW_64 +ida_ua.OOFW_8 +ida_ua.OOFW_IMM +ida_ua.OOF_ADDR +ida_ua.OOF_ANYSERIAL +ida_ua.OOF_LZEROES +ida_ua.OOF_NOBNOT +ida_ua.OOF_NO_LZEROES +ida_ua.OOF_NUMBER +ida_ua.OOF_OUTER +ida_ua.OOF_SIGNED +ida_ua.OOF_SIGNMASK +ida_ua.OOF_SPACES +ida_ua.OOF_WIDTHMASK +ida_ua.OOF_ZSTROFF +ida_ua.PACK_FORM_DEF +ida_ua.STKVAR_VALID_SIZE +ida_ua.XREFSTATE_DONE +ida_ua.XREFSTATE_GO +ida_ua.XREFSTATE_NONE +ida_ua.calc_dataseg +ida_ua.can_decode +ida_ua.construct_macro +ida_ua.create_insn +ida_ua.create_outctx +ida_ua.decode_insn +ida_ua.decode_preceding_insn +ida_ua.decode_prev_insn +ida_ua.dt_bitfild +ida_ua.dt_byte +ida_ua.dt_byte16 +ida_ua.dt_byte32 +ida_ua.dt_byte64 +ida_ua.dt_code +ida_ua.dt_double +ida_ua.dt_dword +ida_ua.dt_float +ida_ua.dt_fword +ida_ua.dt_half +ida_ua.dt_ldbl +ida_ua.dt_packreal +ida_ua.dt_qword +ida_ua.dt_string +ida_ua.dt_tbyte +ida_ua.dt_unicode +ida_ua.dt_void +ida_ua.dt_word +ida_ua.get_dtype_by_size +ida_ua.get_dtype_flag +ida_ua.get_dtype_size +ida_ua.get_immvals +ida_ua.get_lookback +ida_ua.get_printable_immvals +ida_ua.insn_add_cref +ida_ua.insn_add_dref +ida_ua.insn_add_off_drefs +ida_ua.insn_create_stkvar +ida_ua.insn_t +ida_ua.insn_t.__get_auxpref__ +ida_ua.insn_t.__get_operand__ +ida_ua.insn_t.__get_ops__ +ida_ua.insn_t.__getitem__ +ida_ua.insn_t.__init__ +ida_ua.insn_t.__iter__ +ida_ua.insn_t.__set_auxpref__ +ida_ua.insn_t.add_cref +ida_ua.insn_t.add_dref +ida_ua.insn_t.add_off_drefs +ida_ua.insn_t.assign +ida_ua.insn_t.auxpref +ida_ua.insn_t.auxpref +ida_ua.insn_t.create_op_data +ida_ua.insn_t.create_stkvar +ida_ua.insn_t.cs +ida_ua.insn_t.ea +ida_ua.insn_t.flags +ida_ua.insn_t.get_canon_feature +ida_ua.insn_t.get_canon_mnem +ida_ua.insn_t.get_next_byte +ida_ua.insn_t.get_next_dword +ida_ua.insn_t.get_next_qword +ida_ua.insn_t.get_next_word +ida_ua.insn_t.insnpref +ida_ua.insn_t.ip +ida_ua.insn_t.is_64bit +ida_ua.insn_t.is_canon_insn +ida_ua.insn_t.is_macro +ida_ua.insn_t.itype +ida_ua.insn_t.ops +ida_ua.insn_t.ops +ida_ua.insn_t.segpref +ida_ua.insn_t.size +ida_ua.insn_t__from_ptrval__ +ida_ua.is_floating_dtype +ida_ua.macro_constructor_t +ida_ua.macro_constructor_t.__disown__ +ida_ua.macro_constructor_t.__init__ +ida_ua.macro_constructor_t.build_macro +ida_ua.macro_constructor_t.construct_macro +ida_ua.map_code_ea +ida_ua.map_data_ea +ida_ua.map_ea +ida_ua.o_displ +ida_ua.o_far +ida_ua.o_idpspec0 +ida_ua.o_idpspec1 +ida_ua.o_idpspec2 +ida_ua.o_idpspec3 +ida_ua.o_idpspec4 +ida_ua.o_idpspec5 +ida_ua.o_imm +ida_ua.o_mem +ida_ua.o_near +ida_ua.o_phrase +ida_ua.o_reg +ida_ua.o_void +ida_ua.op_t +ida_ua.op_t.__get_addr__ +ida_ua.op_t.__get_reg_phrase__ +ida_ua.op_t.__get_specval__ +ida_ua.op_t.__get_value64__ +ida_ua.op_t.__get_value__ +ida_ua.op_t.__init__ +ida_ua.op_t.__set_addr__ +ida_ua.op_t.__set_reg_phrase__ +ida_ua.op_t.__set_specval__ +ida_ua.op_t.__set_value64__ +ida_ua.op_t.__set_value__ +ida_ua.op_t.addr +ida_ua.op_t.addr +ida_ua.op_t.assign +ida_ua.op_t.clr_shown +ida_ua.op_t.dtype +ida_ua.op_t.flags +ida_ua.op_t.has_reg +ida_ua.op_t.is_imm +ida_ua.op_t.is_reg +ida_ua.op_t.n +ida_ua.op_t.offb +ida_ua.op_t.offo +ida_ua.op_t.phrase +ida_ua.op_t.phrase +ida_ua.op_t.reg +ida_ua.op_t.reg +ida_ua.op_t.set_shown +ida_ua.op_t.shown +ida_ua.op_t.specval +ida_ua.op_t.specval +ida_ua.op_t.type +ida_ua.op_t.value +ida_ua.op_t.value +ida_ua.op_t__from_ptrval__ +ida_ua.operands_array +ida_ua.operands_array.__getitem__ +ida_ua.operands_array.__init__ +ida_ua.operands_array.__len__ +ida_ua.operands_array.__setitem__ +ida_ua.operands_array._get_bytes +ida_ua.operands_array._set_bytes +ida_ua.outctx_base_t +ida_ua.outctx_base_t.F32 +ida_ua.outctx_base_t.__init__ +ida_ua.outctx_base_t.close_comment +ida_ua.outctx_base_t.clr_gen_label +ida_ua.outctx_base_t.default_lnnum +ida_ua.outctx_base_t.display_voids +ida_ua.outctx_base_t.flush_buf +ida_ua.outctx_base_t.flush_outbuf +ida_ua.outctx_base_t.forbid_annotations +ida_ua.outctx_base_t.force_code +ida_ua.outctx_base_t.gen_block_cmt +ida_ua.outctx_base_t.gen_border_line +ida_ua.outctx_base_t.gen_cmt_line +ida_ua.outctx_base_t.gen_collapsed_line +ida_ua.outctx_base_t.gen_empty_line +ida_ua.outctx_base_t.gen_empty_line_without_annotations +ida_ua.outctx_base_t.gen_printf +ida_ua.outctx_base_t.gen_xref_lines +ida_ua.outctx_base_t.getF +ida_ua.outctx_base_t.get_stkvar +ida_ua.outctx_base_t.init_lines_array +ida_ua.outctx_base_t.multiline +ida_ua.outctx_base_t.only_main_line +ida_ua.outctx_base_t.out_addr_tag +ida_ua.outctx_base_t.out_btoa +ida_ua.outctx_base_t.out_char +ida_ua.outctx_base_t.out_chars +ida_ua.outctx_base_t.out_colored_register_line +ida_ua.outctx_base_t.out_keyword +ida_ua.outctx_base_t.out_line +ida_ua.outctx_base_t.out_long +ida_ua.outctx_base_t.out_lvar +ida_ua.outctx_base_t.out_name_expr +ida_ua.outctx_base_t.out_printf +ida_ua.outctx_base_t.out_register +ida_ua.outctx_base_t.out_spaces +ida_ua.outctx_base_t.out_symbol +ida_ua.outctx_base_t.out_tagoff +ida_ua.outctx_base_t.out_tagon +ida_ua.outctx_base_t.out_value +ida_ua.outctx_base_t.outbuf +ida_ua.outctx_base_t.print_label_now +ida_ua.outctx_base_t.restore_ctxflags +ida_ua.outctx_base_t.retrieve_cmt +ida_ua.outctx_base_t.retrieve_name +ida_ua.outctx_base_t.set_comment_addr +ida_ua.outctx_base_t.set_dlbind_opnd +ida_ua.outctx_base_t.set_gen_cmt +ida_ua.outctx_base_t.set_gen_demangled_label +ida_ua.outctx_base_t.set_gen_label +ida_ua.outctx_base_t.set_gen_xrefs +ida_ua.outctx_base_t.setup_outctx +ida_ua.outctx_base_t.stack_view +ida_ua.outctx_base_t.term_outctx +ida_ua.outctx_base_t__from_ptrval__ +ida_ua.outctx_t +ida_ua.outctx_t.__init__ +ida_ua.outctx_t.gen_func_footer +ida_ua.outctx_t.gen_func_header +ida_ua.outctx_t.gen_header +ida_ua.outctx_t.gen_header_extra +ida_ua.outctx_t.gen_xref_lines +ida_ua.outctx_t.out_btoa +ida_ua.outctx_t.out_custom_mnem +ida_ua.outctx_t.out_data +ida_ua.outctx_t.out_fcref_names +ida_ua.outctx_t.out_immchar_cmts +ida_ua.outctx_t.out_mnem +ida_ua.outctx_t.out_mnemonic +ida_ua.outctx_t.out_one_operand +ida_ua.outctx_t.out_specea +ida_ua.outctx_t.retrieve_cmt +ida_ua.outctx_t.retrieve_name +ida_ua.outctx_t.set_bin_state +ida_ua.outctx_t.setup_outctx +ida_ua.outctx_t.term_outctx +ida_ua.outctx_t__from_ptrval__ +ida_ua.print_insn_mnem +ida_ua.print_operand +ida_xref +ida_xref.XREF_BASE +ida_xref.XREF_CODE +ida_xref.XREF_DATA +ida_xref.XREF_EA +ida_xref.XREF_FLOW +ida_xref.XREF_MASK +ida_xref.XREF_NOFLOW +ida_xref.XREF_PASTEND +ida_xref.XREF_TAIL +ida_xref.XREF_TID +ida_xref.XREF_USER +ida_xref.add_cref +ida_xref.add_dref +ida_xref.calc_switch_cases +ida_xref.cases_and_targets_t +ida_xref.cases_and_targets_t.__init__ +ida_xref.casevec_t +ida_xref.casevec_t.__eq__ +ida_xref.casevec_t.__getitem__ +ida_xref.casevec_t.__init__ +ida_xref.casevec_t.__len__ +ida_xref.casevec_t.__ne__ +ida_xref.casevec_t.__setitem__ +ida_xref.casevec_t._del +ida_xref.casevec_t.add_unique +ida_xref.casevec_t.append +ida_xref.casevec_t.at +ida_xref.casevec_t.begin +ida_xref.casevec_t.capacity +ida_xref.casevec_t.clear +ida_xref.casevec_t.empty +ida_xref.casevec_t.end +ida_xref.casevec_t.erase +ida_xref.casevec_t.extend +ida_xref.casevec_t.extract +ida_xref.casevec_t.find +ida_xref.casevec_t.grow +ida_xref.casevec_t.has +ida_xref.casevec_t.inject +ida_xref.casevec_t.insert +ida_xref.casevec_t.pop_back +ida_xref.casevec_t.push_back +ida_xref.casevec_t.qclear +ida_xref.casevec_t.reserve +ida_xref.casevec_t.resize +ida_xref.casevec_t.size +ida_xref.casevec_t.swap +ida_xref.casevec_t.truncate +ida_xref.create_switch_table +ida_xref.create_switch_xrefs +ida_xref.del_cref +ida_xref.del_dref +ida_xref.delete_switch_table +ida_xref.dr_I +ida_xref.dr_O +ida_xref.dr_R +ida_xref.dr_S +ida_xref.dr_T +ida_xref.dr_U +ida_xref.dr_W +ida_xref.fl_CF +ida_xref.fl_CN +ida_xref.fl_F +ida_xref.fl_JF +ida_xref.fl_JN +ida_xref.fl_U +ida_xref.fl_USobsolete +ida_xref.get_first_cref_from +ida_xref.get_first_cref_to +ida_xref.get_first_dref_from +ida_xref.get_first_dref_to +ida_xref.get_first_fcref_from +ida_xref.get_first_fcref_to +ida_xref.get_next_cref_from +ida_xref.get_next_cref_to +ida_xref.get_next_dref_from +ida_xref.get_next_dref_to +ida_xref.get_next_fcref_from +ida_xref.get_next_fcref_to +ida_xref.has_external_refs +ida_xref.has_jump_or_flow_xref +ida_xref.xrefblk_t +ida_xref.xrefblk_t.__init__ +ida_xref.xrefblk_t.crefs_from +ida_xref.xrefblk_t.crefs_to +ida_xref.xrefblk_t.drefs_from +ida_xref.xrefblk_t.drefs_to +ida_xref.xrefblk_t.fcrefs_from +ida_xref.xrefblk_t.fcrefs_to +ida_xref.xrefblk_t.first_from +ida_xref.xrefblk_t.first_to +ida_xref.xrefblk_t.iscode +ida_xref.xrefblk_t.next_from +ida_xref.xrefblk_t.next_to +ida_xref.xrefblk_t.refs_from +ida_xref.xrefblk_t.refs_from._copy_xref +ida_xref.xrefblk_t.refs_to +ida_xref.xrefblk_t.refs_to._copy_xref +ida_xref.xrefblk_t.to +ida_xref.xrefblk_t.type +ida_xref.xrefblk_t.user +ida_xref.xrefchar +ida_mergemod +ida_mergemod.create_std_modmerge_handlers +ida_merge +ida_merge.MERGE_KIND_AFLAGS_EA +ida_merge.MERGE_KIND_AUTOQ +ida_merge.MERGE_KIND_BOOKMARKS +ida_merge.MERGE_KIND_BPTS +ida_merge.MERGE_KIND_BYTEVAL +ida_merge.MERGE_KIND_CREFS +ida_merge.MERGE_KIND_CUSTDATA +ida_merge.MERGE_KIND_DBG_MEMREGS +ida_merge.MERGE_KIND_DEBUGGER +ida_merge.MERGE_KIND_DEKSTOPS +ida_merge.MERGE_KIND_DIRTREE +ida_merge.MERGE_KIND_DREFS +ida_merge.MERGE_KIND_ENCODINGS +ida_merge.MERGE_KIND_ENCODINGS2 +ida_merge.MERGE_KIND_END +ida_merge.MERGE_KIND_ENUMS +ida_merge.MERGE_KIND_EXPORTS +ida_merge.MERGE_KIND_EXTRACMT +ida_merge.MERGE_KIND_FILEREGIONS +ida_merge.MERGE_KIND_FIXUPS +ida_merge.MERGE_KIND_FLAGS +ida_merge.MERGE_KIND_FLOWS +ida_merge.MERGE_KIND_FRAME +ida_merge.MERGE_KIND_FRAMEMGR +ida_merge.MERGE_KIND_FUNC +ida_merge.MERGE_KIND_GHSTRCMT +ida_merge.MERGE_KIND_HIDDENRANGES +ida_merge.MERGE_KIND_IGNOREMICRO +ida_merge.MERGE_KIND_IMPORTS +ida_merge.MERGE_KIND_INF +ida_merge.MERGE_KIND_LAST +ida_merge.MERGE_KIND_LOADER +ida_merge.MERGE_KIND_LUMINA +ida_merge.MERGE_KIND_MAPPING +ida_merge.MERGE_KIND_NETNODE +ida_merge.MERGE_KIND_NOTEPAD +ida_merge.MERGE_KIND_ORPHANS +ida_merge.MERGE_KIND_PATCHES +ida_merge.MERGE_KIND_PROBLEMS +ida_merge.MERGE_KIND_SCRIPTS +ida_merge.MERGE_KIND_SCRIPTS2 +ida_merge.MERGE_KIND_SEGGRPS +ida_merge.MERGE_KIND_SEGMENTS +ida_merge.MERGE_KIND_SEGREGS +ida_merge.MERGE_KIND_SELECTORS +ida_merge.MERGE_KIND_SIGNATURES +ida_merge.MERGE_KIND_SOURCEFILES +ida_merge.MERGE_KIND_STKPNTS +ida_merge.MERGE_KIND_STRMEM +ida_merge.MERGE_KIND_STRMEMCMT +ida_merge.MERGE_KIND_STRUCTS +ida_merge.MERGE_KIND_STT +ida_merge.MERGE_KIND_TILS +ida_merge.MERGE_KIND_TINFO +ida_merge.MERGE_KIND_TRYBLKS +ida_merge.MERGE_KIND_UDTMEM +ida_merge.MERGE_KIND_UI +ida_merge.MERGE_KIND_VFTABLES +ida_merge.MERGE_KIND_WATCHPOINTS +ida_merge.MH_LISTEN +ida_merge.MH_TERSE +ida_merge.MH_UI_CHAR_MASK +ida_merge.MH_UI_COLONNAME +ida_merge.MH_UI_COMMANAME +ida_merge.MH_UI_COMPLEX +ida_merge.MH_UI_DP_NOLINEDIFF +ida_merge.MH_UI_DP_SHORTNAME +ida_merge.MH_UI_INDENT +ida_merge.MH_UI_NODETAILS +ida_merge.MH_UI_SPLITNAME +ida_merge.NDS_BLOB +ida_merge.NDS_EV_FUNC +ida_merge.NDS_EV_RANGE +ida_merge.NDS_INC +ida_merge.NDS_IS_BOOL +ida_merge.NDS_IS_EA +ida_merge.NDS_IS_RELATIVE +ida_merge.NDS_IS_STR +ida_merge.NDS_MAP_IDX +ida_merge.NDS_MAP_VAL +ida_merge.NDS_SUPVAL +ida_merge.NDS_UI_ND +ida_merge.NDS_VAL8 +ida_merge.create_nodeval_merge_handler +ida_merge.create_nodeval_merge_handlers +ida_merge.destroy_moddata_merge_handlers +ida_merge.get_ea_diffpos_name +ida_merge.is_diff_merge_mode +ida_merge.item_block_locator_t +ida_merge.item_block_locator_t.__disown__ +ida_merge.item_block_locator_t.__init__ +ida_merge.item_block_locator_t.get_block_head +ida_merge.item_block_locator_t.setup_blocks +ida_merge.merge_data_t +ida_merge.merge_data_t.__init__ +ida_merge.merge_data_t.add_event_handler +ida_merge.merge_data_t.base_id +ida_merge.merge_data_t.compare_merging_tifs +ida_merge.merge_data_t.dbctx_ids +ida_merge.merge_data_t.ev_handlers +ida_merge.merge_data_t.get_block_head +ida_merge.merge_data_t.has_existing_node +ida_merge.merge_data_t.local_id +ida_merge.merge_data_t.map_privrange_id +ida_merge.merge_data_t.map_tinfo +ida_merge.merge_data_t.nbases +ida_merge.merge_data_t.remote_id +ida_merge.merge_data_t.remove_event_handler +ida_merge.merge_data_t.set_dbctx_ids +ida_merge.merge_data_t.setup_blocks +ida_merge.merge_handler_params_t +ida_merge.merge_handler_params_t.__init__ +ida_merge.merge_handler_params_t.insert_after +ida_merge.merge_handler_params_t.kind +ida_merge.merge_handler_params_t.ui_complex_details +ida_merge.merge_handler_params_t.ui_complex_name +ida_merge.merge_handler_params_t.ui_dp_shortname +ida_merge.merge_handler_params_t.ui_has_details +ida_merge.merge_handler_params_t.ui_indent +ida_merge.merge_handler_params_t.ui_linediff +ida_merge.merge_handler_params_t.ui_split_char +ida_merge.merge_handler_params_t.ui_split_str +ida_merge.merge_node_helper_t +ida_merge.merge_node_helper_t.__disown__ +ida_merge.merge_node_helper_t.__init__ +ida_merge.merge_node_helper_t.append_eavec +ida_merge.merge_node_helper_t.get_column_headers +ida_merge.merge_node_helper_t.get_netnode +ida_merge.merge_node_helper_t.is_mergeable +ida_merge.merge_node_helper_t.map_scalar +ida_merge.merge_node_helper_t.map_string +ida_merge.merge_node_helper_t.print_entry_details +ida_merge.merge_node_helper_t.print_entry_name +ida_merge.merge_node_helper_t.refresh +ida_merge.merge_node_info_t +ida_merge.merge_node_info_t.__init__ +ida_merge.merge_node_info_t.name +ida_merge.merge_node_info_t.nds_flags +ida_merge.merge_node_info_t.tag +ida_merge.moddata_diff_helper_t +ida_merge.moddata_diff_helper_t.__disown__ +ida_merge.moddata_diff_helper_t.__init__ +ida_merge.moddata_diff_helper_t.additional_mh_flags +ida_merge.moddata_diff_helper_t.fields +ida_merge.moddata_diff_helper_t.get_struc_ptr +ida_merge.moddata_diff_helper_t.merge_ending +ida_merge.moddata_diff_helper_t.merge_starting +ida_merge.moddata_diff_helper_t.module_name +ida_merge.moddata_diff_helper_t.netnode_name +ida_merge.moddata_diff_helper_t.nfields +ida_merge.moddata_diff_helper_t.print_diffpos_details +ida_merge.moddata_diff_helper_t.str2val +ida_merge.moddata_diff_helper_t.val2str +ida_undo +ida_undo.create_undo_point +ida_undo.get_redo_action_label +ida_undo.get_undo_action_label +ida_undo.perform_redo +ida_undo.perform_undo diff --git a/api_contents.full b/api_contents.full index 28e0e4a..79ae432 100644 --- a/api_contents.full +++ b/api_contents.full @@ -1,16968 +1,11506 @@ -ida_hexrays (module) +ida_hexrays array used for translating cexpr_t->op type to their names. -ida_hexrays.ACFL_BLKOPT (variable) +ida_hexrays.ACFL_BLKOPT perform interblock transformations -ida_hexrays.ACFL_GLBDEL (variable) +ida_hexrays.ACFL_GLBDEL perform dead code eliminition -ida_hexrays.ACFL_GLBPROP (variable) +ida_hexrays.ACFL_GLBPROP perform global propagation -ida_hexrays.ACFL_GUESS (variable) +ida_hexrays.ACFL_GUESS may guess calling conventions -ida_hexrays.ACFL_LOCOPT (variable) +ida_hexrays.ACFL_LOCOPT perform local propagation (requires ACFL_BLKOPT) -ida_hexrays.ALLOW_UNUSED_LABELS (variable) +ida_hexrays.ALLOW_UNUSED_LABELS Unused labels are permitted. -ida_hexrays.ANCHOR_BLKCMT (variable) +ida_hexrays.ANCHOR_BLKCMT block comment (for ctree items) -ida_hexrays.ANCHOR_CITEM (variable) +ida_hexrays.ANCHOR_CITEM c-tree item -ida_hexrays.ANCHOR_ITP (variable) +ida_hexrays.ANCHOR_ITP item type preciser -ida_hexrays.ANCHOR_LVAR (variable) +ida_hexrays.ANCHOR_LVAR declaration of local variable -ida_hexrays.ANY_FPSIZE (variable) +ida_hexrays.ANY_FPSIZE any size of floating operand is permitted -ida_hexrays.ANY_REGSIZE (variable) +ida_hexrays.ANY_REGSIZE any register size is permitted -ida_hexrays.BLT_0WAY (variable) +ida_hexrays.BLT_0WAY does not have successors (tail is a noret function) -ida_hexrays.BLT_1WAY (variable) +ida_hexrays.BLT_1WAY passes execution to one block (regular or goto block) -ida_hexrays.BLT_2WAY (variable) +ida_hexrays.BLT_2WAY passes execution to two blocks (conditional jump) -ida_hexrays.BLT_NONE (variable) +ida_hexrays.BLT_NONE unknown block type -ida_hexrays.BLT_NWAY (variable) +ida_hexrays.BLT_NWAY passes execution to many blocks (switch idiom) -ida_hexrays.BLT_STOP (variable) +ida_hexrays.BLT_STOP stops execution regularly (must be the last block) -ida_hexrays.BLT_XTRN (variable) +ida_hexrays.BLT_XTRN external block (out of function address) -ida_hexrays.CALC_CURLY_BRACES (variable) +ida_hexrays.CALC_CURLY_BRACES print curly braces if necessary -ida_hexrays.CFL_FINAL (variable) +ida_hexrays.CFL_FINAL call type is final, should not be changed -ida_hexrays.CFL_HELPER (variable) +ida_hexrays.CFL_HELPER created from a decompiler helper function -ida_hexrays.CFL_NORET (variable) +ida_hexrays.CFL_NORET call does not return -ida_hexrays.CFS_BOUNDS (variable) +ida_hexrays.CFS_BOUNDS 'eamap' and 'boundaries' are ready -ida_hexrays.CFS_LOCKED (variable) +ida_hexrays.CFS_LOCKED cfunc is temporarily locked -ida_hexrays.CFS_LVARS_HIDDEN (variable) +ida_hexrays.CFS_LVARS_HIDDEN local variable definitions are collapsed -ida_hexrays.CFS_TEXT (variable) +ida_hexrays.CFS_TEXT 'sv' is ready (and hdrlines) -ida_hexrays.CHF_FAKE (variable) +ida_hexrays.CHF_FAKE fake chain created by widen_chains() -ida_hexrays.CHF_INITED (variable) +ida_hexrays.CHF_INITED is chain initialized? (valid only after lvar allocation) -ida_hexrays.CHF_OVER (variable) +ida_hexrays.CHF_OVER overlapped chain -ida_hexrays.CHF_PASSTHRU (variable) +ida_hexrays.CHF_PASSTHRU pass-thru chain, must use the input variable to the block -ida_hexrays.CHF_REPLACED (variable) +ida_hexrays.CHF_REPLACED chain operands have been replaced? -ida_hexrays.CHF_TERM (variable) +ida_hexrays.CHF_TERM terminating chain; the variable does not survive across the block -ida_hexrays.CIT_COLLAPSED (variable) +ida_hexrays.CIT_COLLAPSED display ctree item in collapsed form -ida_hexrays.CMAT_BUILT (variable) +ida_hexrays.CMAT_BUILT just generated -ida_hexrays.CMAT_CASTED (variable) +ida_hexrays.CMAT_CASTED added necessary casts -ida_hexrays.CMAT_CPA (variable) +ida_hexrays.CMAT_CPA corrected pointer arithmetic -ida_hexrays.CMAT_FINAL (variable) +ida_hexrays.CMAT_FINAL ready-to-use -ida_hexrays.CMAT_NICE (variable) +ida_hexrays.CMAT_NICE nicefied expressions -ida_hexrays.CMAT_TRANS1 (variable) +ida_hexrays.CMAT_TRANS1 applied first wave of transformations -ida_hexrays.CMAT_TRANS2 (variable) +ida_hexrays.CMAT_TRANS2 applied second wave of transformations -ida_hexrays.CMAT_TRANS3 (variable) +ida_hexrays.CMAT_TRANS3 applied third wave of transformations -ida_hexrays.CMAT_ZERO (variable) +ida_hexrays.CMAT_ZERO does not exist -ida_hexrays.CMT_ALL (variable) +ida_hexrays.CMT_ALL All comments. -ida_hexrays.CMT_BLOCK1 (variable) +ida_hexrays.CMT_BLOCK1 Anterioir block comment. -ida_hexrays.CMT_BLOCK2 (variable) +ida_hexrays.CMT_BLOCK2 Posterior block comment. -ida_hexrays.CMT_FUNC (variable) +ida_hexrays.CMT_FUNC Function comment. -ida_hexrays.CMT_LVAR (variable) +ida_hexrays.CMT_LVAR Local variable comment. -ida_hexrays.CMT_NONE (variable) +ida_hexrays.CMT_NONE No comment is possible. -ida_hexrays.CMT_TAIL (variable) +ida_hexrays.CMT_TAIL Indented comment. -ida_hexrays.CPBLK_FAST (variable) +ida_hexrays.CPBLK_FAST do not update minbstkref and minbargref -ida_hexrays.CPBLK_MINREF (variable) +ida_hexrays.CPBLK_MINREF update minbstkref and minbargref -ida_hexrays.CPBLK_OPTJMP (variable) - del the jump insn at the end of the block if it becomes useless +ida_hexrays.CPBLK_OPTJMP + del the jump insn at the end of the block if it becomes useless + -ida_hexrays.CV_FAST (variable) +ida_hexrays.CV_FAST do not maintain parent information -ida_hexrays.CV_INSNS (variable) - 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_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 (variable) +ida_hexrays.CV_PARENTS maintain parent information -ida_hexrays.CV_POST (variable) +ida_hexrays.CV_POST call the leave...() functions -ida_hexrays.CV_PRUNE (variable) +ida_hexrays.CV_PRUNE this bit is set by visit...() to prune the walk -ida_hexrays.CV_RESTART (variable) +ida_hexrays.CV_RESTART restart enumeration at the top expr (apply_to_exprs) -ida_hexrays.DECOMP_ALL_BLKS (variable) +ida_hexrays.DECOMP_ALL_BLKS generate microcode for unreachable blocks -ida_hexrays.DECOMP_GXREFS_DEFLT (variable) - the default behavior: do not update the global xrefs cache upon decompile() - call, but when the pseudocode text is generated (e.g., through - cfunc_t.get_pseudocode()) +ida_hexrays.DECOMP_GXREFS_DEFLT + the default behavior: do not update the global xrefs cache upon decompile() call, but when the pseudocode text is generated (e.g., through cfunc_t.get_pseudocode()) + -ida_hexrays.DECOMP_GXREFS_FORCE (variable) +ida_hexrays.DECOMP_GXREFS_FORCE update the global xrefs cache immediately -ida_hexrays.DECOMP_GXREFS_NOUPD (variable) +ida_hexrays.DECOMP_GXREFS_NOUPD do not update the global xrefs cache -ida_hexrays.DECOMP_NO_CACHE (variable) +ida_hexrays.DECOMP_NO_CACHE do not use decompilation cache (snippets are never cached) -ida_hexrays.DECOMP_NO_FRAME (variable) +ida_hexrays.DECOMP_NO_FRAME do not use function frame info (only snippet mode) -ida_hexrays.DECOMP_NO_HIDE (variable) +ida_hexrays.DECOMP_NO_HIDE do not close display waitbox. see close_hexrays_waitboxes() -ida_hexrays.DECOMP_NO_WAIT (variable) +ida_hexrays.DECOMP_NO_WAIT do not display waitbox -ida_hexrays.DECOMP_NO_XREFS (variable) - Obsolete. Use DECOMP_GXREFS_NOUPD. +ida_hexrays.DECOMP_OUTLINE + generate code for an outline -ida_hexrays.DECOMP_VOID_MBA (variable) +ida_hexrays.DECOMP_VOID_MBA return empty mba object (to be used with gen_microcode) -ida_hexrays.DECOMP_WARNINGS (variable) +ida_hexrays.DECOMP_WARNINGS display warnings in the output window -ida_hexrays.DecompilationFailure (class) +ida_hexrays.DecompilationFailure -ida_hexrays.EQ_CMPDEST (variable) +ida_hexrays.EQ_CMPDEST compare instruction destinations -ida_hexrays.EQ_IGNCODE (variable) +ida_hexrays.EQ_IGNCODE ignore instruction opcodes -ida_hexrays.EQ_IGNSIZE (variable) +ida_hexrays.EQ_IGNSIZE ignore source operand sizes -ida_hexrays.EQ_OPTINSN (variable) +ida_hexrays.EQ_OPTINSN optimize mop_d operands -ida_hexrays.EXFL_ALL (variable) +ida_hexrays.EXFL_ALL all currently defined bits -ida_hexrays.EXFL_ALONE (variable) +ida_hexrays.EXFL_ALONE standalone helper -ida_hexrays.EXFL_CPADONE (variable) +ida_hexrays.EXFL_CPADONE pointer arithmetic correction done -ida_hexrays.EXFL_CSTR (variable) +ida_hexrays.EXFL_CSTR string literal -ida_hexrays.EXFL_FPOP (variable) +ida_hexrays.EXFL_FPOP floating point operation -ida_hexrays.EXFL_JUMPOUT (variable) +ida_hexrays.EXFL_JUMPOUT jump out-of-function -ida_hexrays.EXFL_LVALUE (variable) +ida_hexrays.EXFL_LVALUE expression is lvalue even if it doesn't look like it -ida_hexrays.EXFL_PARTIAL (variable) +ida_hexrays.EXFL_PARTIAL type of the expression is considered partial -ida_hexrays.EXFL_UNDEF (variable) +ida_hexrays.EXFL_UNDEF expression uses undefined value -ida_hexrays.EXFL_VFTABLE (variable) +ida_hexrays.EXFL_VFTABLE is ptr to vftable (used for cot_memptr, cot_memref) -ida_hexrays.FCI_DEAD (variable) +ida_hexrays.FCI_DEAD some return registers were determined dead -ida_hexrays.FCI_EXPLOCS (variable) +ida_hexrays.FCI_EXPLOCS all arglocs are specified explicitly -ida_hexrays.FCI_FINAL (variable) +ida_hexrays.FCI_FINAL call type is final, should not be changed -ida_hexrays.FCI_HASCALL (variable) - 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_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 (variable) - A variadic function with recognized printf- or scanf-style format string +ida_hexrays.FCI_HASFMT + A variadic function with recognized printf- or scanf-style format string + -ida_hexrays.FCI_NORET (variable) +ida_hexrays.FCI_NORET call does not return -ida_hexrays.FCI_NOSIDE (variable) +ida_hexrays.FCI_NOSIDE call does not have side effects -ida_hexrays.FCI_PROP (variable) +ida_hexrays.FCI_PROP call has been propagated -ida_hexrays.FCI_PURE (variable) +ida_hexrays.FCI_PURE pure function -ida_hexrays.FCI_SPLOK (variable) - 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.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 (variable) +ida_hexrays.FD_BACKWARD search direction -ida_hexrays.FD_DEF (variable) +ida_hexrays.FD_DEF look for definition -ida_hexrays.FD_DIRTY (variable) - ignore possible implicit definitions by function calls and indirect memory - access +ida_hexrays.FD_DIRTY + ignore possible implicit definitions by function calls and indirect memory access + -ida_hexrays.FD_FORWARD (variable) +ida_hexrays.FD_FORWARD search direction -ida_hexrays.FD_USE (variable) +ida_hexrays.FD_USE look for use -ida_hexrays.FORBID_UNUSED_LABELS (variable) +ida_hexrays.FORBID_UNUSED_LABELS Unused labels cause interr. -ida_hexrays.GCA_ALLOC (variable) +ida_hexrays.GCA_ALLOC enumerate only allocated chains -ida_hexrays.GCA_EMPTY (variable) +ida_hexrays.GCA_EMPTY include empty chains -ida_hexrays.GCA_NALLOC (variable) +ida_hexrays.GCA_NALLOC enumerate only non-allocated chains -ida_hexrays.GCA_OFIRST (variable) +ida_hexrays.GCA_OFIRST consider only chains of the first block -ida_hexrays.GCA_OLAST (variable) +ida_hexrays.GCA_OLAST consider only chains of the last block -ida_hexrays.GCA_SPEC (variable) +ida_hexrays.GCA_SPEC include chains for special registers -ida_hexrays.GCO_DEF (variable) +ida_hexrays.GCO_DEF is destination operand? -ida_hexrays.GCO_REG (variable) +ida_hexrays.GCO_REG is register? otherwise a stack variable -ida_hexrays.GCO_STK (variable) +ida_hexrays.GCO_STK a stack variable -ida_hexrays.GCO_USE (variable) +ida_hexrays.GCO_USE is source operand? -ida_hexrays.GC_ASR (variable) +ida_hexrays.GC_ASR all the above and assertions -ida_hexrays.GC_DIRTY_ALL (variable) +ida_hexrays.GC_DIRTY_ALL bitmask to represent all chains -ida_hexrays.GC_END (variable) +ida_hexrays.GC_END number of chain types -ida_hexrays.GC_REGS_AND_STKVARS (variable) +ida_hexrays.GC_REGS_AND_STKVARS registers and stkvars (restricted memory only) -ida_hexrays.GC_XDSU (variable) +ida_hexrays.GC_XDSU only registers calculated with FULL_XDSU -ida_hexrays.GLN_ALL (variable) +ida_hexrays.GLN_ALL get both -ida_hexrays.GLN_CURRENT (variable) +ida_hexrays.GLN_CURRENT get label of the current item -ida_hexrays.GLN_GOTO_TARGET (variable) +ida_hexrays.GLN_GOTO_TARGET get goto target -ida_hexrays.Hexrays_Hooks (class) - Proxy of C++ Hexrays_Hooks class. +ida_hexrays.Hexrays_Hooks -ida_hexrays.Hexrays_Hooks.__disown__ (method) +ida_hexrays.Hexrays_Hooks.__disown__(self) -ida_hexrays.Hexrays_Hooks.__init__ (method) - __init__(self, _flags=0, _hkcb_flags=0x0001) -> Hexrays_Hooks - - @param _flags: uint32 - @param _hkcb_flags: uint32 +ida_hexrays.Hexrays_Hooks.__init__(self, _flags: int = 0, _hkcb_flags: int = 1) -ida_hexrays.Hexrays_Hooks.build_callinfo (method) - build_callinfo(self, blk, type) -> PyObject * - Analyzing a call instruction. - +ida_hexrays.Hexrays_Hooks.begin_inlining(self, cdg: "codegen_t", decomp_flags: int) -> int + Starting to inline outlined functions. + + @param cdg: (codegen_t *) + @param decomp_flags: (int) + @returns Microcode error codes code This is an opportunity to inline other ranges. + +ida_hexrays.Hexrays_Hooks.build_callinfo(self, blk: "mblock_t", type: "tinfo_t") -> "PyObject *" + Analyzing a call instruction. + @param blk: (mblock_t *) blk->tail is the call. @param type: (tinfo_t *) buffer for the output type. -ida_hexrays.Hexrays_Hooks.callinfo_built (method) - callinfo_built(self, blk) -> int - A call instruction has been anallyzed. - +ida_hexrays.Hexrays_Hooks.callinfo_built(self, blk: "mblock_t") -> int + A call instruction has been anallyzed. + @param blk: (mblock_t *) blk->tail is the call. -ida_hexrays.Hexrays_Hooks.calls_done (method) - calls_done(self, mba) -> int - All calls have been analyzed. - - @param mba: (mba_t *) This event is generated immediately after analyzing all - calls, before any optimizitions, call unmerging and block merging. +ida_hexrays.Hexrays_Hooks.calls_done(self, mba: "mba_t") -> int + All calls have been analyzed. + + @param mba: (mba_t *) This event is generated immediately after analyzing all calls, before any optimizitions, call unmerging and block merging. -ida_hexrays.Hexrays_Hooks.close_pseudocode (method) - close_pseudocode(self, vu) -> int - Pseudocode view is being closed. - +ida_hexrays.Hexrays_Hooks.close_pseudocode(self, vu: "vdui_t") -> int + Pseudocode view is being closed. + @param vu: (vdui_t *) -ida_hexrays.Hexrays_Hooks.cmt_changed (method) - cmt_changed(self, cfunc, loc, cmt) -> int - Comment got changed. - +ida_hexrays.Hexrays_Hooks.cmt_changed(self, cfunc: "cfunc_t", loc: "treeloc_t", cmt: str) -> int + Comment got changed. + @param cfunc: (cfunc_t *) @param loc: (const treeloc_t *) @param cmt: (const char *) -ida_hexrays.Hexrays_Hooks.combine (method) - combine(self, blk, insn) -> int - Trying to combine instructions of basic block. - - @param blk: (mblock_t *) - @param insn: (minsn_t *) Should return: 1 if combined the current instruction - with a preceding one -1 if the instruction should not be combined 0 - else +ida_hexrays.Hexrays_Hooks.collect_warnings(self, cfunc: "cfunc_t") -> int + Collect warning messages from plugins. These warnings will be displayed at the function header, after the user-defined comments. + + @param cfunc: (cfunc_t *) -ida_hexrays.Hexrays_Hooks.create_hint (method) - create_hint(self, vu) -> PyObject * - Create a hint for the current item. - @see: ui_get_custom_viewer_hint - +ida_hexrays.Hexrays_Hooks.combine(self, blk: "mblock_t", insn: "minsn_t") -> int + Trying to combine instructions of basic block. + + @param blk: (mblock_t *) + @param insn: (minsn_t *) Should return: 1 if combined the current instruction with a preceding one -1 if the instruction should not be combined 0 else + +ida_hexrays.Hexrays_Hooks.create_hint(self, vu: "vdui_t") -> "PyObject *" + Create a hint for the current item. + @param vu: (vdui_t *) @retval 0: continue collecting hints with other subscribers @retval 1: stop collecting hints -ida_hexrays.Hexrays_Hooks.curpos (method) - curpos(self, vu) -> int - Current cursor position has been changed. (for example, by left-clicking or - using keyboard) +ida_hexrays.Hexrays_Hooks.curpos(self, vu: "vdui_t") -> int + Current cursor position has been changed. (for example, by left-clicking or using keyboard) + @param vu: (vdui_t *) -ida_hexrays.Hexrays_Hooks.double_click (method) - double_click(self, vu, shift_state) -> int - Mouse double click. - +ida_hexrays.Hexrays_Hooks.double_click(self, vu: "vdui_t", shift_state: int) -> int + Mouse double click. + @param vu: (vdui_t *) @param shift_state: (int) Should return: 1 if the event has been handled -ida_hexrays.Hexrays_Hooks.flowchart (method) - flowchart(self, fc) -> int - Flowchart has been generated. - +ida_hexrays.Hexrays_Hooks.flowchart(self, fc: "qflow_chart_t", mba: "mba_t", reachable_blocks: "bitset_t", decomp_flags: int) -> int + Flowchart has been generated. + @param fc: (qflow_chart_t *) + @param mba: (mba_t *) + @param reachable_blocks: (bitset_t *) + @param decomp_flags: (int) + @returns Microcode error codes code -ida_hexrays.Hexrays_Hooks.func_printed (method) - func_printed(self, cfunc) -> int - Function text has been generated. Plugins may modify the text in cfunc_t::sv. - The text uses regular color codes (see lines.hpp) COLOR_ADDR is used to store - pointers to ctree items. - +ida_hexrays.Hexrays_Hooks.func_printed(self, cfunc: "cfunc_t") -> int + Function text has been generated. Plugins may modify the text in cfunc_t::sv. However, it is too late to modify the ctree or microcode. The text uses regular color codes (see lines.hpp) COLOR_ADDR is used to store pointers to ctree items. + @param cfunc: (cfunc_t *) -ida_hexrays.Hexrays_Hooks.glbopt (method) - glbopt(self, mba) -> int - Global optimization has been finished. If microcode is modified, MERR_LOOP must - be returned. It will cause a complete restart of the optimization. - - @param mba: (mba_t *) return Microcode error codes code +ida_hexrays.Hexrays_Hooks.glbopt(self, mba: "mba_t") -> int + Global optimization has been finished. If microcode is modified, MERR_LOOP must be returned. It will cause a complete restart of the optimization. + + @param mba: (mba_t *) + @returns Microcode error codes code -ida_hexrays.Hexrays_Hooks.hook (method) - hook(self) -> bool +ida_hexrays.Hexrays_Hooks.hook(self) -> bool -ida_hexrays.Hexrays_Hooks.interr (method) - interr(self, errcode) -> int - Internal error has occurred. - +ida_hexrays.Hexrays_Hooks.inlined_func(self, cdg: "codegen_t", blk: int, mbr: "mba_ranges_t", i1: int, i2: int) -> int + A set of ranges got inlined. + + @param cdg: (codegen_t *) + @param blk: (int) the block containing call/jump to inline + @param mbr: (mba_ranges_t *) the range to inline + @param i1: (int) blknum of the first inlined block + @param i2: (int) blknum of the last inlined block (excluded) + +ida_hexrays.Hexrays_Hooks.inlining_func(self, cdg: "codegen_t", blk: int, mbr: "mba_ranges_t") -> int + A set of ranges is going to be inlined. + + @param cdg: (codegen_t *) + @param blk: (int) the block containing call/jump to inline + @param mbr: (mba_ranges_t *) the range to inline + +ida_hexrays.Hexrays_Hooks.interr(self, errcode: int) -> int + Internal error has occurred. + @param errcode: (int ) -ida_hexrays.Hexrays_Hooks.keyboard (method) - keyboard(self, vu, key_code, shift_state) -> int - Keyboard has been hit. - +ida_hexrays.Hexrays_Hooks.keyboard(self, vu: "vdui_t", key_code: int, shift_state: int) -> int + Keyboard has been hit. + @param vu: (vdui_t *) @param key_code: (int) VK_... @param shift_state: (int) Should return: 1 if the event has been handled -ida_hexrays.Hexrays_Hooks.locopt (method) - locopt(self, mba) -> int - Basic block level optimization has been finished. - - @param mba: (mba_t *) return Microcode error codes code +ida_hexrays.Hexrays_Hooks.locopt(self, mba: "mba_t") -> int + Basic block level optimization has been finished. + + @param mba: (mba_t *) + @returns Microcode error codes code -ida_hexrays.Hexrays_Hooks.lvar_cmt_changed (method) - lvar_cmt_changed(self, vu, v, cmt) -> int - Local variable comment got changed. - +ida_hexrays.Hexrays_Hooks.lvar_cmt_changed(self, vu: "vdui_t", v: "lvar_t", cmt: str) -> int + Local variable comment got changed. + @param vu: (vdui_t *) @param v: (lvar_t *) - @param cmt: (const char *) Please note that it is possible to read/write user - settings for lvars directly from the idb. + @param cmt: (const char *) Please note that it is possible to read/write user settings for lvars directly from the idb. -ida_hexrays.Hexrays_Hooks.lvar_mapping_changed (method) - lvar_mapping_changed(self, vu, frm, to) -> int - Local variable mapping got changed. - +ida_hexrays.Hexrays_Hooks.lvar_mapping_changed(self, vu: "vdui_t", frm: "lvar_t", to: "lvar_t") -> int + Local variable mapping got changed. + @param vu: (vdui_t *) - @param from: lvar_t * - @param to: (lvar_t *) Please note that it is possible to read/write user - settings for lvars directly from the idb. + @param to: (lvar_t *) Please note that it is possible to read/write user settings for lvars directly from the idb. -ida_hexrays.Hexrays_Hooks.lvar_name_changed (method) - lvar_name_changed(self, vu, v, name, is_user_name) -> int - Local variable got renamed. - +ida_hexrays.Hexrays_Hooks.lvar_name_changed(self, vu: "vdui_t", v: "lvar_t", name: str, is_user_name: bool) -> int + Local variable got renamed. + @param vu: (vdui_t *) @param v: (lvar_t *) @param name: (const char *) - @param is_user_name: (bool) Please note that it is possible to read/write user - settings for lvars directly from the idb. + @param is_user_name: (bool) Please note that it is possible to read/write user settings for lvars directly from the idb. -ida_hexrays.Hexrays_Hooks.lvar_type_changed (method) - lvar_type_changed(self, vu, v, tinfo) -> int - Local variable type got changed. - +ida_hexrays.Hexrays_Hooks.lvar_type_changed(self, vu: "vdui_t", v: "lvar_t", tinfo: "tinfo_t") -> int + Local variable type got changed. + @param vu: (vdui_t *) @param v: (lvar_t *) - @param tinfo: (const tinfo_t *) Please note that it is possible to read/write - user settings for lvars directly from the idb. + @param tinfo: (const tinfo_t *) Please note that it is possible to read/write user settings for lvars directly from the idb. -ida_hexrays.Hexrays_Hooks.maturity (method) - maturity(self, cfunc, new_maturity) -> int - Ctree maturity level is being changed. - +ida_hexrays.Hexrays_Hooks.maturity(self, cfunc: "cfunc_t", new_maturity: "ctree_maturity_t") -> int + Ctree maturity level is being changed. + @param cfunc: (cfunc_t *) @param new_maturity: (ctree_maturity_t) -ida_hexrays.Hexrays_Hooks.microcode (method) - microcode(self, mba) -> int - Microcode has been generated. - - @param mba: (mba_t *) return Microcode error codes code +ida_hexrays.Hexrays_Hooks.microcode(self, mba: "mba_t") -> int + Microcode has been generated. + + @param mba: (mba_t *) + @returns Microcode error codes code -ida_hexrays.Hexrays_Hooks.open_pseudocode (method) - open_pseudocode(self, vu) -> int - New pseudocode view has been opened. - +ida_hexrays.Hexrays_Hooks.open_pseudocode(self, vu: "vdui_t") -> int + New pseudocode view has been opened. + @param vu: (vdui_t *) -ida_hexrays.Hexrays_Hooks.populating_popup (method) - populating_popup(self, widget, popup_handle, vu) -> int - Populating popup menu. We can add menu items now. - +ida_hexrays.Hexrays_Hooks.populating_popup(self, widget: "TWidget *", popup_handle: "TPopupMenu *", vu: "vdui_t") -> int + Populating popup menu. We can add menu items now. + @param widget: (TWidget *) @param popup_handle: (TPopupMenu *) @param vu: (vdui_t *) -ida_hexrays.Hexrays_Hooks.prealloc (method) - prealloc(self, mba) -> int - Local variables: preallocation step begins. - - @param mba: (mba_t *) This event may occur several times. Should return: 1 if - modified microcode Negative values are Microcode error codes error - codes +ida_hexrays.Hexrays_Hooks.pre_structural(self, ct: "control_graph_t *", cfunc: "cfunc_t", g: "simple_graph_t") -> int + Structure analysis is starting. + + @param ct: (control_graph_t *) in/out: control graph + @param cfunc: (cfunc_t *) in: the current function + @param g: (const simple_graph_t *) in: control flow graph + @returns Microcode error codes code; MERR_BLOCK means that the analysis has been performed by a plugin -ida_hexrays.Hexrays_Hooks.preoptimized (method) - preoptimized(self, mba) -> int - Microcode has been preoptimized. - - @param mba: (mba_t *) return Microcode error codes code +ida_hexrays.Hexrays_Hooks.prealloc(self, mba: "mba_t") -> int + Local variables: preallocation step begins. + + @param mba: (mba_t *) This event may occur several times. Should return: 1 if modified microcode Negative values are Microcode error codes error codes -ida_hexrays.Hexrays_Hooks.print_func (method) - print_func(self, cfunc, vp) -> int - Printing ctree and generating text. - +ida_hexrays.Hexrays_Hooks.preoptimized(self, mba: "mba_t") -> int + Microcode has been preoptimized. + + @param mba: (mba_t *) + @returns Microcode error codes code + +ida_hexrays.Hexrays_Hooks.print_func(self, cfunc: "cfunc_t", vp: "vc_printer_t") -> int + Printing ctree and generating text. + @param cfunc: (cfunc_t *) - @param vp: (vc_printer_t *) Returns: 1 if text has been generated by the plugin - It is forbidden to modify ctree at this event. + @param vp: (vc_printer_t *) Returns: 1 if text has been generated by the plugin It is forbidden to modify ctree at this event. -ida_hexrays.Hexrays_Hooks.prolog (method) - prolog(self, mba, fc, reachable_blocks, decomp_flags) -> int - Prolog analysis has been finished. - +ida_hexrays.Hexrays_Hooks.prolog(self, mba: "mba_t", fc: "qflow_chart_t", reachable_blocks: "bitset_t", decomp_flags: int) -> int + Prolog analysis has been finished. + @param mba: (mba_t *) @param fc: (qflow_chart_t *) - @param reachable_blocks: (bitset_t *) - @param decomp_flags: (int) return Microcode error codes code + @param reachable_blocks: (const bitset_t *) + @param decomp_flags: (int) + @returns Microcode error codes code This event is generated for each inlined range as well. -ida_hexrays.Hexrays_Hooks.refresh_pseudocode (method) - refresh_pseudocode(self, vu) -> int - Existing pseudocode text has been refreshed. Adding/removing pseudocode lines is - forbidden in this event. - +ida_hexrays.Hexrays_Hooks.refresh_pseudocode(self, vu: "vdui_t") -> int + Existing pseudocode text has been refreshed. Adding/removing pseudocode lines is forbidden in this event. + @param vu: (vdui_t *) See also hxe_text_ready, which happens earlier -ida_hexrays.Hexrays_Hooks.resolve_stkaddrs (method) - resolve_stkaddrs(self, mba) -> int - The optimizer is about to resolve stack addresses. - +ida_hexrays.Hexrays_Hooks.resolve_stkaddrs(self, mba: "mba_t") -> int + The optimizer is about to resolve stack addresses. + @param mba: (mba_t *) -ida_hexrays.Hexrays_Hooks.right_click (method) - right_click(self, vu) -> int - Mouse right click. Use hxe_populating_popup instead, in case you want to add - items in the popup menu. - +ida_hexrays.Hexrays_Hooks.right_click(self, vu: "vdui_t") -> int + Mouse right click. Use hxe_populating_popup instead, in case you want to add items in the popup menu. + @param vu: (vdui_t *) -ida_hexrays.Hexrays_Hooks.stkpnts (method) - stkpnts(self, mba, _sps) -> int - SP change points have been calculated. - +ida_hexrays.Hexrays_Hooks.stkpnts(self, mba: "mba_t", _sps: "stkpnts_t *") -> int + SP change points have been calculated. + @param mba: (mba_t *) - @param stkpnts: (stkpnts_t *) return Microcode error codes code + @returns Microcode error codes code This event is generated for each inlined range as well. -ida_hexrays.Hexrays_Hooks.structural (method) - structural(self, ct) -> int - Structural analysis has been finished. - +ida_hexrays.Hexrays_Hooks.structural(self, ct: "control_graph_t *") -> int + Structural analysis has been finished. + @param ct: (control_graph_t *) -ida_hexrays.Hexrays_Hooks.switch_pseudocode (method) - switch_pseudocode(self, vu) -> int - Existing pseudocode view has been reloaded with a new function. Its text has not - been refreshed yet, only cfunc and mba pointers are ready. - +ida_hexrays.Hexrays_Hooks.switch_pseudocode(self, vu: "vdui_t") -> int + Existing pseudocode view has been reloaded with a new function. Its text has not been refreshed yet, only cfunc and mba pointers are ready. + @param vu: (vdui_t *) -ida_hexrays.Hexrays_Hooks.text_ready (method) - text_ready(self, vu) -> int - Decompiled text is ready. - - @param vu: (vdui_t *) This event can be used to modify the output text (sv). - Obsolete. Please use hxe_func_printed instead. +ida_hexrays.Hexrays_Hooks.text_ready(self, vu: "vdui_t") -> int + Decompiled text is ready. + + @param vu: (vdui_t *) This event can be used to modify the output text (sv). Obsolete. Please use hxe_func_printed instead. -ida_hexrays.Hexrays_Hooks.unhook (method) - unhook(self) -> bool +ida_hexrays.Hexrays_Hooks.unhook(self) -> bool -ida_hexrays.IPROP_CLNPOP (variable) - the purpose of the instruction is to clean stack (e.g. "pop ecx" is often used - for that) +ida_hexrays.INLINE_DONTCOPY + Do not reuse old inlined copy even if it exists. -ida_hexrays.IPROP_COMBINED (variable) +ida_hexrays.INLINE_EXTFRAME + Inlined function has its own (external) frame. + +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 + the purpose of the instruction is to clean stack (e.g. "pop ecx" is often used for that) + + +ida_hexrays.IPROP_COMBINED insn has been modified because of a partial reference -ida_hexrays.IPROP_DONT_COMB (variable) +ida_hexrays.IPROP_DONT_COMB may not combine this instruction with others -ida_hexrays.IPROP_DONT_PROP (variable) +ida_hexrays.IPROP_DONT_PROP may not propagate -ida_hexrays.IPROP_EXTSTX (variable) +ida_hexrays.IPROP_EXTSTX this is m_ext propagated into m_stx -ida_hexrays.IPROP_FARCALL (variable) +ida_hexrays.IPROP_FARCALL call of a far function using push cs/call sequence -ida_hexrays.IPROP_FPINSN (variable) +ida_hexrays.IPROP_FPINSN floating point insn -ida_hexrays.IPROP_IGNLOWSRC (variable) - low part of the instruction source operand has been created artificially (this - bit is used only for 'and x, 80...') +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 (variable) +ida_hexrays.IPROP_INV_JX inverted conditional jump -ida_hexrays.IPROP_MBARRIER (variable) - this instruction acts as a memory barrier (instructions accessing memory may not - be reordered past it) +ida_hexrays.IPROP_MBARRIER + this instruction acts as a memory barrier (instructions accessing memory may not be reordered past it) + -ida_hexrays.IPROP_MULTI_MOV (variable) +ida_hexrays.IPROP_MULTI_MOV bits that can be set by plugins: - the minsn was generated as part of insn that moves multiple registers (example: - STM on ARM may transfer multiple registers) + the minsn was generated as part of insn that moves multiple registers (example: STM on ARM may transfer multiple registers) + -ida_hexrays.IPROP_OPTIONAL (variable) +ida_hexrays.IPROP_OPTIONAL optional instruction -ida_hexrays.IPROP_PERSIST (variable) +ida_hexrays.IPROP_PERSIST persistent insn; they are not destroyed -ida_hexrays.IPROP_SPLIT (variable) +ida_hexrays.IPROP_SPLIT the instruction has been split: -ida_hexrays.IPROP_SPLIT1 (variable) +ida_hexrays.IPROP_SPLIT1 into 1 byte -ida_hexrays.IPROP_SPLIT2 (variable) +ida_hexrays.IPROP_SPLIT2 into 2 bytes -ida_hexrays.IPROP_SPLIT4 (variable) +ida_hexrays.IPROP_SPLIT4 into 4 bytes -ida_hexrays.IPROP_SPLIT8 (variable) +ida_hexrays.IPROP_SPLIT8 into 8 bytes -ida_hexrays.IPROP_TAILCALL (variable) +ida_hexrays.IPROP_TAILCALL tail call -ida_hexrays.IPROP_UNMERGED (variable) +ida_hexrays.IPROP_UNMERGED 'goto' instruction was transformed info 'call' -ida_hexrays.IPROP_WAS_NORET (variable) +ida_hexrays.IPROP_UNPAIRED + instruction is a result of del_dest_pairs() transformation + +ida_hexrays.IPROP_WAS_NORET was noret icall -ida_hexrays.IPROP_WILDMATCH (variable) +ida_hexrays.IPROP_WILDMATCH match multiple insns -ida_hexrays.ITP_ARG1 (variable) +ida_hexrays.ITP_ARG1 , (64 entries are reserved for 64 call arguments) -ida_hexrays.ITP_ASM (variable) +ida_hexrays.ITP_ASM __asm-line -ida_hexrays.ITP_BLOCK1 (variable) - opening block comment. this comment is printed before the item (other comments - are indented and printed after the item) +ida_hexrays.ITP_BLOCK1 + opening block comment. this comment is printed before the item (other comments are indented and printed after the item) + -ida_hexrays.ITP_BLOCK2 (variable) +ida_hexrays.ITP_BLOCK2 closing block comment. -ida_hexrays.ITP_BRACE2 (variable) +ida_hexrays.ITP_BRACE2 ) -ida_hexrays.ITP_CASE (variable) +ida_hexrays.ITP_CASE bit for switch cases -ida_hexrays.ITP_COLON (variable) +ida_hexrays.ITP_COLON : (label) -ida_hexrays.ITP_CURLY1 (variable) +ida_hexrays.ITP_CURLY1 { -ida_hexrays.ITP_CURLY2 (variable) +ida_hexrays.ITP_CURLY2 } -ida_hexrays.ITP_DO (variable) +ida_hexrays.ITP_DO do-line -ida_hexrays.ITP_ELSE (variable) +ida_hexrays.ITP_ELSE else-line -ida_hexrays.ITP_EMPTY (variable) +ida_hexrays.ITP_EMPTY nothing -ida_hexrays.ITP_SEMI (variable) +ida_hexrays.ITP_SEMI semicolon -ida_hexrays.ITP_SIGN (variable) +ida_hexrays.ITP_SIGN if this bit is set too, then we have a negative case value -ida_hexrays.LOCOPT_ALL (variable) - redo optimization for all blocks. if this bit is not set, only dirty blocks will - be optimized +ida_hexrays.ITP_TRY + C++ try statement. -ida_hexrays.LOCOPT_REFINE (variable) +ida_hexrays.LOCOPT_ALL + redo optimization for all blocks. if this bit is not set, only dirty blocks will be optimized + + +ida_hexrays.LOCOPT_REFINE refine return type, ok to fail -ida_hexrays.LOCOPT_REFINE2 (variable) +ida_hexrays.LOCOPT_REFINE2 refine return type, try harder -ida_hexrays.LVINF_KEEP (variable) - 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_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 (variable) +ida_hexrays.LVINF_NOMAP forbid automatic mapping of the variable -ida_hexrays.LVINF_NOPTR (variable) +ida_hexrays.LVINF_NOPTR variable type should not be a pointer -ida_hexrays.LVINF_SPLIT (variable) - split allocation of a new variable. forces the decompiler to create a new - variable at ll.defea +ida_hexrays.LVINF_SPLIT + split allocation of a new variable. forces the decompiler to create a new variable at ll.defea + -ida_hexrays.LVINF_UNUSED (variable) +ida_hexrays.LVINF_UNUSED unused argument, corresponds to CVAR_UNUSED -ida_hexrays.MBA2_ARGIDX_OK (variable) +ida_hexrays.MBA2_ARGIDX_OK may verify input argument list? -ida_hexrays.MBA2_ARGIDX_SORTED (variable) - args finally sorted according to ABI (e.g. reverse stkarg order in Borland) +ida_hexrays.MBA2_ARGIDX_SORTED + args finally sorted according to ABI (e.g. reverse stkarg order in Borland) + -ida_hexrays.MBA2_CODE16_BIT (variable) - the code16 bit removed +ida_hexrays.MBA2_CODE16_BIT + the code16 bit got removed -ida_hexrays.MBA2_DONT_VERIFY (variable) - Do not verify microcode. This flag is recomended to be set only when debugging - decompiler plugins +ida_hexrays.MBA2_DONT_VERIFY + Do not verify microcode. This flag is recomended to be set only when debugging decompiler plugins + -ida_hexrays.MBA2_HAS_OUTLINES (variable) +ida_hexrays.MBA2_HAS_OUTLINES calls to outlined code have been inlined -ida_hexrays.MBA2_IS_CTR (variable) +ida_hexrays.MBA2_IS_CTR is constructor? -ida_hexrays.MBA2_IS_DTR (variable) +ida_hexrays.MBA2_IS_DTR is destructor? -ida_hexrays.MBA2_LVARNAMES_OK (variable) +ida_hexrays.MBA2_LVARNAMES_OK may verify lvar_names? -ida_hexrays.MBA2_LVARS_RENAMED (variable) +ida_hexrays.MBA2_LVARS_RENAMED accept empty names now? -ida_hexrays.MBA2_NO_DUP_CALLS (variable) +ida_hexrays.MBA2_NO_DUP_CALLS forbid multiple calls with the same ea -ida_hexrays.MBA2_NO_DUP_LVARS (variable) +ida_hexrays.MBA2_NO_DUP_LVARS forbid multiple lvars with the same ea -ida_hexrays.MBA2_NO_FRAME (variable) +ida_hexrays.MBA2_NO_FRAME do not use function frame info (only snippet mode) -ida_hexrays.MBA2_OVER_CHAINS (variable) +ida_hexrays.MBA2_OVER_CHAINS has overlapped chains? -ida_hexrays.MBA2_PROP_COMPLEX (variable) +ida_hexrays.MBA2_PROP_COMPLEX allow propagation of more complex variable definitions -ida_hexrays.MBA2_STACK_RETVAL (variable) +ida_hexrays.MBA2_STACK_RETVAL the return value is on the stack -ida_hexrays.MBA2_UNDEF_RETVAR (variable) +ida_hexrays.MBA2_UNDEF_RETVAR return value is undefined -ida_hexrays.MBA2_VALRNG_DONE (variable) +ida_hexrays.MBA2_VALRNG_DONE calculated valranges? -ida_hexrays.MBA_ASRPROP (variable) +ida_hexrays.MBA_ASRPROP assertion have been propagated -ida_hexrays.MBA_ASRTOK (variable) +ida_hexrays.MBA_ASRTOK assertions have been generated -ida_hexrays.MBA_CALLS (variable) +ida_hexrays.MBA_CALLS callinfo has been built -ida_hexrays.MBA_CHVARS (variable) +ida_hexrays.MBA_CHVARS can verify chain varnums -ida_hexrays.MBA_CMBBLK (variable) +ida_hexrays.MBA_CMBBLK request to combine blocks -ida_hexrays.MBA_CMNSTK (variable) +ida_hexrays.MBA_CMNSTK stkvars+stkargs should be considered as one area -ida_hexrays.MBA_COLGDL (variable) +ida_hexrays.MBA_COLGDL display graph after each reduction -ida_hexrays.MBA_DELPAIRS (variable) +ida_hexrays.MBA_DELPAIRS pairs have been deleted once -ida_hexrays.MBA_GLBOPT (variable) +ida_hexrays.MBA_GLBOPT microcode has been optimized globally -ida_hexrays.MBA_INSGDL (variable) +ida_hexrays.MBA_INSGDL display instruction in graphs -ida_hexrays.MBA_LOADED (variable) +ida_hexrays.MBA_LOADED loaded gdl, no instructions (debugging) -ida_hexrays.MBA_LVARS0 (variable) +ida_hexrays.MBA_LVARS0 lvar pre-allocation has been performed -ida_hexrays.MBA_LVARS1 (variable) +ida_hexrays.MBA_LVARS1 lvar real allocation has been performed -ida_hexrays.MBA_NICE (variable) +ida_hexrays.MBA_NICE apply transformations to c code -ida_hexrays.MBA_NOFUNC (variable) +ida_hexrays.MBA_NOFUNC function is not present, addresses might be wrong -ida_hexrays.MBA_NUMADDR (variable) +ida_hexrays.MBA_NUMADDR display definition addresses for numbers -ida_hexrays.MBA_PASSREGS (variable) +ida_hexrays.MBA_PASSREGS has mcallinfo_t::pass_regs -ida_hexrays.MBA_PATTERN (variable) +ida_hexrays.MBA_PATTERN microcode pattern, callinfo is present -ida_hexrays.MBA_PRCDEFS (variable) +ida_hexrays.MBA_PRCDEFS use precise defeas for chain-allocated lvars -ida_hexrays.MBA_PREOPT (variable) +ida_hexrays.MBA_PREOPT preoptimization stage complete -ida_hexrays.MBA_REFINE (variable) +ida_hexrays.MBA_REFINE may refine return value size -ida_hexrays.MBA_RETFP (variable) +ida_hexrays.MBA_RETFP function returns floating point value -ida_hexrays.MBA_RETREF (variable) +ida_hexrays.MBA_RETREF return type has been refined -ida_hexrays.MBA_SAVRST (variable) +ida_hexrays.MBA_SAVRST save-restore analysis has been performed -ida_hexrays.MBA_SHORT (variable) +ida_hexrays.MBA_SHORT use short display -ida_hexrays.MBA_SPLINFO (variable) +ida_hexrays.MBA_SPLINFO (final_type ? idb_spoiled : spoiled_regs) is valid -ida_hexrays.MBA_THUNK (variable) +ida_hexrays.MBA_THUNK thunk function -ida_hexrays.MBA_VALNUM (variable) +ida_hexrays.MBA_VALNUM display value numbers -ida_hexrays.MBA_WINGR32 (variable) +ida_hexrays.MBA_WINGR32 use wingraph32 -ida_hexrays.MBL_BACKPROP (variable) +ida_hexrays.MBL_BACKPROP performed backprop_cc -ida_hexrays.MBL_CALL (variable) +ida_hexrays.MBL_CALL call information has been built -ida_hexrays.MBL_COMB (variable) +ida_hexrays.MBL_COMB needs "combine" pass -ida_hexrays.MBL_DEAD (variable) +ida_hexrays.MBL_DEAD needs "eliminate deads" pass -ida_hexrays.MBL_DMT64 (variable) +ida_hexrays.MBL_DMT64 needs "demote 64bits" -ida_hexrays.MBL_DSLOT (variable) +ida_hexrays.MBL_DSLOT block for delay slot -ida_hexrays.MBL_FAKE (variable) +ida_hexrays.MBL_EXTFRAME + an inlined block with an external frame + +ida_hexrays.MBL_FAKE fake block -ida_hexrays.MBL_GOTO (variable) +ida_hexrays.MBL_GOTO this block is a goto target -ida_hexrays.MBL_INCONST (variable) +ida_hexrays.MBL_INCONST inconsistent lists: we are building them -ida_hexrays.MBL_KEEP (variable) +ida_hexrays.MBL_INLINED + block was inlined, not originally part of mbr + +ida_hexrays.MBL_KEEP do not remove even if unreachable -ida_hexrays.MBL_LIST (variable) +ida_hexrays.MBL_LIST use/def lists are ready (not dirty) -ida_hexrays.MBL_NONFAKE (variable) +ida_hexrays.MBL_NONFAKE regular block -ida_hexrays.MBL_NORET (variable) +ida_hexrays.MBL_NORET dead end block: doesn't return execution control -ida_hexrays.MBL_PRIV (variable) - private block - no instructions except the specified are accepted (used in - patterns) +ida_hexrays.MBL_PRIV + private block - no instructions except the specified are accepted (used in patterns) + -ida_hexrays.MBL_PROP (variable) +ida_hexrays.MBL_PROP needs 'propagation' pass -ida_hexrays.MBL_PUSH (variable) +ida_hexrays.MBL_PUSH needs "convert push/pop instructions" -ida_hexrays.MBL_TCAL (variable) +ida_hexrays.MBL_TCAL aritifical call block for tail calls -ida_hexrays.MBL_VALRANGES (variable) +ida_hexrays.MBL_VALRANGES should optimize using value ranges -ida_hexrays.MERR_BADARCH (variable) +ida_hexrays.MERR_BADARCH current architecture is not supported -ida_hexrays.MERR_BADBLK (variable) +ida_hexrays.MERR_BADBLK bad block found -ida_hexrays.MERR_BADCALL (variable) +ida_hexrays.MERR_BADCALL could not determine call arguments -ida_hexrays.MERR_BADFRAME (variable) +ida_hexrays.MERR_BADFRAME function frame is wrong -ida_hexrays.MERR_BADIDB (variable) +ida_hexrays.MERR_BADIDB inconsistent database information -ida_hexrays.MERR_BADRANGES (variable) +ida_hexrays.MERR_BADRANGES bad input ranges -ida_hexrays.MERR_BADSP (variable) +ida_hexrays.MERR_BADSP positive sp value has been found -ida_hexrays.MERR_BITNESS (variable) +ida_hexrays.MERR_BITNESS 16-bit functions cannot be decompiled -ida_hexrays.MERR_BLOCK (variable) +ida_hexrays.MERR_BLOCK no error, switch to new block -ida_hexrays.MERR_BUSY (variable) +ida_hexrays.MERR_BUSY already decompiling a function -ida_hexrays.MERR_CANCELED (variable) +ida_hexrays.MERR_CANCELED decompilation has been cancelled -ida_hexrays.MERR_COMPLEX (variable) +ida_hexrays.MERR_CLOUD + cloud: s + +ida_hexrays.MERR_COMPLEX too complex function -ida_hexrays.MERR_DSLOT (variable) +ida_hexrays.MERR_DSLOT bad instruction in the delay slot -ida_hexrays.MERR_EXCEPTION (variable) +ida_hexrays.MERR_EXCEPTION exception analysis failed -ida_hexrays.MERR_EXTERN (variable) +ida_hexrays.MERR_EXTERN special segments cannot be decompiled -ida_hexrays.MERR_FARPTR (variable) +ida_hexrays.MERR_FARPTR far memory model is supported only for pc -ida_hexrays.MERR_FUNCSIZE (variable) +ida_hexrays.MERR_FUNCSIZE too big function -ida_hexrays.MERR_HUGESTACK (variable) +ida_hexrays.MERR_HUGESTACK stack frame is too big -ida_hexrays.MERR_INSN (variable) +ida_hexrays.MERR_INSN cannot convert to microcode -ida_hexrays.MERR_INTERR (variable) +ida_hexrays.MERR_INTERR internal error -ida_hexrays.MERR_LICENSE (variable) +ida_hexrays.MERR_LICENSE no license available -ida_hexrays.MERR_LOOP (variable) +ida_hexrays.MERR_LOOP internal code: redo last loop (never reported) -ida_hexrays.MERR_LVARS (variable) +ida_hexrays.MERR_LVARS local variable allocation failed -ida_hexrays.MERR_MEM (variable) +ida_hexrays.MERR_MEM not enough memory -ida_hexrays.MERR_OK (variable) +ida_hexrays.MERR_OK ok -ida_hexrays.MERR_ONLY32 (variable) +ida_hexrays.MERR_ONLY32 only 32-bit functions can be decompiled for the current database -ida_hexrays.MERR_ONLY64 (variable) +ida_hexrays.MERR_ONLY64 only 64-bit functions can be decompiled for the current database -ida_hexrays.MERR_OVERLAP (variable) +ida_hexrays.MERR_OVERLAP variables would overlap: s -ida_hexrays.MERR_PARTINIT (variable) +ida_hexrays.MERR_PARTINIT partially initialized variable s -ida_hexrays.MERR_PROLOG (variable) +ida_hexrays.MERR_PROLOG prolog analysis failed -ida_hexrays.MERR_RECDEPTH (variable) +ida_hexrays.MERR_RECDEPTH max recursion depth reached during lvar allocation -ida_hexrays.MERR_REDO (variable) +ida_hexrays.MERR_REDO redecompilation has been requested -ida_hexrays.MERR_SIZEOF (variable) +ida_hexrays.MERR_SIZEOF wrong basic type sizes in compiler settings -ida_hexrays.MERR_STOP (variable) +ida_hexrays.MERR_STOP no error, stop the analysis -ida_hexrays.MERR_SWITCH (variable) +ida_hexrays.MERR_SWITCH wrong switch idiom -ida_hexrays.MERR_UNKTYPE (variable) +ida_hexrays.MERR_UNKTYPE undefined type s (currently unused error code) -ida_hexrays.MLI_CLR_FLAGS (variable) +ida_hexrays.MLI_CLR_FLAGS clear LVINF_... bits -ida_hexrays.MLI_CMT (variable) +ida_hexrays.MLI_CMT apply lvar comment -ida_hexrays.MLI_NAME (variable) +ida_hexrays.MLI_NAME apply lvar name -ida_hexrays.MLI_SET_FLAGS (variable) +ida_hexrays.MLI_SET_FLAGS set LVINF_... bits -ida_hexrays.MLI_TYPE (variable) +ida_hexrays.MLI_TYPE apply lvar type -ida_hexrays.MMAT_CALLS (variable) +ida_hexrays.MMAT_CALLS detected call arguments. see also hxe_calls_done -ida_hexrays.MMAT_GENERATED (variable) +ida_hexrays.MMAT_GENERATED generated microcode -ida_hexrays.MMAT_GLBOPT1 (variable) +ida_hexrays.MMAT_GLBOPT1 performed the first pass of global optimization -ida_hexrays.MMAT_GLBOPT2 (variable) +ida_hexrays.MMAT_GLBOPT2 most global optimization passes are done -ida_hexrays.MMAT_GLBOPT3 (variable) +ida_hexrays.MMAT_GLBOPT3 completed all global optimization. microcode is fixed now. -ida_hexrays.MMAT_LOCOPT (variable) - local optimization of each basic block is complete. control flow graph is ready - too. +ida_hexrays.MMAT_LOCOPT + local optimization of each basic block is complete. control flow graph is ready too. + -ida_hexrays.MMAT_LVARS (variable) +ida_hexrays.MMAT_LVARS allocated local variables -ida_hexrays.MMAT_PREOPTIMIZED (variable) +ida_hexrays.MMAT_PREOPTIMIZED preoptimized pass is complete -ida_hexrays.MMAT_ZERO (variable) +ida_hexrays.MMAT_ZERO microcode does not exist -ida_hexrays.MMIDX_GLBHIGH (variable) +ida_hexrays.MMIDX_ARGS + stack: regular stack arguments + +ida_hexrays.MMIDX_GLBHIGH global memory: high part -ida_hexrays.MMIDX_GLBLOW (variable) +ida_hexrays.MMIDX_GLBLOW global memory: low part -ida_hexrays.NALT_VD (variable) +ida_hexrays.MMIDX_LVARS + stack: local variables + +ida_hexrays.MMIDX_RETADDR + stack: return address + +ida_hexrays.MMIDX_SHADOW + stack: shadow arguments + +ida_hexrays.NALT_VD this index is not used by ida -ida_hexrays.NF_BINVDONE (variable) +ida_hexrays.NF_BINVDONE temporary internal bit: inverting bits is done -ida_hexrays.NF_BITNOT (variable) +ida_hexrays.NF_BITNOT The user asked to invert bits of the constant. -ida_hexrays.NF_FIXED (variable) +ida_hexrays.NF_FIXED number format has been defined by the user -ida_hexrays.NF_NEGATE (variable) +ida_hexrays.NF_NEGATE The user asked to negate the constant. -ida_hexrays.NF_NEGDONE (variable) +ida_hexrays.NF_NEGDONE temporary internal bit: negation has been performed -ida_hexrays.NF_VALID (variable) - internal bit: stroff or enum is valid for enums: this bit is set immediately for - stroffs: this bit is set at the end of decompilation +ida_hexrays.NF_VALID + internal bit: stroff or enum is valid for enums: this bit is set immediately for stroffs: this bit is set at the end of decompilation + -ida_hexrays.NOSIZE (variable) +ida_hexrays.NOSIZE wrong or unexisting operand size -ida_hexrays.NO_CURLY_BRACES (variable) +ida_hexrays.NO_CURLY_BRACES don't print curly braces -ida_hexrays.NO_SIDEFF (variable) - change operand size but ignore side effects if you decide to keep the changed - operand, handle_new_size() must be called +ida_hexrays.NO_SIDEFF + change operand size but ignore side effects if you decide to keep the changed operand, handle_new_size() must be called + -ida_hexrays.ONLY_SIDEFF (variable) +ida_hexrays.ONLY_SIDEFF only handle side effects -ida_hexrays.OPF_NEW_WINDOW (variable) +ida_hexrays.OPF_NEW_WINDOW open new window -ida_hexrays.OPF_NO_WAIT (variable) +ida_hexrays.OPF_NO_WAIT do not display waitbox if decompilation happens -ida_hexrays.OPF_REUSE (variable) +ida_hexrays.OPF_REUSE reuse existing window -ida_hexrays.OPF_REUSE_ACTIVE (variable) - reuse existing window, only if the currently active widget is a pseudocode view +ida_hexrays.OPF_REUSE_ACTIVE + reuse existing window, only if the currently active widget is a pseudocode view + -ida_hexrays.OPROP_FLOAT (variable) +ida_hexrays.OPROP_CCFLAGS + mop_n: a pc-relative value mop_a: an address obtained from a relocation else: value of a condition code register (like mr_cc) + + +ida_hexrays.OPROP_FLOAT possibly floating value -ida_hexrays.OPROP_IMPDONE (variable) +ida_hexrays.OPROP_IMPDONE imported operand (a pointer) has been dereferenced -ida_hexrays.OPROP_LOWADDR (variable) +ida_hexrays.OPROP_LOWADDR a low address offset -ida_hexrays.OPROP_UDEFVAL (variable) +ida_hexrays.OPROP_UDEFVAL uses undefined value -ida_hexrays.OPROP_UDT (variable) +ida_hexrays.OPROP_UDT a struct or union -ida_hexrays.OPTI_ADDREXPRS (variable) +ida_hexrays.OPTI_ADDREXPRS optimize all address expressions (&x+N; &x-&y) -ida_hexrays.OPTI_COMBINSNS (variable) +ida_hexrays.OPTI_COMBINSNS may combine insns (only for optimize_insn) -ida_hexrays.OPTI_MINSTKREF (variable) +ida_hexrays.OPTI_MINSTKREF may update minstkref -ida_hexrays.OPTI_NO_LDXOPT (variable) - the function is called after the propagation attempt, we do not optimize - low/high(ldx) in this case +ida_hexrays.OPTI_NO_LDXOPT + the function is called after the propagation attempt, we do not optimize low/high(ldx) in this case + -ida_hexrays.RETRIEVE_ALWAYS (variable) +ida_hexrays.OPTI_NO_VALRNG + forbid using valranges + +ida_hexrays.RETRIEVE_ALWAYS Retrieve comment even if it has been used. -ida_hexrays.RETRIEVE_ONCE (variable) +ida_hexrays.RETRIEVE_ONCE Retrieve comment if it has not been used yet. -ida_hexrays.ROLE_3WAYCMP0 (variable) +ida_hexrays.ROLE_3WAYCMP0 3-way compare helper, returns -1/0/1 -ida_hexrays.ROLE_3WAYCMP1 (variable) +ida_hexrays.ROLE_3WAYCMP1 3-way compare helper, returns 0/1/2 -ida_hexrays.ROLE_ABS (variable) +ida_hexrays.ROLE_ABS integer absolute value -ida_hexrays.ROLE_ALLOCA (variable) +ida_hexrays.ROLE_ALLOCA alloca() function -ida_hexrays.ROLE_BITTEST (variable) +ida_hexrays.ROLE_BITTEST [lock] bt -ida_hexrays.ROLE_BITTESTANDCOMPLEMENT (variable) +ida_hexrays.ROLE_BITTESTANDCOMPLEMENT [lock] btc -ida_hexrays.ROLE_BITTESTANDRESET (variable) +ida_hexrays.ROLE_BITTESTANDRESET [lock] btr -ida_hexrays.ROLE_BITTESTANDSET (variable) +ida_hexrays.ROLE_BITTESTANDSET [lock] bts -ida_hexrays.ROLE_BSWAP (variable) +ida_hexrays.ROLE_BSWAP bswap() function (any size) -ida_hexrays.ROLE_BUG (variable) +ida_hexrays.ROLE_BUG BUG() helper macro: never returns, causes exception. -ida_hexrays.ROLE_CFSUB3 (variable) +ida_hexrays.ROLE_CFSUB3 carry flag after subtract with carry -ida_hexrays.ROLE_CONTAINING_RECORD (variable) +ida_hexrays.ROLE_CONTAINING_RECORD CONTAINING_RECORD() macro. -ida_hexrays.ROLE_EMPTY (variable) +ida_hexrays.ROLE_EMPTY empty, does not do anything (maybe spoils regs) -ida_hexrays.ROLE_FASTFAIL (variable) +ida_hexrays.ROLE_FASTFAIL __fastfail() -ida_hexrays.ROLE_IS_MUL_OK (variable) +ida_hexrays.ROLE_IS_MUL_OK is_mul_ok -ida_hexrays.ROLE_MEMCPY (variable) +ida_hexrays.ROLE_MEMCPY memcpy(void *dst, const void *src, size_t count); -ida_hexrays.ROLE_MEMSET (variable) +ida_hexrays.ROLE_MEMSET memset(void *dst, uchar value, size_t count); -ida_hexrays.ROLE_MEMSET32 (variable) +ida_hexrays.ROLE_MEMSET32 memset32(void *dst, uint32 value, size_t count); -ida_hexrays.ROLE_MEMSET64 (variable) +ida_hexrays.ROLE_MEMSET64 memset64(void *dst, uint64 value, size_t count); -ida_hexrays.ROLE_OFSUB3 (variable) +ida_hexrays.ROLE_OFSUB3 overflow flag after subtract with carry -ida_hexrays.ROLE_PRESENT (variable) +ida_hexrays.ROLE_PRESENT present() function (used in patterns) -ida_hexrays.ROLE_READFLAGS (variable) +ida_hexrays.ROLE_READFLAGS __readeflags, __readcallersflags -ida_hexrays.ROLE_ROL (variable) +ida_hexrays.ROLE_ROL rotate left -ida_hexrays.ROLE_ROR (variable) +ida_hexrays.ROLE_ROR rotate right -ida_hexrays.ROLE_SATURATED_MUL (variable) +ida_hexrays.ROLE_SATURATED_MUL saturated_mul -ida_hexrays.ROLE_SSE_CMP4 (variable) +ida_hexrays.ROLE_SSE_CMP4 e.g. _mm_cmpgt_ss -ida_hexrays.ROLE_SSE_CMP8 (variable) +ida_hexrays.ROLE_SSE_CMP8 e.g. _mm_cmpgt_sd -ida_hexrays.ROLE_STRCAT (variable) +ida_hexrays.ROLE_STRCAT strcat(char *dst, const char *src); -ida_hexrays.ROLE_STRCPY (variable) +ida_hexrays.ROLE_STRCPY strcpy(char *dst, const char *src); -ida_hexrays.ROLE_STRLEN (variable) +ida_hexrays.ROLE_STRLEN strlen(const char *src); -ida_hexrays.ROLE_TAIL (variable) +ida_hexrays.ROLE_TAIL char *tail(const char *str); -ida_hexrays.ROLE_UNK (variable) +ida_hexrays.ROLE_UNK unknown function role -ida_hexrays.ROLE_VA_ARG (variable) +ida_hexrays.ROLE_VA_ARG va_arg() macro -ida_hexrays.ROLE_VA_COPY (variable) +ida_hexrays.ROLE_VA_COPY va_copy() function -ida_hexrays.ROLE_VA_END (variable) +ida_hexrays.ROLE_VA_END va_end() function -ida_hexrays.ROLE_VA_START (variable) +ida_hexrays.ROLE_VA_START va_start() function -ida_hexrays.ROLE_WCSCAT (variable) +ida_hexrays.ROLE_WCSCAT wchar_t *wcscat(wchar_t *dst, const wchar_t *src) -ida_hexrays.ROLE_WCSCPY (variable) +ida_hexrays.ROLE_WCSCPY wchar_t *wcscpy(wchar_t *dst, const wchar_t *src); -ida_hexrays.ROLE_WCSLEN (variable) +ida_hexrays.ROLE_WCSLEN size_t wcslen(const wchar_t *s) -ida_hexrays.ROLE_WMEMCPY (variable) +ida_hexrays.ROLE_WMEMCPY wchar_t *wmemcpy(wchar_t *dst, const wchar_t *src, size_t n) -ida_hexrays.ROLE_WMEMSET (variable) +ida_hexrays.ROLE_WMEMSET wchar_t *wmemset(wchar_t *dst, wchar_t wc, size_t n) -ida_hexrays.SHINS_LDXEA (variable) +ida_hexrays.SHINS_LDXEA display address of ldx expressions (not used) -ida_hexrays.SHINS_NUMADDR (variable) +ida_hexrays.SHINS_NUMADDR display definition addresses for numbers -ida_hexrays.SHINS_SHORT (variable) +ida_hexrays.SHINS_SHORT do not display use-def chains and other attrs -ida_hexrays.SHINS_VALNUM (variable) +ida_hexrays.SHINS_VALNUM display value numbers -ida_hexrays.ULV_PRECISE_DEFEA (variable) +ida_hexrays.ULV_PRECISE_DEFEA Use precise defea's for lvar locations. -ida_hexrays.USE_CURLY_BRACES (variable) +ida_hexrays.USE_CURLY_BRACES print curly braces without any checks -ida_hexrays.USE_KEYBOARD (variable) +ida_hexrays.USE_KEYBOARD Keyboard. -ida_hexrays.USE_MOUSE (variable) +ida_hexrays.USE_MOUSE Mouse. -ida_hexrays.VDI_EXPR (variable) +ida_hexrays.VDI_EXPR c-tree item -ida_hexrays.VDI_FUNC (variable) +ida_hexrays.VDI_FUNC the function itself (the very first line with the function prototype) -ida_hexrays.VDI_LVAR (variable) +ida_hexrays.VDI_LVAR declaration of local variable -ida_hexrays.VDI_NONE (variable) +ida_hexrays.VDI_NONE undefined -ida_hexrays.VDI_TAIL (variable) +ida_hexrays.VDI_TAIL cursor is at (beyond) the line end (commentable line) -ida_hexrays.VDRUN_APPEND (variable) +ida_hexrays.VDRUN_APPEND Create a new file or append to existing file. -ida_hexrays.VDRUN_CMDLINE (variable) +ida_hexrays.VDRUN_CMDLINE Called from ida's command line. -ida_hexrays.VDRUN_LUMINA (variable) +ida_hexrays.VDRUN_LUMINA Use lumina server. -ida_hexrays.VDRUN_MAYSTOP (variable) +ida_hexrays.VDRUN_MAYSTOP The user can cancel decompilation. -ida_hexrays.VDRUN_NEWFILE (variable) +ida_hexrays.VDRUN_NEWFILE Create a new file or overwrite existing file. -ida_hexrays.VDRUN_ONLYNEW (variable) +ida_hexrays.VDRUN_ONLYNEW Fail if output file already exists. -ida_hexrays.VDRUN_SENDIDB (variable) +ida_hexrays.VDRUN_SENDIDB Send problematic databases to hex-rays.com. -ida_hexrays.VDRUN_SILENT (variable) +ida_hexrays.VDRUN_SILENT Silent decompilation. -ida_hexrays.VDRUN_STATS (variable) +ida_hexrays.VDRUN_STATS Print statistics into vd_stats.txt. -ida_hexrays.VDUI_VALID (variable) +ida_hexrays.VDUI_VALID is valid? -ida_hexrays.VDUI_VISIBLE (variable) +ida_hexrays.VDUI_VISIBLE is visible? -ida_hexrays.VR_AT_END (variable) - get value ranges after the instruction or at the block end, just after the last - instruction (if M is nullptr) +ida_hexrays.VR_AT_END + get value ranges after the instruction or at the block end, just after the last instruction (if M is nullptr) + -ida_hexrays.VR_AT_START (variable) - get value ranges before the instruction or at the block start (if M is nullptr) +ida_hexrays.VR_AT_START + get value ranges before the instruction or at the block start (if M is nullptr) + -ida_hexrays.VR_EXACT (variable) - find exact match. if not set, the returned valrng size will be >= vivl.size +ida_hexrays.VR_EXACT + find exact match. if not set, the returned valrng size will be >= vivl.size + -ida_hexrays.WARN_ADDR_OUTARGS (variable) - 6 cannot handle address arithmetics in outgoing argument area of stack frame - - unused +ida_hexrays.WARN_ADDR_OUTARGS + 6 cannot handle address arithmetics in outgoing argument area of stack frame - unused -ida_hexrays.WARN_ARRAY_INARG (variable) +ida_hexrays.WARN_ARRAY_INARG 21 array has been used for an input argument -ida_hexrays.WARN_BAD_CALL_SP (variable) +ida_hexrays.WARN_BAD_CALL_SP 38 bad sp value at call -ida_hexrays.WARN_BAD_FIELD_TYPE (variable) +ida_hexrays.WARN_BAD_FIELD_TYPE 23 incorrect structure member type for s::s, ignored -ida_hexrays.WARN_BAD_INSN (variable) +ida_hexrays.WARN_BAD_INSN 49 bad instruction -ida_hexrays.WARN_BAD_MAPDST (variable) +ida_hexrays.WARN_BAD_MAPDST 48 too short map destination 's' for variable 's' -ida_hexrays.WARN_BAD_PURGED (variable) +ida_hexrays.WARN_BAD_PURGED 12 inconsistent function type and number of purged bytes -ida_hexrays.WARN_BAD_RETVAR (variable) +ida_hexrays.WARN_BAD_RETVAR 25 wrong return variable -ida_hexrays.WARN_BAD_SHADOW (variable) +ida_hexrays.WARN_BAD_SHADOW 45 ignored the value written to the shadow area of the succeeding call -ida_hexrays.WARN_BAD_SP (variable) +ida_hexrays.WARN_BAD_SP 40 positive sp value a has been found -ida_hexrays.WARN_BAD_STD_TYPE (variable) +ida_hexrays.WARN_BAD_STD_TYPE 37 corrupted or unexisting local type 's' -ida_hexrays.WARN_BAD_STKPNT (variable) +ida_hexrays.WARN_BAD_STKPNT 41 wrong sp change point -ida_hexrays.WARN_BAD_STROFF (variable) +ida_hexrays.WARN_BAD_STROFF 33 user specified stroff has not been processed: s -ida_hexrays.WARN_BAD_VALRNG (variable) +ida_hexrays.WARN_BAD_VALRNG 44 values range analysis failed -ida_hexrays.WARN_BAD_VARSIZE (variable) +ida_hexrays.WARN_BAD_VARSIZE 34 inconsistent variable size for 's' -ida_hexrays.WARN_CBUILD_LOOPS (variable) +ida_hexrays.WARN_CBUILD_LOOPS 13 too many cbuild loops -ida_hexrays.WARN_CR_BADOFF (variable) +ida_hexrays.WARN_CR_BADOFF 32 CONTAINING_RECORD: too small offset d for struct 's' -ida_hexrays.WARN_CR_NOFIELD (variable) +ida_hexrays.WARN_CR_NOFIELD 31 CONTAINING_RECORD: no field 's' in struct 's' at d -ida_hexrays.WARN_DEP_UNK_CALLS (variable) +ida_hexrays.WARN_DEP_UNK_CALLS 7 found interdependent unknown calls -ida_hexrays.WARN_EXP_LINVAR (variable) +ida_hexrays.WARN_EXP_LINVAR 10 failed to expand a linear variable -ida_hexrays.WARN_FIXED_MACRO (variable) - 29 fixed broken macro-insn +ida_hexrays.WARN_FIXED_INSN + 29 fixed broken insn -ida_hexrays.WARN_FRAG_LVAR (variable) +ida_hexrays.WARN_FRAG_LVAR 26 fragmented variable at s may be wrong -ida_hexrays.WARN_GUESSED_TYPE (variable) +ida_hexrays.WARN_GUESSED_TYPE 9 using guessed type s; -ida_hexrays.WARN_HUGE_STKOFF (variable) +ida_hexrays.WARN_HUGE_STKOFF 27 exceedingly huge offset into the stack frame -ida_hexrays.WARN_ILL_ELLIPSIS (variable) +ida_hexrays.WARN_ILL_ELLIPSIS 8 erroneously detected ellipsis type has been ignored -ida_hexrays.WARN_ILL_FPU_STACK (variable) +ida_hexrays.WARN_ILL_FPU_STACK 18 inconsistent fpu stack -ida_hexrays.WARN_ILL_FUNCTYPE (variable) +ida_hexrays.WARN_ILL_FUNCTYPE 2 invalid function type 's' has been ignored -ida_hexrays.WARN_ILL_PURGED (variable) +ida_hexrays.WARN_ILL_PURGED 1 odd caller purged bytes d, correcting -ida_hexrays.WARN_JUMPOUT (variable) +ida_hexrays.WARN_JUMPOUT 43 control flows out of bounds -ida_hexrays.WARN_MAX (variable) - may be used in notes as a placeholder when the warning id is not available +ida_hexrays.WARN_MAX + may be used in notes as a placeholder when the warning id is not available + -ida_hexrays.WARN_MAX_ARGS (variable) +ida_hexrays.WARN_MAX_ARGS 22 too many input arguments, some ignored -ida_hexrays.WARN_MISSED_SWITCH (variable) +ida_hexrays.WARN_MISSED_SWITCH 39 wrong markup of switch jump, skipped it -ida_hexrays.WARN_MUST_RET_FP (variable) +ida_hexrays.WARN_MUST_RET_FP 17 function return type is incorrect (must be floating point) -ida_hexrays.WARN_NO_SAVE_REST (variable) +ida_hexrays.WARN_NO_SAVE_REST 14 could not find valid save-restore pair for s -ida_hexrays.WARN_ODD_ABI (variable) +ida_hexrays.WARN_ODD_ABI 50 encountered odd instruction for the current ABI -ida_hexrays.WARN_ODD_ADDR_USE (variable) +ida_hexrays.WARN_ODD_ADDR_USE 16 odd use of a variable address -ida_hexrays.WARN_ODD_INPUT_REG (variable) +ida_hexrays.WARN_ODD_INPUT_REG 15 odd input register s -ida_hexrays.WARN_OPT_USELESS_JCND (variable) +ida_hexrays.WARN_OPT_USELESS_JCND 54 simplified comparisons for 's': s became s -ida_hexrays.WARN_OPT_VALRNG (variable) +ida_hexrays.WARN_OPT_VALRNG 46 conditional instruction was optimized away because s -ida_hexrays.WARN_OPT_VALRNG2 (variable) +ida_hexrays.WARN_OPT_VALRNG2 52 mask 0xX is shortened because s <= 0xX" -ida_hexrays.WARN_OPT_VALRNG3 (variable) +ida_hexrays.WARN_OPT_VALRNG3 53 masking with 0XX was optimized away because s <= 0xX -ida_hexrays.WARN_RET_LOCREF (variable) +ida_hexrays.WARN_RET_LOCREF 47 returning address of temporary local variable 's' -ida_hexrays.WARN_SELFREF_PROP (variable) +ida_hexrays.WARN_SELFREF_PROP 19 self-referencing variable has been detected -ida_hexrays.WARN_UNALIGNED_ARG (variable) +ida_hexrays.WARN_SUBFRAME_OVERFLOW + 55 call arguments overflow the function chunk frame + +ida_hexrays.WARN_UNALIGNED_ARG 36 unaligned function argument 's' -ida_hexrays.WARN_UNBALANCED_STACK (variable) +ida_hexrays.WARN_UNBALANCED_STACK 51 unbalanced stack, ignored a potential tail call -ida_hexrays.WARN_UNDEF_LVAR (variable) +ida_hexrays.WARN_UNDEF_LVAR 42 variable 's' is possibly undefined -ida_hexrays.WARN_UNINITED_REG (variable) +ida_hexrays.WARN_UNINITED_REG 28 reference to an uninitialized register has been removed: s -ida_hexrays.WARN_UNSUPP_REG (variable) +ida_hexrays.WARN_UNSUPP_REG 35 unsupported processor register 's' -ida_hexrays.WARN_VARARG_MANY (variable) +ida_hexrays.WARN_VARARG_MANY 5 too many varargs, some ignored -ida_hexrays.WARN_VARARG_NOSTK (variable) +ida_hexrays.WARN_VARARG_NOSTK 4 call vararg without local stack -ida_hexrays.WARN_VARARG_REGS (variable) +ida_hexrays.WARN_VARARG_REGS 0 cannot handle register arguments in vararg function, discarded them -ida_hexrays.WARN_VARARG_TCAL (variable) +ida_hexrays.WARN_VARARG_TCAL 3 cannot handle tail call to vararg -ida_hexrays.WARN_WIDEN_CHAINS (variable) +ida_hexrays.WARN_WIDEN_CHAINS 11 failed to widen chains -ida_hexrays.WARN_WOULD_OVERLAP (variable) +ida_hexrays.WARN_WOULD_OVERLAP 20 variables would overlap: s -ida_hexrays.WARN_WRITE_CONST (variable) +ida_hexrays.WARN_WRITE_CONST 24 write access to const memory at a has been detected -ida_hexrays.WARN_WRONG_VA_OFF (variable) +ida_hexrays.WARN_WRONG_VA_OFF 30 wrong offset of va_list variable -ida_hexrays.WITH_SIDEFF (variable) +ida_hexrays.WITH_SIDEFF change operand size and handle side effects -ida_hexrays.__cbhooks_t (class) +ida_hexrays.__cbhooks_t -ida_hexrays.__cbhooks_t.__init__ (method) +ida_hexrays.__cbhooks_t.__init__(self, callback) -ida_hexrays.__cbhooks_t.close_pseudocode (method) +ida_hexrays.__cbhooks_t.close_pseudocode(self, *args) + Close pseudocode window. + + @param f: pointer to window + @returns false if failed -ida_hexrays.__cbhooks_t.create_hint (method) +ida_hexrays.__cbhooks_t.create_hint(self, *args) -ida_hexrays.__cbhooks_t.curpos (method) +ida_hexrays.__cbhooks_t.curpos(self, *args) -ida_hexrays.__cbhooks_t.double_click (method) +ida_hexrays.__cbhooks_t.double_click(self, *args) -ida_hexrays.__cbhooks_t.func_printed (method) +ida_hexrays.__cbhooks_t.func_printed(self, *args) -ida_hexrays.__cbhooks_t.interr (method) +ida_hexrays.__cbhooks_t.interr(self, *args) -ida_hexrays.__cbhooks_t.keyboard (method) +ida_hexrays.__cbhooks_t.keyboard(self, *args) -ida_hexrays.__cbhooks_t.maturity (method) +ida_hexrays.__cbhooks_t.maturity(self, *args) -ida_hexrays.__cbhooks_t.open_pseudocode (method) +ida_hexrays.__cbhooks_t.open_pseudocode(self, *args) + Open pseudocode window. The specified function is decompiled and the pseudocode window is opened. + + @param ea: function to decompile + @param flags: a combination of OPF_ flags + @returns false if failed -ida_hexrays.__cbhooks_t.populating_popup (method) +ida_hexrays.__cbhooks_t.populating_popup(self, *args) -ida_hexrays.__cbhooks_t.print_func (method) +ida_hexrays.__cbhooks_t.print_func(self, *args) -ida_hexrays.__cbhooks_t.refresh_pseudocode (method) +ida_hexrays.__cbhooks_t.refresh_pseudocode(self, *args) -ida_hexrays.__cbhooks_t.right_click (method) +ida_hexrays.__cbhooks_t.right_click(self, *args) -ida_hexrays.__cbhooks_t.switch_pseudocode (method) +ida_hexrays.__cbhooks_t.switch_pseudocode(self, *args) -ida_hexrays.__cbhooks_t.text_ready (method) +ida_hexrays.__cbhooks_t.text_ready(self, *args) -ida_hexrays._call_with_transferrable_ownership (function) +ida_hexrays._call_with_transferrable_ownership(fun, *args) -ida_hexrays._kludge_force_declare_TPopupMenu (function) - _kludge_force_declare_TPopupMenu(arg1) - - Parameters - ---------- - arg1: TPopupMenu const * +ida_hexrays._kludge_force_declare_TPopupMenu(arg1: "TPopupMenu const *") -> None -ida_hexrays._ll_call_helper (function) - _ll_call_helper(rettype, args, format) -> cexpr_t - - Parameters - ---------- - rettype: tinfo_t const & - args: carglist_t * - format: char const * +ida_hexrays._ll_call_helper(*args) -> "cexpr_t *" -ida_hexrays._ll_create_helper (function) - _ll_create_helper(standalone, type, format) -> cexpr_t - - Parameters - ---------- - standalone: bool - type: tinfo_t const & - format: char const * +ida_hexrays._ll_create_helper(*args) -> "cexpr_t *" -ida_hexrays._ll_dereference (function) - _ll_dereference(e, ptrsize, is_flt=False) -> cexpr_t - - Parameters - ---------- - e: cexpr_t * - ptrsize: int - is_flt: bool +ida_hexrays._ll_dereference(e: "cexpr_t", ptrsize: int, is_flt: bool = False) -> "cexpr_t *" -ida_hexrays._ll_lnot (function) - _ll_lnot(e) -> cexpr_t - - Parameters - ---------- - e: cexpr_t * +ida_hexrays._ll_lnot(e: "cexpr_t") -> "cexpr_t *" -ida_hexrays._ll_make_num (function) - _ll_make_num(n, func=None, ea=BADADDR, opnum=0, sign=no_sign, size=0) -> cexpr_t - - Parameters - ---------- - n: uint64 - func: cfunc_t * - ea: ea_t - opnum: int - sign: type_sign_t - size: int +ida_hexrays._ll_make_num(*args) -> "cexpr_t *" -ida_hexrays._ll_make_ref (function) - _ll_make_ref(e) -> cexpr_t - - Parameters - ---------- - e: cexpr_t * +ida_hexrays._ll_make_ref(e: "cexpr_t") -> "cexpr_t *" -ida_hexrays._ll_new_block (function) - _ll_new_block() -> cinsn_t +ida_hexrays._ll_new_block() -> "cinsn_t *" -ida_hexrays._map_as_dict (function) +ida_hexrays._map_as_dict(maptype, name, keytype, valuetype) -ida_hexrays._map_as_dict._map___contains__ (function) +ida_hexrays._map_as_dict._map___contains__(self, key) Returns true if the specified key exists in the . -ida_hexrays._map_as_dict._map___delitem__ (function) +ida_hexrays._map_as_dict._map___delitem__(self, key) Removes the value associated with the provided key. -ida_hexrays._map_as_dict._map___getitem__ (function) +ida_hexrays._map_as_dict._map___getitem__(self, key) Returns the value associated with the provided key. -ida_hexrays._map_as_dict._map___iter__ (function) +ida_hexrays._map_as_dict._map___iter__(self) Iterate over dictionary keys. -ida_hexrays._map_as_dict._map___setitem__ (function) +ida_hexrays._map_as_dict._map___setitem__(self, key, value) Returns the value associated with the provided key. -ida_hexrays._map_as_dict._map_clear (function) +ida_hexrays._map_as_dict._map_clear(self) -ida_hexrays._map_as_dict._map_copy (function) +ida_hexrays._map_as_dict._map_copy(self) -ida_hexrays._map_as_dict._map_get (function) +ida_hexrays._map_as_dict._map_get(self, key, default = None) -ida_hexrays._map_as_dict._map_has_key (function) +ida_hexrays._map_as_dict._map_has_key(self, key) -ida_hexrays._map_as_dict._map_items (function) +ida_hexrays._map_as_dict._map_items(self) -ida_hexrays._map_as_dict._map_iteritems (function) +ida_hexrays._map_as_dict._map_iteritems(self) -ida_hexrays._map_as_dict._map_iterkeys (function) +ida_hexrays._map_as_dict._map_iterkeys(self) -ida_hexrays._map_as_dict._map_itervalues (function) +ida_hexrays._map_as_dict._map_itervalues(self) -ida_hexrays._map_as_dict._map_keys (function) +ida_hexrays._map_as_dict._map_keys(self) -ida_hexrays._map_as_dict._map_pop (function) +ida_hexrays._map_as_dict._map_pop(self, key) Sets the value associated with the provided key. -ida_hexrays._map_as_dict._map_popitem (function) +ida_hexrays._map_as_dict._map_popitem(self) Sets the value associated with the provided key. -ida_hexrays._map_as_dict._map_setdefault (function) +ida_hexrays._map_as_dict._map_setdefault(self, key, default = None) Sets the value associated with the provided key. -ida_hexrays._map_as_dict._map_values (function) +ida_hexrays._map_as_dict._map_values(self) -ida_hexrays.accepts_small_udts (function) - accepts_small_udts(op) -> bool +ida_hexrays.accepts_small_udts(op: "ctype_t") -> bool Is the operator allowed on small structure or union? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.accepts_udts (function) - accepts_udts(op) -> bool - - @param op: enum ctype_t +ida_hexrays.accepts_udts(op: "ctype_t") -> bool -ida_hexrays.arglocs_overlap (function) - arglocs_overlap(loc1, w1, loc2, w2) -> bool +ida_hexrays.arglocs_overlap(loc1: "vdloc_t", w1: "size_t", loc2: "vdloc_t", w2: "size_t") -> bool Do two arglocs overlap? - - @param loc1: (C++: const vdloc_t &) vdloc_t const & - @param w1: (C++: size_t) - @param loc2: (C++: const vdloc_t &) vdloc_t const & - @param w2: (C++: size_t) -ida_hexrays.array_of_bitsets (class) - Proxy of C++ qvector< bitset_t > class. +ida_hexrays.array_of_bitsets -ida_hexrays.array_of_bitsets.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< bitset_t > const & +ida_hexrays.array_of_bitsets.__eq__(self, r: "array_of_bitsets") -> bool -ida_hexrays.array_of_bitsets.__getitem__ (method) - __getitem__(self, i) -> bitset_t - - @param i: size_t +ida_hexrays.array_of_bitsets.__getitem__(self, i: "size_t") -> "bitset_t const &" -ida_hexrays.array_of_bitsets.__init__ (method) - __init__(self) -> array_of_bitsets - __init__(self, x) -> array_of_bitsets - - @param x: qvector< bitset_t > const & +ida_hexrays.array_of_bitsets.__init__(self, *args) -ida_hexrays.array_of_bitsets.__len__ (method) - __len__(self) -> size_t +ida_hexrays.array_of_bitsets.__len__(self) -> "size_t" -ida_hexrays.array_of_bitsets.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< bitset_t > const & +ida_hexrays.array_of_bitsets.__ne__(self, r: "array_of_bitsets") -> bool -ida_hexrays.array_of_bitsets.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: bitset_t const & +ida_hexrays.array_of_bitsets.__setitem__(self, i: "size_t", v: "bitset_t") -> None -ida_hexrays.array_of_bitsets._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: bitset_t const & +ida_hexrays.array_of_bitsets._del(self, x: "bitset_t") -> bool -ida_hexrays.array_of_bitsets.add_unique (method) - add_unique(self, x) -> bool - - @param x: bitset_t const & +ida_hexrays.array_of_bitsets.add_unique(self, x: "bitset_t") -> bool -ida_hexrays.array_of_bitsets.at (method) - at(self, _idx) -> bitset_t - - @param _idx: size_t +ida_hexrays.array_of_bitsets.append(self, x: "bitset_t") -> None -ida_hexrays.array_of_bitsets.begin (method) - begin(self) -> bitset_t +ida_hexrays.array_of_bitsets.at(self, _idx: "size_t") -> "bitset_t const &" -ida_hexrays.array_of_bitsets.capacity (method) - capacity(self) -> size_t +ida_hexrays.array_of_bitsets.begin(self, *args) -> "qvector< bitset_t >::const_iterator" -ida_hexrays.array_of_bitsets.clear (method) - clear(self) +ida_hexrays.array_of_bitsets.capacity(self) -> "size_t" -ida_hexrays.array_of_bitsets.empty (method) - empty(self) -> bool +ida_hexrays.array_of_bitsets.clear(self) -> None -ida_hexrays.array_of_bitsets.end (method) - end(self) -> bitset_t +ida_hexrays.array_of_bitsets.empty(self) -> bool -ida_hexrays.array_of_bitsets.erase (method) - erase(self, it) -> bitset_t - - @param it: qvector< bitset_t >::iterator - - erase(self, first, last) -> bitset_t - - @param first: qvector< bitset_t >::iterator - @param last: qvector< bitset_t >::iterator +ida_hexrays.array_of_bitsets.end(self, *args) -> "qvector< bitset_t >::const_iterator" -ida_hexrays.array_of_bitsets.extract (method) - extract(self) -> bitset_t +ida_hexrays.array_of_bitsets.erase(self, *args) -> "qvector< bitset_t >::iterator" -ida_hexrays.array_of_bitsets.find (method) - find(self, x) -> bitset_t - - @param x: bitset_t const & +ida_hexrays.array_of_bitsets.extend(self, x: "array_of_bitsets") -> None -ida_hexrays.array_of_bitsets.grow (method) - grow(self, x=bitset_t()) - - @param x: bitset_t const & +ida_hexrays.array_of_bitsets.extract(self) -> "bitset_t *" -ida_hexrays.array_of_bitsets.has (method) - has(self, x) -> bool - - @param x: bitset_t const & +ida_hexrays.array_of_bitsets.find(self, *args) -> "qvector< bitset_t >::const_iterator" -ida_hexrays.array_of_bitsets.inject (method) - inject(self, s, len) - - @param s: bitset_t * - @param len: size_t +ida_hexrays.array_of_bitsets.grow(self, *args) -> None -ida_hexrays.array_of_bitsets.insert (method) - insert(self, it, x) -> bitset_t - - @param it: qvector< bitset_t >::iterator - @param x: bitset_t const & +ida_hexrays.array_of_bitsets.has(self, x: "bitset_t") -> bool -ida_hexrays.array_of_bitsets.pop_back (method) - pop_back(self) +ida_hexrays.array_of_bitsets.inject(self, s: "bitset_t", len: "size_t") -> None -ida_hexrays.array_of_bitsets.push_back (method) - push_back(self, x) - - @param x: bitset_t const & - - push_back(self) -> bitset_t +ida_hexrays.array_of_bitsets.insert(self, it: "bitset_t", x: "bitset_t") -> "qvector< bitset_t >::iterator" -ida_hexrays.array_of_bitsets.qclear (method) - qclear(self) +ida_hexrays.array_of_bitsets.pop_back(self) -> None -ida_hexrays.array_of_bitsets.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_hexrays.array_of_bitsets.push_back(self, *args) -> "bitset_t &" -ida_hexrays.array_of_bitsets.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: bitset_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_hexrays.array_of_bitsets.qclear(self) -> None -ida_hexrays.array_of_bitsets.size (method) - size(self) -> size_t +ida_hexrays.array_of_bitsets.reserve(self, cnt: "size_t") -> None -ida_hexrays.array_of_bitsets.swap (method) - swap(self, r) - - @param r: qvector< bitset_t > & +ida_hexrays.array_of_bitsets.resize(self, *args) -> None -ida_hexrays.array_of_bitsets.truncate (method) - truncate(self) +ida_hexrays.array_of_bitsets.size(self) -> "size_t" -ida_hexrays.array_of_ivlsets (class) - Proxy of C++ qvector< ivlset_t > class. +ida_hexrays.array_of_bitsets.swap(self, r: "array_of_bitsets") -> None -ida_hexrays.array_of_ivlsets.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< ivlset_t > const & +ida_hexrays.array_of_bitsets.truncate(self) -> None -ida_hexrays.array_of_ivlsets.__getitem__ (method) - __getitem__(self, i) -> ivlset_t - - @param i: size_t +ida_hexrays.array_of_ivlsets -ida_hexrays.array_of_ivlsets.__init__ (method) - __init__(self) -> array_of_ivlsets - __init__(self, x) -> array_of_ivlsets - - @param x: qvector< ivlset_t > const & +ida_hexrays.array_of_ivlsets.__eq__(self, r: "array_of_ivlsets") -> bool -ida_hexrays.array_of_ivlsets.__len__ (method) - __len__(self) -> size_t +ida_hexrays.array_of_ivlsets.__getitem__(self, i: "size_t") -> "ivlset_t const &" -ida_hexrays.array_of_ivlsets.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< ivlset_t > const & +ida_hexrays.array_of_ivlsets.__init__(self, *args) -ida_hexrays.array_of_ivlsets.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: ivlset_t const & +ida_hexrays.array_of_ivlsets.__len__(self) -> "size_t" -ida_hexrays.array_of_ivlsets._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: ivlset_t const & +ida_hexrays.array_of_ivlsets.__ne__(self, r: "array_of_ivlsets") -> bool -ida_hexrays.array_of_ivlsets.add_unique (method) - add_unique(self, x) -> bool - - @param x: ivlset_t const & +ida_hexrays.array_of_ivlsets.__setitem__(self, i: "size_t", v: "ivlset_t") -> None -ida_hexrays.array_of_ivlsets.at (method) - at(self, _idx) -> ivlset_t - - @param _idx: size_t +ida_hexrays.array_of_ivlsets._del(self, x: "ivlset_t") -> bool -ida_hexrays.array_of_ivlsets.begin (method) - begin(self) -> ivlset_t +ida_hexrays.array_of_ivlsets.add_unique(self, x: "ivlset_t") -> bool -ida_hexrays.array_of_ivlsets.capacity (method) - capacity(self) -> size_t +ida_hexrays.array_of_ivlsets.append(self, x: "ivlset_t") -> None -ida_hexrays.array_of_ivlsets.clear (method) - clear(self) +ida_hexrays.array_of_ivlsets.at(self, _idx: "size_t") -> "ivlset_t const &" -ida_hexrays.array_of_ivlsets.empty (method) - empty(self) -> bool +ida_hexrays.array_of_ivlsets.begin(self, *args) -> "qvector< ivlset_t >::const_iterator" -ida_hexrays.array_of_ivlsets.end (method) - end(self) -> ivlset_t +ida_hexrays.array_of_ivlsets.capacity(self) -> "size_t" -ida_hexrays.array_of_ivlsets.erase (method) - erase(self, it) -> ivlset_t - - @param it: qvector< ivlset_t >::iterator - - erase(self, first, last) -> ivlset_t - - @param first: qvector< ivlset_t >::iterator - @param last: qvector< ivlset_t >::iterator +ida_hexrays.array_of_ivlsets.clear(self) -> None -ida_hexrays.array_of_ivlsets.extract (method) - extract(self) -> ivlset_t +ida_hexrays.array_of_ivlsets.empty(self) -> bool -ida_hexrays.array_of_ivlsets.find (method) - find(self, x) -> ivlset_t - - @param x: ivlset_t const & +ida_hexrays.array_of_ivlsets.end(self, *args) -> "qvector< ivlset_t >::const_iterator" -ida_hexrays.array_of_ivlsets.grow (method) - grow(self, x=ivlset_t()) - - @param x: ivlset_t const & +ida_hexrays.array_of_ivlsets.erase(self, *args) -> "qvector< ivlset_t >::iterator" -ida_hexrays.array_of_ivlsets.has (method) - has(self, x) -> bool - - @param x: ivlset_t const & +ida_hexrays.array_of_ivlsets.extend(self, x: "array_of_ivlsets") -> None -ida_hexrays.array_of_ivlsets.inject (method) - inject(self, s, len) - - @param s: ivlset_t * - @param len: size_t +ida_hexrays.array_of_ivlsets.extract(self) -> "ivlset_t *" -ida_hexrays.array_of_ivlsets.insert (method) - insert(self, it, x) -> ivlset_t - - @param it: qvector< ivlset_t >::iterator - @param x: ivlset_t const & +ida_hexrays.array_of_ivlsets.find(self, *args) -> "qvector< ivlset_t >::const_iterator" -ida_hexrays.array_of_ivlsets.pop_back (method) - pop_back(self) +ida_hexrays.array_of_ivlsets.grow(self, *args) -> None -ida_hexrays.array_of_ivlsets.push_back (method) - push_back(self, x) - - @param x: ivlset_t const & - - push_back(self) -> ivlset_t +ida_hexrays.array_of_ivlsets.has(self, x: "ivlset_t") -> bool -ida_hexrays.array_of_ivlsets.qclear (method) - qclear(self) +ida_hexrays.array_of_ivlsets.inject(self, s: "ivlset_t", len: "size_t") -> None -ida_hexrays.array_of_ivlsets.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_hexrays.array_of_ivlsets.insert(self, it: "ivlset_t", x: "ivlset_t") -> "qvector< ivlset_t >::iterator" -ida_hexrays.array_of_ivlsets.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: ivlset_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_hexrays.array_of_ivlsets.pop_back(self) -> None -ida_hexrays.array_of_ivlsets.size (method) - size(self) -> size_t +ida_hexrays.array_of_ivlsets.push_back(self, *args) -> "ivlset_t &" -ida_hexrays.array_of_ivlsets.swap (method) - swap(self, r) - - @param r: qvector< ivlset_t > & +ida_hexrays.array_of_ivlsets.qclear(self) -> None -ida_hexrays.array_of_ivlsets.truncate (method) - truncate(self) +ida_hexrays.array_of_ivlsets.reserve(self, cnt: "size_t") -> None -ida_hexrays.asgop (function) - asgop(cop) -> ctype_t - Convert plain operator into assignment operator. For example, cot_add returns - cot_asgadd. - - @param cop: (C++: ctype_t) enum ctype_t +ida_hexrays.array_of_ivlsets.resize(self, *args) -> None -ida_hexrays.asgop_revert (function) - asgop_revert(cop) -> ctype_t - Convert assignment operator into plain operator. For example, cot_asgadd returns - cot_add - - @param cop: (C++: ctype_t) enum ctype_t - @return: cot_empty is the input operator is not an assignment operator. +ida_hexrays.array_of_ivlsets.size(self) -> "size_t" -ida_hexrays.bit_bound_t (class) - Proxy of C++ bit_bound_t class. +ida_hexrays.array_of_ivlsets.swap(self, r: "array_of_ivlsets") -> None -ida_hexrays.bit_bound_t.__init__ (method) - __init__(self, n=0, s=0) -> bit_bound_t - - @param n: int - @param s: int +ida_hexrays.array_of_ivlsets.truncate(self) -> None -ida_hexrays.bitset_t (class) - Proxy of C++ bitset_t class. +ida_hexrays.array_of_node_bitset_t -ida_hexrays.bitset_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: bitset_t const & +ida_hexrays.array_of_node_bitset_t.__init__(self) -ida_hexrays.bitset_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: bitset_t const & +ida_hexrays.asgop(cop: "ctype_t") -> "ctype_t" + Convert plain operator into assignment operator. For example, cot_add returns cot_asgadd. -ida_hexrays.bitset_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: bitset_t const & +ida_hexrays.asgop_revert(cop: "ctype_t") -> "ctype_t" + Convert assignment operator into plain operator. For example, cot_asgadd returns cot_add + + @returns cot_empty is the input operator is not an assignment operator. -ida_hexrays.bitset_t.__init__ (method) - __init__(self) -> bitset_t - __init__(self, m) -> bitset_t - - @param m: bitset_t const & +ida_hexrays.bit_bound_t -ida_hexrays.bitset_t.__iter__ (method) +ida_hexrays.bit_bound_t.__init__(self, n: int = 0, s: int = 0) -ida_hexrays.bitset_t.__le__ (method) - __le__(self, r) -> bool - - @param r: bitset_t const & +ida_hexrays.bitset_t -ida_hexrays.bitset_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: bitset_t const & +ida_hexrays.bitset_t.__eq__(self, r: "bitset_t") -> bool -ida_hexrays.bitset_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: bitset_t const & +ida_hexrays.bitset_t.__ge__(self, r: "bitset_t") -> bool + +ida_hexrays.bitset_t.__gt__(self, r: "bitset_t") -> bool + +ida_hexrays.bitset_t.__init__(self, *args) + +ida_hexrays.bitset_t.__iter__(self) + +ida_hexrays.bitset_t.__le__(self, r: "bitset_t") -> bool + +ida_hexrays.bitset_t.__lt__(self, r: "bitset_t") -> bool + +ida_hexrays.bitset_t.__ne__(self, r: "bitset_t") -> bool -ida_hexrays.bitset_t.add (method) - add(self, bit) -> bool +ida_hexrays.bitset_t.add(self, *args) -> bool + This function has the following signatures: - @param bit: int + 0. add(bit: int) -> bool + 1. add(bit: int, width: int) -> bool + 2. add(ml: const bitset_t &) -> bool - add(self, bit, width) -> bool + # 0: add(bit: int) -> bool - @param bit: int - @param width: int - add(self, ml) -> bool + # 1: add(bit: int, width: int) -> bool - @param ml: bitset_t const & + + # 2: add(ml: const bitset_t &) -> bool -ida_hexrays.bitset_t.back (method) - back(self) -> int +ida_hexrays.bitset_t.back(self) -> int -ida_hexrays.bitset_t.begin (method) - begin(self) -> iterator +ida_hexrays.bitset_t.begin(self) -> "bitset_t::iterator" -ida_hexrays.bitset_t.clear (method) - clear(self) +ida_hexrays.bitset_t.clear(self) -> None -ida_hexrays.bitset_t.compare (method) - compare(self, r) -> int - - @param r: bitset_t const & +ida_hexrays.bitset_t.compare(self, r: "bitset_t") -> int -ida_hexrays.bitset_t.copy (method) - copy(self, m) -> bitset_t - - @param m: bitset_t const & +ida_hexrays.bitset_t.copy(self, m: "bitset_t") -> "bitset_t &" -ida_hexrays.bitset_t.count (method) - count(self) -> int - count(self, bit) -> int +ida_hexrays.bitset_t.count(self, *args) -> int + This function has the following signatures: + + 0. count() -> int + 1. count(bit: int) -> int + + # 0: count() -> int - @param bit: int - -ida_hexrays.bitset_t.cut_at (method) - cut_at(self, maxbit) -> bool - @param maxbit: int + # 1: count(bit: int) -> int -ida_hexrays.bitset_t.dstr (method) - dstr(self) -> char const * +ida_hexrays.bitset_t.cut_at(self, maxbit: int) -> bool -ida_hexrays.bitset_t.empty (method) - empty(self) -> bool +ida_hexrays.bitset_t.dstr(self) -> str -ida_hexrays.bitset_t.end (method) - end(self) -> iterator +ida_hexrays.bitset_t.empty(self) -> bool -ida_hexrays.bitset_t.fill_with_ones (method) - fill_with_ones(self, maxbit) - - @param maxbit: int +ida_hexrays.bitset_t.end(self) -> "bitset_t::iterator" -ida_hexrays.bitset_t.front (method) - front(self) -> int +ida_hexrays.bitset_t.fill_with_ones(self, maxbit: int) -> None -ida_hexrays.bitset_t.has (method) - has(self, bit) -> bool - - @param bit: int +ida_hexrays.bitset_t.front(self) -> int -ida_hexrays.bitset_t.has_all (method) - has_all(self, bit, width) -> bool - - @param bit: int - @param width: int +ida_hexrays.bitset_t.has(self, bit: int) -> bool -ida_hexrays.bitset_t.has_any (method) - has_any(self, bit, width) -> bool - - @param bit: int - @param width: int +ida_hexrays.bitset_t.has_all(self, bit: int, width: int) -> bool -ida_hexrays.bitset_t.has_common (method) - has_common(self, ml) -> bool - - @param ml: bitset_t const & +ida_hexrays.bitset_t.has_any(self, bit: int, width: int) -> bool -ida_hexrays.bitset_t.inc (method) - inc(self, p, n=1) - - @param p: bitset_t::iterator & - @param n: int +ida_hexrays.bitset_t.has_common(self, ml: "bitset_t") -> bool -ida_hexrays.bitset_t.includes (method) - includes(self, ml) -> bool - - @param ml: bitset_t const & +ida_hexrays.bitset_t.inc(self, p: "iterator", n: int = 1) -> None -ida_hexrays.bitset_t.intersect (method) - intersect(self, ml) -> bool - - @param ml: bitset_t const & +ida_hexrays.bitset_t.includes(self, ml: "bitset_t") -> bool -ida_hexrays.bitset_t.is_subset_of (method) - is_subset_of(self, ml) -> bool - - @param ml: bitset_t const & +ida_hexrays.bitset_t.intersect(self, ml: "bitset_t") -> bool -ida_hexrays.bitset_t.itat (method) - itat(self, n) -> iterator - - @param n: int +ida_hexrays.bitset_t.is_subset_of(self, ml: "bitset_t") -> bool -ida_hexrays.bitset_t.itv (method) - itv(self, it) -> int - - @param it: bitset_t::const_iterator +ida_hexrays.bitset_t.itat(self, n: int) -> "bitset_t::iterator" -ida_hexrays.bitset_t.last (method) - last(self) -> int +ida_hexrays.bitset_t.itv(self, it: "iterator") -> int -ida_hexrays.bitset_t.shift_down (method) - shift_down(self, shift) - - @param shift: int +ida_hexrays.bitset_t.last(self) -> int + +ida_hexrays.bitset_t.shift_down(self, shift: int) -> None -ida_hexrays.bitset_t.sub (method) - sub(self, bit) -> bool +ida_hexrays.bitset_t.sub(self, *args) -> bool + This function has the following signatures: - @param bit: int + 0. sub(bit: int) -> bool + 1. sub(bit: int, width: int) -> bool + 2. sub(ml: const bitset_t &) -> bool - sub(self, bit, width) -> bool + # 0: sub(bit: int) -> bool - @param bit: int - @param width: int - sub(self, ml) -> bool + # 1: sub(bit: int, width: int) -> bool - @param ml: bitset_t const & - -ida_hexrays.bitset_t.swap (method) - swap(self, r) - @param r: bitset_t & + # 2: sub(ml: const bitset_t &) -> bool + +ida_hexrays.bitset_t.swap(self, r: "bitset_t") -> None -ida_hexrays.block_chains_begin (function) - block_chains_begin(set) -> block_chains_iterator_t +ida_hexrays.block_chains_begin(set: "block_chains_t") -> "block_chains_iterator_t" Get iterator pointing to the beginning of block_chains_t. - - @param set: (C++: const block_chains_t *) block_chains_t const * -ida_hexrays.block_chains_clear (function) - block_chains_clear(set) +ida_hexrays.block_chains_clear(set: "block_chains_t") -> None Clear block_chains_t. - - @param set: (C++: block_chains_t *) -ida_hexrays.block_chains_end (function) - block_chains_end(set) -> block_chains_iterator_t +ida_hexrays.block_chains_end(set: "block_chains_t") -> "block_chains_iterator_t" Get iterator pointing to the end of block_chains_t. - - @param set: (C++: const block_chains_t *) block_chains_t const * -ida_hexrays.block_chains_erase (function) - block_chains_erase(set, p) +ida_hexrays.block_chains_erase(set: "block_chains_t", p: "block_chains_iterator_t") -> None 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 (function) - block_chains_find(set, val) -> block_chains_iterator_t +ida_hexrays.block_chains_find(set: "block_chains_t", val: "chain_t") -> "block_chains_iterator_t" Find the specified key in set block_chains_t. - - @param set: (C++: const block_chains_t *) block_chains_t const * - @param val: (C++: const chain_t &) chain_t const & -ida_hexrays.block_chains_free (function) - block_chains_free(set) +ida_hexrays.block_chains_free(set: "block_chains_t") -> None Delete block_chains_t instance. - - @param set: (C++: block_chains_t *) -ida_hexrays.block_chains_get (function) - block_chains_get(p) -> chain_t +ida_hexrays.block_chains_get(p: "block_chains_iterator_t") -> "chain_t &" Get reference to the current set value. - - @param p: (C++: block_chains_iterator_t) -ida_hexrays.block_chains_insert (function) - block_chains_insert(set, val) -> block_chains_iterator_t +ida_hexrays.block_chains_insert(set: "block_chains_t", val: "chain_t") -> "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 &) chain_t const & -ida_hexrays.block_chains_iterator_t (class) - Proxy of C++ block_chains_iterator_t class. +ida_hexrays.block_chains_iterator_t -ida_hexrays.block_chains_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: block_chains_iterator_t const & +ida_hexrays.block_chains_iterator_t.__eq__(self, p: "block_chains_iterator_t") -> bool -ida_hexrays.block_chains_iterator_t.__init__ (method) - __init__(self) -> block_chains_iterator_t +ida_hexrays.block_chains_iterator_t.__init__(self) -ida_hexrays.block_chains_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: block_chains_iterator_t const & +ida_hexrays.block_chains_iterator_t.__ne__(self, p: "block_chains_iterator_t") -> bool -ida_hexrays.block_chains_new (function) - block_chains_new() -> block_chains_t +ida_hexrays.block_chains_new() -> "block_chains_t *" Create a new block_chains_t instance. -ida_hexrays.block_chains_next (function) - block_chains_next(p) -> block_chains_iterator_t +ida_hexrays.block_chains_next(p: "block_chains_iterator_t") -> "block_chains_iterator_t" Move to the next element. - - @param p: (C++: block_chains_iterator_t) -ida_hexrays.block_chains_prev (function) - block_chains_prev(p) -> block_chains_iterator_t +ida_hexrays.block_chains_prev(p: "block_chains_iterator_t") -> "block_chains_iterator_t" Move to the previous element. - - @param p: (C++: block_chains_iterator_t) -ida_hexrays.block_chains_size (function) - block_chains_size(set) -> size_t +ida_hexrays.block_chains_size(set: "block_chains_t") -> "size_t" Get size of block_chains_t. + +ida_hexrays.block_chains_t + +ida_hexrays.block_chains_t.__init__(self) + +ida_hexrays.block_chains_t._print(self) -> None + +ida_hexrays.block_chains_t.dstr(self) -> str + +ida_hexrays.block_chains_t.get_chain(self, *args) -> "chain_t *" + This function has the following signatures: - @param set: (C++: block_chains_t *) - -ida_hexrays.block_chains_t (class) - Proxy of C++ block_chains_t class. - -ida_hexrays.block_chains_t.__init__ (method) - __init__(self) -> block_chains_t - -ida_hexrays.block_chains_t._print (method) - _print(self) - -ida_hexrays.block_chains_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.block_chains_t.get_chain (method) - get_chain(self, k, width=1) -> chain_t + 0. get_chain(k: const voff_t &, width: int=1) -> const chain_t * + 1. get_chain(k: const voff_t &, width: int=1) -> chain_t * + 2. get_chain(ch: const chain_t &) -> const chain_t * + 3. get_chain(ch: const chain_t &) -> chain_t * - @param k: voff_t const & - @param width: int + # 0: get_chain(k: const voff_t &, width: int=1) -> const chain_t * - get_chain(self, ch) -> chain_t + Get chain for the specified value offset. + - @param ch: chain_t const & - -ida_hexrays.block_chains_t.get_reg_chain (method) - get_reg_chain(self, reg, width=1) -> chain_t + # 1: get_chain(k: const voff_t &, width: int=1) -> chain_t * - @param reg: mreg_t - @param width: int - -ida_hexrays.block_chains_t.get_stk_chain (method) - get_stk_chain(self, off, width=1) -> chain_t - @param off: sval_t - @param width: int - -ida_hexrays.block_chains_vec_t (class) - Proxy of C++ qvector< block_chains_t > class. - -ida_hexrays.block_chains_vec_t.__getitem__ (method) - __getitem__(self, i) -> block_chains_t + # 2: get_chain(ch: const chain_t &) -> const chain_t * - @param i: size_t - -ida_hexrays.block_chains_vec_t.__init__ (method) - __init__(self) -> block_chains_vec_t - __init__(self, x) -> block_chains_vec_t + Get chain similar to the specified chain + - @param x: qvector< block_chains_t > const & + # 3: get_chain(ch: const chain_t &) -> chain_t * -ida_hexrays.block_chains_vec_t.__len__ (method) - __len__(self) -> size_t +ida_hexrays.block_chains_t.get_reg_chain(self, reg: "mreg_t", width: int = 1) -> "chain_t *" + Get chain for the specified register + + @param reg: register number + @param width: size of register in bytes -ida_hexrays.block_chains_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: block_chains_t const & +ida_hexrays.block_chains_t.get_stk_chain(self, off: int, width: int = 1) -> "chain_t *" + Get chain for the specified stack offset + + @param off: stack offset + @param width: size of stack value in bytes -ida_hexrays.block_chains_vec_t.at (method) - at(self, _idx) -> block_chains_t - - @param _idx: size_t +ida_hexrays.block_chains_vec_t -ida_hexrays.block_chains_vec_t.begin (method) - begin(self) -> block_chains_t +ida_hexrays.block_chains_vec_t.__getitem__(self, i: "size_t") -> "block_chains_t const &" -ida_hexrays.block_chains_vec_t.capacity (method) - capacity(self) -> size_t +ida_hexrays.block_chains_vec_t.__init__(self, *args) -ida_hexrays.block_chains_vec_t.clear (method) - clear(self) +ida_hexrays.block_chains_vec_t.__len__(self) -> "size_t" -ida_hexrays.block_chains_vec_t.empty (method) - empty(self) -> bool +ida_hexrays.block_chains_vec_t.__setitem__(self, i: "size_t", v: "block_chains_t") -> None -ida_hexrays.block_chains_vec_t.end (method) - end(self) -> block_chains_t +ida_hexrays.block_chains_vec_t.append(self, x: "block_chains_t") -> None -ida_hexrays.block_chains_vec_t.erase (method) - erase(self, it) -> block_chains_t - - @param it: qvector< block_chains_t >::iterator - - erase(self, first, last) -> block_chains_t - - @param first: qvector< block_chains_t >::iterator - @param last: qvector< block_chains_t >::iterator +ida_hexrays.block_chains_vec_t.at(self, _idx: "size_t") -> "block_chains_t const &" -ida_hexrays.block_chains_vec_t.extract (method) - extract(self) -> block_chains_t +ida_hexrays.block_chains_vec_t.begin(self, *args) -> "qvector< block_chains_t >::const_iterator" -ida_hexrays.block_chains_vec_t.grow (method) - grow(self, x=block_chains_t()) - - @param x: block_chains_t const & +ida_hexrays.block_chains_vec_t.capacity(self) -> "size_t" -ida_hexrays.block_chains_vec_t.inject (method) - inject(self, s, len) - - @param s: block_chains_t * - @param len: size_t +ida_hexrays.block_chains_vec_t.clear(self) -> None -ida_hexrays.block_chains_vec_t.insert (method) - insert(self, it, x) -> block_chains_t - - @param it: qvector< block_chains_t >::iterator - @param x: block_chains_t const & +ida_hexrays.block_chains_vec_t.empty(self) -> bool -ida_hexrays.block_chains_vec_t.pop_back (method) - pop_back(self) +ida_hexrays.block_chains_vec_t.end(self, *args) -> "qvector< block_chains_t >::const_iterator" -ida_hexrays.block_chains_vec_t.push_back (method) - push_back(self, x) - - @param x: block_chains_t const & - - push_back(self) -> block_chains_t +ida_hexrays.block_chains_vec_t.erase(self, *args) -> "qvector< block_chains_t >::iterator" -ida_hexrays.block_chains_vec_t.qclear (method) - qclear(self) +ida_hexrays.block_chains_vec_t.extend(self, x: "block_chains_vec_t") -> None -ida_hexrays.block_chains_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_hexrays.block_chains_vec_t.extract(self) -> "block_chains_t *" -ida_hexrays.block_chains_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: block_chains_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_hexrays.block_chains_vec_t.grow(self, *args) -> None -ida_hexrays.block_chains_vec_t.size (method) - size(self) -> size_t +ida_hexrays.block_chains_vec_t.inject(self, s: "block_chains_t", len: "size_t") -> None -ida_hexrays.block_chains_vec_t.swap (method) - swap(self, r) - - @param r: qvector< block_chains_t > & +ida_hexrays.block_chains_vec_t.insert(self, it: "block_chains_t", x: "block_chains_t") -> "qvector< block_chains_t >::iterator" -ida_hexrays.block_chains_vec_t.truncate (method) - truncate(self) +ida_hexrays.block_chains_vec_t.pop_back(self) -> None -ida_hexrays.boundaries_begin (function) - boundaries_begin(map) -> boundaries_iterator_t +ida_hexrays.block_chains_vec_t.push_back(self, *args) -> "block_chains_t &" + +ida_hexrays.block_chains_vec_t.qclear(self) -> None + +ida_hexrays.block_chains_vec_t.reserve(self, cnt: "size_t") -> None + +ida_hexrays.block_chains_vec_t.resize(self, *args) -> None + +ida_hexrays.block_chains_vec_t.size(self) -> "size_t" + +ida_hexrays.block_chains_vec_t.swap(self, r: "block_chains_vec_t") -> None + +ida_hexrays.block_chains_vec_t.truncate(self) -> None + +ida_hexrays.boundaries_begin(map: "boundaries_t") -> "boundaries_iterator_t" Get iterator pointing to the beginning of boundaries_t. - - @param map: (C++: const boundaries_t *) boundaries_t const * -ida_hexrays.boundaries_clear (function) - boundaries_clear(map) +ida_hexrays.boundaries_clear(map: "boundaries_t") -> None Clear boundaries_t. - - @param map: (C++: boundaries_t *) -ida_hexrays.boundaries_end (function) - boundaries_end(map) -> boundaries_iterator_t +ida_hexrays.boundaries_end(map: "boundaries_t") -> "boundaries_iterator_t" Get iterator pointing to the end of boundaries_t. - - @param map: (C++: const boundaries_t *) boundaries_t const * -ida_hexrays.boundaries_erase (function) - boundaries_erase(map, p) +ida_hexrays.boundaries_erase(map: "boundaries_t", p: "boundaries_iterator_t") -> None Erase current element from boundaries_t. - - @param map: (C++: boundaries_t *) - @param p: (C++: boundaries_iterator_t) -ida_hexrays.boundaries_find (function) - boundaries_find(map, key) -> boundaries_iterator_t +ida_hexrays.boundaries_find(map: "boundaries_t", key: "cinsn_t") -> "boundaries_iterator_t" Find the specified key in boundaries_t. - - @param map: (C++: const boundaries_t *) boundaries_t const * - @param key: (C++: const cinsn_t *&) cinsn_t const * -ida_hexrays.boundaries_first (function) - boundaries_first(p) -> cinsn_t +ida_hexrays.boundaries_first(p: "boundaries_iterator_t") -> "cinsn_t *const &" Get reference to the current map key. - - @param p: (C++: boundaries_iterator_t) -ida_hexrays.boundaries_free (function) - boundaries_free(map) +ida_hexrays.boundaries_free(map: "boundaries_t") -> None Delete boundaries_t instance. - - @param map: (C++: boundaries_t *) -ida_hexrays.boundaries_insert (function) - boundaries_insert(map, key, val) -> boundaries_iterator_t +ida_hexrays.boundaries_insert(map: "boundaries_t", key: "cinsn_t", val: "rangeset_t") -> "boundaries_iterator_t" Insert new (cinsn_t *, rangeset_t) pair into boundaries_t. - - @param map: (C++: boundaries_t *) - @param key: (C++: const cinsn_t *&) cinsn_t const * - @param val: (C++: const rangeset_t &) rangeset_t const & -ida_hexrays.boundaries_iterator_t (class) - Proxy of C++ boundaries_iterator_t class. +ida_hexrays.boundaries_iterator_t -ida_hexrays.boundaries_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: boundaries_iterator_t const & +ida_hexrays.boundaries_iterator_t.__eq__(self, p: "boundaries_iterator_t") -> bool -ida_hexrays.boundaries_iterator_t.__init__ (method) - __init__(self) -> boundaries_iterator_t +ida_hexrays.boundaries_iterator_t.__init__(self) -ida_hexrays.boundaries_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: boundaries_iterator_t const & +ida_hexrays.boundaries_iterator_t.__ne__(self, p: "boundaries_iterator_t") -> bool -ida_hexrays.boundaries_new (function) - boundaries_new() -> boundaries_t +ida_hexrays.boundaries_new() -> "boundaries_t *" Create a new boundaries_t instance. -ida_hexrays.boundaries_next (function) - boundaries_next(p) -> boundaries_iterator_t +ida_hexrays.boundaries_next(p: "boundaries_iterator_t") -> "boundaries_iterator_t" Move to the next element. - - @param p: (C++: boundaries_iterator_t) -ida_hexrays.boundaries_prev (function) - boundaries_prev(p) -> boundaries_iterator_t +ida_hexrays.boundaries_prev(p: "boundaries_iterator_t") -> "boundaries_iterator_t" Move to the previous element. - - @param p: (C++: boundaries_iterator_t) -ida_hexrays.boundaries_second (function) - boundaries_second(p) -> rangeset_t +ida_hexrays.boundaries_second(p: "boundaries_iterator_t") -> "rangeset_t &" Get reference to the current map value. - - @param p: (C++: boundaries_iterator_t) -ida_hexrays.boundaries_size (function) - boundaries_size(map) -> size_t +ida_hexrays.boundaries_size(map: "boundaries_t") -> "size_t" Get size of boundaries_t. - - @param map: (C++: boundaries_t *) -ida_hexrays.boundaries_t (class) - Proxy of C++ std::map< cinsn_t *,rangeset_t > class. +ida_hexrays.boundaries_t -ida_hexrays.boundaries_t.__init__ (method) - __init__(self) -> boundaries_t +ida_hexrays.boundaries_t.__init__(self) -ida_hexrays.boundaries_t.at (method) - at(self, _Keyval) -> rangeset_t - - @param _Keyval: cinsn_t *const & +ida_hexrays.boundaries_t.at(self, _Keyval: "cinsn_t") -> "rangeset_t &" -ida_hexrays.boundaries_t.size (method) - size(self) -> size_t +ida_hexrays.boundaries_t.size(self) -> "size_t" -ida_hexrays.call_helper (function) +ida_hexrays.call_helper(rettype, args, *rest) Create a helper call. -ida_hexrays.carg_t (class) - Proxy of C++ carg_t class. +ida_hexrays.carg_t -ida_hexrays.carg_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: carg_t const & +ida_hexrays.carg_t.__eq__(self, r: "carg_t") -> bool -ida_hexrays.carg_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: carg_t const & +ida_hexrays.carg_t.__ge__(self, r: "carg_t") -> bool -ida_hexrays.carg_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: carg_t const & +ida_hexrays.carg_t.__gt__(self, r: "carg_t") -> bool -ida_hexrays.carg_t.__init__ (method) - __init__(self) -> carg_t +ida_hexrays.carg_t.__init__(self) -ida_hexrays.carg_t.__le__ (method) - __le__(self, r) -> bool - - @param r: carg_t const & +ida_hexrays.carg_t.__le__(self, r: "carg_t") -> bool -ida_hexrays.carg_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: carg_t const & +ida_hexrays.carg_t.__lt__(self, r: "carg_t") -> bool -ida_hexrays.carg_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: carg_t const & +ida_hexrays.carg_t.__ne__(self, r: "carg_t") -> bool -ida_hexrays.carg_t.compare (method) - compare(self, r) -> int - - @param r: carg_t const & +ida_hexrays.carg_t.compare(self, r: "carg_t") -> int -ida_hexrays.carg_t.consume_cexpr (method) - consume_cexpr(self, e) - - @param e: cexpr_t * +ida_hexrays.carg_t.consume_cexpr(self, e: "cexpr_t") -> None -ida_hexrays.carg_t.formal_type (variable) +ida_hexrays.carg_t.formal_type formal parameter type (if known) -ida_hexrays.carg_t.is_vararg (variable) +ida_hexrays.carg_t.is_vararg is a vararg (matches ...) -ida_hexrays.carglist_t (class) - Proxy of C++ carglist_t class. +ida_hexrays.carglist_t -ida_hexrays.carglist_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: carglist_t const & +ida_hexrays.carglist_t.__eq__(self, r: "carglist_t") -> bool -ida_hexrays.carglist_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: carglist_t const & +ida_hexrays.carglist_t.__ge__(self, r: "carglist_t") -> bool -ida_hexrays.carglist_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: carglist_t const & +ida_hexrays.carglist_t.__gt__(self, r: "carglist_t") -> bool -ida_hexrays.carglist_t.__init__ (method) - __init__(self) -> carglist_t - __init__(self, ftype, fl=0) -> carglist_t - - @param ftype: tinfo_t const & - @param fl: int +ida_hexrays.carglist_t.__init__(self, *args) -ida_hexrays.carglist_t.__le__ (method) - __le__(self, r) -> bool - - @param r: carglist_t const & +ida_hexrays.carglist_t.__le__(self, r: "carglist_t") -> bool -ida_hexrays.carglist_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: carglist_t const & +ida_hexrays.carglist_t.__lt__(self, r: "carglist_t") -> bool -ida_hexrays.carglist_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: carglist_t const & +ida_hexrays.carglist_t.__ne__(self, r: "carglist_t") -> bool -ida_hexrays.carglist_t.compare (method) - compare(self, r) -> int - - @param r: carglist_t const & +ida_hexrays.carglist_t.compare(self, r: "carglist_t") -> int -ida_hexrays.carglist_t.flags (variable) +ida_hexrays.carglist_t.flags call flags -ida_hexrays.carglist_t.functype (variable) +ida_hexrays.carglist_t.functype function object type -ida_hexrays.casm_t (class) - Proxy of C++ casm_t class. +ida_hexrays.casm_t -ida_hexrays.casm_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: casm_t const & +ida_hexrays.casm_t.__eq__(self, r: "casm_t") -> bool -ida_hexrays.casm_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: casm_t const & +ida_hexrays.casm_t.__ge__(self, r: "casm_t") -> bool -ida_hexrays.casm_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: casm_t const & +ida_hexrays.casm_t.__gt__(self, r: "casm_t") -> bool -ida_hexrays.casm_t.__init__ (method) - __init__(self, ea) -> casm_t - - @param ea: ea_t - - __init__(self, r) -> casm_t - - @param r: casm_t const & +ida_hexrays.casm_t.__init__(self, *args) -ida_hexrays.casm_t.__le__ (method) - __le__(self, r) -> bool - - @param r: casm_t const & +ida_hexrays.casm_t.__le__(self, r: "casm_t") -> bool -ida_hexrays.casm_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: casm_t const & +ida_hexrays.casm_t.__lt__(self, r: "casm_t") -> bool -ida_hexrays.casm_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: casm_t const & +ida_hexrays.casm_t.__ne__(self, r: "casm_t") -> bool -ida_hexrays.casm_t.compare (method) - compare(self, r) -> int - - @param r: casm_t const & +ida_hexrays.casm_t.compare(self, r: "casm_t") -> int -ida_hexrays.casm_t.one_insn (method) - one_insn(self) -> bool +ida_hexrays.casm_t.one_insn(self) -> bool -ida_hexrays.cblock_t (class) - Proxy of C++ cblock_t class. +ida_hexrays.catchexpr_t -ida_hexrays.cblock_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cblock_t const & +ida_hexrays.catchexpr_t.__eq__(self, r: "catchexpr_t") -> bool -ida_hexrays.cblock_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cblock_t const & +ida_hexrays.catchexpr_t.__ge__(self, r: "catchexpr_t") -> bool -ida_hexrays.cblock_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cblock_t const & +ida_hexrays.catchexpr_t.__gt__(self, r: "catchexpr_t") -> bool -ida_hexrays.cblock_t.__init__ (method) - __init__(self) -> cblock_t +ida_hexrays.catchexpr_t.__init__(self) -ida_hexrays.cblock_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cblock_t const & +ida_hexrays.catchexpr_t.__le__(self, r: "catchexpr_t") -> bool -ida_hexrays.cblock_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cblock_t const & +ida_hexrays.catchexpr_t.__lt__(self, r: "catchexpr_t") -> bool -ida_hexrays.cblock_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cblock_t const & +ida_hexrays.catchexpr_t.__ne__(self, r: "catchexpr_t") -> bool -ida_hexrays.cblock_t._deregister (method) - _deregister(self) +ida_hexrays.catchexpr_t.compare(self, r: "catchexpr_t") -> int -ida_hexrays.cblock_t.compare (method) - compare(self, r) -> int - - @param r: cblock_t const & +ida_hexrays.catchexpr_t.fake_type + if not empty, type of the caught object. ideally, obj.type should be enough. however, in some cases the detailed type info is not available. + -ida_hexrays.ccase_t (class) - Proxy of C++ ccase_t class. +ida_hexrays.catchexpr_t.is_catch_all(self) -> bool -ida_hexrays.ccase_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: ccase_t const & +ida_hexrays.catchexpr_t.obj + the caught object. if obj.op==cot_empty, no object. ideally, obj.op==cot_var + -ida_hexrays.ccase_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: ccase_t const & +ida_hexrays.catchexpr_t.swap(self, r: "catchexpr_t") -> None -ida_hexrays.ccase_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: ccase_t const & +ida_hexrays.cblock_pos_t -ida_hexrays.ccase_t.__init__ (method) - __init__(self) -> ccase_t +ida_hexrays.cblock_pos_t.__init__(self) -ida_hexrays.ccase_t.__le__ (method) - __le__(self, r) -> bool - - @param r: ccase_t const & +ida_hexrays.cblock_pos_t.insn(self) -> "cinsn_t *" -ida_hexrays.ccase_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: ccase_t const & +ida_hexrays.cblock_pos_t.is_first_insn(self) -> bool -ida_hexrays.ccase_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: ccase_t const & +ida_hexrays.cblock_pos_t.prev_insn(self) -> "cinsn_t *" -ida_hexrays.ccase_t.compare (method) - compare(self, r) -> int - - @param r: ccase_t const & +ida_hexrays.cblock_posvec_t -ida_hexrays.ccase_t.size (method) - size(self) -> size_t +ida_hexrays.cblock_posvec_t.__getitem__(self, i: "size_t") -> "cblock_pos_t const &" -ida_hexrays.ccase_t.value (method) - value(self, i) -> uint64 const & - - @param i: int +ida_hexrays.cblock_posvec_t.__init__(self, *args) -ida_hexrays.ccase_t.values (variable) - List of case values. if empty, then 'default' case +ida_hexrays.cblock_posvec_t.__len__(self) -> "size_t" -ida_hexrays.ccases_t (class) - Proxy of C++ ccases_t class. +ida_hexrays.cblock_posvec_t.__setitem__(self, i: "size_t", v: "cblock_pos_t") -> None -ida_hexrays.ccases_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: ccases_t const & +ida_hexrays.cblock_posvec_t.append(self, x: "cblock_pos_t") -> None -ida_hexrays.ccases_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: ccases_t const & +ida_hexrays.cblock_posvec_t.at(self, _idx: "size_t") -> "cblock_pos_t const &" -ida_hexrays.ccases_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: ccases_t const & +ida_hexrays.cblock_posvec_t.begin(self, *args) -> "qvector< cblock_pos_t >::const_iterator" -ida_hexrays.ccases_t.__init__ (method) - __init__(self) -> ccases_t +ida_hexrays.cblock_posvec_t.capacity(self) -> "size_t" -ida_hexrays.ccases_t.__le__ (method) - __le__(self, r) -> bool - - @param r: ccases_t const & +ida_hexrays.cblock_posvec_t.clear(self) -> None -ida_hexrays.ccases_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: ccases_t const & +ida_hexrays.cblock_posvec_t.empty(self) -> bool -ida_hexrays.ccases_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: ccases_t const & +ida_hexrays.cblock_posvec_t.end(self, *args) -> "qvector< cblock_pos_t >::const_iterator" -ida_hexrays.ccases_t.compare (method) - compare(self, r) -> int - - @param r: ccases_t const & +ida_hexrays.cblock_posvec_t.erase(self, *args) -> "qvector< cblock_pos_t >::iterator" -ida_hexrays.cdg_insn_iterator_t (class) - Proxy of C++ cdg_insn_iterator_t class. +ida_hexrays.cblock_posvec_t.extend(self, x: "cblock_posvec_t") -> None -ida_hexrays.cdg_insn_iterator_t.__init__ (method) - __init__(self, mba_) -> cdg_insn_iterator_t - - @param mba_: mba_t const * - - __init__(self, r) -> cdg_insn_iterator_t - - @param r: cdg_insn_iterator_t const & +ida_hexrays.cblock_posvec_t.extract(self) -> "cblock_pos_t *" -ida_hexrays.cdg_insn_iterator_t.dslot_with_xrefs (method) - dslot_with_xrefs(self) -> bool +ida_hexrays.cblock_posvec_t.grow(self, *args) -> None -ida_hexrays.cdg_insn_iterator_t.has_dslot (method) - has_dslot(self) -> bool +ida_hexrays.cblock_posvec_t.inject(self, s: "cblock_pos_t", len: "size_t") -> None -ida_hexrays.cdg_insn_iterator_t.is_severed_dslot (method) - is_severed_dslot(self) -> bool +ida_hexrays.cblock_posvec_t.insert(self, it: "cblock_pos_t", x: "cblock_pos_t") -> "qvector< cblock_pos_t >::iterator" -ida_hexrays.cdg_insn_iterator_t.next (method) - next(self, ins) -> merror_t - - @param ins: insn_t * +ida_hexrays.cblock_posvec_t.pop_back(self) -> None -ida_hexrays.cdg_insn_iterator_t.ok (method) - ok(self) -> bool +ida_hexrays.cblock_posvec_t.push_back(self, *args) -> "cblock_pos_t &" -ida_hexrays.cdg_insn_iterator_t.start (method) - start(self, rng) - - @param rng: range_t const & +ida_hexrays.cblock_posvec_t.qclear(self) -> None -ida_hexrays.cdo_t (class) - Proxy of C++ cdo_t class. +ida_hexrays.cblock_posvec_t.reserve(self, cnt: "size_t") -> None -ida_hexrays.cdo_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cdo_t const & +ida_hexrays.cblock_posvec_t.resize(self, *args) -> None -ida_hexrays.cdo_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cdo_t const & +ida_hexrays.cblock_posvec_t.size(self) -> "size_t" -ida_hexrays.cdo_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cdo_t const & +ida_hexrays.cblock_posvec_t.swap(self, r: "cblock_posvec_t") -> None -ida_hexrays.cdo_t.__init__ (method) - __init__(self) -> cdo_t +ida_hexrays.cblock_posvec_t.truncate(self) -> None -ida_hexrays.cdo_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cdo_t const & +ida_hexrays.cblock_t -ida_hexrays.cdo_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cdo_t const & +ida_hexrays.cblock_t.__eq__(self, r: "cblock_t") -> bool -ida_hexrays.cdo_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cdo_t const & +ida_hexrays.cblock_t.__ge__(self, r: "cblock_t") -> bool -ida_hexrays.cdo_t.compare (method) - compare(self, r) -> int - - @param r: cdo_t const & +ida_hexrays.cblock_t.__gt__(self, r: "cblock_t") -> bool -ida_hexrays.ceinsn_t (class) - Proxy of C++ ceinsn_t class. +ida_hexrays.cblock_t.__init__(self) -ida_hexrays.ceinsn_t.__init__ (method) - __init__(self) -> ceinsn_t +ida_hexrays.cblock_t.__le__(self, r: "cblock_t") -> bool -ida_hexrays.ceinsn_t.expr (variable) +ida_hexrays.cblock_t.__lt__(self, r: "cblock_t") -> bool + +ida_hexrays.cblock_t.__ne__(self, r: "cblock_t") -> bool + +ida_hexrays.cblock_t._deregister(self) -> None + +ida_hexrays.cblock_t.compare(self, r: "cblock_t") -> int + +ida_hexrays.ccase_t + +ida_hexrays.ccase_t.__eq__(self, r: "ccase_t") -> bool + +ida_hexrays.ccase_t.__ge__(self, r: "ccase_t") -> bool + +ida_hexrays.ccase_t.__gt__(self, r: "ccase_t") -> bool + +ida_hexrays.ccase_t.__init__(self) + +ida_hexrays.ccase_t.__le__(self, r: "ccase_t") -> bool + +ida_hexrays.ccase_t.__lt__(self, r: "ccase_t") -> bool + +ida_hexrays.ccase_t.__ne__(self, r: "ccase_t") -> bool + +ida_hexrays.ccase_t.compare(self, r: "ccase_t") -> int + +ida_hexrays.ccase_t.size(self) -> "size_t" + +ida_hexrays.ccase_t.value(self, i: int) -> "uint64 const &" + +ida_hexrays.ccase_t.values + List of case values. if empty, then 'default' case + + +ida_hexrays.ccases_t + +ida_hexrays.ccases_t.__eq__(self, r: "ccases_t") -> bool + +ida_hexrays.ccases_t.__ge__(self, r: "ccases_t") -> bool + +ida_hexrays.ccases_t.__gt__(self, r: "ccases_t") -> bool + +ida_hexrays.ccases_t.__init__(self) + +ida_hexrays.ccases_t.__le__(self, r: "ccases_t") -> bool + +ida_hexrays.ccases_t.__lt__(self, r: "ccases_t") -> bool + +ida_hexrays.ccases_t.__ne__(self, r: "ccases_t") -> bool + +ida_hexrays.ccases_t.compare(self, r: "ccases_t") -> int + +ida_hexrays.ccatch_t + +ida_hexrays.ccatch_t.__eq__(self, r: "ccatch_t") -> bool + +ida_hexrays.ccatch_t.__ge__(self, r: "ccatch_t") -> bool + +ida_hexrays.ccatch_t.__gt__(self, r: "ccatch_t") -> bool + +ida_hexrays.ccatch_t.__init__(self, *args, **kwargs) + +ida_hexrays.ccatch_t.__le__(self, r: "ccatch_t") -> bool + +ida_hexrays.ccatch_t.__lt__(self, r: "ccatch_t") -> bool + +ida_hexrays.ccatch_t.__ne__(self, r: "ccatch_t") -> bool + +ida_hexrays.ccatch_t.compare(self, r: "ccatch_t") -> int + +ida_hexrays.ccatch_t.is_catch_all(self) -> bool + +ida_hexrays.ccatch_t.swap(self, r: "ccatch_t") -> None + +ida_hexrays.cdg_insn_iterator_t + +ida_hexrays.cdg_insn_iterator_t.__init__(self, *args) + +ida_hexrays.cdg_insn_iterator_t.dslot_with_xrefs(self) -> bool + +ida_hexrays.cdg_insn_iterator_t.has_dslot(self) -> bool + +ida_hexrays.cdg_insn_iterator_t.is_severed_dslot(self) -> bool + +ida_hexrays.cdg_insn_iterator_t.next(self, ins: "insn_t *") -> "merror_t" + +ida_hexrays.cdg_insn_iterator_t.ok(self) -> bool + +ida_hexrays.cdg_insn_iterator_t.start(self, rng: "range_t") -> None + +ida_hexrays.cdo_t + +ida_hexrays.cdo_t.__eq__(self, r: "cdo_t") -> bool + +ida_hexrays.cdo_t.__ge__(self, r: "cdo_t") -> bool + +ida_hexrays.cdo_t.__gt__(self, r: "cdo_t") -> bool + +ida_hexrays.cdo_t.__init__(self) + +ida_hexrays.cdo_t.__le__(self, r: "cdo_t") -> bool + +ida_hexrays.cdo_t.__lt__(self, r: "cdo_t") -> bool + +ida_hexrays.cdo_t.__ne__(self, r: "cdo_t") -> bool + +ida_hexrays.cdo_t.compare(self, r: "cdo_t") -> int + +ida_hexrays.ceinsn_t + +ida_hexrays.ceinsn_t.__init__(self) + +ida_hexrays.ceinsn_t.expr Expression of the statement. -ida_hexrays.cexpr_operands (function) +ida_hexrays.cexpr_operands(self) return a dictionary with the operands of a cexpr_t. -ida_hexrays.cexpr_t (class) - Proxy of C++ cexpr_t class. +ida_hexrays.cexpr_t -ida_hexrays.cexpr_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cexpr_t const & +ida_hexrays.cexpr_t.__eq__(self, r: "cexpr_t") -> bool -ida_hexrays.cexpr_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cexpr_t const & +ida_hexrays.cexpr_t.__ge__(self, r: "cexpr_t") -> bool -ida_hexrays.cexpr_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cexpr_t const & +ida_hexrays.cexpr_t.__gt__(self, r: "cexpr_t") -> bool -ida_hexrays.cexpr_t.__init__ (method) - __init__(self) -> cexpr_t - __init__(self, cexpr_op, _x, _y=None, _z=None) -> cexpr_t - - @param cexpr_op: enum ctype_t - @param _x: cexpr_t * - @param _y: cexpr_t * - @param _z: cexpr_t * - - __init__(self, r) -> cexpr_t - - @param r: cexpr_t const & +ida_hexrays.cexpr_t.__init__(self, *args) -ida_hexrays.cexpr_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cexpr_t const & +ida_hexrays.cexpr_t.__le__(self, r: "cexpr_t") -> bool -ida_hexrays.cexpr_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cexpr_t const & +ida_hexrays.cexpr_t.__lt__(self, r: "cexpr_t") -> bool -ida_hexrays.cexpr_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cexpr_t const & +ida_hexrays.cexpr_t.__ne__(self, r: "cexpr_t") -> bool -ida_hexrays.cexpr_t._deregister (method) - _deregister(self) +ida_hexrays.cexpr_t._deregister(self) -> None -ida_hexrays.cexpr_t._get_a (method) - _get_a(self) -> carglist_t +ida_hexrays.cexpr_t._get_a(self) -> "carglist_t *" -ida_hexrays.cexpr_t._get_fpc (method) - _get_fpc(self) -> fnumber_t +ida_hexrays.cexpr_t._get_fpc(self) -> "fnumber_t *" -ida_hexrays.cexpr_t._get_helper (method) - _get_helper(self) -> char const * +ida_hexrays.cexpr_t._get_helper(self) -> str -ida_hexrays.cexpr_t._get_insn (method) - _get_insn(self) -> cinsn_t +ida_hexrays.cexpr_t._get_insn(self) -> "cinsn_t *" -ida_hexrays.cexpr_t._get_m (method) - _get_m(self) -> int +ida_hexrays.cexpr_t._get_m(self) -> int -ida_hexrays.cexpr_t._get_n (method) - _get_n(self) -> cnumber_t +ida_hexrays.cexpr_t._get_n(self) -> "cnumber_t *" -ida_hexrays.cexpr_t._get_obj_ea (method) - _get_obj_ea(self) -> ea_t +ida_hexrays.cexpr_t._get_obj_ea(self) -> ida_idaapi.ea_t -ida_hexrays.cexpr_t._get_ptrsize (method) - _get_ptrsize(self) -> int +ida_hexrays.cexpr_t._get_ptrsize(self) -> int -ida_hexrays.cexpr_t._get_refwidth (method) - _get_refwidth(self) -> int +ida_hexrays.cexpr_t._get_refwidth(self) -> int -ida_hexrays.cexpr_t._get_string (method) - _get_string(self) -> char const * +ida_hexrays.cexpr_t._get_string(self) -> str -ida_hexrays.cexpr_t._get_x (method) - _get_x(self) -> cexpr_t +ida_hexrays.cexpr_t._get_x(self) -> "cexpr_t *" -ida_hexrays.cexpr_t._get_y (method) - _get_y(self) -> cexpr_t +ida_hexrays.cexpr_t._get_y(self) -> "cexpr_t *" -ida_hexrays.cexpr_t._get_z (method) - _get_z(self) -> cexpr_t +ida_hexrays.cexpr_t._get_z(self) -> "cexpr_t *" -ida_hexrays.cexpr_t._register (method) - _register(self) +ida_hexrays.cexpr_t._register(self) -> None -ida_hexrays.cexpr_t._replace_by (method) - _replace_by(self, r) - - Parameters - ---------- - r: cexpr_t * +ida_hexrays.cexpr_t._replace_by(self, r: "cexpr_t") -> None -ida_hexrays.cexpr_t._set_a (method) - _set_a(self, _v) - - Parameters - ---------- - _v: carglist_t * +ida_hexrays.cexpr_t._set_a(self, _v: "carglist_t") -> None -ida_hexrays.cexpr_t._set_fpc (method) - _set_fpc(self, _v) - - Parameters - ---------- - _v: fnumber_t * +ida_hexrays.cexpr_t._set_fpc(self, _v: "fnumber_t") -> None -ida_hexrays.cexpr_t._set_helper (method) - _set_helper(self, _v) - - Parameters - ---------- - _v: char const * +ida_hexrays.cexpr_t._set_helper(self, _v: str) -> None -ida_hexrays.cexpr_t._set_insn (method) - _set_insn(self, _v) - - Parameters - ---------- - _v: cinsn_t * +ida_hexrays.cexpr_t._set_insn(self, _v: "cinsn_t") -> None -ida_hexrays.cexpr_t._set_m (method) - _set_m(self, _v) - - Parameters - ---------- - _v: int +ida_hexrays.cexpr_t._set_m(self, _v: int) -> None -ida_hexrays.cexpr_t._set_n (method) - _set_n(self, _v) - - Parameters - ---------- - _v: cnumber_t * +ida_hexrays.cexpr_t._set_n(self, _v: "cnumber_t") -> None -ida_hexrays.cexpr_t._set_obj_ea (method) - _set_obj_ea(self, _v) - - Parameters - ---------- - _v: ea_t +ida_hexrays.cexpr_t._set_obj_ea(self, _v: ida_idaapi.ea_t) -> None -ida_hexrays.cexpr_t._set_ptrsize (method) - _set_ptrsize(self, _v) - - Parameters - ---------- - _v: int +ida_hexrays.cexpr_t._set_ptrsize(self, _v: int) -> None -ida_hexrays.cexpr_t._set_refwidth (method) - _set_refwidth(self, _v) - - Parameters - ---------- - _v: int +ida_hexrays.cexpr_t._set_refwidth(self, _v: int) -> None -ida_hexrays.cexpr_t._set_string (method) - _set_string(self, _v) - - Parameters - ---------- - _v: char const * +ida_hexrays.cexpr_t._set_string(self, _v: str) -> None -ida_hexrays.cexpr_t._set_x (method) - _set_x(self, _v) - - Parameters - ---------- - _v: cexpr_t * +ida_hexrays.cexpr_t._set_x(self, _v: "cexpr_t") -> None -ida_hexrays.cexpr_t._set_y (method) - _set_y(self, _v) - - Parameters - ---------- - _v: cexpr_t * +ida_hexrays.cexpr_t._set_y(self, _v: "cexpr_t") -> None -ida_hexrays.cexpr_t._set_z (method) - _set_z(self, _v) - - Parameters - ---------- - _v: cexpr_t * +ida_hexrays.cexpr_t._set_z(self, _v: "cexpr_t") -> None -ida_hexrays.cexpr_t.a (variable) +ida_hexrays.cexpr_t.a argument list (used for cot_call) -ida_hexrays.cexpr_t.assign (method) - assign(self, r) -> cexpr_t - - @param r: cexpr_t const & +ida_hexrays.cexpr_t.assign(self, r: "cexpr_t") -> "cexpr_t &" -ida_hexrays.cexpr_t.calc_type (method) - calc_type(self, recursive) - Calculate the type of the expression. Use this function to calculate the - expression type when a new expression is built - - @param recursive: (C++: bool) if true, types of all children expression will be calculated - before calculating our type +ida_hexrays.cexpr_t.calc_type(self, recursive: bool) -> None + Calculate the type of the expression. Use this function to calculate the expression type when a new expression is built + + @param recursive: if true, types of all children expression will be calculated before calculating our type -ida_hexrays.cexpr_t.cleanup (method) - cleanup(self) - Cleanup the expression. This function properly deletes all children and sets the - item type to cot_empty. +ida_hexrays.cexpr_t.cleanup(self) -> None + Cleanup the expression. This function properly deletes all children and sets the item type to cot_empty. + -ida_hexrays.cexpr_t.compare (method) - compare(self, r) -> int - - @param r: cexpr_t const & +ida_hexrays.cexpr_t.compare(self, r: "cexpr_t") -> int -ida_hexrays.cexpr_t.contains_comma (method) - contains_comma(self, times=1) -> bool +ida_hexrays.cexpr_t.contains_comma(self, times: int = 1) -> bool Does the expression contain a comma operator? - - @param times: (C++: int) -ida_hexrays.cexpr_t.contains_comma_or_insn_or_label (method) - contains_comma_or_insn_or_label(self, maxcommas=1) -> bool - Does the expression contain a comma operator or an embedded statement operator - or a label? - - @param maxcommas: (C++: int) +ida_hexrays.cexpr_t.contains_comma_or_insn_or_label(self, maxcommas: int = 1) -> bool + Does the expression contain a comma operator or an embedded statement operator or a label? -ida_hexrays.cexpr_t.contains_insn (method) - contains_insn(self, times=1) -> bool +ida_hexrays.cexpr_t.contains_insn(self, times: int = 1) -> bool Does the expression contain an embedded statement operator? - - @param times: (C++: int) -ida_hexrays.cexpr_t.contains_insn_or_label (method) - contains_insn_or_label(self) -> bool +ida_hexrays.cexpr_t.contains_insn_or_label(self) -> bool Does the expression contain an embedded statement operator or a label? -ida_hexrays.cexpr_t.contains_operator (method) - contains_operator(self, needed_op, times=1) -> bool - Check if the expression contains the specified operator. - - @param needed_op: (C++: ctype_t) operator code to search for - @param times: (C++: int) how many times the operator code should be present - @return: true if the expression has at least TIMES children with NEEDED_OP +ida_hexrays.cexpr_t.contains_operator(self, needed_op: "ctype_t", times: int = 1) -> bool + Check if the expression contains the specified operator. + + @param needed_op: operator code to search for + @param times: how many times the operator code should be present + @returns true if the expression has at least TIMES children with NEEDED_OP -ida_hexrays.cexpr_t.cpadone (method) - cpadone(self) -> bool +ida_hexrays.cexpr_t.cpadone(self) -> bool Pointer arithmetic correction done for this expression? -ida_hexrays.cexpr_t.dstr (method) - dstr(self) -> char const * +ida_hexrays.cexpr_t.dstr(self) -> str -ida_hexrays.cexpr_t.equal_effect (method) - equal_effect(self, r) -> bool - Compare two expressions. This function tries to compare two expressions in an - 'intelligent' manner. For example, it knows about commutitive operators and can - ignore useless casts. - - @param r: (C++: const cexpr_t &) the expression to compare against the current expression - @return: true expressions can be considered equal +ida_hexrays.cexpr_t.equal_effect(self, r: "cexpr_t") -> bool + Compare two expressions. This function tries to compare two expressions in an 'intelligent' manner. For example, it knows about commutitive operators and can ignore useless casts. + + @param r: the expression to compare against the current expression + @returns true expressions can be considered equal -ida_hexrays.cexpr_t.exflags (variable) - Expression attributes +ida_hexrays.cexpr_t.exflags + Expression attributes + -ida_hexrays.cexpr_t.find_num_op (method) - find_num_op(self) -> cexpr_t +ida_hexrays.cexpr_t.find_num_op(self) -> "cexpr_t *" + Find the operand with a numeric value. -ida_hexrays.cexpr_t.find_op (method) - find_op(self, _op) -> cexpr_t - - @param _op: enum ctype_t +ida_hexrays.cexpr_t.find_op(self, _op: "ctype_t") -> "cexpr_t *" + Find the child with the specified operator. -ida_hexrays.cexpr_t.fpc (variable) +ida_hexrays.cexpr_t.fpc used for cot_fnum -ida_hexrays.cexpr_t.get_1num_op (method) - get_1num_op(self, o1, o2) -> bool - - @param o1: cexpr_t ** - @param o2: cexpr_t ** +ida_hexrays.cexpr_t.get_1num_op(self, o1: "cexpr_t **", o2: "cexpr_t **") -> bool + Get pointers to operands. at last one operand should be a number o1 will be pointer to the number + -ida_hexrays.cexpr_t.get_const_value (method) - get_const_value(self) -> bool - Get expression value. - - @return: true if the expression is a number. +ida_hexrays.cexpr_t.get_const_value(self) -> bool + Get expression value. + + @returns true if the expression is a number. -ida_hexrays.cexpr_t.get_high_nbit_bound (method) - get_high_nbit_bound(self) -> bit_bound_t - Get max number of bits that can really be used by the expression. For example, x - % 16 can yield only 4 non-zero bits, higher bits are zero +ida_hexrays.cexpr_t.get_high_nbit_bound(self) -> "bit_bound_t" + Get max number of bits that can really be used by the expression. For example, x % 16 can yield only 4 non-zero bits, higher bits are zero + -ida_hexrays.cexpr_t.get_low_nbit_bound (method) - get_low_nbit_bound(self) -> int - Get min number of bits that are certainly required to represent the expression. - For example, constant 16 always uses 5 bits: 10000. +ida_hexrays.cexpr_t.get_low_nbit_bound(self) -> int + Get min number of bits that are certainly required to represent the expression. For example, constant 16 always uses 5 bits: 10000. + -ida_hexrays.cexpr_t.get_ptr_or_array (method) - get_ptr_or_array(self) -> cexpr_t +ida_hexrays.cexpr_t.get_ptr_or_array(self) -> "cexpr_t *" Find pointer or array child. -ida_hexrays.cexpr_t.get_type_sign (method) - get_type_sign(self) -> type_sign_t +ida_hexrays.cexpr_t.get_type_sign(self) -> "type_sign_t" Get expression sign. -ida_hexrays.cexpr_t.get_v (method) - get_v(self) -> var_ref_t +ida_hexrays.cexpr_t.get_v(self) -> "var_ref_t *" -ida_hexrays.cexpr_t.has_side_effects (method) - has_side_effects(self) -> bool - Check if the expression has side effects. Calls, pre/post inc/dec, and - assignments have side effects. +ida_hexrays.cexpr_t.has_side_effects(self) -> bool + Check if the expression has side effects. Calls, pre/post inc/dec, and assignments have side effects. + -ida_hexrays.cexpr_t.helper (variable) +ida_hexrays.cexpr_t.helper helper name (used for cot_helper) -ida_hexrays.cexpr_t.insn (variable) - an embedded statement, they are prohibited at the final maturity stage - (CMAT_FINAL) +ida_hexrays.cexpr_t.insn + an embedded statement, they are prohibited at the final maturity stage (CMAT_FINAL) + -ida_hexrays.cexpr_t.is_call_arg_of (method) - is_call_arg_of(self, parent) -> bool - Is call argument? - - @param parent: (C++: const citem_t *) citem_t const * - @return: true if our expression is a call argument of the specified parent - expression. +ida_hexrays.cexpr_t.is_call_arg_of(self, parent: "citem_t") -> bool + Is call argument? + + @returns true if our expression is a call argument of the specified parent expression. -ida_hexrays.cexpr_t.is_call_object_of (method) - is_call_object_of(self, parent) -> bool - Is call object? - - @param parent: (C++: const citem_t *) citem_t const * - @return: true if our expression is the call object of the specified parent - expression. +ida_hexrays.cexpr_t.is_call_object_of(self, parent: "citem_t") -> bool + Is call object? + + @returns true if our expression is the call object of the specified parent expression. -ida_hexrays.cexpr_t.is_child_of (method) - is_child_of(self, parent) -> bool - Verify if the specified item is our parent. - - @param parent: (C++: const citem_t *) possible parent item - @return: true if the specified item is our parent +ida_hexrays.cexpr_t.is_child_of(self, parent: "citem_t") -> bool + Verify if the specified item is our parent. + + @param parent: possible parent item + @returns true if the specified item is our parent -ida_hexrays.cexpr_t.is_const_value (method) - is_const_value(self, _v) -> bool +ida_hexrays.cexpr_t.is_const_value(self, _v: "uint64") -> bool Check if the expression is a number with the specified value. - - @param _v: (C++: uint64) -ida_hexrays.cexpr_t.is_cstr (method) - is_cstr(self) -> bool +ida_hexrays.cexpr_t.is_cstr(self) -> bool -ida_hexrays.cexpr_t.is_fpop (method) - is_fpop(self) -> bool +ida_hexrays.cexpr_t.is_fpop(self) -> bool -ida_hexrays.cexpr_t.is_jumpout (method) - is_jumpout(self) -> bool +ida_hexrays.cexpr_t.is_jumpout(self) -> bool -ida_hexrays.cexpr_t.is_negative_const (method) - is_negative_const(self) -> bool +ida_hexrays.cexpr_t.is_negative_const(self) -> bool Check if the expression is a negative number. -ida_hexrays.cexpr_t.is_nice_cond (method) - is_nice_cond(self) -> bool - Is nice condition?. Nice condition is a nice expression of the boolean type. +ida_hexrays.cexpr_t.is_nice_cond(self) -> bool + Is nice condition?. Nice condition is a nice expression of the boolean type. + -ida_hexrays.cexpr_t.is_nice_expr (method) - is_nice_expr(self) -> bool - Is nice expression? Nice expressions do not contain comma operators, embedded - statements, or labels. +ida_hexrays.cexpr_t.is_nice_expr(self) -> bool + Is nice expression? Nice expressions do not contain comma operators, embedded statements, or labels. + -ida_hexrays.cexpr_t.is_non_negative_const (method) - is_non_negative_const(self) -> bool +ida_hexrays.cexpr_t.is_non_negative_const(self) -> bool Check if the expression is a non-negative number. -ida_hexrays.cexpr_t.is_non_zero_const (method) - is_non_zero_const(self) -> bool +ida_hexrays.cexpr_t.is_non_zero_const(self) -> bool Check if the expression is a non-zero number. -ida_hexrays.cexpr_t.is_odd_lvalue (method) - is_odd_lvalue(self) -> bool +ida_hexrays.cexpr_t.is_odd_lvalue(self) -> bool -ida_hexrays.cexpr_t.is_type_signed (method) - is_type_signed(self) -> bool +ida_hexrays.cexpr_t.is_type_signed(self) -> bool Is expression signed? -ida_hexrays.cexpr_t.is_type_unsigned (method) - is_type_unsigned(self) -> bool +ida_hexrays.cexpr_t.is_type_unsigned(self) -> bool Is expression unsigned? -ida_hexrays.cexpr_t.is_undef_val (method) - is_undef_val(self) -> bool +ida_hexrays.cexpr_t.is_undef_val(self) -> bool -ida_hexrays.cexpr_t.is_vftable (method) - is_vftable(self) -> bool +ida_hexrays.cexpr_t.is_vftable(self) -> bool -ida_hexrays.cexpr_t.is_zero_const (method) - is_zero_const(self) -> bool +ida_hexrays.cexpr_t.is_zero_const(self) -> bool Check if the expression is a zero. -ida_hexrays.cexpr_t.m (variable) - member offset (used for cot_memptr, cot_memref) for unions, the member number +ida_hexrays.cexpr_t.m + member offset (used for cot_memptr, cot_memref) for unions, the member number + -ida_hexrays.cexpr_t.maybe_ptr (method) - maybe_ptr(self) -> bool +ida_hexrays.cexpr_t.maybe_ptr(self) -> bool May the expression be a pointer? -ida_hexrays.cexpr_t.n (variable) +ida_hexrays.cexpr_t.n used for cot_num -ida_hexrays.cexpr_t.numval (method) - numval(self) -> uint64 - Get numeric value of the expression. This function can be called only on cot_num - expressions! +ida_hexrays.cexpr_t.numval(self) -> "uint64" + Get numeric value of the expression. This function can be called only on cot_num expressions! + -ida_hexrays.cexpr_t.obj_ea (variable) +ida_hexrays.cexpr_t.obj_ea used for cot_obj -ida_hexrays.cexpr_t.print1 (method) - print1(self, func) - Print expression into one line. - - @param func: (C++: const cfunc_t *) parent function. This argument is used to find out the referenced - variable names. +ida_hexrays.cexpr_t.print1(self, func: "cfunc_t") -> None + Print expression into one line. + + @param func: parent function. This argument is used to find out the referenced variable names. -ida_hexrays.cexpr_t.ptrsize (variable) +ida_hexrays.cexpr_t.ptrsize memory access size (used for cot_ptr, cot_memptr) -ida_hexrays.cexpr_t.put_number (method) - put_number(self, func, value, nbytes, sign=no_sign) - Assign a number to the expression. - - @param func: (C++: cfunc_t *) current function - @param value: (C++: uint64) number value - @param nbytes: (C++: int) size of the number in bytes - @param sign: (C++: type_sign_t) number sign +ida_hexrays.cexpr_t.put_number(self, *args) -> None + Assign a number to the expression. + + @param func: current function + @param value: number value + @param nbytes: size of the number in bytes + @param sign: number sign -ida_hexrays.cexpr_t.refwidth (variable) +ida_hexrays.cexpr_t.refwidth how many bytes are accessed? (-1: none) -ida_hexrays.cexpr_t.requires_lvalue (method) - requires_lvalue(self, child) -> bool - Check if the expression requires an lvalue. - - @param child: (C++: const cexpr_t *) The function will check if this child of our expression must be an - lvalue. - @return: true if child must be an lvalue. +ida_hexrays.cexpr_t.requires_lvalue(self, child: "cexpr_t") -> bool + Check if the expression requires an lvalue. + + @param child: The function will check if this child of our expression must be an lvalue. + @returns true if child must be an lvalue. -ida_hexrays.cexpr_t.set_cpadone (method) - set_cpadone(self) +ida_hexrays.cexpr_t.set_cpadone(self) -> None -ida_hexrays.cexpr_t.set_v (method) - set_v(self, v) - - @param v: var_ref_t const * +ida_hexrays.cexpr_t.set_v(self, v: "var_ref_t") -> None -ida_hexrays.cexpr_t.set_vftable (method) - set_vftable(self) +ida_hexrays.cexpr_t.set_vftable(self) -> None -ida_hexrays.cexpr_t.string (variable) +ida_hexrays.cexpr_t.string utf8 string constant, user representation (used for cot_str) -ida_hexrays.cexpr_t.swap (method) - swap(self, r) - - @param r: cexpr_t & +ida_hexrays.cexpr_t.swap(self, r: "cexpr_t") -> None -ida_hexrays.cexpr_t.theother (method) - theother(self, what) -> cexpr_t - - @param what: cexpr_t const * +ida_hexrays.cexpr_t.theother(self, what: "cexpr_t") -> "cexpr_t *" + Get the other operand. This function returns the other operand (not the specified one) for binary expressions. + -ida_hexrays.cexpr_t.type (variable) +ida_hexrays.cexpr_t.type expression type. must be carefully maintained -ida_hexrays.cexpr_t.v (variable) +ida_hexrays.cexpr_t.v used for cot_var -ida_hexrays.cexpr_t.x (variable) +ida_hexrays.cexpr_t.x the first operand of the expression -ida_hexrays.cexpr_t.y (variable) +ida_hexrays.cexpr_t.y the second operand of the expression -ida_hexrays.cexpr_t.z (variable) +ida_hexrays.cexpr_t.z the third operand of the expression -ida_hexrays.cfor_t (class) - Proxy of C++ cfor_t class. +ida_hexrays.cfor_t -ida_hexrays.cfor_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cfor_t const & +ida_hexrays.cfor_t.__eq__(self, r: "cfor_t") -> bool -ida_hexrays.cfor_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cfor_t const & +ida_hexrays.cfor_t.__ge__(self, r: "cfor_t") -> bool -ida_hexrays.cfor_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cfor_t const & +ida_hexrays.cfor_t.__gt__(self, r: "cfor_t") -> bool -ida_hexrays.cfor_t.__init__ (method) - __init__(self) -> cfor_t +ida_hexrays.cfor_t.__init__(self) -ida_hexrays.cfor_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cfor_t const & +ida_hexrays.cfor_t.__le__(self, r: "cfor_t") -> bool -ida_hexrays.cfor_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cfor_t const & +ida_hexrays.cfor_t.__lt__(self, r: "cfor_t") -> bool -ida_hexrays.cfor_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cfor_t const & +ida_hexrays.cfor_t.__ne__(self, r: "cfor_t") -> bool -ida_hexrays.cfor_t.compare (method) - compare(self, r) -> int - - @param r: cfor_t const & +ida_hexrays.cfor_t.compare(self, r: "cfor_t") -> int -ida_hexrays.cfor_t.init (variable) +ida_hexrays.cfor_t.init Initialization expression. -ida_hexrays.cfor_t.step (variable) +ida_hexrays.cfor_t.step Step expression. -ida_hexrays.cfunc_parentee_t (class) - Proxy of C++ cfunc_parentee_t class. +ida_hexrays.cfunc_parentee_t -ida_hexrays.cfunc_parentee_t.__disown__ (method) +ida_hexrays.cfunc_parentee_t.__disown__(self) -ida_hexrays.cfunc_parentee_t.__init__ (method) - __init__(self, f, post=False) -> cfunc_parentee_t - - @param f: cfunc_t * - @param post: bool +ida_hexrays.cfunc_parentee_t.__init__(self, f: "cfunc_t", post: bool = False) -ida_hexrays.cfunc_parentee_t.calc_rvalue_type (method) - calc_rvalue_type(self, target, e) -> bool - Calculate rvalue type. This function tries to determine the type of the - specified item based on its context. For example, if the current expression is - the right side of an assignment operator, the type of its left side will be - returned. This function can be used to determine the 'best' type of the - specified expression. - - @param target: (C++: tinfo_t *) 'best' type of the expression will be returned here - @param e: (C++: const cexpr_t *) expression to determine the desired type - @return: false if failed +ida_hexrays.cfunc_parentee_t.calc_rvalue_type(self, target: "tinfo_t", e: "cexpr_t") -> bool + Calculate rvalue type. This function tries to determine the type of the specified item based on its context. For example, if the current expression is the right side of an assignment operator, the type of its left side will be returned. This function can be used to determine the 'best' type of the specified expression. + + @param target: 'best' type of the expression will be returned here + @param e: expression to determine the desired type + @returns false if failed -ida_hexrays.cfunc_parentee_t.func (variable) +ida_hexrays.cfunc_parentee_t.func Pointer to current function. -ida_hexrays.cfunc_t (class) - Proxy of C++ cfunc_t class. +ida_hexrays.cfunc_t -ida_hexrays.cfunc_t.__init__ (method) +ida_hexrays.cfunc_t.__init__(self, *args, **kwargs) -ida_hexrays.cfunc_t.__str__ (method) - __str__(self) -> qstring +ida_hexrays.cfunc_t.__str__(self) -> str -ida_hexrays.cfunc_t.argidx (variable) +ida_hexrays.cfunc_t.argidx list of arguments (indexes into vars) -ida_hexrays.cfunc_t.body (variable) +ida_hexrays.cfunc_t.body function body, must be a block -ida_hexrays.cfunc_t.build_c_tree (method) - build_c_tree(self) - Generate the function body. This function (re)generates the function body from - the underlying microcode. +ida_hexrays.cfunc_t.build_c_tree(self) -> None + Generate the function body. This function (re)generates the function body from the underlying microcode. + -ida_hexrays.cfunc_t.del_orphan_cmts (method) - del_orphan_cmts(self) -> int - Delete all orphan comments. The save_user_cmts() function must be called after - this call. +ida_hexrays.cfunc_t.del_orphan_cmts(self) -> int + Delete all orphan comments. The save_user_cmts() function must be called after this call. + -ida_hexrays.cfunc_t.entry_ea (variable) +ida_hexrays.cfunc_t.entry_ea function entry address -ida_hexrays.cfunc_t.find_item_coords (method) - find_item_coords(self, item, px, py) -> bool +ida_hexrays.cfunc_t.find_item_coords(self, *args) + This method has the following signatures: - @param item: citem_t const * - @param px: int * - @param py: int * + 1. find_item_coords(item: citem_t) -> Tuple[int, int] + 2. find_item_coords(item: citem_t, x: int_pointer, y: int_pointer) -> bool - find_item_coords(self, item) -> PyObject * + NOTE: The second form is retained for backward-compatibility, + but we strongly recommend using the first. - @param item: citem_t const * + @param item The item to find coordinates for in the pseudocode listing -ida_hexrays.cfunc_t.find_label (method) - find_label(self, label) -> citem_t - Find the label. - - @param label: (C++: int) - @return: pointer to the ctree item with the specified label number. +ida_hexrays.cfunc_t.find_label(self, label: int) -> "citem_t *" + Find the label. + + @returns pointer to the ctree item with the specified label number. -ida_hexrays.cfunc_t.gather_derefs (method) - gather_derefs(self, ci, udm=None) -> bool - - @param ci: ctree_item_t const & - @param udm: udt_type_data_t * +ida_hexrays.cfunc_t.gather_derefs(self, ci: "ctree_item_t", udm: "udt_type_data_t" = None) -> bool -ida_hexrays.cfunc_t.get_boundaries (method) - get_boundaries(self) -> boundaries_t - Get pointer to map of instruction boundaries. This function initializes the - boundary map if not done yet. +ida_hexrays.cfunc_t.get_boundaries(self) -> "boundaries_t &" + Get pointer to map of instruction boundaries. This function initializes the boundary map if not done yet. + -ida_hexrays.cfunc_t.get_eamap (method) - get_eamap(self) -> eamap_t - Get pointer to ea->insn map. This function initializes eamap if not done yet. +ida_hexrays.cfunc_t.get_eamap(self) -> "eamap_t &" + Get pointer to ea->insn map. This function initializes eamap if not done yet. + -ida_hexrays.cfunc_t.get_func_type (method) - get_func_type(self, type) -> bool - Get the function type. - - @param type: (C++: tinfo_t *) variable where the function type is returned - @return: false if failure +ida_hexrays.cfunc_t.get_func_type(self, type: "tinfo_t") -> bool + Get the function type. + + @param type: variable where the function type is returned + @returns false if failure -ida_hexrays.cfunc_t.get_line_item (method) - get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool - Get ctree item for the specified cursor position. - - @param line: (C++: const char *) line of decompilation text (element of sv) - @param x: (C++: int) x cursor coordinate in the line - @param is_ctree_line: (C++: bool) does the line belong to statement area? (if not, it is - assumed to belong to the declaration area) - @param phead: (C++: ctree_item_t *) ptr to the first item on the line (used to attach block comments). - May be nullptr - @param pitem: (C++: ctree_item_t *) ptr to the current item. May be nullptr - @param ptail: (C++: ctree_item_t *) ptr to the last item on the line (used to attach indented - comments). May be nullptr - @see: vdui_t::get_current_item() - @return: false if failed to get the current item +ida_hexrays.cfunc_t.get_line_item(self, line: str, x: int, is_ctree_line: bool, phead: "ctree_item_t", pitem: "ctree_item_t", ptail: "ctree_item_t") -> bool + Get ctree item for the specified cursor position. + + @param line: line of decompilation text (element of sv) + @param x: x cursor coordinate in the line + @param is_ctree_line: does the line belong to statement area? (if not, it is assumed to belong to the declaration area) + @param phead: ptr to the first item on the line (used to attach block comments). May be nullptr + @param pitem: ptr to the current item. May be nullptr + @param ptail: ptr to the last item on the line (used to attach indented comments). May be nullptr + @returns false if failed to get the current item -ida_hexrays.cfunc_t.get_lvars (method) - get_lvars(self) -> lvars_t - Get vector of local variables. - - @return: pointer to the vector of local variables. If you modify this vector, - the ctree must be regenerated in order to have correct cast operators. - Use build_c_tree() for that. Removing lvars should be done carefully: - all references in ctree and microcode must be corrected after that. +ida_hexrays.cfunc_t.get_lvars(self) -> "lvars_t *" + Get vector of local variables. + + @returns pointer to the vector of local variables. If you modify this vector, the ctree must be regenerated in order to have correct cast operators. Use build_c_tree() for that. Removing lvars should be done carefully: all references in ctree and microcode must be corrected after that. -ida_hexrays.cfunc_t.get_pseudocode (method) - get_pseudocode(self) -> strvec_t - Get pointer to decompilation output: the pseudocode. This function generates - pseudocode if not done yet. +ida_hexrays.cfunc_t.get_pseudocode(self) -> "strvec_t const &" + Get pointer to decompilation output: the pseudocode. This function generates pseudocode if not done yet. + -ida_hexrays.cfunc_t.get_stkoff_delta (method) - get_stkoff_delta(self) -> sval_t - Get stack offset delta. The local variable stack offsets retrieved by - v.location.stkoff() should be adjusted before being used as stack frame offsets - in IDA. - - @return: the delta to apply. example: ida_stkoff = v.location.stkoff() - - f->get_stkoff_delta() +ida_hexrays.cfunc_t.get_stkoff_delta(self) -> int + Get stack offset delta. The local variable stack offsets retrieved by v.location.stkoff() should be adjusted before being used as stack frame offsets in IDA. + + @returns the delta to apply. example: ida_stkoff = v.location.stkoff() - f->get_stkoff_delta() -ida_hexrays.cfunc_t.get_user_cmt (method) - get_user_cmt(self, loc, rt) -> char const * - Retrieve a user defined comment. - - @param loc: (C++: const treeloc_t &) ctree location - @param rt: (C++: cmt_retrieval_type_t) should already retrieved comments retrieved again? - @return: pointer to the comment string or nullptr +ida_hexrays.cfunc_t.get_user_cmt(self, loc: "treeloc_t", rt: "cmt_retrieval_type_t") -> str + Retrieve a user defined comment. + + @param loc: ctree location + @param rt: should already retrieved comments retrieved again? + @returns pointer to the comment string or nullptr -ida_hexrays.cfunc_t.get_user_iflags (method) - get_user_iflags(self, loc) -> int32 - Retrieve citem iflags. - - @param loc: (C++: const citem_locator_t &) citem locator - @return: ctree item iflags bits or 0 +ida_hexrays.cfunc_t.get_user_iflags(self, loc: "citem_locator_t") -> int + Retrieve citem iflags. + + @param loc: citem locator + @returns ctree item iflags bits or 0 -ida_hexrays.cfunc_t.get_user_union_selection (method) - get_user_union_selection(self, ea, path) -> bool - Retrieve a user defined union field selection. - - @param ea: (C++: ea_t) address - @param path: (C++: intvec_t *) out: path describing the union selection. - @return: pointer to the path or nullptr +ida_hexrays.cfunc_t.get_user_union_selection(self, ea: ida_idaapi.ea_t, path: "intvec_t") -> bool + Retrieve a user defined union field selection. + + @param ea: address + @param path: out: path describing the union selection. + @returns pointer to the path or nullptr -ida_hexrays.cfunc_t.get_warnings (method) - get_warnings(self) -> hexwarns_t - Get information about decompilation warnings. - - @return: reference to the vector of warnings +ida_hexrays.cfunc_t.get_warnings(self) -> "hexwarns_t &" + Get information about decompilation warnings. + + @returns reference to the vector of warnings -ida_hexrays.cfunc_t.has_orphan_cmts (method) - has_orphan_cmts(self) -> bool +ida_hexrays.cfunc_t.has_orphan_cmts(self) -> bool Check if there are orphan comments. -ida_hexrays.cfunc_t.hdrlines (variable) +ida_hexrays.cfunc_t.hdrlines number of lines in the declaration area -ida_hexrays.cfunc_t.locked (method) - locked(self) -> bool +ida_hexrays.cfunc_t.locked(self) -> bool -ida_hexrays.cfunc_t.maturity (variable) +ida_hexrays.cfunc_t.maturity maturity level -ida_hexrays.cfunc_t.mba (variable) +ida_hexrays.cfunc_t.mba underlying microcode -ida_hexrays.cfunc_t.numforms (variable) +ida_hexrays.cfunc_t.numforms user-defined number formats. -ida_hexrays.cfunc_t.print_dcl (method) - print_dcl(self) - Print function prototype. +ida_hexrays.cfunc_t.print_dcl(self) -> None + Print function prototype. + -ida_hexrays.cfunc_t.print_func (method) - print_func(self, vp) - Print function text. - - @param vp: (C++: vc_printer_t &) printer helper class to receive the generated text. +ida_hexrays.cfunc_t.print_func(self, vp: "vc_printer_t") -> None + Print function text. + + @param vp: printer helper class to receive the generated text. -ida_hexrays.cfunc_t.refcnt (variable) +ida_hexrays.cfunc_t.refcnt reference count to this object. use cfuncptr_t -ida_hexrays.cfunc_t.refresh_func_ctext (method) - refresh_func_ctext(self) - Refresh ctext after a ctree modification. This function informs the decompiler - that ctree (body) have been modified and ctext (sv) does not correspond to it - anymore. It also refreshes the pseudocode windows if there is any. +ida_hexrays.cfunc_t.refresh_func_ctext(self) -> None + Refresh ctext after a ctree modification. This function informs the decompiler that ctree (body) have been modified and ctext (sv) does not correspond to it anymore. It also refreshes the pseudocode windows if there is any. + -ida_hexrays.cfunc_t.release (method) - release(self) +ida_hexrays.cfunc_t.release(self) -> None -ida_hexrays.cfunc_t.remove_unused_labels (method) - remove_unused_labels(self) - Remove unused labels. This function checks what labels are really used by the - function and removes the unused ones. You must call it after deleting a goto - statement. +ida_hexrays.cfunc_t.remove_unused_labels(self) -> None + Remove unused labels. This function checks what labels are really used by the function and removes the unused ones. You must call it after deleting a goto statement. + -ida_hexrays.cfunc_t.save_user_cmts (method) - save_user_cmts(self) +ida_hexrays.cfunc_t.save_user_cmts(self) -> None Save user-defined comments into the database. -ida_hexrays.cfunc_t.save_user_iflags (method) - save_user_iflags(self) +ida_hexrays.cfunc_t.save_user_iflags(self) -> None Save user-defined iflags into the database. -ida_hexrays.cfunc_t.save_user_labels (method) - save_user_labels(self) +ida_hexrays.cfunc_t.save_user_labels(self) -> None Save user-defined labels into the database. -ida_hexrays.cfunc_t.save_user_numforms (method) - save_user_numforms(self) +ida_hexrays.cfunc_t.save_user_numforms(self) -> None Save user-defined number formats into the database. -ida_hexrays.cfunc_t.save_user_unions (method) - save_user_unions(self) +ida_hexrays.cfunc_t.save_user_unions(self) -> None Save user-defined union field selections into the database. -ida_hexrays.cfunc_t.set_user_cmt (method) - set_user_cmt(self, loc, cmt) - Set a user defined comment. This function stores the specified comment in the - cfunc_t structure. The save_user_cmts() function must be called after it. - - @param loc: (C++: const treeloc_t &) ctree location - @param cmt: (C++: const char *) new comment. if empty or nullptr, then an existing comment is - deleted. +ida_hexrays.cfunc_t.set_user_cmt(self, loc: "treeloc_t", cmt: str) -> None + Set a user defined comment. This function stores the specified comment in the cfunc_t structure. The save_user_cmts() function must be called after it. + + @param loc: ctree location + @param cmt: new comment. if empty or nullptr, then an existing comment is deleted. -ida_hexrays.cfunc_t.set_user_iflags (method) - set_user_iflags(self, loc, iflags) - Set citem iflags. - - @param loc: (C++: const citem_locator_t &) citem locator - @param iflags: (C++: int32) new iflags +ida_hexrays.cfunc_t.set_user_iflags(self, loc: "citem_locator_t", iflags: int) -> None + Set citem iflags. + + @param loc: citem locator + @param iflags: new iflags -ida_hexrays.cfunc_t.set_user_union_selection (method) - set_user_union_selection(self, ea, path) - Set a union field selection. The save_user_unions() function must be called - after calling this function. - - @param ea: (C++: ea_t) address - @param path: (C++: const intvec_t &) in: path describing the union selection. +ida_hexrays.cfunc_t.set_user_union_selection(self, ea: ida_idaapi.ea_t, path: "intvec_t") -> None + Set a union field selection. The save_user_unions() function must be called after calling this function. + + @param ea: address + @param path: in: path describing the union selection. -ida_hexrays.cfunc_t.statebits (variable) - current cfunc_t state. see cfunc state bits +ida_hexrays.cfunc_t.statebits + current cfunc_t state. see cfunc state bits + -ida_hexrays.cfunc_t.treeitems (variable) - vector of ctree items +ida_hexrays.cfunc_t.treeitems + vector of pointers to citem_t objects (nodes constituting the ctree) -ida_hexrays.cfunc_t.user_cmts (variable) +ida_hexrays.cfunc_t.user_cmts user-defined comments. -ida_hexrays.cfunc_t.user_iflags (variable) +ida_hexrays.cfunc_t.user_iflags user-defined item flags ctree item iflags bits -ida_hexrays.cfunc_t.user_labels (variable) +ida_hexrays.cfunc_t.user_labels user-defined labels. -ida_hexrays.cfunc_t.user_unions (variable) - user-defined union field selections. +ida_hexrays.cfunc_t.user_unions + user-defined union field selections. + -ida_hexrays.cfunc_t.verify (method) - verify(self, aul, even_without_debugger) - Verify the ctree. This function verifies the ctree. If the ctree is malformed, - an internal error is generated. Use it to verify the ctree after your - modifications. - - @param aul: (C++: allow_unused_labels_t) Are unused labels acceptable? - @param even_without_debugger: (C++: bool) if false and there is no debugger, the - verification will be skipped +ida_hexrays.cfunc_t.verify(self, aul: "allow_unused_labels_t", even_without_debugger: bool) -> None + Verify the ctree. This function verifies the ctree. If the ctree is malformed, an internal error is generated. Use it to verify the ctree after your modifications. + + @param aul: Are unused labels acceptable? + @param even_without_debugger: if false and there is no debugger, the verification will be skipped -ida_hexrays.cfunc_type (function) +ida_hexrays.cfunc_type(self) Get the function's return type tinfo_t object. -ida_hexrays.cfuncptr_t (class) - Proxy of C++ qrefcnt_t< cfunc_t > class. +ida_hexrays.cfuncptr_t -ida_hexrays.cfuncptr_t.__deref__ (method) - __deref__(self) -> cfunc_t +ida_hexrays.cfuncptr_t.__deref__(self) -> "cfunc_t *" -ida_hexrays.cfuncptr_t.__init__ (method) - __init__(self, p) -> cfuncptr_t +ida_hexrays.cfuncptr_t.__init__(self, *args) + +ida_hexrays.cfuncptr_t.__ptrval__(self) -> "size_t" + +ida_hexrays.cfuncptr_t.__ref__(self) -> "cfunc_t &" + +ida_hexrays.cfuncptr_t.__str__(self) -> str + +ida_hexrays.cfuncptr_t.build_c_tree(self) -> None + +ida_hexrays.cfuncptr_t.del_orphan_cmts(self) -> int + +ida_hexrays.cfuncptr_t.find_item_coords(self, *args) + This method has the following signatures: - @param p: cfunc_t * + 1. find_item_coords(item: citem_t) -> Tuple[int, int] + 2. find_item_coords(item: citem_t, x: int_pointer, y: int_pointer) -> bool - __init__(self, r) -> cfuncptr_t + NOTE: The second form is retained for backward-compatibility, + but we strongly recommend using the first. - @param r: qrefcnt_t< cfunc_t > const & + @param item The item to find coordinates for in the pseudocode listing -ida_hexrays.cfuncptr_t.__ptrval__ (method) - __ptrval__(self) -> size_t +ida_hexrays.cfuncptr_t.find_label(self, label: int) -> "citem_t *" -ida_hexrays.cfuncptr_t.__ref__ (method) - __ref__(self) -> cfunc_t +ida_hexrays.cfuncptr_t.gather_derefs(self, ci: "ctree_item_t", udm: "udt_type_data_t" = None) -> bool -ida_hexrays.cfuncptr_t.__str__ (method) - __str__(self) -> qstring +ida_hexrays.cfuncptr_t.get_boundaries(self) -> "boundaries_t &" -ida_hexrays.cfuncptr_t.build_c_tree (method) - build_c_tree(self) +ida_hexrays.cfuncptr_t.get_eamap(self) -> "eamap_t &" -ida_hexrays.cfuncptr_t.del_orphan_cmts (method) - del_orphan_cmts(self) -> int +ida_hexrays.cfuncptr_t.get_func_type(self, type: "tinfo_t") -> bool -ida_hexrays.cfuncptr_t.find_item_coords (method) - find_item_coords(self, item, px, py) -> bool - - @param item: citem_t const * - @param px: int * - @param py: int * - - find_item_coords(self, item) -> (int, int), bool - - @param item: citem_t const * +ida_hexrays.cfuncptr_t.get_line_item(self, line: str, x: int, is_ctree_line: bool, phead: "ctree_item_t", pitem: "ctree_item_t", ptail: "ctree_item_t") -> bool -ida_hexrays.cfuncptr_t.find_label (method) - find_label(self, label) -> citem_t - - @param label: int +ida_hexrays.cfuncptr_t.get_lvars(self) -> "lvars_t *" -ida_hexrays.cfuncptr_t.gather_derefs (method) - gather_derefs(self, ci, udm=None) -> bool - - @param ci: ctree_item_t const & - @param udm: udt_type_data_t * +ida_hexrays.cfuncptr_t.get_pseudocode(self) -> "strvec_t const &" -ida_hexrays.cfuncptr_t.get_boundaries (method) - get_boundaries(self) -> boundaries_t +ida_hexrays.cfuncptr_t.get_stkoff_delta(self) -> int -ida_hexrays.cfuncptr_t.get_eamap (method) - get_eamap(self) -> eamap_t +ida_hexrays.cfuncptr_t.get_user_cmt(self, loc: "treeloc_t", rt: "cmt_retrieval_type_t") -> str -ida_hexrays.cfuncptr_t.get_func_type (method) - get_func_type(self, type) -> bool - - @param type: tinfo_t * +ida_hexrays.cfuncptr_t.get_user_iflags(self, loc: "citem_locator_t") -> int -ida_hexrays.cfuncptr_t.get_line_item (method) - get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool - - @param line: char const * - @param x: int - @param is_ctree_line: bool - @param phead: ctree_item_t * - @param pitem: ctree_item_t * - @param ptail: ctree_item_t * +ida_hexrays.cfuncptr_t.get_user_union_selection(self, ea: ida_idaapi.ea_t, path: "intvec_t") -> bool -ida_hexrays.cfuncptr_t.get_lvars (method) - get_lvars(self) -> lvars_t +ida_hexrays.cfuncptr_t.get_warnings(self) -> "hexwarns_t &" -ida_hexrays.cfuncptr_t.get_pseudocode (method) - get_pseudocode(self) -> strvec_t +ida_hexrays.cfuncptr_t.has_orphan_cmts(self) -> bool -ida_hexrays.cfuncptr_t.get_stkoff_delta (method) - get_stkoff_delta(self) -> sval_t +ida_hexrays.cfuncptr_t.locked(self) -> bool -ida_hexrays.cfuncptr_t.get_user_cmt (method) - get_user_cmt(self, loc, rt) -> char const * - - @param loc: treeloc_t const & - @param rt: enum cmt_retrieval_type_t +ida_hexrays.cfuncptr_t.print_dcl(self) -> None -ida_hexrays.cfuncptr_t.get_user_iflags (method) - get_user_iflags(self, loc) -> int32 - - @param loc: citem_locator_t const & +ida_hexrays.cfuncptr_t.print_func(self, vp: "vc_printer_t") -> None -ida_hexrays.cfuncptr_t.get_user_union_selection (method) - get_user_union_selection(self, ea, path) -> bool - - @param ea: ea_t - @param path: intvec_t * +ida_hexrays.cfuncptr_t.refresh_func_ctext(self) -> None -ida_hexrays.cfuncptr_t.get_warnings (method) - get_warnings(self) -> hexwarns_t +ida_hexrays.cfuncptr_t.release(self) -> None -ida_hexrays.cfuncptr_t.has_orphan_cmts (method) - has_orphan_cmts(self) -> bool +ida_hexrays.cfuncptr_t.remove_unused_labels(self) -> None -ida_hexrays.cfuncptr_t.locked (method) - locked(self) -> bool +ida_hexrays.cfuncptr_t.reset(self) -> None -ida_hexrays.cfuncptr_t.print_dcl (method) - print_dcl(self) +ida_hexrays.cfuncptr_t.save_user_cmts(self) -> None + Save user defined comments into the database. + -ida_hexrays.cfuncptr_t.print_func (method) - print_func(self, vp) - - @param vp: vc_printer_t & +ida_hexrays.cfuncptr_t.save_user_iflags(self) -> None + Save user defined citem iflags into the database. + -ida_hexrays.cfuncptr_t.refresh_func_ctext (method) - refresh_func_ctext(self) +ida_hexrays.cfuncptr_t.save_user_labels(self) -> None + Save user defined labels into the database. + -ida_hexrays.cfuncptr_t.release (method) - release(self) +ida_hexrays.cfuncptr_t.save_user_numforms(self) -> None + Save user defined number formats into the database. + -ida_hexrays.cfuncptr_t.remove_unused_labels (method) - remove_unused_labels(self) +ida_hexrays.cfuncptr_t.save_user_unions(self) -> None + Save user defined union field selections into the database. + -ida_hexrays.cfuncptr_t.reset (method) - reset(self) +ida_hexrays.cfuncptr_t.set_user_cmt(self, loc: "treeloc_t", cmt: str) -> None -ida_hexrays.cfuncptr_t.save_user_cmts (method) - save_user_cmts(self) +ida_hexrays.cfuncptr_t.set_user_iflags(self, loc: "citem_locator_t", iflags: int) -> None -ida_hexrays.cfuncptr_t.save_user_iflags (method) - save_user_iflags(self) +ida_hexrays.cfuncptr_t.set_user_union_selection(self, ea: ida_idaapi.ea_t, path: "intvec_t") -> None -ida_hexrays.cfuncptr_t.save_user_labels (method) - save_user_labels(self) +ida_hexrays.cfuncptr_t.verify(self, aul: "allow_unused_labels_t", even_without_debugger: bool) -> None -ida_hexrays.cfuncptr_t.save_user_numforms (method) - save_user_numforms(self) +ida_hexrays.cgoto_t -ida_hexrays.cfuncptr_t.save_user_unions (method) - save_user_unions(self) +ida_hexrays.cgoto_t.__eq__(self, r: "cgoto_t") -> bool -ida_hexrays.cfuncptr_t.set_user_cmt (method) - set_user_cmt(self, loc, cmt) - - @param loc: treeloc_t const & - @param cmt: char const * +ida_hexrays.cgoto_t.__ge__(self, r: "cgoto_t") -> bool -ida_hexrays.cfuncptr_t.set_user_iflags (method) - set_user_iflags(self, loc, iflags) - - @param loc: citem_locator_t const & - @param iflags: int32 +ida_hexrays.cgoto_t.__gt__(self, r: "cgoto_t") -> bool -ida_hexrays.cfuncptr_t.set_user_union_selection (method) - set_user_union_selection(self, ea, path) - - @param ea: ea_t - @param path: intvec_t const & +ida_hexrays.cgoto_t.__init__(self) -ida_hexrays.cfuncptr_t.verify (method) - verify(self, aul, even_without_debugger) - - @param aul: enum allow_unused_labels_t - @param even_without_debugger: bool +ida_hexrays.cgoto_t.__le__(self, r: "cgoto_t") -> bool -ida_hexrays.cgoto_t (class) - Proxy of C++ cgoto_t class. +ida_hexrays.cgoto_t.__lt__(self, r: "cgoto_t") -> bool -ida_hexrays.cgoto_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cgoto_t const & +ida_hexrays.cgoto_t.__ne__(self, r: "cgoto_t") -> bool -ida_hexrays.cgoto_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cgoto_t const & +ida_hexrays.cgoto_t.compare(self, r: "cgoto_t") -> int -ida_hexrays.cgoto_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cgoto_t const & - -ida_hexrays.cgoto_t.__init__ (method) - __init__(self) -> cgoto_t - -ida_hexrays.cgoto_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cgoto_t const & - -ida_hexrays.cgoto_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cgoto_t const & - -ida_hexrays.cgoto_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cgoto_t const & - -ida_hexrays.cgoto_t.compare (method) - compare(self, r) -> int - - @param r: cgoto_t const & - -ida_hexrays.cgoto_t.label_num (variable) +ida_hexrays.cgoto_t.label_num Target label number. -ida_hexrays.chain_keeper_t (class) - Proxy of C++ chain_keeper_t class. +ida_hexrays.chain_keeper_t -ida_hexrays.chain_keeper_t.__init__ (method) - __init__(self, _gc) -> chain_keeper_t - - @param _gc: graph_chains_t * +ida_hexrays.chain_keeper_t.__init__(self, _gc: "graph_chains_t") -ida_hexrays.chain_keeper_t.back (method) - back(self) -> block_chains_t +ida_hexrays.chain_keeper_t.back(self) -> "block_chains_t &" -ida_hexrays.chain_keeper_t.for_all_chains (method) - for_all_chains(self, cv, gca) -> int - - @param cv: chain_visitor_t & - @param gca: int +ida_hexrays.chain_keeper_t.for_all_chains(self, cv: "chain_visitor_t", gca: int) -> int -ida_hexrays.chain_keeper_t.front (method) - front(self) -> block_chains_t +ida_hexrays.chain_keeper_t.front(self) -> "block_chains_t &" -ida_hexrays.chain_t (class) - Proxy of C++ chain_t class. +ida_hexrays.chain_t -ida_hexrays.chain_t.__init__ (method) - __init__(self) -> chain_t - __init__(self, t, off, w=1, v=-1) -> chain_t - - @param t: mopt_t - @param off: sval_t - @param w: int - @param v: int - - __init__(self, _k, w=1) -> chain_t - - @param _k: voff_t const & - @param w: int +ida_hexrays.chain_t.__init__(self, *args) -ida_hexrays.chain_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: chain_t const & +ida_hexrays.chain_t.__lt__(self, r: "chain_t") -> bool -ida_hexrays.chain_t._print (method) - _print(self) +ida_hexrays.chain_t._print(self) -> None -ida_hexrays.chain_t.append_list (method) - append_list(self, mba, list) +ida_hexrays.chain_t.append_list(self, mba: "mba_t", list: "mlist_t") -> None Append the contents of the chain to the specified list of locations. - - @param mba: (C++: const mba_t *) mba_t const * - @param list: (C++: mlist_t *) -ida_hexrays.chain_t.clear_varnum (method) - clear_varnum(self) +ida_hexrays.chain_t.clear_varnum(self) -> None -ida_hexrays.chain_t.dstr (method) - dstr(self) -> char const * +ida_hexrays.chain_t.dstr(self) -> str -ida_hexrays.chain_t.endoff (method) - endoff(self) -> voff_t +ida_hexrays.chain_t.endoff(self) -> "voff_t const" -ida_hexrays.chain_t.flags (variable) - combination Chain properties bits +ida_hexrays.chain_t.flags + combination Chain properties bits + -ida_hexrays.chain_t.get_reg (method) - get_reg(self) -> mreg_t +ida_hexrays.chain_t.get_reg(self) -> "mreg_t" -ida_hexrays.chain_t.get_stkoff (method) - get_stkoff(self) -> sval_t +ida_hexrays.chain_t.get_stkoff(self) -> int -ida_hexrays.chain_t.includes (method) - includes(self, r) -> bool - - @param r: chain_t const & +ida_hexrays.chain_t.includes(self, r: "chain_t") -> bool -ida_hexrays.chain_t.is_fake (method) - is_fake(self) -> bool +ida_hexrays.chain_t.is_fake(self) -> bool -ida_hexrays.chain_t.is_inited (method) - is_inited(self) -> bool +ida_hexrays.chain_t.is_inited(self) -> bool -ida_hexrays.chain_t.is_overlapped (method) - is_overlapped(self) -> bool +ida_hexrays.chain_t.is_overlapped(self) -> bool -ida_hexrays.chain_t.is_passreg (method) - is_passreg(self) -> bool +ida_hexrays.chain_t.is_passreg(self) -> bool -ida_hexrays.chain_t.is_reg (method) - is_reg(self) -> bool +ida_hexrays.chain_t.is_reg(self) -> bool -ida_hexrays.chain_t.is_replaced (method) - is_replaced(self) -> bool +ida_hexrays.chain_t.is_replaced(self) -> bool -ida_hexrays.chain_t.is_stkoff (method) - is_stkoff(self) -> bool +ida_hexrays.chain_t.is_stkoff(self) -> bool -ida_hexrays.chain_t.is_term (method) - is_term(self) -> bool +ida_hexrays.chain_t.is_term(self) -> bool -ida_hexrays.chain_t.key (method) - key(self) -> voff_t +ida_hexrays.chain_t.key(self) -> "voff_t const &" -ida_hexrays.chain_t.overlap (method) - overlap(self, r) -> bool - - @param r: chain_t const & +ida_hexrays.chain_t.overlap(self, r: "chain_t") -> bool -ida_hexrays.chain_t.set_inited (method) - set_inited(self, b) - - @param b: bool +ida_hexrays.chain_t.set_inited(self, b: bool) -> None -ida_hexrays.chain_t.set_overlapped (method) - set_overlapped(self, b) - - @param b: bool +ida_hexrays.chain_t.set_overlapped(self, b: bool) -> None -ida_hexrays.chain_t.set_replaced (method) - set_replaced(self, b) - - @param b: bool +ida_hexrays.chain_t.set_replaced(self, b: bool) -> None -ida_hexrays.chain_t.set_term (method) - set_term(self, b) - - @param b: bool +ida_hexrays.chain_t.set_term(self, b: bool) -> None -ida_hexrays.chain_t.set_value (method) - set_value(self, r) - - @param r: chain_t const & +ida_hexrays.chain_t.set_value(self, r: "chain_t") -> None -ida_hexrays.chain_t.varnum (variable) +ida_hexrays.chain_t.varnum allocated variable index (-1 - not allocated yet) -ida_hexrays.chain_t.width (variable) +ida_hexrays.chain_t.width size of the value in bytes -ida_hexrays.chain_visitor_t (class) - Proxy of C++ chain_visitor_t class. +ida_hexrays.chain_visitor_t -ida_hexrays.chain_visitor_t.__disown__ (method) +ida_hexrays.chain_visitor_t.__disown__(self) -ida_hexrays.chain_visitor_t.__init__ (method) - __init__(self) -> chain_visitor_t - - @param self: PyObject * +ida_hexrays.chain_visitor_t.__init__(self) -ida_hexrays.chain_visitor_t.parent (variable) +ida_hexrays.chain_visitor_t.parent parent of the current chain -ida_hexrays.chain_visitor_t.visit_chain (method) - visit_chain(self, nblock, ch) -> int - - @param nblock: int - @param ch: chain_t & +ida_hexrays.chain_visitor_t.visit_chain(self, nblock: int, ch: "chain_t") -> int -ida_hexrays.change_hexrays_config (function) - change_hexrays_config(directive) -> bool - Parse DIRECTIVE and update the current configuration variables. For the syntax - see hexrays.cfg - - @param directive: (C++: const char *) char const * +ida_hexrays.change_hexrays_config(directive: str) -> bool + Parse DIRECTIVE and update the current configuration variables. For the syntax see hexrays.cfg + -ida_hexrays.checkout_hexrays_license (function) - 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: (C++: bool) silently fail if the license cannot be checked out. - @return: false if failed +ida_hexrays.cif_t -ida_hexrays.cif_t (class) - Proxy of C++ cif_t class. +ida_hexrays.cif_t.__eq__(self, r: "cif_t") -> bool -ida_hexrays.cif_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cif_t const & +ida_hexrays.cif_t.__ge__(self, r: "cif_t") -> bool -ida_hexrays.cif_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cif_t const & +ida_hexrays.cif_t.__gt__(self, r: "cif_t") -> bool -ida_hexrays.cif_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cif_t const & +ida_hexrays.cif_t.__init__(self, *args) -ida_hexrays.cif_t.__init__ (method) - __init__(self) -> cif_t - __init__(self, r) -> cif_t - - @param r: cif_t const & +ida_hexrays.cif_t.__le__(self, r: "cif_t") -> bool -ida_hexrays.cif_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cif_t const & +ida_hexrays.cif_t.__lt__(self, r: "cif_t") -> bool -ida_hexrays.cif_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cif_t const & +ida_hexrays.cif_t.__ne__(self, r: "cif_t") -> bool -ida_hexrays.cif_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cif_t const & +ida_hexrays.cif_t.assign(self, r: "cif_t") -> "cif_t &" -ida_hexrays.cif_t.assign (method) - assign(self, r) -> cif_t - - @param r: cif_t const & +ida_hexrays.cif_t.cleanup(self) -> None -ida_hexrays.cif_t.cleanup (method) - cleanup(self) +ida_hexrays.cif_t.compare(self, r: "cif_t") -> int -ida_hexrays.cif_t.compare (method) - compare(self, r) -> int - - @param r: cif_t const & - -ida_hexrays.cif_t.ielse (variable) +ida_hexrays.cif_t.ielse Else-branch of the if-statement. May be nullptr. -ida_hexrays.cif_t.ithen (variable) +ida_hexrays.cif_t.ithen Then-branch of the if-statement. -ida_hexrays.cinsn_details (function) +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. -ida_hexrays.cinsn_list_t (class) - Proxy of C++ qlist< cinsn_t > class. - -ida_hexrays.cinsn_list_t.__eq__ (method) - __eq__(self, x) -> bool - - @param x: qlist< cinsn_t > const & - -ida_hexrays.cinsn_list_t.__getitem__ (method) - __getitem__(self, i) -> cinsn_t - - @param i: size_t - -ida_hexrays.cinsn_list_t.__init__ (method) - __init__(self) -> cinsn_list_t - __init__(self, x) -> cinsn_list_t - - @param x: qlist< cinsn_t > const & - -ida_hexrays.cinsn_list_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.cinsn_list_t.__ne__ (method) - __ne__(self, x) -> bool - - @param x: qlist< cinsn_t > const & - -ida_hexrays.cinsn_list_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: cinsn_t const & - -ida_hexrays.cinsn_list_t.at (method) +ida_hexrays.cinsn_list_t -ida_hexrays.cinsn_list_t.back (method) - back(self) -> cinsn_t - -ida_hexrays.cinsn_list_t.begin (method) - begin(self) -> cinsn_list_t_iterator - -ida_hexrays.cinsn_list_t.clear (method) - clear(self) - -ida_hexrays.cinsn_list_t.empty (method) - empty(self) -> bool - -ida_hexrays.cinsn_list_t.end (method) - end(self) -> cinsn_list_t_iterator - -ida_hexrays.cinsn_list_t.erase (method) - erase(self, p) - - @param p: cinsn_list_t_iterator - -ida_hexrays.cinsn_list_t.find (method) - -ida_hexrays.cinsn_list_t.front (method) - front(self) -> cinsn_t - -ida_hexrays.cinsn_list_t.index (method) - -ida_hexrays.cinsn_list_t.insert (method) - insert(self, i, v) - - @param i: size_t - @param v: cinsn_t const & - - insert(self, p, x) -> cinsn_list_t_iterator - - @param p: cinsn_list_t_iterator - @param x: cinsn_t const & - -ida_hexrays.cinsn_list_t.pop_back (method) - pop_back(self) - -ida_hexrays.cinsn_list_t.pop_front (method) - pop_front(self) - -ida_hexrays.cinsn_list_t.push_back (method) - push_back(self, x) - - @param x: cinsn_t const & - - push_back(self) -> cinsn_t - -ida_hexrays.cinsn_list_t.push_front (method) - push_front(self, x) - - @param x: cinsn_t const & +ida_hexrays.cinsn_list_t.__eq__(self, x: "cinsn_list_t") -> bool -ida_hexrays.cinsn_list_t.rbegin (method) - rbegin(self) -> qlist< cinsn_t >::reverse_iterator - rbegin(self) -> qlist< cinsn_t >::const_reverse_iterator +ida_hexrays.cinsn_list_t.__getitem__(self, i: "size_t") -> "cinsn_t const &" -ida_hexrays.cinsn_list_t.remove (method) - remove(self, v) -> bool - - @param v: cinsn_t const & +ida_hexrays.cinsn_list_t.__init__(self, *args) -ida_hexrays.cinsn_list_t.rend (method) - rend(self) -> qlist< cinsn_t >::reverse_iterator - rend(self) -> qlist< cinsn_t >::const_reverse_iterator +ida_hexrays.cinsn_list_t.__len__(self) -> "size_t" -ida_hexrays.cinsn_list_t.size (method) - size(self) -> size_t +ida_hexrays.cinsn_list_t.__ne__(self, x: "cinsn_list_t") -> bool -ida_hexrays.cinsn_list_t.swap (method) - swap(self, x) - - @param x: qlist< cinsn_t > & +ida_hexrays.cinsn_list_t.__setitem__(self, i: "size_t", v: "cinsn_t") -> None -ida_hexrays.cinsn_list_t_iterator (class) - Proxy of C++ cinsn_list_t_iterator class. +ida_hexrays.cinsn_list_t.at(self, index) -ida_hexrays.cinsn_list_t_iterator.__eq__ (method) - __eq__(self, x) -> bool - - @param x: cinsn_list_t_iterator const * - -ida_hexrays.cinsn_list_t_iterator.__init__ (method) - __init__(self) -> cinsn_list_t_iterator - -ida_hexrays.cinsn_list_t_iterator.__ne__ (method) - __ne__(self, x) -> bool - - @param x: cinsn_list_t_iterator const * - -ida_hexrays.cinsn_list_t_iterator.__next__ (method) - __next__(self) - -ida_hexrays.cinsn_t (class) - Proxy of C++ cinsn_t class. - -ida_hexrays.cinsn_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t.__init__ (method) - __init__(self) -> cinsn_t - __init__(self, r) -> cinsn_t - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t._deregister (method) - _deregister(self) - -ida_hexrays.cinsn_t._get_casm (method) - _get_casm(self) -> casm_t - -ida_hexrays.cinsn_t._get_cblock (method) - _get_cblock(self) -> cblock_t - -ida_hexrays.cinsn_t._get_cdo (method) - _get_cdo(self) -> cdo_t - -ida_hexrays.cinsn_t._get_cexpr (method) - _get_cexpr(self) -> cexpr_t - -ida_hexrays.cinsn_t._get_cfor (method) - _get_cfor(self) -> cfor_t - -ida_hexrays.cinsn_t._get_cgoto (method) - _get_cgoto(self) -> cgoto_t - -ida_hexrays.cinsn_t._get_cif (method) - _get_cif(self) -> cif_t - -ida_hexrays.cinsn_t._get_creturn (method) - _get_creturn(self) -> creturn_t - -ida_hexrays.cinsn_t._get_cswitch (method) - _get_cswitch(self) -> cswitch_t - -ida_hexrays.cinsn_t._get_cwhile (method) - _get_cwhile(self) -> cwhile_t - -ida_hexrays.cinsn_t._print (method) - _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) - - Parameters - ---------- - indent: int - vp: vc_printer_t & - use_curly: enum use_curly_t - -ida_hexrays.cinsn_t._register (method) - _register(self) - -ida_hexrays.cinsn_t._replace_by (method) - _replace_by(self, r) - - Parameters - ---------- - r: cinsn_t * - -ida_hexrays.cinsn_t._set_casm (method) - _set_casm(self, _v) - - Parameters - ---------- - _v: casm_t * - -ida_hexrays.cinsn_t._set_cblock (method) - _set_cblock(self, _v) - - Parameters - ---------- - _v: cblock_t * - -ida_hexrays.cinsn_t._set_cdo (method) - _set_cdo(self, _v) - - Parameters - ---------- - _v: cdo_t * - -ida_hexrays.cinsn_t._set_cexpr (method) - _set_cexpr(self, _v) - - Parameters - ---------- - _v: cexpr_t * - -ida_hexrays.cinsn_t._set_cfor (method) - _set_cfor(self, _v) - - Parameters - ---------- - _v: cfor_t * - -ida_hexrays.cinsn_t._set_cgoto (method) - _set_cgoto(self, _v) - - Parameters - ---------- - _v: cgoto_t * - -ida_hexrays.cinsn_t._set_cif (method) - _set_cif(self, _v) - - Parameters - ---------- - _v: cif_t * - -ida_hexrays.cinsn_t._set_creturn (method) - _set_creturn(self, _v) - - Parameters - ---------- - _v: creturn_t * - -ida_hexrays.cinsn_t._set_cswitch (method) - _set_cswitch(self, _v) - - Parameters - ---------- - _v: cswitch_t * - -ida_hexrays.cinsn_t._set_cwhile (method) - _set_cwhile(self, _v) - - Parameters - ---------- - _v: cwhile_t * - -ida_hexrays.cinsn_t.assign (method) - assign(self, r) -> cinsn_t - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t.casm (variable) +ida_hexrays.cinsn_list_t.back(self, *args) -> "cinsn_t const &" + +ida_hexrays.cinsn_list_t.begin(self) -> "cinsn_list_t_iterator" + +ida_hexrays.cinsn_list_t.clear(self) -> None + +ida_hexrays.cinsn_list_t.empty(self) -> bool + +ida_hexrays.cinsn_list_t.end(self) -> "cinsn_list_t_iterator" + +ida_hexrays.cinsn_list_t.erase(self, p: "cinsn_list_t_iterator") -> None + +ida_hexrays.cinsn_list_t.find(self, item) + +ida_hexrays.cinsn_list_t.front(self, *args) -> "cinsn_t const &" + +ida_hexrays.cinsn_list_t.index(self, item) + +ida_hexrays.cinsn_list_t.insert(self, *args) -> "cinsn_list_t_iterator" + +ida_hexrays.cinsn_list_t.pop_back(self) -> None + +ida_hexrays.cinsn_list_t.pop_front(self) -> None + +ida_hexrays.cinsn_list_t.push_back(self, *args) -> "cinsn_t &" + +ida_hexrays.cinsn_list_t.push_front(self, x: "cinsn_t") -> None + +ida_hexrays.cinsn_list_t.rbegin(self, *args) -> "qlist< cinsn_t >::const_reverse_iterator" + +ida_hexrays.cinsn_list_t.remove(self, v: "cinsn_t") -> bool + +ida_hexrays.cinsn_list_t.rend(self, *args) -> "qlist< cinsn_t >::const_reverse_iterator" + +ida_hexrays.cinsn_list_t.size(self) -> "size_t" + +ida_hexrays.cinsn_list_t.splice(self, pos: "qlist< cinsn_t >::iterator", other: "cinsn_list_t", first: "qlist< cinsn_t >::iterator", last: "qlist< cinsn_t >::iterator") -> None + +ida_hexrays.cinsn_list_t.swap(self, x: "cinsn_list_t") -> None + +ida_hexrays.cinsn_list_t_iterator + +ida_hexrays.cinsn_list_t_iterator.__eq__(self, x: "cinsn_list_t_iterator") -> bool + +ida_hexrays.cinsn_list_t_iterator.__init__(self) + +ida_hexrays.cinsn_list_t_iterator.__ne__(self, x: "cinsn_list_t_iterator") -> bool + +ida_hexrays.cinsn_list_t_iterator.__next__(self) -> None + +ida_hexrays.cinsn_t + +ida_hexrays.cinsn_t.__eq__(self, r: "cinsn_t") -> bool + +ida_hexrays.cinsn_t.__ge__(self, r: "cinsn_t") -> bool + +ida_hexrays.cinsn_t.__gt__(self, r: "cinsn_t") -> bool + +ida_hexrays.cinsn_t.__init__(self, *args) + +ida_hexrays.cinsn_t.__le__(self, r: "cinsn_t") -> bool + +ida_hexrays.cinsn_t.__lt__(self, r: "cinsn_t") -> bool + +ida_hexrays.cinsn_t.__ne__(self, r: "cinsn_t") -> bool + +ida_hexrays.cinsn_t._deregister(self) -> None + +ida_hexrays.cinsn_t._get_casm(self) -> "casm_t *" + +ida_hexrays.cinsn_t._get_cblock(self) -> "cblock_t *" + +ida_hexrays.cinsn_t._get_cdo(self) -> "cdo_t *" + +ida_hexrays.cinsn_t._get_cexpr(self) -> "cexpr_t *" + +ida_hexrays.cinsn_t._get_cfor(self) -> "cfor_t *" + +ida_hexrays.cinsn_t._get_cgoto(self) -> "cgoto_t *" + +ida_hexrays.cinsn_t._get_cif(self) -> "cif_t *" + +ida_hexrays.cinsn_t._get_creturn(self) -> "creturn_t *" + +ida_hexrays.cinsn_t._get_cswitch(self) -> "cswitch_t *" + +ida_hexrays.cinsn_t._get_cwhile(self) -> "cwhile_t *" + +ida_hexrays.cinsn_t._print(self, indent: int, vp: "vc_printer_t", use_curly: "use_curly_t" = CALC_CURLY_BRACES) -> None + +ida_hexrays.cinsn_t._register(self) -> None + +ida_hexrays.cinsn_t._replace_by(self, r: "cinsn_t") -> None + +ida_hexrays.cinsn_t._set_casm(self, _v: "casm_t") -> None + +ida_hexrays.cinsn_t._set_cblock(self, _v: "cblock_t") -> None + +ida_hexrays.cinsn_t._set_cdo(self, _v: "cdo_t") -> None + +ida_hexrays.cinsn_t._set_cexpr(self, _v: "cexpr_t") -> None + +ida_hexrays.cinsn_t._set_cfor(self, _v: "cfor_t") -> None + +ida_hexrays.cinsn_t._set_cgoto(self, _v: "cgoto_t") -> None + +ida_hexrays.cinsn_t._set_cif(self, _v: "cif_t") -> None + +ida_hexrays.cinsn_t._set_creturn(self, _v: "creturn_t") -> None + +ida_hexrays.cinsn_t._set_cswitch(self, _v: "cswitch_t") -> None + +ida_hexrays.cinsn_t._set_cwhile(self, _v: "cwhile_t") -> None + +ida_hexrays.cinsn_t.assign(self, r: "cinsn_t") -> "cinsn_t &" + +ida_hexrays.cinsn_t.casm details of asm-statement -ida_hexrays.cinsn_t.cblock (variable) +ida_hexrays.cinsn_t.cblock details of block-statement -ida_hexrays.cinsn_t.cdo (variable) +ida_hexrays.cinsn_t.cdo details of do-statement -ida_hexrays.cinsn_t.cexpr (variable) +ida_hexrays.cinsn_t.cexpr details of expression-statement -ida_hexrays.cinsn_t.cfor (variable) +ida_hexrays.cinsn_t.cfor details of for-statement -ida_hexrays.cinsn_t.cgoto (variable) +ida_hexrays.cinsn_t.cgoto details of goto-statement -ida_hexrays.cinsn_t.cif (variable) +ida_hexrays.cinsn_t.cif details of if-statement -ida_hexrays.cinsn_t.cleanup (method) - cleanup(self) - Cleanup the statement. This function properly deletes all children and sets the - item type to cit_empty. +ida_hexrays.cinsn_t.cleanup(self) -> None + Cleanup the statement. This function properly deletes all children and sets the item type to cit_empty. + -ida_hexrays.cinsn_t.collect_free_breaks (method) - collect_free_breaks(self, breaks) -> bool - Collect free break statements. This function finds all free break statements - within the current statement. A break statement is free if it does not have a - loop or switch parent that that is also within the current statement. - - @param breaks: (C++: cinsnptrvec_t *) pointer to the variable where the vector of all found free break - statements is returned. This argument can be nullptr. - @return: true if some free break statements have been found +ida_hexrays.cinsn_t.collect_free_breaks(self, breaks: "cinsnptrvec_t") -> bool + Collect free `break` statements. This function finds all free `break` statements within the current statement. A `break` statement is free if it does not have a loop or switch parent that that is also within the current statement. + + @param breaks: pointer to the variable where the vector of all found free `break` statements is returned. This argument can be nullptr. + @returns true if some free `break` statements have been found -ida_hexrays.cinsn_t.collect_free_continues (method) - collect_free_continues(self, continues) -> bool - Collect free continue statements. This function finds all free continue - statements within the current statement. A continue statement is free if it does - not have a loop parent that that is also within the current statement. - - @param continues: (C++: cinsnptrvec_t *) pointer to the variable where the vector of all found free - continue statements is returned. This argument can be nullptr. - @return: true if some free continue statements have been found +ida_hexrays.cinsn_t.collect_free_continues(self, continues: "cinsnptrvec_t") -> bool + Collect free `continue` statements. This function finds all free `continue` statements within the current statement. A `continue` statement is free if it does not have a loop parent that that is also within the current statement. + + @param continues: pointer to the variable where the vector of all found free `continue` statements is returned. This argument can be nullptr. + @returns true if some free `continue` statements have been found -ida_hexrays.cinsn_t.compare (method) - compare(self, r) -> int - - @param r: cinsn_t const & +ida_hexrays.cinsn_t.compare(self, r: "cinsn_t") -> int -ida_hexrays.cinsn_t.contains_free_break (method) - contains_free_break(self) -> bool - Check if the statement has free break statements. +ida_hexrays.cinsn_t.contains_free_break(self) -> bool + Check if the statement has free `break` statements. -ida_hexrays.cinsn_t.contains_free_continue (method) - contains_free_continue(self) -> bool - Check if the statement has free continue statements. +ida_hexrays.cinsn_t.contains_free_continue(self) -> bool + Check if the statement has free `continue` statements. -ida_hexrays.cinsn_t.contains_insn (method) - contains_insn(self, type, times=1) -> bool - Check if the statement contains a statement of the specified type. - - @param type: (C++: ctype_t) statement opcode to look for - @param times: (C++: int) how many times TYPE should be present - @return: true if the statement has at least TIMES children with opcode == TYPE +ida_hexrays.cinsn_t.contains_insn(self, type: "ctype_t", times: int = 1) -> bool + Check if the statement contains a statement of the specified type. + + @param type: statement opcode to look for + @param times: how many times TYPE should be present + @returns true if the statement has at least TIMES children with opcode == TYPE -ida_hexrays.cinsn_t.create_if (method) - create_if(self, cnd) -> cif_t - Create a new if-statement. The current statement must be a block. The new - statement will be appended to it. - - @param cnd: (C++: cexpr_t *) if condition. It will be deleted after being copied. +ida_hexrays.cinsn_t.create_if(self, cnd: "cexpr_t") -> "cif_t &" + Create a new if-statement. The current statement must be a block. The new statement will be appended to it. + + @param cnd: if condition. It will be deleted after being copied. -ida_hexrays.cinsn_t.creturn (variable) +ida_hexrays.cinsn_t.creturn details of return-statement -ida_hexrays.cinsn_t.cswitch (variable) +ida_hexrays.cinsn_t.cswitch details of switch-statement -ida_hexrays.cinsn_t.cwhile (variable) +ida_hexrays.cinsn_t.cthrow + details of throw-statement + +ida_hexrays.cinsn_t.ctry + details of try-statement + +ida_hexrays.cinsn_t.cwhile details of while-statement -ida_hexrays.cinsn_t.dstr (method) - dstr(self) -> char const * +ida_hexrays.cinsn_t.dstr(self) -> str -ida_hexrays.cinsn_t.insn_is_epilog (method) - insn_is_epilog(insn) -> bool - - @param insn: cinsn_t const * +ida_hexrays.cinsn_t.insn_is_epilog(insn: "cinsn_t") -> bool -ida_hexrays.cinsn_t.is_epilog (method) +ida_hexrays.cinsn_t.is_epilog(self) -ida_hexrays.cinsn_t.is_ordinary_flow (method) - is_ordinary_flow(self) -> bool - Check if the statement passes execution to the next statement. - - @return: false if the statement breaks the control flow (like goto, return, etc) +ida_hexrays.cinsn_t.is_ordinary_flow(self) -> bool + Check if the statement passes execution to the next statement. + + @returns false if the statement breaks the control flow (like goto, return, etc) -ida_hexrays.cinsn_t.new_insn (method) - new_insn(self, insn_ea) -> cinsn_t - Create a new statement. The current statement must be a block. The new statement - will be appended to it. - - @param insn_ea: (C++: ea_t) statement address +ida_hexrays.cinsn_t.new_insn(self, insn_ea: ida_idaapi.ea_t) -> "cinsn_t &" + Create a new statement. The current statement must be a block. The new statement will be appended to it. + + @param insn_ea: statement address -ida_hexrays.cinsn_t.print1 (method) - print1(self, func) - Print the statement into one line. Currently this function is not available. - - @param func: (C++: const cfunc_t *) parent function. This argument is used to find out the referenced - variable names. +ida_hexrays.cinsn_t.print1(self, func: "cfunc_t") -> None + Print the statement into one line. Currently this function is not available. + + @param func: parent function. This argument is used to find out the referenced variable names. -ida_hexrays.cinsn_t.swap (method) - swap(self, r) - - @param r: cinsn_t & +ida_hexrays.cinsn_t.swap(self, r: "cinsn_t") -> None -ida_hexrays.cinsn_t.zero (method) - zero(self) +ida_hexrays.cinsn_t.zero(self) -> None Overwrite with zeroes without cleaning memory or deleting children. -ida_hexrays.cinsn_t_insn_is_epilog (function) - cinsn_t_insn_is_epilog(insn) -> bool - - @param insn: cinsn_t const * +ida_hexrays.cinsnptrvec_t -ida_hexrays.cinsnptrvec_t (class) - Proxy of C++ qvector< cinsn_t * > class. +ida_hexrays.cinsnptrvec_t.__eq__(self, r: "cinsnptrvec_t") -> bool -ida_hexrays.cinsnptrvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< cinsn_t * > const & +ida_hexrays.cinsnptrvec_t.__getitem__(self, i: "size_t") -> "cinsn_t *const &" -ida_hexrays.cinsnptrvec_t.__getitem__ (method) - __getitem__(self, i) -> cinsn_t - - @param i: size_t +ida_hexrays.cinsnptrvec_t.__init__(self, *args) -ida_hexrays.cinsnptrvec_t.__init__ (method) - __init__(self) -> cinsnptrvec_t - __init__(self, x) -> cinsnptrvec_t - - @param x: qvector< cinsn_t * > const & +ida_hexrays.cinsnptrvec_t.__len__(self) -> "size_t" -ida_hexrays.cinsnptrvec_t.__len__ (method) - __len__(self) -> size_t +ida_hexrays.cinsnptrvec_t.__ne__(self, r: "cinsnptrvec_t") -> bool -ida_hexrays.cinsnptrvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< cinsn_t * > const & +ida_hexrays.cinsnptrvec_t.__setitem__(self, i: "size_t", v: "cinsn_t") -> None -ida_hexrays.cinsnptrvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: cinsn_t *const & +ida_hexrays.cinsnptrvec_t._del(self, x: "cinsn_t") -> bool -ida_hexrays.cinsnptrvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: cinsn_t *const & +ida_hexrays.cinsnptrvec_t.add_unique(self, x: "cinsn_t") -> bool -ida_hexrays.cinsnptrvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: cinsn_t *const & +ida_hexrays.cinsnptrvec_t.append(self, x: "cinsn_t") -> None -ida_hexrays.cinsnptrvec_t.at (method) - at(self, _idx) -> cinsn_t - - @param _idx: size_t +ida_hexrays.cinsnptrvec_t.at(self, _idx: "size_t") -> "cinsn_t *const &" -ida_hexrays.cinsnptrvec_t.begin (method) - begin(self) -> qvector< cinsn_t * >::iterator - begin(self) -> qvector< cinsn_t * >::const_iterator +ida_hexrays.cinsnptrvec_t.begin(self, *args) -> "qvector< cinsn_t * >::const_iterator" -ida_hexrays.cinsnptrvec_t.capacity (method) - capacity(self) -> size_t +ida_hexrays.cinsnptrvec_t.capacity(self) -> "size_t" -ida_hexrays.cinsnptrvec_t.clear (method) - clear(self) +ida_hexrays.cinsnptrvec_t.clear(self) -> None -ida_hexrays.cinsnptrvec_t.empty (method) - empty(self) -> bool +ida_hexrays.cinsnptrvec_t.empty(self) -> bool -ida_hexrays.cinsnptrvec_t.end (method) - end(self) -> qvector< cinsn_t * >::iterator - end(self) -> qvector< cinsn_t * >::const_iterator +ida_hexrays.cinsnptrvec_t.end(self, *args) -> "qvector< cinsn_t * >::const_iterator" -ida_hexrays.cinsnptrvec_t.erase (method) - erase(self, it) -> qvector< cinsn_t * >::iterator - - @param it: qvector< cinsn_t * >::iterator - - erase(self, first, last) -> qvector< cinsn_t * >::iterator - - @param first: qvector< cinsn_t * >::iterator - @param last: qvector< cinsn_t * >::iterator +ida_hexrays.cinsnptrvec_t.erase(self, *args) -> "qvector< cinsn_t * >::iterator" -ida_hexrays.cinsnptrvec_t.extract (method) - extract(self) -> cinsn_t ** +ida_hexrays.cinsnptrvec_t.extend(self, x: "cinsnptrvec_t") -> None -ida_hexrays.cinsnptrvec_t.find (method) - find(self, x) -> qvector< cinsn_t * >::iterator - - @param x: cinsn_t *const & - - find(self, x) -> qvector< cinsn_t * >::const_iterator - - @param x: cinsn_t *const & +ida_hexrays.cinsnptrvec_t.extract(self) -> "cinsn_t **" -ida_hexrays.cinsnptrvec_t.has (method) - has(self, x) -> bool - - @param x: cinsn_t *const & +ida_hexrays.cinsnptrvec_t.find(self, *args) -> "qvector< cinsn_t * >::const_iterator" -ida_hexrays.cinsnptrvec_t.inject (method) - inject(self, s, len) - - @param s: cinsn_t ** - @param len: size_t +ida_hexrays.cinsnptrvec_t.has(self, x: "cinsn_t") -> bool -ida_hexrays.cinsnptrvec_t.insert (method) - insert(self, it, x) -> qvector< cinsn_t * >::iterator - - @param it: qvector< cinsn_t * >::iterator - @param x: cinsn_t *const & +ida_hexrays.cinsnptrvec_t.inject(self, s: "cinsn_t **", len: "size_t") -> None -ida_hexrays.cinsnptrvec_t.pop_back (method) - pop_back(self) +ida_hexrays.cinsnptrvec_t.insert(self, it: "qvector< cinsn_t * >::iterator", x: "cinsn_t") -> "qvector< cinsn_t * >::iterator" -ida_hexrays.cinsnptrvec_t.push_back (method) - push_back(self, x) - - @param x: cinsn_t *const & - - push_back(self) -> cinsn_t *& +ida_hexrays.cinsnptrvec_t.pop_back(self) -> None -ida_hexrays.cinsnptrvec_t.qclear (method) - qclear(self) +ida_hexrays.cinsnptrvec_t.push_back(self, *args) -> "cinsn_t *&" -ida_hexrays.cinsnptrvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_hexrays.cinsnptrvec_t.qclear(self) -> None -ida_hexrays.cinsnptrvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: cinsn_t *const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_hexrays.cinsnptrvec_t.reserve(self, cnt: "size_t") -> None -ida_hexrays.cinsnptrvec_t.size (method) - size(self) -> size_t +ida_hexrays.cinsnptrvec_t.resize(self, *args) -> None -ida_hexrays.cinsnptrvec_t.swap (method) - swap(self, r) - - @param r: qvector< cinsn_t * > & +ida_hexrays.cinsnptrvec_t.size(self) -> "size_t" -ida_hexrays.cinsnptrvec_t.truncate (method) - truncate(self) +ida_hexrays.cinsnptrvec_t.swap(self, r: "cinsnptrvec_t") -> None -ida_hexrays.cit_asm (variable) +ida_hexrays.cinsnptrvec_t.truncate(self) -> None + +ida_hexrays.cit_asm asm-statement -ida_hexrays.cit_block (variable) +ida_hexrays.cit_block block-statement: { ... } -ida_hexrays.cit_break (variable) +ida_hexrays.cit_break break-statement -ida_hexrays.cit_continue (variable) +ida_hexrays.cit_continue continue-statement -ida_hexrays.cit_do (variable) +ida_hexrays.cit_do do-statement -ida_hexrays.cit_empty (variable) +ida_hexrays.cit_empty instruction types start here -ida_hexrays.cit_expr (variable) +ida_hexrays.cit_expr expression-statement: expr; -ida_hexrays.cit_for (variable) +ida_hexrays.cit_for for-statement -ida_hexrays.cit_goto (variable) +ida_hexrays.cit_goto goto-statement -ida_hexrays.cit_if (variable) +ida_hexrays.cit_if if-statement -ida_hexrays.cit_return (variable) +ida_hexrays.cit_return return-statement -ida_hexrays.cit_switch (variable) +ida_hexrays.cit_switch switch-statement -ida_hexrays.cit_while (variable) +ida_hexrays.cit_throw + C++ throw-statement. + +ida_hexrays.cit_try + C++ try-statement. + +ida_hexrays.cit_while while-statement -ida_hexrays.citem_cmt_t (class) - Proxy of C++ citem_cmt_t class. +ida_hexrays.citem_cmt_t -ida_hexrays.citem_cmt_t.__init__ (method) - __init__(self) -> citem_cmt_t - __init__(self, s) -> citem_cmt_t - - @param s: char const * +ida_hexrays.citem_cmt_t.__init__(self, *args) -ida_hexrays.citem_cmt_t.__str__ (method) - __str__(self) -> char const * +ida_hexrays.citem_cmt_t.__str__(self) -> str -ida_hexrays.citem_cmt_t.c_str (method) - c_str(self) -> char const * +ida_hexrays.citem_cmt_t.c_str(self) -> str -ida_hexrays.citem_cmt_t.used (variable) +ida_hexrays.citem_cmt_t.used the comment has been retrieved? -ida_hexrays.citem_locator_t (class) - Proxy of C++ citem_locator_t class. +ida_hexrays.citem_locator_t -ida_hexrays.citem_locator_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: citem_locator_t const & +ida_hexrays.citem_locator_t.__eq__(self, r: "citem_locator_t") -> bool -ida_hexrays.citem_locator_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: citem_locator_t const & +ida_hexrays.citem_locator_t.__ge__(self, r: "citem_locator_t") -> bool -ida_hexrays.citem_locator_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: citem_locator_t const & +ida_hexrays.citem_locator_t.__gt__(self, r: "citem_locator_t") -> bool -ida_hexrays.citem_locator_t.__init__ (method) - __init__(self, _ea, _op) -> citem_locator_t - - @param _ea: ea_t - @param _op: enum ctype_t - - __init__(self, i) -> citem_locator_t - - @param i: citem_t const * +ida_hexrays.citem_locator_t.__init__(self, *args) -ida_hexrays.citem_locator_t.__le__ (method) - __le__(self, r) -> bool - - @param r: citem_locator_t const & +ida_hexrays.citem_locator_t.__le__(self, r: "citem_locator_t") -> bool -ida_hexrays.citem_locator_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: citem_locator_t const & +ida_hexrays.citem_locator_t.__lt__(self, r: "citem_locator_t") -> bool -ida_hexrays.citem_locator_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: citem_locator_t const & +ida_hexrays.citem_locator_t.__ne__(self, r: "citem_locator_t") -> bool -ida_hexrays.citem_locator_t.compare (method) - compare(self, r) -> int - - @param r: citem_locator_t const & +ida_hexrays.citem_locator_t.compare(self, r: "citem_locator_t") -> int -ida_hexrays.citem_locator_t.ea (variable) +ida_hexrays.citem_locator_t.ea citem address -ida_hexrays.citem_locator_t.op (variable) +ida_hexrays.citem_locator_t.op citem operation -ida_hexrays.citem_t (class) - Proxy of C++ citem_t class. +ida_hexrays.citem_t -ida_hexrays.citem_t.__dbg_get_meminfo (method) - __dbg_get_meminfo(self) -> qstring +ida_hexrays.citem_t.__dbg_get_meminfo(self) -> str -ida_hexrays.citem_t.__dbg_get_registered_kind (method) - __dbg_get_registered_kind(self) -> int +ida_hexrays.citem_t.__dbg_get_registered_kind(self) -> int -ida_hexrays.citem_t.__init__ (method) - __init__(self, o=cot_empty) -> citem_t - - @param o: enum ctype_t +ida_hexrays.citem_t.__init__(self, o: "ctype_t" = cot_empty) -ida_hexrays.citem_t._acquire_ownership (method) +ida_hexrays.citem_t._acquire_ownership(self, v, acquire) -ida_hexrays.citem_t._ensure_cond (method) +ida_hexrays.citem_t._ensure_cond(self, ok, cond_str) -ida_hexrays.citem_t._ensure_no_obj (method) +ida_hexrays.citem_t._ensure_no_obj(self, o, attr, attr_is_acquired) -ida_hexrays.citem_t._ensure_no_op (method) +ida_hexrays.citem_t._ensure_no_op(self) -ida_hexrays.citem_t._ensure_ownership_transferrable (method) +ida_hexrays.citem_t._ensure_ownership_transferrable(self, v) -ida_hexrays.citem_t._get_op (method) - _get_op(self) -> ctype_t +ida_hexrays.citem_t._get_op(self) -> "ctype_t" -ida_hexrays.citem_t._maybe_disown_and_deregister (method) +ida_hexrays.citem_t._maybe_disown_and_deregister(self) -ida_hexrays.citem_t._meminfo (method) +ida_hexrays.citem_t._meminfo(self) -ida_hexrays.citem_t._obj_id (method) - _obj_id(self) -> PyObject * +ida_hexrays.citem_t._obj_id(self) -> "PyObject *" -ida_hexrays.citem_t._own_and_register (method) +ida_hexrays.citem_t._own_and_register(self) -ida_hexrays.citem_t._set_op (method) - _set_op(self, v) - - Parameters - ---------- - v: enum ctype_t +ida_hexrays.citem_t._set_op(self, v: "ctype_t") -> None -ida_hexrays.citem_t.contains_expr (method) - contains_expr(self, e) -> bool +ida_hexrays.citem_t.contains_expr(self, e: "cexpr_t") -> bool Does the item contain an expression? - - @param e: (C++: const cexpr_t *) cexpr_t const * -ida_hexrays.citem_t.contains_label (method) - contains_label(self) -> bool +ida_hexrays.citem_t.contains_label(self) -> bool Does the item contain a label? -ida_hexrays.citem_t.ea (variable) +ida_hexrays.citem_t.ea address that corresponds to the item. may be BADADDR -ida_hexrays.citem_t.find_closest_addr (method) - find_closest_addr(self, _ea) -> citem_t - - @param _ea: ea_t +ida_hexrays.citem_t.find_closest_addr(self, _ea: ida_idaapi.ea_t) -> "citem_t *" -ida_hexrays.citem_t.find_parent_of (method) - find_parent_of(self, sitem) -> citem_t - - @param sitem: citem_t const * - - find_parent_of(self, item) -> citem_t - - @param item: citem_t const * +ida_hexrays.citem_t.find_parent_of(self, item: "citem_t") -> "citem_t *" + Find parent of the specified item. + + @param item: Item to find the parent of. The search will be performed among the children of the item pointed by `this`. + @returns nullptr if not found -ida_hexrays.citem_t.index (variable) - an index in cfunc_t::treeitems. meaningful only after print_func() +ida_hexrays.citem_t.index + an index in cfunc_t::treeitems. meaningful only after print_func() + -ida_hexrays.citem_t.is_expr (method) - is_expr(self) -> bool +ida_hexrays.citem_t.is_expr(self) -> bool Is an expression? -ida_hexrays.citem_t.label_num (variable) - label number. -1 means no label. items of the expression types (cot_...) should - not have labels at the final maturity level, but at the intermediate levels any - ctree item may have a label. Labels must be unique. Usually they correspond to - the basic block numbers. +ida_hexrays.citem_t.label_num + label number. -1 means no label. items of the expression types (cot_...) should not have labels at the final maturity level, but at the intermediate levels any ctree item may have a label. Labels must be unique. Usually they correspond to the basic block numbers. + -ida_hexrays.citem_t.op (variable) +ida_hexrays.citem_t.op item type -ida_hexrays.citem_t.print1 (method) - print1(self, func) - Print item into one line. - - @param func: (C++: const cfunc_t *) parent function. This argument is used to find out the referenced - variable names. - @return: length of the generated text. +ida_hexrays.citem_t.print1(self, func: "cfunc_t") -> None + Print item into one line. + + @param func: parent function. This argument is used to find out the referenced variable names. + @returns length of the generated text. -ida_hexrays.citem_t.replace_by (method) +ida_hexrays.citem_t.replace_by(self, o) -ida_hexrays.citem_t.swap (method) - swap(self, r) +ida_hexrays.citem_t.swap(self, r: "citem_t") -> None Swap two citem_t. - - @param r: (C++: citem_t &) -ida_hexrays.citem_to_specific_type (function) +ida_hexrays.citem_to_specific_type(self) cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. -ida_hexrays.clear_cached_cfuncs (function) - clear_cached_cfuncs() +ida_hexrays.clear_cached_cfuncs() -> None Flush all cached decompilation results. -ida_hexrays.cloop_t (class) - Proxy of C++ cloop_t class. +ida_hexrays.cloop_t -ida_hexrays.cloop_t.__init__ (method) - __init__(self, b=None) -> cloop_t - - @param b: cinsn_t * - - __init__(self, r) -> cloop_t - - @param r: cloop_t const & +ida_hexrays.cloop_t.__init__(self, *args) -ida_hexrays.cloop_t.assign (method) - assign(self, r) -> cloop_t - - @param r: cloop_t const & +ida_hexrays.cloop_t.assign(self, r: "cloop_t") -> "cloop_t &" -ida_hexrays.cloop_t.cleanup (method) - cleanup(self) +ida_hexrays.cloop_t.cleanup(self) -> None -ida_hexrays.close_hexrays_waitbox (function) - close_hexrays_waitbox() - Close the waitbox displayed by the decompiler. Useful if DECOMP_NO_HIDE was used - during decompilation. +ida_hexrays.close_hexrays_waitbox() -> None + Close the waitbox displayed by the decompiler. Useful if DECOMP_NO_HIDE was used during decompilation. + -ida_hexrays.close_pseudocode (function) - close_pseudocode(f) -> bool - Close pseudocode window. - - @param f: (C++: TWidget *) pointer to window - @return: false if failed +ida_hexrays.close_pseudocode(f: "TWidget *") -> bool + Close pseudocode window. + + @param f: pointer to window + @returns false if failed -ida_hexrays.cnumber_t (class) - Proxy of C++ cnumber_t class. +ida_hexrays.cnumber_t -ida_hexrays.cnumber_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cnumber_t const & +ida_hexrays.cnumber_t.__eq__(self, r: "cnumber_t") -> bool -ida_hexrays.cnumber_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cnumber_t const & +ida_hexrays.cnumber_t.__ge__(self, r: "cnumber_t") -> bool -ida_hexrays.cnumber_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cnumber_t const & +ida_hexrays.cnumber_t.__gt__(self, r: "cnumber_t") -> bool -ida_hexrays.cnumber_t.__init__ (method) - __init__(self, _opnum=0) -> cnumber_t - - @param _opnum: int +ida_hexrays.cnumber_t.__init__(self, _opnum: int = 0) -ida_hexrays.cnumber_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cnumber_t const & +ida_hexrays.cnumber_t.__le__(self, r: "cnumber_t") -> bool -ida_hexrays.cnumber_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cnumber_t const & +ida_hexrays.cnumber_t.__lt__(self, r: "cnumber_t") -> bool -ida_hexrays.cnumber_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cnumber_t const & +ida_hexrays.cnumber_t.__ne__(self, r: "cnumber_t") -> bool -ida_hexrays.cnumber_t._print (method) - _print(self, type, parent=None, nice_stroff=None) - - Parameters - ---------- - type: tinfo_t const & - parent: citem_t const * - nice_stroff: bool * +ida_hexrays.cnumber_t._print(self, type: "tinfo_t", parent: "citem_t" = None, nice_stroff: "bool *" = None) -> None -ida_hexrays.cnumber_t._value (variable) +ida_hexrays.cnumber_t._value its value -ida_hexrays.cnumber_t.assign (method) - assign(self, v, nbytes, sign) - Assign new value - - @param v: (C++: uint64) new value - @param nbytes: (C++: int) size of the new value in bytes - @param sign: (C++: type_sign_t) sign of the value +ida_hexrays.cnumber_t.assign(self, v: "uint64", nbytes: int, sign: "type_sign_t") -> None + Assign new value + + @param v: new value + @param nbytes: size of the new value in bytes + @param sign: sign of the value -ida_hexrays.cnumber_t.compare (method) - compare(self, r) -> int - - @param r: cnumber_t const & +ida_hexrays.cnumber_t.compare(self, r: "cnumber_t") -> int -ida_hexrays.cnumber_t.nf (variable) +ida_hexrays.cnumber_t.nf how to represent it -ida_hexrays.cnumber_t.value (method) - value(self, type) -> uint64 - Get value. This function will properly extend the number sign to 64bits - depending on the type sign. - - @param type: (C++: const tinfo_t &) tinfo_t const & +ida_hexrays.cnumber_t.value(self, type: "tinfo_t") -> "uint64" + Get value. This function will properly extend the number sign to 64bits depending on the type sign. + -ida_hexrays.codegen_t (class) - Proxy of C++ codegen_t class. +ida_hexrays.codegen_t -ida_hexrays.codegen_t.__init__ (method) +ida_hexrays.codegen_t.__init__(self, *args, **kwargs) -ida_hexrays.codegen_t.analyze_prolog (method) - analyze_prolog(self, fc, reachable) -> merror_t - Analyze prolog/epilog of the function to decompile. If prolog is found, allocate - and fill 'mba->pi' structure. - - @param fc: (C++: const class qflow_chart_t &) flow chart - @param reachable: (C++: const class bitset_t &) bitmap of reachable blocks - @return: error code +ida_hexrays.codegen_t.analyze_prolog(self, fc: "qflow_chart_t", reachable: "bitset_t") -> "merror_t" + Analyze prolog/epilog of the function to decompile. If prolog is found, allocate and fill 'mba->pi' structure. + + @param fc: flow chart + @param reachable: bitmap of reachable blocks + @returns error code -ida_hexrays.codegen_t.emit (method) - emit(self, code, width, l, r, d, offsize) -> minsn_t - Emit one microinstruction. This variant accepts pointers to operands. It is more - difficult to use but permits to create virtually any instruction. Operands may - be nullptr when it makes sense. - - @param code: (C++: mcode_t) enum mcode_t - @param width: int - @param l: (C++: const mop_t *) uval_t - @param r: (C++: const mop_t *) uval_t - @param d: (C++: const mop_t *) uval_t - @param offsize: int - - emit(self, code, l, r, d) -> minsn_t - - @param code: enum mcode_t - @param l: mop_t const * - @param r: mop_t const * - @param d: mop_t const * +ida_hexrays.codegen_t.clear(self) -> None -ida_hexrays.codegen_t.emit_micro_mvm (method) - emit_micro_mvm(self, code, dtype, l, r, d, offsize) -> minsn_t - Emit one microinstruction. This variant takes a data type not a size. +ida_hexrays.codegen_t.emit(self, *args) -> "minsn_t *" + This function has the following signatures: - @param code: (C++: mcode_t) enum mcode_t - @param dtype: (C++: op_dtype_t) - @param l: (C++: uval_t) - @param r: (C++: uval_t) - @param d: (C++: uval_t) - @param offsize: (C++: int) - -ida_hexrays.codegen_t.gen_micro (method) - gen_micro(self) -> merror_t - Generate microcode for one instruction. The instruction is in INSN + 0. emit(code: mcode_t, width: int, l: int, r: int, d: int, offsize: int) -> minsn_t * + 1. emit(code: mcode_t, l: const mop_t *, r: const mop_t *, d: const mop_t *) -> minsn_t * - @return: MERR_OK - all ok MERR_BLOCK - all ok, need to switch to new block - MERR_BADBLK - delete current block and continue other error codes are - fatal - -ida_hexrays.codegen_t.load_effective_address (method) - load_effective_address(self, n, flags=0) -> mreg_t - Generate microcode to calculate the address of a memory operand. + # 0: emit(code: mcode_t, width: int, l: int, r: int, d: int, offsize: int) -> minsn_t * - @param n: (C++: int) - number of INSN operand - @param flags: (C++: int) - reserved for future use - @return: register containing the operand address. mr_none - failed (not a memory - operand) - -ida_hexrays.codegen_t.load_operand (method) - load_operand(self, opnum, flags=0) -> mreg_t - Generate microcode to load one operand. + Emit one microinstruction. The L, R, D arguments usually mean the register number. However, they depend on CODE. For example: + * for m_goto and m_jcnd L is the target address + * for m_ldc L is the constant value to load - @param opnum: (C++: int) number of INSN operand - @param flags: (C++: int) reserved for future use - @return: register containing the operand. + + + @returns created microinstruction. can be nullptr if the instruction got immediately optimized away. + + # 1: emit(code: mcode_t, l: const mop_t *, r: const mop_t *, d: const mop_t *) -> minsn_t * + + Emit one microinstruction. This variant accepts pointers to operands. It is more difficult to use but permits to create virtually any instruction. Operands may be nullptr when it makes sense. + -ida_hexrays.codegen_t.microgen_completed (method) - microgen_completed(self) +ida_hexrays.codegen_t.emit_micro_mvm(self, code: "mcode_t", dtype: "op_dtype_t", l: int, r: int, d: int, offsize: int) -> "minsn_t *" + Emit one microinstruction. This variant takes a data type not a size. + + +ida_hexrays.codegen_t.gen_micro(self) -> "merror_t" + Generate microcode for one instruction. The instruction is in INSN + + @returns MERR_OK - all ok MERR_BLOCK - all ok, need to switch to new block MERR_BADBLK - delete current block and continue other error codes are fatal + +ida_hexrays.codegen_t.load_effective_address(self, n: int, flags: int = 0) -> "mreg_t" + Generate microcode to calculate the address of a memory operand. + + @param n: - number of INSN operand + @param flags: - reserved for future use + @returns register containing the operand address. mr_none - failed (not a memory operand) + +ida_hexrays.codegen_t.load_operand(self, opnum: int, flags: int = 0) -> "mreg_t" + Generate microcode to load one operand. + + @param opnum: number of INSN operand + @param flags: reserved for future use + @returns register containing the operand. + +ida_hexrays.codegen_t.microgen_completed(self) -> None This method is called when the microcode generation is done. -ida_hexrays.codegen_t.prepare_gen_micro (method) - prepare_gen_micro(self) -> merror_t - Setup internal data to handle new instruction. This method should be called - before calling gen_micro(). Usually gen_micro() is called by the decompiler. You - have to call this function explicitly only if you yourself call gen_micro(). The - instruction is in INSN - - @return: MERR_OK - all ok other error codes are fatal +ida_hexrays.codegen_t.prepare_gen_micro(self) -> "merror_t" + Setup internal data to handle new instruction. This method should be called before calling gen_micro(). Usually gen_micro() is called by the decompiler. You have to call this function explicitly only if you yourself call gen_micro(). The instruction is in INSN + + @returns MERR_OK - all ok other error codes are fatal -ida_hexrays.codegen_t.store_operand (method) - store_operand(self, n, mop, flags=0, outins=None) -> bool - Generate microcode to store an operand. In case of success an arbitrary number - of instructions can be generated (and even no instruction if the source and - target are the same) - - @param n: (C++: int) - number of target INSN operand - @param mop: (C++: const mop_t &) - operand to be stored - @param flags: (C++: int) - reserved for future use - @param outins: (C++: minsn_t **) - (OUT) the last generated instruction - @return: success +ida_hexrays.codegen_t.store_operand(self, n: int, mop: "mop_t", flags: int = 0, outins: "minsn_t **" = None) -> bool + Generate microcode to store an operand. In case of success an arbitrary number of instructions can be generated (and even no instruction if the source and target are the same) + + @param n: - number of target INSN operand + @param mop: - operand to be stored + @param flags: - reserved for future use + @param outins: - (OUT) the last generated instruction + @returns success -ida_hexrays.convert_to_user_call (function) - convert_to_user_call(udc, cdg) -> merror_t - try to generate user-defined call for an instruction - - @param udc: (C++: const udcall_t &) udcall_t const & - @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.convert_to_user_call(udc: "udcall_t", cdg: "codegen_t") -> "merror_t" + try to generate user-defined call for an instruction + + @returns Microcode error codes code: MERR_OK - user-defined call generated else - error (MERR_INSN == inacceptable udc.tif) -ida_hexrays.cot_add (variable) +ida_hexrays.cot_add x + y -ida_hexrays.cot_asg (variable) +ida_hexrays.cot_asg x = y -ida_hexrays.cot_asgadd (variable) +ida_hexrays.cot_asgadd x += y -ida_hexrays.cot_asgband (variable) +ida_hexrays.cot_asgband x &= y -ida_hexrays.cot_asgbor (variable) +ida_hexrays.cot_asgbor x |= y -ida_hexrays.cot_asgmul (variable) +ida_hexrays.cot_asgmul x *= y -ida_hexrays.cot_asgsdiv (variable) +ida_hexrays.cot_asgsdiv x /= y signed -ida_hexrays.cot_asgshl (variable) +ida_hexrays.cot_asgshl x <<= y -ida_hexrays.cot_asgsmod (variable) +ida_hexrays.cot_asgsmod x %= y signed -ida_hexrays.cot_asgsshr (variable) +ida_hexrays.cot_asgsshr x >>= y signed -ida_hexrays.cot_asgsub (variable) +ida_hexrays.cot_asgsub x -= y -ida_hexrays.cot_asgudiv (variable) +ida_hexrays.cot_asgudiv x /= y unsigned -ida_hexrays.cot_asgumod (variable) +ida_hexrays.cot_asgumod x %= y unsigned -ida_hexrays.cot_asgushr (variable) +ida_hexrays.cot_asgushr x >>= y unsigned -ida_hexrays.cot_asgxor (variable) +ida_hexrays.cot_asgxor x ^= y -ida_hexrays.cot_band (variable) +ida_hexrays.cot_band x & y -ida_hexrays.cot_bnot (variable) +ida_hexrays.cot_bnot ~x -ida_hexrays.cot_bor (variable) +ida_hexrays.cot_bor x | y -ida_hexrays.cot_call (variable) +ida_hexrays.cot_call x(...) -ida_hexrays.cot_cast (variable) +ida_hexrays.cot_cast (type)x -ida_hexrays.cot_comma (variable) +ida_hexrays.cot_comma x, y -ida_hexrays.cot_eq (variable) +ida_hexrays.cot_eq x == y int or fpu (see EXFL_FPOP) -ida_hexrays.cot_fadd (variable) +ida_hexrays.cot_fadd x + y fp -ida_hexrays.cot_fdiv (variable) +ida_hexrays.cot_fdiv x / y fp -ida_hexrays.cot_fmul (variable) +ida_hexrays.cot_fmul x * y fp -ida_hexrays.cot_fneg (variable) +ida_hexrays.cot_fneg -x fp -ida_hexrays.cot_fnum (variable) +ida_hexrays.cot_fnum fpc -ida_hexrays.cot_fsub (variable) +ida_hexrays.cot_fsub x - y fp -ida_hexrays.cot_helper (variable) +ida_hexrays.cot_helper arbitrary name -ida_hexrays.cot_idx (variable) +ida_hexrays.cot_idx x[y] -ida_hexrays.cot_insn (variable) +ida_hexrays.cot_insn instruction in expression, internal representation only -ida_hexrays.cot_land (variable) +ida_hexrays.cot_land x && y -ida_hexrays.cot_lnot (variable) +ida_hexrays.cot_lnot !x -ida_hexrays.cot_lor (variable) +ida_hexrays.cot_lor x || y -ida_hexrays.cot_memptr (variable) +ida_hexrays.cot_memptr x->m, access size in 'ptrsize' -ida_hexrays.cot_memref (variable) +ida_hexrays.cot_memref x.m -ida_hexrays.cot_mul (variable) +ida_hexrays.cot_mul x * y -ida_hexrays.cot_ne (variable) +ida_hexrays.cot_ne x != y int or fpu (see EXFL_FPOP) -ida_hexrays.cot_neg (variable) +ida_hexrays.cot_neg -x -ida_hexrays.cot_num (variable) +ida_hexrays.cot_num n -ida_hexrays.cot_obj (variable) +ida_hexrays.cot_obj obj_ea -ida_hexrays.cot_postdec (variable) +ida_hexrays.cot_postdec x- -ida_hexrays.cot_postinc (variable) +ida_hexrays.cot_postinc x++ -ida_hexrays.cot_predec (variable) +ida_hexrays.cot_predec -x -ida_hexrays.cot_preinc (variable) +ida_hexrays.cot_preinc ++x -ida_hexrays.cot_ptr (variable) +ida_hexrays.cot_ptr *x, access size in 'ptrsize' -ida_hexrays.cot_ref (variable) +ida_hexrays.cot_ref &x -ida_hexrays.cot_sdiv (variable) +ida_hexrays.cot_sdiv x / y signed -ida_hexrays.cot_sge (variable) +ida_hexrays.cot_sge x >= y signed or fpu (see EXFL_FPOP) -ida_hexrays.cot_sgt (variable) +ida_hexrays.cot_sgt x > y signed or fpu (see EXFL_FPOP) -ida_hexrays.cot_shl (variable) +ida_hexrays.cot_shl x << y -ida_hexrays.cot_sizeof (variable) +ida_hexrays.cot_sizeof sizeof(x) -ida_hexrays.cot_sle (variable) +ida_hexrays.cot_sle x <= y signed or fpu (see EXFL_FPOP) -ida_hexrays.cot_slt (variable) +ida_hexrays.cot_slt x < y signed or fpu (see EXFL_FPOP) -ida_hexrays.cot_smod (variable) +ida_hexrays.cot_smod x % y signed -ida_hexrays.cot_sshr (variable) +ida_hexrays.cot_sshr x >> y signed -ida_hexrays.cot_str (variable) +ida_hexrays.cot_str string constant (user representation) -ida_hexrays.cot_sub (variable) +ida_hexrays.cot_sub x - y -ida_hexrays.cot_tern (variable) +ida_hexrays.cot_tern x ? y : z -ida_hexrays.cot_type (variable) +ida_hexrays.cot_type arbitrary type -ida_hexrays.cot_udiv (variable) +ida_hexrays.cot_udiv x / y unsigned -ida_hexrays.cot_uge (variable) +ida_hexrays.cot_uge x >= y unsigned -ida_hexrays.cot_ugt (variable) +ida_hexrays.cot_ugt x > y unsigned -ida_hexrays.cot_ule (variable) +ida_hexrays.cot_ule x <= y unsigned -ida_hexrays.cot_ult (variable) +ida_hexrays.cot_ult x < y unsigned -ida_hexrays.cot_umod (variable) +ida_hexrays.cot_umod x % y unsigned -ida_hexrays.cot_ushr (variable) +ida_hexrays.cot_ushr x >> y unsigned -ida_hexrays.cot_var (variable) +ida_hexrays.cot_var v -ida_hexrays.cot_xor (variable) +ida_hexrays.cot_xor x ^ y -ida_hexrays.create_cfunc (function) - create_cfunc(mba) -> cfuncptr_t - Create a new cfunc_t object. - - @param mba: (C++: mba_t *) microcode object. After creating the cfunc object it takes the - ownership of MBA. +ida_hexrays.create_cfunc(mba: "mba_t") -> "cfuncptr_t" + Create a new cfunc_t object. + + @param mba: microcode object. After creating the cfunc object it takes the ownership of MBA. -ida_hexrays.create_empty_mba (function) - create_empty_mba(mbr, hf=None) -> mba_t +ida_hexrays.create_empty_mba(mbr: "mba_ranges_t", hf: "hexrays_failure_t" = None) -> "mba_t *" Create an empty microcode object. - - @param mbr: (C++: const mba_ranges_t &) mba_ranges_t const & - @param hf: (C++: hexrays_failure_t *) -ida_hexrays.create_field_name (function) - create_field_name(type, offset=BADADDR) -> qstring - - @param type: tinfo_t const & - @param offset: uval_t +ida_hexrays.create_field_name(*args) -> str -ida_hexrays.create_helper (function) +ida_hexrays.create_helper(*args) Create a helper object.. -ida_hexrays.create_typedef (function) - create_typedef(name) -> tinfo_t - Create a reference to an ordinal type. +ida_hexrays.create_typedef(*args) -> "tinfo_t" + This function has the following signatures: - @param name: char const * + 0. create_typedef(name: str) -> tinfo_t + 1. create_typedef(n: int) -> tinfo_t - @return: type which refers to the specified ordinal. For example, if n is 1, the - type info which refers to ordinal type 1 is created. - create_typedef(n) -> tinfo_t + # 0: create_typedef(name: str) -> tinfo_t - @param n: int - -ida_hexrays.creturn_t (class) - Proxy of C++ creturn_t class. - -ida_hexrays.creturn_t.__eq__ (method) - __eq__(self, r) -> bool + Create a reference to a named type. + + @returns type which refers to the specified name. For example, if name is "DWORD", the type info which refers to "DWORD" is created. - @param r: creturn_t const & - -ida_hexrays.creturn_t.__ge__ (method) - __ge__(self, r) -> bool + # 1: create_typedef(n: int) -> tinfo_t - @param r: creturn_t const & + Create a reference to an ordinal type. + + @returns type which refers to the specified ordinal. For example, if n is 1, the type info which refers to ordinal type 1 is created. -ida_hexrays.creturn_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: creturn_t const & +ida_hexrays.creturn_t -ida_hexrays.creturn_t.__init__ (method) - __init__(self) -> creturn_t +ida_hexrays.creturn_t.__eq__(self, r: "creturn_t") -> bool -ida_hexrays.creturn_t.__le__ (method) - __le__(self, r) -> bool - - @param r: creturn_t const & +ida_hexrays.creturn_t.__ge__(self, r: "creturn_t") -> bool -ida_hexrays.creturn_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: creturn_t const & +ida_hexrays.creturn_t.__gt__(self, r: "creturn_t") -> bool -ida_hexrays.creturn_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: creturn_t const & +ida_hexrays.creturn_t.__init__(self) -ida_hexrays.creturn_t.compare (method) - compare(self, r) -> int - - @param r: creturn_t const & +ida_hexrays.creturn_t.__le__(self, r: "creturn_t") -> bool -ida_hexrays.cswitch_t (class) - Proxy of C++ cswitch_t class. +ida_hexrays.creturn_t.__lt__(self, r: "creturn_t") -> bool -ida_hexrays.cswitch_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cswitch_t const & +ida_hexrays.creturn_t.__ne__(self, r: "creturn_t") -> bool -ida_hexrays.cswitch_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cswitch_t const & +ida_hexrays.creturn_t.compare(self, r: "creturn_t") -> int -ida_hexrays.cswitch_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cswitch_t const & +ida_hexrays.cswitch_t -ida_hexrays.cswitch_t.__init__ (method) - __init__(self) -> cswitch_t +ida_hexrays.cswitch_t.__eq__(self, r: "cswitch_t") -> bool -ida_hexrays.cswitch_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cswitch_t const & +ida_hexrays.cswitch_t.__ge__(self, r: "cswitch_t") -> bool -ida_hexrays.cswitch_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cswitch_t const & +ida_hexrays.cswitch_t.__gt__(self, r: "cswitch_t") -> bool -ida_hexrays.cswitch_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cswitch_t const & +ida_hexrays.cswitch_t.__init__(self) -ida_hexrays.cswitch_t.cases (variable) +ida_hexrays.cswitch_t.__le__(self, r: "cswitch_t") -> bool + +ida_hexrays.cswitch_t.__lt__(self, r: "cswitch_t") -> bool + +ida_hexrays.cswitch_t.__ne__(self, r: "cswitch_t") -> bool + +ida_hexrays.cswitch_t.cases Switch cases: values and instructions. -ida_hexrays.cswitch_t.compare (method) - compare(self, r) -> int - - @param r: cswitch_t const & +ida_hexrays.cswitch_t.compare(self, r: "cswitch_t") -> int -ida_hexrays.cswitch_t.mvnf (variable) +ida_hexrays.cswitch_t.mvnf Maximal switch value and number format. -ida_hexrays.ctext_position_t (class) - Proxy of C++ ctext_position_t class. +ida_hexrays.ctext_position_t -ida_hexrays.ctext_position_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: ctext_position_t const & +ida_hexrays.ctext_position_t.__eq__(self, r: "ctext_position_t") -> bool -ida_hexrays.ctext_position_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: ctext_position_t const & +ida_hexrays.ctext_position_t.__ge__(self, r: "ctext_position_t") -> bool -ida_hexrays.ctext_position_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: ctext_position_t const & +ida_hexrays.ctext_position_t.__gt__(self, r: "ctext_position_t") -> bool -ida_hexrays.ctext_position_t.__init__ (method) - __init__(self, _lnnum=-1, _x=0, _y=0) -> ctext_position_t - - @param _lnnum: int - @param _x: int - @param _y: int +ida_hexrays.ctext_position_t.__init__(self, _lnnum: int = -1, _x: int = 0, _y: int = 0) -ida_hexrays.ctext_position_t.__le__ (method) - __le__(self, r) -> bool - - @param r: ctext_position_t const & +ida_hexrays.ctext_position_t.__le__(self, r: "ctext_position_t") -> bool -ida_hexrays.ctext_position_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: ctext_position_t const & +ida_hexrays.ctext_position_t.__lt__(self, r: "ctext_position_t") -> bool -ida_hexrays.ctext_position_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: ctext_position_t const & +ida_hexrays.ctext_position_t.__ne__(self, r: "ctext_position_t") -> bool -ida_hexrays.ctext_position_t.compare (method) - compare(self, r) -> int - - @param r: ctext_position_t const & +ida_hexrays.ctext_position_t.compare(self, r: "ctext_position_t") -> int -ida_hexrays.ctext_position_t.in_ctree (method) - in_ctree(self, hdrlines) -> bool - Is the cursor in the variable/type declaration area? - - @param hdrlines: (C++: int) Number of lines of the declaration area +ida_hexrays.ctext_position_t.in_ctree(self, hdrlines: int) -> bool + Is the cursor in the variable/type declaration area? + + @param hdrlines: Number of lines of the declaration area -ida_hexrays.ctext_position_t.lnnum (variable) +ida_hexrays.ctext_position_t.lnnum Line number. -ida_hexrays.ctext_position_t.x (variable) +ida_hexrays.ctext_position_t.x x coordinate of the cursor within the window -ida_hexrays.ctext_position_t.y (variable) - y coordinate of the cursor within the window +ida_hexrays.ctext_position_t.y + y coordinate of the cursor within the window + -ida_hexrays.ctree_anchor_t (class) - Proxy of C++ ctree_anchor_t class. +ida_hexrays.cthrow_t -ida_hexrays.ctree_anchor_t.__init__ (method) - __init__(self) -> ctree_anchor_t +ida_hexrays.cthrow_t.__eq__(self, r: "cthrow_t") -> bool -ida_hexrays.ctree_anchor_t.get_index (method) - get_index(self) -> int +ida_hexrays.cthrow_t.__ge__(self, r: "cthrow_t") -> bool -ida_hexrays.ctree_anchor_t.get_itp (method) - get_itp(self) -> item_preciser_t +ida_hexrays.cthrow_t.__gt__(self, r: "cthrow_t") -> bool -ida_hexrays.ctree_anchor_t.is_blkcmt_anchor (method) - is_blkcmt_anchor(self) -> bool +ida_hexrays.cthrow_t.__init__(self) -ida_hexrays.ctree_anchor_t.is_citem_anchor (method) - is_citem_anchor(self) -> bool +ida_hexrays.cthrow_t.__le__(self, r: "cthrow_t") -> bool -ida_hexrays.ctree_anchor_t.is_itp_anchor (method) - is_itp_anchor(self) -> bool +ida_hexrays.cthrow_t.__lt__(self, r: "cthrow_t") -> bool -ida_hexrays.ctree_anchor_t.is_lvar_anchor (method) - is_lvar_anchor(self) -> bool +ida_hexrays.cthrow_t.__ne__(self, r: "cthrow_t") -> bool -ida_hexrays.ctree_anchor_t.is_valid_anchor (method) - is_valid_anchor(self) -> bool +ida_hexrays.cthrow_t.compare(self, r: "cthrow_t") -> int -ida_hexrays.ctree_item_t (class) - Proxy of C++ ctree_item_t class. +ida_hexrays.ctree_anchor_t -ida_hexrays.ctree_item_t.__init__ (method) - __init__(self) -> ctree_item_t +ida_hexrays.ctree_anchor_t.__init__(self) -ida_hexrays.ctree_item_t._get_e (method) - _get_e(self) -> cexpr_t +ida_hexrays.ctree_anchor_t.get_index(self) -> int -ida_hexrays.ctree_item_t._get_f (method) - _get_f(self) -> cfunc_t +ida_hexrays.ctree_anchor_t.get_itp(self) -> "item_preciser_t" -ida_hexrays.ctree_item_t._get_i (method) - _get_i(self) -> cinsn_t +ida_hexrays.ctree_anchor_t.is_blkcmt_anchor(self) -> bool -ida_hexrays.ctree_item_t._get_it (method) - _get_it(self) -> citem_t +ida_hexrays.ctree_anchor_t.is_citem_anchor(self) -> bool -ida_hexrays.ctree_item_t._get_l (method) - _get_l(self) -> lvar_t +ida_hexrays.ctree_anchor_t.is_itp_anchor(self) -> bool -ida_hexrays.ctree_item_t._print (method) - _print(self) +ida_hexrays.ctree_anchor_t.is_lvar_anchor(self) -> bool -ida_hexrays.ctree_item_t.citype (variable) +ida_hexrays.ctree_anchor_t.is_valid_anchor(self) -> bool + +ida_hexrays.ctree_item_t + +ida_hexrays.ctree_item_t.__init__(self) + +ida_hexrays.ctree_item_t._get_e(self) -> "cexpr_t *" + +ida_hexrays.ctree_item_t._get_f(self) -> "cfunc_t *" + +ida_hexrays.ctree_item_t._get_i(self) -> "cinsn_t *" + +ida_hexrays.ctree_item_t._get_it(self) -> "citem_t *" + +ida_hexrays.ctree_item_t._get_l(self) -> "lvar_t *" + +ida_hexrays.ctree_item_t._print(self) -> None + +ida_hexrays.ctree_item_t.citype Item type. -ida_hexrays.ctree_item_t.dstr (method) - dstr(self) -> char const * +ida_hexrays.ctree_item_t.dstr(self) -> str -ida_hexrays.ctree_item_t.get_ea (method) - get_ea(self) -> ea_t - Get address of the current item. Each ctree item has an address. - - @return: BADADDR if failed +ida_hexrays.ctree_item_t.e + VDI_EXPR: Expression. -ida_hexrays.ctree_item_t.get_edm (method) - get_edm(self, parent) -> int - Get type of an enum member. If the current item is a symbolic constant, this - function will return information about it. - - @param parent: (C++: tinfo_t *) pointer to buffer for the enum type. - @return: member index or -1 if failed +ida_hexrays.ctree_item_t.e + VDI_EXPR: Expression. -ida_hexrays.ctree_item_t.get_label_num (method) - get_label_num(self, gln_flags) -> int - Get label number of the current item. - - @param gln_flags: (C++: int) Combination of get_label_num control bits - @return: -1 if failed or no label +ida_hexrays.ctree_item_t.f + VDI_FUNC: Function. -ida_hexrays.ctree_item_t.get_lvar (method) - get_lvar(self) -> lvar_t - Get pointer to local variable. If the current item is a local variable, this - function will return pointer to its definition. - - @return: nullptr if failed +ida_hexrays.ctree_item_t.f + VDI_FUNC: Function. -ida_hexrays.ctree_item_t.get_memptr (method) - get_memptr(self, p_sptr=None) -> member_t * - Get pointer to structure member. If the current item is a structure field, this - function will return pointer to its definition. - - @param p_sptr: (C++: struc_t **) pointer to the variable where the pointer to the parent structure - is returned. This parameter can be nullptr. - @return: nullptr if failed OBSOLETE FUNCTION, do not use! +ida_hexrays.ctree_item_t.get_ea(self) -> ida_idaapi.ea_t + Get address of the current item. Each ctree item has an address. + + @returns BADADDR if failed -ida_hexrays.ctree_item_t.get_udm (method) - get_udm(self, udm=None, parent=None, p_offset=None) -> int - Get type of a structure field. If the current item is a structure/union field, - this function will return information about it. - - @param udm: (C++: udm_t *) pointer to buffer for the udt member info. - @param parent: (C++: tinfo_t *) pointer to buffer for the struct/union type. - @param p_offset: (C++: uint64 *) pointer to the offset in bits inside udt. - @return: member index or -1 if failed Both output parameters can be nullptr. +ida_hexrays.ctree_item_t.get_edm(self, parent: "tinfo_t") -> int + Get type of an enum member. If the current item is a symbolic constant, this function will return information about it. + + @param parent: pointer to buffer for the enum type. + @returns member index or -1 if failed -ida_hexrays.ctree_item_t.is_citem (method) - is_citem(self) -> bool +ida_hexrays.ctree_item_t.get_label_num(self, gln_flags: int) -> int + Get label number of the current item. + + @param gln_flags: Combination of get_label_num control bits + @returns -1 if failed or no label + +ida_hexrays.ctree_item_t.get_lvar(self) -> "lvar_t *" + Get pointer to local variable. If the current item is a local variable, this function will return pointer to its definition. + + @returns nullptr if failed + +ida_hexrays.ctree_item_t.get_udm(self, udm: "udm_t" = None, parent: "tinfo_t" = None, p_offset: "uint64 *" = None) -> int + Get type of a structure field. If the current item is a structure/union field, this function will return information about it. + + @param udm: pointer to buffer for the udt member info. + @param parent: pointer to buffer for the struct/union type. + @param p_offset: pointer to the offset in bits inside udt. + @returns member index or -1 if failed Both output parameters can be nullptr. + +ida_hexrays.ctree_item_t.i + VDI_EXPR: Statement. + +ida_hexrays.ctree_item_t.i + VDI_EXPR: Statement. + +ida_hexrays.ctree_item_t.is_citem(self) -> bool Is the current item is a ctree item? -ida_hexrays.ctree_items_t (class) - Proxy of C++ qvector< citem_t * > class. +ida_hexrays.ctree_item_t.l + VDI_LVAR: Local variable. -ida_hexrays.ctree_items_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< citem_t * > const & +ida_hexrays.ctree_item_t.l + VDI_LVAR: Local variable. -ida_hexrays.ctree_items_t.__getitem__ (method) - __getitem__(self, i) -> citem_t - - @param i: size_t +ida_hexrays.ctree_item_t.loc + VDI_TAIL: Line tail. -ida_hexrays.ctree_items_t.__init__ (method) - __init__(self) -> ctree_items_t - __init__(self, x) -> ctree_items_t - - @param x: qvector< citem_t * > const & +ida_hexrays.ctree_items_t -ida_hexrays.ctree_items_t.__len__ (method) - __len__(self) -> size_t +ida_hexrays.ctree_items_t.__eq__(self, r: "ctree_items_t") -> bool -ida_hexrays.ctree_items_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< citem_t * > const & +ida_hexrays.ctree_items_t.__getitem__(self, i: "size_t") -> "citem_t *const &" -ida_hexrays.ctree_items_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: citem_t *const & +ida_hexrays.ctree_items_t.__init__(self, *args) -ida_hexrays.ctree_items_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: citem_t *const & +ida_hexrays.ctree_items_t.__len__(self) -> "size_t" -ida_hexrays.ctree_items_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: citem_t *const & +ida_hexrays.ctree_items_t.__ne__(self, r: "ctree_items_t") -> bool -ida_hexrays.ctree_items_t.at (method) - at(self, _idx) -> citem_t - - @param _idx: size_t +ida_hexrays.ctree_items_t.__setitem__(self, i: "size_t", v: "citem_t") -> None -ida_hexrays.ctree_items_t.begin (method) - begin(self) -> qvector< citem_t * >::iterator - begin(self) -> qvector< citem_t * >::const_iterator +ida_hexrays.ctree_items_t._del(self, x: "citem_t") -> bool -ida_hexrays.ctree_items_t.capacity (method) - capacity(self) -> size_t +ida_hexrays.ctree_items_t.add_unique(self, x: "citem_t") -> bool -ida_hexrays.ctree_items_t.clear (method) - clear(self) +ida_hexrays.ctree_items_t.append(self, x: "citem_t") -> None -ida_hexrays.ctree_items_t.empty (method) - empty(self) -> bool +ida_hexrays.ctree_items_t.at(self, _idx: "size_t") -> "citem_t *const &" -ida_hexrays.ctree_items_t.end (method) - end(self) -> qvector< citem_t * >::iterator - end(self) -> qvector< citem_t * >::const_iterator +ida_hexrays.ctree_items_t.begin(self, *args) -> "qvector< citem_t * >::const_iterator" -ida_hexrays.ctree_items_t.erase (method) - erase(self, it) -> qvector< citem_t * >::iterator - - @param it: qvector< citem_t * >::iterator - - erase(self, first, last) -> qvector< citem_t * >::iterator - - @param first: qvector< citem_t * >::iterator - @param last: qvector< citem_t * >::iterator +ida_hexrays.ctree_items_t.capacity(self) -> "size_t" -ida_hexrays.ctree_items_t.extract (method) - extract(self) -> citem_t ** +ida_hexrays.ctree_items_t.clear(self) -> None -ida_hexrays.ctree_items_t.find (method) - find(self, x) -> qvector< citem_t * >::iterator - - @param x: citem_t *const & - - find(self, x) -> qvector< citem_t * >::const_iterator - - @param x: citem_t *const & +ida_hexrays.ctree_items_t.empty(self) -> bool -ida_hexrays.ctree_items_t.has (method) - has(self, x) -> bool - - @param x: citem_t *const & +ida_hexrays.ctree_items_t.end(self, *args) -> "qvector< citem_t * >::const_iterator" -ida_hexrays.ctree_items_t.inject (method) - inject(self, s, len) - - @param s: citem_t ** - @param len: size_t +ida_hexrays.ctree_items_t.erase(self, *args) -> "qvector< citem_t * >::iterator" -ida_hexrays.ctree_items_t.insert (method) - insert(self, it, x) -> qvector< citem_t * >::iterator - - @param it: qvector< citem_t * >::iterator - @param x: citem_t *const & +ida_hexrays.ctree_items_t.extend(self, x: "ctree_items_t") -> None -ida_hexrays.ctree_items_t.pop_back (method) - pop_back(self) +ida_hexrays.ctree_items_t.extract(self) -> "citem_t **" -ida_hexrays.ctree_items_t.push_back (method) - push_back(self, x) - - @param x: citem_t *const & - - push_back(self) -> citem_t *& +ida_hexrays.ctree_items_t.find(self, *args) -> "qvector< citem_t * >::const_iterator" -ida_hexrays.ctree_items_t.qclear (method) - qclear(self) +ida_hexrays.ctree_items_t.has(self, x: "citem_t") -> bool -ida_hexrays.ctree_items_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_hexrays.ctree_items_t.inject(self, s: "citem_t **", len: "size_t") -> None -ida_hexrays.ctree_items_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: citem_t *const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_hexrays.ctree_items_t.insert(self, it: "qvector< citem_t * >::iterator", x: "citem_t") -> "qvector< citem_t * >::iterator" -ida_hexrays.ctree_items_t.size (method) - size(self) -> size_t +ida_hexrays.ctree_items_t.pop_back(self) -> None -ida_hexrays.ctree_items_t.swap (method) - swap(self, r) - - @param r: qvector< citem_t * > & +ida_hexrays.ctree_items_t.push_back(self, *args) -> "citem_t *&" -ida_hexrays.ctree_items_t.truncate (method) - truncate(self) +ida_hexrays.ctree_items_t.qclear(self) -> None -ida_hexrays.ctree_parentee_t (class) - Proxy of C++ ctree_parentee_t class. +ida_hexrays.ctree_items_t.reserve(self, cnt: "size_t") -> None -ida_hexrays.ctree_parentee_t.__disown__ (method) +ida_hexrays.ctree_items_t.resize(self, *args) -> None -ida_hexrays.ctree_parentee_t.__init__ (method) - __init__(self, post=False) -> ctree_parentee_t - - @param post: bool +ida_hexrays.ctree_items_t.size(self) -> "size_t" -ida_hexrays.ctree_parentee_t.get_block (method) - get_block(self) -> cblock_t - Get pointer to the parent block of the currently visited item. This function - should be called only when the parent is a block. +ida_hexrays.ctree_items_t.swap(self, r: "ctree_items_t") -> None -ida_hexrays.ctree_parentee_t.recalc_parent_types (method) - recalc_parent_types(self) -> bool - Recalculate type of parent nodes. If a node type has been changed, the visitor - must recalculate all parent types, otherwise the ctree becomes inconsistent. If - during this recalculation a parent node is added/deleted, this function returns - true. In this case the traversal must be stopped because the information about - parent nodes is stale. - - @return: false-ok to continue the traversal, true-must stop. +ida_hexrays.ctree_items_t.truncate(self) -> None -ida_hexrays.ctree_visitor_t (class) - Proxy of C++ ctree_visitor_t class. +ida_hexrays.ctree_parentee_t -ida_hexrays.ctree_visitor_t.__disown__ (method) +ida_hexrays.ctree_parentee_t.__disown__(self) -ida_hexrays.ctree_visitor_t.__init__ (method) - __init__(self, _flags) -> ctree_visitor_t - - @param _flags: int +ida_hexrays.ctree_parentee_t.__init__(self, post: bool = False) -ida_hexrays.ctree_visitor_t.apply_to (method) - apply_to(self, item, parent) -> int - Traverse ctree. The traversal will start at the specified item and continue - until of one the visit_...() functions return a non-zero value. - - @param item: (C++: citem_t *) root of the ctree to traverse - @param parent: (C++: citem_t *) parent of the specified item. can be specified as nullptr. - @return: 0 or a non-zero value returned by a visit_...() function +ida_hexrays.ctree_parentee_t.recalc_parent_types(self) -> bool + Recalculate type of parent nodes. If a node type has been changed, the visitor must recalculate all parent types, otherwise the ctree becomes inconsistent. If during this recalculation a parent node is added/deleted, this function returns true. In this case the traversal must be stopped because the information about parent nodes is stale. + + @returns false-ok to continue the traversal, true-must stop. -ida_hexrays.ctree_visitor_t.apply_to_exprs (method) - apply_to_exprs(self, item, parent) -> int - Traverse only expressions. The traversal will start at the specified item and - continue until of one the visit_...() functions return a non-zero value. - - @param item: (C++: citem_t *) root of the ctree to traverse - @param parent: (C++: citem_t *) parent of the specified item. can be specified as nullptr. - @return: 0 or a non-zero value returned by a visit_...() function +ida_hexrays.ctree_visitor_t -ida_hexrays.ctree_visitor_t.clr_prune (method) - clr_prune(self) +ida_hexrays.ctree_visitor_t.__disown__(self) + +ida_hexrays.ctree_visitor_t.__init__(self, _flags: int) + +ida_hexrays.ctree_visitor_t.apply_to(self, item: "citem_t", parent: "citem_t") -> int + Traverse ctree. The traversal will start at the specified item and continue until of one the visit_...() functions return a non-zero value. + + @param item: root of the ctree to traverse + @param parent: parent of the specified item. can be specified as nullptr. + @returns 0 or a non-zero value returned by a visit_...() function + +ida_hexrays.ctree_visitor_t.apply_to_exprs(self, item: "citem_t", parent: "citem_t") -> int + Traverse only expressions. The traversal will start at the specified item and continue until of one the visit_...() functions return a non-zero value. + + @param item: root of the ctree to traverse + @param parent: parent of the specified item. can be specified as nullptr. + @returns 0 or a non-zero value returned by a visit_...() function + +ida_hexrays.ctree_visitor_t.bposvec + Vector of block positions. Only cit_block and cit_try parents have the corresponding element in this vector. + + +ida_hexrays.ctree_visitor_t.clr_prune(self) -> None Do not prune children. This is an internal function, no need to call it. -ida_hexrays.ctree_visitor_t.clr_restart (method) - clr_restart(self) +ida_hexrays.ctree_visitor_t.clr_restart(self) -> None Do not restart. This is an internal function, no need to call it. -ida_hexrays.ctree_visitor_t.cv_flags (variable) - Ctree visitor property bits +ida_hexrays.ctree_visitor_t.cv_flags + Ctree visitor property bits + -ida_hexrays.ctree_visitor_t.is_postorder (method) - is_postorder(self) -> bool +ida_hexrays.ctree_visitor_t.is_postorder(self) -> bool Should the leave...() functions be called? -ida_hexrays.ctree_visitor_t.leave_expr (method) - leave_expr(self, arg0) -> int - Visit an expression after having visited its children. This is a visitor - function which should be overridden by a derived class to do some useful work. - This visitor performs post-order traserval, i.e. an item is visited after its - children. - - @param arg0: cexpr_t * - @return: 0 to continue the traversal, nonzero to stop. +ida_hexrays.ctree_visitor_t.leave_expr(self, arg0: "cexpr_t") -> int + Visit an expression after having visited its children. This is a visitor function which should be overridden by a derived class to do some useful work. This visitor performs post-order traserval, i.e. an item is visited after its children. + + @returns 0 to continue the traversal, nonzero to stop. -ida_hexrays.ctree_visitor_t.leave_insn (method) - leave_insn(self, arg0) -> int - Visit a statement after having visited its children. This is a visitor function - which should be overridden by a derived class to do some useful work. This - visitor performs post-order traserval, i.e. an item is visited after its - children. - - @param arg0: cinsn_t * - @return: 0 to continue the traversal, nonzero to stop. +ida_hexrays.ctree_visitor_t.leave_insn(self, arg0: "cinsn_t") -> int + Visit a statement after having visited its children. This is a visitor function which should be overridden by a derived class to do some useful work. This visitor performs post-order traserval, i.e. an item is visited after its children. + + @returns 0 to continue the traversal, nonzero to stop. -ida_hexrays.ctree_visitor_t.maintain_parents (method) - maintain_parents(self) -> bool +ida_hexrays.ctree_visitor_t.maintain_parents(self) -> bool Should the parent information by maintained? -ida_hexrays.ctree_visitor_t.must_prune (method) - must_prune(self) -> bool +ida_hexrays.ctree_visitor_t.must_prune(self) -> bool Should the traversal skip the children of the current item? -ida_hexrays.ctree_visitor_t.must_restart (method) - must_restart(self) -> bool +ida_hexrays.ctree_visitor_t.must_restart(self) -> bool Should the traversal restart? -ida_hexrays.ctree_visitor_t.only_insns (method) - only_insns(self) -> bool +ida_hexrays.ctree_visitor_t.only_insns(self) -> bool Should all expressions be automatically pruned? -ida_hexrays.ctree_visitor_t.parent_expr (method) - parent_expr(self) -> cexpr_t +ida_hexrays.ctree_visitor_t.parent_expr(self) -> "cexpr_t *" Get parent of the current item as an expression. -ida_hexrays.ctree_visitor_t.parent_insn (method) - parent_insn(self) -> cinsn_t +ida_hexrays.ctree_visitor_t.parent_insn(self) -> "cinsn_t *" Get parent of the current item as a statement. -ida_hexrays.ctree_visitor_t.parents (variable) +ida_hexrays.ctree_visitor_t.parents Vector of parents of the current item. -ida_hexrays.ctree_visitor_t.prune_now (method) - prune_now(self) - Prune children. This function may be called by a visitor() to skip all children - of the current item. +ida_hexrays.ctree_visitor_t.prune_now(self) -> None + Prune children. This function may be called by a visitor() to skip all children of the current item. + -ida_hexrays.ctree_visitor_t.set_restart (method) - set_restart(self) +ida_hexrays.ctree_visitor_t.set_restart(self) -> None Restart the travesal. Meaningful only in apply_to_exprs() -ida_hexrays.ctree_visitor_t.visit_expr (method) - visit_expr(self, arg0) -> int - Visit an expression. This is a visitor function which should be overridden by a - derived class to do some useful work. This visitor performs pre-order traserval, - i.e. an item is visited before its children. - - @param arg0: cexpr_t * - @return: 0 to continue the traversal, nonzero to stop. +ida_hexrays.ctree_visitor_t.visit_expr(self, arg0: "cexpr_t") -> int + Visit an expression. This is a visitor function which should be overridden by a derived class to do some useful work. This visitor performs pre-order traserval, i.e. an item is visited before its children. + + @returns 0 to continue the traversal, nonzero to stop. -ida_hexrays.ctree_visitor_t.visit_insn (method) - visit_insn(self, arg0) -> int - Visit a statement. This is a visitor function which should be overridden by a - derived class to do some useful work. This visitor performs pre-order traserval, - i.e. an item is visited before its children. - - @param arg0: cinsn_t * - @return: 0 to continue the traversal, nonzero to stop. +ida_hexrays.ctree_visitor_t.visit_insn(self, arg0: "cinsn_t") -> int + Visit a statement. This is a visitor function which should be overridden by a derived class to do some useful work. This visitor performs pre-order traserval, i.e. an item is visited before its children. + + @returns 0 to continue the traversal, nonzero to stop. -ida_hexrays.cwhile_t (class) - Proxy of C++ cwhile_t class. +ida_hexrays.ctry_t -ida_hexrays.cwhile_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cwhile_t const & +ida_hexrays.ctry_t.__eq__(self, r: "ctry_t") -> bool -ida_hexrays.cwhile_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cwhile_t const & +ida_hexrays.ctry_t.__ge__(self, r: "ctry_t") -> bool -ida_hexrays.cwhile_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cwhile_t const & +ida_hexrays.ctry_t.__gt__(self, r: "ctry_t") -> bool -ida_hexrays.cwhile_t.__init__ (method) - __init__(self) -> cwhile_t +ida_hexrays.ctry_t.__init__(self, *args, **kwargs) -ida_hexrays.cwhile_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cwhile_t const & +ida_hexrays.ctry_t.__le__(self, r: "ctry_t") -> bool -ida_hexrays.cwhile_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cwhile_t const & +ida_hexrays.ctry_t.__lt__(self, r: "ctry_t") -> bool -ida_hexrays.cwhile_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cwhile_t const & +ida_hexrays.ctry_t.__ne__(self, r: "ctry_t") -> bool -ida_hexrays.cwhile_t.compare (method) - compare(self, r) -> int - - @param r: cwhile_t const & +ida_hexrays.ctry_t.catchs + "catch all", if present, must be the last element. wind-statements must have "catch all" and nothing else. + -ida_hexrays.debug_hexrays_ctree (function) - debug_hexrays_ctree(level, msg) - - @param level: int - @param msg: char const * +ida_hexrays.ctry_t.compare(self, r: "ctry_t") -> int -ida_hexrays.decompile (function) - decompile(mbr, hf=None, decomp_flags=0) -> cfuncptr_t - Decompile a snippet or a function. - - @param mbr: (C++: const mba_ranges_t &) what to decompile - @param hf: (C++: hexrays_failure_t *) extended error information (if failed) - @param decomp_flags: (C++: int) bitwise combination of decompile() flags... bits - @return: pointer to the decompilation result (a reference counted pointer). - nullptr if failed. +ida_hexrays.ctry_t.is_wind + Is C++ wind statement? (not part of the C++ language) MSVC generates code like the following to keep track of constructed objects and destroy them upon an exception. Example: + // an object is constructed at this point __wind { // some other code that may throw an exception } __unwind { // this code is executed only if there was an exception // in the __wind block. normally here we destroy the object // after that the exception is passed to the // exception handler, regular control flow is interrupted here. } // regular logic continues here, if there were no exceptions // also the object's destructor is called + -ida_hexrays.decompile (function) - Decompile a function. - - @param ea an address belonging to the function, or an ida_funcs.func_t object - @param hf extended error information (if failed) - @param flags decomp_flags bitwise combination of `DECOMP_...` bits - @return the decompilation result (a `ida_hexrays.cfunc_t` wrapper), or None +ida_hexrays.ctry_t.new_state + new state number (internal, MSVC related) -ida_hexrays.decompile_func (function) - decompile_func(pfn, hf=None, decomp_flags=0) -> cfuncptr_t - Decompile a function. Multiple decompilations of the same function return the - same object. - - @param pfn: (C++: func_t *) pointer to function to decompile - @param hf: (C++: hexrays_failure_t *) extended error information (if failed) - @param decomp_flags: (C++: int) bitwise combination of decompile() flags... bits - @return: pointer to the decompilation result (a reference counted pointer). - nullptr if failed. +ida_hexrays.ctry_t.old_state + old state number (internal, MSVC related) -ida_hexrays.decompile_many (function) - decompile_many(outfile, funcaddrs, flags) -> bool - Batch decompilation. Decompile all or the specified functions - - @param outfile: (C++: const char *) name of the output file - @param funcaddrs: (C++: const eavec_t *) list of functions to decompile. If nullptr or empty, then - decompile all nonlib functions - @param flags: (C++: int) Batch decompilation bits - @return: true if no internal error occurred and the user has not cancelled - decompilation +ida_hexrays.cwhile_t -ida_hexrays.dereference (function) - Dereference a pointer. This function dereferences a pointer expression. It - performs the following conversion: "ptr" => "*ptr" It can handle discrepancies - in the pointer type and the access size. - - @return: dereferenced expression +ida_hexrays.cwhile_t.__eq__(self, r: "cwhile_t") -> bool -ida_hexrays.dstr (function) - 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 *) tinfo_t const * +ida_hexrays.cwhile_t.__ge__(self, r: "cwhile_t") -> bool -ida_hexrays.dummy_ptrtype (function) - dummy_ptrtype(ptrsize, isfp) -> tinfo_t - Generate a dummy pointer type - - @param ptrsize: (C++: int) size of pointed object - @param isfp: (C++: bool) is floating point object? +ida_hexrays.cwhile_t.__gt__(self, r: "cwhile_t") -> bool -ida_hexrays.eamap_begin (function) - eamap_begin(map) -> eamap_iterator_t +ida_hexrays.cwhile_t.__init__(self) + +ida_hexrays.cwhile_t.__le__(self, r: "cwhile_t") -> bool + +ida_hexrays.cwhile_t.__lt__(self, r: "cwhile_t") -> bool + +ida_hexrays.cwhile_t.__ne__(self, r: "cwhile_t") -> bool + +ida_hexrays.cwhile_t.compare(self, r: "cwhile_t") -> int + +ida_hexrays.debug_hexrays_ctree(level: int, msg: str) -> None + +ida_hexrays.decompile(mbr: "mba_ranges_t", hf: "hexrays_failure_t" = None, decomp_flags: int = 0) -> "cfuncptr_t" + Decompile a snippet or a function. + + @param mbr: what to decompile + @param hf: extended error information (if failed) + @param decomp_flags: bitwise combination of decompile() flags... bits + @returns pointer to the decompilation result (a reference counted pointer). nullptr if failed. + +ida_hexrays.decompile(ea, hf = None, flags = 0) + Decompile a snippet or a function. + + @param hf: extended error information (if failed) + @returns pointer to the decompilation result (a reference counted pointer). nullptr if failed. + +ida_hexrays.decompile_func(pfn: "func_t *", hf: "hexrays_failure_t" = None, decomp_flags: int = 0) -> "cfuncptr_t" + Decompile a function. Multiple decompilations of the same function return the same object. + + @param pfn: pointer to function to decompile + @param hf: extended error information (if failed) + @param decomp_flags: bitwise combination of decompile() flags... bits + @returns pointer to the decompilation result (a reference counted pointer). nullptr if failed. + +ida_hexrays.decompile_many(outfile: str, funcaddrs: "uint64vec_t", flags: int) -> bool + Batch decompilation. Decompile all or the specified functions + + @param outfile: name of the output file + @param funcaddrs: list of functions to decompile. If nullptr or empty, then decompile all nonlib functions + @param flags: Batch decompilation bits + @returns true if no internal error occurred and the user has not cancelled decompilation + +ida_hexrays.dereference(e, ptrsize, is_float = False) + Dereference a pointer. This function dereferences a pointer expression. It performs the following conversion: "ptr" => "*ptr" It can handle discrepancies in the pointer type and the access size. + + @param e: expression to deference + @param ptrsize: access size + @returns dereferenced expression + +ida_hexrays.dstr(tif: "tinfo_t") -> str + Print the specified type info. This function can be used from a debugger by typing "tif->dstr()" + + +ida_hexrays.dummy_ptrtype(ptrsize: int, isfp: bool) -> "tinfo_t" + Generate a dummy pointer type + + @param ptrsize: size of pointed object + @param isfp: is floating point object? + +ida_hexrays.eamap_begin(map: "eamap_t") -> "eamap_iterator_t" Get iterator pointing to the beginning of eamap_t. - - @param map: (C++: const eamap_t *) eamap_t const * -ida_hexrays.eamap_clear (function) - eamap_clear(map) +ida_hexrays.eamap_clear(map: "eamap_t") -> None Clear eamap_t. - - @param map: (C++: eamap_t *) -ida_hexrays.eamap_end (function) - eamap_end(map) -> eamap_iterator_t +ida_hexrays.eamap_end(map: "eamap_t") -> "eamap_iterator_t" Get iterator pointing to the end of eamap_t. - - @param map: (C++: const eamap_t *) eamap_t const * -ida_hexrays.eamap_erase (function) - eamap_erase(map, p) +ida_hexrays.eamap_erase(map: "eamap_t", p: "eamap_iterator_t") -> None Erase current element from eamap_t. - - @param map: (C++: eamap_t *) - @param p: (C++: eamap_iterator_t) -ida_hexrays.eamap_find (function) - eamap_find(map, key) -> eamap_iterator_t +ida_hexrays.eamap_find(map: "eamap_t", key: "ea_t const &") -> "eamap_iterator_t" Find the specified key in eamap_t. - - @param map: (C++: const eamap_t *) eamap_t const * - @param key: (C++: const ea_t &) ea_t const & -ida_hexrays.eamap_first (function) - eamap_first(p) -> ea_t const & +ida_hexrays.eamap_first(p: "eamap_iterator_t") -> "ea_t const &" Get reference to the current map key. - - @param p: (C++: eamap_iterator_t) -ida_hexrays.eamap_free (function) - eamap_free(map) +ida_hexrays.eamap_free(map: "eamap_t") -> None Delete eamap_t instance. - - @param map: (C++: eamap_t *) -ida_hexrays.eamap_insert (function) - eamap_insert(map, key, val) -> eamap_iterator_t +ida_hexrays.eamap_insert(map: "eamap_t", key: "ea_t const &", val: "cinsnptrvec_t") -> "eamap_iterator_t" Insert new (ea_t, cinsnptrvec_t) pair into eamap_t. - - @param map: (C++: eamap_t *) - @param key: (C++: const ea_t &) ea_t const & - @param val: (C++: const cinsnptrvec_t &) cinsnptrvec_t const & -ida_hexrays.eamap_iterator_t (class) - Proxy of C++ eamap_iterator_t class. +ida_hexrays.eamap_iterator_t -ida_hexrays.eamap_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: eamap_iterator_t const & +ida_hexrays.eamap_iterator_t.__eq__(self, p: "eamap_iterator_t") -> bool -ida_hexrays.eamap_iterator_t.__init__ (method) - __init__(self) -> eamap_iterator_t +ida_hexrays.eamap_iterator_t.__init__(self) -ida_hexrays.eamap_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: eamap_iterator_t const & +ida_hexrays.eamap_iterator_t.__ne__(self, p: "eamap_iterator_t") -> bool -ida_hexrays.eamap_new (function) - eamap_new() -> eamap_t +ida_hexrays.eamap_new() -> "eamap_t *" Create a new eamap_t instance. -ida_hexrays.eamap_next (function) - eamap_next(p) -> eamap_iterator_t +ida_hexrays.eamap_next(p: "eamap_iterator_t") -> "eamap_iterator_t" Move to the next element. - - @param p: (C++: eamap_iterator_t) -ida_hexrays.eamap_prev (function) - eamap_prev(p) -> eamap_iterator_t +ida_hexrays.eamap_prev(p: "eamap_iterator_t") -> "eamap_iterator_t" Move to the previous element. - - @param p: (C++: eamap_iterator_t) -ida_hexrays.eamap_second (function) - eamap_second(p) -> cinsnptrvec_t +ida_hexrays.eamap_second(p: "eamap_iterator_t") -> "cinsnptrvec_t &" Get reference to the current map value. - - @param p: (C++: eamap_iterator_t) -ida_hexrays.eamap_size (function) - eamap_size(map) -> size_t +ida_hexrays.eamap_size(map: "eamap_t") -> "size_t" Get size of eamap_t. - - @param map: (C++: eamap_t *) -ida_hexrays.eamap_t (class) - Proxy of C++ std::map< ea_t,cinsnptrvec_t > class. +ida_hexrays.eamap_t -ida_hexrays.eamap_t.__init__ (method) - __init__(self) -> eamap_t +ida_hexrays.eamap_t.__init__(self) -ida_hexrays.eamap_t.at (method) - at(self, _Keyval) -> cinsnptrvec_t - - @param _Keyval: unsigned-ea-like-numeric-type const & +ida_hexrays.eamap_t.at(self, _Keyval: "unsigned long long const &") -> "cinsnptrvec_t &" -ida_hexrays.eamap_t.size (method) - size(self) -> size_t +ida_hexrays.eamap_t.size(self) -> "size_t" -ida_hexrays.fnumber_t (class) - Proxy of C++ fnumber_t class. +ida_hexrays.fnumber_t -ida_hexrays.fnumber_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: fnumber_t const & +ida_hexrays.fnumber_t.__eq__(self, r: "fnumber_t") -> bool -ida_hexrays.fnumber_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: fnumber_t const & +ida_hexrays.fnumber_t.__ge__(self, r: "fnumber_t") -> bool -ida_hexrays.fnumber_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: fnumber_t const & +ida_hexrays.fnumber_t.__gt__(self, r: "fnumber_t") -> bool -ida_hexrays.fnumber_t.__init__ (method) - __init__(self) -> fnumber_t +ida_hexrays.fnumber_t.__init__(self) -ida_hexrays.fnumber_t.__le__ (method) - __le__(self, r) -> bool - - @param r: fnumber_t const & +ida_hexrays.fnumber_t.__le__(self, r: "fnumber_t") -> bool -ida_hexrays.fnumber_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: fnumber_t const & +ida_hexrays.fnumber_t.__lt__(self, r: "fnumber_t") -> bool -ida_hexrays.fnumber_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: fnumber_t const & +ida_hexrays.fnumber_t.__ne__(self, r: "fnumber_t") -> bool -ida_hexrays.fnumber_t._print (method) - _print(self) +ida_hexrays.fnumber_t._print(self) -> None -ida_hexrays.fnumber_t.compare (method) - compare(self, r) -> int - - @param r: fnumber_t const & +ida_hexrays.fnumber_t.calc_max_exp(self) -> int -ida_hexrays.fnumber_t.dereference_const_uint16 (method) - dereference_const_uint16(self) -> uint16 const * +ida_hexrays.fnumber_t.compare(self, r: "fnumber_t") -> int -ida_hexrays.fnumber_t.dereference_uint16 (method) - dereference_uint16(self) -> uint16 * +ida_hexrays.fnumber_t.dereference_const_uint16(self) -> "uint16 const *" -ida_hexrays.fnumber_t.fnum (variable) +ida_hexrays.fnumber_t.dereference_uint16(self) -> "uint16 *" + +ida_hexrays.fnumber_t.fnum Internal representation of the number. -ida_hexrays.fnumber_t.nbytes (variable) +ida_hexrays.fnumber_t.is_nan(self) -> bool + +ida_hexrays.fnumber_t.nbytes Original size of the constant in bytes. -ida_hexrays.gco_info_t (class) - Proxy of C++ gco_info_t class. +ida_hexrays.gco_info_t -ida_hexrays.gco_info_t.__init__ (method) - __init__(self) -> gco_info_t +ida_hexrays.gco_info_t.__init__(self) -ida_hexrays.gco_info_t.append_to_list (method) - append_to_list(self, list, mba) -> bool - Append operand info to LIST. This function converts IDA register number or stack - offset to a decompiler list. - - @param list: (C++: mlist_t *) list to append to - @param mba: (C++: const mba_t *) microcode object +ida_hexrays.gco_info_t.append_to_list(self, list: "mlist_t", mba: "mba_t") -> bool + Append operand info to LIST. This function converts IDA register number or stack offset to a decompiler list. + + @param list: list to append to + @param mba: microcode object -ida_hexrays.gco_info_t.cvt_to_ivl (method) - cvt_to_ivl(self) -> vivl_t - Convert operand info to VIVL. The returned VIVL can be used, for example, in a - call of get_valranges(). +ida_hexrays.gco_info_t.cvt_to_ivl(self) -> "vivl_t" + Convert operand info to VIVL. The returned VIVL can be used, for example, in a call of get_valranges(). + -ida_hexrays.gco_info_t.is_def (method) - is_def(self) -> bool +ida_hexrays.gco_info_t.is_def(self) -> bool -ida_hexrays.gco_info_t.is_reg (method) - is_reg(self) -> bool +ida_hexrays.gco_info_t.is_reg(self) -> bool -ida_hexrays.gco_info_t.is_use (method) - is_use(self) -> bool +ida_hexrays.gco_info_t.is_use(self) -> bool -ida_hexrays.gco_info_t.name (variable) +ida_hexrays.gco_info_t.name register or stkvar name -ida_hexrays.gco_info_t.regnum (variable) +ida_hexrays.gco_info_t.regnum if register, the register id -ida_hexrays.gco_info_t.size (variable) +ida_hexrays.gco_info_t.size operand size -ida_hexrays.gco_info_t.stkoff (variable) +ida_hexrays.gco_info_t.stkoff if stkvar, stack offset -ida_hexrays.gen_microcode (function) - gen_microcode(mbr, hf=None, retlist=None, decomp_flags=0, reqmat=MMAT_GLBOPT3) -> mba_t - Generate microcode of an arbitrary code snippet - - @param mbr: (C++: const mba_ranges_t &) snippet ranges - @param hf: (C++: hexrays_failure_t *) extended error information (if failed) - @param retlist: (C++: const mlist_t *) list of registers the snippet returns - @param decomp_flags: (C++: int) bitwise combination of decompile() flags... bits - @param reqmat: (C++: mba_maturity_t) required microcode maturity - @return: pointer to the microcode, nullptr if failed. +ida_hexrays.gen_microcode(mbr: "mba_ranges_t", hf: "hexrays_failure_t" = None, retlist: "mlist_t" = None, decomp_flags: int = 0, reqmat: "mba_maturity_t" = MMAT_GLBOPT3) -> "mba_t *" + Generate microcode of an arbitrary code snippet + + @param mbr: snippet ranges + @param hf: extended error information (if failed) + @param retlist: list of registers the snippet returns + @param decomp_flags: bitwise combination of decompile() flags... bits + @param reqmat: required microcode maturity + @returns pointer to the microcode, nullptr if failed. -ida_hexrays.get_ctype_name (function) - get_ctype_name(op) -> char const * - - @param op: enum ctype_t +ida_hexrays.get_ctype_name(op: "ctype_t") -> str -ida_hexrays.get_current_operand (function) - 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 returns true. - - @param out: (C++: gco_info_t *) [out]: output buffer +ida_hexrays.get_current_operand(out: "gco_info_t") -> 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 returns true. + -ida_hexrays.get_float_type (function) - get_float_type(width) -> tinfo_t - Get a type of a floating point value with the specified width - - @param width: (C++: int) width of the desired type - @return: type info object +ida_hexrays.get_float_type(width: int) -> "tinfo_t" + Get a type of a floating point value with the specified width + + @param width: width of the desired type + @returns type info object -ida_hexrays.get_hexrays_version (function) - 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_hexrays_version() -> str + Get decompiler version. The returned string is of the form ... + + @returns pointer to version string. For example: "2.0.0.140605" -ida_hexrays.get_int_type_by_width_and_sign (function) - 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: (C++: int) size of the type in bytes - @param sign: (C++: type_sign_t) sign of the type +ida_hexrays.get_int_type_by_width_and_sign(srcwidth: int, sign: "type_sign_t") -> "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 + @param sign: sign of the type -ida_hexrays.get_member_type (function) - 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: (C++: const member_t *) structure field - @param type: (C++: tinfo_t *) pointer to the variable where the type is returned. This parameter - can be nullptr. - @return: false if failed +ida_hexrays.get_merror_desc(code: "merror_t", mba: "mba_t") -> str + Get textual description of an error code + + @param code: Microcode error codes + @param mba: the microcode array + @returns the error address -ida_hexrays.get_merror_desc (function) - get_merror_desc(code, mba) -> str - Get textual description of an error code - - @param code: (C++: merror_t) Microcode error codes - @param mba: (C++: mba_t *) the microcode array - @return: the error address +ida_hexrays.get_mreg_name(reg: "mreg_t", width: int, ud: "void *" = None) -> str + Get the microregister name. + + @param reg: microregister number + @param width: size of microregister in bytes. may be bigger than the real register size. + @param ud: reserved, must be nullptr + @returns width of the printed register. this value may be less than the WIDTH argument. -ida_hexrays.get_mreg_name (function) - get_mreg_name(reg, width, ud=None) -> str - Get the microregister name. - - @param reg: (C++: mreg_t) microregister number - @param width: (C++: int) size of microregister in bytes. may be bigger than the real - register size. - @param ud: (C++: void *) reserved, must be nullptr - @return: width of the printed register. this value may be less than the WIDTH - argument. - -ida_hexrays.get_op_signness (function) - get_op_signness(op) -> type_sign_t +ida_hexrays.get_op_signness(op: "ctype_t") -> "type_sign_t" Get operator sign. Meaningful for sign-dependent operators, like cot_sdiv. - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.get_signed_mcode (function) - get_signed_mcode(code) -> mcode_t - - @param code: enum mcode_t +ida_hexrays.get_signed_mcode(code: "mcode_t") -> "mcode_t" -ida_hexrays.get_temp_regs (function) - 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_temp_regs() -> "mlist_t const &" + 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 (function) - get_type(id, tif, guess) -> bool - Get a global type. Global types are types of addressable objects and - struct/union/enum types - - @param id: (C++: uval_t) address or id of the object - @param tif: (C++: tinfo_t *) buffer for the answer - @param guess: (C++: type_source_t) what kind of types to consider - @return: success +ida_hexrays.get_type(id: int, tif: "tinfo_t", guess: "type_source_t") -> 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 + @param tif: buffer for the answer + @param guess: what kind of types to consider + @returns success -ida_hexrays.get_unk_type (function) - 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: (C++: int) size of the type in bytes +ida_hexrays.get_unk_type(size: int) -> "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 -ida_hexrays.get_unsigned_mcode (function) - get_unsigned_mcode(code) -> mcode_t - - @param code: enum mcode_t +ida_hexrays.get_unsigned_mcode(code: "mcode_t") -> "mcode_t" -ida_hexrays.get_widget_vdui (function) - get_widget_vdui(f) -> vdui_t - Get the vdui_t instance associated to the TWidget - - @param f: (C++: TWidget *) pointer to window - @return: a vdui_t *, or nullptr +ida_hexrays.get_widget_vdui(f: "TWidget *") -> "vdui_t *" + Get the vdui_t instance associated to the TWidget + + @param f: pointer to window + @returns a vdui_t *, or nullptr -ida_hexrays.getb_reginsn (function) - getb_reginsn(ins) -> minsn_t - - @param ins: minsn_t * +ida_hexrays.getb_reginsn(ins: "minsn_t") -> "minsn_t *" + Skip assertions backward. -ida_hexrays.getf_reginsn (function) - getf_reginsn(ins) -> minsn_t - - @param ins: minsn_t * +ida_hexrays.getf_reginsn(ins: "minsn_t") -> "minsn_t *" + Skip assertions forward. -ida_hexrays.graph_chains_t (class) - Proxy of C++ graph_chains_t class. +ida_hexrays.graph_chains_t -ida_hexrays.graph_chains_t.__init__ (method) - __init__(self) -> graph_chains_t +ida_hexrays.graph_chains_t.__init__(self) -ida_hexrays.graph_chains_t.acquire (method) - acquire(self) +ida_hexrays.graph_chains_t.acquire(self) -> None Lock the chains. -ida_hexrays.graph_chains_t.for_all_chains (method) - for_all_chains(self, cv, gca_flags) -> int - Visit all chains - - @param cv: (C++: chain_visitor_t &) chain visitor - @param gca_flags: (C++: int) combination of GCA_ bits +ida_hexrays.graph_chains_t.for_all_chains(self, cv: "chain_visitor_t", gca_flags: int) -> int + Visit all chains + + @param cv: chain visitor + @param gca_flags: combination of GCA_ bits -ida_hexrays.graph_chains_t.is_locked (method) - is_locked(self) -> bool - Are the chains locked? It is a good idea to lock the chains before using them. - This ensures that they won't be recalculated and reallocated during the use. See - the chain_keeper_t class for that. +ida_hexrays.graph_chains_t.is_locked(self) -> bool + Are the chains locked? It is a good idea to lock the chains before using them. This ensures that they won't be recalculated and reallocated during the use. See the chain_keeper_t class for that. + -ida_hexrays.graph_chains_t.release (method) - release(self) +ida_hexrays.graph_chains_t.release(self) -> None Unlock the chains. -ida_hexrays.graph_chains_t.swap (method) - swap(self, r) - - @param r: graph_chains_t & +ida_hexrays.graph_chains_t.swap(self, r: "graph_chains_t") -> None -ida_hexrays.has_cached_cfunc (function) - has_cached_cfunc(ea) -> bool +ida_hexrays.has_cached_cfunc(ea: ida_idaapi.ea_t) -> bool Do we have a cached decompilation result for 'ea'? - - @param ea: (C++: ea_t) -ida_hexrays.has_mcode_seloff (function) - has_mcode_seloff(op) -> bool - - @param op: enum mcode_t +ida_hexrays.has_mcode_seloff(op: "mcode_t") -> bool -ida_hexrays.hexrays_alloc (function) - hexrays_alloc(size) -> void * - - @param size: size_t +ida_hexrays.hexrays_alloc(size: "size_t") -> "void *" -ida_hexrays.hexrays_failure_t (class) - Proxy of C++ hexrays_failure_t class. +ida_hexrays.hexrays_failure_t -ida_hexrays.hexrays_failure_t.__init__ (method) - __init__(self) -> hexrays_failure_t - __init__(self, c, ea, buf=None) -> hexrays_failure_t - - @param c: enum merror_t - @param ea: ea_t - @param buf: char const * - - __init__(self, c, ea, buf) -> hexrays_failure_t - - @param c: enum merror_t - @param ea: ea_t - @param buf: qstring const & +ida_hexrays.hexrays_failure_t.__init__(self, *args) -ida_hexrays.hexrays_failure_t.code (variable) +ida_hexrays.hexrays_failure_t.code Microcode error codes -ida_hexrays.hexrays_failure_t.desc (method) - desc(self) -> qstring +ida_hexrays.hexrays_failure_t.desc(self) -> str -ida_hexrays.hexrays_failure_t.errea (variable) +ida_hexrays.hexrays_failure_t.errea associated address -ida_hexrays.hexrays_failure_t.str (variable) +ida_hexrays.hexrays_failure_t.str string information -ida_hexrays.hexrays_free (function) - hexrays_free(ptr) - - @param ptr: void * +ida_hexrays.hexrays_free(ptr: "void *") -> None -ida_hexrays.hexwarn_t (class) - Proxy of C++ hexwarn_t class. +ida_hexrays.hexwarn_t -ida_hexrays.hexwarn_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: hexwarn_t const & +ida_hexrays.hexwarn_t.__eq__(self, r: "hexwarn_t") -> bool -ida_hexrays.hexwarn_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: hexwarn_t const & +ida_hexrays.hexwarn_t.__ge__(self, r: "hexwarn_t") -> bool -ida_hexrays.hexwarn_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: hexwarn_t const & +ida_hexrays.hexwarn_t.__gt__(self, r: "hexwarn_t") -> bool -ida_hexrays.hexwarn_t.__init__ (method) - __init__(self) -> hexwarn_t +ida_hexrays.hexwarn_t.__init__(self) -ida_hexrays.hexwarn_t.__le__ (method) - __le__(self, r) -> bool - - @param r: hexwarn_t const & +ida_hexrays.hexwarn_t.__le__(self, r: "hexwarn_t") -> bool -ida_hexrays.hexwarn_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: hexwarn_t const & +ida_hexrays.hexwarn_t.__lt__(self, r: "hexwarn_t") -> bool -ida_hexrays.hexwarn_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: hexwarn_t const & +ida_hexrays.hexwarn_t.__ne__(self, r: "hexwarn_t") -> bool -ida_hexrays.hexwarn_t.compare (method) - compare(self, r) -> int - - @param r: hexwarn_t const & +ida_hexrays.hexwarn_t.compare(self, r: "hexwarn_t") -> int -ida_hexrays.hexwarn_t.ea (variable) +ida_hexrays.hexwarn_t.ea Address where the warning occurred. -ida_hexrays.hexwarn_t.id (variable) +ida_hexrays.hexwarn_t.id Warning id. -ida_hexrays.hexwarn_t.text (variable) +ida_hexrays.hexwarn_t.text Fully formatted text of the warning. -ida_hexrays.hexwarns_t (class) - Proxy of C++ qvector< hexwarn_t > class. +ida_hexrays.hexwarns_t -ida_hexrays.hexwarns_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< hexwarn_t > const & +ida_hexrays.hexwarns_t.__eq__(self, r: "hexwarns_t") -> bool -ida_hexrays.hexwarns_t.__getitem__ (method) - __getitem__(self, i) -> hexwarn_t - - @param i: size_t +ida_hexrays.hexwarns_t.__getitem__(self, i: "size_t") -> "hexwarn_t const &" -ida_hexrays.hexwarns_t.__init__ (method) - __init__(self) -> hexwarns_t - __init__(self, x) -> hexwarns_t - - @param x: qvector< hexwarn_t > const & +ida_hexrays.hexwarns_t.__init__(self, *args) -ida_hexrays.hexwarns_t.__len__ (method) - __len__(self) -> size_t +ida_hexrays.hexwarns_t.__len__(self) -> "size_t" -ida_hexrays.hexwarns_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< hexwarn_t > const & +ida_hexrays.hexwarns_t.__ne__(self, r: "hexwarns_t") -> bool -ida_hexrays.hexwarns_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: hexwarn_t const & +ida_hexrays.hexwarns_t.__setitem__(self, i: "size_t", v: "hexwarn_t") -> None -ida_hexrays.hexwarns_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: hexwarn_t const & +ida_hexrays.hexwarns_t._del(self, x: "hexwarn_t") -> bool -ida_hexrays.hexwarns_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: hexwarn_t const & +ida_hexrays.hexwarns_t.add_unique(self, x: "hexwarn_t") -> bool -ida_hexrays.hexwarns_t.at (method) - at(self, _idx) -> hexwarn_t - - @param _idx: size_t +ida_hexrays.hexwarns_t.append(self, x: "hexwarn_t") -> None -ida_hexrays.hexwarns_t.begin (method) - begin(self) -> hexwarn_t +ida_hexrays.hexwarns_t.at(self, _idx: "size_t") -> "hexwarn_t const &" -ida_hexrays.hexwarns_t.capacity (method) - capacity(self) -> size_t +ida_hexrays.hexwarns_t.begin(self, *args) -> "qvector< hexwarn_t >::const_iterator" -ida_hexrays.hexwarns_t.clear (method) - clear(self) +ida_hexrays.hexwarns_t.capacity(self) -> "size_t" -ida_hexrays.hexwarns_t.empty (method) - empty(self) -> bool +ida_hexrays.hexwarns_t.clear(self) -> None -ida_hexrays.hexwarns_t.end (method) - end(self) -> hexwarn_t +ida_hexrays.hexwarns_t.empty(self) -> bool -ida_hexrays.hexwarns_t.erase (method) - erase(self, it) -> hexwarn_t - - @param it: qvector< hexwarn_t >::iterator - - erase(self, first, last) -> hexwarn_t - - @param first: qvector< hexwarn_t >::iterator - @param last: qvector< hexwarn_t >::iterator +ida_hexrays.hexwarns_t.end(self, *args) -> "qvector< hexwarn_t >::const_iterator" -ida_hexrays.hexwarns_t.extract (method) - extract(self) -> hexwarn_t +ida_hexrays.hexwarns_t.erase(self, *args) -> "qvector< hexwarn_t >::iterator" -ida_hexrays.hexwarns_t.find (method) - find(self, x) -> hexwarn_t - - @param x: hexwarn_t const & +ida_hexrays.hexwarns_t.extend(self, x: "hexwarns_t") -> None -ida_hexrays.hexwarns_t.grow (method) - grow(self, x=hexwarn_t()) - - @param x: hexwarn_t const & +ida_hexrays.hexwarns_t.extract(self) -> "hexwarn_t *" -ida_hexrays.hexwarns_t.has (method) - has(self, x) -> bool - - @param x: hexwarn_t const & +ida_hexrays.hexwarns_t.find(self, *args) -> "qvector< hexwarn_t >::const_iterator" -ida_hexrays.hexwarns_t.inject (method) - inject(self, s, len) - - @param s: hexwarn_t * - @param len: size_t +ida_hexrays.hexwarns_t.grow(self, *args) -> None -ida_hexrays.hexwarns_t.insert (method) - insert(self, it, x) -> hexwarn_t - - @param it: qvector< hexwarn_t >::iterator - @param x: hexwarn_t const & +ida_hexrays.hexwarns_t.has(self, x: "hexwarn_t") -> bool -ida_hexrays.hexwarns_t.pop_back (method) - pop_back(self) +ida_hexrays.hexwarns_t.inject(self, s: "hexwarn_t", len: "size_t") -> None -ida_hexrays.hexwarns_t.push_back (method) - push_back(self, x) - - @param x: hexwarn_t const & - - push_back(self) -> hexwarn_t +ida_hexrays.hexwarns_t.insert(self, it: "hexwarn_t", x: "hexwarn_t") -> "qvector< hexwarn_t >::iterator" -ida_hexrays.hexwarns_t.qclear (method) - qclear(self) +ida_hexrays.hexwarns_t.pop_back(self) -> None -ida_hexrays.hexwarns_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_hexrays.hexwarns_t.push_back(self, *args) -> "hexwarn_t &" -ida_hexrays.hexwarns_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: hexwarn_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_hexrays.hexwarns_t.qclear(self) -> None -ida_hexrays.hexwarns_t.size (method) - size(self) -> size_t +ida_hexrays.hexwarns_t.reserve(self, cnt: "size_t") -> None -ida_hexrays.hexwarns_t.swap (method) - swap(self, r) - - @param r: qvector< hexwarn_t > & +ida_hexrays.hexwarns_t.resize(self, *args) -> None -ida_hexrays.hexwarns_t.truncate (method) - truncate(self) +ida_hexrays.hexwarns_t.size(self) -> "size_t" -ida_hexrays.history_item_t (class) - Proxy of C++ history_item_t class. +ida_hexrays.hexwarns_t.swap(self, r: "hexwarns_t") -> None -ida_hexrays.history_item_t.__init__ (method) - __init__(self, _ea=BADADDR, _lnnum=-1, _x=0, _y=0) -> history_item_t - - @param _ea: ea_t - @param _lnnum: int - @param _x: int - @param _y: int - - __init__(self, _ea, p) -> history_item_t - - @param _ea: ea_t - @param p: ctext_position_t const & +ida_hexrays.hexwarns_t.truncate(self) -> None -ida_hexrays.history_item_t.ea (variable) +ida_hexrays.history_item_t + +ida_hexrays.history_item_t.__init__(self, *args) + +ida_hexrays.history_item_t.curr_ea + Current address. + +ida_hexrays.history_item_t.end + BADADDR-decompile a function; otherwise end of the range. + +ida_hexrays.history_item_t.func_ea The entry address of the decompiled function. -ida_hexrays.history_item_t.end (variable) - BADADDR-decompile function; otherwise end of the range. +ida_hexrays.history_t -ida_hexrays.history_t (class) - Proxy of C++ qstack< history_item_t > class. +ida_hexrays.history_t.__init__(self) -ida_hexrays.history_t.__init__ (method) - __init__(self) -> history_t +ida_hexrays.history_t.pop(self) -> "history_item_t" -ida_hexrays.history_t.pop (method) - pop(self) -> history_item_t +ida_hexrays.history_t.push(self, v: "history_item_t") -> None -ida_hexrays.history_t.push (method) - push(self, v) +ida_hexrays.history_t.top(self, *args) -> "history_item_t &" + +ida_hexrays.hxe_begin_inlining + Starting to inline outlined functions. + + +ida_hexrays.hxe_build_callinfo + Analyzing a call instruction. + + +ida_hexrays.hxe_callinfo_built + A call instruction has been anallyzed. + + +ida_hexrays.hxe_calls_done + All calls have been analyzed. + + +ida_hexrays.hxe_close_pseudocode + Pseudocode view is being closed. + + +ida_hexrays.hxe_cmt_changed + Comment got changed. + + +ida_hexrays.hxe_collect_warnings + Collect warning messages from plugins. These warnings will be displayed at the function header, after the user-defined comments. + + +ida_hexrays.hxe_combine + Trying to combine instructions of basic block. + + +ida_hexrays.hxe_create_hint + Create a hint for the current item. + + +ida_hexrays.hxe_curpos + Current cursor position has been changed. (for example, by left-clicking or using keyboard) - @param v: history_item_t const & + -ida_hexrays.history_t.top (method) - top(self) -> history_item_t +ida_hexrays.hxe_double_click + Mouse double click. + -ida_hexrays.hxe_build_callinfo (variable) - Analyzing a call instruction. +ida_hexrays.hxe_flowchart + Flowchart has been generated. + -ida_hexrays.hxe_callinfo_built (variable) - A call instruction has been anallyzed. +ida_hexrays.hxe_func_printed + Function text has been generated. Plugins may modify the text in cfunc_t::sv. However, it is too late to modify the ctree or microcode. The text uses regular color codes (see lines.hpp) COLOR_ADDR is used to store pointers to ctree items. + -ida_hexrays.hxe_calls_done (variable) - All calls have been analyzed. +ida_hexrays.hxe_glbopt + Global optimization has been finished. If microcode is modified, MERR_LOOP must be returned. It will cause a complete restart of the optimization. + -ida_hexrays.hxe_close_pseudocode (variable) - Pseudocode view is being closed. +ida_hexrays.hxe_inlined_func + A set of ranges got inlined. + -ida_hexrays.hxe_cmt_changed (variable) - Comment got changed. +ida_hexrays.hxe_inlining_func + A set of ranges is going to be inlined. + -ida_hexrays.hxe_combine (variable) - Trying to combine instructions of basic block. +ida_hexrays.hxe_interr + Internal error has occurred. + -ida_hexrays.hxe_create_hint (variable) - Create a hint for the current item. - @see: ui_get_custom_viewer_hint - - @retval 0: continue collecting hints with other subscribers - @retval 1: stop collecting hints +ida_hexrays.hxe_keyboard + Keyboard has been hit. + -ida_hexrays.hxe_curpos (variable) - Current cursor position has been changed. (for example, by left-clicking or - using keyboard) +ida_hexrays.hxe_locopt + Basic block level optimization has been finished. + -ida_hexrays.hxe_double_click (variable) - Mouse double click. +ida_hexrays.hxe_maturity + Ctree maturity level is being changed. + -ida_hexrays.hxe_flowchart (variable) - Flowchart has been generated. +ida_hexrays.hxe_microcode + Microcode has been generated. + -ida_hexrays.hxe_func_printed (variable) - Function text has been generated. Plugins may modify the text in cfunc_t::sv. - The text uses regular color codes (see lines.hpp) COLOR_ADDR is used to store - pointers to ctree items. +ida_hexrays.hxe_open_pseudocode + New pseudocode view has been opened. + -ida_hexrays.hxe_glbopt (variable) - Global optimization has been finished. If microcode is modified, MERR_LOOP must - be returned. It will cause a complete restart of the optimization. +ida_hexrays.hxe_populating_popup + Populating popup menu. We can add menu items now. + -ida_hexrays.hxe_interr (variable) - Internal error has occurred. +ida_hexrays.hxe_pre_structural + Structure analysis is starting. + -ida_hexrays.hxe_keyboard (variable) - Keyboard has been hit. +ida_hexrays.hxe_prealloc + Local variables: preallocation step begins. + -ida_hexrays.hxe_locopt (variable) - Basic block level optimization has been finished. +ida_hexrays.hxe_preoptimized + Microcode has been preoptimized. + -ida_hexrays.hxe_maturity (variable) - Ctree maturity level is being changed. +ida_hexrays.hxe_print_func + Printing ctree and generating text. + -ida_hexrays.hxe_microcode (variable) - Microcode has been generated. +ida_hexrays.hxe_prolog + Prolog analysis has been finished. + -ida_hexrays.hxe_open_pseudocode (variable) - New pseudocode view has been opened. +ida_hexrays.hxe_refresh_pseudocode + Existing pseudocode text has been refreshed. Adding/removing pseudocode lines is forbidden in this event. + -ida_hexrays.hxe_populating_popup (variable) - Populating popup menu. We can add menu items now. +ida_hexrays.hxe_resolve_stkaddrs + The optimizer is about to resolve stack addresses. + -ida_hexrays.hxe_prealloc (variable) - Local variables: preallocation step begins. +ida_hexrays.hxe_right_click + Mouse right click. Use hxe_populating_popup instead, in case you want to add items in the popup menu. + -ida_hexrays.hxe_preoptimized (variable) - Microcode has been preoptimized. +ida_hexrays.hxe_stkpnts + SP change points have been calculated. + -ida_hexrays.hxe_print_func (variable) - Printing ctree and generating text. +ida_hexrays.hxe_structural + Structural analysis has been finished. + -ida_hexrays.hxe_prolog (variable) - Prolog analysis has been finished. +ida_hexrays.hxe_switch_pseudocode + Existing pseudocode view has been reloaded with a new function. Its text has not been refreshed yet, only cfunc and mba pointers are ready. + -ida_hexrays.hxe_refresh_pseudocode (variable) - Existing pseudocode text has been refreshed. Adding/removing pseudocode lines is - forbidden in this event. +ida_hexrays.hxe_text_ready + Decompiled text is ready. + -ida_hexrays.hxe_resolve_stkaddrs (variable) - The optimizer is about to resolve stack addresses. +ida_hexrays.init_hexrays_plugin(flags: int = 0) -> bool + Check that your plugin is compatible with hex-rays decompiler. This function must be called before calling any other decompiler function. + + @param flags: reserved, must be 0 + @returns true if the decompiler exists and is compatible with your plugin -ida_hexrays.hxe_right_click (variable) - Mouse right click. Use hxe_populating_popup instead, in case you want to add - items in the popup menu. +ida_hexrays.install_hexrays_callback(callback) + Install handler for decompiler events. + + @param callback: handler to install + @returns false if failed -ida_hexrays.hxe_stkpnts (variable) - SP change points have been calculated. +ida_hexrays.install_microcode_filter(filter: "microcode_filter_t", install: bool = True) -> bool + register/unregister non-standard microcode generator + + @param filter: - microcode generator object + @param install: - TRUE - register the object, FALSE - unregister + @returns success -ida_hexrays.hxe_structural (variable) - Structural analysis has been finished. - -ida_hexrays.hxe_switch_pseudocode (variable) - Existing pseudocode view has been reloaded with a new function. Its text has not - been refreshed yet, only cfunc and mba pointers are ready. - -ida_hexrays.hxe_text_ready (variable) - Decompiled text is ready. - -ida_hexrays.init_hexrays_plugin (function) - init_hexrays_plugin(flags=0) -> bool - Check that your plugin is compatible with hex-rays decompiler. This function - must be called before calling any other decompiler function. - - @param flags: (C++: int) reserved, must be 0 - @return: true if the decompiler exists and is compatible with your plugin - -ida_hexrays.install_hexrays_callback (function) - Deprecated. Please use Hexrays_Hooks instead - Install handler for decompiler events. - - @return: false if failed - -ida_hexrays.install_microcode_filter (function) - install_microcode_filter(filter, install=True) -> bool - register/unregister non-standard microcode generator - - @param filter: (C++: microcode_filter_t *) - microcode generator object - @param install: (C++: bool) - TRUE - register the object, FALSE - unregister - @return: success - -ida_hexrays.is_additive (function) - is_additive(op) -> bool +ida_hexrays.is_additive(op: "ctype_t") -> bool Is additive operator? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.is_assignment (function) - is_assignment(op) -> bool +ida_hexrays.is_assignment(op: "ctype_t") -> bool Is assignment operator? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.is_binary (function) - is_binary(op) -> bool +ida_hexrays.is_binary(op: "ctype_t") -> bool Is binary operator? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.is_bitop (function) - is_bitop(op) -> bool +ida_hexrays.is_bitop(op: "ctype_t") -> bool Is bit related operator? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.is_bool_type (function) - is_bool_type(type) -> bool - Is a boolean type? - - @param type: (C++: const tinfo_t &) tinfo_t const & - @return: true if the type is a boolean type +ida_hexrays.is_bool_type(type: "tinfo_t") -> bool + Is a boolean type? + + @returns true if the type is a boolean type -ida_hexrays.is_break_consumer (function) - is_break_consumer(op) -> bool +ida_hexrays.is_break_consumer(op: "ctype_t") -> bool Does a break statement influence the specified statement code? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.is_commutative (function) - is_commutative(op) -> bool +ida_hexrays.is_cmpop_with_eq(cmpop: "cmpop_t") -> bool + +ida_hexrays.is_cmpop_without_eq(cmpop: "cmpop_t") -> bool + +ida_hexrays.is_commutative(op: "ctype_t") -> bool Is commutative operator? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.is_inplace_def (function) - is_inplace_def(type) -> bool +ida_hexrays.is_inplace_def(type: "tinfo_t") -> bool Is struct/union/enum definition (not declaration)? - - @param type: (C++: const tinfo_t &) tinfo_t const & -ida_hexrays.is_kreg (function) - is_kreg(r) -> bool - Is a kernel register? Kernel registers are temporary registers that can be used - freely. They may be used to store values that cross instruction or basic block - boundaries. Kernel registers do not map to regular processor registers. See also - mba_t::alloc_kreg() - - @param r: (C++: mreg_t) +ida_hexrays.is_kreg(r: "mreg_t") -> bool + Is a kernel register? Kernel registers are temporary registers that can be used freely. They may be used to store values that cross instruction or basic block boundaries. Kernel registers do not map to regular processor registers. See also mba_t::alloc_kreg() + -ida_hexrays.is_logical (function) - is_logical(op) -> bool +ida_hexrays.is_logical(op: "ctype_t") -> bool Is logical operator? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.is_loop (function) - is_loop(op) -> bool +ida_hexrays.is_loop(op: "ctype_t") -> bool Is loop statement code? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.is_lvalue (function) - is_lvalue(op) -> bool +ida_hexrays.is_lvalue(op: "ctype_t") -> bool Is Lvalue operator? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.is_may_access (function) - is_may_access(maymust) -> bool - - @param maymust: maymust_t +ida_hexrays.is_may_access(maymust: "maymust_t") -> bool -ida_hexrays.is_mcode_addsub (function) - is_mcode_addsub(mcode) -> bool - - @param mcode: enum mcode_t +ida_hexrays.is_mcode_addsub(mcode: "mcode_t") -> bool -ida_hexrays.is_mcode_call (function) - is_mcode_call(mcode) -> bool - - @param mcode: enum mcode_t +ida_hexrays.is_mcode_call(mcode: "mcode_t") -> bool -ida_hexrays.is_mcode_commutative (function) - is_mcode_commutative(mcode) -> bool - - @param mcode: enum mcode_t +ida_hexrays.is_mcode_commutative(mcode: "mcode_t") -> bool -ida_hexrays.is_mcode_convertible_to_jmp (function) - is_mcode_convertible_to_jmp(mcode) -> bool - - @param mcode: enum mcode_t +ida_hexrays.is_mcode_convertible_to_jmp(mcode: "mcode_t") -> bool -ida_hexrays.is_mcode_convertible_to_set (function) - is_mcode_convertible_to_set(mcode) -> bool - - @param mcode: enum mcode_t +ida_hexrays.is_mcode_convertible_to_set(mcode: "mcode_t") -> bool -ida_hexrays.is_mcode_divmod (function) - is_mcode_divmod(op) -> bool - - @param op: enum mcode_t +ida_hexrays.is_mcode_divmod(op: "mcode_t") -> bool -ida_hexrays.is_mcode_fpu (function) - is_mcode_fpu(mcode) -> bool - - @param mcode: enum mcode_t +ida_hexrays.is_mcode_fpu(mcode: "mcode_t") -> bool -ida_hexrays.is_mcode_j1 (function) - is_mcode_j1(mcode) -> bool - - @param mcode: enum mcode_t +ida_hexrays.is_mcode_j1(mcode: "mcode_t") -> bool -ida_hexrays.is_mcode_jcond (function) - is_mcode_jcond(mcode) -> bool - - @param mcode: enum mcode_t +ida_hexrays.is_mcode_jcond(mcode: "mcode_t") -> bool -ida_hexrays.is_mcode_propagatable (function) - 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) enum mcode_t +ida_hexrays.is_mcode_propagatable(mcode: "mcode_t") -> 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. + -ida_hexrays.is_mcode_set (function) - is_mcode_set(mcode) -> bool - - @param mcode: enum mcode_t +ida_hexrays.is_mcode_set(mcode: "mcode_t") -> bool -ida_hexrays.is_mcode_set1 (function) - is_mcode_set1(mcode) -> bool - - @param mcode: enum mcode_t +ida_hexrays.is_mcode_set1(mcode: "mcode_t") -> bool -ida_hexrays.is_mcode_shift (function) - is_mcode_shift(mcode) -> bool - - @param mcode: enum mcode_t +ida_hexrays.is_mcode_shift(mcode: "mcode_t") -> bool -ida_hexrays.is_mcode_xdsu (function) - is_mcode_xdsu(mcode) -> bool - - @param mcode: enum mcode_t +ida_hexrays.is_mcode_xdsu(mcode: "mcode_t") -> bool -ida_hexrays.is_multiplicative (function) - is_multiplicative(op) -> bool +ida_hexrays.is_multiplicative(op: "ctype_t") -> bool Is multiplicative operator? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.is_nonbool_type (function) - is_nonbool_type(type) -> bool - Is definitely a non-boolean type? - - @param type: (C++: const tinfo_t &) tinfo_t const & - @return: true if the type is a non-boolean type (non bool and well defined) +ida_hexrays.is_nonbool_type(type: "tinfo_t") -> bool + Is definitely a non-boolean type? + + @returns true if the type is a non-boolean type (non bool and well defined) -ida_hexrays.is_paf (function) - is_paf(t) -> bool +ida_hexrays.is_paf(t: "type_t") -> bool Is a pointer, array, or function type? - - @param t: (C++: type_t) -ida_hexrays.is_prepost (function) - is_prepost(op) -> bool +ida_hexrays.is_prepost(op: "ctype_t") -> bool Is pre/post increment/decrement operator? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.is_ptr_or_array (function) - is_ptr_or_array(t) -> bool +ida_hexrays.is_ptr_or_array(t: "type_t") -> bool Is a pointer or array type? - - @param t: (C++: type_t) -ida_hexrays.is_relational (function) - is_relational(op) -> bool +ida_hexrays.is_relational(op: "ctype_t") -> bool Is comparison operator? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.is_signed_mcode (function) - is_signed_mcode(code) -> bool - - @param code: enum mcode_t +ida_hexrays.is_signed_cmpop(cmpop: "cmpop_t") -> bool -ida_hexrays.is_small_udt (function) - is_small_udt(tif) -> bool - Is a small structure or union? - - @param tif: (C++: const tinfo_t &) tinfo_t const & - @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_signed_mcode(code: "mcode_t") -> bool -ida_hexrays.is_type_correct (function) - is_type_correct(ptr) -> bool - Verify a type string. - - @param ptr: (C++: const type_t *) type_t const * - @return: true if type string is correct +ida_hexrays.is_small_udt(tif: "tinfo_t") -> bool + Is a small structure or union? + + @returns 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_unary (function) - is_unary(op) -> bool +ida_hexrays.is_type_correct(ptr: "type_t const *") -> bool + Verify a type string. + + @returns true if type string is correct + +ida_hexrays.is_unary(op: "ctype_t") -> bool Is unary operator? + +ida_hexrays.is_unsigned_cmpop(cmpop: "cmpop_t") -> bool + +ida_hexrays.is_unsigned_mcode(code: "mcode_t") -> bool + +ida_hexrays.iterator + +ida_hexrays.iterator.__eq__(self, n: "iterator") -> bool + +ida_hexrays.iterator.__init__(self, n: int = -1) + +ida_hexrays.iterator.__ne__(self, n: "iterator") -> bool + +ida_hexrays.iterator.__ref__(self) -> int + +ida_hexrays.ivl_t + +ida_hexrays.ivl_t.__eq__(self, r: "ivl_t") -> bool + +ida_hexrays.ivl_t.__ge__(self, r: "ivl_t") -> bool + +ida_hexrays.ivl_t.__gt__(self, r: "ivl_t") -> bool + +ida_hexrays.ivl_t.__init__(self, _off: int = 0, _size: int = 0) + +ida_hexrays.ivl_t.__le__(self, r: "ivl_t") -> bool + +ida_hexrays.ivl_t.__lt__(self, r: "ivl_t") -> bool + +ida_hexrays.ivl_t.__ne__(self, r: "ivl_t") -> bool + +ida_hexrays.ivl_t.clear(self) -> None + +ida_hexrays.ivl_t.compare(self, r: "ivl_t") -> int + +ida_hexrays.ivl_t.contains(self, off2: int) -> bool + +ida_hexrays.ivl_t.dstr(self) -> str + +ida_hexrays.ivl_t.empty(self) -> bool + +ida_hexrays.ivl_t.extend_to_cover(self, r: "ivl_t") -> bool + +ida_hexrays.ivl_t.includes(self, ivl: "ivl_t") -> bool + +ida_hexrays.ivl_t.intersect(self, r: "ivl_t") -> None + +ida_hexrays.ivl_t.overlap(self, ivl: "ivl_t") -> bool + +ida_hexrays.ivl_with_name_t + +ida_hexrays.ivl_with_name_t.__init__(self) + +ida_hexrays.ivlset_t + +ida_hexrays.ivlset_t.__eq__(self, r: "ivlset_t") -> bool + +ida_hexrays.ivlset_t.__ge__(self, r: "ivlset_t") -> bool + +ida_hexrays.ivlset_t.__gt__(self, r: "ivlset_t") -> bool + +ida_hexrays.ivlset_t.__init__(self, *args) + +ida_hexrays.ivlset_t.__le__(self, r: "ivlset_t") -> bool + +ida_hexrays.ivlset_t.__lt__(self, r: "ivlset_t") -> bool + +ida_hexrays.ivlset_t.__ne__(self, r: "ivlset_t") -> bool + +ida_hexrays.ivlset_t._print(self) -> None + +ida_hexrays.ivlset_t.add(self, *args) -> bool + This function has the following signatures: - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.is_unsigned_mcode (function) - is_unsigned_mcode(code) -> bool + 0. add(ivl: const ivl_t &) -> bool + 1. add(ea: ida_idaapi.ea_t, size: asize_t) -> bool + 2. add(ivs: const ivlset_t &) -> bool - @param code: enum mcode_t - -ida_hexrays.iterator (class) - Proxy of C++ bitset_t::iterator class. - -ida_hexrays.iterator.__eq__ (method) - __eq__(self, n) -> bool + # 0: add(ivl: const ivl_t &) -> bool - @param n: bitset_t::iterator const & - -ida_hexrays.iterator.__init__ (method) - __init__(self, n=-1) -> iterator - @param n: int - -ida_hexrays.iterator.__ne__ (method) - __ne__(self, n) -> bool + # 1: add(ea: ida_idaapi.ea_t, size: asize_t) -> bool - @param n: bitset_t::iterator const & - -ida_hexrays.iterator.__ref__ (method) - __ref__(self) -> int - -ida_hexrays.ivl_t (class) - Proxy of C++ ivl_t class. - -ida_hexrays.ivl_t.__eq__ (method) - __eq__(self, r) -> bool - @param r: ivl_t const & + # 2: add(ivs: const ivlset_t &) -> bool -ida_hexrays.ivl_t.__ge__ (method) - __ge__(self, r) -> bool +ida_hexrays.ivlset_t.addmasked(self, ivs: "ivlset_t", mask: "ivl_t") -> bool + +ida_hexrays.ivlset_t.compare(self, r: "ivlset_t") -> int + +ida_hexrays.ivlset_t.contains(self, off: int) -> bool + +ida_hexrays.ivlset_t.count(self) -> "asize_t" + +ida_hexrays.ivlset_t.dstr(self) -> str + +ida_hexrays.ivlset_t.has_common(self, *args) -> bool + This function has the following signatures: - @param r: ivl_t const & - -ida_hexrays.ivl_t.__gt__ (method) - __gt__(self, r) -> bool + 0. has_common(ivl: const ivl_t &, strict: bool=false) -> bool + 1. has_common(ivs: const ivlset_t &) -> bool - @param r: ivl_t const & - -ida_hexrays.ivl_t.__init__ (method) - __init__(self, _off=0, _size=0) -> ivl_t + # 0: has_common(ivl: const ivl_t &, strict: bool=false) -> bool - @param _off: uval_t - @param _size: uval_t - -ida_hexrays.ivl_t.__le__ (method) - __le__(self, r) -> bool - @param r: ivl_t const & + # 1: has_common(ivs: const ivlset_t &) -> bool -ida_hexrays.ivl_t.__lt__ (method) - __lt__(self, r) -> bool +ida_hexrays.ivlset_t.includes(self, ivs: "ivlset_t") -> bool + +ida_hexrays.ivlset_t.intersect(self, ivs: "ivlset_t") -> bool + +ida_hexrays.ivlset_t.sub(self, *args) -> bool + This function has the following signatures: - @param r: ivl_t const & - -ida_hexrays.ivl_t.__ne__ (method) - __ne__(self, r) -> bool + 0. sub(ivl: const ivl_t &) -> bool + 1. sub(ea: ida_idaapi.ea_t, size: asize_t) -> bool + 2. sub(ivs: const ivlset_t &) -> bool - @param r: ivl_t const & - -ida_hexrays.ivl_t.clear (method) - clear(self) - -ida_hexrays.ivl_t.compare (method) - compare(self, r) -> int + # 0: sub(ivl: const ivl_t &) -> bool - @param r: ivl_t const & - -ida_hexrays.ivl_t.contains (method) - contains(self, off2) -> bool - @param off2: uval_t - -ida_hexrays.ivl_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.ivl_t.empty (method) - empty(self) -> bool - -ida_hexrays.ivl_t.extend_to_cover (method) - extend_to_cover(self, r) -> bool + # 1: sub(ea: ida_idaapi.ea_t, size: asize_t) -> bool - @param r: ivl_t const & + + # 2: sub(ivs: const ivlset_t &) -> bool -ida_hexrays.ivl_t.includes (method) - includes(self, ivl) -> bool - - @param ivl: ivl_t const & +ida_hexrays.jcnd2set(code: "mcode_t") -> "mcode_t" -ida_hexrays.ivl_t.intersect (method) - intersect(self, r) - - @param r: ivl_t const & +ida_hexrays.lexcompare(a: "mop_t", b: "mop_t") -> int -ida_hexrays.ivl_t.overlap (method) - overlap(self, ivl) -> bool - - @param ivl: ivl_t const & +ida_hexrays.lnot(e) + Logically negate the specified expression. The specified expression will be logically negated. For example, "x == y" is converted into "x != y" by this function. + + @param e: expression to negate. After the call, e must not be used anymore because it can be changed by the function. The function return value must be used to refer to the expression. + @returns logically negated expression. -ida_hexrays.ivl_with_name_t (class) - Proxy of C++ ivl_with_name_t class. +ida_hexrays.locate_lvar(out: "lvar_locator_t", func_ea: ida_idaapi.ea_t, varname: str) -> bool + Find a variable by name. + + @param out: output buffer for the variable locator + @param func_ea: function start address + @param varname: variable name + @returns success Since VARNAME is not always enough to find the variable, it may decompile the function. -ida_hexrays.ivl_with_name_t.__init__ (method) - __init__(self) -> ivl_with_name_t +ida_hexrays.lvar_locator_t -ida_hexrays.ivlset_t (class) - Proxy of C++ ivlset_t class. +ida_hexrays.lvar_locator_t.__eq__(self, r: "lvar_locator_t") -> bool -ida_hexrays.ivlset_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: ivlset_t const & +ida_hexrays.lvar_locator_t.__ge__(self, r: "lvar_locator_t") -> bool -ida_hexrays.ivlset_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: ivlset_t const & +ida_hexrays.lvar_locator_t.__gt__(self, r: "lvar_locator_t") -> bool -ida_hexrays.ivlset_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: ivlset_t const & +ida_hexrays.lvar_locator_t.__init__(self, *args) -ida_hexrays.ivlset_t.__init__ (method) - __init__(self) -> ivlset_t - __init__(self, ivl) -> ivlset_t - - @param ivl: ivl_t const & +ida_hexrays.lvar_locator_t.__le__(self, r: "lvar_locator_t") -> bool -ida_hexrays.ivlset_t.__le__ (method) - __le__(self, r) -> bool - - @param r: ivlset_t const & +ida_hexrays.lvar_locator_t.__lt__(self, r: "lvar_locator_t") -> bool -ida_hexrays.ivlset_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: ivlset_t const & +ida_hexrays.lvar_locator_t.__ne__(self, r: "lvar_locator_t") -> bool -ida_hexrays.ivlset_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: ivlset_t const & +ida_hexrays.lvar_locator_t.compare(self, r: "lvar_locator_t") -> int -ida_hexrays.ivlset_t._print (method) - _print(self) +ida_hexrays.lvar_locator_t.defea + Definition address. Usually, this is the address of the instruction that initializes the variable. In some cases it can be a fictional address. + -ida_hexrays.ivlset_t.add (method) - add(self, ivl) -> bool - - @param ivl: ivl_t const & - - add(self, ea, size) -> bool - - @param ea: ea_t - @param size: asize_t - - add(self, ivs) -> bool - - @param ivs: ivlset_t const & - -ida_hexrays.ivlset_t.addmasked (method) - addmasked(self, ivs, mask) -> bool - - @param ivs: ivlset_t const & - @param mask: ivl_t const & - -ida_hexrays.ivlset_t.compare (method) - compare(self, r) -> int - - @param r: ivlset_t const & - -ida_hexrays.ivlset_t.contains (method) - contains(self, off) -> bool - - @param off: uval_t - -ida_hexrays.ivlset_t.count (method) - count(self) -> asize_t - -ida_hexrays.ivlset_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.ivlset_t.has_common (method) - has_common(self, ivl, strict=False) -> bool - - @param ivl: ivl_t const & - @param strict: bool - - has_common(self, ivs) -> bool - - @param ivs: ivlset_t const & - -ida_hexrays.ivlset_t.includes (method) - includes(self, ivs) -> bool - - @param ivs: ivlset_t const & - -ida_hexrays.ivlset_t.intersect (method) - intersect(self, ivs) -> bool - - @param ivs: ivlset_t const & - -ida_hexrays.ivlset_t.sub (method) - sub(self, ivl) -> bool - - @param ivl: ivl_t const & - - sub(self, ea, size) -> bool - - @param ea: ea_t - @param size: asize_t - - sub(self, ivs) -> bool - - @param ivs: ivlset_t const & - -ida_hexrays.jcnd2set (function) - jcnd2set(code) -> mcode_t - - @param code: enum mcode_t - -ida_hexrays.lexcompare (function) - lexcompare(a, b) -> int - - @param a: mop_t const & - @param b: mop_t const & - -ida_hexrays.lnot (function) - Logically negate the specified expression. The specified expression will be - logically negated. For example, "x == y" is converted into "x != y" by this - function. - - @return: logically negated expression. - -ida_hexrays.locate_lvar (function) - locate_lvar(out, func_ea, varname) -> bool - Find a variable by name. - - @param out: (C++: lvar_locator_t *) output buffer for the variable locator - @param func_ea: (C++: ea_t) function start address - @param varname: (C++: const char *) variable name - @return: success Since VARNAME is not always enough to find the variable, it may - decompile the function. - -ida_hexrays.lvar_locator_t (class) - Proxy of C++ lvar_locator_t class. - -ida_hexrays.lvar_locator_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: lvar_locator_t const & - -ida_hexrays.lvar_locator_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: lvar_locator_t const & - -ida_hexrays.lvar_locator_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: lvar_locator_t const & - -ida_hexrays.lvar_locator_t.__init__ (method) - __init__(self) -> lvar_locator_t - __init__(self, loc, ea) -> lvar_locator_t - - @param loc: vdloc_t const & - @param ea: ea_t - -ida_hexrays.lvar_locator_t.__le__ (method) - __le__(self, r) -> bool - - @param r: lvar_locator_t const & - -ida_hexrays.lvar_locator_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: lvar_locator_t const & - -ida_hexrays.lvar_locator_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: lvar_locator_t const & - -ida_hexrays.lvar_locator_t.compare (method) - compare(self, r) -> int - - @param r: lvar_locator_t const & - -ida_hexrays.lvar_locator_t.defea (variable) - Definition address. Usually, this is the address of the instruction that - initializes the variable. In some cases it can be a fictional address. - -ida_hexrays.lvar_locator_t.get_reg1 (method) - get_reg1(self) -> mreg_t +ida_hexrays.lvar_locator_t.get_reg1(self) -> "mreg_t" Get the register number of the variable. -ida_hexrays.lvar_locator_t.get_reg2 (method) - get_reg2(self) -> mreg_t +ida_hexrays.lvar_locator_t.get_reg2(self) -> "mreg_t" Get the number of the second register (works only for ALOC_REG2 lvars) -ida_hexrays.lvar_locator_t.get_scattered (method) - get_scattered(self) -> scattered_aloc_t +ida_hexrays.lvar_locator_t.get_scattered(self) -> "scattered_aloc_t &" + Get information about scattered variable. -ida_hexrays.lvar_locator_t.get_stkoff (method) - get_stkoff(self) -> sval_t - Get offset of the varialbe in the stack frame. - - @return: a non-negative value for stack variables. The value is an offset from - the bottom of the stack frame in terms of vd-offsets. negative values - mean error (not a stack variable) +ida_hexrays.lvar_locator_t.get_stkoff(self) -> int + Get offset of the varialbe in the stack frame. + + @returns a non-negative value for stack variables. The value is an offset from the bottom of the stack frame in terms of vd-offsets. negative values mean error (not a stack variable) -ida_hexrays.lvar_locator_t.is_reg1 (method) - is_reg1(self) -> bool +ida_hexrays.lvar_locator_t.is_reg1(self) -> bool Is variable located on one register? -ida_hexrays.lvar_locator_t.is_reg2 (method) - is_reg2(self) -> bool +ida_hexrays.lvar_locator_t.is_reg2(self) -> bool Is variable located on two registers? -ida_hexrays.lvar_locator_t.is_reg_var (method) - is_reg_var(self) -> bool +ida_hexrays.lvar_locator_t.is_reg_var(self) -> bool Is variable located on register(s)? -ida_hexrays.lvar_locator_t.is_scattered (method) - is_scattered(self) -> bool +ida_hexrays.lvar_locator_t.is_scattered(self) -> bool Is variable scattered? -ida_hexrays.lvar_locator_t.is_stk_var (method) - is_stk_var(self) -> bool +ida_hexrays.lvar_locator_t.is_stk_var(self) -> bool Is variable located on the stack? -ida_hexrays.lvar_locator_t.location (variable) +ida_hexrays.lvar_locator_t.location Variable location. -ida_hexrays.lvar_mapping_begin (function) - lvar_mapping_begin(map) -> lvar_mapping_iterator_t +ida_hexrays.lvar_mapping_begin(map: "lvar_mapping_t") -> "lvar_mapping_iterator_t" Get iterator pointing to the beginning of lvar_mapping_t. - - @param map: (C++: const lvar_mapping_t *) lvar_mapping_t const * -ida_hexrays.lvar_mapping_clear (function) - lvar_mapping_clear(map) +ida_hexrays.lvar_mapping_clear(map: "lvar_mapping_t") -> None Clear lvar_mapping_t. - - @param map: (C++: lvar_mapping_t *) -ida_hexrays.lvar_mapping_end (function) - lvar_mapping_end(map) -> lvar_mapping_iterator_t +ida_hexrays.lvar_mapping_end(map: "lvar_mapping_t") -> "lvar_mapping_iterator_t" Get iterator pointing to the end of lvar_mapping_t. - - @param map: (C++: const lvar_mapping_t *) lvar_mapping_t const * -ida_hexrays.lvar_mapping_erase (function) - lvar_mapping_erase(map, p) +ida_hexrays.lvar_mapping_erase(map: "lvar_mapping_t", p: "lvar_mapping_iterator_t") -> None 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 (function) - lvar_mapping_find(map, key) -> lvar_mapping_iterator_t +ida_hexrays.lvar_mapping_find(map: "lvar_mapping_t", key: "lvar_locator_t") -> "lvar_mapping_iterator_t" Find the specified key in lvar_mapping_t. - - @param map: (C++: const lvar_mapping_t *) lvar_mapping_t const * - @param key: (C++: const lvar_locator_t &) lvar_locator_t const & -ida_hexrays.lvar_mapping_first (function) - lvar_mapping_first(p) -> lvar_locator_t +ida_hexrays.lvar_mapping_first(p: "lvar_mapping_iterator_t") -> "lvar_locator_t const &" Get reference to the current map key. - - @param p: (C++: lvar_mapping_iterator_t) -ida_hexrays.lvar_mapping_free (function) - lvar_mapping_free(map) +ida_hexrays.lvar_mapping_free(map: "lvar_mapping_t") -> None Delete lvar_mapping_t instance. - - @param map: (C++: lvar_mapping_t *) -ida_hexrays.lvar_mapping_insert (function) - lvar_mapping_insert(map, key, val) -> lvar_mapping_iterator_t +ida_hexrays.lvar_mapping_insert(map: "lvar_mapping_t", key: "lvar_locator_t", val: "lvar_locator_t") -> "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 &) lvar_locator_t const & - @param val: (C++: const lvar_locator_t &) lvar_locator_t const & -ida_hexrays.lvar_mapping_iterator_t (class) - Proxy of C++ lvar_mapping_iterator_t class. +ida_hexrays.lvar_mapping_iterator_t -ida_hexrays.lvar_mapping_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: lvar_mapping_iterator_t const & +ida_hexrays.lvar_mapping_iterator_t.__eq__(self, p: "lvar_mapping_iterator_t") -> bool -ida_hexrays.lvar_mapping_iterator_t.__init__ (method) - __init__(self) -> lvar_mapping_iterator_t +ida_hexrays.lvar_mapping_iterator_t.__init__(self) -ida_hexrays.lvar_mapping_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: lvar_mapping_iterator_t const & +ida_hexrays.lvar_mapping_iterator_t.__ne__(self, p: "lvar_mapping_iterator_t") -> bool -ida_hexrays.lvar_mapping_new (function) - lvar_mapping_new() -> lvar_mapping_t +ida_hexrays.lvar_mapping_new() -> "lvar_mapping_t *" Create a new lvar_mapping_t instance. -ida_hexrays.lvar_mapping_next (function) - lvar_mapping_next(p) -> lvar_mapping_iterator_t +ida_hexrays.lvar_mapping_next(p: "lvar_mapping_iterator_t") -> "lvar_mapping_iterator_t" Move to the next element. - - @param p: (C++: lvar_mapping_iterator_t) -ida_hexrays.lvar_mapping_prev (function) - lvar_mapping_prev(p) -> lvar_mapping_iterator_t +ida_hexrays.lvar_mapping_prev(p: "lvar_mapping_iterator_t") -> "lvar_mapping_iterator_t" Move to the previous element. - - @param p: (C++: lvar_mapping_iterator_t) -ida_hexrays.lvar_mapping_second (function) - lvar_mapping_second(p) -> lvar_locator_t +ida_hexrays.lvar_mapping_second(p: "lvar_mapping_iterator_t") -> "lvar_locator_t &" Get reference to the current map value. - - @param p: (C++: lvar_mapping_iterator_t) -ida_hexrays.lvar_mapping_size (function) - lvar_mapping_size(map) -> size_t +ida_hexrays.lvar_mapping_size(map: "lvar_mapping_t") -> "size_t" Get size of lvar_mapping_t. - - @param map: (C++: lvar_mapping_t *) -ida_hexrays.lvar_mapping_t (class) - Proxy of C++ std::map< lvar_locator_t,lvar_locator_t > class. +ida_hexrays.lvar_mapping_t -ida_hexrays.lvar_mapping_t.__init__ (method) - __init__(self) -> lvar_mapping_t +ida_hexrays.lvar_mapping_t.__init__(self) -ida_hexrays.lvar_mapping_t.at (method) - at(self, _Keyval) -> lvar_locator_t - - @param _Keyval: lvar_locator_t const & +ida_hexrays.lvar_mapping_t.at(self, _Keyval: "lvar_locator_t") -> "lvar_locator_t &" -ida_hexrays.lvar_mapping_t.size (method) - size(self) -> size_t +ida_hexrays.lvar_mapping_t.size(self) -> "size_t" -ida_hexrays.lvar_ref_t (class) - Proxy of C++ lvar_ref_t class. +ida_hexrays.lvar_ref_t -ida_hexrays.lvar_ref_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: lvar_ref_t const & +ida_hexrays.lvar_ref_t.__eq__(self, r: "lvar_ref_t") -> bool -ida_hexrays.lvar_ref_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: lvar_ref_t const & +ida_hexrays.lvar_ref_t.__ge__(self, r: "lvar_ref_t") -> bool -ida_hexrays.lvar_ref_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: lvar_ref_t const & +ida_hexrays.lvar_ref_t.__gt__(self, r: "lvar_ref_t") -> bool -ida_hexrays.lvar_ref_t.__init__ (method) - __init__(self, m, i, o=0) -> lvar_ref_t - - @param m: mba_t * - @param i: int - @param o: sval_t - - __init__(self, r) -> lvar_ref_t - - @param r: lvar_ref_t const & +ida_hexrays.lvar_ref_t.__init__(self, *args) -ida_hexrays.lvar_ref_t.__le__ (method) - __le__(self, r) -> bool - - @param r: lvar_ref_t const & +ida_hexrays.lvar_ref_t.__le__(self, r: "lvar_ref_t") -> bool -ida_hexrays.lvar_ref_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: lvar_ref_t const & +ida_hexrays.lvar_ref_t.__lt__(self, r: "lvar_ref_t") -> bool -ida_hexrays.lvar_ref_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: lvar_ref_t const & +ida_hexrays.lvar_ref_t.__ne__(self, r: "lvar_ref_t") -> bool -ida_hexrays.lvar_ref_t.compare (method) - compare(self, r) -> int - - @param r: lvar_ref_t const & +ida_hexrays.lvar_ref_t.compare(self, r: "lvar_ref_t") -> int -ida_hexrays.lvar_ref_t.idx (variable) +ida_hexrays.lvar_ref_t.idx index into mba->vars -ida_hexrays.lvar_ref_t.mba (variable) - Pointer to the parent mba_t object. Since we need to access the 'mba->vars' - array in order to retrieve the referenced variable, we keep a pointer to mba_t - here. Note: this means this class and consequently mop_t, minsn_t, mblock_t are - specific to a mba_t object and cannot migrate between them. fortunately this is - not something we need to do. second, lvar_ref_t's appear only after MMAT_LVARS. +ida_hexrays.lvar_ref_t.mba + Pointer to the parent mba_t object. Since we need to access the 'mba->vars' array in order to retrieve the referenced variable, we keep a pointer to mba_t here. Note: this means this class and consequently mop_t, minsn_t, mblock_t are specific to a mba_t object and cannot migrate between them. fortunately this is not something we need to do. second, lvar_ref_t's appear only after MMAT_LVARS. + -ida_hexrays.lvar_ref_t.off (variable) +ida_hexrays.lvar_ref_t.off offset from the beginning of the variable -ida_hexrays.lvar_ref_t.swap (method) - swap(self, r) - - @param r: lvar_ref_t & +ida_hexrays.lvar_ref_t.swap(self, r: "lvar_ref_t") -> None -ida_hexrays.lvar_ref_t.var (method) - var(self) -> lvar_t +ida_hexrays.lvar_ref_t.var(self) -> "lvar_t &" Retrieve the referenced variable. -ida_hexrays.lvar_saved_info_t (class) - Proxy of C++ lvar_saved_info_t class. +ida_hexrays.lvar_saved_info_t -ida_hexrays.lvar_saved_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: lvar_saved_info_t const & +ida_hexrays.lvar_saved_info_t.__eq__(self, r: "lvar_saved_info_t") -> bool -ida_hexrays.lvar_saved_info_t.__init__ (method) - __init__(self) -> lvar_saved_info_t +ida_hexrays.lvar_saved_info_t.__init__(self) -ida_hexrays.lvar_saved_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: lvar_saved_info_t const & +ida_hexrays.lvar_saved_info_t.__ne__(self, r: "lvar_saved_info_t") -> bool -ida_hexrays.lvar_saved_info_t.clear_keep (method) - clear_keep(self) +ida_hexrays.lvar_saved_info_t.clear_keep(self) -> None -ida_hexrays.lvar_saved_info_t.clr_nomap_lvar (method) - clr_nomap_lvar(self) +ida_hexrays.lvar_saved_info_t.clr_nomap_lvar(self) -> None -ida_hexrays.lvar_saved_info_t.clr_noptr_lvar (method) - clr_noptr_lvar(self) +ida_hexrays.lvar_saved_info_t.clr_noptr_lvar(self) -> None -ida_hexrays.lvar_saved_info_t.clr_split_lvar (method) - clr_split_lvar(self) +ida_hexrays.lvar_saved_info_t.clr_split_lvar(self) -> None -ida_hexrays.lvar_saved_info_t.clr_unused_lvar (method) - clr_unused_lvar(self) +ida_hexrays.lvar_saved_info_t.clr_unused_lvar(self) -> None -ida_hexrays.lvar_saved_info_t.cmt (variable) +ida_hexrays.lvar_saved_info_t.cmt Comment. -ida_hexrays.lvar_saved_info_t.flags (variable) - saved user lvar info property bits +ida_hexrays.lvar_saved_info_t.flags + saved user lvar info property bits + -ida_hexrays.lvar_saved_info_t.has_info (method) - has_info(self) -> bool +ida_hexrays.lvar_saved_info_t.has_info(self) -> bool -ida_hexrays.lvar_saved_info_t.is_kept (method) - is_kept(self) -> bool +ida_hexrays.lvar_saved_info_t.is_kept(self) -> bool -ida_hexrays.lvar_saved_info_t.is_nomap_lvar (method) - is_nomap_lvar(self) -> bool +ida_hexrays.lvar_saved_info_t.is_nomap_lvar(self) -> bool -ida_hexrays.lvar_saved_info_t.is_noptr_lvar (method) - is_noptr_lvar(self) -> bool +ida_hexrays.lvar_saved_info_t.is_noptr_lvar(self) -> bool -ida_hexrays.lvar_saved_info_t.is_split_lvar (method) - is_split_lvar(self) -> bool +ida_hexrays.lvar_saved_info_t.is_split_lvar(self) -> bool -ida_hexrays.lvar_saved_info_t.is_unused_lvar (method) - is_unused_lvar(self) -> bool +ida_hexrays.lvar_saved_info_t.is_unused_lvar(self) -> bool -ida_hexrays.lvar_saved_info_t.ll (variable) +ida_hexrays.lvar_saved_info_t.ll Variable locator. -ida_hexrays.lvar_saved_info_t.name (variable) +ida_hexrays.lvar_saved_info_t.name Name. -ida_hexrays.lvar_saved_info_t.set_keep (method) - set_keep(self) +ida_hexrays.lvar_saved_info_t.set_keep(self) -> None -ida_hexrays.lvar_saved_info_t.set_nomap_lvar (method) - set_nomap_lvar(self) +ida_hexrays.lvar_saved_info_t.set_nomap_lvar(self) -> None -ida_hexrays.lvar_saved_info_t.set_noptr_lvar (method) - set_noptr_lvar(self) +ida_hexrays.lvar_saved_info_t.set_noptr_lvar(self) -> None -ida_hexrays.lvar_saved_info_t.set_split_lvar (method) - set_split_lvar(self) +ida_hexrays.lvar_saved_info_t.set_split_lvar(self) -> None -ida_hexrays.lvar_saved_info_t.set_unused_lvar (method) - set_unused_lvar(self) +ida_hexrays.lvar_saved_info_t.set_unused_lvar(self) -> None -ida_hexrays.lvar_saved_info_t.size (variable) +ida_hexrays.lvar_saved_info_t.size Type size (if not initialized then -1) -ida_hexrays.lvar_saved_info_t.type (variable) +ida_hexrays.lvar_saved_info_t.type Type. -ida_hexrays.lvar_saved_infos_t (class) - Proxy of C++ qvector< lvar_saved_info_t > class. +ida_hexrays.lvar_saved_infos_t -ida_hexrays.lvar_saved_infos_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< lvar_saved_info_t > const & +ida_hexrays.lvar_saved_infos_t.__eq__(self, r: "lvar_saved_infos_t") -> bool -ida_hexrays.lvar_saved_infos_t.__getitem__ (method) - __getitem__(self, i) -> lvar_saved_info_t - - @param i: size_t +ida_hexrays.lvar_saved_infos_t.__getitem__(self, i: "size_t") -> "lvar_saved_info_t const &" -ida_hexrays.lvar_saved_infos_t.__init__ (method) - __init__(self) -> lvar_saved_infos_t - __init__(self, x) -> lvar_saved_infos_t - - @param x: qvector< lvar_saved_info_t > const & +ida_hexrays.lvar_saved_infos_t.__init__(self, *args) -ida_hexrays.lvar_saved_infos_t.__len__ (method) - __len__(self) -> size_t +ida_hexrays.lvar_saved_infos_t.__len__(self) -> "size_t" -ida_hexrays.lvar_saved_infos_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< lvar_saved_info_t > const & +ida_hexrays.lvar_saved_infos_t.__ne__(self, r: "lvar_saved_infos_t") -> bool -ida_hexrays.lvar_saved_infos_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: lvar_saved_info_t const & +ida_hexrays.lvar_saved_infos_t.__setitem__(self, i: "size_t", v: "lvar_saved_info_t") -> None -ida_hexrays.lvar_saved_infos_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: lvar_saved_info_t const & +ida_hexrays.lvar_saved_infos_t._del(self, x: "lvar_saved_info_t") -> bool -ida_hexrays.lvar_saved_infos_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: lvar_saved_info_t const & +ida_hexrays.lvar_saved_infos_t.add_unique(self, x: "lvar_saved_info_t") -> bool -ida_hexrays.lvar_saved_infos_t.at (method) - at(self, _idx) -> lvar_saved_info_t - - @param _idx: size_t +ida_hexrays.lvar_saved_infos_t.append(self, x: "lvar_saved_info_t") -> None -ida_hexrays.lvar_saved_infos_t.begin (method) - begin(self) -> lvar_saved_info_t +ida_hexrays.lvar_saved_infos_t.at(self, _idx: "size_t") -> "lvar_saved_info_t const &" -ida_hexrays.lvar_saved_infos_t.capacity (method) - capacity(self) -> size_t +ida_hexrays.lvar_saved_infos_t.begin(self, *args) -> "qvector< lvar_saved_info_t >::const_iterator" -ida_hexrays.lvar_saved_infos_t.clear (method) - clear(self) +ida_hexrays.lvar_saved_infos_t.capacity(self) -> "size_t" -ida_hexrays.lvar_saved_infos_t.empty (method) - empty(self) -> bool +ida_hexrays.lvar_saved_infos_t.clear(self) -> None -ida_hexrays.lvar_saved_infos_t.end (method) - end(self) -> lvar_saved_info_t +ida_hexrays.lvar_saved_infos_t.empty(self) -> bool -ida_hexrays.lvar_saved_infos_t.erase (method) - erase(self, it) -> lvar_saved_info_t - - @param it: qvector< lvar_saved_info_t >::iterator - - erase(self, first, last) -> lvar_saved_info_t - - @param first: qvector< lvar_saved_info_t >::iterator - @param last: qvector< lvar_saved_info_t >::iterator +ida_hexrays.lvar_saved_infos_t.end(self, *args) -> "qvector< lvar_saved_info_t >::const_iterator" -ida_hexrays.lvar_saved_infos_t.extract (method) - extract(self) -> lvar_saved_info_t +ida_hexrays.lvar_saved_infos_t.erase(self, *args) -> "qvector< lvar_saved_info_t >::iterator" -ida_hexrays.lvar_saved_infos_t.find (method) - find(self, x) -> lvar_saved_info_t - - @param x: lvar_saved_info_t const & +ida_hexrays.lvar_saved_infos_t.extend(self, x: "lvar_saved_infos_t") -> None -ida_hexrays.lvar_saved_infos_t.grow (method) - grow(self, x=lvar_saved_info_t()) - - @param x: lvar_saved_info_t const & +ida_hexrays.lvar_saved_infos_t.extract(self) -> "lvar_saved_info_t *" -ida_hexrays.lvar_saved_infos_t.has (method) - has(self, x) -> bool - - @param x: lvar_saved_info_t const & +ida_hexrays.lvar_saved_infos_t.find(self, *args) -> "qvector< lvar_saved_info_t >::const_iterator" -ida_hexrays.lvar_saved_infos_t.inject (method) - inject(self, s, len) - - @param s: lvar_saved_info_t * - @param len: size_t +ida_hexrays.lvar_saved_infos_t.grow(self, *args) -> None -ida_hexrays.lvar_saved_infos_t.insert (method) - insert(self, it, x) -> lvar_saved_info_t - - @param it: qvector< lvar_saved_info_t >::iterator - @param x: lvar_saved_info_t const & +ida_hexrays.lvar_saved_infos_t.has(self, x: "lvar_saved_info_t") -> bool -ida_hexrays.lvar_saved_infos_t.pop_back (method) - pop_back(self) +ida_hexrays.lvar_saved_infos_t.inject(self, s: "lvar_saved_info_t", len: "size_t") -> None -ida_hexrays.lvar_saved_infos_t.push_back (method) - push_back(self, x) - - @param x: lvar_saved_info_t const & - - push_back(self) -> lvar_saved_info_t +ida_hexrays.lvar_saved_infos_t.insert(self, it: "lvar_saved_info_t", x: "lvar_saved_info_t") -> "qvector< lvar_saved_info_t >::iterator" -ida_hexrays.lvar_saved_infos_t.qclear (method) - qclear(self) +ida_hexrays.lvar_saved_infos_t.pop_back(self) -> None -ida_hexrays.lvar_saved_infos_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_hexrays.lvar_saved_infos_t.push_back(self, *args) -> "lvar_saved_info_t &" -ida_hexrays.lvar_saved_infos_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: lvar_saved_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_hexrays.lvar_saved_infos_t.qclear(self) -> None -ida_hexrays.lvar_saved_infos_t.size (method) - size(self) -> size_t +ida_hexrays.lvar_saved_infos_t.reserve(self, cnt: "size_t") -> None -ida_hexrays.lvar_saved_infos_t.swap (method) - swap(self, r) - - @param r: qvector< lvar_saved_info_t > & +ida_hexrays.lvar_saved_infos_t.resize(self, *args) -> None -ida_hexrays.lvar_saved_infos_t.truncate (method) - truncate(self) +ida_hexrays.lvar_saved_infos_t.size(self) -> "size_t" -ida_hexrays.lvar_t (class) - Proxy of C++ lvar_t class. +ida_hexrays.lvar_saved_infos_t.swap(self, r: "lvar_saved_infos_t") -> None -ida_hexrays.lvar_t.__init__ (method) +ida_hexrays.lvar_saved_infos_t.truncate(self) -> None -ida_hexrays.lvar_t.accepts_type (method) - accepts_type(self, t, may_change_thisarg=False) -> bool - Check if the variable accept the specified type. Some types are forbidden (void, - function types, wrong arrays, etc) - - @param t: (C++: const tinfo_t &) tinfo_t const & - @param may_change_thisarg: (C++: bool) +ida_hexrays.lvar_t -ida_hexrays.lvar_t.append_list (method) - append_list(self, mba, lst, pad_if_scattered=False) - Append local variable to mlist. - - @param mba: (C++: const mba_t *) ptr to the current mba_t - @param lst: (C++: mlist_t *) list to append to - @param pad_if_scattered: (C++: bool) if true, append padding bytes in case of scattered lvar +ida_hexrays.lvar_t.__init__(self, *args, **kwargs) -ida_hexrays.lvar_t.clear_used (method) - clear_used(self) +ida_hexrays.lvar_t.accepts_type(self, t: "tinfo_t", may_change_thisarg: bool = False) -> bool + Check if the variable accept the specified type. Some types are forbidden (void, function types, wrong arrays, etc) + -ida_hexrays.lvar_t.clr_arg_var (method) - clr_arg_var(self) +ida_hexrays.lvar_t.append_list(self, mba: "mba_t", lst: "mlist_t", pad_if_scattered: bool = False) -> None + Append local variable to mlist. + + @param mba: ptr to the current mba_t + @param lst: list to append to + @param pad_if_scattered: if true, append padding bytes in case of scattered lvar -ida_hexrays.lvar_t.clr_automapped (method) - clr_automapped(self) +ida_hexrays.lvar_t.clear_used(self) -> None -ida_hexrays.lvar_t.clr_decl_unused (method) - clr_decl_unused(self) +ida_hexrays.lvar_t.clr_arg_var(self) -> None -ida_hexrays.lvar_t.clr_dummy_arg (method) - clr_dummy_arg(self) +ida_hexrays.lvar_t.clr_automapped(self) -> None -ida_hexrays.lvar_t.clr_fake_var (method) - clr_fake_var(self) +ida_hexrays.lvar_t.clr_decl_unused(self) -> None -ida_hexrays.lvar_t.clr_floating_var (method) - clr_floating_var(self) +ida_hexrays.lvar_t.clr_dummy_arg(self) -> None -ida_hexrays.lvar_t.clr_mapdst_var (method) - clr_mapdst_var(self) +ida_hexrays.lvar_t.clr_fake_var(self) -> None -ida_hexrays.lvar_t.clr_mreg_done (method) - clr_mreg_done(self) +ida_hexrays.lvar_t.clr_floating_var(self) -> None -ida_hexrays.lvar_t.clr_noptr_var (method) - clr_noptr_var(self) +ida_hexrays.lvar_t.clr_mapdst_var(self) -> None -ida_hexrays.lvar_t.clr_notarg (method) - clr_notarg(self) +ida_hexrays.lvar_t.clr_mreg_done(self) -> None -ida_hexrays.lvar_t.clr_overlapped_var (method) - clr_overlapped_var(self) +ida_hexrays.lvar_t.clr_noptr_var(self) -> None -ida_hexrays.lvar_t.clr_shared (method) - clr_shared(self) +ida_hexrays.lvar_t.clr_notarg(self) -> None -ida_hexrays.lvar_t.clr_split_var (method) - clr_split_var(self) +ida_hexrays.lvar_t.clr_overlapped_var(self) -> None -ida_hexrays.lvar_t.clr_spoiled_var (method) - clr_spoiled_var(self) +ida_hexrays.lvar_t.clr_scattered_arg(self) -> None -ida_hexrays.lvar_t.clr_thisarg (method) - clr_thisarg(self) +ida_hexrays.lvar_t.clr_shared(self) -> None -ida_hexrays.lvar_t.clr_unknown_width (method) - clr_unknown_width(self) +ida_hexrays.lvar_t.clr_split_var(self) -> None -ida_hexrays.lvar_t.clr_used_byref (method) - clr_used_byref(self) +ida_hexrays.lvar_t.clr_spoiled_var(self) -> None -ida_hexrays.lvar_t.clr_user_info (method) - clr_user_info(self) +ida_hexrays.lvar_t.clr_thisarg(self) -> None -ida_hexrays.lvar_t.clr_user_name (method) - clr_user_name(self) +ida_hexrays.lvar_t.clr_unknown_width(self) -> None -ida_hexrays.lvar_t.clr_user_type (method) - clr_user_type(self) +ida_hexrays.lvar_t.clr_used_byref(self) -> None -ida_hexrays.lvar_t.cmt (variable) +ida_hexrays.lvar_t.clr_user_info(self) -> None + +ida_hexrays.lvar_t.clr_user_name(self) -> None + +ida_hexrays.lvar_t.clr_user_type(self) -> None + +ida_hexrays.lvar_t.cmt variable comment string -ida_hexrays.lvar_t.defblk (variable) - first block defining the variable. 0 for args, -1 if unknown +ida_hexrays.lvar_t.defblk + first block defining the variable. 0 for args, -1 if unknown + -ida_hexrays.lvar_t.divisor (variable) +ida_hexrays.lvar_t.divisor max known divisor of the variable -ida_hexrays.lvar_t.has_common (method) - has_common(self, v) -> bool +ida_hexrays.lvar_t.has_common(self, v: "lvar_t") -> bool Do variables overlap? - - @param v: (C++: const lvar_t &) lvar_t const & -ida_hexrays.lvar_t.has_common_bit (method) - has_common_bit(self, loc, width2) -> bool +ida_hexrays.lvar_t.has_common_bit(self, loc: "vdloc_t", width2: "asize_t") -> bool Does the variable overlap with the specified location? - - @param loc: (C++: const vdloc_t &) vdloc_t const & - @param width2: (C++: asize_t) -ida_hexrays.lvar_t.has_nice_name (method) - has_nice_name(self) -> bool +ida_hexrays.lvar_t.has_nice_name(self) -> bool Does the variable have a nice name? -ida_hexrays.lvar_t.has_regname (method) - has_regname(self) -> bool +ida_hexrays.lvar_t.has_regname(self) -> bool Has a register name? (like _RAX) -ida_hexrays.lvar_t.has_user_info (method) - has_user_info(self) -> bool +ida_hexrays.lvar_t.has_user_info(self) -> bool Has any user-defined information? -ida_hexrays.lvar_t.has_user_name (method) - has_user_name(self) -> bool +ida_hexrays.lvar_t.has_user_name(self) -> bool Has user-defined name? -ida_hexrays.lvar_t.has_user_type (method) - has_user_type(self) -> bool +ida_hexrays.lvar_t.has_user_type(self) -> bool Has user-defined type? -ida_hexrays.lvar_t.in_asm (method) - in_asm(self) -> bool +ida_hexrays.lvar_t.in_asm(self) -> bool Is variable used in an instruction translated into __asm? -ida_hexrays.lvar_t.is_aliasable (method) - is_aliasable(self, mba) -> bool - Is the variable aliasable? - - @param mba: (C++: const mba_t *) ptr to the current mba_t Aliasable variables may be modified - indirectly (through a pointer) +ida_hexrays.lvar_t.is_aliasable(self, mba: "mba_t") -> bool + Is the variable aliasable? + + @param mba: ptr to the current mba_t Aliasable variables may be modified indirectly (through a pointer) -ida_hexrays.lvar_t.is_arg_var (method) - is_arg_var(self) -> bool +ida_hexrays.lvar_t.is_arg_var(self) -> bool Is the function argument? -ida_hexrays.lvar_t.is_automapped (method) - is_automapped(self) -> bool +ida_hexrays.lvar_t.is_automapped(self) -> bool Was the variable automatically mapped to another variable? -ida_hexrays.lvar_t.is_decl_unused (method) - is_decl_unused(self) -> bool +ida_hexrays.lvar_t.is_decl_unused(self) -> bool Was declared as __unused by the user? See CVAR_UNUSED. -ida_hexrays.lvar_t.is_dummy_arg (method) - is_dummy_arg(self) -> bool +ida_hexrays.lvar_t.is_dummy_arg(self) -> bool Is a dummy argument (added to fill a hole in the argument list) -ida_hexrays.lvar_t.is_fake_var (method) - is_fake_var(self) -> bool +ida_hexrays.lvar_t.is_fake_var(self) -> bool Is fake return variable? -ida_hexrays.lvar_t.is_floating_var (method) - is_floating_var(self) -> bool +ida_hexrays.lvar_t.is_floating_var(self) -> bool Used by a fpu insn? -ida_hexrays.lvar_t.is_mapdst_var (method) - is_mapdst_var(self) -> bool +ida_hexrays.lvar_t.is_mapdst_var(self) -> bool Other variable(s) map to this var? -ida_hexrays.lvar_t.is_noptr_var (method) - is_noptr_var(self) -> bool +ida_hexrays.lvar_t.is_noptr_var(self) -> bool Variable type should not be a pointer. -ida_hexrays.lvar_t.is_notarg (method) - is_notarg(self) -> bool +ida_hexrays.lvar_t.is_notarg(self) -> bool Is a local variable? (local variable cannot be an input argument) -ida_hexrays.lvar_t.is_overlapped_var (method) - is_overlapped_var(self) -> bool +ida_hexrays.lvar_t.is_overlapped_var(self) -> bool Is overlapped variable? -ida_hexrays.lvar_t.is_result_var (method) - is_result_var(self) -> bool +ida_hexrays.lvar_t.is_result_var(self) -> bool Is the function result? -ida_hexrays.lvar_t.is_shared (method) - is_shared(self) -> bool +ida_hexrays.lvar_t.is_shared(self) -> bool Is lvar mapped to several chains. -ida_hexrays.lvar_t.is_split_var (method) - is_split_var(self) -> bool +ida_hexrays.lvar_t.is_split_var(self) -> bool Is a split variable? -ida_hexrays.lvar_t.is_spoiled_var (method) - is_spoiled_var(self) -> bool +ida_hexrays.lvar_t.is_spoiled_var(self) -> bool Is spoiled var? (meaningful only during lvar allocation) -ida_hexrays.lvar_t.is_thisarg (method) - is_thisarg(self) -> bool +ida_hexrays.lvar_t.is_thisarg(self) -> bool Is 'this' argument of a C++ member function? -ida_hexrays.lvar_t.is_unknown_width (method) - is_unknown_width(self) -> bool +ida_hexrays.lvar_t.is_unknown_width(self) -> bool Do we know the width of the variable? -ida_hexrays.lvar_t.is_used_byref (method) - is_used_byref(self) -> bool +ida_hexrays.lvar_t.is_used_byref(self) -> bool Was the address of the variable taken? -ida_hexrays.lvar_t.mreg_done (method) - mreg_done(self) -> bool +ida_hexrays.lvar_t.mreg_done(self) -> bool Have corresponding microregs been replaced by references to this variable? -ida_hexrays.lvar_t.name (variable) - variable name. use mba_t::set_nice_lvar_name() and mba_t::set_user_lvar_name() - to modify it +ida_hexrays.lvar_t.name + variable name. use mba_t::set_nice_lvar_name() and mba_t::set_user_lvar_name() to modify it + -ida_hexrays.lvar_t.set_arg_var (method) - set_arg_var(self) +ida_hexrays.lvar_t.set_arg_var(self) -> None -ida_hexrays.lvar_t.set_automapped (method) - set_automapped(self) +ida_hexrays.lvar_t.set_automapped(self) -> None -ida_hexrays.lvar_t.set_decl_unused (method) - set_decl_unused(self) +ida_hexrays.lvar_t.set_decl_unused(self) -> None -ida_hexrays.lvar_t.set_dummy_arg (method) - set_dummy_arg(self) +ida_hexrays.lvar_t.set_dummy_arg(self) -> None -ida_hexrays.lvar_t.set_fake_var (method) - set_fake_var(self) +ida_hexrays.lvar_t.set_fake_var(self) -> None -ida_hexrays.lvar_t.set_final_lvar_type (method) - set_final_lvar_type(self, t) +ida_hexrays.lvar_t.set_final_lvar_type(self, t: "tinfo_t") -> None Set final variable type. - - @param t: (C++: const tinfo_t &) tinfo_t const & -ida_hexrays.lvar_t.set_floating_var (method) - set_floating_var(self) +ida_hexrays.lvar_t.set_floating_var(self) -> None -ida_hexrays.lvar_t.set_lvar_type (method) - set_lvar_type(self, t, may_fail=False) -> bool - Set variable type Note: this function does not modify the idb, only the lvar - instance in the memory. For permanent changes see modify_user_lvars() Also, the - variable type is not considered as final by the decompiler and may be modified - later by the type derivation. In some cases set_final_var_type() may work - better, but it does not do persistent changes to the database neither. - - @param t: (C++: const tinfo_t &) new type - @param may_fail: (C++: bool) if false and type is bad, interr - @return: success +ida_hexrays.lvar_t.set_lvar_type(self, t: "tinfo_t", may_fail: bool = False) -> bool + Set variable type Note: this function does not modify the idb, only the lvar instance in the memory. For permanent changes see modify_user_lvars() Also, the variable type is not considered as final by the decompiler and may be modified later by the type derivation. In some cases set_final_var_type() may work better, but it does not do persistent changes to the database neither. + + @param t: new type + @param may_fail: if false and type is bad, interr + @returns success -ida_hexrays.lvar_t.set_mapdst_var (method) - set_mapdst_var(self) +ida_hexrays.lvar_t.set_mapdst_var(self) -> None -ida_hexrays.lvar_t.set_mreg_done (method) - set_mreg_done(self) +ida_hexrays.lvar_t.set_mreg_done(self) -> None -ida_hexrays.lvar_t.set_non_typed (method) - set_non_typed(self) +ida_hexrays.lvar_t.set_non_typed(self) -> None -ida_hexrays.lvar_t.set_noptr_var (method) - set_noptr_var(self) +ida_hexrays.lvar_t.set_noptr_var(self) -> None -ida_hexrays.lvar_t.set_notarg (method) - set_notarg(self) +ida_hexrays.lvar_t.set_notarg(self) -> None -ida_hexrays.lvar_t.set_overlapped_var (method) - set_overlapped_var(self) +ida_hexrays.lvar_t.set_overlapped_var(self) -> None -ida_hexrays.lvar_t.set_shared (method) - set_shared(self) +ida_hexrays.lvar_t.set_scattered_arg(self) -> None -ida_hexrays.lvar_t.set_split_var (method) - set_split_var(self) +ida_hexrays.lvar_t.set_shared(self) -> None -ida_hexrays.lvar_t.set_spoiled_var (method) - set_spoiled_var(self) +ida_hexrays.lvar_t.set_split_var(self) -> None -ida_hexrays.lvar_t.set_thisarg (method) - set_thisarg(self) +ida_hexrays.lvar_t.set_spoiled_var(self) -> None -ida_hexrays.lvar_t.set_typed (method) - set_typed(self) +ida_hexrays.lvar_t.set_thisarg(self) -> None -ida_hexrays.lvar_t.set_unknown_width (method) - set_unknown_width(self) +ida_hexrays.lvar_t.set_typed(self) -> None -ida_hexrays.lvar_t.set_used (method) - set_used(self) +ida_hexrays.lvar_t.set_unknown_width(self) -> None -ida_hexrays.lvar_t.set_used_byref (method) - set_used_byref(self) +ida_hexrays.lvar_t.set_used(self) -> None -ida_hexrays.lvar_t.set_user_name (method) - set_user_name(self) +ida_hexrays.lvar_t.set_used_byref(self) -> None -ida_hexrays.lvar_t.set_user_type (method) - set_user_type(self) +ida_hexrays.lvar_t.set_user_name(self) -> None -ida_hexrays.lvar_t.set_width (method) - set_width(self, w, svw_flags=0) -> bool - Change the variable width. We call the variable size 'width', it is represents - the number of bytes. This function may change the variable type using - set_lvar_type(). - - @param w: (C++: int) new width - @param svw_flags: (C++: int) combination of SVW_... bits - @return: success +ida_hexrays.lvar_t.set_user_type(self) -> None -ida_hexrays.lvar_t.tif (variable) +ida_hexrays.lvar_t.set_width(self, w: int, svw_flags: int = 0) -> bool + Change the variable width. We call the variable size 'width', it is represents the number of bytes. This function may change the variable type using set_lvar_type(). + + @param w: new width + @param svw_flags: combination of SVW_... bits + @returns success + +ida_hexrays.lvar_t.tif variable type -ida_hexrays.lvar_t.type (method) - type(self) -> tinfo_t +ida_hexrays.lvar_t.type(self) -> "tinfo_t &" + Get variable type. -ida_hexrays.lvar_t.typed (method) - typed(self) -> bool +ida_hexrays.lvar_t.typed(self) -> bool Has the variable a type? -ida_hexrays.lvar_t.used (method) - used(self) -> bool +ida_hexrays.lvar_t.used(self) -> bool Is the variable used in the code? -ida_hexrays.lvar_t.width (variable) +ida_hexrays.lvar_t.was_scattered_arg(self) -> bool + Was lvar transformed from a scattered argument? + +ida_hexrays.lvar_t.width variable size in bytes -ida_hexrays.lvar_uservec_t (class) - Proxy of C++ lvar_uservec_t class. +ida_hexrays.lvar_uservec_t -ida_hexrays.lvar_uservec_t.__init__ (method) - __init__(self) -> lvar_uservec_t +ida_hexrays.lvar_uservec_t.__init__(self) -ida_hexrays.lvar_uservec_t.clear (method) - clear(self) +ida_hexrays.lvar_uservec_t.clear(self) -> None -ida_hexrays.lvar_uservec_t.empty (method) - empty(self) -> bool +ida_hexrays.lvar_uservec_t.empty(self) -> bool -ida_hexrays.lvar_uservec_t.find_info (method) - find_info(self, vloc) -> lvar_saved_info_t +ida_hexrays.lvar_uservec_t.find_info(self, vloc: "lvar_locator_t") -> "lvar_saved_info_t *" find saved user settings for given var - - @param vloc: (C++: const lvar_locator_t &) lvar_locator_t const & -ida_hexrays.lvar_uservec_t.keep_info (method) - keep_info(self, v) +ida_hexrays.lvar_uservec_t.keep_info(self, v: "lvar_t") -> None Preserve user settings for given var. - - @param v: (C++: const lvar_t &) lvar_t const & -ida_hexrays.lvar_uservec_t.lmaps (variable) +ida_hexrays.lvar_uservec_t.lmaps Local variable mapping (used for merging variables) -ida_hexrays.lvar_uservec_t.lvvec (variable) - User-specified names, types, comments for lvars. Variables without user- - specified info are not present in this vector. +ida_hexrays.lvar_uservec_t.lvvec + User-specified names, types, comments for lvars. Variables without user-specified info are not present in this vector. + -ida_hexrays.lvar_uservec_t.stkoff_delta (variable) - Delta to add to IDA stack offset to calculate Hex-Rays stack offsets. Should be - set by the caller before calling save_user_lvar_settings(); +ida_hexrays.lvar_uservec_t.stkoff_delta + Delta to add to IDA stack offset to calculate Hex-Rays stack offsets. Should be set by the caller before calling save_user_lvar_settings(); + -ida_hexrays.lvar_uservec_t.swap (method) - swap(self, r) - - @param r: lvar_uservec_t & +ida_hexrays.lvar_uservec_t.swap(self, r: "lvar_uservec_t") -> None -ida_hexrays.lvar_uservec_t.ulv_flags (variable) +ida_hexrays.lvar_uservec_t.ulv_flags Various flags. Possible values are from lvar_uservec_t property bits. -ida_hexrays.lvars_t (class) - Proxy of C++ lvars_t class. +ida_hexrays.lvars_t -ida_hexrays.lvars_t.__init__ (method) - __init__(self) -> lvars_t +ida_hexrays.lvars_t.__init__(self) -ida_hexrays.lvars_t.find (method) - find(self, ll) -> lvar_t - Find variable at the specified location. - - @param ll: (C++: const lvar_locator_t &) variable location - @return: pointer to variable or nullptr +ida_hexrays.lvars_t.find(self, ll: "lvar_locator_t") -> "lvar_t *" + Find a variable at the specified location. + + @param ll: variable location + @returns pointer to variable or nullptr -ida_hexrays.lvars_t.find_input_lvar (method) - find_input_lvar(self, argloc, _size) -> int - Find input variable at the specified location. - - @param argloc: (C++: const vdloc_t &) variable location - @param _size: (C++: int) variable size - @return: -1 if failed, otherwise the index into the variables vector. +ida_hexrays.lvars_t.find_input_lvar(self, argloc: "vdloc_t", _size: int) -> int + Find an input variable at the specified location. + + @param argloc: variable location + @param _size: variable size in bytes + @returns -1 if failed, otherwise an index into 'vars' -ida_hexrays.lvars_t.find_lvar (method) - find_lvar(self, location, width, defblk=-1) -> int - Find variable at the specified location. - - @param location: (C++: const vdloc_t &) variable location - @param width: (C++: int) variable size - @param defblk: (C++: int) definition block of the lvar. -1 means any block - @return: -1 if failed, otherwise the index into the variables vector. +ida_hexrays.lvars_t.find_input_reg(self, reg: int, _size: int = 1) -> int + Find an input register variable. + + @param reg: register to find + @param _size: variable size in bytes + @returns -1 if failed, otherwise an index into 'vars' -ida_hexrays.lvars_t.find_stkvar (method) - find_stkvar(self, spoff, width) -> int - Find stack variable at the specified location. - - @param spoff: (C++: sval_t) offset from the minimal sp - @param width: (C++: int) variable size - @return: -1 if failed, otherwise the index into the variables vector. +ida_hexrays.lvars_t.find_lvar(self, location: "vdloc_t", width: int, defblk: int = -1) -> int + Find a variable at the specified location. + + @param location: variable location + @param width: variable size in bytes + @param defblk: definition block of the lvar. -1 means any block + @returns -1 if failed, otherwise an index into 'vars' -ida_hexrays.lxe_lvar_cmt_changed (variable) - Local variable comment got changed. +ida_hexrays.lvars_t.find_stkvar(self, spoff: int, width: int) -> int + Find a stack variable at the specified location. + + @param spoff: offset from the minimal sp + @param width: variable size in bytes + @returns -1 if failed, otherwise an index into 'vars' -ida_hexrays.lxe_lvar_mapping_changed (variable) - Local variable mapping got changed. +ida_hexrays.lxe_lvar_cmt_changed + Local variable comment got changed. + -ida_hexrays.lxe_lvar_name_changed (variable) - Local variable got renamed. +ida_hexrays.lxe_lvar_mapping_changed + Local variable mapping got changed. + -ida_hexrays.lxe_lvar_type_changed (variable) - Local variable type got changed. +ida_hexrays.lxe_lvar_name_changed + Local variable got renamed. + -ida_hexrays.make_num (function) - Create a number expression +ida_hexrays.lxe_lvar_type_changed + Local variable type got changed. + -ida_hexrays.make_pointer (function) - make_pointer(type) -> tinfo_t - Create a pointer type. This function performs the following conversion: "type" - -> "type*" - - @param type: (C++: const tinfo_t &) object type. - @return: "type*". for example, if 'char' is passed as the argument, +ida_hexrays.make_num(*args) + Create a number expression + + @param n: value + @param func: current function + @param ea: definition address of the number + @param opnum: operand number of the number (in the disassembly listing) + @param sign: number sign + @param size: size of number in bytes Please note that the type of the resulting expression can be anything because it can be inherited from the disassembly listing or taken from the user specified number representation in the pseudocode view. -ida_hexrays.make_ref (function) - Create a reference. This function performs the following conversion: "obj" => - "&obj". It can handle casts, annihilate "&*", and process other special cases. +ida_hexrays.make_pointer(type: "tinfo_t") -> "tinfo_t" + Create a pointer type. This function performs the following conversion: "type" -> "type*" + + @param type: object type. + @returns "type*". for example, if 'char' is passed as the argument, -ida_hexrays.mark_cfunc_dirty (function) - mark_cfunc_dirty(ea, close_views=False) -> bool - Flush the cached decompilation results. Erases a cache entry for the specified - function. - - @param ea: (C++: ea_t) function to erase from the cache - @param close_views: (C++: bool) close pseudocode windows that show the function - @return: if a cache entry existed. +ida_hexrays.make_ref(e) + Create a reference. This function performs the following conversion: "obj" => "&obj". It can handle casts, annihilate "&*", and process other special cases. + -ida_hexrays.mba_range_iterator_t (class) - Proxy of C++ mba_range_iterator_t class. +ida_hexrays.mark_cfunc_dirty(ea: ida_idaapi.ea_t, close_views: bool = False) -> bool + Flush the cached decompilation results. Erases a cache entry for the specified function. + + @param ea: function to erase from the cache + @param close_views: close pseudocode windows that show the function + @returns if a cache entry existed. -ida_hexrays.mba_range_iterator_t.__init__ (method) - __init__(self) -> mba_range_iterator_t +ida_hexrays.max_vlr_svalue(size: int) -> "uvlr_t" -ida_hexrays.mba_range_iterator_t.chunk (method) - chunk(self) -> range_t +ida_hexrays.max_vlr_value(size: int) -> "uvlr_t" -ida_hexrays.mba_range_iterator_t.is_snippet (method) - is_snippet(self) -> bool +ida_hexrays.mba_range_iterator_t -ida_hexrays.mba_range_iterator_t.next (method) - next(self) -> bool +ida_hexrays.mba_range_iterator_t.__init__(self) -ida_hexrays.mba_range_iterator_t.set (method) - set(self, mbr) -> bool - - @param mbr: mba_ranges_t const & +ida_hexrays.mba_range_iterator_t.chunk(self) -> "range_t const &" -ida_hexrays.mba_ranges_t (class) - Proxy of C++ mba_ranges_t class. +ida_hexrays.mba_range_iterator_t.is_snippet(self) -> bool -ida_hexrays.mba_ranges_t.__init__ (method) - __init__(self, _pfn=None) -> mba_ranges_t - - @param _pfn: func_t * - - __init__(self, r) -> mba_ranges_t - - @param r: rangevec_t const & +ida_hexrays.mba_range_iterator_t.next(self) -> bool -ida_hexrays.mba_ranges_t.clear (method) - clear(self) +ida_hexrays.mba_range_iterator_t.set(self, mbr: "mba_ranges_t") -> bool -ida_hexrays.mba_ranges_t.empty (method) - empty(self) -> bool +ida_hexrays.mba_ranges_t -ida_hexrays.mba_ranges_t.is_fragmented (method) - is_fragmented(self) -> bool +ida_hexrays.mba_ranges_t.__init__(self, *args) -ida_hexrays.mba_ranges_t.is_snippet (method) - is_snippet(self) -> bool +ida_hexrays.mba_ranges_t.clear(self) -> None -ida_hexrays.mba_ranges_t.pfn (variable) +ida_hexrays.mba_ranges_t.empty(self) -> bool + +ida_hexrays.mba_ranges_t.is_fragmented(self) -> bool + +ida_hexrays.mba_ranges_t.is_snippet(self) -> bool + +ida_hexrays.mba_ranges_t.pfn function to decompile. if not null, then function mode. -ida_hexrays.mba_ranges_t.ranges (variable) - snippet mode: ranges to decompile. function mode: list of outlined ranges +ida_hexrays.mba_ranges_t.ranges + snippet mode: ranges to decompile. function mode: list of outlined ranges + -ida_hexrays.mba_ranges_t.start (method) - start(self) -> ea_t +ida_hexrays.mba_ranges_t.start(self) -> ida_idaapi.ea_t -ida_hexrays.mba_t (class) +ida_hexrays.mba_t Deprecated. Please do not use. -ida_hexrays.mba_t.__init__ (method) +ida_hexrays.mba_t.__init__(self, *args, **kwargs) -ida_hexrays.mba_t._deregister (method) - _deregister(self) +ida_hexrays.mba_t._deregister(self) -> None -ida_hexrays.mba_t._print (method) - _print(self, vp) - - Parameters - ---------- - vp: vd_printer_t & +ida_hexrays.mba_t._print(self, vp: "vd_printer_t") -> None -ida_hexrays.mba_t._register (method) - _register(self) +ida_hexrays.mba_t._register(self) -> None -ida_hexrays.mba_t.aliased_args (variable) - Aliased stkarg locations. - -ida_hexrays.mba_t.aliased_memory (variable) +ida_hexrays.mba_t.aliased_memory aliased_memory+restricted_memory=ALLMEM -ida_hexrays.mba_t.aliased_vars (variable) - Aliased stkvar locations. - -ida_hexrays.mba_t.alloc_fict_ea (method) - alloc_fict_ea(self, real_ea) -> ea_t - Allocate a fictional address. This function can be used to allocate a new unique - address for a new instruction, if re-using any existing address leads to - conflicts. For example, if the last instruction of the function modifies R0 and - falls through to the next function, it will be a tail call: LDM R0!, {R4,R7} end - of the function start of another function In this case R0 generates two - different lvars at the same address: +ida_hexrays.mba_t.alloc_fict_ea(self, real_ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Allocate a fictional address. This function can be used to allocate a new unique address for a new instruction, if re-using any existing address leads to conflicts. For example, if the last instruction of the function modifies R0 and falls through to the next function, it will be a tail call: LDM R0!, {R4,R7} end of the function start of another function In this case R0 generates two different lvars at the same address: * one modified by LDM - * another that represents the return value from the tail call Another example: a - third-party plugin makes a copy of an instruction. This may lead to the - generation of two variables at the same address. Example 3: fictional addresses - can be used for new instructions created while modifying the microcode. This - function can be used to allocate a new unique address for a new instruction or a - variable. The fictional address is selected from an unallocated address range. + * another that represents the return value from the tail call - @param real_ea: (C++: ea_t) real instruction address (BADADDR is ok too) - @return: a unique fictional address - -ida_hexrays.mba_t.alloc_kreg (method) - alloc_kreg(self, size, check_size=True) -> mreg_t - Allocate a kernel register. - @param size: (C++: size_t) size of the register in bytes - @param check_size: (C++: bool) if true, only the sizes that correspond to a size of a basic - type will be accepted. - @return: allocated register. mr_none means failure. + Another example: a third-party plugin makes a copy of an instruction. This may lead to the generation of two variables at the same address. Example 3: fictional addresses can be used for new instructions created while modifying the microcode. This function can be used to allocate a new unique address for a new instruction or a variable. The fictional address is selected from an unallocated address range. + + @param real_ea: real instruction address (BADADDR is ok too) + @returns a unique fictional address -ida_hexrays.mba_t.alloc_lvars (method) - alloc_lvars(self) - Allocate local variables. Must be called only immediately after - optimize_global(), with no modifications to the microcode. Converts registers, - stack variables, and similar operands into mop_l. This call will not fail - because all necessary checks were performed in optimize_global(). After this - call the microcode reaches its final state. +ida_hexrays.mba_t.alloc_kreg(self, size: "size_t", check_size: bool = True) -> "mreg_t" + Allocate a kernel register. + + @param size: size of the register in bytes + @param check_size: if true, only the sizes that correspond to a size of a basic type will be accepted. + @returns allocated register. mr_none means failure. -ida_hexrays.mba_t.analyze_calls (method) - analyze_calls(self, acflags) -> int - Analyze calls and determine calling conventions. - - @param acflags: (C++: int) permitted actions that are necessary for successful detection of - calling conventions. See Bits for analyze_calls() - @return: number of calls. -1 means error. +ida_hexrays.mba_t.alloc_lvars(self) -> None + Allocate local variables. Must be called only immediately after optimize_global(), with no modifications to the microcode. Converts registers, stack variables, and similar operands into mop_l. This call will not fail because all necessary checks were performed in optimize_global(). After this call the microcode reaches its final state. + -ida_hexrays.mba_t.arg (method) - arg(self, n) -> lvar_t - - @param n: int +ida_hexrays.mba_t.analyze_calls(self, acflags: int) -> int + Analyze calls and determine calling conventions. + + @param acflags: permitted actions that are necessary for successful detection of calling conventions. See Bits for analyze_calls() + @returns number of calls. -1 means error. -ida_hexrays.mba_t.argbase (method) - argbase(self) -> sval_t +ida_hexrays.mba_t.arg(self, n: int) -> "lvar_t &" + Get input argument of the decompiled function. + + @param n: argument number (0..nargs-1) -ida_hexrays.mba_t.argidx (variable) +ida_hexrays.mba_t.argbase(self) -> int + +ida_hexrays.mba_t.argidx input arguments (indexes into 'vars') -ida_hexrays.mba_t.argidx_ok (method) - argidx_ok(self) -> bool +ida_hexrays.mba_t.argidx_ok(self) -> bool -ida_hexrays.mba_t.argidx_sorted (method) - argidx_sorted(self) -> bool +ida_hexrays.mba_t.argidx_sorted(self) -> bool -ida_hexrays.mba_t.bad_call_sp_detected (method) - bad_call_sp_detected(self) -> bool +ida_hexrays.mba_t.bad_call_sp_detected(self) -> bool -ida_hexrays.mba_t.blocks (variable) +ida_hexrays.mba_t.blocks double linked list of blocks -ida_hexrays.mba_t.build_graph (method) - build_graph(self) -> merror_t - Build control flow graph. This function may be called only once. It calculates - the type of each basic block and the adjacency list. optimize_local() calls this - function if necessary. You need to call this function only before MMAT_LOCOPT. - - @return: error code +ida_hexrays.mba_t.build_graph(self) -> "merror_t" + Build control flow graph. This function may be called only once. It calculates the type of each basic block and the adjacency list. optimize_local() calls this function if necessary. You need to call this function only before MMAT_LOCOPT. + + @returns error code -ida_hexrays.mba_t.calc_shins_flags (method) - calc_shins_flags(self) -> int +ida_hexrays.mba_t.calc_shins_flags(self) -> int -ida_hexrays.mba_t.callinfo_built (method) - callinfo_built(self) -> bool +ida_hexrays.mba_t.callinfo_built(self) -> bool -ida_hexrays.mba_t.cc (variable) +ida_hexrays.mba_t.cc calling convention -ida_hexrays.mba_t.chain_varnums_ok (method) - chain_varnums_ok(self) -> bool +ida_hexrays.mba_t.chain_varnums_ok(self) -> bool -ida_hexrays.mba_t.clr_cdtr (method) - clr_cdtr(self) +ida_hexrays.mba_t.clr_cdtr(self) -> None -ida_hexrays.mba_t.clr_mba_flags (method) - clr_mba_flags(self, f) - - @param f: int +ida_hexrays.mba_t.clr_mba_flags(self, f: int) -> None -ida_hexrays.mba_t.clr_mba_flags2 (method) - clr_mba_flags2(self, f) - - @param f: int +ida_hexrays.mba_t.clr_mba_flags2(self, f: int) -> None -ida_hexrays.mba_t.code16_bit_removed (method) - code16_bit_removed(self) -> bool +ida_hexrays.mba_t.code16_bit_removed(self) -> bool -ida_hexrays.mba_t.combine_blocks (method) - combine_blocks(self) -> bool - Combine blocks. This function merges blocks constituting linear flow. It calls - remove_empty_and_unreachable_blocks() as well. - - @return: true if changed any blocks +ida_hexrays.mba_t.common_stkvars_stkargs(self) -> bool -ida_hexrays.mba_t.common_stkvars_stkargs (method) - common_stkvars_stkargs(self) -> bool - -ida_hexrays.mba_t.consumed_argregs (variable) +ida_hexrays.mba_t.consumed_argregs registers converted into stack arguments, should not be used as arguments -ida_hexrays.mba_t.copy_block (method) - copy_block(self, blk, new_serial, cpblk_flags=3) -> mblock_t - Make a copy of a block. This function makes a simple copy of the block. It does - not fix the predecessor and successor lists, they must be fixed if necessary. - - @param blk: (C++: mblock_t *) block to copy - @param new_serial: (C++: int) position of the copied block - @param cpblk_flags: (C++: int) combination of Batch decompilation bits... bits - @return: pointer to the new copy +ida_hexrays.mba_t.copy_block(self, blk: "mblock_t", new_serial: int, cpblk_flags: int = 3) -> "mblock_t *" + Make a copy of a block. This function makes a simple copy of the block. It does not fix the predecessor and successor lists, they must be fixed if necessary. + + @param blk: block to copy + @param new_serial: position of the copied block + @param cpblk_flags: combination of Batch decompilation bits... bits + @returns pointer to the new copy -ida_hexrays.mba_t.create_helper_call (method) - create_helper_call(self, ea, helper, rettype=None, callargs=None, out=None) -> minsn_t - Create a call of a helper function. - - @param ea: (C++: ea_t) The desired address of the instruction - @param helper: (C++: const char *) The helper name - @param rettype: (C++: const tinfo_t *) The return type (nullptr or empty type means 'void') - @param callargs: (C++: const mcallargs_t *) The helper arguments (nullptr-no arguments) - @param out: (C++: const mop_t *) The operand where the call result should be stored. If this argument - is not nullptr, "mov helper_call(), out" will be generated. - Otherwise "call helper()" will be generated. Note: the size of this - operand must be equal to the RETTYPE size - @return: pointer to the created instruction or nullptr if error +ida_hexrays.mba_t.create_helper_call(self, ea: ida_idaapi.ea_t, helper: str, rettype: "tinfo_t" = None, callargs: "mcallargs_t" = None, out: "mop_t" = None) -> "minsn_t *" + Create a call of a helper function. + + @param ea: The desired address of the instruction + @param helper: The helper name + @param rettype: The return type (nullptr or empty type means 'void') + @param callargs: The helper arguments (nullptr-no arguments) + @param out: The operand where the call result should be stored. If this argument is not nullptr, "mov helper_call(), out" will be generated. Otherwise "call helper()" will be generated. Note: the size of this operand must be equal to the RETTYPE size + @returns pointer to the created instruction or nullptr if error -ida_hexrays.mba_t.deleted_pairs (method) - deleted_pairs(self) -> bool +ida_hexrays.mba_t.deleted_pairs(self) -> bool -ida_hexrays.mba_t.deprecated_idb_node (variable) - netnode with additional decompiler info. deprecated, do not use it anymore. it - may get stale after undo. +ida_hexrays.mba_t.deserialize(bytes: "uchar const *") -> "mba_t *" + Deserialize a byte sequence into mbl array. + + @param bytes: pointer to the beginning of the byte sequence. + @returns new mbl array -ida_hexrays.mba_t.deserialize (method) - deserialize(bytes) -> mba_t - Deserialize a byte sequence into mbl array. - - @param bytes: (C++: const uchar *) pointer to the beginning of the byte sequence. - @return: new mbl array +ida_hexrays.mba_t.display_numaddrs(self) -> bool -ida_hexrays.mba_t.display_numaddrs (method) - display_numaddrs(self) -> bool +ida_hexrays.mba_t.display_valnums(self) -> bool -ida_hexrays.mba_t.display_valnums (method) - display_valnums(self) -> bool +ida_hexrays.mba_t.dump(self) -> None + Dump microcode to a file. The file will be created in the directory pointed by IDA_DUMPDIR envvar. Dump will be created only if IDA is run under debugger. + -ida_hexrays.mba_t.dump (method) - dump(self) - Dump microcode to a file. The file will be created in the directory pointed by - IDA_DUMPDIR envvar. Dump will be created only if IDA is run under debugger. +ida_hexrays.mba_t.dump_mba(self, _verify: bool, title: str) -> None -ida_hexrays.mba_t.dump_mba (method) - dump_mba(self, _verify, title) - - @param _verify: bool - @param title: char const * - -ida_hexrays.mba_t.error_ea (variable) +ida_hexrays.mba_t.error_ea during microcode generation holds ins.ea -ida_hexrays.mba_t.final_type (variable) +ida_hexrays.mba_t.final_type is the function type final? (specified by the user) -ida_hexrays.mba_t.find_mop (method) - find_mop(self, ctx, ea, is_dest, list) -> mop_t - Find an operand in the microcode. This function tries to find the operand that - matches LIST. Any operand that overlaps with LIST is considered as a match. - - @param ctx: (C++: op_parent_info_t *) context information for the result - @param ea: (C++: ea_t) desired address of the operand. BADADDR means to accept any address. - @param is_dest: (C++: bool) search for destination operand? this argument may be ignored if - the exact match could not be found - @param list: (C++: const mlist_t &) list of locations the correspond to the operand - @return: pointer to the operand or nullptr. +ida_hexrays.mba_t.find_mop(self, ctx: "op_parent_info_t", ea: ida_idaapi.ea_t, is_dest: bool, list: "mlist_t") -> "mop_t *" + Find an operand in the microcode. This function tries to find the operand that matches LIST. Any operand that overlaps with LIST is considered as a match. + + @param ctx: context information for the result + @param ea: desired address of the operand. BADADDR means to accept any address. + @param is_dest: search for destination operand? this argument may be ignored if the exact match could not be found + @param list: list of locations the correspond to the operand + @returns pointer to the operand or nullptr. -ida_hexrays.mba_t.for_all_insns (method) - for_all_insns(self, mv) -> int - Visit all instructions. This function visits all instruction and - subinstructions. - - @param mv: (C++: minsn_visitor_t &) instruction visitor - @return: non-zero value returned by mv.visit_mop() or zero +ida_hexrays.mba_t.for_all_insns(self, mv: "minsn_visitor_t") -> int + Visit all instructions. This function visits all instruction and subinstructions. + + @param mv: instruction visitor + @returns non-zero value returned by mv.visit_mop() or zero -ida_hexrays.mba_t.for_all_ops (method) - for_all_ops(self, mv) -> int - Visit all operands of all instructions. - - @param mv: (C++: mop_visitor_t &) operand visitor - @return: non-zero value returned by mv.visit_mop() or zero +ida_hexrays.mba_t.for_all_ops(self, mv: "mop_visitor_t") -> int + Visit all operands of all instructions. + + @param mv: operand visitor + @returns non-zero value returned by mv.visit_mop() or zero -ida_hexrays.mba_t.for_all_topinsns (method) - for_all_topinsns(self, mv) -> int - Visit all top level instructions. - - @param mv: (C++: minsn_visitor_t &) instruction visitor - @return: non-zero value returned by mv.visit_mop() or zero +ida_hexrays.mba_t.for_all_topinsns(self, mv: "minsn_visitor_t") -> int + Visit all top level instructions. + + @param mv: instruction visitor + @returns non-zero value returned by mv.visit_mop() or zero -ida_hexrays.mba_t.fpd (variable) +ida_hexrays.mba_t.fpd frame pointer delta -ida_hexrays.mba_t.free_kreg (method) - free_kreg(self, reg, size) - Free a kernel register. If wrong arguments are passed, this function will - generate an internal error. - - @param reg: (C++: mreg_t) a previously allocated kernel register - @param size: (C++: size_t) size of the register in bytes +ida_hexrays.mba_t.free_kreg(self, reg: "mreg_t", size: "size_t") -> None + Free a kernel register. If wrong arguments are passed, this function will generate an internal error. + + @param reg: a previously allocated kernel register + @param size: size of the register in bytes -ida_hexrays.mba_t.frregs (variable) +ida_hexrays.mba_t.frregs size of saved registers range in the stack frame -ida_hexrays.mba_t.frsize (variable) +ida_hexrays.mba_t.frsize size of local stkvars range in the stack frame -ida_hexrays.mba_t.fti_flags (variable) +ida_hexrays.mba_t.fti_flags FTI_... constants for the current function. -ida_hexrays.mba_t.fullsize (variable) +ida_hexrays.mba_t.fullsize Full stack size including incoming args. -ida_hexrays.mba_t.generated_asserts (method) - generated_asserts(self) -> bool +ida_hexrays.mba_t.generated_asserts(self) -> bool -ida_hexrays.mba_t.get_args_region (method) - get_args_region(self) -> ivl_t +ida_hexrays.mba_t.get_args_region(self) -> "ivl_t const &" -ida_hexrays.mba_t.get_curfunc (method) - get_curfunc(self) -> func_t * +ida_hexrays.mba_t.get_curfunc(self) -> "func_t *" -ida_hexrays.mba_t.get_func_output_lists (method) - get_func_output_lists(self, return_regs, spoiled, type, call_ea=BADADDR, tail_call=False) - Prepare the lists of registers & memory that are defined/killed by a function - - @param return_regs: (C++: mlist_t *) defined regs to return (eax,edx) - @param spoiled: (C++: mlist_t *) spoiled regs (flags,ecx,mem) - @param type: (C++: const tinfo_t &) the function type - @param call_ea: (C++: ea_t) the call insn address (if known) - @param tail_call: (C++: bool) is it the tail call? +ida_hexrays.mba_t.get_func_output_lists(self, *args) -> None + Prepare the lists of registers & memory that are defined/killed by a function + + @param return_regs: defined regs to return (eax,edx) + @param spoiled: spoiled regs (flags,ecx,mem) + @param type: the function type + @param call_ea: the call insn address (if known) + @param tail_call: is it the tail call? -ida_hexrays.mba_t.get_graph (method) - get_graph(self) -> mbl_graph_t - Get control graph. Call build_graph() if you need the graph before MMAT_LOCOPT. +ida_hexrays.mba_t.get_graph(self) -> "mbl_graph_t *" + Get control graph. Call build_graph() if you need the graph before MMAT_LOCOPT. + -ida_hexrays.mba_t.get_ida_argloc (method) - get_ida_argloc(self, v) -> argloc_t - - @param v: lvar_t const & +ida_hexrays.mba_t.get_ida_argloc(self, v: "lvar_t") -> "argloc_t" -ida_hexrays.mba_t.get_lvars_region (method) - get_lvars_region(self) -> ivl_t +ida_hexrays.mba_t.get_lvars_region(self) -> "ivl_t const &" -ida_hexrays.mba_t.get_mba_flags (method) - get_mba_flags(self) -> int +ida_hexrays.mba_t.get_mba_flags(self) -> int -ida_hexrays.mba_t.get_mba_flags2 (method) - get_mba_flags2(self) -> int +ida_hexrays.mba_t.get_mba_flags2(self) -> int -ida_hexrays.mba_t.get_mblock (method) - get_mblock(self, n) -> mblock_t - - @param n: int +ida_hexrays.mba_t.get_mblock(self, n: "uint") -> "mblock_t *" + Get basic block by its serial number. -ida_hexrays.mba_t.get_shadow_region (method) - get_shadow_region(self) -> ivl_t +ida_hexrays.mba_t.get_shadow_region(self) -> "ivl_t const &" -ida_hexrays.mba_t.get_stack_region (method) - get_stack_region(self) -> ivl_t +ida_hexrays.mba_t.get_stack_region(self) -> "ivl_t" -ida_hexrays.mba_t.get_std_region (method) - get_std_region(self, idx) -> ivl_t - Get information about various memory regions. We map the stack frame to the - global memory, to some unused range. - - @param idx: (C++: memreg_index_t) enum memreg_index_t +ida_hexrays.mba_t.get_std_region(self, idx: "memreg_index_t") -> "ivl_t const &" + Get information about various memory regions. We map the stack frame to the global memory, to some unused range. + -ida_hexrays.mba_t.gotoff_stkvars (variable) +ida_hexrays.mba_t.gotoff_stkvars stkvars that hold .got offsets. considered to be unaliasable -ida_hexrays.mba_t.graph_insns (method) - graph_insns(self) -> bool +ida_hexrays.mba_t.graph_insns(self) -> bool -ida_hexrays.mba_t.has_bad_sp (method) - has_bad_sp(self) -> bool +ida_hexrays.mba_t.has_bad_sp(self) -> bool -ida_hexrays.mba_t.has_outlines (method) - has_outlines(self) -> bool +ida_hexrays.mba_t.has_outlines(self) -> bool -ida_hexrays.mba_t.has_over_chains (method) - has_over_chains(self) -> bool +ida_hexrays.mba_t.has_over_chains(self) -> bool -ida_hexrays.mba_t.has_passregs (method) - has_passregs(self) -> bool +ida_hexrays.mba_t.has_passregs(self) -> bool -ida_hexrays.mba_t.has_stack_retval (method) - has_stack_retval(self) -> bool +ida_hexrays.mba_t.has_stack_retval(self) -> bool -ida_hexrays.mba_t.idaloc2vd (method) - idaloc2vd(self, loc, width) -> vdloc_t - - @param loc: argloc_t const & - @param width: int +ida_hexrays.mba_t.idaloc2vd(self, loc: "argloc_t", width: int) -> "vdloc_t" -ida_hexrays.mba_t.idb_spoiled (variable) +ida_hexrays.mba_t.idb_spoiled MBA_SPLINFO && final_type: info in ida format. -ida_hexrays.mba_t.idb_type (variable) +ida_hexrays.mba_t.idb_type function type as retrieved from the database -ida_hexrays.mba_t.inargoff (variable) - offset of the first stack argument; after fix_scattered_movs() INARGOFF may be - less than STACKSIZE +ida_hexrays.mba_t.inargoff + offset of the first stack argument; after fix_scattered_movs() INARGOFF may be less than STACKSIZE + -ida_hexrays.mba_t.insert_block (method) - insert_block(self, bblk) -> mblock_t - Insert a block in the middle of the mbl array. The very first block of microcode - must be empty, it is the entry block. The very last block of microcode must be - BLT_STOP, it is the exit block. Therefore inserting a new block before the entry - point or after the exit block is not a good idea. - - @param bblk: (C++: int) the new block will be inserted before BBLK - @return: ptr to the new block +ida_hexrays.mba_t.inline_func(self, cdg: "codegen_t", blknum: int, ranges: "mba_ranges_t", decomp_flags: int = 0, inline_flags: int = 0) -> "merror_t" + Inline a range. Currently only functions are supported, not arbitrary ranges. This function may be called only during the initial microcode generation phase. + + @param cdg: the codegenerator object + @param blknum: the block contaning the call/jump instruction to inline + @param ranges: the set of ranges to inline + @param decomp_flags: combination of decompile() flags bits + @param inline_flags: combination of inline_func() flags bits + @returns error code -ida_hexrays.mba_t.is_cdtr (method) - is_cdtr(self) -> bool +ida_hexrays.mba_t.insert_block(self, bblk: int) -> "mblock_t *" + Insert a block in the middle of the mbl array. The very first block of microcode must be empty, it is the entry block. The very last block of microcode must be BLT_STOP, it is the exit block. Therefore inserting a new block before the entry point or after the exit block is not a good idea. + + @param bblk: the new block will be inserted before BBLK + @returns ptr to the new block -ida_hexrays.mba_t.is_ctr (method) - is_ctr(self) -> bool +ida_hexrays.mba_t.is_cdtr(self) -> bool -ida_hexrays.mba_t.is_dtr (method) - is_dtr(self) -> bool +ida_hexrays.mba_t.is_ctr(self) -> bool -ida_hexrays.mba_t.is_pattern (method) - is_pattern(self) -> bool +ida_hexrays.mba_t.is_dtr(self) -> bool -ida_hexrays.mba_t.is_snippet (method) - is_snippet(self) -> bool +ida_hexrays.mba_t.is_pattern(self) -> bool -ida_hexrays.mba_t.is_stkarg (method) - is_stkarg(self, v) -> bool - - @param v: lvar_t const & +ida_hexrays.mba_t.is_snippet(self) -> bool -ida_hexrays.mba_t.is_thunk (method) - is_thunk(self) -> bool +ida_hexrays.mba_t.is_stkarg(self, v: "lvar_t") -> bool -ida_hexrays.mba_t.label (variable) +ida_hexrays.mba_t.is_thunk(self) -> bool + +ida_hexrays.mba_t.label name of the function or pattern (colored) -ida_hexrays.mba_t.loaded_gdl (method) - loaded_gdl(self) -> bool +ida_hexrays.mba_t.loaded_gdl(self) -> bool -ida_hexrays.mba_t.lvar_names_ok (method) - lvar_names_ok(self) -> bool +ida_hexrays.mba_t.locate_stkpnt(self, ea: ida_idaapi.ea_t) -> "stkpnt_t const *" -ida_hexrays.mba_t.lvars_allocated (method) - lvars_allocated(self) -> bool +ida_hexrays.mba_t.lvar_names_ok(self) -> bool -ida_hexrays.mba_t.lvars_renamed (method) - lvars_renamed(self) -> bool +ida_hexrays.mba_t.lvars_allocated(self) -> bool -ida_hexrays.mba_t.map_fict_ea (method) - map_fict_ea(self, fict_ea) -> ea_t - Resolve a fictional address. This function provides a reverse of the mapping - made by alloc_fict_ea(). - - @param fict_ea: (C++: ea_t) fictional definition address - @return: the real instruction address +ida_hexrays.mba_t.lvars_renamed(self) -> bool -ida_hexrays.mba_t.mark_chains_dirty (method) - mark_chains_dirty(self) - Mark the microcode use-def chains dirty. Call this function is any inter-block - data dependencies got changed because of your modifications to the microcode. - Failing to do so may cause an internal error. +ida_hexrays.mba_t.map_fict_ea(self, fict_ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Resolve a fictional address. This function provides a reverse of the mapping made by alloc_fict_ea(). + + @param fict_ea: fictional definition address + @returns the real instruction address -ida_hexrays.mba_t.maturity (variable) +ida_hexrays.mba_t.mark_chains_dirty(self) -> None + Mark the microcode use-def chains dirty. Call this function is any inter-block data dependencies got changed because of your modifications to the microcode. Failing to do so may cause an internal error. + + +ida_hexrays.mba_t.maturity current maturity level -ida_hexrays.mba_t.may_refine_rettype (method) - may_refine_rettype(self) -> bool +ida_hexrays.mba_t.may_refine_rettype(self) -> bool -ida_hexrays.mba_t.minargref (variable) - The lowest stack argument location whose address was taken This location and - locations above it can be aliased It controls locations >= inargoff-shadow_args +ida_hexrays.mba_t.merge_blocks(self) -> bool + Merge blocks. This function merges blocks constituting linear flow. It calls remove_empty_and_unreachable_blocks() as well. + + @returns true if changed any blocks -ida_hexrays.mba_t.minstkref (variable) +ida_hexrays.mba_t.minargref + The lowest stack argument location whose address was taken This location and locations above it can be aliased It controls locations >= inargoff-shadow_args + + +ida_hexrays.mba_t.minstkref The lowest stack location whose address was taken. -ida_hexrays.mba_t.minstkref_ea (variable) +ida_hexrays.mba_t.minstkref_ea address with lowest minstkref (for debugging) -ida_hexrays.mba_t.natural (variable) +ida_hexrays.mba_t.natural natural order of blocks -ida_hexrays.mba_t.nodel_memory (variable) +ida_hexrays.mba_t.nodel_memory global dead elimination may not delete references to this area -ida_hexrays.mba_t.npurged (variable) +ida_hexrays.mba_t.npurged -1 - unknown -ida_hexrays.mba_t.optimize_global (method) - optimize_global(self) -> merror_t - Optimize microcode globally. This function applies various optimization methods - until we reach the fixed point. After that it preallocates lvars unless reqmat - forbids it. - - @return: error code +ida_hexrays.mba_t.optimize_global(self) -> "merror_t" + Optimize microcode globally. This function applies various optimization methods until we reach the fixed point. After that it preallocates lvars unless reqmat forbids it. + + @returns error code -ida_hexrays.mba_t.optimize_local (method) - optimize_local(self, locopt_bits) -> int - Optimize each basic block locally - - @param locopt_bits: (C++: int) combination of Bits for optimize_local() bits - @return: number of changes. 0 means nothing changed This function is called by - the decompiler, usually there is no need to call it explicitly. +ida_hexrays.mba_t.optimize_local(self, locopt_bits: int) -> int + Optimize each basic block locally + + @param locopt_bits: combination of Bits for optimize_local() bits + @returns number of changes. 0 means nothing changed This function is called by the decompiler, usually there is no need to call it explicitly. -ida_hexrays.mba_t.optimized (method) - optimized(self) -> bool +ida_hexrays.mba_t.optimized(self) -> bool -ida_hexrays.mba_t.pfn_flags (variable) +ida_hexrays.mba_t.pfn_flags copy of func_t::flags -ida_hexrays.mba_t.precise_defeas (method) - precise_defeas(self) -> bool +ida_hexrays.mba_t.precise_defeas(self) -> bool -ida_hexrays.mba_t.prop_complex (method) - prop_complex(self) -> bool +ida_hexrays.mba_t.prop_complex(self) -> bool -ida_hexrays.mba_t.propagated_asserts (method) - propagated_asserts(self) -> bool +ida_hexrays.mba_t.propagated_asserts(self) -> bool -ida_hexrays.mba_t.qty (variable) +ida_hexrays.mba_t.qty number of basic blocks -ida_hexrays.mba_t.really_alloc (method) - really_alloc(self) -> bool +ida_hexrays.mba_t.really_alloc(self) -> bool -ida_hexrays.mba_t.regargs_is_not_aligned (method) - regargs_is_not_aligned(self) -> bool +ida_hexrays.mba_t.regargs_is_not_aligned(self) -> bool -ida_hexrays.mba_t.remove_block (method) - remove_block(self, blk) -> bool - Delete a block. - - @param blk: (C++: mblock_t *) block to delete - @return: true if at least one of the other blocks became empty or unreachable +ida_hexrays.mba_t.remove_block(self, blk: "mblock_t") -> bool + Delete a block. + + @param blk: block to delete + @returns true if at least one of the other blocks became empty or unreachable -ida_hexrays.mba_t.remove_empty_and_unreachable_blocks (method) - remove_empty_and_unreachable_blocks(self) -> bool - Delete all empty and unreachable blocks. Blocks marked with MBL_KEEP won't be - deleted. +ida_hexrays.mba_t.remove_blocks(self, start_blk: int, end_blk: int) -> bool -ida_hexrays.mba_t.reqmat (variable) +ida_hexrays.mba_t.remove_empty_and_unreachable_blocks(self) -> bool + Delete all empty and unreachable blocks. Blocks marked with MBL_KEEP won't be deleted. + + +ida_hexrays.mba_t.reqmat required maturity level -ida_hexrays.mba_t.retsize (variable) +ida_hexrays.mba_t.retsize size of return address in the stack frame -ida_hexrays.mba_t.returns_fpval (method) - returns_fpval(self) -> bool +ida_hexrays.mba_t.returns_fpval(self) -> bool -ida_hexrays.mba_t.retvaridx (variable) - index of variable holding the return value -1 means none +ida_hexrays.mba_t.retvaridx + index of variable holding the return value -1 means none + -ida_hexrays.mba_t.rtype_refined (method) - rtype_refined(self) -> bool +ida_hexrays.mba_t.rtype_refined(self) -> bool -ida_hexrays.mba_t.save_snapshot (method) - save_snapshot(self, description) +ida_hexrays.mba_t.save_snapshot(self, description: str) -> None Create and save microcode snapshot. - - @param description: (C++: const char *) char const * -ida_hexrays.mba_t.saverest_done (method) - saverest_done(self) -> bool +ida_hexrays.mba_t.saverest_done(self) -> bool -ida_hexrays.mba_t.serialize (method) - serialize(self) +ida_hexrays.mba_t.serialize(self) -> None Serialize mbl array into a sequence of bytes. -ida_hexrays.mba_t.set_lvar_name (method) - set_lvar_name(self, v, name, flagbits) -> bool - - @param v: lvar_t & - @param name: char const * - @param flagbits: int +ida_hexrays.mba_t.set_lvar_name(self, v: "lvar_t", name: str, flagbits: int) -> bool -ida_hexrays.mba_t.set_maturity (method) - set_maturity(self, mat) -> bool - Set maturity level. - - @param mat: (C++: mba_maturity_t) new maturity level - @return: true if it is time to stop analysis Plugins may use this function to - skip some parts of the analysis. The maturity level cannot be - decreased. +ida_hexrays.mba_t.set_maturity(self, mat: "mba_maturity_t") -> bool + Set maturity level. + + @param mat: new maturity level + @returns true if it is time to stop analysis Plugins may use this function to skip some parts of the analysis. The maturity level cannot be decreased. -ida_hexrays.mba_t.set_mba_flags (method) - set_mba_flags(self, f) - - @param f: int +ida_hexrays.mba_t.set_mba_flags(self, f: int) -> None -ida_hexrays.mba_t.set_mba_flags2 (method) - set_mba_flags2(self, f) - - @param f: int +ida_hexrays.mba_t.set_mba_flags2(self, f: int) -> None -ida_hexrays.mba_t.set_nice_lvar_name (method) - set_nice_lvar_name(self, v, name) -> bool - - @param v: lvar_t & - @param name: char const * +ida_hexrays.mba_t.set_nice_lvar_name(self, v: "lvar_t", name: str) -> bool -ida_hexrays.mba_t.set_user_lvar_name (method) - set_user_lvar_name(self, v, name) -> bool - - @param v: lvar_t & - @param name: char const * +ida_hexrays.mba_t.set_user_lvar_name(self, v: "lvar_t", name: str) -> bool -ida_hexrays.mba_t.shadow_args (variable) +ida_hexrays.mba_t.shadow_args size of shadow argument area -ida_hexrays.mba_t.short_display (method) - short_display(self) -> bool +ida_hexrays.mba_t.short_display(self) -> bool -ida_hexrays.mba_t.should_beautify (method) - should_beautify(self) -> bool +ida_hexrays.mba_t.should_beautify(self) -> bool -ida_hexrays.mba_t.show_reduction (method) - show_reduction(self) -> bool +ida_hexrays.mba_t.show_reduction(self) -> bool -ida_hexrays.mba_t.spd_adjust (variable) +ida_hexrays.mba_t.spd_adjust If sp>0, the max positive sp value. -ida_hexrays.mba_t.spoiled_list (variable) +ida_hexrays.mba_t.split_block(self, blk: "mblock_t", start_insn: "minsn_t") -> "mblock_t *" + Split a block: insert a new one after the block, move some instructions to new block + + @param blk: block to be split + @param start_insn: all instructions to be moved to new block: starting with this one up to the end + @returns ptr to the new block + +ida_hexrays.mba_t.spoiled_list MBA_SPLINFO && !final_type: info in vd format. -ida_hexrays.mba_t.stacksize (variable) - The maximal size of the function stack including bytes allocated for outgoing - call arguments (up to retaddr) +ida_hexrays.mba_t.stacksize + The maximal size of the function stack including bytes allocated for outgoing call arguments (up to retaddr) + -ida_hexrays.mba_t.std_ivls (variable) - we treat memory as consisting of 6 parts see memreg_index_t +ida_hexrays.mba_t.std_ivls + we treat memory as consisting of 6 parts see memreg_index_t + -ida_hexrays.mba_t.stkoff_ida2vd (method) - stkoff_ida2vd(self, off) -> sval_t - - @param off: sval_t +ida_hexrays.mba_t.stkoff_ida2vd(self, off: int) -> int -ida_hexrays.mba_t.stkoff_vd2ida (method) - stkoff_vd2ida(self, off) -> sval_t - - @param off: sval_t +ida_hexrays.mba_t.stkoff_vd2ida(self, off: int) -> int -ida_hexrays.mba_t.term (method) - term(self) +ida_hexrays.mba_t.term(self) -> None -ida_hexrays.mba_t.tmpstk_size (variable) - size of the temporary stack part (which dynamically changes with push/pops) +ida_hexrays.mba_t.tmpstk_size + size of the temporary stack part (which dynamically changes with push/pops) + -ida_hexrays.mba_t.use_frame (method) - use_frame(self) -> bool +ida_hexrays.mba_t.use_frame(self) -> bool -ida_hexrays.mba_t.use_wingraph32 (method) - use_wingraph32(self) -> bool +ida_hexrays.mba_t.use_wingraph32(self) -> bool -ida_hexrays.mba_t.valranges_done (method) - valranges_done(self) -> bool +ida_hexrays.mba_t.valranges_done(self) -> bool -ida_hexrays.mba_t.vars (variable) +ida_hexrays.mba_t.vars local variables -ida_hexrays.mba_t.vd2idaloc (method) - vd2idaloc(self, loc, width, spd) -> argloc_t +ida_hexrays.mba_t.vd2idaloc(self, *args) -> "argloc_t" + This function has the following signatures: - @param loc: vdloc_t const & - @param width: int - @param spd: sval_t + 0. vd2idaloc(loc: const vdloc_t &, width: int) -> argloc_t + 1. vd2idaloc(loc: const vdloc_t &, width: int, spd: int) -> argloc_t - vd2idaloc(self, loc, width) -> argloc_t + # 0: vd2idaloc(loc: const vdloc_t &, width: int) -> argloc_t - @param loc: vdloc_t const & - @param width: int - -ida_hexrays.mba_t.verify (method) - verify(self, always) - Verify microcode consistency. - @param always: (C++: bool) if false, the check will be performed only if ida runs under - debugger If any inconsistency is discovered, an internal error - will be generated. We strongly recommend you to call this - function before returing control to the decompiler from your - callbacks, in the case if you modified the microcode. If the - microcode is inconsistent, this function will generate an - internal error. We provide the source code of this function in - the plugins/hexrays_sdk/verifier directory for your reference. + # 1: vd2idaloc(loc: const vdloc_t &, width: int, spd: int) -> argloc_t -ida_hexrays.mba_t.write_to_const_detected (method) - write_to_const_detected(self) -> bool +ida_hexrays.mba_t.verify(self, always: bool) -> None + Verify microcode consistency. + + @param always: if false, the check will be performed only if ida runs under debugger If any inconsistency is discovered, an internal error will be generated. We strongly recommend you to call this function before returing control to the decompiler from your callbacks, in the case if you modified the microcode. If the microcode is inconsistent, this function will generate an internal error. We provide the source code of this function in the plugins/hexrays_sdk/verifier directory for your reference. -ida_hexrays.mba_t_deserialize (function) - mba_t_deserialize(bytes) -> mba_t - - @param bytes: uchar const * +ida_hexrays.mba_t.write_to_const_detected(self) -> bool -ida_hexrays.mbl_graph_t (class) - Proxy of C++ mbl_graph_t class. +ida_hexrays.mbl_graph_t -ida_hexrays.mbl_graph_t.__init__ (method) +ida_hexrays.mbl_graph_t.__init__(self, *args, **kwargs) -ida_hexrays.mbl_graph_t.get_chain_stamp (method) - get_chain_stamp(self) -> int +ida_hexrays.mbl_graph_t.get_chain_stamp(self) -> int -ida_hexrays.mbl_graph_t.get_du (method) - get_du(self, gctype) -> graph_chains_t +ida_hexrays.mbl_graph_t.get_du(self, gctype: "gctype_t") -> "graph_chains_t *" Get def-use chains. - - @param gctype: (C++: gctype_t) enum gctype_t -ida_hexrays.mbl_graph_t.get_mblock (method) - get_mblock(self, n) -> mblock_t - - @param n: int +ida_hexrays.mbl_graph_t.get_mblock(self, n: int) -> "mblock_t *" -ida_hexrays.mbl_graph_t.get_ud (method) - get_ud(self, gctype) -> graph_chains_t +ida_hexrays.mbl_graph_t.get_ud(self, gctype: "gctype_t") -> "graph_chains_t *" Get use-def chains. - - @param gctype: (C++: gctype_t) enum gctype_t -ida_hexrays.mbl_graph_t.is_du_chain_dirty (method) - is_du_chain_dirty(self, gctype) -> bool +ida_hexrays.mbl_graph_t.is_du_chain_dirty(self, gctype: "gctype_t") -> bool Is the def-use chain of the specified kind dirty? - - @param gctype: (C++: gctype_t) enum gctype_t -ida_hexrays.mbl_graph_t.is_redefined_globally (method) - is_redefined_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool +ida_hexrays.mbl_graph_t.is_redefined_globally(self, *args) -> bool Is LIST redefined in the graph? - - @param list: (C++: const mlist_t &) mlist_t const & - @param b1: (C++: int) - @param b2: (C++: int) - @param m1: (C++: const minsn_t *) minsn_t const * - @param m2: (C++: const minsn_t *) minsn_t const * - @param maymust: (C++: maymust_t) -ida_hexrays.mbl_graph_t.is_ud_chain_dirty (method) - is_ud_chain_dirty(self, gctype) -> bool +ida_hexrays.mbl_graph_t.is_ud_chain_dirty(self, gctype: "gctype_t") -> bool Is the use-def chain of the specified kind dirty? - - @param gctype: (C++: gctype_t) enum gctype_t -ida_hexrays.mbl_graph_t.is_used_globally (method) - is_used_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool +ida_hexrays.mbl_graph_t.is_used_globally(self, *args) -> bool Is LIST used in the graph? - - @param list: (C++: const mlist_t &) mlist_t const & - @param b1: (C++: int) - @param b2: (C++: int) - @param m1: (C++: const minsn_t *) minsn_t const * - @param m2: (C++: const minsn_t *) minsn_t const * - @param maymust: (C++: maymust_t) -ida_hexrays.mblock_t (class) - Proxy of C++ mblock_t class. +ida_hexrays.mblock_t -ida_hexrays.mblock_t.__init__ (method) +ida_hexrays.mblock_t.__init__(self, *args, **kwargs) -ida_hexrays.mblock_t._print (method) - _print(self, vp) - - Parameters - ---------- - vp: vd_printer_t & +ida_hexrays.mblock_t._print(self, vp: "vd_printer_t") -> None -ida_hexrays.mblock_t.append_def_list (method) - append_def_list(self, list, op, maymust) - Append def-list of an operand. This function calculates list of locations that - may or must be modified by the operand and appends it to LIST. - - @param list: (C++: mlist_t *) ptr to the output buffer. we will append to it. - @param op: (C++: const mop_t &) operand to calculate the def list of - @param maymust: (C++: maymust_t) should we calculate 'may-def' or 'must-def' list? see maymust_t - for more details. +ida_hexrays.mblock_t.append_def_list(self, list: "mlist_t", op: "mop_t", maymust: "maymust_t") -> None + Append def-list of an operand. This function calculates list of locations that may or must be modified by the operand and appends it to LIST. + + @param list: ptr to the output buffer. we will append to it. + @param op: operand to calculate the def list of + @param maymust: should we calculate 'may-def' or 'must-def' list? see maymust_t for more details. -ida_hexrays.mblock_t.append_use_list (method) - append_use_list(self, list, op, maymust, mask=bitrange_t(0, USHRT_MAX)) - Append use-list of an operand. This function calculates list of locations that - may or must be used by the operand and appends it to LIST. - - @param list: (C++: mlist_t *) ptr to the output buffer. we will append to it. - @param op: (C++: const mop_t &) operand to calculate the use list of - @param maymust: (C++: maymust_t) should we calculate 'may-use' or 'must-use' list? see maymust_t - for more details. - @param mask: (C++: bitrange_t) if only part of the operand should be considered, a bitmask can be - used to specify which part. example: op=AX,mask=0xFF means that we - will consider only AL. +ida_hexrays.mblock_t.append_use_list(self, *args) -> None + Append use-list of an operand. This function calculates list of locations that may or must be used by the operand and appends it to LIST. + + @param list: ptr to the output buffer. we will append to it. + @param op: operand to calculate the use list of + @param maymust: should we calculate 'may-use' or 'must-use' list? see maymust_t for more details. + @param mask: if only part of the operand should be considered, a bitmask can be used to specify which part. example: op=AX,mask=0xFF means that we will consider only AL. -ida_hexrays.mblock_t.build_def_list (method) - build_def_list(self, ins, maymust) -> mlist_t - Build def-list of an instruction. This function calculates list of locations - that may or must be modified by the instruction. Examples: "stx ebx.4, ds.2, - eax.4", may-list: all aliasable memory "stx ebx.4, ds.2, eax.4", must-list: - empty Since STX uses EAX for indirect access, it may modify any aliasable - memory. On the other hand, we cannot tell for sure which memory cells will be - modified, this is why the must-list is empty. - - @param ins: (C++: const minsn_t &) instruction to calculate the def list of - @param maymust: (C++: maymust_t) should we calculate 'may-def' or 'must-def' list? see maymust_t - for more details. - @return: the calculated def-list +ida_hexrays.mblock_t.build_def_list(self, ins: "minsn_t", maymust: "maymust_t") -> "mlist_t" + Build def-list of an instruction. This function calculates list of locations that may or must be modified by the instruction. Examples: "stx ebx.4, ds.2, eax.4", may-list: all aliasable memory "stx ebx.4, ds.2, eax.4", must-list: empty Since STX uses EAX for indirect access, it may modify any aliasable memory. On the other hand, we cannot tell for sure which memory cells will be modified, this is why the must-list is empty. + + @param ins: instruction to calculate the def list of + @param maymust: should we calculate 'may-def' or 'must-def' list? see maymust_t for more details. + @returns the calculated def-list -ida_hexrays.mblock_t.build_lists (method) - build_lists(self, kill_deads) -> int - Build def-use lists and eliminate deads. - - @param kill_deads: (C++: bool) do delete dead instructions? - @return: the number of eliminated instructions Better mblock_t::call - make_lists_ready() rather than this function. +ida_hexrays.mblock_t.build_lists(self, kill_deads: bool) -> int + Build def-use lists and eliminate deads. + + @param kill_deads: do delete dead instructions? + @returns the number of eliminated instructions Better mblock_t::call make_lists_ready() rather than this function. -ida_hexrays.mblock_t.build_use_list (method) - build_use_list(self, ins, maymust) -> mlist_t - Build use-list of an instruction. This function calculates list of locations - that may or must be used by the instruction. Examples: "ldx ds.2, eax.4, ebx.4", - may-list: all aliasable memory "ldx ds.2, eax.4, ebx.4", must-list: empty Since - LDX uses EAX for indirect access, it may access any aliasable memory. On the - other hand, we cannot tell for sure which memory cells will be accessed, this is - why the must-list is empty. - - @param ins: (C++: const minsn_t &) instruction to calculate the use list of - @param maymust: (C++: maymust_t) should we calculate 'may-use' or 'must-use' list? see maymust_t - for more details. - @return: the calculated use-list +ida_hexrays.mblock_t.build_use_list(self, ins: "minsn_t", maymust: "maymust_t") -> "mlist_t" + Build use-list of an instruction. This function calculates list of locations that may or must be used by the instruction. Examples: "ldx ds.2, eax.4, ebx.4", may-list: all aliasable memory "ldx ds.2, eax.4, ebx.4", must-list: empty Since LDX uses EAX for indirect access, it may access any aliasable memory. On the other hand, we cannot tell for sure which memory cells will be accessed, this is why the must-list is empty. + + @param ins: instruction to calculate the use list of + @param maymust: should we calculate 'may-use' or 'must-use' list? see maymust_t for more details. + @returns the calculated use-list -ida_hexrays.mblock_t.dead_at_start (variable) +ida_hexrays.mblock_t.dead_at_start data that is dead at the block entry -ida_hexrays.mblock_t.dnu (variable) +ida_hexrays.mblock_t.dnu data that is defined but not used in the block -ida_hexrays.mblock_t.dump (method) - dump(self) - Dump block info. This function is useful for debugging, see mba_t::dump for info +ida_hexrays.mblock_t.dump(self) -> None + Dump block info. This function is useful for debugging, see mba_t::dump for info + -ida_hexrays.mblock_t.dump_block (method) - dump_block(self, title) +ida_hexrays.mblock_t.dump_block(self, title: str) -> None + +ida_hexrays.mblock_t.empty(self) -> bool + +ida_hexrays.mblock_t.end + end address note: we cannot rely on start/end addresses very much because instructions are propagated between blocks + + +ida_hexrays.mblock_t.find_access(self, op: "mop_t", parent: "minsn_t **", mend: "minsn_t", fdflags: int) -> "minsn_t *" + Find the instruction that accesses the specified operand. This function search inside one block. + + @param op: operand to search for + @param parent: ptr to ptr to a top level instruction. in: denotes the beginning of the search range. out: denotes the parent of the found instruction. + @param mend: end instruction of the range (must be a top level insn) mend is excluded from the range. it can be specified as nullptr. parent and mend must belong to the same block. + @param fdflags: combination of bits for mblock_t::find_access bits + @returns the instruction that accesses the operand. this instruction may be a sub-instruction. to find out the top level instruction, check out *parent. nullptr means 'not found'. + +ida_hexrays.mblock_t.find_def(self, op: "mop_t", p_i1: "minsn_t **", i2: "minsn_t", fdflags: int) -> "minsn_t *" + +ida_hexrays.mblock_t.find_first_use(self, *args) -> "minsn_t *" + This function has the following signatures: - @param title: char const * - -ida_hexrays.mblock_t.empty (method) - empty(self) -> bool - -ida_hexrays.mblock_t.end (variable) - end address note: we cannot rely on start/end addresses very much because - instructions are propagated between blocks - -ida_hexrays.mblock_t.find_access (method) - find_access(self, op, parent, mend, fdflags) -> minsn_t - Find the instruction that accesses the specified operand. This function search - inside one block. + 0. find_first_use(list: mlist_t *, i1: const minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> const minsn_t * + 1. find_first_use(list: mlist_t *, i1: minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> minsn_t * - @param op: (C++: const mop_t &) operand to search for - @param parent: (C++: minsn_t **) ptr to ptr to a top level instruction. denotes the beginning of - the search range. - @param mend: (C++: const minsn_t *) end instruction of the range (must be a top level insn) mend is - excluded from the range. it can be specified as nullptr. parent and - mend must belong to the same block. - @param fdflags: (C++: int) combination of bits for mblock_t::find_access bits - @return: the instruction that accesses the operand. this instruction may be a - sub-instruction. to find out the top level instruction, check out - *p_i1. nullptr means 'not found'. - -ida_hexrays.mblock_t.find_def (method) - find_def(self, op, p_i1, i2, fdflags) -> minsn_t + # 0: find_first_use(list: mlist_t *, i1: const minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> const minsn_t * - @param op: mop_t const & - @param p_i1: minsn_t ** - @param i2: minsn_t const * - @param fdflags: int - -ida_hexrays.mblock_t.find_first_use (method) - find_first_use(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t + Find the first insn that uses the specified list in the insn range. + + @returns pointer to such instruction or nullptr. Upon return LIST will contain only locations not redefined by insns [i1..result] - @param list: mlist_t * - @param i1: minsn_t * - @param i2: minsn_t const * - @param maymust: maymust_t + # 1: find_first_use(list: mlist_t *, i1: minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> minsn_t * -ida_hexrays.mblock_t.find_redefinition (method) - find_redefinition(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t +ida_hexrays.mblock_t.find_redefinition(self, *args) -> "minsn_t *" + This function has the following signatures: - @param list: mlist_t const & - @param i1: minsn_t * - @param i2: minsn_t const * - @param maymust: maymust_t - -ida_hexrays.mblock_t.find_use (method) - find_use(self, op, p_i1, i2, fdflags) -> minsn_t + 0. find_redefinition(list: const mlist_t &, i1: const minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> const minsn_t * + 1. find_redefinition(list: const mlist_t &, i1: minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> minsn_t * - @param op: mop_t const & - @param p_i1: minsn_t ** - @param i2: minsn_t const * - @param fdflags: int - -ida_hexrays.mblock_t.flags (variable) - combination of Basic block properties bits - -ida_hexrays.mblock_t.for_all_insns (method) - for_all_insns(self, mv) -> int - Visit all instructions. This function visits subinstructions too. + # 0: find_redefinition(list: const mlist_t &, i1: const minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> const minsn_t * - @param mv: (C++: minsn_visitor_t &) instruction visitor - @return: zero or the value returned by mv.visit_insn() See also - mba_t::for_all_topinsns() - -ida_hexrays.mblock_t.for_all_ops (method) - for_all_ops(self, mv) -> int - Visit all operands. This function visit subinstruction operands too. + Find the first insn that redefines any part of the list in the insn range. + + @returns pointer to such instruction or nullptr. - @param mv: (C++: mop_visitor_t &) operand visitor - @return: zero or the value returned by mv.visit_mop() + # 1: find_redefinition(list: const mlist_t &, i1: minsn_t *, i2: const minsn_t *, maymust: maymust_t=MAY_ACCESS) -> minsn_t * -ida_hexrays.mblock_t.for_all_uses (method) - for_all_uses(self, list, i1, i2, mmv) -> int - Visit all operands that use LIST. - - @param list: (C++: mlist_t *) ptr to the list of locations. it may be modified: parts that get - redefined by the instructions in [i1,i2) will be deleted. - @param i1: (C++: minsn_t *) starting instruction. must be a top level insn. - @param i2: (C++: minsn_t *) ending instruction (excluded). must be a top level insn. - @param mmv: (C++: mlist_mop_visitor_t &) operand visitor - @return: zero or the value returned by mmv.visit_mop() +ida_hexrays.mblock_t.find_use(self, op: "mop_t", p_i1: "minsn_t **", i2: "minsn_t", fdflags: int) -> "minsn_t *" -ida_hexrays.mblock_t.get_reginsn_qty (method) - get_reginsn_qty(self) -> size_t - Calculate number of regular instructions in the block. Assertions are skipped by - this function. - - @return: Number of non-assertion instructions in the block. +ida_hexrays.mblock_t.flags + combination of Basic block properties bits + -ida_hexrays.mblock_t.get_valranges (method) - get_valranges(self, res, vivl, vrflags) -> bool - Find possible values for an instruction. - - @param res: (C++: valrng_t *) set of value ranges - @param vivl: (C++: const vivl_t &) what to search for - @param vrflags: (C++: int) combination of bits for get_valranges bits - get_valranges(self, res, vivl, m, vrflags) -> bool - - @param res: valrng_t * - @param vivl: vivl_t const & - @param m: minsn_t const * - @param vrflags: int +ida_hexrays.mblock_t.for_all_insns(self, mv: "minsn_visitor_t") -> int + Visit all instructions. This function visits subinstructions too. + + @param mv: instruction visitor + @returns zero or the value returned by mv.visit_insn() See also mba_t::for_all_topinsns() -ida_hexrays.mblock_t.head (variable) +ida_hexrays.mblock_t.for_all_ops(self, mv: "mop_visitor_t") -> int + Visit all operands. This function visit subinstruction operands too. + + @param mv: operand visitor + @returns zero or the value returned by mv.visit_mop() + +ida_hexrays.mblock_t.for_all_uses(self, list: "mlist_t", i1: "minsn_t", i2: "minsn_t", mmv: "mlist_mop_visitor_t") -> int + Visit all operands that use LIST. + + @param list: ptr to the list of locations. it may be modified: parts that get redefined by the instructions in [i1,i2) will be deleted. + @param i1: starting instruction. must be a top level insn. + @param i2: ending instruction (excluded). must be a top level insn. + @param mmv: operand visitor + @returns zero or the value returned by mmv.visit_mop() + +ida_hexrays.mblock_t.get_reginsn_qty(self) -> "size_t" + Calculate number of regular instructions in the block. Assertions are skipped by this function. + + @returns Number of non-assertion instructions in the block. + +ida_hexrays.mblock_t.get_valranges(self, *args) -> bool + This function has the following signatures: + + 0. get_valranges(res: valrng_t *, vivl: const vivl_t &, vrflags: int) -> bool + 1. get_valranges(res: valrng_t *, vivl: const vivl_t &, m: const minsn_t *, vrflags: int) -> bool + + # 0: get_valranges(res: valrng_t *, vivl: const vivl_t &, vrflags: int) -> bool + + Find possible values for a block. + + + # 1: get_valranges(res: valrng_t *, vivl: const vivl_t &, m: const minsn_t *, vrflags: int) -> bool + + Find possible values for an instruction. + + +ida_hexrays.mblock_t.head pointer to the first instruction of the block -ida_hexrays.mblock_t.insert_into_block (method) - insert_into_block(self, nm, om) -> minsn_t - Insert instruction into the doubly linked list - - @param nm: (C++: minsn_t *) new instruction - @param om: (C++: minsn_t *) existing instruction, part of the doubly linked list if nullptr, then - the instruction will be inserted at the beginning of the list NM will - be inserted immediately after OM - @return: pointer to NM +ida_hexrays.mblock_t.insert_into_block(self, nm: "minsn_t", om: "minsn_t") -> "minsn_t *" + Insert instruction into the doubly linked list + + @param nm: new instruction + @param om: existing instruction, part of the doubly linked list if nullptr, then the instruction will be inserted at the beginning of the list NM will be inserted immediately after OM + @returns pointer to NM -ida_hexrays.mblock_t.is_branch (method) - is_branch(self) -> bool +ida_hexrays.mblock_t.is_branch(self) -> bool -ida_hexrays.mblock_t.is_call_block (method) - is_call_block(self) -> bool +ida_hexrays.mblock_t.is_call_block(self) -> bool -ida_hexrays.mblock_t.is_nway (method) - is_nway(self) -> bool +ida_hexrays.mblock_t.is_nway(self) -> bool -ida_hexrays.mblock_t.is_redefined (method) - is_redefined(self, list, i1, i2, maymust=MAY_ACCESS) -> bool - Is the list redefined by the specified instructions? - - @param list: (C++: const mlist_t &) list of locations to check. - @param i1: (C++: const minsn_t *) starting instruction of the range (must be a top level insn) - @param i2: (C++: const minsn_t *) end instruction of the range (must be a top level insn) i2 is - excluded from the range. it can be specified as nullptr. i1 and i2 - must belong to the same block. - @param maymust: (C++: maymust_t) should we search in 'may-access' or 'must-access' mode? +ida_hexrays.mblock_t.is_redefined(self, *args) -> bool + Is the list redefined by the specified instructions? + + @param list: list of locations to check. + @param i1: starting instruction of the range (must be a top level insn) + @param i2: end instruction of the range (must be a top level insn) i2 is excluded from the range. it can be specified as nullptr. i1 and i2 must belong to the same block. + @param maymust: should we search in 'may-access' or 'must-access' mode? -ida_hexrays.mblock_t.is_rhs_redefined (method) - is_rhs_redefined(self, ins, i1, i2) -> bool - Is the right hand side of the instruction redefined the insn range? "right hand - side" corresponds to the source operands of the instruction. - - @param ins: (C++: const minsn_t *) instruction to consider - @param i1: (C++: const minsn_t *) starting instruction of the range (must be a top level insn) - @param i2: (C++: const minsn_t *) end instruction of the range (must be a top level insn) i2 is - excluded from the range. it can be specified as nullptr. i1 and i2 - must belong to the same block. +ida_hexrays.mblock_t.is_rhs_redefined(self, ins: "minsn_t", i1: "minsn_t", i2: "minsn_t") -> bool + Is the right hand side of the instruction redefined the insn range? "right hand side" corresponds to the source operands of the instruction. + + @param ins: instruction to consider + @param i1: starting instruction of the range (must be a top level insn) + @param i2: end instruction of the range (must be a top level insn) i2 is excluded from the range. it can be specified as nullptr. i1 and i2 must belong to the same block. -ida_hexrays.mblock_t.is_simple_goto_block (method) - is_simple_goto_block(self) -> bool +ida_hexrays.mblock_t.is_simple_goto_block(self) -> bool -ida_hexrays.mblock_t.is_simple_jcnd_block (method) - is_simple_jcnd_block(self) -> bool +ida_hexrays.mblock_t.is_simple_jcnd_block(self) -> bool -ida_hexrays.mblock_t.is_unknown_call (method) - is_unknown_call(self) -> bool +ida_hexrays.mblock_t.is_unknown_call(self) -> bool -ida_hexrays.mblock_t.is_used (method) - is_used(self, list, i1, i2, maymust=MAY_ACCESS) -> bool - Is the list used by the specified instruction range? - - @param list: (C++: mlist_t *) list of locations. LIST may be modified by the function: redefined - locations will be removed from it. - @param i1: (C++: const minsn_t *) starting instruction of the range (must be a top level insn) - @param i2: (C++: const minsn_t *) end instruction of the range (must be a top level insn) i2 is - excluded from the range. it can be specified as nullptr. i1 and i2 - must belong to the same block. - @param maymust: (C++: maymust_t) should we search in 'may-access' or 'must-access' mode? +ida_hexrays.mblock_t.is_used(self, *args) -> bool + Is the list used by the specified instruction range? + + @param list: list of locations. LIST may be modified by the function: redefined locations will be removed from it. + @param i1: starting instruction of the range (must be a top level insn) + @param i2: end instruction of the range (must be a top level insn) i2 is excluded from the range. it can be specified as nullptr. i1 and i2 must belong to the same block. + @param maymust: should we search in 'may-access' or 'must-access' mode? -ida_hexrays.mblock_t.lists_dirty (method) - lists_dirty(self) -> bool +ida_hexrays.mblock_t.lists_dirty(self) -> bool -ida_hexrays.mblock_t.lists_ready (method) - lists_ready(self) -> bool +ida_hexrays.mblock_t.lists_ready(self) -> bool -ida_hexrays.mblock_t.make_lists_ready (method) - make_lists_ready(self) -> int +ida_hexrays.mblock_t.make_lists_ready(self) -> int -ida_hexrays.mblock_t.make_nop (method) - make_nop(self, m) - Erase the instruction (convert it to nop) and mark the lists dirty. This is the - recommended function to use because it also marks the block use-def lists dirty. - - @param m: (C++: minsn_t *) +ida_hexrays.mblock_t.make_nop(self, m: "minsn_t") -> None + Erase the instruction (convert it to nop) and mark the lists dirty. This is the recommended function to use because it also marks the block use-def lists dirty. + -ida_hexrays.mblock_t.mark_lists_dirty (method) - mark_lists_dirty(self) +ida_hexrays.mblock_t.mark_lists_dirty(self) -> None -ida_hexrays.mblock_t.maxbsp (variable) +ida_hexrays.mblock_t.maxbsp maximal sp value in the block (0...stacksize) -ida_hexrays.mblock_t.maybdef (variable) +ida_hexrays.mblock_t.maybdef data that may be defined by the block -ida_hexrays.mblock_t.maybuse (variable) +ida_hexrays.mblock_t.maybuse data that may be used by the block -ida_hexrays.mblock_t.mba (variable) +ida_hexrays.mblock_t.mba the parent micro block array -ida_hexrays.mblock_t.minbargref (variable) +ida_hexrays.mblock_t.minbargref the same for arguments -ida_hexrays.mblock_t.minbstkref (variable) - lowest stack location accessible with indirect addressing (offset from the stack - bottom) initially it is 0 (not computed) +ida_hexrays.mblock_t.minbstkref + lowest stack location accessible with indirect addressing (offset from the stack bottom) initially it is 0 (not computed) + -ida_hexrays.mblock_t.mustbdef (variable) +ida_hexrays.mblock_t.mustbdef data that must be defined by the block -ida_hexrays.mblock_t.mustbuse (variable) +ida_hexrays.mblock_t.mustbuse data that must be used by the block -ida_hexrays.mblock_t.needs_propagation (method) - needs_propagation(self) -> bool +ida_hexrays.mblock_t.needs_propagation(self) -> bool -ida_hexrays.mblock_t.nextb (variable) +ida_hexrays.mblock_t.nextb next block in the doubly linked list -ida_hexrays.mblock_t.npred (method) - npred(self) -> int +ida_hexrays.mblock_t.npred(self) -> int Get number of block predecessors. -ida_hexrays.mblock_t.nsucc (method) - nsucc(self) -> int +ida_hexrays.mblock_t.nsucc(self) -> int Get number of block successors. -ida_hexrays.mblock_t.optimize_block (method) - optimize_block(self) -> int - Optimize a basic block. Usually there is no need to call this function - explicitly because the decompiler will call it itself if optinsn_t::func or - optblock_t::func return non-zero. - - @return: number of changes made to the block +ida_hexrays.mblock_t.optimize_block(self) -> int + Optimize a basic block. Usually there is no need to call this function explicitly because the decompiler will call it itself if optinsn_t::func or optblock_t::func return non-zero. + + @returns number of changes made to the block -ida_hexrays.mblock_t.optimize_insn (method) - optimize_insn(self, m, optflags=0x0002|0x0004) -> int - Optimize one instruction in the context of the block. - - @param m: (C++: minsn_t *) pointer to a top level instruction - @param optflags: (C++: int) combination of optimization flags bits - @return: number of changes made to the block This function may change other - instructions in the block too. However, it will not destroy top level - instructions (it may convert them to nop's). This function performs - only intrablock modifications. See also minsn_t::optimize_solo() +ida_hexrays.mblock_t.optimize_insn(self, *args) -> int + Optimize one instruction in the context of the block. + + @param m: pointer to a top level instruction + @param optflags: combination of optimization flags bits + @returns number of changes made to the block This function may change other instructions in the block too. However, it will not destroy top level instructions (it may convert them to nop's). This function performs only intrablock modifications. See also minsn_t::optimize_solo() -ida_hexrays.mblock_t.optimize_useless_jump (method) - optimize_useless_jump(self) -> int - Remove a jump at the end of the block if it is useless. This function preserves - any side effects when removing a useless jump. Both conditional and - unconditional jumps are handled (and jtbl too). This function deletes useless - jumps, not only replaces them with a nop. (please note that \optimize_insn does - not handle useless jumps). - - @return: number of changes made to the block +ida_hexrays.mblock_t.optimize_useless_jump(self) -> int + Remove a jump at the end of the block if it is useless. This function preserves any side effects when removing a useless jump. Both conditional and unconditional jumps are handled (and jtbl too). This function deletes useless jumps, not only replaces them with a nop. (please note that \optimize_insn does not handle useless jumps). + + @returns number of changes made to the block -ida_hexrays.mblock_t.pred (method) - pred(self, n) -> int - - @param n: int +ida_hexrays.mblock_t.pred(self, n: int) -> int -ida_hexrays.mblock_t.preds (method) +ida_hexrays.mblock_t.preds(self) Iterates the list of predecessor blocks -ida_hexrays.mblock_t.predset (variable) - control flow graph: list of our predecessors use npred() and pred() to access it +ida_hexrays.mblock_t.predset + control flow graph: list of our predecessors use npred() and pred() to access it + -ida_hexrays.mblock_t.prevb (variable) +ida_hexrays.mblock_t.prevb previous block in the doubly linked list -ida_hexrays.mblock_t.remove_from_block (method) - remove_from_block(self, m) -> minsn_t - Remove instruction from the doubly linked list - - @param m: (C++: minsn_t *) instruction to remove The removed instruction is not deleted, the - caller gets its ownership - @return: pointer to the next instruction +ida_hexrays.mblock_t.remove_from_block(self, m: "minsn_t") -> "minsn_t *" + Remove instruction from the doubly linked list + + @param m: instruction to remove The removed instruction is not deleted, the caller gets its ownership + @returns pointer to the next instruction -ida_hexrays.mblock_t.request_demote64 (method) - request_demote64(self) +ida_hexrays.mblock_t.request_demote64(self) -> None -ida_hexrays.mblock_t.request_propagation (method) - request_propagation(self) +ida_hexrays.mblock_t.request_propagation(self) -> None -ida_hexrays.mblock_t.serial (variable) +ida_hexrays.mblock_t.serial block number -ida_hexrays.mblock_t.start (variable) +ida_hexrays.mblock_t.start start address -ida_hexrays.mblock_t.succ (method) - succ(self, n) -> int - - @param n: int +ida_hexrays.mblock_t.succ(self, n: int) -> int -ida_hexrays.mblock_t.succs (method) +ida_hexrays.mblock_t.succs(self) Iterates the list of successor blocks -ida_hexrays.mblock_t.succset (variable) - control flow graph: list of our successors use nsucc() and succ() to access it +ida_hexrays.mblock_t.succset + control flow graph: list of our successors use nsucc() and succ() to access it + -ida_hexrays.mblock_t.tail (variable) +ida_hexrays.mblock_t.tail pointer to the last instruction of the block -ida_hexrays.mblock_t.type (variable) +ida_hexrays.mblock_t.type block type (BLT_NONE - not computed yet) -ida_hexrays.mcallarg_t (class) - Proxy of C++ mcallarg_t class. +ida_hexrays.mcallarg_t -ida_hexrays.mcallarg_t.__init__ (method) - __init__(self) -> mcallarg_t - __init__(self, rarg) -> mcallarg_t - - @param rarg: mop_t const & +ida_hexrays.mcallarg_t.__init__(self, *args) -ida_hexrays.mcallarg_t._print (method) - _print(self, shins_flags=0x04|0x02) - - Parameters - ---------- - shins_flags: int +ida_hexrays.mcallarg_t._print(self, *args) -> None -ida_hexrays.mcallarg_t.argloc (variable) +ida_hexrays.mcallarg_t.argloc ida argloc -ida_hexrays.mcallarg_t.copy_mop (method) - copy_mop(self, op) - - @param op: mop_t const & +ida_hexrays.mcallarg_t.copy_mop(self, op: "mop_t") -> None -ida_hexrays.mcallarg_t.dstr (method) - dstr(self) -> char const * +ida_hexrays.mcallarg_t.dstr(self) -> str -ida_hexrays.mcallarg_t.ea (variable) - address where the argument was initialized. BADADDR means unknown. +ida_hexrays.mcallarg_t.ea + address where the argument was initialized. BADADDR means unknown. + -ida_hexrays.mcallarg_t.flags (variable) +ida_hexrays.mcallarg_t.flags FAI_... -ida_hexrays.mcallarg_t.make_int (method) - make_int(self, val, val_ea, opno=0) - - @param val: int - @param val_ea: ea_t - @param opno: int +ida_hexrays.mcallarg_t.make_int(self, val: int, val_ea: ida_idaapi.ea_t, opno: int = 0) -> None -ida_hexrays.mcallarg_t.make_uint (method) - make_uint(self, val, val_ea, opno=0) - - @param val: int - @param val_ea: ea_t - @param opno: int +ida_hexrays.mcallarg_t.make_uint(self, val: int, val_ea: ida_idaapi.ea_t, opno: int = 0) -> None -ida_hexrays.mcallarg_t.name (variable) +ida_hexrays.mcallarg_t.name formal argument name -ida_hexrays.mcallarg_t.set_regarg (method) - set_regarg(self, mr, sz, tif) +ida_hexrays.mcallarg_t.set_regarg(self, *args) -> None + This function has the following signatures: - @param mr: mreg_t - @param sz: int - @param tif: tinfo_t const & + 0. set_regarg(mr: mreg_t, sz: int, tif: const tinfo_t &) -> None + 1. set_regarg(mr: mreg_t, tif: const tinfo_t &) -> None + 2. set_regarg(mr: mreg_t, dt: char, sign: type_sign_t=type_unsigned) -> None - set_regarg(self, mr, tif) + # 0: set_regarg(mr: mreg_t, sz: int, tif: const tinfo_t &) -> None - @param mr: mreg_t - @param tif: tinfo_t const & - set_regarg(self, mr, dt, sign=type_unsigned) + # 1: set_regarg(mr: mreg_t, tif: const tinfo_t &) -> None - @param mr: mreg_t - @param dt: char - @param sign: type_sign_t + + # 2: set_regarg(mr: mreg_t, dt: char, sign: type_sign_t=type_unsigned) -> None -ida_hexrays.mcallarg_t.type (variable) +ida_hexrays.mcallarg_t.type formal argument type -ida_hexrays.mcallargs_t (class) - Proxy of C++ qvector< mcallarg_t > class. +ida_hexrays.mcallargs_t -ida_hexrays.mcallargs_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< mcallarg_t > const & +ida_hexrays.mcallargs_t.__eq__(self, r: "mcallargs_t") -> bool -ida_hexrays.mcallargs_t.__getitem__ (method) - __getitem__(self, i) -> mcallarg_t - - @param i: size_t +ida_hexrays.mcallargs_t.__getitem__(self, i: "size_t") -> "mcallarg_t const &" -ida_hexrays.mcallargs_t.__init__ (method) - __init__(self) -> mcallargs_t - __init__(self, x) -> mcallargs_t - - @param x: qvector< mcallarg_t > const & +ida_hexrays.mcallargs_t.__init__(self, *args) -ida_hexrays.mcallargs_t.__len__ (method) - __len__(self) -> size_t +ida_hexrays.mcallargs_t.__len__(self) -> "size_t" -ida_hexrays.mcallargs_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< mcallarg_t > const & +ida_hexrays.mcallargs_t.__ne__(self, r: "mcallargs_t") -> bool -ida_hexrays.mcallargs_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: mcallarg_t const & +ida_hexrays.mcallargs_t.__setitem__(self, i: "size_t", v: "mcallarg_t") -> None -ida_hexrays.mcallargs_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: mcallarg_t const & +ida_hexrays.mcallargs_t._del(self, x: "mcallarg_t") -> bool -ida_hexrays.mcallargs_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: mcallarg_t const & +ida_hexrays.mcallargs_t.add_unique(self, x: "mcallarg_t") -> bool -ida_hexrays.mcallargs_t.at (method) - at(self, _idx) -> mcallarg_t - - @param _idx: size_t +ida_hexrays.mcallargs_t.append(self, x: "mcallarg_t") -> None -ida_hexrays.mcallargs_t.begin (method) - begin(self) -> mcallarg_t +ida_hexrays.mcallargs_t.at(self, _idx: "size_t") -> "mcallarg_t const &" -ida_hexrays.mcallargs_t.capacity (method) - capacity(self) -> size_t +ida_hexrays.mcallargs_t.begin(self, *args) -> "qvector< mcallarg_t >::const_iterator" -ida_hexrays.mcallargs_t.clear (method) - clear(self) +ida_hexrays.mcallargs_t.capacity(self) -> "size_t" -ida_hexrays.mcallargs_t.empty (method) - empty(self) -> bool +ida_hexrays.mcallargs_t.clear(self) -> None -ida_hexrays.mcallargs_t.end (method) - end(self) -> mcallarg_t +ida_hexrays.mcallargs_t.empty(self) -> bool -ida_hexrays.mcallargs_t.erase (method) - erase(self, it) -> mcallarg_t - - @param it: qvector< mcallarg_t >::iterator - - erase(self, first, last) -> mcallarg_t - - @param first: qvector< mcallarg_t >::iterator - @param last: qvector< mcallarg_t >::iterator +ida_hexrays.mcallargs_t.end(self, *args) -> "qvector< mcallarg_t >::const_iterator" -ida_hexrays.mcallargs_t.extract (method) - extract(self) -> mcallarg_t +ida_hexrays.mcallargs_t.erase(self, *args) -> "qvector< mcallarg_t >::iterator" -ida_hexrays.mcallargs_t.find (method) - find(self, x) -> mcallarg_t - - @param x: mcallarg_t const & +ida_hexrays.mcallargs_t.extend(self, x: "mcallargs_t") -> None -ida_hexrays.mcallargs_t.grow (method) - grow(self, x=mcallarg_t()) - - @param x: mcallarg_t const & +ida_hexrays.mcallargs_t.extract(self) -> "mcallarg_t *" -ida_hexrays.mcallargs_t.has (method) - has(self, x) -> bool - - @param x: mcallarg_t const & +ida_hexrays.mcallargs_t.find(self, *args) -> "qvector< mcallarg_t >::const_iterator" -ida_hexrays.mcallargs_t.inject (method) - inject(self, s, len) - - @param s: mcallarg_t * - @param len: size_t +ida_hexrays.mcallargs_t.grow(self, *args) -> None -ida_hexrays.mcallargs_t.insert (method) - insert(self, it, x) -> mcallarg_t - - @param it: qvector< mcallarg_t >::iterator - @param x: mcallarg_t const & +ida_hexrays.mcallargs_t.has(self, x: "mcallarg_t") -> bool -ida_hexrays.mcallargs_t.pop_back (method) - pop_back(self) +ida_hexrays.mcallargs_t.inject(self, s: "mcallarg_t", len: "size_t") -> None -ida_hexrays.mcallargs_t.push_back (method) - push_back(self, x) - - @param x: mcallarg_t const & - - push_back(self) -> mcallarg_t +ida_hexrays.mcallargs_t.insert(self, it: "mcallarg_t", x: "mcallarg_t") -> "qvector< mcallarg_t >::iterator" -ida_hexrays.mcallargs_t.qclear (method) - qclear(self) +ida_hexrays.mcallargs_t.pop_back(self) -> None -ida_hexrays.mcallargs_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_hexrays.mcallargs_t.push_back(self, *args) -> "mcallarg_t &" -ida_hexrays.mcallargs_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: mcallarg_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_hexrays.mcallargs_t.qclear(self) -> None -ida_hexrays.mcallargs_t.size (method) - size(self) -> size_t +ida_hexrays.mcallargs_t.reserve(self, cnt: "size_t") -> None -ida_hexrays.mcallargs_t.swap (method) - swap(self, r) - - @param r: qvector< mcallarg_t > & +ida_hexrays.mcallargs_t.resize(self, *args) -> None -ida_hexrays.mcallargs_t.truncate (method) - truncate(self) +ida_hexrays.mcallargs_t.size(self) -> "size_t" -ida_hexrays.mcallinfo_t (class) - Proxy of C++ mcallinfo_t class. +ida_hexrays.mcallargs_t.swap(self, r: "mcallargs_t") -> None -ida_hexrays.mcallinfo_t.__init__ (method) - __init__(self, _callee=BADADDR, _sargs=0) -> mcallinfo_t - - @param _callee: ea_t - @param _sargs: int +ida_hexrays.mcallargs_t.truncate(self) -> None -ida_hexrays.mcallinfo_t._print (method) - _print(self, size=-1, shins_flags=0x04|0x02) - - Parameters - ---------- - size: int - shins_flags: int +ida_hexrays.mcallinfo_t -ida_hexrays.mcallinfo_t.args (variable) +ida_hexrays.mcallinfo_t.__init__(self, *args) + +ida_hexrays.mcallinfo_t._print(self, *args) -> None + +ida_hexrays.mcallinfo_t.args call arguments -ida_hexrays.mcallinfo_t.call_spd (variable) +ida_hexrays.mcallinfo_t.call_spd sp value at call insn -ida_hexrays.mcallinfo_t.callee (variable) +ida_hexrays.mcallinfo_t.callee address of the called function, if known -ida_hexrays.mcallinfo_t.cc (variable) +ida_hexrays.mcallinfo_t.cc calling convention -ida_hexrays.mcallinfo_t.dead_regs (variable) - registers defined by the function but never used. upon propagation we do the - following: +ida_hexrays.mcallinfo_t.dead_regs + registers defined by the function but never used. upon propagation we do the following: * dead_regs += return_regs - * retregs.clear() since the call is propagated + * retregs.clear() since the call is propagated + + + -ida_hexrays.mcallinfo_t.dstr (method) - dstr(self) -> char const * +ida_hexrays.mcallinfo_t.dstr(self) -> str -ida_hexrays.mcallinfo_t.flags (variable) - combination of Call properties... bits +ida_hexrays.mcallinfo_t.flags + combination of Call properties... bits + -ida_hexrays.mcallinfo_t.fti_attrs (variable) +ida_hexrays.mcallinfo_t.fti_attrs extended function attributes -ida_hexrays.mcallinfo_t.get_type (method) - get_type(self) -> tinfo_t +ida_hexrays.mcallinfo_t.get_type(self) -> "tinfo_t" -ida_hexrays.mcallinfo_t.is_vararg (method) - is_vararg(self) -> bool +ida_hexrays.mcallinfo_t.is_vararg(self) -> bool -ida_hexrays.mcallinfo_t.lexcompare (method) - lexcompare(self, f) -> int - - @param f: mcallinfo_t const & +ida_hexrays.mcallinfo_t.lexcompare(self, f: "mcallinfo_t") -> int -ida_hexrays.mcallinfo_t.pass_regs (variable) - passthrough registers: registers that depend on input values (subset of spoiled) +ida_hexrays.mcallinfo_t.pass_regs + passthrough registers: registers that depend on input values (subset of spoiled) + -ida_hexrays.mcallinfo_t.retregs (variable) - return register(s) (e.g., AX, AX:DX, etc.) this vector is built from return_regs +ida_hexrays.mcallinfo_t.retregs + return register(s) (e.g., AX, AX:DX, etc.) this vector is built from return_regs + -ida_hexrays.mcallinfo_t.return_argloc (variable) +ida_hexrays.mcallinfo_t.return_argloc location of the returned value -ida_hexrays.mcallinfo_t.return_regs (variable) +ida_hexrays.mcallinfo_t.return_regs list of values returned by the function -ida_hexrays.mcallinfo_t.return_type (variable) +ida_hexrays.mcallinfo_t.return_type type of the returned value -ida_hexrays.mcallinfo_t.role (variable) +ida_hexrays.mcallinfo_t.role function role -ida_hexrays.mcallinfo_t.set_type (method) - set_type(self, type) -> bool - - @param type: tinfo_t const & +ida_hexrays.mcallinfo_t.set_type(self, type: "tinfo_t") -> bool -ida_hexrays.mcallinfo_t.solid_args (variable) - number of solid args. there may be variadic args in addtion +ida_hexrays.mcallinfo_t.solid_args + number of solid args. there may be variadic args in addtion + -ida_hexrays.mcallinfo_t.spoiled (variable) +ida_hexrays.mcallinfo_t.spoiled list of spoiled locations (includes return_regs) -ida_hexrays.mcallinfo_t.stkargs_top (variable) +ida_hexrays.mcallinfo_t.stkargs_top first offset past stack arguments -ida_hexrays.mcallinfo_t.visible_memory (variable) +ida_hexrays.mcallinfo_t.visible_memory what memory is visible to the call? -ida_hexrays.mcases_t (class) - Proxy of C++ mcases_t class. +ida_hexrays.mcases_t -ida_hexrays.mcases_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: mcases_t const & +ida_hexrays.mcases_t.__eq__(self, r: "mcases_t") -> bool -ida_hexrays.mcases_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: mcases_t const & +ida_hexrays.mcases_t.__ge__(self, r: "mcases_t") -> bool -ida_hexrays.mcases_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: mcases_t const & +ida_hexrays.mcases_t.__gt__(self, r: "mcases_t") -> bool -ida_hexrays.mcases_t.__init__ (method) - __init__(self) -> mcases_t +ida_hexrays.mcases_t.__init__(self) -ida_hexrays.mcases_t.__le__ (method) - __le__(self, r) -> bool - - @param r: mcases_t const & +ida_hexrays.mcases_t.__le__(self, r: "mcases_t") -> bool -ida_hexrays.mcases_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: mcases_t const & +ida_hexrays.mcases_t.__lt__(self, r: "mcases_t") -> bool -ida_hexrays.mcases_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: mcases_t const & +ida_hexrays.mcases_t.__ne__(self, r: "mcases_t") -> bool -ida_hexrays.mcases_t._print (method) - _print(self) +ida_hexrays.mcases_t._print(self) -> None -ida_hexrays.mcases_t.compare (method) - compare(self, r) -> int - - @param r: mcases_t const & +ida_hexrays.mcases_t.compare(self, r: "mcases_t") -> int -ida_hexrays.mcases_t.dstr (method) - dstr(self) -> char const * +ida_hexrays.mcases_t.dstr(self) -> str -ida_hexrays.mcases_t.empty (method) - empty(self) -> bool +ida_hexrays.mcases_t.empty(self) -> bool -ida_hexrays.mcases_t.resize (method) - resize(self, s) - - @param s: int +ida_hexrays.mcases_t.resize(self, s: int) -> None -ida_hexrays.mcases_t.size (method) - size(self) -> size_t +ida_hexrays.mcases_t.size(self) -> "size_t" -ida_hexrays.mcases_t.swap (method) - swap(self, r) - - @param r: mcases_t & +ida_hexrays.mcases_t.swap(self, r: "mcases_t") -> None -ida_hexrays.mcases_t.targets (variable) +ida_hexrays.mcases_t.targets target block numbers -ida_hexrays.mcases_t.values (variable) +ida_hexrays.mcases_t.values expression values for each target -ida_hexrays.mcode_modifies_d (function) - mcode_modifies_d(mcode) -> bool - - @param mcode: enum mcode_t +ida_hexrays.mcode_modifies_d(mcode: "mcode_t") -> bool -ida_hexrays.microcode_filter_t (class) - Proxy of C++ microcode_filter_t class. +ida_hexrays.microcode_filter_t -ida_hexrays.microcode_filter_t.__disown__ (method) +ida_hexrays.microcode_filter_t.__disown__(self) -ida_hexrays.microcode_filter_t.__init__ (method) - __init__(self) -> microcode_filter_t - - @param self: PyObject * +ida_hexrays.microcode_filter_t.__init__(self) -ida_hexrays.microcode_filter_t.apply (method) - apply(self, cdg) -> merror_t - generate microcode for an instruction - - @param cdg: (C++: codegen_t &) - @return: MERR_... code: MERR_OK - user-defined microcode generated, go to the - next instruction MERR_INSN - not generated - the caller should try the - standard way else - error +ida_hexrays.microcode_filter_t.apply(self, cdg: "codegen_t") -> "merror_t" + generate microcode for an instruction + + @returns MERR_... code: MERR_OK - user-defined microcode generated, go to the next instruction MERR_INSN - not generated - the caller should try the standard way else - error -ida_hexrays.microcode_filter_t.match (method) - match(self, cdg) -> bool - check if the filter object is to be applied - - @param cdg: (C++: codegen_t &) - @return: success +ida_hexrays.microcode_filter_t.match(self, cdg: "codegen_t") -> bool + check if the filter object is to be applied + + @returns success -ida_hexrays.minsn_t (class) - Proxy of C++ minsn_t class. +ida_hexrays.min_vlr_svalue(size: int) -> "uvlr_t" -ida_hexrays.minsn_t.__dbg_get_meminfo (method) - __dbg_get_meminfo(self) -> qstring +ida_hexrays.minsn_t -ida_hexrays.minsn_t.__dbg_get_registered_kind (method) - __dbg_get_registered_kind(self) -> int +ida_hexrays.minsn_t.__dbg_get_meminfo(self) -> str -ida_hexrays.minsn_t.__init__ (method) - __init__(self, _ea) -> minsn_t - - @param _ea: ea_t - - __init__(self, m) -> minsn_t - - @param m: minsn_t const & +ida_hexrays.minsn_t.__dbg_get_registered_kind(self) -> int -ida_hexrays.minsn_t.__lt__ (method) - __lt__(self, ri) -> bool - - @param ri: minsn_t const & +ida_hexrays.minsn_t.__init__(self, *args) -ida_hexrays.minsn_t._acquire_ownership (method) +ida_hexrays.minsn_t.__lt__(self, ri: "minsn_t") -> bool -ida_hexrays.minsn_t._deregister (method) - _deregister(self) +ida_hexrays.minsn_t._acquire_ownership(self, v, acquire) -ida_hexrays.minsn_t._ensure_cond (method) +ida_hexrays.minsn_t._deregister(self) -> None -ida_hexrays.minsn_t._ensure_no_obj (method) +ida_hexrays.minsn_t._ensure_cond(self, ok, cond_str) -ida_hexrays.minsn_t._ensure_ownership_transferrable (method) +ida_hexrays.minsn_t._ensure_no_obj(self, o, attr, attr_is_acquired) -ida_hexrays.minsn_t._make_nop (method) - _make_nop(self) +ida_hexrays.minsn_t._ensure_ownership_transferrable(self, v) -ida_hexrays.minsn_t._maybe_disown_and_deregister (method) +ida_hexrays.minsn_t._make_nop(self) -> None + Convert instruction to nop. This function erases all info but the prev/next fields. In most cases it is better to use mblock_t::make_nop(), which also marks the block lists as dirty. + -ida_hexrays.minsn_t._meminfo (method) +ida_hexrays.minsn_t._maybe_disown_and_deregister(self) -ida_hexrays.minsn_t._obj_id (method) - _obj_id(self) -> PyObject * +ida_hexrays.minsn_t._meminfo(self) -ida_hexrays.minsn_t._own_and_register (method) +ida_hexrays.minsn_t._obj_id(self) -> "PyObject *" -ida_hexrays.minsn_t._print (method) - _print(self, shins_flags=0x04|0x02) - - Parameters - ---------- - shins_flags: int +ida_hexrays.minsn_t._own_and_register(self) -ida_hexrays.minsn_t._register (method) - _register(self) +ida_hexrays.minsn_t._print(self, *args) -> None -ida_hexrays.minsn_t.clr_assert (method) - clr_assert(self) +ida_hexrays.minsn_t._register(self) -> None -ida_hexrays.minsn_t.clr_combinable (method) - clr_combinable(self) +ida_hexrays.minsn_t.clr_assert(self) -> None -ida_hexrays.minsn_t.clr_combined (method) - clr_combined(self) +ida_hexrays.minsn_t.clr_combinable(self) -> None -ida_hexrays.minsn_t.clr_fpinsn (method) - clr_fpinsn(self) +ida_hexrays.minsn_t.clr_combined(self) -> None -ida_hexrays.minsn_t.clr_ignlowsrc (method) - clr_ignlowsrc(self) +ida_hexrays.minsn_t.clr_fpinsn(self) -> None -ida_hexrays.minsn_t.clr_multimov (method) - clr_multimov(self) +ida_hexrays.minsn_t.clr_ignlowsrc(self) -> None -ida_hexrays.minsn_t.clr_noret_icall (method) - clr_noret_icall(self) +ida_hexrays.minsn_t.clr_multimov(self) -> None -ida_hexrays.minsn_t.clr_propagatable (method) - clr_propagatable(self) +ida_hexrays.minsn_t.clr_noret_icall(self) -> None -ida_hexrays.minsn_t.clr_tailcall (method) - clr_tailcall(self) +ida_hexrays.minsn_t.clr_propagatable(self) -> None -ida_hexrays.minsn_t.contains_call (method) - contains_call(self, with_helpers=False) -> bool +ida_hexrays.minsn_t.clr_tailcall(self) -> None + +ida_hexrays.minsn_t.contains_call(self, with_helpers: bool = False) -> bool Does the instruction contain a call? - - @param with_helpers: (C++: bool) -ida_hexrays.minsn_t.contains_opcode (method) - contains_opcode(self, mcode) -> bool - Does the instruction have the specified opcode? This function searches - subinstructions as well. - - @param mcode: (C++: mcode_t) opcode to search for. +ida_hexrays.minsn_t.contains_opcode(self, mcode: "mcode_t") -> bool + Does the instruction have the specified opcode? This function searches subinstructions as well. + + @param mcode: opcode to search for. -ida_hexrays.minsn_t.d (variable) +ida_hexrays.minsn_t.d destination operand -ida_hexrays.minsn_t.deserialize (method) - deserialize(self, bytes, format_version) -> bool - Deserialize an instruction - - @param bytes: (C++: const uchar *) pointer to serialized data - @param format_version: (C++: int) serialization format version. this value is returned by - minsn_t::serialize() - @return: success +ida_hexrays.minsn_t.deserialize(self, bytes: "uchar const *", format_version: int) -> bool + Deserialize an instruction + + @param bytes: pointer to serialized data + @param format_version: serialization format version. this value is returned by minsn_t::serialize() + @returns success -ida_hexrays.minsn_t.dstr (method) - dstr(self) -> char const * +ida_hexrays.minsn_t.dstr(self) -> str Get displayable text without tags in a static buffer. -ida_hexrays.minsn_t.ea (variable) +ida_hexrays.minsn_t.ea instruction address -ida_hexrays.minsn_t.equal_insns (method) - equal_insns(self, m, eqflags) -> bool - Compare instructions. This is the main comparison function for instructions. - - @param m: (C++: const minsn_t &) instruction to compare with - @param eqflags: (C++: int) combination of comparison bits bits +ida_hexrays.minsn_t.equal_insns(self, m: "minsn_t", eqflags: int) -> bool + Compare instructions. This is the main comparison function for instructions. + + @param m: instruction to compare with + @param eqflags: combination of comparison bits bits -ida_hexrays.minsn_t.find_call (method) - find_call(self, with_helpers=False) -> minsn_t - Find a call instruction. Check for the current instruction and its - subinstructions. - - @param with_helpers: (C++: bool) consider helper calls as well? +ida_hexrays.minsn_t.find_call(self, with_helpers: bool = False) -> "minsn_t *" + Find a call instruction. Check for the current instruction and its subinstructions. + + @param with_helpers: consider helper calls as well? -ida_hexrays.minsn_t.find_ins_op (method) - find_ins_op(self, op=m_nop) -> minsn_t - - @param op: enum mcode_t +ida_hexrays.minsn_t.find_ins_op(self, op: "mcode_t" = m_nop) -> "minsn_t *" + Find an operand that is a subinsruction with the specified opcode. This function checks only the 'l' and 'r' operands of the current insn. + + @param op: opcode to search for + @returns &l or &r or nullptr -ida_hexrays.minsn_t.find_num_op (method) - find_num_op(self) -> mop_t +ida_hexrays.minsn_t.find_num_op(self) -> "mop_t *" + Find a numeric operand of the current instruction. This function checks only the 'l' and 'r' operands of the current insn. + + @returns &l or &r or nullptr -ida_hexrays.minsn_t.find_opcode (method) - find_opcode(self, mcode) -> minsn_t - - @param mcode: enum mcode_t +ida_hexrays.minsn_t.find_opcode(self, mcode: "mcode_t") -> "minsn_t *" + Find a (sub)insruction with the specified opcode. + + @param mcode: opcode to search for. -ida_hexrays.minsn_t.for_all_insns (method) - for_all_insns(self, mv) -> int - Visit all instructions. This function visits the instruction itself and all its - subinstructions. - - @param mv: (C++: minsn_visitor_t &) instruction visitor - @return: non-zero value returned by mv.visit_mop() or zero +ida_hexrays.minsn_t.for_all_insns(self, mv: "minsn_visitor_t") -> int + Visit all instructions. This function visits the instruction itself and all its subinstructions. + + @param mv: instruction visitor + @returns non-zero value returned by mv.visit_mop() or zero -ida_hexrays.minsn_t.for_all_ops (method) - for_all_ops(self, mv) -> int - Visit all instruction operands. This function visits subinstruction operands as - well. - - @param mv: (C++: mop_visitor_t &) operand visitor - @return: non-zero value returned by mv.visit_mop() or zero +ida_hexrays.minsn_t.for_all_ops(self, mv: "mop_visitor_t") -> int + Visit all instruction operands. This function visits subinstruction operands as well. + + @param mv: operand visitor + @returns non-zero value returned by mv.visit_mop() or zero -ida_hexrays.minsn_t.get_role (method) - get_role(self) -> funcrole_t +ida_hexrays.minsn_t.get_role(self) -> "funcrole_t" Get the function role of a call. -ida_hexrays.minsn_t.get_split_size (method) - get_split_size(self) -> int +ida_hexrays.minsn_t.get_split_size(self) -> int -ida_hexrays.minsn_t.has_side_effects (method) - has_side_effects(self, include_ldx_and_divs=False) -> bool - Does the instruction have a side effect? - - @param include_ldx_and_divs: (C++: bool) consider ldx/div/mod as having side effects? stx is - always considered as having side effects. Apart - from ldx/std only call may have side effects. +ida_hexrays.minsn_t.has_side_effects(self, include_ldx_and_divs: bool = False) -> bool + Does the instruction have a side effect? + + @param include_ldx_and_divs: consider ldx/div/mod as having side effects? stx is always considered as having side effects. Apart from ldx/std only call may have side effects. -ida_hexrays.minsn_t.iprops (variable) +ida_hexrays.minsn_t.iprops combination of instruction property bits bits -ida_hexrays.minsn_t.is_after (method) - is_after(self, m) -> bool - Is the instruction after the specified one? - - @param m: (C++: const minsn_t *) the instruction to compare against in the list +ida_hexrays.minsn_t.is_after(self, m: "minsn_t") -> bool + Is the instruction after the specified one? + + @param m: the instruction to compare against in the list -ida_hexrays.minsn_t.is_alloca (method) - is_alloca(self) -> bool +ida_hexrays.minsn_t.is_alloca(self) -> bool -ida_hexrays.minsn_t.is_assert (method) - is_assert(self) -> bool +ida_hexrays.minsn_t.is_assert(self) -> bool -ida_hexrays.minsn_t.is_between (method) - is_between(self, m1, m2) -> bool - Is the instruction in the specified range of instructions? - - @param m1: (C++: const minsn_t *) beginning of the range in the doubly linked list - @param m2: (C++: const minsn_t *) end of the range in the doubly linked list (excluded, may be nullptr) - This function assumes that m1 and m2 belong to the same basic block - and they are top level instructions. +ida_hexrays.minsn_t.is_between(self, m1: "minsn_t", m2: "minsn_t") -> bool + Is the instruction in the specified range of instructions? + + @param m1: beginning of the range in the doubly linked list + @param m2: end of the range in the doubly linked list (excluded, may be nullptr) This function assumes that m1 and m2 belong to the same basic block and they are top level instructions. -ida_hexrays.minsn_t.is_bswap (method) - is_bswap(self) -> bool +ida_hexrays.minsn_t.is_bswap(self) -> bool -ida_hexrays.minsn_t.is_cleaning_pop (method) - is_cleaning_pop(self) -> bool +ida_hexrays.minsn_t.is_cleaning_pop(self) -> bool -ida_hexrays.minsn_t.is_combinable (method) - is_combinable(self) -> bool +ida_hexrays.minsn_t.is_combinable(self) -> bool -ida_hexrays.minsn_t.is_combined (method) - is_combined(self) -> bool +ida_hexrays.minsn_t.is_combined(self) -> bool -ida_hexrays.minsn_t.is_extstx (method) - is_extstx(self) -> bool +ida_hexrays.minsn_t.is_extstx(self) -> bool -ida_hexrays.minsn_t.is_farcall (method) - is_farcall(self) -> bool +ida_hexrays.minsn_t.is_farcall(self) -> bool -ida_hexrays.minsn_t.is_fpinsn (method) - is_fpinsn(self) -> bool +ida_hexrays.minsn_t.is_fpinsn(self) -> bool -ida_hexrays.minsn_t.is_helper (method) - is_helper(self, name) -> bool - Is a helper call with the specified name? Helper calls usually have well-known - function names (see Well known function names) but they may have any other name. - The decompiler does not assume any special meaning for non-well-known names. - - @param name: (C++: const char *) char const * +ida_hexrays.minsn_t.is_helper(self, name: str) -> bool + Is a helper call with the specified name? Helper calls usually have well-known function names (see Well known function names) but they may have any other name. The decompiler does not assume any special meaning for non-well-known names. + -ida_hexrays.minsn_t.is_ignlowsrc (method) - is_ignlowsrc(self) -> bool +ida_hexrays.minsn_t.is_ignlowsrc(self) -> bool -ida_hexrays.minsn_t.is_inverted_jx (method) - is_inverted_jx(self) -> bool +ida_hexrays.minsn_t.is_inverted_jx(self) -> bool -ida_hexrays.minsn_t.is_like_move (method) - is_like_move(self) -> bool +ida_hexrays.minsn_t.is_like_move(self) -> bool -ida_hexrays.minsn_t.is_mbarrier (method) - is_mbarrier(self) -> bool +ida_hexrays.minsn_t.is_mbarrier(self) -> bool -ida_hexrays.minsn_t.is_memcpy (method) - is_memcpy(self) -> bool +ida_hexrays.minsn_t.is_memcpy(self) -> bool -ida_hexrays.minsn_t.is_memset (method) - is_memset(self) -> bool +ida_hexrays.minsn_t.is_memset(self) -> bool -ida_hexrays.minsn_t.is_mov (method) - is_mov(self) -> bool +ida_hexrays.minsn_t.is_mov(self) -> bool -ida_hexrays.minsn_t.is_multimov (method) - is_multimov(self) -> bool +ida_hexrays.minsn_t.is_multimov(self) -> bool -ida_hexrays.minsn_t.is_noret_call (method) - is_noret_call(self, flags=0) -> bool - Is a non-returing call? - - @param flags: (C++: int) combination of NORET_... bits +ida_hexrays.minsn_t.is_noret_call(self, flags: int = 0) -> bool + Is a non-returing call? + + @param flags: combination of NORET_... bits -ida_hexrays.minsn_t.is_optional (method) - is_optional(self) -> bool +ida_hexrays.minsn_t.is_optional(self) -> bool -ida_hexrays.minsn_t.is_persistent (method) - is_persistent(self) -> bool +ida_hexrays.minsn_t.is_persistent(self) -> bool -ida_hexrays.minsn_t.is_propagatable (method) - is_propagatable(self) -> bool +ida_hexrays.minsn_t.is_propagatable(self) -> bool -ida_hexrays.minsn_t.is_readflags (method) - is_readflags(self) -> bool +ida_hexrays.minsn_t.is_readflags(self) -> bool -ida_hexrays.minsn_t.is_tailcall (method) - is_tailcall(self) -> bool +ida_hexrays.minsn_t.is_tailcall(self) -> bool -ida_hexrays.minsn_t.is_unknown_call (method) - is_unknown_call(self) -> bool - Is an unknown call? Unknown calls are calls without the argument list - (mcallinfo_t). Usually the argument lists are determined by - mba_t::analyze_calls(). Unknown calls exist until the MMAT_CALLS maturity level. - See also mblock_t::is_call_block +ida_hexrays.minsn_t.is_unknown_call(self) -> bool + Is an unknown call? Unknown calls are calls without the argument list (mcallinfo_t). Usually the argument lists are determined by mba_t::analyze_calls(). Unknown calls exist until the MMAT_CALLS maturity level. See also mblock_t::is_call_block + -ida_hexrays.minsn_t.is_wild_match (method) - is_wild_match(self) -> bool +ida_hexrays.minsn_t.is_wild_match(self) -> bool -ida_hexrays.minsn_t.l (variable) +ida_hexrays.minsn_t.l left operand -ida_hexrays.minsn_t.lexcompare (method) - lexcompare(self, ri) -> int - - @param ri: minsn_t const & +ida_hexrays.minsn_t.lexcompare(self, ri: "minsn_t") -> int -ida_hexrays.minsn_t.may_use_aliased_memory (method) - may_use_aliased_memory(self) -> bool +ida_hexrays.minsn_t.may_use_aliased_memory(self) -> bool Is it possible for the instruction to use aliased memory? -ida_hexrays.minsn_t.modifies_d (method) - modifies_d(self) -> bool - Does the instruction modify its 'd' operand? Some instructions (e.g. m_stx) do - not modify the 'd' operand. +ida_hexrays.minsn_t.modifies_d(self) -> bool + Does the instruction modify its 'd' operand? Some instructions (e.g. m_stx) do not modify the 'd' operand. + -ida_hexrays.minsn_t.modifies_pair_mop (method) - modifies_pair_mop(self) -> bool +ida_hexrays.minsn_t.modifies_pair_mop(self) -> bool -ida_hexrays.minsn_t.next (variable) +ida_hexrays.minsn_t.next next insn in doubly linked list. check also nexti() -ida_hexrays.minsn_t.opcode (variable) +ida_hexrays.minsn_t.opcode instruction opcode -ida_hexrays.minsn_t.optimize_solo (method) - optimize_solo(self, optflags=0) -> int - Optimize one instruction without context. This function does not have access to - the instruction context (the previous and next instructions in the list, the - block number, etc). It performs only basic optimizations that are available - without this info. - - @param optflags: (C++: int) combination of optimization flags bits - @return: number of changes, 0-unchanged See also mblock_t::optimize_insn() +ida_hexrays.minsn_t.optimize_solo(self, optflags: int = 0) -> int + Optimize one instruction without context. This function does not have access to the instruction context (the previous and next instructions in the list, the block number, etc). It performs only basic optimizations that are available without this info. + + @param optflags: combination of optimization flags bits + @returns number of changes, 0-unchanged See also mblock_t::optimize_insn() -ida_hexrays.minsn_t.optimize_subtree (method) - optimize_subtree(self, blk, top, parent, converted_call, optflags=0x0002) -> int - Optimize instruction in its context. Do not use this function, use - mblock_t::optimize() - - @param blk: (C++: mblock_t *) - @param top: (C++: minsn_t *) - @param parent: (C++: minsn_t *) - @param converted_call: (C++: ea_t *) - @param optflags: (C++: int) +ida_hexrays.minsn_t.optimize_subtree(self, blk: "mblock_t", top: "minsn_t", parent: "minsn_t", converted_call: "ea_t *", optflags: int = 2) -> int + Optimize instruction in its context. Do not use this function, use mblock_t::optimize() + -ida_hexrays.minsn_t.prev (variable) +ida_hexrays.minsn_t.prev prev insn in doubly linked list. check also previ() -ida_hexrays.minsn_t.r (variable) +ida_hexrays.minsn_t.r right operand -ida_hexrays.minsn_t.replace_by (method) +ida_hexrays.minsn_t.replace_by(self, o) -ida_hexrays.minsn_t.serialize (method) - serialize(self, b) -> int - Serialize an instruction +ida_hexrays.minsn_t.serialize(self, b: "bytevec_t *") -> int + Serialize an instruction + + @param b: the output buffer + @returns the serialization format that was used to store info + +ida_hexrays.minsn_t.set_assert(self) -> None + +ida_hexrays.minsn_t.set_cleaning_pop(self) -> None + +ida_hexrays.minsn_t.set_combinable(self) -> None + +ida_hexrays.minsn_t.set_extstx(self) -> None + +ida_hexrays.minsn_t.set_farcall(self) -> None + +ida_hexrays.minsn_t.set_fpinsn(self) -> None + +ida_hexrays.minsn_t.set_ignlowsrc(self) -> None + +ida_hexrays.minsn_t.set_inverted_jx(self) -> None + +ida_hexrays.minsn_t.set_mbarrier(self) -> None + +ida_hexrays.minsn_t.set_multimov(self) -> None + +ida_hexrays.minsn_t.set_noret_icall(self) -> None + +ida_hexrays.minsn_t.set_optional(self) -> None + +ida_hexrays.minsn_t.set_persistent(self) -> None + +ida_hexrays.minsn_t.set_split_size(self, s: int) -> None + +ida_hexrays.minsn_t.set_tailcall(self) -> None + +ida_hexrays.minsn_t.set_unmerged(self) -> None + +ida_hexrays.minsn_t.set_wild_match(self) -> None + +ida_hexrays.minsn_t.setaddr(self, new_ea: ida_idaapi.ea_t) -> None + Change the instruction address. This function modifies subinstructions as well. + + +ida_hexrays.minsn_t.swap(self, m: "minsn_t") -> None + Swap two instructions. The prev/next fields are not modified by this function because it would corrupt the doubly linked list. + + +ida_hexrays.minsn_t.was_noret_icall(self) -> bool + +ida_hexrays.minsn_t.was_split(self) -> bool + +ida_hexrays.minsn_t.was_unmerged(self) -> bool + +ida_hexrays.minsn_t.was_unpaired(self) -> bool + +ida_hexrays.minsn_visitor_t + +ida_hexrays.minsn_visitor_t.__disown__(self) + +ida_hexrays.minsn_visitor_t.__init__(self, _mba: "mba_t" = None, _blk: "mblock_t" = None, _topins: "minsn_t" = None) + +ida_hexrays.minsn_visitor_t.visit_minsn(self) -> int + +ida_hexrays.mlist_mop_visitor_t + +ida_hexrays.mlist_mop_visitor_t.__disown__(self) + +ida_hexrays.mlist_mop_visitor_t.__init__(self) + +ida_hexrays.mlist_mop_visitor_t.prune + Should skip sub-operands of the current operand? visit_mop() may set 'prune=true' for that. + + +ida_hexrays.mlist_mop_visitor_t.visit_mop(self, op: "mop_t") -> int + +ida_hexrays.mlist_t + +ida_hexrays.mlist_t.__eq__(self, r: "mlist_t") -> bool + +ida_hexrays.mlist_t.__ge__(self, r: "mlist_t") -> bool + +ida_hexrays.mlist_t.__gt__(self, r: "mlist_t") -> bool + +ida_hexrays.mlist_t.__init__(self, *args) + +ida_hexrays.mlist_t.__le__(self, r: "mlist_t") -> bool + +ida_hexrays.mlist_t.__lt__(self, r: "mlist_t") -> bool + +ida_hexrays.mlist_t.__ne__(self, r: "mlist_t") -> bool + +ida_hexrays.mlist_t._print(self) -> None + +ida_hexrays.mlist_t.add(self, *args) -> bool + This function has the following signatures: - @param b: (C++: bytevec_t *) the output buffer - @return: the serialization format that was used to store info - -ida_hexrays.minsn_t.set_assert (method) - set_assert(self) - -ida_hexrays.minsn_t.set_cleaning_pop (method) - set_cleaning_pop(self) - -ida_hexrays.minsn_t.set_combinable (method) - set_combinable(self) - -ida_hexrays.minsn_t.set_extstx (method) - set_extstx(self) - -ida_hexrays.minsn_t.set_farcall (method) - set_farcall(self) - -ida_hexrays.minsn_t.set_fpinsn (method) - set_fpinsn(self) - -ida_hexrays.minsn_t.set_ignlowsrc (method) - set_ignlowsrc(self) - -ida_hexrays.minsn_t.set_inverted_jx (method) - set_inverted_jx(self) - -ida_hexrays.minsn_t.set_mbarrier (method) - set_mbarrier(self) - -ida_hexrays.minsn_t.set_multimov (method) - set_multimov(self) - -ida_hexrays.minsn_t.set_noret_icall (method) - set_noret_icall(self) - -ida_hexrays.minsn_t.set_optional (method) - set_optional(self) - -ida_hexrays.minsn_t.set_persistent (method) - set_persistent(self) - -ida_hexrays.minsn_t.set_split_size (method) - set_split_size(self, s) + 0. add(r: mreg_t, size: int) -> bool + 1. add(r: const rlist_t &) -> bool + 2. add(ivl: const ivl_t &) -> bool + 3. add(lst: const mlist_t &) -> bool - @param s: int - -ida_hexrays.minsn_t.set_tailcall (method) - set_tailcall(self) - -ida_hexrays.minsn_t.set_unmerged (method) - set_unmerged(self) - -ida_hexrays.minsn_t.set_wild_match (method) - set_wild_match(self) - -ida_hexrays.minsn_t.setaddr (method) - setaddr(self, new_ea) - Change the instruction address. This function modifies subinstructions as well. + # 0: add(r: mreg_t, size: int) -> bool - @param new_ea: (C++: ea_t) - -ida_hexrays.minsn_t.swap (method) - swap(self, m) - Swap two instructions. The prev/next fields are not modified by this function - because it would corrupt the doubly linked list. - @param m: (C++: minsn_t &) - -ida_hexrays.minsn_t.was_noret_icall (method) - was_noret_icall(self) -> bool - -ida_hexrays.minsn_t.was_split (method) - was_split(self) -> bool - -ida_hexrays.minsn_t.was_unmerged (method) - was_unmerged(self) -> bool - -ida_hexrays.minsn_visitor_t (class) - Proxy of C++ minsn_visitor_t class. - -ida_hexrays.minsn_visitor_t.__disown__ (method) - -ida_hexrays.minsn_visitor_t.__init__ (method) - __init__(self, _mba=None, _blk=None, _topins=None) -> minsn_visitor_t + # 1: add(r: const rlist_t &) -> bool - @param _mba: mba_t * - @param _blk: mblock_t * - @param _topins: minsn_t * - -ida_hexrays.minsn_visitor_t.visit_minsn (method) - visit_minsn(self) -> int - -ida_hexrays.mlist_mop_visitor_t (class) - Proxy of C++ mlist_mop_visitor_t class. - -ida_hexrays.mlist_mop_visitor_t.__disown__ (method) - -ida_hexrays.mlist_mop_visitor_t.__init__ (method) - __init__(self) -> mlist_mop_visitor_t - @param self: PyObject * + # 2: add(ivl: const ivl_t &) -> bool + + + # 3: add(lst: const mlist_t &) -> bool -ida_hexrays.mlist_mop_visitor_t.visit_mop (method) - visit_mop(self, op) -> int - - @param op: mop_t * +ida_hexrays.mlist_t.addmem(self, ea: ida_idaapi.ea_t, size: "asize_t") -> bool -ida_hexrays.mlist_t (class) - Proxy of C++ mlist_t class. +ida_hexrays.mlist_t.clear(self) -> None -ida_hexrays.mlist_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: mlist_t const & +ida_hexrays.mlist_t.compare(self, r: "mlist_t") -> int -ida_hexrays.mlist_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: mlist_t const & +ida_hexrays.mlist_t.count(self) -> "asize_t" -ida_hexrays.mlist_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: mlist_t const & +ida_hexrays.mlist_t.dstr(self) -> str -ida_hexrays.mlist_t.__init__ (method) - __init__(self) -> mlist_t - __init__(self, ivl) -> mlist_t - - @param ivl: ivl_t const & - - __init__(self, r, size) -> mlist_t - - @param r: mreg_t - @param size: int +ida_hexrays.mlist_t.empty(self) -> bool -ida_hexrays.mlist_t.__le__ (method) - __le__(self, r) -> bool - - @param r: mlist_t const & +ida_hexrays.mlist_t.has(self, r: "mreg_t") -> bool -ida_hexrays.mlist_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: mlist_t const & +ida_hexrays.mlist_t.has_all(self, r: "mreg_t", size: int) -> bool -ida_hexrays.mlist_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: mlist_t const & +ida_hexrays.mlist_t.has_any(self, r: "mreg_t", size: int) -> bool -ida_hexrays.mlist_t._print (method) - _print(self) +ida_hexrays.mlist_t.has_common(self, lst: "mlist_t") -> bool -ida_hexrays.mlist_t.add (method) - add(self, r, size) -> bool - - @param r: mreg_t - @param size: int - - add(self, r) -> bool - - @param r: rlist_t const & - - add(self, ivl) -> bool - - @param ivl: ivl_t const & - - add(self, lst) -> bool - - @param lst: mlist_t const & +ida_hexrays.mlist_t.has_memory(self) -> bool -ida_hexrays.mlist_t.addmem (method) - addmem(self, ea, size) -> bool +ida_hexrays.mlist_t.includes(self, lst: "mlist_t") -> bool + +ida_hexrays.mlist_t.intersect(self, lst: "mlist_t") -> bool + +ida_hexrays.mlist_t.is_subset_of(self, lst: "mlist_t") -> bool + +ida_hexrays.mlist_t.sub(self, *args) -> bool + This function has the following signatures: - @param ea: ea_t - @param size: asize_t - -ida_hexrays.mlist_t.clear (method) - clear(self) - -ida_hexrays.mlist_t.compare (method) - compare(self, r) -> int + 0. sub(r: mreg_t, size: int) -> bool + 1. sub(ivl: const ivl_t &) -> bool + 2. sub(lst: const mlist_t &) -> bool - @param r: mlist_t const & - -ida_hexrays.mlist_t.count (method) - count(self) -> asize_t - -ida_hexrays.mlist_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.mlist_t.empty (method) - empty(self) -> bool - -ida_hexrays.mlist_t.has (method) - has(self, r) -> bool + # 0: sub(r: mreg_t, size: int) -> bool - @param r: mreg_t + + # 1: sub(ivl: const ivl_t &) -> bool + + + # 2: sub(lst: const mlist_t &) -> bool -ida_hexrays.mlist_t.has_all (method) - has_all(self, r, size) -> bool - - @param r: mreg_t - @param size: int +ida_hexrays.mlist_t.swap(self, r: "mlist_t") -> None -ida_hexrays.mlist_t.has_any (method) - has_any(self, r, size) -> bool - - @param r: mreg_t - @param size: int +ida_hexrays.mnumber_t -ida_hexrays.mlist_t.has_common (method) - has_common(self, lst) -> bool - - @param lst: mlist_t const & +ida_hexrays.mnumber_t.__eq__(self, r: "mnumber_t") -> bool -ida_hexrays.mlist_t.has_memory (method) - has_memory(self) -> bool +ida_hexrays.mnumber_t.__ge__(self, r: "mnumber_t") -> bool -ida_hexrays.mlist_t.includes (method) - includes(self, lst) -> bool - - @param lst: mlist_t const & +ida_hexrays.mnumber_t.__gt__(self, r: "mnumber_t") -> bool -ida_hexrays.mlist_t.intersect (method) - intersect(self, lst) -> bool - - @param lst: mlist_t const & +ida_hexrays.mnumber_t.__init__(self, *args) -ida_hexrays.mlist_t.is_subset_of (method) - is_subset_of(self, lst) -> bool - - @param lst: mlist_t const & +ida_hexrays.mnumber_t.__le__(self, r: "mnumber_t") -> bool -ida_hexrays.mlist_t.sub (method) - sub(self, r, size) -> bool - - @param r: mreg_t - @param size: int - - sub(self, ivl) -> bool - - @param ivl: ivl_t const & - - sub(self, lst) -> bool - - @param lst: mlist_t const & +ida_hexrays.mnumber_t.__lt__(self, r: "mnumber_t") -> bool -ida_hexrays.mlist_t.swap (method) - swap(self, r) - - @param r: mlist_t & +ida_hexrays.mnumber_t.__ne__(self, r: "mnumber_t") -> bool -ida_hexrays.mnumber_t (class) - Proxy of C++ mnumber_t class. +ida_hexrays.mnumber_t.compare(self, r: "mnumber_t") -> int -ida_hexrays.mnumber_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: mnumber_t const & +ida_hexrays.mnumber_t.update_value(self, val64: "uint64") -> None -ida_hexrays.mnumber_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: mnumber_t const & +ida_hexrays.modify_user_lvar_info(func_ea: ida_idaapi.ea_t, mli_flags: "uint", info: "lvar_saved_info_t") -> bool + Modify saved local variable settings of one variable. + + @param func_ea: function start address + @param mli_flags: bits that specify which attrs defined by INFO are to be set + @param info: local variable info attrs + @returns true if modified, false if invalid MLI_FLAGS passed -ida_hexrays.mnumber_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: mnumber_t const & +ida_hexrays.modify_user_lvars(entry_ea: ida_idaapi.ea_t, mlv: "user_lvar_modifier_t") -> bool + Modify saved local variable settings. + + @param entry_ea: function start address + @param mlv: local variable modifier + @returns true if modified variables -ida_hexrays.mnumber_t.__init__ (method) - __init__(self, v, _ea=BADADDR, n=0) -> mnumber_t - - @param v: uint64 - @param _ea: ea_t - @param n: int - -ida_hexrays.mnumber_t.__le__ (method) - __le__(self, r) -> bool - - @param r: mnumber_t const & - -ida_hexrays.mnumber_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: mnumber_t const & - -ida_hexrays.mnumber_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: mnumber_t const & - -ida_hexrays.mnumber_t.compare (method) - compare(self, r) -> int - - @param r: mnumber_t const & - -ida_hexrays.mnumber_t.update_value (method) - update_value(self, val64) - - @param val64: uint64 - -ida_hexrays.modify_user_lvar_info (function) - modify_user_lvar_info(func_ea, mli_flags, info) -> bool - Modify saved local variable settings of one variable. - - @param func_ea: (C++: ea_t) function start address - @param mli_flags: (C++: uint) bits that specify which attrs defined by INFO are to be set - @param info: (C++: const lvar_saved_info_t &) local variable info attrs - @return: true if modified, false if invalid MLI_FLAGS passed - -ida_hexrays.modify_user_lvars (function) - modify_user_lvars(entry_ea, mlv) -> bool - Modify saved local variable settings. - - @param entry_ea: (C++: ea_t) function start address - @param mlv: (C++: user_lvar_modifier_t &) local variable modifier - @return: true if modified variables - -ida_hexrays.mop_S (variable) +ida_hexrays.mop_S local stack variable (they exist until MMAT_LVARS) -ida_hexrays.mop_addr_t (class) - Proxy of C++ mop_addr_t class. +ida_hexrays.mop_a + mop_addr_t: address of operand (mop_l, mop_v, mop_S, mop_r) -ida_hexrays.mop_addr_t.__init__ (method) - __init__(self) -> mop_addr_t - __init__(self, ra) -> mop_addr_t - - @param ra: mop_addr_t const & - - __init__(self, ra, isz, osz) -> mop_addr_t - - @param ra: mop_t const & - @param isz: int - @param osz: int +ida_hexrays.mop_addr_t -ida_hexrays.mop_addr_t.lexcompare (method) - lexcompare(self, ra) -> int - - @param ra: mop_addr_t const & +ida_hexrays.mop_addr_t.__init__(self, *args) -ida_hexrays.mop_b (variable) +ida_hexrays.mop_addr_t.lexcompare(self, ra: "mop_addr_t") -> int + +ida_hexrays.mop_b micro basic block (mblock_t) -ida_hexrays.mop_c (variable) +ida_hexrays.mop_c mcases -ida_hexrays.mop_d (variable) +ida_hexrays.mop_d result of another instruction -ida_hexrays.mop_f (variable) +ida_hexrays.mop_f list of arguments -ida_hexrays.mop_fn (variable) +ida_hexrays.mop_fn floating point constant -ida_hexrays.mop_h (variable) +ida_hexrays.mop_h helper function -ida_hexrays.mop_l (variable) +ida_hexrays.mop_l local variable -ida_hexrays.mop_n (variable) +ida_hexrays.mop_n immediate number constant -ida_hexrays.mop_p (variable) +ida_hexrays.mop_p operand pair -ida_hexrays.mop_pair_t (class) - Proxy of C++ mop_pair_t class. +ida_hexrays.mop_pair_t -ida_hexrays.mop_pair_t.__init__ (method) - __init__(self) -> mop_pair_t +ida_hexrays.mop_pair_t.__init__(self) -ida_hexrays.mop_pair_t.hop (variable) +ida_hexrays.mop_pair_t.hop high operand -ida_hexrays.mop_pair_t.lop (variable) +ida_hexrays.mop_pair_t.lop low operand -ida_hexrays.mop_r (variable) +ida_hexrays.mop_r register (they exist until MMAT_LVARS) -ida_hexrays.mop_sc (variable) +ida_hexrays.mop_sc scattered -ida_hexrays.mop_str (variable) +ida_hexrays.mop_str immediate string constant (user representation) -ida_hexrays.mop_t (class) - Proxy of C++ mop_t class. +ida_hexrays.mop_t -ida_hexrays.mop_t.__dbg_get_meminfo (method) - __dbg_get_meminfo(self) -> qstring +ida_hexrays.mop_t.__dbg_get_meminfo(self) -> str -ida_hexrays.mop_t.__dbg_get_registered_kind (method) - __dbg_get_registered_kind(self) -> int +ida_hexrays.mop_t.__dbg_get_registered_kind(self) -> int -ida_hexrays.mop_t.__eq__ (method) - __eq__(self, rop) -> bool +ida_hexrays.mop_t.__eq__(self, rop: "mop_t") -> bool + +ida_hexrays.mop_t.__init__(self, *args) + +ida_hexrays.mop_t.__lt__(self, rop: "mop_t") -> bool + +ida_hexrays.mop_t.__ne__(self, rop: "mop_t") -> bool + +ida_hexrays.mop_t._acquire_ownership(self, v, acquire) + +ida_hexrays.mop_t._deregister(self) -> None + +ida_hexrays.mop_t._ensure_cond(self, ok, cond_str) + +ida_hexrays.mop_t._ensure_no_obj(self, o, attr, attr_is_acquired) + +ida_hexrays.mop_t._ensure_no_t(self) + +ida_hexrays.mop_t._ensure_ownership_transferrable(self, v) + +ida_hexrays.mop_t._get_a(self) -> "mop_addr_t *" + +ida_hexrays.mop_t._get_b(self) -> int + +ida_hexrays.mop_t._get_c(self) -> "mcases_t *" + +ida_hexrays.mop_t._get_cstr(self) -> str + +ida_hexrays.mop_t._get_d(self) -> "minsn_t *" + +ida_hexrays.mop_t._get_f(self) -> "mcallinfo_t *" + +ida_hexrays.mop_t._get_fpc(self) -> "fnumber_t *" + +ida_hexrays.mop_t._get_g(self) -> ida_idaapi.ea_t + +ida_hexrays.mop_t._get_helper(self) -> str + +ida_hexrays.mop_t._get_l(self) -> "lvar_ref_t *" + +ida_hexrays.mop_t._get_nnn(self) -> "mnumber_t *" + +ida_hexrays.mop_t._get_pair(self) -> "mop_pair_t *" + +ida_hexrays.mop_t._get_r(self) -> "mreg_t" + +ida_hexrays.mop_t._get_s(self) -> "stkvar_ref_t *" + +ida_hexrays.mop_t._get_scif(self) -> "scif_t *" + +ida_hexrays.mop_t._get_t(self) -> "mopt_t" + +ida_hexrays.mop_t._make_blkref(self, blknum: int) -> None + Create a block reference operand without erasing previous data. + + @param blknum: block number Note: this function does not erase the previous contents of the operand; call erase() if necessary + +ida_hexrays.mop_t._make_callinfo(self, fi: "mcallinfo_t") -> None + Create a call info operand without erasing previous data. + + @param fi: callinfo Note: this function does not erase the previous contents of the operand; call erase() if necessary + +ida_hexrays.mop_t._make_cases(self, _cases: "mcases_t") -> None + Create a 'switch cases' operand without erasing previous data. Note: this function does not erase the previous contents of the operand; call erase() if necessary + + +ida_hexrays.mop_t._make_gvar(self, ea: ida_idaapi.ea_t) -> None + Create a global variable operand without erasing previous data. + + @param ea: address of the variable Note: this function does not erase the previous contents of the operand; call erase() if necessary + +ida_hexrays.mop_t._make_insn(self, ins: "minsn_t") -> None + Create a nested instruction without erasing previous data. + + @param ins: pointer to the instruction to encapsulate into the operand Note: this function does not erase the previous contents of the operand; call erase() if necessary See also create_from_insn, which is higher level + +ida_hexrays.mop_t._make_lvar(self, mba: "mba_t", idx: int, off: int = 0) -> None + Create a local variable operand. + + @param mba: pointer to microcode + @param idx: index into mba->vars + @param off: offset from the beginning of the variable Note: this function does not erase the previous contents of the operand; call erase() if necessary + +ida_hexrays.mop_t._make_pair(self, _pair: "mop_pair_t") -> None + Create a pair operand without erasing previous data. Note: this function does not erase the previous contents of the operand; call erase() if necessary + + +ida_hexrays.mop_t._make_reg(self, *args) -> None + This function has the following signatures: - @param rop: mop_t const & - -ida_hexrays.mop_t.__init__ (method) - __init__(self) -> mop_t - __init__(self, rop) -> mop_t + 0. _make_reg(reg: mreg_t) -> None + 1. _make_reg(reg: mreg_t, _size: int) -> None - @param rop: mop_t const & + # 0: _make_reg(reg: mreg_t) -> None - __init__(self, _r, _s) -> mop_t + Create a register operand without erasing previous data. + - @param _r: mreg_t - @param _s: int + # 1: _make_reg(reg: mreg_t, _size: int) -> None -ida_hexrays.mop_t.__lt__ (method) - __lt__(self, rop) -> bool - - @param rop: mop_t const & +ida_hexrays.mop_t._make_stkvar(self, mba: "mba_t", off: int) -> None + Create a stack variable operand. + + @param mba: pointer to microcode + @param off: decompiler stkoff Note: this function does not erase the previous contents of the operand; call erase() if necessary -ida_hexrays.mop_t.__ne__ (method) - __ne__(self, rop) -> bool - - @param rop: mop_t const & +ida_hexrays.mop_t._make_strlit(self, str: str) -> None + Create a constant string operand. -ida_hexrays.mop_t._acquire_ownership (method) +ida_hexrays.mop_t._maybe_disown_and_deregister(self) -ida_hexrays.mop_t._deregister (method) - _deregister(self) +ida_hexrays.mop_t._meminfo(self) -ida_hexrays.mop_t._ensure_cond (method) +ida_hexrays.mop_t._obj_id(self) -> "PyObject *" -ida_hexrays.mop_t._ensure_no_obj (method) +ida_hexrays.mop_t._own_and_register(self) -ida_hexrays.mop_t._ensure_no_t (method) +ida_hexrays.mop_t._print(self, *args) -> None -ida_hexrays.mop_t._ensure_ownership_transferrable (method) +ida_hexrays.mop_t._register(self) -> None -ida_hexrays.mop_t._get_a (method) - _get_a(self) -> mop_addr_t +ida_hexrays.mop_t._set_a(self, _v: "mop_addr_t") -> None -ida_hexrays.mop_t._get_b (method) - _get_b(self) -> int - -ida_hexrays.mop_t._get_c (method) - _get_c(self) -> mcases_t - -ida_hexrays.mop_t._get_cstr (method) - _get_cstr(self) -> char const * - -ida_hexrays.mop_t._get_d (method) - _get_d(self) -> minsn_t - -ida_hexrays.mop_t._get_f (method) - _get_f(self) -> mcallinfo_t - -ida_hexrays.mop_t._get_fpc (method) - _get_fpc(self) -> fnumber_t - -ida_hexrays.mop_t._get_g (method) - _get_g(self) -> ea_t - -ida_hexrays.mop_t._get_helper (method) - _get_helper(self) -> char const * - -ida_hexrays.mop_t._get_l (method) - _get_l(self) -> lvar_ref_t - -ida_hexrays.mop_t._get_nnn (method) - _get_nnn(self) -> mnumber_t - -ida_hexrays.mop_t._get_pair (method) - _get_pair(self) -> mop_pair_t - -ida_hexrays.mop_t._get_r (method) - _get_r(self) -> mreg_t - -ida_hexrays.mop_t._get_s (method) - _get_s(self) -> stkvar_ref_t - -ida_hexrays.mop_t._get_scif (method) - _get_scif(self) -> scif_t - -ida_hexrays.mop_t._get_t (method) - _get_t(self) -> mopt_t - -ida_hexrays.mop_t._make_blkref (method) - _make_blkref(self, blknum) - - Parameters - ---------- - blknum: int - -ida_hexrays.mop_t._make_callinfo (method) - _make_callinfo(self, fi) - - Parameters - ---------- - fi: mcallinfo_t * - -ida_hexrays.mop_t._make_cases (method) - _make_cases(self, _cases) - - Parameters - ---------- - _cases: mcases_t * - -ida_hexrays.mop_t._make_gvar (method) - _make_gvar(self, ea) - - Parameters - ---------- - ea: ea_t - -ida_hexrays.mop_t._make_insn (method) - _make_insn(self, ins) - - Parameters - ---------- - ins: minsn_t * - -ida_hexrays.mop_t._make_lvar (method) - _make_lvar(self, mba, idx, off=0) - - Parameters - ---------- - mba: mba_t * - idx: int - off: sval_t - -ida_hexrays.mop_t._make_pair (method) - _make_pair(self, _pair) - - Parameters - ---------- - _pair: mop_pair_t * - -ida_hexrays.mop_t._make_reg (method) - _make_reg(self, reg) - - Parameters - ---------- - reg: mreg_t - - _make_reg(self, reg, _size) - - Parameters - ---------- - reg: mreg_t - _size: int - -ida_hexrays.mop_t._make_stkvar (method) - _make_stkvar(self, mba, off) - - Parameters - ---------- - mba: mba_t * - off: sval_t - -ida_hexrays.mop_t._make_strlit (method) - _make_strlit(self, str) - - Parameters - ---------- - str: char const * - -ida_hexrays.mop_t._maybe_disown_and_deregister (method) - -ida_hexrays.mop_t._meminfo (method) - -ida_hexrays.mop_t._obj_id (method) - _obj_id(self) -> PyObject * - -ida_hexrays.mop_t._own_and_register (method) - -ida_hexrays.mop_t._print (method) - _print(self, shins_flags=0x04|0x02) - - Parameters - ---------- - shins_flags: int - -ida_hexrays.mop_t._register (method) - _register(self) - -ida_hexrays.mop_t._set_a (method) - _set_a(self, _v) - - Parameters - ---------- - _v: mop_addr_t * - -ida_hexrays.mop_t._set_b (method) - _set_b(self, _v) - - Parameters - ---------- - _v: int - -ida_hexrays.mop_t._set_c (method) - _set_c(self, _v) - - Parameters - ---------- - _v: mcases_t * - -ida_hexrays.mop_t._set_cstr (method) - _set_cstr(self, _v) - - Parameters - ---------- - _v: char const * - -ida_hexrays.mop_t._set_d (method) - _set_d(self, _v) - - Parameters - ---------- - _v: minsn_t * - -ida_hexrays.mop_t._set_f (method) - _set_f(self, _v) - - Parameters - ---------- - _v: mcallinfo_t * - -ida_hexrays.mop_t._set_fpc (method) - _set_fpc(self, _v) - - Parameters - ---------- - _v: fnumber_t * - -ida_hexrays.mop_t._set_g (method) - _set_g(self, _v) - - Parameters - ---------- - _v: ea_t - -ida_hexrays.mop_t._set_helper (method) - _set_helper(self, _v) - - Parameters - ---------- - _v: char const * - -ida_hexrays.mop_t._set_l (method) - _set_l(self, _v) - - Parameters - ---------- - _v: lvar_ref_t * - -ida_hexrays.mop_t._set_nnn (method) - _set_nnn(self, _v) - - Parameters - ---------- - _v: mnumber_t * - -ida_hexrays.mop_t._set_pair (method) - _set_pair(self, _v) - - Parameters - ---------- - _v: mop_pair_t * - -ida_hexrays.mop_t._set_r (method) - _set_r(self, _v) - - Parameters - ---------- - _v: mreg_t - -ida_hexrays.mop_t._set_s (method) - _set_s(self, _v) - - Parameters - ---------- - _v: stkvar_ref_t * - -ida_hexrays.mop_t._set_scif (method) - _set_scif(self, _v) - - Parameters - ---------- - _v: scif_t * - -ida_hexrays.mop_t._set_t (method) - _set_t(self, v) - - Parameters - ---------- - v: mopt_t - -ida_hexrays.mop_t.apply_ld_mcode (method) - apply_ld_mcode(self, mcode, ea, newsize) - Apply a unary opcode to the operand. - - @param mcode: (C++: mcode_t) opcode to apply. it must accept 'l' and 'd' operands but not 'r'. - @param ea: (C++: ea_t) value of minsn_t::ea for the newly created insruction - @param newsize: (C++: int) new operand size Example: apply_ld_mcode(m_low) will convert op - => low(op) - -ida_hexrays.mop_t.apply_xds (method) - apply_xds(self, ea, newsize) - - @param ea: ea_t - @param newsize: int - -ida_hexrays.mop_t.apply_xdu (method) - apply_xdu(self, ea, newsize) - - @param ea: ea_t - @param newsize: int - -ida_hexrays.mop_t.assign (method) - assign(self, rop) -> mop_t - - @param rop: mop_t const & - -ida_hexrays.mop_t.change_size (method) - change_size(self, nsize, sideff=WITH_SIDEFF) -> bool - Change the operand size. Examples: change_size(AL.1, 2) -> AX.2 - change_size(qword_00000008.8, 4) -> dword_00000008.4 change_size(xdu.8(op.4), 4) - -> op.4 change_size(#0x12345678.4, 1) -> #0x78.1 - - @param nsize: (C++: int) new operand size - @param sideff: (C++: side_effect_t) may modify the database because of the size change? - @return: success - -ida_hexrays.mop_t.create_from_insn (method) - create_from_insn(self, m) - Create operand from an instruction. This function creates a nested instruction - that can be used as an operand. Example: if m="add x,y,z", our operand will be - (t=mop_d,d=m). The destination operand of 'add' (z) is lost. - - @param m: (C++: const minsn_t *) instruction to embed into operand. may not be nullptr. - -ida_hexrays.mop_t.create_from_ivlset (method) - create_from_ivlset(self, mba, ivs, fullsize) -> bool - Create operand from ivlset_t. Example: if IVS contains [glbvar..glbvar+4), our - operand will be (t=mop_v, g=&glbvar, size=4) - - @param mba: (C++: mba_t *) pointer to microcode - @param ivs: (C++: const ivlset_t &) set of memory intervals - @param fullsize: (C++: sval_t) mba->fullsize - @return: success - -ida_hexrays.mop_t.create_from_mlist (method) - create_from_mlist(self, mba, lst, fullsize) -> bool - Create operand from mlist_t. Example: if LST contains 4 bits for R0.4, our - operand will be (t=mop_r, r=R0, size=4) - - @param mba: (C++: mba_t *) pointer to microcode - @param lst: (C++: const mlist_t &) list of locations - @param fullsize: (C++: sval_t) mba->fullsize - @return: success - -ida_hexrays.mop_t.create_from_scattered_vdloc (method) - create_from_scattered_vdloc(self, mba, name, type, loc) - Create operand from scattered vdloc_t. Example: if LOC is (ALOC_DIST, {EAX.4, - EDX.4}) and TYPE is _LARGE_INTEGER, our operand will be (t=mop_sc, scif={EAX.4, - EDX.4}) - - @param mba: (C++: mba_t *) pointer to microcode - @param name: (C++: const char *) name of the operand, if available - @param type: (C++: tinfo_t) type of the operand, must be present - @param loc: (C++: const vdloc_t &) a scattered location - @return: success - -ida_hexrays.mop_t.create_from_vdloc (method) - create_from_vdloc(self, mba, loc, _size) - Create operand from vdloc_t. Example: if LOC contains (type=ALOC_REG1, r=R0), - our operand will be (t=mop_r, r=R0, size=_SIZE) - - @param mba: (C++: mba_t *) pointer to microcode - @param loc: (C++: const vdloc_t &) location - @param _size: (C++: int) operand size Note: this function cannot handle scattered - locations. - @return: success - -ida_hexrays.mop_t.double_size (method) - double_size(self, sideff=WITH_SIDEFF) -> bool - - @param sideff: enum side_effect_t - -ida_hexrays.mop_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.mop_t.empty (method) - empty(self) -> bool - -ida_hexrays.mop_t.equal_mops (method) - equal_mops(self, rop, eqflags) -> bool - Compare operands. This is the main comparison function for operands. - - @param rop: (C++: const mop_t &) operand to compare with - @param eqflags: (C++: int) combination of comparison bits bits - -ida_hexrays.mop_t.erase (method) - erase(self) - -ida_hexrays.mop_t.erase_but_keep_size (method) - erase_but_keep_size(self) - -ida_hexrays.mop_t.for_all_ops (method) - for_all_ops(self, mv, type=None, is_target=False) -> int - Visit the operand and all its sub-operands. This function visits the current - operand as well. - - @param mv: (C++: mop_visitor_t &) visitor object - @param type: (C++: const tinfo_t *) operand type - @param is_target: (C++: bool) is a destination operand? - -ida_hexrays.mop_t.for_all_scattered_submops (method) - for_all_scattered_submops(self, sv) -> int - Visit all sub-operands of a scattered operand. This function does not visit the - current operand, only its sub-operands. All sub-operands are synthetic and are - destroyed after the visitor. This function works only with scattered operands. - - @param sv: (C++: scif_visitor_t &) visitor object - -ida_hexrays.mop_t.get_insn (method) - get_insn(self, code) -> minsn_t - - @param code: enum mcode_t - -ida_hexrays.mop_t.get_stkoff (method) - get_stkoff(self, p_off) -> bool - Get the referenced stack offset. This function can also handle mop_sc if it is - entirely mapped into a continuous stack region. - - @param p_off: (C++: sval_t *) the output buffer - @return: success - -ida_hexrays.mop_t.get_stkvar (method) - get_stkvar(self, p_off) -> member_t * - Retrieve the referenced stack variable. - - @param p_off: (C++: uval_t *) if specified, will hold IDA stkoff after the call. - @return: pointer to the stack variable - -ida_hexrays.mop_t.has_side_effects (method) - has_side_effects(self, include_ldx_and_divs=False) -> bool - Has any side effects? - - @param include_ldx_and_divs: (C++: bool) consider ldx/div/mod as having side effects? - -ida_hexrays.mop_t.is01 (method) - is01(self) -> bool - Are the possible values of the operand only 0 and 1? This function returns true - for 0/1 constants, bit registers, the result of 'set' insns, etc. - -ida_hexrays.mop_t.is_arglist (method) - is_arglist(self) -> bool +ida_hexrays.mop_t._set_b(self, _v: int) -> None + +ida_hexrays.mop_t._set_c(self, _v: "mcases_t") -> None + +ida_hexrays.mop_t._set_cstr(self, _v: str) -> None + +ida_hexrays.mop_t._set_d(self, _v: "minsn_t") -> None + +ida_hexrays.mop_t._set_f(self, _v: "mcallinfo_t") -> None + +ida_hexrays.mop_t._set_fpc(self, _v: "fnumber_t") -> None + +ida_hexrays.mop_t._set_g(self, _v: ida_idaapi.ea_t) -> None + +ida_hexrays.mop_t._set_helper(self, _v: str) -> None + +ida_hexrays.mop_t._set_l(self, _v: "lvar_ref_t") -> None + +ida_hexrays.mop_t._set_nnn(self, _v: "mnumber_t") -> None + +ida_hexrays.mop_t._set_pair(self, _v: "mop_pair_t") -> None + +ida_hexrays.mop_t._set_r(self, _v: "mreg_t") -> None + +ida_hexrays.mop_t._set_s(self, _v: "stkvar_ref_t") -> None + +ida_hexrays.mop_t._set_scif(self, _v: "scif_t") -> None + +ida_hexrays.mop_t._set_t(self, v: "mopt_t") -> None + +ida_hexrays.mop_t.apply_ld_mcode(self, mcode: "mcode_t", ea: ida_idaapi.ea_t, newsize: int) -> None + Apply a unary opcode to the operand. + + @param mcode: opcode to apply. it must accept 'l' and 'd' operands but not 'r'. examples: m_low/m_high/m_xds/m_xdu + @param ea: value of minsn_t::ea for the newly created insruction + @param newsize: new operand size Example: apply_ld_mcode(m_low) will convert op => low(op) + +ida_hexrays.mop_t.apply_xds(self, ea: ida_idaapi.ea_t, newsize: int) -> None + +ida_hexrays.mop_t.apply_xdu(self, ea: ida_idaapi.ea_t, newsize: int) -> None + +ida_hexrays.mop_t.assign(self, rop: "mop_t") -> "mop_t &" + +ida_hexrays.mop_t.change_size(self, nsize: int, sideff: "side_effect_t" = WITH_SIDEFF) -> bool + Change the operand size. Examples: change_size(AL.1, 2) -> AX.2 change_size(qword_00000008.8, 4) -> dword_00000008.4 change_size(xdu.8(op.4), 4) -> op.4 change_size(#0x12345678.4, 1) -> #0x78.1 + + @param nsize: new operand size + @param sideff: may modify the database because of the size change? + @returns success + +ida_hexrays.mop_t.create_from_insn(self, m: "minsn_t") -> None + Create operand from an instruction. This function creates a nested instruction that can be used as an operand. Example: if m="add x,y,z", our operand will be (t=mop_d,d=m). The destination operand of 'add' (z) is lost. + + @param m: instruction to embed into operand. may not be nullptr. + +ida_hexrays.mop_t.create_from_ivlset(self, mba: "mba_t", ivs: "ivlset_t", fullsize: int) -> bool + Create operand from ivlset_t. Example: if IVS contains [glbvar..glbvar+4), our operand will be (t=mop_v, g=&glbvar, size=4) + + @param mba: pointer to microcode + @param ivs: set of memory intervals + @param fullsize: mba->fullsize + @returns success + +ida_hexrays.mop_t.create_from_mlist(self, mba: "mba_t", lst: "mlist_t", fullsize: int) -> bool + Create operand from mlist_t. Example: if LST contains 4 bits for R0.4, our operand will be (t=mop_r, r=R0, size=4) + + @param mba: pointer to microcode + @param lst: list of locations + @param fullsize: mba->fullsize + @returns success + +ida_hexrays.mop_t.create_from_scattered_vdloc(self, mba: "mba_t", name: str, type: "tinfo_t", loc: "vdloc_t") -> None + Create operand from scattered vdloc_t. Example: if LOC is (ALOC_DIST, {EAX.4, EDX.4}) and TYPE is _LARGE_INTEGER, our operand will be (t=mop_sc, scif={EAX.4, EDX.4}) + + @param mba: pointer to microcode + @param name: name of the operand, if available + @param type: type of the operand, must be present + @param loc: a scattered location + @returns success + +ida_hexrays.mop_t.create_from_vdloc(self, mba: "mba_t", loc: "vdloc_t", _size: int) -> None + Create operand from vdloc_t. Example: if LOC contains (type=ALOC_REG1, r=R0), our operand will be (t=mop_r, r=R0, size=_SIZE) + + @param mba: pointer to microcode + @param loc: location + @param _size: operand size Note: this function cannot handle scattered locations. + @returns success + +ida_hexrays.mop_t.double_size(self, sideff: "side_effect_t" = WITH_SIDEFF) -> bool + +ida_hexrays.mop_t.dstr(self) -> str + +ida_hexrays.mop_t.empty(self) -> bool + +ida_hexrays.mop_t.equal_mops(self, rop: "mop_t", eqflags: int) -> bool + Compare operands. This is the main comparison function for operands. + + @param rop: operand to compare with + @param eqflags: combination of comparison bits bits + +ida_hexrays.mop_t.erase(self) -> None + +ida_hexrays.mop_t.erase_but_keep_size(self) -> None + +ida_hexrays.mop_t.for_all_ops(self, mv: "mop_visitor_t", type: "tinfo_t" = None, is_target: bool = False) -> int + Visit the operand and all its sub-operands. This function visits the current operand as well. + + @param mv: visitor object + @param type: operand type + @param is_target: is a destination operand? + +ida_hexrays.mop_t.for_all_scattered_submops(self, sv: "scif_visitor_t") -> int + Visit all sub-operands of a scattered operand. This function does not visit the current operand, only its sub-operands. All sub-operands are synthetic and are destroyed after the visitor. This function works only with scattered operands. + + @param sv: visitor object + +ida_hexrays.mop_t.get_insn(self, code: "mcode_t") -> "minsn_t *" + Get subinstruction of the operand. If the operand has a subinstruction with the specified opcode, return it. + + @param code: desired opcode + @returns pointer to the instruction or nullptr + +ida_hexrays.mop_t.get_stkoff(self, p_vdoff: "sval_t *") -> bool + Get the referenced stack offset. This function can also handle mop_sc if it is entirely mapped into a continuous stack region. + + @param p_vdoff: the output buffer + @returns success + +ida_hexrays.mop_t.get_stkvar(self, udm: "udm_t" = None, p_idaoff: "uval_t *" = None) -> "ssize_t" + Retrieve the referenced stack variable. + + @param udm: stkvar, may be nullptr + @param p_idaoff: if specified, will hold IDA stkoff after the call. + @returns index of stkvar in the frame or -1 + +ida_hexrays.mop_t.has_side_effects(self, include_ldx_and_divs: bool = False) -> bool + Has any side effects? + + @param include_ldx_and_divs: consider ldx/div/mod as having side effects? + +ida_hexrays.mop_t.is01(self) -> bool + Are the possible values of the operand only 0 and 1? This function returns true for 0/1 constants, bit registers, the result of 'set' insns, etc. + + +ida_hexrays.mop_t.is_arglist(self) -> bool Is a list of arguments? -ida_hexrays.mop_t.is_bit_reg (method) - is_bit_reg(self, reg) -> bool - Is a bit register? This includes condition codes and eventually other bit - registers +ida_hexrays.mop_t.is_bit_reg(self, *args) -> bool + This function has the following signatures: - @param reg: (C++: mreg_t) + 0. is_bit_reg() -> bool + 1. is_bit_reg(reg: mreg_t) -> bool - is_bit_reg(self) -> bool + # 0: is_bit_reg() -> bool + + + # 1: is_bit_reg(reg: mreg_t) -> bool + + Is a bit register? This includes condition codes and eventually other bit registers + -ida_hexrays.mop_t.is_cc (method) - is_cc(self) -> bool +ida_hexrays.mop_t.is_cc(self) -> bool Is a condition code? -ida_hexrays.mop_t.is_ccflags (method) - is_ccflags(self) -> bool +ida_hexrays.mop_t.is_ccflags(self) -> bool -ida_hexrays.mop_t.is_constant (method) - is_constant(self, is_signed=True) -> bool - Retrieve value of a constant integer operand. - - @param is_signed: (C++: bool) should treat the value as signed - @return: true if the operand is mop_n +ida_hexrays.mop_t.is_constant(self, is_signed: bool = True) -> bool + Retrieve value of a constant integer operand. + + @param is_signed: should treat the value as signed + @returns true if the operand is mop_n -ida_hexrays.mop_t.is_equal_to (method) - is_equal_to(self, n, is_signed=True) -> bool - - @param n: uint64 - @param is_signed: bool +ida_hexrays.mop_t.is_equal_to(self, n: "uint64", is_signed: bool = True) -> bool -ida_hexrays.mop_t.is_extended_from (method) - is_extended_from(self, nbytes, is_signed) -> bool +ida_hexrays.mop_t.is_extended_from(self, nbytes: int, is_signed: bool) -> bool Does the high part of the operand consist of zero or sign bytes? - - @param nbytes: (C++: int) - @param is_signed: (C++: bool) -ida_hexrays.mop_t.is_glbaddr (method) - is_glbaddr(self) -> bool +ida_hexrays.mop_t.is_glbaddr(self, *args) -> bool + This function has the following signatures: + + 0. is_glbaddr() -> bool + 1. is_glbaddr(ea: ida_idaapi.ea_t) -> bool + + # 0: is_glbaddr() -> bool + + Is address of a global memory cell? + + + # 1: is_glbaddr(ea: ida_idaapi.ea_t) -> bool + Is address of the specified global memory cell? - is_glbaddr(self, ea) -> bool + +ida_hexrays.mop_t.is_glbaddr_from_fixup(self) -> bool + +ida_hexrays.mop_t.is_impptr_done(self) -> bool + +ida_hexrays.mop_t.is_insn(self, *args) -> bool + This function has the following signatures: + + 0. is_insn() -> bool + 1. is_insn(code: mcode_t) -> bool + + # 0: is_insn() -> bool + + Is a sub-instruction? + + + # 1: is_insn(code: mcode_t) -> bool - @param ea: ea_t - -ida_hexrays.mop_t.is_glbaddr_from_fixup (method) - is_glbaddr_from_fixup(self) -> bool - -ida_hexrays.mop_t.is_impptr_done (method) - is_impptr_done(self) -> bool - -ida_hexrays.mop_t.is_insn (method) - is_insn(self) -> bool Is a sub-instruction with the specified opcode? - is_insn(self, code) -> bool - - @param code: enum mcode_t -ida_hexrays.mop_t.is_kreg (method) - is_kreg(self) -> bool +ida_hexrays.mop_t.is_kreg(self) -> bool Is a kernel register? -ida_hexrays.mop_t.is_lowaddr (method) - is_lowaddr(self) -> bool +ida_hexrays.mop_t.is_lowaddr(self) -> bool -ida_hexrays.mop_t.is_mob (method) - is_mob(self, serial) -> bool +ida_hexrays.mop_t.is_mob(self, serial: int) -> bool Is a block reference to the specified block? + +ida_hexrays.mop_t.is_negative_constant(self) -> bool + +ida_hexrays.mop_t.is_one(self) -> bool + +ida_hexrays.mop_t.is_pcval(self) -> bool + +ida_hexrays.mop_t.is_positive_constant(self) -> bool + +ida_hexrays.mop_t.is_reg(self, *args) -> bool + This function has the following signatures: + + 0. is_reg() -> bool + 1. is_reg(_r: mreg_t) -> bool + 2. is_reg(_r: mreg_t, _size: int) -> bool + + # 0: is_reg() -> bool + + Is a register operand? See also get_mreg_name() + + + # 1: is_reg(_r: mreg_t) -> bool + + Is the specified register? + + + # 2: is_reg(_r: mreg_t, _size: int) -> bool - @param serial: (C++: int) - -ida_hexrays.mop_t.is_negative_constant (method) - is_negative_constant(self) -> bool - -ida_hexrays.mop_t.is_one (method) - is_one(self) -> bool - -ida_hexrays.mop_t.is_pcval (method) - is_pcval(self) -> bool - -ida_hexrays.mop_t.is_positive_constant (method) - is_positive_constant(self) -> bool - -ida_hexrays.mop_t.is_reg (method) - is_reg(self) -> bool Is the specified register of the specified size? - is_reg(self, _r) -> bool - - @param _r: mreg_t - - is_reg(self, _r, _size) -> bool - - @param _r: mreg_t - @param _size: int -ida_hexrays.mop_t.is_scattered (method) - is_scattered(self) -> bool +ida_hexrays.mop_t.is_scattered(self) -> bool Is a scattered operand? -ida_hexrays.mop_t.is_sign_extended_from (method) - is_sign_extended_from(self, nbytes) -> bool - Does the high part of the operand consist of the sign bytes? - - @param nbytes: (C++: int) number of bytes that were sign extended. the remaining size- - nbytes high bytes must be sign bytes Example: - is_sign_extended_from(xds.4(op.1), 1) -> true because the high 3 - bytes are certainly sign bits +ida_hexrays.mop_t.is_sign_extended_from(self, nbytes: int) -> bool + Does the high part of the operand consist of the sign bytes? + + @param nbytes: number of bytes that were sign extended. the remaining size-nbytes high bytes must be sign bytes Example: is_sign_extended_from(xds.4(op.1), 1) -> true because the high 3 bytes are certainly sign bits -ida_hexrays.mop_t.is_stkaddr (method) - is_stkaddr(self) -> bool +ida_hexrays.mop_t.is_stkaddr(self) -> bool Is address of a stack variable? -ida_hexrays.mop_t.is_udt (method) - is_udt(self) -> bool +ida_hexrays.mop_t.is_udt(self) -> bool -ida_hexrays.mop_t.is_undef_val (method) - is_undef_val(self) -> bool +ida_hexrays.mop_t.is_undef_val(self) -> bool -ida_hexrays.mop_t.is_zero (method) - is_zero(self) -> bool +ida_hexrays.mop_t.is_zero(self) -> bool -ida_hexrays.mop_t.is_zero_extended_from (method) - is_zero_extended_from(self, nbytes) -> bool - Does the high part of the operand consist of zero bytes? - - @param nbytes: (C++: int) number of bytes that were zero extended. the remaining size- - nbytes high bytes must be zero Example: - is_zero_extended_from(xdu.8(op.1), 2) -> true because the high 6 - bytes are certainly zero +ida_hexrays.mop_t.is_zero_extended_from(self, nbytes: int) -> bool + Does the high part of the operand consist of zero bytes? + + @param nbytes: number of bytes that were zero extended. the remaining size-nbytes high bytes must be zero Example: is_zero_extended_from(xdu.8(op.1), 2) -> true because the high 6 bytes are certainly zero -ida_hexrays.mop_t.lexcompare (method) - lexcompare(self, rop) -> int - - @param rop: mop_t const & +ida_hexrays.mop_t.lexcompare(self, rop: "mop_t") -> int -ida_hexrays.mop_t.make_blkref (method) - make_blkref(self, blknum) +ida_hexrays.mop_t.make_blkref(self, blknum: int) -> None Create a global variable operand. - - @param blknum: (C++: int) -ida_hexrays.mop_t.make_first_half (method) - make_first_half(self, width) -> bool - Make the first part of the operand. This function does not care about the memory - endianness - - @param width: (C++: int) the desired size of the operand part in bytes - @return: success +ida_hexrays.mop_t.make_first_half(self, width: int) -> bool + Make the first part of the operand. This function does not care about the memory endianness + + @param width: the desired size of the operand part in bytes + @returns success -ida_hexrays.mop_t.make_fpnum (method) - make_fpnum(self, bytes) -> bool - Create a floating point constant operand. - - @param bytes: (C++: const void *) pointer to the floating point value as used by the current - processor (e.g. for x86 it must be in IEEE 754) - @return: success +ida_hexrays.mop_t.make_fpnum(self, bytes: "void const *") -> bool + Create a floating point constant operand. + + @param bytes: pointer to the floating point value as used by the current processor (e.g. for x86 it must be in IEEE 754) + @returns success -ida_hexrays.mop_t.make_gvar (method) - make_gvar(self, ea) +ida_hexrays.mop_t.make_gvar(self, ea: ida_idaapi.ea_t) -> None Create a global variable operand. - - @param ea: (C++: ea_t) -ida_hexrays.mop_t.make_helper (method) - make_helper(self, name) - Create a helper operand. A helper operand usually keeps a built-in function name - like "va_start" It is essentially just an arbitrary identifier without any - additional info. - - @param name: (C++: const char *) char const * +ida_hexrays.mop_t.make_helper(self, name: str) -> None + Create a helper operand. A helper operand usually keeps a built-in function name like "va_start" It is essentially just an arbitrary identifier without any additional info. + -ida_hexrays.mop_t.make_high_half (method) - make_high_half(self, width) -> bool - Make the high part of the operand. This function takes into account the memory - endianness (byte sex) - - @param width: (C++: int) the desired size of the operand part in bytes - @return: success +ida_hexrays.mop_t.make_high_half(self, width: int) -> bool + Make the high part of the operand. This function takes into account the memory endianness (byte sex) + + @param width: the desired size of the operand part in bytes + @returns success -ida_hexrays.mop_t.make_insn (method) - make_insn(self, ins) +ida_hexrays.mop_t.make_insn(self, ins: "minsn_t") -> None Create a nested instruction. - - @param ins: (C++: minsn_t *) -ida_hexrays.mop_t.make_low_half (method) - make_low_half(self, width) -> bool - Make the low part of the operand. This function takes into account the memory - endianness (byte sex) - - @param width: (C++: int) the desired size of the operand part in bytes - @return: success +ida_hexrays.mop_t.make_low_half(self, width: int) -> bool + Make the low part of the operand. This function takes into account the memory endianness (byte sex) + + @param width: the desired size of the operand part in bytes + @returns success -ida_hexrays.mop_t.make_number (method) - make_number(self, _value, _size, _ea=BADADDR, opnum=0) - Create an integer constant operand. - - @param _value: (C++: uint64) value to store in the operand - @param _size: (C++: int) size of the value in bytes (1,2,4,8) - @param _ea: (C++: ea_t) address of the processor instruction that made the value - @param opnum: (C++: int) operand number of the processor instruction +ida_hexrays.mop_t.make_number(self, *args) -> None + Create an integer constant operand. + + @param _value: value to store in the operand + @param _size: size of the value in bytes (1,2,4,8) + @param _ea: address of the processor instruction that made the value + @param opnum: operand number of the processor instruction -ida_hexrays.mop_t.make_reg (method) - make_reg(self, reg) +ida_hexrays.mop_t.make_reg(self, *args) -> None + This function has the following signatures: - @param reg: mreg_t + 0. make_reg(reg: mreg_t) -> None + 1. make_reg(reg: mreg_t, _size: int) -> None - make_reg(self, reg, _size) + # 0: make_reg(reg: mreg_t) -> None - @param reg: mreg_t - @param _size: int + Create a register operand. + + + # 1: make_reg(reg: mreg_t, _size: int) -> None -ida_hexrays.mop_t.make_reg_pair (method) - make_reg_pair(self, loreg, hireg, halfsize) - Create pair of registers. - - @param loreg: (C++: int) register holding the low part of the value - @param hireg: (C++: int) register holding the high part of the value - @param halfsize: (C++: int) the size of each of loreg/hireg +ida_hexrays.mop_t.make_reg_pair(self, loreg: int, hireg: int, halfsize: int) -> None + Create pair of registers. + + @param loreg: register holding the low part of the value + @param hireg: register holding the high part of the value + @param halfsize: the size of each of loreg/hireg -ida_hexrays.mop_t.make_second_half (method) - make_second_half(self, width) -> bool - Make the second part of the operand. This function does not care about the - memory endianness - - @param width: (C++: int) the desired size of the operand part in bytes - @return: success +ida_hexrays.mop_t.make_second_half(self, width: int) -> bool + Make the second part of the operand. This function does not care about the memory endianness + + @param width: the desired size of the operand part in bytes + @returns success -ida_hexrays.mop_t.make_stkvar (method) - make_stkvar(self, mba, off) - - @param mba: mba_t * - @param off: sval_t +ida_hexrays.mop_t.make_stkvar(self, mba: "mba_t", off: int) -> None -ida_hexrays.mop_t.may_use_aliased_memory (method) - may_use_aliased_memory(self) -> bool +ida_hexrays.mop_t.may_use_aliased_memory(self) -> bool Is it possible for the operand to use aliased memory? -ida_hexrays.mop_t.oprops (variable) +ida_hexrays.mop_t.oprops Operand properties. -ida_hexrays.mop_t.preserve_side_effects (method) - preserve_side_effects(self, blk, top, moved_calls=None) -> bool - Move subinstructions with side effects out of the operand. If we decide to - delete an instruction operand, it is a good idea to call this function. - Alternatively we should skip such operands by calling mop_t::has_side_effects() - For example, if we transform: jnz x, x, @blk => goto @blk then we must call this - function before deleting the X operands. - - @param blk: (C++: mblock_t *) current block - @param top: (C++: minsn_t *) top level instruction that contains our operand - @param moved_calls: (C++: bool *) pointer to the boolean that will track if all side effects - get handled correctly. must be false initially. - @return: false failed to preserve a side effect, it is not safe to delete the - operand true no side effects or successfully preserved them +ida_hexrays.mop_t.preserve_side_effects(self, blk: "mblock_t", top: "minsn_t", moved_calls: "bool *" = None) -> bool + Move subinstructions with side effects out of the operand. If we decide to delete an instruction operand, it is a good idea to call this function. Alternatively we should skip such operands by calling mop_t::has_side_effects() For example, if we transform: jnz x, x, @blk => goto @blk then we must call this function before deleting the X operands. + + @param blk: current block + @param top: top level instruction that contains our operand + @param moved_calls: pointer to the boolean that will track if all side effects get handled correctly. must be false initially. + @returns false failed to preserve a side effect, it is not safe to delete the operand true no side effects or successfully preserved them -ida_hexrays.mop_t.probably_floating (method) - probably_floating(self) -> bool +ida_hexrays.mop_t.probably_floating(self) -> bool -ida_hexrays.mop_t.replace_by (method) +ida_hexrays.mop_t.replace_by(self, o) -ida_hexrays.mop_t.set_impptr_done (method) - set_impptr_done(self) +ida_hexrays.mop_t.set_impptr_done(self) -> None -ida_hexrays.mop_t.set_lowaddr (method) - set_lowaddr(self) +ida_hexrays.mop_t.set_lowaddr(self) -> None -ida_hexrays.mop_t.set_udt (method) - set_udt(self) +ida_hexrays.mop_t.set_udt(self) -> None -ida_hexrays.mop_t.set_undef_val (method) - set_undef_val(self) +ida_hexrays.mop_t.set_undef_val(self) -> None -ida_hexrays.mop_t.shift_mop (method) - shift_mop(self, offset) -> bool - Shift the operand. This function shifts only the beginning of the operand. The - operand size will be changed. Examples: shift_mop(AH.1, -1) -> AX.2 - shift_mop(qword_00000008.8, 4) -> dword_0000000C.4 shift_mop(xdu.8(op.4), 4) -> - #0.4 shift_mop(#0x12345678.4, 3) -> #12.1 - - @param offset: (C++: int) shift count (the number of bytes to shift) - @return: success +ida_hexrays.mop_t.shift_mop(self, offset: int) -> bool + Shift the operand. This function shifts only the beginning of the operand. The operand size will be changed. Examples: shift_mop(AH.1, -1) -> AX.2 shift_mop(qword_00000008.8, 4) -> dword_0000000C.4 shift_mop(xdu.8(op.4), 4) -> #0.4 shift_mop(#0x12345678.4, 3) -> #12.1 + + @param offset: shift count (the number of bytes to shift) + @returns success -ida_hexrays.mop_t.signed_value (method) - signed_value(self) -> int64 +ida_hexrays.mop_t.signed_value(self) -> "int64" -ida_hexrays.mop_t.size (variable) - Operand size. Usually it is 1,2,4,8 or NOSIZE but for UDTs other sizes are - permitted +ida_hexrays.mop_t.size + Operand size. Usually it is 1,2,4,8 or NOSIZE but for UDTs other sizes are permitted + -ida_hexrays.mop_t.swap (method) - swap(self, rop) - - @param rop: mop_t & +ida_hexrays.mop_t.swap(self, rop: "mop_t") -> None -ida_hexrays.mop_t.t (variable) +ida_hexrays.mop_t.t Operand type. -ida_hexrays.mop_t.unsigned_value (method) - unsigned_value(self) -> uint64 +ida_hexrays.mop_t.t + Operand type. -ida_hexrays.mop_t.update_numop_value (method) - update_numop_value(self, val) - - @param val: uint64 +ida_hexrays.mop_t.unsigned_value(self) -> "uint64" -ida_hexrays.mop_t.valnum (variable) - Value number. Zero means unknown. Operands with the same value number are equal. +ida_hexrays.mop_t.update_numop_value(self, val: "uint64") -> None -ida_hexrays.mop_t.value (method) - value(self, is_signed) -> uint64 - Retrieve value of a constant integer operand. These functions can be called only - for mop_n operands. See is_constant() that can be called on any operand. - - @param is_signed: (C++: bool) +ida_hexrays.mop_t.valnum + Value number. Zero means unknown. Operands with the same value number are equal. + -ida_hexrays.mop_t.zero (method) - zero(self) +ida_hexrays.mop_t.value(self, is_signed: bool) -> "uint64" + Retrieve value of a constant integer operand. These functions can be called only for mop_n operands. See is_constant() that can be called on any operand. + -ida_hexrays.mop_v (variable) +ida_hexrays.mop_t.zero(self) -> None + +ida_hexrays.mop_v global variable -ida_hexrays.mop_visitor_t (class) - Proxy of C++ mop_visitor_t class. +ida_hexrays.mop_visitor_t -ida_hexrays.mop_visitor_t.__disown__ (method) +ida_hexrays.mop_visitor_t.__disown__(self) -ida_hexrays.mop_visitor_t.__init__ (method) - __init__(self, _mba=None, _blk=None, _topins=None) -> mop_visitor_t - - @param _mba: mba_t * - @param _blk: mblock_t * - @param _topins: minsn_t * +ida_hexrays.mop_visitor_t.__init__(self, _mba: "mba_t" = None, _blk: "mblock_t" = None, _topins: "minsn_t" = None) -ida_hexrays.mop_visitor_t.prune (variable) - Should skip sub-operands of the current operand? visit_mop() may set - 'prune=true' for that. +ida_hexrays.mop_visitor_t.prune + Should skip sub-operands of the current operand? visit_mop() may set 'prune=true' for that. + -ida_hexrays.mop_visitor_t.visit_mop (method) - visit_mop(self, op, type, is_target) -> int - - @param op: mop_t * - @param type: tinfo_t const * - @param is_target: bool +ida_hexrays.mop_visitor_t.visit_mop(self, op: "mop_t", type: "tinfo_t", is_target: bool) -> int -ida_hexrays.mop_z (variable) +ida_hexrays.mop_z none -ida_hexrays.mopvec_t (class) - Proxy of C++ qvector< mop_t > class. +ida_hexrays.mopvec_t -ida_hexrays.mopvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< mop_t > const & +ida_hexrays.mopvec_t.__eq__(self, r: "mopvec_t") -> bool -ida_hexrays.mopvec_t.__getitem__ (method) - __getitem__(self, i) -> mop_t - - @param i: size_t +ida_hexrays.mopvec_t.__getitem__(self, i: "size_t") -> "mop_t const &" -ida_hexrays.mopvec_t.__init__ (method) - __init__(self) -> mopvec_t - __init__(self, x) -> mopvec_t - - @param x: qvector< mop_t > const & +ida_hexrays.mopvec_t.__init__(self, *args) -ida_hexrays.mopvec_t.__len__ (method) - __len__(self) -> size_t +ida_hexrays.mopvec_t.__len__(self) -> "size_t" -ida_hexrays.mopvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< mop_t > const & +ida_hexrays.mopvec_t.__ne__(self, r: "mopvec_t") -> bool -ida_hexrays.mopvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: mop_t const & +ida_hexrays.mopvec_t.__setitem__(self, i: "size_t", v: "mop_t") -> None -ida_hexrays.mopvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: mop_t const & +ida_hexrays.mopvec_t._del(self, x: "mop_t") -> bool -ida_hexrays.mopvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: mop_t const & +ida_hexrays.mopvec_t.add_unique(self, x: "mop_t") -> bool -ida_hexrays.mopvec_t.at (method) - at(self, _idx) -> mop_t - - @param _idx: size_t +ida_hexrays.mopvec_t.append(self, x: "mop_t") -> None -ida_hexrays.mopvec_t.begin (method) - begin(self) -> mop_t +ida_hexrays.mopvec_t.at(self, _idx: "size_t") -> "mop_t const &" -ida_hexrays.mopvec_t.capacity (method) - capacity(self) -> size_t +ida_hexrays.mopvec_t.begin(self, *args) -> "qvector< mop_t >::const_iterator" -ida_hexrays.mopvec_t.clear (method) - clear(self) +ida_hexrays.mopvec_t.capacity(self) -> "size_t" -ida_hexrays.mopvec_t.empty (method) - empty(self) -> bool +ida_hexrays.mopvec_t.clear(self) -> None -ida_hexrays.mopvec_t.end (method) - end(self) -> mop_t +ida_hexrays.mopvec_t.empty(self) -> bool -ida_hexrays.mopvec_t.erase (method) - erase(self, it) -> mop_t - - @param it: qvector< mop_t >::iterator - - erase(self, first, last) -> mop_t - - @param first: qvector< mop_t >::iterator - @param last: qvector< mop_t >::iterator +ida_hexrays.mopvec_t.end(self, *args) -> "qvector< mop_t >::const_iterator" -ida_hexrays.mopvec_t.extract (method) - extract(self) -> mop_t +ida_hexrays.mopvec_t.erase(self, *args) -> "qvector< mop_t >::iterator" -ida_hexrays.mopvec_t.find (method) - find(self, x) -> mop_t - - @param x: mop_t const & +ida_hexrays.mopvec_t.extend(self, x: "mopvec_t") -> None -ida_hexrays.mopvec_t.grow (method) - grow(self, x=mop_t()) - - @param x: mop_t const & +ida_hexrays.mopvec_t.extract(self) -> "mop_t *" -ida_hexrays.mopvec_t.has (method) - has(self, x) -> bool - - @param x: mop_t const & +ida_hexrays.mopvec_t.find(self, *args) -> "qvector< mop_t >::const_iterator" -ida_hexrays.mopvec_t.inject (method) - inject(self, s, len) - - @param s: mop_t * - @param len: size_t +ida_hexrays.mopvec_t.grow(self, *args) -> None -ida_hexrays.mopvec_t.insert (method) - insert(self, it, x) -> mop_t - - @param it: qvector< mop_t >::iterator - @param x: mop_t const & +ida_hexrays.mopvec_t.has(self, x: "mop_t") -> bool -ida_hexrays.mopvec_t.pop_back (method) - pop_back(self) +ida_hexrays.mopvec_t.inject(self, s: "mop_t", len: "size_t") -> None -ida_hexrays.mopvec_t.push_back (method) - push_back(self, x) - - @param x: mop_t const & - - push_back(self) -> mop_t +ida_hexrays.mopvec_t.insert(self, it: "mop_t", x: "mop_t") -> "qvector< mop_t >::iterator" -ida_hexrays.mopvec_t.qclear (method) - qclear(self) +ida_hexrays.mopvec_t.pop_back(self) -> None -ida_hexrays.mopvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_hexrays.mopvec_t.push_back(self, *args) -> "mop_t &" -ida_hexrays.mopvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: mop_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_hexrays.mopvec_t.qclear(self) -> None -ida_hexrays.mopvec_t.size (method) - size(self) -> size_t +ida_hexrays.mopvec_t.reserve(self, cnt: "size_t") -> None -ida_hexrays.mopvec_t.swap (method) - swap(self, r) - - @param r: qvector< mop_t > & +ida_hexrays.mopvec_t.resize(self, *args) -> None -ida_hexrays.mopvec_t.truncate (method) - truncate(self) +ida_hexrays.mopvec_t.size(self) -> "size_t" -ida_hexrays.mreg2reg (function) - mreg2reg(reg, width) -> int - Map a microregister to a processor register. - - @param reg: (C++: mreg_t) microregister number - @param width: (C++: int) size of microregister in bytes - @return: processor register id or -1 +ida_hexrays.mopvec_t.swap(self, r: "mopvec_t") -> None -ida_hexrays.must_mcode_close_block (function) - 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: (C++: mcode_t) instruction opcode - @param including_calls: (C++: bool) 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: unknown calls (is_unknown_call) are - considered as closing opcodes. +ida_hexrays.mopvec_t.truncate(self) -> None -ida_hexrays.negate_mcode_relation (function) - negate_mcode_relation(code) -> mcode_t - - @param code: enum mcode_t +ida_hexrays.mreg2reg(reg: "mreg_t", width: int) -> int + Map a microregister to a processor register. + + @param reg: microregister number + @param width: size of microregister in bytes + @returns processor register id or -1 -ida_hexrays.negated_relation (function) - negated_relation(op) -> ctype_t +ida_hexrays.must_mcode_close_block(mcode: "mcode_t", including_calls: bool) -> 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 + @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: unknown calls (is_unknown_call) are considered as closing opcodes. + +ida_hexrays.negate_mcode_relation(code: "mcode_t") -> "mcode_t" + +ida_hexrays.negated_relation(op: "ctype_t") -> "ctype_t" Negate a comparison operator. For example, cot_sge becomes cot_slt. - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.new_block (function) +ida_hexrays.new_block() Create a new block-statement. -ida_hexrays.number_format_t (class) - Proxy of C++ number_format_t class. +ida_hexrays.node_bitset_t -ida_hexrays.number_format_t.__init__ (method) - __init__(self, _opnum=0) -> number_format_t - - @param _opnum: int +ida_hexrays.node_bitset_t.__init__(self, *args) -ida_hexrays.number_format_t.flags (variable) - ida flags, which describe number radix, enum, etc +ida_hexrays.number_format_t -ida_hexrays.number_format_t.flags32 (variable) +ida_hexrays.number_format_t.__init__(self, _opnum: int = 0) + +ida_hexrays.number_format_t.flags + ida flags, which describe number radix, enum, etc + + +ida_hexrays.number_format_t.flags32 low 32bit of flags (for compatibility) -ida_hexrays.number_format_t.get_radix (method) - get_radix(self) -> int - Get number radix - - @return: 2,8,10, or 16 +ida_hexrays.number_format_t.get_radix(self) -> int + Get number radix + + @returns 2,8,10, or 16 -ida_hexrays.number_format_t.has_unmutable_type (method) - has_unmutable_type(self) -> bool +ida_hexrays.number_format_t.has_unmutable_type(self) -> bool -ida_hexrays.number_format_t.is_char (method) - is_char(self) -> bool +ida_hexrays.number_format_t.is_char(self) -> bool Is a character constant? -ida_hexrays.number_format_t.is_dec (method) - is_dec(self) -> bool +ida_hexrays.number_format_t.is_dec(self) -> bool Is a decimal number? -ida_hexrays.number_format_t.is_enum (method) - is_enum(self) -> bool +ida_hexrays.number_format_t.is_enum(self) -> bool Is a symbolic constant? -ida_hexrays.number_format_t.is_fixed (method) - is_fixed(self) -> bool - Is number representation fixed? Fixed representation cannot be modified by the - decompiler +ida_hexrays.number_format_t.is_fixed(self) -> bool + Is number representation fixed? Fixed representation cannot be modified by the decompiler + -ida_hexrays.number_format_t.is_hex (method) - is_hex(self) -> bool +ida_hexrays.number_format_t.is_hex(self) -> bool Is a hexadecimal number? -ida_hexrays.number_format_t.is_numop (method) - is_numop(self) -> bool +ida_hexrays.number_format_t.is_numop(self) -> bool Is a number? -ida_hexrays.number_format_t.is_oct (method) - is_oct(self) -> bool +ida_hexrays.number_format_t.is_oct(self) -> bool Is a octal number? -ida_hexrays.number_format_t.is_stroff (method) - is_stroff(self) -> bool +ida_hexrays.number_format_t.is_stroff(self) -> bool Is a structure field offset? -ida_hexrays.number_format_t.needs_to_be_inverted (method) - needs_to_be_inverted(self) -> bool - Does the number need to be negated or bitwise negated? Returns true if the user - requested a negation but it is not done yet +ida_hexrays.number_format_t.needs_to_be_inverted(self) -> bool + Does the number need to be negated or bitwise negated? Returns true if the user requested a negation but it is not done yet + -ida_hexrays.number_format_t.opnum (variable) +ida_hexrays.number_format_t.opnum operand number: 0..UA_MAXOP -ida_hexrays.number_format_t.org_nbytes (variable) +ida_hexrays.number_format_t.org_nbytes original number size in bytes -ida_hexrays.number_format_t.serial (variable) +ida_hexrays.number_format_t.props + properties: combination of NF_ bits (Number format property bits) + + +ida_hexrays.number_format_t.serial for enums: constant serial number -ida_hexrays.number_format_t.type_name (variable) +ida_hexrays.number_format_t.type_name for stroffs: structure for offsetof() - for enums: enum name + for enums: enum name + -ida_hexrays.op_parent_info_t (class) - Proxy of C++ op_parent_info_t class. +ida_hexrays.op_parent_info_t -ida_hexrays.op_parent_info_t.__init__ (method) - __init__(self, _mba=None, _blk=None, _topins=None) -> op_parent_info_t - - @param _mba: mba_t * - @param _blk: mblock_t * - @param _topins: minsn_t * +ida_hexrays.op_parent_info_t.__disown__(self) -ida_hexrays.op_uses_x (function) - op_uses_x(op) -> bool +ida_hexrays.op_parent_info_t.__init__(self, _mba: "mba_t" = None, _blk: "mblock_t" = None, _topins: "minsn_t" = None) + +ida_hexrays.op_uses_x(op: "ctype_t") -> bool Does operator use the 'x' field of cexpr_t? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.op_uses_y (function) - op_uses_y(op) -> bool +ida_hexrays.op_uses_y(op: "ctype_t") -> bool Does operator use the 'y' field of cexpr_t? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.op_uses_z (function) - op_uses_z(op) -> bool +ida_hexrays.op_uses_z(op: "ctype_t") -> bool Does operator use the 'z' field of cexpr_t? - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.open_pseudocode (function) - open_pseudocode(ea, flags) -> vdui_t - Open pseudocode window. The specified function is decompiled and the pseudocode - window is opened. - - @param ea: (C++: ea_t) function to decompile - @param flags: (C++: int) a combination of OPF_ flags - @return: false if failed +ida_hexrays.open_pseudocode(ea: ida_idaapi.ea_t, flags: int) -> "vdui_t *" + Open pseudocode window. The specified function is decompiled and the pseudocode window is opened. + + @param ea: function to decompile + @param flags: a combination of OPF_ flags + @returns false if failed -ida_hexrays.operand_locator_t (class) - Proxy of C++ operand_locator_t class. +ida_hexrays.operand_locator_t -ida_hexrays.operand_locator_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: operand_locator_t const & +ida_hexrays.operand_locator_t.__eq__(self, r: "operand_locator_t") -> bool -ida_hexrays.operand_locator_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: operand_locator_t const & +ida_hexrays.operand_locator_t.__ge__(self, r: "operand_locator_t") -> bool -ida_hexrays.operand_locator_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: operand_locator_t const & +ida_hexrays.operand_locator_t.__gt__(self, r: "operand_locator_t") -> bool -ida_hexrays.operand_locator_t.__init__ (method) - __init__(self, _ea, _opnum) -> operand_locator_t - - @param _ea: ea_t - @param _opnum: int +ida_hexrays.operand_locator_t.__init__(self, _ea: ida_idaapi.ea_t, _opnum: int) -ida_hexrays.operand_locator_t.__le__ (method) - __le__(self, r) -> bool - - @param r: operand_locator_t const & +ida_hexrays.operand_locator_t.__le__(self, r: "operand_locator_t") -> bool -ida_hexrays.operand_locator_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: operand_locator_t const & +ida_hexrays.operand_locator_t.__lt__(self, r: "operand_locator_t") -> bool -ida_hexrays.operand_locator_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: operand_locator_t const & +ida_hexrays.operand_locator_t.__ne__(self, r: "operand_locator_t") -> bool -ida_hexrays.operand_locator_t.compare (method) - compare(self, r) -> int - - @param r: operand_locator_t const & +ida_hexrays.operand_locator_t.compare(self, r: "operand_locator_t") -> int -ida_hexrays.operand_locator_t.ea (variable) +ida_hexrays.operand_locator_t.ea address of the original processor instruction -ida_hexrays.operand_locator_t.opnum (variable) +ida_hexrays.operand_locator_t.opnum operand number in the instruction -ida_hexrays.optblock_t (class) - Proxy of C++ optblock_t class. +ida_hexrays.optblock_t -ida_hexrays.optblock_t.__disown__ (method) +ida_hexrays.optblock_t.__disown__(self) -ida_hexrays.optblock_t.__init__ (method) - __init__(self) -> optblock_t - - @param self: PyObject * +ida_hexrays.optblock_t.__init__(self) -ida_hexrays.optblock_t.func (method) - func(self, blk) -> int - Optimize a block. This function usually performs the optimizations that require - analyzing the entire block and/or its neighbors. For example it can recognize - patterns and perform conversions like: b0: b0: ... ... jnz x, 0, @b2 => jnz x, - 0, @b2 b1: b1: add x, 0, y mov x, y ... ... - - @param blk: (C++: mblock_t *) Basic block to optimize as a whole. - @return: number of changes made to the block. See also mark_lists_dirty. +ida_hexrays.optblock_t.func(self, blk: "mblock_t") -> int + Optimize a block. This function usually performs the optimizations that require analyzing the entire block and/or its neighbors. For example it can recognize patterns and perform conversions like: b0: b0: ... ... jnz x, 0, @b2 => jnz x, 0, @b2 b1: b1: add x, 0, y mov x, y ... ... + + @param blk: Basic block to optimize as a whole. + @returns number of changes made to the block. See also mark_lists_dirty. -ida_hexrays.optblock_t.install (method) - install(self) +ida_hexrays.optblock_t.install(self) -> None -ida_hexrays.optblock_t.remove (method) - remove(self) -> bool +ida_hexrays.optblock_t.remove(self) -> bool -ida_hexrays.optinsn_t (class) - Proxy of C++ optinsn_t class. +ida_hexrays.optinsn_t -ida_hexrays.optinsn_t.__disown__ (method) +ida_hexrays.optinsn_t.__disown__(self) -ida_hexrays.optinsn_t.__init__ (method) - __init__(self) -> optinsn_t - - @param self: PyObject * +ida_hexrays.optinsn_t.__init__(self) -ida_hexrays.optinsn_t.func (method) - func(self, blk, ins, optflags) -> int - Optimize an instruction. - - @param blk: (C++: mblock_t *) current basic block. maybe nullptr, which means that the instruction - must be optimized without context - @param ins: (C++: minsn_t *) instruction to optimize; it is always a top-level instruction. the - callback may not delete the instruction but may convert it into nop - (see mblock_t::make_nop). to optimize sub-instructions, visit them - using minsn_visitor_t. sub-instructions may not be converted into - nop but can be converted to "mov x,x". for example: add x,0,x => mov - x,x this callback may change other instructions in the block, but - should do this with care, e.g. to no break the propagation algorithm - if called with OPTI_NO_LDXOPT. - @param optflags: (C++: int) combination of optimization flags bits - @return: number of changes made to the instruction. if after this call the - instruction's use/def lists have changed, you must mark the block level - lists as dirty (see mark_lists_dirty) +ida_hexrays.optinsn_t.func(self, blk: "mblock_t", ins: "minsn_t", optflags: int) -> int + Optimize an instruction. + + @param blk: current basic block. maybe nullptr, which means that the instruction must be optimized without context + @param ins: instruction to optimize; it is always a top-level instruction. the callback may not delete the instruction but may convert it into nop (see mblock_t::make_nop). to optimize sub-instructions, visit them using minsn_visitor_t. sub-instructions may not be converted into nop but can be converted to "mov x,x". for example: add x,0,x => mov x,x this callback may change other instructions in the block, but should do this with care, e.g. to no break the propagation algorithm if called with OPTI_NO_LDXOPT. + @param optflags: combination of optimization flags bits + @returns number of changes made to the instruction. if after this call the instruction's use/def lists have changed, you must mark the block level lists as dirty (see mark_lists_dirty) -ida_hexrays.optinsn_t.install (method) - install(self) +ida_hexrays.optinsn_t.install(self) -> None -ida_hexrays.optinsn_t.remove (method) - remove(self) -> bool +ida_hexrays.optinsn_t.remove(self) -> bool -ida_hexrays.parse_user_call (function) - parse_user_call(udc, decl, silent) -> bool - Convert function type declaration into internal structure - - @param udc: (C++: udcall_t *) - pointer to output structure - @param decl: (C++: const char *) - function type declaration - @param silent: (C++: bool) - if TRUE: do not show warning in case of incorrect type - @return: success +ida_hexrays.parse_user_call(udc: "udcall_t", decl: str, silent: bool) -> bool + Convert function type declaration into internal structure + + @param udc: - pointer to output structure + @param decl: - function type declaration + @param silent: - if TRUE: do not show warning in case of incorrect type + @returns success -ida_hexrays.partial_type_num (function) - partial_type_num(type) -> int - Calculate number of partial subtypes. - - @param type: (C++: const tinfo_t &) tinfo_t const & - @return: number of partial subtypes. The bigger is this number, the uglier is - the type. +ida_hexrays.partial_type_num(type: "tinfo_t") -> int + Calculate number of partial subtypes. + + @returns number of partial subtypes. The bigger is this number, the uglier is the type. -ida_hexrays.print_vdloc (function) - print_vdloc(loc, nbytes) -> str - Print vdloc. Since vdloc does not always carry the size info, we pass it as - NBYTES.. - - @param loc: (C++: const vdloc_t &) vdloc_t const & - @param nbytes: (C++: int) +ida_hexrays.print_vdloc(loc: "vdloc_t", nbytes: int) -> str + Print vdloc. Since vdloc does not always carry the size info, we pass it as NBYTES.. + -ida_hexrays.property_op_to_typename (function) +ida_hexrays.property_op_to_typename(self) -ida_hexrays.qstring_printer_t (class) - Proxy of C++ qstring_printer_t class. +ida_hexrays.qstring_printer_t -ida_hexrays.qstring_printer_t.__init__ (method) - __init__(self, f, tags) -> qstring_printer_t - - @param f: cfunc_t const * - @param tags: bool +ida_hexrays.qstring_printer_t.__init__(self, f: "cfunc_t", tags: bool) -ida_hexrays.qstring_printer_t._print (method) - _print(self, indent, format) -> int - - Parameters - ---------- - indent: int - format: char const * +ida_hexrays.qstring_printer_t._print(self, indent: int, format: str) -> int -ida_hexrays.qstring_printer_t.get_s (method) - get_s(self) -> qstring +ida_hexrays.qstring_printer_t.get_s(self) -> str -ida_hexrays.qstring_printer_t.s (variable) - Reference to the output string +ida_hexrays.qstring_printer_t.s + Reference to the output string + -ida_hexrays.qstring_printer_t.with_tags (variable) +ida_hexrays.qstring_printer_t.s + Reference to the output string + + +ida_hexrays.qstring_printer_t.with_tags Generate output with color tags. -ida_hexrays.qswap (function) - qswap(a, b) - - @param a: cinsn_t & - @param b: cinsn_t & - -ida_hexrays.qvector_carg_t (class) - Proxy of C++ qvector< carg_t > class. - -ida_hexrays.qvector_carg_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< carg_t > const & - -ida_hexrays.qvector_carg_t.__getitem__ (method) - __getitem__(self, i) -> carg_t - - @param i: size_t - -ida_hexrays.qvector_carg_t.__init__ (method) - __init__(self) -> qvector_carg_t - __init__(self, x) -> qvector_carg_t - - @param x: qvector< carg_t > const & - -ida_hexrays.qvector_carg_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.qvector_carg_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< carg_t > const & - -ida_hexrays.qvector_carg_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: carg_t const & - -ida_hexrays.qvector_carg_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: carg_t const & - -ida_hexrays.qvector_carg_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: carg_t const & - -ida_hexrays.qvector_carg_t.at (method) - at(self, _idx) -> carg_t - - @param _idx: size_t - -ida_hexrays.qvector_carg_t.begin (method) - begin(self) -> carg_t - -ida_hexrays.qvector_carg_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.qvector_carg_t.clear (method) - clear(self) - -ida_hexrays.qvector_carg_t.empty (method) - empty(self) -> bool - -ida_hexrays.qvector_carg_t.end (method) - end(self) -> carg_t - -ida_hexrays.qvector_carg_t.erase (method) - erase(self, it) -> carg_t - - @param it: qvector< carg_t >::iterator - - erase(self, first, last) -> carg_t - - @param first: qvector< carg_t >::iterator - @param last: qvector< carg_t >::iterator - -ida_hexrays.qvector_carg_t.extract (method) - extract(self) -> carg_t - -ida_hexrays.qvector_carg_t.find (method) - find(self, x) -> carg_t - - @param x: carg_t const & - -ida_hexrays.qvector_carg_t.grow (method) - grow(self, x=carg_t()) - - @param x: carg_t const & - -ida_hexrays.qvector_carg_t.has (method) - has(self, x) -> bool - - @param x: carg_t const & - -ida_hexrays.qvector_carg_t.inject (method) - inject(self, s, len) - - @param s: carg_t * - @param len: size_t - -ida_hexrays.qvector_carg_t.insert (method) - insert(self, it, x) -> carg_t - - @param it: qvector< carg_t >::iterator - @param x: carg_t const & - -ida_hexrays.qvector_carg_t.pop_back (method) - pop_back(self) - -ida_hexrays.qvector_carg_t.push_back (method) - push_back(self, x) - - @param x: carg_t const & - - push_back(self) -> carg_t - -ida_hexrays.qvector_carg_t.qclear (method) - qclear(self) - -ida_hexrays.qvector_carg_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.qvector_carg_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: carg_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.qvector_carg_t.size (method) - size(self) -> size_t - -ida_hexrays.qvector_carg_t.swap (method) - swap(self, r) - - @param r: qvector< carg_t > & - -ida_hexrays.qvector_carg_t.truncate (method) - truncate(self) - -ida_hexrays.qvector_ccase_t (class) - Proxy of C++ qvector< ccase_t > class. - -ida_hexrays.qvector_ccase_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< ccase_t > const & - -ida_hexrays.qvector_ccase_t.__getitem__ (method) - __getitem__(self, i) -> ccase_t - - @param i: size_t - -ida_hexrays.qvector_ccase_t.__init__ (method) - __init__(self) -> qvector_ccase_t - __init__(self, x) -> qvector_ccase_t - - @param x: qvector< ccase_t > const & - -ida_hexrays.qvector_ccase_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.qvector_ccase_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< ccase_t > const & - -ida_hexrays.qvector_ccase_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: ccase_t const & - -ida_hexrays.qvector_ccase_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: ccase_t const & - -ida_hexrays.qvector_ccase_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: ccase_t const & - -ida_hexrays.qvector_ccase_t.at (method) - at(self, _idx) -> ccase_t - - @param _idx: size_t - -ida_hexrays.qvector_ccase_t.begin (method) - begin(self) -> ccase_t - -ida_hexrays.qvector_ccase_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.qvector_ccase_t.clear (method) - clear(self) - -ida_hexrays.qvector_ccase_t.empty (method) - empty(self) -> bool - -ida_hexrays.qvector_ccase_t.end (method) - end(self) -> ccase_t - -ida_hexrays.qvector_ccase_t.erase (method) - erase(self, it) -> ccase_t - - @param it: qvector< ccase_t >::iterator - - erase(self, first, last) -> ccase_t - - @param first: qvector< ccase_t >::iterator - @param last: qvector< ccase_t >::iterator - -ida_hexrays.qvector_ccase_t.extract (method) - extract(self) -> ccase_t - -ida_hexrays.qvector_ccase_t.find (method) - find(self, x) -> ccase_t - - @param x: ccase_t const & - -ida_hexrays.qvector_ccase_t.grow (method) - grow(self, x=ccase_t()) - - @param x: ccase_t const & - -ida_hexrays.qvector_ccase_t.has (method) - has(self, x) -> bool - - @param x: ccase_t const & - -ida_hexrays.qvector_ccase_t.inject (method) - inject(self, s, len) - - @param s: ccase_t * - @param len: size_t - -ida_hexrays.qvector_ccase_t.insert (method) - insert(self, it, x) -> ccase_t - - @param it: qvector< ccase_t >::iterator - @param x: ccase_t const & - -ida_hexrays.qvector_ccase_t.pop_back (method) - pop_back(self) - -ida_hexrays.qvector_ccase_t.push_back (method) - push_back(self, x) - - @param x: ccase_t const & - - push_back(self) -> ccase_t - -ida_hexrays.qvector_ccase_t.qclear (method) - qclear(self) - -ida_hexrays.qvector_ccase_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.qvector_ccase_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: ccase_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.qvector_ccase_t.size (method) - size(self) -> size_t - -ida_hexrays.qvector_ccase_t.swap (method) - swap(self, r) - - @param r: qvector< ccase_t > & - -ida_hexrays.qvector_ccase_t.truncate (method) - truncate(self) - -ida_hexrays.qvector_history_t (class) - Proxy of C++ qvector< history_item_t > class. - -ida_hexrays.qvector_history_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< history_item_t > const & - -ida_hexrays.qvector_history_t.__getitem__ (method) - __getitem__(self, i) -> history_item_t - - @param i: size_t - -ida_hexrays.qvector_history_t.__init__ (method) - __init__(self) -> qvector_history_t - __init__(self, x) -> qvector_history_t - - @param x: qvector< history_item_t > const & - -ida_hexrays.qvector_history_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.qvector_history_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< history_item_t > const & - -ida_hexrays.qvector_history_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: history_item_t const & - -ida_hexrays.qvector_history_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: history_item_t const & - -ida_hexrays.qvector_history_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: history_item_t const & - -ida_hexrays.qvector_history_t.at (method) - at(self, _idx) -> history_item_t - - @param _idx: size_t - -ida_hexrays.qvector_history_t.begin (method) - begin(self) -> history_item_t - -ida_hexrays.qvector_history_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.qvector_history_t.clear (method) - clear(self) - -ida_hexrays.qvector_history_t.empty (method) - empty(self) -> bool - -ida_hexrays.qvector_history_t.end (method) - end(self) -> history_item_t - -ida_hexrays.qvector_history_t.erase (method) - erase(self, it) -> history_item_t - - @param it: qvector< history_item_t >::iterator - - erase(self, first, last) -> history_item_t - - @param first: qvector< history_item_t >::iterator - @param last: qvector< history_item_t >::iterator - -ida_hexrays.qvector_history_t.extract (method) - extract(self) -> history_item_t - -ida_hexrays.qvector_history_t.find (method) - find(self, x) -> history_item_t - - @param x: history_item_t const & - -ida_hexrays.qvector_history_t.grow (method) - grow(self, x=history_item_t()) - - @param x: history_item_t const & - -ida_hexrays.qvector_history_t.has (method) - has(self, x) -> bool - - @param x: history_item_t const & - -ida_hexrays.qvector_history_t.inject (method) - inject(self, s, len) - - @param s: history_item_t * - @param len: size_t - -ida_hexrays.qvector_history_t.insert (method) - insert(self, it, x) -> history_item_t - - @param it: qvector< history_item_t >::iterator - @param x: history_item_t const & - -ida_hexrays.qvector_history_t.pop_back (method) - pop_back(self) - -ida_hexrays.qvector_history_t.push_back (method) - push_back(self, x) - - @param x: history_item_t const & - - push_back(self) -> history_item_t - -ida_hexrays.qvector_history_t.qclear (method) - qclear(self) - -ida_hexrays.qvector_history_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.qvector_history_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: history_item_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.qvector_history_t.size (method) - size(self) -> size_t - -ida_hexrays.qvector_history_t.swap (method) - swap(self, r) - - @param r: qvector< history_item_t > & - -ida_hexrays.qvector_history_t.truncate (method) - truncate(self) - -ida_hexrays.qvector_lvar_t (class) - Proxy of C++ qvector< lvar_t > class. - -ida_hexrays.qvector_lvar_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< lvar_t > const & - -ida_hexrays.qvector_lvar_t.__getitem__ (method) - __getitem__(self, i) -> lvar_t - - @param i: size_t - -ida_hexrays.qvector_lvar_t.__init__ (method) - __init__(self) -> qvector_lvar_t - __init__(self, x) -> qvector_lvar_t - - @param x: qvector< lvar_t > const & - -ida_hexrays.qvector_lvar_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.qvector_lvar_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< lvar_t > const & - -ida_hexrays.qvector_lvar_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: lvar_t const & - -ida_hexrays.qvector_lvar_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: lvar_t const & - -ida_hexrays.qvector_lvar_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: lvar_t const & - -ida_hexrays.qvector_lvar_t.at (method) - at(self, _idx) -> lvar_t - - @param _idx: size_t - -ida_hexrays.qvector_lvar_t.begin (method) - begin(self) -> lvar_t - -ida_hexrays.qvector_lvar_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.qvector_lvar_t.clear (method) - clear(self) - -ida_hexrays.qvector_lvar_t.empty (method) - empty(self) -> bool - -ida_hexrays.qvector_lvar_t.end (method) - end(self) -> lvar_t - -ida_hexrays.qvector_lvar_t.erase (method) - erase(self, it) -> lvar_t - - @param it: qvector< lvar_t >::iterator - - erase(self, first, last) -> lvar_t - - @param first: qvector< lvar_t >::iterator - @param last: qvector< lvar_t >::iterator - -ida_hexrays.qvector_lvar_t.extract (method) - extract(self) -> lvar_t - -ida_hexrays.qvector_lvar_t.find (method) - find(self, x) -> lvar_t - - @param x: lvar_t const & - -ida_hexrays.qvector_lvar_t.grow (method) - grow(self, x=lvar_t()) - - @param x: lvar_t const & - -ida_hexrays.qvector_lvar_t.has (method) - has(self, x) -> bool - - @param x: lvar_t const & - -ida_hexrays.qvector_lvar_t.inject (method) - inject(self, s, len) - - @param s: lvar_t * - @param len: size_t - -ida_hexrays.qvector_lvar_t.insert (method) - insert(self, it, x) -> lvar_t - - @param it: qvector< lvar_t >::iterator - @param x: lvar_t const & - -ida_hexrays.qvector_lvar_t.pop_back (method) - pop_back(self) - -ida_hexrays.qvector_lvar_t.push_back (method) - push_back(self, x) - - @param x: lvar_t const & - - push_back(self) -> lvar_t - -ida_hexrays.qvector_lvar_t.qclear (method) - qclear(self) - -ida_hexrays.qvector_lvar_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.qvector_lvar_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: lvar_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.qvector_lvar_t.size (method) - size(self) -> size_t - -ida_hexrays.qvector_lvar_t.swap (method) - swap(self, r) - - @param r: qvector< lvar_t > & - -ida_hexrays.qvector_lvar_t.truncate (method) - truncate(self) - -ida_hexrays.reg2mreg (function) - reg2mreg(reg) -> mreg_t - Map a processor register to a microregister. - - @param reg: (C++: int) processor register number - @return: microregister register id or mr_none - -ida_hexrays.remitem (function) - remitem(e) - - @param e: citem_t const * - -ida_hexrays.remove_hexrays_callback (function) - Deprecated. Please use Hexrays_Hooks instead - Uninstall handler for decompiler events. - - @return: number of uninstalled handlers. - -ida_hexrays.rename_lvar (function) - rename_lvar(func_ea, oldname, newname) -> bool - Rename a local variable. - - @param func_ea: (C++: ea_t) function start address - @param oldname: (C++: const char *) old name of the variable - @param newname: (C++: const char *) new name of the variable - @return: success This is a convenience function. For bulk renaming consider - using modify_user_lvars. - -ida_hexrays.restore_user_cmts (function) - restore_user_cmts(func_ea) -> user_cmts_t - Restore user defined comments from the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @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 (function) - restore_user_defined_calls(udcalls, func_ea) -> bool - Restore user defined function calls from the database. - - @param udcalls: (C++: udcall_map_t *) ptr to output buffer - @param func_ea: (C++: ea_t) entry address of the function - @return: success - -ida_hexrays.restore_user_iflags (function) - restore_user_iflags(func_ea) -> user_iflags_t - Restore user defined citem iflags from the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @return: collection of user defined iflags. The returned object must be deleted - by the caller using delete_user_iflags() - -ida_hexrays.restore_user_labels (function) - restore_user_labels(func_ea) -> user_labels_t - Restore user defined labels from the database. - - @param func_ea: (C++: ea_t) the entry address of the function, ignored if FUNC != nullptr - @return: collection of user defined labels. The returned object must be deleted - by the caller using delete_user_labels() - -ida_hexrays.restore_user_labels2 (function) - restore_user_labels2(func_ea, func=None) -> user_labels_t - - @param func_ea: ea_t - @param func: cfunc_t const * - -ida_hexrays.restore_user_lvar_settings (function) - restore_user_lvar_settings(lvinf, func_ea) -> bool - Restore user defined local variable settings in the database. - - @param lvinf: (C++: lvar_uservec_t *) ptr to output buffer - @param func_ea: (C++: ea_t) entry address of the function - @return: success - -ida_hexrays.restore_user_numforms (function) - restore_user_numforms(func_ea) -> user_numforms_t - Restore user defined number formats from the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @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 (function) - restore_user_unions(func_ea) -> user_unions_t - Restore user defined union field selections from the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @return: collection of union field selections The returned object must be - deleted by the caller using delete_user_unions() - -ida_hexrays.rlist_t (class) - Proxy of C++ rlist_t class. - -ida_hexrays.rlist_t.__init__ (method) - __init__(self) -> rlist_t - __init__(self, m) -> rlist_t - - @param m: rlist_t const & - - __init__(self, reg, width) -> rlist_t - - @param reg: mreg_t - @param width: int - -ida_hexrays.rlist_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.save_user_cmts (function) - save_user_cmts(func_ea, user_cmts) - Save user defined comments into the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @param user_cmts: (C++: const user_cmts_t *) collection of user defined comments - -ida_hexrays.save_user_defined_calls (function) - save_user_defined_calls(func_ea, udcalls) - Save user defined local function calls into the database. - - @param func_ea: (C++: ea_t) entry address of the function - @param udcalls: (C++: const udcall_map_t &) user-specified info about user defined function calls - -ida_hexrays.save_user_iflags (function) - save_user_iflags(func_ea, iflags) - Save user defined citem iflags into the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @param iflags: (C++: const user_iflags_t *) collection of user defined citem iflags - -ida_hexrays.save_user_labels (function) - save_user_labels(func_ea, user_labels) - Save user defined labels into the database. - - @param func_ea: (C++: ea_t) the entry address of the function, ignored if FUNC != nullptr - @param user_labels: (C++: const user_labels_t *) collection of user defined labels - -ida_hexrays.save_user_labels2 (function) - save_user_labels2(func_ea, user_labels, func=None) - - @param func_ea: ea_t - @param user_labels: user_labels_t const * - @param func: cfunc_t const * - -ida_hexrays.save_user_lvar_settings (function) - save_user_lvar_settings(func_ea, lvinf) - Save user defined local variable settings into the database. - - @param func_ea: (C++: ea_t) entry address of the function - @param lvinf: (C++: const lvar_uservec_t &) user-specified info about local variables - -ida_hexrays.save_user_numforms (function) - save_user_numforms(func_ea, numforms) - Save user defined number formats into the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @param numforms: (C++: const user_numforms_t *) collection of user defined comments - -ida_hexrays.save_user_unions (function) - save_user_unions(func_ea, unions) - Save user defined union field selections into the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @param unions: (C++: const user_unions_t *) collection of union field selections - -ida_hexrays.scif_t (class) - Proxy of C++ scif_t class. - -ida_hexrays.scif_t.__init__ (method) - __init__(self, _mba, tif, n=None) -> scif_t - - @param _mba: mba_t * - @param tif: tinfo_t * - @param n: qstring * - -ida_hexrays.scif_t.mba (variable) - Pointer to the parent mba_t object. Some operations may convert a scattered - operand into something simpler, (a stack operand, for example). We will need to - create stkvar_ref_t at that moment, this is why we need this pointer. See notes - for lvar_ref_t::mba. - -ida_hexrays.scif_t.name (variable) - Usually scattered operands are created from a function prototype, which has the - name information. We preserve it and use it to name the corresponding local - variable. - -ida_hexrays.scif_t.type (variable) - Scattered operands always have type info assigned to them because without it we - won't be able to manipulte them. - -ida_hexrays.scif_visitor_t (class) - Proxy of C++ scif_visitor_t class. - -ida_hexrays.scif_visitor_t.__disown__ (method) - -ida_hexrays.scif_visitor_t.__init__ (method) - __init__(self) -> scif_visitor_t - - @param self: PyObject * - -ida_hexrays.scif_visitor_t.visit_scif_mop (method) - visit_scif_mop(self, r, off) -> int - - @param r: mop_t const & - @param off: int - -ida_hexrays.select_udt_by_offset (function) - select_udt_by_offset(udts, ops, applicator) -> int - Select UDT - - @param udts: (C++: const qvector< tinfo_t > *) list of UDT tinfo_t for the selection, if nullptr or empty then - UDTs from the "Local types" will be used - @param ops: (C++: const ui_stroff_ops_t &) operands - @param applicator: (C++: ui_stroff_applicator_t &) callback will be called to apply the selection for every - operand - -ida_hexrays.send_database (function) - 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: (C++: const hexrays_failure_t &) failure description object. Empty hexrays_failure_t object can be - used if error information is not available. - @param silent: (C++: bool) if false, a dialog box will be displayed before sending the - database. - -ida_hexrays.set2jcnd (function) - set2jcnd(code) -> mcode_t - - @param code: enum mcode_t - -ida_hexrays.set_type (function) - set_type(id, tif, source, force=False) -> bool - Set a global type. - - @param id: (C++: uval_t) address or id of the object - @param tif: (C++: const tinfo_t &) new type info - @param source: (C++: type_source_t) where the type comes from - @param force: (C++: bool) true means to set the type as is, false means to merge the new - type with the possibly existing old type info. - @return: success - -ida_hexrays.simple_graph_t (class) - Proxy of C++ simple_graph_t class. - -ida_hexrays.simple_graph_t.__init__ (method) - -ida_hexrays.stkvar_ref_t (class) - Proxy of C++ stkvar_ref_t class. - -ida_hexrays.stkvar_ref_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: stkvar_ref_t const & - -ida_hexrays.stkvar_ref_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: stkvar_ref_t const & - -ida_hexrays.stkvar_ref_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: stkvar_ref_t const & - -ida_hexrays.stkvar_ref_t.__init__ (method) - __init__(self, m, o) -> stkvar_ref_t - - @param m: mba_t * - @param o: sval_t - -ida_hexrays.stkvar_ref_t.__le__ (method) - __le__(self, r) -> bool - - @param r: stkvar_ref_t const & - -ida_hexrays.stkvar_ref_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: stkvar_ref_t const & - -ida_hexrays.stkvar_ref_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: stkvar_ref_t const & - -ida_hexrays.stkvar_ref_t.compare (method) - compare(self, r) -> int - - @param r: stkvar_ref_t const & - -ida_hexrays.stkvar_ref_t.get_stkvar (method) - get_stkvar(self, p_off=None) -> member_t * - Retrieve the referenced stack variable. - - @param p_off: (C++: uval_t *) if specified, will hold IDA stkoff after the call. - @return: pointer to the stack variable - -ida_hexrays.stkvar_ref_t.mba (variable) - Pointer to the parent mba_t object. We need it in order to retrieve the - referenced stack variable. See notes for lvar_ref_t::mba. - -ida_hexrays.stkvar_ref_t.off (variable) - Offset to the stack variable from the bottom of the stack frame. It is called - 'decompiler stkoff' and it is different from IDA stkoff. See a note and a - picture about 'decompiler stkoff' below. - -ida_hexrays.stkvar_ref_t.swap (method) - swap(self, r) - - @param r: stkvar_ref_t & - -ida_hexrays.swap_mcode_relation (function) - swap_mcode_relation(code) -> mcode_t - - @param code: enum mcode_t - -ida_hexrays.swapped_relation (function) - swapped_relation(op) -> ctype_t +ida_hexrays.qswap(a: "cinsn_t", b: "cinsn_t") -> None + +ida_hexrays.qvector_carg_t + +ida_hexrays.qvector_carg_t.__eq__(self, r: "qvector_carg_t") -> bool + +ida_hexrays.qvector_carg_t.__getitem__(self, i: "size_t") -> "carg_t const &" + +ida_hexrays.qvector_carg_t.__init__(self, *args) + +ida_hexrays.qvector_carg_t.__len__(self) -> "size_t" + +ida_hexrays.qvector_carg_t.__ne__(self, r: "qvector_carg_t") -> bool + +ida_hexrays.qvector_carg_t.__setitem__(self, i: "size_t", v: "carg_t") -> None + +ida_hexrays.qvector_carg_t._del(self, x: "carg_t") -> bool + +ida_hexrays.qvector_carg_t.add_unique(self, x: "carg_t") -> bool + +ida_hexrays.qvector_carg_t.append(self, x: "carg_t") -> None + +ida_hexrays.qvector_carg_t.at(self, _idx: "size_t") -> "carg_t const &" + +ida_hexrays.qvector_carg_t.begin(self, *args) -> "qvector< carg_t >::const_iterator" + +ida_hexrays.qvector_carg_t.capacity(self) -> "size_t" + +ida_hexrays.qvector_carg_t.clear(self) -> None + +ida_hexrays.qvector_carg_t.empty(self) -> bool + +ida_hexrays.qvector_carg_t.end(self, *args) -> "qvector< carg_t >::const_iterator" + +ida_hexrays.qvector_carg_t.erase(self, *args) -> "qvector< carg_t >::iterator" + +ida_hexrays.qvector_carg_t.extend(self, x: "qvector_carg_t") -> None + +ida_hexrays.qvector_carg_t.extract(self) -> "carg_t *" + +ida_hexrays.qvector_carg_t.find(self, *args) -> "qvector< carg_t >::const_iterator" + +ida_hexrays.qvector_carg_t.grow(self, *args) -> None + +ida_hexrays.qvector_carg_t.has(self, x: "carg_t") -> bool + +ida_hexrays.qvector_carg_t.inject(self, s: "carg_t", len: "size_t") -> None + +ida_hexrays.qvector_carg_t.insert(self, it: "carg_t", x: "carg_t") -> "qvector< carg_t >::iterator" + +ida_hexrays.qvector_carg_t.pop_back(self) -> None + +ida_hexrays.qvector_carg_t.push_back(self, *args) -> "carg_t &" + +ida_hexrays.qvector_carg_t.qclear(self) -> None + +ida_hexrays.qvector_carg_t.reserve(self, cnt: "size_t") -> None + +ida_hexrays.qvector_carg_t.resize(self, *args) -> None + +ida_hexrays.qvector_carg_t.size(self) -> "size_t" + +ida_hexrays.qvector_carg_t.swap(self, r: "qvector_carg_t") -> None + +ida_hexrays.qvector_carg_t.truncate(self) -> None + +ida_hexrays.qvector_catchexprs_t + +ida_hexrays.qvector_catchexprs_t.__eq__(self, r: "qvector_catchexprs_t") -> bool + +ida_hexrays.qvector_catchexprs_t.__getitem__(self, i: "size_t") -> "catchexpr_t const &" + +ida_hexrays.qvector_catchexprs_t.__init__(self, *args) + +ida_hexrays.qvector_catchexprs_t.__len__(self) -> "size_t" + +ida_hexrays.qvector_catchexprs_t.__ne__(self, r: "qvector_catchexprs_t") -> bool + +ida_hexrays.qvector_catchexprs_t.__setitem__(self, i: "size_t", v: "catchexpr_t") -> None + +ida_hexrays.qvector_catchexprs_t._del(self, x: "catchexpr_t") -> bool + +ida_hexrays.qvector_catchexprs_t.add_unique(self, x: "catchexpr_t") -> bool + +ida_hexrays.qvector_catchexprs_t.append(self, x: "catchexpr_t") -> None + +ida_hexrays.qvector_catchexprs_t.at(self, _idx: "size_t") -> "catchexpr_t const &" + +ida_hexrays.qvector_catchexprs_t.begin(self, *args) -> "qvector< catchexpr_t >::const_iterator" + +ida_hexrays.qvector_catchexprs_t.capacity(self) -> "size_t" + +ida_hexrays.qvector_catchexprs_t.clear(self) -> None + +ida_hexrays.qvector_catchexprs_t.empty(self) -> bool + +ida_hexrays.qvector_catchexprs_t.end(self, *args) -> "qvector< catchexpr_t >::const_iterator" + +ida_hexrays.qvector_catchexprs_t.erase(self, *args) -> "qvector< catchexpr_t >::iterator" + +ida_hexrays.qvector_catchexprs_t.extend(self, x: "qvector_catchexprs_t") -> None + +ida_hexrays.qvector_catchexprs_t.extract(self) -> "catchexpr_t *" + +ida_hexrays.qvector_catchexprs_t.find(self, *args) -> "qvector< catchexpr_t >::const_iterator" + +ida_hexrays.qvector_catchexprs_t.grow(self, *args) -> None + +ida_hexrays.qvector_catchexprs_t.has(self, x: "catchexpr_t") -> bool + +ida_hexrays.qvector_catchexprs_t.inject(self, s: "catchexpr_t", len: "size_t") -> None + +ida_hexrays.qvector_catchexprs_t.insert(self, it: "catchexpr_t", x: "catchexpr_t") -> "qvector< catchexpr_t >::iterator" + +ida_hexrays.qvector_catchexprs_t.pop_back(self) -> None + +ida_hexrays.qvector_catchexprs_t.push_back(self, *args) -> "catchexpr_t &" + +ida_hexrays.qvector_catchexprs_t.qclear(self) -> None + +ida_hexrays.qvector_catchexprs_t.reserve(self, cnt: "size_t") -> None + +ida_hexrays.qvector_catchexprs_t.resize(self, *args) -> None + +ida_hexrays.qvector_catchexprs_t.size(self) -> "size_t" + +ida_hexrays.qvector_catchexprs_t.swap(self, r: "qvector_catchexprs_t") -> None + +ida_hexrays.qvector_catchexprs_t.truncate(self) -> None + +ida_hexrays.qvector_ccase_t + +ida_hexrays.qvector_ccase_t.__eq__(self, r: "qvector_ccase_t") -> bool + +ida_hexrays.qvector_ccase_t.__getitem__(self, i: "size_t") -> "ccase_t const &" + +ida_hexrays.qvector_ccase_t.__init__(self, *args) + +ida_hexrays.qvector_ccase_t.__len__(self) -> "size_t" + +ida_hexrays.qvector_ccase_t.__ne__(self, r: "qvector_ccase_t") -> bool + +ida_hexrays.qvector_ccase_t.__setitem__(self, i: "size_t", v: "ccase_t") -> None + +ida_hexrays.qvector_ccase_t._del(self, x: "ccase_t") -> bool + +ida_hexrays.qvector_ccase_t.add_unique(self, x: "ccase_t") -> bool + +ida_hexrays.qvector_ccase_t.append(self, x: "ccase_t") -> None + +ida_hexrays.qvector_ccase_t.at(self, _idx: "size_t") -> "ccase_t const &" + +ida_hexrays.qvector_ccase_t.begin(self, *args) -> "qvector< ccase_t >::const_iterator" + +ida_hexrays.qvector_ccase_t.capacity(self) -> "size_t" + +ida_hexrays.qvector_ccase_t.clear(self) -> None + +ida_hexrays.qvector_ccase_t.empty(self) -> bool + +ida_hexrays.qvector_ccase_t.end(self, *args) -> "qvector< ccase_t >::const_iterator" + +ida_hexrays.qvector_ccase_t.erase(self, *args) -> "qvector< ccase_t >::iterator" + +ida_hexrays.qvector_ccase_t.extend(self, x: "qvector_ccase_t") -> None + +ida_hexrays.qvector_ccase_t.extract(self) -> "ccase_t *" + +ida_hexrays.qvector_ccase_t.find(self, *args) -> "qvector< ccase_t >::const_iterator" + +ida_hexrays.qvector_ccase_t.grow(self, *args) -> None + +ida_hexrays.qvector_ccase_t.has(self, x: "ccase_t") -> bool + +ida_hexrays.qvector_ccase_t.inject(self, s: "ccase_t", len: "size_t") -> None + +ida_hexrays.qvector_ccase_t.insert(self, it: "ccase_t", x: "ccase_t") -> "qvector< ccase_t >::iterator" + +ida_hexrays.qvector_ccase_t.pop_back(self) -> None + +ida_hexrays.qvector_ccase_t.push_back(self, *args) -> "ccase_t &" + +ida_hexrays.qvector_ccase_t.qclear(self) -> None + +ida_hexrays.qvector_ccase_t.reserve(self, cnt: "size_t") -> None + +ida_hexrays.qvector_ccase_t.resize(self, *args) -> None + +ida_hexrays.qvector_ccase_t.size(self) -> "size_t" + +ida_hexrays.qvector_ccase_t.swap(self, r: "qvector_ccase_t") -> None + +ida_hexrays.qvector_ccase_t.truncate(self) -> None + +ida_hexrays.qvector_ccatchvec_t + +ida_hexrays.qvector_ccatchvec_t.__eq__(self, r: "qvector_ccatchvec_t") -> bool + +ida_hexrays.qvector_ccatchvec_t.__getitem__(self, i: "size_t") -> "ccatch_t const &" + +ida_hexrays.qvector_ccatchvec_t.__init__(self, *args) + +ida_hexrays.qvector_ccatchvec_t.__len__(self) -> "size_t" + +ida_hexrays.qvector_ccatchvec_t.__ne__(self, r: "qvector_ccatchvec_t") -> bool + +ida_hexrays.qvector_ccatchvec_t.__setitem__(self, i: "size_t", v: "ccatch_t") -> None + +ida_hexrays.qvector_ccatchvec_t._del(self, x: "ccatch_t") -> bool + +ida_hexrays.qvector_ccatchvec_t.add_unique(self, x: "ccatch_t") -> bool + +ida_hexrays.qvector_ccatchvec_t.append(self, x: "ccatch_t") -> None + +ida_hexrays.qvector_ccatchvec_t.at(self, _idx: "size_t") -> "ccatch_t const &" + +ida_hexrays.qvector_ccatchvec_t.begin(self, *args) -> "qvector< ccatch_t >::const_iterator" + +ida_hexrays.qvector_ccatchvec_t.capacity(self) -> "size_t" + +ida_hexrays.qvector_ccatchvec_t.clear(self) -> None + +ida_hexrays.qvector_ccatchvec_t.empty(self) -> bool + +ida_hexrays.qvector_ccatchvec_t.end(self, *args) -> "qvector< ccatch_t >::const_iterator" + +ida_hexrays.qvector_ccatchvec_t.erase(self, *args) -> "qvector< ccatch_t >::iterator" + +ida_hexrays.qvector_ccatchvec_t.extend(self, x: "qvector_ccatchvec_t") -> None + +ida_hexrays.qvector_ccatchvec_t.extract(self) -> "ccatch_t *" + +ida_hexrays.qvector_ccatchvec_t.find(self, *args) -> "qvector< ccatch_t >::const_iterator" + +ida_hexrays.qvector_ccatchvec_t.grow(self, *args) -> None + +ida_hexrays.qvector_ccatchvec_t.has(self, x: "ccatch_t") -> bool + +ida_hexrays.qvector_ccatchvec_t.inject(self, s: "ccatch_t", len: "size_t") -> None + +ida_hexrays.qvector_ccatchvec_t.insert(self, it: "ccatch_t", x: "ccatch_t") -> "qvector< ccatch_t >::iterator" + +ida_hexrays.qvector_ccatchvec_t.pop_back(self) -> None + +ida_hexrays.qvector_ccatchvec_t.push_back(self, *args) -> "ccatch_t &" + +ida_hexrays.qvector_ccatchvec_t.qclear(self) -> None + +ida_hexrays.qvector_ccatchvec_t.reserve(self, cnt: "size_t") -> None + +ida_hexrays.qvector_ccatchvec_t.resize(self, *args) -> None + +ida_hexrays.qvector_ccatchvec_t.size(self) -> "size_t" + +ida_hexrays.qvector_ccatchvec_t.swap(self, r: "qvector_ccatchvec_t") -> None + +ida_hexrays.qvector_ccatchvec_t.truncate(self) -> None + +ida_hexrays.qvector_history_t + +ida_hexrays.qvector_history_t.__eq__(self, r: "qvector_history_t") -> bool + +ida_hexrays.qvector_history_t.__getitem__(self, i: "size_t") -> "history_item_t const &" + +ida_hexrays.qvector_history_t.__init__(self, *args) + +ida_hexrays.qvector_history_t.__len__(self) -> "size_t" + +ida_hexrays.qvector_history_t.__ne__(self, r: "qvector_history_t") -> bool + +ida_hexrays.qvector_history_t.__setitem__(self, i: "size_t", v: "history_item_t") -> None + +ida_hexrays.qvector_history_t._del(self, x: "history_item_t") -> bool + +ida_hexrays.qvector_history_t.add_unique(self, x: "history_item_t") -> bool + +ida_hexrays.qvector_history_t.append(self, x: "history_item_t") -> None + +ida_hexrays.qvector_history_t.at(self, _idx: "size_t") -> "history_item_t const &" + +ida_hexrays.qvector_history_t.begin(self, *args) -> "qvector< history_item_t >::const_iterator" + +ida_hexrays.qvector_history_t.capacity(self) -> "size_t" + +ida_hexrays.qvector_history_t.clear(self) -> None + +ida_hexrays.qvector_history_t.empty(self) -> bool + +ida_hexrays.qvector_history_t.end(self, *args) -> "qvector< history_item_t >::const_iterator" + +ida_hexrays.qvector_history_t.erase(self, *args) -> "qvector< history_item_t >::iterator" + +ida_hexrays.qvector_history_t.extend(self, x: "qvector_history_t") -> None + +ida_hexrays.qvector_history_t.extract(self) -> "history_item_t *" + +ida_hexrays.qvector_history_t.find(self, *args) -> "qvector< history_item_t >::const_iterator" + +ida_hexrays.qvector_history_t.grow(self, *args) -> None + +ida_hexrays.qvector_history_t.has(self, x: "history_item_t") -> bool + +ida_hexrays.qvector_history_t.inject(self, s: "history_item_t", len: "size_t") -> None + +ida_hexrays.qvector_history_t.insert(self, it: "history_item_t", x: "history_item_t") -> "qvector< history_item_t >::iterator" + +ida_hexrays.qvector_history_t.pop_back(self) -> None + +ida_hexrays.qvector_history_t.push_back(self, *args) -> "history_item_t &" + +ida_hexrays.qvector_history_t.qclear(self) -> None + +ida_hexrays.qvector_history_t.reserve(self, cnt: "size_t") -> None + +ida_hexrays.qvector_history_t.resize(self, *args) -> None + +ida_hexrays.qvector_history_t.size(self) -> "size_t" + +ida_hexrays.qvector_history_t.swap(self, r: "qvector_history_t") -> None + +ida_hexrays.qvector_history_t.truncate(self) -> None + +ida_hexrays.qvector_lvar_t + +ida_hexrays.qvector_lvar_t.__eq__(self, r: "qvector_lvar_t") -> bool + +ida_hexrays.qvector_lvar_t.__getitem__(self, i: "size_t") -> "lvar_t const &" + +ida_hexrays.qvector_lvar_t.__init__(self, *args) + +ida_hexrays.qvector_lvar_t.__len__(self) -> "size_t" + +ida_hexrays.qvector_lvar_t.__ne__(self, r: "qvector_lvar_t") -> bool + +ida_hexrays.qvector_lvar_t.__setitem__(self, i: "size_t", v: "lvar_t") -> None + +ida_hexrays.qvector_lvar_t._del(self, x: "lvar_t") -> bool + +ida_hexrays.qvector_lvar_t.add_unique(self, x: "lvar_t") -> bool + +ida_hexrays.qvector_lvar_t.append(self, x: "lvar_t") -> None + +ida_hexrays.qvector_lvar_t.at(self, _idx: "size_t") -> "lvar_t const &" + +ida_hexrays.qvector_lvar_t.begin(self, *args) -> "qvector< lvar_t >::const_iterator" + +ida_hexrays.qvector_lvar_t.capacity(self) -> "size_t" + +ida_hexrays.qvector_lvar_t.clear(self) -> None + +ida_hexrays.qvector_lvar_t.empty(self) -> bool + +ida_hexrays.qvector_lvar_t.end(self, *args) -> "qvector< lvar_t >::const_iterator" + +ida_hexrays.qvector_lvar_t.erase(self, *args) -> "qvector< lvar_t >::iterator" + +ida_hexrays.qvector_lvar_t.extend(self, x: "qvector_lvar_t") -> None + +ida_hexrays.qvector_lvar_t.extract(self) -> "lvar_t *" + +ida_hexrays.qvector_lvar_t.find(self, *args) -> "qvector< lvar_t >::const_iterator" + +ida_hexrays.qvector_lvar_t.grow(self, *args) -> None + +ida_hexrays.qvector_lvar_t.has(self, x: "lvar_t") -> bool + +ida_hexrays.qvector_lvar_t.inject(self, s: "lvar_t", len: "size_t") -> None + +ida_hexrays.qvector_lvar_t.insert(self, it: "lvar_t", x: "lvar_t") -> "qvector< lvar_t >::iterator" + +ida_hexrays.qvector_lvar_t.pop_back(self) -> None + +ida_hexrays.qvector_lvar_t.push_back(self, *args) -> "lvar_t &" + +ida_hexrays.qvector_lvar_t.qclear(self) -> None + +ida_hexrays.qvector_lvar_t.reserve(self, cnt: "size_t") -> None + +ida_hexrays.qvector_lvar_t.resize(self, *args) -> None + +ida_hexrays.qvector_lvar_t.size(self) -> "size_t" + +ida_hexrays.qvector_lvar_t.swap(self, r: "qvector_lvar_t") -> None + +ida_hexrays.qvector_lvar_t.truncate(self) -> None + +ida_hexrays.reg2mreg(reg: int) -> "mreg_t" + Map a processor register to a microregister. + + @param reg: processor register number + @returns microregister register id or mr_none + +ida_hexrays.remitem(e: "citem_t") -> None + +ida_hexrays.remove_hexrays_callback(callback) + Uninstall handler for decompiler events. + + @param callback: handler to uninstall + @returns number of uninstalled handlers. + +ida_hexrays.rename_lvar(func_ea: ida_idaapi.ea_t, oldname: str, newname: str) -> bool + Rename a local variable. + + @param func_ea: function start address + @param oldname: old name of the variable + @param newname: new name of the variable + @returns success This is a convenience function. For bulk renaming consider using modify_user_lvars. + +ida_hexrays.restore_user_cmts(func_ea: ida_idaapi.ea_t) -> "user_cmts_t *" + Restore user defined comments from the database. + + @param func_ea: the entry address of the function + @returns collection of user defined comments. The returned object must be deleted by the caller using delete_user_cmts() + +ida_hexrays.restore_user_defined_calls(udcalls: "udcall_map_t *", func_ea: ida_idaapi.ea_t) -> bool + Restore user defined function calls from the database. + + @param udcalls: ptr to output buffer + @param func_ea: entry address of the function + @returns success + +ida_hexrays.restore_user_iflags(func_ea: ida_idaapi.ea_t) -> "user_iflags_t *" + Restore user defined citem iflags from the database. + + @param func_ea: the entry address of the function + @returns collection of user defined iflags. The returned object must be deleted by the caller using delete_user_iflags() + +ida_hexrays.restore_user_labels(func_ea: ida_idaapi.ea_t, func: "cfunc_t" = None) -> "user_labels_t *" + Restore user defined labels from the database. + + @param func_ea: the entry address of the function, ignored if FUNC != nullptr + @param func: pointer to current function + @returns collection of user defined labels. The returned object must be deleted by the caller using delete_user_labels() + +ida_hexrays.restore_user_lvar_settings(lvinf: "lvar_uservec_t", func_ea: ida_idaapi.ea_t) -> bool + Restore user defined local variable settings in the database. + + @param lvinf: ptr to output buffer + @param func_ea: entry address of the function + @returns success + +ida_hexrays.restore_user_numforms(func_ea: ida_idaapi.ea_t) -> "user_numforms_t *" + Restore user defined number formats from the database. + + @param func_ea: the entry address of the function + @returns collection of user defined number formats. The returned object must be deleted by the caller using delete_user_numforms() + +ida_hexrays.restore_user_unions(func_ea: ida_idaapi.ea_t) -> "user_unions_t *" + Restore user defined union field selections from the database. + + @param func_ea: the entry address of the function + @returns collection of union field selections The returned object must be deleted by the caller using delete_user_unions() + +ida_hexrays.rlist_t + +ida_hexrays.rlist_t.__init__(self, *args) + +ida_hexrays.rlist_t.dstr(self) -> str + +ida_hexrays.save_user_cmts(func_ea: ida_idaapi.ea_t, user_cmts: "user_cmts_t") -> None + Save user defined comments into the database. + + @param func_ea: the entry address of the function + @param user_cmts: collection of user defined comments + +ida_hexrays.save_user_defined_calls(func_ea: ida_idaapi.ea_t, udcalls: "udcall_map_t const &") -> None + Save user defined local function calls into the database. + + @param func_ea: entry address of the function + @param udcalls: user-specified info about user defined function calls + +ida_hexrays.save_user_iflags(func_ea: ida_idaapi.ea_t, iflags: "user_iflags_t") -> None + Save user defined citem iflags into the database. + + @param func_ea: the entry address of the function + @param iflags: collection of user defined citem iflags + +ida_hexrays.save_user_labels(func_ea: ida_idaapi.ea_t, user_labels: "user_labels_t", func: "cfunc_t" = None) -> None + Save user defined labels into the database. + + @param func_ea: the entry address of the function, ignored if FUNC != nullptr + @param user_labels: collection of user defined labels + @param func: pointer to current function, if FUNC != nullptr, then save labels using a more stable method that preserves them even when the decompiler output drastically changes + +ida_hexrays.save_user_lvar_settings(func_ea: ida_idaapi.ea_t, lvinf: "lvar_uservec_t") -> None + Save user defined local variable settings into the database. + + @param func_ea: entry address of the function + @param lvinf: user-specified info about local variables + +ida_hexrays.save_user_numforms(func_ea: ida_idaapi.ea_t, numforms: "user_numforms_t") -> None + Save user defined number formats into the database. + + @param func_ea: the entry address of the function + @param numforms: collection of user defined comments + +ida_hexrays.save_user_unions(func_ea: ida_idaapi.ea_t, unions: "user_unions_t") -> None + Save user defined union field selections into the database. + + @param func_ea: the entry address of the function + @param unions: collection of union field selections + +ida_hexrays.scif_t + +ida_hexrays.scif_t.__init__(self, _mba: "mba_t", tif: "tinfo_t", n: str = None) + +ida_hexrays.scif_t.mba + Pointer to the parent mba_t object. Some operations may convert a scattered operand into something simpler, (a stack operand, for example). We will need to create stkvar_ref_t at that moment, this is why we need this pointer. See notes for lvar_ref_t::mba. + + +ida_hexrays.scif_t.name + Usually scattered operands are created from a function prototype, which has the name information. We preserve it and use it to name the corresponding local variable. + + +ida_hexrays.scif_t.type + Scattered operands always have type info assigned to them because without it we won't be able to manipulte them. + + +ida_hexrays.scif_visitor_t + +ida_hexrays.scif_visitor_t.__disown__(self) + +ida_hexrays.scif_visitor_t.__init__(self) + +ida_hexrays.scif_visitor_t.visit_scif_mop(self, r: "mop_t", off: int) -> int + +ida_hexrays.select_udt_by_offset(udts: "qvector< tinfo_t > const *", ops: "ui_stroff_ops_t", applicator: "ui_stroff_applicator_t") -> int + Select UDT + + @param udts: list of UDT tinfo_t for the selection, if nullptr or empty then UDTs from the "Local types" will be used + @param ops: operands + @param applicator: callback will be called to apply the selection for every operand + +ida_hexrays.send_database(err: "hexrays_failure_t", silent: bool) -> None + 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. + @param silent: if false, a dialog box will be displayed before sending the database. + +ida_hexrays.set2jcnd(code: "mcode_t") -> "mcode_t" + +ida_hexrays.set_type(id: int, tif: "tinfo_t", source: "type_source_t", force: bool = False) -> bool + Set a global type. + + @param id: address or id of the object + @param tif: new type info + @param source: where the type comes from + @param force: true means to set the type as is, false means to merge the new type with the possibly existing old type info. + @returns success + +ida_hexrays.simple_graph_t + +ida_hexrays.simple_graph_t.__init__(self, *args, **kwargs) + +ida_hexrays.simple_graph_t.begin(self) -> "simple_graph_t::iterator" + +ida_hexrays.simple_graph_t.compute_dominators(self, domin: "array_of_node_bitset_t", post: bool = False) -> None + +ida_hexrays.simple_graph_t.compute_immediate_dominators(self, domin: "array_of_node_bitset_t", idomin: "intvec_t", post: bool = False) -> None + +ida_hexrays.simple_graph_t.depth_first_postorder(self, post: "node_ordering_t") -> int + +ida_hexrays.simple_graph_t.depth_first_preorder(self, pre: "node_ordering_t") -> int + +ida_hexrays.simple_graph_t.end(self) -> "simple_graph_t::iterator" + +ida_hexrays.simple_graph_t.front(self) -> int + +ida_hexrays.simple_graph_t.goup(self, node: int) -> int + +ida_hexrays.simple_graph_t.inc(self, p: "simple_graph_t::iterator &", n: int = 1) -> None + +ida_hexrays.stkvar_ref_t + +ida_hexrays.stkvar_ref_t.__eq__(self, r: "stkvar_ref_t") -> bool + +ida_hexrays.stkvar_ref_t.__ge__(self, r: "stkvar_ref_t") -> bool + +ida_hexrays.stkvar_ref_t.__gt__(self, r: "stkvar_ref_t") -> bool + +ida_hexrays.stkvar_ref_t.__init__(self, m: "mba_t", o: int) + +ida_hexrays.stkvar_ref_t.__le__(self, r: "stkvar_ref_t") -> bool + +ida_hexrays.stkvar_ref_t.__lt__(self, r: "stkvar_ref_t") -> bool + +ida_hexrays.stkvar_ref_t.__ne__(self, r: "stkvar_ref_t") -> bool + +ida_hexrays.stkvar_ref_t.compare(self, r: "stkvar_ref_t") -> int + +ida_hexrays.stkvar_ref_t.get_stkvar(self, udm: "udm_t" = None, p_idaoff: "uval_t *" = None) -> "ssize_t" + Retrieve the referenced stack variable. + + @param udm: stkvar, may be nullptr + @param p_idaoff: if specified, will hold IDA stkoff after the call. + @returns index of stkvar in the frame or -1 + +ida_hexrays.stkvar_ref_t.mba + Pointer to the parent mba_t object. We need it in order to retrieve the referenced stack variable. See notes for lvar_ref_t::mba. + + +ida_hexrays.stkvar_ref_t.off + Offset to the stack variable from the bottom of the stack frame. It is called 'decompiler stkoff' and it is different from IDA stkoff. See a note and a picture about 'decompiler stkoff' below. + + +ida_hexrays.stkvar_ref_t.swap(self, r: "stkvar_ref_t") -> None + +ida_hexrays.swap_mcode_relation(code: "mcode_t") -> "mcode_t" + +ida_hexrays.swapped_relation(op: "ctype_t") -> "ctype_t" Swap a comparison operator. For example, cot_sge becomes cot_sle. - - @param op: (C++: ctype_t) enum ctype_t -ida_hexrays.term_hexrays_plugin (function) - term_hexrays_plugin() +ida_hexrays.term_hexrays_plugin() -> None Stop working with hex-rays decompiler. -ida_hexrays.treeloc_t (class) - Proxy of C++ treeloc_t class. +ida_hexrays.treeloc_t -ida_hexrays.treeloc_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: treeloc_t const & +ida_hexrays.treeloc_t.__eq__(self, r: "treeloc_t") -> bool -ida_hexrays.treeloc_t.__init__ (method) - __init__(self) -> treeloc_t +ida_hexrays.treeloc_t.__init__(self) -ida_hexrays.treeloc_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: treeloc_t const & +ida_hexrays.treeloc_t.__lt__(self, r: "treeloc_t") -> bool -ida_hexrays.udc_filter_t (class) - Proxy of C++ udc_filter_t class. +ida_hexrays.udc_filter_t -ida_hexrays.udc_filter_t.__disown__ (method) +ida_hexrays.udc_filter_t.__disown__(self) -ida_hexrays.udc_filter_t.__init__ (method) - __init__(self) -> udc_filter_t - - @param self: PyObject * +ida_hexrays.udc_filter_t.__init__(self) -ida_hexrays.udc_filter_t.apply (method) - apply(self, cdg) -> merror_t - generate microcode for an instruction - - @param cdg: (C++: codegen_t &) - @return: MERR_... code: MERR_OK - user-defined microcode generated, go to the - next instruction MERR_INSN - not generated - the caller should try the - standard way else - error +ida_hexrays.udc_filter_t.apply(self, cdg: "codegen_t") -> "merror_t" + generate microcode for an instruction + + @returns MERR_... code: MERR_OK - user-defined microcode generated, go to the next instruction MERR_INSN - not generated - the caller should try the standard way else - error -ida_hexrays.udc_filter_t.cleanup (method) - cleanup(self) - Cleanup the filter This function properly clears type information associated to - this filter. +ida_hexrays.udc_filter_t.cleanup(self) -> None + Cleanup the filter This function properly clears type information associated to this filter. + -ida_hexrays.udc_filter_t.empty (method) - empty(self) -> bool +ida_hexrays.udc_filter_t.empty(self) -> bool -ida_hexrays.udc_filter_t.init (method) - init(self, decl) -> bool - - @param decl: char const * +ida_hexrays.udc_filter_t.init(self, decl: str) -> bool -ida_hexrays.udc_filter_t.install (method) - install(self) +ida_hexrays.udc_filter_t.install(self) -> None -ida_hexrays.udc_filter_t.match (method) - match(self, cdg) -> bool +ida_hexrays.udc_filter_t.match(self, cdg: "codegen_t") -> bool return true if the filter object should be applied to given instruction - - @param cdg: (C++: codegen_t &) -ida_hexrays.udc_filter_t.remove (method) - remove(self) -> bool +ida_hexrays.udc_filter_t.remove(self) -> bool -ida_hexrays.udcall_map_begin (function) - udcall_map_begin(map) -> udcall_map_iterator_t +ida_hexrays.udcall_map_begin(map: "udcall_map_t const *") -> "udcall_map_iterator_t" Get iterator pointing to the beginning of udcall_map_t. - - @param map: (C++: const udcall_map_t *) udcall_map_t const * -ida_hexrays.udcall_map_clear (function) - udcall_map_clear(map) +ida_hexrays.udcall_map_clear(map: "udcall_map_t *") -> None Clear udcall_map_t. - - @param map: (C++: udcall_map_t *) -ida_hexrays.udcall_map_end (function) - udcall_map_end(map) -> udcall_map_iterator_t +ida_hexrays.udcall_map_end(map: "udcall_map_t const *") -> "udcall_map_iterator_t" Get iterator pointing to the end of udcall_map_t. - - @param map: (C++: const udcall_map_t *) udcall_map_t const * -ida_hexrays.udcall_map_erase (function) - udcall_map_erase(map, p) +ida_hexrays.udcall_map_erase(map: "udcall_map_t *", p: "udcall_map_iterator_t") -> None 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 (function) - udcall_map_find(map, key) -> udcall_map_iterator_t +ida_hexrays.udcall_map_find(map: "udcall_map_t const *", key: "ea_t const &") -> "udcall_map_iterator_t" Find the specified key in udcall_map_t. - - @param map: (C++: const udcall_map_t *) udcall_map_t const * - @param key: (C++: const ea_t &) ea_t const & -ida_hexrays.udcall_map_first (function) - udcall_map_first(p) -> ea_t const & +ida_hexrays.udcall_map_first(p: "udcall_map_iterator_t") -> "ea_t const &" Get reference to the current map key. - - @param p: (C++: udcall_map_iterator_t) -ida_hexrays.udcall_map_free (function) - udcall_map_free(map) +ida_hexrays.udcall_map_free(map: "udcall_map_t *") -> None Delete udcall_map_t instance. - - @param map: (C++: udcall_map_t *) -ida_hexrays.udcall_map_insert (function) - udcall_map_insert(map, key, val) -> udcall_map_iterator_t +ida_hexrays.udcall_map_insert(map: "udcall_map_t *", key: "ea_t const &", val: "udcall_t") -> "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 &) ea_t const & - @param val: (C++: const udcall_t &) udcall_t const & -ida_hexrays.udcall_map_iterator_t (class) - Proxy of C++ udcall_map_iterator_t class. +ida_hexrays.udcall_map_iterator_t -ida_hexrays.udcall_map_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: udcall_map_iterator_t const & +ida_hexrays.udcall_map_iterator_t.__eq__(self, p: "udcall_map_iterator_t") -> bool -ida_hexrays.udcall_map_iterator_t.__init__ (method) - __init__(self) -> udcall_map_iterator_t +ida_hexrays.udcall_map_iterator_t.__init__(self) -ida_hexrays.udcall_map_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: udcall_map_iterator_t const & +ida_hexrays.udcall_map_iterator_t.__ne__(self, p: "udcall_map_iterator_t") -> bool -ida_hexrays.udcall_map_new (function) - udcall_map_new() -> udcall_map_t * +ida_hexrays.udcall_map_new() -> "udcall_map_t *" Create a new udcall_map_t instance. -ida_hexrays.udcall_map_next (function) - udcall_map_next(p) -> udcall_map_iterator_t +ida_hexrays.udcall_map_next(p: "udcall_map_iterator_t") -> "udcall_map_iterator_t" Move to the next element. - - @param p: (C++: udcall_map_iterator_t) -ida_hexrays.udcall_map_prev (function) - udcall_map_prev(p) -> udcall_map_iterator_t +ida_hexrays.udcall_map_prev(p: "udcall_map_iterator_t") -> "udcall_map_iterator_t" Move to the previous element. - - @param p: (C++: udcall_map_iterator_t) -ida_hexrays.udcall_map_second (function) - udcall_map_second(p) -> udcall_t +ida_hexrays.udcall_map_second(p: "udcall_map_iterator_t") -> "udcall_t &" Get reference to the current map value. - - @param p: (C++: udcall_map_iterator_t) -ida_hexrays.udcall_map_size (function) - udcall_map_size(map) -> size_t +ida_hexrays.udcall_map_size(map: "udcall_map_t *") -> "size_t" Get size of udcall_map_t. - - @param map: (C++: udcall_map_t *) -ida_hexrays.udcall_t (class) - Proxy of C++ udcall_t class. +ida_hexrays.udcall_t -ida_hexrays.udcall_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: udcall_t const & +ida_hexrays.udcall_t.__eq__(self, r: "udcall_t") -> bool -ida_hexrays.udcall_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: udcall_t const & +ida_hexrays.udcall_t.__ge__(self, r: "udcall_t") -> bool -ida_hexrays.udcall_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: udcall_t const & +ida_hexrays.udcall_t.__gt__(self, r: "udcall_t") -> bool -ida_hexrays.udcall_t.__init__ (method) - __init__(self) -> udcall_t +ida_hexrays.udcall_t.__init__(self) -ida_hexrays.udcall_t.__le__ (method) - __le__(self, r) -> bool - - @param r: udcall_t const & +ida_hexrays.udcall_t.__le__(self, r: "udcall_t") -> bool -ida_hexrays.udcall_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: udcall_t const & +ida_hexrays.udcall_t.__lt__(self, r: "udcall_t") -> bool -ida_hexrays.udcall_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: udcall_t const & +ida_hexrays.udcall_t.__ne__(self, r: "udcall_t") -> bool -ida_hexrays.udcall_t.compare (method) - compare(self, r) -> int - - @param r: udcall_t const & +ida_hexrays.udcall_t.compare(self, r: "udcall_t") -> int -ida_hexrays.udcall_t.empty (method) - empty(self) -> bool +ida_hexrays.udcall_t.empty(self) -> bool -ida_hexrays.ui_stroff_applicator_t (class) - Proxy of C++ ui_stroff_applicator_t class. +ida_hexrays.ui_stroff_applicator_t -ida_hexrays.ui_stroff_applicator_t.__disown__ (method) +ida_hexrays.ui_stroff_applicator_t.__disown__(self) -ida_hexrays.ui_stroff_applicator_t.__init__ (method) - __init__(self) -> ui_stroff_applicator_t - - @param self: PyObject * +ida_hexrays.ui_stroff_applicator_t.__init__(self) -ida_hexrays.ui_stroff_applicator_t.apply (method) - apply(self, opnum, path, top_tif, spath) -> bool - - @param opnum: (C++: size_t) operand ordinal number, see below - @param path: (C++: const intvec_t &) path describing the union selection, maybe empty - @param top_tif: (C++: const tinfo_t &) tinfo_t of the selected toplevel UDT - @param spath: (C++: const char *) selected path +ida_hexrays.ui_stroff_applicator_t.apply(self, opnum: "size_t", path: "intvec_t", top_tif: "tinfo_t", spath: str) -> bool + @param opnum: operand ordinal number, see below + @param path: path describing the union selection, maybe empty + @param top_tif: tinfo_t of the selected toplevel UDT + @param spath: selected path -ida_hexrays.ui_stroff_op_t (class) - Proxy of C++ ui_stroff_op_t class. +ida_hexrays.ui_stroff_op_t -ida_hexrays.ui_stroff_op_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: ui_stroff_op_t const & +ida_hexrays.ui_stroff_op_t.__eq__(self, r: "ui_stroff_op_t") -> bool -ida_hexrays.ui_stroff_op_t.__init__ (method) - __init__(self) -> ui_stroff_op_t +ida_hexrays.ui_stroff_op_t.__init__(self) -ida_hexrays.ui_stroff_op_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: ui_stroff_op_t const & +ida_hexrays.ui_stroff_op_t.__ne__(self, r: "ui_stroff_op_t") -> bool -ida_hexrays.ui_stroff_op_t.offset (variable) +ida_hexrays.ui_stroff_op_t.offset operand offset, will be used when calculating the UDT path -ida_hexrays.ui_stroff_op_t.text (variable) +ida_hexrays.ui_stroff_op_t.text any text for the column "Operand" of widget -ida_hexrays.ui_stroff_ops_t (class) - Proxy of C++ qvector< ui_stroff_op_t > class. +ida_hexrays.ui_stroff_ops_t -ida_hexrays.ui_stroff_ops_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< ui_stroff_op_t > const & +ida_hexrays.ui_stroff_ops_t.__eq__(self, r: "ui_stroff_ops_t") -> bool -ida_hexrays.ui_stroff_ops_t.__getitem__ (method) - __getitem__(self, i) -> ui_stroff_op_t - - @param i: size_t +ida_hexrays.ui_stroff_ops_t.__getitem__(self, i: "size_t") -> "ui_stroff_op_t const &" -ida_hexrays.ui_stroff_ops_t.__init__ (method) - __init__(self) -> ui_stroff_ops_t - __init__(self, x) -> ui_stroff_ops_t - - @param x: qvector< ui_stroff_op_t > const & +ida_hexrays.ui_stroff_ops_t.__init__(self, *args) -ida_hexrays.ui_stroff_ops_t.__len__ (method) - __len__(self) -> size_t +ida_hexrays.ui_stroff_ops_t.__len__(self) -> "size_t" -ida_hexrays.ui_stroff_ops_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< ui_stroff_op_t > const & +ida_hexrays.ui_stroff_ops_t.__ne__(self, r: "ui_stroff_ops_t") -> bool -ida_hexrays.ui_stroff_ops_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: ui_stroff_op_t const & +ida_hexrays.ui_stroff_ops_t.__setitem__(self, i: "size_t", v: "ui_stroff_op_t") -> None -ida_hexrays.ui_stroff_ops_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: ui_stroff_op_t const & +ida_hexrays.ui_stroff_ops_t._del(self, x: "ui_stroff_op_t") -> bool -ida_hexrays.ui_stroff_ops_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: ui_stroff_op_t const & +ida_hexrays.ui_stroff_ops_t.add_unique(self, x: "ui_stroff_op_t") -> bool -ida_hexrays.ui_stroff_ops_t.at (method) - at(self, _idx) -> ui_stroff_op_t - - @param _idx: size_t +ida_hexrays.ui_stroff_ops_t.append(self, x: "ui_stroff_op_t") -> None -ida_hexrays.ui_stroff_ops_t.begin (method) - begin(self) -> ui_stroff_op_t +ida_hexrays.ui_stroff_ops_t.at(self, _idx: "size_t") -> "ui_stroff_op_t const &" -ida_hexrays.ui_stroff_ops_t.capacity (method) - capacity(self) -> size_t +ida_hexrays.ui_stroff_ops_t.begin(self, *args) -> "qvector< ui_stroff_op_t >::const_iterator" -ida_hexrays.ui_stroff_ops_t.clear (method) - clear(self) +ida_hexrays.ui_stroff_ops_t.capacity(self) -> "size_t" -ida_hexrays.ui_stroff_ops_t.empty (method) - empty(self) -> bool +ida_hexrays.ui_stroff_ops_t.clear(self) -> None -ida_hexrays.ui_stroff_ops_t.end (method) - end(self) -> ui_stroff_op_t +ida_hexrays.ui_stroff_ops_t.empty(self) -> bool -ida_hexrays.ui_stroff_ops_t.erase (method) - erase(self, it) -> ui_stroff_op_t - - @param it: qvector< ui_stroff_op_t >::iterator - - erase(self, first, last) -> ui_stroff_op_t - - @param first: qvector< ui_stroff_op_t >::iterator - @param last: qvector< ui_stroff_op_t >::iterator +ida_hexrays.ui_stroff_ops_t.end(self, *args) -> "qvector< ui_stroff_op_t >::const_iterator" -ida_hexrays.ui_stroff_ops_t.extract (method) - extract(self) -> ui_stroff_op_t +ida_hexrays.ui_stroff_ops_t.erase(self, *args) -> "qvector< ui_stroff_op_t >::iterator" -ida_hexrays.ui_stroff_ops_t.find (method) - find(self, x) -> ui_stroff_op_t - - @param x: ui_stroff_op_t const & +ida_hexrays.ui_stroff_ops_t.extend(self, x: "ui_stroff_ops_t") -> None -ida_hexrays.ui_stroff_ops_t.grow (method) - grow(self, x=ui_stroff_op_t()) - - @param x: ui_stroff_op_t const & +ida_hexrays.ui_stroff_ops_t.extract(self) -> "ui_stroff_op_t *" -ida_hexrays.ui_stroff_ops_t.has (method) - has(self, x) -> bool - - @param x: ui_stroff_op_t const & +ida_hexrays.ui_stroff_ops_t.find(self, *args) -> "qvector< ui_stroff_op_t >::const_iterator" -ida_hexrays.ui_stroff_ops_t.inject (method) - inject(self, s, len) - - @param s: ui_stroff_op_t * - @param len: size_t +ida_hexrays.ui_stroff_ops_t.grow(self, *args) -> None -ida_hexrays.ui_stroff_ops_t.insert (method) - insert(self, it, x) -> ui_stroff_op_t - - @param it: qvector< ui_stroff_op_t >::iterator - @param x: ui_stroff_op_t const & +ida_hexrays.ui_stroff_ops_t.has(self, x: "ui_stroff_op_t") -> bool -ida_hexrays.ui_stroff_ops_t.pop_back (method) - pop_back(self) +ida_hexrays.ui_stroff_ops_t.inject(self, s: "ui_stroff_op_t", len: "size_t") -> None -ida_hexrays.ui_stroff_ops_t.push_back (method) - push_back(self, x) - - @param x: ui_stroff_op_t const & - - push_back(self) -> ui_stroff_op_t +ida_hexrays.ui_stroff_ops_t.insert(self, it: "ui_stroff_op_t", x: "ui_stroff_op_t") -> "qvector< ui_stroff_op_t >::iterator" -ida_hexrays.ui_stroff_ops_t.qclear (method) - qclear(self) +ida_hexrays.ui_stroff_ops_t.pop_back(self) -> None -ida_hexrays.ui_stroff_ops_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_hexrays.ui_stroff_ops_t.push_back(self, *args) -> "ui_stroff_op_t &" -ida_hexrays.ui_stroff_ops_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: ui_stroff_op_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_hexrays.ui_stroff_ops_t.qclear(self) -> None -ida_hexrays.ui_stroff_ops_t.size (method) - size(self) -> size_t +ida_hexrays.ui_stroff_ops_t.reserve(self, cnt: "size_t") -> None -ida_hexrays.ui_stroff_ops_t.swap (method) - swap(self, r) - - @param r: qvector< ui_stroff_op_t > & +ida_hexrays.ui_stroff_ops_t.resize(self, *args) -> None -ida_hexrays.ui_stroff_ops_t.truncate (method) - truncate(self) +ida_hexrays.ui_stroff_ops_t.size(self) -> "size_t" -ida_hexrays.user_cmts_begin (function) - user_cmts_begin(map) -> user_cmts_iterator_t +ida_hexrays.ui_stroff_ops_t.swap(self, r: "ui_stroff_ops_t") -> None + +ida_hexrays.ui_stroff_ops_t.truncate(self) -> None + +ida_hexrays.user_cmts_begin(map: "user_cmts_t") -> "user_cmts_iterator_t" Get iterator pointing to the beginning of user_cmts_t. - - @param map: (C++: const user_cmts_t *) user_cmts_t const * -ida_hexrays.user_cmts_clear (function) - user_cmts_clear(map) +ida_hexrays.user_cmts_clear(map: "user_cmts_t") -> None Clear user_cmts_t. - - @param map: (C++: user_cmts_t *) -ida_hexrays.user_cmts_end (function) - user_cmts_end(map) -> user_cmts_iterator_t +ida_hexrays.user_cmts_end(map: "user_cmts_t") -> "user_cmts_iterator_t" Get iterator pointing to the end of user_cmts_t. - - @param map: (C++: const user_cmts_t *) user_cmts_t const * -ida_hexrays.user_cmts_erase (function) - user_cmts_erase(map, p) +ida_hexrays.user_cmts_erase(map: "user_cmts_t", p: "user_cmts_iterator_t") -> None 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 (function) - user_cmts_find(map, key) -> user_cmts_iterator_t +ida_hexrays.user_cmts_find(map: "user_cmts_t", key: "treeloc_t") -> "user_cmts_iterator_t" Find the specified key in user_cmts_t. - - @param map: (C++: const user_cmts_t *) user_cmts_t const * - @param key: (C++: const treeloc_t &) treeloc_t const & -ida_hexrays.user_cmts_first (function) - user_cmts_first(p) -> treeloc_t +ida_hexrays.user_cmts_first(p: "user_cmts_iterator_t") -> "treeloc_t const &" Get reference to the current map key. - - @param p: (C++: user_cmts_iterator_t) -ida_hexrays.user_cmts_free (function) - user_cmts_free(map) +ida_hexrays.user_cmts_free(map: "user_cmts_t") -> None Delete user_cmts_t instance. - - @param map: (C++: user_cmts_t *) -ida_hexrays.user_cmts_insert (function) - user_cmts_insert(map, key, val) -> user_cmts_iterator_t +ida_hexrays.user_cmts_insert(map: "user_cmts_t", key: "treeloc_t", val: "citem_cmt_t") -> "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 &) treeloc_t const & - @param val: (C++: const citem_cmt_t &) citem_cmt_t const & -ida_hexrays.user_cmts_iterator_t (class) - Proxy of C++ user_cmts_iterator_t class. +ida_hexrays.user_cmts_iterator_t -ida_hexrays.user_cmts_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: user_cmts_iterator_t const & +ida_hexrays.user_cmts_iterator_t.__eq__(self, p: "user_cmts_iterator_t") -> bool -ida_hexrays.user_cmts_iterator_t.__init__ (method) - __init__(self) -> user_cmts_iterator_t +ida_hexrays.user_cmts_iterator_t.__init__(self) -ida_hexrays.user_cmts_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: user_cmts_iterator_t const & +ida_hexrays.user_cmts_iterator_t.__ne__(self, p: "user_cmts_iterator_t") -> bool -ida_hexrays.user_cmts_new (function) - user_cmts_new() -> user_cmts_t +ida_hexrays.user_cmts_new() -> "user_cmts_t *" Create a new user_cmts_t instance. -ida_hexrays.user_cmts_next (function) - user_cmts_next(p) -> user_cmts_iterator_t +ida_hexrays.user_cmts_next(p: "user_cmts_iterator_t") -> "user_cmts_iterator_t" Move to the next element. - - @param p: (C++: user_cmts_iterator_t) -ida_hexrays.user_cmts_prev (function) - user_cmts_prev(p) -> user_cmts_iterator_t +ida_hexrays.user_cmts_prev(p: "user_cmts_iterator_t") -> "user_cmts_iterator_t" Move to the previous element. - - @param p: (C++: user_cmts_iterator_t) -ida_hexrays.user_cmts_second (function) - user_cmts_second(p) -> citem_cmt_t +ida_hexrays.user_cmts_second(p: "user_cmts_iterator_t") -> "citem_cmt_t &" Get reference to the current map value. - - @param p: (C++: user_cmts_iterator_t) -ida_hexrays.user_cmts_size (function) - user_cmts_size(map) -> size_t +ida_hexrays.user_cmts_size(map: "user_cmts_t") -> "size_t" Get size of user_cmts_t. - - @param map: (C++: user_cmts_t *) -ida_hexrays.user_cmts_t (class) - Proxy of C++ std::map< treeloc_t,citem_cmt_t > class. +ida_hexrays.user_cmts_t -ida_hexrays.user_cmts_t.__init__ (method) - __init__(self) -> user_cmts_t +ida_hexrays.user_cmts_t.__init__(self) -ida_hexrays.user_cmts_t.at (method) - at(self, _Keyval) -> citem_cmt_t - - @param _Keyval: treeloc_t const & +ida_hexrays.user_cmts_t.at(self, _Keyval: "treeloc_t") -> "citem_cmt_t &" -ida_hexrays.user_cmts_t.size (method) - size(self) -> size_t +ida_hexrays.user_cmts_t.size(self) -> "size_t" -ida_hexrays.user_iflags_begin (function) - user_iflags_begin(map) -> user_iflags_iterator_t +ida_hexrays.user_iflags_begin(map: "user_iflags_t") -> "user_iflags_iterator_t" Get iterator pointing to the beginning of user_iflags_t. - - @param map: (C++: const user_iflags_t *) user_iflags_t const * -ida_hexrays.user_iflags_clear (function) - user_iflags_clear(map) +ida_hexrays.user_iflags_clear(map: "user_iflags_t") -> None Clear user_iflags_t. - - @param map: (C++: user_iflags_t *) -ida_hexrays.user_iflags_end (function) - user_iflags_end(map) -> user_iflags_iterator_t +ida_hexrays.user_iflags_end(map: "user_iflags_t") -> "user_iflags_iterator_t" Get iterator pointing to the end of user_iflags_t. - - @param map: (C++: const user_iflags_t *) user_iflags_t const * -ida_hexrays.user_iflags_erase (function) - user_iflags_erase(map, p) +ida_hexrays.user_iflags_erase(map: "user_iflags_t", p: "user_iflags_iterator_t") -> None 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 (function) - user_iflags_find(map, key) -> user_iflags_iterator_t +ida_hexrays.user_iflags_find(map: "user_iflags_t", key: "citem_locator_t") -> "user_iflags_iterator_t" Find the specified key in user_iflags_t. - - @param map: (C++: const user_iflags_t *) user_iflags_t const * - @param key: (C++: const citem_locator_t &) citem_locator_t const & -ida_hexrays.user_iflags_first (function) - user_iflags_first(p) -> citem_locator_t +ida_hexrays.user_iflags_first(p: "user_iflags_iterator_t") -> "citem_locator_t const &" Get reference to the current map key. - - @param p: (C++: user_iflags_iterator_t) -ida_hexrays.user_iflags_free (function) - user_iflags_free(map) +ida_hexrays.user_iflags_free(map: "user_iflags_t") -> None Delete user_iflags_t instance. - - @param map: (C++: user_iflags_t *) -ida_hexrays.user_iflags_insert (function) - user_iflags_insert(map, key, val) -> user_iflags_iterator_t +ida_hexrays.user_iflags_insert(map: "user_iflags_t", key: "citem_locator_t", val: "int32 const &") -> "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 &) citem_locator_t const & - @param val: (C++: const int32 &) int32 const & -ida_hexrays.user_iflags_iterator_t (class) - Proxy of C++ user_iflags_iterator_t class. +ida_hexrays.user_iflags_iterator_t -ida_hexrays.user_iflags_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: user_iflags_iterator_t const & +ida_hexrays.user_iflags_iterator_t.__eq__(self, p: "user_iflags_iterator_t") -> bool -ida_hexrays.user_iflags_iterator_t.__init__ (method) - __init__(self) -> user_iflags_iterator_t +ida_hexrays.user_iflags_iterator_t.__init__(self) -ida_hexrays.user_iflags_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: user_iflags_iterator_t const & +ida_hexrays.user_iflags_iterator_t.__ne__(self, p: "user_iflags_iterator_t") -> bool -ida_hexrays.user_iflags_new (function) - user_iflags_new() -> user_iflags_t +ida_hexrays.user_iflags_new() -> "user_iflags_t *" Create a new user_iflags_t instance. -ida_hexrays.user_iflags_next (function) - user_iflags_next(p) -> user_iflags_iterator_t +ida_hexrays.user_iflags_next(p: "user_iflags_iterator_t") -> "user_iflags_iterator_t" Move to the next element. - - @param p: (C++: user_iflags_iterator_t) -ida_hexrays.user_iflags_prev (function) - user_iflags_prev(p) -> user_iflags_iterator_t +ida_hexrays.user_iflags_prev(p: "user_iflags_iterator_t") -> "user_iflags_iterator_t" Move to the previous element. - - @param p: (C++: user_iflags_iterator_t) -ida_hexrays.user_iflags_second (function) - user_iflags_second(p) -> int32 const & +ida_hexrays.user_iflags_second(p: "user_iflags_iterator_t") -> "int32 const &" Get reference to the current map value. - - @param p: (C++: user_iflags_iterator_t) -ida_hexrays.user_iflags_size (function) - user_iflags_size(map) -> size_t +ida_hexrays.user_iflags_size(map: "user_iflags_t") -> "size_t" Get size of user_iflags_t. - - @param map: (C++: user_iflags_t *) -ida_hexrays.user_iflags_t (class) - Proxy of C++ std::map< citem_locator_t,int32 > class. +ida_hexrays.user_iflags_t -ida_hexrays.user_iflags_t.__init__ (method) - __init__(self) -> user_iflags_t +ida_hexrays.user_iflags_t.__init__(self) -ida_hexrays.user_iflags_t.at (method) - at(self, _Keyval) -> int & - - @param _Keyval: citem_locator_t const & +ida_hexrays.user_iflags_t.at(self, _Keyval: "citem_locator_t") -> "int &" -ida_hexrays.user_iflags_t.size (method) - size(self) -> size_t +ida_hexrays.user_iflags_t.size(self) -> "size_t" -ida_hexrays.user_labels_begin (function) - user_labels_begin(map) -> user_labels_iterator_t +ida_hexrays.user_labels_begin(map: "user_labels_t") -> "user_labels_iterator_t" Get iterator pointing to the beginning of user_labels_t. - - @param map: (C++: const user_labels_t *) user_labels_t const * -ida_hexrays.user_labels_clear (function) - user_labels_clear(map) +ida_hexrays.user_labels_clear(map: "user_labels_t") -> None Clear user_labels_t. - - @param map: (C++: user_labels_t *) -ida_hexrays.user_labels_end (function) - user_labels_end(map) -> user_labels_iterator_t +ida_hexrays.user_labels_end(map: "user_labels_t") -> "user_labels_iterator_t" Get iterator pointing to the end of user_labels_t. - - @param map: (C++: const user_labels_t *) user_labels_t const * -ida_hexrays.user_labels_erase (function) - user_labels_erase(map, p) +ida_hexrays.user_labels_erase(map: "user_labels_t", p: "user_labels_iterator_t") -> None 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 (function) - user_labels_find(map, key) -> user_labels_iterator_t +ida_hexrays.user_labels_find(map: "user_labels_t", key: "int const &") -> "user_labels_iterator_t" Find the specified key in user_labels_t. - - @param map: (C++: const user_labels_t *) user_labels_t const * - @param key: (C++: const int &) int const & -ida_hexrays.user_labels_first (function) - user_labels_first(p) -> int const & +ida_hexrays.user_labels_first(p: "user_labels_iterator_t") -> "int const &" Get reference to the current map key. - - @param p: (C++: user_labels_iterator_t) -ida_hexrays.user_labels_free (function) - user_labels_free(map) +ida_hexrays.user_labels_free(map: "user_labels_t") -> None Delete user_labels_t instance. - - @param map: (C++: user_labels_t *) -ida_hexrays.user_labels_insert (function) - user_labels_insert(map, key, val) -> user_labels_iterator_t +ida_hexrays.user_labels_insert(map: "user_labels_t", key: "int const &", val: str) -> "user_labels_iterator_t" Insert new (int, qstring) pair into user_labels_t. - - @param map: (C++: user_labels_t *) - @param key: (C++: const int &) int const & - @param val: (C++: const qstring &) qstring const & -ida_hexrays.user_labels_iterator_t (class) - Proxy of C++ user_labels_iterator_t class. +ida_hexrays.user_labels_iterator_t -ida_hexrays.user_labels_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: user_labels_iterator_t const & +ida_hexrays.user_labels_iterator_t.__eq__(self, p: "user_labels_iterator_t") -> bool -ida_hexrays.user_labels_iterator_t.__init__ (method) - __init__(self) -> user_labels_iterator_t +ida_hexrays.user_labels_iterator_t.__init__(self) -ida_hexrays.user_labels_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: user_labels_iterator_t const & +ida_hexrays.user_labels_iterator_t.__ne__(self, p: "user_labels_iterator_t") -> bool -ida_hexrays.user_labels_new (function) - user_labels_new() -> user_labels_t +ida_hexrays.user_labels_new() -> "user_labels_t *" Create a new user_labels_t instance. -ida_hexrays.user_labels_next (function) - user_labels_next(p) -> user_labels_iterator_t +ida_hexrays.user_labels_next(p: "user_labels_iterator_t") -> "user_labels_iterator_t" Move to the next element. - - @param p: (C++: user_labels_iterator_t) -ida_hexrays.user_labels_prev (function) - user_labels_prev(p) -> user_labels_iterator_t +ida_hexrays.user_labels_prev(p: "user_labels_iterator_t") -> "user_labels_iterator_t" Move to the previous element. - - @param p: (C++: user_labels_iterator_t) -ida_hexrays.user_labels_second (function) - user_labels_second(p) -> qstring & +ida_hexrays.user_labels_second(p: "user_labels_iterator_t") -> str Get reference to the current map value. - - @param p: (C++: user_labels_iterator_t) -ida_hexrays.user_labels_size (function) - user_labels_size(map) -> size_t +ida_hexrays.user_labels_size(map: "user_labels_t") -> "size_t" Get size of user_labels_t. - - @param map: (C++: user_labels_t *) -ida_hexrays.user_labels_t (class) - Proxy of C++ std::map< int,qstring > class. +ida_hexrays.user_labels_t -ida_hexrays.user_labels_t.__init__ (method) - __init__(self) -> user_labels_t +ida_hexrays.user_labels_t.__init__(self) -ida_hexrays.user_labels_t.at (method) - at(self, _Keyval) -> _qstring< char > & - - @param _Keyval: int const & +ida_hexrays.user_labels_t.at(self, _Keyval: "int const &") -> "_qstring< char > &" -ida_hexrays.user_labels_t.size (method) - size(self) -> size_t +ida_hexrays.user_labels_t.size(self) -> "size_t" -ida_hexrays.user_lvar_modifier_t (class) - Proxy of C++ user_lvar_modifier_t class. +ida_hexrays.user_lvar_modifier_t -ida_hexrays.user_lvar_modifier_t.__disown__ (method) +ida_hexrays.user_lvar_modifier_t.__disown__(self) -ida_hexrays.user_lvar_modifier_t.__init__ (method) - __init__(self) -> user_lvar_modifier_t - - @param self: PyObject * +ida_hexrays.user_lvar_modifier_t.__init__(self) -ida_hexrays.user_lvar_modifier_t.modify_lvars (method) - modify_lvars(self, lvinf) -> bool - Modify lvar settings. Returns: true-modified - - @param lvinf: (C++: lvar_uservec_t *) +ida_hexrays.user_lvar_modifier_t.modify_lvars(self, lvinf: "lvar_uservec_t") -> bool + Modify lvar settings. Returns: true-modified + -ida_hexrays.user_numforms_begin (function) - user_numforms_begin(map) -> user_numforms_iterator_t +ida_hexrays.user_numforms_begin(map: "user_numforms_t") -> "user_numforms_iterator_t" Get iterator pointing to the beginning of user_numforms_t. - - @param map: (C++: const user_numforms_t *) user_numforms_t const * -ida_hexrays.user_numforms_clear (function) - user_numforms_clear(map) +ida_hexrays.user_numforms_clear(map: "user_numforms_t") -> None Clear user_numforms_t. - - @param map: (C++: user_numforms_t *) -ida_hexrays.user_numforms_end (function) - user_numforms_end(map) -> user_numforms_iterator_t +ida_hexrays.user_numforms_end(map: "user_numforms_t") -> "user_numforms_iterator_t" Get iterator pointing to the end of user_numforms_t. - - @param map: (C++: const user_numforms_t *) user_numforms_t const * -ida_hexrays.user_numforms_erase (function) - user_numforms_erase(map, p) +ida_hexrays.user_numforms_erase(map: "user_numforms_t", p: "user_numforms_iterator_t") -> None 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 (function) - user_numforms_find(map, key) -> user_numforms_iterator_t +ida_hexrays.user_numforms_find(map: "user_numforms_t", key: "operand_locator_t") -> "user_numforms_iterator_t" Find the specified key in user_numforms_t. - - @param map: (C++: const user_numforms_t *) user_numforms_t const * - @param key: (C++: const operand_locator_t &) operand_locator_t const & -ida_hexrays.user_numforms_first (function) - user_numforms_first(p) -> operand_locator_t +ida_hexrays.user_numforms_first(p: "user_numforms_iterator_t") -> "operand_locator_t const &" Get reference to the current map key. - - @param p: (C++: user_numforms_iterator_t) -ida_hexrays.user_numforms_free (function) - user_numforms_free(map) +ida_hexrays.user_numforms_free(map: "user_numforms_t") -> None Delete user_numforms_t instance. - - @param map: (C++: user_numforms_t *) -ida_hexrays.user_numforms_insert (function) - user_numforms_insert(map, key, val) -> user_numforms_iterator_t +ida_hexrays.user_numforms_insert(map: "user_numforms_t", key: "operand_locator_t", val: "number_format_t") -> "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 &) operand_locator_t const & - @param val: (C++: const number_format_t &) number_format_t const & -ida_hexrays.user_numforms_iterator_t (class) - Proxy of C++ user_numforms_iterator_t class. +ida_hexrays.user_numforms_iterator_t -ida_hexrays.user_numforms_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: user_numforms_iterator_t const & +ida_hexrays.user_numforms_iterator_t.__eq__(self, p: "user_numforms_iterator_t") -> bool -ida_hexrays.user_numforms_iterator_t.__init__ (method) - __init__(self) -> user_numforms_iterator_t +ida_hexrays.user_numforms_iterator_t.__init__(self) -ida_hexrays.user_numforms_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: user_numforms_iterator_t const & +ida_hexrays.user_numforms_iterator_t.__ne__(self, p: "user_numforms_iterator_t") -> bool -ida_hexrays.user_numforms_new (function) - user_numforms_new() -> user_numforms_t +ida_hexrays.user_numforms_new() -> "user_numforms_t *" Create a new user_numforms_t instance. -ida_hexrays.user_numforms_next (function) - user_numforms_next(p) -> user_numforms_iterator_t +ida_hexrays.user_numforms_next(p: "user_numforms_iterator_t") -> "user_numforms_iterator_t" Move to the next element. - - @param p: (C++: user_numforms_iterator_t) -ida_hexrays.user_numforms_prev (function) - user_numforms_prev(p) -> user_numforms_iterator_t +ida_hexrays.user_numforms_prev(p: "user_numforms_iterator_t") -> "user_numforms_iterator_t" Move to the previous element. - - @param p: (C++: user_numforms_iterator_t) -ida_hexrays.user_numforms_second (function) - user_numforms_second(p) -> number_format_t +ida_hexrays.user_numforms_second(p: "user_numforms_iterator_t") -> "number_format_t &" Get reference to the current map value. - - @param p: (C++: user_numforms_iterator_t) -ida_hexrays.user_numforms_size (function) - user_numforms_size(map) -> size_t +ida_hexrays.user_numforms_size(map: "user_numforms_t") -> "size_t" Get size of user_numforms_t. - - @param map: (C++: user_numforms_t *) -ida_hexrays.user_numforms_t (class) - Proxy of C++ std::map< operand_locator_t,number_format_t > class. +ida_hexrays.user_numforms_t -ida_hexrays.user_numforms_t.__init__ (method) - __init__(self) -> user_numforms_t +ida_hexrays.user_numforms_t.__init__(self) -ida_hexrays.user_numforms_t.at (method) - at(self, _Keyval) -> number_format_t - - @param _Keyval: operand_locator_t const & +ida_hexrays.user_numforms_t.at(self, _Keyval: "operand_locator_t") -> "number_format_t &" -ida_hexrays.user_numforms_t.size (method) - size(self) -> size_t +ida_hexrays.user_numforms_t.size(self) -> "size_t" -ida_hexrays.user_unions_begin (function) - user_unions_begin(map) -> user_unions_iterator_t +ida_hexrays.user_unions_begin(map: "user_unions_t") -> "user_unions_iterator_t" Get iterator pointing to the beginning of user_unions_t. - - @param map: (C++: const user_unions_t *) user_unions_t const * -ida_hexrays.user_unions_clear (function) - user_unions_clear(map) +ida_hexrays.user_unions_clear(map: "user_unions_t") -> None Clear user_unions_t. - - @param map: (C++: user_unions_t *) -ida_hexrays.user_unions_end (function) - user_unions_end(map) -> user_unions_iterator_t +ida_hexrays.user_unions_end(map: "user_unions_t") -> "user_unions_iterator_t" Get iterator pointing to the end of user_unions_t. - - @param map: (C++: const user_unions_t *) user_unions_t const * -ida_hexrays.user_unions_erase (function) - user_unions_erase(map, p) +ida_hexrays.user_unions_erase(map: "user_unions_t", p: "user_unions_iterator_t") -> None 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 (function) - user_unions_find(map, key) -> user_unions_iterator_t +ida_hexrays.user_unions_find(map: "user_unions_t", key: "ea_t const &") -> "user_unions_iterator_t" Find the specified key in user_unions_t. - - @param map: (C++: const user_unions_t *) user_unions_t const * - @param key: (C++: const ea_t &) ea_t const & -ida_hexrays.user_unions_first (function) - user_unions_first(p) -> ea_t const & +ida_hexrays.user_unions_first(p: "user_unions_iterator_t") -> "ea_t const &" Get reference to the current map key. - - @param p: (C++: user_unions_iterator_t) -ida_hexrays.user_unions_free (function) - user_unions_free(map) +ida_hexrays.user_unions_free(map: "user_unions_t") -> None Delete user_unions_t instance. - - @param map: (C++: user_unions_t *) -ida_hexrays.user_unions_insert (function) - user_unions_insert(map, key, val) -> user_unions_iterator_t +ida_hexrays.user_unions_insert(map: "user_unions_t", key: "ea_t const &", val: "intvec_t") -> "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 &) ea_t const & - @param val: (C++: const intvec_t &) intvec_t const & -ida_hexrays.user_unions_iterator_t (class) - Proxy of C++ user_unions_iterator_t class. +ida_hexrays.user_unions_iterator_t -ida_hexrays.user_unions_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: user_unions_iterator_t const & +ida_hexrays.user_unions_iterator_t.__eq__(self, p: "user_unions_iterator_t") -> bool -ida_hexrays.user_unions_iterator_t.__init__ (method) - __init__(self) -> user_unions_iterator_t +ida_hexrays.user_unions_iterator_t.__init__(self) -ida_hexrays.user_unions_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: user_unions_iterator_t const & +ida_hexrays.user_unions_iterator_t.__ne__(self, p: "user_unions_iterator_t") -> bool -ida_hexrays.user_unions_new (function) - user_unions_new() -> user_unions_t +ida_hexrays.user_unions_new() -> "user_unions_t *" Create a new user_unions_t instance. -ida_hexrays.user_unions_next (function) - user_unions_next(p) -> user_unions_iterator_t +ida_hexrays.user_unions_next(p: "user_unions_iterator_t") -> "user_unions_iterator_t" Move to the next element. - - @param p: (C++: user_unions_iterator_t) -ida_hexrays.user_unions_prev (function) - user_unions_prev(p) -> user_unions_iterator_t +ida_hexrays.user_unions_prev(p: "user_unions_iterator_t") -> "user_unions_iterator_t" Move to the previous element. - - @param p: (C++: user_unions_iterator_t) -ida_hexrays.user_unions_second (function) - user_unions_second(p) -> intvec_t +ida_hexrays.user_unions_second(p: "user_unions_iterator_t") -> "intvec_t &" Get reference to the current map value. - - @param p: (C++: user_unions_iterator_t) -ida_hexrays.user_unions_size (function) - user_unions_size(map) -> size_t +ida_hexrays.user_unions_size(map: "user_unions_t") -> "size_t" Get size of user_unions_t. - - @param map: (C++: user_unions_t *) -ida_hexrays.user_unions_t (class) - Proxy of C++ std::map< ea_t,intvec_t > class. +ida_hexrays.user_unions_t -ida_hexrays.user_unions_t.__init__ (method) - __init__(self) -> user_unions_t +ida_hexrays.user_unions_t.__init__(self) -ida_hexrays.user_unions_t.at (method) - at(self, _Keyval) -> intvec_t - - @param _Keyval: unsigned-ea-like-numeric-type const & +ida_hexrays.user_unions_t.at(self, _Keyval: "unsigned long long const &") -> "qvector< int > &" -ida_hexrays.user_unions_t.size (method) - size(self) -> size_t +ida_hexrays.user_unions_t.size(self) -> "size_t" -ida_hexrays.uval_ivl_ivlset_t (class) - Proxy of C++ ivlset_tpl< ivl_t,uval_t > class. +ida_hexrays.uval_ivl_ivlset_t -ida_hexrays.uval_ivl_ivlset_t.__eq__ (method) - __eq__(self, v) -> bool - - @param v: ivl_t const & - -ida_hexrays.uval_ivl_ivlset_t.__init__ (method) - __init__(self) -> uval_ivl_ivlset_t - __init__(self, ivl) -> uval_ivl_ivlset_t - - @param ivl: ivl_t const & +ida_hexrays.uval_ivl_ivlset_t.__eq__(self, v: "ivl_t") -> bool -ida_hexrays.uval_ivl_ivlset_t.__ne__ (method) - __ne__(self, v) -> bool - - @param v: ivl_t const & - -ida_hexrays.uval_ivl_ivlset_t.all_values (method) - all_values(self) -> bool - -ida_hexrays.uval_ivl_ivlset_t.begin (method) - 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 (method) - clear(self) - -ida_hexrays.uval_ivl_ivlset_t.empty (method) - empty(self) -> bool - -ida_hexrays.uval_ivl_ivlset_t.end (method) - 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.__init__(self, *args) -ida_hexrays.uval_ivl_ivlset_t.getivl (method) - getivl(self, idx) -> ivl_t - - @param idx: int +ida_hexrays.uval_ivl_ivlset_t.__ne__(self, v: "ivl_t") -> bool -ida_hexrays.uval_ivl_ivlset_t.lastivl (method) - lastivl(self) -> ivl_t - -ida_hexrays.uval_ivl_ivlset_t.nivls (method) - nivls(self) -> size_t - -ida_hexrays.uval_ivl_ivlset_t.qclear (method) - qclear(self) +ida_hexrays.uval_ivl_ivlset_t.all_values(self) -> bool -ida_hexrays.uval_ivl_ivlset_t.set_all_values (method) - set_all_values(self) +ida_hexrays.uval_ivl_ivlset_t.begin(self, *args) -> "ivlset_tpl< ivl_t,unsigned long long >::iterator" -ida_hexrays.uval_ivl_ivlset_t.single_value (method) - single_value(self) -> bool - single_value(self, v) -> bool - - @param v: unsigned-ea-like-numeric-type +ida_hexrays.uval_ivl_ivlset_t.clear(self) -> None -ida_hexrays.uval_ivl_ivlset_t.swap (method) - swap(self, r) - - @param r: ivlset_tpl< ivl_t,uval_t > & +ida_hexrays.uval_ivl_ivlset_t.empty(self) -> bool -ida_hexrays.uval_ivl_t (class) - Proxy of C++ ivl_tpl< uval_t > class. - -ida_hexrays.uval_ivl_t.__init__ (method) - __init__(self, _off, _size) -> uval_ivl_t - - @param _off: unsigned-ea-like-numeric-type - @param _size: unsigned-ea-like-numeric-type +ida_hexrays.uval_ivl_ivlset_t.end(self, *args) -> "ivlset_tpl< ivl_t,unsigned long long >::iterator" -ida_hexrays.uval_ivl_t.end (method) - end(self) -> unsigned-ea-like-numeric-type +ida_hexrays.uval_ivl_ivlset_t.getivl(self, idx: int) -> "ivl_t const &" -ida_hexrays.uval_ivl_t.last (method) - last(self) -> unsigned-ea-like-numeric-type - -ida_hexrays.uval_ivl_t.valid (method) - valid(self) -> bool +ida_hexrays.uval_ivl_ivlset_t.lastivl(self) -> "ivl_t const &" -ida_hexrays.valrng_t (class) - Proxy of C++ valrng_t class. - -ida_hexrays.valrng_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.valrng_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.valrng_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.valrng_t.__init__ (method) - __init__(self, size_=MAX_VLR_SIZE) -> valrng_t - - @param size_: int - - __init__(self, r) -> valrng_t - - @param r: valrng_t const & - -ida_hexrays.valrng_t.__le__ (method) - __le__(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.valrng_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.valrng_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.valrng_t._deregister (method) - _deregister(self) - -ida_hexrays.valrng_t._print (method) - _print(self) - -ida_hexrays.valrng_t._register (method) - _register(self) - -ida_hexrays.valrng_t.all_values (method) - all_values(self) -> bool - -ida_hexrays.valrng_t.compare (method) - compare(self, r) -> int - - @param r: valrng_t const & - -ida_hexrays.valrng_t.cvt_to_cmp (method) - cvt_to_cmp(self, strict) -> bool - - @param strict: bool - -ida_hexrays.valrng_t.cvt_to_single_value (method) - cvt_to_single_value(self) -> bool - -ida_hexrays.valrng_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.valrng_t.empty (method) - empty(self) -> bool - -ida_hexrays.valrng_t.get_size (method) - get_size(self) -> int - -ida_hexrays.valrng_t.has (method) - has(self, v) -> bool - - @param v: uvlr_t - -ida_hexrays.valrng_t.intersect_with (method) - intersect_with(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.valrng_t.inverse (method) - inverse(self) - -ida_hexrays.valrng_t.is_unknown (method) - is_unknown(self) -> bool - -ida_hexrays.valrng_t.max_svalue (method) - max_svalue(self, size_) -> uvlr_t - - @param size_: int - - max_svalue(self) -> uvlr_t - -ida_hexrays.valrng_t.max_value (method) - max_value(self, size_) -> uvlr_t - - @param size_: int - - max_value(self) -> uvlr_t - -ida_hexrays.valrng_t.min_svalue (method) - min_svalue(self, size_) -> uvlr_t - - @param size_: int - - min_svalue(self) -> uvlr_t - -ida_hexrays.valrng_t.reduce_size (method) - reduce_size(self, new_size) -> bool - - @param new_size: int - -ida_hexrays.valrng_t.set_all (method) - set_all(self) - -ida_hexrays.valrng_t.set_cmp (method) - set_cmp(self, cmp, _value) - - @param cmp: enum cmpop_t - @param _value: uvlr_t - -ida_hexrays.valrng_t.set_eq (method) - set_eq(self, v) - - @param v: uvlr_t - -ida_hexrays.valrng_t.set_none (method) - set_none(self) - -ida_hexrays.valrng_t.set_unk (method) - set_unk(self) - -ida_hexrays.valrng_t.swap (method) - swap(self, r) - - @param r: valrng_t & - -ida_hexrays.valrng_t.unite_with (method) - unite_with(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.var_ref_t (class) - Proxy of C++ var_ref_t class. - -ida_hexrays.var_ref_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: var_ref_t const & - -ida_hexrays.var_ref_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: var_ref_t const & - -ida_hexrays.var_ref_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: var_ref_t const & - -ida_hexrays.var_ref_t.__init__ (method) - __init__(self) -> var_ref_t - -ida_hexrays.var_ref_t.__le__ (method) - __le__(self, r) -> bool - - @param r: var_ref_t const & - -ida_hexrays.var_ref_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: var_ref_t const & - -ida_hexrays.var_ref_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: var_ref_t const & - -ida_hexrays.var_ref_t.compare (method) - compare(self, r) -> int - - @param r: var_ref_t const & - -ida_hexrays.var_ref_t.getv (method) - getv(self) -> lvar_t - -ida_hexrays.var_ref_t.idx (variable) +ida_hexrays.uval_ivl_ivlset_t.nivls(self) -> "size_t" + +ida_hexrays.uval_ivl_ivlset_t.qclear(self) -> None + +ida_hexrays.uval_ivl_ivlset_t.set_all_values(self) -> None + +ida_hexrays.uval_ivl_ivlset_t.single_value(self, *args) -> bool + +ida_hexrays.uval_ivl_ivlset_t.swap(self, r: "uval_ivl_ivlset_t") -> None + +ida_hexrays.uval_ivl_t + +ida_hexrays.uval_ivl_t.__init__(self, _off: "unsigned long long", _size: "unsigned long long") + +ida_hexrays.uval_ivl_t.end(self) -> "unsigned long long" + +ida_hexrays.uval_ivl_t.last(self) -> "unsigned long long" + +ida_hexrays.uval_ivl_t.valid(self) -> bool + +ida_hexrays.valrng_t + +ida_hexrays.valrng_t.__eq__(self, r: "valrng_t") -> bool + +ida_hexrays.valrng_t.__ge__(self, r: "valrng_t") -> bool + +ida_hexrays.valrng_t.__gt__(self, r: "valrng_t") -> bool + +ida_hexrays.valrng_t.__init__(self, *args) + +ida_hexrays.valrng_t.__le__(self, r: "valrng_t") -> bool + +ida_hexrays.valrng_t.__lt__(self, r: "valrng_t") -> bool + +ida_hexrays.valrng_t.__ne__(self, r: "valrng_t") -> bool + +ida_hexrays.valrng_t._deregister(self) -> None + +ida_hexrays.valrng_t._print(self) -> None + +ida_hexrays.valrng_t._register(self) -> None + +ida_hexrays.valrng_t.all_values(self) -> bool + +ida_hexrays.valrng_t.compare(self, r: "valrng_t") -> int + +ida_hexrays.valrng_t.cvt_to_cmp(self) -> bool + +ida_hexrays.valrng_t.cvt_to_single_value(self) -> bool + +ida_hexrays.valrng_t.dstr(self) -> str + +ida_hexrays.valrng_t.empty(self) -> bool + +ida_hexrays.valrng_t.get_size(self) -> int + +ida_hexrays.valrng_t.has(self, v: "uvlr_t") -> bool + +ida_hexrays.valrng_t.intersect_with(self, r: "valrng_t") -> bool + +ida_hexrays.valrng_t.inverse(self) -> None + +ida_hexrays.valrng_t.is_unknown(self) -> bool + +ida_hexrays.valrng_t.max_svalue(self) -> "uvlr_t" + +ida_hexrays.valrng_t.max_value(self) -> "uvlr_t" + +ida_hexrays.valrng_t.min_svalue(self) -> "uvlr_t" + +ida_hexrays.valrng_t.reduce_size(self, new_size: int) -> bool + +ida_hexrays.valrng_t.set_all(self) -> None + +ida_hexrays.valrng_t.set_cmp(self, cmp: "cmpop_t", _value: "uvlr_t") -> None + +ida_hexrays.valrng_t.set_eq(self, v: "uvlr_t") -> None + +ida_hexrays.valrng_t.set_none(self) -> None + +ida_hexrays.valrng_t.set_unk(self) -> None + +ida_hexrays.valrng_t.swap(self, r: "valrng_t") -> None + +ida_hexrays.valrng_t.unite_with(self, r: "valrng_t") -> bool + +ida_hexrays.var_ref_t + +ida_hexrays.var_ref_t.__eq__(self, r: "var_ref_t") -> bool + +ida_hexrays.var_ref_t.__ge__(self, r: "var_ref_t") -> bool + +ida_hexrays.var_ref_t.__gt__(self, r: "var_ref_t") -> bool + +ida_hexrays.var_ref_t.__init__(self) + +ida_hexrays.var_ref_t.__le__(self, r: "var_ref_t") -> bool + +ida_hexrays.var_ref_t.__lt__(self, r: "var_ref_t") -> bool + +ida_hexrays.var_ref_t.__ne__(self, r: "var_ref_t") -> bool + +ida_hexrays.var_ref_t.compare(self, r: "var_ref_t") -> int + +ida_hexrays.var_ref_t.getv(self) -> "lvar_t &" + +ida_hexrays.var_ref_t.idx index into lvars_t -ida_hexrays.var_ref_t.mba (variable) +ida_hexrays.var_ref_t.mba pointer to the underlying micro array -ida_hexrays.vc_printer_t (class) - Proxy of C++ vc_printer_t class. +ida_hexrays.vc_printer_t -ida_hexrays.vc_printer_t.__disown__ (method) +ida_hexrays.vc_printer_t.__disown__(self) -ida_hexrays.vc_printer_t.__init__ (method) - __init__(self, f) -> vc_printer_t - - @param f: cfunc_t const * +ida_hexrays.vc_printer_t.__init__(self, f: "cfunc_t") -ida_hexrays.vc_printer_t.func (variable) +ida_hexrays.vc_printer_t.func cfunc_t to generate text for -ida_hexrays.vc_printer_t.oneliner (method) - oneliner(self) -> bool - Are we generating one-line text representation? - - @return: true if the output will occupy one line without line breaks +ida_hexrays.vc_printer_t.lastchar + internal: last printed character + -ida_hexrays.vd_failure_t (class) - Proxy of C++ vd_failure_t class. +ida_hexrays.vc_printer_t.oneliner(self) -> bool + Are we generating one-line text representation? + + @returns `true` if the output will occupy one line without line breaks -ida_hexrays.vd_failure_t.__init__ (method) - __init__(self) -> vd_failure_t - __init__(self, code, ea, buf=None) -> vd_failure_t - - @param code: enum merror_t - @param ea: ea_t - @param buf: char const * - - __init__(self, code, ea, buf) -> vd_failure_t - - @param code: enum merror_t - @param ea: ea_t - @param buf: qstring const & - - __init__(self, _hf) -> vd_failure_t - - @param _hf: hexrays_failure_t const & +ida_hexrays.vd_failure_t -ida_hexrays.vd_failure_t.desc (method) - desc(self) -> qstring +ida_hexrays.vd_failure_t.__init__(self, *args) -ida_hexrays.vd_interr_t (class) - Proxy of C++ vd_interr_t class. +ida_hexrays.vd_failure_t.desc(self) -> str -ida_hexrays.vd_interr_t.__init__ (method) - __init__(self, ea, buf) -> vd_interr_t - - @param ea: ea_t - @param buf: char const * +ida_hexrays.vd_interr_t -ida_hexrays.vd_printer_t (class) - Proxy of C++ vd_printer_t class. +ida_hexrays.vd_interr_t.__init__(self, ea: ida_idaapi.ea_t, buf: str) -ida_hexrays.vd_printer_t.__disown__ (method) +ida_hexrays.vd_printer_t -ida_hexrays.vd_printer_t.__init__ (method) - __init__(self) -> vd_printer_t - - @param self: PyObject * +ida_hexrays.vd_printer_t.__disown__(self) -ida_hexrays.vd_printer_t._print (method) - _print(self, indent, format) -> int - - Parameters - ---------- - indent: int - format: char const * +ida_hexrays.vd_printer_t.__init__(self) -ida_hexrays.vd_printer_t.hdrlines (variable) - number of header lines (prototype+typedef+lvars) valid at the end of print - process +ida_hexrays.vd_printer_t._print(self, indent: int, format: str) -> int -ida_hexrays.vdloc_t (class) - Proxy of C++ vdloc_t class. +ida_hexrays.vd_printer_t.hdrlines + number of header lines (prototype+typedef+lvars) valid at the end of print process + -ida_hexrays.vdloc_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: vdloc_t const & +ida_hexrays.vdloc_t -ida_hexrays.vdloc_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: vdloc_t const & +ida_hexrays.vdloc_t.__eq__(self, r: "vdloc_t") -> bool -ida_hexrays.vdloc_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: vdloc_t const & +ida_hexrays.vdloc_t.__ge__(self, r: "vdloc_t") -> bool -ida_hexrays.vdloc_t.__init__ (method) - __init__(self) -> vdloc_t +ida_hexrays.vdloc_t.__gt__(self, r: "vdloc_t") -> bool -ida_hexrays.vdloc_t.__le__ (method) - __le__(self, r) -> bool - - @param r: vdloc_t const & +ida_hexrays.vdloc_t.__init__(self) -ida_hexrays.vdloc_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: vdloc_t const & +ida_hexrays.vdloc_t.__le__(self, r: "vdloc_t") -> bool -ida_hexrays.vdloc_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: vdloc_t const & +ida_hexrays.vdloc_t.__lt__(self, r: "vdloc_t") -> bool -ida_hexrays.vdloc_t._set_reg1 (method) - _set_reg1(self, r1) - - Parameters - ---------- - r1: int +ida_hexrays.vdloc_t.__ne__(self, r: "vdloc_t") -> bool -ida_hexrays.vdloc_t.compare (method) - compare(self, r) -> int - - @param r: vdloc_t const & +ida_hexrays.vdloc_t._set_reg1(self, r1: int) -> None -ida_hexrays.vdloc_t.is_aliasable (method) - is_aliasable(self, mb, size) -> bool - - @param mb: mba_t const * - @param size: int +ida_hexrays.vdloc_t.compare(self, r: "vdloc_t") -> int -ida_hexrays.vdloc_t.reg1 (method) - reg1(self) -> int +ida_hexrays.vdloc_t.is_aliasable(self, mb: "mba_t", size: int) -> bool -ida_hexrays.vdloc_t.set_reg1 (method) - set_reg1(self, r1) - - @param r1: int +ida_hexrays.vdloc_t.reg1(self) -> int -ida_hexrays.vdui_t (class) - Proxy of C++ vdui_t class. +ida_hexrays.vdloc_t.set_reg1(self, r1: int) -> None -ida_hexrays.vdui_t.__init__ (method) +ida_hexrays.vdui_t -ida_hexrays.vdui_t.calc_cmt_type (method) - calc_cmt_type(self, lnnum, cmttype) -> cmt_type_t - Check if the specified line can have a comment. Due to the coordinate system for - comments: (\link{https://www.hex-rays.com/blog/coordinate-system-for-hex-rays}) - some function lines cannot have comments. This function checks if a comment can - be attached to the specified line. - - @param lnnum: (C++: size_t) line number (0 based) - @param cmttype: (C++: cmt_type_t) comment types to check - @return: possible comment types +ida_hexrays.vdui_t.__init__(self, *args, **kwargs) -ida_hexrays.vdui_t.cfunc (variable) +ida_hexrays.vdui_t.calc_cmt_type(self, lnnum: "size_t", cmttype: "cmt_type_t") -> "cmt_type_t" + Check if the specified line can have a comment. Due to the coordinate system for comments: ([https://www.hex-rays.com/blog/coordinate-system-for-hex-rays](https://www.hex-rays.com/blog/coordinate-system-for-hex-rays)) some function lines cannot have comments. This function checks if a comment can be attached to the specified line. + + @param lnnum: line number (0 based) + @param cmttype: comment types to check + @returns possible comment types + +ida_hexrays.vdui_t.cfunc pointer to function object -ida_hexrays.vdui_t.clear (method) - clear(self) - Clear the pseudocode window. It deletes the current function and microcode. +ida_hexrays.vdui_t.clear(self) -> None + Clear the pseudocode window. It deletes the current function and microcode. + -ida_hexrays.vdui_t.collapse_item (method) - collapse_item(self, hide) -> bool - Collapse/uncollapse item. This function collapses the current item. - - @param hide: (C++: bool) - @return: false if failed. +ida_hexrays.vdui_t.collapse_item(self, hide: bool) -> bool + Collapse/uncollapse item. This function collapses the current item. + + @returns false if failed. -ida_hexrays.vdui_t.collapse_lvars (method) - collapse_lvars(self, hide) -> bool - Collapse/uncollapse local variable declarations. - - @param hide: (C++: bool) - @return: false if failed. +ida_hexrays.vdui_t.collapse_lvars(self, hide: bool) -> bool + Collapse/uncollapse local variable declarations. + + @returns false if failed. -ida_hexrays.vdui_t.cpos (variable) +ida_hexrays.vdui_t.cpos Current ctext position. -ida_hexrays.vdui_t.ct (variable) +ida_hexrays.vdui_t.ct pseudocode view -ida_hexrays.vdui_t.ctree_to_disasm (method) - ctree_to_disasm(self) -> bool - Jump to disassembly. This function jumps to the address in the disassembly - window which corresponds to the current item. The current item is determined - based on the current keyboard cursor position. - - @return: false if failed +ida_hexrays.vdui_t.ctree_to_disasm(self) -> bool + Jump to disassembly. This function jumps to the address in the disassembly window which corresponds to the current item. The current item is determined based on the current keyboard cursor position. + + @returns false if failed -ida_hexrays.vdui_t.del_orphan_cmts (method) - del_orphan_cmts(self) -> bool - Delete all orphan comments. Delete all orphan comments and refresh the screen. - - @return: true +ida_hexrays.vdui_t.del_orphan_cmts(self) -> bool + Delete all orphan comments. Delete all orphan comments and refresh the screen. + + @returns true -ida_hexrays.vdui_t.edit_cmt (method) - edit_cmt(self, loc) -> bool - Edit an indented comment. This function displays a dialog box and allows the - user to edit the comment for the specified ctree location. - - @param loc: (C++: const treeloc_t &) comment location - @return: false if failed or cancelled +ida_hexrays.vdui_t.edit_cmt(self, loc: "treeloc_t") -> bool + Edit an indented comment. This function displays a dialog box and allows the user to edit the comment for the specified ctree location. + + @param loc: comment location + @returns false if failed or cancelled -ida_hexrays.vdui_t.edit_func_cmt (method) - edit_func_cmt(self) -> bool - Edit a function comment. This function displays a dialog box and allows the user - to edit the function comment. - - @return: false if failed or cancelled +ida_hexrays.vdui_t.edit_func_cmt(self) -> bool + Edit a function comment. This function displays a dialog box and allows the user to edit the function comment. + + @returns false if failed or cancelled -ida_hexrays.vdui_t.flags (variable) - Properties of pseudocode window +ida_hexrays.vdui_t.flags + Properties of pseudocode window + -ida_hexrays.vdui_t.get_current_item (method) - get_current_item(self, idv) -> bool - Get current item. This function refreshes the cpos, item, tail fields. - - @param idv: (C++: input_device_t) keyboard or mouse - @see: cfunc_t::get_line_item() - @return: false if failed +ida_hexrays.vdui_t.get_current_item(self, idv: "input_device_t") -> bool + Get current item. This function refreshes the cpos, item, tail fields. + + @param idv: keyboard or mouse + @returns false if failed -ida_hexrays.vdui_t.get_current_label (method) - get_current_label(self) -> int - Get current label. If there is a label under the cursor, return its number. - - @return: -1 if there is no label under the cursor. prereq: get_current_item() - has been called +ida_hexrays.vdui_t.get_current_label(self) -> int + Get current label. If there is a label under the cursor, return its number. + + @returns -1 if there is no label under the cursor. prereq: get_current_item() has been called -ida_hexrays.vdui_t.get_number (method) - get_number(self) -> cnumber_t - Get current number. If the current item is a number, return pointer to it. - - @return: nullptr if the current item is not a number This function returns non- - null for the cases of a 'switch' statement Also, if the current item is - a casted number, then this function will succeed. +ida_hexrays.vdui_t.get_number(self) -> "cnumber_t *" + Get current number. If the current item is a number, return pointer to it. + + @returns nullptr if the current item is not a number This function returns non-null for the cases of a 'switch' statement Also, if the current item is a casted number, then this function will succeed. -ida_hexrays.vdui_t.head (variable) +ida_hexrays.vdui_t.head First ctree item on the current line (for block comments) -ida_hexrays.vdui_t.in_ctree (method) - in_ctree(self) -> bool +ida_hexrays.vdui_t.in_ctree(self) -> bool Is the current item a statement? - @return: false if the cursor is in the local variable/type declaration area - true if the cursor is in the statement area + @returns false if the cursor is in the local variable/type declaration area + true if the cursor is in the statement area -ida_hexrays.vdui_t.invert_bits (method) - invert_bits(self) -> bool - Bitwise negate a number. This function inverts all bits of the current number. - - @return: false if failed. +ida_hexrays.vdui_t.invert_bits(self) -> bool + Bitwise negate a number. This function inverts all bits of the current number. + + @returns false if failed. -ida_hexrays.vdui_t.invert_sign (method) - invert_sign(self) -> bool - Negate a number. This function negates the current number. - - @return: false if failed. +ida_hexrays.vdui_t.invert_sign(self) -> bool + Negate a number. This function negates the current number. + + @returns false if failed. -ida_hexrays.vdui_t.item (variable) +ida_hexrays.vdui_t.item Current ctree item. -ida_hexrays.vdui_t.jump_enter (method) - jump_enter(self, idv, omflags) -> bool - Process the Enter key. This function jumps to the definition of the item under - the cursor. If the current item is a function, it will be decompiled. If the - current item is a global data, its disassemly text will be displayed. - - @param idv: (C++: input_device_t) what cursor must be used, the keyboard or the mouse - @param omflags: (C++: int) OM_NEWWIN: new pseudocode window will open, 0: reuse the - existing window - @return: false if failed +ida_hexrays.vdui_t.jump_enter(self, idv: "input_device_t", omflags: int) -> bool + Process the Enter key. This function jumps to the definition of the item under the cursor. If the current item is a function, it will be decompiled. If the current item is a global data, its disassemly text will be displayed. + + @param idv: what cursor must be used, the keyboard or the mouse + @param omflags: OM_NEWWIN: new pseudocode window will open, 0: reuse the existing window + @returns false if failed -ida_hexrays.vdui_t.last_code (variable) +ida_hexrays.vdui_t.last_code result of the last user action. See Microcode error codes -ida_hexrays.vdui_t.locked (method) - locked(self) -> bool - Does the pseudocode window contain valid code? We lock windows before modifying - them, to avoid recursion due to the events generated by the IDA kernel. +ida_hexrays.vdui_t.locked(self) -> bool + Does the pseudocode window contain valid code? We lock windows before modifying them, to avoid recursion due to the events generated by the IDA kernel. + @retval true: The window is locked and may have stale info -ida_hexrays.vdui_t.map_lvar (method) - map_lvar(self, frm, to) -> bool - Map a local variable to another. This function permanently maps one lvar to - another. All occurrences of the mapped variable are replaced by the new variable - - @param from: (C++: lvar_t *) the variable being mapped - @param to: (C++: lvar_t *) the variable to map to. if nullptr, unmaps the variable - @return: false if failed +ida_hexrays.vdui_t.map_lvar(self, frm: "lvar_t", to: "lvar_t") -> bool + Map a local variable to another. This function permanently maps one lvar to another. All occurrences of the mapped variable are replaced by the new variable + + @param to: the variable to map to. if nullptr, unmaps the variable + @returns false if failed -ida_hexrays.vdui_t.mba (variable) +ida_hexrays.vdui_t.mba pointer to underlying microcode -ida_hexrays.vdui_t.refresh_cpos (method) - refresh_cpos(self, idv) -> bool - Refresh the current position. This function refreshes the cpos field. - - @param idv: (C++: input_device_t) keyboard or mouse - @return: false if failed +ida_hexrays.vdui_t.refresh_cpos(self, idv: "input_device_t") -> bool + Refresh the current position. This function refreshes the cpos field. + + @param idv: keyboard or mouse + @returns false if failed -ida_hexrays.vdui_t.refresh_ctext (method) - refresh_ctext(self, activate=True) - Refresh pseudocode window. This function refreshes the pseudocode window by - regenerating its text from cfunc_t. Instead of this function use - refresh_func_ctext(), which refreshes all pseudocode windows for the function. - @see: refresh_view(), refresh_func_ctext() - - @param activate: (C++: bool) +ida_hexrays.vdui_t.refresh_ctext(self, activate: bool = True) -> None + Refresh pseudocode window. This function refreshes the pseudocode window by regenerating its text from cfunc_t. Instead of this function use refresh_func_ctext(), which refreshes all pseudocode windows for the function. + -ida_hexrays.vdui_t.refresh_view (method) - refresh_view(self, redo_mba) - Refresh pseudocode window. This is the highest level refresh function. It causes - the most profound refresh possible and can lead to redecompilation of the - current function. Please consider using refresh_ctext() if you need a more - superficial refresh. - - @param redo_mba: (C++: bool) true means to redecompile the current function - false means to rebuild ctree without regenerating microcode - @see: refresh_ctext() +ida_hexrays.vdui_t.refresh_view(self, redo_mba: bool) -> None + Refresh pseudocode window. This is the highest level refresh function. It causes the most profound refresh possible and can lead to redecompilation of the current function. Please consider using refresh_ctext() if you need a more superficial refresh. + + @param redo_mba: true means to redecompile the current function + false means to rebuild ctree without regenerating microcode -ida_hexrays.vdui_t.rename_global (method) - rename_global(self, ea) -> bool - Rename global item. This function displays a dialog box and allows the user to - rename a global item (data or function). - - @param ea: (C++: ea_t) address of the global item - @return: false if failed or cancelled +ida_hexrays.vdui_t.rename_global(self, ea: ida_idaapi.ea_t) -> bool + Rename global item. This function displays a dialog box and allows the user to rename a global item (data or function). + + @param ea: address of the global item + @returns false if failed or cancelled -ida_hexrays.vdui_t.rename_label (method) - rename_label(self, label) -> bool - Rename a label. This function displays a dialog box and allows the user to - rename a statement label. - - @param label: (C++: int) label number - @return: false if failed or cancelled +ida_hexrays.vdui_t.rename_label(self, label: int) -> bool + Rename a label. This function displays a dialog box and allows the user to rename a statement label. + + @param label: label number + @returns false if failed or cancelled -ida_hexrays.vdui_t.rename_lvar (method) - rename_lvar(self, v, name, is_user_name) -> bool - Rename local variable. This function permanently renames a local variable. - - @param v: (C++: lvar_t *) pointer to local variable - @param name: (C++: const char *) new variable name - @param is_user_name: (C++: bool) use true to save the new name into the database. use false - to delete the saved name. - @see: ::rename_lvar() - @return: false if failed +ida_hexrays.vdui_t.rename_lvar(self, v: "lvar_t", name: str, is_user_name: bool) -> bool + Rename local variable. This function permanently renames a local variable. + + @param v: pointer to local variable + @param name: new variable name + @param is_user_name: use true to save the new name into the database. use false to delete the saved name. + @returns false if failed -ida_hexrays.vdui_t.rename_strmem (method) - rename_strmem(self, sptr, mptr) -> bool - Rename structure field. This function displays a dialog box and allows the user - to rename a structure field. - - @param sptr: (C++: struc_t *) pointer to structure - @param mptr: (C++: member_t *) pointer to structure member OBSOLETE FUNCTION, do not use! - @return: false if failed or cancelled +ida_hexrays.vdui_t.rename_udm(self, udt_type: "tinfo_t", udm_idx: int) -> bool + Rename structure field. This function displays a dialog box and allows the user to rename a structure field. + + @param udt_type: structure/union type + @param udm_idx: index of the structure/union member + @returns false if failed or cancelled -ida_hexrays.vdui_t.rename_udm (method) - rename_udm(self, udt_type, udm_idx) -> bool - Rename structure field. This function displays a dialog box and allows the user - to rename a structure field. - - @param udt_type: (C++: tinfo_t &) structure/union type - @param udm_idx: (C++: int) index of the structure/union member - @return: false if failed or cancelled +ida_hexrays.vdui_t.set_global_type(self, ea: ida_idaapi.ea_t) -> bool + Set global item type. This function displays a dialog box and allows the user to change the type of a global item (data or function). + + @param ea: address of the global item + @returns false if failed or cancelled -ida_hexrays.vdui_t.set_global_type (method) - set_global_type(self, ea) -> bool - Set global item type. This function displays a dialog box and allows the user to - change the type of a global item (data or function). - - @param ea: (C++: ea_t) address of the global item - @return: false if failed or cancelled +ida_hexrays.vdui_t.set_locked(self, v: bool) -> bool -ida_hexrays.vdui_t.set_locked (method) - set_locked(self, v) -> bool - - @param v: bool +ida_hexrays.vdui_t.set_lvar_cmt(self, v: "lvar_t", cmt: str) -> bool + Set local variable comment. This function permanently sets a variable comment. + + @param v: pointer to local variable + @param cmt: new comment + @returns false if failed -ida_hexrays.vdui_t.set_lvar_cmt (method) - set_lvar_cmt(self, v, cmt) -> bool - Set local variable comment. This function permanently sets a variable comment. - - @param v: (C++: lvar_t *) pointer to local variable - @param cmt: (C++: const char *) new comment - @return: false if failed +ida_hexrays.vdui_t.set_lvar_type(self, v: "lvar_t", type: "tinfo_t") -> bool + Set local variable type. This function permanently sets a local variable type and clears NOPTR flag if it was set before by function 'set_noptr_lvar' + + @param v: pointer to local variable + @param type: new variable type + @returns false if failed -ida_hexrays.vdui_t.set_lvar_type (method) - set_lvar_type(self, v, type) -> bool - Set local variable type. This function permanently sets a local variable type - and clears NOPTR flag if it was set before by function 'set_noptr_lvar' - - @param v: (C++: lvar_t *) pointer to local variable - @param type: (C++: const tinfo_t &) new variable type - @return: false if failed +ida_hexrays.vdui_t.set_noptr_lvar(self, v: "lvar_t") -> bool + Inform that local variable should have a non-pointer type This function permanently sets a corresponding variable flag (NOPTR) and removes type if it was set before by function 'set_lvar_type' + + @param v: pointer to local variable + @returns false if failed -ida_hexrays.vdui_t.set_noptr_lvar (method) - set_noptr_lvar(self, v) -> bool - Inform that local variable should have a non-pointer type This function - permanently sets a corresponding variable flag (NOPTR) and removes type if it - was set before by function 'set_lvar_type' - - @param v: (C++: lvar_t *) pointer to local variable - @return: false if failed +ida_hexrays.vdui_t.set_num_enum(self) -> bool + Convert number to symbolic constant. This function displays a dialog box and allows the user to select a symbolic constant to represent the number. + + @returns false if failed or cancelled -ida_hexrays.vdui_t.set_num_enum (method) - set_num_enum(self) -> bool - Convert number to symbolic constant. This function displays a dialog box and - allows the user to select a symbolic constant to represent the number. - - @return: false if failed or cancelled +ida_hexrays.vdui_t.set_num_radix(self, base: int) -> bool + Change number base. This function changes the current number representation. + + @param base: number radix (10 or 16) + 0 means a character constant + @returns false if failed -ida_hexrays.vdui_t.set_num_radix (method) - set_num_radix(self, base) -> bool - Change number base. This function changes the current number representation. - - @param base: (C++: int) number radix (10 or 16) - 0 means a character constant - @return: false if failed +ida_hexrays.vdui_t.set_num_stroff(self) -> bool + Convert number to structure field offset. Currently not implemented. + + @returns false if failed or cancelled -ida_hexrays.vdui_t.set_num_stroff (method) - set_num_stroff(self) -> bool - Convert number to structure field offset. Currently not implemented. - - @return: false if failed or cancelled +ida_hexrays.vdui_t.set_udm_type(self, udt_type: "tinfo_t", udm_idx: int) -> bool + Set structure field type. This function displays a dialog box and allows the user to change the type of a structure field. + + @param udt_type: structure/union type + @param udm_idx: index of the structure/union member + @returns false if failed or cancelled -ida_hexrays.vdui_t.set_strmem_type (method) - set_strmem_type(self, sptr, mptr) -> bool - Set structure field type. This function displays a dialog box and allows the - user to change the type of a structure field. - - @param sptr: (C++: struc_t *) pointer to structure - @param mptr: (C++: member_t *) pointer to structure member OBSOLETE FUNCTION, do not use! - @return: false if failed or cancelled +ida_hexrays.vdui_t.set_valid(self, v: bool) -> None -ida_hexrays.vdui_t.set_udm_type (method) - set_udm_type(self, udt_type, udm_idx) -> bool - Set structure field type. This function displays a dialog box and allows the - user to change the type of a structure field. - - @param udt_type: (C++: tinfo_t &) structure/union type - @param udm_idx: (C++: int) index of the structure/union member - @return: false if failed or cancelled +ida_hexrays.vdui_t.set_visible(self, v: bool) -> None -ida_hexrays.vdui_t.set_valid (method) - set_valid(self, v) - - @param v: bool +ida_hexrays.vdui_t.split_item(self, split: bool) -> bool + Split/unsplit item. This function splits the current assignment expression. + + @returns false if failed. -ida_hexrays.vdui_t.set_visible (method) - set_visible(self, v) - - @param v: bool +ida_hexrays.vdui_t.switch_to(self, f: "cfuncptr_t", activate: bool) -> None + Display the specified pseudocode. This function replaces the pseudocode window contents with the specified cfunc_t. + + @param f: pointer to the function to display. + @param activate: should the pseudocode window get focus? -ida_hexrays.vdui_t.split_item (method) - split_item(self, split) -> bool - Split/unsplit item. This function splits the current assignment expression. - - @param split: (C++: bool) - @return: false if failed. - -ida_hexrays.vdui_t.switch_to (method) - switch_to(self, f, activate) - Display the specified pseudocode. This function replaces the pseudocode window - contents with the specified cfunc_t. - - @param f: (C++: cfuncptr_t) pointer to the function to display. - @param activate: (C++: bool) should the pseudocode window get focus? - -ida_hexrays.vdui_t.tail (variable) +ida_hexrays.vdui_t.tail Tail ctree item on the current line (for indented comments) -ida_hexrays.vdui_t.ui_edit_lvar_cmt (method) - ui_edit_lvar_cmt(self, v) -> bool - Set local variable comment. This function displays a dialog box and allows the - user to edit the comment of a local variable. - - @param v: (C++: lvar_t *) pointer to local variable - @return: false if failed or cancelled +ida_hexrays.vdui_t.ui_edit_lvar_cmt(self, v: "lvar_t") -> bool + Set local variable comment. This function displays a dialog box and allows the user to edit the comment of a local variable. + + @param v: pointer to local variable + @returns false if failed or cancelled -ida_hexrays.vdui_t.ui_map_lvar (method) - ui_map_lvar(self, v) -> bool - Map a local variable to another. This function displays a variable list and - allows the user to select mapping. - - @param v: (C++: lvar_t *) pointer to local variable - @return: false if failed or cancelled +ida_hexrays.vdui_t.ui_map_lvar(self, v: "lvar_t") -> bool + Map a local variable to another. This function displays a variable list and allows the user to select mapping. + + @param v: pointer to local variable + @returns false if failed or cancelled -ida_hexrays.vdui_t.ui_rename_lvar (method) - ui_rename_lvar(self, v) -> bool - Rename local variable. This function displays a dialog box and allows the user - to rename a local variable. - - @param v: (C++: lvar_t *) pointer to local variable - @return: false if failed or cancelled +ida_hexrays.vdui_t.ui_rename_lvar(self, v: "lvar_t") -> bool + Rename local variable. This function displays a dialog box and allows the user to rename a local variable. + + @param v: pointer to local variable + @returns false if failed or cancelled -ida_hexrays.vdui_t.ui_set_call_type (method) - ui_set_call_type(self, e) -> bool - Set type of a function call This function displays a dialog box and allows the - user to change the type of a function call - - @param e: (C++: const cexpr_t *) pointer to call expression - @return: false if failed or cancelled +ida_hexrays.vdui_t.ui_set_call_type(self, e: "cexpr_t") -> bool + Set type of a function call This function displays a dialog box and allows the user to change the type of a function call + + @param e: pointer to call expression + @returns false if failed or cancelled -ida_hexrays.vdui_t.ui_set_lvar_type (method) - ui_set_lvar_type(self, v) -> bool - Set local variable type. This function displays a dialog box and allows the user - to change the type of a local variable. - - @param v: (C++: lvar_t *) pointer to local variable - @return: false if failed or cancelled +ida_hexrays.vdui_t.ui_set_lvar_type(self, v: "lvar_t") -> bool + Set local variable type. This function displays a dialog box and allows the user to change the type of a local variable. + + @param v: pointer to local variable + @returns false if failed or cancelled -ida_hexrays.vdui_t.ui_unmap_lvar (method) - ui_unmap_lvar(self, v) -> bool - Unmap a local variable. This function displays list of variables mapped to the - specified variable and allows the user to select a variable to unmap. - - @param v: (C++: lvar_t *) pointer to local variable - @return: false if failed or cancelled +ida_hexrays.vdui_t.ui_unmap_lvar(self, v: "lvar_t") -> bool + Unmap a local variable. This function displays list of variables mapped to the specified variable and allows the user to select a variable to unmap. + + @param v: pointer to local variable + @returns false if failed or cancelled -ida_hexrays.vdui_t.valid (method) - valid(self) -> bool - Does the pseudocode window contain valid code? It can become invalid if the - function type gets changed in IDA. +ida_hexrays.vdui_t.valid(self) -> bool + Does the pseudocode window contain valid code? It can become invalid if the function type gets changed in IDA. + -ida_hexrays.vdui_t.view_idx (variable) +ida_hexrays.vdui_t.view_idx pseudocode window index (0..) -ida_hexrays.vdui_t.visible (method) - visible(self) -> bool - Is the pseudocode window visible? if not, it might be invisible or destroyed +ida_hexrays.vdui_t.visible(self) -> bool + Is the pseudocode window visible? if not, it might be invisible or destroyed + -ida_hexrays.vivl_t (class) - Proxy of C++ vivl_t class. +ida_hexrays.vivl_t -ida_hexrays.vivl_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: vivl_t const & - - __eq__(self, mop) -> bool - - @param mop: mop_t const & +ida_hexrays.vivl_t.__eq__(self, *args) -> bool -ida_hexrays.vivl_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: vivl_t const & +ida_hexrays.vivl_t.__ge__(self, r: "vivl_t") -> bool -ida_hexrays.vivl_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: vivl_t const & +ida_hexrays.vivl_t.__gt__(self, r: "vivl_t") -> bool -ida_hexrays.vivl_t.__init__ (method) - __init__(self, _type=mop_z, _off=-1, _size=0) -> vivl_t - - @param _type: mopt_t - @param _off: sval_t - @param _size: int - - __init__(self, ch) -> vivl_t - - @param ch: chain_t const & - - __init__(self, op) -> vivl_t - - @param op: mop_t const & +ida_hexrays.vivl_t.__init__(self, *args) -ida_hexrays.vivl_t.__le__ (method) - __le__(self, r) -> bool - - @param r: vivl_t const & +ida_hexrays.vivl_t.__le__(self, r: "vivl_t") -> bool -ida_hexrays.vivl_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: vivl_t const & +ida_hexrays.vivl_t.__lt__(self, r: "vivl_t") -> bool -ida_hexrays.vivl_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: vivl_t const & +ida_hexrays.vivl_t.__ne__(self, r: "vivl_t") -> bool -ida_hexrays.vivl_t._print (method) - _print(self) +ida_hexrays.vivl_t._print(self) -> None -ida_hexrays.vivl_t.compare (method) - compare(self, r) -> int - - @param r: vivl_t const & +ida_hexrays.vivl_t.compare(self, r: "vivl_t") -> int -ida_hexrays.vivl_t.contains (method) - contains(self, voff2) -> bool +ida_hexrays.vivl_t.contains(self, voff2: "voff_t") -> bool Does our value interval contain the specified value offset? - - @param voff2: (C++: const voff_t &) voff_t const & -ida_hexrays.vivl_t.dstr (method) - dstr(self) -> char const * +ida_hexrays.vivl_t.dstr(self) -> str -ida_hexrays.vivl_t.extend_to_cover (method) - extend_to_cover(self, r) -> bool - Extend a value interval using another value interval of the same type - - @param r: (C++: const vivl_t &) vivl_t const & - @return: success +ida_hexrays.vivl_t.extend_to_cover(self, r: "vivl_t") -> bool + Extend a value interval using another value interval of the same type + + @returns success -ida_hexrays.vivl_t.includes (method) - includes(self, r) -> bool +ida_hexrays.vivl_t.includes(self, r: "vivl_t") -> bool Does our value interval include another? - - @param r: (C++: const vivl_t &) vivl_t const & -ida_hexrays.vivl_t.intersect (method) - intersect(self, r) -> uval_t - Intersect value intervals the same type - - @param r: (C++: const vivl_t &) vivl_t const & - @return: size of the resulting intersection +ida_hexrays.vivl_t.intersect(self, r: "vivl_t") -> int + Intersect value intervals the same type + + @returns size of the resulting intersection -ida_hexrays.vivl_t.overlap (method) - overlap(self, r) -> bool +ida_hexrays.vivl_t.overlap(self, r: "vivl_t") -> bool Do two value intervals overlap? - - @param r: (C++: const vivl_t &) vivl_t const & -ida_hexrays.vivl_t.set (method) - set(self, _type, _off, _size=0) +ida_hexrays.vivl_t.set(self, *args) -> None + This function has the following signatures: - @param _type: mopt_t - @param _off: sval_t - @param _size: int + 0. set(_type: mopt_t, _off: int, _size: int=0) -> None + 1. set(voff: const voff_t &, _size: int) -> None - set(self, voff, _size) + # 0: set(_type: mopt_t, _off: int, _size: int=0) -> None - @param voff: voff_t const & - @param _size: int + + # 1: set(voff: const voff_t &, _size: int) -> None -ida_hexrays.vivl_t.set_reg (method) - set_reg(self, mreg, sz=0) - - @param mreg: mreg_t - @param sz: int +ida_hexrays.vivl_t.set_reg(self, mreg: "mreg_t", sz: int = 0) -> None -ida_hexrays.vivl_t.set_stkoff (method) - set_stkoff(self, stkoff, sz=0) - - @param stkoff: sval_t - @param sz: int +ida_hexrays.vivl_t.set_stkoff(self, stkoff: int, sz: int = 0) -> None -ida_hexrays.vivl_t.size (variable) +ida_hexrays.vivl_t.size Interval size in bytes. -ida_hexrays.voff_t (class) - Proxy of C++ voff_t class. +ida_hexrays.voff_t -ida_hexrays.voff_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: voff_t const & +ida_hexrays.voff_t.__eq__(self, r: "voff_t") -> bool -ida_hexrays.voff_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: voff_t const & +ida_hexrays.voff_t.__ge__(self, r: "voff_t") -> bool -ida_hexrays.voff_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: voff_t const & +ida_hexrays.voff_t.__gt__(self, r: "voff_t") -> bool -ida_hexrays.voff_t.__init__ (method) - __init__(self) -> voff_t - __init__(self, _type, _off) -> voff_t - - @param _type: mopt_t - @param _off: sval_t - - __init__(self, op) -> voff_t - - @param op: mop_t const & +ida_hexrays.voff_t.__init__(self, *args) -ida_hexrays.voff_t.__le__ (method) - __le__(self, r) -> bool - - @param r: voff_t const & +ida_hexrays.voff_t.__le__(self, r: "voff_t") -> bool -ida_hexrays.voff_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: voff_t const & +ida_hexrays.voff_t.__lt__(self, r: "voff_t") -> bool -ida_hexrays.voff_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: voff_t const & +ida_hexrays.voff_t.__ne__(self, r: "voff_t") -> bool -ida_hexrays.voff_t.add (method) - add(self, width) -> voff_t - - @param width: int +ida_hexrays.voff_t.add(self, width: int) -> "voff_t" -ida_hexrays.voff_t.compare (method) - compare(self, r) -> int - - @param r: voff_t const & +ida_hexrays.voff_t.compare(self, r: "voff_t") -> int -ida_hexrays.voff_t.defined (method) - defined(self) -> bool +ida_hexrays.voff_t.defined(self) -> bool -ida_hexrays.voff_t.diff (method) - diff(self, r) -> sval_t - - @param r: voff_t const & +ida_hexrays.voff_t.diff(self, r: "voff_t") -> int -ida_hexrays.voff_t.get_reg (method) - get_reg(self) -> mreg_t +ida_hexrays.voff_t.get_reg(self) -> "mreg_t" -ida_hexrays.voff_t.get_stkoff (method) - get_stkoff(self) -> sval_t +ida_hexrays.voff_t.get_stkoff(self) -> int -ida_hexrays.voff_t.inc (method) - inc(self, delta) - - @param delta: sval_t +ida_hexrays.voff_t.inc(self, delta: int) -> None -ida_hexrays.voff_t.is_reg (method) - is_reg(self) -> bool +ida_hexrays.voff_t.is_reg(self) -> bool -ida_hexrays.voff_t.is_stkoff (method) - is_stkoff(self) -> bool +ida_hexrays.voff_t.is_stkoff(self) -> bool -ida_hexrays.voff_t.off (variable) +ida_hexrays.voff_t.off register number or stack offset -ida_hexrays.voff_t.set (method) - set(self, _type, _off) - - @param _type: mopt_t - @param _off: sval_t +ida_hexrays.voff_t.set(self, _type: "mopt_t", _off: int) -> None -ida_hexrays.voff_t.set_reg (method) - set_reg(self, mreg) - - @param mreg: mreg_t +ida_hexrays.voff_t.set_reg(self, mreg: "mreg_t") -> None -ida_hexrays.voff_t.set_stkoff (method) - set_stkoff(self, stkoff) - - @param stkoff: sval_t +ida_hexrays.voff_t.set_stkoff(self, stkoff: int) -> None -ida_hexrays.voff_t.type (variable) +ida_hexrays.voff_t.type mop_r - register, mop_S - stack, mop_z - undefined -ida_hexrays.voff_t.undef (method) - undef(self) +ida_hexrays.voff_t.undef(self) -> None -ida_allins (module) - +ida_allins -ida_auto (module) +ida_auto Functions that work with the autoanalyzer queue. - The autoanalyzer works when IDA is not busy processing the user keystrokes. It - has several queues, each queue having its own priority. The analyzer stops when - all queues are empty. - - A queue contains addresses or address ranges. The addresses are kept sorted by - their values. The analyzer will process all addresses from the first queue, then - switch to the second queue and so on. There are no limitations on the size of - the queues. - - This file also contains functions that deal with the IDA status indicator and - the autoanalysis indicator. You may use these functions to change the indicator - value. + The autoanalyzer works when IDA is not busy processing the user keystrokes. It has several queues, each queue having its own priority. The analyzer stops when all queues are empty. + A queue contains addresses or address ranges. The addresses are kept sorted by their values. The analyzer will process all addresses from the first queue, then switch to the second queue and so on. There are no limitations on the size of the queues. + This file also contains functions that deal with the IDA status indicator and the autoanalysis indicator. You may use these functions to change the indicator value. + -ida_auto.AU_CHLB (variable) +ida_auto.AU_CHLB 12: load signature file (file name is kept separately) -ida_auto.AU_CODE (variable) +ida_auto.AU_CODE 1: convert to instruction -ida_auto.AU_FCHUNK (variable) +ida_auto.AU_FCHUNK 5: find func chunks -ida_auto.AU_FINAL (variable) +ida_auto.AU_FINAL 13: final pass -ida_auto.AU_LBF2 (variable) +ida_auto.AU_LBF2 10: the same, second pass -ida_auto.AU_LBF3 (variable) +ida_auto.AU_LBF3 11: the same, third pass -ida_auto.AU_LIBF (variable) +ida_auto.AU_LIBF 9: apply signature to address -ida_auto.AU_NONE (variable) +ida_auto.AU_NONE placeholder, not used -ida_auto.AU_PROC (variable) +ida_auto.AU_PROC 3: convert to procedure start -ida_auto.AU_TAIL (variable) +ida_auto.AU_TAIL 4: add a procedure tail -ida_auto.AU_TYPE (variable) +ida_auto.AU_TYPE 8: apply type information -ida_auto.AU_UNK (variable) +ida_auto.AU_UNK 0: convert to unexplored -ida_auto.AU_USD2 (variable) +ida_auto.AU_USD2 7: reanalyze, second pass -ida_auto.AU_USED (variable) +ida_auto.AU_USED 6: reanalyze -ida_auto.AU_WEAK (variable) +ida_auto.AU_WEAK 2: convert to instruction (ida decision) -ida_auto.auto_apply_tail (function) - auto_apply_tail(tail_ea, parent_ea) - Plan to apply the tail_ea chunk to the parent - - @param tail_ea: (C++: ea_t) linear address of start of tail - @param parent_ea: (C++: ea_t) linear address within parent. If BADADDR, automatically try to - find parent via xrefs. +ida_auto.auto_apply_tail(tail_ea: ida_idaapi.ea_t, parent_ea: ida_idaapi.ea_t) -> None + Plan to apply the tail_ea chunk to the parent + + @param tail_ea: linear address of start of tail + @param parent_ea: linear address within parent. If BADADDR, automatically try to find parent via xrefs. -ida_auto.auto_apply_type (function) - auto_apply_type(caller, callee) +ida_auto.auto_apply_type(caller: ida_idaapi.ea_t, callee: ida_idaapi.ea_t) -> None 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 (function) - 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) +ida_auto.auto_cancel(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> None + 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. + -ida_auto.auto_display_t (class) - Proxy of C++ auto_display_t class. +ida_auto.auto_display_t -ida_auto.auto_display_t.__init__ (method) - __init__(self) -> auto_display_t +ida_auto.auto_display_t.__init__(self) -ida_auto.auto_get (function) - 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_get(type: "atype_t *", lowEA: ida_idaapi.ea_t, highEA: ida_idaapi.ea_t) -> ida_idaapi.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. + -ida_auto.auto_is_ok (function) - auto_is_ok() -> bool - Are all queues empty? (i.e. has autoanalysis finished?). +ida_auto.auto_is_ok() -> bool + Are all queues empty? (i.e. has autoanalysis finished?). + -ida_auto.auto_make_code (function) - auto_make_code(ea) +ida_auto.auto_make_code(ea: ida_idaapi.ea_t) -> None Plan to make code. - - @param ea: (C++: ea_t) -ida_auto.auto_make_proc (function) - auto_make_proc(ea) +ida_auto.auto_make_proc(ea: ida_idaapi.ea_t) -> None Plan to make code&function. - - @param ea: (C++: ea_t) -ida_auto.auto_make_step (function) - auto_make_step(ea1, ea2) -> bool - Analyze one address in the specified range and return true. - - @param ea1: (C++: ea_t) - @param ea2: (C++: ea_t) - @return: if processed anything. false means that there is nothing to process in - the specified range. +ida_auto.auto_make_step(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> bool + Analyze one address in the specified range and return true. + + @returns if processed anything. false means that there is nothing to process in the specified range. -ida_auto.auto_mark (function) - auto_mark(ea, type) +ida_auto.auto_mark(ea: ida_idaapi.ea_t, type: "atype_t") -> None 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 (function) - 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_mark_range(start: ida_idaapi.ea_t, end: ida_idaapi.ea_t, type: "atype_t") -> None + 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. + -ida_auto.auto_postpone_analysis (function) - auto_postpone_analysis(ea) -> bool - Plan to reanalyze on the second pass The typical usage of this function in - emu.cpp is: if ( !auto_postpone_analysis(ea) ) op_offset(ea, 0, ...); (we make - an offset only on the second pass) - - @param ea: (C++: ea_t) +ida_auto.auto_postpone_analysis(ea: ida_idaapi.ea_t) -> bool + Plan to reanalyze on the second pass The typical usage of this function in emu.cpp is: if ( !auto_postpone_analysis(ea) ) op_offset(ea, 0, ...); (we make an offset only on the second pass) + -ida_auto.auto_recreate_insn (function) - auto_recreate_insn(ea) -> int - Try to create instruction - - @param ea: (C++: ea_t) linear address of callee - @return: the length of the instruction or 0 +ida_auto.auto_recreate_insn(ea: ida_idaapi.ea_t) -> int + Try to create instruction + + @param ea: linear address of callee + @returns the length of the instruction or 0 -ida_auto.auto_unmark (function) - 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_unmark(start: ida_idaapi.ea_t, end: ida_idaapi.ea_t, type: "atype_t") -> None + 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. + -ida_auto.auto_wait (function) - 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() -> bool + Process everything in the queues and return true. + + @returns false if the user clicked cancel. (the wait box must be displayed by the caller if desired) -ida_auto.auto_wait_range (function) - 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.auto_wait_range(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> "ssize_t" + Process everything in the specified range and return true. + + @returns 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 (function) - 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.enable_auto(enable: bool) -> 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 + + @returns old state -ida_auto.get_auto_display (function) - get_auto_display(auto_display) -> bool +ida_auto.get_auto_display(auto_display: "auto_display_t") -> bool Get structure which holds the autoanalysis indicator contents. - - @param auto_display: (C++: auto_display_t *) -ida_auto.get_auto_state (function) - 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.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 (function) - is_auto_enabled() -> bool +ida_auto.is_auto_enabled() -> bool Get autoanalyzer state. -ida_auto.may_create_stkvars (function) - 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_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 (function) - 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.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 (function) - 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.peek_auto_queue(low_ea: ida_idaapi.ea_t, type: "atype_t") -> ida_idaapi.ea_t + Peek into a queue 'type' for an address not lower than 'low_ea'. Do not remove address from the queue. + + @returns the address or BADADDR -ida_auto.plan_and_wait (function) - 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. +ida_auto.plan_and_wait(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, final_pass: bool = 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. + @retval 1: ok @retval 0: Ctrl-Break was pressed - - @param ea1: (C++: ea_t) - @param ea2: (C++: ea_t) - @param final_pass: (C++: bool) -ida_auto.plan_ea (function) - plan_ea(ea) +ida_auto.plan_ea(ea: ida_idaapi.ea_t) -> None Plan to perform reanalysis. - - @param ea: (C++: ea_t) -ida_auto.plan_range (function) - plan_range(sEA, eEA) +ida_auto.plan_range(sEA: ida_idaapi.ea_t, eEA: ida_idaapi.ea_t) -> None Plan to perform reanalysis. - - @param sEA: (C++: ea_t) - @param eEA: (C++: ea_t) -ida_auto.reanalyze_callers (function) - 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: (C++: ea_t) linear address of callee - @param noret: (C++: bool) !=0: the callee doesn't return, mark to undefine subsequent - instructions in the caller. 0: do nothing. +ida_auto.reanalyze_callers(ea: ida_idaapi.ea_t, noret: bool) -> None + 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 + @param noret: !=0: the callee doesn't return, mark to undefine subsequent instructions in the caller. 0: do nothing. -ida_auto.revert_ida_decisions (function) - revert_ida_decisions(ea1, ea2) +ida_auto.revert_ida_decisions(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> None 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 (function) - set_auto_state(new_state) -> atype_t - Set current state of autoanalyzer. - - @param new_state: (C++: atype_t) new state of autoanalyzer - @return: previous state +ida_auto.set_auto_state(new_state: "atype_t") -> "atype_t" + Set current state of autoanalyzer. + + @param new_state: new state of autoanalyzer + @returns previous state -ida_auto.set_ida_state (function) - set_ida_state(st) -> idastate_t - Change IDA status indicator value - - @param st: (C++: idastate_t) - new indicator status - @return: old indicator status +ida_auto.set_ida_state(st: "idastate_t") -> "idastate_t" + Change IDA status indicator value + + @param st: - new indicator status + @returns old indicator status -ida_auto.show_addr (function) - show_addr(ea) - Show an address on the autoanalysis indicator. The address is displayed in the - form " @:12345678". - - @param ea: (C++: ea_t) - linear address to display +ida_auto.show_addr(ea: ida_idaapi.ea_t) -> None + Show an address on the autoanalysis indicator. The address is displayed in the form " @:12345678". + + @param ea: - linear address to display -ida_auto.show_auto (function) - show_auto(ea, type=AU_NONE) - Change autoanalysis indicator value. - - @param ea: (C++: ea_t) linear address being analyzed - @param type: (C++: atype_t) autoanalysis type (see Autoanalysis queues) +ida_auto.show_auto(*args) -> None + Change autoanalysis indicator value. + + @param ea: linear address being analyzed + @param type: autoanalysis type (see Autoanalysis queues) -ida_bitrange (module) +ida_auto.st_Ready + READY: IDA is doing nothing. + +ida_auto.st_Think + THINKING: Autoanalysis on, the user may press keys. + +ida_auto.st_Waiting + WAITING: Waiting for the user input. + +ida_auto.st_Work + BUSY: IDA is busy. + +ida_bitrange Definition of the bitrange_t class. -ida_bitrange.bitrange_t (class) - Proxy of C++ bitrange_t class. +ida_bitrange.bitrange_t -ida_bitrange.bitrange_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: bitrange_t const & +ida_bitrange.bitrange_t.__eq__(self, r: "bitrange_t") -> bool -ida_bitrange.bitrange_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: bitrange_t const & +ida_bitrange.bitrange_t.__ge__(self, r: "bitrange_t") -> bool -ida_bitrange.bitrange_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: bitrange_t const & +ida_bitrange.bitrange_t.__gt__(self, r: "bitrange_t") -> bool -ida_bitrange.bitrange_t.__init__ (method) - __init__(self, bit_ofs=0, size_in_bits=0) -> bitrange_t - - @param bit_ofs: uint16 - @param size_in_bits: uint16 +ida_bitrange.bitrange_t.__init__(self, bit_ofs: "uint16" = 0, size_in_bits: "uint16" = 0) -ida_bitrange.bitrange_t.__le__ (method) - __le__(self, r) -> bool - - @param r: bitrange_t const & +ida_bitrange.bitrange_t.__le__(self, r: "bitrange_t") -> bool -ida_bitrange.bitrange_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: bitrange_t const & +ida_bitrange.bitrange_t.__lt__(self, r: "bitrange_t") -> bool -ida_bitrange.bitrange_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: bitrange_t const & +ida_bitrange.bitrange_t.__ne__(self, r: "bitrange_t") -> bool -ida_bitrange.bitrange_t.__str__ (method) - __str__(self) -> qstring +ida_bitrange.bitrange_t.__repr__(self) -ida_bitrange.bitrange_t.apply_mask (method) - apply_mask(self, subrange) -> bool - Apply mask to a bitrange - - @param subrange: (C++: const bitrange_t &) range *inside* the main bitrange to keep After this operation - the main bitrange will be truncated to have only the bits that - are specified by subrange. Example: [off=8,nbits=4], - subrange[off=1,nbits=2] => [off=9,nbits=2] - @return: success +ida_bitrange.bitrange_t.__str__(self) -> str -ida_bitrange.bitrange_t.bitoff (method) - bitoff(self) -> uint +ida_bitrange.bitrange_t.apply_mask(self, subrange: "bitrange_t") -> bool + Apply mask to a bitrange + + @param subrange: range *inside* the main bitrange to keep After this operation the main bitrange will be truncated to have only the bits that are specified by subrange. Example: [off=8,nbits=4], subrange[off=1,nbits=2] => [off=9,nbits=2] + @returns success + +ida_bitrange.bitrange_t.bitoff(self) -> "uint" Get offset of 1st bit. -ida_bitrange.bitrange_t.bitsize (method) - bitsize(self) -> uint +ida_bitrange.bitrange_t.bitsize(self) -> "uint" Get size of the value in bits. -ida_bitrange.bitrange_t.bytesize (method) - bytesize(self) -> uint +ida_bitrange.bitrange_t.bytesize(self) -> "uint" Size of the value in bytes. -ida_bitrange.bitrange_t.compare (method) - compare(self, r) -> int - - @param r: bitrange_t const & +ida_bitrange.bitrange_t.compare(self, r: "bitrange_t") -> int -ida_bitrange.bitrange_t.create_union (method) - create_union(self, r) +ida_bitrange.bitrange_t.create_union(self, r: "bitrange_t") -> None Create union of 2 ranges including the hole between them. - - @param r: (C++: const bitrange_t &) bitrange_t const & -ida_bitrange.bitrange_t.empty (method) - empty(self) -> bool +ida_bitrange.bitrange_t.empty(self) -> bool Is the bitrange empty? -ida_bitrange.bitrange_t.extract (method) - extract(self, src, is_mf) -> bool - - @param src: void const * - @param is_mf: bool +ida_bitrange.bitrange_t.extract(self, src: "void const *", is_mf: bool) -> bool -ida_bitrange.bitrange_t.has_common (method) - has_common(self, r) -> bool +ida_bitrange.bitrange_t.has_common(self, r: "bitrange_t") -> bool Does have common bits with another bitrange? - - @param r: (C++: const bitrange_t &) bitrange_t const & -ida_bitrange.bitrange_t.init (method) - init(self, bit_ofs, size_in_bits) +ida_bitrange.bitrange_t.init(self, bit_ofs: "uint16", size_in_bits: "uint16") -> None Initialize offset and size to given values. - - @param bit_ofs: (C++: uint16) - @param size_in_bits: (C++: uint16) -ida_bitrange.bitrange_t.inject (method) - inject(self, dst, src, is_mf) -> bool - - @param dst: void * - @param src: bytevec_t const & - @param is_mf: bool +ida_bitrange.bitrange_t.inject(self, dst: "void *", src: "bytevec_t const &", is_mf: bool) -> bool -ida_bitrange.bitrange_t.intersect (method) - intersect(self, r) +ida_bitrange.bitrange_t.intersect(self, r: "bitrange_t") -> None Intersect two ranges. - - @param r: (C++: const bitrange_t &) bitrange_t const & -ida_bitrange.bitrange_t.mask64 (method) - mask64(self) -> uint64 +ida_bitrange.bitrange_t.mask64(self) -> "uint64" Convert to mask of 64 bits. -ida_bitrange.bitrange_t.reset (method) - reset(self) +ida_bitrange.bitrange_t.reset(self) -> None Make the bitrange empty. -ida_bitrange.bitrange_t.shift_down (method) - shift_down(self, cnt) +ida_bitrange.bitrange_t.shift_down(self, cnt: "uint") -> None Shift range down (left) - - @param cnt: (C++: uint) -ida_bitrange.bitrange_t.shift_up (method) - shift_up(self, cnt) +ida_bitrange.bitrange_t.shift_up(self, cnt: "uint") -> None Shift range up (right) - - @param cnt: (C++: uint) -ida_bitrange.bitrange_t.sub (method) - sub(self, r) -> bool +ida_bitrange.bitrange_t.sub(self, r: "bitrange_t") -> bool Subtract a bitrange. - - @param r: (C++: const bitrange_t &) bitrange_t const & -ida_bytes (module) +ida_bytes Contains functions that deal with individual byte characteristics. - Each byte of the disassembled program is represented by a 32-bit value. We will - call this value 'flags'. The structure of the flags is here. - - You are not allowed to inspect individual bits of flags and modify them - directly. Use special functions to inspect and/or modify flags. - - Flags are kept in a virtual array file (*.id1). Addresses (ea) are all 32-bit - (or 64-bit) quantities. + Each byte of the disassembled program is represented by a 32-bit value. We will call this value 'flags'. The structure of the flags is here. + You are not allowed to inspect individual bits of flags and modify them directly. Use special functions to inspect and/or modify flags. + Flags are kept in a virtual array file (*.id1). Addresses (ea) are all 32-bit (or 64-bit) quantities. + -ida_bytes.ALOPT_APPEND (variable) - if an existing strlit is encountered, then append it to the string. +ida_bytes.ALOPT_APPEND + if an existing strlit is encountered, then append it to the string. + -ida_bytes.ALOPT_IGNCLT (variable) - 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_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 (variable) - 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_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 (variable) - 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_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 (variable) - if string length is more than 4K, return the accumulated length +ida_bytes.ALOPT_MAX4K + if string length is more than 4K, return the accumulated length + -ida_bytes.ALOPT_ONLYTERM (variable) - only the termination characters can be at the string end. Without this option - illegal characters also terminate the string. +ida_bytes.ALOPT_ONLYTERM + only the termination characters can be at the string end. Without this option illegal characters also terminate the string. + -ida_bytes.BIN_SEARCH_BACKWARD (variable) +ida_bytes.BIN_SEARCH_BACKWARD search backward for bytes -ida_bytes.BIN_SEARCH_BITMASK (variable) +ida_bytes.BIN_SEARCH_BITMASK searching using strict bit mask -ida_bytes.BIN_SEARCH_CASE (variable) +ida_bytes.BIN_SEARCH_CASE case sensitive -ida_bytes.BIN_SEARCH_FORWARD (variable) +ida_bytes.BIN_SEARCH_FORWARD search forward for bytes -ida_bytes.BIN_SEARCH_INITED (variable) +ida_bytes.BIN_SEARCH_INITED find_byte, find_byter: any initilized value -ida_bytes.BIN_SEARCH_NOBREAK (variable) +ida_bytes.BIN_SEARCH_NOBREAK don't check for Ctrl-Break -ida_bytes.BIN_SEARCH_NOCASE (variable) +ida_bytes.BIN_SEARCH_NOCASE case insensitive -ida_bytes.BIN_SEARCH_NOSHOW (variable) +ida_bytes.BIN_SEARCH_NOSHOW don't show search progress or update screen -ida_bytes.DELIT_DELNAMES (variable) - delete any names at the specified address range (except for the starting - address). this bit is valid if nbytes > 1 +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 (variable) - 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_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 (variable) - do not undefine the function start. Just delete xrefs, ops e.t.c. +ida_bytes.DELIT_KEEPFUNC + do not undefine the function start. Just delete xrefs, ops e.t.c. + -ida_bytes.DELIT_NOCMT (variable) - 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_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 (variable) - don't truncate the current function even if AF_TRFUNC is set +ida_bytes.DELIT_NOTRUNC + don't truncate the current function even if AF_TRFUNC is set + -ida_bytes.DELIT_NOUNAME (variable) - 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_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 (variable) +ida_bytes.DELIT_SIMPLE simply undefine the specified item(s) -ida_bytes.DTP_NODUP (variable) +ida_bytes.DTP_NODUP do not use dup construct -ida_bytes.DT_TYPE (variable) +ida_bytes.DTP_NODUP + do not use dup construct + +ida_bytes.DT_TYPE Mask for DATA typing. -ida_bytes.FF_ALIGN (variable) +ida_bytes.FF_ALIGN alignment directive -ida_bytes.FF_BNOT (variable) +ida_bytes.FF_ANYNAME + Has name or dummy name? + +ida_bytes.FF_BNOT Bitwise negation of operands. -ida_bytes.FF_BYTE (variable) +ida_bytes.FF_BYTE byte -ida_bytes.FF_CODE (variable) +ida_bytes.FF_CODE Code ? -ida_bytes.FF_COMM (variable) +ida_bytes.FF_COMM Has comment ? -ida_bytes.FF_CUSTOM (variable) +ida_bytes.FF_CUSTOM custom data type -ida_bytes.FF_DATA (variable) +ida_bytes.FF_DATA Data ? -ida_bytes.FF_DOUBLE (variable) +ida_bytes.FF_DOUBLE double -ida_bytes.FF_DWORD (variable) +ida_bytes.FF_DWORD double word -ida_bytes.FF_FLOAT (variable) +ida_bytes.FF_FLOAT float -ida_bytes.FF_FLOW (variable) +ida_bytes.FF_FLOW Exec flow from prev instruction. -ida_bytes.FF_FUNC (variable) +ida_bytes.FF_FUNC function start? -ida_bytes.FF_IMMD (variable) +ida_bytes.FF_IMMD Has Immediate value ? -ida_bytes.FF_IVL (variable) +ida_bytes.FF_IVL Byte has value ? -ida_bytes.FF_JUMP (variable) +ida_bytes.FF_JUMP Has jump table or switch_info? -ida_bytes.FF_LABL (variable) +ida_bytes.FF_LABL Has dummy name? -ida_bytes.FF_LINE (variable) +ida_bytes.FF_LINE Has next or prev lines ? -ida_bytes.FF_NAME (variable) +ida_bytes.FF_NAME Has name ? -ida_bytes.FF_N_CHAR (variable) +ida_bytes.FF_N_CHAR Char ('x')? -ida_bytes.FF_N_CUST (variable) +ida_bytes.FF_N_CUST Custom representation? -ida_bytes.FF_N_ENUM (variable) +ida_bytes.FF_N_ENUM Enumeration? -ida_bytes.FF_N_FLT (variable) +ida_bytes.FF_N_FLT Floating point number? -ida_bytes.FF_N_FOP (variable) +ida_bytes.FF_N_FOP Forced operand? -ida_bytes.FF_N_NUMB (variable) +ida_bytes.FF_N_NUMB Binary number? -ida_bytes.FF_N_NUMD (variable) +ida_bytes.FF_N_NUMD Decimal number? -ida_bytes.FF_N_NUMH (variable) +ida_bytes.FF_N_NUMH Hexadecimal number? -ida_bytes.FF_N_NUMO (variable) +ida_bytes.FF_N_NUMO Octal number? -ida_bytes.FF_N_OFF (variable) +ida_bytes.FF_N_OFF Offset? -ida_bytes.FF_N_SEG (variable) +ida_bytes.FF_N_SEG Segment? -ida_bytes.FF_N_STK (variable) +ida_bytes.FF_N_STK Stack variable? -ida_bytes.FF_N_STRO (variable) +ida_bytes.FF_N_STRO Struct offset? -ida_bytes.FF_N_VOID (variable) +ida_bytes.FF_N_VOID Void (unknown)? -ida_bytes.FF_OWORD (variable) +ida_bytes.FF_OWORD octaword/xmm word (16 bytes/128 bits) -ida_bytes.FF_PACKREAL (variable) +ida_bytes.FF_PACKREAL packed decimal real -ida_bytes.FF_QWORD (variable) +ida_bytes.FF_QWORD quadro word -ida_bytes.FF_REF (variable) +ida_bytes.FF_REF has references -ida_bytes.FF_SIGN (variable) +ida_bytes.FF_SIGN Inverted sign of operands. -ida_bytes.FF_STRLIT (variable) +ida_bytes.FF_STRLIT string literal -ida_bytes.FF_STRUCT (variable) +ida_bytes.FF_STRUCT struct variable -ida_bytes.FF_TAIL (variable) +ida_bytes.FF_TAIL Tail ? -ida_bytes.FF_TBYTE (variable) +ida_bytes.FF_TBYTE tbyte -ida_bytes.FF_UNK (variable) +ida_bytes.FF_UNK Unknown ? -ida_bytes.FF_UNUSED (variable) +ida_bytes.FF_UNUSED unused bit (was used for variable bytes) -ida_bytes.FF_WORD (variable) +ida_bytes.FF_WORD word -ida_bytes.FF_YWORD (variable) +ida_bytes.FF_YWORD ymm word (32 bytes/256 bits) -ida_bytes.FF_ZWORD (variable) +ida_bytes.FF_ZWORD zmm word (64 bytes/512 bits) -ida_bytes.GFE_IDB_VALUE (variable) - get flags with FF_IVL & MS_VAL. but never use the debugger memory. +ida_bytes.GFE_IDB_VALUE + get flags with FF_IVL & MS_VAL. but never use the debugger memory. + -ida_bytes.GFE_VALUE (variable) - 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.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 (variable) - try to read all bytes; if this bit is not set, fail at first uninited byte +ida_bytes.GMB_READALL + try to read all bytes; if this bit is not set, fail at first uninited byte + -ida_bytes.GMB_WAITBOX (variable) +ida_bytes.GMB_WAITBOX show wait box (may return -1 in this case) -ida_bytes.ITEM_END_CANCEL (variable) - stop when operation cancelled, it is the responsibility of the caller to show - the wait dialog +ida_bytes.ITEM_END_CANCEL + stop when operation cancelled, it is the responsibility of the caller to show the wait dialog + -ida_bytes.ITEM_END_FIXUP (variable) +ida_bytes.ITEM_END_FIXUP stop at the first fixup -ida_bytes.ITEM_END_INITED (variable) +ida_bytes.ITEM_END_INITED stop when initialization changes i.e. * if is_loaded(ea): stop if uninitialized byte is encountered - * if !is_loaded(ea): stop if initialized byte is encountered + * if !is_loaded(ea): stop if initialized byte is encountered + + + -ida_bytes.ITEM_END_NAME (variable) +ida_bytes.ITEM_END_NAME stop at the first named location -ida_bytes.ITEM_END_XREF (variable) +ida_bytes.ITEM_END_XREF stop at the first referenced location -ida_bytes.MS_CLS (variable) +ida_bytes.MS_CLS Mask for typing. -ida_bytes.MS_CODE (variable) +ida_bytes.MS_CODE Mask for code bits. -ida_bytes.MS_COMM (variable) +ida_bytes.MS_COMM Mask of common bits. -ida_bytes.MS_N_TYPE (variable) +ida_bytes.MS_N_TYPE Mask for nth arg (a 64-bit constant) -ida_bytes.MS_VAL (variable) +ida_bytes.MS_VAL Mask for byte value. -ida_bytes.OPND_ALL (variable) +ida_bytes.OPND_ALL all operands -ida_bytes.OPND_MASK (variable) +ida_bytes.OPND_MASK mask for operand number -ida_bytes.OPND_OUTER (variable) - outer offset base (combined with operand number). used only in set, get, - del_offset() functions +ida_bytes.OPND_OUTER + outer offset base (combined with operand number). used only in set, get, del_offset() functions + -ida_bytes.PSTF_ATTRIB (variable) +ida_bytes.PBSENC_ALL + Use all IDB encodings. + +ida_bytes.PBSENC_DEF1BPU + Use the default 1 byte-per-unit IDB encoding. + +ida_bytes.PSTF_ATTRIB generate for type attribute usage -ida_bytes.PSTF_ENC (variable) +ida_bytes.PSTF_ENC if encoding is specified, append it -ida_bytes.PSTF_HOTKEY (variable) +ida_bytes.PSTF_HOTKEY have hotkey markers part of the name -ida_bytes.PSTF_ONLY_ENC (variable) +ida_bytes.PSTF_ONLY_ENC generate only the encoding name -ida_bytes.PSTF_TBRIEF (variable) +ida_bytes.PSTF_TBRIEF use brief name (e.g., in the 'Strings' window) -ida_bytes.PSTF_TINLIN (variable) +ida_bytes.PSTF_TINLIN use 'inline' name (e.g., in the structures comments) -ida_bytes.PSTF_TMASK (variable) +ida_bytes.PSTF_TMASK type mask -ida_bytes.PSTF_TNORM (variable) +ida_bytes.PSTF_TNORM use normal name -ida_bytes.STRCONV_ESCAPE (variable) +ida_bytes.STRCONV_ESCAPE convert non-printable characters to C escapes ( , \xNN, \uNNNN) -ida_bytes.STRCONV_INCLLEN (variable) - for Pascal-style strings, include the prefixing length byte(s) as C-escaped - sequence +ida_bytes.STRCONV_INCLLEN + for Pascal-style strings, include the prefixing length byte(s) as C-escaped sequence -ida_bytes.STRCONV_REPLCHAR (variable) +ida_bytes.STRCONV_REPLCHAR convert non-printable characters to the Unicode replacement character (U+FFFD) -ida_bytes.__walk_types_and_formats (function) +ida_bytes.__to_bytevec(_in: "bytevec_t const &") -> "bytevec_t" -ida_bytes.add_byte (function) - add_byte(ea, value) - Add a value to one byte of the program. This function works for wide byte - processors too. - - @param ea: (C++: ea_t) linear address - @param value: (C++: uint32) byte value +ida_bytes.__walk_types_and_formats(formats, type_action, format_action, installing) -ida_bytes.add_dword (function) - 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 - idainfo::is_be() - @note: this function works incorrectly if processor_t::nbits > 16 - - @param ea: (C++: ea_t) linear address - @param value: (C++: uint64) byte value +ida_bytes.add_byte(ea: ida_idaapi.ea_t, value: int) -> None + Add a value to one byte of the program. This function works for wide byte processors too. + + @param ea: linear address + @param value: byte value -ida_bytes.add_hidden_range (function) - add_hidden_range(ea1, ea2, description, header, footer, color=bgcolor_t(-1)) -> bool - Mark a range of addresses as hidden. The range will be created in the invisible - state with the default color - - @param ea1: (C++: ea_t) linear address of start of the address range - @param ea2: (C++: ea_t) linear address of end of the address range - @param description: (C++: const char *) ,header,footer: range parameters - @param header: (C++: const char *) char const * - @param footer: (C++: const char *) char const * - @param color: (C++: bgcolor_t) the range color - @return: success +ida_bytes.add_dword(ea: ida_idaapi.ea_t, value: "uint64") -> None + 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 idainfo::is_be() + + @param ea: linear address + @param value: byte value -ida_bytes.add_mapping (function) - 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. - @note: You should set flag PR2_MAPPING in ph.flag2 to use memory mapping Add - memory mapping range. - - @param from: (C++: ea_t) start of the mapped range (nonexistent address) - @param to: (C++: ea_t) start of the mapping range (existent address) - @param size: (C++: asize_t) size of the range - @return: success +ida_bytes.add_hidden_range(*args) -> 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 + @param ea2: linear address of end of the address range + @param description: range parameters + @param header: range parameters + @param footer: range parameters + @param color: the range color + @returns success -ida_bytes.add_qword (function) - 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 - idainfo::is_be() - - @param ea: (C++: ea_t) linear address - @param value: (C++: uint64) byte value +ida_bytes.add_mapping(_from: ida_idaapi.ea_t, to: ida_idaapi.ea_t, size: "asize_t") -> bool + IDA supports memory mapping. References to the addresses from the mapped range use data and meta-data from the mapping range. + + @param to: start of the mapping range (existent address) + @param size: size of the range + @returns success -ida_bytes.add_word (function) - 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 - idainfo::is_be() - - @param ea: (C++: ea_t) linear address - @param value: (C++: uint64) byte value +ida_bytes.add_qword(ea: ida_idaapi.ea_t, value: "uint64") -> None + 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 idainfo::is_be() + + @param ea: linear address + @param value: byte value -ida_bytes.align_flag (function) - align_flag() -> flags64_t +ida_bytes.add_word(ea: ida_idaapi.ea_t, value: "uint64") -> None + 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 idainfo::is_be() + + @param ea: linear address + @param value: byte value + +ida_bytes.align_flag() -> "flags64_t" Get a flags64_t representing an alignment directive. -ida_bytes.append_cmt (function) - 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: (C++: ea_t) linear address - @param str: (C++: const char *) comment string to append - @param rptble: (C++: bool) append to repeatable comment? - @return: success +ida_bytes.append_cmt(ea: ida_idaapi.ea_t, str: str, rptble: bool) -> 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 + @param str: comment string to append + @param rptble: append to repeatable comment? + @returns success -ida_bytes.attach_custom_data_format (function) - attach_custom_data_format(dtid, dfid) -> bool - Attach the data format to the data type. - - @param dtid: (C++: int) 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. - @param dfid: (C++: int) data format id +ida_bytes.attach_custom_data_format(dtid: int, dfid: int) -> 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. + @param dfid: data format id @retval true: ok - @retval false: no such `dtid', or no such `dfid', or the data format has already - been attached to the data type + @retval false: no such `dtid`, or no such `dfid', or the data format has already been attached to the data type -ida_bytes.bin_flag (function) - bin_flag() -> flags64_t - Get number flag of the base, regardless of current processor - better to use - num_flag() +ida_bytes.bin_flag() -> "flags64_t" + Get number flag of the base, regardless of current processor - better to use num_flag() -ida_bytes.bin_search (function) - bin_search(start_ea, end_ea, data, flags) -> ea_t +ida_bytes.bin_search(*args) Search for a set of bytes in the program + This function has the following signatures: + + 1. bin_search(start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, data: compiled_binpat_vec_t, flags: int) -> Tuple[ida_idaapi.ea_t, int] + 2. bin_search(start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, image: bytes, mask: bytes, len: int, flags: int) -> ida_idaapi.ea_t + + The return value type will differ depending on the form: + + 1. a tuple `(matched-address, index-in-compiled_binpat_vec_t)` (1st form) + 2. the address of a match, or ida_idaapi.BADADDR if not found (2nd form) + + This is a low-level function; more user-friendly alternatives + are available. Please see 'find_bytes' and 'find_string'. + @param start_ea: linear address, start of range to search @param end_ea: linear address, end of range to search (exclusive) - @param data: the prepared data to search for (see parse_binpat_str()) + @param data: (1st form) the prepared data to search for (see parse_binpat_str()) + @param bytes: (2nd form) a set of bytes to match + @param mask: (2nd form) a mask to apply to the set of bytes @param flags: combination of BIN_SEARCH_* flags - @return: the address of a match, or ida_idaapi.BADADDR if not found - bin_search(start_ea, end_ea, image, imask, step, flags) -> ea_t - - @param start_ea: ea_t - @param end_ea: ea_t - @param image: bytevec_t const & - @param imask: bytevec_t const & - @param step: int - @param flags: int + @return: either a tuple holding both the address of the match and the index of the compiled pattern that matched, or the address of a match (ida_idaapi.BADADDR if not found) -ida_bytes.bin_search3 (function) - bin_search3(start_ea, end_ea, data, flags) -> ea_t - Search for a patter in the program. - - @param start_ea: (C++: ea_t) linear address, start of range to search - @param end_ea: (C++: ea_t) linear address, end of range to search (exclusive) - @param data: (C++: const compiled_binpat_vec_t &) the prepared data to search for (see parse_binpat_str()) - @param flags: (C++: int) combination of Search flags - @return: BADADDR (if pressed Ctrl-Break or not found) or pattern address. - -ida_bytes.byte_flag (function) - byte_flag() -> flags64_t +ida_bytes.byte_flag() -> "flags64_t" Get a flags64_t representing a byte. -ida_bytes.bytesize (function) - bytesize(ea) -> int +ida_bytes.bytesize(ea: ida_idaapi.ea_t) -> int Get number of bytes required to store a byte at the given address. - - @param ea: (C++: ea_t) -ida_bytes.calc_def_align (function) - calc_def_align(ea, mina, maxa) -> int - Calculate the default alignment exponent. - - @param ea: (C++: ea_t) linear address - @param mina: (C++: int) minimal possible alignment exponent. - @param maxa: (C++: int) minimal possible alignment exponent. +ida_bytes.calc_def_align(ea: ida_idaapi.ea_t, mina: int, maxa: int) -> int + Calculate the default alignment exponent. + + @param ea: linear address + @param mina: minimal possible alignment exponent. + @param maxa: minimal possible alignment exponent. -ida_bytes.calc_dflags (function) - calc_dflags(f, force) -> flags64_t - - @param f: flags64_t - @param force: bool +ida_bytes.calc_dflags(f: "flags64_t", force: bool) -> "flags64_t" -ida_bytes.calc_max_align (function) - calc_max_align(endea) -> int - Calculate the maximal possible alignment exponent. - - @param endea: (C++: ea_t) end address of the alignment item. - @return: a value in the 0..32 range +ida_bytes.calc_max_align(endea: ida_idaapi.ea_t) -> int + Calculate the maximal possible alignment exponent. + + @param endea: end address of the alignment item. + @returns a value in the 0..32 range -ida_bytes.calc_max_item_end (function) - 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: (C++: ea_t) linear address - @param how: (C++: int) when to stop the search. A combination of Item end search flags - @return: end of new item. If it is not possible to create an item, it will - return 'ea'. If operation was cancelled by user, it will return 'ea' +ida_bytes.calc_max_item_end(ea: ida_idaapi.ea_t, how: int = 15) -> ida_idaapi.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 + @param how: when to stop the search. A combination of Item end search flags + @returns end of new item. If it is not possible to create an item, it will return 'ea'. If operation was cancelled by user, it will return 'ea' -ida_bytes.calc_min_align (function) - calc_min_align(length) -> int - Calculate the minimal possible alignment exponent. - - @param length: (C++: asize_t) size of the item in bytes. - @return: a value in the 1..32 range +ida_bytes.calc_min_align(length: "asize_t") -> int + Calculate the minimal possible alignment exponent. + + @param length: size of the item in bytes. + @returns a value in the 1..32 range -ida_bytes.can_define_item (function) - can_define_item(ea, length, flags) -> bool - Can define item (instruction/data) of the specified 'length', starting at 'ea'? - @note: if there is an item starting at 'ea', this function ignores it - @note: this function converts to unexplored all encountered data items with - fixup information. Should be fixed in the future. +ida_bytes.can_define_item(ea: ida_idaapi.ea_t, length: "asize_t", flags: "flags64_t") -> bool + Can define item (instruction/data) of the specified 'length', starting at 'ea'? + * a new item would cross segment boundaries + * a new item would overlap with existing items (except items specified by 'flags') - @param ea: (C++: ea_t) start of the range for the new item - @param length: (C++: asize_t) length of the new item in bytes - @param flags: (C++: flags64_t) if not 0, then the kernel will ignore the data types specified by - the flags and destroy them. For example: - 1000 dw 5 + + + @param ea: start of the range for the new item + @param length: length of the new item in bytes + @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 - @return: 1-yes, 0-no - * a new item would cross segment boundaries - * a new item would overlap with existing items (except items specified by - 'flags') + 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 + @returns 1-yes, 0-no -ida_bytes.change_storage_type (function) - change_storage_type(start_ea, end_ea, stt) -> error_t - Change flag storage type for address range. - - @param start_ea: (C++: ea_t) should be lower than end_ea. - @param end_ea: (C++: ea_t) does not belong to the range. - @param stt: (C++: storage_type_t) - @return: error code +ida_bytes.change_storage_type(start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, stt: "storage_type_t") -> "error_t" + Change flag storage type for address range. + + @param start_ea: should be lower than end_ea. + @param end_ea: does not belong to the range. + @param stt: storage_type_t + @returns error code -ida_bytes.char_flag (function) - char_flag() -> flags64_t +ida_bytes.char_flag() -> "flags64_t" see FF_opbits -ida_bytes.chunk_size (function) - 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_size(ea: ida_idaapi.ea_t) -> "asize_t" + Get size of the contiguous address block containing 'ea'. + + @returns 0 if 'ea' doesn't belong to the program. -ida_bytes.chunk_start (function) - 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.chunk_start(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get start of the contiguous address block containing 'ea'. + + @returns BADADDR if 'ea' doesn't belong to the program. -ida_bytes.clr_lzero (function) - clr_lzero(ea, n) -> bool - Clear toggle lzero bit. This function reset the display of leading zeroes for - the specified operand to the default. If the default is not to display leading - zeroes, leading zeroes will not be displayed, as vice versa. - - @param ea: (C++: ea_t) the item (insn/data) address - @param n: (C++: int) the operand number (0-first operand, 1-other operands) - @return: success +ida_bytes.clr_lzero(ea: ida_idaapi.ea_t, n: int) -> bool + Clear toggle lzero bit. This function reset the display of leading zeroes for the specified operand to the default. If the default is not to display leading zeroes, leading zeroes will not be displayed, as vice versa. + + @param ea: the item (insn/data) address + @param n: the operand number (0-first operand, 1-other operands) + @returns success -ida_bytes.clr_op_type (function) - clr_op_type(ea, n) -> bool - Remove operand representation information. (set operand representation to be - 'undefined') - - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands - @return: success +ida_bytes.clr_op_type(ea: ida_idaapi.ea_t, n: int) -> bool + Remove operand representation information. (set operand representation to be 'undefined') + + @param ea: linear address + @param n: 0..UA_MAXOP-1 operand number, OPND_ALL all operands + @returns success -ida_bytes.code_flag (function) - code_flag() -> flags64_t +ida_bytes.code_flag() -> "flags64_t" FF_CODE -ida_bytes.combine_flags (function) - combine_flags(F) -> flags64_t - - @param F: flags64_t +ida_bytes.combine_flags(F: "flags64_t") -> "flags64_t" -ida_bytes.compiled_binpat_t (class) - Proxy of C++ compiled_binpat_t class. +ida_bytes.compiled_binpat_t -ida_bytes.compiled_binpat_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: compiled_binpat_t const & +ida_bytes.compiled_binpat_t.__eq__(self, r: "compiled_binpat_t") -> bool -ida_bytes.compiled_binpat_t.__init__ (method) - __init__(self) -> compiled_binpat_t +ida_bytes.compiled_binpat_t.__init__(self) -ida_bytes.compiled_binpat_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: compiled_binpat_t const & +ida_bytes.compiled_binpat_t.__ne__(self, r: "compiled_binpat_t") -> bool -ida_bytes.compiled_binpat_t.all_bytes_defined (method) - all_bytes_defined(self) -> bool +ida_bytes.compiled_binpat_t.all_bytes_defined(self) -> bool -ida_bytes.compiled_binpat_t.qclear (method) - qclear(self) +ida_bytes.compiled_binpat_t.qclear(self) -> None -ida_bytes.compiled_binpat_vec_t (class) - Proxy of C++ qvector< compiled_binpat_t > class. +ida_bytes.compiled_binpat_vec_t -ida_bytes.compiled_binpat_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< compiled_binpat_t > const & +ida_bytes.compiled_binpat_vec_t.__eq__(self, r: "compiled_binpat_vec_t") -> bool -ida_bytes.compiled_binpat_vec_t.__getitem__ (method) - __getitem__(self, i) -> compiled_binpat_t - - @param i: size_t +ida_bytes.compiled_binpat_vec_t.__getitem__(self, i: "size_t") -> "compiled_binpat_t const &" -ida_bytes.compiled_binpat_vec_t.__init__ (method) - __init__(self) -> compiled_binpat_vec_t - __init__(self, x) -> compiled_binpat_vec_t - - @param x: qvector< compiled_binpat_t > const & +ida_bytes.compiled_binpat_vec_t.__init__(self, *args) -ida_bytes.compiled_binpat_vec_t.__len__ (method) - __len__(self) -> size_t +ida_bytes.compiled_binpat_vec_t.__len__(self) -> "size_t" -ida_bytes.compiled_binpat_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< compiled_binpat_t > const & +ida_bytes.compiled_binpat_vec_t.__ne__(self, r: "compiled_binpat_vec_t") -> bool -ida_bytes.compiled_binpat_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: compiled_binpat_t const & +ida_bytes.compiled_binpat_vec_t.__setitem__(self, i: "size_t", v: "compiled_binpat_t") -> None -ida_bytes.compiled_binpat_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: compiled_binpat_t const & +ida_bytes.compiled_binpat_vec_t._del(self, x: "compiled_binpat_t") -> bool -ida_bytes.compiled_binpat_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: compiled_binpat_t const & +ida_bytes.compiled_binpat_vec_t.add_unique(self, x: "compiled_binpat_t") -> bool -ida_bytes.compiled_binpat_vec_t.at (method) - at(self, _idx) -> compiled_binpat_t - - @param _idx: size_t +ida_bytes.compiled_binpat_vec_t.append(self, x: "compiled_binpat_t") -> None -ida_bytes.compiled_binpat_vec_t.begin (method) - begin(self) -> compiled_binpat_t +ida_bytes.compiled_binpat_vec_t.at(self, _idx: "size_t") -> "compiled_binpat_t const &" -ida_bytes.compiled_binpat_vec_t.capacity (method) - capacity(self) -> size_t +ida_bytes.compiled_binpat_vec_t.begin(self, *args) -> "qvector< compiled_binpat_t >::const_iterator" -ida_bytes.compiled_binpat_vec_t.clear (method) - clear(self) +ida_bytes.compiled_binpat_vec_t.capacity(self) -> "size_t" -ida_bytes.compiled_binpat_vec_t.empty (method) - empty(self) -> bool +ida_bytes.compiled_binpat_vec_t.clear(self) -> None -ida_bytes.compiled_binpat_vec_t.end (method) - end(self) -> compiled_binpat_t +ida_bytes.compiled_binpat_vec_t.empty(self) -> bool -ida_bytes.compiled_binpat_vec_t.erase (method) - erase(self, it) -> compiled_binpat_t - - @param it: qvector< compiled_binpat_t >::iterator - - erase(self, first, last) -> compiled_binpat_t - - @param first: qvector< compiled_binpat_t >::iterator - @param last: qvector< compiled_binpat_t >::iterator +ida_bytes.compiled_binpat_vec_t.end(self, *args) -> "qvector< compiled_binpat_t >::const_iterator" -ida_bytes.compiled_binpat_vec_t.extract (method) - extract(self) -> compiled_binpat_t +ida_bytes.compiled_binpat_vec_t.erase(self, *args) -> "qvector< compiled_binpat_t >::iterator" -ida_bytes.compiled_binpat_vec_t.find (method) - find(self, x) -> compiled_binpat_t - - @param x: compiled_binpat_t const & +ida_bytes.compiled_binpat_vec_t.extend(self, x: "compiled_binpat_vec_t") -> None -ida_bytes.compiled_binpat_vec_t.grow (method) - grow(self, x=compiled_binpat_t()) - - @param x: compiled_binpat_t const & +ida_bytes.compiled_binpat_vec_t.extract(self) -> "compiled_binpat_t *" -ida_bytes.compiled_binpat_vec_t.has (method) - has(self, x) -> bool - - @param x: compiled_binpat_t const & +ida_bytes.compiled_binpat_vec_t.find(self, *args) -> "qvector< compiled_binpat_t >::const_iterator" -ida_bytes.compiled_binpat_vec_t.inject (method) - inject(self, s, len) - - @param s: compiled_binpat_t * - @param len: size_t +ida_bytes.compiled_binpat_vec_t.grow(self, *args) -> None -ida_bytes.compiled_binpat_vec_t.insert (method) - insert(self, it, x) -> compiled_binpat_t - - @param it: qvector< compiled_binpat_t >::iterator - @param x: compiled_binpat_t const & +ida_bytes.compiled_binpat_vec_t.has(self, x: "compiled_binpat_t") -> bool -ida_bytes.compiled_binpat_vec_t.pop_back (method) - pop_back(self) +ida_bytes.compiled_binpat_vec_t.inject(self, s: "compiled_binpat_t", len: "size_t") -> None -ida_bytes.compiled_binpat_vec_t.push_back (method) - push_back(self, x) - - @param x: compiled_binpat_t const & - - push_back(self) -> compiled_binpat_t +ida_bytes.compiled_binpat_vec_t.insert(self, it: "compiled_binpat_t", x: "compiled_binpat_t") -> "qvector< compiled_binpat_t >::iterator" -ida_bytes.compiled_binpat_vec_t.qclear (method) - qclear(self) +ida_bytes.compiled_binpat_vec_t.pop_back(self) -> None -ida_bytes.compiled_binpat_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_bytes.compiled_binpat_vec_t.push_back(self, *args) -> "compiled_binpat_t &" -ida_bytes.compiled_binpat_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: compiled_binpat_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_bytes.compiled_binpat_vec_t.qclear(self) -> None -ida_bytes.compiled_binpat_vec_t.size (method) - size(self) -> size_t +ida_bytes.compiled_binpat_vec_t.reserve(self, cnt: "size_t") -> None -ida_bytes.compiled_binpat_vec_t.swap (method) - swap(self, r) - - @param r: qvector< compiled_binpat_t > & +ida_bytes.compiled_binpat_vec_t.resize(self, *args) -> None -ida_bytes.compiled_binpat_vec_t.truncate (method) - truncate(self) +ida_bytes.compiled_binpat_vec_t.size(self) -> "size_t" -ida_bytes.create_16bit_data (function) - create_16bit_data(ea, length) -> bool +ida_bytes.compiled_binpat_vec_t.swap(self, r: "compiled_binpat_vec_t") -> None + +ida_bytes.compiled_binpat_vec_t.truncate(self) -> None + +ida_bytes.create_16bit_data(ea: ida_idaapi.ea_t, length: "asize_t") -> bool Convert to 16-bit quantity (take the byte size into account) - - @param ea: (C++: ea_t) - @param length: (C++: asize_t) -ida_bytes.create_32bit_data (function) - create_32bit_data(ea, length) -> bool +ida_bytes.create_32bit_data(ea: ida_idaapi.ea_t, length: "asize_t") -> bool Convert to 32-bit quantity (take the byte size into account) - - @param ea: (C++: ea_t) - @param length: (C++: asize_t) -ida_bytes.create_align (function) - create_align(ea, length, alignment) -> bool - Create an alignment item. - - @param ea: (C++: ea_t) linear address - @param length: (C++: asize_t) size of the item in bytes. 0 means to infer from ALIGNMENT - @param alignment: (C++: int) alignment exponent. Example: 3 means align to 8 bytes. 0 means - to infer from LENGTH It is forbidden to specify both LENGTH - and ALIGNMENT as 0. - @return: success +ida_bytes.create_align(ea: ida_idaapi.ea_t, length: "asize_t", alignment: int) -> bool + Create an alignment item. + + @param ea: linear address + @param length: size of the item in bytes. 0 means to infer from ALIGNMENT + @param alignment: alignment exponent. Example: 3 means align to 8 bytes. 0 means to infer from LENGTH It is forbidden to specify both LENGTH and ALIGNMENT as 0. + @returns success -ida_bytes.create_byte (function) - create_byte(ea, length, force=False) -> bool +ida_bytes.create_byte(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool Convert to byte. - - @param ea: (C++: ea_t) - @param length: (C++: asize_t) - @param force: (C++: bool) -ida_bytes.create_custdata (function) - create_custdata(ea, length, dtid, fid, force=False) -> bool +ida_bytes.create_custdata(ea: ida_idaapi.ea_t, length: "asize_t", dtid: int, fid: int, force: bool = 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 (function) - create_data(ea, dataflag, size, tid) -> bool - Convert to data (byte, word, dword, etc). This function may be used to create - arrays. - - @param ea: (C++: ea_t) linear address - @param dataflag: (C++: flags64_t) type of data. Value of function byte_flag(), word_flag(), etc. - @param size: (C++: asize_t) 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. - @param tid: (C++: tid_t) type id. If the specified type is a structure, then tid is structure - id. Otherwise should be BADNODE. - @return: success +ida_bytes.create_data(ea: ida_idaapi.ea_t, dataflag: "flags64_t", size: "asize_t", tid: "tid_t") -> bool + Convert to data (byte, word, dword, etc). This function may be used to create arrays. + + @param ea: linear address + @param dataflag: type of data. Value of function byte_flag(), word_flag(), etc. + @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. + @param tid: type id. If the specified type is a structure, then tid is structure id. Otherwise should be BADNODE. + @returns success -ida_bytes.create_double (function) - create_double(ea, length, force=False) -> bool +ida_bytes.create_double(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool Convert to double. - - @param ea: (C++: ea_t) - @param length: (C++: asize_t) - @param force: (C++: bool) -ida_bytes.create_dword (function) - create_dword(ea, length, force=False) -> bool +ida_bytes.create_dword(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool Convert to dword. - - @param ea: (C++: ea_t) - @param length: (C++: asize_t) - @param force: (C++: bool) -ida_bytes.create_float (function) - create_float(ea, length, force=False) -> bool +ida_bytes.create_float(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool Convert to float. - - @param ea: (C++: ea_t) - @param length: (C++: asize_t) - @param force: (C++: bool) -ida_bytes.create_oword (function) - create_oword(ea, length, force=False) -> bool +ida_bytes.create_oword(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = 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 (function) - create_packed_real(ea, length, force=False) -> bool +ida_bytes.create_packed_real(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = 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 (function) - create_qword(ea, length, force=False) -> bool +ida_bytes.create_qword(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool Convert to quadword. - - @param ea: (C++: ea_t) - @param length: (C++: asize_t) - @param force: (C++: bool) -ida_bytes.create_strlit (function) - 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: (C++: ea_t) starting address - @param len: (C++: size_t) length of the string in bytes. if 0, then get_max_strlit_length() - will be used to determine the length - @param strtype: (C++: int32) string type. one of String type codes - @return: success +ida_bytes.create_strlit(start: ida_idaapi.ea_t, len: "size_t", strtype: int) -> 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 + @param len: length of the string in bytes. if 0, then get_max_strlit_length() will be used to determine the length + @param strtype: string type. one of String type codes + @returns success -ida_bytes.create_struct (function) - create_struct(ea, length, tid, force=False) -> bool +ida_bytes.create_struct(ea: ida_idaapi.ea_t, length: "asize_t", tid: "tid_t", force: bool = 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 (function) - create_tbyte(ea, length, force=False) -> bool +ida_bytes.create_tbyte(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool Convert to tbyte. - - @param ea: (C++: ea_t) - @param length: (C++: asize_t) - @param force: (C++: bool) -ida_bytes.create_word (function) - create_word(ea, length, force=False) -> bool +ida_bytes.create_word(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool Convert to word. - - @param ea: (C++: ea_t) - @param length: (C++: asize_t) - @param force: (C++: bool) -ida_bytes.create_yword (function) - create_yword(ea, length, force=False) -> bool +ida_bytes.create_yword(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool Convert to ymm word. - - @param ea: (C++: ea_t) - @param length: (C++: asize_t) - @param force: (C++: bool) -ida_bytes.create_zword (function) - create_zword(ea, length, force=False) -> bool +ida_bytes.create_zword(ea: ida_idaapi.ea_t, length: "asize_t", force: bool = False) -> bool Convert to zmm word. - - @param ea: (C++: ea_t) - @param length: (C++: asize_t) - @param force: (C++: bool) -ida_bytes.cust_flag (function) - cust_flag() -> flags64_t +ida_bytes.cust_flag() -> "flags64_t" Get a flags64_t representing custom type data. -ida_bytes.custfmt_flag (function) - custfmt_flag() -> flags64_t +ida_bytes.custfmt_flag() -> "flags64_t" see FF_opbits -ida_bytes.data_format_t (class) - Proxy of C++ data_format_t class. +ida_bytes.data_format_t + Information about a data format -ida_bytes.data_format_t.__get_id (method) - __get_id(self) -> int +ida_bytes.data_format_t.__get_id(self) -> int -ida_bytes.data_format_t.__init__ (method) - __init__(self, _self, name, value_size=0, menu_name=None, props=0, hotkey=None, text_width=0) -> data_format_t - - @param self: PyObject * - @param name: char const * - @param value_size: asize_t - @param menu_name: char const * - @param props: int - @param hotkey: char const * - @param text_width: int32 +ida_bytes.data_format_t.__init__(self, _self: "PyObject *", name: str, value_size: "asize_t" = 0, menu_name: str = None, props: int = 0, hotkey: str = None, text_width: int = 0) -ida_bytes.data_format_t.__init__ (method) +ida_bytes.data_format_t.__init__(self, *args) -ida_bytes.data_format_t.hotkey (variable) - Hotkey for the corresponding menu item if nullptr, no hotkey will be associated - with the menu item +ida_bytes.data_format_t.hotkey + Hotkey for the corresponding menu item if nullptr, no hotkey will be associated with the menu item + -ida_bytes.data_format_t.is_present_in_menus (method) - is_present_in_menus(self) -> bool - Should this format be shown in UI menus - - @return: success +ida_bytes.data_format_t.is_present_in_menus(self) -> bool + Should this format be shown in UI menus + + @returns success -ida_bytes.data_format_t.menu_name (variable) - Visible format name to use in menus if nullptr, no menu item will be created +ida_bytes.data_format_t.menu_name + Visible format name to use in menus if nullptr, no menu item will be created + -ida_bytes.data_format_t.name (variable) +ida_bytes.data_format_t.name Format name, must be unique. -ida_bytes.data_format_t.props (variable) +ida_bytes.data_format_t.props properties (currently 0) -ida_bytes.data_format_t.text_width (variable) - Usual width of the text representation This value is used to calculate the width - of the control to display values of this type +ida_bytes.data_format_t.text_width + Usual width of the text representation This value is used to calculate the width of the control to display values of this type + -ida_bytes.data_format_t.value_size (variable) - size of the value in bytes 0 means any size is ok data formats that are - registered for standard types (dtid 0) may be called with any value_size - (instruction operands only) +ida_bytes.data_format_t.value_size + size of the value in bytes 0 means any size is ok data formats that are registered for standard types (dtid 0) may be called with any value_size (instruction operands only) + -ida_bytes.data_type_t (class) - Proxy of C++ data_type_t class. +ida_bytes.data_type_t + Information about a data type -ida_bytes.data_type_t.__get_id (method) - __get_id(self) -> int +ida_bytes.data_type_t.__get_id(self) -> int -ida_bytes.data_type_t.__init__ (method) - __init__(self, _self, name, value_size=0, menu_name=None, hotkey=None, asm_keyword=None, props=0) -> data_type_t - - @param self: PyObject * - @param name: char const * - @param value_size: asize_t - @param menu_name: char const * - @param hotkey: char const * - @param asm_keyword: char const * - @param props: int +ida_bytes.data_type_t.__init__(self, _self: "PyObject *", name: str, value_size: "asize_t" = 0, menu_name: str = None, hotkey: str = None, asm_keyword: str = None, props: int = 0) -ida_bytes.data_type_t.__init__ (method) +ida_bytes.data_type_t.__init__(self, *args) -ida_bytes.data_type_t.asm_keyword (variable) - keyword to use for this type in the assembly if nullptr, the data type cannot be - used in the listing it can still be used in cpuregs window +ida_bytes.data_type_t.asm_keyword + keyword to use for this type in the assembly if nullptr, the data type cannot be used in the listing it can still be used in cpuregs window + -ida_bytes.data_type_t.hotkey (variable) - Hotkey for the corresponding menu item if nullptr, no hotkey will be associated - with the menu item +ida_bytes.data_type_t.hotkey + Hotkey for the corresponding menu item if nullptr, no hotkey will be associated with the menu item + -ida_bytes.data_type_t.is_present_in_menus (method) - is_present_in_menus(self) -> bool - Should this type be shown in UI menus - - @return: success +ida_bytes.data_type_t.is_present_in_menus(self) -> bool + Should this type be shown in UI menus + + @returns success -ida_bytes.data_type_t.menu_name (variable) - Visible data type name to use in menus if nullptr, no menu item will be created +ida_bytes.data_type_t.menu_name + Visible data type name to use in menus if nullptr, no menu item will be created + -ida_bytes.data_type_t.name (variable) +ida_bytes.data_type_t.name name of the data type. must be unique -ida_bytes.data_type_t.props (variable) +ida_bytes.data_type_t.props properties -ida_bytes.data_type_t.value_size (variable) +ida_bytes.data_type_t.value_size size of the value in bytes -ida_bytes.dec_flag (function) - dec_flag() -> flags64_t - Get number flag of the base, regardless of current processor - better to use - num_flag() +ida_bytes.dec_flag() -> "flags64_t" + Get number flag of the base, regardless of current processor - better to use num_flag() -ida_bytes.del_hidden_range (function) - del_hidden_range(ea) -> bool - Delete hidden range. - - @param ea: (C++: ea_t) any address in the hidden range - @return: success +ida_bytes.del_hidden_range(ea: ida_idaapi.ea_t) -> bool + Delete hidden range. + + @param ea: any address in the hidden range + @returns success -ida_bytes.del_items (function) - 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: (C++: ea_t) any address within the first item to delete - @param flags: (C++: int) combination of Unexplored byte conversion flags - @param nbytes: (C++: asize_t) number of bytes in the range to be undefined - @param may_destroy: (C++: may_destroy_cb_t *) optional routine invoked before deleting a head item. If - callback returns false then item is not to be deleted and - operation fails - @return: true on sucessful operation, otherwise false +ida_bytes.del_items(ea: ida_idaapi.ea_t, flags: int = 0, nbytes: "asize_t" = 1, may_destroy: "may_destroy_cb_t *" = 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 + @param flags: combination of Unexplored byte conversion flags + @param nbytes: number of bytes in the range to be undefined + @param may_destroy: optional routine invoked before deleting a head item. If callback returns false then item is not to be deleted and operation fails + @returns true on sucessful operation, otherwise false -ida_bytes.del_mapping (function) - del_mapping(ea) - Delete memory mapping range. - - @param ea: (C++: ea_t) any address in the mapped range +ida_bytes.del_mapping(ea: ida_idaapi.ea_t) -> None + Delete memory mapping range. + + @param ea: any address in the mapped range -ida_bytes.del_value (function) - del_value(ea) - Delete byte value from flags. The corresponding byte becomes uninitialized. - - @param ea: (C++: ea_t) +ida_bytes.del_value(ea: ida_idaapi.ea_t) -> None + Delete byte value from flags. The corresponding byte becomes uninitialized. + -ida_bytes.detach_custom_data_format (function) - 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: (C++: int) data type id to detach data format from - @param dfid: (C++: int) data format id to detach +ida_bytes.detach_custom_data_format(dtid: int, dfid: int) -> 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 + @param dfid: data format id to detach @retval true: ok - @retval false: no such `dtid', or no such `dfid', or the data format was not - attached to the data type + @retval false: no such `dtid`, or no such `dfid', or the data format was not attached to the data type -ida_bytes.disable_flags (function) - 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: (C++: ea_t) should be lower than end_ea. - @param end_ea: (C++: ea_t) does not belong to the range. - @return: 0 if ok, otherwise return error code +ida_bytes.disable_flags(start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t) -> "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. + @param end_ea: does not belong to the range. + @returns 0 if ok, otherwise return error code -ida_bytes.double_flag (function) - double_flag() -> flags64_t +ida_bytes.double_flag() -> "flags64_t" Get a flags64_t representing a double. -ida_bytes.dword_flag (function) - dword_flag() -> flags64_t +ida_bytes.dword_flag() -> "flags64_t" Get a flags64_t representing a double word. -ida_bytes.enable_flags (function) - 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: (C++: ea_t) should be lower than end_ea. - @param end_ea: (C++: ea_t) does not belong to the range. - @param stt: (C++: storage_type_t) - @return: 0 if ok, otherwise an error code +ida_bytes.enable_flags(start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, stt: "storage_type_t") -> "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. + @param end_ea: does not belong to the range. + @param stt: storage_type_t + @returns 0 if ok, otherwise an error code -ida_bytes.enum_flag (function) - enum_flag() -> flags64_t +ida_bytes.enum_flag() -> "flags64_t" see FF_opbits -ida_bytes.equal_bytes (function) - equal_bytes(ea, image, mask, len, bin_search_flags) -> bool - Compare 'len' bytes of the program starting from 'ea' with 'image'. - - @param ea: (C++: ea_t) linear address - @param image: (C++: const uchar *) bytes to compare with - @param mask: (C++: const uchar *) array of mask bytes, it's length is 'len'. if the flag - BIN_SEARCH_BITMASK is passsed, 'bitwise AND' is used to compare. if - not; 1 means to perform the comparison of the corresponding byte. 0 - means not to perform. if mask == nullptr, then all bytes of 'image' - will be compared. if mask == SKIP_FF_MASK then 0xFF bytes will be - skipped - @param len: (C++: size_t) length of block to compare in bytes. - @param bin_search_flags: (C++: int) combination of Search flags +ida_bytes.equal_bytes(ea: ida_idaapi.ea_t, image: "uchar const *", mask: "uchar const *", len: "size_t", bin_search_flags: int) -> bool + Compare 'len' bytes of the program starting from 'ea' with 'image'. + + @param ea: linear address + @param image: bytes to compare with + @param mask: array of mask bytes, it's length is 'len'. if the flag BIN_SEARCH_BITMASK is passsed, 'bitwise AND' is used to compare. if not; 1 means to perform the comparison of the corresponding byte. 0 means not to perform. if mask == nullptr, then all bytes of 'image' will be compared. if mask == SKIP_FF_MASK then 0xFF bytes will be skipped + @param len: length of block to compare in bytes. + @param bin_search_flags: combination of Search flags @retval 1: equal @retval 0: not equal -ida_bytes.f_has_cmt (function) - f_has_cmt(f, arg2) -> bool - - @param f: flags64_t - @param arg2: void * +ida_bytes.f_has_cmt(f: "flags64_t", arg2: "void *") -> bool -ida_bytes.f_has_dummy_name (function) - f_has_dummy_name(f, arg2) -> bool +ida_bytes.f_has_dummy_name(f: "flags64_t", arg2: "void *") -> bool Does the current byte have dummy (auto-generated, with special prefix) name? - - @param f: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_has_extra_cmts (function) - f_has_extra_cmts(f, arg2) -> bool - - @param f: flags64_t - @param arg2: void * +ida_bytes.f_has_extra_cmts(f: "flags64_t", arg2: "void *") -> bool -ida_bytes.f_has_name (function) - f_has_name(f, arg2) -> bool +ida_bytes.f_has_name(f: "flags64_t", arg2: "void *") -> bool Does the current byte have non-trivial (non-dummy) name? - - @param f: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_has_user_name (function) - f_has_user_name(F, arg2) -> bool +ida_bytes.f_has_user_name(F: "flags64_t", arg2: "void *") -> bool Does the current byte have user-specified name? - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_has_xref (function) - f_has_xref(f, arg2) -> bool +ida_bytes.f_has_xref(f: "flags64_t", arg2: "void *") -> bool Does the current byte have cross-references to it? - - @param f: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_align (function) - f_is_align(F, arg2) -> bool +ida_bytes.f_is_align(F: "flags64_t", arg2: "void *") -> bool See is_align() - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_byte (function) - f_is_byte(F, arg2) -> bool +ida_bytes.f_is_byte(F: "flags64_t", arg2: "void *") -> bool See is_byte() - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_code (function) - f_is_code(F, arg2) -> bool +ida_bytes.f_is_code(F: "flags64_t", arg2: "void *") -> bool Does flag denote start of an instruction? - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_custom (function) - f_is_custom(F, arg2) -> bool +ida_bytes.f_is_custom(F: "flags64_t", arg2: "void *") -> bool See is_custom() - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_data (function) - f_is_data(F, arg2) -> bool +ida_bytes.f_is_data(F: "flags64_t", arg2: "void *") -> bool Does flag denote start of data? - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_double (function) - f_is_double(F, arg2) -> bool +ida_bytes.f_is_double(F: "flags64_t", arg2: "void *") -> bool See is_double() - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_dword (function) - f_is_dword(F, arg2) -> bool +ida_bytes.f_is_dword(F: "flags64_t", arg2: "void *") -> bool See is_dword() - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_float (function) - f_is_float(F, arg2) -> bool +ida_bytes.f_is_float(F: "flags64_t", arg2: "void *") -> bool See is_float() - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_head (function) - f_is_head(F, arg2) -> bool +ida_bytes.f_is_head(F: "flags64_t", arg2: "void *") -> bool Does flag denote start of instruction OR data? - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_not_tail (function) - f_is_not_tail(F, arg2) -> bool +ida_bytes.f_is_not_tail(F: "flags64_t", arg2: "void *") -> bool Does flag denote tail byte? - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_oword (function) - f_is_oword(F, arg2) -> bool +ida_bytes.f_is_oword(F: "flags64_t", arg2: "void *") -> bool See is_oword() - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_pack_real (function) - f_is_pack_real(F, arg2) -> bool +ida_bytes.f_is_pack_real(F: "flags64_t", arg2: "void *") -> bool See is_pack_real() - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_qword (function) - f_is_qword(F, arg2) -> bool +ida_bytes.f_is_qword(F: "flags64_t", arg2: "void *") -> bool See is_qword() - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_strlit (function) - f_is_strlit(F, arg2) -> bool +ida_bytes.f_is_strlit(F: "flags64_t", arg2: "void *") -> bool See is_strlit() - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_struct (function) - f_is_struct(F, arg2) -> bool +ida_bytes.f_is_struct(F: "flags64_t", arg2: "void *") -> bool See is_struct() - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_tail (function) - f_is_tail(F, arg2) -> bool +ida_bytes.f_is_tail(F: "flags64_t", arg2: "void *") -> bool Does flag denote tail byte? - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_tbyte (function) - f_is_tbyte(F, arg2) -> bool +ida_bytes.f_is_tbyte(F: "flags64_t", arg2: "void *") -> bool See is_tbyte() - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_word (function) - f_is_word(F, arg2) -> bool +ida_bytes.f_is_word(F: "flags64_t", arg2: "void *") -> bool See is_word() - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.f_is_yword (function) - f_is_yword(F, arg2) -> bool +ida_bytes.f_is_yword(F: "flags64_t", arg2: "void *") -> bool See is_yword() - - @param F: (C++: flags64_t) - @param arg2: void * -ida_bytes.find_byte (function) - 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: (C++: ea_t) linear address - @param size: (C++: asize_t) number of bytes to inspect - @param value: (C++: uchar) value to find - @param bin_search_flags: (C++: int) combination of Search flags - @return: address of byte or BADADDR +ida_bytes.find_byte(sEA: ida_idaapi.ea_t, size: "asize_t", value: "uchar", bin_search_flags: int) -> ida_idaapi.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 + @param size: number of bytes to inspect + @param value: value to find + @param bin_search_flags: combination of Search flags + @returns address of byte or BADADDR -ida_bytes.find_byter (function) - 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: (C++: ea_t) the lower address of the search range - @param size: (C++: asize_t) number of bytes to inspect - @param value: (C++: uchar) value to find - @param bin_search_flags: (C++: int) combination of Search flags - @return: address of byte or BADADDR +ida_bytes.find_byter(sEA: ida_idaapi.ea_t, size: "asize_t", value: "uchar", bin_search_flags: int) -> ida_idaapi.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 + @param size: number of bytes to inspect + @param value: value to find + @param bin_search_flags: combination of Search flags + @returns address of byte or BADADDR -ida_bytes.find_custom_data_format (function) - find_custom_data_format(name) -> int - Get id of a custom data format. - - @param name: (C++: const char *) name of the custom data format - @return: id or -1 +ida_bytes.find_bytes(bs: typing.Union[bytes, bytearray, str], range_start: int, range_size: typing.Optional[int] = None, range_end: typing.Optional[int] = ida_idaapi.BADADDR, mask: typing.Optional[typing.Union[bytes, bytearray]] = None, flags: typing.Optional[int] = BIN_SEARCH_FORWARD|BIN_SEARCH_NOSHOW, radix: typing.Optional[int] = 16, strlit_encoding: typing.Optional[typing.Union[int, str]] = PBSENC_DEF1BPU) -> int -ida_bytes.find_custom_data_type (function) - find_custom_data_type(name) -> int - Get id of a custom data type. - - @param name: (C++: const char *) name of the custom data type - @return: id or -1 +ida_bytes.find_custom_data_format(name: str) -> int + Get id of a custom data format. + + @param name: name of the custom data format + @returns id or -1 -ida_bytes.find_free_chunk (function) - find_free_chunk(start, size, alignment) -> ea_t - Search for a hole in the addressing space of the program. - - @param start: (C++: ea_t) Address to start searching from - @param size: (C++: asize_t) Size of the desired empty range - @param alignment: (C++: asize_t) Alignment bitmask, must be a pow2-1. (for example, 0xF would - align the returned range to 16 bytes). - @return: Start of the found empty range or BADADDR +ida_bytes.find_custom_data_type(name: str) -> int + Get id of a custom data type. + + @param name: name of the custom data type + @returns id or -1 -ida_bytes.float_flag (function) - float_flag() -> flags64_t +ida_bytes.find_free_chunk(start: ida_idaapi.ea_t, size: "asize_t", alignment: "asize_t") -> ida_idaapi.ea_t + Search for a hole in the addressing space of the program. + + @param start: Address to start searching from + @param size: Size of the desired empty range + @param alignment: Alignment bitmask, must be a pow2-1. (for example, 0xF would align the returned range to 16 bytes). + @returns Start of the found empty range or BADADDR + +ida_bytes.find_string(_str: str, range_start: int, range_end: typing.Optional[int] = ida_idaapi.BADADDR, range_size: typing.Optional[int] = None, strlit_encoding: typing.Optional[typing.Union[int, str]] = PBSENC_DEF1BPU, flags: typing.Optional[int] = BIN_SEARCH_FORWARD|BIN_SEARCH_NOSHOW) -> int + +ida_bytes.float_flag() -> "flags64_t" Get a flags64_t representing a float. -ida_bytes.flt_flag (function) - flt_flag() -> flags64_t +ida_bytes.flt_flag() -> "flags64_t" see FF_opbits -ida_bytes.free_chunk (function) - free_chunk(bottom, size, step) -> ea_t - - @param bottom: ea_t - @param size: asize_t - @param step: int32 +ida_bytes.get_16bit(ea: ida_idaapi.ea_t) -> int + Get 16bits of the program at 'ea'. + + @returns 1 byte (getFullByte()) if the current processor has 16-bit byte, otherwise return get_word() -ida_bytes.get_16bit (function) - 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 (function) - 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 processor_t::nbits: +ida_bytes.get_32bit(ea: ida_idaapi.ea_t) -> int + Get not more than 32bits of the program at 'ea'. + + @returns 32 bit value, depending on processor_t::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 (function) - 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 processor_t::nbits: +ida_bytes.get_64bit(ea: ida_idaapi.ea_t) -> "uint64" + Get not more than 64bits of the program at 'ea'. + + @returns 64 bit value, depending on processor_t::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 (function) - get_8bit(ea, v, nbit) -> PyObject * - - @param ea: ea_t - @param v: uint32 - @param nbit: int +ida_bytes.get_byte(ea: ida_idaapi.ea_t) -> "uchar" + Get one byte (8-bit) of the program at 'ea'. This function works only for 8bit byte processors. + -ida_bytes.get_byte (function) - 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 (function) - get_bytes(ea, size, gmb_flags=0x01) -> bytes or None +ida_bytes.get_bytes(ea: ida_idaapi.ea_t, size: int, gmb_flags: int = GMB_READALL) Get the specified number of bytes of the program. @param ea: program address @param size: number of bytes to return - @param gmb_flags: int - @return: the bytes (as a str), or None in case of failure + @param gmb_flags: OR'ed combination of GMB_* values (defaults to GMB_READALL) + @return: the bytes (as bytes object), or None in case of failure -ida_bytes.get_bytes_and_mask (function) - get_bytes_and_mask(ea, size, gmb_flags=0x01) -> PyObject * +ida_bytes.get_bytes_and_mask(ea: ida_idaapi.ea_t, size: int, gmb_flags: int = GMB_READALL) 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 - @param gmb_flags: int + @param gmb_flags: OR'ed combination of GMB_* values (defaults to GMB_READALL) @return: a tuple (bytes, mask), or None in case of failure. Both 'bytes' and 'mask' are 'str' instances. -ida_bytes.get_cmt (function) - get_cmt(ea, rptble) -> str - Get an indented comment. - - @param ea: (C++: ea_t) linear address. may point to tail byte, the function will find start - of the item - @param rptble: (C++: bool) get repeatable comment? - @return: size of comment or -1 +ida_bytes.get_cmt(ea: ida_idaapi.ea_t, rptble: bool) -> str + Get an indented comment. + + @param ea: linear address. may point to tail byte, the function will find start of the item + @param rptble: get repeatable comment? + @returns size of comment or -1 -ida_bytes.get_custom_data_format (function) - get_custom_data_format(dfid) -> data_format_t - Get definition of a registered custom data format. - - @param dfid: (C++: int) data format id - @return: data format definition or nullptr +ida_bytes.get_custom_data_format(dfid: int) -> "data_format_t const *" + Get definition of a registered custom data format. + + @param dfid: data format id + @returns data format definition or nullptr -ida_bytes.get_custom_data_formats (function) - get_custom_data_formats(out, dtid) -> int - Get list of attached custom data formats for the specified data type. - - @param out: (C++: intvec_t *) buffer for the output. may be nullptr - @param dtid: (C++: int) data type id - @return: number of returned custom data formats. if error, returns -1 +ida_bytes.get_custom_data_formats(out: "intvec_t *", dtid: int) -> int + Get list of attached custom data formats for the specified data type. + + @param out: buffer for the output. may be nullptr + @param dtid: data type id + @returns number of returned custom data formats. if error, returns -1 -ida_bytes.get_custom_data_type (function) - get_custom_data_type(dtid) -> data_type_t - Get definition of a registered custom data type. - - @param dtid: (C++: int) data type id - @return: data type definition or nullptr +ida_bytes.get_custom_data_type(dtid: int) -> "data_type_t const *" + Get definition of a registered custom data type. + + @param dtid: data type id + @returns data type definition or nullptr -ida_bytes.get_custom_data_types (function) - get_custom_data_types(out, min_size=0, max_size=BADADDR) -> int - Get list of registered custom data type ids. - - @param out: (C++: intvec_t *) buffer for the output. may be nullptr - @param min_size: (C++: asize_t) minimum value size - @param max_size: (C++: asize_t) maximum value size - @return: number of custom data types with the specified size limits +ida_bytes.get_custom_data_types(*args) -> int + Get list of registered custom data type ids. + + @param out: buffer for the output. may be nullptr + @param min_size: minimum value size + @param max_size: maximum value size + @returns number of custom data types with the specified size limits -ida_bytes.get_data_elsize (function) - get_data_elsize(ea, F, ti=None) -> asize_t - Get size of data type specified in flags 'F'. - - @param ea: (C++: ea_t) linear address of the item - @param F: (C++: flags64_t) flags - @param ti: (C++: const opinfo_t *) 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 nullptr). If specified as nullptr, will - be automatically retrieved from the database - @return: * byte : 1 +ida_bytes.get_data_elsize(ea: ida_idaapi.ea_t, F: "flags64_t", ti: "opinfo_t" = None) -> "asize_t" + Get size of data type specified in flags 'F'. + + @param ea: linear address of the item + @param F: flags + @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 nullptr). If specified as nullptr, will be automatically retrieved from the database + @returns * byte : 1 * word : 2 * etc... -ida_bytes.get_data_value (function) - 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: (C++: uval_t *) pointer to the result. may be nullptr - @param ea: (C++: ea_t) linear address - @param size: (C++: asize_t) size of data to read. If 0, then the item type at 'ea' will be used - @return: success +ida_bytes.get_data_value(v: "uval_t *", ea: ida_idaapi.ea_t, size: "asize_t") -> 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 nullptr + @param ea: linear address + @param size: size of data to read. If 0, then the item type at 'ea' will be used + @returns success -ida_bytes.get_db_byte (function) - 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_db_byte(ea: ida_idaapi.ea_t) -> "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. + -ida_bytes.get_default_radix (function) - get_default_radix() -> int - Get default base of number for the current processor. - - @return: 2, 8, 10, 16 +ida_bytes.get_default_radix() -> int + Get default base of number for the current processor. + + @returns 2, 8, 10, 16 -ida_bytes.get_dword (function) - get_dword(ea) -> uint32 - Get one dword (32-bit) of the program at 'ea'. This function takes into account - order of bytes specified in idainfo::is_be() This function works only for 8bit - byte processors. - - @param ea: (C++: ea_t) +ida_bytes.get_dword(ea: ida_idaapi.ea_t) -> int + Get one dword (32-bit) of the program at 'ea'. This function takes into account order of bytes specified in idainfo::is_be() This function works only for 8bit byte processors. + -ida_bytes.get_enum_id (function) - get_enum_id(ea, n) -> enum_t - Get enum id of 'enum' operand. - - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL one of the operands - @return: id of enum or BADNODE +ida_bytes.get_enum_id(ea: ida_idaapi.ea_t, n: int) -> "uchar *" + Get enum id of 'enum' operand. + + @param ea: linear address + @param n: 0..UA_MAXOP-1 operand number, OPND_ALL one of the operands + @returns id of enum or BADNODE -ida_bytes.get_first_hidden_range (function) - get_first_hidden_range() -> hidden_range_t - Get pointer to the first hidden range. - - @return: ptr to hidden range or nullptr +ida_bytes.get_first_hidden_range() -> "hidden_range_t *" + Get pointer to the first hidden range. + + @returns ptr to hidden range or nullptr -ida_bytes.get_flags (function) - get_flags(ea) -> flags64_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(ea: ida_idaapi.ea_t) -> "flags64_t" + 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.get_flags_by_size (function) - get_flags_by_size(size) -> flags64_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_by_size(size: "size_t") -> "flags64_t" + Get flags from size (in bytes). Supported sizes: 1, 2, 4, 8, 16, 32. For other sizes returns 0 + -ida_bytes.get_flags_ex (function) - get_flags_ex(ea, how) -> flags64_t +ida_bytes.get_flags_ex(ea: ida_idaapi.ea_t, how: int) -> "flags64_t" Get flags for the specified address, extended form. - - @param ea: (C++: ea_t) - @param how: (C++: int) -ida_bytes.get_forced_operand (function) - get_forced_operand(ea, n) -> str - Get forced operand. - - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number - @return: size of forced operand or -1 +ida_bytes.get_forced_operand(ea: ida_idaapi.ea_t, n: int) -> str + Get forced operand. + + @param ea: linear address + @param n: 0..UA_MAXOP-1 operand number + @returns size of forced operand or -1 -ida_bytes.get_full_data_elsize (function) - 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++: flags64_t) - @param ti: (C++: const opinfo_t *) opinfo_t const * +ida_bytes.get_full_data_elsize(ea: ida_idaapi.ea_t, F: "flags64_t", ti: "opinfo_t" = 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 + -ida_bytes.get_full_flags (function) - get_full_flags(ea) -> flags64_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_full_flags(ea: ida_idaapi.ea_t) -> "flags64_t" + Get flags value for address 'ea'. + + @returns 0 if address is not present in the program -ida_bytes.get_hidden_range (function) - get_hidden_range(ea) -> hidden_range_t - Get pointer to hidden range structure, in: linear address. - - @param ea: (C++: ea_t) any address in the hidden range +ida_bytes.get_hidden_range(ea: ida_idaapi.ea_t) -> "hidden_range_t *" + Get pointer to hidden range structure, in: linear address. + + @param ea: any address in the hidden range -ida_bytes.get_hidden_range_num (function) - get_hidden_range_num(ea) -> int - Get number of a hidden range. - - @param ea: (C++: ea_t) any address in the hidden range - @return: number of hidden range (0..get_hidden_range_qty()-1) +ida_bytes.get_hidden_range_num(ea: ida_idaapi.ea_t) -> int + Get number of a hidden range. + + @param ea: any address in the hidden range + @returns number of hidden range (0..get_hidden_range_qty()-1) -ida_bytes.get_hidden_range_qty (function) - get_hidden_range_qty() -> int +ida_bytes.get_hidden_range_qty() -> int Get number of hidden ranges. -ida_bytes.get_item_end (function) - 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_end(ea: ida_idaapi.ea_t) -> ida_idaapi.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. + -ida_bytes.get_item_flag (function) - get_item_flag(_from, n, ea, appzero) -> flags64_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: (C++: ea_t) linear address of the instruction which refers to 'ea' - @param n: (C++: int) operand number which refers to 'ea' or OPND_ALL for one of the - operands - @param ea: (C++: ea_t) the referenced address - @param appzero: (C++: bool) append a struct field name if the field offset is zero? - meaningful only if the name refers to a structure. - @return: flags or 0 (if failed) +ida_bytes.get_item_flag(_from: ida_idaapi.ea_t, n: int, ea: ida_idaapi.ea_t, appzero: bool) -> "flags64_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 n: operand number which refers to 'ea' or OPND_ALL for one of the operands + @param ea: the referenced address + @param appzero: append a struct field name if the field offset is zero? meaningful only if the name refers to a structure. + @returns flags or 0 (if failed) -ida_bytes.get_item_head (function) - 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_head(ea: ida_idaapi.ea_t) -> ida_idaapi.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) + -ida_bytes.get_item_refinfo (function) - get_item_refinfo(ri, ea, n) -> bool - Get refinfo of the item at 'ea'. This function works for a regular offset - operand as well as for a tail byte of a structure variable (in this case refinfo - to corresponding structure member will be returned) - - @param ri: (C++: refinfo_t *) refinfo holder - @param ea: (C++: ea_t) the item address - @param n: (C++: int) operand number which refers to 'ea' or OPND_ALL for one of the - operands - @return: success +ida_bytes.get_item_refinfo(ri: "refinfo_t", ea: ida_idaapi.ea_t, n: int) -> bool + Get refinfo of the item at 'ea'. This function works for a regular offset operand as well as for a tail byte of a structure variable (in this case refinfo to corresponding structure member will be returned) + + @param ri: refinfo holder + @param ea: the item address + @param n: operand number which refers to 'ea' or OPND_ALL for one of the operands + @returns success -ida_bytes.get_item_size (function) - get_item_size(ea) -> asize_t - Get size of item (instruction/data) in bytes. Unexplored bytes have length of 1 - byte. This function returns 0 only for BADADDR. - - @param ea: (C++: ea_t) +ida_bytes.get_item_size(ea: ida_idaapi.ea_t) -> "asize_t" + Get size of item (instruction/data) in bytes. Unexplored bytes have length of 1 byte. This function returns 0 only for BADADDR. + -ida_bytes.get_last_hidden_range (function) - get_last_hidden_range() -> hidden_range_t - Get pointer to the last hidden range. - - @return: ptr to hidden range or nullptr +ida_bytes.get_last_hidden_range() -> "hidden_range_t *" + Get pointer to the last hidden range. + + @returns ptr to hidden range or nullptr -ida_bytes.get_manual_insn (function) - get_manual_insn(ea) -> str - Retrieve the user-specified string for the manual instruction. - - @param ea: (C++: ea_t) linear address of the instruction or data item - @return: size of manual instruction or -1 +ida_bytes.get_manual_insn(ea: ida_idaapi.ea_t) -> str + Retrieve the user-specified string for the manual instruction. + + @param ea: linear address of the instruction or data item + @returns size of manual instruction or -1 -ida_bytes.get_mapping (function) - get_mapping(n) -> bool - Get memory mapping range by its number. - - @param n: (C++: size_t) number of mapping range (0..get_mappings_qty()-1) - @return: false if the specified range doesn't exist, otherwise returns `from', - `to', `size' +ida_bytes.get_mapping(n: "size_t") -> "ea_t *, ea_t *, asize_t *" + Get memory mapping range by its number. + + @param n: number of mapping range (0..get_mappings_qty()-1) + @returns false if the specified range doesn't exist, otherwise returns `from`, `to`, `size` -ida_bytes.get_mappings_qty (function) - get_mappings_qty() -> size_t +ida_bytes.get_mappings_qty() -> "size_t" Get number of mappings. -ida_bytes.get_max_strlit_length (function) - get_max_strlit_length(ea, strtype, options=0) -> size_t +ida_bytes.get_max_strlit_length(ea: ida_idaapi.ea_t, strtype: int, options: int = 0) -> "size_t" Determine maximum length of string literal. + If the string literal has a length prefix (e.g., STRTYPE_LEN2 has a two-byte length prefix), the length of that prefix (i.e., 2) will be part of the returned value. - If the string literal has a length prefix (e.g., STRTYPE_LEN2 has a two-byte - length prefix), the length of that prefix (i.e., 2) will be part of the returned - value. - - @param ea: (C++: ea_t) starting address - @param strtype: (C++: int32) string type. one of String type codes - @param options: (C++: int) combination of string literal length options - @return: length of the string in octets (octet==8bit) + @param ea: starting address + @param strtype: string type. one of String type codes + @param options: combination of string literal length options + @returns length of the string in octets (octet==8bit) -ida_bytes.get_next_hidden_range (function) - get_next_hidden_range(ea) -> hidden_range_t - Get pointer to next hidden range. - - @param ea: (C++: ea_t) any address in the program - @return: ptr to hidden range or nullptr if next hidden range doesn't exist +ida_bytes.get_next_hidden_range(ea: ida_idaapi.ea_t) -> "hidden_range_t *" + Get pointer to next hidden range. + + @param ea: any address in the program + @returns ptr to hidden range or nullptr if next hidden range doesn't exist -ida_bytes.get_octet (function) - get_octet(ea, v, nbit) -> (int, int, int, int) - - @param ea: ea_t - @param v: uint64 - @param nbit: int +ida_bytes.get_octet(ogen: "octet_generator_t") -> "uchar *" -ida_bytes.get_octet2 (function) - get_octet2(ogen) -> bool - - @param ogen: octet_generator_t * - -ida_bytes.get_operand_flag (function) - get_operand_flag(typebits, n) -> flags64_t +ida_bytes.get_operand_flag(typebits: "uint8", n: int) -> "flags64_t" Place operand `n`'s type flag in the right nibble of a 64-bit flags set. - @param typebits: (C++: uint8) the type bits (one of `FF_N_`) - @param n: (C++: int) the operand number - @return: the shift to the nibble + @param typebits: the type bits (one of `FF_N_`) + @param n: the operand number + @returns the shift to the nibble -ida_bytes.get_operand_type_shift (function) - get_operand_type_shift(n) -> int +ida_bytes.get_operand_type_shift(n: int) -> int Get the shift in `flags64_t` for the nibble representing operand `n`'s type - Note: n must be < UA_MAXOP, and is not checked - @param n: (C++: uint32) the operand number - @return: the shift to the nibble + @param n: the operand number + @returns the shift to the nibble -ida_bytes.get_opinfo (function) - get_opinfo(buf, ea, n, flags) -> opinfo_t - Get additional information about an operand representation. - - @param buf: (C++: opinfo_t *) buffer to receive the result. may not be nullptr - @param ea: (C++: ea_t) linear address of item - @param n: (C++: int) number of operand, 0 or 1 - @param flags: (C++: flags64_t) flags of the item - @return: nullptr if no additional representation information +ida_bytes.get_opinfo(buf: "opinfo_t", ea: ida_idaapi.ea_t, n: int, flags: "flags64_t") -> "opinfo_t *" + Get additional information about an operand representation. + + @param buf: buffer to receive the result. may not be nullptr + @param ea: linear address of item + @param n: number of operand, 0 or 1 + @param flags: flags of the item + @returns nullptr if no additional representation information -ida_bytes.get_optype_flags0 (function) - get_optype_flags0(F) -> flags64_t +ida_bytes.get_optype_flags0(F: "flags64_t") -> "flags64_t" Get flags for first operand. - - @param F: (C++: flags64_t) -ida_bytes.get_optype_flags1 (function) - get_optype_flags1(F) -> flags64_t +ida_bytes.get_optype_flags1(F: "flags64_t") -> "flags64_t" Get flags for second operand. - - @param F: (C++: flags64_t) -ida_bytes.get_original_byte (function) - 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_byte(ea: ida_idaapi.ea_t) -> "uint64" + Get original byte value (that was before patching). This function works for wide byte processors too. + -ida_bytes.get_original_dword (function) - 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 - idainfo::is_be() - - @param ea: (C++: ea_t) +ida_bytes.get_original_dword(ea: ida_idaapi.ea_t) -> "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 idainfo::is_be() + -ida_bytes.get_original_qword (function) - 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 idainfo::is_be() - - @param ea: (C++: ea_t) +ida_bytes.get_original_qword(ea: ida_idaapi.ea_t) -> "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 idainfo::is_be() + -ida_bytes.get_original_word (function) - 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 idainfo::is_be() - - @param ea: (C++: ea_t) +ida_bytes.get_original_word(ea: ida_idaapi.ea_t) -> "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 idainfo::is_be() + -ida_bytes.get_possible_item_varsize (function) - get_possible_item_varsize(ea, tif) -> asize_t - Return the possible size of the item at EA of type TIF if TIF is the variable - structure. - - @param ea: (C++: ea_t) the linear address of the item - @param tif: (C++: const tinfo_t &) the item type - @return: the possible size +ida_bytes.get_possible_item_varsize(ea: ida_idaapi.ea_t, tif: "tinfo_t") -> "asize_t" + Return the possible size of the item at EA of type TIF if TIF is the variable structure. + + @param ea: the linear address of the item + @param tif: the item type + @returns the possible size @retval asize_t(-1): TIF is not a variable structure -ida_bytes.get_predef_insn_cmt (function) - get_predef_insn_cmt(ins) -> str - Get predefined comment. - - @param ins: (C++: const insn_t &) current instruction information - @return: size of comment or -1 +ida_bytes.get_predef_insn_cmt(ins: "insn_t const &") -> str + Get predefined comment. + + @param ins: current instruction information + @returns size of comment or -1 -ida_bytes.get_prev_hidden_range (function) - get_prev_hidden_range(ea) -> hidden_range_t - Get pointer to previous hidden range. - - @param ea: (C++: ea_t) any address in the program - @return: ptr to hidden range or nullptr if previous hidden range doesn't exist +ida_bytes.get_prev_hidden_range(ea: ida_idaapi.ea_t) -> "hidden_range_t *" + Get pointer to previous hidden range. + + @param ea: any address in the program + @returns ptr to hidden range or nullptr if previous hidden range doesn't exist -ida_bytes.get_qword (function) - get_qword(ea) -> uint64 - Get one qword (64-bit) of the program at 'ea'. This function takes into account - order of bytes specified in idainfo::is_be() This function works only for 8bit - byte processors. - - @param ea: (C++: ea_t) +ida_bytes.get_qword(ea: ida_idaapi.ea_t) -> "uint64" + Get one qword (64-bit) of the program at 'ea'. This function takes into account order of bytes specified in idainfo::is_be() This function works only for 8bit byte processors. + -ida_bytes.get_radix (function) - 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: (C++: flags64_t) flags - @param n: (C++: int) number of operand (0, 1, -1) - @return: 2, 8, 10, 16 +ida_bytes.get_radix(F: "flags64_t", n: int) -> int + Get radix of the operand, in: flags. If the operand is not a number, returns get_default_radix() + + @param F: flags + @param n: number of operand (0, 1, -1) + @returns 2, 8, 10, 16 -ida_bytes.get_strlit_contents (function) - get_strlit_contents(ea, py_len, type, flags=0) -> bytes or None +ida_bytes.get_strlit_contents(ea: ida_idaapi.ea_t, len: int, type: int, flags: int = 0) Get contents of string literal, as UTF-8-encoded codepoints. It works even if the string has not been created in the database yet. @@ -16971,1076 +11509,632 @@ ida_bytes.get_strlit_contents (function) strings), you should probably be using the idautils.Strings class. @param ea: linear address of the string - @param py_len: length of the string in bytes (including terminating 0) + @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 (function) - get_stroff_path(path, delta, ea, n) -> int - Get struct path of operand. +ida_bytes.get_stroff_path(*args) + Get the structure offset path for operand `n`, at the + specified address. - @param path: (C++: tid_t *) buffer for structure path (strpath). see nalt.hpp for more info. - @param delta: (C++: adiff_t *) struct offset delta - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL one of the operands - @return: length of strpath - -ida_bytes.get_wide_byte (function) - 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. + This function has the following signatures: - @param ea: (C++: ea_t) - -ida_bytes.get_wide_dword (function) - 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 idainfo::is_be() - @note: this function works incorrectly if processor_t::nbits > 16 + 1. get_stroff_path(ea: ida_idaapi.ea_t, n : int) -> Tuple[List[int], int] + 2. get_stroff_path(path: tid_array, delta: sval_pointer, ea: ida_idaapi.ea_t, n : int) (backward-compatibility only) - @param ea: (C++: ea_t) + @param ea address where the operand holds a path to a structure offset (1st form) + @param n operand number (1st form) + @return a tuple holding a (list_of_tid_t's, delta_within_the_last_type), or (None, None) -ida_bytes.get_wide_word (function) - 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 idainfo::is_be() - - @param ea: (C++: ea_t) +ida_bytes.get_wide_byte(ea: ida_idaapi.ea_t) -> "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. + -ida_bytes.get_word (function) - get_word(ea) -> ushort - Get one word (16-bit) of the program at 'ea'. This function takes into account - order of bytes specified in idainfo::is_be() This function works only for 8bit - byte processors. - - @param ea: (C++: ea_t) +ida_bytes.get_wide_dword(ea: ida_idaapi.ea_t) -> "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 idainfo::is_be() + -ida_bytes.get_zero_ranges (function) - 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: (C++: rangeset_t *) pointer to the return value. cannot be nullptr - @param range: (C++: const range_t *) the range of addresses to verify. can be nullptr - means all - ranges - @return: true if the result is a non-empty set +ida_bytes.get_wide_word(ea: ida_idaapi.ea_t) -> "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 idainfo::is_be() + -ida_bytes.getn_hidden_range (function) - getn_hidden_range(n) -> hidden_range_t - Get pointer to hidden range structure, in: number of hidden range. - - @param n: (C++: int) number of hidden range, is in range 0..get_hidden_range_qty()-1 +ida_bytes.get_word(ea: ida_idaapi.ea_t) -> "ushort" + Get one word (16-bit) of the program at 'ea'. This function takes into account order of bytes specified in idainfo::is_be() This function works only for 8bit byte processors. + -ida_bytes.has_any_name (function) - has_any_name(F) -> bool +ida_bytes.get_zero_ranges(zranges: "rangeset_t", range: "range_t") -> 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 nullptr + @param range: the range of addresses to verify. can be nullptr - means all ranges + @returns true if the result is a non-empty set + +ida_bytes.getn_hidden_range(n: int) -> "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 + +ida_bytes.has_any_name(F: "flags64_t") -> bool Does the current byte have any name? - - @param F: (C++: flags64_t) -ida_bytes.has_auto_name (function) - has_auto_name(F) -> bool +ida_bytes.has_auto_name(F: "flags64_t") -> bool Does the current byte have auto-generated (no special prefix) name? - - @param F: (C++: flags64_t) -ida_bytes.has_cmt (function) - has_cmt(F) -> bool +ida_bytes.has_cmt(F: "flags64_t") -> bool Does the current byte have an indented comment? - - @param F: (C++: flags64_t) -ida_bytes.has_dummy_name (function) - has_dummy_name(F) -> bool +ida_bytes.has_dummy_name(F: "flags64_t") -> bool Does the current byte have dummy (auto-generated, with special prefix) name? - - @param F: (C++: flags64_t) -ida_bytes.has_extra_cmts (function) - has_extra_cmts(F) -> bool +ida_bytes.has_extra_cmts(F: "flags64_t") -> bool Does the current byte have additional anterior or posterior lines? - - @param F: (C++: flags64_t) -ida_bytes.has_immd (function) - has_immd(F) -> bool +ida_bytes.has_immd(F: "flags64_t") -> bool Has immediate value? - - @param F: (C++: flags64_t) -ida_bytes.has_name (function) - has_name(F) -> bool +ida_bytes.has_name(F: "flags64_t") -> bool Does the current byte have non-trivial (non-dummy) name? - - @param F: (C++: flags64_t) -ida_bytes.has_user_name (function) - has_user_name(F) -> bool +ida_bytes.has_user_name(F: "flags64_t") -> bool Does the current byte have user-specified name? - - @param F: (C++: flags64_t) -ida_bytes.has_value (function) - has_value(F) -> bool +ida_bytes.has_value(F: "flags64_t") -> bool Do flags contain byte value? - - @param F: (C++: flags64_t) -ida_bytes.has_xref (function) - has_xref(F) -> bool +ida_bytes.has_xref(F: "flags64_t") -> bool Does the current byte have cross-references to it? - - @param F: (C++: flags64_t) -ida_bytes.hex_flag (function) - hex_flag() -> flags64_t - Get number flag of the base, regardless of current processor - better to use - num_flag() +ida_bytes.hex_flag() -> "flags64_t" + Get number flag of the base, regardless of current processor - better to use num_flag() -ida_bytes.hidden_range_t (class) - Proxy of C++ hidden_range_t class. +ida_bytes.hidden_range_t -ida_bytes.hidden_range_t.__init__ (method) - __init__(self) -> hidden_range_t +ida_bytes.hidden_range_t.__init__(self) -ida_bytes.hidden_range_t.color (variable) +ida_bytes.hidden_range_t.color range color -ida_bytes.hidden_range_t.description (variable) +ida_bytes.hidden_range_t.description description to display if the range is collapsed -ida_bytes.hidden_range_t.footer (variable) +ida_bytes.hidden_range_t.footer footer lines to display if the range is expanded -ida_bytes.hidden_range_t.header (variable) +ida_bytes.hidden_range_t.header header lines to display if the range is expanded -ida_bytes.hidden_range_t.visible (variable) +ida_bytes.hidden_range_t.visible the range state -ida_bytes.is_align (function) - is_align(F) -> bool +ida_bytes.is_align(F: "flags64_t") -> bool FF_ALIGN - - @param F: (C++: flags64_t) -ida_bytes.is_attached_custom_data_format (function) - is_attached_custom_data_format(dtid, dfid) -> bool - Is the custom data format attached to the custom data type? - - @param dtid: (C++: int) data type id - @param dfid: (C++: int) data format id - @return: true or false +ida_bytes.is_attached_custom_data_format(dtid: int, dfid: int) -> bool + Is the custom data format attached to the custom data type? + + @param dtid: data type id + @param dfid: data format id + @returns true or false -ida_bytes.is_bnot (function) - is_bnot(ea, F, n) -> bool - Should we negate the operand?. asm_t::a_bnot should be defined in the idp module - in order to work with this function - - @param ea: (C++: ea_t) - @param F: (C++: flags64_t) - @param n: (C++: int) +ida_bytes.is_bnot(ea: ida_idaapi.ea_t, F: "flags64_t", n: int) -> bool + Should we negate the operand?. asm_t::a_bnot should be defined in the idp module in order to work with this function + -ida_bytes.is_byte (function) - is_byte(F) -> bool +ida_bytes.is_byte(F: "flags64_t") -> bool FF_BYTE - - @param F: (C++: flags64_t) -ida_bytes.is_char (function) - is_char(F, n) -> bool +ida_bytes.is_char(F: "flags64_t", n: int) -> bool is character constant? - - @param F: (C++: flags64_t) - @param n: (C++: int) -ida_bytes.is_char0 (function) - is_char0(F) -> bool +ida_bytes.is_char0(F: "flags64_t") -> bool Is the first operand character constant? (example: push 'a') - - @param F: (C++: flags64_t) -ida_bytes.is_char1 (function) - is_char1(F) -> bool +ida_bytes.is_char1(F: "flags64_t") -> bool Is the second operand character constant? (example: mov al, 'a') - - @param F: (C++: flags64_t) -ida_bytes.is_code (function) - is_code(F) -> bool +ida_bytes.is_code(F: "flags64_t") -> bool Does flag denote start of an instruction? - - @param F: (C++: flags64_t) -ida_bytes.is_custfmt (function) - is_custfmt(F, n) -> bool +ida_bytes.is_custfmt(F: "flags64_t", n: int) -> bool is custom data format? - - @param F: (C++: flags64_t) - @param n: (C++: int) -ida_bytes.is_custfmt0 (function) - is_custfmt0(F) -> bool +ida_bytes.is_custfmt0(F: "flags64_t") -> bool Does the first operand use a custom data representation? - - @param F: (C++: flags64_t) -ida_bytes.is_custfmt1 (function) - is_custfmt1(F) -> bool +ida_bytes.is_custfmt1(F: "flags64_t") -> bool Does the second operand use a custom data representation? - - @param F: (C++: flags64_t) -ida_bytes.is_custom (function) - is_custom(F) -> bool +ida_bytes.is_custom(F: "flags64_t") -> bool FF_CUSTOM - - @param F: (C++: flags64_t) -ida_bytes.is_data (function) - is_data(F) -> bool +ida_bytes.is_data(F: "flags64_t") -> bool Does flag denote start of data? - - @param F: (C++: flags64_t) -ida_bytes.is_defarg (function) - is_defarg(F, n) -> bool +ida_bytes.is_defarg(F: "flags64_t", n: int) -> bool is defined? - - @param F: (C++: flags64_t) - @param n: (C++: int) -ida_bytes.is_defarg0 (function) - is_defarg0(F) -> bool +ida_bytes.is_defarg0(F: "flags64_t") -> bool Is the first operand defined? Initially operand has no defined representation. - - @param F: (C++: flags64_t) -ida_bytes.is_defarg1 (function) - is_defarg1(F) -> bool +ida_bytes.is_defarg1(F: "flags64_t") -> bool Is the second operand defined? Initially operand has no defined representation. - - @param F: (C++: flags64_t) -ida_bytes.is_double (function) - is_double(F) -> bool +ida_bytes.is_double(F: "flags64_t") -> bool FF_DOUBLE - - @param F: (C++: flags64_t) -ida_bytes.is_dword (function) - is_dword(F) -> bool +ida_bytes.is_dword(F: "flags64_t") -> bool FF_DWORD - - @param F: (C++: flags64_t) -ida_bytes.is_enum (function) - is_enum(F, n) -> bool +ida_bytes.is_enum(F: "flags64_t", n: int) -> bool is enum? - - @param F: (C++: flags64_t) - @param n: (C++: int) -ida_bytes.is_enum0 (function) - is_enum0(F) -> bool +ida_bytes.is_enum0(F: "flags64_t") -> bool Is the first operand a symbolic constant (enum member)? - - @param F: (C++: flags64_t) -ida_bytes.is_enum1 (function) - is_enum1(F) -> bool +ida_bytes.is_enum1(F: "flags64_t") -> bool Is the second operand a symbolic constant (enum member)? - - @param F: (C++: flags64_t) -ida_bytes.is_flag_for_operand (function) - is_flag_for_operand(F, typebits, n) -> bool +ida_bytes.is_flag_for_operand(F: "flags64_t", typebits: "uint8", n: int) -> bool Check that the 64-bit flags set has the expected type for operand `n`. - @param F: (C++: flags64_t) the flags - @param typebits: (C++: uint8) the type bits (one of `FF_N_`) - @param n: (C++: int) the operand number - @return: success + @param F: the flags + @param typebits: the type bits (one of `FF_N_`) + @param n: the operand number + @returns success -ida_bytes.is_float (function) - is_float(F) -> bool +ida_bytes.is_float(F: "flags64_t") -> bool FF_FLOAT - - @param F: (C++: flags64_t) -ida_bytes.is_float0 (function) - is_float0(F) -> bool +ida_bytes.is_float0(F: "flags64_t") -> bool Is the first operand a floating point number? - - @param F: (C++: flags64_t) -ida_bytes.is_float1 (function) - is_float1(F) -> bool +ida_bytes.is_float1(F: "flags64_t") -> bool Is the second operand a floating point number? - - @param F: (C++: flags64_t) -ida_bytes.is_flow (function) - is_flow(F) -> bool +ida_bytes.is_flow(F: "flags64_t") -> bool Does the previous instruction exist and pass execution flow to the current byte? - - @param F: (C++: flags64_t) -ida_bytes.is_fltnum (function) - is_fltnum(F, n) -> bool +ida_bytes.is_fltnum(F: "flags64_t", n: int) -> bool is floating point number? - - @param F: (C++: flags64_t) - @param n: (C++: int) -ida_bytes.is_forced_operand (function) - is_forced_operand(ea, n) -> bool - Is operand manually defined?. - - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number +ida_bytes.is_forced_operand(ea: ida_idaapi.ea_t, n: int) -> bool + Is operand manually defined?. + + @param ea: linear address + @param n: 0..UA_MAXOP-1 operand number -ida_bytes.is_func (function) - is_func(F) -> bool +ida_bytes.is_func(F: "flags64_t") -> bool Is function start? - - @param F: (C++: flags64_t) -ida_bytes.is_head (function) - is_head(F) -> bool +ida_bytes.is_head(F: "flags64_t") -> bool Does flag denote start of instruction OR data? - - @param F: (C++: flags64_t) -ida_bytes.is_invsign (function) - 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++: flags64_t) - @param n: (C++: int) +ida_bytes.is_invsign(ea: ida_idaapi.ea_t, F: "flags64_t", n: int) -> bool + Should sign of n-th operand inverted during output?. allowed values of n: 0-first operand, 1-other operands + -ida_bytes.is_loaded (function) - is_loaded(ea) -> bool +ida_bytes.is_loaded(ea: ida_idaapi.ea_t) -> bool Does the specified address have a byte value (is initialized?) - - @param ea: (C++: ea_t) -ida_bytes.is_lzero (function) - is_lzero(ea, n) -> bool - Display leading zeroes? Display leading zeroes in operands. The global switch - for the leading zeroes is in idainfo::s_genflags Note: the leading zeroes - doesn't work if for the target assembler octal numbers start with 0. - - @param ea: (C++: ea_t) the item (insn/data) address - @param n: (C++: int) the operand number (0-first operand, 1-other operands) - @return: success +ida_bytes.is_lzero(ea: ida_idaapi.ea_t, n: int) -> bool + Display leading zeroes? Display leading zeroes in operands. The global switch for the leading zeroes is in idainfo::s_genflags Note: the leading zeroes doesn't work if for the target assembler octal numbers start with 0. + + @param ea: the item (insn/data) address + @param n: the operand number (0-first operand, 1-other operands) + @returns success -ida_bytes.is_manual (function) - is_manual(F, n) -> bool +ida_bytes.is_manual(F: "flags64_t", n: int) -> bool is forced operand? (use is_forced_operand()) - - @param F: (C++: flags64_t) - @param n: (C++: int) -ida_bytes.is_manual_insn (function) - is_manual_insn(ea) -> bool - Is the instruction overridden? - - @param ea: (C++: ea_t) linear address of the instruction or data item +ida_bytes.is_manual_insn(ea: ida_idaapi.ea_t) -> bool + Is the instruction overridden? + + @param ea: linear address of the instruction or data item -ida_bytes.is_mapped (function) - is_mapped(ea) -> bool +ida_bytes.is_mapped(ea: ida_idaapi.ea_t) -> bool Is the specified address 'ea' present in the program? - - @param ea: (C++: ea_t) -ida_bytes.is_not_tail (function) - is_not_tail(F) -> bool +ida_bytes.is_not_tail(F: "flags64_t") -> bool Does flag denote tail byte? - - @param F: (C++: flags64_t) -ida_bytes.is_numop (function) - is_numop(F, n) -> bool +ida_bytes.is_numop(F: "flags64_t", n: int) -> bool is number (bin, oct, dec, hex)? - - @param F: (C++: flags64_t) - @param n: (C++: int) -ida_bytes.is_numop0 (function) - is_numop0(F) -> bool +ida_bytes.is_numop0(F: "flags64_t") -> bool Is the first operand a number (i.e. binary, octal, decimal or hex?) - - @param F: (C++: flags64_t) -ida_bytes.is_numop1 (function) - is_numop1(F) -> bool +ida_bytes.is_numop1(F: "flags64_t") -> bool Is the second operand a number (i.e. binary, octal, decimal or hex?) - - @param F: (C++: flags64_t) -ida_bytes.is_off (function) - is_off(F, n) -> bool +ida_bytes.is_off(F: "flags64_t", n: int) -> bool is offset? - - @param F: (C++: flags64_t) - @param n: (C++: int) -ida_bytes.is_off0 (function) - is_off0(F) -> bool +ida_bytes.is_off0(F: "flags64_t") -> bool Is the first operand offset? (example: push offset xxx) - - @param F: (C++: flags64_t) -ida_bytes.is_off1 (function) - is_off1(F) -> bool +ida_bytes.is_off1(F: "flags64_t") -> bool Is the second operand offset? (example: mov ax, offset xxx) - - @param F: (C++: flags64_t) -ida_bytes.is_oword (function) - is_oword(F) -> bool +ida_bytes.is_oword(F: "flags64_t") -> bool FF_OWORD - - @param F: (C++: flags64_t) -ida_bytes.is_pack_real (function) - is_pack_real(F) -> bool +ida_bytes.is_pack_real(F: "flags64_t") -> bool FF_PACKREAL - - @param F: (C++: flags64_t) -ida_bytes.is_qword (function) - is_qword(F) -> bool +ida_bytes.is_qword(F: "flags64_t") -> bool FF_QWORD - - @param F: (C++: flags64_t) -ida_bytes.is_same_data_type (function) - is_same_data_type(F1, F2) -> bool +ida_bytes.is_same_data_type(F1: "flags64_t", F2: "flags64_t") -> bool Do the given flags specify the same data type? - - @param F1: (C++: flags64_t) - @param F2: (C++: flags64_t) -ida_bytes.is_seg (function) - is_seg(F, n) -> bool +ida_bytes.is_seg(F: "flags64_t", n: int) -> bool is segment? - - @param F: (C++: flags64_t) - @param n: (C++: int) -ida_bytes.is_seg0 (function) - is_seg0(F) -> bool +ida_bytes.is_seg0(F: "flags64_t") -> bool Is the first operand segment selector? (example: push seg seg001) - - @param F: (C++: flags64_t) -ida_bytes.is_seg1 (function) - is_seg1(F) -> bool +ida_bytes.is_seg1(F: "flags64_t") -> bool Is the second operand segment selector? (example: mov dx, seg dseg) - - @param F: (C++: flags64_t) -ida_bytes.is_stkvar (function) - is_stkvar(F, n) -> bool +ida_bytes.is_stkvar(F: "flags64_t", n: int) -> bool is stack variable? - - @param F: (C++: flags64_t) - @param n: (C++: int) -ida_bytes.is_stkvar0 (function) - is_stkvar0(F) -> bool +ida_bytes.is_stkvar0(F: "flags64_t") -> bool Is the first operand a stack variable? - - @param F: (C++: flags64_t) -ida_bytes.is_stkvar1 (function) - is_stkvar1(F) -> bool +ida_bytes.is_stkvar1(F: "flags64_t") -> bool Is the second operand a stack variable? - - @param F: (C++: flags64_t) -ida_bytes.is_strlit (function) - is_strlit(F) -> bool +ida_bytes.is_strlit(F: "flags64_t") -> bool FF_STRLIT - - @param F: (C++: flags64_t) -ida_bytes.is_stroff (function) - is_stroff(F, n) -> bool +ida_bytes.is_stroff(F: "flags64_t", n: int) -> bool is struct offset? - - @param F: (C++: flags64_t) - @param n: (C++: int) -ida_bytes.is_stroff0 (function) - is_stroff0(F) -> bool +ida_bytes.is_stroff0(F: "flags64_t") -> bool Is the first operand an offset within a struct? - - @param F: (C++: flags64_t) -ida_bytes.is_stroff1 (function) - is_stroff1(F) -> bool +ida_bytes.is_stroff1(F: "flags64_t") -> bool Is the second operand an offset within a struct? - - @param F: (C++: flags64_t) -ida_bytes.is_struct (function) - is_struct(F) -> bool +ida_bytes.is_struct(F: "flags64_t") -> bool FF_STRUCT - - @param F: (C++: flags64_t) -ida_bytes.is_suspop (function) - is_suspop(ea, F, n) -> bool +ida_bytes.is_suspop(ea: ida_idaapi.ea_t, F: "flags64_t", n: int) -> bool is suspicious operand? - - @param ea: (C++: ea_t) - @param F: (C++: flags64_t) - @param n: (C++: int) -ida_bytes.is_tail (function) - is_tail(F) -> bool +ida_bytes.is_tail(F: "flags64_t") -> bool Does flag denote tail byte? - - @param F: (C++: flags64_t) -ida_bytes.is_tbyte (function) - is_tbyte(F) -> bool +ida_bytes.is_tbyte(F: "flags64_t") -> bool FF_TBYTE - - @param F: (C++: flags64_t) -ida_bytes.is_unknown (function) - is_unknown(F) -> bool +ida_bytes.is_unknown(F: "flags64_t") -> bool Does flag denote unexplored byte? - - @param F: (C++: flags64_t) -ida_bytes.is_varsize_item (function) - is_varsize_item(ea, F, ti=None, itemsize=None) -> int - Is the item at 'ea' variable size?. - - @param ea: (C++: ea_t) linear address of the item - @param F: (C++: flags64_t) flags - @param ti: (C++: const opinfo_t *) 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 nullptr). If specified as nullptr, will - be automatically retrieved from the database - @param itemsize: (C++: asize_t *) if not nullptr and the item is varsize, itemsize will contain - the calculated item size (for struct types, the minimal size is - returned) +ida_bytes.is_varsize_item(ea: ida_idaapi.ea_t, F: "flags64_t", ti: "opinfo_t" = None, itemsize: "asize_t *" = None) -> int + Is the item at 'ea' variable size?. + + @param ea: linear address of the item + @param F: flags + @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 nullptr). If specified as nullptr, will be automatically retrieved from the database + @param itemsize: if not nullptr and the item is varsize, itemsize will contain the calculated item size (for struct types, the minimal size is returned) @retval 1: varsize item @retval 0: fixed item @retval -1: error (bad data definition) -ida_bytes.is_word (function) - is_word(F) -> bool +ida_bytes.is_word(F: "flags64_t") -> bool FF_WORD - - @param F: (C++: flags64_t) -ida_bytes.is_yword (function) - is_yword(F) -> bool +ida_bytes.is_yword(F: "flags64_t") -> bool FF_YWORD - - @param F: (C++: flags64_t) -ida_bytes.is_zword (function) - is_zword(F) -> bool +ida_bytes.is_zword(F: "flags64_t") -> bool FF_ZWORD - - @param F: (C++: flags64_t) -ida_bytes.leading_zero_important (function) - leading_zero_important(ea, n) -> bool +ida_bytes.leading_zero_important(ea: ida_idaapi.ea_t, n: int) -> bool Check if leading zeroes are important. - - @param ea: (C++: ea_t) - @param n: (C++: int) -ida_bytes.nbits (function) - nbits(ea) -> int - Get number of bits in a byte at the given address. - - @param ea: (C++: ea_t) - @return: processor_t::dnbits() if the address doesn't belong to a segment, - otherwise the result depends on the segment type +ida_bytes.nbits(ea: ida_idaapi.ea_t) -> int + Get number of bits in a byte at the given address. + + @returns processor_t::dnbits() if the address doesn't belong to a segment, otherwise the result depends on the segment type -ida_bytes.next_addr (function) - 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_addr(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get next address in the program (i.e. next address which has flags). + + @returns BADADDR if no such address exist. -ida_bytes.next_chunk (function) - 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_chunk(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get the first address of next contiguous chunk in the program. + + @returns BADADDR if next chunk doesn't exist. -ida_bytes.next_head (function) - next_head(ea, maxea) -> ea_t - Get start of next defined item. - - @param ea: (C++: ea_t) begin search at this address - @param maxea: (C++: ea_t) not included in the search range - @return: BADADDR if none exists. +ida_bytes.next_head(ea: ida_idaapi.ea_t, maxea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get start of next defined item. + + @param ea: begin search at this address + @param maxea: not included in the search range + @returns BADADDR if none exists. -ida_bytes.next_inited (function) - next_inited(ea, maxea) -> ea_t +ida_bytes.next_inited(ea: ida_idaapi.ea_t, maxea: ida_idaapi.ea_t) -> ida_idaapi.ea_t Find the next initialized address. - - @param ea: (C++: ea_t) - @param maxea: (C++: ea_t) -ida_bytes.next_not_tail (function) - 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_not_tail(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get address of next non-tail byte. + + @returns BADADDR if none exists. -ida_bytes.next_that (function) - next_that(ea, maxea, testf) -> ea_t - Find next address with a flag satisfying the function 'testf'. - @note: do not pass is_unknown() to this function to find unexplored bytes. It - will fail under the debugger. To find unexplored bytes, use - next_unknown(). - - @param ea: (C++: ea_t) start searching at this address + 1 - @param maxea: (C++: ea_t) not included in the search range. - @param testf: (C++: testf_t *) test function to find next address - @return: the found address or BADADDR. +ida_bytes.next_that(ea: ida_idaapi.ea_t, maxea: ida_idaapi.ea_t, testf: "testf_t *") -> ida_idaapi.ea_t + Find next address with a flag satisfying the function 'testf'. + + @param ea: start searching at this address + 1 + @param maxea: not included in the search range. + @param testf: test function to find next address + @returns the found address or BADADDR. -ida_bytes.next_unknown (function) - next_unknown(ea, maxea) -> ea_t +ida_bytes.next_unknown(ea: ida_idaapi.ea_t, maxea: ida_idaapi.ea_t) -> ida_idaapi.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.next_visea (function) - next_visea(ea) -> ea_t - Get next visible address. - - @param ea: (C++: ea_t) - @return: BADADDR if none exists. +ida_bytes.next_visea(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get next visible address. + + @returns BADADDR if none exists. -ida_bytes.num_flag (function) - num_flag() -> flags64_t - Get number of default base (bin, oct, dec, hex) +ida_bytes.num_flag() -> "flags64_t" + Get number of default base (bin, oct, dec, hex) + -ida_bytes.oct_flag (function) - oct_flag() -> flags64_t - Get number flag of the base, regardless of current processor - better to use - num_flag() +ida_bytes.oct_flag() -> "flags64_t" + Get number flag of the base, regardless of current processor - better to use num_flag() -ida_bytes.octet_generator_t (class) - Proxy of C++ octet_generator_t class. +ida_bytes.octet_generator_t -ida_bytes.octet_generator_t.__init__ (method) - __init__(self, _ea) -> octet_generator_t - - @param _ea: ea_t +ida_bytes.octet_generator_t.__init__(self, _ea: ida_idaapi.ea_t) -ida_bytes.octet_generator_t.invert_byte_order (method) - invert_byte_order(self) +ida_bytes.octet_generator_t.invert_byte_order(self) -> None -ida_bytes.off_flag (function) - off_flag() -> flags64_t +ida_bytes.off_flag() -> "flags64_t" see FF_opbits -ida_bytes.op_adds_xrefs (function) - 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++: flags64_t) - @param n: (C++: int) +ida_bytes.op_adds_xrefs(F: "flags64_t", n: int) -> bool + Should processor module create xrefs from the operand?. Currently 'offset' and 'structure offset' operands create xrefs + -ida_bytes.op_based_stroff (function) - op_based_stroff(insn, n, opval, base) -> bool - Set operand representation to be 'struct offset' if the operand likely points to - a structure member. For example, let's there is a structure at 1000 1000 - stru_1000 Elf32_Sym <...> the operand #8 will be represented as - '#Elf32_Sym.st_size' after the call of 'op_based_stroff(..., 8, 0x1000)' By the - way, after the call of 'op_plain_offset(..., 0x1000)' it will be represented as - '#(stru_1000.st_size - 0x1000)' - - @param insn: (C++: const insn_t &) the instruction - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands - @param opval: (C++: adiff_t) operand value (usually op_t::value or op_t::addr) - @param base: (C++: ea_t) base reference - @return: success +ida_bytes.op_based_stroff(insn: "insn_t const &", n: int, opval: "adiff_t", base: ida_idaapi.ea_t) -> bool + Set operand representation to be 'struct offset' if the operand likely points to a structure member. For example, let's there is a structure at 1000 1000 stru_1000 Elf32_Sym <...> the operand #8 will be represented as '#Elf32_Sym.st_size' after the call of 'op_based_stroff(..., 8, 0x1000)' By the way, after the call of 'op_plain_offset(..., 0x1000)' it will be represented as '#(stru_1000.st_size - 0x1000)' + + @param insn: the instruction + @param n: 0..UA_MAXOP-1 operand number, OPND_ALL all operands + @param opval: operand value (usually op_t::value or op_t::addr) + @param base: base reference + @returns success -ida_bytes.op_bin (function) - op_bin(ea, n) -> bool +ida_bytes.op_bin(ea: ida_idaapi.ea_t, n: int) -> bool set op type to bin_flag() - - @param ea: (C++: ea_t) - @param n: (C++: int) -ida_bytes.op_chr (function) - op_chr(ea, n) -> bool +ida_bytes.op_chr(ea: ida_idaapi.ea_t, n: int) -> bool set op type to char_flag() - - @param ea: (C++: ea_t) - @param n: (C++: int) -ida_bytes.op_custfmt (function) - op_custfmt(ea, n, fid) -> bool +ida_bytes.op_custfmt(ea: ida_idaapi.ea_t, n: int, fid: int) -> 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 (function) - op_dec(ea, n) -> bool +ida_bytes.op_dec(ea: ida_idaapi.ea_t, n: int) -> bool set op type to dec_flag() - - @param ea: (C++: ea_t) - @param n: (C++: int) -ida_bytes.op_enum (function) - op_enum(ea, n, id, serial=0) -> bool - Set operand representation to be 'enum_t'. If applied to unexplored bytes, - converts them to 16/32bit word data - - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands - @param id: (C++: enum_t) id of enum - @param serial: (C++: uchar) the serial number of the constant in the enumeration, usually 0. - the serial numbers are used if the enumeration contains several - constants with the same value - @return: success +ida_bytes.op_enum(ea: ida_idaapi.ea_t, n: int, id: "tid_t", serial: "uchar" = 0) -> bool + Set operand representation to be enum type If applied to unexplored bytes, converts them to 16/32bit word data + + @param ea: linear address + @param n: 0..UA_MAXOP-1 operand number, OPND_ALL all operands + @param id: id of enum + @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 + @returns success -ida_bytes.op_flt (function) - op_flt(ea, n) -> bool +ida_bytes.op_flt(ea: ida_idaapi.ea_t, n: int) -> bool set op type to flt_flag() - - @param ea: (C++: ea_t) - @param n: (C++: int) -ida_bytes.op_hex (function) - op_hex(ea, n) -> bool +ida_bytes.op_hex(ea: ida_idaapi.ea_t, n: int) -> bool set op type to hex_flag() - - @param ea: (C++: ea_t) - @param n: (C++: int) -ida_bytes.op_num (function) - op_num(ea, n) -> bool +ida_bytes.op_num(ea: ida_idaapi.ea_t, n: int) -> bool set op type to num_flag() - - @param ea: (C++: ea_t) - @param n: (C++: int) -ida_bytes.op_oct (function) - op_oct(ea, n) -> bool +ida_bytes.op_oct(ea: ida_idaapi.ea_t, n: int) -> bool set op type to oct_flag() - - @param ea: (C++: ea_t) - @param n: (C++: int) -ida_bytes.op_seg (function) - 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: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands - @return: success +ida_bytes.op_seg(ea: ida_idaapi.ea_t, n: int) -> bool + Set operand representation to be 'segment'. If applied to unexplored bytes, converts them to 16/32bit word data + + @param ea: linear address + @param n: 0..UA_MAXOP-1 operand number, OPND_ALL all operands + @returns success -ida_bytes.op_stkvar (function) - 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: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands - @return: success +ida_bytes.op_stkvar(ea: ida_idaapi.ea_t, n: int) -> 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 + @param n: 0..UA_MAXOP-1 operand number, OPND_ALL all operands + @returns success -ida_bytes.op_stroff (function) - op_stroff(insn, n, path, path_len, delta) -> bool +ida_bytes.op_stroff(*args) -> bool Set operand representation to be 'struct offset'. - @param insn: (C++: const insn_t &) the instruction - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands - @param path: (C++: const tid_t *) structure path (strpath). see nalt.hpp for more info. - @param path_len: (C++: int) length of the structure path - @param delta: (C++: adiff_t) struct offset delta. usually 0. denotes the difference between the - structure base and the pointer into the structure. - @return: success - op_stroff(insn, n, path, delta) -> bool + This function has the following signatures: - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param n: int - @param path: qvector< tid_t > const & - @param delta: adiff_t + 1. op_stroff(ins: ida_ua.insn_t, n: int, path: List[int], delta: int) + 2. op_stroff(ins: ida_ua.insn_t, n: int, path: ida_pro.tid_array, path_len: int, delta: int) (backward-compatibility only) + + Here is an example using this function: + + ins = ida_ua.insn_t() + if ida_ua.decode_insn(ins, some_address): + operand = 0 + path = [ida_typeinf.get_named_type_tid("my_stucture_t")] # a one-element path + ida_bytes.op_stroff(ins, operand, path, 0) -ida_bytes.oword_flag (function) - oword_flag() -> flags64_t +ida_bytes.oword_flag() -> "flags64_t" Get a flags64_t representing a octaword. -ida_bytes.packreal_flag (function) - packreal_flag() -> flags64_t +ida_bytes.packreal_flag() -> "flags64_t" Get a flags64_t representing a packed decimal real. -ida_bytes.parse_binpat_str (function) - parse_binpat_str(out, ea, _in, radix, strlits_encoding=0) -> str - Convert user-specified binary string to internal representation. The 'in' - parameter contains space-separated tokens: - - numbers (numeric base is determined by 'radix') - - if value of number fits a byte, it is considered as a byte - - if value of number fits a word, it is considered as 2 bytes - - if value of number fits a dword,it is considered as 4 bytes - - "..." string constants - - 'x' single-character constants - - ? variable bytes +ida_bytes.parse_binpat_str(out: "compiled_binpat_vec_t", ea: ida_idaapi.ea_t, _in: str, radix: int, strlits_encoding: int = 0) -> bool + Convert user-specified binary string to internal representation. The 'in' parameter contains space-separated tokens: + numbers (numeric base is determined by 'radix') + - if value of number fits a byte, it is considered as a byte + - if value of number fits a word, it is considered as 2 bytes + - if value of number fits a dword,it is considered as 4 bytes + "..." string constants + 'x' single-character constants + ? variable bytes + Note that string constants are surrounded with double quotes. + Here are a few examples (assuming base 16): + 21 - bytes 0xCD, 0x21 + - bytes 0xCD, 0x21 (little endian ) or 0x21, 0xCD (big-endian) + 0 - the null terminated string "Hello" + - 'H', 0, 'e', 0, 'l', 0, 'l', 0, 'o', 0 + ? ? ? ? 90 - byte 0xB8, 4 bytes with any value, byte 0x90 - Here are a few examples (assuming base 16): - CD 21 - bytes 0xCD, 0x21 - 21CD - bytes 0xCD, 0x21 (little endian ) or 0x21, 0xCD (big-endian) - "Hello", 0 - the null terminated string "Hello" - L"Hello" - 'H', 0, 'e', 0, 'l', 0, 'l', 0, 'o', 0 - B8 ? ? ? ? 90 - byte 0xB8, 4 bytes with any value, byte 0x90 - @param out: (C++: compiled_binpat_vec_t *) a vector of compiled binary patterns, for use with bin_search2() - @param ea: (C++: ea_t) linear address to convert for (the conversion depends on the address, - because the number of bits in a byte depend on the segment type) - @param in: (C++: const char *) input text string - @param radix: (C++: int) numeric base of numbers (8,10,16) - @param strlits_encoding: (C++: int) the target encoding into which the string literals - present in 'in', should be encoded. Can be any from [1, - get_encoding_qty()), or the special values PBSENC_* - @return: false either in case of parsing error, or if at least one requested - target encoding couldn't encode the string literals present in "in". + + @param out: a vector of compiled binary patterns, for use with bin_search() + @param ea: linear address to convert for (the conversion depends on the address, because the number of bits in a byte depend on the segment type) + @param radix: numeric base of numbers (8,10,16) + @param strlits_encoding: the target encoding into which the string literals present in 'in', should be encoded. Can be any from [1, get_encoding_qty()), or the special values PBSENC_* + @returns false either in case of parsing error, or if at least one requested target encoding couldn't encode the string literals present in "in". -ida_bytes.patch_byte (function) - 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. +ida_bytes.patch_byte(ea: ida_idaapi.ea_t, x: "uint64") -> 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. + @retval true: the database has been modified, - @retval false: the debugger is running and the process' memory has value 'x' at - address 'ea', or the debugger is not running, and the IDB has - value 'x' at address 'ea already. - - @param ea: (C++: ea_t) - @param x: (C++: uint64) + @retval false: the debugger is running and the process' memory has value 'x' at address 'ea', or the debugger is not running, and the IDB has value 'x' at address 'ea already. -ida_bytes.patch_bytes (function) - 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: (C++: ea_t) linear address - @param buf: (C++: const void *) buffer with new values of bytes +ida_bytes.patch_bytes(ea: ida_idaapi.ea_t, buf: "void const *") -> None + 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 + @param buf: buffer with new values of bytes -ida_bytes.patch_dword (function) - 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 - idainfo::is_be() +ida_bytes.patch_dword(ea: ida_idaapi.ea_t, x: "uint64") -> 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 idainfo::is_be() + @retval true: the database has been modified, - @retval false: the debugger is running and the process' memory has value 'x' at - address 'ea', or the debugger is not running, and the IDB has - value 'x' at address 'ea already. - - @param ea: (C++: ea_t) - @param x: (C++: uint64) + @retval false: the debugger is running and the process' memory has value 'x' at address 'ea', or the debugger is not running, and the IDB has value 'x' at address 'ea already. -ida_bytes.patch_qword (function) - 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 - idainfo::is_be() +ida_bytes.patch_qword(ea: ida_idaapi.ea_t, x: "uint64") -> 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 idainfo::is_be() + @retval true: the database has been modified, - @retval false: the debugger is running and the process' memory has value 'x' at - address 'ea', or the debugger is not running, and the IDB has - value 'x' at address 'ea already. - - @param ea: (C++: ea_t) - @param x: (C++: uint64) + @retval false: the debugger is running and the process' memory has value 'x' at address 'ea', or the debugger is not running, and the IDB has value 'x' at address 'ea already. -ida_bytes.patch_word (function) - 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 - idainfo::is_be() +ida_bytes.patch_word(ea: ida_idaapi.ea_t, x: "uint64") -> 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 idainfo::is_be() + @retval true: the database has been modified, - @retval false: the debugger is running and the process' memory has value 'x' at - address 'ea', or the debugger is not running, and the IDB has - value 'x' at address 'ea already. - - @param ea: (C++: ea_t) - @param x: (C++: uint64) + @retval false: the debugger is running and the process' memory has value 'x' at address 'ea', or the debugger is not running, and the IDB has value 'x' at address 'ea already. -ida_bytes.prev_addr (function) - 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_addr(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get previous address in the program. + + @returns BADADDR if no such address exist. -ida_bytes.prev_chunk (function) - 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_chunk(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get the last address of previous contiguous chunk in the program. + + @returns BADADDR if previous chunk doesn't exist. -ida_bytes.prev_head (function) - prev_head(ea, minea) -> ea_t - Get start of previous defined item. - - @param ea: (C++: ea_t) begin search at this address - @param minea: (C++: ea_t) included in the search range - @return: BADADDR if none exists. +ida_bytes.prev_head(ea: ida_idaapi.ea_t, minea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get start of previous defined item. + + @param ea: begin search at this address + @param minea: included in the search range + @returns BADADDR if none exists. -ida_bytes.prev_inited (function) - prev_inited(ea, minea) -> ea_t +ida_bytes.prev_inited(ea: ida_idaapi.ea_t, minea: ida_idaapi.ea_t) -> ida_idaapi.ea_t Find the previous initialized address. - - @param ea: (C++: ea_t) - @param minea: (C++: ea_t) -ida_bytes.prev_not_tail (function) - 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_not_tail(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get address of previous non-tail byte. + + @returns BADADDR if none exists. -ida_bytes.prev_that (function) - prev_that(ea, minea, testf) -> ea_t - Find previous address with a flag satisfying the function 'testf'. - @note: 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: (C++: ea_t) start searching from this address - 1. - @param minea: (C++: ea_t) included in the search range. - @param testf: (C++: testf_t *) test function to find previous address - @return: the found address or BADADDR. +ida_bytes.prev_that(ea: ida_idaapi.ea_t, minea: ida_idaapi.ea_t, testf: "testf_t *") -> ida_idaapi.ea_t + Find previous address with a flag satisfying the function 'testf'. + + @param ea: start searching from this address - 1. + @param minea: included in the search range. + @param testf: test function to find previous address + @returns the found address or BADADDR. -ida_bytes.prev_unknown (function) - prev_unknown(ea, minea) -> ea_t +ida_bytes.prev_unknown(ea: ida_idaapi.ea_t, minea: ida_idaapi.ea_t) -> ida_idaapi.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.prev_visea (function) - prev_visea(ea) -> ea_t - Get previous visible address. - - @param ea: (C++: ea_t) - @return: BADADDR if none exists. +ida_bytes.prev_visea(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get previous visible address. + + @returns BADADDR if none exists. -ida_bytes.print_strlit_type (function) - print_strlit_type(strtype, flags=0) -> (str, str) - Get string type information: the string type name (possibly decorated with - hotkey markers), and the tooltip. +ida_bytes.print_strlit_type(strtype: int, flags: int = 0) -> "PyObject *" + Get string type information: the string type name (possibly decorated with hotkey markers), and the tooltip. - @param strtype: (C++: int32) the string type - @param flags: (C++: int) or'ed PSTF_* constants - @return: length of generated text + @param strtype: the string type + @param flags: or'ed PSTF_* constants + @returns length of generated text -ida_bytes.put_byte (function) - 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. - @note: 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: (C++: ea_t) linear address - @param x: (C++: uint64) byte value - @return: true if the database has been modified +ida_bytes.put_byte(ea: ida_idaapi.ea_t, x: "uint64") -> 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. + + @param ea: linear address + @param x: byte value + @returns true if the database has been modified -ida_bytes.put_bytes (function) - 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: (C++: ea_t) linear address - @param buf: (C++: const void *) buffer with new values of bytes +ida_bytes.put_bytes(ea: ida_idaapi.ea_t, buf: "void const *") -> None + 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 + @param buf: buffer with new values of bytes -ida_bytes.put_dword (function) - put_dword(ea, x) - Set value of one dword of the program. This function takes into account order of - bytes specified in idainfo::is_be() This function works for wide byte processors - too. - - @param ea: (C++: ea_t) linear address - @param x: (C++: uint64) dword value - @note: the original value of the dword is completely lost and can't be recovered - by the get_original_dword() function. +ida_bytes.put_dword(ea: ida_idaapi.ea_t, x: "uint64") -> None + Set value of one dword of the program. This function takes into account order of bytes specified in idainfo::is_be() This function works for wide byte processors too. + + @param ea: linear address + @param x: dword value -ida_bytes.put_qword (function) - put_qword(ea, x) - Set value of one qword (8 bytes) of the program. This function takes into - account order of bytes specified in idainfo::is_be() This function DOESN'T works - for wide byte processors. - - @param ea: (C++: ea_t) linear address - @param x: (C++: uint64) qword value +ida_bytes.put_qword(ea: ida_idaapi.ea_t, x: "uint64") -> None + Set value of one qword (8 bytes) of the program. This function takes into account order of bytes specified in idainfo::is_be() This function DOESN'T works for wide byte processors. + + @param ea: linear address + @param x: qword value -ida_bytes.put_word (function) - put_word(ea, x) - Set value of one word of the program. This function takes into account order of - bytes specified in idainfo::is_be() This function works for wide byte processors - too. - @note: 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.put_word(ea: ida_idaapi.ea_t, x: "uint64") -> None + Set value of one word of the program. This function takes into account order of bytes specified in idainfo::is_be() This function works for wide byte processors too. + -ida_bytes.qword_flag (function) - qword_flag() -> flags64_t +ida_bytes.qword_flag() -> "flags64_t" Get a flags64_t representing a quad word. -ida_bytes.register_custom_data_format (function) - register_custom_data_format(py_df) -> int +ida_bytes.register_custom_data_format(df) Registers a custom data format with a given data type. - @param py_df: an instance of data_format_t - @return: < 0 if failed to register + @param df: an instance of data_format_t + @return: + < 0 if failed to register > 0 data format id -ida_bytes.register_custom_data_type (function) - register_custom_data_type(py_dt) -> int +ida_bytes.register_custom_data_type(dt) Registers a custom data type. - @param py_dt: an instance of the data_type_t class - @return: < 0 if failed to register + @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 (function) +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 @@ -18062,182 +12156,141 @@ ida_bytes.register_data_types_and_formats (function) assert many_formats[2][0] != -1 assert many_formats[3][0] == -1 -ida_bytes.register_data_types_and_formats.__reg_format (function) +ida_bytes.register_data_types_and_formats.__reg_format(df, dtid) -ida_bytes.register_data_types_and_formats.__reg_type (function) +ida_bytes.register_data_types_and_formats.__reg_type(dt) -ida_bytes.revert_byte (function) - revert_byte(ea) -> bool - Revert patched byte +ida_bytes.revert_byte(ea: ida_idaapi.ea_t) -> bool + Revert patched byte + @retval true: byte was patched before and reverted now - - @param ea: (C++: ea_t) -ida_bytes.seg_flag (function) - seg_flag() -> flags64_t +ida_bytes.seg_flag() -> "flags64_t" see FF_opbits -ida_bytes.set_cmt (function) - set_cmt(ea, comm, rptble) -> bool - Set an indented comment. - - @param ea: (C++: ea_t) linear address - @param comm: (C++: const char *) comment string +ida_bytes.set_cmt(ea: ida_idaapi.ea_t, comm: str, rptble: bool) -> bool + Set an indented comment. + + @param ea: linear address + @param comm: comment string * nullptr: do nothing (return 0) * "" : delete comment - @param rptble: (C++: bool) is repeatable? - @return: success + @param rptble: is repeatable? + @returns success -ida_bytes.set_forced_operand (function) - set_forced_operand(ea, n, op) -> bool - Set forced operand. - - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number - @param op: (C++: const char *) text of operand +ida_bytes.set_forced_operand(ea: ida_idaapi.ea_t, n: int, op: str) -> bool + Set forced operand. + + @param ea: linear address + @param n: 0..UA_MAXOP-1 operand number + @param op: text of operand * nullptr: do nothing (return 0) * "" : delete forced operand - @return: success + @returns success -ida_bytes.set_immd (function) - 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_immd(ea: ida_idaapi.ea_t) -> bool + Set 'has immediate operand' flag. Returns true if the FF_IMMD bit was not set and now is set + -ida_bytes.set_lzero (function) - set_lzero(ea, n) -> bool - Set toggle lzero bit. This function changes the display of leading zeroes for - the specified operand. If the default is not to display leading zeroes, this - function will display them and vice versa. - - @param ea: (C++: ea_t) the item (insn/data) address - @param n: (C++: int) the operand number (0-first operand, 1-other operands) - @return: success +ida_bytes.set_lzero(ea: ida_idaapi.ea_t, n: int) -> bool + Set toggle lzero bit. This function changes the display of leading zeroes for the specified operand. If the default is not to display leading zeroes, this function will display them and vice versa. + + @param ea: the item (insn/data) address + @param n: the operand number (0-first operand, 1-other operands) + @returns success -ida_bytes.set_manual_insn (function) - set_manual_insn(ea, manual_insn) - Set manual instruction string. - - @param ea: (C++: ea_t) linear address of the instruction or data item - @param manual_insn: (C++: const char *) "" - delete manual string. nullptr - do nothing +ida_bytes.set_manual_insn(ea: ida_idaapi.ea_t, manual_insn: str) -> None + Set manual instruction string. + + @param ea: linear address of the instruction or data item + @param manual_insn: "" - delete manual string. nullptr - do nothing -ida_bytes.set_op_type (function) - set_op_type(ea, type, n) -> bool - (internal function) change representation of operand(s). - - @param ea: (C++: ea_t) linear address - @param type: (C++: flags64_t) new flag value (should be obtained from char_flag(), num_flag() and - similar functions) - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands +ida_bytes.set_op_type(ea: ida_idaapi.ea_t, type: "flags64_t", n: int) -> bool + (internal function) change representation of operand(s). + + @param ea: linear address + @param type: new flag value (should be obtained from char_flag(), num_flag() and similar functions) + @param n: 0..UA_MAXOP-1 operand number, OPND_ALL all operands @retval 1: ok @retval 0: failed (applied to a tail byte) -ida_bytes.set_opinfo (function) - 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: (C++: ea_t) linear address of the item - @param n: (C++: int) number of operand, 0 or 1 (see the note below) - @param flag: (C++: flags64_t) flags of the item - @param ti: (C++: const opinfo_t *) additional representation information - @param suppress_events: (C++: bool) do not generate changing_op_type and op_type_changed - events - @return: success - @note: for custom formats (if is_custfmt(flag, n) is true) or for offsets (if - is_off(flag, n) is true) N can be in range 0..UA_MAXOP-1 or equal to - OPND_ALL. In the case of OPND_ALL the additional information about all - operands will be set. +ida_bytes.set_opinfo(ea: ida_idaapi.ea_t, n: int, flag: "flags64_t", ti: "opinfo_t", suppress_events: bool = 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 + @param n: number of operand, 0 or 1 (see the note below) + @param flag: flags of the item + @param ti: additional representation information + @param suppress_events: do not generate changing_op_type and op_type_changed events + @returns success -ida_bytes.stkvar_flag (function) - stkvar_flag() -> flags64_t +ida_bytes.stkvar_flag() -> "flags64_t" see FF_opbits -ida_bytes.strlit_flag (function) - strlit_flag() -> flags64_t +ida_bytes.strlit_flag() -> "flags64_t" Get a flags64_t representing a string literal. -ida_bytes.stroff_flag (function) - stroff_flag() -> flags64_t +ida_bytes.stroff_flag() -> "flags64_t" see FF_opbits -ida_bytes.stru_flag (function) - stru_flag() -> flags64_t +ida_bytes.stru_flag() -> "flags64_t" Get a flags64_t representing a struct. -ida_bytes.tbyte_flag (function) - tbyte_flag() -> flags64_t +ida_bytes.tbyte_flag() -> "flags64_t" Get a flags64_t representing a tbyte. -ida_bytes.toggle_bnot (function) - toggle_bnot(ea, n) -> bool +ida_bytes.toggle_bnot(ea: ida_idaapi.ea_t, n: int) -> bool Toggle binary negation of operand. also see is_bnot() - - @param ea: (C++: ea_t) - @param n: (C++: int) -ida_bytes.toggle_lzero (function) - toggle_lzero(ea, n) -> bool - Toggle lzero bit. - - @param ea: (C++: ea_t) the item (insn/data) address - @param n: (C++: int) the operand number (0-first operand, 1-other operands) - @return: success +ida_bytes.toggle_lzero(ea: ida_idaapi.ea_t, n: int) -> bool + Toggle lzero bit. + + @param ea: the item (insn/data) address + @param n: the operand number (0-first operand, 1-other operands) + @returns success -ida_bytes.toggle_sign (function) - 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.toggle_sign(ea: ida_idaapi.ea_t, n: int) -> bool + Toggle sign of n-th operand. allowed values of n: 0-first operand, 1-other operands + -ida_bytes.unregister_custom_data_format (function) - unregister_custom_data_format(dfid) -> bool +ida_bytes.unregister_custom_data_format(dfid) Unregisters a custom data format @param dfid: data format id @return: Boolean -ida_bytes.unregister_custom_data_type (function) - unregister_custom_data_type(dtid) -> bool +ida_bytes.unregister_custom_data_type(dtid) Unregisters a custom data type. @param dtid: the data type id @return: Boolean -ida_bytes.unregister_data_types_and_formats (function) +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. -ida_bytes.unregister_data_types_and_formats.__unreg_format (function) +ida_bytes.unregister_data_types_and_formats.__unreg_format(df, dtid) -ida_bytes.unregister_data_types_and_formats.__unreg_type (function) +ida_bytes.unregister_data_types_and_formats.__unreg_type(dt) -ida_bytes.update_hidden_range (function) - update_hidden_range(ha) -> bool - Update hidden range information in the database. You cannot use this function to - change the range boundaries - - @param ha: (C++: const hidden_range_t *) range to update - @return: success +ida_bytes.update_hidden_range(ha: "hidden_range_t") -> bool + Update hidden range information in the database. You cannot use this function to change the range boundaries + + @param ha: range to update + @returns success -ida_bytes.use_mapping (function) - use_mapping(ea) -> ea_t - Translate address according to current mappings. - - @param ea: (C++: ea_t) address to translate - @return: translated address +ida_bytes.use_mapping(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Translate address according to current mappings. + + @param ea: address to translate + @returns translated address -ida_bytes.visit_patched_bytes (function) - visit_patched_bytes(ea1, ea2, py_callable) -> int +ida_bytes.visit_patched_bytes(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, callable) Enumerates patched bytes in the given range and invokes a callable @param ea1: start address @param ea2: end address - @param py_callable: a Python callable with the following prototype: + @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 @@ -18245,1012 +12298,711 @@ ida_bytes.visit_patched_bytes (function) @return: Zero if the enumeration was successful or the return value of the callback if enumeration was interrupted. -ida_bytes.word_flag (function) - word_flag() -> flags64_t +ida_bytes.word_flag() -> "flags64_t" Get a flags64_t representing a word. -ida_bytes.yword_flag (function) - yword_flag() -> flags64_t +ida_bytes.yword_flag() -> "flags64_t" Get a flags64_t representing a ymm word. -ida_bytes.zword_flag (function) - zword_flag() -> flags64_t +ida_bytes.zword_flag() -> "flags64_t" Get a flags64_t representing a zmm word. -ida_dbg (module) +ida_dbg Contains functions to control the debugging of a process. See Debugger functions for a complete explanation of these functions. - - These functions are inlined for the kernel. They are not inlined for the user- - interfaces. + These functions are inlined for the kernel. They are not inlined for the user-interfaces. + -ida_dbg.BKPT_ACTIVE (variable) +ida_dbg.BKPT_ACTIVE active? -ida_dbg.BKPT_BADBPT (variable) +ida_dbg.BKPT_BADBPT failed to write the bpt to the process memory (at least one location) -ida_dbg.BKPT_CNDREADY (variable) +ida_dbg.BKPT_CNDREADY condition has been compiled -ida_dbg.BKPT_FAKEPEND (variable) - fake pending bpt: it is inactive but another bpt of the same type is active at - the same address(es) +ida_dbg.BKPT_FAKEPEND + fake pending bpt: it is inactive but another bpt of the same type is active at the same address(es) + -ida_dbg.BKPT_LISTBPT (variable) +ida_dbg.BKPT_LISTBPT include in bpt list (user-defined bpt) -ida_dbg.BKPT_PAGE (variable) - written to the process as a page bpt. Available only after writing the bpt to - the process. +ida_dbg.BKPT_PAGE + written to the process as a page bpt. Available only after writing the bpt to the process. + -ida_dbg.BKPT_PARTIAL (variable) +ida_dbg.BKPT_PARTIAL partially active? (some locations were not written yet) -ida_dbg.BKPT_TRACE (variable) +ida_dbg.BKPT_TRACE trace bpt; should not be deleted when the process gets suspended -ida_dbg.BPLT_ABS (variable) +ida_dbg.BPLT_ABS absolute address: ea -ida_dbg.BPLT_REL (variable) +ida_dbg.BPLT_REL relative address: module_path, offset -ida_dbg.BPLT_SRC (variable) +ida_dbg.BPLT_SRC source level: filename, lineno -ida_dbg.BPTCK_ACT (variable) +ida_dbg.BPLT_SYM + symbolic: symbol_name, offset + +ida_dbg.BPTCK_ACT breakpoint is active (written to the process) -ida_dbg.BPTCK_NO (variable) +ida_dbg.BPTCK_NO breakpoint is disabled -ida_dbg.BPTCK_NONE (variable) +ida_dbg.BPTCK_NONE breakpoint does not exist -ida_dbg.BPTCK_YES (variable) +ida_dbg.BPTCK_YES breakpoint is enabled -ida_dbg.BPTEV_ADDED (variable) +ida_dbg.BPTEV_ADDED Breakpoint has been added. -ida_dbg.BPTEV_CHANGED (variable) +ida_dbg.BPTEV_CHANGED Breakpoint has been modified. -ida_dbg.BPTEV_REMOVED (variable) +ida_dbg.BPTEV_REMOVED Breakpoint has been removed. -ida_dbg.BPT_BRK (variable) +ida_dbg.BPT_BRK suspend execution upon hit -ida_dbg.BPT_ELANG_SHIFT (variable) +ida_dbg.BPT_ELANG_SHIFT index of the extlang (scripting language) of the condition -ida_dbg.BPT_ENABLED (variable) +ida_dbg.BPT_ENABLED enabled? -ida_dbg.BPT_LOWCND (variable) +ida_dbg.BPT_LOWCND condition is calculated at low level (on the server side) -ida_dbg.BPT_TRACE (variable) +ida_dbg.BPT_TRACE add trace information upon hit -ida_dbg.BPT_TRACEON (variable) +ida_dbg.BPT_TRACEON enable tracing when the breakpoint is reached -ida_dbg.BPT_TRACE_BBLK (variable) +ida_dbg.BPT_TRACE_BBLK basic block tracing -ida_dbg.BPT_TRACE_FUNC (variable) +ida_dbg.BPT_TRACE_FUNC function tracing -ida_dbg.BPT_TRACE_INSN (variable) +ida_dbg.BPT_TRACE_INSN instruction tracing -ida_dbg.BPT_TRACE_TYPES (variable) - 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_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 (variable) +ida_dbg.BPT_UPDMEM refresh the memory layout and contents before evaluating bpt condition -ida_dbg.BT_LOG_INSTS (variable) +ida_dbg.BT_LOG_INSTS specific options for basic block tracing (see set_bblk_trace_options()) - log all instructions in the current basic block + log all instructions in the current basic block + -ida_dbg.DBGINV_ALL (variable) +ida_dbg.DBGINV_ALL invalidate everything -ida_dbg.DBGINV_MEMCFG (variable) +ida_dbg.DBGINV_MEMCFG invalidate cached process segmentation -ida_dbg.DBGINV_MEMORY (variable) +ida_dbg.DBGINV_MEMORY invalidate cached memory contents -ida_dbg.DBGINV_NONE (variable) +ida_dbg.DBGINV_NONE invalidate nothing -ida_dbg.DBGINV_REDRAW (variable) +ida_dbg.DBGINV_REDRAW refresh the screen -ida_dbg.DBGINV_REGS (variable) +ida_dbg.DBGINV_REGS invalidate cached register values -ida_dbg.DBG_Hooks (class) - Proxy of C++ DBG_Hooks class. +ida_dbg.DBG_Hooks -ida_dbg.DBG_Hooks.__disown__ (method) +ida_dbg.DBG_Hooks.__disown__(self) -ida_dbg.DBG_Hooks.__init__ (method) - __init__(self, _flags=0, _hkcb_flags=0x0001) -> DBG_Hooks - - @param _flags: uint32 - @param _hkcb_flags: uint32 +ida_dbg.DBG_Hooks.__init__(self, _flags: int = 0, _hkcb_flags: int = 1) -ida_dbg.DBG_Hooks.dbg_bpt (method) - dbg_bpt(self, tid, bptea) -> int - A user defined breakpoint was reached. - +ida_dbg.DBG_Hooks.dbg_bpt(self, tid: "thid_t", bptea: ida_idaapi.ea_t) -> int + A user defined breakpoint was reached. + @param tid: (thid_t) @param bptea: (::ea_t) -ida_dbg.DBG_Hooks.dbg_bpt_changed (method) - dbg_bpt_changed(self, bptev_code, bpt) - Breakpoint has been changed. - +ida_dbg.DBG_Hooks.dbg_bpt_changed(self, bptev_code: int, bpt: "bpt_t") -> None + Breakpoint has been changed. + @param bptev_code: (int) Breakpoint modification events @param bpt: (bpt_t *) -ida_dbg.DBG_Hooks.dbg_exception (method) - dbg_exception(self, pid, tid, ea, exc_code, exc_can_cont, exc_ea, exc_info) -> int - - @param event: (const debug_event_t *) - @param warn: (int *) filled with: - * -1: display an exception warning dialog if the process is suspended. - * 0: never display an exception warning dialog. - * 1: always display an exception warning dialog. - @param ea: ea_t - @param exc_code: int - @param exc_can_cont: bool - @param exc_ea: ea_t - @param exc_info: char const * +ida_dbg.DBG_Hooks.dbg_exception(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, exc_code: int, exc_can_cont: bool, exc_ea: ida_idaapi.ea_t, exc_info: str) -> int -ida_dbg.DBG_Hooks.dbg_finished_loading_bpts (method) - dbg_finished_loading_bpts(self) +ida_dbg.DBG_Hooks.dbg_finished_loading_bpts(self) -> None Finished loading breakpoint info from idb. -ida_dbg.DBG_Hooks.dbg_information (method) - dbg_information(self, pid, tid, ea, info) - - @param event: (const debug_event_t *) - @param tid: thid_t - @param ea: ea_t - @param info: char const * +ida_dbg.DBG_Hooks.dbg_information(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, info: str) -> None -ida_dbg.DBG_Hooks.dbg_library_load (method) - dbg_library_load(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) - - @param event: (const debug_event_t *) - @param tid: thid_t - @param ea: ea_t - @param modinfo_name: char const * - @param modinfo_base: ea_t - @param modinfo_size: asize_t +ida_dbg.DBG_Hooks.dbg_library_load(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, modinfo_name: str, modinfo_base: ida_idaapi.ea_t, modinfo_size: "asize_t") -> None -ida_dbg.DBG_Hooks.dbg_library_unload (method) - dbg_library_unload(self, pid, tid, ea, info) - - @param event: (const debug_event_t *) - @param tid: thid_t - @param ea: ea_t - @param info: char const * +ida_dbg.DBG_Hooks.dbg_library_unload(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, info: str) -> None -ida_dbg.DBG_Hooks.dbg_process_attach (method) - dbg_process_attach(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) - - @param event: (const debug_event_t *) - @note: This event notification is also an asynchronous function result - notification for start_process() ! - @param tid: thid_t - @param ea: ea_t - @param modinfo_name: char const * - @param modinfo_base: ea_t - @param modinfo_size: asize_t +ida_dbg.DBG_Hooks.dbg_process_attach(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, modinfo_name: str, modinfo_base: ida_idaapi.ea_t, modinfo_size: "asize_t") -> None -ida_dbg.DBG_Hooks.dbg_process_detach (method) - dbg_process_detach(self, pid, tid, ea) - - @param event: (const debug_event_t *) - @note: This event notification is also an asynchronous function result - notification for start_process() ! - @param tid: thid_t - @param ea: ea_t +ida_dbg.DBG_Hooks.dbg_process_detach(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t) -> None -ida_dbg.DBG_Hooks.dbg_process_exit (method) - dbg_process_exit(self, pid, tid, ea, exit_code) - - @param event: (const debug_event_t *) - @note: This event notification is also an asynchronous function result - notification for start_process() ! - @param tid: thid_t - @param ea: ea_t - @param exit_code: int +ida_dbg.DBG_Hooks.dbg_process_exit(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, exit_code: int) -> None -ida_dbg.DBG_Hooks.dbg_process_start (method) - dbg_process_start(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) - - @param event: (const debug_event_t *) - @note: This event notification is also an asynchronous function result - notification for start_process() ! - @param tid: thid_t - @param ea: ea_t - @param modinfo_name: char const * - @param modinfo_base: ea_t - @param modinfo_size: asize_t +ida_dbg.DBG_Hooks.dbg_process_start(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, modinfo_name: str, modinfo_base: ida_idaapi.ea_t, modinfo_size: "asize_t") -> None -ida_dbg.DBG_Hooks.dbg_request_error (method) - dbg_request_error(self, failed_command, failed_dbg_notification) - An error occurred during the processing of a request. - +ida_dbg.DBG_Hooks.dbg_request_error(self, failed_command: int, failed_dbg_notification: int) -> None + An error occurred during the processing of a request. + @param failed_command: (ui_notification_t) @param failed_dbg_notification: (dbg_notification_t) -ida_dbg.DBG_Hooks.dbg_run_to (method) - dbg_run_to(self, pid, tid, ea) - - @param event: (const debug_event_t *) - @param tid: thid_t - @param ea: ea_t +ida_dbg.DBG_Hooks.dbg_run_to(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t) -> None -ida_dbg.DBG_Hooks.dbg_started_loading_bpts (method) - dbg_started_loading_bpts(self) +ida_dbg.DBG_Hooks.dbg_started_loading_bpts(self) -> None Started loading breakpoint info from idb. -ida_dbg.DBG_Hooks.dbg_step_into (method) - dbg_step_into(self) +ida_dbg.DBG_Hooks.dbg_step_into(self) -> None -ida_dbg.DBG_Hooks.dbg_step_over (method) - dbg_step_over(self) +ida_dbg.DBG_Hooks.dbg_step_over(self) -> None -ida_dbg.DBG_Hooks.dbg_step_until_ret (method) - dbg_step_until_ret(self) +ida_dbg.DBG_Hooks.dbg_step_until_ret(self) -> None -ida_dbg.DBG_Hooks.dbg_suspend_process (method) - dbg_suspend_process(self) - The process is now suspended. +ida_dbg.DBG_Hooks.dbg_suspend_process(self) -> None + The process is now suspended. + -ida_dbg.DBG_Hooks.dbg_thread_exit (method) - dbg_thread_exit(self, pid, tid, ea, exit_code) - - @param event: (const debug_event_t *) - @param tid: thid_t - @param ea: ea_t - @param exit_code: int +ida_dbg.DBG_Hooks.dbg_thread_exit(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t, exit_code: int) -> None -ida_dbg.DBG_Hooks.dbg_thread_start (method) - dbg_thread_start(self, pid, tid, ea) - - @param event: (const debug_event_t *) - @param tid: thid_t - @param ea: ea_t +ida_dbg.DBG_Hooks.dbg_thread_start(self, pid: "pid_t", tid: "thid_t", ea: ida_idaapi.ea_t) -> None -ida_dbg.DBG_Hooks.dbg_trace (method) - dbg_trace(self, tid, ip) -> int - A step occurred (one instruction was executed). This event notification is only - generated if step tracing is enabled. - +ida_dbg.DBG_Hooks.dbg_trace(self, tid: "thid_t", ip: ida_idaapi.ea_t) -> int + A step occurred (one instruction was executed). This event notification is only generated if step tracing is enabled. + @param tid: (thid_t) thread ID - @param ip: (::ea_t) current instruction pointer. usually points after the - executed instruction + @param ip: (::ea_t) current instruction pointer. usually points after the executed instruction @retval 1: do not log this trace event @retval 0: log it -ida_dbg.DBG_Hooks.hook (method) - hook(self) -> bool +ida_dbg.DBG_Hooks.hook(self) -> bool -ida_dbg.DBG_Hooks.unhook (method) - unhook(self) -> bool +ida_dbg.DBG_Hooks.unhook(self) -> bool -ida_dbg.DEC_ERROR (variable) +ida_dbg.DEC_ERROR error -ida_dbg.DEC_NOTASK (variable) +ida_dbg.DEC_NOTASK process does not exist -ida_dbg.DEC_TIMEOUT (variable) +ida_dbg.DEC_TIMEOUT timeout -ida_dbg.DOPT_BPT_MSGS (variable) +ida_dbg.DOPT_BPT_MSGS log breakpoints -ida_dbg.DOPT_DISABLE_ASLR (variable) +ida_dbg.DOPT_DISABLE_ASLR disable ASLR -ida_dbg.DOPT_END_BPT (variable) +ida_dbg.DOPT_END_BPT evaluate event condition on process end -ida_dbg.DOPT_ENTRY_BPT (variable) +ida_dbg.DOPT_ENTRY_BPT break on program entry point -ida_dbg.DOPT_EXCDLG (variable) +ida_dbg.DOPT_EXCDLG exception dialogs: -ida_dbg.DOPT_FAST_STEP (variable) +ida_dbg.DOPT_FAST_STEP prevent debugger memory refreshes when single-stepping -ida_dbg.DOPT_INFO_BPT (variable) +ida_dbg.DOPT_INFO_BPT break on debugging information -ida_dbg.DOPT_INFO_MSGS (variable) +ida_dbg.DOPT_INFO_MSGS log debugging info events -ida_dbg.DOPT_LIB_BPT (variable) +ida_dbg.DOPT_LIB_BPT break on library load/unload -ida_dbg.DOPT_LIB_MSGS (variable) +ida_dbg.DOPT_LIB_MSGS log library loads/unloads -ida_dbg.DOPT_LOAD_DINFO (variable) +ida_dbg.DOPT_LOAD_DINFO automatically load debug files (pdb) -ida_dbg.DOPT_REAL_MEMORY (variable) +ida_dbg.DOPT_REAL_MEMORY do not hide breakpoint instructions -ida_dbg.DOPT_REDO_STACK (variable) +ida_dbg.DOPT_REDO_STACK reconstruct the stack -ida_dbg.DOPT_SEGM_MSGS (variable) +ida_dbg.DOPT_SEGM_MSGS log debugger segments modifications -ida_dbg.DOPT_START_BPT (variable) +ida_dbg.DOPT_START_BPT break on process start -ida_dbg.DOPT_TEMP_HWBPT (variable) +ida_dbg.DOPT_TEMP_HWBPT when possible use hardware bpts for temp bpts -ida_dbg.DOPT_THREAD_BPT (variable) +ida_dbg.DOPT_THREAD_BPT break on thread start/exit -ida_dbg.DOPT_THREAD_MSGS (variable) +ida_dbg.DOPT_THREAD_MSGS log thread starts/exits -ida_dbg.DSTATE_NOTASK (variable) +ida_dbg.DSTATE_NOTASK no process is currently debugged -ida_dbg.DSTATE_RUN (variable) +ida_dbg.DSTATE_RUN process is running -ida_dbg.DSTATE_SUSP (variable) +ida_dbg.DSTATE_SUSP process is suspended and will not continue -ida_dbg.EXCDLG_ALWAYS (variable) +ida_dbg.EXCDLG_ALWAYS always display -ida_dbg.EXCDLG_NEVER (variable) +ida_dbg.EXCDLG_NEVER never display exception dialogs -ida_dbg.EXCDLG_UNKNOWN (variable) +ida_dbg.EXCDLG_UNKNOWN display for unknown exceptions -ida_dbg.FT_LOG_RET (variable) +ida_dbg.FT_LOG_RET specific options for function tracing (see set_func_trace_options()) - function tracing will log returning instructions + function tracing will log returning instructions + -ida_dbg.IT_LOG_SAME_IP (variable) +ida_dbg.IT_LOG_SAME_IP specific options for instruction tracing (see set_insn_trace_options()) - instruction tracing will log new instructions even when IP doesn't change + instruction tracing will log new instructions even when IP doesn't change + -ida_dbg.SRCIT_EXPR (variable) +ida_dbg.MOVBPT_BAD_TYPE + BPLT_ABS is not supported. + +ida_dbg.MOVBPT_DEST_BUSY + destination location is busy (we already have such a bpt) + +ida_dbg.MOVBPT_NOT_FOUND + source bpt not found + +ida_dbg.MOVBPT_OK + moved ok + +ida_dbg.SRCIT_EXPR an expression (a+b*c) -ida_dbg.SRCIT_FUNC (variable) +ida_dbg.SRCIT_FUNC function -ida_dbg.SRCIT_LOCVAR (variable) +ida_dbg.SRCIT_LOCVAR a stack, register, or register-relative local variable or parameter -ida_dbg.SRCIT_MODULE (variable) +ida_dbg.SRCIT_MODULE module -ida_dbg.SRCIT_NONE (variable) +ida_dbg.SRCIT_NONE unknown -ida_dbg.SRCIT_STMT (variable) +ida_dbg.SRCIT_STMT a statement (if/while/for...) -ida_dbg.SRCIT_STTVAR (variable) +ida_dbg.SRCIT_STTVAR static variable/code -ida_dbg.ST_ALREADY_LOGGED (variable) +ida_dbg.ST_ALREADY_LOGGED step tracing will be disabled when IP is already logged -ida_dbg.ST_OPTIONS_MASK (variable) +ida_dbg.ST_DIFFERENTIAL + tracing: log only new instructions (not previously logged) + + +ida_dbg.ST_OPTIONS_MASK mask of available options, to ensure compatibility with newer IDA versions -ida_dbg.ST_OVER_DEBUG_SEG (variable) +ida_dbg.ST_OVER_DEBUG_SEG step tracing will be disabled when IP is in a debugger segment -ida_dbg.ST_OVER_LIB_FUNC (variable) +ida_dbg.ST_OVER_LIB_FUNC step tracing will be disabled when IP is in a library function -ida_dbg.ST_SKIP_LOOPS (variable) +ida_dbg.ST_SKIP_LOOPS step tracing will try to skip loops already recorded -ida_dbg.WFNE_ANY (variable) +ida_dbg.WFNE_ANY return the first event (even if it doesn't suspend the process) -ida_dbg.WFNE_CONT (variable) +ida_dbg.WFNE_CONT continue from the suspended state -ida_dbg.WFNE_NOWAIT (variable) - do not wait for any event, immediately return DEC_TIMEOUT (to be used with - WFNE_CONT) +ida_dbg.WFNE_NOWAIT + do not wait for any event, immediately return DEC_TIMEOUT (to be used with WFNE_CONT) + -ida_dbg.WFNE_SILENT (variable) +ida_dbg.WFNE_SILENT 1: be silent, 0:display modal boxes if necessary -ida_dbg.WFNE_SUSP (variable) +ida_dbg.WFNE_SUSP wait until the process gets suspended -ida_dbg.WFNE_USEC (variable) - timeout is specified in microseconds (minimum non-zero timeout is 40000us) +ida_dbg.WFNE_USEC + timeout is specified in microseconds (minimum non-zero timeout is 40000us) + -ida_dbg.add_bpt (function) - add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool - Add a new breakpoint in the debugged process. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} +ida_dbg.add_bpt(*args) -> bool + This function has the following signatures: - @param bpt: (C++: const bpt_t &) Breakpoint to add. It describes the break condition, type, flags, - location (module relative, source breakpoint or absolute) and other - attributes. - @param size: asize_t - @param type: bpttype_t + 0. add_bpt(ea: ida_idaapi.ea_t, size: asize_t=0, type: bpttype_t=BPT_DEFAULT) -> bool + 1. add_bpt(bpt: const bpt_t &) -> bool - add_bpt(bpt) -> bool + # 0: add_bpt(ea: ida_idaapi.ea_t, size: asize_t=0, type: bpttype_t=BPT_DEFAULT) -> bool - @param bpt: bpt_t const & + Add a new breakpoint in the debugged process. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)} + + + # 1: add_bpt(bpt: const bpt_t &) -> bool + + Add a new breakpoint in the debugged process. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)} + -ida_dbg.add_path_mapping (function) - add_path_mapping(src, dst) - - @param src: char const * - @param dst: char const * +ida_dbg.add_path_mapping(src: str, dst: str) -> None -ida_dbg.add_virt_module (function) - add_virt_module(mod) -> bool - - @param mod: modinfo_t const * +ida_dbg.add_virt_module(mod: "modinfo_t") -> bool -ida_dbg.attach_process (function) - 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} - @note: This function shouldn't be called as a request if NO_PROCESS is used. - - @param pid: (C++: pid_t) PID of the process to attach to. If NO_PROCESS, a dialog box will - interactively ask the user for the process to attach to. +ida_dbg.attach_process(*args) -> int + Attach the debugger to a running process. \sq{Type, Asynchronous function - available as Request, Notification, dbg_process_attach} + + @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. + @param event_id: event to trigger upon attaching @retval -4: debugger was not inited @retval -3: the attaching is not supported @retval -2: impossible to find a compatible process - @retval -1: impossible to attach to the given process (process died, privilege - needed, not supported by the debugger plugin, ...) + @retval -1: impossible to attach to the given process (process died, privilege needed, not supported by the debugger plugin, ...) @retval 0: the user cancelled the attaching to the process @retval 1: the debugger properly attached to the process -ida_dbg.bpt_location_t (class) - Proxy of C++ bpt_location_t class. +ida_dbg.bpt_location_t -ida_dbg.bpt_location_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: bpt_location_t const & +ida_dbg.bpt_location_t.__eq__(self, r: "bpt_location_t") -> bool -ida_dbg.bpt_location_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: bpt_location_t const & +ida_dbg.bpt_location_t.__ge__(self, r: "bpt_location_t") -> bool -ida_dbg.bpt_location_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: bpt_location_t const & +ida_dbg.bpt_location_t.__gt__(self, r: "bpt_location_t") -> bool -ida_dbg.bpt_location_t.__init__ (method) - __init__(self) -> bpt_location_t +ida_dbg.bpt_location_t.__init__(self) -ida_dbg.bpt_location_t.__le__ (method) - __le__(self, r) -> bool - - @param r: bpt_location_t const & +ida_dbg.bpt_location_t.__le__(self, r: "bpt_location_t") -> bool -ida_dbg.bpt_location_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: bpt_location_t const & +ida_dbg.bpt_location_t.__lt__(self, r: "bpt_location_t") -> bool -ida_dbg.bpt_location_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: bpt_location_t const & +ida_dbg.bpt_location_t.__ne__(self, r: "bpt_location_t") -> bool -ida_dbg.bpt_location_t.compare (method) - compare(self, r) -> int - Lexically compare two breakpoint locations. Bpt locations are first compared - based on type (i.e. BPLT_ABS < BPLT_REL). BPLT_ABS locations are compared based - on their ea values. For all other location types, locations are first compared - based on their string (path/filename/symbol), then their offset/lineno. - - @param r: (C++: const bpt_location_t &) bpt_location_t const & +ida_dbg.bpt_location_t.compare(self, r: "bpt_location_t") -> int + Lexically compare two breakpoint locations. Bpt locations are first compared based on type (i.e. BPLT_ABS < BPLT_REL). BPLT_ABS locations are compared based on their ea values. For all other location types, locations are first compared based on their string (path/filename/symbol), then their offset/lineno. + -ida_dbg.bpt_location_t.ea (method) - ea(self) -> ea_t +ida_dbg.bpt_location_t.ea(self) -> ida_idaapi.ea_t Get address (BPLT_ABS) -ida_dbg.bpt_location_t.is_empty_path (method) - is_empty_path(self) -> bool +ida_dbg.bpt_location_t.is_empty_path(self) -> bool No path/filename specified? (BPLT_REL, BPLT_SRC) -ida_dbg.bpt_location_t.lineno (method) - lineno(self) -> int +ida_dbg.bpt_location_t.lineno(self) -> int Get line number (BPLT_SRC) -ida_dbg.bpt_location_t.offset (method) - offset(self) -> uval_t +ida_dbg.bpt_location_t.offset(self) -> int Get offset (BPLT_REL, BPLT_SYM) -ida_dbg.bpt_location_t.path (method) - path(self) -> char const * +ida_dbg.bpt_location_t.path(self) -> str Get path/filename (BPLT_REL, BPLT_SRC) -ida_dbg.bpt_location_t.set_abs_bpt (method) - set_abs_bpt(self, a) +ida_dbg.bpt_location_t.set_abs_bpt(self, a: ida_idaapi.ea_t) -> None Specify an absolute address location. - - @param a: (C++: ea_t) -ida_dbg.bpt_location_t.set_rel_bpt (method) - set_rel_bpt(self, mod, _offset) +ida_dbg.bpt_location_t.set_rel_bpt(self, mod: str, _offset: int) -> None Specify a relative address location. - - @param mod: (C++: const char *) char const * - @param _offset: (C++: uval_t) -ida_dbg.bpt_location_t.set_src_bpt (method) - set_src_bpt(self, fn, _lineno) +ida_dbg.bpt_location_t.set_src_bpt(self, fn: str, _lineno: int) -> None Specify a source level location. - - @param fn: (C++: const char *) char const * - @param _lineno: (C++: int) -ida_dbg.bpt_location_t.set_sym_bpt (method) - set_sym_bpt(self, _symbol, _offset=0) +ida_dbg.bpt_location_t.set_sym_bpt(self, _symbol: str, _offset: int = 0) -> None Specify a symbolic location. - - @param _symbol: (C++: const char *) char const * - @param _offset: (C++: uval_t) -ida_dbg.bpt_location_t.symbol (method) - symbol(self) -> char const * +ida_dbg.bpt_location_t.symbol(self) -> str Get symbol name (BPLT_SYM) -ida_dbg.bpt_location_t.type (method) - type(self) -> bpt_loctype_t +ida_dbg.bpt_location_t.type(self) -> "bpt_loctype_t" Get bpt type. -ida_dbg.bpt_t (class) - Proxy of C++ bpt_t class. +ida_dbg.bpt_t -ida_dbg.bpt_t.__init__ (method) - __init__(self) -> bpt_t +ida_dbg.bpt_t.__init__(self) -ida_dbg.bpt_t.badbpt (method) - badbpt(self) -> bool +ida_dbg.bpt_t.badbpt(self) -> bool Failed to write bpt to process memory? -ida_dbg.bpt_t.bptid (variable) +ida_dbg.bpt_t.bptid Internal breakpoint id. -ida_dbg.bpt_t.cb (variable) +ida_dbg.bpt_t.cb size of this structure -ida_dbg.bpt_t.cndidx (variable) +ida_dbg.bpt_t.cndidx Internal number of the condition (<0-none) -ida_dbg.bpt_t.ea (variable) +ida_dbg.bpt_t.ea Address, if known. For BPLT_SRC, index into an internal data struct. -ida_dbg.bpt_t.enabled (method) - enabled(self) -> bool +ida_dbg.bpt_t.enabled(self) -> bool Is breakpoint enabled? -ida_dbg.bpt_t.flags (variable) - Breakpoint property bits +ida_dbg.bpt_t.flags + Breakpoint property bits + -ida_dbg.bpt_t.get_cnd_elang_idx (method) - get_cnd_elang_idx(self) -> size_t +ida_dbg.bpt_t.get_cnd_elang_idx(self) -> "size_t" -ida_dbg.bpt_t.get_size (method) - get_size(self) -> int +ida_dbg.bpt_t.get_size(self) -> int Get bpt size. -ida_dbg.bpt_t.is_absbpt (method) - is_absbpt(self) -> bool +ida_dbg.bpt_t.is_absbpt(self) -> bool Is absolute address breakpoint? -ida_dbg.bpt_t.is_active (method) - is_active(self) -> bool +ida_dbg.bpt_t.is_active(self) -> bool Written completely to process? -ida_dbg.bpt_t.is_compiled (method) - is_compiled(self) -> bool - Condition has been compiled? +ida_dbg.bpt_t.is_compiled(self) -> bool + Condition has been compiled? + -ida_dbg.bpt_t.is_hwbpt (method) - is_hwbpt(self) -> bool +ida_dbg.bpt_t.is_hwbpt(self) -> bool Is hardware breakpoint? -ida_dbg.bpt_t.is_inactive (method) - is_inactive(self) -> bool +ida_dbg.bpt_t.is_inactive(self) -> bool Not written to process at all? -ida_dbg.bpt_t.is_low_level (method) - is_low_level(self) -> bool +ida_dbg.bpt_t.is_low_level(self) -> bool Is bpt condition calculated at low level? -ida_dbg.bpt_t.is_page_bpt (method) - is_page_bpt(self) -> bool +ida_dbg.bpt_t.is_page_bpt(self) -> bool Page breakpoint? -ida_dbg.bpt_t.is_partially_active (method) - is_partially_active(self) -> bool +ida_dbg.bpt_t.is_partially_active(self) -> bool Written partially to process? -ida_dbg.bpt_t.is_relbpt (method) - is_relbpt(self) -> bool +ida_dbg.bpt_t.is_relbpt(self) -> bool Is relative address breakpoint? -ida_dbg.bpt_t.is_srcbpt (method) - is_srcbpt(self) -> bool +ida_dbg.bpt_t.is_srcbpt(self) -> bool Is source level breakpoint? -ida_dbg.bpt_t.is_symbpt (method) - is_symbpt(self) -> bool +ida_dbg.bpt_t.is_symbpt(self) -> bool Is symbolic breakpoint? -ida_dbg.bpt_t.is_tracemodebpt (method) - is_tracemodebpt(self) -> bool +ida_dbg.bpt_t.is_tracemodebpt(self) -> bool Does breakpoint trace anything? -ida_dbg.bpt_t.is_traceoffbpt (method) - is_traceoffbpt(self) -> bool +ida_dbg.bpt_t.is_traceoffbpt(self) -> bool Is this a tracing breakpoint, and is tracing disabled? -ida_dbg.bpt_t.is_traceonbpt (method) - is_traceonbpt(self) -> bool +ida_dbg.bpt_t.is_traceonbpt(self) -> bool Is this a tracing breakpoint, and is tracing enabled? -ida_dbg.bpt_t.listbpt (method) - listbpt(self) -> bool +ida_dbg.bpt_t.listbpt(self) -> bool Include in the bpt list? -ida_dbg.bpt_t.loc (variable) +ida_dbg.bpt_t.loc Location. -ida_dbg.bpt_t.pass_count (variable) - Number of times the breakpoint is hit before stopping (default is 0: stop - always) +ida_dbg.bpt_t.pass_count + Number of times the breakpoint is hit before stopping (default is 0: stop always) + -ida_dbg.bpt_t.pid (variable) +ida_dbg.bpt_t.pid breakpoint process id -ida_dbg.bpt_t.props (variable) - Internal breakpoint properties +ida_dbg.bpt_t.props + Internal breakpoint properties + -ida_dbg.bpt_t.set_abs_bpt (method) - set_abs_bpt(self, a) +ida_dbg.bpt_t.set_abs_bpt(self, a: ida_idaapi.ea_t) -> None Set bpt location to an absolute address. - - @param a: (C++: ea_t) -ida_dbg.bpt_t.set_rel_bpt (method) - set_rel_bpt(self, mod, o) +ida_dbg.bpt_t.set_rel_bpt(self, mod: str, o: int) -> None Set bpt location to a relative address. - - @param mod: (C++: const char *) char const * - @param o: (C++: uval_t) -ida_dbg.bpt_t.set_src_bpt (method) - set_src_bpt(self, fn, lineno) +ida_dbg.bpt_t.set_src_bpt(self, fn: str, lineno: int) -> None Set bpt location to a source line. - - @param fn: (C++: const char *) char const * - @param lineno: (C++: int) -ida_dbg.bpt_t.set_sym_bpt (method) - set_sym_bpt(self, sym, o) +ida_dbg.bpt_t.set_sym_bpt(self, sym: str, o: int) -> None Set bpt location to a symbol. - - @param sym: (C++: const char *) char const * - @param o: (C++: uval_t) -ida_dbg.bpt_t.set_trace_action (method) - set_trace_action(self, enable, trace_types) -> bool +ida_dbg.bpt_t.set_trace_action(self, enable: bool, trace_types: int) -> bool Configure tracing options. - - @param enable: (C++: bool) - @param trace_types: (C++: int) -ida_dbg.bpt_t.size (variable) +ida_dbg.bpt_t.size Size of the breakpoint (0 for software breakpoints) -ida_dbg.bpt_t.tid (variable) +ida_dbg.bpt_t.tid breakpoint thread id -ida_dbg.bpt_t.type (variable) +ida_dbg.bpt_t.type Breakpoint type. -ida_dbg.bpt_vec_t (class) - Proxy of C++ qvector< bpt_t > class. +ida_dbg.bpt_vec_t -ida_dbg.bpt_vec_t.__getitem__ (method) - __getitem__(self, i) -> bpt_t - - @param i: size_t +ida_dbg.bpt_vec_t.__getitem__(self, i: "size_t") -> "bpt_t const &" -ida_dbg.bpt_vec_t.__init__ (method) - __init__(self) -> bpt_vec_t - __init__(self, x) -> bpt_vec_t - - @param x: qvector< bpt_t > const & +ida_dbg.bpt_vec_t.__init__(self, *args) -ida_dbg.bpt_vec_t.__len__ (method) - __len__(self) -> size_t +ida_dbg.bpt_vec_t.__len__(self) -> "size_t" -ida_dbg.bpt_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: bpt_t const & +ida_dbg.bpt_vec_t.__setitem__(self, i: "size_t", v: "bpt_t") -> None -ida_dbg.bpt_vec_t.at (method) - at(self, _idx) -> bpt_t - - @param _idx: size_t +ida_dbg.bpt_vec_t.append(self, x: "bpt_t") -> None -ida_dbg.bpt_vec_t.begin (method) - begin(self) -> bpt_t +ida_dbg.bpt_vec_t.at(self, _idx: "size_t") -> "bpt_t const &" -ida_dbg.bpt_vec_t.capacity (method) - capacity(self) -> size_t +ida_dbg.bpt_vec_t.begin(self, *args) -> "qvector< bpt_t >::const_iterator" -ida_dbg.bpt_vec_t.clear (method) - clear(self) +ida_dbg.bpt_vec_t.capacity(self) -> "size_t" -ida_dbg.bpt_vec_t.empty (method) - empty(self) -> bool +ida_dbg.bpt_vec_t.clear(self) -> None -ida_dbg.bpt_vec_t.end (method) - end(self) -> bpt_t +ida_dbg.bpt_vec_t.empty(self) -> bool -ida_dbg.bpt_vec_t.erase (method) - erase(self, it) -> bpt_t - - @param it: qvector< bpt_t >::iterator - - erase(self, first, last) -> bpt_t - - @param first: qvector< bpt_t >::iterator - @param last: qvector< bpt_t >::iterator +ida_dbg.bpt_vec_t.end(self, *args) -> "qvector< bpt_t >::const_iterator" -ida_dbg.bpt_vec_t.extract (method) - extract(self) -> bpt_t +ida_dbg.bpt_vec_t.erase(self, *args) -> "qvector< bpt_t >::iterator" -ida_dbg.bpt_vec_t.grow (method) - grow(self, x=bpt_t()) - - @param x: bpt_t const & +ida_dbg.bpt_vec_t.extend(self, x: "bpt_vec_t") -> None -ida_dbg.bpt_vec_t.inject (method) - inject(self, s, len) - - @param s: bpt_t * - @param len: size_t +ida_dbg.bpt_vec_t.extract(self) -> "bpt_t *" -ida_dbg.bpt_vec_t.insert (method) - insert(self, it, x) -> bpt_t - - @param it: qvector< bpt_t >::iterator - @param x: bpt_t const & +ida_dbg.bpt_vec_t.grow(self, *args) -> None -ida_dbg.bpt_vec_t.pop_back (method) - pop_back(self) +ida_dbg.bpt_vec_t.inject(self, s: "bpt_t", len: "size_t") -> None -ida_dbg.bpt_vec_t.push_back (method) - push_back(self, x) - - @param x: bpt_t const & - - push_back(self) -> bpt_t +ida_dbg.bpt_vec_t.insert(self, it: "bpt_t", x: "bpt_t") -> "qvector< bpt_t >::iterator" -ida_dbg.bpt_vec_t.qclear (method) - qclear(self) +ida_dbg.bpt_vec_t.pop_back(self) -> None -ida_dbg.bpt_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_dbg.bpt_vec_t.push_back(self, *args) -> "bpt_t &" -ida_dbg.bpt_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: bpt_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_dbg.bpt_vec_t.qclear(self) -> None -ida_dbg.bpt_vec_t.size (method) - size(self) -> size_t +ida_dbg.bpt_vec_t.reserve(self, cnt: "size_t") -> None -ida_dbg.bpt_vec_t.swap (method) - swap(self, r) - - @param r: qvector< bpt_t > & +ida_dbg.bpt_vec_t.resize(self, *args) -> None -ida_dbg.bpt_vec_t.truncate (method) - truncate(self) +ida_dbg.bpt_vec_t.size(self) -> "size_t" -ida_dbg.bptaddrs_t (class) - Proxy of C++ bptaddrs_t class. +ida_dbg.bpt_vec_t.swap(self, r: "bpt_vec_t") -> None -ida_dbg.bptaddrs_t.__init__ (method) - __init__(self) -> bptaddrs_t +ida_dbg.bpt_vec_t.truncate(self) -> None -ida_dbg.bring_debugger_to_front (function) - bring_debugger_to_front() +ida_dbg.bptaddrs_t -ida_dbg.check_bpt (function) - check_bpt(ea) -> int - Check the breakpoint at the specified address. - - @param ea: (C++: ea_t) - @return: one of Breakpoint status codes +ida_dbg.bptaddrs_t.__init__(self) -ida_dbg.choose_trace_file (function) - choose_trace_file() -> str +ida_dbg.bring_debugger_to_front() -> None + +ida_dbg.check_bpt(ea: ida_idaapi.ea_t) -> int + Check the breakpoint at the specified address. + + @returns one of Breakpoint status codes + +ida_dbg.choose_trace_file() -> str Show the choose trace dialog. -ida_dbg.clear_requests_queue (function) - clear_requests_queue() - Clear the queue of waiting requests. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - @note: If a request is currently running, this one isn't stopped. +ida_dbg.clear_requests_queue() -> None + Clear the queue of waiting requests. \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.clear_trace (function) - clear_trace() - Clear all events in the trace buffer. \sq{Type, Synchronous function - available - as request, Notification, none (synchronous function)} +ida_dbg.clear_trace() -> None + Clear all events in the trace buffer. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)} + -ida_dbg.collect_stack_trace (function) - collect_stack_trace(tid, trace) -> bool - - @param tid: thid_t - @param trace: call_stack_t * +ida_dbg.collect_stack_trace(tid: "thid_t", trace: "call_stack_t") -> bool -ida_dbg.continue_process (function) - continue_process() -> bool - Continue the execution of the process in the debugger. \sq{Type, Synchronous - function - available as Request, Notification, none (synchronous function)} - @note: 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.continue_backwards() -> bool + Continue the execution of the process in the debugger backwards. Can only be used with debuggers that support time-travel debugging. \sq{Type, Synchronous function - available as Request, Notification, none (synchronous function)} + -ida_dbg.create_source_viewer (function) - create_source_viewer(out_ccv, parent, custview, sf, lines, lnnum, colnum, flags) -> source_view_t * +ida_dbg.continue_process() -> bool + Continue the execution of the process in the debugger. \sq{Type, Synchronous function - available as Request, Notification, none (synchronous function)} + + +ida_dbg.create_source_viewer(out_ccv: "TWidget **", parent: "TWidget *", custview: "TWidget *", sf: "source_file_ptr", lines: "strvec_t *", lnnum: int, colnum: int, flags: int) -> "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 (function) - 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_bpt_tev(tid: "thid_t", ea: ida_idaapi.ea_t, bp: ida_idaapi.ea_t) -> bool + Add a new breakpoint trace element to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @returns false if the operation failed, true otherwise -ida_dbg.dbg_add_call_tev (function) - 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_call_tev(tid: "thid_t", caller: ida_idaapi.ea_t, callee: ida_idaapi.ea_t) -> None + Add a new call trace element to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.dbg_add_debug_event (function) - 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_debug_event(event: "debug_event_t") -> None + Add a new debug event to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.dbg_add_insn_tev (function) - 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) enum save_reg_values_t - @return: false if the operation failed, true otherwise +ida_dbg.dbg_add_insn_tev(tid: "thid_t", ea: ida_idaapi.ea_t, save: "save_reg_values_t" = SAVE_DIFF) -> bool + Add a new instruction trace element to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @returns false if the operation failed, true otherwise -ida_dbg.dbg_add_many_tevs (function) - 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_many_tevs(new_tevs: "tevinforeg_vec_t") -> bool + Add many new trace elements to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @returns false if the operation failed for any tev_info_t object -ida_dbg.dbg_add_ret_tev (function) - 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_ret_tev(tid: "thid_t", ret_insn: ida_idaapi.ea_t, return_to: ida_idaapi.ea_t) -> None + Add a new return trace element to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.dbg_add_tev (function) - 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) enum tev_type_t - @param tid: (C++: thid_t) - @param address: (C++: ea_t) +ida_dbg.dbg_add_tev(type: "tev_type_t", tid: "thid_t", address: ida_idaapi.ea_t) -> None + Add a new trace element to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.dbg_add_thread (function) - 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_add_thread(tid: "thid_t") -> None + Add a thread to the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.dbg_bin_search (function) - dbg_bin_search(start_ea, end_ea, data, srch_flags) -> str - - @param start_ea: ea_t - @param end_ea: ea_t - @param data: compiled_binpat_vec_t const & - @param srch_flags: int +ida_dbg.dbg_bin_search(start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, data: "compiled_binpat_vec_t const &", srch_flags: int) -> str -ida_dbg.dbg_bpt (variable) - A user defined breakpoint was reached. +ida_dbg.dbg_bpt + A user defined breakpoint was reached. + -ida_dbg.dbg_bpt_changed (variable) - Breakpoint has been changed. +ida_dbg.dbg_bpt_changed + Breakpoint has been changed. + -ida_dbg.dbg_can_query (function) - dbg_can_query() -> bool +ida_dbg.dbg_can_query() This function can be used to check if the debugger can be queried: - debugger is loaded - process is suspended @@ -19260,1132 +13012,726 @@ ida_dbg.dbg_can_query (function) @return: Boolean -ida_dbg.dbg_del_thread (function) - 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_del_thread(tid: "thid_t") -> None + Delete a thread from the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.dbg_finished_loading_bpts (variable) +ida_dbg.dbg_finished_loading_bpts Finished loading breakpoint info from idb. -ida_dbg.dbg_is_loaded (function) - dbg_is_loaded() -> bool +ida_dbg.dbg_is_loaded() Checks if a debugger is loaded @return: Boolean -ida_dbg.dbg_last (variable) +ida_dbg.dbg_last The last debugger notification code. -ida_dbg.dbg_process_attach (variable) - @note: This event notification is also an asynchronous function result - notification for start_process() ! +ida_dbg.dbg_request_error + An error occurred during the processing of a request. + -ida_dbg.dbg_process_detach (variable) - @note: This event notification is also an asynchronous function result - notification for start_process() ! - -ida_dbg.dbg_process_exit (variable) - @note: This event notification is also an asynchronous function result - notification for start_process() ! - -ida_dbg.dbg_process_start (variable) - @note: This event notification is also an asynchronous function result - notification for start_process() ! - -ida_dbg.dbg_request_error (variable) - An error occurred during the processing of a request. - -ida_dbg.dbg_started_loading_bpts (variable) +ida_dbg.dbg_started_loading_bpts Started loading breakpoint info from idb. -ida_dbg.dbg_suspend_process (variable) - The process is now suspended. - - @note: This event notification is also an asynchronous function result - notification for suspend_process() ! +ida_dbg.dbg_suspend_process + The process is now suspended. + -ida_dbg.dbg_trace (variable) - A step occurred (one instruction was executed). This event notification is only - generated if step tracing is enabled. - - @retval 1: do not log this trace event - @retval 0: log it +ida_dbg.dbg_trace + A step occurred (one instruction was executed). This event notification is only generated if step tracing is enabled. + -ida_dbg.define_exception (function) - define_exception(code, name, desc, flags) -> char const * - Convenience function: define new exception code. - - @param code: (C++: uint) exception code (cannot be 0) - @param name: (C++: const char *) exception name (cannot be empty or nullptr) - @param desc: (C++: const char *) exception description (maybe nullptr) - @param flags: (C++: int) combination of Exception info flags - @return: failure message or nullptr. You must call store_exceptions() if this - function succeeds +ida_dbg.define_exception(code: "uint", name: str, desc: str, flags: int) -> str + Convenience function: define new exception code. + + @param code: exception code (cannot be 0) + @param name: exception name (cannot be empty or nullptr) + @param desc: exception description (maybe nullptr) + @param flags: combination of Exception info flags + @returns failure message or nullptr. You must call store_exceptions() if this function succeeds -ida_dbg.del_bpt (function) - del_bpt(ea) -> bool - Delete an existing breakpoint in the debugged process. \sq{Type, Synchronous - function - available as request, Notification, none (synchronous function)} +ida_dbg.del_bpt(*args) -> bool + This function has the following signatures: - @param bptloc: (C++: const bpt_location_t &) Breakpoint location - del_bpt(bptloc) -> bool + 0. del_bpt(ea: ida_idaapi.ea_t) -> bool + 1. del_bpt(bptloc: const bpt_location_t &) -> bool - @param bptloc: bpt_location_t const & - -ida_dbg.del_bptgrp (function) - del_bptgrp(name) -> bool - Delete a folder, bpt that were part of this folder are moved to the root folder - \sq{Type, Synchronous function, Notification, none (synchronous function)} + # 0: del_bpt(ea: ida_idaapi.ea_t) -> bool - @param name: (C++: const char *) full path to the folder to be deleted - @return: success - -ida_dbg.del_virt_module (function) - del_virt_module(base) -> bool + Delete an existing breakpoint in the debugged process. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)} + - @param base: ea_t const + # 1: del_bpt(bptloc: const bpt_location_t &) -> bool + + Delete an existing breakpoint in the debugged process. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)} + -ida_dbg.detach_process (function) - detach_process() -> bool - Detach the debugger from the debugged process. \sq{Type, Asynchronous function - - available as Request, Notification, dbg_process_detach} +ida_dbg.del_bptgrp(name: str) -> bool + Delete a folder, bpt that were part of this folder are moved to the root folder \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @param name: full path to the folder to be deleted + @returns success -ida_dbg.diff_trace_file (function) - diff_trace_file(NONNULL_filename) -> bool +ida_dbg.del_virt_module(base: "ea_t const") -> bool + +ida_dbg.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(NONNULL_filename: str) -> bool Show difference between the current trace and the one from 'filename'. - - @param NONNULL_filename: (C++: const char *) char const * -ida_dbg.disable_bblk_trace (function) - disable_bblk_trace() -> bool +ida_dbg.disable_bblk_trace() -> bool -ida_dbg.disable_bpt (function) - disable_bpt(ea) -> bool - - @param ea: ea_t - - disable_bpt(bptloc) -> bool - - @param bptloc: bpt_location_t const & +ida_dbg.disable_bpt(*args) -> bool -ida_dbg.disable_func_trace (function) - disable_func_trace() -> bool +ida_dbg.disable_func_trace() -> bool -ida_dbg.disable_insn_trace (function) - disable_insn_trace() -> bool +ida_dbg.disable_insn_trace() -> bool -ida_dbg.disable_step_trace (function) - disable_step_trace() -> bool +ida_dbg.disable_step_trace() -> bool -ida_dbg.edit_manual_regions (function) - edit_manual_regions() +ida_dbg.edit_manual_regions() -> None -ida_dbg.enable_bblk_trace (function) - enable_bblk_trace(enable=True) -> bool - - @param enable: bool +ida_dbg.enable_bblk_trace(enable: bool = True) -> bool -ida_dbg.enable_bpt (function) - enable_bpt(ea, enable=True) -> bool - - @param ea: ea_t - @param enable: bool - - enable_bpt(bptloc, enable=True) -> bool - - @param bptloc: bpt_location_t const & - @param enable: bool +ida_dbg.enable_bpt(*args) -> bool -ida_dbg.enable_bptgrp (function) - enable_bptgrp(bptgrp_name, enable=True) -> int - Enable (or disable) all bpts in a folder \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param bptgrp_name: (C++: const char *) absolute path to the folder - @param enable: (C++: bool) by default true, enable bpts, false disable bpts - @return: -1 an error occured 0 no changes >0 nubmers of bpts udpated +ida_dbg.enable_bptgrp(bptgrp_name: str, enable: bool = True) -> int + Enable (or disable) all bpts in a folder \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @param bptgrp_name: absolute path to the folder + @param enable: by default true, enable bpts, false disable bpts + @retval -1: an error occured + @retval 0: no changes + @retval >0: nubmers of bpts udpated -ida_dbg.enable_func_trace (function) - enable_func_trace(enable=True) -> bool - - @param enable: bool +ida_dbg.enable_func_trace(enable: bool = True) -> bool -ida_dbg.enable_insn_trace (function) - enable_insn_trace(enable=True) -> bool - - @param enable: bool +ida_dbg.enable_insn_trace(enable: bool = True) -> bool -ida_dbg.enable_manual_regions (function) - enable_manual_regions(enable) - - @param enable: bool +ida_dbg.enable_manual_regions(enable: bool) -> None -ida_dbg.enable_step_trace (function) - enable_step_trace(enable=1) -> bool - - @param enable: int +ida_dbg.enable_step_trace(enable: int = 1) -> bool -ida_dbg.eval_ctx_t (class) - Proxy of C++ eval_ctx_t class. +ida_dbg.eval_ctx_t -ida_dbg.eval_ctx_t.__init__ (method) - __init__(self, _ea) -> eval_ctx_t - - @param _ea: ea_t +ida_dbg.eval_ctx_t.__init__(self, _ea: ida_idaapi.ea_t) -ida_dbg.exist_bpt (function) - exist_bpt(ea) -> bool +ida_dbg.exist_bpt(ea: ida_idaapi.ea_t) -> bool Does a breakpoint exist at the given location? - - @param ea: (C++: ea_t) -ida_dbg.exit_process (function) - exit_process() -> bool - Terminate the debugging of the current process. \sq{Type, Asynchronous function - - available as Request, Notification, dbg_process_exit} +ida_dbg.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 (function) - find_bpt(bptloc, bpt) -> bool - Find a breakpoint by location. \sq{Type, Synchronous function - available as - request, Notification, none (synchronous function)} - - @param bptloc: (C++: const bpt_location_t &) Breakpoint location - @param bpt: (C++: bpt_t *) bpt is filled if the breakpoint was found +ida_dbg.find_bpt(bptloc: "bpt_location_t", bpt: "bpt_t") -> bool + Find a breakpoint by location. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)} + + @param bptloc: Breakpoint location + @param bpt: bpt is filled if the breakpoint was found -ida_dbg.get_bblk_trace_options (function) - 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_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 (function) - get_bpt(ea, bpt) -> bool - Get the characteristics of a breakpoint. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param ea: (C++: ea_t) any address in the breakpoint range - @param bpt: (C++: bpt_t *) if not nullptr, is filled with the characteristics. - @return: false if no breakpoint exists +ida_dbg.get_bpt(ea: ida_idaapi.ea_t, bpt: "bpt_t") -> bool + Get the characteristics of a breakpoint. \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @param ea: any address in the breakpoint range + @param bpt: if not nullptr, is filled with the characteristics. + @returns false if no breakpoint exists -ida_dbg.get_bpt_group (function) - get_bpt_group(bptloc) -> str - Retrieve the absolute path to the folder of the bpt based on the bpt_location - find_bpt is called to retrieve the bpt \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param bptloc: (C++: const bpt_location_t &) bptlocation of the bpt - @return: breakpoint correclty moved to the directory - success +ida_dbg.get_bpt_group(bptloc: "bpt_location_t") -> str + Retrieve the absolute path to the folder of the bpt based on the bpt_location find_bpt is called to retrieve the bpt \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @param bptloc: bptlocation of the bpt + @returns success + @retval true: breakpoint correclty moved to the directory -ida_dbg.get_bpt_qty (function) - get_bpt_qty() -> int - Get number of breakpoints. \sq{Type, Synchronous function, Notification, none - (synchronous function)} +ida_dbg.get_bpt_qty() -> int + Get number of breakpoints. \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.get_bpt_tev_ea (function) - 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)} - - @param n: (C++: int) number of trace event, is in range 0..get_tev_qty()-1. 0 represents - the latest added trace event. - @return: BADADDR if not a read, read/write or execution trace event. - @note: 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. +ida_dbg.get_bpt_tev_ea(n: int) -> ida_idaapi.ea_t + Get the address associated to a read, read/write or execution trace event. \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @param n: number of trace event, is in range 0..get_tev_qty()-1. 0 represents the latest added trace event. + @returns BADADDR if not a read, read/write or execution trace event. -ida_dbg.get_bptloc_string (function) - get_bptloc_string(i) -> char const * - - @param i: int +ida_dbg.get_bptloc_string(i: int) -> str -ida_dbg.get_call_tev_callee (function) - 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: (C++: int) number of trace event, is in range 0..get_tev_qty()-1. 0 represents - the latest added trace event. - @return: BADADDR if not a function call event. +ida_dbg.get_call_tev_callee(n: int) -> ida_idaapi.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_tev_qty()-1. 0 represents the latest added trace event. + @returns BADADDR if not a function call event. -ida_dbg.get_current_source_file (function) - get_current_source_file() -> str +ida_dbg.get_current_source_file() -> str -ida_dbg.get_current_source_line (function) - get_current_source_line() -> int +ida_dbg.get_current_source_line() -> int -ida_dbg.get_current_thread (function) - get_current_thread() -> thid_t - Get current thread ID. \sq{Type, Synchronous function, Notification, none - (synchronous function)} +ida_dbg.get_current_thread() -> "thid_t" + Get current thread ID. \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.get_dbg_byte (function) - get_dbg_byte(ea) -> bool - Get one byte of the debugged process memory. - - @param ea: (C++: ea_t) linear address - @return: true success - false address inaccessible or debugger not running +ida_dbg.get_dbg_byte(ea: ida_idaapi.ea_t) -> "uint32 *" + Get one byte of the debugged process memory. + + @param ea: linear address + @returns success + @retval true: success + @retval false: address inaccessible or debugger not running -ida_dbg.get_dbg_memory_info (function) - get_dbg_memory_info(ranges) -> int - - @param ranges: meminfo_vec_t * +ida_dbg.get_dbg_memory_info(ranges: "meminfo_vec_t") -> int -ida_dbg.get_dbg_reg_info (function) - get_dbg_reg_info(regname, ri) -> bool - Get register information \sq{Type, Synchronous function, Notification, none - (synchronous function)} - - @param regname: (C++: const char *) char const * - @param ri: (C++: register_info_t *) +ida_dbg.get_dbg_reg_info(regname: str, ri: "register_info_t") -> bool + Get register information \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.get_debug_event (function) - get_debug_event() -> debug_event_t +ida_dbg.get_debug_event() -> "debug_event_t const *" Get the current debugger event. -ida_dbg.get_debugger_event_cond (function) - get_debugger_event_cond() -> char const * +ida_dbg.get_debugger_event_cond() -> str -ida_dbg.get_first_module (function) - get_first_module(modinfo) -> bool - - @param modinfo: modinfo_t * +ida_dbg.get_first_module(modinfo: "modinfo_t") -> bool -ida_dbg.get_func_trace_options (function) - 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_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 (function) - get_global_var(prov, ea, name, out) -> bool - - @param prov: srcinfo_provider_t * - @param ea: ea_t - @param name: char const * - @param out: source_item_ptr * +ida_dbg.get_global_var(prov: "srcinfo_provider_t *", ea: ida_idaapi.ea_t, name: str, out: "source_item_ptr *") -> bool -ida_dbg.get_grp_bpts (function) - get_grp_bpts(bpts, grp_name) -> ssize_t - Retrieve a copy the bpts stored in a folder \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param bpts: (C++: bpt_vec_t *) : pointer to a vector where the copy of bpts are stored - @param grp_name: (C++: const char *) absolute path to the folder - @return: number of bpts present in the vector +ida_dbg.get_grp_bpts(bpts: "bpt_vec_t", grp_name: str) -> "ssize_t" + Retrieve a copy the bpts stored in a folder \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @param bpts: : pointer to a vector where the copy of bpts are stored + @param grp_name: absolute path to the folder + @returns number of bpts present in the vector -ida_dbg.get_insn_tev_reg_mem (function) - 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: (C++: int) number of trace event, is in range 0..get_tev_qty()-1. 0 represents - the latest added trace event. - @param memmap: (C++: memreg_infos_t *) result - @return: false if not an instruction event or no memory is available +ida_dbg.get_insn_tev_reg_mem(n: int, memmap: "memreg_infos_t") -> 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_tev_qty()-1. 0 represents the latest added trace event. + @param memmap: result + @returns false if not an instruction event or no memory is available -ida_dbg.get_insn_tev_reg_result (function) - get_insn_tev_reg_result(n, regname, regval) -> bool - - @param n: int - @param regname: char const * - @param regval: regval_t * +ida_dbg.get_insn_tev_reg_result(n: int, regname: str, regval: "regval_t") -> 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_tev_qty()-1. 0 represents the latest added trace event. + @param regname: name of desired register + @param regval: result + @returns false if not an instruction trace event or register wasn't modified. -ida_dbg.get_insn_tev_reg_val (function) - get_insn_tev_reg_val(n, regname, regval) -> bool - - @param n: int - @param regname: char const * - @param regval: regval_t * +ida_dbg.get_insn_tev_reg_val(n: int, regname: str, regval: "regval_t") -> bool + Read a 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_tev_qty()-1. 0 represents the latest added trace event. + @param regname: name of desired register + @param regval: result + @returns false if not an instruction event. -ida_dbg.get_insn_trace_options (function) - 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_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 (function) - get_ip_val() -> bool - Get value of the IP (program counter) register for the current thread. Requires - a suspended debugger. +ida_dbg.get_ip_val() -> "uint64 *" + Get value of the IP (program counter) register for the current thread. Requires a suspended debugger. + -ida_dbg.get_local_var (function) - get_local_var(prov, ea, name, out) -> bool - - @param prov: srcinfo_provider_t * - @param ea: ea_t - @param name: char const * - @param out: source_item_ptr * +ida_dbg.get_local_var(prov: "srcinfo_provider_t *", ea: ida_idaapi.ea_t, name: str, out: "source_item_ptr *") -> bool -ida_dbg.get_local_vars (function) - get_local_vars(prov, ea, out) -> bool - - @param prov: srcinfo_provider_t * - @param ea: ea_t - @param out: source_items_t * +ida_dbg.get_local_vars(prov: "srcinfo_provider_t *", ea: ida_idaapi.ea_t, out: "source_items_t *") -> bool -ida_dbg.get_manual_regions (function) - get_manual_regions(ranges) +ida_dbg.get_manual_regions(*args) Returns the manual memory regions - @param ranges: meminfo_vec_t * + This function has the following signatures: - @return: list(start_ea, end_ea, name, sclass, sbase, bitness, perm) - get_manual_regions() -> [(int, int, str, str, int, int, int), ...] or None + 1. get_manual_regions() -> List[Tuple(ida_idaapi.ea_t, ida_idaapi.ea_t, str, str, ida_idaapi.ea_t, int, int)] + Where each tuple holds (start_ea, end_ea, name, sclass, sbase, bitness, perm) + 2. get_manual_regions(storage: meminfo_vec_t) -> None -ida_dbg.get_module_info (function) - get_module_info(ea, modinfo) -> bool - - @param ea: ea_t - @param modinfo: modinfo_t * +ida_dbg.get_module_info(ea: ida_idaapi.ea_t, modinfo: "modinfo_t") -> bool -ida_dbg.get_next_module (function) - get_next_module(modinfo) -> bool - - @param modinfo: modinfo_t * +ida_dbg.get_next_module(modinfo: "modinfo_t") -> bool -ida_dbg.get_process_options (function) - get_process_options() - Get process options. Any of the arguments may be nullptr +ida_dbg.get_process_options() -> "qstring *, qstring *, qstring *, qstring *, qstring *, int *" + Get process options. Any of the arguments may be nullptr + -ida_dbg.get_process_state (function) - 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_process_options2() -> "qstring *, qstring *, launch_env_t *, qstring *, qstring *, qstring *, int *" -ida_dbg.get_processes (function) - 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 *) array with information about each running process - @return: number of processes or -1 on error +ida_dbg.get_process_state() -> int + Return the state of the currently debugged process. \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @returns one of Debugged process states -ida_dbg.get_reg_val (function) - get_reg_val(regname, regval) -> bool - Get register value as an unsigned 64-bit int. - - @param regname: (C++: const char *) char const * - @param regval: regval_t * - - get_reg_val(regname, ival) -> bool - - @param regname: char const * - @param ival: uint64 * - - get_reg_val(regname) -> bool, float, int - - @param regname: char const * +ida_dbg.get_processes(proclist: "procinfo_vec_t") -> "ssize_t" + Take a snapshot of running processes and return their description. \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @param proclist: array with information about each running process + @returns number of processes or -1 on error -ida_dbg.get_reg_vals (function) - get_reg_vals(tid, clsmask=-1) -> regvals_t +ida_dbg.get_reg_val(*args) + Get a register value. + + This function has the following signatures: + + 1. get_reg_val(name: str) -> Union[int, float, bytes] + 2. get_reg_val(name: str, regval: regval_t) -> bool + + The first (and most user-friendly) form will return + a value whose type is related to the register type. + I.e., either an integer, a float or, in the case of large + vector registers, a bytes sequence. + + @param name the register name + @return the register value (1st form) + +ida_dbg.get_reg_vals(tid: int, clsmask: int = -1) -> "ida_idd.regvals_t" Fetch live registers values for the thread - @param tid: The ID of the thread to read registers for - @param clsmask: An OR'ed mask of register classes to + @param tid The ID of the thread to read registers for + @param clsmask An OR'ed mask of register classes to read values for (can be used to speed up the retrieval process) - @return: a regvals_t instance (empty if an error occurs) + @return: a list of register values (empty if an error occurs) -ida_dbg.get_ret_tev_return (function) - 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: (C++: int) number of trace event, is in range 0..get_tev_qty()-1. 0 represents - the latest added trace event. - @return: BADADDR if not a function return event. +ida_dbg.get_ret_tev_return(n: int) -> ida_idaapi.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_tev_qty()-1. 0 represents the latest added trace event. + @returns BADADDR if not a function return event. -ida_dbg.get_running_notification (function) - 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_notification() -> "dbg_notification_t" + Get the notification associated (if any) with the current running request. \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @returns dbg_null if no running request -ida_dbg.get_running_request (function) - 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_running_request() -> "ui_notification_t" + Get the current running request. \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @returns ui_null if no running request -ida_dbg.get_sp_val (function) - get_sp_val() -> bool - Get value of the SP register for the current thread. Requires a suspended - debugger. +ida_dbg.get_sp_val() -> "uint64 *" + Get value of the SP register for the current thread. Requires a suspended debugger. + -ida_dbg.get_srcinfo_provider (function) - get_srcinfo_provider(name) -> srcinfo_provider_t * - - @param name: char const * +ida_dbg.get_srcinfo_provider(name: str) -> "srcinfo_provider_t *" -ida_dbg.get_step_trace_options (function) - 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_step_trace_options() -> int + Get current step tracing options. \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @returns Step trace options -ida_dbg.get_tev_ea (function) - get_tev_ea(n) -> ea_t - - @param n: int +ida_dbg.get_tev_ea(n: int) -> ida_idaapi.ea_t -ida_dbg.get_tev_event (function) - 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: (C++: int) number of trace event, is in range 0..get_tev_qty()-1. 0 represents - the latest added trace event. - @param d: (C++: debug_event_t *) result - @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_event(n: int, d: "debug_event_t") -> 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_tev_qty()-1. 0 represents the latest added trace event. + @param d: result + @returns 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 (function) - get_tev_info(n, tev_info) -> bool - Get main information about a trace event. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param n: (C++: int) number of trace event, is in range 0..get_tev_qty()-1. 0 represents - the latest added trace event. - @param tev_info: (C++: tev_info_t *) result - @return: success +ida_dbg.get_tev_info(n: int, tev_info: "tev_info_t") -> 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_tev_qty()-1. 0 represents the latest added trace event. + @param tev_info: result + @returns success -ida_dbg.get_tev_memory_info (function) - 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: (C++: int) number of trace event, is in range 0..get_tev_qty()-1. 0 represents - the latest added trace event. - @param mi: (C++: meminfo_vec_t *) result - @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_memory_info(n: int, mi: "meminfo_vec_t") -> 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_tev_qty()-1. 0 represents the latest added trace event. + @param mi: result + @returns 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 (function) - 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_qty() -> int + Get number of trace events available in trace buffer. \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.get_tev_reg_mem (function) +ida_dbg.get_tev_reg_mem(tev, idx) -ida_dbg.get_tev_reg_mem_ea (function) +ida_dbg.get_tev_reg_mem_ea(tev, idx) -ida_dbg.get_tev_reg_mem_qty (function) +ida_dbg.get_tev_reg_mem_qty(tev) -ida_dbg.get_tev_reg_val (function) +ida_dbg.get_tev_reg_val(tev, reg) -ida_dbg.get_tev_tid (function) - get_tev_tid(n) -> int - - @param n: int +ida_dbg.get_tev_tid(n: int) -> int -ida_dbg.get_tev_type (function) - get_tev_type(n) -> int - - @param n: int +ida_dbg.get_tev_type(n: int) -> int -ida_dbg.get_thread_qty (function) - get_thread_qty() -> int - Get number of threads. \sq{Type, Synchronous function, Notification, none - (synchronous function)} +ida_dbg.get_thread_qty() -> int + Get number of threads. \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.get_trace_base_address (function) - 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_base_address() -> ida_idaapi.ea_t + Get the base address of the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @returns the base address of the currently loaded trace -ida_dbg.get_trace_dynamic_register_set (function) - get_trace_dynamic_register_set(idaregs) +ida_dbg.get_trace_dynamic_register_set(idaregs: "dynamic_register_set_t *") -> None Get dynamic register set of current trace. - - @param idaregs: (C++: dynamic_register_set_t *) -ida_dbg.get_trace_file_desc (function) - get_trace_file_desc(filename) -> str +ida_dbg.get_trace_file_desc(filename: str) -> str Get the file header of the specified trace file. - - @param filename: (C++: const char *) char const * -ida_dbg.get_trace_platform (function) - get_trace_platform() -> char const * +ida_dbg.get_trace_platform() -> str Get platform name of current trace. -ida_dbg.getn_bpt (function) - getn_bpt(n, bpt) -> bool - Get the characteristics of a breakpoint. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param n: (C++: int) number of breakpoint, is in range 0..get_bpt_qty()-1 - @param bpt: (C++: bpt_t *) filled with the characteristics. - @return: false if no breakpoint exists +ida_dbg.getn_bpt(n: int, bpt: "bpt_t") -> 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 + @param bpt: filled with the characteristics. + @returns false if no breakpoint exists -ida_dbg.getn_thread (function) - getn_thread(n) -> thid_t - Get the ID of a thread. \sq{Type, Synchronous function, Notification, none - (synchronous function)} - - @param n: (C++: int) number of thread, is in range 0..get_thread_qty()-1 - @return: NO_THREAD if the thread doesn't exist. +ida_dbg.getn_thread(n: int) -> "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 + @returns NO_THREAD if the thread doesn't exist. -ida_dbg.getn_thread_name (function) - getn_thread_name(n) -> char const * - Get the NAME of a thread \sq{Type, Synchronous function, Notification, none - (synchronous function)} - - @param n: (C++: int) number of thread, is in range 0..get_thread_qty()-1 or -1 for the - current thread - @return: thread name or nullptr if the thread doesn't exist. +ida_dbg.getn_thread_name(n: int) -> str + 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 + @returns thread name or nullptr if the thread doesn't exist. -ida_dbg.graph_trace (function) - graph_trace() -> bool +ida_dbg.graph_trace() -> bool Show the trace callgraph. -ida_dbg.handle_debug_event (function) - handle_debug_event(ev, rqflags) -> int - - @param ev: debug_event_t const * - @param rqflags: int +ida_dbg.handle_debug_event(ev: "debug_event_t", rqflags: int) -> int -ida_dbg.hide_all_bpts (function) - hide_all_bpts() -> int +ida_dbg.hide_all_bpts() -> int -ida_dbg.internal_get_sreg_base (function) - internal_get_sreg_base(tid, sreg_value) -> ea_t +ida_dbg.internal_get_sreg_base(tid: int, sreg_value: int) Get the sreg base, for the given thread. - @param tid: thid_t - @param sreg_value: int + @param tid: the thread ID + @param sreg_value: the sreg value @return: The sreg base, or BADADDR on failure. -ida_dbg.internal_ioctl (function) - internal_ioctl(fn, buf, poutbuf, poutsize) -> int - - @param fn: int - @param buf: void const * - @param poutbuf: void ** - @param poutsize: ssize_t * +ida_dbg.internal_ioctl(fn: int, buf: "void const *", poutbuf: "void **", poutsize: "ssize_t *") -> int -ida_dbg.invalidate_dbg_state (function) - invalidate_dbg_state(dbginv) -> int - Invalidate cached debugger information. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param dbginv: (C++: int) Debugged process invalidation options - @return: current debugger state (one of Debugged process states) +ida_dbg.invalidate_dbg_state(dbginv: int) -> int + Invalidate cached debugger information. \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @param dbginv: Debugged process invalidation options + @returns current debugger state (one of Debugged process states) -ida_dbg.invalidate_dbgmem_config (function) - 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_config() -> None + 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 (function) - 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.invalidate_dbgmem_contents(ea: ida_idaapi.ea_t, size: "asize_t") -> None + 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 + -ida_dbg.is_bblk_trace_enabled (function) - is_bblk_trace_enabled() -> bool +ida_dbg.is_bblk_trace_enabled() -> bool -ida_dbg.is_debugger_busy (function) - 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_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 (function) - is_debugger_memory(ea) -> bool +ida_dbg.is_debugger_memory(ea: ida_idaapi.ea_t) -> bool Is the address mapped to debugger memory? - - @param ea: (C++: ea_t) -ida_dbg.is_debugger_on (function) - is_debugger_on() -> bool +ida_dbg.is_debugger_on() -> bool Is the debugger currently running? -ida_dbg.is_func_trace_enabled (function) - is_func_trace_enabled() -> bool - Get current state of functions tracing. \sq{Type, Synchronous function, - Notification, none (synchronous function)} +ida_dbg.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 (function) - is_insn_trace_enabled() -> bool - Get current state of instruction tracing. \sq{Type, Synchronous function, - Notification, none (synchronous function)} +ida_dbg.is_insn_trace_enabled() -> bool + Get current state of instruction tracing. \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.is_reg_custom (function) - 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 *) char const * +ida_dbg.is_reg_custom(regname: str) -> bool + Does a register contain a value of a custom data type? \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.is_reg_float (function) - 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 *) char const * +ida_dbg.is_reg_float(regname: str) -> bool + Does a register contain a floating point value? \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.is_reg_integer (function) - 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 *) char const * +ida_dbg.is_reg_integer(regname: str) -> bool + Does a register contain an integer value? \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.is_request_running (function) - is_request_running() -> bool +ida_dbg.is_request_running() -> bool Is a request currently running? -ida_dbg.is_step_trace_enabled (function) - is_step_trace_enabled() -> bool - Get current state of step tracing. \sq{Type, Synchronous function, Notification, - none (synchronous function)} +ida_dbg.is_step_trace_enabled() -> bool + Get current state of step tracing. \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.is_valid_dstate (function) - is_valid_dstate(state) -> bool - - @param state: int +ida_dbg.is_valid_dstate(state: int) -> bool -ida_dbg.is_valid_trace_file (function) - is_valid_trace_file(filename) -> bool +ida_dbg.is_valid_trace_file(filename: str) -> bool Is the specified file a valid trace file for the current database? - - @param filename: (C++: const char *) char const * -ida_dbg.list_bptgrps (function) - list_bptgrps(bptgrps) -> size_t - Retrieve the list of absolute path of all folders of bpt dirtree \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param bptgrps: (C++: qstrvec_t *) list of absolute path in the bpt dirtree - @return: number of folders returned - list_bptgrps() -> [str, ...] +ida_dbg.list_bptgrps() -> List[str] + Retrieve the list of absolute path of all folders of bpt dirtree. + Synchronous function, Notification, none (synchronous function) -ida_dbg.load_debugger (function) - load_debugger(dbgname, use_remote) -> bool - - @param dbgname: char const * - @param use_remote: bool +ida_dbg.load_debugger(dbgname: str, use_remote: bool) -> bool -ida_dbg.load_trace_file (function) - load_trace_file(filename) -> str - Load a recorded trace file in the 'Tracing' 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 *) char const * +ida_dbg.load_trace_file(filename: str) -> str + Load a recorded trace file in the 'Tracing' 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' + -ida_dbg.memreg_info_t (class) - Proxy of C++ memreg_info_t class. +ida_dbg.memreg_info_t -ida_dbg.memreg_info_t.__init__ (method) - __init__(self) -> memreg_info_t +ida_dbg.memreg_info_t.__init__(self) -ida_dbg.memreg_info_t.get_bytes (method) - get_bytes(self) -> PyObject * +ida_dbg.memreg_info_t.get_bytes(self) -> "PyObject *" -ida_dbg.memreg_infos_t (class) - Proxy of C++ qvector< memreg_info_t > class. +ida_dbg.memreg_infos_t -ida_dbg.memreg_infos_t.__getitem__ (method) - __getitem__(self, i) -> memreg_info_t - - @param i: size_t +ida_dbg.memreg_infos_t.__getitem__(self, i: "size_t") -> "memreg_info_t const &" -ida_dbg.memreg_infos_t.__init__ (method) - __init__(self) -> memreg_infos_t - __init__(self, x) -> memreg_infos_t - - @param x: qvector< memreg_info_t > const & +ida_dbg.memreg_infos_t.__init__(self, *args) -ida_dbg.memreg_infos_t.__len__ (method) - __len__(self) -> size_t +ida_dbg.memreg_infos_t.__len__(self) -> "size_t" -ida_dbg.memreg_infos_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: memreg_info_t const & +ida_dbg.memreg_infos_t.__setitem__(self, i: "size_t", v: "memreg_info_t") -> None -ida_dbg.memreg_infos_t.at (method) - at(self, _idx) -> memreg_info_t - - @param _idx: size_t +ida_dbg.memreg_infos_t.append(self, x: "memreg_info_t") -> None -ida_dbg.memreg_infos_t.begin (method) - begin(self) -> memreg_info_t +ida_dbg.memreg_infos_t.at(self, _idx: "size_t") -> "memreg_info_t const &" -ida_dbg.memreg_infos_t.capacity (method) - capacity(self) -> size_t +ida_dbg.memreg_infos_t.begin(self, *args) -> "qvector< memreg_info_t >::const_iterator" -ida_dbg.memreg_infos_t.clear (method) - clear(self) +ida_dbg.memreg_infos_t.capacity(self) -> "size_t" -ida_dbg.memreg_infos_t.empty (method) - empty(self) -> bool +ida_dbg.memreg_infos_t.clear(self) -> None -ida_dbg.memreg_infos_t.end (method) - end(self) -> memreg_info_t +ida_dbg.memreg_infos_t.empty(self) -> bool -ida_dbg.memreg_infos_t.erase (method) - erase(self, it) -> memreg_info_t - - @param it: qvector< memreg_info_t >::iterator - - erase(self, first, last) -> memreg_info_t - - @param first: qvector< memreg_info_t >::iterator - @param last: qvector< memreg_info_t >::iterator +ida_dbg.memreg_infos_t.end(self, *args) -> "qvector< memreg_info_t >::const_iterator" -ida_dbg.memreg_infos_t.extract (method) - extract(self) -> memreg_info_t +ida_dbg.memreg_infos_t.erase(self, *args) -> "qvector< memreg_info_t >::iterator" -ida_dbg.memreg_infos_t.grow (method) - grow(self, x=memreg_info_t()) - - @param x: memreg_info_t const & +ida_dbg.memreg_infos_t.extend(self, x: "memreg_infos_t") -> None -ida_dbg.memreg_infos_t.inject (method) - inject(self, s, len) - - @param s: memreg_info_t * - @param len: size_t +ida_dbg.memreg_infos_t.extract(self) -> "memreg_info_t *" -ida_dbg.memreg_infos_t.insert (method) - insert(self, it, x) -> memreg_info_t - - @param it: qvector< memreg_info_t >::iterator - @param x: memreg_info_t const & +ida_dbg.memreg_infos_t.grow(self, *args) -> None -ida_dbg.memreg_infos_t.pop_back (method) - pop_back(self) +ida_dbg.memreg_infos_t.inject(self, s: "memreg_info_t", len: "size_t") -> None -ida_dbg.memreg_infos_t.push_back (method) - push_back(self, x) - - @param x: memreg_info_t const & - - push_back(self) -> memreg_info_t +ida_dbg.memreg_infos_t.insert(self, it: "memreg_info_t", x: "memreg_info_t") -> "qvector< memreg_info_t >::iterator" -ida_dbg.memreg_infos_t.qclear (method) - qclear(self) +ida_dbg.memreg_infos_t.pop_back(self) -> None -ida_dbg.memreg_infos_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_dbg.memreg_infos_t.push_back(self, *args) -> "memreg_info_t &" -ida_dbg.memreg_infos_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: memreg_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_dbg.memreg_infos_t.qclear(self) -> None -ida_dbg.memreg_infos_t.size (method) - size(self) -> size_t +ida_dbg.memreg_infos_t.reserve(self, cnt: "size_t") -> None -ida_dbg.memreg_infos_t.swap (method) - swap(self, r) - - @param r: qvector< memreg_info_t > & +ida_dbg.memreg_infos_t.resize(self, *args) -> None -ida_dbg.memreg_infos_t.truncate (method) - truncate(self) +ida_dbg.memreg_infos_t.size(self) -> "size_t" -ida_dbg.put_dbg_byte (function) - put_dbg_byte(ea, x) -> bool - Change one byte of the debugged process memory. - - @param ea: (C++: ea_t) linear address - @param x: (C++: uint32) byte value - @return: true if the process memory has been modified +ida_dbg.memreg_infos_t.swap(self, r: "memreg_infos_t") -> None -ida_dbg.read_dbg_memory (function) - read_dbg_memory(ea, buffer, size) -> ssize_t - - @param ea: ea_t - @param buffer: void * - @param size: size_t +ida_dbg.memreg_infos_t.truncate(self) -> None -ida_dbg.refresh_debugger_memory (function) - refresh_debugger_memory() -> PyObject * +ida_dbg.put_dbg_byte(ea: ida_idaapi.ea_t, x: int) -> bool + Change one byte of the debugged process memory. + + @param ea: linear address + @param x: byte value + @returns true if the process memory has been modified + +ida_dbg.read_dbg_memory(ea: ida_idaapi.ea_t, buffer: "void *", size: "size_t") -> "ssize_t" + +ida_dbg.refresh_debugger_memory() Refreshes the debugger memory @return: Nothing -ida_dbg.rename_bptgrp (function) - rename_bptgrp(old_name, new_name) -> bool - Rename a folder of bpt dirtree \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - @param old_name: (C++: const char *) absolute path to the folder to be renamed - @param new_name: (C++: const char *) absolute path of the new folder name - @return: success +ida_dbg.rename_bptgrp(old_name: str, new_name: str) -> bool + Rename a folder of bpt dirtree \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @param old_name: absolute path to the folder to be renamed + @param new_name: absolute path of the new folder name + @returns success -ida_dbg.request_add_bpt (function) - request_add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool +ida_dbg.request_add_bpt(*args) -> bool + This function has the following signatures: + + 0. request_add_bpt(ea: ida_idaapi.ea_t, size: asize_t=0, type: bpttype_t=BPT_DEFAULT) -> bool + 1. request_add_bpt(bpt: const bpt_t &) -> bool + + # 0: request_add_bpt(ea: ida_idaapi.ea_t, size: asize_t=0, type: bpttype_t=BPT_DEFAULT) -> bool + + Post an add_bpt(ea_t, asize_t, bpttype_t) request. + + + # 1: request_add_bpt(bpt: const bpt_t &) -> bool + Post an add_bpt(const bpt_t &) request. - - @param ea: ea_t - @param size: asize_t - @param type: bpttype_t - - request_add_bpt(bpt) -> bool - - @param bpt: bpt_t const & -ida_dbg.request_attach_process (function) - request_attach_process(pid, event_id) -> int +ida_dbg.request_attach_process(pid: "pid_t", event_id: int) -> int Post an attach_process() request. - - @param pid: (C++: pid_t) - @param event_id: (C++: int) -ida_dbg.request_clear_trace (function) - request_clear_trace() +ida_dbg.request_clear_trace() -> None Post a clear_trace() request. -ida_dbg.request_continue_process (function) - request_continue_process() -> bool - Post a continue_process() request. - @note: This requires an explicit call to run_requests() +ida_dbg.request_continue_backwards() -> bool + Post a continue_backwards() request. + -ida_dbg.request_del_bpt (function) - request_del_bpt(ea) -> bool +ida_dbg.request_continue_process() -> bool + Post a continue_process() request. + + +ida_dbg.request_del_bpt(*args) -> bool + This function has the following signatures: + + 0. request_del_bpt(ea: ida_idaapi.ea_t) -> bool + 1. request_del_bpt(bptloc: const bpt_location_t &) -> bool + + # 0: request_del_bpt(ea: ida_idaapi.ea_t) -> bool + + Post a del_bpt(ea_t) request. + + + # 1: request_del_bpt(bptloc: const bpt_location_t &) -> bool + Post a del_bpt(const bpt_location_t &) request. - - @param ea: ea_t - - request_del_bpt(bptloc) -> bool - - @param bptloc: bpt_location_t const & -ida_dbg.request_detach_process (function) - request_detach_process() -> bool +ida_dbg.request_detach_process() -> bool Post a detach_process() request. -ida_dbg.request_disable_bblk_trace (function) - request_disable_bblk_trace() -> bool +ida_dbg.request_disable_bblk_trace() -> bool -ida_dbg.request_disable_bpt (function) - request_disable_bpt(ea) -> bool - - @param ea: ea_t - - request_disable_bpt(bptloc) -> bool - - @param bptloc: bpt_location_t const & +ida_dbg.request_disable_bpt(*args) -> bool -ida_dbg.request_disable_func_trace (function) - request_disable_func_trace() -> bool +ida_dbg.request_disable_func_trace() -> bool -ida_dbg.request_disable_insn_trace (function) - request_disable_insn_trace() -> bool +ida_dbg.request_disable_insn_trace() -> bool -ida_dbg.request_disable_step_trace (function) - request_disable_step_trace() -> bool +ida_dbg.request_disable_step_trace() -> bool -ida_dbg.request_enable_bblk_trace (function) - request_enable_bblk_trace(enable=True) -> bool - - @param enable: bool +ida_dbg.request_enable_bblk_trace(enable: bool = True) -> bool -ida_dbg.request_enable_bpt (function) - request_enable_bpt(ea, enable=True) -> bool - - @param ea: ea_t - @param enable: bool - - request_enable_bpt(bptloc, enable=True) -> bool - - @param bptloc: bpt_location_t const & - @param enable: bool +ida_dbg.request_enable_bpt(*args) -> bool -ida_dbg.request_enable_func_trace (function) - request_enable_func_trace(enable=True) -> bool - - @param enable: bool +ida_dbg.request_enable_func_trace(enable: bool = True) -> bool -ida_dbg.request_enable_insn_trace (function) - request_enable_insn_trace(enable=True) -> bool - - @param enable: bool +ida_dbg.request_enable_insn_trace(enable: bool = True) -> bool -ida_dbg.request_enable_step_trace (function) - request_enable_step_trace(enable=1) -> bool - - @param enable: int +ida_dbg.request_enable_step_trace(enable: int = 1) -> bool -ida_dbg.request_exit_process (function) - request_exit_process() -> bool +ida_dbg.request_exit_process() -> bool Post an exit_process() request. -ida_dbg.request_resume_thread (function) - request_resume_thread(tid) -> int +ida_dbg.request_resume_thread(tid: "thid_t") -> int Post a resume_thread() request. - - @param tid: (C++: thid_t) -ida_dbg.request_run_to (function) - request_run_to(ea, pid=pid_t(-1), tid=0) -> bool +ida_dbg.request_run_to(*args) -> bool Post a run_to() request. - - @param ea: (C++: ea_t) - @param pid: (C++: pid_t) -ida_dbg.request_select_thread (function) - request_select_thread(tid) -> bool +ida_dbg.request_run_to_backwards(*args) -> bool + Post a run_to_backwards() request. + +ida_dbg.request_select_thread(tid: "thid_t") -> bool Post a select_thread() request. - - @param tid: (C++: thid_t) -ida_dbg.request_set_bblk_trace_options (function) - request_set_bblk_trace_options(options) +ida_dbg.request_set_bblk_trace_options(options: int) -> None Post a set_bblk_trace_options() request. - - @param options: (C++: int) -ida_dbg.request_set_func_trace_options (function) - request_set_func_trace_options(options) +ida_dbg.request_set_func_trace_options(options: int) -> None Post a set_func_trace_options() request. - - @param options: (C++: int) -ida_dbg.request_set_insn_trace_options (function) - request_set_insn_trace_options(options) +ida_dbg.request_set_insn_trace_options(options: int) -> None Post a set_insn_trace_options() request. - - @param options: (C++: int) -ida_dbg.request_set_reg_val (function) - request_set_reg_val(regname, o) -> PyObject * +ida_dbg.request_set_reg_val(regname: str, o: "PyObject *") -> "PyObject *" Post a set_reg_val() request. - - @param regname: (C++: const char *) char const * - @param o: PyObject * -ida_dbg.request_set_resume_mode (function) - request_set_resume_mode(tid, mode) -> bool +ida_dbg.request_set_resume_mode(tid: "thid_t", mode: "resume_mode_t") -> bool Post a set_resume_mode() request. - - @param tid: (C++: thid_t) - @param mode: (C++: resume_mode_t) enum resume_mode_t -ida_dbg.request_set_step_trace_options (function) - request_set_step_trace_options(options) +ida_dbg.request_set_step_trace_options(options: int) -> None Post a set_step_trace_options() request. - - @param options: (C++: int) -ida_dbg.request_start_process (function) - request_start_process(path=None, args=None, sdir=None) -> int +ida_dbg.request_start_process(path: str = None, args: str = None, sdir: str = None) -> int Post a start_process() request. - - @param path: (C++: const char *) char const * - @param args: (C++: const char *) char const * - @param sdir: (C++: const char *) char const * -ida_dbg.request_step_into (function) - request_step_into() -> bool +ida_dbg.request_step_into() -> bool Post a step_into() request. -ida_dbg.request_step_over (function) - request_step_over() -> bool +ida_dbg.request_step_into_backwards() -> bool + Post a step_into_backwards() request. + +ida_dbg.request_step_over() -> bool Post a step_over() request. -ida_dbg.request_step_until_ret (function) - request_step_until_ret() -> bool +ida_dbg.request_step_over_backwards() -> bool + Post a step_over_backwards() request. + +ida_dbg.request_step_until_ret() -> bool Post a step_until_ret() request. -ida_dbg.request_suspend_process (function) - request_suspend_process() -> bool +ida_dbg.request_suspend_process() -> bool Post a suspend_process() request. -ida_dbg.request_suspend_thread (function) - request_suspend_thread(tid) -> int +ida_dbg.request_suspend_thread(tid: "thid_t") -> int Post a suspend_thread() request. - - @param tid: (C++: thid_t) -ida_dbg.resume_thread (function) - resume_thread(tid) -> int - Resume thread. \sq{Type, Synchronous function - available as request, - Notification, none (synchronous function)} - - @param tid: (C++: thid_t) thread id +ida_dbg.resume_thread(tid: "thid_t") -> int + Resume thread. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)} + + @param tid: thread id @retval -1: network error @retval 0: failed @retval 1: ok -ida_dbg.retrieve_exceptions (function) - 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.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 (function) - run_requests() -> bool - Execute requests until all requests are processed or an asynchronous function is - called. \sq{Type, Synchronous function, Notification, none (synchronous - function)} - - @return: false if not all requests could be processed (indicates an asynchronous - function was started) - @note: If called from a notification handler, the execution of requests will be - postponed to the end of the execution of all notification handlers. +ida_dbg.run_requests() -> bool + Execute requests until all requests are processed or an asynchronous function is called. \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @returns false if not all requests could be processed (indicates an asynchronous function was started) -ida_dbg.run_to (function) - 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: (C++: ea_t) target address - @param pid: (C++: pid_t) not used yet. please do not specify this parameter. +ida_dbg.run_to(*args) -> 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 + @param pid: not used yet. please do not specify this parameter. + @param tid: not used yet. please do not specify this parameter. -ida_dbg.save_trace_file (function) - save_trace_file(filename, description) -> bool +ida_dbg.run_to_backwards(*args) -> bool + Execute the process backwards until the given address is reached. Technically, the debugger sets up a temporary breakpoint at the given address, and continues (or starts) the execution of the whole process. \sq{Type, Asynchronous function - available as Request, Notification, dbg_run_to} + + @param ea: target address + @param pid: not used yet. please do not specify this parameter. + @param tid: not used yet. please do not specify this parameter. + +ida_dbg.save_trace_file(filename: str, description: str) -> bool Save the current trace in the specified file. - - @param filename: (C++: const char *) char const * - @param description: (C++: const char *) char const * -ida_dbg.select_thread (function) - 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: (C++: thid_t) ID of the thread to select - @return: false if the thread doesn't exist. +ida_dbg.select_thread(tid: "thid_t") -> 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 + @returns false if the thread doesn't exist. -ida_dbg.send_dbg_command (function) +ida_dbg.send_dbg_command(command) Send a direct command to the debugger backend, and retrieve the result as a string. @@ -20394,673 +13740,384 @@ ida_dbg.send_dbg_command (function) Returns: (True, ) on success, or (False, ) on failure -ida_dbg.set_bblk_trace_options (function) - set_bblk_trace_options(options) +ida_dbg.set_bblk_trace_options(options: int) -> None Modify basic block tracing options (see BT_LOG_INSTS) - - @param options: (C++: int) -ida_dbg.set_bpt_group (function) - set_bpt_group(bpt, grp_name) -> bool - Move a bpt into a folder in the breakpoint dirtree if the folder didn't exists, - it will be created \sq{Type, Synchronous function, Notification, none - (synchronous function)} - - @param bpt: (C++: bpt_t &) bpt that will be moved - @param grp_name: (C++: const char *) absolute path to the breakpoint dirtree folder - @return: success +ida_dbg.set_bpt_group(bpt: "bpt_t", grp_name: str) -> bool + Move a bpt into a folder in the breakpoint dirtree if the folder didn't exists, it will be created \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @param bpt: bpt that will be moved + @param grp_name: absolute path to the breakpoint dirtree folder + @returns success -ida_dbg.set_bptloc_group (function) - set_bptloc_group(bptloc, grp_name) -> bool - Move a bpt into a folder in the breakpoint dirtree based on the bpt_location - find_bpt is called to retrieve the bpt and then set_bpt_group if the folder - didn't exists, it will be created \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - @param bptloc: (C++: const bpt_location_t &) bptlocation of the bpt that will be moved - @param grp_name: (C++: const char *) absolute path to the breakpoint dirtree folder - @return: success +ida_dbg.set_bptloc_group(bptloc: "bpt_location_t", grp_name: str) -> bool + Move a bpt into a folder in the breakpoint dirtree based on the bpt_location find_bpt is called to retrieve the bpt and then set_bpt_group if the folder didn't exists, it will be created \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @param bptloc: bptlocation of the bpt that will be moved + @param grp_name: absolute path to the breakpoint dirtree folder + @returns success -ida_dbg.set_bptloc_string (function) - set_bptloc_string(s) -> int - - @param s: char const * +ida_dbg.set_bptloc_string(s: str) -> int -ida_dbg.set_debugger_event_cond (function) - set_debugger_event_cond(NONNULL_evcond) - - @param NONNULL_evcond: char const * +ida_dbg.set_debugger_event_cond(NONNULL_evcond: str) -> None -ida_dbg.set_debugger_options (function) - 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_debugger_options(options: "uint") -> "uint" + Set debugger options. Replaces debugger options with the specification combination Debugger options + + @returns the old debugger options -ida_dbg.set_func_trace_options (function) - 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_func_trace_options(options: int) -> None + Modify function tracing options. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)} + -ida_dbg.set_highlight_trace_options (function) - set_highlight_trace_options(hilight, color, diff) +ida_dbg.set_highlight_trace_options(hilight: bool, color: "bgcolor_t", diff: "bgcolor_t") -> None Set highlight trace parameters. - - @param hilight: (C++: bool) - @param color: (C++: bgcolor_t) - @param diff: (C++: bgcolor_t) -ida_dbg.set_insn_trace_options (function) - 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_insn_trace_options(options: int) -> None + Modify instruction tracing options. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)} + -ida_dbg.set_manual_regions (function) - set_manual_regions(ranges) - - @param ranges: meminfo_vec_t const * +ida_dbg.set_manual_regions(ranges: "meminfo_vec_t") -> None -ida_dbg.set_process_options (function) - set_process_options(path, args, sdir, host, _pass, port) - Set process options. Any of the arguments may be nullptr, which means 'do not - modify' - - @param path: (C++: const char *) char const * - @param args: (C++: const char *) char const * - @param sdir: (C++: const char *) char const * - @param host: (C++: const char *) char const * - @param pass: (C++: const char *) char const * - @param port: (C++: int) +ida_dbg.set_process_options(*args) -> None + Set process options. Any of the arguments may be nullptr, which means 'do not modify' + -ida_dbg.set_process_state (function) - 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: (C++: int) new process state (one of Debugged process states) if - DSTATE_NOTASK is passed then the state is not changed - @param p_thid: (C++: thid_t *) ptr to new thread id. may be nullptr or pointer to NO_THREAD. the - pointed variable will contain the old thread id upon return - @param dbginv: (C++: int) Debugged process invalidation options - @return: old debugger state (one of Debugged process states) +ida_dbg.set_process_state(newstate: int, p_thid: "thid_t *", dbginv: int) -> 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 + @param p_thid: ptr to new thread id. may be nullptr or pointer to NO_THREAD. the pointed variable will contain the old thread id upon return + @param dbginv: Debugged process invalidation options + @returns old debugger state (one of Debugged process states) -ida_dbg.set_reg_val (function) - set_reg_val(regname, o) -> PyObject +ida_dbg.set_reg_val(*args) -> bool + Set a register value by name - @param regname: char const * - @param o: PyObject * + This function has the following signatures: + 1. set_reg_val(name: str, value: Union[int, float, bytes]) -> bool + 1. set_reg_val(tid: int, regidx: int, value: Union[int, float, bytes]) -> bool - set_reg_val(tid, regidx, o) -> bool, int + Depending on the register type, this will expect + either an integer, a float or, in the case of large + vector registers, a bytes sequence. - @param tid: thid_t - @param regidx: int - @param o: PyObject * + @param name (1st form) the register name + @param tid (2nd form) the thread ID + @param regidx (2nd form) the register index + @param value the register value + @return success -ida_dbg.set_remote_debugger (function) - set_remote_debugger(host, _pass, port=-1) - Set remote debugging options. Should be used before starting the debugger. - - @param host: (C++: const char *) If empty, IDA will use local debugger. If nullptr, the host will - not be set. - @param pass: (C++: const char *) If nullptr, the password will not be set - @param port: (C++: int) If -1, the default port number will be used +ida_dbg.set_remote_debugger(host: str, _pass: str, port: int = -1) -> None + Set remote debugging options. Should be used before starting the debugger. + + @param host: If empty, IDA will use local debugger. If nullptr, the host will not be set. + @param port: If -1, the default port number will be used -ida_dbg.set_resume_mode (function) - 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) enum resume_mode_t +ida_dbg.set_resume_mode(tid: "thid_t", mode: "resume_mode_t") -> bool + How to resume the application. Set resume mode but do not resume process. + -ida_dbg.set_step_trace_options (function) - 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_step_trace_options(options: int) -> None + Modify step tracing options. \sq{Type, Synchronous function - available as request, Notification, none (synchronous function)} + -ida_dbg.set_trace_base_address (function) - 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_base_address(ea: ida_idaapi.ea_t) -> None + Set the base address of the current trace. \sq{Type, Synchronous function, Notification, none (synchronous function)} + -ida_dbg.set_trace_dynamic_register_set (function) - set_trace_dynamic_register_set(idaregs) +ida_dbg.set_trace_dynamic_register_set(idaregs: "dynamic_register_set_t &") -> None Set dynamic register set of current trace. - - @param idaregs: (C++: dynamic_register_set_t &) -ida_dbg.set_trace_file_desc (function) - set_trace_file_desc(filename, description) -> bool +ida_dbg.set_trace_file_desc(filename: str, description: str) -> bool Change the description of the specified trace file. - - @param filename: (C++: const char *) char const * - @param description: (C++: const char *) char const * -ida_dbg.set_trace_platform (function) - set_trace_platform(platform) +ida_dbg.set_trace_platform(platform: str) -> None Set platform name of current trace. - - @param platform: (C++: const char *) char const * -ida_dbg.set_trace_size (function) - set_trace_size(size) -> bool - Specify the new size of the circular buffer. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param size: (C++: int) 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. - @note: If you specify 0, all available memory can be quickly used !!! +ida_dbg.set_trace_size(size: int) -> bool + Specify the new size of the circular buffer. \sq{Type, Synchronous function, Notification, none (synchronous function)} + + @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. -ida_dbg.srcdbg_request_step_into (function) - srcdbg_request_step_into() -> bool +ida_dbg.srcdbg_request_step_into() -> bool -ida_dbg.srcdbg_request_step_over (function) - srcdbg_request_step_over() -> bool +ida_dbg.srcdbg_request_step_over() -> bool -ida_dbg.srcdbg_request_step_until_ret (function) - srcdbg_request_step_until_ret() -> bool +ida_dbg.srcdbg_request_step_until_ret() -> bool -ida_dbg.srcdbg_step_into (function) - srcdbg_step_into() -> bool +ida_dbg.srcdbg_step_into() -> bool -ida_dbg.srcdbg_step_over (function) - srcdbg_step_over() -> bool +ida_dbg.srcdbg_step_over() -> bool -ida_dbg.srcdbg_step_until_ret (function) - srcdbg_step_until_ret() -> bool +ida_dbg.srcdbg_step_until_ret() -> bool -ida_dbg.start_process (function) - 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} - @note: You can also use the run_to() function to easily start the execution of a - process until a given address is reached. - @note: For all parameters, a nullptr value indicates the debugger will take the - value from the defined Process Options. - - @param path: (C++: const char *) path to the executable to start - @param args: (C++: const char *) arguments to pass to process - @param sdir: (C++: const char *) starting directory for the process +ida_dbg.start_process(path: str = None, args: str = None, sdir: str = None) -> int + Start a process in the debugger. \sq{Type, Asynchronous function - available as Request, Notification, dbg_process_start} + + @param path: path to the executable to start + @param args: arguments to pass to process + @param sdir: starting directory for the process @retval -1: impossible to create the process @retval 0: the starting of the process was cancelled by the user @retval 1: the process was properly started -ida_dbg.step_into (function) - 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_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 (function) - 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_into_backwards() -> bool + Execute one instruction backwards in the current thread. Other threads are kept suspended. \sq{Type, Asynchronous function - available as Request, Notification, dbg_step_into} + -ida_dbg.step_until_ret (function) - 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.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.store_exceptions (function) - store_exceptions() -> bool - Update the exception information stored in the debugger module by invoking its - dbg->set_exception_info callback +ida_dbg.step_over_backwards() -> bool + Execute one instruction backwards in the current thread, but without entering into functions. Other threads are kept suspended. \sq{Type, Asynchronous function - available as Request, Notification, dbg_step_over} + -ida_dbg.suspend_process (function) - suspend_process() -> bool +ida_dbg.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() -> bool + Update the exception information stored in the debugger module by invoking its dbg->set_exception_info callback + + +ida_dbg.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) } - @note: 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 (function) - 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: (C++: thid_t) thread id +ida_dbg.suspend_thread(tid: "thid_t") -> 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 @retval -1: network error @retval 0: failed @retval 1: ok -ida_dbg.tev_bpt (variable) +ida_dbg.tev_bpt write, read/write, execution trace -ida_dbg.tev_call (variable) +ida_dbg.tev_call a function call trace -ida_dbg.tev_event (variable) +ida_dbg.tev_event debug event occurred -ida_dbg.tev_info_reg_t (class) - Proxy of C++ tev_info_reg_t class. +ida_dbg.tev_info_reg_t -ida_dbg.tev_info_reg_t.__init__ (method) - __init__(self) -> tev_info_reg_t +ida_dbg.tev_info_reg_t.__init__(self) -ida_dbg.tev_info_t (class) - Proxy of C++ tev_info_t class. +ida_dbg.tev_info_t -ida_dbg.tev_info_t.__init__ (method) - __init__(self) -> tev_info_t +ida_dbg.tev_info_t.__init__(self) -ida_dbg.tev_info_t.ea (variable) +ida_dbg.tev_info_t.ea address where the event occurred -ida_dbg.tev_info_t.tid (variable) +ida_dbg.tev_info_t.tid thread where the event was recorded -ida_dbg.tev_info_t.type (variable) +ida_dbg.tev_info_t.type trace event type -ida_dbg.tev_insn (variable) +ida_dbg.tev_insn an instruction trace -ida_dbg.tev_max (variable) +ida_dbg.tev_max first unused event type -ida_dbg.tev_mem (variable) +ida_dbg.tev_mem memory layout changed -ida_dbg.tev_none (variable) +ida_dbg.tev_none no event -ida_dbg.tev_reg_value_t (class) - Proxy of C++ tev_reg_value_t class. +ida_dbg.tev_reg_value_t -ida_dbg.tev_reg_value_t.__init__ (method) - __init__(self, _reg_idx=-1, _value=uint64(-1)) -> tev_reg_value_t - - @param _reg_idx: int - @param _value: uint64 +ida_dbg.tev_reg_value_t.__init__(self, *args) -ida_dbg.tev_reg_values_t (class) - Proxy of C++ qvector< tev_reg_value_t > class. +ida_dbg.tev_reg_values_t -ida_dbg.tev_reg_values_t.__getitem__ (method) - __getitem__(self, i) -> tev_reg_value_t - - @param i: size_t +ida_dbg.tev_reg_values_t.__getitem__(self, i: "size_t") -> "tev_reg_value_t const &" -ida_dbg.tev_reg_values_t.__init__ (method) - __init__(self) -> tev_reg_values_t - __init__(self, x) -> tev_reg_values_t - - @param x: qvector< tev_reg_value_t > const & +ida_dbg.tev_reg_values_t.__init__(self, *args) -ida_dbg.tev_reg_values_t.__len__ (method) - __len__(self) -> size_t +ida_dbg.tev_reg_values_t.__len__(self) -> "size_t" -ida_dbg.tev_reg_values_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: tev_reg_value_t const & +ida_dbg.tev_reg_values_t.__setitem__(self, i: "size_t", v: "tev_reg_value_t") -> None -ida_dbg.tev_reg_values_t.at (method) - at(self, _idx) -> tev_reg_value_t - - @param _idx: size_t +ida_dbg.tev_reg_values_t.append(self, x: "tev_reg_value_t") -> None -ida_dbg.tev_reg_values_t.begin (method) - begin(self) -> tev_reg_value_t +ida_dbg.tev_reg_values_t.at(self, _idx: "size_t") -> "tev_reg_value_t const &" -ida_dbg.tev_reg_values_t.capacity (method) - capacity(self) -> size_t +ida_dbg.tev_reg_values_t.begin(self, *args) -> "qvector< tev_reg_value_t >::const_iterator" -ida_dbg.tev_reg_values_t.clear (method) - clear(self) +ida_dbg.tev_reg_values_t.capacity(self) -> "size_t" -ida_dbg.tev_reg_values_t.empty (method) - empty(self) -> bool +ida_dbg.tev_reg_values_t.clear(self) -> None -ida_dbg.tev_reg_values_t.end (method) - end(self) -> tev_reg_value_t +ida_dbg.tev_reg_values_t.empty(self) -> bool -ida_dbg.tev_reg_values_t.erase (method) - erase(self, it) -> tev_reg_value_t - - @param it: qvector< tev_reg_value_t >::iterator - - erase(self, first, last) -> tev_reg_value_t - - @param first: qvector< tev_reg_value_t >::iterator - @param last: qvector< tev_reg_value_t >::iterator +ida_dbg.tev_reg_values_t.end(self, *args) -> "qvector< tev_reg_value_t >::const_iterator" -ida_dbg.tev_reg_values_t.extract (method) - extract(self) -> tev_reg_value_t +ida_dbg.tev_reg_values_t.erase(self, *args) -> "qvector< tev_reg_value_t >::iterator" -ida_dbg.tev_reg_values_t.grow (method) - grow(self, x=tev_reg_value_t()) - - @param x: tev_reg_value_t const & +ida_dbg.tev_reg_values_t.extend(self, x: "tev_reg_values_t") -> None -ida_dbg.tev_reg_values_t.inject (method) - inject(self, s, len) - - @param s: tev_reg_value_t * - @param len: size_t +ida_dbg.tev_reg_values_t.extract(self) -> "tev_reg_value_t *" -ida_dbg.tev_reg_values_t.insert (method) - insert(self, it, x) -> tev_reg_value_t - - @param it: qvector< tev_reg_value_t >::iterator - @param x: tev_reg_value_t const & +ida_dbg.tev_reg_values_t.grow(self, *args) -> None -ida_dbg.tev_reg_values_t.pop_back (method) - pop_back(self) +ida_dbg.tev_reg_values_t.inject(self, s: "tev_reg_value_t", len: "size_t") -> None -ida_dbg.tev_reg_values_t.push_back (method) - push_back(self, x) - - @param x: tev_reg_value_t const & - - push_back(self) -> tev_reg_value_t +ida_dbg.tev_reg_values_t.insert(self, it: "tev_reg_value_t", x: "tev_reg_value_t") -> "qvector< tev_reg_value_t >::iterator" -ida_dbg.tev_reg_values_t.qclear (method) - qclear(self) +ida_dbg.tev_reg_values_t.pop_back(self) -> None -ida_dbg.tev_reg_values_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_dbg.tev_reg_values_t.push_back(self, *args) -> "tev_reg_value_t &" -ida_dbg.tev_reg_values_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: tev_reg_value_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_dbg.tev_reg_values_t.qclear(self) -> None -ida_dbg.tev_reg_values_t.size (method) - size(self) -> size_t +ida_dbg.tev_reg_values_t.reserve(self, cnt: "size_t") -> None -ida_dbg.tev_reg_values_t.swap (method) - swap(self, r) - - @param r: qvector< tev_reg_value_t > & +ida_dbg.tev_reg_values_t.resize(self, *args) -> None -ida_dbg.tev_reg_values_t.truncate (method) - truncate(self) +ida_dbg.tev_reg_values_t.size(self) -> "size_t" -ida_dbg.tev_ret (variable) +ida_dbg.tev_reg_values_t.swap(self, r: "tev_reg_values_t") -> None + +ida_dbg.tev_reg_values_t.truncate(self) -> None + +ida_dbg.tev_ret a function return trace -ida_dbg.tevinforeg_vec_t (class) - Proxy of C++ qvector< tev_info_reg_t > class. +ida_dbg.tevinforeg_vec_t -ida_dbg.tevinforeg_vec_t.__getitem__ (method) - __getitem__(self, i) -> tev_info_reg_t - - @param i: size_t +ida_dbg.tevinforeg_vec_t.__getitem__(self, i: "size_t") -> "tev_info_reg_t const &" -ida_dbg.tevinforeg_vec_t.__init__ (method) - __init__(self) -> tevinforeg_vec_t - __init__(self, x) -> tevinforeg_vec_t - - @param x: qvector< tev_info_reg_t > const & +ida_dbg.tevinforeg_vec_t.__init__(self, *args) -ida_dbg.tevinforeg_vec_t.__len__ (method) - __len__(self) -> size_t +ida_dbg.tevinforeg_vec_t.__len__(self) -> "size_t" -ida_dbg.tevinforeg_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: tev_info_reg_t const & +ida_dbg.tevinforeg_vec_t.__setitem__(self, i: "size_t", v: "tev_info_reg_t") -> None -ida_dbg.tevinforeg_vec_t.at (method) - at(self, _idx) -> tev_info_reg_t - - @param _idx: size_t +ida_dbg.tevinforeg_vec_t.append(self, x: "tev_info_reg_t") -> None -ida_dbg.tevinforeg_vec_t.begin (method) - begin(self) -> tev_info_reg_t +ida_dbg.tevinforeg_vec_t.at(self, _idx: "size_t") -> "tev_info_reg_t const &" -ida_dbg.tevinforeg_vec_t.capacity (method) - capacity(self) -> size_t +ida_dbg.tevinforeg_vec_t.begin(self, *args) -> "qvector< tev_info_reg_t >::const_iterator" -ida_dbg.tevinforeg_vec_t.clear (method) - clear(self) +ida_dbg.tevinforeg_vec_t.capacity(self) -> "size_t" -ida_dbg.tevinforeg_vec_t.empty (method) - empty(self) -> bool +ida_dbg.tevinforeg_vec_t.clear(self) -> None -ida_dbg.tevinforeg_vec_t.end (method) - end(self) -> tev_info_reg_t +ida_dbg.tevinforeg_vec_t.empty(self) -> bool -ida_dbg.tevinforeg_vec_t.erase (method) - erase(self, it) -> tev_info_reg_t - - @param it: qvector< tev_info_reg_t >::iterator - - erase(self, first, last) -> tev_info_reg_t - - @param first: qvector< tev_info_reg_t >::iterator - @param last: qvector< tev_info_reg_t >::iterator +ida_dbg.tevinforeg_vec_t.end(self, *args) -> "qvector< tev_info_reg_t >::const_iterator" -ida_dbg.tevinforeg_vec_t.extract (method) - extract(self) -> tev_info_reg_t +ida_dbg.tevinforeg_vec_t.erase(self, *args) -> "qvector< tev_info_reg_t >::iterator" -ida_dbg.tevinforeg_vec_t.grow (method) - grow(self, x=tev_info_reg_t()) - - @param x: tev_info_reg_t const & +ida_dbg.tevinforeg_vec_t.extend(self, x: "tevinforeg_vec_t") -> None -ida_dbg.tevinforeg_vec_t.inject (method) - inject(self, s, len) - - @param s: tev_info_reg_t * - @param len: size_t +ida_dbg.tevinforeg_vec_t.extract(self) -> "tev_info_reg_t *" -ida_dbg.tevinforeg_vec_t.insert (method) - insert(self, it, x) -> tev_info_reg_t - - @param it: qvector< tev_info_reg_t >::iterator - @param x: tev_info_reg_t const & +ida_dbg.tevinforeg_vec_t.grow(self, *args) -> None -ida_dbg.tevinforeg_vec_t.pop_back (method) - pop_back(self) +ida_dbg.tevinforeg_vec_t.inject(self, s: "tev_info_reg_t", len: "size_t") -> None -ida_dbg.tevinforeg_vec_t.push_back (method) - push_back(self, x) - - @param x: tev_info_reg_t const & - - push_back(self) -> tev_info_reg_t +ida_dbg.tevinforeg_vec_t.insert(self, it: "tev_info_reg_t", x: "tev_info_reg_t") -> "qvector< tev_info_reg_t >::iterator" -ida_dbg.tevinforeg_vec_t.qclear (method) - qclear(self) +ida_dbg.tevinforeg_vec_t.pop_back(self) -> None -ida_dbg.tevinforeg_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_dbg.tevinforeg_vec_t.push_back(self, *args) -> "tev_info_reg_t &" -ida_dbg.tevinforeg_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: tev_info_reg_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_dbg.tevinforeg_vec_t.qclear(self) -> None -ida_dbg.tevinforeg_vec_t.size (method) - size(self) -> size_t +ida_dbg.tevinforeg_vec_t.reserve(self, cnt: "size_t") -> None -ida_dbg.tevinforeg_vec_t.swap (method) - swap(self, r) - - @param r: qvector< tev_info_reg_t > & +ida_dbg.tevinforeg_vec_t.resize(self, *args) -> None -ida_dbg.tevinforeg_vec_t.truncate (method) - truncate(self) +ida_dbg.tevinforeg_vec_t.size(self) -> "size_t" -ida_dbg.update_bpt (function) - 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)} - @note: Only the following fields can be modified: - * bpt_t::cndbody - * bpt_t::pass_count - * bpt_t::flags - * bpt_t::size - * bpt_t::type - @note: 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 *) bpt_t const * +ida_dbg.tevinforeg_vec_t.swap(self, r: "tevinforeg_vec_t") -> None -ida_dbg.wait_for_next_event (function) - wait_for_next_event(wfne, timeout) -> dbg_event_code_t +ida_dbg.tevinforeg_vec_t.truncate(self) -> None + +ida_dbg.update_bpt(bpt: "bpt_t") -> bool + Update modifiable characteristics of an existing breakpoint. To update the breakpoint location, use change_bptlocs() \sq{Type, Synchronous function, Notification, none (synchronous function)} + + +ida_dbg.wait_for_next_event(wfne: int, timeout: int) -> "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. - This function (optionally) resumes the process execution, and waits for a - debugger event until a possible timeout occurs. - - @param wfne: (C++: int) combination of Wait for debugger event flags constants - @param timeout: (C++: int) number of seconds to wait, -1-infinity - @return: either an event_id_t (if > 0), or a dbg_event_code_t (if <= 0) + @param wfne: combination of Wait for debugger event flags constants + @param timeout: number of seconds to wait, -1-infinity + @returns either an event_id_t (if > 0), or a dbg_event_code_t (if <= 0) -ida_dbg.write_dbg_memory (function) - write_dbg_memory(ea, py_buf, size=size_t(-1)) -> ssize_t - - @param ea: ea_t - @param py_buf: PyObject * - @param size: size_t +ida_dbg.write_dbg_memory(*args) -> "ssize_t" -ida_diskio (module) +ida_diskio File I/O functions for IDA. - You should not use standard C file I/O functions in modules. Use functions from - this header, pro.h and fpro.h instead. - - This file also declares a call_system() function. + You should not use standard C file I/O functions in modules. Use functions from this header, pro.h and fpro.h instead. + This file also declares a call_system() function. + -ida_diskio.IDA_SUBDIR_IDADIR_FIRST (variable) +ida_diskio.IDA_SUBDIR_IDADIR_FIRST $IDADIR/subdir will be first, not last -ida_diskio.IDA_SUBDIR_IDP (variable) +ida_diskio.IDA_SUBDIR_IDP append the processor name as a subdirectory -ida_diskio.IDA_SUBDIR_ONLY_EXISTING (variable) +ida_diskio.IDA_SUBDIR_ONLY_EXISTING only existing directories will be present -ida_diskio.LINPUT_GENERIC (variable) - generic linput +ida_diskio.LOC_CLOSE + close the inner linput -ida_diskio.LINPUT_LOCAL (variable) - local file +ida_diskio.LOC_KEEP + do nothing -ida_diskio.LINPUT_NONE (variable) - invalid linput +ida_diskio.LOC_UNMAKE + unmake the inner linput -ida_diskio.LINPUT_PROCMEM (variable) - debugged process memory (read_dbg_memory()) +ida_diskio.VAULT_CACHE_FNAME + to store file caches -ida_diskio.LINPUT_RFILE (variable) - remote file ( debugger_t::open_file, debugger_t::read_file) +ida_diskio.VAULT_CACHE_SUBDIR + subdir name for cached deltas and old files -ida_diskio.choose_ioport_device2 (function) - choose_ioport_device2(_device, file, parse_params) -> bool - - @param _device: qstring * - @param file: char const * - @param parse_params: choose_ioport_parser_t * +ida_diskio.choose_ioport_device2(_device: str, file: str, parse_params: "choose_ioport_parser_t") -> bool -ida_diskio.choose_ioport_parser_t (class) - Proxy of C++ choose_ioport_parser_t class. +ida_diskio.choose_ioport_parser_t -ida_diskio.choose_ioport_parser_t.__disown__ (method) +ida_diskio.choose_ioport_parser_t.__disown__(self) -ida_diskio.choose_ioport_parser_t.__init__ (method) - __init__(self) -> choose_ioport_parser_t - - @param self: PyObject * +ida_diskio.choose_ioport_parser_t.__init__(self) -ida_diskio.choose_ioport_parser_t.parse (method) - parse(self, param, line) -> bool +ida_diskio.choose_ioport_parser_t.parse(self, param: str, line: str) -> bool @retval true: and fill PARAM with a displayed string @retval false: and empty PARAM to skip the current device @retval false: and fill PARAM with an error message - - @param param: (C++: qstring *) - @param line: (C++: const char *) char const * -ida_diskio.close_linput (function) - close_linput(li) - Close loader input. - - @param li: (C++: linput_t *) +ida_diskio.close_linput(li: "linput_t *") -> None -ida_diskio.create_bytearray_linput (function) - create_bytearray_linput(s) -> linput_t * - Trivial memory linput. - - @param s: qstring const & +ida_diskio.create_bytearray_linput(s: str) -> "linput_t *" -ida_diskio.create_generic_linput (function) - create_generic_linput(gl) -> linput_t * - Create a generic linput - - @param gl: (C++: generic_linput_t *) linput description. this object will be destroyed by close_linput() - using "delete gl;" +ida_diskio.create_generic_linput(gl: "generic_linput_t") -> "linput_t *" -ida_diskio.create_memory_linput (function) - 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: (C++: ea_t) starting address of the input - @param size: (C++: asize_t) size of the memory area to represent as linput if unknown, may be - passed as 0 +ida_diskio.create_memory_linput(start: ida_idaapi.ea_t, size: "asize_t") -> "linput_t *" -ida_diskio.eclose (function) - eclose(fp) - - @param fp: FILE * - -ida_diskio.enumerate_files (function) - enumerate_files(path, fname, callback) -> PyObject * +ida_diskio.enumerate_files(path, fname, callback) Enumerate files in the specified directory while the callback returns 0. @param path: directory to enumerate files in @@ -21068,2712 +14125,1489 @@ ida_diskio.enumerate_files (function) @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 + @return: + None in case of script errors tuple(code, fname) : If the callback returns non-zero -ida_diskio.enumerate_files2 (function) - enumerate_files2(answer, answer_size, path, fname, fv) -> int +ida_diskio.file_enumerator_t + +ida_diskio.file_enumerator_t.__disown__(self) + +ida_diskio.file_enumerator_t.__init__(self) + +ida_diskio.file_enumerator_t.visit_file(self, file: str) -> int + +ida_diskio.fopenA(file: str) -> "FILE *" + +ida_diskio.fopenM(file: str) -> "FILE *" + +ida_diskio.fopenRB(file: str) -> "FILE *" + +ida_diskio.fopenRT(file: str) -> "FILE *" + +ida_diskio.fopenWB(file: str) -> "FILE *" + +ida_diskio.fopenWT(file: str) -> "FILE *" + +ida_diskio.generic_linput_t + +ida_diskio.generic_linput_t.__init__(self, *args, **kwargs) + +ida_diskio.generic_linput_t.read(self, off: "qoff64_t", buffer: "void *", nbytes: "size_t") -> "ssize_t" + +ida_diskio.get_ida_subdirs(subdir: str, flags: int = 0) -> "qstrvec_t *" + 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 answer: char * - @param answer_size: size_t - @param path: char const * - @param fname: char const * - @param fv: file_enumerator_t & - -ida_diskio.file_enumerator_t (class) - Proxy of C++ file_enumerator_t class. - -ida_diskio.file_enumerator_t.__disown__ (method) - -ida_diskio.file_enumerator_t.__init__ (method) - __init__(self) -> file_enumerator_t - @param self: PyObject * + + @param subdir: name of the resource to list (can be nullptr) + @param flags: Subdirectory modification flags bits + @returns number of directories appended to 'dirs' -ida_diskio.file_enumerator_t.visit_file (method) - visit_file(self, file) -> int +ida_diskio.get_linput_type(li: "linput_t *") -> "linput_type_t" + +ida_diskio.get_special_folder(csidl: int) -> str + Get a folder location by CSIDL (see Common CSIDLs). Path should be of at least MAX_PATH size + + +ida_diskio.get_user_idadir() -> str + 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) - @param file: char const * - -ida_diskio.fopenA (function) - fopenA(file) -> FILE * - Open a file for append in text mode, deny none. - @param file: (C++: const char *) char const * - @return: nullptr if failure + -ida_diskio.fopenM (function) - fopenM(file) -> FILE * - Open a file for read/write in binary mode, deny write. - - @param file: (C++: const char *) char const * - @return: nullptr if failure - -ida_diskio.fopenRB (function) - fopenRB(file) -> FILE * - Open a file for read in binary mode, deny none. - - @param file: (C++: const char *) char const * - @return: nullptr if failure - -ida_diskio.fopenRT (function) - fopenRT(file) -> FILE * - Open a file for read in text mode, deny none. - - @param file: (C++: const char *) char const * - @return: nullptr if failure - -ida_diskio.fopenWB (function) - 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 *) char const * - @return: nullptr if failure - -ida_diskio.fopenWT (function) - 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 *) char const * - @return: nullptr if failure - -ida_diskio.generic_linput_t (class) - Proxy of C++ generic_linput_t class. - -ida_diskio.generic_linput_t.__init__ (method) - -ida_diskio.generic_linput_t.blocksize (variable) - preferred block size to work with read/write sizes will be in multiples of this - number. for example, 4096 is a nice value blocksize 0 means that the filesize is - unknown. the internal cache will be disabled in this case. also, seeks from the - file end will fail. blocksize=-1 means error. - -ida_diskio.generic_linput_t.filesize (variable) - input file size - -ida_diskio.generic_linput_t.read (method) - read(self, off, buffer, nbytes) -> ssize_t - - @param off: qoff64_t - @param buffer: void * - @param nbytes: size_t - -ida_diskio.get_ida_subdirs (function) - 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: (C++: const char *) name of the resource to list - @param flags: (C++: int) Subdirectory modification flags bits - @return: number of directories appended to 'dirs' - -ida_diskio.get_linput_type (function) - get_linput_type(li) -> linput_type_t - Get linput type. - - @param li: (C++: linput_t *) - -ida_diskio.get_special_folder (function) - 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) - -ida_diskio.get_user_idadir (function) - 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 (function) - getsysfile(filename, subdir) -> str +ida_diskio.getsysfile(filename: str, subdir: str) -> str Search for IDA system file. This function searches for a file in: - 1. each directory specified by IDAUSR% - 2. ida directory [+ subdir] and returns the first match. + 0. each directory specified by IDAUSR% + 1. ida directory [+ subdir] - @param filename: (C++: const char *) name of file to search - @param subdir: (C++: const char *) if specified, the file is looked for in the specified - subdirectory of the ida directory first (see IDA subdirectories) - @return: nullptr if not found, otherwise a pointer to full file name. - -ida_diskio.idadir (function) - idadir(subdir) -> char const * - Get IDA directory (if subdir==nullptr) or the specified subdirectory (see IDA - subdirectories) - @param subdir: (C++: const char *) char const * + and returns the first match. + + @param filename: name of file to search + @param subdir: if specified, the file is looked for in the specified subdirectory of the ida directory first (see IDA subdirectories) + @returns nullptr if not found, otherwise a pointer to full file name. -ida_diskio.ioports_fallback_t (class) - Proxy of C++ ioports_fallback_t class. +ida_diskio.idadir(subdir: str) -> str + Get IDA directory (if subdir==nullptr) or the specified subdirectory (see IDA subdirectories) + -ida_diskio.ioports_fallback_t.__disown__ (method) +ida_diskio.ioports_fallback_t -ida_diskio.ioports_fallback_t.__init__ (method) - __init__(self) -> ioports_fallback_t - - @param self: PyObject * +ida_diskio.ioports_fallback_t.__disown__(self) -ida_diskio.ioports_fallback_t.handle (method) - handle(self, ports, line) -> bool - - @param ports: ioports_t const & - @param line: char const * +ida_diskio.ioports_fallback_t.__init__(self) -ida_diskio.open_linput (function) - open_linput(file, remote) -> linput_t * - Open loader input. - - @param file: (C++: const char *) char const * - @param remote: (C++: bool) +ida_diskio.ioports_fallback_t.handle(self, ports: "ioports_t const &", line: str) -> bool + @param ports: i/o port definitions + @param line: input line to parse + @returns success or fills ERRBUF with an error message -ida_diskio.qlgetz (function) - 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.open_linput(file: str, remote: bool) -> "linput_t *" -ida_diskio.read_ioports2 (function) - read_ioports2(ports, device, file, callback=None) -> ssize_t - - @param ports: ioports_t * - @param device: qstring * - @param file: char const * - @param callback: ioports_fallback_t * +ida_diskio.qlgetz(li: "linput_t *", fpos: "int64") -> str -ida_dirtree (module) +ida_diskio.read_ioports(ports: "ioports_t *", device: str, file: str, callback: "ioports_fallback_t" = None) -> "ssize_t" + +ida_dirtree Types involved in grouping of item into folders. - The dirtree_t class is used to organize a directory tree on top of any - collection that allows for accessing its elements by an id (inode). - - No requirements are imposed on the inodes apart from the forbidden value -1 (it - is used ot denote a bad inode). - - The dirspec_t class is used to specialize the dirtree. It can be used to - introduce a directory structure for: + The dirtree_t class is used to organize a directory tree on top of any collection that allows for accessing its elements by an id (inode). + No requirements are imposed on the inodes apart from the forbidden value -1 (used to denote a bad inode). + The dirspec_t class is used to specialize the dirtree. It can be used to introduce a directory structure for: * local types * structs * enums * functions * names * etc - - @note: you should be manipulating dirtree_t (and, if implementing a new tree - backend, dirspec_t) instances, not calling top-level functions in this - file directly. -ida_dirtree.DTN_DISPLAY_NAME (variable) - use short, displayable form of the entry name. for example, 'std::string' - instead of 'std::basic_string'. Note that more than one "full name" - can have the same displayable name. +ida_dirtree.DTE_ALREADY_EXISTS + item already exists -ida_dirtree.DTN_FULL_NAME (variable) - use long form of the entry name. That name is unique. +ida_dirtree.DTE_BAD_PATH + invalid path -ida_dirtree.direntry_t (class) - Proxy of C++ direntry_t class. +ida_dirtree.DTE_CANT_RENAME + failed to rename an item -ida_dirtree.direntry_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: direntry_t const & +ida_dirtree.DTE_MAX_DIR + maximum directory count achieved -ida_dirtree.direntry_t.__init__ (method) - __init__(self, i=BADIDX, d=False) -> direntry_t - - @param i: uval_t - @param d: bool +ida_dirtree.DTE_NOT_DIRECTORY + item is not a directory -ida_dirtree.direntry_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: direntry_t const & +ida_dirtree.DTE_NOT_EMPTY + directory is not empty -ida_dirtree.direntry_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: direntry_t const & +ida_dirtree.DTE_NOT_FOUND + item not found -ida_dirtree.direntry_t.idx (variable) +ida_dirtree.DTE_OK + ok + +ida_dirtree.DTE_OWN_CHILD + moving inside subdirectory of itself + +ida_dirtree.DTN_DISPLAY_NAME + use short, displayable form of the entry name. for example, 'std::string' instead of 'std::basic_string'. Note that more than one "full name" can have the same displayable name. + + +ida_dirtree.DTN_FULL_NAME + use long form of the entry name. That name is unique. + + +ida_dirtree.direntry_t + +ida_dirtree.direntry_t.__eq__(self, r: "direntry_t") -> bool + +ida_dirtree.direntry_t.__init__(self, *args) + +ida_dirtree.direntry_t.__lt__(self, r: "direntry_t") -> bool + +ida_dirtree.direntry_t.__ne__(self, r: "direntry_t") -> bool + +ida_dirtree.direntry_t.idx diridx_t or inode_t -ida_dirtree.direntry_t.isdir (variable) +ida_dirtree.direntry_t.isdir is 'idx' a diridx_t, or an inode_t -ida_dirtree.direntry_t.valid (method) - valid(self) -> bool +ida_dirtree.direntry_t.valid(self) -> bool -ida_dirtree.direntry_vec_t (class) - Proxy of C++ qvector< direntry_t > class. +ida_dirtree.direntry_vec_t -ida_dirtree.direntry_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< direntry_t > const & +ida_dirtree.direntry_vec_t.__eq__(self, r: "direntry_vec_t") -> bool -ida_dirtree.direntry_vec_t.__getitem__ (method) - __getitem__(self, i) -> direntry_t - - @param i: size_t +ida_dirtree.direntry_vec_t.__getitem__(self, i: "size_t") -> "direntry_t const &" -ida_dirtree.direntry_vec_t.__init__ (method) - __init__(self) -> direntry_vec_t - __init__(self, x) -> direntry_vec_t - - @param x: qvector< direntry_t > const & +ida_dirtree.direntry_vec_t.__init__(self, *args) -ida_dirtree.direntry_vec_t.__len__ (method) - __len__(self) -> size_t +ida_dirtree.direntry_vec_t.__len__(self) -> "size_t" -ida_dirtree.direntry_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< direntry_t > const & +ida_dirtree.direntry_vec_t.__ne__(self, r: "direntry_vec_t") -> bool -ida_dirtree.direntry_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: direntry_t const & +ida_dirtree.direntry_vec_t.__setitem__(self, i: "size_t", v: "direntry_t") -> None -ida_dirtree.direntry_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: direntry_t const & +ida_dirtree.direntry_vec_t._del(self, x: "direntry_t") -> bool -ida_dirtree.direntry_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: direntry_t const & +ida_dirtree.direntry_vec_t.add_unique(self, x: "direntry_t") -> bool -ida_dirtree.direntry_vec_t.at (method) - at(self, _idx) -> direntry_t - - @param _idx: size_t +ida_dirtree.direntry_vec_t.append(self, x: "direntry_t") -> None -ida_dirtree.direntry_vec_t.begin (method) - begin(self) -> direntry_t +ida_dirtree.direntry_vec_t.at(self, _idx: "size_t") -> "direntry_t const &" -ida_dirtree.direntry_vec_t.capacity (method) - capacity(self) -> size_t +ida_dirtree.direntry_vec_t.begin(self, *args) -> "qvector< direntry_t >::const_iterator" -ida_dirtree.direntry_vec_t.clear (method) - clear(self) +ida_dirtree.direntry_vec_t.capacity(self) -> "size_t" -ida_dirtree.direntry_vec_t.empty (method) - empty(self) -> bool +ida_dirtree.direntry_vec_t.clear(self) -> None -ida_dirtree.direntry_vec_t.end (method) - end(self) -> direntry_t +ida_dirtree.direntry_vec_t.empty(self) -> bool -ida_dirtree.direntry_vec_t.erase (method) - erase(self, it) -> direntry_t - - @param it: qvector< direntry_t >::iterator - - erase(self, first, last) -> direntry_t - - @param first: qvector< direntry_t >::iterator - @param last: qvector< direntry_t >::iterator +ida_dirtree.direntry_vec_t.end(self, *args) -> "qvector< direntry_t >::const_iterator" -ida_dirtree.direntry_vec_t.extract (method) - extract(self) -> direntry_t +ida_dirtree.direntry_vec_t.erase(self, *args) -> "qvector< direntry_t >::iterator" -ida_dirtree.direntry_vec_t.find (method) - find(self, x) -> direntry_t - - @param x: direntry_t const & +ida_dirtree.direntry_vec_t.extend(self, x: "direntry_vec_t") -> None -ida_dirtree.direntry_vec_t.grow (method) - grow(self, x=direntry_t()) - - @param x: direntry_t const & +ida_dirtree.direntry_vec_t.extract(self) -> "direntry_t *" -ida_dirtree.direntry_vec_t.has (method) - has(self, x) -> bool - - @param x: direntry_t const & +ida_dirtree.direntry_vec_t.find(self, *args) -> "qvector< direntry_t >::const_iterator" -ida_dirtree.direntry_vec_t.inject (method) - inject(self, s, len) - - @param s: direntry_t * - @param len: size_t +ida_dirtree.direntry_vec_t.grow(self, *args) -> None -ida_dirtree.direntry_vec_t.insert (method) - insert(self, it, x) -> direntry_t - - @param it: qvector< direntry_t >::iterator - @param x: direntry_t const & +ida_dirtree.direntry_vec_t.has(self, x: "direntry_t") -> bool -ida_dirtree.direntry_vec_t.pop_back (method) - pop_back(self) +ida_dirtree.direntry_vec_t.inject(self, s: "direntry_t", len: "size_t") -> None -ida_dirtree.direntry_vec_t.push_back (method) - push_back(self, x) - - @param x: direntry_t const & - - push_back(self) -> direntry_t +ida_dirtree.direntry_vec_t.insert(self, it: "direntry_t", x: "direntry_t") -> "qvector< direntry_t >::iterator" -ida_dirtree.direntry_vec_t.qclear (method) - qclear(self) +ida_dirtree.direntry_vec_t.pop_back(self) -> None -ida_dirtree.direntry_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_dirtree.direntry_vec_t.push_back(self, *args) -> "direntry_t &" -ida_dirtree.direntry_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: direntry_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_dirtree.direntry_vec_t.qclear(self) -> None -ida_dirtree.direntry_vec_t.size (method) - size(self) -> size_t +ida_dirtree.direntry_vec_t.reserve(self, cnt: "size_t") -> None -ida_dirtree.direntry_vec_t.swap (method) - swap(self, r) - - @param r: qvector< direntry_t > & +ida_dirtree.direntry_vec_t.resize(self, *args) -> None -ida_dirtree.direntry_vec_t.truncate (method) - truncate(self) +ida_dirtree.direntry_vec_t.size(self) -> "size_t" -ida_dirtree.dirspec_t (class) - Proxy of C++ dirspec_t class. +ida_dirtree.direntry_vec_t.swap(self, r: "direntry_vec_t") -> None -ida_dirtree.dirspec_t.__disown__ (method) +ida_dirtree.direntry_vec_t.truncate(self) -> None -ida_dirtree.dirspec_t.__init__ (method) - __init__(self, nm=None, f=0) -> dirspec_t - - @param nm: char const * - @param f: uint32 +ida_dirtree.dirspec_t -ida_dirtree.dirspec_t.get_attrs (method) - get_attrs(self, inode) -> qstring - - @param inode: inode_t +ida_dirtree.dirspec_t.__disown__(self) -ida_dirtree.dirspec_t.get_inode (method) - get_inode(self, dirpath, name) -> inode_t - get the entry inode in the specified directory - - @param dirpath: (C++: const char *) the absolute directory path with trailing slash - @param name: (C++: const char *) the entry name in the directory - @return: the entry inode +ida_dirtree.dirspec_t.__init__(self, nm: str = None, f: int = 0) -ida_dirtree.dirspec_t.get_name (method) - get_name(self, inode, name_flags=DTN_FULL_NAME) -> bool - get the entry name. for example, the structure name - - @param inode: (C++: inode_t) inode number of the entry - @param name_flags: (C++: uint32) how exactly the name should be retrieved. combination of bits - for get_...name() methods bits - @return: false if the entry does not exist. +ida_dirtree.dirspec_t.get_attrs(self, inode: "inode_t") -> str -ida_dirtree.dirspec_t.is_orderable (method) - is_orderable(self) -> bool +ida_dirtree.dirspec_t.get_inode(self, dirpath: str, name: str) -> "inode_t" + get the entry inode in the specified directory + + @param dirpath: the absolute directory path with trailing slash + @param name: the entry name in the directory + @returns the entry inode -ida_dirtree.dirspec_t.rename_inode (method) - rename_inode(self, inode, newname) -> bool - rename the entry - - @param inode: (C++: inode_t) - @param newname: (C++: const char *) - @return: success +ida_dirtree.dirspec_t.get_name(self, inode: "inode_t", name_flags: int = DTN_FULL_NAME) -> bool + get the entry name. for example, the structure name + + @param inode: inode number of the entry + @param name_flags: how exactly the name should be retrieved. combination of bits for get_...name() methods bits + @returns false if the entry does not exist. -ida_dirtree.dirspec_t.unlink_inode (method) - unlink_inode(self, inode) - - @param inode: (C++: inode_t) +ida_dirtree.dirspec_t.is_orderable(self) -> bool -ida_dirtree.dirtree_cursor_t (class) - Proxy of C++ dirtree_cursor_t class. +ida_dirtree.dirspec_t.rename_inode(self, inode: "inode_t", newname: str) -> bool + rename the entry + + @returns success -ida_dirtree.dirtree_cursor_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: dirtree_cursor_t const & +ida_dirtree.dirspec_t.unlink_inode(self, inode: "inode_t") -> None + event: unlinked an inode + -ida_dirtree.dirtree_cursor_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: dirtree_cursor_t const & +ida_dirtree.dirtree_cursor_t -ida_dirtree.dirtree_cursor_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: dirtree_cursor_t const & +ida_dirtree.dirtree_cursor_t.__eq__(self, r: "dirtree_cursor_t") -> bool -ida_dirtree.dirtree_cursor_t.__init__ (method) - __init__(self, _parent=BADIDX, _rank=size_t(-1)) -> dirtree_cursor_t - - @param _parent: diridx_t - @param _rank: size_t +ida_dirtree.dirtree_cursor_t.__ge__(self, r: "dirtree_cursor_t") -> bool -ida_dirtree.dirtree_cursor_t.__le__ (method) - __le__(self, r) -> bool - - @param r: dirtree_cursor_t const & +ida_dirtree.dirtree_cursor_t.__gt__(self, r: "dirtree_cursor_t") -> bool -ida_dirtree.dirtree_cursor_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: dirtree_cursor_t const & +ida_dirtree.dirtree_cursor_t.__init__(self, *args) -ida_dirtree.dirtree_cursor_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: dirtree_cursor_t const & +ida_dirtree.dirtree_cursor_t.__le__(self, r: "dirtree_cursor_t") -> bool -ida_dirtree.dirtree_cursor_t.compare (method) - compare(self, r) -> int - - @param r: dirtree_cursor_t const & +ida_dirtree.dirtree_cursor_t.__lt__(self, r: "dirtree_cursor_t") -> bool -ida_dirtree.dirtree_cursor_t.is_root_cursor (method) - is_root_cursor(self) -> bool +ida_dirtree.dirtree_cursor_t.__ne__(self, r: "dirtree_cursor_t") -> bool -ida_dirtree.dirtree_cursor_t.parent (variable) +ida_dirtree.dirtree_cursor_t.compare(self, r: "dirtree_cursor_t") -> int + +ida_dirtree.dirtree_cursor_t.is_root_cursor(self) -> bool + +ida_dirtree.dirtree_cursor_t.parent the parent directory -ida_dirtree.dirtree_cursor_t.rank (variable) +ida_dirtree.dirtree_cursor_t.rank the index into the parent directory -ida_dirtree.dirtree_cursor_t.root_cursor (method) - root_cursor() -> dirtree_cursor_t +ida_dirtree.dirtree_cursor_t.root_cursor() -> "dirtree_cursor_t" -ida_dirtree.dirtree_cursor_t.set_root_cursor (method) - set_root_cursor(self) +ida_dirtree.dirtree_cursor_t.set_root_cursor(self) -> None -ida_dirtree.dirtree_cursor_t.valid (method) - valid(self) -> bool +ida_dirtree.dirtree_cursor_t.valid(self) -> bool -ida_dirtree.dirtree_cursor_t_root_cursor (function) - dirtree_cursor_t_root_cursor() -> dirtree_cursor_t +ida_dirtree.dirtree_cursor_vec_t -ida_dirtree.dirtree_cursor_vec_t (class) - Proxy of C++ qvector< dirtree_cursor_t > class. +ida_dirtree.dirtree_cursor_vec_t.__eq__(self, r: "dirtree_cursor_vec_t") -> bool -ida_dirtree.dirtree_cursor_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< dirtree_cursor_t > const & +ida_dirtree.dirtree_cursor_vec_t.__getitem__(self, i: "size_t") -> "dirtree_cursor_t const &" -ida_dirtree.dirtree_cursor_vec_t.__getitem__ (method) - __getitem__(self, i) -> dirtree_cursor_t - - @param i: size_t +ida_dirtree.dirtree_cursor_vec_t.__init__(self, *args) -ida_dirtree.dirtree_cursor_vec_t.__init__ (method) - __init__(self) -> dirtree_cursor_vec_t - __init__(self, x) -> dirtree_cursor_vec_t - - @param x: qvector< dirtree_cursor_t > const & +ida_dirtree.dirtree_cursor_vec_t.__len__(self) -> "size_t" -ida_dirtree.dirtree_cursor_vec_t.__len__ (method) - __len__(self) -> size_t +ida_dirtree.dirtree_cursor_vec_t.__ne__(self, r: "dirtree_cursor_vec_t") -> bool -ida_dirtree.dirtree_cursor_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< dirtree_cursor_t > const & +ida_dirtree.dirtree_cursor_vec_t.__setitem__(self, i: "size_t", v: "dirtree_cursor_t") -> None -ida_dirtree.dirtree_cursor_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: dirtree_cursor_t const & +ida_dirtree.dirtree_cursor_vec_t._del(self, x: "dirtree_cursor_t") -> bool -ida_dirtree.dirtree_cursor_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: dirtree_cursor_t const & +ida_dirtree.dirtree_cursor_vec_t.add_unique(self, x: "dirtree_cursor_t") -> bool -ida_dirtree.dirtree_cursor_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: dirtree_cursor_t const & +ida_dirtree.dirtree_cursor_vec_t.append(self, x: "dirtree_cursor_t") -> None -ida_dirtree.dirtree_cursor_vec_t.at (method) - at(self, _idx) -> dirtree_cursor_t - - @param _idx: size_t +ida_dirtree.dirtree_cursor_vec_t.at(self, _idx: "size_t") -> "dirtree_cursor_t const &" -ida_dirtree.dirtree_cursor_vec_t.begin (method) - begin(self) -> dirtree_cursor_t +ida_dirtree.dirtree_cursor_vec_t.begin(self, *args) -> "qvector< dirtree_cursor_t >::const_iterator" -ida_dirtree.dirtree_cursor_vec_t.capacity (method) - capacity(self) -> size_t +ida_dirtree.dirtree_cursor_vec_t.capacity(self) -> "size_t" -ida_dirtree.dirtree_cursor_vec_t.clear (method) - clear(self) +ida_dirtree.dirtree_cursor_vec_t.clear(self) -> None -ida_dirtree.dirtree_cursor_vec_t.empty (method) - empty(self) -> bool +ida_dirtree.dirtree_cursor_vec_t.empty(self) -> bool -ida_dirtree.dirtree_cursor_vec_t.end (method) - end(self) -> dirtree_cursor_t +ida_dirtree.dirtree_cursor_vec_t.end(self, *args) -> "qvector< dirtree_cursor_t >::const_iterator" -ida_dirtree.dirtree_cursor_vec_t.erase (method) - erase(self, it) -> dirtree_cursor_t - - @param it: qvector< dirtree_cursor_t >::iterator - - erase(self, first, last) -> dirtree_cursor_t - - @param first: qvector< dirtree_cursor_t >::iterator - @param last: qvector< dirtree_cursor_t >::iterator +ida_dirtree.dirtree_cursor_vec_t.erase(self, *args) -> "qvector< dirtree_cursor_t >::iterator" -ida_dirtree.dirtree_cursor_vec_t.extract (method) - extract(self) -> dirtree_cursor_t +ida_dirtree.dirtree_cursor_vec_t.extend(self, x: "dirtree_cursor_vec_t") -> None -ida_dirtree.dirtree_cursor_vec_t.find (method) - find(self, x) -> dirtree_cursor_t - - @param x: dirtree_cursor_t const & +ida_dirtree.dirtree_cursor_vec_t.extract(self) -> "dirtree_cursor_t *" -ida_dirtree.dirtree_cursor_vec_t.grow (method) - grow(self, x=dirtree_cursor_t()) - - @param x: dirtree_cursor_t const & +ida_dirtree.dirtree_cursor_vec_t.find(self, *args) -> "qvector< dirtree_cursor_t >::const_iterator" -ida_dirtree.dirtree_cursor_vec_t.has (method) - has(self, x) -> bool - - @param x: dirtree_cursor_t const & +ida_dirtree.dirtree_cursor_vec_t.grow(self, *args) -> None -ida_dirtree.dirtree_cursor_vec_t.inject (method) - inject(self, s, len) - - @param s: dirtree_cursor_t * - @param len: size_t +ida_dirtree.dirtree_cursor_vec_t.has(self, x: "dirtree_cursor_t") -> bool -ida_dirtree.dirtree_cursor_vec_t.insert (method) - insert(self, it, x) -> dirtree_cursor_t - - @param it: qvector< dirtree_cursor_t >::iterator - @param x: dirtree_cursor_t const & +ida_dirtree.dirtree_cursor_vec_t.inject(self, s: "dirtree_cursor_t", len: "size_t") -> None -ida_dirtree.dirtree_cursor_vec_t.pop_back (method) - pop_back(self) +ida_dirtree.dirtree_cursor_vec_t.insert(self, it: "dirtree_cursor_t", x: "dirtree_cursor_t") -> "qvector< dirtree_cursor_t >::iterator" -ida_dirtree.dirtree_cursor_vec_t.push_back (method) - push_back(self, x) - - @param x: dirtree_cursor_t const & - - push_back(self) -> dirtree_cursor_t +ida_dirtree.dirtree_cursor_vec_t.pop_back(self) -> None -ida_dirtree.dirtree_cursor_vec_t.qclear (method) - qclear(self) +ida_dirtree.dirtree_cursor_vec_t.push_back(self, *args) -> "dirtree_cursor_t &" -ida_dirtree.dirtree_cursor_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_dirtree.dirtree_cursor_vec_t.qclear(self) -> None -ida_dirtree.dirtree_cursor_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: dirtree_cursor_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_dirtree.dirtree_cursor_vec_t.reserve(self, cnt: "size_t") -> None -ida_dirtree.dirtree_cursor_vec_t.size (method) - size(self) -> size_t +ida_dirtree.dirtree_cursor_vec_t.resize(self, *args) -> None -ida_dirtree.dirtree_cursor_vec_t.swap (method) - swap(self, r) - - @param r: qvector< dirtree_cursor_t > & +ida_dirtree.dirtree_cursor_vec_t.size(self) -> "size_t" -ida_dirtree.dirtree_cursor_vec_t.truncate (method) - truncate(self) +ida_dirtree.dirtree_cursor_vec_t.swap(self, r: "dirtree_cursor_vec_t") -> None -ida_dirtree.dirtree_iterator_t (class) - Proxy of C++ dirtree_iterator_t class. +ida_dirtree.dirtree_cursor_vec_t.truncate(self) -> None -ida_dirtree.dirtree_iterator_t.__init__ (method) - __init__(self) -> dirtree_iterator_t +ida_dirtree.dirtree_iterator_t -ida_dirtree.dirtree_selection_t (class) - Proxy of C++ dirtree_selection_t class. +ida_dirtree.dirtree_iterator_t.__init__(self) -ida_dirtree.dirtree_selection_t.__init__ (method) - __init__(self) -> dirtree_selection_t +ida_dirtree.dirtree_selection_t -ida_dirtree.dirtree_t (class) - Proxy of C++ dirtree_t class. +ida_dirtree.dirtree_selection_t.__init__(self) -ida_dirtree.dirtree_t.__init__ (method) - __init__(self, ds) -> dirtree_t - - @param ds: dirspec_t * +ida_dirtree.dirtree_t -ida_dirtree.dirtree_t.change_rank (method) - change_rank(self, path, rank_delta) -> dterr_t - Change ordering rank of an item. - - @param path: (C++: const char *) path to the item - @param rank_delta: (C++: ssize_t) the amount of the change. positive numbers mean to move down - in the list; negative numbers mean to move up. - @return: dterr_t error code - @note: this function may disable natural ordering of the parent folder - @see: set_natural_order() +ida_dirtree.dirtree_t.__init__(self, ds: "dirspec_t") -ida_dirtree.dirtree_t.chdir (method) - chdir(self, path) -> dterr_t - Change current directory - - @param path: (C++: const char *) new current directory - @return: dterr_t error code +ida_dirtree.dirtree_t.change_rank(self, path: str, rank_delta: "ssize_t") -> "dterr_t" + Change ordering rank of an item. + + @param path: path to the item + @param rank_delta: the amount of the change. positive numbers mean to move down in the list; negative numbers mean to move up. + @returns dterr_t error code -ida_dirtree.dirtree_t.errstr (method) - errstr(err) -> char const * +ida_dirtree.dirtree_t.chdir(self, path: str) -> "dterr_t" + Change current directory + + @param path: new current directory + @returns dterr_t error code + +ida_dirtree.dirtree_t.errstr(err: "dterr_t") -> str Get textual representation of the error code. - - @param err: (C++: dterr_t) enum dterr_t -ida_dirtree.dirtree_t.find_entry (method) - find_entry(self, de) -> dirtree_cursor_t - Find the cursor corresponding to an entry of a directory - - @param de: (C++: const direntry_t &) directory entry - @return: cursor corresponding to the directory entry +ida_dirtree.dirtree_t.find_entry(self, de: "direntry_t") -> "dirtree_cursor_t" + Find the cursor corresponding to an entry of a directory + + @param de: directory entry + @returns cursor corresponding to the directory entry -ida_dirtree.dirtree_t.findfirst (method) - findfirst(self, ff, pattern) -> bool - Start iterating over files in a directory - - @param ff: (C++: dirtree_iterator_t *) directory iterator. it will be initialized by the function - @param pattern: (C++: const char *) pattern to search for - @return: success +ida_dirtree.dirtree_t.findfirst(self, ff: "dirtree_iterator_t", pattern: str) -> bool + Start iterating over files in a directory + + @param ff: directory iterator. it will be initialized by the function + @param pattern: pattern to search for + @returns success -ida_dirtree.dirtree_t.findnext (method) - findnext(self, ff) -> bool - Continue iterating over files in a directory - - @param ff: (C++: dirtree_iterator_t *) directory iterator - @return: success +ida_dirtree.dirtree_t.findnext(self, ff: "dirtree_iterator_t") -> bool + Continue iterating over files in a directory + + @param ff: directory iterator + @returns success -ida_dirtree.dirtree_t.get_abspath (method) - get_abspath(self, cursor, name_flags=DTN_FULL_NAME) -> qstring - Construct an absolute path from the specified relative path. This function - verifies the directory part of the specified path. The last component of the - specified path is not verified. +ida_dirtree.dirtree_t.get_abspath(self, *args) -> str + This function has the following signatures: - @param cursor: dirtree_cursor_t const & - @param name_flags: uint32 + 0. get_abspath(cursor: const dirtree_cursor_t &, name_flags: int=DTN_FULL_NAME) -> str + 1. get_abspath(relpath: str) -> str - @return: path. empty path means wrong directory part of RELPATH - get_abspath(self, relpath) -> qstring + # 0: get_abspath(cursor: const dirtree_cursor_t &, name_flags: int=DTN_FULL_NAME) -> str - @param relpath: char const * + Get absolute path pointed by the cursor + + @returns path; empty string if error + + # 1: get_abspath(relpath: str) -> str + + Construct an absolute path from the specified relative path. This function verifies the directory part of the specified path. The last component of the specified path is not verified. + + @returns path. empty path means wrong directory part of RELPATH -ida_dirtree.dirtree_t.get_dir_size (method) - get_dir_size(self, diridx) -> ssize_t - Get dir size - - @param diridx: (C++: diridx_t) directory index - @return: number of entries under this directory; if error, return -1 +ida_dirtree.dirtree_t.get_dir_size(self, diridx: "diridx_t") -> "ssize_t" + Get dir size + + @param diridx: directory index + @returns number of entries under this directory; if error, return -1 -ida_dirtree.dirtree_t.get_entry_attrs (method) - get_entry_attrs(self, de) -> qstring - Get entry attributes - - @param de: (C++: const direntry_t &) directory entry - @return: name +ida_dirtree.dirtree_t.get_entry_attrs(self, de: "direntry_t") -> str + Get entry attributes + + @param de: directory entry + @returns name -ida_dirtree.dirtree_t.get_entry_name (method) - get_entry_name(self, de, name_flags=DTN_FULL_NAME) -> qstring - Get entry name - - @param de: (C++: const direntry_t &) directory entry - @param name_flags: (C++: uint32) how exactly the name should be retrieved. combination of bits - for get_...name() methods bits - @return: name +ida_dirtree.dirtree_t.get_entry_name(self, de: "direntry_t", name_flags: int = DTN_FULL_NAME) -> str + Get entry name + + @param de: directory entry + @param name_flags: how exactly the name should be retrieved. combination of bits for get_...name() methods bits + @returns name -ida_dirtree.dirtree_t.get_id (method) - get_id(self) -> char const * +ida_dirtree.dirtree_t.get_id(self) -> str netnode name -ida_dirtree.dirtree_t.get_parent_cursor (method) - get_parent_cursor(self, cursor) -> dirtree_cursor_t - Get parent cursor. - - @param cursor: (C++: const dirtree_cursor_t &) a valid ditree cursor - @return: cursor's parent +ida_dirtree.dirtree_t.get_parent_cursor(self, cursor: "dirtree_cursor_t") -> "dirtree_cursor_t" + Get parent cursor. + + @param cursor: a valid ditree cursor + @returns cursor's parent -ida_dirtree.dirtree_t.get_rank (method) - get_rank(self, diridx, de) -> ssize_t - Get ordering rank of an item. - - @param diridx: (C++: diridx_t) index of the parent directory - @param de: (C++: const direntry_t &) directory entry - @return: number in a range of [0..n) where n is the number of entries in the - parent directory. -1 if error +ida_dirtree.dirtree_t.get_rank(self, diridx: "diridx_t", de: "direntry_t") -> "ssize_t" + Get ordering rank of an item. + + @param diridx: index of the parent directory + @param de: directory entry + @returns number in a range of [0..n) where n is the number of entries in the parent directory. -1 if error -ida_dirtree.dirtree_t.getcwd (method) - getcwd(self) -> qstring - Get current directory - - @return: the current working directory +ida_dirtree.dirtree_t.getcwd(self) -> str + Get current directory + + @returns the current working directory -ida_dirtree.dirtree_t.is_dir_ordered (method) - is_dir_ordered(self, diridx) -> bool - Is dir ordered? - - @param diridx: (C++: diridx_t) - @return: true if the dirtree has natural ordering +ida_dirtree.dirtree_t.is_dir_ordered(self, diridx: "diridx_t") -> bool + Is dir ordered? + + @returns true if the dirtree has natural ordering -ida_dirtree.dirtree_t.is_orderable (method) - is_orderable(self) -> bool - Is dirtree orderable? - - @return: true if the dirtree is orderable +ida_dirtree.dirtree_t.is_orderable(self) -> bool + Is dirtree orderable? + + @returns true if the dirtree is orderable -ida_dirtree.dirtree_t.isdir (method) - isdir(self, de) -> bool +ida_dirtree.dirtree_t.isdir(self, *args) -> bool + This function has the following signatures: - @param de: direntry_t const & + 0. isdir(path: str) -> bool + 1. isdir(de: const direntry_t &) -> bool - isdir(self, path) -> bool + # 0: isdir(path: str) -> bool - @param path: char const * + Is a directory? + + @returns true if the specified path is a directory + + # 1: isdir(de: const direntry_t &) -> bool -ida_dirtree.dirtree_t.isfile (method) - isfile(self, de) -> bool +ida_dirtree.dirtree_t.isfile(self, *args) -> bool + This function has the following signatures: - @param de: direntry_t const & + 0. isfile(path: str) -> bool + 1. isfile(de: const direntry_t &) -> bool - isfile(self, path) -> bool + # 0: isfile(path: str) -> bool - @param path: char const * + Is a file? + + @returns true if the specified path is a file + + # 1: isfile(de: const direntry_t &) -> bool -ida_dirtree.dirtree_t.link (method) - link(self, path) -> dterr_t - Add an inode into the current directory +ida_dirtree.dirtree_t.link(self, *args) -> "dterr_t" + This function has the following signatures: - @param path: char const * + 0. link(path: str) -> dterr_t + 1. link(inode: inode_t) -> dterr_t - @return: dterr_t error code - link(self, inode) -> dterr_t + # 0: link(path: str) -> dterr_t - @param inode: inode_t + Add a file item into a directory. + + @returns dterr_t error code + + # 1: link(inode: inode_t) -> dterr_t + + Add an inode into the current directory + + @returns dterr_t error code -ida_dirtree.dirtree_t.load (method) - load(self) -> bool - Load the tree structure from the netnode. If dirspec_t::id is empty, the - operation will be considered a success. In addition, calling load() more than - once will not do anything, and will be considered a success. - - @return: success - @see: dirspec_t::id. +ida_dirtree.dirtree_t.load(self) -> bool + Load the tree structure from the netnode. If dirspec_t::id is empty, the operation will be considered a success. In addition, calling load() more than once will not do anything, and will be considered a success. + + @returns success -ida_dirtree.dirtree_t.mkdir (method) - mkdir(self, path) -> dterr_t - Create a directory. - - @param path: (C++: const char *) directory to create - @return: dterr_t error code +ida_dirtree.dirtree_t.mkdir(self, path: str) -> "dterr_t" + Create a directory. + + @param path: directory to create + @returns dterr_t error code -ida_dirtree.dirtree_t.notify_dirtree (method) - notify_dirtree(self, added, inode) - Notify dirtree about a change of an inode. - - @param added: (C++: bool) are we adding or deleting an inode? - @param inode: (C++: inode_t) inode in question +ida_dirtree.dirtree_t.notify_dirtree(self, added: bool, inode: "inode_t") -> None + Notify dirtree about a change of an inode. + + @param added: are we adding or deleting an inode? + @param inode: inode in question -ida_dirtree.dirtree_t.rename (method) - rename(self, _from, to) -> dterr_t - Rename a directory entry. - - @param from: (C++: const char *) source path - @param to: (C++: const char *) destination path - @return: dterr_t error code - @note: This function can also rename the item +ida_dirtree.dirtree_t.rename(self, _from: str, to: str) -> "dterr_t" + Rename a directory entry. + + @param to: destination path + @returns dterr_t error code -ida_dirtree.dirtree_t.resolve_cursor (method) - resolve_cursor(self, cursor) -> direntry_t - Resolve cursor - - @param cursor: (C++: const dirtree_cursor_t &) to analyze - @return: directory entry; if the cursor is bad, the resolved entry will be - invalid. - @note: see also get_abspath() +ida_dirtree.dirtree_t.resolve_cursor(self, cursor: "dirtree_cursor_t") -> "direntry_t" + Resolve cursor + + @param cursor: to analyze + @returns directory entry; if the cursor is bad, the resolved entry will be invalid. -ida_dirtree.dirtree_t.resolve_path (method) - resolve_path(self, path) -> direntry_t - Resolve path - - @param path: (C++: const char *) to analyze - @return: directory entry +ida_dirtree.dirtree_t.resolve_path(self, path: str) -> "direntry_t" + Resolve path + + @param path: to analyze + @returns directory entry -ida_dirtree.dirtree_t.rmdir (method) - rmdir(self, path) -> dterr_t - Remove a directory. - - @param path: (C++: const char *) directory to delete - @return: dterr_t error code +ida_dirtree.dirtree_t.rmdir(self, path: str) -> "dterr_t" + Remove a directory. + + @param path: directory to delete + @returns dterr_t error code -ida_dirtree.dirtree_t.save (method) - save(self) -> bool - Save the tree structure to the netnode. - - @return: success - @see: dirspec_t::id. +ida_dirtree.dirtree_t.save(self) -> bool + Save the tree structure to the netnode. + + @returns success -ida_dirtree.dirtree_t.set_id (method) - set_id(self, nm) - - @param nm: char const * +ida_dirtree.dirtree_t.set_id(self, nm: str) -> None -ida_dirtree.dirtree_t.set_natural_order (method) - set_natural_order(self, diridx, enable) -> bool - Enable/disable natural inode order in a directory. - - @param diridx: (C++: diridx_t) directory index - @param enable: (C++: bool) action to do TRUE - enable ordering: re-order existing entries so - that all subdirs are at the to beginning of the list, file - entries are sorted and placed after the subdirs FALSE - disable - ordering, no changes to existing entries - @return: SUCCESS +ida_dirtree.dirtree_t.set_natural_order(self, diridx: "diridx_t", enable: bool) -> bool + Enable/disable natural inode order in a directory. + + @param diridx: directory index + @param enable: action to do TRUE - enable ordering: re-order existing entries so that all subdirs are at the to beginning of the list, file entries are sorted and placed after the subdirs FALSE - disable ordering, no changes to existing entries + @returns SUCCESS -ida_dirtree.dirtree_t.traverse (method) - traverse(self, v) -> ssize_t - Traverse dirtree, and be notified at each entry If the the visitor returns - anything other than 0, iteration will stop, and that value returned. The tree is - traversed using a depth-first algorithm. It is forbidden to modify the dirtree_t - during traversal; doing so will result in undefined behavior. - - @param v: (C++: dirtree_visitor_t &) the callback - @return: 0, or whatever the visitor returned +ida_dirtree.dirtree_t.traverse(self, v: "dirtree_visitor_t") -> "ssize_t" + Traverse dirtree, and be notified at each entry If the the visitor returns anything other than 0, iteration will stop, and that value returned. The tree is traversed using a depth-first algorithm. It is forbidden to modify the dirtree_t during traversal; doing so will result in undefined behavior. + + @param v: the callback + @returns 0, or whatever the visitor returned -ida_dirtree.dirtree_t.unlink (method) - unlink(self, path) -> dterr_t - Remove an inode from the current directory +ida_dirtree.dirtree_t.unlink(self, *args) -> "dterr_t" + This function has the following signatures: - @param path: char const * + 0. unlink(path: str) -> dterr_t + 1. unlink(inode: inode_t) -> dterr_t - @return: dterr_t error code - unlink(self, inode) -> dterr_t + # 0: unlink(path: str) -> dterr_t - @param inode: inode_t - -ida_dirtree.dirtree_t_errstr (function) - dirtree_t_errstr(err) -> char const * + Remove a file item from a directory. + + @returns dterr_t error code - @param err: enum dterr_t - -ida_dirtree.dirtree_visitor_t (class) - Proxy of C++ dirtree_visitor_t class. - -ida_dirtree.dirtree_visitor_t.__disown__ (method) - -ida_dirtree.dirtree_visitor_t.__init__ (method) - __init__(self) -> dirtree_visitor_t + # 1: unlink(inode: inode_t) -> dterr_t - @param self: PyObject * + Remove an inode from the current directory + + @returns dterr_t error code -ida_dirtree.dirtree_visitor_t.visit (method) - visit(self, c, de) -> ssize_t - Will be called for each entry in the dirtree_t If something other than 0 is - returned, iteration will stop. - - @param c: (C++: const dirtree_cursor_t &) the current cursor - @param de: (C++: const direntry_t &) the current entry - @return: 0 to keep iterating, or anything else to stop +ida_dirtree.dirtree_visitor_t -ida_dirtree.get_std_dirtree (function) - get_std_dirtree(id) -> dirtree_t - - @param id: enum dirtree_id_t +ida_dirtree.dirtree_visitor_t.__disown__(self) -ida_entry (module) +ida_dirtree.dirtree_visitor_t.__init__(self) + +ida_dirtree.dirtree_visitor_t.visit(self, c: "dirtree_cursor_t", de: "direntry_t") -> "ssize_t" + Will be called for each entry in the dirtree_t If something other than 0 is returned, iteration will stop. + + @param c: the current cursor + @param de: the current entry + @returns 0 to keep iterating, or anything else to stop + +ida_dirtree.get_std_dirtree(id: "dirtree_id_t") -> "dirtree_t *" + +ida_entry Functions that deal with entry points. Exported functions are considered as entry points as well. - IDA maintains list of entry points to the program. Each entry point: * has an address * has a name - * may have an ordinal number + * may have an ordinal number + + + -ida_entry.AEF_IDBENC (variable) - 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_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 (variable) - automatically prepend the name with '_' if it begins with a dummy suffix. See - also AEF_IDBENC +ida_entry.AEF_NODUMMY + automatically prepend the name with '_' if it begins with a dummy suffix. See also AEF_IDBENC + -ida_entry.AEF_UTF8 (variable) +ida_entry.AEF_UTF8 the name is given in UTF-8 (default) -ida_entry.add_entry (function) - add_entry(ord, ea, name, makecode, flags=0) -> bool - Add an entry point to the list of entry points. - - @param ord: (C++: uval_t) ordinal number if ordinal number is equal to 'ea' then ordinal is - not used - @param ea: (C++: ea_t) linear address - @param name: (C++: const char *) name of entry point. If the specified location already has a name, - the old name will be appended to the regular comment. If name == - nullptr, then the old name will be retained. - @param makecode: (C++: bool) should the kernel convert bytes at the entry point to - instruction(s) - @param flags: (C++: int) See AEF_* - @return: success (currently always true) +ida_entry.add_entry(ord: int, ea: ida_idaapi.ea_t, name: str, makecode: bool, flags: int = 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 + @param ea: linear address + @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 == nullptr, then the old name will be retained. + @param makecode: should the kernel convert bytes at the entry point to instruction(s) + @param flags: See AEF_* + @returns success (currently always true) -ida_entry.get_entry (function) - get_entry(ord) -> ea_t - Get entry point address by its ordinal - - @param ord: (C++: uval_t) ordinal number of entry point - @return: address or BADADDR +ida_entry.get_entry(ord: int) -> ida_idaapi.ea_t + Get entry point address by its ordinal + + @param ord: ordinal number of entry point + @returns address or BADADDR -ida_entry.get_entry_forwarder (function) - get_entry_forwarder(ord) -> str - Get forwarder name for the entry point by its ordinal. - - @param ord: (C++: uval_t) ordinal number of entry point - @return: size of entry forwarder name or -1 +ida_entry.get_entry_forwarder(ord: int) -> str + Get forwarder name for the entry point by its ordinal. + + @param ord: ordinal number of entry point + @returns size of entry forwarder name or -1 -ida_entry.get_entry_name (function) - get_entry_name(ord) -> str - Get name of the entry point by its ordinal. - - @param ord: (C++: uval_t) ordinal number of entry point - @return: size of entry name or -1 +ida_entry.get_entry_name(ord: int) -> str + Get name of the entry point by its ordinal. + + @param ord: ordinal number of entry point + @returns size of entry name or -1 -ida_entry.get_entry_ordinal (function) - get_entry_ordinal(idx) -> uval_t - Get ordinal number of an entry point. - - @param idx: (C++: size_t) internal number of entry point. Should be in the range - 0..get_entry_qty()-1 - @return: ordinal number or 0. +ida_entry.get_entry_ordinal(idx: "size_t") -> int + Get ordinal number of an entry point. + + @param idx: internal number of entry point. Should be in the range 0..get_entry_qty()-1 + @returns ordinal number or 0. -ida_entry.get_entry_qty (function) - get_entry_qty() -> size_t +ida_entry.get_entry_qty() -> "size_t" Get number of entry points. -ida_entry.rename_entry (function) - rename_entry(ord, name, flags=0) -> bool - Rename entry point. - - @param ord: (C++: uval_t) ordinal number of the entry point - @param name: (C++: const char *) name of entry point. If the specified location already has a name, - the old name will be appended to a repeatable comment. - @param flags: (C++: int) See AEF_* - @return: success - -ida_entry.set_entry_forwarder (function) - set_entry_forwarder(ord, name, flags=0) -> bool - Set forwarder name for ordinal. - - @param ord: (C++: uval_t) ordinal number of the entry point - @param name: (C++: const char *) forwarder name for entry point. - @param flags: (C++: int) See AEF_* - @return: success - -ida_enum (module) - Assembly level enum management. - - Enums and bitfields are represented as enum_t. - -ida_enum.DEFMASK (variable) - default bitmask - -ida_enum.ENFL_REGEX (variable) - apply regular expressions to beautify the name - -ida_enum.ENUM_MEMBER_ERROR_ENUM (variable) - bad enum id - -ida_enum.ENUM_MEMBER_ERROR_ILLV (variable) - bad bmask and value combination (~bmask & value != 0) - -ida_enum.ENUM_MEMBER_ERROR_MASK (variable) - bad bmask - -ida_enum.ENUM_MEMBER_ERROR_NAME (variable) - already have member with this name (bad name) - -ida_enum.ENUM_MEMBER_ERROR_VALUE (variable) - already have 256 members with this value - -ida_enum.MAX_ENUM_SERIAL (variable) - Max number of identical constants allowed for one enum type. - -ida_enum.add_enum (function) - add_enum(idx, name, flag) -> enum_t - Add new enum type. - * if idx==BADADDR then add as the last idx - * if name==nullptr then generate a unique name "enum_%d" - - @param idx: (C++: size_t) - @param name: (C++: const char *) char const * - @param flag: (C++: flags64_t) - -ida_enum.add_enum_member (function) - 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 *) char const * - @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 (function) - del_enum(id) - Delete an enum type. - - @param id: (C++: enum_t) - -ida_enum.del_enum_member (function) - 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) - -ida_enum.enum_member_visitor_t (class) - Proxy of C++ enum_member_visitor_t class. - -ida_enum.enum_member_visitor_t.__disown__ (method) - -ida_enum.enum_member_visitor_t.__init__ (method) - __init__(self) -> enum_member_visitor_t - - @param self: PyObject * - -ida_enum.enum_member_visitor_t.visit_enum_member (method) - visit_enum_member(self, cid, value) -> int - Implements action to take when enum member is visited. - - @param cid: (C++: const_t) - @param value: (C++: uval_t) - @return: nonzero to stop the iteration - -ida_enum.for_all_enum_members (function) - 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 (function) - get_bmask_cmt(id, bmask, repeatable) -> str - - @param id: enum_t - @param bmask: bmask_t - @param repeatable: bool - -ida_enum.get_bmask_name (function) - get_bmask_name(id, bmask) -> str - - @param id: enum_t - @param bmask: bmask_t - -ida_enum.get_enum (function) - get_enum(name) -> enum_t - Get enum by name. - - @param name: (C++: const char *) char const * - -ida_enum.get_enum_cmt (function) - get_enum_cmt(id, repeatable) -> str - Get enum comment. - - @param id: (C++: enum_t) - @param repeatable: (C++: bool) - -ida_enum.get_enum_flag (function) - get_enum_flag(id) -> flags64_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 (function) - get_enum_idx(id) -> uval_t - Get the index in the list of enums. - - @param id: (C++: enum_t) - -ida_enum.get_enum_member (function) - get_enum_member(id, value, serial, mask) -> const_t - Find an enum member by enum, value and bitmask - @note: if 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 (function) - 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 (function) - get_enum_member_by_name(name) -> const_t - Get a reference to an enum member by its name. - - @param name: (C++: const char *) char const * - -ida_enum.get_enum_member_cmt (function) - get_enum_member_cmt(id, repeatable) -> str - Get enum member's comment. - - @param id: (C++: const_t) - @param repeatable: (C++: bool) - -ida_enum.get_enum_member_enum (function) - 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 (function) - get_enum_member_name(id) -> str - Get name of an enum member by const_t. - - @param id: (C++: const_t) - -ida_enum.get_enum_member_serial (function) - get_enum_member_serial(cid) -> uchar - Get serial number of an enum member. - - @param cid: (C++: const_t) - -ida_enum.get_enum_member_value (function) - get_enum_member_value(id) -> uval_t - Get value of an enum member. - - @param id: (C++: const_t) - -ida_enum.get_enum_name (function) - get_enum_name(id) -> str - - @param id: enum_t - -ida_enum.get_enum_name2 (function) - get_enum_name2(id, flags=0) -> str - Get name of enum - - @param id: (C++: enum_t) enum id - @param flags: (C++: int) Enum name flags - -ida_enum.get_enum_qty (function) - get_enum_qty() -> size_t - Get number of declared enum_t types. - -ida_enum.get_enum_size (function) - 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 (function) - get_enum_type_ordinal(id) -> int32 - Get corresponding type ordinal number. - - @param id: (C++: enum_t) - -ida_enum.get_enum_width (function) - 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 (function) - get_first_bmask(enum_id) -> bmask_t - Get first bitmask in the enum (bitfield) - - @param enum_id: (C++: enum_t) id of enum (bitfield) - @return: the smallest bitmask for enum, or DEFMASK - -ida_enum.get_first_enum_member (function) - get_first_enum_member(id, bmask=(bmask_t(-1))) -> uval_t - - @param id: enum_t - @param bmask: bmask_t - -ida_enum.get_first_serial_enum_member (function) - get_first_serial_enum_member(id, value, bmask) -> const_t - - @param id: enum_t - @param value: uval_t - @param bmask: bmask_t - -ida_enum.get_last_bmask (function) - get_last_bmask(enum_id) -> bmask_t - Get last bitmask in the enum (bitfield) - - @param enum_id: (C++: enum_t) id of enum - @return: the biggest bitmask for enum, or DEFMASK - -ida_enum.get_last_enum_member (function) - get_last_enum_member(id, bmask=(bmask_t(-1))) -> uval_t - - @param id: enum_t - @param bmask: bmask_t - -ida_enum.get_last_serial_enum_member (function) - get_last_serial_enum_member(id, value, bmask) -> const_t - - @param id: enum_t - @param value: uval_t - @param bmask: bmask_t - -ida_enum.get_next_bmask (function) - get_next_bmask(enum_id, bmask) -> bmask_t - Get next bitmask in the enum (bitfield) - - @param enum_id: (C++: enum_t) id of enum - @param bmask: (C++: bmask_t) the current bitmask - @return: value of a bitmask with value higher than the specified value, or - DEFMASK - -ida_enum.get_next_enum_member (function) - get_next_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t - - @param id: enum_t - @param value: uval_t - @param bmask: bmask_t - -ida_enum.get_next_serial_enum_member (function) - get_next_serial_enum_member(in_out_serial, first_cid) -> const_t - - @param in_out_serial: uchar * - @param first_cid: const_t - -ida_enum.get_prev_bmask (function) - get_prev_bmask(enum_id, bmask) -> bmask_t - Get prev bitmask in the enum (bitfield) - - @param enum_id: (C++: enum_t) id of enum - @param bmask: (C++: bmask_t) the current bitmask - @return: value of a bitmask with value lower than the specified value, or - DEFMASK - -ida_enum.get_prev_enum_member (function) - get_prev_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t - - @param id: enum_t - @param value: uval_t - @param bmask: bmask_t - -ida_enum.get_prev_serial_enum_member (function) - get_prev_serial_enum_member(in_out_serial, first_cid) -> const_t - - @param in_out_serial: uchar * - @param first_cid: const_t - -ida_enum.getn_enum (function) - getn_enum(idx) -> enum_t - Get enum by its index in the list of enums (0..get_enum_qty()-1). - - @param idx: (C++: size_t) - -ida_enum.is_bf (function) - 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 (function) - is_enum_fromtil(id) -> bool - Does enum come from type library? - - @param id: (C++: enum_t) - -ida_enum.is_enum_hidden (function) - is_enum_hidden(id) -> bool - Is enum collapsed? - - @param id: (C++: enum_t) - -ida_enum.is_ghost_enum (function) - is_ghost_enum(id) -> bool - Is a ghost copy of a local type? - - @param id: (C++: enum_t) - -ida_enum.is_one_bit_mask (function) - is_one_bit_mask(mask) -> bool - Is bitmask one bit? - - @param mask: (C++: bmask_t) - -ida_enum.set_bmask_cmt (function) - set_bmask_cmt(id, bmask, cmt, repeatable) -> bool - - @param id: enum_t - @param bmask: bmask_t - @param cmt: char const * - @param repeatable: bool - -ida_enum.set_bmask_name (function) - set_bmask_name(id, bmask, name) -> bool - - @param id: enum_t - @param bmask: bmask_t - @param name: char const * - -ida_enum.set_enum_bf (function) - 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 (function) - set_enum_cmt(id, cmt, repeatable) -> bool - Set comment for enum type. - - @param id: (C++: enum_t) - @param cmt: (C++: const char *) char const * - @param repeatable: (C++: bool) - -ida_enum.set_enum_flag (function) - set_enum_flag(id, flag) -> bool - Set data representation flags. - - @param id: (C++: enum_t) - @param flag: (C++: flags64_t) - -ida_enum.set_enum_fromtil (function) - 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 (function) - 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 (function) - set_enum_hidden(id, hidden) -> bool - Collapse enum. - - @param id: (C++: enum_t) - @param hidden: (C++: bool) - -ida_enum.set_enum_idx (function) - 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 (function) - set_enum_member_cmt(id, cmt, repeatable) -> bool - Set comment for enum member. - - @param id: (C++: const_t) - @param cmt: (C++: const char *) char const * - @param repeatable: (C++: bool) - -ida_enum.set_enum_member_name (function) - set_enum_member_name(id, name) -> bool - Set name of enum member. - - @param id: (C++: const_t) - @param name: (C++: const char *) char const * - -ida_enum.set_enum_name (function) - set_enum_name(id, name) -> bool - Set name of enum type. - - @param id: (C++: enum_t) - @param name: (C++: const char *) char const * - -ida_enum.set_enum_type_ordinal (function) - 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 (function) - set_enum_width(id, width) -> bool - See comment for get_enum_width() - - @param id: (C++: enum_t) - @param width: (C++: int) - -ida_expr (module) - Functions that deal with C-like expressions and built-in IDC language. - - Functions marked THREAD_SAFE may be called from any thread. No simultaneous - calls should be made for the same variable. We protect only global structures, - individual variables must be protected manually. - -ida_expr.CPL_DEL_MACROS (variable) +ida_entry.rename_entry(ord: int, name: str, flags: int = 0) -> bool + Rename entry point. + + @param ord: ordinal number of the entry point + @param name: name of entry point. If the specified location already has a name, the old name will be appended to a repeatable comment. + @param flags: See AEF_* + @returns success + +ida_entry.set_entry_forwarder(ord: int, name: str, flags: int = 0) -> bool + Set forwarder name for ordinal. + + @param ord: ordinal number of the entry point + @param name: forwarder name for entry point. + @param flags: See AEF_* + @returns success + +ida_expr + thread safe function. may be called + +ida_expr.CPL_DEL_MACROS delete macros at the end of compilation -ida_expr.CPL_ONLY_SAFE (variable) +ida_expr.CPL_ONLY_SAFE allow calls of only thread-safe functions -ida_expr.CPL_USE_LABELS (variable) +ida_expr.CPL_USE_LABELS allow program labels in the script -ida_expr.EXTFUN_BASE (variable) +ida_expr.EXTFUN_BASE requires open database. -ida_expr.EXTFUN_NORET (variable) - does not return. the interpreter may clean up its state before calling it. +ida_expr.EXTFUN_NORET + does not return. the interpreter may clean up its state before calling it. + -ida_expr.EXTFUN_SAFE (variable) - thread safe function. may be called from any thread. +ida_expr.EXTFUN_SAFE + thread safe function. may be called from any thread. + -ida_expr.IDC_LANG_EXT (variable) +ida_expr.IDC_LANG_EXT IDC script extension. -ida_expr.VARSLICE_SINGLE (variable) +ida_expr.VARSLICE_SINGLE return single index (i2 is ignored) -ida_expr.VREF_COPY (variable) +ida_expr.VREF_COPY copy the result to the input var (v) -ida_expr.VREF_LOOP (variable) +ida_expr.VREF_LOOP dereference until we get a non VT_REF -ida_expr.VREF_ONCE (variable) +ida_expr.VREF_ONCE dereference only once, do not loop -ida_expr.VT_FLOAT (variable) +ida_expr.VT_FLOAT Floating point (see idc_value_t::e) -ida_expr.VT_FUNC (variable) +ida_expr.VT_FUNC Function (see idc_value_t::funcidx) -ida_expr.VT_INT64 (variable) +ida_expr.VT_INT64 i64 -ida_expr.VT_LONG (variable) +ida_expr.VT_LONG Integer (see idc_value_t::num) -ida_expr.VT_OBJ (variable) +ida_expr.VT_OBJ Object (see idc_value_t::obj) -ida_expr.VT_PVOID (variable) +ida_expr.VT_PVOID void * -ida_expr.VT_REF (variable) +ida_expr.VT_REF Reference. -ida_expr.VT_STR (variable) +ida_expr.VT_STR String (see qstr() and similar functions) -ida_expr.VT_WILD (variable) - 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.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._IdcFunction (class) +ida_expr._IdcFunction Internal class that calls pyw_call_idc_func() with a context -ida_expr._IdcFunction.__call__ (method) +ida_expr._IdcFunction.__call__(self, args, res) -ida_expr._IdcFunction.__init__ (method) +ida_expr._IdcFunction.__init__(self, ctxptr) -ida_expr.add_idc_class (function) - add_idc_class(name, super=None) -> idc_class_t * - Create a new IDC class. +ida_expr.add_idc_class(name: str, super: "idc_class_t const *" = None) -> "idc_class_t *" + Create a new IDC class. + + @param name: name of the new class + @param super: the base class for the new class. if the new class is not based on any other class, pass nullptr + @returns 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(name, fp, args, defvals = , flags = 0) + Add an IDC function. This function does not modify the predefined kernel functions. Example: + error_t idaapi myfunc5(idc_value_t *argv, idc_value_t *res) + + msg("myfunc is called with arg0=%a and arg1=%s\n", argv[0].num, argv[1].str); + res->num = 5; // let's return 5 + return eOk; + + const char myfunc5_args[] = { VT_LONG, VT_STR, 0 }; + const ext_idcfunc_t myfunc_desc = { "MyFunc5", myfunc5, myfunc5_args, nullptr, 0, EXTFUN_BASE }; + + after this: + + + there is a new IDC function which can be called like this: + "test"); - @param name: (C++: const char *) name of the new class - @param super: (C++: const idc_class_t *) the base class for the new class. if the new class is not based on - any other class, pass nullptr - @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 (function) - Extends the IDC language by exposing a new IDC function that is backed up by a Python function - 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\n", 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, - nullptr, 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"); - - @note: If the function already exists, it will be replaced by the new function - @return: success + + @returns success -ida_expr.add_idc_gvar (function) - add_idc_gvar(name) -> idc_value_t - Add global IDC variable. - - @param name: (C++: const char *) name of the global variable - @return: pointer to the created variable or existing variable. NB: the returned - pointer is valid until a new global var is added. +ida_expr.add_idc_gvar(name: str) -> "idc_value_t *" + Add global IDC variable. + + @param name: name of the global variable + @returns pointer to the created variable or existing variable. NB: the returned pointer is valid until a new global var is added. -ida_expr.call_idc_func__ (function) +ida_expr.call_idc_func__(*args) -ida_expr.compile_idc_file (function) - compile_idc_file(nonnul_line) -> str - - @param nonnul_line: char const * +ida_expr.compile_idc_file(nonnul_line: str) -> str -ida_expr.compile_idc_snippet (function) - compile_idc_snippet(func, text, resolver=None, only_safe_funcs=False) -> str - Compile text with IDC statements. - - @param func: (C++: const char *) name of the function to create out of the snippet - @param text: (C++: const char *) text to compile - @param resolver: (C++: idc_resolver_t *) callback object to get values of undefined variables This - object will be called if IDC function contains references to - undefined variables. May be nullptr. - @param only_safe_funcs: (C++: bool) if true, any calls to functions without EXTFUN_SAFE flag - will lead to a compilation error. +ida_expr.compile_idc_snippet(func: str, text: str, resolver: "idc_resolver_t *" = None, only_safe_funcs: bool = False) -> str + Compile text with IDC statements. + + @param func: name of the function to create out of the snippet + @param text: text to compile + @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 nullptr. + @param only_safe_funcs: if true, any calls to functions without EXTFUN_SAFE flag will lead to a compilation error. @retval true: ok @retval false: error, see errbuf -ida_expr.compile_idc_text (function) - compile_idc_text(nonnul_line) -> str - - @param nonnul_line: char const * +ida_expr.compile_idc_text(nonnul_line: str) -> str -ida_expr.copy_idcv (function) - 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 &) idc_value_t const & +ida_expr.copy_idcv(dst: "idc_value_t", src: "idc_value_t") -> "error_t" + Copy 'src' to 'dst'. For idc objects only a reference is copied. + -ida_expr.create_idcv_ref (function) - create_idcv_ref(ref, v) -> bool - Create a variable reference. Currently only references to global variables can - be created. - - @param ref: (C++: idc_value_t *) ptr to the result - @param v: (C++: const idc_value_t *) variable to reference - @return: success +ida_expr.create_idcv_ref(ref: "idc_value_t", v: "idc_value_t") -> bool + Create a variable reference. Currently only references to global variables can be created. + + @param ref: ptr to the result + @param v: variable to reference + @returns success -ida_expr.deep_copy_idcv (function) - 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 &) idc_value_t const & +ida_expr.deep_copy_idcv(dst: "idc_value_t", src: "idc_value_t") -> "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 + -ida_expr.del_idc_func (function) - Unregisters the specified IDC function - - Delete an IDC function +ida_expr.del_idc_func(name) + Delete an IDC function + -ida_expr.del_idcv_attr (function) - del_idcv_attr(obj, attr) -> error_t - Delete an object attribute. - - @param obj: (C++: idc_value_t *) variable that holds an object reference - @param attr: (C++: const char *) attribute name - @return: error code, eOk on success +ida_expr.del_idcv_attr(obj: "idc_value_t", attr: str) -> "error_t" + Delete an object attribute. + + @param obj: variable that holds an object reference + @param attr: attribute name + @returns error code, eOk on success -ida_expr.deref_idcv (function) - deref_idcv(v, vref_flags) -> idc_value_t - Dereference a VT_REF variable. - - @param v: (C++: idc_value_t *) variable to dereference - @param vref_flags: (C++: int) Dereference IDC variable flags - @return: pointer to the dereference result or nullptr. If returns nullptr, - qerrno is set to eExecBadRef "Illegal variable reference" +ida_expr.deref_idcv(v: "idc_value_t", vref_flags: int) -> "idc_value_t *" + Dereference a VT_REF variable. + + @param v: variable to dereference + @param vref_flags: Dereference IDC variable flags + @returns pointer to the dereference result or nullptr. If returns nullptr, qerrno is set to eExecBadRef "Illegal variable reference" -ida_expr.eExecThrow (variable) +ida_expr.eExecThrow See return value of idc_func_t. -ida_expr.eval_expr (function) - eval_expr(rv, where, line) -> str - Compile and calculate an expression. - - @param rv: (C++: idc_value_t *) pointer to the result - @param where: (C++: ea_t) 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. - @param line: (C++: const char *) the expression to evaluate +ida_expr.eval_expr(rv: "idc_value_t", where: ida_idaapi.ea_t, line: str) -> str + Compile and calculate an expression. + + @param rv: pointer to the result + @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. + @param line: the expression to evaluate @retval true: ok @retval false: error, see errbuf -ida_expr.eval_idc_expr (function) - 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) - @param line: char const * +ida_expr.eval_idc_expr(rv: "idc_value_t", where: ida_idaapi.ea_t, line: str) -> str + Same as eval_expr(), but will always use the IDC interpreter regardless of the currently installed extlang. + -ida_expr.exec_idc_script (function) - exec_idc_script(result, path, func, args, argsnum) -> str - Compile and execute IDC function(s) from file. - - @param result: (C++: idc_value_t *) ptr to idc_value_t to hold result of the function. If execution - fails, this variable will contain the exception information. You - may pass nullptr if you are not interested in the returned value. - @param path: (C++: const char *) text file containing text of IDC functions - @param func: (C++: const char *) function name to execute - @param args: (C++: const idc_value_t) array of parameters - @param argsnum: (C++: size_t) number of parameters to pass to 'fname' This number should be - equal to number of parameters the function expects. +ida_expr.exec_idc_script(result: "idc_value_t", path: str, func: str, args: "idc_value_t", argsnum: "size_t") -> 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 nullptr if you are not interested in the returned value. + @param path: text file containing text of IDC functions + @param func: function name to execute + @param args: array of parameters + @param argsnum: number of parameters to pass to 'fname' This number should be equal to number of parameters the function expects. @retval true: ok @retval false: error, see errbuf -ida_expr.exec_system_script (function) - exec_system_script(file, complain_if_no_file=True) -> bool - Compile and execute "main" function from system file. - - @param file: (C++: const char *) file name with IDC function(s). The file will be searched using - get_idc_filename(). - @param complain_if_no_file: (C++: bool) * 1: display warning if the file is not found +ida_expr.exec_system_script(file: str, complain_if_no_file: bool = True) -> bool + Compile and execute "main" function from system file. + + @param file: file name with IDC function(s). The file will be searched using get_idc_filename(). + @param complain_if_no_file: * 1: display warning if the file is not found * 0: don't complain if file doesn't exist @retval 1: ok, file is compiled and executed @retval 0: failure, compilation or execution error, warning is displayed -ida_expr.find_idc_class (function) - find_idc_class(name) -> idc_class_t * - Find an existing IDC class by its name. - - @param name: (C++: const char *) name of the class - @return: pointer to the class or nullptr. The returned pointer is valid until a - new call to add_idc_class() +ida_expr.find_idc_class(name: str) -> "idc_class_t *" + Find an existing IDC class by its name. + + @param name: name of the class + @returns pointer to the class or nullptr. The returned pointer is valid until a new call to add_idc_class() -ida_expr.find_idc_func (function) - find_idc_func(prefix, n=0) -> str - - @param prefix: char const * - @param n: int +ida_expr.find_idc_func(prefix: str, n: int = 0) -> str -ida_expr.find_idc_gvar (function) - find_idc_gvar(name) -> idc_value_t - Find an existing global IDC variable by its name. - - @param name: (C++: const char *) name of the global variable - @return: pointer to the variable or nullptr. 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.find_idc_gvar(name: str) -> "idc_value_t *" + Find an existing global IDC variable by its name. + + @param name: name of the global variable + @returns pointer to the variable or nullptr. 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 (function) - first_idcv_attr(obj) -> char const * - - @param obj: idc_value_t const * +ida_expr.first_idcv_attr(obj: "idc_value_t") -> str -ida_expr.free_idcv (function) - 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.free_idcv(v: "idc_value_t") -> None + Free storage used by VT_STR/VT_OBJ IDC variables. After this call the variable has a numeric value 0 + -ida_expr.get_idc_filename (function) - get_idc_filename(file) -> str - Get full name of IDC file name. Search for file in list of include directories, - IDCPATH directory and system directories. - - @param file: (C++: const char *) file name without full path - @return: nullptr is file not found. otherwise returns pointer to buf +ida_expr.get_idc_filename(file: str) -> str + Get full name of IDC file name. Search for file in list of include directories, IDCPATH directory and system directories. + + @param file: file name without full path + @returns nullptr is file not found. otherwise returns pointer to buf -ida_expr.get_idcv_attr (function) - get_idcv_attr(res, obj, attr, may_use_getattr=False) -> error_t - Get an object attribute. - - @param res: (C++: idc_value_t *) buffer for the attribute value - @param obj: (C++: const idc_value_t *) variable that holds an object reference. if obj is nullptr it - searches global variables, then user functions - @param attr: (C++: const char *) attribute name - @param may_use_getattr: (C++: bool) may call getattr functions to calculate the attribute if - it does not exist - @return: error code, eOk on success +ida_expr.get_idcv_attr(res: "idc_value_t", obj: "idc_value_t", attr: str, may_use_getattr: bool = False) -> "error_t" + Get an object attribute. + + @param res: buffer for the attribute value + @param obj: variable that holds an object reference. if obj is nullptr it searches global variables, then user functions + @param attr: attribute name + @param may_use_getattr: may call getattr functions to calculate the attribute if it does not exist + @returns error code, eOk on success -ida_expr.get_idcv_class_name (function) - get_idcv_class_name(obj) -> str - Retrieves the IDC object class name. - - @param obj: (C++: const idc_value_t *) class instance variable - @return: error code, eOk on success +ida_expr.get_idcv_class_name(obj: "idc_value_t") -> str + Retrieves the IDC object class name. + + @param obj: class instance variable + @returns error code, eOk on success -ida_expr.get_idcv_slice (function) - get_idcv_slice(res, v, i1, i2, flags=0) -> error_t - Get slice. - - @param res: (C++: idc_value_t *) output variable that will contain the slice - @param v: (C++: const idc_value_t *) input variable (string or object) - @param i1: (C++: uval_t) slice start index - @param i2: (C++: uval_t) slice end index (excluded) - @param flags: (C++: int) IDC variable slice flags or 0 - @return: eOk if success +ida_expr.get_idcv_slice(res: "idc_value_t", v: "idc_value_t", i1: int, i2: int, flags: int = 0) -> "error_t" + Get slice. + + @param res: output variable that will contain the slice + @param v: input variable (string or object) + @param i1: slice start index + @param i2: slice end index (excluded) + @param flags: IDC variable slice flags or 0 + @returns eOk if success -ida_expr.highlighter_cbs_t (class) - Proxy of C++ highlighter_cbs_t class. +ida_expr.highlighter_cbs_t -ida_expr.highlighter_cbs_t.__disown__ (method) +ida_expr.highlighter_cbs_t.__disown__(self) -ida_expr.highlighter_cbs_t.__init__ (method) - __init__(self) -> highlighter_cbs_t - - @param self: PyObject * +ida_expr.highlighter_cbs_t.__init__(self) -ida_expr.highlighter_cbs_t.cur_block_state (method) - cur_block_state(self) -> int32 +ida_expr.highlighter_cbs_t.cur_block_state(self) -> int -ida_expr.highlighter_cbs_t.prev_block_state (method) - prev_block_state(self) -> int32 +ida_expr.highlighter_cbs_t.prev_block_state(self) -> int -ida_expr.highlighter_cbs_t.set_block_state (method) - set_block_state(self, arg0) - - @param arg0: int32 +ida_expr.highlighter_cbs_t.set_block_state(self, arg0: int) -> None -ida_expr.highlighter_cbs_t.set_style (method) - set_style(self, arg0, arg1, arg2) - - @param arg0: int32 - @param arg1: int32 - @param arg2: enum syntax_highlight_style +ida_expr.highlighter_cbs_t.set_style(self, arg0: int, arg1: int, arg2: "syntax_highlight_style") -> None -ida_expr.idc_global_t (class) - Proxy of C++ idc_global_t class. +ida_expr.idc_global_t -ida_expr.idc_global_t.__init__ (method) - __init__(self) -> idc_global_t - __init__(self, n) -> idc_global_t - - @param n: char const * +ida_expr.idc_global_t.__init__(self, *args) -ida_expr.idc_value_t (class) - Proxy of C++ idc_value_t class. +ida_expr.idc_value_t -ida_expr.idc_value_t.__init__ (method) - __init__(self, n=0) -> idc_value_t - - @param n: sval_t - - __init__(self, r) -> idc_value_t - - @param r: idc_value_t const & - - __init__(self, _str) -> idc_value_t - - @param _str: char const * +ida_expr.idc_value_t.__init__(self, *args) -ida_expr.idc_value_t._create_empty_string (method) - _create_empty_string(self) +ida_expr.idc_value_t._create_empty_string(self) -> None -ida_expr.idc_value_t.c_str (method) - c_str(self) -> char const * +ida_expr.idc_value_t.c_str(self) -> str VT_STR -ida_expr.idc_value_t.clear (method) - clear(self) +ida_expr.idc_value_t.clear(self) -> None See free_idcv() -ida_expr.idc_value_t.create_empty_string (method) - create_empty_string(self) +ida_expr.idc_value_t.create_empty_string(self) -> None -ida_expr.idc_value_t.e (variable) +ida_expr.idc_value_t.e VT_FLOAT -ida_expr.idc_value_t.funcidx (variable) +ida_expr.idc_value_t.funcidx VT_FUNC -ida_expr.idc_value_t.i64 (variable) +ida_expr.idc_value_t.i64 VT_INT64 -ida_expr.idc_value_t.is_convertible (method) - is_convertible(self) -> bool +ida_expr.idc_value_t.is_convertible(self) -> bool Convertible types are VT_LONG, VT_FLOAT, VT_INT64, and VT_STR. -ida_expr.idc_value_t.is_integral (method) - is_integral(self) -> bool - Does value represent a whole number? +ida_expr.idc_value_t.is_integral(self) -> bool + Does value represent a whole number? + -ida_expr.idc_value_t.is_zero (method) - is_zero(self) -> bool +ida_expr.idc_value_t.is_zero(self) -> bool Does value represent the integer 0? -ida_expr.idc_value_t.num (variable) +ida_expr.idc_value_t.num VT_LONG -ida_expr.idc_value_t.pvoid (variable) +ida_expr.idc_value_t.pvoid VT_PVOID -ida_expr.idc_value_t.qstr (method) - qstr(self) -> qstring +ida_expr.idc_value_t.qstr(self) -> str VT_STR - qstr(self) -> qstring const & -ida_expr.idc_value_t.reserve (variable) - internal housekeeping: 64-bit qstring is bigger than 12 bytes +ida_expr.idc_value_t.reserve + VT_STR. -ida_expr.idc_value_t.set_float (method) - set_float(self, f) - - @param f: fpvalue_t const & +ida_expr.idc_value_t.set_float(self, f: "fpvalue_t const &") -> None -ida_expr.idc_value_t.set_int64 (method) - set_int64(self, v) - - @param v: int64 +ida_expr.idc_value_t.set_int64(self, v: "int64") -> None -ida_expr.idc_value_t.set_long (method) - set_long(self, v) - - @param v: sval_t +ida_expr.idc_value_t.set_long(self, v: int) -> None -ida_expr.idc_value_t.set_pvoid (method) - set_pvoid(self, p) - - @param p: void * +ida_expr.idc_value_t.set_pvoid(self, p: "void *") -> None -ida_expr.idc_value_t.set_string (method) - set_string(self, _str, len) - - @param _str: char const * - @param len: size_t - - set_string(self, _str) - - @param _str: char const * +ida_expr.idc_value_t.set_string(self, *args) -> None -ida_expr.idc_value_t.swap (method) - swap(self, v) +ida_expr.idc_value_t.swap(self, v: "idc_value_t") -> None Set this = r and v = this. - - @param v: (C++: idc_value_t &) -ida_expr.idc_value_t.u_str (method) - u_str(self) -> uchar const * +ida_expr.idc_value_t.u_str(self) -> "uchar const *" VT_STR -ida_expr.idc_value_t.vtype (variable) +ida_expr.idc_value_t.vtype IDC value types -ida_expr.idc_values_t (class) - Proxy of C++ qvector< idc_value_t > class. +ida_expr.idc_values_t -ida_expr.idc_values_t.__getitem__ (method) - __getitem__(self, i) -> idc_value_t - - @param i: size_t +ida_expr.idc_values_t.__getitem__(self, i: "size_t") -> "idc_value_t const &" -ida_expr.idc_values_t.__init__ (method) - __init__(self) -> idc_values_t - __init__(self, x) -> idc_values_t - - @param x: qvector< idc_value_t > const & +ida_expr.idc_values_t.__init__(self, *args) -ida_expr.idc_values_t.__len__ (method) - __len__(self) -> size_t +ida_expr.idc_values_t.__len__(self) -> "size_t" -ida_expr.idc_values_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: idc_value_t const & +ida_expr.idc_values_t.__setitem__(self, i: "size_t", v: "idc_value_t") -> None -ida_expr.idc_values_t.at (method) - at(self, _idx) -> idc_value_t - - @param _idx: size_t +ida_expr.idc_values_t.append(self, x: "idc_value_t") -> None -ida_expr.idc_values_t.begin (method) - begin(self) -> idc_value_t +ida_expr.idc_values_t.at(self, _idx: "size_t") -> "idc_value_t const &" -ida_expr.idc_values_t.capacity (method) - capacity(self) -> size_t +ida_expr.idc_values_t.begin(self, *args) -> "qvector< idc_value_t >::const_iterator" -ida_expr.idc_values_t.clear (method) - clear(self) +ida_expr.idc_values_t.capacity(self) -> "size_t" -ida_expr.idc_values_t.empty (method) - empty(self) -> bool +ida_expr.idc_values_t.clear(self) -> None -ida_expr.idc_values_t.end (method) - end(self) -> idc_value_t +ida_expr.idc_values_t.empty(self) -> bool -ida_expr.idc_values_t.erase (method) - erase(self, it) -> idc_value_t - - @param it: qvector< idc_value_t >::iterator - - erase(self, first, last) -> idc_value_t - - @param first: qvector< idc_value_t >::iterator - @param last: qvector< idc_value_t >::iterator +ida_expr.idc_values_t.end(self, *args) -> "qvector< idc_value_t >::const_iterator" -ida_expr.idc_values_t.extract (method) - extract(self) -> idc_value_t +ida_expr.idc_values_t.erase(self, *args) -> "qvector< idc_value_t >::iterator" -ida_expr.idc_values_t.grow (method) - grow(self, x=idc_value_t()) - - @param x: idc_value_t const & +ida_expr.idc_values_t.extend(self, x: "idc_values_t") -> None -ida_expr.idc_values_t.inject (method) - inject(self, s, len) - - @param s: idc_value_t * - @param len: size_t +ida_expr.idc_values_t.extract(self) -> "idc_value_t *" -ida_expr.idc_values_t.insert (method) - insert(self, it, x) -> idc_value_t - - @param it: qvector< idc_value_t >::iterator - @param x: idc_value_t const & +ida_expr.idc_values_t.grow(self, *args) -> None -ida_expr.idc_values_t.pop_back (method) - pop_back(self) +ida_expr.idc_values_t.inject(self, s: "idc_value_t", len: "size_t") -> None -ida_expr.idc_values_t.push_back (method) - push_back(self, x) - - @param x: idc_value_t const & - - push_back(self) -> idc_value_t +ida_expr.idc_values_t.insert(self, it: "idc_value_t", x: "idc_value_t") -> "qvector< idc_value_t >::iterator" -ida_expr.idc_values_t.qclear (method) - qclear(self) +ida_expr.idc_values_t.pop_back(self) -> None -ida_expr.idc_values_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_expr.idc_values_t.push_back(self, *args) -> "idc_value_t &" -ida_expr.idc_values_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: idc_value_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_expr.idc_values_t.qclear(self) -> None -ida_expr.idc_values_t.size (method) - size(self) -> size_t +ida_expr.idc_values_t.reserve(self, cnt: "size_t") -> None -ida_expr.idc_values_t.swap (method) - swap(self, r) - - @param r: qvector< idc_value_t > & +ida_expr.idc_values_t.resize(self, *args) -> None -ida_expr.idc_values_t.truncate (method) - truncate(self) +ida_expr.idc_values_t.size(self) -> "size_t" -ida_expr.idcv_float (function) - idcv_float(v) -> error_t +ida_expr.idc_values_t.swap(self, r: "idc_values_t") -> None + +ida_expr.idc_values_t.truncate(self) -> None + +ida_expr.idcv_float(v: "idc_value_t") -> "error_t" Convert IDC variable to a floating point. - - @param v: (C++: idc_value_t *) -ida_expr.idcv_int64 (function) - 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_int64(v: "idc_value_t") -> "error_t" + Convert IDC variable to a 64bit number. + + @returns v = 0 if impossible to convert to int64 -ida_expr.idcv_long (function) - 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_long(v: "idc_value_t") -> "error_t" + Convert IDC variable to a long (32/64bit) number. + + @returns v = 0 if impossible to convert to long -ida_expr.idcv_num (function) - 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 +ida_expr.idcv_num(v: "idc_value_t") -> "error_t" + Convert IDC variable to a long number. + + @returns * 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 (function) - idcv_object(v, icls=None) -> error_t - Create an IDC object. The original value of 'v' is discarded (freed). - - @param v: (C++: idc_value_t *) variable to hold the object. any previous value will be cleaned - @param icls: (C++: const idc_class_t *) ptr to the desired class. nullptr means "object" class this ptr - must be returned by add_idc_class() or find_idc_class() - @return: always eOk +ida_expr.idcv_object(v: "idc_value_t", icls: "idc_class_t const *" = 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 + @param icls: ptr to the desired class. nullptr means "object" class this ptr must be returned by add_idc_class() or find_idc_class() + @returns always eOk -ida_expr.idcv_string (function) - idcv_string(v) -> error_t +ida_expr.idcv_string(v: "idc_value_t") -> "error_t" Convert IDC variable to a text string. - - @param v: (C++: idc_value_t *) -ida_expr.last_idcv_attr (function) - last_idcv_attr(obj) -> char const * - - @param obj: idc_value_t const * +ida_expr.last_idcv_attr(obj: "idc_value_t") -> str -ida_expr.move_idcv (function) - 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.move_idcv(dst: "idc_value_t", src: "idc_value_t") -> "error_t" + Move 'src' to 'dst'. This function is more effective than copy_idcv since it never copies big amounts of data. + -ida_expr.next_idcv_attr (function) - next_idcv_attr(obj, attr) -> char const * - - @param obj: idc_value_t const * - @param attr: char const * +ida_expr.next_idcv_attr(obj: "idc_value_t", attr: str) -> str -ida_expr.prev_idcv_attr (function) - prev_idcv_attr(obj, attr) -> char const * - - @param obj: idc_value_t const * - @param attr: char const * +ida_expr.prev_idcv_attr(obj: "idc_value_t", attr: str) -> str -ida_expr.print_idcv (function) - print_idcv(v, name=None, indent=0) -> str +ida_expr.print_idcv(v: "idc_value_t", name: str = None, indent: int = 0) -> str Get text representation of idc_value_t. - - @param v: (C++: const idc_value_t &) idc_value_t const & - @param name: (C++: const char *) char const * - @param indent: (C++: int) -ida_expr.py_add_idc_func (function) - py_add_idc_func(name, fp_ptr, args, defvals, flags) -> bool - - @param name: char const * - @param fp_ptr: size_t - @param args: char const * - @param defvals: idc_values_t const & - @param flags: int +ida_expr.py_add_idc_func(name: str, fp_ptr: "size_t", args: str, defvals: "idc_values_t", flags: int) -> bool -ida_expr.py_get_call_idc_func (function) - py_get_call_idc_func() -> size_t +ida_expr.py_get_call_idc_func() -> "size_t" -ida_expr.pyw_convert_defvals (function) - pyw_convert_defvals(out, py_seq) -> bool - - @param out: idc_values_t * - @param py_seq: PyObject * +ida_expr.pyw_convert_defvals(out: "idc_values_t", py_seq: "PyObject *") -> bool -ida_expr.pyw_register_idc_func (function) - pyw_register_idc_func(name, args, py_fp) -> size_t - - @param name: char const * - @param args: char const * - @param py_fp: PyObject * +ida_expr.pyw_register_idc_func(name: str, args: str, py_fp: "PyObject *") -> "size_t" -ida_expr.pyw_unregister_idc_func (function) - pyw_unregister_idc_func(ctxptr) -> bool - - @param ctxptr: size_t +ida_expr.pyw_unregister_idc_func(ctxptr: "size_t") -> bool -ida_expr.set_header_path (function) - 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: (C++: const char *) list of directories to add (separated by ';') may be nullptr, in - this case nothing is added - @param add: (C++: bool) true: append. false: remove old paths. +ida_expr.set_header_path(path: str, add: bool) -> 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 nullptr, in this case nothing is added + @param add: true: append. false: remove old paths. @retval true: success @retval false: no memory -ida_expr.set_idcv_attr (function) - set_idcv_attr(obj, attr, value, may_use_setattr=False) -> error_t - Set an object attribute. - - @param obj: (C++: idc_value_t *) variable that holds an object reference. if obj is nullptr then it - tries to modify a global variable with the attribute name - @param attr: (C++: const char *) attribute name - @param value: (C++: const idc_value_t &) new attribute value - @param may_use_setattr: (C++: bool) may call setattr functions for the class - @return: error code, eOk on success +ida_expr.set_idcv_attr(obj: "idc_value_t", attr: str, value: "idc_value_t", may_use_setattr: bool = False) -> "error_t" + Set an object attribute. + + @param obj: variable that holds an object reference. if obj is nullptr then it tries to modify a global variable with the attribute name + @param attr: attribute name + @param value: new attribute value + @param may_use_setattr: may call setattr functions for the class + @returns error code, eOk on success -ida_expr.set_idcv_slice (function) - set_idcv_slice(v, i1, i2, _in, flags=0) -> error_t - Set slice. - - @param v: (C++: idc_value_t *) variable to modify (string or object) - @param i1: (C++: uval_t) slice start index - @param i2: (C++: uval_t) slice end index (excluded) - @param in: (C++: const idc_value_t &) new value for the slice - @param flags: (C++: int) IDC variable slice flags or 0 - @return: eOk on success +ida_expr.set_idcv_slice(v: "idc_value_t", i1: int, i2: int, _in: "idc_value_t", flags: int = 0) -> "error_t" + Set slice. + + @param v: variable to modify (string or object) + @param i1: slice start index + @param i2: slice end index (excluded) + @param flags: IDC variable slice flags or 0 + @returns eOk on success -ida_expr.swap_idcvs (function) - swap_idcvs(v1, v2) +ida_expr.swap_idcvs(v1: "idc_value_t", v2: "idc_value_t") -> None Swap 2 variables. - - @param v1: (C++: idc_value_t *) - @param v2: (C++: idc_value_t *) -ida_expr.throw_idc_exception (function) - 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: (C++: idc_value_t *) object to hold the exception object - @param desc: (C++: const char *) exception description - @return: eExecThrow +ida_expr.throw_idc_exception(r: "idc_value_t", desc: str) -> "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 + @param desc: exception description + @returns eExecThrow -ida_fixup (module) +ida_fixup Functions that deal with fixup information. - A loader should setup fixup information using set_fixup(). + A loader should setup fixup information using set_fixup(). + -ida_fixup.FIXUPF_CREATED (variable) +ida_fixup.FIXUPF_CREATED fixup was not present in the input file -ida_fixup.FIXUPF_EXTDEF (variable) - 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_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 (variable) - 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_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 (variable) - fixup is relative to the linear address `base'. Otherwise fixup is relative to - the start of the segment with `sel' selector. +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 (variable) +ida_fixup.FIXUPF_UNUSED fixup is ignored by IDA * disallows the kernel to convert operands - * this fixup is not used during output + * this fixup is not used during output + + + -ida_fixup.FIXUP_CUSTOM (variable) +ida_fixup.FIXUP_CUSTOM start of the custom types range -ida_fixup.FIXUP_HI16 (variable) +ida_fixup.FIXUP_HI16 high 16 bits of 32bit offset -ida_fixup.FIXUP_HI8 (variable) +ida_fixup.FIXUP_HI8 high 8 bits of 16bit offset -ida_fixup.FIXUP_LOW16 (variable) +ida_fixup.FIXUP_LOW16 low 16 bits of 32bit offset -ida_fixup.FIXUP_LOW8 (variable) +ida_fixup.FIXUP_LOW8 low 8 bits of 16bit offset -ida_fixup.FIXUP_OFF16 (variable) +ida_fixup.FIXUP_OFF16 16-bit offset -ida_fixup.FIXUP_OFF16S (variable) +ida_fixup.FIXUP_OFF16S 16-bit signed offset -ida_fixup.FIXUP_OFF32 (variable) +ida_fixup.FIXUP_OFF32 32-bit offset -ida_fixup.FIXUP_OFF32S (variable) +ida_fixup.FIXUP_OFF32S 32-bit signed offset -ida_fixup.FIXUP_OFF64 (variable) +ida_fixup.FIXUP_OFF64 64-bit offset -ida_fixup.FIXUP_OFF8 (variable) +ida_fixup.FIXUP_OFF8 8-bit offset -ida_fixup.FIXUP_OFF8S (variable) +ida_fixup.FIXUP_OFF8S 8-bit signed offset -ida_fixup.FIXUP_PTR16 (variable) - 32-bit long pointer (16-bit base:16-bit offset) +ida_fixup.FIXUP_PTR16 + 32-bit long pointer (16-bit base:16-bit offset) + -ida_fixup.FIXUP_PTR32 (variable) +ida_fixup.FIXUP_PTR32 48-bit pointer (16-bit base:32-bit offset) -ida_fixup.FIXUP_SEG16 (variable) +ida_fixup.FIXUP_SEG16 16-bit base-logical segment base (selector) -ida_fixup.V695_FIXUP_VHIGH (variable) +ida_fixup.V695_FIXUP_VHIGH obsolete -ida_fixup.V695_FIXUP_VLOW (variable) +ida_fixup.V695_FIXUP_VLOW obsolete -ida_fixup.calc_fixup_size (function) - calc_fixup_size(type) -> int - Calculate size of fixup in bytes (the number of bytes the fixup patches) +ida_fixup.calc_fixup_size(type: "fixup_type_t") -> int + Calculate size of fixup in bytes (the number of bytes the fixup patches) + @retval -1: means error - - @param type: (C++: fixup_type_t) -ida_fixup.contains_fixups (function) - contains_fixups(ea, size) -> bool +ida_fixup.contains_fixups(ea: ida_idaapi.ea_t, size: "asize_t") -> bool Does the specified address range contain any fixup information? - - @param ea: (C++: ea_t) - @param size: (C++: asize_t) -ida_fixup.del_fixup (function) - del_fixup(source) +ida_fixup.del_fixup(source: ida_idaapi.ea_t) -> None Delete fixup information. - - @param source: (C++: ea_t) -ida_fixup.exists_fixup (function) - exists_fixup(source) -> bool +ida_fixup.exists_fixup(source: ida_idaapi.ea_t) -> bool Check that a fixup exists at the given address. - - @param source: (C++: ea_t) -ida_fixup.find_custom_fixup (function) - find_custom_fixup(name) -> fixup_type_t - Get id of a custom fixup handler. - - @param name: (C++: const char *) name of the custom fixup handler - @return: id with FIXUP_CUSTOM bit set or 0 +ida_fixup.find_custom_fixup(name: str) -> "fixup_type_t" -ida_fixup.fixup_data_t (class) - Proxy of C++ fixup_data_t class. +ida_fixup.fixup_data_t -ida_fixup.fixup_data_t.__init__ (method) - __init__(self) -> fixup_data_t - __init__(self, type_, flags_=0) -> fixup_data_t - - @param type_: fixup_type_t - @param flags_: uint32 +ida_fixup.fixup_data_t.__init__(self, *args) -ida_fixup.fixup_data_t.calc_size (method) - calc_size(self) -> int +ida_fixup.fixup_data_t.calc_size(self) -> int calc_fixup_size() -ida_fixup.fixup_data_t.clr_extdef (method) - clr_extdef(self) +ida_fixup.fixup_data_t.clr_extdef(self) -> None -ida_fixup.fixup_data_t.clr_unused (method) - clr_unused(self) +ida_fixup.fixup_data_t.clr_unused(self) -> None -ida_fixup.fixup_data_t.displacement (variable) +ida_fixup.fixup_data_t.displacement displacement (offset from the target) -ida_fixup.fixup_data_t.get (method) - get(self, source) -> bool +ida_fixup.fixup_data_t.get(self, source: ida_idaapi.ea_t) -> bool get_fixup() - - @param source: (C++: ea_t) -ida_fixup.fixup_data_t.get_base (method) - get_base(self) -> ea_t - Get base of fixup. - @note: The target is calculated as `get_base() + off`. - @see: FIXUPF_REL +ida_fixup.fixup_data_t.get_base(self) -> ida_idaapi.ea_t + Get base of fixup. + -ida_fixup.fixup_data_t.get_desc (method) - get_desc(self, source) -> char const * +ida_fixup.fixup_data_t.get_desc(self, source: ida_idaapi.ea_t) -> str get_fixup_desc() - - @param source: (C++: ea_t) -ida_fixup.fixup_data_t.get_flags (method) - get_flags(self) -> uint32 +ida_fixup.fixup_data_t.get_flags(self) -> int Fixup flags Fixup flags. -ida_fixup.fixup_data_t.get_handler (method) - get_handler(self) -> fixup_handler_t const * +ida_fixup.fixup_data_t.get_handler(self) -> "fixup_handler_t const *" get_fixup_handler() -ida_fixup.fixup_data_t.get_type (method) - get_type(self) -> fixup_type_t +ida_fixup.fixup_data_t.get_type(self) -> "fixup_type_t" Fixup type Types of fixups. -ida_fixup.fixup_data_t.get_value (method) - get_value(self, ea) -> uval_t +ida_fixup.fixup_data_t.get_value(self, ea: ida_idaapi.ea_t) -> int get_fixup_value() - - @param ea: (C++: ea_t) -ida_fixup.fixup_data_t.has_base (method) - has_base(self) -> bool +ida_fixup.fixup_data_t.has_base(self) -> bool Is fixup relative? -ida_fixup.fixup_data_t.is_custom (method) - is_custom(self) -> bool +ida_fixup.fixup_data_t.is_custom(self) -> bool is_fixup_custom() -ida_fixup.fixup_data_t.is_extdef (method) - is_extdef(self) -> bool +ida_fixup.fixup_data_t.is_extdef(self) -> bool -ida_fixup.fixup_data_t.is_unused (method) - is_unused(self) -> bool +ida_fixup.fixup_data_t.is_unused(self) -> bool -ida_fixup.fixup_data_t.off (variable) - target offset - @note: The target is calculated as `get_base() + off`. +ida_fixup.fixup_data_t.off + target offset + -ida_fixup.fixup_data_t.patch_value (method) - patch_value(self, ea) -> bool +ida_fixup.fixup_data_t.patch_value(self, ea: ida_idaapi.ea_t) -> bool patch_fixup_value() - - @param ea: (C++: ea_t) -ida_fixup.fixup_data_t.sel (variable) - selector of the target segment. BADSEL means an absolute (zero based) target. - @see: FIXUPF_REL +ida_fixup.fixup_data_t.sel + selector of the target segment. BADSEL means an absolute (zero based) target. + -ida_fixup.fixup_data_t.set (method) - set(self, source) +ida_fixup.fixup_data_t.set(self, source: ida_idaapi.ea_t) -> None set_fixup() - - @param source: (C++: ea_t) -ida_fixup.fixup_data_t.set_base (method) - set_base(self, new_base) - Set base of fixup. The target should be set before a call of this function. - - @param new_base: (C++: ea_t) +ida_fixup.fixup_data_t.set_base(self, new_base: ida_idaapi.ea_t) -> None + Set base of fixup. The target should be set before a call of this function. + -ida_fixup.fixup_data_t.set_extdef (method) - set_extdef(self) +ida_fixup.fixup_data_t.set_extdef(self) -> None -ida_fixup.fixup_data_t.set_sel (method) - set_sel(self, seg) - - @param seg: segment_t const * +ida_fixup.fixup_data_t.set_sel(self, seg: "segment_t const *") -> None -ida_fixup.fixup_data_t.set_target_sel (method) - set_target_sel(self) - Set selector of fixup to the target. The target should be set before a call of - this function. +ida_fixup.fixup_data_t.set_target_sel(self) -> None + Set selector of fixup to the target. The target should be set before a call of this function. + -ida_fixup.fixup_data_t.set_type (method) - set_type(self, type_) - - @param type_: fixup_type_t +ida_fixup.fixup_data_t.set_type(self, type_: "fixup_type_t") -> None -ida_fixup.fixup_data_t.set_type_and_flags (method) - set_type_and_flags(self, type_, flags_=0) - - @param type_: fixup_type_t - @param flags_: uint32 +ida_fixup.fixup_data_t.set_type_and_flags(self, type_: "fixup_type_t", flags_: int = 0) -> None -ida_fixup.fixup_data_t.set_unused (method) - set_unused(self) +ida_fixup.fixup_data_t.set_unused(self) -> None -ida_fixup.fixup_data_t.was_created (method) - was_created(self) -> bool +ida_fixup.fixup_data_t.was_created(self) -> bool Is fixup artificial? -ida_fixup.fixup_info_t (class) - Proxy of C++ fixup_info_t class. +ida_fixup.fixup_info_t -ida_fixup.fixup_info_t.__init__ (method) - __init__(self) -> fixup_info_t +ida_fixup.fixup_info_t.__init__(self) -ida_fixup.gen_fix_fixups (function) - 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.gen_fix_fixups(_from: ida_idaapi.ea_t, to: ida_idaapi.ea_t, size: "asize_t") -> None + 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). + -ida_fixup.get_first_fixup_ea (function) - get_first_fixup_ea() -> ea_t +ida_fixup.get_first_fixup_ea() -> ida_idaapi.ea_t -ida_fixup.get_fixup (function) - get_fixup(fd, source) -> bool +ida_fixup.get_fixup(fd: "fixup_data_t", source: ida_idaapi.ea_t) -> bool Get fixup information. - - @param fd: (C++: fixup_data_t *) - @param source: (C++: ea_t) -ida_fixup.get_fixup_desc (function) - get_fixup_desc(source, fd) -> str +ida_fixup.get_fixup_desc(source: ida_idaapi.ea_t, fd: "fixup_data_t") -> str Get FIXUP description comment. - - @param source: (C++: ea_t) - @param fd: (C++: const fixup_data_t &) fixup_data_t const & -ida_fixup.get_fixup_handler (function) - get_fixup_handler(type) -> fixup_handler_t const * +ida_fixup.get_fixup_handler(type: "fixup_type_t") -> "fixup_handler_t const *" Get handler of standard or custom fixup. - - @param type: (C++: fixup_type_t) -ida_fixup.get_fixup_value (function) - 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 - `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. - - @param ea: (C++: ea_t) address to get fixup bytes from, the size of the fixup bytes depends - on the fixup type. - @see: fixup_handler_t::size - @param type: (C++: fixup_type_t) fixup type +ida_fixup.get_fixup_value(ea: ida_idaapi.ea_t, type: "fixup_type_t") -> int + 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 `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. + + @param ea: address to get fixup bytes from, the size of the fixup bytes depends on the fixup type. + @param type: fixup type @retval operand: value -ida_fixup.get_fixups (function) - get_fixups(out, ea, size) -> bool - - @param out: fixups_t * - @param ea: ea_t - @param size: asize_t +ida_fixup.get_fixups(out: "fixups_t *", ea: ida_idaapi.ea_t, size: "asize_t") -> bool -ida_fixup.get_next_fixup_ea (function) - get_next_fixup_ea(ea) -> ea_t - Find next address with fixup information - - @param ea: (C++: ea_t) current address - @return: the next address with fixup information, or BADADDR +ida_fixup.get_next_fixup_ea(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t -ida_fixup.get_prev_fixup_ea (function) - get_prev_fixup_ea(ea) -> ea_t - Find previous address with fixup information - - @param ea: (C++: ea_t) current address - @return: the previous address with fixup information, or BADADDR +ida_fixup.get_prev_fixup_ea(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t -ida_fixup.handle_fixups_in_macro (function) - handle_fixups_in_macro(ri, ea, other, macro_reft_and_flags) -> bool - Handle two fixups in a macro. We often combine two instruction that load parts - of a value into one macro instruction. For example: - ARM: ADRP X0, #var@PAGE - ADD X0, X0, #var@PAGEOFF --> ADRL X0, var - MIPS: lui $v0, %hi(var) - addiu $v0, $v0, %lo(var) --> la $v0, var - When applying the fixups that fall inside such a macro, we should convert them - to one refinfo. This function does exactly that. It should be called from the - apply() callback of a custom fixup. +ida_fixup.handle_fixups_in_macro(ri: "refinfo_t", ea: ida_idaapi.ea_t, other: "fixup_type_t", macro_reft_and_flags: int) -> bool + Handle two fixups in a macro. We often combine two instruction that load parts of a value into one macro instruction. For example: + ADRP X0, #var@PAGE + ADD X0, X0, #var@PAGEOFF --> ADRL X0, var + lui $v0, %hi(var) + addiu $v0, $v0, %lo(var) --> la $v0, var - @param ri: (C++: refinfo_t *) - @param ea: (C++: ea_t) - @param other: (C++: fixup_type_t) - @param macro_reft_and_flags: (C++: uint32) - @return: success ('false' means that RI was not changed) + + + @returns success ('false' means that RI was not changed) -ida_fixup.is_fixup_custom (function) - is_fixup_custom(type) -> bool +ida_fixup.is_fixup_custom(type: "fixup_type_t") -> bool Is fixup processed by processor module? - - @param type: (C++: fixup_type_t) -ida_fixup.patch_fixup_value (function) - 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. - - @param ea: (C++: ea_t) address where data are changed, the size of the changed data depends - on the fixup type. - @see: fixup_handler_t::size - @param fd: (C++: const fixup_data_t &) fixup data - @retval false: the fixup bytes do not fit (e.g. `fd->off' is greater than - 0xFFFFFFC for BRANCH26). The database is changed even in this - case. +ida_fixup.patch_fixup_value(ea: ida_idaapi.ea_t, fd: "fixup_data_t") -> 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. + + @param ea: address where data are changed, the size of the changed data depends on the fixup type. + @param fd: fixup data + @retval false: the fixup bytes do not fit (e.g. `fd->off` is greater than 0xFFFFFFC for BRANCH26). The database is changed even in this case. -ida_fixup.set_fixup (function) - 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: (C++: ea_t) the fixup source address, i.e. the address modified by the fixup - @param fd: (C++: const fixup_data_t &) fixup data +ida_fixup.set_fixup(source: ida_idaapi.ea_t, fd: "fixup_data_t") -> None + 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 + @param fd: fixup data -ida_fpro (module) +ida_fpro System independent counterparts of FILE* related functions from Clib. - You should not use C standard I/O functions in your modules. The reason: Each - module compiled with Borland (and statically linked to Borland's library) will - host a copy of the FILE * information. - - So, if you open a file in the plugin and pass the handle to the kernel, the - kernel will not be able to use it. - - If you really need to use the standard functions, define - USE_STANDARD_FILE_FUNCTIONS. In this case do not mix them with q... functions. + You should not use C standard I/O functions in your modules. The reason: Each module compiled with Borland (and statically linked to Borland's library) will host a copy of the FILE * information. + So, if you open a file in the plugin and pass the handle to the kernel, the kernel will not be able to use it. + If you really need to use the standard functions, define USE_STANDARD_FILE_FUNCTIONS. In this case do not mix them with q... functions. + -ida_fpro.qfile_t (class) +ida_fpro.qfclose(fp: "FILE *") -> int + +ida_fpro.qfile_t A helper class to work with FILE related functions. -ida_fpro.qfile_t.__init__ (method) - __init__(self, rhs) -> qfile_t - - @param rhs: qfile_t const & - - __init__(self, pycapsule=None) -> qfile_t - - @param pycapsule: PyObject * +ida_fpro.qfile_t.__init__(self, *args) -ida_fpro.qfile_t.close (method) - close(self) +ida_fpro.qfile_t.close(self) Closes the file -ida_fpro.qfile_t.filename (method) - filename(self) -> PyObject * +ida_fpro.qfile_t.filename(self) -> "PyObject *" -ida_fpro.qfile_t.flush (method) - flush(self) -> int +ida_fpro.qfile_t.flush(self) -ida_fpro.qfile_t.from_capsule (method) - from_capsule(pycapsule) -> qfile_t - - @param pycapsule: PyObject * +ida_fpro.qfile_t.from_capsule(pycapsule: "PyObject *") -> "qfile_t *" -ida_fpro.qfile_t.from_fp (method) - from_fp(fp) -> qfile_t - - @param fp: FILE * +ida_fpro.qfile_t.from_fp(fp: "FILE *") -> "qfile_t *" -ida_fpro.qfile_t.get_byte (method) - get_byte(self) -> PyObject * +ida_fpro.qfile_t.get_byte(self) Reads a single byte from the file. Returns None if EOF or the read byte -ida_fpro.qfile_t.get_fp (method) - get_fp(self) -> FILE * +ida_fpro.qfile_t.get_fp(self) -> "FILE *" -ida_fpro.qfile_t.gets (method) - gets(self, size) -> PyObject * +ida_fpro.qfile_t.gets(self, len) Reads a line from the input file. Returns the read line or None - @param size: int + @param len: the maximum line length -ida_fpro.qfile_t.open (method) - open(self, filename, mode) -> bool +ida_fpro.qfile_t.open(self, filename, mode) Opens a file @param filename: the file name @param mode: The mode string, ala fopen() style @return: Boolean -ida_fpro.qfile_t.opened (method) - opened(self) -> bool +ida_fpro.qfile_t.opened(self) Checks if the file is opened or not -ida_fpro.qfile_t.put_byte (method) - put_byte(self, chr) -> int +ida_fpro.qfile_t.put_byte(self) Writes a single byte to the file - @param chr: int + @param chr: the byte value -ida_fpro.qfile_t.puts (method) - puts(self, str) -> int - - @param str: char const * +ida_fpro.qfile_t.puts(self, str: str) -> int -ida_fpro.qfile_t.read (method) - read(self, size) -> PyObject * +ida_fpro.qfile_t.read(self, size) Reads from the file. Returns the buffer or None - @param size: int + @param size: the maximum number of bytes to read + @return: a str, or None -ida_fpro.qfile_t.readbytes (method) - readbytes(self, size, big_endian) -> PyObject * +ida_fpro.qfile_t.readbytes(self, size, big_endian) Similar to read() but it respect the endianness - @param size: int - @param big_endian: bool + @param size: the maximum number of bytes to read + @param big_endian: endianness + @return a str, or None -ida_fpro.qfile_t.seek (method) - seek(self, offset, whence=SEEK_SET) -> int +ida_fpro.qfile_t.seek(self, offset, whence = ida_idaapi.SEEK_SET) Set input source position - @param offset: int64 - @param whence: int + @param offset: the seek offset + @param whence: the position to seek from @return: the new position (not 0 as fseek!) -ida_fpro.qfile_t.size (method) - size(self) -> int64 +ida_fpro.qfile_t.size(self) -> "int64" -ida_fpro.qfile_t.tell (method) - tell(self) -> int64 +ida_fpro.qfile_t.tell(self) Returns the current position -ida_fpro.qfile_t.tmpfile (method) - tmpfile() -> qfile_t +ida_fpro.qfile_t.tmpfile() A static method to construct an instance using a temporary file -ida_fpro.qfile_t.write (method) - write(self, py_buf) -> int +ida_fpro.qfile_t.write(self, buf) Writes to the file. Returns 0 or the number of bytes written - @param py_buf: PyObject * + @param buf: the str to write + @return: result code -ida_fpro.qfile_t.writebytes (method) - writebytes(self, py_buf, big_endian) -> int +ida_fpro.qfile_t.writebytes(self, size, big_endian) Similar to write() but it respect the endianness - @param py_buf: PyObject * - @param big_endian: bool + @param buf: the str to write + @param big_endian: endianness + @return: result code -ida_fpro.qfile_t_from_capsule (function) - qfile_t_from_capsule(pycapsule) -> qfile_t +ida_frame + Routines to manipulate function stack frames, stack variables, register variables and local labels. - @param pycapsule: PyObject * - -ida_fpro.qfile_t_from_fp (function) - qfile_t_from_fp(fp) -> qfile_t - - @param fp: FILE * - -ida_fpro.qfile_t_tmpfile (function) - qfile_t_tmpfile() -> qfile_t - -ida_frame (module) - Routines to manipulate function stack frames, stack variables, register - variables and local labels. - - The frame is represented as a structure: - +------------------------------------------------+ + The frame is represented as a structure: + +------------------------------------------------+ | function arguments | +------------------------------------------------+ | return address (isn't stored in func_t) | @@ -23789,1560 +15623,1117 @@ ida_frame (module) | | +------------------------------------------------+ <- SP - To access the structure of a function frame, use: - * get_struc() (use func_t::frame as structure ID) - * get_frame(const func_t *pfn) - * get_frame(ea_t ea) + To access the structure of a function frame and stack variables, use: + * tinfo_t::get_func_frame(const func_t *pfn) (the preferred way) + * get_func_frame(tinfo_t *out, const func_t *pfn) + * tinfo_t::get_udt_details() gives info about stack variables: their type, names, offset, etc + + + -ida_frame.REGVAR_ERROR_ARG (variable) +ida_frame.REGVAR_ERROR_ARG function arguments are bad -ida_frame.REGVAR_ERROR_NAME (variable) +ida_frame.REGVAR_ERROR_NAME the provided name(s) can't be accepted -ida_frame.REGVAR_ERROR_OK (variable) +ida_frame.REGVAR_ERROR_OK all ok -ida_frame.REGVAR_ERROR_RANGE (variable) +ida_frame.REGVAR_ERROR_RANGE the definition range is bad -ida_frame.STKVAR_VALID_SIZE (variable) - 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.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.add_auto_stkpnt (function) - add_auto_stkpnt(pfn, ea, delta) -> bool - Add automatic SP register change point. - - @param pfn: (C++: func_t *) pointer to the function. may be nullptr. - @param ea: (C++: ea_t) linear address where SP changes. usually this is the end of the - instruction which modifies the stack pointer ( insn_t::ea+ - insn_t::size) - @param delta: (C++: sval_t) difference between old and new values of SP - @return: success +ida_frame.add_auto_stkpnt(pfn: "func_t *", ea: ida_idaapi.ea_t, delta: int) -> bool + Add automatic SP register change point. + + @param pfn: pointer to the function. may be nullptr. + @param ea: linear address where SP changes. usually this is the end of the instruction which modifies the stack pointer ( insn_t::ea+ insn_t::size) + @param delta: difference between old and new values of SP + @returns success -ida_frame.add_frame (function) - add_frame(pfn, frsize, frregs, argsize) -> bool - Add function frame. - - @param pfn: (C++: func_t *) pointer to function structure - @param frsize: (C++: sval_t) size of function local variables - @param frregs: (C++: ushort) size of saved registers - @param argsize: (C++: asize_t) 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. +ida_frame.add_frame(pfn: "func_t *", frsize: int, frregs: "ushort", argsize: "asize_t") -> bool + Add function frame. + + @param pfn: pointer to function structure + @param frsize: size of function local variables + @param frregs: size of saved registers + @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. @retval 1: ok @retval 0: failed (no function, frame already exists) -ida_frame.add_regvar (function) - add_regvar(pfn, ea1, ea2, canon, user, cmt) -> int - Define a register variable. - - @param pfn: (C++: func_t *) function in which the definition will be created - @param ea1: (C++: ea_t) ,ea2: range of addresses within the function where the definition will - be used - @param canon: (C++: const char *) name of a general register - @param canon: (C++: const char *) name of a general register - @param user: (C++: const char *) user-defined name for the register - @param cmt: (C++: const char *) comment for the definition - @return: Register variable error codes +ida_frame.add_frame_member(pfn: "func_t const *", name: str, offset: int, tif: "tinfo_t", repr: "value_repr_t" = None, etf_flags: "uint" = 0) -> bool + Add member to the frame type + + @param pfn: pointer to function + @param name: variable name, nullptr means autogenerate a name + @param offset: member offset in the frame structure, in bytes + @param tif: variable type + @param repr: variable representation + @returns success -ida_frame.add_user_stkpnt (function) - add_user_stkpnt(ea, delta) -> bool - Add user-defined SP register change point. - - @param ea: (C++: ea_t) linear address where SP changes - @param delta: (C++: sval_t) difference between old and new values of SP - @return: success +ida_frame.add_regvar(pfn: "func_t *", ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, canon: str, user: str, cmt: str) -> int + Define a register variable. + + @param pfn: function in which the definition will be created + @param ea1: range of addresses within the function where the definition will be used + @param ea2: range of addresses within the function where the definition will be used + @param canon: name of a general register + @param user: user-defined name for the register + @param cmt: comment for the definition + @returns Register variable error codes -ida_frame.build_stkvar_name (function) - build_stkvar_name(pfn, v) -> str - Build automatic stack variable name. - - @param pfn: (C++: const func_t *) pointer to function (can't be nullptr!) - @param v: (C++: sval_t) value of variable offset - @return: length of stack variable name or -1 +ida_frame.add_user_stkpnt(ea: ida_idaapi.ea_t, delta: int) -> bool + Add user-defined SP register change point. + + @param ea: linear address where SP changes + @param delta: difference between old and new values of SP + @returns success -ida_frame.build_stkvar_xrefs (function) - 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: (C++: xreflist_t *) the list of xrefs to fill. - @param pfn: (C++: func_t *) the function to scan. - @param mptr: (C++: const member_t *) the argument/variable in pfn's stack frame. +ida_frame.build_stkvar_name(pfn: "func_t const *", v: int) -> str + Build automatic stack variable name. + + @param pfn: pointer to function (can't be nullptr!) + @param v: value of variable offset + @returns length of stack variable name or -1 -ida_frame.calc_stkvar_struc_offset (function) - calc_stkvar_struc_offset(pfn, insn, n) -> ea_t - Calculate offset of stack variable in the frame structure. - - @param pfn: (C++: func_t *) pointer to function (can't be nullptr!) - @param insn: (C++: const insn_t &) the instruction - @param n: (C++: int) 0..UA_MAXOP-1 operand number -1 if error, return BADADDR - @return: BADADDR if some error (issue a warning if stack frame is bad) +ida_frame.build_stkvar_xrefs(out: "xreflist_t", pfn: "func_t *", start_offset: int, end_offset: int) -> None + Fill 'out' with a list of all the xrefs made from function 'pfn' to specified range of the pfn's stack frame. + + @param out: the list of xrefs to fill. + @param pfn: the function to scan. + @param start_offset: start frame structure offset, in bytes + @param end_offset: end frame structure offset, in bytes -ida_frame.define_stkvar (function) - define_stkvar(pfn, name, off, flags, ti, nbytes) -> bool - Define/redefine a stack variable. - - @param pfn: (C++: func_t *) pointer to function - @param name: (C++: const char *) variable name, nullptr means autogenerate a name - @param off: (C++: sval_t) offset of the stack variable in the frame. negative values denote - local variables, positive - function arguments. - @param flags: (C++: flags64_t) variable type flags (byte_flag() for a byte variable, for example) - @param ti: (C++: const opinfo_t *) additional type information (like offsets, structs, etc) - @param nbytes: (C++: asize_t) number of bytes occupied by the variable - @return: success +ida_frame.calc_frame_offset(pfn: "func_t *", off: int, insn: "insn_t const *" = None, op: "op_t const *" = None) -> int + Calculate the offset of stack variable in the frame. + + @param pfn: pointer to function (cannot be nullptr) + @param off: the offset relative to stack pointer or frame pointer + @param insn: the instruction + @param op: the operand + @returns the offset in the frame -ida_frame.del_frame (function) - del_frame(pfn) -> bool - Delete a function frame. - - @param pfn: (C++: func_t *) pointer to function structure - @return: success +ida_frame.calc_stkvar_struc_offset(pfn: "func_t *", insn: "insn_t const &", n: int) -> ida_idaapi.ea_t + Calculate offset of stack variable in the frame structure. + + @param pfn: pointer to function (cannot be nullptr) + @param insn: the instruction + @param n: 0..UA_MAXOP-1 operand number -1 if error, return BADADDR + @returns BADADDR if some error (issue a warning if stack frame is bad) -ida_frame.del_regvar (function) - del_regvar(pfn, ea1, ea2, canon) -> int - Delete a register variable definition. - - @param pfn: (C++: func_t *) function in question - @param ea1: (C++: ea_t) ,ea2: range of addresses within the function where the definition - holds - @param canon: (C++: const char *) name of a general register - @param canon: (C++: const char *) name of a general register - @return: Register variable error codes +ida_frame.define_stkvar(pfn: "func_t *", name: str, off: int, tif: "tinfo_t", repr: "value_repr_t" = None) -> bool + Define/redefine a stack variable. + + @param pfn: pointer to function + @param name: variable name, nullptr means autogenerate a name + @param off: offset of the stack variable in the frame. negative values denote local variables, positive - function arguments. + @param tif: variable type + @param repr: variable representation + @returns success -ida_frame.del_stkpnt (function) - del_stkpnt(pfn, ea) -> bool - Delete SP register change point. - - @param pfn: (C++: func_t *) pointer to the function. may be nullptr. - @param ea: (C++: ea_t) linear address - @return: success +ida_frame.del_frame(pfn: "func_t *") -> bool + Delete a function frame. + + @param pfn: pointer to function structure + @returns success -ida_frame.delete_unreferenced_stkvars (function) - delete_unreferenced_stkvars(pfn) -> int - - @param pfn: func_t * +ida_frame.del_regvar(pfn: "func_t *", ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, canon: str) -> int + Delete a register variable definition. + + @param pfn: function in question + @param ea1: range of addresses within the function where the definition holds + @param ea2: range of addresses within the function where the definition holds + @param canon: name of a general register + @returns Register variable error codes -ida_frame.delete_wrong_stkvar_ops (function) - delete_wrong_stkvar_ops(pfn) -> int - - @param pfn: func_t * +ida_frame.del_stkpnt(pfn: "func_t *", ea: ida_idaapi.ea_t) -> bool + Delete SP register change point. + + @param pfn: pointer to the function. may be nullptr. + @param ea: linear address + @returns success -ida_frame.find_regvar (function) - find_regvar(pfn, ea1, ea2, canon, user) -> regvar_t - Find a register variable definition. - - @param pfn: (C++: func_t *) function in question - @param ea1: ea_t - @param canon: (C++: const char *) name of a general register - @param canon: (C++: const char *) name of a general register - @param user: char const * - - @return: nullptr-not found, otherwise ptr to regvar_t - find_regvar(pfn, ea, canon) -> regvar_t - - @param pfn: func_t * - @param ea: ea_t - @param canon: char const * +ida_frame.delete_frame_members(pfn: "func_t const *", start_offset: int, end_offset: int) -> bool + Delete frame members + + @param pfn: pointer to function + @param start_offset: member offset to start deletion from, in bytes + @param end_offset: member offset which not included in the deletion, in bytes + @returns success -ida_frame.frame_off_args (function) - frame_off_args(pfn) -> ea_t +ida_frame.find_regvar(*args) -> "regvar_t *" + This function has the following signatures: + + 0. find_regvar(pfn: func_t *, ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, canon: str, user: str) -> regvar_t * + 1. find_regvar(pfn: func_t *, ea: ida_idaapi.ea_t, canon: str) -> regvar_t * + + # 0: find_regvar(pfn: func_t *, ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, canon: str, user: str) -> regvar_t * + + Find a register variable definition (powerful version). One of 'canon' and 'user' should be nullptr. If both 'canon' and 'user' are nullptr it returns the first regvar definition in the range. + + @returns nullptr-not found, otherwise ptr to regvar_t + + # 1: find_regvar(pfn: func_t *, ea: ida_idaapi.ea_t, canon: str) -> regvar_t * + + Find a register variable definition. + + @returns nullptr-not found, otherwise ptr to regvar_t + +ida_frame.frame_off_args(pfn: "func_t const *") -> ida_idaapi.ea_t Get starting address of arguments section. - - @param pfn: (C++: const func_t *) func_t const * -ida_frame.frame_off_lvars (function) - frame_off_lvars(pfn) -> ea_t +ida_frame.frame_off_lvars(pfn: "func_t const *") -> ida_idaapi.ea_t Get start address of local variables section. - - @param pfn: (C++: const func_t *) func_t const * -ida_frame.frame_off_retaddr (function) - frame_off_retaddr(pfn) -> ea_t +ida_frame.frame_off_retaddr(pfn: "func_t const *") -> ida_idaapi.ea_t Get starting address of return address section. - - @param pfn: (C++: const func_t *) func_t const * -ida_frame.frame_off_savregs (function) - frame_off_savregs(pfn) -> ea_t +ida_frame.frame_off_savregs(pfn: "func_t const *") -> ida_idaapi.ea_t Get starting address of saved registers section. - - @param pfn: (C++: const func_t *) func_t const * -ida_frame.free_regvar (function) - free_regvar(v) - - @param v: regvar_t * +ida_frame.free_regvar(v: "regvar_t") -> None -ida_frame.get_effective_spd (function) - 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: (C++: func_t *) pointer to the function. may be nullptr. - @param ea: (C++: ea_t) linear address - @return: 0 or the difference, usually a negative number +ida_frame.get_effective_spd(pfn: "func_t *", ea: ida_idaapi.ea_t) -> int + 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 the function. may be nullptr. + @param ea: linear address + @returns 0 or the difference, usually a negative number -ida_frame.get_frame (function) - get_frame(pfn) -> struc_t * - Get pointer to function frame. - - @param pfn: func_t const * +ida_frame.get_frame_part(range: "range_t", pfn: "func_t const *", part: "frame_part_t") -> None + 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 nullptr + @param pfn: pointer to function structure, can't be nullptr + @param part: frame part -ida_frame.get_frame_member_by_id (function) - get_frame_member_by_id(out_mname, out_fptr, mid) -> member_t * - Check if the specified member id points to a frame member. - - @param out_mname: (C++: qstring *) - @param out_fptr: (C++: struc_t **) - @param mid: (C++: tid_t) +ida_frame.get_frame_retsize(pfn: "func_t const *") -> int + Get size of function return address. + + @param pfn: pointer to function structure, can't be nullptr -ida_frame.get_frame_part (function) - get_frame_part(range, pfn, part) - Get offsets of the frame part in the frame. - - @param range: (C++: range_t *) pointer to the output buffer with the frame part - start/end(exclusive) offsets, can't be nullptr - @param pfn: (C++: const func_t *) pointer to function structure, can't be nullptr - @param part: (C++: frame_part_t) frame part +ida_frame.get_frame_size(pfn: "func_t const *") -> "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 nullptr + @returns size of frame in bytes or zero -ida_frame.get_frame_retsize (function) - get_frame_retsize(pfn) -> int - Get size of function return address. - - @param pfn: (C++: const func_t *) pointer to function structure, can't be nullptr +ida_frame.get_func_frame(out: "tinfo_t", pfn: "func_t const *") -> bool + Get type of function frame + + @param out: type info + @param pfn: pointer to function structure + @returns success -ida_frame.get_frame_size (function) - 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: (C++: const func_t *) pointer to function structure, may be nullptr - @return: size of frame in bytes or zero +ida_frame.get_sp_delta(pfn: "func_t *", ea: ida_idaapi.ea_t) -> int + Get modification of SP made at the specified location + + @param pfn: pointer to the function. may be nullptr. + @param ea: linear address + @returns 0 if the specified location doesn't contain a SP change point. otherwise return delta of SP modification. -ida_frame.get_func_by_frame (function) - get_func_by_frame(frame_id) -> ea_t - Get function by its frame id. - @warning: this function works only with databases created by IDA > 5.6 - - @param frame_id: (C++: tid_t) id of the function frame - @return: start address of the function or BADADDR +ida_frame.get_spd(pfn: "func_t *", ea: ida_idaapi.ea_t) -> int + Get difference between the initial and current values of ESP. + + @param pfn: pointer to the function. may be nullptr. + @param ea: linear address of the instruction + @returns 0 or the difference, usually a negative number. returns the sp-diff before executing the instruction. -ida_frame.get_min_spd_ea (function) - get_min_spd_ea(pfn) -> ea_t - - @param pfn: func_t * +ida_frame.has_regvar(pfn: "func_t *", ea: ida_idaapi.ea_t) -> bool + Is there a register variable definition? + + @param pfn: function in question + @param ea: current address -ida_frame.get_sp_delta (function) - get_sp_delta(pfn, ea) -> sval_t - Get modification of SP made at the specified location - - @param pfn: (C++: func_t *) pointer to the function. may be nullptr. - @param ea: (C++: ea_t) linear address - @return: 0 if the specified location doesn't contain a SP change point. - otherwise return delta of SP modification. +ida_frame.is_anonymous_member_name(name: str) -> bool + Is member name prefixed with "anonymous"? -ida_frame.get_spd (function) - get_spd(pfn, ea) -> sval_t - Get difference between the initial and current values of ESP. - - @param pfn: (C++: func_t *) pointer to the function. may be nullptr. - @param ea: (C++: ea_t) linear address of the instruction - @return: 0 or the difference, usually a negative number. returns the sp-diff - before executing the instruction. +ida_frame.is_dummy_member_name(name: str) -> bool + Is member name an auto-generated name? -ida_frame.get_stkvar (function) - get_stkvar(insn, op, v) -> (member_t, int) or None - Get pointer to stack variable - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @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.is_funcarg_off(pfn: "func_t const *", frameoff: int) -> bool -ida_frame.has_regvar (function) - has_regvar(pfn, ea) -> bool - Is there a register variable definition? - - @param pfn: (C++: func_t *) function in question - @param ea: (C++: ea_t) current address +ida_frame.is_special_frame_member(tid: "tid_t") -> bool + Is stkvar with TID the return address slot or the saved registers slot ? + + @param tid: frame member type id return address or saved registers member? -ida_frame.is_funcarg_off (function) - is_funcarg_off(pfn, frameoff) -> bool - - @param pfn: func_t const * - @param frameoff: uval_t +ida_frame.lvar_off(pfn: "func_t const *", frameoff: int) -> int -ida_frame.lvar_off (function) - lvar_off(pfn, frameoff) -> sval_t - - @param pfn: func_t const * - @param frameoff: uval_t - -ida_frame.recalc_spd (function) - 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: (C++: ea_t) linear address of the current instruction +ida_frame.recalc_spd(cur_ea: ida_idaapi.ea_t) -> 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 @retval 1: new stkpnt is added @retval 0: nothing is changed -ida_frame.recalc_spd_for_basic_block (function) - recalc_spd_for_basic_block(pfn, cur_ea) -> bool - Recalculate SP delta for the current instruction. The typical code snippet to - calculate SP delta in a proc module is: +ida_frame.recalc_spd_for_basic_block(pfn: "func_t *", cur_ea: ida_idaapi.ea_t) -> bool + Recalculate SP delta for the current instruction. The typical code snippet to calculate SP delta in a proc module is: if ( may_trace_sp() && pfn != nullptr ) if ( !recalc_spd_for_basic_block(pfn, insn.ea) ) trace_sp(pfn, insn); - where trace_sp() is a typical name for a function that emulates the SP change of - an instruction. + where trace_sp() is a typical name for a function that emulates the SP change of an instruction. - @param pfn: (C++: func_t *) pointer to the function - @param cur_ea: (C++: ea_t) linear address of the current instruction + @param pfn: pointer to the function + @param cur_ea: linear address of the current instruction @retval true: the cumulative SP delta is set - @retval false: the instruction at CUR_EA passes flow to the next instruction. SP - delta must be set as a result of emulating the current - instruction. + @retval false: the instruction at CUR_EA passes flow to the next instruction. SP delta must be set as a result of emulating the current instruction. -ida_frame.regvar_t (class) - Proxy of C++ regvar_t class. +ida_frame.regvar_t -ida_frame.regvar_t.__init__ (method) - __init__(self) -> regvar_t - __init__(self, r) -> regvar_t - - @param r: regvar_t const & +ida_frame.regvar_t.__init__(self, *args) -ida_frame.regvar_t.canon (variable) +ida_frame.regvar_t.canon canonical register name (case-insensitive) -ida_frame.regvar_t.cmt (variable) +ida_frame.regvar_t.cmt comment to appear near definition -ida_frame.regvar_t.swap (method) - swap(self, r) - - @param r: regvar_t & +ida_frame.regvar_t.swap(self, r: "regvar_t") -> None -ida_frame.regvar_t.user (variable) +ida_frame.regvar_t.user user-defined register name -ida_frame.rename_regvar (function) - rename_regvar(pfn, v, user) -> int - Rename a register variable. - - @param pfn: (C++: func_t *) function in question - @param v: (C++: regvar_t *) variable to rename - @param user: (C++: const char *) new user-defined name for the register - @return: Register variable error codes +ida_frame.rename_regvar(pfn: "func_t *", v: "regvar_t", user: str) -> int + Rename a register variable. + + @param pfn: function in question + @param v: variable to rename + @param user: new user-defined name for the register + @returns Register variable error codes -ida_frame.set_auto_spd (function) - set_auto_spd(pfn, ea, new_spd) -> bool - Add such an automatic SP register change point so that at EA the new cumulative - SP delta (that is, the difference between the initial and current values of SP) - would be equal to NEW_SPD. - - @param pfn: (C++: func_t *) pointer to the function. may be nullptr. - @param ea: (C++: ea_t) linear address of the instruction - @param new_spd: (C++: sval_t) new value of the cumulative SP delta - @return: success +ida_frame.set_auto_spd(pfn: "func_t *", ea: ida_idaapi.ea_t, new_spd: int) -> bool + Add such an automatic SP register change point so that at EA the new cumulative SP delta (that is, the difference between the initial and current values of SP) would be equal to NEW_SPD. + + @param pfn: pointer to the function. may be nullptr. + @param ea: linear address of the instruction + @param new_spd: new value of the cumulative SP delta + @returns success -ida_frame.set_frame_size (function) - 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: (C++: func_t *) pointer to function structure - @param frsize: (C++: asize_t) size of function local variables - @param frregs: (C++: ushort) size of saved registers - @param argsize: (C++: asize_t) size of function arguments that will be purged from the stack - upon return - @return: success +ida_frame.set_frame_member_type(pfn: "func_t const *", offset: int, tif: "tinfo_t", repr: "value_repr_t" = None, etf_flags: "uint" = 0) -> bool + Change type of the frame member + + @param pfn: pointer to function + @param offset: member offset in the frame structure, in bytes + @param tif: variable type + @param repr: variable representation + @returns success -ida_frame.set_purged (function) - 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: (C++: ea_t) address of the function of item - @param nbytes: (C++: int) number of purged bytes - @param override_old_value: (C++: bool) may overwrite old information about purged bytes - @return: success +ida_frame.set_frame_size(pfn: "func_t *", frsize: "asize_t", frregs: "ushort", argsize: "asize_t") -> 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 frame.get_func_frame(pfn).get_size() + + @param pfn: pointer to function structure + @param frsize: size of function local variables + @param frregs: size of saved registers + @param argsize: size of function arguments that will be purged from the stack upon return + @returns success -ida_frame.set_regvar_cmt (function) - set_regvar_cmt(pfn, v, cmt) -> int - Set comment for a register variable. - - @param pfn: (C++: func_t *) function in question - @param v: (C++: regvar_t *) variable to rename - @param cmt: (C++: const char *) new comment - @return: Register variable error codes +ida_frame.set_purged(ea: ida_idaapi.ea_t, nbytes: int, override_old_value: bool) -> 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 + @param nbytes: number of purged bytes + @param override_old_value: may overwrite old information about purged bytes + @returns success -ida_frame.soff_to_fpoff (function) - 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) +ida_frame.set_regvar_cmt(pfn: "func_t *", v: "regvar_t", cmt: str) -> int + Set comment for a register variable. + + @param pfn: function in question + @param v: variable to rename + @param cmt: new comment + @returns Register variable error codes -ida_frame.stkpnt_t (class) - Proxy of C++ stkpnt_t class. +ida_frame.soff_to_fpoff(pfn: "func_t *", soff: int) -> int + Convert struct offsets into fp-relative offsets. This function converts the offsets inside the udt_type_data_t object into the frame pointer offsets (for example, EBP-relative). + -ida_frame.stkpnt_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: stkpnt_t const & +ida_frame.stkpnt_t -ida_frame.stkpnt_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: stkpnt_t const & +ida_frame.stkpnt_t.__eq__(self, r: "stkpnt_t") -> bool -ida_frame.stkpnt_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: stkpnt_t const & +ida_frame.stkpnt_t.__ge__(self, r: "stkpnt_t") -> bool -ida_frame.stkpnt_t.__init__ (method) - __init__(self) -> stkpnt_t +ida_frame.stkpnt_t.__gt__(self, r: "stkpnt_t") -> bool -ida_frame.stkpnt_t.__le__ (method) - __le__(self, r) -> bool - - @param r: stkpnt_t const & +ida_frame.stkpnt_t.__init__(self) -ida_frame.stkpnt_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: stkpnt_t const & +ida_frame.stkpnt_t.__le__(self, r: "stkpnt_t") -> bool -ida_frame.stkpnt_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: stkpnt_t const & +ida_frame.stkpnt_t.__lt__(self, r: "stkpnt_t") -> bool -ida_frame.stkpnt_t.compare (method) - compare(self, r) -> int - - @param r: stkpnt_t const & +ida_frame.stkpnt_t.__ne__(self, r: "stkpnt_t") -> bool -ida_frame.stkpnts_t (class) - Proxy of C++ stkpnts_t class. +ida_frame.stkpnt_t.compare(self, r: "stkpnt_t") -> int -ida_frame.stkpnts_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: stkpnts_t const & +ida_frame.stkpnts_t -ida_frame.stkpnts_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: stkpnts_t const & +ida_frame.stkpnts_t.__eq__(self, r: "stkpnts_t") -> bool -ida_frame.stkpnts_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: stkpnts_t const & +ida_frame.stkpnts_t.__ge__(self, r: "stkpnts_t") -> bool -ida_frame.stkpnts_t.__init__ (method) - __init__(self) -> stkpnts_t +ida_frame.stkpnts_t.__gt__(self, r: "stkpnts_t") -> bool -ida_frame.stkpnts_t.__le__ (method) - __le__(self, r) -> bool - - @param r: stkpnts_t const & +ida_frame.stkpnts_t.__init__(self) -ida_frame.stkpnts_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: stkpnts_t const & +ida_frame.stkpnts_t.__le__(self, r: "stkpnts_t") -> bool -ida_frame.stkpnts_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: stkpnts_t const & +ida_frame.stkpnts_t.__lt__(self, r: "stkpnts_t") -> bool -ida_frame.stkpnts_t.compare (method) - compare(self, r) -> int - - @param r: stkpnts_t const & +ida_frame.stkpnts_t.__ne__(self, r: "stkpnts_t") -> bool -ida_frame.update_fpd (function) - update_fpd(pfn, fpd) -> bool - Update frame pointer delta. - - @param pfn: (C++: func_t *) pointer to function structure - @param fpd: (C++: asize_t) new fpd value. cannot be bigger than the local variable range size. - @return: success +ida_frame.stkpnts_t.compare(self, r: "stkpnts_t") -> int -ida_frame.xreflist_entry_t (class) - Proxy of C++ xreflist_entry_t class. +ida_frame.update_fpd(pfn: "func_t *", fpd: "asize_t") -> bool + Update frame pointer delta. + + @param pfn: pointer to function structure + @param fpd: new fpd value. cannot be bigger than the local variable range size. + @returns success -ida_frame.xreflist_entry_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: xreflist_entry_t const & +ida_frame.xreflist_entry_t -ida_frame.xreflist_entry_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: xreflist_entry_t const & +ida_frame.xreflist_entry_t.__eq__(self, r: "xreflist_entry_t") -> bool -ida_frame.xreflist_entry_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: xreflist_entry_t const & +ida_frame.xreflist_entry_t.__ge__(self, r: "xreflist_entry_t") -> bool -ida_frame.xreflist_entry_t.__init__ (method) - __init__(self) -> xreflist_entry_t +ida_frame.xreflist_entry_t.__gt__(self, r: "xreflist_entry_t") -> bool -ida_frame.xreflist_entry_t.__le__ (method) - __le__(self, r) -> bool - - @param r: xreflist_entry_t const & +ida_frame.xreflist_entry_t.__init__(self) -ida_frame.xreflist_entry_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: xreflist_entry_t const & +ida_frame.xreflist_entry_t.__le__(self, r: "xreflist_entry_t") -> bool -ida_frame.xreflist_entry_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: xreflist_entry_t const & +ida_frame.xreflist_entry_t.__lt__(self, r: "xreflist_entry_t") -> bool -ida_frame.xreflist_entry_t.compare (method) - compare(self, r) -> int - - @param r: xreflist_entry_t const & +ida_frame.xreflist_entry_t.__ne__(self, r: "xreflist_entry_t") -> bool -ida_frame.xreflist_entry_t.ea (variable) +ida_frame.xreflist_entry_t.compare(self, r: "xreflist_entry_t") -> int + +ida_frame.xreflist_entry_t.ea Location of the insn referencing the stack frame member. -ida_frame.xreflist_entry_t.opnum (variable) +ida_frame.xreflist_entry_t.opnum Number of the operand of that instruction. -ida_frame.xreflist_entry_t.type (variable) +ida_frame.xreflist_entry_t.type The type of xref (cref_t & dref_t) -ida_frame.xreflist_t (class) - Proxy of C++ qvector< xreflist_entry_t > class. +ida_frame.xreflist_t -ida_frame.xreflist_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< xreflist_entry_t > const & +ida_frame.xreflist_t.__eq__(self, r: "xreflist_t") -> bool -ida_frame.xreflist_t.__getitem__ (method) - __getitem__(self, i) -> xreflist_entry_t - - @param i: size_t +ida_frame.xreflist_t.__getitem__(self, i: "size_t") -> "xreflist_entry_t const &" -ida_frame.xreflist_t.__init__ (method) - __init__(self) -> xreflist_t - __init__(self, x) -> xreflist_t - - @param x: qvector< xreflist_entry_t > const & +ida_frame.xreflist_t.__init__(self, *args) -ida_frame.xreflist_t.__len__ (method) - __len__(self) -> size_t +ida_frame.xreflist_t.__len__(self) -> "size_t" -ida_frame.xreflist_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< xreflist_entry_t > const & +ida_frame.xreflist_t.__ne__(self, r: "xreflist_t") -> bool -ida_frame.xreflist_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: xreflist_entry_t const & +ida_frame.xreflist_t.__setitem__(self, i: "size_t", v: "xreflist_entry_t") -> None -ida_frame.xreflist_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: xreflist_entry_t const & +ida_frame.xreflist_t._del(self, x: "xreflist_entry_t") -> bool -ida_frame.xreflist_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: xreflist_entry_t const & +ida_frame.xreflist_t.add_unique(self, x: "xreflist_entry_t") -> bool -ida_frame.xreflist_t.at (method) - at(self, _idx) -> xreflist_entry_t - - @param _idx: size_t +ida_frame.xreflist_t.append(self, x: "xreflist_entry_t") -> None -ida_frame.xreflist_t.begin (method) - begin(self) -> xreflist_entry_t +ida_frame.xreflist_t.at(self, _idx: "size_t") -> "xreflist_entry_t const &" -ida_frame.xreflist_t.capacity (method) - capacity(self) -> size_t +ida_frame.xreflist_t.begin(self, *args) -> "qvector< xreflist_entry_t >::const_iterator" -ida_frame.xreflist_t.clear (method) - clear(self) +ida_frame.xreflist_t.capacity(self) -> "size_t" -ida_frame.xreflist_t.empty (method) - empty(self) -> bool +ida_frame.xreflist_t.clear(self) -> None -ida_frame.xreflist_t.end (method) - end(self) -> xreflist_entry_t +ida_frame.xreflist_t.empty(self) -> bool -ida_frame.xreflist_t.erase (method) - erase(self, it) -> xreflist_entry_t - - @param it: qvector< xreflist_entry_t >::iterator - - erase(self, first, last) -> xreflist_entry_t - - @param first: qvector< xreflist_entry_t >::iterator - @param last: qvector< xreflist_entry_t >::iterator +ida_frame.xreflist_t.end(self, *args) -> "qvector< xreflist_entry_t >::const_iterator" -ida_frame.xreflist_t.extract (method) - extract(self) -> xreflist_entry_t +ida_frame.xreflist_t.erase(self, *args) -> "qvector< xreflist_entry_t >::iterator" -ida_frame.xreflist_t.find (method) - find(self, x) -> xreflist_entry_t - - @param x: xreflist_entry_t const & +ida_frame.xreflist_t.extend(self, x: "xreflist_t") -> None -ida_frame.xreflist_t.grow (method) - grow(self, x=xreflist_entry_t()) - - @param x: xreflist_entry_t const & +ida_frame.xreflist_t.extract(self) -> "xreflist_entry_t *" -ida_frame.xreflist_t.has (method) - has(self, x) -> bool - - @param x: xreflist_entry_t const & +ida_frame.xreflist_t.find(self, *args) -> "qvector< xreflist_entry_t >::const_iterator" -ida_frame.xreflist_t.inject (method) - inject(self, s, len) - - @param s: xreflist_entry_t * - @param len: size_t +ida_frame.xreflist_t.grow(self, *args) -> None -ida_frame.xreflist_t.insert (method) - insert(self, it, x) -> xreflist_entry_t - - @param it: qvector< xreflist_entry_t >::iterator - @param x: xreflist_entry_t const & +ida_frame.xreflist_t.has(self, x: "xreflist_entry_t") -> bool -ida_frame.xreflist_t.pop_back (method) - pop_back(self) +ida_frame.xreflist_t.inject(self, s: "xreflist_entry_t", len: "size_t") -> None -ida_frame.xreflist_t.push_back (method) - push_back(self, x) - - @param x: xreflist_entry_t const & - - push_back(self) -> xreflist_entry_t +ida_frame.xreflist_t.insert(self, it: "xreflist_entry_t", x: "xreflist_entry_t") -> "qvector< xreflist_entry_t >::iterator" -ida_frame.xreflist_t.qclear (method) - qclear(self) +ida_frame.xreflist_t.pop_back(self) -> None -ida_frame.xreflist_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_frame.xreflist_t.push_back(self, *args) -> "xreflist_entry_t &" -ida_frame.xreflist_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: xreflist_entry_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_frame.xreflist_t.qclear(self) -> None -ida_frame.xreflist_t.size (method) - size(self) -> size_t +ida_frame.xreflist_t.reserve(self, cnt: "size_t") -> None -ida_frame.xreflist_t.swap (method) - swap(self, r) - - @param r: qvector< xreflist_entry_t > & +ida_frame.xreflist_t.resize(self, *args) -> None -ida_frame.xreflist_t.truncate (method) - truncate(self) +ida_frame.xreflist_t.size(self) -> "size_t" -ida_funcs (module) +ida_frame.xreflist_t.swap(self, r: "xreflist_t") -> None + +ida_frame.xreflist_t.truncate(self) -> None + +ida_funcs Routines for working with functions within the disassembled program. - This file also contains routines for working with library signatures (e.g. - FLIRT). - - Each function consists of function chunks. At least one function chunk must be - present in the function definition - the function entry chunk. Other chunks are - called function tails. There may be several of them for a function. - - A function tail is a continuous range of addresses. It can be used in the - definition of one or more functions. One function using the tail is singled out - and called the tail owner. This function is considered as 'possessing' the tail. - get_func() on a tail address will return the function possessing the tail. You - can enumerate the functions using the tail by using func_parent_iterator_t. - - Each function chunk in the disassembly is represented as an "range" (a range of - addresses, see range.hpp for details) with characteristics. - - A function entry must start with an instruction (code) byte. + This file also contains routines for working with library signatures (e.g. FLIRT). + Each function consists of function chunks. At least one function chunk must be present in the function definition - the function entry chunk. Other chunks are called function tails. There may be several of them for a function. + A function tail is a continuous range of addresses. It can be used in the definition of one or more functions. One function using the tail is singled out and called the tail owner. This function is considered as 'possessing' the tail. get_func() on a tail address will return the function possessing the tail. You can enumerate the functions using the tail by using func_parent_iterator_t. + Each function chunk in the disassembly is represented as an "range" (a range of addresses, see range.hpp for details) with characteristics. + A function entry must start with an instruction (code) byte. + -ida_funcs.FIND_FUNC_DEFINE (variable) +ida_funcs.FIND_FUNC_DEFINE create instruction if undefined byte is encountered -ida_funcs.FIND_FUNC_EXIST (variable) - function exists already. its bounds are returned in 'nfn'. +ida_funcs.FIND_FUNC_EXIST + function exists already. its bounds are returned in 'nfn'. + -ida_funcs.FIND_FUNC_IGNOREFN (variable) - ignore existing function boundaries. by default the function returns function - boundaries if ea belongs to a function. +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 (variable) - do not modify incoming function boundaries, just create instructions inside the - boundaries. +ida_funcs.FIND_FUNC_KEEPBD + do not modify incoming function boundaries, just create instructions inside the boundaries. + -ida_funcs.FIND_FUNC_NORMAL (variable) +ida_funcs.FIND_FUNC_NORMAL stop processing if undefined byte is encountered -ida_funcs.FIND_FUNC_OK (variable) +ida_funcs.FIND_FUNC_OK ok, 'nfn' is ready for add_func() -ida_funcs.FIND_FUNC_UNDEF (variable) - function has instructions that pass execution flow to unexplored bytes. - nfn->end_ea will have the address of the unexplored byte. +ida_funcs.FIND_FUNC_UNDEF + function has instructions that pass execution flow to unexplored bytes. nfn->end_ea will have the address of the unexplored byte. + -ida_funcs.FUNC_BOTTOMBP (variable) +ida_funcs.FUNC_BOTTOMBP BP points to the bottom of the stack frame. -ida_funcs.FUNC_FAR (variable) +ida_funcs.FUNC_CATCH + function is an exception catch handler + +ida_funcs.FUNC_FAR Far function. -ida_funcs.FUNC_FRAME (variable) +ida_funcs.FUNC_FRAME Function uses frame pointer (BP) -ida_funcs.FUNC_FUZZY_SP (variable) - Function changes SP in untraceable way, for example: and esp, 0FFFFFFF0h +ida_funcs.FUNC_FUZZY_SP + Function changes SP in untraceable way, for example: and esp, 0FFFFFFF0h + -ida_funcs.FUNC_HIDDEN (variable) +ida_funcs.FUNC_HIDDEN A hidden function chunk. -ida_funcs.FUNC_LIB (variable) +ida_funcs.FUNC_LIB Library function. -ida_funcs.FUNC_LUMINA (variable) +ida_funcs.FUNC_LUMINA Function info is provided by Lumina. -ida_funcs.FUNC_NORET (variable) +ida_funcs.FUNC_NORET Function doesn't return. -ida_funcs.FUNC_NORET_PENDING (variable) - Function 'non-return' analysis must be performed. This flag is verified upon - func_does_return() +ida_funcs.FUNC_NORET_PENDING + Function 'non-return' analysis must be performed. This flag is verified upon func_does_return() + -ida_funcs.FUNC_OUTLINE (variable) +ida_funcs.FUNC_OUTLINE Outlined code, not a real function. -ida_funcs.FUNC_PROLOG_OK (variable) - Prolog analysis has been performed by last SP-analysis +ida_funcs.FUNC_PROLOG_OK + Prolog analysis has been performed by last SP-analysis + -ida_funcs.FUNC_PURGED_OK (variable) - '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_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_REANALYZE (variable) - Function frame changed, request to reanalyze the function after the last insn is - analyzed. +ida_funcs.FUNC_REANALYZE + Function frame changed, request to reanalyze the function after the last insn is analyzed. + -ida_funcs.FUNC_SP_READY (variable) - 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_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 (variable) +ida_funcs.FUNC_STATICDEF Static function. -ida_funcs.FUNC_TAIL (variable) - This is a function tail. Other bits must be clear (except FUNC_HIDDEN). +ida_funcs.FUNC_TAIL + This is a function tail. Other bits must be clear (except FUNC_HIDDEN). + -ida_funcs.FUNC_THUNK (variable) +ida_funcs.FUNC_THUNK Thunk (jump) function. -ida_funcs.FUNC_USERFAR (variable) - User has specified far-ness of the function +ida_funcs.FUNC_UNWIND + function is an exception unwind handler -ida_funcs.IDASGN_APPLIED (variable) +ida_funcs.FUNC_USERFAR + User has specified far-ness of the function + + +ida_funcs.IDASGN_APPLIED signature is already applied -ida_funcs.IDASGN_BADARG (variable) +ida_funcs.IDASGN_BADARG bad number of signature -ida_funcs.IDASGN_CURRENT (variable) +ida_funcs.IDASGN_CURRENT signature is currently being applied -ida_funcs.IDASGN_OK (variable) +ida_funcs.IDASGN_OK ok -ida_funcs.IDASGN_PLANNED (variable) +ida_funcs.IDASGN_PLANNED signature is planned to be applied -ida_funcs.LIBFUNC_DELAY (variable) +ida_funcs.LIBFUNC_DELAY no decision because of lack of information -ida_funcs.LIBFUNC_FOUND (variable) +ida_funcs.LIBFUNC_FOUND ok, library function is found -ida_funcs.LIBFUNC_NONE (variable) +ida_funcs.LIBFUNC_NONE no, this is not a library function -ida_funcs.MOVE_FUNC_BADSTART (variable) +ida_funcs.MOVE_FUNC_BADSTART bad new start address -ida_funcs.MOVE_FUNC_NOCODE (variable) +ida_funcs.MOVE_FUNC_NOCODE no instruction at 'newstart' -ida_funcs.MOVE_FUNC_NOFUNC (variable) +ida_funcs.MOVE_FUNC_NOFUNC no function at 'ea' -ida_funcs.MOVE_FUNC_OK (variable) +ida_funcs.MOVE_FUNC_OK ok -ida_funcs.MOVE_FUNC_REFUSED (variable) +ida_funcs.MOVE_FUNC_REFUSED a plugin refused the action -ida_funcs.add_func (function) - 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: (C++: ea_t) start address - @param ea2: (C++: ea_t) end address - @return: success +ida_funcs.add_func(*args) -> 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 + @param ea2: end address + @returns success -ida_funcs.add_func_ex (function) - 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: (C++: func_t *) ptr to filled function structure - @return: success +ida_funcs.add_func_ex(pfn: "func_t") -> 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 + @returns success -ida_funcs.add_regarg (function) - add_regarg(pfn, reg, tif, name) - - @param pfn: func_t * - @param reg: int - @param tif: tinfo_t const & - @param name: char const * +ida_funcs.add_regarg(pfn: "func_t", reg: int, tif: "tinfo_t", name: str) -> None -ida_funcs.append_func_tail (function) - 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 *) pointer to the function - @param ea1: (C++: ea_t) start of the tail. If a tail already exists at the specified address - it must start at 'ea1' - @param ea2: (C++: ea_t) 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. +ida_funcs.append_func_tail(pfn: "func_t", ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> 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: pointer to the function + @param ea1: start of the tail. If a tail already exists at the specified address it must start at 'ea1' + @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. -ida_funcs.apply_idasgn_to (function) - apply_idasgn_to(signame, ea, is_startup) -> int - Apply a signature file to the specified address. - - @param signame: (C++: const char *) short name of signature file (the file name without path) - @param ea: (C++: ea_t) address to apply the signature - @param is_startup: (C++: bool) 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. - @return: Library function codes +ida_funcs.apply_idasgn_to(signame: str, ea: ida_idaapi.ea_t, is_startup: bool) -> int + Apply a signature file to the specified address. + + @param signame: short name of signature file (the file name without path) + @param ea: address to apply the signature + @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. + @returns Library function codes -ida_funcs.apply_startup_sig (function) - apply_startup_sig(ea, startup) -> bool - Apply a startup signature file to the specified address. - - @param ea: (C++: ea_t) address to apply the signature to; usually idainfo::start_ea - @param startup: (C++: const char *) the name of the signature file without path and extension - @return: true if successfully applied the signature +ida_funcs.apply_startup_sig(ea: ida_idaapi.ea_t, startup: str) -> bool + Apply a startup signature file to the specified address. + + @param ea: address to apply the signature to; usually idainfo::start_ea + @param startup: the name of the signature file without path and extension + @returns true if successfully applied the signature -ida_funcs.calc_func_size (function) - calc_func_size(pfn) -> asize_t - Calculate function size. This function takes into account all fragments of the - function. - - @param pfn: (C++: func_t *) ptr to function structure +ida_funcs.calc_func_size(pfn: "func_t") -> "asize_t" + Calculate function size. This function takes into account all fragments of the function. + + @param pfn: ptr to function structure -ida_funcs.calc_idasgn_state (function) - calc_idasgn_state(n) -> int - Get state of a signature in the list of planned signatures - - @param n: (C++: int) number of signature in the list (0..get_idasgn_qty()-1) - @return: state of signature or IDASGN_BADARG +ida_funcs.calc_idasgn_state(n: int) -> 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) + @returns state of signature or IDASGN_BADARG -ida_funcs.calc_thunk_func_target (function) - calc_thunk_func_target(pfn) -> ea_t - Calculate target of a thunk function. - - @param pfn: (C++: func_t *) pointer to function (may not be nullptr) - @return: the target function or BADADDR +ida_funcs.calc_thunk_func_target(pfn: "func_t") -> "ea_t *" + Calculate target of a thunk function. + + @param pfn: pointer to function (may not be nullptr) + @returns the target function or BADADDR -ida_funcs.calc_thunk_func_target (function) +ida_funcs.calc_thunk_func_target(*args) + Calculate target of a thunk function. + + @param pfn: pointer to function (may not be nullptr) + @param fptr: out: will hold address of a function pointer (if indirect jump) + @returns the target function or BADADDR -ida_funcs.del_func (function) - del_func(ea) -> bool - Delete a function. - - @param ea: (C++: ea_t) any address in the function entry chunk - @return: success +ida_funcs.del_func(ea: ida_idaapi.ea_t) -> bool + Delete a function. + + @param ea: any address in the function entry chunk + @returns success -ida_funcs.del_idasgn (function) - del_idasgn(n) -> int - Remove signature from the list of planned signatures. - - @param n: (C++: int) number of signature in the list (0..get_idasgn_qty()-1) - @return: IDASGN_OK, IDASGN_BADARG, IDASGN_APPLIED +ida_funcs.del_idasgn(n: int) -> int + Remove signature from the list of planned signatures. + + @param n: number of signature in the list (0..get_idasgn_qty()-1) + @returns IDASGN_OK, IDASGN_BADARG, IDASGN_APPLIED -ida_funcs.dyn_ea_array (class) - Proxy of C++ dynamic_wrapped_array_t< ea_t > class. +ida_funcs.dyn_ea_array -ida_funcs.dyn_ea_array.__getitem__ (method) - __getitem__(self, i) -> unsigned-ea-like-numeric-type const & - - @param i: size_t +ida_funcs.dyn_ea_array.__getitem__(self, i: "size_t") -> "unsigned long long const &" -ida_funcs.dyn_ea_array.__init__ (method) - __init__(self, _data, _count) -> dyn_ea_array - - @param _data: unsigned-ea-like-numeric-type * - @param _count: size_t +ida_funcs.dyn_ea_array.__init__(self, _data: "unsigned long long *", _count: "size_t") -ida_funcs.dyn_ea_array.__len__ (method) - __len__(self) -> size_t +ida_funcs.dyn_ea_array.__len__(self) -> "size_t" -ida_funcs.dyn_ea_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: unsigned-ea-like-numeric-type const & +ida_funcs.dyn_ea_array.__setitem__(self, i: "size_t", v: "unsigned long long const &") -> None -ida_funcs.dyn_range_array (class) - Proxy of C++ dynamic_wrapped_array_t< range_t > class. +ida_funcs.dyn_range_array -ida_funcs.dyn_range_array.__getitem__ (method) - __getitem__(self, i) -> range_t - - @param i: size_t +ida_funcs.dyn_range_array.__getitem__(self, i: "size_t") -> "range_t const &" -ida_funcs.dyn_range_array.__init__ (method) - __init__(self, _data, _count) -> dyn_range_array - - @param _data: range_t * - @param _count: size_t +ida_funcs.dyn_range_array.__init__(self, _data: "range_t", _count: "size_t") -ida_funcs.dyn_range_array.__len__ (method) - __len__(self) -> size_t +ida_funcs.dyn_range_array.__len__(self) -> "size_t" -ida_funcs.dyn_range_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: range_t const & +ida_funcs.dyn_range_array.__setitem__(self, i: "size_t", v: "range_t") -> None -ida_funcs.dyn_regarg_array (class) - Proxy of C++ dynamic_wrapped_array_t< regarg_t > class. +ida_funcs.dyn_regarg_array -ida_funcs.dyn_regarg_array.__getitem__ (method) - __getitem__(self, i) -> regarg_t - - @param i: size_t +ida_funcs.dyn_regarg_array.__getitem__(self, i: "size_t") -> "regarg_t const &" -ida_funcs.dyn_regarg_array.__init__ (method) - __init__(self, _data, _count) -> dyn_regarg_array - - @param _data: regarg_t * - @param _count: size_t +ida_funcs.dyn_regarg_array.__init__(self, _data: "regarg_t", _count: "size_t") -ida_funcs.dyn_regarg_array.__len__ (method) - __len__(self) -> size_t +ida_funcs.dyn_regarg_array.__len__(self) -> "size_t" -ida_funcs.dyn_regarg_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: regarg_t const & +ida_funcs.dyn_regarg_array.__setitem__(self, i: "size_t", v: "regarg_t") -> None -ida_funcs.dyn_regvar_array (class) - Proxy of C++ dynamic_wrapped_array_t< regvar_t > class. +ida_funcs.dyn_regvar_array -ida_funcs.dyn_regvar_array.__getitem__ (method) - __getitem__(self, i) -> regvar_t const & - - @param i: size_t +ida_funcs.dyn_regvar_array.__getitem__(self, i: "size_t") -> "regvar_t const &" -ida_funcs.dyn_regvar_array.__init__ (method) - __init__(self, _data, _count) -> dyn_regvar_array - - @param _data: regvar_t * - @param _count: size_t +ida_funcs.dyn_regvar_array.__init__(self, _data: "regvar_t *", _count: "size_t") -ida_funcs.dyn_regvar_array.__len__ (method) - __len__(self) -> size_t +ida_funcs.dyn_regvar_array.__len__(self) -> "size_t" -ida_funcs.dyn_regvar_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: regvar_t const & +ida_funcs.dyn_regvar_array.__setitem__(self, i: "size_t", v: "regvar_t const &") -> None -ida_funcs.dyn_stkpnt_array (class) - Proxy of C++ dynamic_wrapped_array_t< stkpnt_t > class. +ida_funcs.dyn_stkpnt_array -ida_funcs.dyn_stkpnt_array.__getitem__ (method) - __getitem__(self, i) -> stkpnt_t const & - - @param i: size_t +ida_funcs.dyn_stkpnt_array.__getitem__(self, i: "size_t") -> "stkpnt_t const &" -ida_funcs.dyn_stkpnt_array.__init__ (method) - __init__(self, _data, _count) -> dyn_stkpnt_array - - @param _data: stkpnt_t * - @param _count: size_t +ida_funcs.dyn_stkpnt_array.__init__(self, _data: "stkpnt_t *", _count: "size_t") -ida_funcs.dyn_stkpnt_array.__len__ (method) - __len__(self) -> size_t +ida_funcs.dyn_stkpnt_array.__len__(self) -> "size_t" -ida_funcs.dyn_stkpnt_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: stkpnt_t const & +ida_funcs.dyn_stkpnt_array.__setitem__(self, i: "size_t", v: "stkpnt_t const &") -> None -ida_funcs.f_any (function) - f_any(arg1, arg2) -> bool +ida_funcs.f_any(arg1: "flags64_t", arg2: "void *") -> bool Helper function to accept any address. - - @param arg1: flags64_t - @param arg2: void * -ida_funcs.find_func_bounds (function) - 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 - processor_t::func_bounds in order to fine tune the function boundaries. - - @param nfn: (C++: func_t *) structure to fill with information \ nfn->start_ea points to the - start address of the new function. - @param flags: (C++: int) Find function bounds flags - @return: Find function bounds result codes +ida_funcs.find_func_bounds(nfn: "func_t", flags: int) -> 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 processor_t::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. + @param flags: Find function bounds flags + @returns Find function bounds result codes -ida_funcs.free_regarg (function) - free_regarg(v) - - @param v: regarg_t * +ida_funcs.free_regarg(v: "regarg_t") -> None -ida_funcs.func_contains (function) - func_contains(pfn, ea) -> bool +ida_funcs.func_contains(pfn: "func_t", ea: ida_idaapi.ea_t) -> bool Does the given function contain the given address? - - @param pfn: (C++: func_t *) - @param ea: (C++: ea_t) -ida_funcs.func_does_return (function) - 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_does_return(callee: ida_idaapi.ea_t) -> 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. + -ida_funcs.func_item_iterator_t (class) - Proxy of C++ func_item_iterator_t class. +ida_funcs.func_item_iterator_t -ida_funcs.func_item_iterator_t.__init__ (method) - __init__(self) -> func_item_iterator_t - __init__(self, pfn, _ea=BADADDR) -> func_item_iterator_t - - @param pfn: func_t * - @param _ea: ea_t +ida_funcs.func_item_iterator_t.__init__(self, *args) -ida_funcs.func_item_iterator_t.__iter__ (method) +ida_funcs.func_item_iterator_t.__iter__(self) Provide an iterator on code items -ida_funcs.func_item_iterator_t.__next__ (method) - __next__(self, func) -> bool - - @param func: testf_t * +ida_funcs.func_item_iterator_t.__next__(self, func: "testf_t *") -> bool -ida_funcs.func_item_iterator_t.addresses (method) +ida_funcs.func_item_iterator_t.addresses(self) Provide an iterator on addresses contained within the function -ida_funcs.func_item_iterator_t.chunk (method) - chunk(self) -> range_t +ida_funcs.func_item_iterator_t.chunk(self) -> "range_t const &" -ida_funcs.func_item_iterator_t.code_items (method) +ida_funcs.func_item_iterator_t.code_items(self) Provide an iterator on code items contained within the function -ida_funcs.func_item_iterator_t.current (method) - current(self) -> ea_t +ida_funcs.func_item_iterator_t.current(self) -> ida_idaapi.ea_t -ida_funcs.func_item_iterator_t.data_items (method) +ida_funcs.func_item_iterator_t.data_items(self) Provide an iterator on data items contained within the function -ida_funcs.func_item_iterator_t.decode_preceding_insn (method) - decode_preceding_insn(self, visited, p_farref, out) -> bool - - @param visited: eavec_t * - @param p_farref: bool * - @param out: insn_t * +ida_funcs.func_item_iterator_t.decode_preceding_insn(self, visited: "eavec_t *", p_farref: "bool *", out: "insn_t *") -> bool -ida_funcs.func_item_iterator_t.decode_prev_insn (method) - decode_prev_insn(self, out) -> bool - - @param out: insn_t * +ida_funcs.func_item_iterator_t.decode_prev_insn(self, out: "insn_t *") -> bool -ida_funcs.func_item_iterator_t.first (method) - first(self) -> bool +ida_funcs.func_item_iterator_t.first(self) -> bool -ida_funcs.func_item_iterator_t.head_items (method) +ida_funcs.func_item_iterator_t.head_items(self) Provide an iterator on item heads contained within the function -ida_funcs.func_item_iterator_t.last (method) - last(self) -> bool +ida_funcs.func_item_iterator_t.last(self) -> bool -ida_funcs.func_item_iterator_t.next_addr (method) - next_addr(self) -> bool +ida_funcs.func_item_iterator_t.next_addr(self) -> bool -ida_funcs.func_item_iterator_t.next_code (method) - next_code(self) -> bool +ida_funcs.func_item_iterator_t.next_code(self) -> bool -ida_funcs.func_item_iterator_t.next_data (method) - next_data(self) -> bool +ida_funcs.func_item_iterator_t.next_data(self) -> bool -ida_funcs.func_item_iterator_t.next_head (method) - next_head(self) -> bool +ida_funcs.func_item_iterator_t.next_head(self) -> bool -ida_funcs.func_item_iterator_t.next_not_tail (method) - next_not_tail(self) -> bool +ida_funcs.func_item_iterator_t.next_not_tail(self) -> bool -ida_funcs.func_item_iterator_t.not_tails (method) +ida_funcs.func_item_iterator_t.not_tails(self) Provide an iterator on non-tail addresses contained within the function -ida_funcs.func_item_iterator_t.prev (method) - prev(self, func) -> bool - - @param func: testf_t * +ida_funcs.func_item_iterator_t.prev(self, func: "testf_t *") -> bool -ida_funcs.func_item_iterator_t.prev_addr (method) - prev_addr(self) -> bool +ida_funcs.func_item_iterator_t.prev_addr(self) -> bool -ida_funcs.func_item_iterator_t.prev_code (method) - prev_code(self) -> bool +ida_funcs.func_item_iterator_t.prev_code(self) -> bool -ida_funcs.func_item_iterator_t.prev_data (method) - prev_data(self) -> bool +ida_funcs.func_item_iterator_t.prev_data(self) -> bool -ida_funcs.func_item_iterator_t.prev_head (method) - prev_head(self) -> bool +ida_funcs.func_item_iterator_t.prev_head(self) -> bool -ida_funcs.func_item_iterator_t.prev_not_tail (method) - prev_not_tail(self) -> bool +ida_funcs.func_item_iterator_t.prev_not_tail(self) -> bool -ida_funcs.func_item_iterator_t.set (method) - set(self, pfn, _ea=BADADDR) -> bool +ida_funcs.func_item_iterator_t.set(self, *args) -> bool Set a function range. if pfn == nullptr then a segment range will be set. - - @param pfn: (C++: func_t *) - @param _ea: (C++: ea_t) -ida_funcs.func_item_iterator_t.set_range (method) - set_range(self, ea1, ea2) -> bool +ida_funcs.func_item_iterator_t.set_ea(self, _ea: ida_idaapi.ea_t) -> bool + +ida_funcs.func_item_iterator_t.set_range(self, ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> bool Set an arbitrary range. - - @param ea1: (C++: ea_t) - @param ea2: (C++: ea_t) -ida_funcs.func_item_iterator_t.succ (method) - succ(self, func) -> bool - Similar to next(), but succ() iterates the chunks from low to high addresses, - while next() iterates through chunks starting at the function entry chunk - - @param func: (C++: testf_t *) +ida_funcs.func_item_iterator_t.succ(self, func: "testf_t *") -> bool + Similar to next(), but succ() iterates the chunks from low to high addresses, while next() iterates through chunks starting at the function entry chunk + -ida_funcs.func_item_iterator_t.succ_code (method) - succ_code(self) -> bool +ida_funcs.func_item_iterator_t.succ_code(self) -> bool -ida_funcs.func_parent_iterator_set (function) - func_parent_iterator_set(fpi, pfn) -> bool - - @param fpi: func_parent_iterator_t * - @param pfn: func_t * +ida_funcs.func_parent_iterator_set(fpi: "func_parent_iterator_t", pfn: "func_t") -> bool -ida_funcs.func_parent_iterator_t (class) - Proxy of C++ func_parent_iterator_t class. +ida_funcs.func_parent_iterator_t -ida_funcs.func_parent_iterator_t.__init__ (method) - __init__(self) -> func_parent_iterator_t - __init__(self, _fnt) -> func_parent_iterator_t - - @param _fnt: func_t * +ida_funcs.func_parent_iterator_t.__init__(self, *args) -ida_funcs.func_parent_iterator_t.__iter__ (method) +ida_funcs.func_parent_iterator_t.__iter__(self) Provide an iterator on function parents -ida_funcs.func_parent_iterator_t.__next__ (method) - __next__(self) -> bool +ida_funcs.func_parent_iterator_t.__next__(self) -> bool -ida_funcs.func_parent_iterator_t.first (method) - first(self) -> bool +ida_funcs.func_parent_iterator_t.first(self) -> bool -ida_funcs.func_parent_iterator_t.last (method) - last(self) -> bool +ida_funcs.func_parent_iterator_t.last(self) -> bool -ida_funcs.func_parent_iterator_t.parent (method) - parent(self) -> ea_t +ida_funcs.func_parent_iterator_t.parent(self) -> ida_idaapi.ea_t -ida_funcs.func_parent_iterator_t.prev (method) - prev(self) -> bool +ida_funcs.func_parent_iterator_t.prev(self) -> bool -ida_funcs.func_parent_iterator_t.reset_fnt (method) - reset_fnt(self, _fnt) - - @param _fnt: func_t * +ida_funcs.func_parent_iterator_t.reset_fnt(self, _fnt: "func_t") -> None -ida_funcs.func_parent_iterator_t.set (method) - set(self, _fnt) -> bool - - @param _fnt: func_t * +ida_funcs.func_parent_iterator_t.set(self, _fnt: "func_t") -> bool -ida_funcs.func_t (class) - Proxy of C++ func_t class. +ida_funcs.func_t -ida_funcs.func_t.__get_points__ (method) - __get_points__(self) -> dyn_stkpnt_array +ida_funcs.func_t.__get_points__(self) -> "dynamic_wrapped_array_t< stkpnt_t >" -ida_funcs.func_t.__get_referers__ (method) - __get_referers__(self) -> dyn_ea_array +ida_funcs.func_t.__get_referers__(self) -> "dynamic_wrapped_array_t< ea_t >" -ida_funcs.func_t.__get_regargs__ (method) - __get_regargs__(self) -> dyn_regarg_array +ida_funcs.func_t.__get_regargs__(self) -> "dynamic_wrapped_array_t< regarg_t >" -ida_funcs.func_t.__get_regvars__ (method) - __get_regvars__(self) -> dyn_regvar_array +ida_funcs.func_t.__get_regvars__(self) -> "dynamic_wrapped_array_t< regvar_t >" -ida_funcs.func_t.__get_tails__ (method) - __get_tails__(self) -> dyn_range_array +ida_funcs.func_t.__get_tails__(self) -> "dynamic_wrapped_array_t< range_t >" -ida_funcs.func_t.__init__ (method) - __init__(self, start=0, end=0, f=0) -> func_t - - @param start: ea_t - @param end: ea_t - @param f: flags64_t +ida_funcs.func_t.__init__(self, start: ida_idaapi.ea_t = 0, end: ida_idaapi.ea_t = 0, f: "flags64_t" = 0) -ida_funcs.func_t.__iter__ (method) +ida_funcs.func_t.__iter__(self) Alias for func_item_iterator_t(self).__iter__() -ida_funcs.func_t.addresses (method) +ida_funcs.func_t.addresses(self) Alias for func_item_iterator_t(self).addresses() -ida_funcs.func_t.analyzed_sp (method) - analyzed_sp(self) -> bool +ida_funcs.func_t.analyzed_sp(self) -> bool Has SP-analysis been performed? -ida_funcs.func_t.argsize (variable) - number of bytes purged from the stack upon returning +ida_funcs.func_t.argsize + number of bytes purged from the stack upon returning + -ida_funcs.func_t.code_items (method) +ida_funcs.func_t.code_items(self) Alias for func_item_iterator_t(self).code_items() -ida_funcs.func_t.color (variable) +ida_funcs.func_t.color user defined function color -ida_funcs.func_t.data_items (method) +ida_funcs.func_t.data_items(self) Alias for func_item_iterator_t(self).data_items() -ida_funcs.func_t.does_return (method) - does_return(self) -> bool +ida_funcs.func_t.does_return(self) -> bool Does function return? -ida_funcs.func_t.flags (variable) - Function flags +ida_funcs.func_t.flags + Function flags + -ida_funcs.func_t.fpd (variable) - frame pointer delta. (usually 0, i.e. realBP==typicalBP) use update_fpd() to - modify it. +ida_funcs.func_t.fpd + frame pointer delta. (usually 0, i.e. realBP==typicalBP) use update_fpd() to modify it. + -ida_funcs.func_t.frame (variable) +ida_funcs.func_t.frame netnode id of frame structure - see frame.hpp -ida_funcs.func_t.frregs (variable) - size of saved registers in frame. This range is immediately above the local - variables range. +ida_funcs.func_t.frregs + size of saved registers in frame. This range is immediately above the local variables range. + -ida_funcs.func_t.frsize (variable) - size of local variables part of frame in bytes. If FUNC_FRAME is set and fpd==0, - the frame pointer (EBP) is assumed to point to the top of the local variables - range. +ida_funcs.func_t.frsize + size of local variables part of frame in bytes. If FUNC_FRAME is set and fpd==0, the frame pointer (EBP) is assumed to point to the top of the local variables range. + -ida_funcs.func_t.head_items (method) +ida_funcs.func_t.get_frame_object(self) + Retrieve the function frame, in the form of a structure + where frame offsets that are accessed by the program, as well + as areas for "saved registers" and "return address", are + represented by structure members. + + If the function has no associated frame, return None + + @return a ida_typeinf.tinfo_t object representing the frame, or None + +ida_funcs.func_t.get_name(self) + Get the function name + + @return the function name + +ida_funcs.func_t.get_prototype(self) + Retrieve the function prototype. + + Once you have obtained the prototype, you can: + + * retrieve the return type through ida_typeinf.tinfo_t.get_rettype() + * iterate on the arguments using ida_typeinf.tinfo_t.iter_func() + + If the function has no associated prototype, return None + + @return a ida_typeinf.tinfo_t object representing the prototype, or None + +ida_funcs.func_t.head_items(self) Alias for func_item_iterator_t(self).head_items() -ida_funcs.func_t.is_far (method) - is_far(self) -> bool +ida_funcs.func_t.is_far(self) -> bool Is a far function? -ida_funcs.func_t.need_prolog_analysis (method) - need_prolog_analysis(self) -> bool +ida_funcs.func_t.need_prolog_analysis(self) -> bool Needs prolog analysis? -ida_funcs.func_t.not_tails (method) +ida_funcs.func_t.not_tails(self) Alias for func_item_iterator_t(self).not_tails() -ida_funcs.func_t.owner (variable) +ida_funcs.func_t.owner the address of the main function possessing this tail -ida_funcs.func_t.pntqty (variable) +ida_funcs.func_t.pntqty number of SP change points -ida_funcs.func_t.points (variable) - array of SP change points. use ...stkpnt...() functions to access this array. +ida_funcs.func_t.points + array of SP change points. use ...stkpnt...() functions to access this array. + -ida_funcs.func_t.referers (variable) - array of referers (function start addresses). use func_parent_iterator_t to - access the referers. +ida_funcs.func_t.points + array of SP change points. use ...stkpnt...() functions to access this array. + -ida_funcs.func_t.refqty (variable) +ida_funcs.func_t.referers + array of referers (function start addresses). use func_parent_iterator_t to access the referers. + + +ida_funcs.func_t.referers + array of referers (function start addresses). use func_parent_iterator_t to access the referers. + + +ida_funcs.func_t.refqty number of referers -ida_funcs.func_t.regargqty (variable) - number of register arguments. During analysis IDA tries to guess the register - arguments. It stores store the guessing outcome in this field. As soon as it - determines the final function prototype, regargqty is set to zero. +ida_funcs.func_t.regargqty + number of register arguments. During analysis IDA tries to guess the register arguments. It stores store the guessing outcome in this field. As soon as it determines the final function prototype, regargqty is set to zero. + -ida_funcs.func_t.regargs (variable) - unsorted array of register arguments. use ...regarg...() functions to access - this array. regargs are destroyed when the full function type is determined. +ida_funcs.func_t.regargs + unsorted array of register arguments. use ...regarg...() functions to access this array. regargs are destroyed when the full function type is determined. + -ida_funcs.func_t.regvarqty (variable) - number of register variables (-1-not read in yet) use find_regvar() to read - register variables +ida_funcs.func_t.regargs + unsorted array of register arguments. use ...regarg...() functions to access this array. regargs are destroyed when the full function type is determined. + -ida_funcs.func_t.regvars (variable) - array of register variables. this array is sorted by: start_ea. use - ...regvar...() functions to access this array. +ida_funcs.func_t.regvarqty + number of register variables (-1-not read in yet) use find_regvar() to read register variables + -ida_funcs.func_t.tailqty (variable) +ida_funcs.func_t.regvars + array of register variables. this array is sorted by: start_ea. use ...regvar...() functions to access this array. + + +ida_funcs.func_t.regvars + array of register variables. this array is sorted by: start_ea. use ...regvar...() functions to access this array. + + +ida_funcs.func_t.tailqty number of function tails -ida_funcs.func_t.tails (variable) - array of tails, sorted by ea. use func_tail_iterator_t to access function tails. +ida_funcs.func_t.tails + array of tails, sorted by ea. use func_tail_iterator_t to access function tails. + -ida_funcs.func_t__from_ptrval__ (function) - func_t__from_ptrval__(ptrval) -> func_t - - @param ptrval: size_t +ida_funcs.func_t.tails + array of tails, sorted by ea. use func_tail_iterator_t to access function tails. + -ida_funcs.func_tail_iterator_set (function) - func_tail_iterator_set(fti, pfn, ea) -> bool - - @param fti: func_tail_iterator_t * - @param pfn: func_t * - @param ea: ea_t +ida_funcs.func_t__from_ptrval__(ptrval: "size_t") -> "func_t *" -ida_funcs.func_tail_iterator_set_ea (function) - func_tail_iterator_set_ea(fti, ea) -> bool - - @param fti: func_tail_iterator_t * - @param ea: ea_t +ida_funcs.func_tail_iterator_set(fti: "func_tail_iterator_t", pfn: "func_t", ea: ida_idaapi.ea_t) -> bool -ida_funcs.func_tail_iterator_t (class) - Proxy of C++ func_tail_iterator_t class. +ida_funcs.func_tail_iterator_set_ea(fti: "func_tail_iterator_t", ea: ida_idaapi.ea_t) -> bool -ida_funcs.func_tail_iterator_t.__init__ (method) - __init__(self) -> func_tail_iterator_t - __init__(self, _pfn, ea=BADADDR) -> func_tail_iterator_t - - @param _pfn: func_t * - @param ea: ea_t +ida_funcs.func_tail_iterator_t -ida_funcs.func_tail_iterator_t.__iter__ (method) +ida_funcs.func_tail_iterator_t.__init__(self, *args) + +ida_funcs.func_tail_iterator_t.__iter__(self) Provide an iterator on function tails -ida_funcs.func_tail_iterator_t.__next__ (method) - __next__(self) -> bool +ida_funcs.func_tail_iterator_t.__next__(self) -> bool -ida_funcs.func_tail_iterator_t.chunk (method) - chunk(self) -> range_t +ida_funcs.func_tail_iterator_t.chunk(self) -> "range_t const &" -ida_funcs.func_tail_iterator_t.first (method) - first(self) -> bool +ida_funcs.func_tail_iterator_t.first(self) -> bool -ida_funcs.func_tail_iterator_t.last (method) - last(self) -> bool +ida_funcs.func_tail_iterator_t.last(self) -> bool -ida_funcs.func_tail_iterator_t.main (method) - main(self) -> bool +ida_funcs.func_tail_iterator_t.main(self) -> bool -ida_funcs.func_tail_iterator_t.prev (method) - prev(self) -> bool +ida_funcs.func_tail_iterator_t.prev(self) -> bool -ida_funcs.func_tail_iterator_t.set (method) - set(self, _pfn, ea=BADADDR) -> bool - - @param _pfn: func_t * - @param ea: ea_t +ida_funcs.func_tail_iterator_t.set(self, *args) -> bool -ida_funcs.func_tail_iterator_t.set_ea (method) - set_ea(self, ea) -> bool - - @param ea: ea_t +ida_funcs.func_tail_iterator_t.set_ea(self, ea: ida_idaapi.ea_t) -> bool -ida_funcs.func_tail_iterator_t.set_range (method) - set_range(self, ea1, ea2) -> bool - - @param ea1: ea_t - @param ea2: ea_t +ida_funcs.func_tail_iterator_t.set_range(self, ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> bool -ida_funcs.get_current_idasgn (function) - get_current_idasgn() -> int - Get number of the the current signature. - - @return: 0..n-1 +ida_funcs.get_current_idasgn() -> int + Get number of the the current signature. + + @returns 0..n-1 -ida_funcs.get_fchunk (function) - get_fchunk(ea) -> func_t - Get pointer to function chunk structure by address. - - @param ea: (C++: ea_t) any address in a function chunk - @return: ptr to a function chunk or nullptr. This function may return a function - entry as well as a function tail. +ida_funcs.get_fchunk(ea: ida_idaapi.ea_t) -> "func_t *" + Get pointer to function chunk structure by address. + + @param ea: any address in a function chunk + @returns ptr to a function chunk or nullptr. This function may return a function entry as well as a function tail. -ida_funcs.get_fchunk_num (function) - get_fchunk_num(ea) -> int - Get ordinal number of a function chunk in the global list of function chunks. - - @param ea: (C++: ea_t) any address in the function chunk - @return: number of function chunk (0..get_fchunk_qty()-1). -1 means 'no function - chunk at the specified address'. +ida_funcs.get_fchunk_num(ea: ida_idaapi.ea_t) -> int + Get ordinal number of a function chunk in the global list of function chunks. + + @param ea: any address in the function chunk + @returns number of function chunk (0..get_fchunk_qty()-1). -1 means 'no function chunk at the specified address'. -ida_funcs.get_fchunk_qty (function) - get_fchunk_qty() -> size_t +ida_funcs.get_fchunk_qty() -> "size_t" Get total number of function chunks in the program. -ida_funcs.get_fchunk_referer (function) - get_fchunk_referer(ea, idx) -> ea_t - - @param ea: ea_t - @param idx: size_t +ida_funcs.get_fchunk_referer(ea: int, idx) -ida_funcs.get_func (function) - get_func(ea) -> func_t - Get pointer to function structure by address. - - @param ea: (C++: ea_t) any address in a function - @return: ptr to a function or nullptr. This function returns a function entry - chunk. +ida_funcs.get_func(ea: ida_idaapi.ea_t) -> "func_t *" + Get pointer to function structure by address. + + @param ea: any address in a function + @returns ptr to a function or nullptr. This function returns a function entry chunk. -ida_funcs.get_func_bitness (function) - get_func_bitness(pfn) -> int - Get function bitness (which is equal to the function segment bitness). - pfn==nullptr => returns 0 +ida_funcs.get_func_bitness(pfn: "func_t") -> int + Get function bitness (which is equal to the function segment bitness). pfn==nullptr => returns 0 + @retval 0: 16 @retval 1: 32 @retval 2: 64 - - @param pfn: (C++: const func_t *) func_t const * -ida_funcs.get_func_bits (function) - get_func_bits(pfn) -> int +ida_funcs.get_func_bits(pfn: "func_t") -> int Get number of bits in the function addressing. - - @param pfn: (C++: const func_t *) func_t const * -ida_funcs.get_func_bytes (function) - get_func_bytes(pfn) -> int +ida_funcs.get_func_bytes(pfn: "func_t") -> int Get number of bytes in the function addressing. - - @param pfn: (C++: const func_t *) func_t const * -ida_funcs.get_func_chunknum (function) - get_func_chunknum(pfn, ea) -> int - Get the containing tail chunk of 'ea'. +ida_funcs.get_func_chunknum(pfn: "func_t", ea: ida_idaapi.ea_t) -> int + Get the containing tail chunk of 'ea'. + @retval -1: means 'does not contain ea' @retval 0: means the 'pfn' itself contains ea @retval >0: the number of the containing function tail chunk - - @param pfn: (C++: func_t *) - @param ea: (C++: ea_t) -ida_funcs.get_func_cmt (function) - get_func_cmt(pfn, repeatable) -> str - Get function comment. - - @param pfn: (C++: const func_t *) ptr to function structure - @param repeatable: (C++: bool) get repeatable comment? - @return: size of comment or -1 In fact this function works with function chunks - too. +ida_funcs.get_func_cmt(pfn: "func_t", repeatable: bool) -> str + Get function comment. + + @param pfn: ptr to function structure + @param repeatable: get repeatable comment? + @returns size of comment or -1 In fact this function works with function chunks too. -ida_funcs.get_func_name (function) - get_func_name(ea) -> str - Get function name. - - @param ea: (C++: ea_t) any address in the function - @return: length of the function name +ida_funcs.get_func_name(ea: ida_idaapi.ea_t) -> str + Get function name. + + @param ea: any address in the function + @returns length of the function name -ida_funcs.get_func_num (function) - get_func_num(ea) -> int - Get ordinal number of a function. - - @param ea: (C++: ea_t) any address in the function - @return: number of function (0..get_func_qty()-1). -1 means 'no function at the - specified address'. +ida_funcs.get_func_num(ea: ida_idaapi.ea_t) -> int + Get ordinal number of a function. + + @param ea: any address in the function + @returns number of function (0..get_func_qty()-1). -1 means 'no function at the specified address'. -ida_funcs.get_func_qty (function) - get_func_qty() -> size_t +ida_funcs.get_func_qty() -> "size_t" Get total number of functions in the program. -ida_funcs.get_func_ranges (function) - get_func_ranges(ranges, pfn) -> ea_t - Get function ranges. - - @param ranges: (C++: rangeset_t *) buffer to receive the range info - @param pfn: (C++: func_t *) ptr to function structure - @return: end address of the last function range (BADADDR-error) +ida_funcs.get_func_ranges(ranges: "rangeset_t", pfn: "func_t") -> ida_idaapi.ea_t + Get function ranges. + + @param ranges: buffer to receive the range info + @param pfn: ptr to function structure + @returns end address of the last function range (BADADDR-error) -ida_funcs.get_idasgn_desc (function) - get_idasgn_desc(n) -> (str, str) +ida_funcs.get_idasgn_desc(n) Get information about a signature in the list. It returns: (name of signature, names of optional libraries) @@ -25351,773 +16742,547 @@ ida_funcs.get_idasgn_desc (function) @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 (function) - get_idasgn_desc_with_matches(n) -> (str, str, int) +ida_funcs.get_idasgn_desc_with_matches(n) 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 (function) - get_idasgn_qty() -> int - Get number of signatures in the list of planned and applied signatures. - - @return: 0..n +ida_funcs.get_idasgn_qty() -> int + Get number of signatures in the list of planned and applied signatures. + + @returns 0..n -ida_funcs.get_idasgn_title (function) - get_idasgn_title(name) -> str - Get full description of the signature by its short name. - - @param name: (C++: const char *) short name of a signature - @return: size of signature description or -1 +ida_funcs.get_idasgn_title(name: str) -> str + Get full description of the signature by its short name. + + @param name: short name of a signature + @returns size of signature description or -1 -ida_funcs.get_next_fchunk (function) - get_next_fchunk(ea) -> func_t - Get pointer to the next function chunk in the global list. - - @param ea: (C++: ea_t) any address in the program - @return: ptr to function chunk or nullptr if next function chunk doesn't exist +ida_funcs.get_next_fchunk(ea: ida_idaapi.ea_t) -> "func_t *" + Get pointer to the next function chunk in the global list. + + @param ea: any address in the program + @returns ptr to function chunk or nullptr if next function chunk doesn't exist -ida_funcs.get_next_func (function) - get_next_func(ea) -> func_t - Get pointer to the next function. - - @param ea: (C++: ea_t) any address in the program - @return: ptr to function or nullptr if next function doesn't exist +ida_funcs.get_next_func(ea: ida_idaapi.ea_t) -> "func_t *" + Get pointer to the next function. + + @param ea: any address in the program + @returns ptr to function or nullptr if next function doesn't exist -ida_funcs.get_next_func_addr (function) - get_next_func_addr(pfn, ea) -> ea_t - - @param pfn: func_t * - @param ea: ea_t +ida_funcs.get_next_func_addr(pfn: "func_t", ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t -ida_funcs.get_prev_fchunk (function) - get_prev_fchunk(ea) -> func_t - Get pointer to the previous function chunk in the global list. - - @param ea: (C++: ea_t) any address in the program - @return: ptr to function chunk or nullptr if previous function chunk doesn't - exist +ida_funcs.get_prev_fchunk(ea: ida_idaapi.ea_t) -> "func_t *" + Get pointer to the previous function chunk in the global list. + + @param ea: any address in the program + @returns ptr to function chunk or nullptr if previous function chunk doesn't exist -ida_funcs.get_prev_func (function) - get_prev_func(ea) -> func_t - Get pointer to the previous function. - - @param ea: (C++: ea_t) any address in the program - @return: ptr to function or nullptr if previous function doesn't exist +ida_funcs.get_prev_func(ea: ida_idaapi.ea_t) -> "func_t *" + Get pointer to the previous function. + + @param ea: any address in the program + @returns ptr to function or nullptr if previous function doesn't exist -ida_funcs.get_prev_func_addr (function) - get_prev_func_addr(pfn, ea) -> ea_t - - @param pfn: func_t * - @param ea: ea_t +ida_funcs.get_prev_func_addr(pfn: "func_t", ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t -ida_funcs.getn_fchunk (function) - getn_fchunk(n) -> func_t - Get pointer to function chunk structure by number. - - @param n: (C++: int) number of function chunk, is in range 0..get_fchunk_qty()-1 - @return: ptr to a function chunk or nullptr. This function may return a function - entry as well as a function tail. +ida_funcs.getn_fchunk(n: int) -> "func_t *" + Get pointer to function chunk structure by number. + + @param n: number of function chunk, is in range 0..get_fchunk_qty()-1 + @returns ptr to a function chunk or nullptr. This function may return a function entry as well as a function tail. -ida_funcs.getn_func (function) - getn_func(n) -> func_t - Get pointer to function structure by number. - - @param n: (C++: size_t) number of function, is in range 0..get_func_qty()-1 - @return: ptr to a function or nullptr. This function returns a function entry - chunk. +ida_funcs.getn_func(n: "size_t") -> "func_t *" + Get pointer to function structure by number. + + @param n: number of function, is in range 0..get_func_qty()-1 + @returns ptr to a function or nullptr. This function returns a function entry chunk. -ida_funcs.is_finally_visible_func (function) - is_finally_visible_func(pfn) -> bool +ida_funcs.is_finally_visible_func(pfn: "func_t") -> bool Is the function visible (event after considering SCF_SHHID_FUNC)? - - @param pfn: (C++: func_t *) -ida_funcs.is_func_entry (function) - is_func_entry(pfn) -> bool +ida_funcs.is_func_entry(pfn: "func_t") -> bool Does function describe a function entry chunk? - - @param pfn: (C++: const func_t *) func_t const * -ida_funcs.is_func_locked (function) - is_func_locked(pfn) -> bool +ida_funcs.is_func_locked(pfn: "func_t") -> bool Is the function pointer locked? - - @param pfn: (C++: const func_t *) func_t const * -ida_funcs.is_func_tail (function) - is_func_tail(pfn) -> bool +ida_funcs.is_func_tail(pfn: "func_t") -> bool Does function describe a function tail chunk? - - @param pfn: (C++: const func_t *) func_t const * -ida_funcs.is_same_func (function) - is_same_func(ea1, ea2) -> bool +ida_funcs.is_same_func(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> bool Do two addresses belong to the same function? - - @param ea1: (C++: ea_t) - @param ea2: (C++: ea_t) -ida_funcs.is_visible_func (function) - is_visible_func(pfn) -> bool +ida_funcs.is_visible_func(pfn: "func_t") -> bool Is the function visible (not hidden)? - - @param pfn: (C++: func_t *) -ida_funcs.lock_func (class) - Proxy of C++ lock_func class. +ida_funcs.lock_func -ida_funcs.lock_func.__init__ (method) - __init__(self, _pfn) -> lock_func - - @param _pfn: func_t const * +ida_funcs.lock_func.__init__(self, _pfn: "func_t") -ida_funcs.lock_func_range (function) - 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 *) func_t const * - @param lock: (C++: bool) +ida_funcs.lock_func_range(pfn: "func_t", lock: bool) -> None + Lock function pointer Locked pointers are guaranteed to remain valid until they are unlocked. Ranges with locked pointers cannot be deleted or moved. + -ida_funcs.lock_func_with_tails_t (class) - Proxy of C++ lock_func_with_tails_t class. +ida_funcs.lock_func_with_tails_t -ida_funcs.lock_func_with_tails_t.__init__ (method) - __init__(self, pfn) -> lock_func_with_tails_t - - @param pfn: func_t * +ida_funcs.lock_func_with_tails_t.__init__(self, pfn: "func_t") -ida_funcs.plan_to_apply_idasgn (function) - plan_to_apply_idasgn(fname) -> int - Add a signature file to the list of planned signature files. - - @param fname: (C++: const char *) file name. should not contain directory part. - @return: 0 if failed, otherwise number of planned (and applied) signatures +ida_funcs.plan_to_apply_idasgn(fname: str) -> int + Add a signature file to the list of planned signature files. + + @param fname: file name. should not contain directory part. + @returns 0 if failed, otherwise number of planned (and applied) signatures -ida_funcs.read_regargs (function) - read_regargs(pfn) - - @param pfn: func_t * +ida_funcs.read_regargs(pfn: "func_t") -> None -ida_funcs.reanalyze_function (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: (C++: func_t *) pointer to a function - @param ea1: (C++: ea_t) start of the range to analyze - @param ea2: (C++: ea_t) end of range to analyze - @param analyze_parents: (C++: bool) 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. +ida_funcs.reanalyze_function(*args) -> None + 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 + @param ea1: start of the range to analyze + @param ea2: end of range to analyze + @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. -ida_funcs.reanalyze_noret_flag (function) - 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) +ida_funcs.reanalyze_noret_flag(ea: ida_idaapi.ea_t) -> bool + Plan to reanalyze noret flag. This function does not remove FUNC_NORET if it is already present. It just plans to reanalysis. + -ida_funcs.regarg_t (class) - Proxy of C++ regarg_t class. +ida_funcs.regarg_t -ida_funcs.regarg_t.__init__ (method) - __init__(self) -> regarg_t - __init__(self, r) -> regarg_t - - @param r: regarg_t const & +ida_funcs.regarg_t.__init__(self, *args) -ida_funcs.regarg_t.swap (method) - swap(self, r) - - @param r: regarg_t & +ida_funcs.regarg_t.swap(self, r: "regarg_t") -> None -ida_funcs.remove_func_tail (function) - 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 *) pointer to the function - @param tail_ea: (C++: ea_t) any address inside the tail to remove +ida_funcs.remove_func_tail(pfn: "func_t", tail_ea: ida_idaapi.ea_t) -> 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: pointer to the function + @param tail_ea: any address inside the tail to remove -ida_funcs.set_func_cmt (function) - set_func_cmt(pfn, cmt, repeatable) -> bool - Set function comment. This function works with function chunks too. - - @param pfn: (C++: const func_t *) ptr to function structure - @param cmt: (C++: const char *) comment string, may be multiline (with ' +ida_funcs.set_func_cmt(pfn: "func_t", cmt: str, repeatable: bool) -> bool + Set function comment. This function works with function chunks too. + + @param pfn: ptr to function structure + @param cmt: comment string, may be multiline (with ' '). Use empty str ("") to delete comment - @param repeatable: (C++: bool) set repeatable comment? + @param repeatable: set repeatable comment? -ida_funcs.set_func_end (function) - set_func_end(ea, newend) -> bool - Move function chunk end address. - - @param ea: (C++: ea_t) any address in the function - @param newend: (C++: ea_t) new end address of the function - @return: success +ida_funcs.set_func_end(ea: ida_idaapi.ea_t, newend: ida_idaapi.ea_t) -> bool + Move function chunk end address. + + @param ea: any address in the function + @param newend: new end address of the function + @returns success -ida_funcs.set_func_name_if_jumpfunc (function) - set_func_name_if_jumpfunc(pfn, oldname) -> int - Give a meaningful name to function if it consists of only 'jump' instruction. - - @param pfn: (C++: func_t *) pointer to function (may be nullptr) - @param oldname: (C++: const char *) 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 nullptr. - @return: success +ida_funcs.set_func_name_if_jumpfunc(pfn: "func_t", oldname: str) -> int + Give a meaningful name to function if it consists of only 'jump' instruction. + + @param pfn: pointer to function (may be nullptr) + @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 nullptr. + @returns success -ida_funcs.set_func_start (function) - set_func_start(ea, newstart) -> int - Move function chunk start address. - - @param ea: (C++: ea_t) any address in the function - @param newstart: (C++: ea_t) new end address of the function - @return: Function move result codes +ida_funcs.set_func_start(ea: ida_idaapi.ea_t, newstart: ida_idaapi.ea_t) -> int + Move function chunk start address. + + @param ea: any address in the function + @param newstart: new end address of the function + @returns Function move result codes -ida_funcs.set_noret_insn (function) - 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_noret_insn(insn_ea: ida_idaapi.ea_t, noret: bool) -> 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() + + @returns true if the instruction 'noret' flag has been changed -ida_funcs.set_tail_owner (function) - set_tail_owner(fnt, new_owner) -> bool - Set a new owner of a function tail. The new owner function must be already - referring to the tail (after append_func_tail). - - @param fnt: (C++: func_t *) pointer to the function tail - @param new_owner: (C++: ea_t) the entry point of the new owner function +ida_funcs.set_tail_owner(fnt: "func_t", new_owner: ida_idaapi.ea_t) -> bool + Set a new owner of a function tail. The new owner function must be already referring to the tail (after append_func_tail). + + @param fnt: pointer to the function tail + @param new_owner: the entry point of the new owner function -ida_funcs.set_visible_func (function) - set_visible_func(pfn, visible) +ida_funcs.set_visible_func(pfn: "func_t", visible: bool) -> None Set visibility of function. - - @param pfn: (C++: func_t *) - @param visible: (C++: bool) -ida_funcs.try_to_add_libfunc (function) - 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: (C++: ea_t) any address in the program - @return: Library function codes +ida_funcs.try_to_add_libfunc(ea: ida_idaapi.ea_t) -> 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 + @returns Library function codes -ida_funcs.update_func (function) - 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: (C++: func_t *) ptr to function structure - @return: success +ida_funcs.update_func(pfn: "func_t") -> 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 + @returns success -ida_gdl (module) +ida_gdl Low level graph drawing operations. -ida_gdl.BasicBlock (class) +ida_gdl.BasicBlock Basic block class. It is returned by the Flowchart class -ida_gdl.BasicBlock.__init__ (method) +ida_gdl.BasicBlock.__init__(self, id, bb, fc) Block type (check fc_block_type_t enum) -ida_gdl.BasicBlock.preds (method) +ida_gdl.BasicBlock.preds(self) Iterates the predecessors list -ida_gdl.BasicBlock.succs (method) +ida_gdl.BasicBlock.succs(self) Iterates the successors list -ida_gdl.CHART_FOLLOW_DIRECTION (variable) - analyze references to added blocks only in the direction of the reference who - discovered the current block +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 (variable) +ida_gdl.CHART_GEN_DOT generate .dot file (file extension is forced to .dot) -ida_gdl.CHART_GEN_GDL (variable) +ida_gdl.CHART_GEN_GDL generate .gdl file (file extension is forced to .gdl) -ida_gdl.CHART_IGNORE_LIB_FROM (variable) +ida_gdl.CHART_IGNORE_LIB_FROM ignore references from library functions -ida_gdl.CHART_IGNORE_LIB_TO (variable) +ida_gdl.CHART_IGNORE_LIB_TO ignore references to library functions -ida_gdl.CHART_NOLIBFUNCS (variable) +ida_gdl.CHART_NOLIBFUNCS don't include library functions in the graph -ida_gdl.CHART_PRINT_DOTS (variable) +ida_gdl.CHART_PRINT_DOTS print dots if xrefs exist outside of the range recursion depth -ida_gdl.CHART_PRINT_NAMES (variable) +ida_gdl.CHART_PRINT_NAMES print labels for each block? -ida_gdl.CHART_RECURSIVE (variable) +ida_gdl.CHART_RECURSIVE analyze added blocks -ida_gdl.CHART_REFERENCED (variable) +ida_gdl.CHART_REFERENCED references from the addresses in the list -ida_gdl.CHART_REFERENCING (variable) +ida_gdl.CHART_REFERENCING references to the addresses in the list -ida_gdl.CHART_WINGRAPH (variable) +ida_gdl.CHART_WINGRAPH call grapher to display the graph -ida_gdl.FC_APPND (variable) +ida_gdl.FC_APPND multirange flowchart (set by append_to_flowchart) -ida_gdl.FC_CALL_ENDS (variable) +ida_gdl.FC_CALL_ENDS call instructions terminate basic blocks -ida_gdl.FC_CHKBREAK (variable) +ida_gdl.FC_CHKBREAK build_qflow_chart() may be aborted by user -ida_gdl.FC_NOEXT (variable) - 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_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_NOPREDS (variable) +ida_gdl.FC_NOPREDS do not compute predecessor lists -ida_gdl.FC_OUTLINES (variable) +ida_gdl.FC_OUTLINES include outlined code (with FUNC_OUTLINE) -ida_gdl.FC_PRINT (variable) +ida_gdl.FC_PRINT print names (used only by display_flow_chart()) -ida_gdl.FlowChart (class) +ida_gdl.FC_RESERVED + former FC_PREDS + +ida_gdl.FlowChart Flowchart class used to determine basic blocks. Check ex_gdl_qflow_chart.py for sample usage. -ida_gdl.FlowChart.__getitem__ (method) +ida_gdl.FlowChart.__getitem__(self, index) Returns a basic block @return: BasicBlock -ida_gdl.FlowChart.__init__ (method) +ida_gdl.FlowChart.__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. -ida_gdl.FlowChart.__iter__ (method) +ida_gdl.FlowChart.__iter__(self) -ida_gdl.FlowChart._getitem (method) +ida_gdl.FlowChart._getitem(self, index) -ida_gdl.FlowChart.refresh (method) +ida_gdl.FlowChart.refresh(self) Refreshes the flow chart -ida_gdl.FlowChart.size (variable) +ida_gdl.FlowChart.size Number of blocks in the flow chart -ida_gdl.cancellable_graph_t (class) - Proxy of C++ cancellable_graph_t class. +ida_gdl.cancellable_graph_t -ida_gdl.cancellable_graph_t.__disown__ (method) +ida_gdl.cancellable_graph_t.__disown__(self) -ida_gdl.cancellable_graph_t.__init__ (method) - __init__(self) -> cancellable_graph_t - - @param self: PyObject * +ida_gdl.cancellable_graph_t.__init__(self) -ida_gdl.display_gdl (function) - 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(). The path - should point to a temporary file: when wingraph32 succeeds showing the graph, - the input file will be deleted. - - @param fname: (C++: const char *) char const * - @return: error code from os, 0 if ok +ida_gdl.display_gdl(fname: str) -> 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(). The path should point to a temporary file: when wingraph32 succeeds showing the graph, the input file will be deleted. + + @returns error code from os, 0 if ok -ida_gdl.fcb_cndret (variable) +ida_gdl.edge_t + +ida_gdl.edge_t.__eq__(self, y: "edge_t") -> bool + +ida_gdl.edge_t.__init__(self, x: int = 0, y: int = 0) + +ida_gdl.edge_t.__lt__(self, y: "edge_t") -> bool + +ida_gdl.edge_t.__ne__(self, y: "edge_t") -> bool + +ida_gdl.edge_t.dst + destination node number + +ida_gdl.edge_t.src + source node number + +ida_gdl.edgevec_t + +ida_gdl.edgevec_t.__init__(self) + +ida_gdl.fcb_cndret conditional return block -ida_gdl.fcb_enoret (variable) +ida_gdl.fcb_enoret external noreturn block (does not belong to the function) -ida_gdl.fcb_error (variable) +ida_gdl.fcb_error block passes execution past the function end -ida_gdl.fcb_extern (variable) +ida_gdl.fcb_extern external normal block -ida_gdl.fcb_indjump (variable) +ida_gdl.fcb_indjump block ends with indirect jump -ida_gdl.fcb_noret (variable) +ida_gdl.fcb_noret noreturn block -ida_gdl.fcb_normal (variable) +ida_gdl.fcb_normal normal block -ida_gdl.fcb_ret (variable) +ida_gdl.fcb_ret return block -ida_gdl.gdl_graph_t (class) - Proxy of C++ gdl_graph_t class. +ida_gdl.gdl_graph_t -ida_gdl.gdl_graph_t.__disown__ (method) +ida_gdl.gdl_graph_t.__disown__(self) -ida_gdl.gdl_graph_t.__init__ (method) - __init__(self) -> gdl_graph_t - - @param self: PyObject * +ida_gdl.gdl_graph_t.__init__(self) -ida_gdl.gdl_graph_t.begin (method) - begin(self) -> node_iterator +ida_gdl.gdl_graph_t.begin(self) -> "node_iterator" -ida_gdl.gdl_graph_t.edge (method) - edge(self, node, i, ispred) -> int - - @param node: int - @param i: int - @param ispred: bool +ida_gdl.gdl_graph_t.edge(self, node: int, i: int, ispred: bool) -> int -ida_gdl.gdl_graph_t.empty (method) - empty(self) -> bool +ida_gdl.gdl_graph_t.empty(self) -> bool -ida_gdl.gdl_graph_t.end (method) - end(self) -> node_iterator +ida_gdl.gdl_graph_t.end(self) -> "node_iterator" -ida_gdl.gdl_graph_t.entry (method) - entry(self) -> int +ida_gdl.gdl_graph_t.entry(self) -> int -ida_gdl.gdl_graph_t.exists (method) - exists(self, node) -> bool - - @param node: int +ida_gdl.gdl_graph_t.exists(self, node: int) -> bool -ida_gdl.gdl_graph_t.exit (method) - exit(self) -> int +ida_gdl.gdl_graph_t.exit(self) -> int -ida_gdl.gdl_graph_t.front (method) - front(self) -> int +ida_gdl.gdl_graph_t.front(self) -> int -ida_gdl.gdl_graph_t.get_edge_color (method) - get_edge_color(self, i, j) -> bgcolor_t - - @param i: int - @param j: int +ida_gdl.gdl_graph_t.get_edge_color(self, i: int, j: int) -> "bgcolor_t" -ida_gdl.gdl_graph_t.get_node_color (method) - get_node_color(self, n) -> bgcolor_t - - @param n: int +ida_gdl.gdl_graph_t.get_node_color(self, n: int) -> "bgcolor_t" -ida_gdl.gdl_graph_t.get_node_label (method) - get_node_label(self, n) -> char * - - @param n: int +ida_gdl.gdl_graph_t.get_node_label(self, n: int) -> "char *" -ida_gdl.gdl_graph_t.nedge (method) - nedge(self, node, ispred) -> size_t - - @param node: int - @param ispred: bool +ida_gdl.gdl_graph_t.nedge(self, node: int, ispred: bool) -> "size_t" -ida_gdl.gdl_graph_t.node_qty (method) - node_qty(self) -> int +ida_gdl.gdl_graph_t.node_qty(self) -> int -ida_gdl.gdl_graph_t.npred (method) - npred(self, node) -> int - - @param node: int +ida_gdl.gdl_graph_t.npred(self, node: int) -> int -ida_gdl.gdl_graph_t.nsucc (method) - nsucc(self, node) -> int - - @param node: int +ida_gdl.gdl_graph_t.nsucc(self, node: int) -> int -ida_gdl.gdl_graph_t.pred (method) - pred(self, node, i) -> int - - @param node: int - @param i: int +ida_gdl.gdl_graph_t.pred(self, node: int, i: int) -> int -ida_gdl.gdl_graph_t.print_edge (method) - print_edge(self, fp, i, j) -> bool - - @param fp: FILE * - @param i: int - @param j: int +ida_gdl.gdl_graph_t.print_edge(self, fp: "FILE *", i: int, j: int) -> bool -ida_gdl.gdl_graph_t.print_graph_attributes (method) - print_graph_attributes(self, fp) - - @param fp: FILE * +ida_gdl.gdl_graph_t.print_graph_attributes(self, fp: "FILE *") -> None -ida_gdl.gdl_graph_t.print_node (method) - print_node(self, fp, n) -> bool - - @param fp: FILE * - @param n: int +ida_gdl.gdl_graph_t.print_node(self, fp: "FILE *", n: int) -> bool -ida_gdl.gdl_graph_t.print_node_attributes (method) - print_node_attributes(self, fp, n) - - @param fp: FILE * - @param n: int +ida_gdl.gdl_graph_t.print_node_attributes(self, fp: "FILE *", n: int) -> None -ida_gdl.gdl_graph_t.size (method) - size(self) -> int +ida_gdl.gdl_graph_t.size(self) -> int -ida_gdl.gdl_graph_t.succ (method) - succ(self, node, i) -> int - - @param node: int - @param i: int +ida_gdl.gdl_graph_t.succ(self, node: int, i: int) -> int -ida_gdl.gen_complex_call_chart (function) - gen_complex_call_chart(filename, wait, title, ea1, ea2, flags, recursion_depth=-1) -> bool - Build and display a complex xref graph. - - @param filename: (C++: const char *) output file name. the file extension is not used. maybe - nullptr. - @param wait: (C++: const char *) message to display during graph building - @param title: (C++: const char *) graph title - @param ea1: (C++: ea_t) ,ea2: address range - @param flags: (C++: int) 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. - @param flags: (C++: int) 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. - @param recursion_depth: (C++: int32) optional limit of recursion - @return: success. if fails, a warning message is displayed on the screen +ida_gdl.gen_complex_call_chart(filename: str, wait: str, title: str, ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, flags: int, recursion_depth: int = -1) -> bool + Build and display a complex xref graph. + + @param filename: output file name. the file extension is not used. maybe nullptr. + @param wait: message to display during graph building + @param title: graph title + @param ea1: address range + @param ea2: address range + @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. + @param recursion_depth: optional limit of recursion + @returns success. if fails, a warning message is displayed on the screen -ida_gdl.gen_flow_graph (function) - gen_flow_graph(filename, title, pfn, ea1, ea2, gflags) -> bool - Build and display a flow graph. - - @param filename: (C++: const char *) output file name. the file extension is not used. maybe - nullptr. - @param title: (C++: const char *) graph title - @param pfn: (C++: func_t *) function to graph - @param ea1: (C++: ea_t) ,ea2: if pfn == nullptr, then the address range - @param gflags: (C++: int) combination of Flow graph building flags. if none of - CHART_GEN_DOT, CHART_GEN_GDL, CHART_WINGRAPH is specified, the - function will return false - @param gflags: (C++: int) combination of Flow graph building flags. if none of - CHART_GEN_DOT, CHART_GEN_GDL, CHART_WINGRAPH is specified, the - function will return false - @return: success. if fails, a warning message is displayed on the screen +ida_gdl.gen_flow_graph(filename: str, title: str, pfn: "func_t *", ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, gflags: int) -> bool + Build and display a flow graph. + + @param filename: output file name. the file extension is not used. maybe nullptr. + @param title: graph title + @param pfn: function to graph + @param ea1: if pfn == nullptr, then the address range + @param ea2: if pfn == nullptr, then the address range + @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 + @returns success. if fails, a warning message is displayed on the screen -ida_gdl.gen_gdl (function) - gen_gdl(g, fname) +ida_gdl.gen_gdl(g: "gdl_graph_t", fname: str) -> None Create GDL file for graph. - - @param g: (C++: const gdl_graph_t *) gdl_graph_t const * - @param fname: (C++: const char *) char const * -ida_gdl.gen_simple_call_chart (function) - gen_simple_call_chart(filename, wait, title, gflags) -> bool - Build and display a simple function call graph. - - @param filename: (C++: const char *) output file name. the file extension is not used. maybe - nullptr. - @param wait: (C++: const char *) message to display during graph building - @param title: (C++: const char *) graph title - @param gflags: (C++: int) 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. - @return: success. if fails, a warning message is displayed on the screen +ida_gdl.gen_simple_call_chart(filename: str, wait: str, title: str, gflags: int) -> bool + Build and display a simple function call graph. + + @param filename: output file name. the file extension is not used. maybe nullptr. + @param wait: message to display during graph building + @param title: graph title + @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. + @returns success. if fails, a warning message is displayed on the screen -ida_gdl.is_noret_block (function) - is_noret_block(btype) -> bool +ida_gdl.is_noret_block(btype: "fc_block_type_t") -> bool Does this block never return? - - @param btype: (C++: fc_block_type_t) enum fc_block_type_t -ida_gdl.is_ret_block (function) - is_ret_block(btype) -> bool +ida_gdl.is_ret_block(btype: "fc_block_type_t") -> bool Does this block return? - - @param btype: (C++: fc_block_type_t) enum fc_block_type_t -ida_gdl.node_iterator (class) - Proxy of C++ node_iterator class. +ida_gdl.node_iterator -ida_gdl.node_iterator.__eq__ (method) - __eq__(self, n) -> bool - - @param n: node_iterator const & +ida_gdl.node_iterator.__eq__(self, n: "node_iterator") -> bool -ida_gdl.node_iterator.__init__ (method) - __init__(self, _g, n) -> node_iterator - - @param _g: gdl_graph_t const * - @param n: int +ida_gdl.node_iterator.__init__(self, _g: "gdl_graph_t", n: int) -ida_gdl.node_iterator.__ne__ (method) - __ne__(self, n) -> bool - - @param n: node_iterator const & +ida_gdl.node_iterator.__ne__(self, n: "node_iterator") -> bool -ida_gdl.node_iterator.__ref__ (method) - __ref__(self) -> int +ida_gdl.node_iterator.__ref__(self) -> int -ida_gdl.qbasic_block_t (class) - Proxy of C++ qbasic_block_t class. +ida_gdl.node_ordering_t -ida_gdl.qbasic_block_t.__init__ (method) - __init__(self) -> qbasic_block_t +ida_gdl.node_ordering_t.__init__(self) -ida_gdl.qflow_chart_t (class) - Proxy of C++ qflow_chart_t class. +ida_gdl.node_ordering_t.clear(self) -> None -ida_gdl.qflow_chart_t.__getitem__ (method) - __getitem__(self, n) -> qbasic_block_t - - @param n: int +ida_gdl.node_ordering_t.clr(self, _node: int) -> bool -ida_gdl.qflow_chart_t.__init__ (method) - __init__(self) -> qflow_chart_t - __init__(self, _title, _pfn, _ea1, _ea2, _flags) -> qflow_chart_t - - @param _title: char const * - @param _pfn: func_t * - @param _ea1: ea_t - @param _ea2: ea_t - @param _flags: int +ida_gdl.node_ordering_t.node(self, _order: "size_t") -> int -ida_gdl.qflow_chart_t.append_to_flowchart (method) - append_to_flowchart(self, ea1, ea2) - - @param ea1: ea_t - @param ea2: ea_t +ida_gdl.node_ordering_t.order(self, _node: int) -> int -ida_gdl.qflow_chart_t.bounds (variable) +ida_gdl.node_ordering_t.resize(self, n: int) -> None + +ida_gdl.node_ordering_t.set(self, _node: int, num: int) -> None + +ida_gdl.node_ordering_t.size(self) -> "size_t" + +ida_gdl.qbasic_block_t + +ida_gdl.qbasic_block_t.__init__(self) + +ida_gdl.qflow_chart_t + +ida_gdl.qflow_chart_t.__getitem__(self, n: int) -> "qbasic_block_t *" + +ida_gdl.qflow_chart_t.__init__(self, *args) + +ida_gdl.qflow_chart_t.append_to_flowchart(self, ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> None + +ida_gdl.qflow_chart_t.bounds overall bounds of the qflow_chart_t instance -ida_gdl.qflow_chart_t.calc_block_type (method) - calc_block_type(self, blknum) -> fc_block_type_t - - @param blknum: size_t +ida_gdl.qflow_chart_t.calc_block_type(self, blknum: "size_t") -> "fc_block_type_t" -ida_gdl.qflow_chart_t.create (method) - create(self, _title, _pfn, _ea1, _ea2, _flags) +ida_gdl.qflow_chart_t.create(self, *args) -> None + This function has the following signatures: - @param _title: char const * - @param _pfn: func_t * - @param _ea1: ea_t - @param _ea2: ea_t - @param _flags: int + 0. create(_title: str, _pfn: func_t *, _ea1: ida_idaapi.ea_t, _ea2: ida_idaapi.ea_t, _flags: int) -> None + 1. create(_title: str, ranges: const rangevec_t &, _flags: int) -> None - create(self, _title, ranges, _flags) + # 0: create(_title: str, _pfn: func_t *, _ea1: ida_idaapi.ea_t, _ea2: ida_idaapi.ea_t, _flags: int) -> None - @param _title: char const * - @param ranges: rangevec_t const & - @param _flags: int + + # 1: create(_title: str, ranges: const rangevec_t &, _flags: int) -> None -ida_gdl.qflow_chart_t.flags (variable) +ida_gdl.qflow_chart_t.flags flags. See Flow chart flags -ida_gdl.qflow_chart_t.get_node_label (method) - get_node_label(self, n) -> char * - - @param n: int +ida_gdl.qflow_chart_t.get_node_label(self, *args) -> "char *" -ida_gdl.qflow_chart_t.is_noret_block (method) - is_noret_block(self, blknum) -> bool - - @param blknum: size_t +ida_gdl.qflow_chart_t.is_noret_block(self, blknum: "size_t") -> bool -ida_gdl.qflow_chart_t.is_ret_block (method) - is_ret_block(self, blknum) -> bool - - @param blknum: size_t +ida_gdl.qflow_chart_t.is_ret_block(self, blknum: "size_t") -> bool -ida_gdl.qflow_chart_t.npred (method) - npred(self, node) -> int - - @param node: int +ida_gdl.qflow_chart_t.npred(self, node: int) -> int -ida_gdl.qflow_chart_t.nproper (variable) +ida_gdl.qflow_chart_t.nproper number of basic blocks belonging to the specified range -ida_gdl.qflow_chart_t.nsucc (method) - nsucc(self, node) -> int - - @param node: int +ida_gdl.qflow_chart_t.nsucc(self, node: int) -> int -ida_gdl.qflow_chart_t.pfn (variable) +ida_gdl.qflow_chart_t.pfn the function this instance was built upon -ida_gdl.qflow_chart_t.pred (method) - pred(self, node, i) -> int - - @param node: int - @param i: int +ida_gdl.qflow_chart_t.pred(self, node: int, i: int) -> int -ida_gdl.qflow_chart_t.print_names (method) - print_names(self) -> bool +ida_gdl.qflow_chart_t.print_names(self) -> bool -ida_gdl.qflow_chart_t.print_node_attributes (method) - print_node_attributes(self, fp, n) - - @param fp: FILE * - @param n: int +ida_gdl.qflow_chart_t.print_node_attributes(self, fp: "FILE *", n: int) -> None -ida_gdl.qflow_chart_t.refresh (method) - refresh(self) +ida_gdl.qflow_chart_t.refresh(self) -> None -ida_gdl.qflow_chart_t.size (method) - size(self) -> int +ida_gdl.qflow_chart_t.size(self) -> int -ida_gdl.qflow_chart_t.succ (method) - succ(self, node, i) -> int - - @param node: int - @param i: int +ida_gdl.qflow_chart_t.succ(self, node: int, i: int) -> int -ida_graph (module) +ida_graph Graph view management. -ida_graph.GLICTL_CENTER (variable) +ida_graph.GLICTL_CENTER the gli should be set/get as center -ida_graph.GraphViewer (class) +ida_graph.GraphViewer This class wraps the user graphing facility provided by the graph.hpp file -ida_graph.GraphViewer.AddCommand (method) +ida_graph.GraphViewer.AddCommand(self, title, shortcut) -ida_graph.GraphViewer.AddEdge (method) +ida_graph.GraphViewer.AddEdge(self, src_node, dest_node) Creates an edge between two given node ids -ida_graph.GraphViewer.AddNode (method) +ida_graph.GraphViewer.AddNode(self, obj) Creates a node associated with the given object and returns the node id -ida_graph.GraphViewer.Clear (method) +ida_graph.GraphViewer.Clear(self) Clears all the nodes and edges -ida_graph.GraphViewer.Close (method) +ida_graph.GraphViewer.Close(self) Closes the graph. It is possible to call Show() again (which will recreate the graph) -ida_graph.GraphViewer.Count (method) +ida_graph.GraphViewer.Count(self) Returns the node count -ida_graph.GraphViewer.OnCommand (method) +ida_graph.GraphViewer.OnCommand(self, cmd_id) -ida_graph.GraphViewer.OnPopup (method) +ida_graph.GraphViewer.OnPopup(self, widget, popup_handle) -ida_graph.GraphViewer.OnRefresh (method) +ida_graph.GraphViewer.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. @@ -26125,4758 +17290,3169 @@ ida_graph.GraphViewer.OnRefresh (method) @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.Select (method) +ida_graph.GraphViewer.Select(self, node_id) Selects a node on the graph -ida_graph.GraphViewer.Show (method) +ida_graph.GraphViewer.Show(self) Shows an existing graph or creates a new one @return: Boolean -ida_graph.GraphViewer.UI_Hooks_Trampoline (class) +ida_graph.GraphViewer.UI_Hooks_Trampoline -ida_graph.GraphViewer.UI_Hooks_Trampoline.__init__ (method) +ida_graph.GraphViewer.UI_Hooks_Trampoline.__init__(self, v) -ida_graph.GraphViewer.UI_Hooks_Trampoline.populating_widget_popup (method) +ida_graph.GraphViewer.UI_Hooks_Trampoline.populating_widget_popup(self, w, popup_handle) -ida_graph.GraphViewer._OnBind (method) +ida_graph.GraphViewer._OnBind(self, hook) -ida_graph.GraphViewer.__getitem__ (method) +ida_graph.GraphViewer.__getitem__(self, idx) Returns a reference to the object associated with this node id -ida_graph.GraphViewer.__init__ (method) +ida_graph.GraphViewer.__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? -ida_graph.GraphViewer.__init__._qccb (function) +ida_graph.GraphViewer.__init__._qccb(ctx, cmd_id) -ida_graph.GraphViewer.__iter__ (method) +ida_graph.GraphViewer.__iter__(self) -ida_graph.MTG_DOT_NODE (variable) +ida_graph.MTG_DOT_NODE is dot node? -ida_graph.MTG_GROUP_NODE (variable) +ida_graph.MTG_GROUP_NODE is group node? -ida_graph.MTG_NON_DISPLAYABLE_NODE (variable) - 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.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 (variable) +ida_graph.NIF_BG_COLOR node_info_t::bg_color -ida_graph.NIF_EA (variable) +ida_graph.NIF_EA node_info_t::ea -ida_graph.NIF_FLAGS (variable) +ida_graph.NIF_FLAGS node_info_t::flags -ida_graph.NIF_FRAME_COLOR (variable) +ida_graph.NIF_FRAME_COLOR node_info_t::frame_color -ida_graph.NIF_TEXT (variable) +ida_graph.NIF_TEXT node_info_t::text -ida_graph.TPointDouble (class) - Proxy of C++ TPointDouble class. +ida_graph.TPointDouble -ida_graph.TPointDouble.__eq__ (method) - __eq__(self, r) -> bool +ida_graph.TPointDouble.__eq__(self, r: "TPointDouble") -> bool + +ida_graph.TPointDouble.__init__(self, *args) + +ida_graph.TPointDouble.__ne__(self, r: "TPointDouble") -> bool + +ida_graph.TPointDouble.add(self, r: "TPointDouble") -> None + +ida_graph.TPointDouble.negate(self) -> None + +ida_graph.TPointDouble.sub(self, r: "TPointDouble") -> None + +ida_graph.calc_dist(p: "point_t", q: "point_t") -> "double" + Calculate distance between p and q. + +ida_graph.clr_node_info(gid: "graph_id_t", node: int, flags: int) -> None + Clear node info for the given node. + + @param gid: id of desired graph + @param node: node number + @param flags: combination of Node info flags, identifying which fields of node_info_t will be cleared + +ida_graph.create_disasm_graph(*args) -> "interactive_graph_t *" + This function has the following signatures: - @param r: TPointDouble const & - -ida_graph.TPointDouble.__init__ (method) - __init__(self) -> TPointDouble - __init__(self, a, b) -> TPointDouble + 0. create_disasm_graph(ea: ida_idaapi.ea_t) -> interactive_graph_t * + 1. create_disasm_graph(ranges: const rangevec_t &) -> interactive_graph_t * - @param a: double - @param b: double + # 0: create_disasm_graph(ea: ida_idaapi.ea_t) -> interactive_graph_t * - __init__(self, r) -> TPointDouble + Create a graph for the function that contains 'ea'. - @param r: point_t const & - -ida_graph.TPointDouble.__ne__ (method) - __ne__(self, r) -> bool - @param r: TPointDouble const & - -ida_graph.TPointDouble.add (method) - add(self, r) + # 1: create_disasm_graph(ranges: const rangevec_t &) -> interactive_graph_t * - @param r: TPointDouble const & + Create a graph using an arbitrary set of ranges. -ida_graph.TPointDouble.negate (method) - negate(self) +ida_graph.create_graph_viewer(title: str, id: int, callback: "hook_cb_t *", ud: "void *", title_height: int, parent: "TWidget *" = None) -> "graph_viewer_t *" + Create a custom graph viewer. + + @param title: the widget title + @param id: graph id + @param callback: callback to handle graph notifications (graph_notification_t) + @param ud: user data passed to callback + @param title_height: node title height + @param parent: the parent widget of the graph viewer + @returns new viewer -ida_graph.TPointDouble.sub (method) - sub(self, r) - - @param r: TPointDouble const & +ida_graph.create_interactive_graph(id: int) -> "interactive_graph_t *" + Create a new empty graph with given id. -ida_graph.abstract_graph_t (class) - Proxy of C++ abstract_graph_t class. +ida_graph.create_user_graph_place(node: int, lnnum: int) -> "user_graph_place_t *" + Get a copy of a user_graph_place_t (returns a pointer to static storage) -ida_graph.abstract_graph_t.__disown__ (method) +ida_graph.del_node_info(gid: "graph_id_t", node: int) -> None + Delete the node_info_t for the given node. -ida_graph.abstract_graph_t.__init__ (method) - __init__(self) -> abstract_graph_t - - @param self: PyObject * +ida_graph.delete_interactive_graph(g: "interactive_graph_t") -> None + Delete graph object. + -ida_graph.abstract_graph_t.callback_ud (variable) +ida_graph.drawable_graph_t + +ida_graph.drawable_graph_t.__disown__(self) + +ida_graph.drawable_graph_t.__init__(self) + +ida_graph.drawable_graph_t.callback_ud user data for callback -ida_graph.abstract_graph_t.circle_center (variable) +ida_graph.drawable_graph_t.circle_center for layout_circle -ida_graph.abstract_graph_t.circle_radius (variable) +ida_graph.drawable_graph_t.circle_radius for layout_circle -ida_graph.abstract_graph_t.create_circle_layout (method) - create_circle_layout(self, p, radius) -> bool - - @param p: point_t - @param radius: int +ida_graph.drawable_graph_t.create_circle_layout(self, p: "point_t", radius: int) -> bool -ida_graph.abstract_graph_t.create_tree_layout (method) - create_tree_layout(self) -> bool +ida_graph.drawable_graph_t.create_tree_layout(self) -> bool -ida_graph.abstract_graph_t.current_layout (variable) +ida_graph.drawable_graph_t.current_layout see Proximity view layouts -ida_graph.abstract_graph_t.get_edge (method) - get_edge(self, e) -> edge_info_t - - @param e: edge_t +ida_graph.drawable_graph_t.get_edge(self, e: "edge_t") -> "edge_info_t *" -ida_graph.abstract_graph_t.grcall (method) - grcall(self, code) -> ssize_t - - @param code: int +ida_graph.drawable_graph_t.grcall(self, code: int) -> "ssize_t" -ida_graph.abstract_graph_t.nrect (method) - nrect(self, n) -> rect_t - - @param n: int +ida_graph.drawable_graph_t.nrect(self, n: int) -> "rect_t" -ida_graph.abstract_graph_t.rect_edges_made (variable) +ida_graph.drawable_graph_t.rect_edges_made have create rectangular edges? -ida_graph.abstract_graph_t.set_callback (method) - set_callback(self, _callback, _ud) - - @param _callback: hook_cb_t * - @param _ud: void * +ida_graph.drawable_graph_t.set_callback(self, _callback: "hook_cb_t *", _ud: "void *") -> None -ida_graph.abstract_graph_t.title (variable) +ida_graph.drawable_graph_t.title graph title -ida_graph.calc_dist (function) - calc_dist(p, q) -> double - Calculate distance between p and q. - - @param p: (C++: point_t) - @param q: (C++: point_t) +ida_graph.edge_info_t -ida_graph.clr_node_info (function) - clr_node_info(gid, node, flags) - Clear node info for the given node. - - @param gid: (C++: graph_id_t) id of desired graph - @param node: (C++: int) node number - @param flags: (C++: uint32) combination of Node info flags, identifying which fields of - node_info_t will be cleared +ida_graph.edge_info_t.__init__(self) -ida_graph.create_disasm_graph (function) - create_disasm_graph(ea) -> mutable_graph_t - Create a graph using an arbitrary set of ranges. - - @param ea: ea_t - - create_disasm_graph(ranges) -> mutable_graph_t - - @param ranges: rangevec_t const & - -ida_graph.create_graph_viewer (function) - create_graph_viewer(title, id, callback, ud, title_height, parent=None) -> graph_viewer_t * - Create a custom graph viewer. - - @param title: (C++: const char *) the widget title - @param id: (C++: uval_t) graph id - @param callback: (C++: hook_cb_t *) callback to handle graph notifications (graph_notification_t) - @param ud: (C++: void *) user data passed to callback - @param title_height: (C++: int) node title height - @param parent: (C++: TWidget *) the parent widget of the graph viewer - @return: new viewer - -ida_graph.create_mutable_graph (function) - 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 (function) - 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 (function) - 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 (function) - delete_mutable_graph(g) - Delete graph object. - @warning: 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 *) - -ida_graph.edge_info_t (class) - Proxy of C++ edge_info_t class. - -ida_graph.edge_info_t.__init__ (method) - __init__(self) -> edge_info_t - -ida_graph.edge_info_t.color (variable) +ida_graph.edge_info_t.color edge color -ida_graph.edge_info_t.layout (variable) +ida_graph.edge_info_t.dstoff + destination: edge port offset from the left + +ida_graph.edge_info_t.layout describes geometry of edge -ida_graph.edge_info_t.reverse_layout (method) - reverse_layout(self) +ida_graph.edge_info_t.reverse_layout(self) -> None -ida_graph.edge_info_t.width (variable) +ida_graph.edge_info_t.srcoff + source: edge port offset from the left + +ida_graph.edge_info_t.width edge width -ida_graph.edge_infos_wrapper_t (class) - Proxy of C++ edge_infos_wrapper_t class. +ida_graph.edge_infos_wrapper_t -ida_graph.edge_infos_wrapper_t.__init__ (method) +ida_graph.edge_infos_wrapper_t.__init__(self, *args, **kwargs) -ida_graph.edge_infos_wrapper_t.clear (method) - clear(self) +ida_graph.edge_infos_wrapper_t.clear(self) -> None -ida_graph.edge_layout_point_t (class) - Proxy of C++ edge_layout_point_t class. +ida_graph.edge_layout_point_t -ida_graph.edge_layout_point_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: edge_layout_point_t const & +ida_graph.edge_layout_point_t.__eq__(self, r: "edge_layout_point_t") -> bool -ida_graph.edge_layout_point_t.__init__ (method) - __init__(self) -> edge_layout_point_t - __init__(self, _e, _pidx) -> edge_layout_point_t - - @param _e: edge_t const & - @param _pidx: int +ida_graph.edge_layout_point_t.__init__(self, *args) -ida_graph.edge_layout_point_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: edge_layout_point_t const & +ida_graph.edge_layout_point_t.__ne__(self, r: "edge_layout_point_t") -> bool -ida_graph.edge_layout_point_t.compare (method) - compare(self, r) -> int - - @param r: edge_layout_point_t const & +ida_graph.edge_layout_point_t.compare(self, r: "edge_layout_point_t") -> int -ida_graph.edge_layout_point_t.e (variable) +ida_graph.edge_layout_point_t.e parent edge -ida_graph.edge_layout_point_t.pidx (variable) +ida_graph.edge_layout_point_t.pidx index into edge_info_t::layout -ida_graph.edge_segment_t (class) - Proxy of C++ edge_segment_t class. +ida_graph.edge_segment_t -ida_graph.edge_segment_t.__init__ (method) - __init__(self) -> edge_segment_t +ida_graph.edge_segment_t.__init__(self) -ida_graph.edge_segment_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: edge_segment_t const & +ida_graph.edge_segment_t.__lt__(self, r: "edge_segment_t") -> bool -ida_graph.edge_segment_t.length (method) - length(self) -> size_t +ida_graph.edge_segment_t.length(self) -> "size_t" -ida_graph.edge_segment_t.toright (method) - toright(self) -> bool +ida_graph.edge_segment_t.toright(self) -> bool -ida_graph.edge_t (class) - Proxy of C++ edge_t class. - -ida_graph.edge_t.__eq__ (method) - __eq__(self, y) -> bool - - @param y: edge_t const & - -ida_graph.edge_t.__init__ (method) - __init__(self) -> edge_t - __init__(self, x, y) -> edge_t - - @param x: int - @param y: int - -ida_graph.edge_t.__lt__ (method) - __lt__(self, y) -> bool - - @param y: edge_t const & - -ida_graph.edge_t.__ne__ (method) - __ne__(self, y) -> bool - - @param y: edge_t const & - -ida_graph.edge_t.dst (variable) - destination node number - -ida_graph.edge_t.src (variable) - source node number - -ida_graph.get_graph_viewer (function) - get_graph_viewer(parent) -> graph_viewer_t * +ida_graph.get_graph_viewer(parent: "TWidget *") -> "graph_viewer_t *" Get custom graph viewer for given form. - - @param parent: (C++: TWidget *) -ida_graph.get_node_info (function) - get_node_info(out, gid, node) -> bool - Get node info. - - @param out: (C++: node_info_t *) result - @param gid: (C++: graph_id_t) id of desired graph - @param node: (C++: int) node number - @return: success +ida_graph.get_node_info(out: "node_info_t", gid: "graph_id_t", node: int) -> bool + Get node info. + + @param out: result + @param gid: id of desired graph + @param node: node number + @returns success -ida_graph.get_viewer_graph (function) - get_viewer_graph(gv) -> mutable_graph_t +ida_graph.get_viewer_graph(gv: "graph_viewer_t *") -> "interactive_graph_t *" Get graph object for given custom graph viewer. - - @param gv: (C++: graph_viewer_t *) -ida_graph.git_edge (variable) +ida_graph.git_edge edge (graph_item_t::e, graph_item_t::n. n is farthest edge endpoint) -ida_graph.git_elp (variable) +ida_graph.git_elp edge layout point (graph_item_t::elp) -ida_graph.git_node (variable) +ida_graph.git_node node title (graph_item_t::n) -ida_graph.git_none (variable) +ida_graph.git_none nothing -ida_graph.git_text (variable) +ida_graph.git_text node text (graph_item_t::n, graph_item_t::p) -ida_graph.git_tool (variable) +ida_graph.git_tool node title button (graph_item_t::n, graph_item_t::b) -ida_graph.graph_item_t (class) - Proxy of C++ graph_item_t class. +ida_graph.graph_item_t -ida_graph.graph_item_t.__init__ (method) - __init__(self) -> graph_item_t +ida_graph.graph_item_t.__init__(self) -ida_graph.graph_item_t.b (variable) +ida_graph.graph_item_t.b button number -ida_graph.graph_item_t.e (variable) +ida_graph.graph_item_t.e edge source and destination -ida_graph.graph_item_t.elp (variable) +ida_graph.graph_item_t.elp edge layout point -ida_graph.graph_item_t.is_edge (method) - is_edge(self) -> bool +ida_graph.graph_item_t.is_edge(self) -> bool -ida_graph.graph_item_t.is_node (method) - is_node(self) -> bool +ida_graph.graph_item_t.is_node(self) -> bool -ida_graph.graph_item_t.n (variable) +ida_graph.graph_item_t.n node number -ida_graph.graph_item_t.p (variable) +ida_graph.graph_item_t.p text coordinates in the node -ida_graph.graph_item_t.type (variable) +ida_graph.graph_item_t.type type -ida_graph.graph_node_visitor_t (class) - Proxy of C++ graph_node_visitor_t class. +ida_graph.graph_node_visitor_t -ida_graph.graph_node_visitor_t.__disown__ (method) +ida_graph.graph_node_visitor_t.__disown__(self) -ida_graph.graph_node_visitor_t.__init__ (method) - __init__(self) -> graph_node_visitor_t - - @param self: PyObject * +ida_graph.graph_node_visitor_t.__init__(self) -ida_graph.graph_node_visitor_t.is_forbidden_edge (method) - is_forbidden_edge(self, arg0, arg1) -> bool +ida_graph.graph_node_visitor_t.is_forbidden_edge(self, arg0: int, arg1: int) -> bool Should the edge between 'n' and 'm' be ignored? - - @param arg0: int - @param arg1: int -ida_graph.graph_node_visitor_t.is_visited (method) - is_visited(self, n) -> bool +ida_graph.graph_node_visitor_t.is_visited(self, n: int) -> bool Have we already visited the given node? - - @param n: (C++: int) -ida_graph.graph_node_visitor_t.reinit (method) - reinit(self) +ida_graph.graph_node_visitor_t.reinit(self) -> None Reset visited nodes. -ida_graph.graph_node_visitor_t.set_visited (method) - set_visited(self, n) +ida_graph.graph_node_visitor_t.set_visited(self, n: int) -> None Mark node as visited. - - @param n: (C++: int) -ida_graph.graph_node_visitor_t.visit_node (method) - visit_node(self, arg0) -> int +ida_graph.graph_node_visitor_t.visit_node(self, arg0: int) -> int Implements action to take when a node is visited. - - @param arg0: int -ida_graph.graph_path_visitor_t (class) - Proxy of C++ graph_path_visitor_t class. +ida_graph.graph_path_visitor_t -ida_graph.graph_path_visitor_t.__disown__ (method) +ida_graph.graph_path_visitor_t.__disown__(self) -ida_graph.graph_path_visitor_t.__init__ (method) - __init__(self) -> graph_path_visitor_t - - @param self: PyObject * +ida_graph.graph_path_visitor_t.__init__(self) -ida_graph.graph_path_visitor_t.path (variable) +ida_graph.graph_path_visitor_t.path current path -ida_graph.graph_path_visitor_t.prune (variable) - walk_forward(): prune := true means to stop the current path +ida_graph.graph_path_visitor_t.prune + walk_forward(): prune := true means to stop the current path + -ida_graph.graph_path_visitor_t.walk_backward (method) - walk_backward(self, arg0) -> int - - @param arg0: int +ida_graph.graph_path_visitor_t.walk_backward(self, arg0: int) -> int -ida_graph.graph_path_visitor_t.walk_forward (method) - walk_forward(self, arg0) -> int - - @param arg0: int +ida_graph.graph_path_visitor_t.walk_forward(self, arg0: int) -> int -ida_graph.graph_visitor_t (class) - Proxy of C++ graph_visitor_t class. +ida_graph.graph_visitor_t -ida_graph.graph_visitor_t.__disown__ (method) +ida_graph.graph_visitor_t.__disown__(self) -ida_graph.graph_visitor_t.__init__ (method) - __init__(self) -> graph_visitor_t - - @param self: PyObject * +ida_graph.graph_visitor_t.__init__(self) -ida_graph.graph_visitor_t.visit_edge (method) - visit_edge(self, arg2, arg3) -> int - - @param arg2: edge_t - @param arg3: edge_info_t * +ida_graph.graph_visitor_t.visit_edge(self, arg2: "edge_t", arg3: "edge_info_t") -> int -ida_graph.graph_visitor_t.visit_node (method) - visit_node(self, arg2, arg3) -> int - - @param arg2: int - @param arg3: rect_t & +ida_graph.graph_visitor_t.visit_node(self, arg2: int, arg3: "rect_t") -> int -ida_graph.grcode_calculating_layout (variable) - calculating user-defined graph layout. - - @retval 0: not implemented - @retval 1: graph layout calculated by the plugin +ida_graph.grcode_calculating_layout + calculating user-defined graph layout. + -ida_graph.grcode_center_on (variable) +ida_graph.grcode_center_on use viewer_center_on() -ida_graph.grcode_change_group_visibility (variable) - use mutable_graph_t::change_group_visibility() +ida_graph.grcode_change_group_visibility + use interactive_graph_t::change_group_visibility() -ida_graph.grcode_changed_graph (variable) - new graph has been set. - - @retval 0: must return 0 +ida_graph.grcode_changed_graph + new graph has been set. + -ida_graph.grcode_clear (variable) - use mutable_graph_t::clear() +ida_graph.grcode_clear + use interactive_graph_t::clear() -ida_graph.grcode_clicked (variable) - graph is being clicked. this callback allows you to ignore some clicks. it - occurs too early, internal graph variables are not updated yet. current_item1, - current_item2 point to the same thing. item2 has more information. see also: - custom_viewer_click_t - - @retval 0: ok - @retval 1: ignore click +ida_graph.grcode_clicked + graph is being clicked. this callback allows you to ignore some clicks. it occurs too early, internal graph variables are not updated yet. current_item1, current_item2 point to the same thing. item2 has more information. see also: custom_viewer_click_t + -ida_graph.grcode_create_circle_layout (variable) - use abstract_graph_t::create_circle_layout() +ida_graph.grcode_create_circle_layout + use drawable_graph_t::create_circle_layout() -ida_graph.grcode_create_digraph_layout (variable) - use mutable_graph_t::create_digraph_layout() +ida_graph.grcode_create_digraph_layout + use interactive_graph_t::create_digraph_layout() -ida_graph.grcode_create_disasm_graph1 (variable) +ida_graph.grcode_create_disasm_graph1 use create_disasm_graph(ea_t ea) -ida_graph.grcode_create_disasm_graph2 (variable) +ida_graph.grcode_create_disasm_graph2 use create_disasm_graph(const rangevec_t &ranges) -ida_graph.grcode_create_graph_viewer (variable) +ida_graph.grcode_create_graph_viewer use create_graph_viewer() -ida_graph.grcode_create_group (variable) - use mutable_graph_t::create_group() +ida_graph.grcode_create_group + use interactive_graph_t::create_group() -ida_graph.grcode_create_mutable_graph (variable) - use create_mutable_graph() +ida_graph.grcode_create_interactive_graph + use create_interactive_graph() -ida_graph.grcode_create_tree_layout (variable) - use abstract_graph_t::create_tree_layout() +ida_graph.grcode_create_tree_layout + use drawable_graph_t::create_tree_layout() -ida_graph.grcode_create_user_graph_place (variable) +ida_graph.grcode_create_user_graph_place use create_user_graph_place() -ida_graph.grcode_creating_group (variable) - a group is being created. this provides an opportunity for the graph to forbid - creation of the group. Note that groups management is done by the - mutable_graph_t instance itself: there is no need to modify the graph in this - callback. - - @retval 0: ok - @retval 1: forbid group creation +ida_graph.grcode_creating_group + a group is being created. this provides an opportunity for the graph to forbid creation of the group. Note that groups management is done by the interactive_graph_t instance itself: there is no need to modify the graph in this callback. + -ida_graph.grcode_dblclicked (variable) - a graph node has been double clicked. - - @retval 0: ok - @retval 1: ignore click +ida_graph.grcode_dblclicked + a graph node has been double clicked. + -ida_graph.grcode_del_custom_layout (variable) - use mutable_graph_t::del_custom_layout() +ida_graph.grcode_del_custom_layout + use interactive_graph_t::del_custom_layout() -ida_graph.grcode_del_node_info (variable) +ida_graph.grcode_del_node_info use viewer_del_node_info() -ida_graph.grcode_delete_group (variable) - use mutable_graph_t::delete_group() +ida_graph.grcode_delete_group + use interactive_graph_t::delete_group() -ida_graph.grcode_delete_mutable_graph (variable) - use delete_mutable_graph() +ida_graph.grcode_delete_interactive_graph + use delete_interactive_graph() -ida_graph.grcode_deleting_group (variable) - a group is being deleted. this provides an opportunity for the graph to forbid - deletion of the group. Note that groups management is done by the - mutable_graph_t instance itself: there is no need to modify the graph in this - callback. - - @retval 0: ok - @retval 1: forbid group deletion +ida_graph.grcode_deleting_group + a group is being deleted. this provides an opportunity for the graph to forbid deletion of the group. Note that groups management is done by the interactive_graph_t instance itself: there is no need to modify the graph in this callback. + -ida_graph.grcode_destroyed (variable) - graph is being destroyed. Note that this doesn't mean the graph viewer is being - destroyed; this only means that the graph that is being displayed by it is being - destroyed, and that, e.g., any possibly cached data should be invalidated (this - event can happen when, for example, the user decides to group nodes together: - that operation will effectively create a new graph, that will replace the old - one.) To be notified when the graph viewer itself is being destroyed, please see - notification 'view_close', in kernwin.hpp - - @retval 0: must return 0 +ida_graph.grcode_destroyed + graph is being destroyed. Note that this doesn't mean the graph viewer is being destroyed; this only means that the graph that is being displayed by it is being destroyed, and that, e.g., any possibly cached data should be invalidated (this event can happen when, for example, the user decides to group nodes together: that operation will effectively create a new graph, that will replace the old one.) To be notified when the graph viewer itself is being destroyed, please see notification 'view_close', in kernwin.hpp + -ida_graph.grcode_edge_infos_wrapper_clear (variable) +ida_graph.grcode_edge_infos_wrapper_clear use edge_infos_wrapper_t::clear() -ida_graph.grcode_edge_infos_wrapper_copy (variable) +ida_graph.grcode_edge_infos_wrapper_copy use edge_infos_wrapper_t::operator=() -ida_graph.grcode_empty (variable) - use mutable_graph_t::empty() +ida_graph.grcode_empty + use interactive_graph_t::empty() -ida_graph.grcode_find_subgraph_node (variable) - use mutable_graph_t::_find_subgraph_node() +ida_graph.grcode_find_subgraph_node + use interactive_graph_t::_find_subgraph_node() -ida_graph.grcode_fit_window (variable) +ida_graph.grcode_fit_window use viewer_fit_window() -ida_graph.grcode_get_curnode (variable) +ida_graph.grcode_get_curnode use viewer_get_curnode() -ida_graph.grcode_get_custom_layout (variable) - use mutable_graph_t::get_custom_layout() +ida_graph.grcode_get_custom_layout + use interactive_graph_t::get_custom_layout() -ida_graph.grcode_get_gli (variable) +ida_graph.grcode_get_gli use viewer_get_gli() -ida_graph.grcode_get_graph_groups (variable) - use mutable_graph_t::get_graph_groups() +ida_graph.grcode_get_graph_groups + use interactive_graph_t::get_graph_groups() -ida_graph.grcode_get_graph_viewer (variable) +ida_graph.grcode_get_graph_viewer use get_graph_viewer() -ida_graph.grcode_get_node_info (variable) +ida_graph.grcode_get_node_info use viewer_get_node_info() -ida_graph.grcode_get_node_representative (variable) - use mutable_graph_t::get_node_representative() +ida_graph.grcode_get_node_representative + use interactive_graph_t::get_node_representative() -ida_graph.grcode_get_selection (variable) +ida_graph.grcode_get_selection use viewer_get_selection() -ida_graph.grcode_get_viewer_graph (variable) +ida_graph.grcode_get_viewer_graph use get_viewer_graph() -ida_graph.grcode_gotfocus (variable) - a graph viewer got focus. - - @retval 0: must return 0 +ida_graph.grcode_gotfocus + a graph viewer got focus. + -ida_graph.grcode_group_visibility (variable) - a group is being collapsed/uncollapsed this provides an opportunity for the - graph to forbid changing the visibility of the group. Note that groups - management is done by the mutable_graph_t instance itself: there is no need to - modify the graph in this callback. - - @retval 0: ok - @retval 1: forbid group modification +ida_graph.grcode_group_visibility + a group is being collapsed/uncollapsed this provides an opportunity for the graph to forbid changing the visibility of the group. Note that groups management is done by the interactive_graph_t instance itself: there is no need to modify the graph in this callback. + -ida_graph.grcode_is_visible_node (variable) - use mutable_graph_t::is_visible_node() +ida_graph.grcode_is_visible_node + use interactive_graph_t::is_visible_node() -ida_graph.grcode_layout_calculated (variable) - graph layout calculated. - - @retval 0: must return 0 +ida_graph.grcode_layout_calculated + graph layout calculated. + -ida_graph.grcode_lostfocus (variable) - a graph viewer lost focus. - - @retval 0: must return 0 +ida_graph.grcode_lostfocus + a graph viewer lost focus. + -ida_graph.grcode_node_qty (variable) - use mutable_graph_t::node_qty() +ida_graph.grcode_node_qty + use interactive_graph_t::node_qty() -ida_graph.grcode_nrect (variable) - use mutable_graph_t::nrect() +ida_graph.grcode_nrect + use interactive_graph_t::nrect() -ida_graph.grcode_refresh_viewer (variable) +ida_graph.grcode_refresh_viewer use refresh_viewer() -ida_graph.grcode_set_custom_layout (variable) - use mutable_graph_t::set_custom_layout() +ida_graph.grcode_set_custom_layout + use interactive_graph_t::set_custom_layout() -ida_graph.grcode_set_edge (variable) - use mutable_graph_t::set_edge() +ida_graph.grcode_set_edge + use interactive_graph_t::set_edge() -ida_graph.grcode_set_gli (variable) +ida_graph.grcode_set_gli use viewer_set_gli() -ida_graph.grcode_set_graph_groups (variable) - use mutable_graph_t::set_graph_groups() +ida_graph.grcode_set_graph_groups + use interactive_graph_t::set_graph_groups() -ida_graph.grcode_set_node_info (variable) +ida_graph.grcode_set_node_info use viewer_set_node_info() -ida_graph.grcode_set_titlebar_height (variable) +ida_graph.grcode_set_titlebar_height use viewer_set_titlebar_height() -ida_graph.grcode_set_viewer_graph (variable) +ida_graph.grcode_set_viewer_graph use set_viewer_graph() -ida_graph.grcode_user_draw (variable) - render node of a user-defined graph. NB: draw only on the specified DC and - nowhere else! - - @retval 0: not rendered - @retval 1: rendered +ida_graph.grcode_user_draw + render node of a user-defined graph. NB: draw only on the specified DC and nowhere else! + -ida_graph.grcode_user_hint (variable) - retrieve hint for the user-defined graph. - - @retval 0: use default hint - @retval 1: use proposed hint +ida_graph.grcode_user_hint + retrieve hint for the user-defined graph. + -ida_graph.grcode_user_refresh (variable) - refresh user-defined graph nodes and edges This is called when the UI considers - that it is necessary to recreate the graph layout, and thus has to ensure that - the 'mutable_graph_t' instance it is using, is up-to-date. For example: +ida_graph.grcode_user_refresh + refresh user-defined graph nodes and edges This is called when the UI considers that it is necessary to recreate the graph layout, and thus has to ensure that the 'interactive_graph_t' instance it is using, is up-to-date. For example: * at graph creation-time * if a refresh_viewer() call was made - - @return: success -ida_graph.grcode_user_size (variable) - calculate node size for user-defined graph. - - @retval 0: did not calculate. ida will use node text size - @retval 1: calculated. ida will add node title to the size +ida_graph.grcode_user_size + calculate node size for user-defined graph. + -ida_graph.grcode_user_text (variable) - retrieve text for user-defined graph node. NB: do not use anything calling GDI! - - @return: success, result must be filled +ida_graph.grcode_user_text + retrieve text for user-defined graph node. NB: do not use anything calling GDI! + -ida_graph.grcode_user_title (variable) - render node title of a user-defined graph. - - @retval 0: did not render, ida will fill it with title_bg_color - @retval 1: rendered node title +ida_graph.grcode_user_title + render node title of a user-defined graph. + -ida_graph.grcode_viewer_create_groups_vec (variable) +ida_graph.grcode_viewer_create_groups_vec use viewer_create_groups() -ida_graph.grcode_viewer_delete_groups_vec (variable) +ida_graph.grcode_viewer_delete_groups_vec use viewer_delete_groups() -ida_graph.grcode_viewer_groups_visibility_vec (variable) +ida_graph.grcode_viewer_groups_visibility_vec use viewer_set_groups_visibility() -ida_graph.group_crinfo_t (class) - Proxy of C++ group_crinfo_t class. +ida_graph.group_crinfo_t -ida_graph.group_crinfo_t.__init__ (method) - __init__(self) -> group_crinfo_t +ida_graph.group_crinfo_t.__init__(self) -ida_graph.interval_t (class) - Proxy of C++ interval_t class. +ida_graph.interactive_graph_t -ida_graph.interval_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: interval_t const & +ida_graph.interactive_graph_t.__init__(self, *args, **kwargs) -ida_graph.interval_t.__init__ (method) - __init__(self) -> interval_t - __init__(self, y0, y1) -> interval_t - - @param y0: int - @param y1: int - - __init__(self, s) -> interval_t - - @param s: edge_segment_t const & +ida_graph.interactive_graph_t.add_edge(self, i: int, j: int, ei: "edge_info_t") -> bool -ida_graph.interval_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: interval_t const & - -ida_graph.interval_t.contains (method) - contains(self, x) -> bool - - @param x: int - -ida_graph.interval_t.empty (method) - empty(self) -> bool - -ida_graph.interval_t.intersect (method) - intersect(self, r) - - @param r: interval_t const & - -ida_graph.interval_t.length (method) - length(self) -> int - -ida_graph.interval_t.make_union (method) - make_union(self, r) - - @param r: interval_t const & - -ida_graph.interval_t.move_by (method) - move_by(self, shift) - - @param shift: int - -ida_graph.mutable_graph_t (class) - Proxy of C++ mutable_graph_t class. - -ida_graph.mutable_graph_t.__init__ (method) - -ida_graph.mutable_graph_t.add_edge (method) - add_edge(self, i, j, ei) -> bool - - @param i: int - @param j: int - @param ei: edge_info_t const * - -ida_graph.mutable_graph_t.add_node (method) - add_node(self, r) -> int +ida_graph.interactive_graph_t.add_node(self, r: "rect_t") -> int Add a node, possibly with a specific geometry - @param r: (C++: const rect_t *) the node geometry (can be nullptr) - @return: the new node + @param r: the node geometry (can be nullptr) + @returns the new node -ida_graph.mutable_graph_t.belongs (variable) - the subgraph the node belongs to INT_MAX means that the node doesn't exist sign - bit means collapsed node +ida_graph.interactive_graph_t.belongs + the subgraph the node belongs to INT_MAX means that the node doesn't exist sign bit means collapsed node + -ida_graph.mutable_graph_t.calc_group_ea (method) - calc_group_ea(self, arg2) -> ea_t - - @param arg2: intvec_t const & +ida_graph.interactive_graph_t.calc_group_ea(self, arg2: "intvec_t const &") -> ida_idaapi.ea_t -ida_graph.mutable_graph_t.change_group_visibility (method) - change_group_visibility(self, group, expand) -> bool +ida_graph.interactive_graph_t.change_group_visibility(self, group: int, expand: bool) -> bool Expand/collapse a group node - @param group: (C++: int) the group node - @param expand: (C++: bool) whether to expand or collapse - @return: success + @param group: the group node + @param expand: whether to expand or collapse + @returns success -ida_graph.mutable_graph_t.create_digraph_layout (method) - create_digraph_layout(self) -> bool +ida_graph.interactive_graph_t.create_digraph_layout(self) -> bool -ida_graph.mutable_graph_t.create_group (method) - create_group(self, nodes) -> int +ida_graph.interactive_graph_t.create_group(self, nodes: "intvec_t const &") -> int Create a new group node, that will contain all the nodes in 'nodes'. - @param nodes: (C++: const intvec_t &) the nodes that will be part of the group - @return: the group node, or -1 in case of error + @param nodes: the nodes that will be part of the group + @returns the group node, or -1 in case of error -ida_graph.mutable_graph_t.del_custom_layout (method) - del_custom_layout(self) +ida_graph.interactive_graph_t.del_custom_layout(self) -> None -ida_graph.mutable_graph_t.del_edge (method) - del_edge(self, i, j) -> bool - - @param i: int - @param j: int +ida_graph.interactive_graph_t.del_edge(self, i: int, j: int) -> bool -ida_graph.mutable_graph_t.del_node (method) - del_node(self, n) -> ssize_t +ida_graph.interactive_graph_t.del_node(self, n: int) -> "ssize_t" Delete a node - @param n: (C++: int) the node to delete - @return: the number of deleted edges + @param n: the node to delete + @returns the number of deleted edges -ida_graph.mutable_graph_t.delete_group (method) - delete_group(self, group) -> bool +ida_graph.interactive_graph_t.delete_group(self, group: int) -> bool Delete a group node. + This deletes the group node only; it does not delete nodes that are part of the group. - This deletes the group node only; it does not delete nodes that are part of the - group. - - @param group: (C++: int) the group node - @return: success + @param group: the group node + @returns success -ida_graph.mutable_graph_t.empty (method) - empty(self) -> bool - Is the graph (visually) empty? - - @return: true if there are no visible nodes +ida_graph.interactive_graph_t.empty(self) -> bool + Is the graph (visually) empty? + + @returns true if there are no visible nodes -ida_graph.mutable_graph_t.exists (method) - exists(self, node) -> bool +ida_graph.interactive_graph_t.exists(self, node: int) -> bool Is the node visible? - @param node: (C++: int) the node number - @return: success + @param node: the node number + @returns success -ida_graph.mutable_graph_t.get_custom_layout (method) - get_custom_layout(self) -> bool +ida_graph.interactive_graph_t.get_custom_layout(self) -> bool -ida_graph.mutable_graph_t.get_first_subgraph_node (method) - get_first_subgraph_node(self, group) -> int - - @param group: int +ida_graph.interactive_graph_t.get_first_subgraph_node(self, group: int) -> int -ida_graph.mutable_graph_t.get_graph_groups (method) - get_graph_groups(self) -> bool +ida_graph.interactive_graph_t.get_graph_groups(self) -> bool -ida_graph.mutable_graph_t.get_next_subgraph_node (method) - get_next_subgraph_node(self, group, current) -> int - - @param group: int - @param current: int +ida_graph.interactive_graph_t.get_next_subgraph_node(self, group: int, current: int) -> int -ida_graph.mutable_graph_t.get_node_group (method) - get_node_group(self, node) -> int - - @param node: int +ida_graph.interactive_graph_t.get_node_group(self, node: int) -> int -ida_graph.mutable_graph_t.get_node_representative (method) - get_node_representative(self, node) -> int - Get the node that currently visually represents 'node'. This will find the - "closest" parent group node that's visible, by attempting to walk up the group - nodes that contain 'node', and will stop when it finds a node that is currently - visible. - - See also get_group_node() - - @param node: (C++: int) the node - @return: the node that represents 'node', or 'node' if it's not part of any - group +ida_graph.interactive_graph_t.get_node_representative(self, node: int) -> int + Get the node that currently visually represents 'node'. This will find the "closest" parent group node that's visible, by attempting to walk up the group nodes that contain 'node', and will stop when it finds a node that is currently visible. + See also get_group_node() + + @param node: the node + @returns the node that represents 'node', or 'node' if it's not part of any group -ida_graph.mutable_graph_t.gid (variable) - graph id - unique for the database for flowcharts it is equal to the function - start_ea +ida_graph.interactive_graph_t.gid + graph id - unique for the database for flowcharts it is equal to the function start_ea + -ida_graph.mutable_graph_t.is_collapsed_node (method) - is_collapsed_node(self, node) -> bool - - @param node: int +ida_graph.interactive_graph_t.is_collapsed_node(self, node: int) -> bool -ida_graph.mutable_graph_t.is_deleted_node (method) - is_deleted_node(self, node) -> bool - - @param node: int +ida_graph.interactive_graph_t.is_deleted_node(self, node: int) -> bool -ida_graph.mutable_graph_t.is_displayable_node (method) - is_displayable_node(self, node) -> bool - - @param node: int +ida_graph.interactive_graph_t.is_displayable_node(self, node: int) -> bool -ida_graph.mutable_graph_t.is_dot_node (method) - is_dot_node(self, node) -> bool - - @param node: int +ida_graph.interactive_graph_t.is_dot_node(self, node: int) -> bool -ida_graph.mutable_graph_t.is_group_node (method) - is_group_node(self, node) -> bool - - @param node: int +ida_graph.interactive_graph_t.is_group_node(self, node: int) -> bool -ida_graph.mutable_graph_t.is_simple_node (method) - is_simple_node(self, node) -> bool - - @param node: int +ida_graph.interactive_graph_t.is_simple_node(self, node: int) -> bool -ida_graph.mutable_graph_t.is_subgraph_node (method) - is_subgraph_node(self, node) -> bool - - @param node: int +ida_graph.interactive_graph_t.is_subgraph_node(self, node: int) -> bool -ida_graph.mutable_graph_t.is_uncollapsed_node (method) - is_uncollapsed_node(self, node) -> bool - - @param node: int +ida_graph.interactive_graph_t.is_uncollapsed_node(self, node: int) -> bool -ida_graph.mutable_graph_t.is_user_graph (method) - is_user_graph(self) -> bool +ida_graph.interactive_graph_t.is_user_graph(self) -> bool -ida_graph.mutable_graph_t.is_visible_node (method) - is_visible_node(self, node) -> bool +ida_graph.interactive_graph_t.is_visible_node(self, node: int) -> bool Is the node currently visible? - An invisible node is a node that's part of a group that's currently collapsed. - @param node: (C++: int) the node - @return: success + @param node: the node + @returns success -ida_graph.mutable_graph_t.node_flags (variable) +ida_graph.interactive_graph_t.node_flags node flags -ida_graph.mutable_graph_t.node_qty (method) - node_qty(self) -> int - Get the number of visible nodes (the list can be retrieved using gdl.hpp's - node_iterator) - +ida_graph.interactive_graph_t.node_qty(self) -> int + Get the number of visible nodes (the list can be retrieved using gdl.hpp's node_iterator) See also size() - @return: the number of visible nodes + @returns the number of visible nodes -ida_graph.mutable_graph_t.npred (method) - npred(self, b) -> int - - @param b: int +ida_graph.interactive_graph_t.npred(self, b: int) -> int -ida_graph.mutable_graph_t.nsucc (method) - nsucc(self, b) -> int - - @param b: int +ida_graph.interactive_graph_t.nsucc(self, b: int) -> int -ida_graph.mutable_graph_t.pred (method) - pred(self, b, i) -> int - - @param b: int - @param i: int +ida_graph.interactive_graph_t.pred(self, b: int, i: int) -> int -ida_graph.mutable_graph_t.predset (method) - predset(self, b) -> intvec_t const & - - @param b: int +ida_graph.interactive_graph_t.predset(self, b: int) -> "intvec_t const &" -ida_graph.mutable_graph_t.redo_layout (method) - redo_layout(self) -> bool +ida_graph.interactive_graph_t.redo_layout(self) -> bool Recompute the layout, according to the value of 'current_layout'. - @return: success + @returns success -ida_graph.mutable_graph_t.refresh (method) - refresh(self) -> bool +ida_graph.interactive_graph_t.refresh(self) -> bool Refresh the graph - - A graph needs refreshing when it's "backing data". E.g., if the number (or - contents) of the objects in the above example, change. - - Let's say the user's plugin ends up finding a 5th piece of scattered data. It - should then add it to its internal list of known objects, and tell IDA that the - graph needs to be refreshed, using refresh_viewer(). This will cause IDA to: + A graph needs refreshing when it's "backing data". E.g., if the number (or contents) of the objects in the above example, change. + Let's say the user's plugin ends up finding a 5th piece of scattered data. It should then add it to its internal list of known objects, and tell IDA that the graph needs to be refreshed, using refresh_viewer(). This will cause IDA to: * discard all its internal rendering information, - * call mutable_graph_t::refresh() on the graph so that the user's plugin has a - chance to "sync" the number of nodes & edges that this graph contains, to the - information that the plugin has collected so far + * call interactive_graph_t::refresh() on the graph so that the user's plugin has a chance to "sync" the number of nodes & edges that this graph contains, to the information that the plugin has collected so far * re-create internal rendering information, and * repaint the view - @return: success - -ida_graph.mutable_graph_t.replace_edge (method) - replace_edge(self, i, j, x, y) -> bool - @param i: int - @param j: int - @param x: int - @param y: int + + @returns success -ida_graph.mutable_graph_t.reset (method) - reset(self) +ida_graph.interactive_graph_t.replace_edge(self, i: int, j: int, x: int, y: int) -> bool -ida_graph.mutable_graph_t.resize (method) - resize(self, n) +ida_graph.interactive_graph_t.reset(self) -> None + +ida_graph.interactive_graph_t.resize(self, n: int) -> None Resize the graph to 'n' nodes - @param n: (C++: int) the new size + @param n: the new size -ida_graph.mutable_graph_t.set_custom_layout (method) - set_custom_layout(self) +ida_graph.interactive_graph_t.set_custom_layout(self) -> None -ida_graph.mutable_graph_t.set_deleted_node (method) - set_deleted_node(self, node) - - @param node: int +ida_graph.interactive_graph_t.set_deleted_node(self, node: int) -> None -ida_graph.mutable_graph_t.set_edge (method) - set_edge(self, e, ei) -> bool - - @param e: edge_t - @param ei: edge_info_t const * +ida_graph.interactive_graph_t.set_edge(self, e: "edge_t", ei: "edge_info_t") -> bool -ida_graph.mutable_graph_t.set_graph_groups (method) - set_graph_groups(self) +ida_graph.interactive_graph_t.set_graph_groups(self) -> None -ida_graph.mutable_graph_t.set_node_group (method) - set_node_group(self, node, group) - - @param node: int - @param group: int +ida_graph.interactive_graph_t.set_node_group(self, node: int, group: int) -> None -ida_graph.mutable_graph_t.set_nrect (method) - set_nrect(self, n, r) -> bool - - @param n: int - @param r: rect_t const & +ida_graph.interactive_graph_t.set_nrect(self, n: int, r: "rect_t") -> bool -ida_graph.mutable_graph_t.size (method) - size(self) -> int - Get the total number of nodes (including group nodes, and including hidden - nodes.) - +ida_graph.interactive_graph_t.size(self) -> int + Get the total number of nodes (including group nodes, and including hidden nodes.) See also node_qty() - @return: the total number of nodes in the graph + @returns the total number of nodes in the graph -ida_graph.mutable_graph_t.succ (method) - succ(self, b, i) -> int - - @param b: int - @param i: int +ida_graph.interactive_graph_t.succ(self, b: int, i: int) -> int -ida_graph.mutable_graph_t.succset (method) - succset(self, b) -> intvec_t const & - - @param b: int +ida_graph.interactive_graph_t.succset(self, b: int) -> "intvec_t const &" -ida_graph.node_info_t (class) - Proxy of C++ node_info_t class. +ida_graph.interval_t -ida_graph.node_info_t.__init__ (method) - __init__(self) -> node_info_t +ida_graph.interval_t.__eq__(self, r: "interval_t") -> bool -ida_graph.node_info_t.bg_color (variable) +ida_graph.interval_t.__init__(self, *args) + +ida_graph.interval_t.__ne__(self, r: "interval_t") -> bool + +ida_graph.interval_t.contains(self, x: int) -> bool + +ida_graph.interval_t.empty(self) -> bool + +ida_graph.interval_t.intersect(self, r: "interval_t") -> None + +ida_graph.interval_t.length(self) -> int + +ida_graph.interval_t.make_union(self, r: "interval_t") -> None + +ida_graph.interval_t.move_by(self, shift: int) -> None + +ida_graph.node_info_t + +ida_graph.node_info_t.__init__(self) + +ida_graph.node_info_t.bg_color background color -ida_graph.node_info_t.ea (variable) +ida_graph.node_info_t.ea address -ida_graph.node_info_t.flags (variable) +ida_graph.node_info_t.flags flags -ida_graph.node_info_t.frame_color (variable) +ida_graph.node_info_t.frame_color color of enclosing frame -ida_graph.node_info_t.get_flags_for_valid (method) - get_flags_for_valid(self) -> uint32 +ida_graph.node_info_t.get_flags_for_valid(self) -> int Get combination of Node info flags describing which attributes are valid. -ida_graph.node_info_t.text (variable) +ida_graph.node_info_t.text node contents -ida_graph.node_info_t.valid_bg_color (method) - valid_bg_color(self) -> bool +ida_graph.node_info_t.valid_bg_color(self) -> bool Has valid bg_color? -ida_graph.node_info_t.valid_ea (method) - valid_ea(self) -> bool +ida_graph.node_info_t.valid_ea(self) -> bool Has valid ea? -ida_graph.node_info_t.valid_flags (method) - valid_flags(self) -> bool +ida_graph.node_info_t.valid_flags(self) -> bool Has valid flags? -ida_graph.node_info_t.valid_frame_color (method) - valid_frame_color(self) -> bool +ida_graph.node_info_t.valid_frame_color(self) -> bool Has valid frame_color? -ida_graph.node_info_t.valid_text (method) - valid_text(self) -> bool +ida_graph.node_info_t.valid_text(self) -> bool Has non-empty text? -ida_graph.node_layout_t (class) - Proxy of C++ qvector< rect_t > class. - -ida_graph.node_layout_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< rect_t > const & - -ida_graph.node_layout_t.__getitem__ (method) - __getitem__(self, i) -> rect_t - - @param i: size_t - -ida_graph.node_layout_t.__init__ (method) - __init__(self) -> node_layout_t - __init__(self, x) -> node_layout_t - - @param x: qvector< rect_t > const & - -ida_graph.node_layout_t.__len__ (method) - __len__(self) -> size_t - -ida_graph.node_layout_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< rect_t > const & - -ida_graph.node_layout_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: rect_t const & - -ida_graph.node_layout_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: rect_t const & - -ida_graph.node_layout_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: rect_t const & - -ida_graph.node_layout_t.at (method) - at(self, _idx) -> rect_t - - @param _idx: size_t - -ida_graph.node_layout_t.begin (method) - begin(self) -> rect_t - -ida_graph.node_layout_t.capacity (method) - capacity(self) -> size_t - -ida_graph.node_layout_t.clear (method) - clear(self) - -ida_graph.node_layout_t.empty (method) - empty(self) -> bool - -ida_graph.node_layout_t.end (method) - end(self) -> rect_t - -ida_graph.node_layout_t.erase (method) - erase(self, it) -> rect_t - - @param it: qvector< rect_t >::iterator - - erase(self, first, last) -> rect_t - - @param first: qvector< rect_t >::iterator - @param last: qvector< rect_t >::iterator - -ida_graph.node_layout_t.extract (method) - extract(self) -> rect_t - -ida_graph.node_layout_t.find (method) - find(self, x) -> rect_t - - @param x: rect_t const & - -ida_graph.node_layout_t.grow (method) - grow(self, x=rect_t()) - - @param x: rect_t const & - -ida_graph.node_layout_t.has (method) - has(self, x) -> bool - - @param x: rect_t const & - -ida_graph.node_layout_t.inject (method) - inject(self, s, len) - - @param s: rect_t * - @param len: size_t - -ida_graph.node_layout_t.insert (method) - insert(self, it, x) -> rect_t - - @param it: qvector< rect_t >::iterator - @param x: rect_t const & - -ida_graph.node_layout_t.pop_back (method) - pop_back(self) - -ida_graph.node_layout_t.push_back (method) - push_back(self, x) - - @param x: rect_t const & - - push_back(self) -> rect_t - -ida_graph.node_layout_t.qclear (method) - qclear(self) - -ida_graph.node_layout_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_graph.node_layout_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: rect_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_graph.node_layout_t.size (method) - size(self) -> size_t - -ida_graph.node_layout_t.swap (method) - swap(self, r) - - @param r: qvector< rect_t > & - -ida_graph.node_layout_t.truncate (method) - truncate(self) - -ida_graph.node_ordering_t (class) - Proxy of C++ node_ordering_t class. - -ida_graph.node_ordering_t.__init__ (method) - __init__(self) -> node_ordering_t - -ida_graph.node_ordering_t.clear (method) - clear(self) - -ida_graph.node_ordering_t.clr (method) - clr(self, _node) -> bool - - @param _node: int - -ida_graph.node_ordering_t.node (method) - node(self, _order) -> int - - @param _order: size_t - -ida_graph.node_ordering_t.order (method) - order(self, _node) -> int - - @param _node: int - -ida_graph.node_ordering_t.resize (method) - resize(self, n) - - @param n: int - -ida_graph.node_ordering_t.set (method) - set(self, _node, num) - - @param _node: int - @param num: int - -ida_graph.node_ordering_t.size (method) - size(self) -> size_t - -ida_graph.point_t (class) - Proxy of C++ point_t class. - -ida_graph.point_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: point_t const & - -ida_graph.point_t.__init__ (method) - __init__(self) -> point_t - __init__(self, _x, _y) -> point_t - - @param _x: int - @param _y: int - -ida_graph.point_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: point_t const & - -ida_graph.point_t.add (method) - add(self, r) -> point_t - - @param r: point_t const & - -ida_graph.point_t.negate (method) - negate(self) - -ida_graph.point_t.sub (method) - sub(self, r) -> point_t - - @param r: point_t const & - -ida_graph.pointseq_t (class) - Proxy of C++ pointseq_t class. - -ida_graph.pointseq_t.__init__ (method) - __init__(self) -> pointseq_t - -ida_graph.pointvec_t (class) - Proxy of C++ qvector< point_t > class. - -ida_graph.pointvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< point_t > const & - -ida_graph.pointvec_t.__getitem__ (method) - __getitem__(self, i) -> point_t - - @param i: size_t - -ida_graph.pointvec_t.__init__ (method) - __init__(self) -> pointvec_t - __init__(self, x) -> pointvec_t - - @param x: qvector< point_t > const & - -ida_graph.pointvec_t.__len__ (method) - __len__(self) -> size_t - -ida_graph.pointvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< point_t > const & - -ida_graph.pointvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: point_t const & - -ida_graph.pointvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: point_t const & - -ida_graph.pointvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: point_t const & - -ida_graph.pointvec_t.at (method) - at(self, _idx) -> point_t - - @param _idx: size_t - -ida_graph.pointvec_t.begin (method) - begin(self) -> point_t - -ida_graph.pointvec_t.capacity (method) - capacity(self) -> size_t - -ida_graph.pointvec_t.clear (method) - clear(self) - -ida_graph.pointvec_t.empty (method) - empty(self) -> bool - -ida_graph.pointvec_t.end (method) - end(self) -> point_t - -ida_graph.pointvec_t.erase (method) - erase(self, it) -> point_t - - @param it: qvector< point_t >::iterator - - erase(self, first, last) -> point_t - - @param first: qvector< point_t >::iterator - @param last: qvector< point_t >::iterator - -ida_graph.pointvec_t.extract (method) - extract(self) -> point_t - -ida_graph.pointvec_t.find (method) - find(self, x) -> point_t - - @param x: point_t const & - -ida_graph.pointvec_t.grow (method) - grow(self, x=point_t()) - - @param x: point_t const & - -ida_graph.pointvec_t.has (method) - has(self, x) -> bool - - @param x: point_t const & - -ida_graph.pointvec_t.inject (method) - inject(self, s, len) - - @param s: point_t * - @param len: size_t - -ida_graph.pointvec_t.insert (method) - insert(self, it, x) -> point_t - - @param it: qvector< point_t >::iterator - @param x: point_t const & - -ida_graph.pointvec_t.pop_back (method) - pop_back(self) - -ida_graph.pointvec_t.push_back (method) - push_back(self, x) - - @param x: point_t const & - - push_back(self) -> point_t - -ida_graph.pointvec_t.qclear (method) - qclear(self) - -ida_graph.pointvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_graph.pointvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: point_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_graph.pointvec_t.size (method) - size(self) -> size_t - -ida_graph.pointvec_t.swap (method) - swap(self, r) - - @param r: qvector< point_t > & - -ida_graph.pointvec_t.truncate (method) - truncate(self) - -ida_graph.pyg_close (function) - pyg_close(_self) - - @param self: PyObject * - -ida_graph.pyg_select_node (function) - pyg_select_node(_self, nid) - - @param self: PyObject * - @param nid: int - -ida_graph.pyg_show (function) - pyg_show(_self) -> bool - - @param self: PyObject * - -ida_graph.rect_t (class) - Proxy of C++ rect_t class. - -ida_graph.rect_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: rect_t const & - -ida_graph.rect_t.__init__ (method) - __init__(self) -> rect_t - __init__(self, l, t, r, b) -> rect_t - - @param l: int - @param t: int - @param r: int - @param b: int - - __init__(self, p0, p1) -> rect_t - - @param p0: point_t const & - @param p1: point_t const & - -ida_graph.rect_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: rect_t const & - -ida_graph.rect_t.area (method) - area(self) -> int - -ida_graph.rect_t.bottomright (method) - bottomright(self) -> point_t - -ida_graph.rect_t.center (method) - center(self) -> point_t - -ida_graph.rect_t.contains (method) - contains(self, p) -> bool - - @param p: point_t const & - -ida_graph.rect_t.empty (method) - empty(self) -> bool - -ida_graph.rect_t.grow (method) - grow(self, delta) - - @param delta: int - -ida_graph.rect_t.height (method) - height(self) -> int - -ida_graph.rect_t.intersect (method) - intersect(self, r) - - @param r: rect_t const & - -ida_graph.rect_t.is_intersection_empty (method) - is_intersection_empty(self, r) -> bool - - @param r: rect_t const & - -ida_graph.rect_t.make_union (method) - make_union(self, r) - - @param r: rect_t const & - -ida_graph.rect_t.move_by (method) - move_by(self, p) - - @param p: point_t const & - -ida_graph.rect_t.move_to (method) - move_to(self, p) - - @param p: point_t const & - -ida_graph.rect_t.topleft (method) - topleft(self) -> point_t - -ida_graph.rect_t.width (method) - width(self) -> int - -ida_graph.refresh_viewer (function) - refresh_viewer(gv) +ida_graph.node_layout_t + +ida_graph.node_layout_t.__eq__(self, r: "node_layout_t") -> bool + +ida_graph.node_layout_t.__getitem__(self, i: "size_t") -> "rect_t const &" + +ida_graph.node_layout_t.__init__(self, *args) + +ida_graph.node_layout_t.__len__(self) -> "size_t" + +ida_graph.node_layout_t.__ne__(self, r: "node_layout_t") -> bool + +ida_graph.node_layout_t.__setitem__(self, i: "size_t", v: "rect_t") -> None + +ida_graph.node_layout_t._del(self, x: "rect_t") -> bool + +ida_graph.node_layout_t.add_unique(self, x: "rect_t") -> bool + +ida_graph.node_layout_t.append(self, x: "rect_t") -> None + +ida_graph.node_layout_t.at(self, _idx: "size_t") -> "rect_t const &" + +ida_graph.node_layout_t.begin(self, *args) -> "qvector< rect_t >::const_iterator" + +ida_graph.node_layout_t.capacity(self) -> "size_t" + +ida_graph.node_layout_t.clear(self) -> None + +ida_graph.node_layout_t.empty(self) -> bool + +ida_graph.node_layout_t.end(self, *args) -> "qvector< rect_t >::const_iterator" + +ida_graph.node_layout_t.erase(self, *args) -> "qvector< rect_t >::iterator" + +ida_graph.node_layout_t.extend(self, x: "node_layout_t") -> None + +ida_graph.node_layout_t.extract(self) -> "rect_t *" + +ida_graph.node_layout_t.find(self, *args) -> "qvector< rect_t >::const_iterator" + +ida_graph.node_layout_t.grow(self, *args) -> None + +ida_graph.node_layout_t.has(self, x: "rect_t") -> bool + +ida_graph.node_layout_t.inject(self, s: "rect_t", len: "size_t") -> None + +ida_graph.node_layout_t.insert(self, it: "rect_t", x: "rect_t") -> "qvector< rect_t >::iterator" + +ida_graph.node_layout_t.pop_back(self) -> None + +ida_graph.node_layout_t.push_back(self, *args) -> "rect_t &" + +ida_graph.node_layout_t.qclear(self) -> None + +ida_graph.node_layout_t.reserve(self, cnt: "size_t") -> None + +ida_graph.node_layout_t.resize(self, *args) -> None + +ida_graph.node_layout_t.size(self) -> "size_t" + +ida_graph.node_layout_t.swap(self, r: "node_layout_t") -> None + +ida_graph.node_layout_t.truncate(self) -> None + +ida_graph.point_t + +ida_graph.point_t.__eq__(self, r: "point_t") -> bool + +ida_graph.point_t.__init__(self, *args) + +ida_graph.point_t.__ne__(self, r: "point_t") -> bool + +ida_graph.point_t.add(self, r: "point_t") -> "point_t &" + +ida_graph.point_t.negate(self) -> None + +ida_graph.point_t.sub(self, r: "point_t") -> "point_t &" + +ida_graph.pointseq_t + +ida_graph.pointseq_t.__init__(self) + +ida_graph.pointvec_t + +ida_graph.pointvec_t.__eq__(self, r: "pointvec_t") -> bool + +ida_graph.pointvec_t.__getitem__(self, i: "size_t") -> "point_t const &" + +ida_graph.pointvec_t.__init__(self, *args) + +ida_graph.pointvec_t.__len__(self) -> "size_t" + +ida_graph.pointvec_t.__ne__(self, r: "pointvec_t") -> bool + +ida_graph.pointvec_t.__setitem__(self, i: "size_t", v: "point_t") -> None + +ida_graph.pointvec_t._del(self, x: "point_t") -> bool + +ida_graph.pointvec_t.add_unique(self, x: "point_t") -> bool + +ida_graph.pointvec_t.append(self, x: "point_t") -> None + +ida_graph.pointvec_t.at(self, _idx: "size_t") -> "point_t const &" + +ida_graph.pointvec_t.begin(self, *args) -> "qvector< point_t >::const_iterator" + +ida_graph.pointvec_t.capacity(self) -> "size_t" + +ida_graph.pointvec_t.clear(self) -> None + +ida_graph.pointvec_t.empty(self) -> bool + +ida_graph.pointvec_t.end(self, *args) -> "qvector< point_t >::const_iterator" + +ida_graph.pointvec_t.erase(self, *args) -> "qvector< point_t >::iterator" + +ida_graph.pointvec_t.extend(self, x: "pointvec_t") -> None + +ida_graph.pointvec_t.extract(self) -> "point_t *" + +ida_graph.pointvec_t.find(self, *args) -> "qvector< point_t >::const_iterator" + +ida_graph.pointvec_t.grow(self, *args) -> None + +ida_graph.pointvec_t.has(self, x: "point_t") -> bool + +ida_graph.pointvec_t.inject(self, s: "point_t", len: "size_t") -> None + +ida_graph.pointvec_t.insert(self, it: "point_t", x: "point_t") -> "qvector< point_t >::iterator" + +ida_graph.pointvec_t.pop_back(self) -> None + +ida_graph.pointvec_t.push_back(self, *args) -> "point_t &" + +ida_graph.pointvec_t.qclear(self) -> None + +ida_graph.pointvec_t.reserve(self, cnt: "size_t") -> None + +ida_graph.pointvec_t.resize(self, *args) -> None + +ida_graph.pointvec_t.size(self) -> "size_t" + +ida_graph.pointvec_t.swap(self, r: "pointvec_t") -> None + +ida_graph.pointvec_t.truncate(self) -> None + +ida_graph.pyg_close(_self: "PyObject *") -> None + +ida_graph.pyg_select_node(_self: "PyObject *", nid: int) -> None + +ida_graph.pyg_show(_self: "PyObject *") -> bool + +ida_graph.rect_t + +ida_graph.rect_t.__eq__(self, r: "rect_t") -> bool + +ida_graph.rect_t.__init__(self, *args) + +ida_graph.rect_t.__ne__(self, r: "rect_t") -> bool + +ida_graph.rect_t.area(self) -> int + +ida_graph.rect_t.bottomright(self) -> "point_t" + +ida_graph.rect_t.center(self) -> "point_t" + +ida_graph.rect_t.contains(self, p: "point_t") -> bool + +ida_graph.rect_t.empty(self) -> bool + +ida_graph.rect_t.grow(self, delta: int) -> None + +ida_graph.rect_t.height(self) -> int + +ida_graph.rect_t.intersect(self, r: "rect_t") -> None + +ida_graph.rect_t.is_intersection_empty(self, r: "rect_t") -> bool + +ida_graph.rect_t.make_union(self, r: "rect_t") -> None + +ida_graph.rect_t.move_by(self, p: "point_t") -> None + +ida_graph.rect_t.move_to(self, p: "point_t") -> None + +ida_graph.rect_t.topleft(self) -> "point_t" + +ida_graph.rect_t.verify(self) -> None + +ida_graph.rect_t.width(self) -> int + +ida_graph.refresh_viewer(gv: "graph_viewer_t *") -> None Redraw the graph in the given view. - - @param gv: (C++: graph_viewer_t *) -ida_graph.row_info_t (class) - Proxy of C++ row_info_t class. +ida_graph.row_info_t -ida_graph.row_info_t.__init__ (method) - __init__(self) -> row_info_t +ida_graph.row_info_t.__init__(self) -ida_graph.row_info_t.bottom (variable) +ida_graph.row_info_t.bottom bottom y coord of the row -ida_graph.row_info_t.height (method) - height(self) -> int +ida_graph.row_info_t.height(self) -> int -ida_graph.row_info_t.nodes (variable) +ida_graph.row_info_t.nodes list of nodes at the row -ida_graph.row_info_t.top (variable) +ida_graph.row_info_t.top top y coord of the row -ida_graph.screen_graph_selection_base_t (class) - Proxy of C++ qvector< selection_item_t > class. +ida_graph.screen_graph_selection_base_t -ida_graph.screen_graph_selection_base_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< selection_item_t > const & +ida_graph.screen_graph_selection_base_t.__eq__(self, r: "screen_graph_selection_base_t") -> bool -ida_graph.screen_graph_selection_base_t.__getitem__ (method) - __getitem__(self, i) -> selection_item_t - - @param i: size_t +ida_graph.screen_graph_selection_base_t.__getitem__(self, i: "size_t") -> "selection_item_t const &" -ida_graph.screen_graph_selection_base_t.__init__ (method) - __init__(self) -> screen_graph_selection_base_t - __init__(self, x) -> screen_graph_selection_base_t - - @param x: qvector< selection_item_t > const & +ida_graph.screen_graph_selection_base_t.__init__(self, *args) -ida_graph.screen_graph_selection_base_t.__len__ (method) - __len__(self) -> size_t +ida_graph.screen_graph_selection_base_t.__len__(self) -> "size_t" -ida_graph.screen_graph_selection_base_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< selection_item_t > const & +ida_graph.screen_graph_selection_base_t.__ne__(self, r: "screen_graph_selection_base_t") -> bool -ida_graph.screen_graph_selection_base_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: selection_item_t const & +ida_graph.screen_graph_selection_base_t.__setitem__(self, i: "size_t", v: "selection_item_t") -> None -ida_graph.screen_graph_selection_base_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: selection_item_t const & +ida_graph.screen_graph_selection_base_t._del(self, x: "selection_item_t") -> bool -ida_graph.screen_graph_selection_base_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: selection_item_t const & +ida_graph.screen_graph_selection_base_t.add_unique(self, x: "selection_item_t") -> bool -ida_graph.screen_graph_selection_base_t.at (method) - at(self, _idx) -> selection_item_t - - @param _idx: size_t +ida_graph.screen_graph_selection_base_t.append(self, x: "selection_item_t") -> None -ida_graph.screen_graph_selection_base_t.begin (method) - begin(self) -> selection_item_t +ida_graph.screen_graph_selection_base_t.at(self, _idx: "size_t") -> "selection_item_t const &" -ida_graph.screen_graph_selection_base_t.capacity (method) - capacity(self) -> size_t +ida_graph.screen_graph_selection_base_t.begin(self, *args) -> "qvector< selection_item_t >::const_iterator" -ida_graph.screen_graph_selection_base_t.clear (method) - clear(self) +ida_graph.screen_graph_selection_base_t.capacity(self) -> "size_t" -ida_graph.screen_graph_selection_base_t.empty (method) - empty(self) -> bool +ida_graph.screen_graph_selection_base_t.clear(self) -> None -ida_graph.screen_graph_selection_base_t.end (method) - end(self) -> selection_item_t +ida_graph.screen_graph_selection_base_t.empty(self) -> bool -ida_graph.screen_graph_selection_base_t.erase (method) - erase(self, it) -> selection_item_t - - @param it: qvector< selection_item_t >::iterator - - erase(self, first, last) -> selection_item_t - - @param first: qvector< selection_item_t >::iterator - @param last: qvector< selection_item_t >::iterator +ida_graph.screen_graph_selection_base_t.end(self, *args) -> "qvector< selection_item_t >::const_iterator" -ida_graph.screen_graph_selection_base_t.extract (method) - extract(self) -> selection_item_t +ida_graph.screen_graph_selection_base_t.erase(self, *args) -> "qvector< selection_item_t >::iterator" -ida_graph.screen_graph_selection_base_t.find (method) - find(self, x) -> selection_item_t - - @param x: selection_item_t const & +ida_graph.screen_graph_selection_base_t.extend(self, x: "screen_graph_selection_base_t") -> None -ida_graph.screen_graph_selection_base_t.grow (method) - grow(self, x=selection_item_t()) - - @param x: selection_item_t const & +ida_graph.screen_graph_selection_base_t.extract(self) -> "selection_item_t *" -ida_graph.screen_graph_selection_base_t.has (method) - has(self, x) -> bool - - @param x: selection_item_t const & +ida_graph.screen_graph_selection_base_t.find(self, *args) -> "qvector< selection_item_t >::const_iterator" -ida_graph.screen_graph_selection_base_t.inject (method) - inject(self, s, len) - - @param s: selection_item_t * - @param len: size_t +ida_graph.screen_graph_selection_base_t.grow(self, *args) -> None -ida_graph.screen_graph_selection_base_t.insert (method) - insert(self, it, x) -> selection_item_t - - @param it: qvector< selection_item_t >::iterator - @param x: selection_item_t const & +ida_graph.screen_graph_selection_base_t.has(self, x: "selection_item_t") -> bool -ida_graph.screen_graph_selection_base_t.pop_back (method) - pop_back(self) +ida_graph.screen_graph_selection_base_t.inject(self, s: "selection_item_t", len: "size_t") -> None -ida_graph.screen_graph_selection_base_t.push_back (method) - push_back(self, x) - - @param x: selection_item_t const & - - push_back(self) -> selection_item_t +ida_graph.screen_graph_selection_base_t.insert(self, it: "selection_item_t", x: "selection_item_t") -> "qvector< selection_item_t >::iterator" -ida_graph.screen_graph_selection_base_t.qclear (method) - qclear(self) +ida_graph.screen_graph_selection_base_t.pop_back(self) -> None -ida_graph.screen_graph_selection_base_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_graph.screen_graph_selection_base_t.push_back(self, *args) -> "selection_item_t &" -ida_graph.screen_graph_selection_base_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: selection_item_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_graph.screen_graph_selection_base_t.qclear(self) -> None -ida_graph.screen_graph_selection_base_t.size (method) - size(self) -> size_t +ida_graph.screen_graph_selection_base_t.reserve(self, cnt: "size_t") -> None -ida_graph.screen_graph_selection_base_t.swap (method) - swap(self, r) - - @param r: qvector< selection_item_t > & +ida_graph.screen_graph_selection_base_t.resize(self, *args) -> None -ida_graph.screen_graph_selection_base_t.truncate (method) - truncate(self) +ida_graph.screen_graph_selection_base_t.size(self) -> "size_t" -ida_graph.screen_graph_selection_t (class) - Proxy of C++ screen_graph_selection_t class. +ida_graph.screen_graph_selection_base_t.swap(self, r: "screen_graph_selection_base_t") -> None -ida_graph.screen_graph_selection_t.__init__ (method) - __init__(self) -> screen_graph_selection_t +ida_graph.screen_graph_selection_base_t.truncate(self) -> None -ida_graph.screen_graph_selection_t.add (method) - add(self, s) - - @param s: screen_graph_selection_t const & +ida_graph.screen_graph_selection_t -ida_graph.screen_graph_selection_t.add_node (method) - add_node(self, node) - - @param node: int +ida_graph.screen_graph_selection_t.__init__(self) -ida_graph.screen_graph_selection_t.add_point (method) - add_point(self, e, idx) - - @param e: edge_t - @param idx: int +ida_graph.screen_graph_selection_t.add(self, s: "screen_graph_selection_t") -> None -ida_graph.screen_graph_selection_t.del_node (method) - del_node(self, node) - - @param node: int +ida_graph.screen_graph_selection_t.add_node(self, node: int) -> None -ida_graph.screen_graph_selection_t.del_point (method) - del_point(self, e, idx) - - @param e: edge_t - @param idx: int +ida_graph.screen_graph_selection_t.add_point(self, e: "edge_t", idx: int) -> None -ida_graph.screen_graph_selection_t.has (method) - has(self, item) -> bool - - @param item: selection_item_t const & +ida_graph.screen_graph_selection_t.del_node(self, node: int) -> None -ida_graph.screen_graph_selection_t.items_count (method) - items_count(self, look_for_nodes) -> size_t - - @param look_for_nodes: bool +ida_graph.screen_graph_selection_t.del_point(self, e: "edge_t", idx: int) -> None -ida_graph.screen_graph_selection_t.nodes_count (method) - nodes_count(self) -> size_t +ida_graph.screen_graph_selection_t.has(self, item: "selection_item_t") -> bool -ida_graph.screen_graph_selection_t.points_count (method) - points_count(self) -> size_t +ida_graph.screen_graph_selection_t.items_count(self, look_for_nodes: bool) -> "size_t" -ida_graph.screen_graph_selection_t.sub (method) - sub(self, s) - - @param s: screen_graph_selection_t const & +ida_graph.screen_graph_selection_t.nodes_count(self) -> "size_t" -ida_graph.selection_item_t (class) - Proxy of C++ selection_item_t class. +ida_graph.screen_graph_selection_t.points_count(self) -> "size_t" -ida_graph.selection_item_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: selection_item_t const & +ida_graph.screen_graph_selection_t.sub(self, s: "screen_graph_selection_t") -> None -ida_graph.selection_item_t.__init__ (method) - __init__(self) -> selection_item_t - __init__(self, n) -> selection_item_t - - @param n: int - - __init__(self, _elp) -> selection_item_t - - @param _elp: edge_layout_point_t & - - __init__(self, e, idx) -> selection_item_t - - @param e: edge_t - @param idx: int +ida_graph.selection_item_t -ida_graph.selection_item_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: selection_item_t const & +ida_graph.selection_item_t.__eq__(self, r: "selection_item_t") -> bool -ida_graph.selection_item_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: selection_item_t const & +ida_graph.selection_item_t.__init__(self, *args) -ida_graph.selection_item_t.compare (method) - compare(self, r) -> int - - @param r: selection_item_t const & +ida_graph.selection_item_t.__lt__(self, r: "selection_item_t") -> bool -ida_graph.selection_item_t.elp (variable) +ida_graph.selection_item_t.__ne__(self, r: "selection_item_t") -> bool + +ida_graph.selection_item_t.compare(self, r: "selection_item_t") -> int + +ida_graph.selection_item_t.elp edge layout point (is_node = false) -ida_graph.selection_item_t.is_node (variable) +ida_graph.selection_item_t.is_node represents a selected node? -ida_graph.selection_item_t.node (variable) +ida_graph.selection_item_t.node node number (is_node = true) -ida_graph.set_node_info (function) - set_node_info(gid, node, ni, flags) - Set node info. - - @param gid: (C++: graph_id_t) id of desired graph - @param node: (C++: int) node number - @param ni: (C++: const node_info_t &) node info to use - @param flags: (C++: uint32) combination of Node info flags, identifying which fields of 'ni' - will be used +ida_graph.set_node_info(gid: "graph_id_t", node: int, ni: "node_info_t", flags: int) -> None + Set node info. + + @param gid: id of desired graph + @param node: node number + @param ni: node info to use + @param flags: combination of Node info flags, identifying which fields of 'ni' will be used -ida_graph.set_viewer_graph (function) - set_viewer_graph(gv, g) +ida_graph.set_viewer_graph(gv: "graph_viewer_t *", g: "interactive_graph_t") -> None Set the underlying graph object for the given viewer. - - @param gv: (C++: graph_viewer_t *) - @param g: (C++: mutable_graph_t *) -ida_graph.user_graph_place_t (class) - Proxy of C++ user_graph_place_t class. +ida_graph.user_graph_place_t -ida_graph.user_graph_place_t.__init__ (method) +ida_graph.user_graph_place_t.__init__(self, *args, **kwargs) -ida_graph.viewer_attach_menu_item (function) - 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 *) graph viewer - @param name: (C++: const char *) action name - @return: success +ida_graph.viewer_attach_menu_item(g: "graph_viewer_t *", name: str) -> bool + Attach a previously-registered action to the view's context menu. See kernwin.hpp for how to register actions. + + @param g: graph viewer + @param name: action name + @returns success -ida_graph.viewer_center_on (function) - viewer_center_on(gv, node) +ida_graph.viewer_center_on(gv: "graph_viewer_t *", node: int) -> None Center the graph view on the given node. - - @param gv: (C++: graph_viewer_t *) - @param node: (C++: int) -ida_graph.viewer_create_groups (function) - 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: +ida_graph.viewer_create_groups(gv: "graph_viewer_t *", out_group_nodes: "intvec_t *", gi: "groups_crinfos_t const &") -> 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 interactive_graph_t::create_group that will, in essence: * clone the current graph * for each group_crinfo_t, attempt creating group in that new graph * if all were successful, animate to that new graph. - @note: 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 &) groups_crinfos_t const & -ida_graph.viewer_del_node_info (function) - viewer_del_node_info(gv, n) +ida_graph.viewer_del_node_info(gv: "graph_viewer_t *", n: int) -> None 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 (function) - viewer_delete_groups(gv, groups, new_current=-1) -> bool - Wrapper around mutable_graph_t::delete_group. This function will: +ida_graph.viewer_delete_groups(gv: "graph_viewer_t *", groups: "intvec_t const &", new_current: int = -1) -> bool + Wrapper around interactive_graph_t::delete_group. This function will: * clone the current graph * attempt deleting the groups in that new graph - * if successful, animate to that new graph. + * if successful, animate to that new graph. - @param gv: (C++: graph_viewer_t *) - @param groups: (C++: const intvec_t &) intvec_t const & - @param new_current: (C++: int) + + -ida_graph.viewer_fit_window (function) - viewer_fit_window(gv) +ida_graph.viewer_fit_window(gv: "graph_viewer_t *") -> None Fit graph viewer to its parent form. - - @param gv: (C++: graph_viewer_t *) -ida_graph.viewer_get_curnode (function) - viewer_get_curnode(gv) -> int +ida_graph.viewer_get_curnode(gv: "graph_viewer_t *") -> int Get number of currently selected node (-1 if none) - - @param gv: (C++: graph_viewer_t *) -ida_graph.viewer_get_gli (function) - 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_gli(out: "graph_location_info_t *", gv: "graph_viewer_t *", flags: int = 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. + -ida_graph.viewer_get_node_info (function) - viewer_get_node_info(gv, out, n) -> bool +ida_graph.viewer_get_node_info(gv: "graph_viewer_t *", out: "node_info_t", n: int) -> 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 (function) - viewer_get_selection(gv, sgs) -> bool +ida_graph.viewer_get_selection(gv: "graph_viewer_t *", sgs: "screen_graph_selection_t") -> 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 (function) - 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 *) graph_location_info_t const * - @param flags: (C++: uint32) +ida_graph.viewer_set_gli(gv: "graph_viewer_t *", gli: "graph_location_info_t const *", flags: int = 0) -> None + 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. + -ida_graph.viewer_set_groups_visibility (function) - viewer_set_groups_visibility(gv, groups, expand, new_current=-1) -> bool - Wrapper around mutable_graph_t::change_visibility. This function will: +ida_graph.viewer_set_groups_visibility(gv: "graph_viewer_t *", groups: "intvec_t const &", expand: bool, new_current: int = -1) -> bool + Wrapper around interactive_graph_t::change_visibility. This function will: * clone the current graph * attempt changing visibility of the groups in that new graph - * if successful, animate to that new graph. + * if successful, animate to that new graph. - @param gv: (C++: graph_viewer_t *) - @param groups: (C++: const intvec_t &) intvec_t const & - @param expand: (C++: bool) - @param new_current: (C++: int) + + -ida_graph.viewer_set_node_info (function) - viewer_set_node_info(gv, n, ni, flags) +ida_graph.viewer_set_node_info(gv: "graph_viewer_t *", n: int, ni: "node_info_t", flags: int) -> None 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 &) node_info_t const & - @param flags: (C++: uint32) -ida_graph.viewer_set_titlebar_height (function) - viewer_set_titlebar_height(gv, height) -> int +ida_graph.viewer_set_titlebar_height(gv: "graph_viewer_t *", height: int) -> int Set height of node title bars (grcode_set_titlebar_height) - - @param gv: (C++: graph_viewer_t *) - @param height: (C++: int) -ida_ida (module) - Contains the inf structure definition and some functions common to the whole IDA - project. +ida_ida + Contains the ::inf structure definition and some functions common to the whole IDA project. - The inf structure is saved in the database and contains information specific to - the current program being disassembled. Initially it is filled with values from - ida.cfg. - - Although it is not a good idea to change values in inf structure (because you - will overwrite values taken from ida.cfg), you are allowed to do it if you feel - it necessary. + The ::inf structure is saved in the database and contains information specific to the current program being disassembled. Initially it is filled with values from ida.cfg. + Although it is not a good idea to change values in ::inf structure (because you will overwrite values taken from ida.cfg), you are allowed to do it if you feel it necessary. + -ida_ida.ABI_8ALIGN4 (variable) +ida_ida.ABI_8ALIGN4 4 byte alignment for 8byte scalars (__int64/double) inside structures? -ida_ida.ABI_BIGARG_ALIGN (variable) - use natural type alignment for argument if the alignment exceeds native word - size. (e.g. __int64 argument should be 8byte aligned on some 32bit platforms) +ida_ida.ABI_BIGARG_ALIGN + use natural type alignment for argument if the alignment exceeds native word size. (e.g. __int64 argument should be 8byte aligned on some 32bit platforms) + -ida_ida.ABI_GCC_LAYOUT (variable) +ida_ida.ABI_GCC_LAYOUT use gcc layout for udts (used for mingw) -ida_ida.ABI_HARD_FLOAT (variable) +ida_ida.ABI_HARD_FLOAT use the floating-point register set -ida_ida.ABI_HUGEARG_ALIGN (variable) - 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. this bit is not used by ida yet +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. this bit is not used by ida yet + -ida_ida.ABI_MAP_STKARGS (variable) +ida_ida.ABI_MAP_STKARGS register arguments are mapped to stack area (and consume stack slots) -ida_ida.ABI_PACK_STKARGS (variable) +ida_ida.ABI_PACK_STKARGS do not align stack arguments to stack slots -ida_ida.ABI_SET_BY_USER (variable) - compiler/abi were set by user flag and require SETCOMP_BY_USER flag to be - changed +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 (variable) +ida_ida.ABI_STACK_LDBL long double arguments are passed on stack -ida_ida.ABI_STACK_VARARGS (variable) +ida_ida.ABI_STACK_VARARGS varargs are always passed on stack (even when there are free registers) -ida_ida.AF2_DOEH (variable) +ida_ida.AF2_DOEH Handle EH information. -ida_ida.AF2_DORTTI (variable) +ida_ida.AF2_DORTTI Handle RTTI information. -ida_ida.AF2_MACRO (variable) - Try to combine several instructions into a macro instruction +ida_ida.AF2_MACRO + Try to combine several instructions into a macro instruction + -ida_ida.AF2_MERGESTR (variable) - Merge string literals created using data xrefs +ida_ida.AF2_MERGESTR + Merge string literals created using data xrefs + -ida_ida.AF_ANORET (variable) +ida_ida.AF_ANORET Perform 'no-return' analysis. -ida_ida.AF_CHKUNI (variable) +ida_ida.AF_CHKUNI Check for unicode strings. -ida_ida.AF_CODE (variable) +ida_ida.AF_CODE Trace execution flow. -ida_ida.AF_DATOFF (variable) +ida_ida.AF_DATOFF Automatically convert data to offsets. -ida_ida.AF_DOCODE (variable) +ida_ida.AF_DOCODE Coagulate code segs at the final pass. -ida_ida.AF_DODATA (variable) +ida_ida.AF_DODATA Coagulate data segs at the final pass. -ida_ida.AF_DREFOFF (variable) +ida_ida.AF_DREFOFF Create offset if data xref to seg32 exists. -ida_ida.AF_FINAL (variable) +ida_ida.AF_FINAL Final pass of analysis. -ida_ida.AF_FIXUP (variable) +ida_ida.AF_FIXUP Create offsets and segments using fixup info. -ida_ida.AF_FLIRT (variable) +ida_ida.AF_FLIRT Use flirt signatures. -ida_ida.AF_FTAIL (variable) +ida_ida.AF_FTAIL Create function tails. -ida_ida.AF_HFLIRT (variable) +ida_ida.AF_HFLIRT Automatically hide library functions. -ida_ida.AF_IMMOFF (variable) +ida_ida.AF_IMMOFF Convert 32bit instruction operand to offset. -ida_ida.AF_JFUNC (variable) +ida_ida.AF_JFUNC Rename jump functions as j_... -ida_ida.AF_JUMPTBL (variable) +ida_ida.AF_JUMPTBL Locate and create jump tables. -ida_ida.AF_LVAR (variable) +ida_ida.AF_LVAR Create stack variables. -ida_ida.AF_MARKCODE (variable) +ida_ida.AF_MARKCODE Mark typical code sequences as code. -ida_ida.AF_MEMFUNC (variable) +ida_ida.AF_MEMFUNC Try to guess member function types. -ida_ida.AF_NULLSUB (variable) +ida_ida.AF_NULLSUB Rename empty functions as nullsub_... -ida_ida.AF_PROC (variable) +ida_ida.AF_PROC Create functions if call is present. -ida_ida.AF_PROCPTR (variable) +ida_ida.AF_PROCPTR Create function if data xref data->code32 exists. -ida_ida.AF_PURDAT (variable) +ida_ida.AF_PURDAT Control flow to data segment is ignored. -ida_ida.AF_REGARG (variable) +ida_ida.AF_REGARG Propagate register argument information. -ida_ida.AF_SIGCMT (variable) +ida_ida.AF_SIGCMT Append a signature name comment for recognized anonymous library functions. -ida_ida.AF_SIGMLT (variable) +ida_ida.AF_SIGMLT Allow recognition of several copies of the same function. -ida_ida.AF_STKARG (variable) +ida_ida.AF_STKARG Propagate stack argument information. -ida_ida.AF_STRLIT (variable) +ida_ida.AF_STRLIT Create string literal if data xref exists. -ida_ida.AF_TRACE (variable) +ida_ida.AF_TRACE Trace stack pointer. -ida_ida.AF_TRFUNC (variable) +ida_ida.AF_TRFUNC Truncate functions upon code deletion. -ida_ida.AF_UNK (variable) +ida_ida.AF_UNK Delete instructions with no xrefs. -ida_ida.AF_USED (variable) +ida_ida.AF_USED Analyze and create all xrefs. -ida_ida.AF_VERSP (variable) +ida_ida.AF_VERSP Perform full SP-analysis. ( processor_t::verify_sp) -ida_ida.DEMNAM_CMNT (variable) +ida_ida.DEMNAM_CMNT display demangled names as comments -ida_ida.DEMNAM_FIRST (variable) +ida_ida.DEMNAM_FIRST override type info -ida_ida.DEMNAM_GCC3 (variable) +ida_ida.DEMNAM_GCC3 assume gcc3 names (valid for gnu compiler) -ida_ida.DEMNAM_MASK (variable) +ida_ida.DEMNAM_MASK mask for name form -ida_ida.DEMNAM_NAME (variable) +ida_ida.DEMNAM_NAME display demangled names as regular names -ida_ida.DEMNAM_NONE (variable) +ida_ida.DEMNAM_NONE don't display demangled names -ida_ida.IDAINFO_TAG_SIZE (variable) - The database parameters. This structure is kept in the ida database. It contains - the essential parameters for the current program +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 (variable) +ida_ida.IDB_COMPRESSED compress & pack database components -ida_ida.IDB_PACKED (variable) +ida_ida.IDB_PACKED pack database components into .idb -ida_ida.IDB_UNPACKED (variable) +ida_ida.IDB_UNPACKED leave database components unpacked -ida_ida.IDI_BITMAP (variable) +ida_ida.IDI_ALTVAL + netnode: altval + +ida_ida.IDI_BITMAP bitmap field: interpret bitmask as bit number -ida_ida.IDI_BYTEARRAY (variable) +ida_ida.IDI_BLOB + netnode: blob + +ida_ida.IDI_BYTEARRAY byte array: binary representation -ida_ida.IDI_CSTR (variable) +ida_ida.IDI_CSTR string -ida_ida.IDI_DEC (variable) +ida_ida.IDI_DEC show as decimal -ida_ida.IDI_EA_HEX (variable) +ida_ida.IDI_EA_HEX default representation: hex or "BADADDR" -ida_ida.IDI_HASH (variable) +ida_ida.IDI_HASH hashed node field, hash name in offset -ida_ida.IDI_HEX (variable) +ida_ida.IDI_HEX show as hexadecimal -ida_ida.IDI_HLPSTRUC (variable) +ida_ida.IDI_HLPSTRUC call helper for pointer to structure -ida_ida.IDI_INC (variable) +ida_ida.IDI_INC stored value is incremented (scalars only) -ida_ida.IDI_MAP_VAL (variable) +ida_ida.IDI_MAP_VAL apply ea2node() to value -ida_ida.IDI_NOMERGE (variable) +ida_ida.IDI_NOMERGE field should not be merged as part of INF -ida_ida.IDI_ONOFF (variable) +ida_ida.IDI_ONOFF show boolean as on/off (not true/false) -ida_ida.IDI_QSTRING (variable) +ida_ida.IDI_QSTRING qstring -ida_ida.IDI_READONLY (variable) +ida_ida.IDI_READONLY read-only field (cannot be modified) -ida_ida.IDI_SCALAR (variable) +ida_ida.IDI_SCALAR scalar value (default) -ida_ida.IDI_STRUCFLD (variable) +ida_ida.IDI_STRUCFLD structure field (opposite to IDI_NODEVAL) -ida_ida.INFFL_ALLASM (variable) - may use constructs not supported by the target assembler +ida_ida.IDI_SUPVAL + netnode: supval -ida_ida.INFFL_AUTO (variable) +ida_ida.IDI_VALOBJ + netnode: valobj + +ida_ida.INFFL_ALLASM + may use constructs not supported by the target assembler + + +ida_ida.INFFL_AUTO Autoanalysis is enabled? -ida_ida.INFFL_CHKOPS (variable) +ida_ida.INFFL_CHKOPS check manual operands? (unused) -ida_ida.INFFL_GRAPH_VIEW (variable) +ida_ida.INFFL_GRAPH_VIEW currently using graph options ( text_options_t::graph) -ida_ida.INFFL_LOADIDC (variable) +ida_ida.INFFL_LOADIDC loading an idc file that contains database info -ida_ida.INFFL_NMOPS (variable) +ida_ida.INFFL_NMOPS allow non-matched operands? (unused) -ida_ida.INFFL_NOUSER (variable) +ida_ida.INFFL_NOUSER do not store user info in the database -ida_ida.INFFL_READONLY (variable) +ida_ida.INFFL_READONLY (internal) temporary interdiction to modify the database -ida_ida.INF_ABINAME (variable) +ida_ida.INF_ABINAME ABI name (processor specific) -ida_ida.INF_ARCHIVE_PATH (variable) +ida_ida.INF_ARCHIVE_PATH archive file path -ida_ida.INF_CRC32 (variable) +ida_ida.INF_CRC32 input file crc32 -ida_ida.INF_CTIME (variable) +ida_ida.INF_CTIME database creation timestamp -ida_ida.INF_C_MACROS (variable) +ida_ida.INF_C_MACROS C predefined macros. -ida_ida.INF_DBG_BINPATHS (variable) +ida_ida.INF_DBG_BINPATHS unused (20 indexes) -ida_ida.INF_DUALOP_GRAPH (variable) +ida_ida.INF_DUALOP_GRAPH Graph text representation options. -ida_ida.INF_DUALOP_TEXT (variable) +ida_ida.INF_DUALOP_TEXT Text text representation options. -ida_ida.INF_ELAPSED (variable) +ida_ida.INF_ELAPSED seconds database stayed open -ida_ida.INF_FILE_FORMAT_NAME (variable) +ida_ida.INF_FILE_FORMAT_NAME file format name for loader modules -ida_ida.INF_FSIZE (variable) +ida_ida.INF_FSIZE input file size -ida_ida.INF_GROUPS (variable) +ida_ida.INF_GROUPS segment group information (see init_groups()) -ida_ida.INF_H_PATH (variable) +ida_ida.INF_H_PATH C header path. -ida_ida.INF_IDA_VERSION (variable) +ida_ida.INF_IDA_VERSION version of ida which created the database -ida_ida.INF_IDSNODE (variable) +ida_ida.INF_IDSNODE ids modnode id (for import_module) -ida_ida.INF_IMAGEBASE (variable) +ida_ida.INF_IMAGEBASE image base -ida_ida.INF_INCLUDE (variable) +ida_ida.INF_INCLUDE assembler include file name -ida_ida.INF_INITIAL_VERSION (variable) +ida_ida.INF_INITIAL_VERSION initial version of database -ida_ida.INF_MD5 (variable) +ida_ida.INF_MD5 MD5 of the input file. -ida_ida.INF_NOPENS (variable) +ida_ida.INF_NOPENS how many times the database is opened -ida_ida.INF_NOTEPAD (variable) +ida_ida.INF_NOTEPAD notepad blob, occupies 1000 indexes (1MB of text) -ida_ida.INF_OUTFILEENC (variable) +ida_ida.INF_OUTFILEENC output file encoding index -ida_ida.INF_PROBLEMS (variable) +ida_ida.INF_PROBLEMS problem lists -ida_ida.INF_SELECTORS (variable) +ida_ida.INF_SELECTORS 2..63 are for selector_t blob (see init_selectors()) -ida_ida.INF_SHA256 (variable) +ida_ida.INF_SHA256 SHA256 of the input file. -ida_ida.INF_SRCDBG_PATHS (variable) +ida_ida.INF_SRCDBG_PATHS source debug paths, occupies 20 indexes -ida_ida.INF_SRCDBG_UNDESIRED (variable) +ida_ida.INF_SRCDBG_UNDESIRED user-closed source files, occupies 20 indexes -ida_ida.INF_STR_ENCODINGS (variable) +ida_ida.INF_STR_ENCODINGS a list of encodings for the program strings -ida_ida.LFLG_64BIT (variable) +ida_ida.LFLG_64BIT 64-bit program? -ida_ida.LFLG_COMPRESS (variable) +ida_ida.LFLG_COMPRESS compress the database? -ida_ida.LFLG_DBG_NOPATH (variable) +ida_ida.LFLG_DBG_NOPATH do not store input full path in debugger process options -ida_ida.LFLG_FLAT_OFF32 (variable) +ida_ida.LFLG_FLAT_OFF32 treat REF_OFF32 as 32-bit offset for 16bit segments (otherwise try SEG16:OFF16) -ida_ida.LFLG_IS_DLL (variable) +ida_ida.LFLG_ILP32 + 64-bit instructions with 64-bit registers, but 32-bit pointers and address space. this bit is mutually exclusive with LFLG_64BIT + + +ida_ida.LFLG_IS_DLL Is dynamic library? -ida_ida.LFLG_KERNMODE (variable) +ida_ida.LFLG_KERNMODE is kernel mode binary? -ida_ida.LFLG_MSF (variable) +ida_ida.LFLG_MSF Byte order: is MSB first? -ida_ida.LFLG_PACK (variable) +ida_ida.LFLG_PACK pack the database? -ida_ida.LFLG_PC_FLAT (variable) +ida_ida.LFLG_PC_FLAT 32-bit program (or higher)? -ida_ida.LFLG_PC_FPP (variable) +ida_ida.LFLG_PC_FPP decode floating point processor instructions? -ida_ida.LFLG_SNAPSHOT (variable) +ida_ida.LFLG_SNAPSHOT memory snapshot was taken? -ida_ida.LFLG_WIDE_HBF (variable) - Bit order of wide bytes: high byte first? (wide bytes: processor_t::dnbits > 8) +ida_ida.LFLG_WIDE_HBF + Bit order of wide bytes: high byte first? (wide bytes: processor_t::dnbits > 8) + -ida_ida.LMT_EMPTY (variable) +ida_ida.LMT_EMPTY empty lines at the end of basic blocks -ida_ida.LMT_THICK (variable) +ida_ida.LMT_THICK thick borders -ida_ida.LMT_THIN (variable) +ida_ida.LMT_THIN thin borders -ida_ida.LN_AUTO (variable) +ida_ida.LN_AUTO include autogenerated names -ida_ida.LN_NORMAL (variable) +ida_ida.LN_NORMAL include normal names -ida_ida.LN_PUBLIC (variable) +ida_ida.LN_PUBLIC include public names -ida_ida.LN_WEAK (variable) +ida_ida.LN_WEAK include weak names -ida_ida.OFLG_GEN_ASSUME (variable) +ida_ida.OFLG_GEN_ASSUME Generate 'assume' directives? -ida_ida.OFLG_GEN_NULL (variable) +ida_ida.OFLG_GEN_NULL Generate empty lines? -ida_ida.OFLG_GEN_ORG (variable) +ida_ida.OFLG_GEN_ORG Generate 'org' directives? -ida_ida.OFLG_GEN_TRYBLKS (variable) +ida_ida.OFLG_GEN_TRYBLKS Generate try/catch directives? -ida_ida.OFLG_LZERO (variable) +ida_ida.OFLG_LZERO generate leading zeroes in numbers -ida_ida.OFLG_PREF_SEG (variable) +ida_ida.OFLG_PREF_SEG line prefixes with segment name? -ida_ida.OFLG_SHOW_AUTO (variable) +ida_ida.OFLG_SHOW_AUTO Display autoanalysis indicator? -ida_ida.OFLG_SHOW_PREF (variable) +ida_ida.OFLG_SHOW_PREF Show line prefixes? -ida_ida.OFLG_SHOW_VOID (variable) +ida_ida.OFLG_SHOW_VOID Display void marks? -ida_ida.PREF_FNCOFF (variable) +ida_ida.PREF_FNCOFF show function offsets? -ida_ida.PREF_PFXTRUNC (variable) +ida_ida.PREF_PFXTRUNC truncate instruction bytes if they would need more than 1 line -ida_ida.PREF_SEGADR (variable) +ida_ida.PREF_SEGADR show segment addresses? -ida_ida.PREF_STACK (variable) +ida_ida.PREF_STACK show stack pointer? -ida_ida.SCF_ALLCMT (variable) +ida_ida.SCF_ALLCMT comment all lines? -ida_ida.SCF_LINNUM (variable) +ida_ida.SCF_LINNUM show source line numbers -ida_ida.SCF_NOCMT (variable) +ida_ida.SCF_NOCMT no comments at all -ida_ida.SCF_RPTCMT (variable) +ida_ida.SCF_RPTCMT show repeatable comments? -ida_ida.SCF_SHHID_FUNC (variable) +ida_ida.SCF_SHHID_FUNC show hidden functions -ida_ida.SCF_SHHID_ITEM (variable) +ida_ida.SCF_SHHID_ITEM show hidden instructions -ida_ida.SCF_SHHID_SEGM (variable) +ida_ida.SCF_SHHID_SEGM show hidden segments -ida_ida.SCF_TESTMODE (variable) +ida_ida.SCF_TESTMODE testida.idc is running -ida_ida.STRF_AUTO (variable) +ida_ida.STRF_AUTO names have 'autogenerated' bit? -ida_ida.STRF_COMMENT (variable) +ida_ida.STRF_COMMENT generate auto comment for string references? -ida_ida.STRF_GEN (variable) +ida_ida.STRF_GEN generate names? -ida_ida.STRF_SAVECASE (variable) +ida_ida.STRF_SAVECASE preserve case of strings for identifiers -ida_ida.STRF_SERIAL (variable) +ida_ida.STRF_SERIAL generate serial names? -ida_ida.STRF_UNICODE (variable) +ida_ida.STRF_UNICODE unicode strings are present? -ida_ida.STT_CUR (variable) +ida_ida.STT_CUR use current storage type (may be used only as a function argument) -ida_ida.STT_DBG (variable) +ida_ida.STT_DBG memory map: temporary debugger storage. used internally -ida_ida.STT_MM (variable) +ida_ida.STT_MM memory map: sparse storage. useful for huge objects -ida_ida.STT_VA (variable) +ida_ida.STT_VA regular storage: virtual arrays, an explicit flag for each byte -ida_ida.SW_SEGXRF (variable) +ida_ida.SW_SEGXRF show segments in xrefs? -ida_ida.SW_XRFFNC (variable) +ida_ida.SW_XRFFNC show function offsets? -ida_ida.SW_XRFMRK (variable) +ida_ida.SW_XRFMRK show xref type marks? -ida_ida.SW_XRFVAL (variable) +ida_ida.SW_XRFVAL show xref values? (otherwise-"...") -ida_ida.UA_MAXOP (variable) +ida_ida.UA_MAXOP max number of operands allowed for an instruction -ida_ida.VLD_AUTO_REPAIR (variable) +ida_ida.VLD_AUTO_REPAIR automatically repair the database -ida_ida.VLD_DIALOG (variable) +ida_ida.VLD_DIALOG ask user to repair (this bit is mutually exclusive with VLD_AUTO_REPAIR) -ida_ida.VLD_SILENT (variable) +ida_ida.VLD_SILENT no messages to the output window -ida_ida.__make_idainfo_accessors (function) +ida_ida.__make_idainfo_accessors(attr, getter_name = None, setter_name = None) -ida_ida.__make_idainfo_bound (function) +ida_ida.__make_idainfo_bound(func, attr) -ida_ida.__make_idainfo_bound.__func (function) +ida_ida.__make_idainfo_bound.__func(self, *args) -ida_ida.__make_idainfo_getter (function) +ida_ida.__make_idainfo_getter(name) -ida_ida.__set_module_dynattrs (function) +ida_ida.__set_module_dynattrs(modname, pdict) -ida_ida.__wrap_hooks_callback (function) +ida_ida.__wrap_hooks_callback(klass, new_name, old_name, do_call) -ida_ida.__wrap_hooks_callback.__wrapper (function) +ida_ida.__wrap_hooks_callback.__wrapper(self, *args) -ida_ida.calc_default_idaplace_flags (function) - calc_default_idaplace_flags() -> int +ida_ida.calc_default_idaplace_flags() -> int Get default disassembly line options. -ida_ida.compiler_info_t (class) - Proxy of C++ compiler_info_t class. +ida_ida.compiler_info_t -ida_ida.compiler_info_t.__init__ (method) - __init__(self) -> compiler_info_t +ida_ida.compiler_info_t.__init__(self) -ida_ida.compiler_info_t.cm (variable) +ida_ida.compiler_info_t.cm memory model and calling convention (see CM) -ida_ida.compiler_info_t.defalign (variable) +ida_ida.compiler_info_t.defalign default alignment for structures -ida_ida.compiler_info_t.id (variable) +ida_ida.compiler_info_t.id compiler id (see Compiler IDs) -ida_ida.compiler_info_t.size_b (variable) +ida_ida.compiler_info_t.size_b sizeof(bool) -ida_ida.compiler_info_t.size_e (variable) +ida_ida.compiler_info_t.size_e sizeof(enum) -ida_ida.compiler_info_t.size_i (variable) +ida_ida.compiler_info_t.size_i sizeof(int) -ida_ida.compiler_info_t.size_l (variable) +ida_ida.compiler_info_t.size_l long -ida_ida.compiler_info_t.size_ldbl (variable) +ida_ida.compiler_info_t.size_ldbl longdouble (if different from processor_t::tbyte_size) -ida_ida.compiler_info_t.size_ll (variable) +ida_ida.compiler_info_t.size_ll longlong -ida_ida.compiler_info_t.size_s (variable) +ida_ida.compiler_info_t.size_s short -ida_ida.delinf (function) - delinf(tag) -> bool - Undefine a program specific information - - @param tag: (C++: inftag_t) one of inftag_t constants - @return: success +ida_ida.delinf(tag: "inftag_t") -> bool + Undefine a program specific information + + @param tag: one of inftag_t constants + @returns success -ida_ida.f_AIXAR (variable) +ida_ida.f_AIXAR AIX ar library. -ida_ida.f_AOUT (variable) +ida_ida.f_AOUT Linux a.out (AOUT) -ida_ida.f_AR (variable) +ida_ida.f_AR ar library -ida_ida.f_BIN (variable) +ida_ida.f_BIN Binary File. -ida_ida.f_COFF (variable) +ida_ida.f_COFF Common Object File Format (COFF) -ida_ida.f_COM (variable) +ida_ida.f_COM MS DOS COM File. -ida_ida.f_COM_old (variable) +ida_ida.f_COM_old MS DOS COM File. -ida_ida.f_DRV (variable) +ida_ida.f_DRV MS DOS Driver. -ida_ida.f_ELF (variable) +ida_ida.f_ELF Executable and Linkable Format (ELF) -ida_ida.f_EXE (variable) +ida_ida.f_EXE MS DOS EXE File. -ida_ida.f_EXE_old (variable) +ida_ida.f_EXE_old MS DOS EXE File. -ida_ida.f_HEX (variable) +ida_ida.f_HEX Intel Hex Object File. -ida_ida.f_LE (variable) +ida_ida.f_LE Linear Executable (LE) -ida_ida.f_LOADER (variable) +ida_ida.f_LOADER file is loaded using LOADER DLL -ida_ida.f_LX (variable) +ida_ida.f_LX Linear Executable (LX) -ida_ida.f_MACHO (variable) +ida_ida.f_MACHO Mac OS X Mach-O. -ida_ida.f_MEX (variable) +ida_ida.f_MD1IMG + Mediatek Firmware Image. + +ida_ida.f_MEX MOS Technology Hex Object File. -ida_ida.f_NLM (variable) +ida_ida.f_NLM Netware Loadable Module (NLM) -ida_ida.f_OMF (variable) +ida_ida.f_OMF Object Module Format. -ida_ida.f_OMFLIB (variable) +ida_ida.f_OMFLIB Library of OMF Modules. -ida_ida.f_PE (variable) +ida_ida.f_PE Portable Executable (PE) -ida_ida.f_PRC (variable) +ida_ida.f_PRC PalmPilot program file. -ida_ida.f_PSXOBJ (variable) +ida_ida.f_PSXOBJ Sony Playstation PSX object file. -ida_ida.f_SREC (variable) +ida_ida.f_SREC Motorola SREC (S-record) -ida_ida.f_W32RUN (variable) +ida_ida.f_W32RUN Watcom DOS32 Extender (W32RUN) -ida_ida.f_WIN (variable) +ida_ida.f_WIN New Executable (NE) -ida_ida.f_ZIP (variable) +ida_ida.f_ZIP ZIP file (this file is never loaded to IDA database) -ida_ida.get_dbctx_id (function) - get_dbctx_id() -> ssize_t - Get the current database context ID - - @return: the database context ID, or -1 if no current database +ida_ida.get_dbctx_id() -> "ssize_t" + Get the current database context ID + + @returns the database context ID, or -1 if no current database -ida_ida.get_dbctx_qty (function) - get_dbctx_qty() -> size_t - Get number of database contexts - - @return: number of database contexts +ida_ida.get_dbctx_qty() -> "size_t" + Get number of database contexts + + @returns number of database contexts -ida_ida.getinf_str (function) - getinf_str(tag) -> str - Get program specific information (a non-scalar value) - - @param tag: (C++: inftag_t) one of inftag_t constants - @return: number of bytes stored in the buffer (<0 - not defined) +ida_ida.getinf_str(tag: "inftag_t") -> str + Get program specific information (a non-scalar value) + + @param tag: one of inftag_t constants + @returns number of bytes stored in the buffer (<0 - not defined) -ida_ida.idainfo (class) - Proxy of C++ idainfo class. +ida_ida.idainfo -ida_ida.idainfo.__init__ (method) +ida_ida.idainfo.__init__(self, *args, **kwargs) -ida_ida.idainfo._get_lflags (method) - _get_lflags(self) -> uint32 +ida_ida.idainfo._get_lflags(self) -> int -ida_ida.idainfo._set_lflags (method) - _set_lflags(self, _f) - - Parameters - ---------- - _f: uint32 +ida_ida.idainfo._set_lflags(self, _f: int) -> None -ida_ida.idainfo.abibits (variable) - ABI features. Depends on info returned by get_abi_name() Processor modules may - modify them in set_compiler +ida_ida.idainfo.abibits + ABI features. Depends on info returned by get_abi_name() Processor modules may modify them in set_compiler + -ida_ida.idainfo.af (variable) - Analysis flags +ida_ida.idainfo.af + Analysis flags + -ida_ida.idainfo.af2 (variable) - Analysis flags 2 +ida_ida.idainfo.af2 + Analysis flags 2 + -ida_ida.idainfo.appcall_options (variable) +ida_ida.idainfo.appcall_options appcall options, see idd.hpp -ida_ida.idainfo.apptype (variable) - Application type bit definitions in libfuncs.hpp +ida_ida.idainfo.apptype + Application type bit definitions in libfuncs.hpp + -ida_ida.idainfo.asmtype (variable) +ida_ida.idainfo.asmtype target assembler number -ida_ida.idainfo.baseaddr (variable) +ida_ida.idainfo.baseaddr remaining 28 bits are reserved - base address of the program (paragraphs) + base address of the program (paragraphs) + -ida_ida.idainfo.bin_prefix_size (variable) +ida_ida.idainfo.bin_prefix_size Number of instruction bytes (opcodes) to show in line prefix. -ida_ida.idainfo.cc (variable) +ida_ida.idainfo.cc COMPILER. - Target compiler + Target compiler + -ida_ida.idainfo.cmt_indent (variable) +ida_ida.idainfo.cmt_indent Indentation for comments. -ida_ida.idainfo.database_change_count (variable) - incremented after each byte and regular segment modifications +ida_ida.idainfo.database_change_count + incremented after each byte and regular segment modifications + -ida_ida.idainfo.datatypes (variable) +ida_ida.idainfo.datatypes data types allowed in data carousel -ida_ida.idainfo.demnames (variable) - Demangled name flags +ida_ida.idainfo.demnames + Demangled name flags + -ida_ida.idainfo.filetype (variable) +ida_ida.idainfo.filetype The input file type. -ida_ida.idainfo.get_abiname (method) - get_abiname(self) -> qstring +ida_ida.idainfo.get_abiname(self) -> str -ida_ida.idainfo.highoff (variable) - High limit for offsets (used in calculation of 'void' operands) +ida_ida.idainfo.highoff + High limit for offsets (used in calculation of 'void' operands) + -ida_ida.idainfo.indent (variable) +ida_ida.idainfo.indent DISASSEMBLY LISTING DETAILS. - Indentation for instructions + Indentation for instructions + -ida_ida.idainfo.lenxref (variable) +ida_ida.idainfo.lenxref max length of line with xrefs -ida_ida.idainfo.lflags (variable) - Misc. database flags +ida_ida.idainfo.lflags + Misc. database flags + -ida_ida.idainfo.listnames (variable) - Name list options +ida_ida.idainfo.listnames + Name list options + -ida_ida.idainfo.long_demnames (variable) - long form of demangled names see demangle.h for definitions +ida_ida.idainfo.long_demnames + long form of demangled names see demangle.h for definitions + -ida_ida.idainfo.lowoff (variable) - Low limit for offsets (used in calculation of 'void' operands) +ida_ida.idainfo.lowoff + Low limit for offsets (used in calculation of 'void' operands) + -ida_ida.idainfo.main (variable) +ida_ida.idainfo.main address of main() -ida_ida.idainfo.margin (variable) +ida_ida.idainfo.margin max length of data lines -ida_ida.idainfo.max_autoname_len (variable) +ida_ida.idainfo.max_autoname_len NAMES. - max autogenerated name length (without zero byte) + max autogenerated name length (without zero byte) + -ida_ida.idainfo.max_ea (variable) +ida_ida.idainfo.max_ea maxEA is excluded -ida_ida.idainfo.maxref (variable) +ida_ida.idainfo.maxref Max tail for references. -ida_ida.idainfo.min_ea (variable) +ida_ida.idainfo.min_ea current limits of program -ida_ida.idainfo.nametype (variable) - Dummy names representation types +ida_ida.idainfo.nametype + Dummy names representation types + -ida_ida.idainfo.omax_ea (variable) +ida_ida.idainfo.omax_ea original maxEA (is set after loading the input file) -ida_ida.idainfo.omin_ea (variable) +ida_ida.idainfo.omin_ea original minEA (is set after loading the input file) -ida_ida.idainfo.ostype (variable) - OS type the program is for bit definitions in libfuncs.hpp +ida_ida.idainfo.ostype + OS type the program is for bit definitions in libfuncs.hpp + -ida_ida.idainfo.outflags (variable) - output flags +ida_ida.idainfo.outflags + output flags + -ida_ida.idainfo.procname (variable) +ida_ida.idainfo.procname Name of the current processor (with \0) -ida_ida.idainfo.refcmtnum (variable) - Number of comment lines to generate for refs to string literals or demangled - names 0 - such comments won't be generated at all +ida_ida.idainfo.refcmtnum + Number of comment lines to generate for refs to string literals or demangled names 0 - such comments won't be generated at all + -ida_ida.idainfo.s_cmtflg (variable) - Comment options +ida_ida.idainfo.s_cmtflg + Comment options + -ida_ida.idainfo.s_genflags (variable) - General idainfo flags +ida_ida.idainfo.s_genflags + General idainfo flags + -ida_ida.idainfo.s_limiter (variable) - Delimiter options +ida_ida.idainfo.s_limiter + Delimiter options + -ida_ida.idainfo.s_prefflag (variable) - Line prefix options +ida_ida.idainfo.s_prefflag + Line prefix options + -ida_ida.idainfo.s_xrefflag (variable) - Xref options +ida_ida.idainfo.s_xrefflag + Xref options + -ida_ida.idainfo.short_demnames (variable) +ida_ida.idainfo.short_demnames short form of demangled names -ida_ida.idainfo.specsegs (variable) - What format do special segments use? 0-unspecified, 4-entries are 4 bytes, 8- - entries are 8 bytes. +ida_ida.idainfo.specsegs + What format do special segments use? 0-unspecified, 4-entries are 4 bytes, 8- entries are 8 bytes. -ida_ida.idainfo.start_cs (variable) +ida_ida.idainfo.start_cs selector of the segment with the main entry point -ida_ida.idainfo.start_ea (variable) +ida_ida.idainfo.start_ea Linear address of program entry point. -ida_ida.idainfo.start_ip (variable) - IP register value at the start of program execution +ida_ida.idainfo.start_ip + IP register value at the start of program execution + -ida_ida.idainfo.start_sp (variable) - SP register value at the start of program execution +ida_ida.idainfo.start_sp + SP register value at the start of program execution + -ida_ida.idainfo.start_ss (variable) +ida_ida.idainfo.start_ss selector of the initial stack segment -ida_ida.idainfo.strlit_break (variable) +ida_ida.idainfo.strlit_break string literal line break symbol -ida_ida.idainfo.strlit_flags (variable) +ida_ida.idainfo.strlit_flags STRING LITERALS. - string literal flags + string literal flags + -ida_ida.idainfo.strlit_pref (variable) +ida_ida.idainfo.strlit_pref prefix for string literal names -ida_ida.idainfo.strlit_sernum (variable) +ida_ida.idainfo.strlit_sernum serial number -ida_ida.idainfo.strlit_zeroes (variable) +ida_ida.idainfo.strlit_zeroes leading zeroes -ida_ida.idainfo.strtype (variable) - current ascii string type see nalt.hpp for string types +ida_ida.idainfo.strtype + current ascii string type see nalt.hpp for string types + -ida_ida.idainfo.tag (variable) +ida_ida.idainfo.tag 'IDA' -ida_ida.idainfo.type_xrefnum (variable) - Number of references to generate in the struct & enum windows 0 - xrefs won't be - generated at all +ida_ida.idainfo.type_xrefnum + Number of references to generate in the struct & enum windows 0 - xrefs won't be generated at all + -ida_ida.idainfo.version (variable) +ida_ida.idainfo.version Version of database. -ida_ida.idainfo.xrefnum (variable) +ida_ida.idainfo.xrefnum CROSS REFERENCES. - Number of references to generate in the disassembly listing 0 - xrefs won't be - generated at all + Number of references to generate in the disassembly listing 0 - xrefs won't be generated at all + -ida_ida.idainfo_is_32bit (function) +ida_ida.idainfo_is_32bit() -ida_ida.idbattr_info_t (class) - Proxy of C++ idbattr_info_t class. +ida_ida.idbattr_info_t -ida_ida.idbattr_info_t.__init__ (method) - __init__(self, name, offset, width, bitmask=0, tag=0, idi_flags=0) -> idbattr_info_t - - @param name: char const * - @param offset: uintptr_t - @param width: size_t - @param bitmask: uint64 - @param tag: uchar - @param idi_flags: uint +ida_ida.idbattr_info_t.__init__(self, name: str, offset: "uintptr_t", width: "size_t", bitmask: "uint64" = 0, tag: "uchar" = 0, idi_flags: "uint" = 0) -ida_ida.idbattr_info_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: idbattr_info_t const & +ida_ida.idbattr_info_t.__lt__(self, r: "idbattr_info_t") -> bool -ida_ida.idbattr_info_t.bitmask (variable) +ida_ida.idbattr_info_t.bitmask mask for bitfields (0-not bitfield) -ida_ida.idbattr_info_t.has_individual_node (method) - has_individual_node(self) -> bool +ida_ida.idbattr_info_t.has_individual_node(self) -> bool -ida_ida.idbattr_info_t.hashname (method) - hashname(self) -> char const * +ida_ida.idbattr_info_t.hashname(self) -> str -ida_ida.idbattr_info_t.individual_node (variable) +ida_ida.idbattr_info_t.individual_node individual node name (nullptr - use default) -ida_ida.idbattr_info_t.is_bitfield (method) - is_bitfield(self) -> bool +ida_ida.idbattr_info_t.is_bitfield(self) -> bool -ida_ida.idbattr_info_t.is_bitmap (method) - is_bitmap(self) -> bool +ida_ida.idbattr_info_t.is_bitmap(self) -> bool -ida_ida.idbattr_info_t.is_boolean (method) - is_boolean(self) -> bool +ida_ida.idbattr_info_t.is_boolean(self) -> bool -ida_ida.idbattr_info_t.is_buf_var (method) - is_buf_var(self) -> bool +ida_ida.idbattr_info_t.is_buf_var(self) -> bool -ida_ida.idbattr_info_t.is_bytearray (method) - is_bytearray(self) -> bool +ida_ida.idbattr_info_t.is_bytearray(self) -> bool -ida_ida.idbattr_info_t.is_cstr (method) - is_cstr(self) -> bool +ida_ida.idbattr_info_t.is_cstr(self) -> bool -ida_ida.idbattr_info_t.is_decimal (method) - is_decimal(self) -> bool +ida_ida.idbattr_info_t.is_decimal(self) -> bool -ida_ida.idbattr_info_t.is_hash (method) - is_hash(self) -> bool +ida_ida.idbattr_info_t.is_hash(self) -> bool -ida_ida.idbattr_info_t.is_hexadecimal (method) - is_hexadecimal(self) -> bool +ida_ida.idbattr_info_t.is_hexadecimal(self) -> bool -ida_ida.idbattr_info_t.is_incremented (method) - is_incremented(self) -> bool +ida_ida.idbattr_info_t.is_incremented(self) -> bool -ida_ida.idbattr_info_t.is_node_altval (method) - is_node_altval(self) -> bool +ida_ida.idbattr_info_t.is_node_altval(self) -> bool -ida_ida.idbattr_info_t.is_node_blob (method) - is_node_blob(self) -> bool +ida_ida.idbattr_info_t.is_node_blob(self) -> bool -ida_ida.idbattr_info_t.is_node_supval (method) - is_node_supval(self) -> bool +ida_ida.idbattr_info_t.is_node_supval(self) -> bool -ida_ida.idbattr_info_t.is_node_valobj (method) - is_node_valobj(self) -> bool +ida_ida.idbattr_info_t.is_node_valobj(self) -> bool -ida_ida.idbattr_info_t.is_node_var (method) - is_node_var(self) -> bool +ida_ida.idbattr_info_t.is_node_var(self) -> bool -ida_ida.idbattr_info_t.is_onoff (method) - is_onoff(self) -> bool +ida_ida.idbattr_info_t.is_onoff(self) -> bool -ida_ida.idbattr_info_t.is_qstring (method) - is_qstring(self) -> bool +ida_ida.idbattr_info_t.is_qstring(self) -> bool -ida_ida.idbattr_info_t.is_readonly_var (method) - is_readonly_var(self) -> bool +ida_ida.idbattr_info_t.is_readonly_var(self) -> bool -ida_ida.idbattr_info_t.is_scalar_var (method) - is_scalar_var(self) -> bool +ida_ida.idbattr_info_t.is_scalar_var(self) -> bool -ida_ida.idbattr_info_t.is_struc_field (method) - is_struc_field(self) -> bool +ida_ida.idbattr_info_t.is_struc_field(self) -> bool -ida_ida.idbattr_info_t.is_val_mapped (method) - is_val_mapped(self) -> bool +ida_ida.idbattr_info_t.is_val_mapped(self) -> bool -ida_ida.idbattr_info_t.maxsize (variable) +ida_ida.idbattr_info_t.maxsize max bytes reserved for storage in netnode -ida_ida.idbattr_info_t.name (variable) +ida_ida.idbattr_info_t.name human-readable name -ida_ida.idbattr_info_t.offset (variable) - field position: offset within a structure (IDI_STRUCFLD) altval or supval index - (IDI_NODEVAL) hashval name (IDI_ALTVAL/IDI_SUPVAL+IDI_HASH) +ida_ida.idbattr_info_t.offset + field position: offset within a structure (IDI_STRUCFLD) altval or supval index (IDI_NODEVAL) hashval name (IDI_ALTVAL/IDI_SUPVAL+IDI_HASH) + -ida_ida.idbattr_info_t.ridx (method) - ridx(self) -> size_t +ida_ida.idbattr_info_t.ridx(self) -> "size_t" -ida_ida.idbattr_info_t.str_false (method) - str_false(self) -> char const * +ida_ida.idbattr_info_t.str_false(self) -> str -ida_ida.idbattr_info_t.str_true (method) - str_true(self) -> char const * +ida_ida.idbattr_info_t.str_true(self) -> str -ida_ida.idbattr_info_t.tag (variable) +ida_ida.idbattr_info_t.tag tag of node value (if IDI_NODEVAL is set) -ida_ida.idbattr_info_t.use_hlpstruc (method) - use_hlpstruc(self) -> bool +ida_ida.idbattr_info_t.use_hlpstruc(self) -> bool -ida_ida.idbattr_info_t.vmap (variable) +ida_ida.idbattr_info_t.vmap array value=>name (terminated by empty element) -ida_ida.idbattr_info_t.width (variable) +ida_ida.idbattr_info_t.width field width in bytes -ida_ida.idbattr_valmap_t (class) - Proxy of C++ idbattr_valmap_t class. +ida_ida.idbattr_valmap_t -ida_ida.idbattr_valmap_t.__init__ (method) - __init__(self) -> idbattr_valmap_t +ida_ida.idbattr_valmap_t.__init__(self) -ida_ida.inf_abi_set_by_user (function) - inf_abi_set_by_user() -> bool +ida_ida.inf_abi_set_by_user() -> bool -ida_ida.inf_allow_non_matched_ops (function) - inf_allow_non_matched_ops() -> bool +ida_ida.inf_allow_non_matched_ops() -> bool -ida_ida.inf_allow_sigmulti (function) - inf_allow_sigmulti() -> bool +ida_ida.inf_allow_sigmulti() -> bool -ida_ida.inf_append_sigcmt (function) - inf_append_sigcmt() -> bool +ida_ida.inf_append_sigcmt() -> bool -ida_ida.inf_big_arg_align (function) - inf_big_arg_align(cc) -> bool - - @param cc: cm_t - - inf_big_arg_align() -> bool +ida_ida.inf_big_arg_align(*args) -> bool -ida_ida.inf_check_manual_ops (function) - inf_check_manual_ops() -> bool +ida_ida.inf_check_manual_ops() -> bool -ida_ida.inf_check_unicode_strlits (function) - inf_check_unicode_strlits() -> bool +ida_ida.inf_check_unicode_strlits() -> bool -ida_ida.inf_coagulate_code (function) - inf_coagulate_code() -> bool +ida_ida.inf_coagulate_code() -> bool -ida_ida.inf_coagulate_data (function) - inf_coagulate_data() -> bool +ida_ida.inf_coagulate_data() -> bool -ida_ida.inf_compress_idb (function) - inf_compress_idb() -> bool +ida_ida.inf_compress_idb() -> bool -ida_ida.inf_create_all_xrefs (function) - inf_create_all_xrefs() -> bool +ida_ida.inf_create_all_xrefs() -> bool -ida_ida.inf_create_func_from_call (function) - inf_create_func_from_call() -> bool +ida_ida.inf_create_func_from_call() -> bool -ida_ida.inf_create_func_from_ptr (function) - inf_create_func_from_ptr() -> bool +ida_ida.inf_create_func_from_ptr() -> bool -ida_ida.inf_create_func_tails (function) - inf_create_func_tails() -> bool +ida_ida.inf_create_func_tails() -> bool -ida_ida.inf_create_jump_tables (function) - inf_create_jump_tables() -> bool +ida_ida.inf_create_jump_tables() -> bool -ida_ida.inf_create_off_on_dref (function) - inf_create_off_on_dref() -> bool +ida_ida.inf_create_off_on_dref() -> bool -ida_ida.inf_create_off_using_fixup (function) - inf_create_off_using_fixup() -> bool +ida_ida.inf_create_off_using_fixup() -> bool -ida_ida.inf_create_strlit_on_xref (function) - inf_create_strlit_on_xref() -> bool +ida_ida.inf_create_strlit_on_xref() -> bool -ida_ida.inf_data_offset (function) - inf_data_offset() -> bool +ida_ida.inf_data_offset() -> bool -ida_ida.inf_dbg_no_store_path (function) - inf_dbg_no_store_path() -> bool +ida_ida.inf_dbg_no_store_path() -> bool -ida_ida.inf_decode_fpp (function) - inf_decode_fpp() -> bool +ida_ida.inf_decode_fpp() -> bool -ida_ida.inf_del_no_xref_insns (function) - inf_del_no_xref_insns() -> bool +ida_ida.inf_del_no_xref_insns() -> bool -ida_ida.inf_final_pass (function) - inf_final_pass() -> bool +ida_ida.inf_final_pass() -> bool -ida_ida.inf_full_sp_ana (function) - inf_full_sp_ana() -> bool +ida_ida.inf_full_sp_ana() -> bool -ida_ida.inf_gen_assume (function) - inf_gen_assume() -> bool +ida_ida.inf_gen_assume() -> bool -ida_ida.inf_gen_lzero (function) - inf_gen_lzero() -> bool +ida_ida.inf_gen_lzero() -> bool -ida_ida.inf_gen_null (function) - inf_gen_null() -> bool +ida_ida.inf_gen_null() -> bool -ida_ida.inf_gen_org (function) - inf_gen_org() -> bool +ida_ida.inf_gen_org() -> bool -ida_ida.inf_gen_tryblks (function) - inf_gen_tryblks() -> bool +ida_ida.inf_gen_tryblks() -> bool -ida_ida.inf_get_abibits (function) - inf_get_abibits() -> uint32 +ida_ida.inf_get_abibits() -> int -ida_ida.inf_get_af (function) - inf_get_af() -> uint32 +ida_ida.inf_get_af() -> int -ida_ida.inf_get_af2 (function) - inf_get_af2() -> uint32 +ida_ida.inf_get_af2() -> int -ida_ida.inf_get_af2_low (function) - inf_get_af2_low() -> ushort +ida_ida.inf_get_af2_low() -> "ushort" Get/set low 16bit half of inf.af2. -ida_ida.inf_get_af_high (function) - inf_get_af_high() -> ushort +ida_ida.inf_get_af_high() -> "ushort" -ida_ida.inf_get_af_low (function) - inf_get_af_low() -> ushort +ida_ida.inf_get_af_low() -> "ushort" Get/set low/high 16bit halves of inf.af. -ida_ida.inf_get_app_bitness (function) - inf_get_app_bitness() -> uint +ida_ida.inf_get_app_bitness() -> "uint" -ida_ida.inf_get_appcall_options (function) - inf_get_appcall_options() -> uint32 +ida_ida.inf_get_appcall_options() -> int -ida_ida.inf_get_apptype (function) - inf_get_apptype() -> ushort +ida_ida.inf_get_apptype() -> "ushort" -ida_ida.inf_get_asmtype (function) - inf_get_asmtype() -> uchar +ida_ida.inf_get_asmtype() -> "uchar" -ida_ida.inf_get_baseaddr (function) - inf_get_baseaddr() -> uval_t +ida_ida.inf_get_baseaddr() -> int -ida_ida.inf_get_bin_prefix_size (function) - inf_get_bin_prefix_size() -> short +ida_ida.inf_get_bin_prefix_size() -> "short" -ida_ida.inf_get_cc (function) - inf_get_cc(out) -> bool - - @param out: compiler_info_t * +ida_ida.inf_get_cc(out: "compiler_info_t") -> bool -ida_ida.inf_get_cc_cm (function) - inf_get_cc_cm() -> cm_t +ida_ida.inf_get_cc_cm() -> "cm_t" -ida_ida.inf_get_cc_defalign (function) - inf_get_cc_defalign() -> uchar +ida_ida.inf_get_cc_defalign() -> "uchar" -ida_ida.inf_get_cc_id (function) - inf_get_cc_id() -> comp_t +ida_ida.inf_get_cc_id() -> "comp_t" -ida_ida.inf_get_cc_size_b (function) - inf_get_cc_size_b() -> uchar +ida_ida.inf_get_cc_size_b() -> "uchar" -ida_ida.inf_get_cc_size_e (function) - inf_get_cc_size_e() -> uchar +ida_ida.inf_get_cc_size_e() -> "uchar" -ida_ida.inf_get_cc_size_i (function) - inf_get_cc_size_i() -> uchar +ida_ida.inf_get_cc_size_i() -> "uchar" -ida_ida.inf_get_cc_size_l (function) - inf_get_cc_size_l() -> uchar +ida_ida.inf_get_cc_size_l() -> "uchar" -ida_ida.inf_get_cc_size_ldbl (function) - inf_get_cc_size_ldbl() -> uchar +ida_ida.inf_get_cc_size_ldbl() -> "uchar" -ida_ida.inf_get_cc_size_ll (function) - inf_get_cc_size_ll() -> uchar +ida_ida.inf_get_cc_size_ll() -> "uchar" -ida_ida.inf_get_cc_size_s (function) - inf_get_cc_size_s() -> uchar +ida_ida.inf_get_cc_size_s() -> "uchar" -ida_ida.inf_get_cmt_indent (function) - inf_get_cmt_indent() -> uchar +ida_ida.inf_get_cmt_indent() -> "uchar" -ida_ida.inf_get_cmtflg (function) - inf_get_cmtflg() -> uchar +ida_ida.inf_get_cmtflg() -> "uchar" -ida_ida.inf_get_database_change_count (function) - inf_get_database_change_count() -> uint32 +ida_ida.inf_get_database_change_count() -> int -ida_ida.inf_get_datatypes (function) - inf_get_datatypes() -> uval_t +ida_ida.inf_get_datatypes() -> int -ida_ida.inf_get_demname_form (function) - inf_get_demname_form() -> uchar +ida_ida.inf_get_demname_form() -> "uchar" Get DEMNAM_MASK bits of #demnames. -ida_ida.inf_get_demnames (function) - inf_get_demnames() -> uchar +ida_ida.inf_get_demnames() -> "uchar" -ida_ida.inf_get_filetype (function) - inf_get_filetype() -> filetype_t +ida_ida.inf_get_filetype() -> "filetype_t" -ida_ida.inf_get_genflags (function) - inf_get_genflags() -> ushort +ida_ida.inf_get_genflags() -> "ushort" -ida_ida.inf_get_highoff (function) - inf_get_highoff() -> ea_t +ida_ida.inf_get_highoff() -> ida_idaapi.ea_t -ida_ida.inf_get_indent (function) - inf_get_indent() -> uchar +ida_ida.inf_get_indent() -> "uchar" -ida_ida.inf_get_lenxref (function) - inf_get_lenxref() -> ushort +ida_ida.inf_get_lenxref() -> "ushort" -ida_ida.inf_get_lflags (function) - inf_get_lflags() -> uint32 +ida_ida.inf_get_lflags() -> int -ida_ida.inf_get_limiter (function) - inf_get_limiter() -> uchar +ida_ida.inf_get_limiter() -> "uchar" -ida_ida.inf_get_listnames (function) - inf_get_listnames() -> uchar +ida_ida.inf_get_listnames() -> "uchar" -ida_ida.inf_get_long_demnames (function) - inf_get_long_demnames() -> uint32 +ida_ida.inf_get_long_demnames() -> int -ida_ida.inf_get_lowoff (function) - inf_get_lowoff() -> ea_t +ida_ida.inf_get_lowoff() -> ida_idaapi.ea_t -ida_ida.inf_get_main (function) - inf_get_main() -> ea_t +ida_ida.inf_get_main() -> ida_idaapi.ea_t -ida_ida.inf_get_margin (function) - inf_get_margin() -> ushort +ida_ida.inf_get_margin() -> "ushort" -ida_ida.inf_get_max_autoname_len (function) - inf_get_max_autoname_len() -> ushort +ida_ida.inf_get_max_autoname_len() -> "ushort" -ida_ida.inf_get_max_ea (function) - inf_get_max_ea() -> ea_t +ida_ida.inf_get_max_ea() -> ida_idaapi.ea_t -ida_ida.inf_get_maxref (function) - inf_get_maxref() -> uval_t +ida_ida.inf_get_maxref() -> int -ida_ida.inf_get_min_ea (function) - inf_get_min_ea() -> ea_t +ida_ida.inf_get_min_ea() -> ida_idaapi.ea_t -ida_ida.inf_get_nametype (function) - inf_get_nametype() -> char +ida_ida.inf_get_nametype() -> "char" -ida_ida.inf_get_netdelta (function) - inf_get_netdelta() -> sval_t +ida_ida.inf_get_netdelta() -> int -ida_ida.inf_get_omax_ea (function) - inf_get_omax_ea() -> ea_t +ida_ida.inf_get_omax_ea() -> ida_idaapi.ea_t -ida_ida.inf_get_omin_ea (function) - inf_get_omin_ea() -> ea_t +ida_ida.inf_get_omin_ea() -> ida_idaapi.ea_t -ida_ida.inf_get_ostype (function) - inf_get_ostype() -> ushort +ida_ida.inf_get_ostype() -> "ushort" -ida_ida.inf_get_outflags (function) - inf_get_outflags() -> uint32 +ida_ida.inf_get_outflags() -> int -ida_ida.inf_get_pack_mode (function) - inf_get_pack_mode() -> int +ida_ida.inf_get_pack_mode() -> int -ida_ida.inf_get_prefflag (function) - inf_get_prefflag() -> uchar +ida_ida.inf_get_prefflag() -> "uchar" -ida_ida.inf_get_privrange (function) - inf_get_privrange(out) -> bool +ida_ida.inf_get_privrange(*args) -> "range_t" + This function has the following signatures: - @param out: range_t * + 0. inf_get_privrange(out: range_t *) -> bool + 1. inf_get_privrange() -> range_t - inf_get_privrange() -> range_t + # 0: inf_get_privrange(out: range_t *) -> bool + + + # 1: inf_get_privrange() -> range_t -ida_ida.inf_get_privrange_end_ea (function) - inf_get_privrange_end_ea() -> ea_t +ida_ida.inf_get_privrange_end_ea() -> ida_idaapi.ea_t -ida_ida.inf_get_privrange_start_ea (function) - inf_get_privrange_start_ea() -> ea_t +ida_ida.inf_get_privrange_start_ea() -> ida_idaapi.ea_t -ida_ida.inf_get_procname (function) - inf_get_procname() -> str +ida_ida.inf_get_procname() -> str -ida_ida.inf_get_refcmtnum (function) - inf_get_refcmtnum() -> uchar +ida_ida.inf_get_refcmtnum() -> "uchar" -ida_ida.inf_get_short_demnames (function) - inf_get_short_demnames() -> uint32 +ida_ida.inf_get_short_demnames() -> int -ida_ida.inf_get_specsegs (function) - inf_get_specsegs() -> uchar +ida_ida.inf_get_specsegs() -> "uchar" -ida_ida.inf_get_start_cs (function) - inf_get_start_cs() -> sel_t +ida_ida.inf_get_start_cs() -> "sel_t" -ida_ida.inf_get_start_ea (function) - inf_get_start_ea() -> ea_t +ida_ida.inf_get_start_ea() -> ida_idaapi.ea_t -ida_ida.inf_get_start_ip (function) - inf_get_start_ip() -> ea_t +ida_ida.inf_get_start_ip() -> ida_idaapi.ea_t -ida_ida.inf_get_start_sp (function) - inf_get_start_sp() -> ea_t +ida_ida.inf_get_start_sp() -> ida_idaapi.ea_t -ida_ida.inf_get_start_ss (function) - inf_get_start_ss() -> sel_t +ida_ida.inf_get_start_ss() -> "sel_t" -ida_ida.inf_get_strlit_break (function) - inf_get_strlit_break() -> uchar +ida_ida.inf_get_strlit_break() -> "uchar" -ida_ida.inf_get_strlit_flags (function) - inf_get_strlit_flags() -> uchar +ida_ida.inf_get_strlit_flags() -> "uchar" -ida_ida.inf_get_strlit_pref (function) - inf_get_strlit_pref() -> str +ida_ida.inf_get_strlit_pref() -> str -ida_ida.inf_get_strlit_sernum (function) - inf_get_strlit_sernum() -> uval_t +ida_ida.inf_get_strlit_sernum() -> int -ida_ida.inf_get_strlit_zeroes (function) - inf_get_strlit_zeroes() -> char +ida_ida.inf_get_strlit_zeroes() -> "char" -ida_ida.inf_get_strtype (function) - inf_get_strtype() -> int32 +ida_ida.inf_get_strtype() -> int -ida_ida.inf_get_type_xrefnum (function) - inf_get_type_xrefnum() -> uchar +ida_ida.inf_get_type_xrefnum() -> "uchar" -ida_ida.inf_get_version (function) - inf_get_version() -> ushort +ida_ida.inf_get_version() -> "ushort" -ida_ida.inf_get_xrefflag (function) - inf_get_xrefflag() -> uchar +ida_ida.inf_get_xrefflag() -> "uchar" -ida_ida.inf_get_xrefnum (function) - inf_get_xrefnum() -> uchar +ida_ida.inf_get_xrefnum() -> "uchar" -ida_ida.inf_guess_func_type (function) - inf_guess_func_type() -> bool +ida_ida.inf_guess_func_type() -> bool -ida_ida.inf_handle_eh (function) - inf_handle_eh() -> bool +ida_ida.inf_handle_eh() -> bool -ida_ida.inf_handle_rtti (function) - inf_handle_rtti() -> bool +ida_ida.inf_handle_rtti() -> bool -ida_ida.inf_hide_comments (function) - inf_hide_comments() -> bool +ida_ida.inf_hide_comments() -> bool -ida_ida.inf_hide_libfuncs (function) - inf_hide_libfuncs() -> bool +ida_ida.inf_hide_libfuncs() -> bool -ida_ida.inf_huge_arg_align (function) - inf_huge_arg_align(cc) -> bool - - @param cc: cm_t - - inf_huge_arg_align() -> bool +ida_ida.inf_huge_arg_align(*args) -> bool -ida_ida.inf_inc_database_change_count (function) - inf_inc_database_change_count(cnt=1) - - @param cnt: int +ida_ida.inf_inc_database_change_count(cnt: int = 1) -> None -ida_ida.inf_is_16bit (function) - inf_is_16bit() -> bool +ida_ida.inf_is_16bit() -> bool -ida_ida.inf_is_32bit_exactly (function) - inf_is_32bit_exactly() -> bool +ida_ida.inf_is_32bit_exactly() -> bool -ida_ida.inf_is_32bit_or_higher (function) - inf_is_32bit_or_higher() -> bool +ida_ida.inf_is_32bit_or_higher() -> bool -ida_ida.inf_is_64bit (function) - inf_is_64bit() -> bool +ida_ida.inf_is_64bit() -> bool -ida_ida.inf_is_auto_enabled (function) - inf_is_auto_enabled() -> bool +ida_ida.inf_is_auto_enabled() -> bool -ida_ida.inf_is_be (function) - inf_is_be() -> bool +ida_ida.inf_is_be() -> bool -ida_ida.inf_is_dll (function) - inf_is_dll() -> bool +ida_ida.inf_is_dll() -> bool -ida_ida.inf_is_flat_off32 (function) - inf_is_flat_off32() -> bool +ida_ida.inf_is_flat_off32() -> bool -ida_ida.inf_is_graph_view (function) - inf_is_graph_view() -> bool +ida_ida.inf_is_graph_view() -> bool -ida_ida.inf_is_hard_float (function) - inf_is_hard_float() -> bool +ida_ida.inf_is_hard_float() -> bool -ida_ida.inf_is_kernel_mode (function) - inf_is_kernel_mode() -> bool +ida_ida.inf_is_ilp32() -> bool -ida_ida.inf_is_limiter_empty (function) - inf_is_limiter_empty() -> bool +ida_ida.inf_is_kernel_mode() -> bool -ida_ida.inf_is_limiter_thick (function) - inf_is_limiter_thick() -> bool +ida_ida.inf_is_limiter_empty() -> bool -ida_ida.inf_is_limiter_thin (function) - inf_is_limiter_thin() -> bool +ida_ida.inf_is_limiter_thick() -> bool -ida_ida.inf_is_mem_aligned4 (function) - inf_is_mem_aligned4() -> bool +ida_ida.inf_is_limiter_thin() -> bool -ida_ida.inf_is_snapshot (function) - inf_is_snapshot() -> bool +ida_ida.inf_is_mem_aligned4() -> bool -ida_ida.inf_is_wide_high_byte_first (function) - inf_is_wide_high_byte_first() -> bool +ida_ida.inf_is_snapshot() -> bool -ida_ida.inf_like_binary (function) - inf_like_binary() -> bool +ida_ida.inf_is_wide_high_byte_first() -> bool -ida_ida.inf_line_pref_with_seg (function) - inf_line_pref_with_seg() -> bool +ida_ida.inf_like_binary() -> bool -ida_ida.inf_loading_idc (function) - inf_loading_idc() -> bool +ida_ida.inf_line_pref_with_seg() -> bool -ida_ida.inf_macros_enabled (function) - inf_macros_enabled() -> bool +ida_ida.inf_loading_idc() -> bool -ida_ida.inf_map_stkargs (function) - inf_map_stkargs() -> bool +ida_ida.inf_macros_enabled() -> bool -ida_ida.inf_mark_code (function) - inf_mark_code() -> bool +ida_ida.inf_map_stkargs() -> bool -ida_ida.inf_merge_strlits (function) - inf_merge_strlits() -> bool +ida_ida.inf_mark_code() -> bool -ida_ida.inf_no_store_user_info (function) - inf_no_store_user_info() -> bool +ida_ida.inf_merge_strlits() -> bool -ida_ida.inf_noflow_to_data (function) - inf_noflow_to_data() -> bool +ida_ida.inf_no_store_user_info() -> bool -ida_ida.inf_noret_ana (function) - inf_noret_ana() -> bool +ida_ida.inf_noflow_to_data() -> bool -ida_ida.inf_op_offset (function) - inf_op_offset() -> bool +ida_ida.inf_noret_ana() -> bool -ida_ida.inf_pack_idb (function) - inf_pack_idb() -> bool +ida_ida.inf_op_offset() -> bool -ida_ida.inf_pack_stkargs (function) - inf_pack_stkargs(cc) -> bool - - @param cc: cm_t - - inf_pack_stkargs() -> bool +ida_ida.inf_pack_idb() -> bool -ida_ida.inf_postinc_strlit_sernum (function) - inf_postinc_strlit_sernum(cnt=1) -> uval_t - - @param cnt: uval_t +ida_ida.inf_pack_stkargs(*args) -> bool -ida_ida.inf_prefix_show_funcoff (function) - inf_prefix_show_funcoff() -> bool +ida_ida.inf_postinc_strlit_sernum(cnt: int = 1) -> int -ida_ida.inf_prefix_show_segaddr (function) - inf_prefix_show_segaddr() -> bool +ida_ida.inf_prefix_show_funcoff() -> bool -ida_ida.inf_prefix_show_stack (function) - inf_prefix_show_stack() -> bool +ida_ida.inf_prefix_show_segaddr() -> bool -ida_ida.inf_prefix_truncate_opcode_bytes (function) - inf_prefix_truncate_opcode_bytes() -> bool +ida_ida.inf_prefix_show_stack() -> bool -ida_ida.inf_propagate_regargs (function) - inf_propagate_regargs() -> bool +ida_ida.inf_prefix_truncate_opcode_bytes() -> bool -ida_ida.inf_propagate_stkargs (function) - inf_propagate_stkargs() -> bool +ida_ida.inf_propagate_regargs() -> bool -ida_ida.inf_readonly_idb (function) - inf_readonly_idb() -> bool +ida_ida.inf_propagate_stkargs() -> bool -ida_ida.inf_rename_jumpfunc (function) - inf_rename_jumpfunc() -> bool +ida_ida.inf_readonly_idb() -> bool -ida_ida.inf_rename_nullsub (function) - inf_rename_nullsub() -> bool +ida_ida.inf_rename_jumpfunc() -> bool -ida_ida.inf_set_32bit (function) - inf_set_32bit(_v=True) -> bool - - @param _v: bool +ida_ida.inf_rename_nullsub() -> bool -ida_ida.inf_set_64bit (function) - inf_set_64bit(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_32bit(_v: bool = True) -> bool -ida_ida.inf_set_abi_set_by_user (function) - inf_set_abi_set_by_user(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_64bit(_v: bool = True) -> bool -ida_ida.inf_set_abibits (function) - inf_set_abibits(_v) -> bool - - @param _v: uint32 +ida_ida.inf_set_abi_set_by_user(_v: bool = True) -> bool -ida_ida.inf_set_af (function) - inf_set_af(_v) -> bool - - @param _v: uint32 +ida_ida.inf_set_abibits(_v: int) -> bool -ida_ida.inf_set_af2 (function) - inf_set_af2(_v) -> bool - - @param _v: uint32 +ida_ida.inf_set_af(_v: int) -> bool -ida_ida.inf_set_af2_low (function) - inf_set_af2_low(saf) - - @param saf: ushort +ida_ida.inf_set_af2(_v: int) -> bool -ida_ida.inf_set_af_high (function) - inf_set_af_high(saf2) - - @param saf2: ushort +ida_ida.inf_set_af2_low(saf: "ushort") -> None -ida_ida.inf_set_af_low (function) - inf_set_af_low(saf) - - @param saf: ushort +ida_ida.inf_set_af_high(saf2: "ushort") -> None -ida_ida.inf_set_allow_non_matched_ops (function) - inf_set_allow_non_matched_ops(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_af_low(saf: "ushort") -> None -ida_ida.inf_set_allow_sigmulti (function) - inf_set_allow_sigmulti(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_allow_non_matched_ops(_v: bool = True) -> bool -ida_ida.inf_set_app_bitness (function) - inf_set_app_bitness(bitness) - - @param bitness: uint +ida_ida.inf_set_allow_sigmulti(_v: bool = True) -> bool -ida_ida.inf_set_appcall_options (function) - inf_set_appcall_options(_v) -> bool - - @param _v: uint32 +ida_ida.inf_set_app_bitness(bitness: "uint") -> None -ida_ida.inf_set_append_sigcmt (function) - inf_set_append_sigcmt(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_appcall_options(_v: int) -> bool -ida_ida.inf_set_apptype (function) - inf_set_apptype(_v) -> bool - - @param _v: ushort +ida_ida.inf_set_append_sigcmt(_v: bool = True) -> bool -ida_ida.inf_set_asmtype (function) - inf_set_asmtype(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_apptype(_v: "ushort") -> bool -ida_ida.inf_set_auto_enabled (function) - inf_set_auto_enabled(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_asmtype(_v: "uchar") -> bool -ida_ida.inf_set_baseaddr (function) - inf_set_baseaddr(_v) -> bool - - @param _v: uval_t +ida_ida.inf_set_auto_enabled(_v: bool = True) -> bool -ida_ida.inf_set_be (function) - inf_set_be(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_baseaddr(_v: int) -> bool -ida_ida.inf_set_big_arg_align (function) - inf_set_big_arg_align(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_be(_v: bool = True) -> bool -ida_ida.inf_set_bin_prefix_size (function) - inf_set_bin_prefix_size(_v) -> bool - - @param _v: short +ida_ida.inf_set_big_arg_align(_v: bool = True) -> bool -ida_ida.inf_set_cc (function) - inf_set_cc(_v) -> bool - - @param _v: compiler_info_t const & +ida_ida.inf_set_bin_prefix_size(_v: "short") -> bool -ida_ida.inf_set_cc_cm (function) - inf_set_cc_cm(_v) -> bool - - @param _v: cm_t +ida_ida.inf_set_cc(_v: "compiler_info_t") -> bool -ida_ida.inf_set_cc_defalign (function) - inf_set_cc_defalign(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_cc_cm(_v: "cm_t") -> bool -ida_ida.inf_set_cc_id (function) - inf_set_cc_id(_v) -> bool - - @param _v: comp_t +ida_ida.inf_set_cc_defalign(_v: "uchar") -> bool -ida_ida.inf_set_cc_size_b (function) - inf_set_cc_size_b(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_cc_id(_v: "comp_t") -> bool -ida_ida.inf_set_cc_size_e (function) - inf_set_cc_size_e(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_cc_size_b(_v: "uchar") -> bool -ida_ida.inf_set_cc_size_i (function) - inf_set_cc_size_i(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_cc_size_e(_v: "uchar") -> bool -ida_ida.inf_set_cc_size_l (function) - inf_set_cc_size_l(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_cc_size_i(_v: "uchar") -> bool -ida_ida.inf_set_cc_size_ldbl (function) - inf_set_cc_size_ldbl(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_cc_size_l(_v: "uchar") -> bool -ida_ida.inf_set_cc_size_ll (function) - inf_set_cc_size_ll(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_cc_size_ldbl(_v: "uchar") -> bool -ida_ida.inf_set_cc_size_s (function) - inf_set_cc_size_s(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_cc_size_ll(_v: "uchar") -> bool -ida_ida.inf_set_check_manual_ops (function) - inf_set_check_manual_ops(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_cc_size_s(_v: "uchar") -> bool -ida_ida.inf_set_check_unicode_strlits (function) - inf_set_check_unicode_strlits(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_check_manual_ops(_v: bool = True) -> bool -ida_ida.inf_set_cmt_indent (function) - inf_set_cmt_indent(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_check_unicode_strlits(_v: bool = True) -> bool -ida_ida.inf_set_cmtflg (function) - inf_set_cmtflg(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_cmt_indent(_v: "uchar") -> bool -ida_ida.inf_set_coagulate_code (function) - inf_set_coagulate_code(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_cmtflg(_v: "uchar") -> bool -ida_ida.inf_set_coagulate_data (function) - inf_set_coagulate_data(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_coagulate_code(_v: bool = True) -> bool -ida_ida.inf_set_compress_idb (function) - inf_set_compress_idb(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_coagulate_data(_v: bool = True) -> bool -ida_ida.inf_set_create_all_xrefs (function) - inf_set_create_all_xrefs(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_compress_idb(_v: bool = True) -> bool -ida_ida.inf_set_create_func_from_call (function) - inf_set_create_func_from_call(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_create_all_xrefs(_v: bool = True) -> bool -ida_ida.inf_set_create_func_from_ptr (function) - inf_set_create_func_from_ptr(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_create_func_from_call(_v: bool = True) -> bool -ida_ida.inf_set_create_func_tails (function) - inf_set_create_func_tails(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_create_func_from_ptr(_v: bool = True) -> bool -ida_ida.inf_set_create_jump_tables (function) - inf_set_create_jump_tables(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_create_func_tails(_v: bool = True) -> bool -ida_ida.inf_set_create_off_on_dref (function) - inf_set_create_off_on_dref(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_create_jump_tables(_v: bool = True) -> bool -ida_ida.inf_set_create_off_using_fixup (function) - inf_set_create_off_using_fixup(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_create_off_on_dref(_v: bool = True) -> bool -ida_ida.inf_set_create_strlit_on_xref (function) - inf_set_create_strlit_on_xref(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_create_off_using_fixup(_v: bool = True) -> bool -ida_ida.inf_set_data_offset (function) - inf_set_data_offset(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_create_strlit_on_xref(_v: bool = True) -> bool -ida_ida.inf_set_database_change_count (function) - inf_set_database_change_count(_v) -> bool - - @param _v: uint32 +ida_ida.inf_set_data_offset(_v: bool = True) -> bool -ida_ida.inf_set_datatypes (function) - inf_set_datatypes(_v) -> bool - - @param _v: uval_t +ida_ida.inf_set_database_change_count(_v: int) -> bool -ida_ida.inf_set_dbg_no_store_path (function) - inf_set_dbg_no_store_path(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_datatypes(_v: int) -> bool -ida_ida.inf_set_decode_fpp (function) - inf_set_decode_fpp(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_dbg_no_store_path(_v: bool = True) -> bool -ida_ida.inf_set_del_no_xref_insns (function) - inf_set_del_no_xref_insns(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_decode_fpp(_v: bool = True) -> bool -ida_ida.inf_set_demnames (function) - inf_set_demnames(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_del_no_xref_insns(_v: bool = True) -> bool -ida_ida.inf_set_dll (function) - inf_set_dll(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_demnames(_v: "uchar") -> bool -ida_ida.inf_set_filetype (function) - inf_set_filetype(_v) -> bool - - @param _v: enum filetype_t +ida_ida.inf_set_dll(_v: bool = True) -> bool -ida_ida.inf_set_final_pass (function) - inf_set_final_pass(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_filetype(_v: "filetype_t") -> bool -ida_ida.inf_set_flat_off32 (function) - inf_set_flat_off32(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_final_pass(_v: bool = True) -> bool -ida_ida.inf_set_full_sp_ana (function) - inf_set_full_sp_ana(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_flat_off32(_v: bool = True) -> bool -ida_ida.inf_set_gen_assume (function) - inf_set_gen_assume(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_full_sp_ana(_v: bool = True) -> bool -ida_ida.inf_set_gen_lzero (function) - inf_set_gen_lzero(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_gen_assume(_v: bool = True) -> bool -ida_ida.inf_set_gen_null (function) - inf_set_gen_null(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_gen_lzero(_v: bool = True) -> bool -ida_ida.inf_set_gen_org (function) - inf_set_gen_org(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_gen_null(_v: bool = True) -> bool -ida_ida.inf_set_gen_tryblks (function) - inf_set_gen_tryblks(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_gen_org(_v: bool = True) -> bool -ida_ida.inf_set_genflags (function) - inf_set_genflags(_v) -> bool - - @param _v: ushort +ida_ida.inf_set_gen_tryblks(_v: bool = True) -> bool -ida_ida.inf_set_graph_view (function) - inf_set_graph_view(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_genflags(_v: "ushort") -> bool -ida_ida.inf_set_guess_func_type (function) - inf_set_guess_func_type(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_graph_view(_v: bool = True) -> bool -ida_ida.inf_set_handle_eh (function) - inf_set_handle_eh(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_guess_func_type(_v: bool = True) -> bool -ida_ida.inf_set_handle_rtti (function) - inf_set_handle_rtti(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_handle_eh(_v: bool = True) -> bool -ida_ida.inf_set_hard_float (function) - inf_set_hard_float(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_handle_rtti(_v: bool = True) -> bool -ida_ida.inf_set_hide_comments (function) - inf_set_hide_comments(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_hard_float(_v: bool = True) -> bool -ida_ida.inf_set_hide_libfuncs (function) - inf_set_hide_libfuncs(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_hide_comments(_v: bool = True) -> bool -ida_ida.inf_set_highoff (function) - inf_set_highoff(_v) -> bool - - @param _v: ea_t +ida_ida.inf_set_hide_libfuncs(_v: bool = True) -> bool -ida_ida.inf_set_huge_arg_align (function) - inf_set_huge_arg_align(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_highoff(_v: ida_idaapi.ea_t) -> bool -ida_ida.inf_set_indent (function) - inf_set_indent(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_huge_arg_align(_v: bool = True) -> bool -ida_ida.inf_set_kernel_mode (function) - inf_set_kernel_mode(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_ilp32(_v: bool = True) -> bool -ida_ida.inf_set_lenxref (function) - inf_set_lenxref(_v) -> bool - - @param _v: ushort +ida_ida.inf_set_indent(_v: "uchar") -> bool -ida_ida.inf_set_lflags (function) - inf_set_lflags(_v) -> bool - - @param _v: uint32 +ida_ida.inf_set_kernel_mode(_v: bool = True) -> bool -ida_ida.inf_set_limiter (function) - inf_set_limiter(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_lenxref(_v: "ushort") -> bool -ida_ida.inf_set_limiter_empty (function) - inf_set_limiter_empty(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_lflags(_v: int) -> bool -ida_ida.inf_set_limiter_thick (function) - inf_set_limiter_thick(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_limiter(_v: "uchar") -> bool -ida_ida.inf_set_limiter_thin (function) - inf_set_limiter_thin(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_limiter_empty(_v: bool = True) -> bool -ida_ida.inf_set_line_pref_with_seg (function) - inf_set_line_pref_with_seg(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_limiter_thick(_v: bool = True) -> bool -ida_ida.inf_set_listnames (function) - inf_set_listnames(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_limiter_thin(_v: bool = True) -> bool -ida_ida.inf_set_loading_idc (function) - inf_set_loading_idc(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_line_pref_with_seg(_v: bool = True) -> bool -ida_ida.inf_set_long_demnames (function) - inf_set_long_demnames(_v) -> bool - - @param _v: uint32 +ida_ida.inf_set_listnames(_v: "uchar") -> bool -ida_ida.inf_set_lowoff (function) - inf_set_lowoff(_v) -> bool - - @param _v: ea_t +ida_ida.inf_set_loading_idc(_v: bool = True) -> bool -ida_ida.inf_set_macros_enabled (function) - inf_set_macros_enabled(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_long_demnames(_v: int) -> bool -ida_ida.inf_set_main (function) - inf_set_main(_v) -> bool - - @param _v: ea_t +ida_ida.inf_set_lowoff(_v: ida_idaapi.ea_t) -> bool -ida_ida.inf_set_map_stkargs (function) - inf_set_map_stkargs(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_macros_enabled(_v: bool = True) -> bool -ida_ida.inf_set_margin (function) - inf_set_margin(_v) -> bool - - @param _v: ushort +ida_ida.inf_set_main(_v: ida_idaapi.ea_t) -> bool -ida_ida.inf_set_mark_code (function) - inf_set_mark_code(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_map_stkargs(_v: bool = True) -> bool -ida_ida.inf_set_max_autoname_len (function) - inf_set_max_autoname_len(_v) -> bool - - @param _v: ushort +ida_ida.inf_set_margin(_v: "ushort") -> bool -ida_ida.inf_set_max_ea (function) - inf_set_max_ea(_v) -> bool - - @param _v: ea_t +ida_ida.inf_set_mark_code(_v: bool = True) -> bool -ida_ida.inf_set_maxref (function) - inf_set_maxref(_v) -> bool - - @param _v: uval_t +ida_ida.inf_set_max_autoname_len(_v: "ushort") -> bool -ida_ida.inf_set_mem_aligned4 (function) - inf_set_mem_aligned4(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_max_ea(_v: ida_idaapi.ea_t) -> bool -ida_ida.inf_set_merge_strlits (function) - inf_set_merge_strlits(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_maxref(_v: int) -> bool -ida_ida.inf_set_min_ea (function) - inf_set_min_ea(_v) -> bool - - @param _v: ea_t +ida_ida.inf_set_mem_aligned4(_v: bool = True) -> bool -ida_ida.inf_set_nametype (function) - inf_set_nametype(_v) -> bool - - @param _v: char +ida_ida.inf_set_merge_strlits(_v: bool = True) -> bool -ida_ida.inf_set_netdelta (function) - inf_set_netdelta(_v) -> bool - - @param _v: sval_t +ida_ida.inf_set_min_ea(_v: ida_idaapi.ea_t) -> bool -ida_ida.inf_set_no_store_user_info (function) - inf_set_no_store_user_info(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_nametype(_v: "char") -> bool -ida_ida.inf_set_noflow_to_data (function) - inf_set_noflow_to_data(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_netdelta(_v: int) -> bool -ida_ida.inf_set_noret_ana (function) - inf_set_noret_ana(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_no_store_user_info(_v: bool = True) -> bool -ida_ida.inf_set_omax_ea (function) - inf_set_omax_ea(_v) -> bool - - @param _v: ea_t +ida_ida.inf_set_noflow_to_data(_v: bool = True) -> bool -ida_ida.inf_set_omin_ea (function) - inf_set_omin_ea(_v) -> bool - - @param _v: ea_t +ida_ida.inf_set_noret_ana(_v: bool = True) -> bool -ida_ida.inf_set_op_offset (function) - inf_set_op_offset(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_omax_ea(_v: ida_idaapi.ea_t) -> bool -ida_ida.inf_set_ostype (function) - inf_set_ostype(_v) -> bool - - @param _v: ushort +ida_ida.inf_set_omin_ea(_v: ida_idaapi.ea_t) -> bool -ida_ida.inf_set_outflags (function) - inf_set_outflags(_v) -> bool - - @param _v: uint32 +ida_ida.inf_set_op_offset(_v: bool = True) -> bool -ida_ida.inf_set_pack_idb (function) - inf_set_pack_idb(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_ostype(_v: "ushort") -> bool -ida_ida.inf_set_pack_mode (function) - inf_set_pack_mode(pack_mode) -> int - - @param pack_mode: int +ida_ida.inf_set_outflags(_v: int) -> bool -ida_ida.inf_set_pack_stkargs (function) - inf_set_pack_stkargs(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_pack_idb(_v: bool = True) -> bool -ida_ida.inf_set_prefflag (function) - inf_set_prefflag(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_pack_mode(pack_mode: int) -> int -ida_ida.inf_set_prefix_show_funcoff (function) - inf_set_prefix_show_funcoff(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_pack_stkargs(_v: bool = True) -> bool -ida_ida.inf_set_prefix_show_segaddr (function) - inf_set_prefix_show_segaddr(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_prefflag(_v: "uchar") -> bool -ida_ida.inf_set_prefix_show_stack (function) - inf_set_prefix_show_stack(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_prefix_show_funcoff(_v: bool = True) -> bool -ida_ida.inf_set_prefix_truncate_opcode_bytes (function) - inf_set_prefix_truncate_opcode_bytes(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_prefix_show_segaddr(_v: bool = True) -> bool -ida_ida.inf_set_privrange (function) - inf_set_privrange(_v) -> bool - - @param _v: range_t const & +ida_ida.inf_set_prefix_show_stack(_v: bool = True) -> bool -ida_ida.inf_set_privrange_end_ea (function) - inf_set_privrange_end_ea(_v) -> bool - - @param _v: ea_t +ida_ida.inf_set_prefix_truncate_opcode_bytes(_v: bool = True) -> bool -ida_ida.inf_set_privrange_start_ea (function) - inf_set_privrange_start_ea(_v) -> bool - - @param _v: ea_t +ida_ida.inf_set_privrange(_v: "range_t") -> bool -ida_ida.inf_set_procname (function) - inf_set_procname(_v, len=size_t(-1)) -> bool - - @param _v: char const * - @param len: size_t +ida_ida.inf_set_privrange_end_ea(_v: ida_idaapi.ea_t) -> bool -ida_ida.inf_set_propagate_regargs (function) - inf_set_propagate_regargs(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_privrange_start_ea(_v: ida_idaapi.ea_t) -> bool -ida_ida.inf_set_propagate_stkargs (function) - inf_set_propagate_stkargs(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_procname(*args) -> bool -ida_ida.inf_set_readonly_idb (function) - inf_set_readonly_idb(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_propagate_regargs(_v: bool = True) -> bool -ida_ida.inf_set_refcmtnum (function) - inf_set_refcmtnum(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_propagate_stkargs(_v: bool = True) -> bool -ida_ida.inf_set_rename_jumpfunc (function) - inf_set_rename_jumpfunc(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_readonly_idb(_v: bool = True) -> bool -ida_ida.inf_set_rename_nullsub (function) - inf_set_rename_nullsub(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_refcmtnum(_v: "uchar") -> bool -ida_ida.inf_set_short_demnames (function) - inf_set_short_demnames(_v) -> bool - - @param _v: uint32 +ida_ida.inf_set_rename_jumpfunc(_v: bool = True) -> bool -ida_ida.inf_set_should_create_stkvars (function) - inf_set_should_create_stkvars(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_rename_nullsub(_v: bool = True) -> bool -ida_ida.inf_set_should_trace_sp (function) - inf_set_should_trace_sp(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_short_demnames(_v: int) -> bool -ida_ida.inf_set_show_all_comments (function) - inf_set_show_all_comments(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_should_create_stkvars(_v: bool = True) -> bool -ida_ida.inf_set_show_auto (function) - inf_set_show_auto(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_should_trace_sp(_v: bool = True) -> bool -ida_ida.inf_set_show_hidden_funcs (function) - inf_set_show_hidden_funcs(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_show_all_comments(_v: bool = True) -> bool -ida_ida.inf_set_show_hidden_insns (function) - inf_set_show_hidden_insns(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_show_auto(_v: bool = True) -> bool -ida_ida.inf_set_show_hidden_segms (function) - inf_set_show_hidden_segms(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_show_hidden_funcs(_v: bool = True) -> bool -ida_ida.inf_set_show_line_pref (function) - inf_set_show_line_pref(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_show_hidden_insns(_v: bool = True) -> bool -ida_ida.inf_set_show_repeatables (function) - inf_set_show_repeatables(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_show_hidden_segms(_v: bool = True) -> bool -ida_ida.inf_set_show_src_linnum (function) - inf_set_show_src_linnum(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_show_line_pref(_v: bool = True) -> bool -ida_ida.inf_set_show_void (function) - inf_set_show_void(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_show_repeatables(_v: bool = True) -> bool -ida_ida.inf_set_show_xref_fncoff (function) - inf_set_show_xref_fncoff(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_show_src_linnum(_v: bool = True) -> bool -ida_ida.inf_set_show_xref_seg (function) - inf_set_show_xref_seg(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_show_void(_v: bool = True) -> bool -ida_ida.inf_set_show_xref_tmarks (function) - inf_set_show_xref_tmarks(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_show_xref_fncoff(_v: bool = True) -> bool -ida_ida.inf_set_show_xref_val (function) - inf_set_show_xref_val(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_show_xref_seg(_v: bool = True) -> bool -ida_ida.inf_set_snapshot (function) - inf_set_snapshot(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_show_xref_tmarks(_v: bool = True) -> bool -ida_ida.inf_set_specsegs (function) - inf_set_specsegs(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_show_xref_val(_v: bool = True) -> bool -ida_ida.inf_set_stack_ldbl (function) - inf_set_stack_ldbl(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_snapshot(_v: bool = True) -> bool -ida_ida.inf_set_stack_varargs (function) - inf_set_stack_varargs(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_specsegs(_v: "uchar") -> bool -ida_ida.inf_set_start_cs (function) - inf_set_start_cs(_v) -> bool - - @param _v: sel_t +ida_ida.inf_set_stack_ldbl(_v: bool = True) -> bool -ida_ida.inf_set_start_ea (function) - inf_set_start_ea(_v) -> bool - - @param _v: ea_t +ida_ida.inf_set_stack_varargs(_v: bool = True) -> bool -ida_ida.inf_set_start_ip (function) - inf_set_start_ip(_v) -> bool - - @param _v: ea_t +ida_ida.inf_set_start_cs(_v: "sel_t") -> bool -ida_ida.inf_set_start_sp (function) - inf_set_start_sp(_v) -> bool - - @param _v: ea_t +ida_ida.inf_set_start_ea(_v: ida_idaapi.ea_t) -> bool -ida_ida.inf_set_start_ss (function) - inf_set_start_ss(_v) -> bool - - @param _v: sel_t +ida_ida.inf_set_start_ip(_v: ida_idaapi.ea_t) -> bool -ida_ida.inf_set_strlit_autocmt (function) - inf_set_strlit_autocmt(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_start_sp(_v: ida_idaapi.ea_t) -> bool -ida_ida.inf_set_strlit_break (function) - inf_set_strlit_break(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_start_ss(_v: "sel_t") -> bool -ida_ida.inf_set_strlit_flags (function) - inf_set_strlit_flags(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_strlit_autocmt(_v: bool = True) -> bool -ida_ida.inf_set_strlit_name_bit (function) - inf_set_strlit_name_bit(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_strlit_break(_v: "uchar") -> bool -ida_ida.inf_set_strlit_names (function) - inf_set_strlit_names(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_strlit_flags(_v: "uchar") -> bool -ida_ida.inf_set_strlit_pref (function) - inf_set_strlit_pref(_v, len=size_t(-1)) -> bool - - @param _v: char const * - @param len: size_t +ida_ida.inf_set_strlit_name_bit(_v: bool = True) -> bool -ida_ida.inf_set_strlit_savecase (function) - inf_set_strlit_savecase(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_strlit_names(_v: bool = True) -> bool -ida_ida.inf_set_strlit_serial_names (function) - inf_set_strlit_serial_names(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_strlit_pref(*args) -> bool -ida_ida.inf_set_strlit_sernum (function) - inf_set_strlit_sernum(_v) -> bool - - @param _v: uval_t +ida_ida.inf_set_strlit_savecase(_v: bool = True) -> bool -ida_ida.inf_set_strlit_zeroes (function) - inf_set_strlit_zeroes(_v) -> bool - - @param _v: char +ida_ida.inf_set_strlit_serial_names(_v: bool = True) -> bool -ida_ida.inf_set_strtype (function) - inf_set_strtype(_v) -> bool - - @param _v: int32 +ida_ida.inf_set_strlit_sernum(_v: int) -> bool -ida_ida.inf_set_trace_flow (function) - inf_set_trace_flow(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_strlit_zeroes(_v: "char") -> bool -ida_ida.inf_set_truncate_on_del (function) - inf_set_truncate_on_del(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_strtype(_v: int) -> bool -ida_ida.inf_set_type_xrefnum (function) - inf_set_type_xrefnum(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_trace_flow(_v: bool = True) -> bool -ida_ida.inf_set_unicode_strlits (function) - inf_set_unicode_strlits(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_truncate_on_del(_v: bool = True) -> bool -ida_ida.inf_set_use_allasm (function) - inf_set_use_allasm(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_type_xrefnum(_v: "uchar") -> bool -ida_ida.inf_set_use_flirt (function) - inf_set_use_flirt(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_unicode_strlits(_v: bool = True) -> bool -ida_ida.inf_set_use_gcc_layout (function) - inf_set_use_gcc_layout(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_use_allasm(_v: bool = True) -> bool -ida_ida.inf_set_version (function) - inf_set_version(_v) -> bool - - @param _v: ushort +ida_ida.inf_set_use_flirt(_v: bool = True) -> bool -ida_ida.inf_set_wide_high_byte_first (function) - inf_set_wide_high_byte_first(_v=True) -> bool - - @param _v: bool +ida_ida.inf_set_use_gcc_layout(_v: bool = True) -> bool -ida_ida.inf_set_xrefflag (function) - inf_set_xrefflag(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_version(_v: "ushort") -> bool -ida_ida.inf_set_xrefnum (function) - inf_set_xrefnum(_v) -> bool - - @param _v: uchar +ida_ida.inf_set_wide_high_byte_first(_v: bool = True) -> bool + +ida_ida.inf_set_xrefflag(_v: "uchar") -> bool + +ida_ida.inf_set_xrefnum(_v: "uchar") -> bool -ida_ida.inf_should_create_stkvars (function) - inf_should_create_stkvars() -> bool +ida_ida.inf_should_create_stkvars() -> bool -ida_ida.inf_should_trace_sp (function) - inf_should_trace_sp() -> bool +ida_ida.inf_should_trace_sp() -> bool -ida_ida.inf_show_all_comments (function) - inf_show_all_comments() -> bool +ida_ida.inf_show_all_comments() -> bool -ida_ida.inf_show_auto (function) - inf_show_auto() -> bool +ida_ida.inf_show_auto() -> bool -ida_ida.inf_show_hidden_funcs (function) - inf_show_hidden_funcs() -> bool +ida_ida.inf_show_hidden_funcs() -> bool -ida_ida.inf_show_hidden_insns (function) - inf_show_hidden_insns() -> bool +ida_ida.inf_show_hidden_insns() -> bool -ida_ida.inf_show_hidden_segms (function) - inf_show_hidden_segms() -> bool +ida_ida.inf_show_hidden_segms() -> bool -ida_ida.inf_show_line_pref (function) - inf_show_line_pref() -> bool +ida_ida.inf_show_line_pref() -> bool -ida_ida.inf_show_repeatables (function) - inf_show_repeatables() -> bool +ida_ida.inf_show_repeatables() -> bool -ida_ida.inf_show_src_linnum (function) - inf_show_src_linnum() -> bool +ida_ida.inf_show_src_linnum() -> bool -ida_ida.inf_show_void (function) - inf_show_void() -> bool +ida_ida.inf_show_void() -> bool -ida_ida.inf_show_xref_fncoff (function) - inf_show_xref_fncoff() -> bool +ida_ida.inf_show_xref_fncoff() -> bool -ida_ida.inf_show_xref_seg (function) - inf_show_xref_seg() -> bool +ida_ida.inf_show_xref_seg() -> bool -ida_ida.inf_show_xref_tmarks (function) - inf_show_xref_tmarks() -> bool +ida_ida.inf_show_xref_tmarks() -> bool -ida_ida.inf_show_xref_val (function) - inf_show_xref_val() -> bool +ida_ida.inf_show_xref_val() -> bool -ida_ida.inf_stack_ldbl (function) - inf_stack_ldbl() -> bool +ida_ida.inf_stack_ldbl() -> bool -ida_ida.inf_stack_varargs (function) - inf_stack_varargs() -> bool +ida_ida.inf_stack_varargs() -> bool -ida_ida.inf_strlit_autocmt (function) - inf_strlit_autocmt() -> bool +ida_ida.inf_strlit_autocmt() -> bool -ida_ida.inf_strlit_name_bit (function) - inf_strlit_name_bit() -> bool +ida_ida.inf_strlit_name_bit() -> bool -ida_ida.inf_strlit_names (function) - inf_strlit_names() -> bool +ida_ida.inf_strlit_names() -> bool -ida_ida.inf_strlit_savecase (function) - inf_strlit_savecase() -> bool +ida_ida.inf_strlit_savecase() -> bool -ida_ida.inf_strlit_serial_names (function) - inf_strlit_serial_names() -> bool +ida_ida.inf_strlit_serial_names() -> bool -ida_ida.inf_test_mode (function) - inf_test_mode() -> bool +ida_ida.inf_test_mode() -> bool -ida_ida.inf_trace_flow (function) - inf_trace_flow() -> bool +ida_ida.inf_trace_flow() -> bool -ida_ida.inf_truncate_on_del (function) - inf_truncate_on_del() -> bool +ida_ida.inf_truncate_on_del() -> bool -ida_ida.inf_unicode_strlits (function) - inf_unicode_strlits() -> bool +ida_ida.inf_unicode_strlits() -> bool -ida_ida.inf_use_allasm (function) - inf_use_allasm() -> bool +ida_ida.inf_use_allasm() -> bool -ida_ida.inf_use_flirt (function) - inf_use_flirt() -> bool +ida_ida.inf_use_flirt() -> bool -ida_ida.inf_use_gcc_layout (function) - inf_use_gcc_layout() -> bool +ida_ida.inf_use_gcc_layout() -> bool -ida_ida.is_database_busy (function) - is_database_busy() -> bool - Check if the database is busy (e.g. performing some critical operations and - cannot be safely accessed) +ida_ida.is_database_busy() -> bool + Check if the database is busy (e.g. performing some critical operations and cannot be safely accessed) + -ida_ida.is_filetype_like_binary (function) - is_filetype_like_binary(ft) -> bool +ida_ida.is_filetype_like_binary(ft: "filetype_t") -> bool Is unstructured input file? - - @param ft: (C++: filetype_t) enum filetype_t -ida_ida.move_privrange (function) - move_privrange(new_privrange_start) -> bool - Move privrange to the specified address - - @param new_privrange_start: (C++: ea_t) new start address of the privrange - @return: success +ida_ida.move_privrange(new_privrange_start: ida_idaapi.ea_t) -> bool + Move privrange to the specified address + + @param new_privrange_start: new start address of the privrange + @returns success -ida_ida.switch_dbctx (function) - switch_dbctx(idx) -> dbctx_t * - Switch to the database with the provided context ID - - @param idx: (C++: size_t) the index of the database to switch to - @return: the current dbctx_t instance or nullptr +ida_ida.switch_dbctx(idx: "size_t") -> "dbctx_t *" + Switch to the database with the provided context ID + + @param idx: the index of the database to switch to + @returns the current dbctx_t instance or nullptr -ida_ida.to_ea (function) - to_ea(reg_cs, reg_ip) -> ea_t +ida_ida.to_ea(reg_cs: "sel_t", reg_ip: int) -> ida_idaapi.ea_t Convert (sel,off) value to a linear address. - - @param reg_cs: (C++: sel_t) - @param reg_ip: (C++: uval_t) -ida_ida.validate_idb (function) - validate_idb(vld_flags=0) -> size_t - Validate the database - - @param vld_flags: (C++: uint32) combination of VLD_.. constants - @return: number of corrupted/fixed records +ida_ida.validate_idb(vld_flags: int = 0) -> "size_t" + Validate the database + + @param vld_flags: combination of VLD_.. constants + @returns number of corrupted/fixed records -ida_idaapi (module) +ida_idaapi -ida_idaapi.IDAPython_ExecScript (function) +ida_idaapi.IDAPython_ExecScript(path, g, print_error = True) Run the specified script. This function is used by the low-level plugin code. -ida_idaapi.IDAPython_ExecSystem (function) +ida_idaapi.IDAPython_ExecSystem(cmd) Executes a command with popen(). -ida_idaapi.IDAPython_FormatExc (function) +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() -ida_idaapi.IDAPython_LoadProcMod (function) +ida_idaapi.IDAPython_GetDocstrings(obj) + +ida_idaapi.IDAPython_GetDocstrings._dedent(source: str) -> str + +ida_idaapi.IDAPython_GetDocstrings._nodes(tree) + Returns the list of all nodes in tree's body. + +ida_idaapi.IDAPython_GetDocstrings._nodes_iter(tree) + +ida_idaapi.IDAPython_GetDocstrings._pairwise_longest(iterable) + s -> (s0,s1), (s1,s2), (s2, s3), ..., (sN, None) + +ida_idaapi.IDAPython_GetDocstrings._walk_tree(tree) + +ida_idaapi.IDAPython_LoadProcMod(path, g, print_error = True) Load processor module. -ida_idaapi.IDAPython_UnLoadProcMod (function) +ida_idaapi.IDAPython_UnLoadProcMod(script, g, print_error = True) Unload processor module. -ida_idaapi.IDAPython_displayhook (class) +ida_idaapi.IDAPython_displayhook -ida_idaapi.IDAPython_displayhook.__init__ (method) +ida_idaapi.IDAPython_displayhook.__init__(self) -ida_idaapi.IDAPython_displayhook._print_hex (method) +ida_idaapi.IDAPython_displayhook._print_hex(self, x) -ida_idaapi.IDAPython_displayhook.displayhook (method) +ida_idaapi.IDAPython_displayhook.displayhook(self, item) -ida_idaapi.IDAPython_displayhook.format_item (method) +ida_idaapi.IDAPython_displayhook.displayhook_format(self, item) -ida_idaapi.IDAPython_displayhook.format_seq (method) +ida_idaapi.IDAPython_displayhook.format_item(self, num_printer, storage, item) -ida_idaapi.NW_CLOSEIDB (variable) +ida_idaapi.IDAPython_displayhook.format_seq(self, num_printer, storage, item, opn, cls) + +ida_idaapi.NW_CLOSEIDB Notify when the database is closed. Its callback is of the form: def notify_when_callback(nw_code) -ida_idaapi.NW_INITIDA (variable) +ida_idaapi.NW_INITIDA Notify when the IDA starts. Its callback is of the form: def notify_when_callback(nw_code) -ida_idaapi.NW_OPENIDB (variable) +ida_idaapi.NW_OPENIDB Notify when the database is opened. Its callback is of the form: def notify_when_callback(nw_code, is_old_database) -ida_idaapi.NW_REMOVE (variable) +ida_idaapi.NW_REMOVE Use this flag with other flags to uninstall a notifywhen callback -ida_idaapi.NW_TERMIDA (variable) +ida_idaapi.NW_TERMIDA Notify when the IDA terminates. Its callback is of the form: def notify_when_callback(nw_code) -ida_idaapi.PY_ICID_BYREF (variable) +ida_idaapi.PY_ICID_BYREF byref object -ida_idaapi.PY_ICID_INT64 (variable) +ida_idaapi.PY_ICID_INT64 int64 object -ida_idaapi.PY_ICID_OPAQUE (variable) +ida_idaapi.PY_ICID_OPAQUE opaque object -ida_idaapi.PyIdc_cvt_int64__ (class) +ida_idaapi.PyIdc_cvt_int64__ Helper class for explicitly representing VT_INT64 values -ida_idaapi.PyIdc_cvt_int64__.__add__ (method) +ida_idaapi.PyIdc_cvt_int64__.__add__(self, other) -ida_idaapi.PyIdc_cvt_int64__.__div__ (method) +ida_idaapi.PyIdc_cvt_int64__.__div__(self, other) -ida_idaapi.PyIdc_cvt_int64__.__init__ (method) +ida_idaapi.PyIdc_cvt_int64__.__init__(self, v) -ida_idaapi.PyIdc_cvt_int64__.__mul__ (method) +ida_idaapi.PyIdc_cvt_int64__.__mul__(self, other) -ida_idaapi.PyIdc_cvt_int64__.__op (method) +ida_idaapi.PyIdc_cvt_int64__.__op(self, op_n, other, rev = False) -ida_idaapi.PyIdc_cvt_int64__.__radd__ (method) +ida_idaapi.PyIdc_cvt_int64__.__radd__(self, other) -ida_idaapi.PyIdc_cvt_int64__.__rdiv__ (method) +ida_idaapi.PyIdc_cvt_int64__.__rdiv__(self, other) -ida_idaapi.PyIdc_cvt_int64__.__rmul__ (method) +ida_idaapi.PyIdc_cvt_int64__.__rmul__(self, other) -ida_idaapi.PyIdc_cvt_int64__.__rsub__ (method) +ida_idaapi.PyIdc_cvt_int64__.__rsub__(self, other) -ida_idaapi.PyIdc_cvt_int64__.__sub__ (method) +ida_idaapi.PyIdc_cvt_int64__.__sub__(self, other) -ida_idaapi.PyIdc_cvt_refclass__ (class) +ida_idaapi.PyIdc_cvt_refclass__ Helper class for representing references to immutable objects -ida_idaapi.PyIdc_cvt_refclass__.__init__ (method) +ida_idaapi.PyIdc_cvt_refclass__.__init__(self, v) -ida_idaapi.PyIdc_cvt_refclass__.cstr (method) +ida_idaapi.PyIdc_cvt_refclass__.cstr(self) Returns the string as a C string (up to the zero termination) -ida_idaapi.ST_OVER_DEBUG_SEG (variable) +ida_idaapi.ST_OVER_DEBUG_SEG step tracing will be disabled when IP is in a debugger segment -ida_idaapi.ST_OVER_LIB_FUNC (variable) +ida_idaapi.ST_OVER_LIB_FUNC step tracing will be disabled when IP is in a library function -ida_idaapi.TRUNC (function) +ida_idaapi.TRUNC(ea) Truncate EA for the current application bitness -ida_idaapi.__IDAPython_Completion_Util (class) +ida_idaapi.__IDAPython_Completion_Util Internal utility class for auto-completion support -ida_idaapi.__IDAPython_Completion_Util.__call__ (method) +ida_idaapi.__IDAPython_Completion_Util.__call__(self, line, x) -ida_idaapi.__IDAPython_Completion_Util.__init__ (method) +ida_idaapi.__IDAPython_Completion_Util.__init__(self) -ida_idaapi.__IDAPython_Completion_Util.debug (method) +ida_idaapi.__IDAPython_Completion_Util.__parse_arg(self, arg) -ida_idaapi.__IDAPython_Completion_Util.dir_namespace (method) +ida_idaapi.__IDAPython_Completion_Util.__proto_from_argspec(self, name, args, defaults, annotations) -ida_idaapi.__IDAPython_Completion_Util.get_candidates (method) +ida_idaapi.__IDAPython_Completion_Util.__proto_from_argspec.__repr_type(typ) -ida_idaapi.__IDAPython_Completion_Util.maybe_extend_syntactically (method) +ida_idaapi.__IDAPython_Completion_Util.__proto_from_docstring(self, name, doc, altname = None) -ida_idaapi.__install_excepthook (function) +ida_idaapi.__IDAPython_Completion_Util.__render_args(self, args, types, defaults) -ida_idaapi._bounded_getitem_iterator (function) +ida_idaapi.__IDAPython_Completion_Util.__render_constant(self, name, attr) + +ida_idaapi.__IDAPython_Completion_Util.__render_default(self, name) + +ida_idaapi.__IDAPython_Completion_Util.__render_docstr(self, doc, name, proto) + +ida_idaapi.__IDAPython_Completion_Util.__render_int_member(self, name, typ, val) + +ida_idaapi.__IDAPython_Completion_Util.__render_proto(self, name, args, types, defaults, rets, is_ctor = False) + +ida_idaapi.__IDAPython_Completion_Util.__render_rets(self, rets) + +ida_idaapi.__IDAPython_Completion_Util.__resolve_type(self, tname) + +ida_idaapi.__IDAPython_Completion_Util.build_hints(self, names, ns) + +ida_idaapi.__IDAPython_Completion_Util.debug(self, *args) + +ida_idaapi.__IDAPython_Completion_Util.dir_namespace(self, m, prefix) + +ida_idaapi.__IDAPython_Completion_Util.get_candidates(self, qname, line, match_syntax_char) + +ida_idaapi.__IDAPython_Completion_Util.maybe_extend_syntactically(self, ns, name, line, syntax_char) + +ida_idaapi.__install_excepthook() + +ida_idaapi._bounded_getitem_iterator(self) Helper function, to be set as __iter__ method for qvector-, or array-based classes. -ida_idaapi._listify_types (function) +ida_idaapi._listify_types(*classes) -ida_idaapi._make_missed_695bwcompat_property (function) +ida_idaapi._make_missed_695bwcompat_property(bad_attr, new_attr, has_setter) -ida_idaapi._make_missed_695bwcompat_property._getter (function) +ida_idaapi._make_missed_695bwcompat_property._getter(self) -ida_idaapi._make_missed_695bwcompat_property._setter (function) +ida_idaapi._make_missed_695bwcompat_property._setter(self, v) -ida_idaapi._make_one_time_warning_message (function) +ida_idaapi._make_one_time_warning_message(bad_attr, new_attr) -ida_idaapi._make_one_time_warning_message.f (function) +ida_idaapi._make_one_time_warning_message.f() -ida_idaapi._qvector_back (function) +ida_idaapi._qvector_back(self) -ida_idaapi._qvector_front (function) +ida_idaapi._qvector_front(self) -ida_idaapi._replace_module_function (function) +ida_idaapi._replace_module_function(replacement) -ida_idaapi.as_UTF16 (function) +ida_idaapi.as_UTF16(s) Convenience function to convert a string into appropriate unicode format -ida_idaapi.as_cstr (function) +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 \x00 and returns the string value up to that point. -ida_idaapi.as_int32 (function) +ida_idaapi.as_int32(v) Returns a number as a signed int32 number -ida_idaapi.as_signed (function) +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. -ida_idaapi.as_uint32 (function) +ida_idaapi.as_uint32(v) Returns a number as an unsigned int32 number -ida_idaapi.copy_bits (function) +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 -ida_idaapi.disable_script_timeout (function) - disable_script_timeout() +ida_idaapi.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 (function) - enable_extlang_python(enable) +ida_idaapi.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 (function) - enable_python_cli(enable) - - @param enable: bool +ida_idaapi.enable_python_cli(enable: bool) -> None -ida_idaapi.format_basestring (function) - format_basestring(_in) -> str - - @param _in: PyObject * +ida_idaapi.format_basestring(_in: "PyObject *") -> str -ida_idaapi.get_inf_structure (function) - get_inf_structure() -> idainfo - Returns the global variable 'inf' (an instance of idainfo structure, see ida.hpp) - -ida_idaapi.loader_input_t (class) +ida_idaapi.loader_input_t A helper class to work with linput_t related functions. This class is also used by file loaders scripts. -ida_idaapi.loader_input_t.__init__ (method) - __init__(self, pycapsule=None) -> loader_input_t - - @param pycapsule: PyObject * +ida_idaapi.loader_input_t.__init__(self, pycapsule = None) -ida_idaapi.loader_input_t.close (method) - close(self) +ida_idaapi.loader_input_t.close(self) Closes the file -ida_idaapi.loader_input_t.file2base (method) - file2base(self, pos, ea1, ea2, patchable) -> int +ida_idaapi.loader_input_t.file2base(self, pos: int, ea1: ea_t, ea2: ea_t, patchable: bool) 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 ea1: ..ea2): range of destination linear addresses + @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 (method) - filename(self) -> PyObject * +ida_idaapi.loader_input_t.filename(self) -> "PyObject *" -ida_idaapi.loader_input_t.from_capsule (method) - from_capsule(pycapsule) -> loader_input_t - - @param pycapsule: PyObject * +ida_idaapi.loader_input_t.from_capsule(pycapsule: "PyObject *") -> "loader_input_t *" -ida_idaapi.loader_input_t.from_fp (method) - from_fp(fp) -> loader_input_t +ida_idaapi.loader_input_t.from_fp(fp) A static method to construct an instance from a FILE* - @param fp: FILE * + @param fp: a FILE pointer + @return: a new instance, or None -ida_idaapi.loader_input_t.from_linput (method) - from_linput(linput) -> loader_input_t - - @param linput: linput_t * +ida_idaapi.loader_input_t.from_linput(linput: "linput_t *") -> "loader_input_t *" -ida_idaapi.loader_input_t.get_byte (method) - get_byte(self) -> PyObject * +ida_idaapi.loader_input_t.get_byte(self) Reads a single byte from the file. Returns None if EOF or the read byte -ida_idaapi.loader_input_t.get_linput (method) - get_linput(self) -> linput_t * +ida_idaapi.loader_input_t.get_linput(self) -> "linput_t *" -ida_idaapi.loader_input_t.gets (method) - gets(self, len) -> str +ida_idaapi.loader_input_t.gets(self, len: int) Reads a line from the input file. Returns the read line or None - @param len: size_t + @param len: the maximum line length + @return: a str, or None -ida_idaapi.loader_input_t.getz (method) - getz(self, sz, fpos=-1) -> PyObject * +ida_idaapi.loader_input_t.getz(self, size: int, fpos: int = -1) Returns a zero terminated string at the given position - @param sz: maximum size of the string + @param size: 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 (method) - open(self, filename, remote=False) -> bool +ida_idaapi.loader_input_t.open(self, filename, remote = False) Opens a file (or a remote file) - @param filename: char const * - @param remote: bool + @param filename: the file name + @param remote: whether the file is local, or remote @return: Boolean -ida_idaapi.loader_input_t.open_memory (method) - open_memory(self, start, size=0) -> bool +ida_idaapi.loader_input_t.open_memory(self, start: ea_t, size: int) Create a linput for process memory (By internally calling idaapi.create_memory_linput()) This linput will use dbg->read_memory() to read data @@ -30884,60 +20460,40 @@ ida_idaapi.loader_input_t.open_memory (method) @param size: size of the memory range to represent as linput if unknown, may be passed as 0 -ida_idaapi.loader_input_t.opened (method) - opened(self) -> bool +ida_idaapi.loader_input_t.opened(self) Checks if the file is opened or not -ida_idaapi.loader_input_t.read (method) - read(self, size) -> bytes or None - Reads from the file. Returns the buffer or None +ida_idaapi.loader_input_t.read(self, size: int = -1) + Read up to size bytes (all data if size is negative). Return an empty bytes object on EOF. - @param size: size_t + @param size: the maximum number of bytes to read + @return a bytes object -ida_idaapi.loader_input_t.readbytes (method) - readbytes(self, size, big_endian) -> PyObject * +ida_idaapi.loader_input_t.readbytes(self, size: int, big_endian: bool) Similar to read() but it respect the endianness - @param size: size_t - @param big_endian: bool + @param size: the maximum number of bytes to read + @param big_endian: endianness + @return a str, or None -ida_idaapi.loader_input_t.seek (method) - seek(self, pos, whence=SEEK_SET) -> int64 +ida_idaapi.loader_input_t.seek(self, offset: int, whence = SEEK_SET) Set input source position - @param pos: int64 - @param whence: int + @param offset: the seek offset + @param whence: the position to seek from @return: the new position (not 0 as fseek!) -ida_idaapi.loader_input_t.set_linput (method) - set_linput(self, linput) +ida_idaapi.loader_input_t.set_linput(self, linput) Links the current loader_input_t instance to a linput_t instance - @param linput: linput_t * + @param linput: the linput_t to link to -ida_idaapi.loader_input_t.size (method) - size(self) -> int64 +ida_idaapi.loader_input_t.size(self) -> "int64" -ida_idaapi.loader_input_t.tell (method) - tell(self) -> int64 +ida_idaapi.loader_input_t.tell(self) Returns the current position -ida_idaapi.loader_input_t_from_capsule (function) - loader_input_t_from_capsule(pycapsule) -> loader_input_t - - @param pycapsule: PyObject * - -ida_idaapi.loader_input_t_from_fp (function) - loader_input_t_from_fp(fp) -> loader_input_t - - @param fp: FILE * - -ida_idaapi.loader_input_t_from_linput (function) - loader_input_t_from_linput(linput) -> loader_input_t - - @param linput: linput_t * - -ida_idaapi.notify_when (function) +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: @@ -30947,121 +20503,94 @@ ida_idaapi.notify_when (function) def notify_when_callback(nw_code, is_old_database) @return: Boolean -ida_idaapi.object_t (class) +ida_idaapi.object_t Helper class used to initialize empty objects -ida_idaapi.object_t.__getitem__ (method) +ida_idaapi.object_t.__getitem__(self, idx) Allow access to object attributes by index (like dictionaries) -ida_idaapi.object_t.__init__ (method) +ida_idaapi.object_t.__init__(self, **kwds) -ida_idaapi.parse_command_line3 (function) - parse_command_line3(cmdline) -> PyObject * - - @param cmdline: char const * +ida_idaapi.parse_command_line3(cmdline: str) -> "PyObject *" -ida_idaapi.plugin_t (class) +ida_idaapi.plugin_t Base class for all scripted plugins. -ida_idaapi.plugin_t.run (method) +ida_idaapi.plugin_t.run(self, arg) -ida_idaapi.plugin_t.term (method) +ida_idaapi.plugin_t.term(self) -ida_idaapi.plugmod_t (class) +ida_idaapi.plugmod_t Base class for all scripted multi-plugins. -ida_idaapi.py_clinked_object_t (class) +ida_idaapi.py_clinked_object_t This is a utility and base class for C linked objects -ida_idaapi.py_clinked_object_t.__del__ (method) +ida_idaapi.py_clinked_object_t.__del__(self) Delete the link upon object destruction (only if not static) -ida_idaapi.py_clinked_object_t.__init__ (method) +ida_idaapi.py_clinked_object_t.__init__(self, lnk = None) -ida_idaapi.py_clinked_object_t._create_clink (method) +ida_idaapi.py_clinked_object_t._create_clink(self) Overwrite me. Creates a new clink @return: PyCapsule representing the C link -ida_idaapi.py_clinked_object_t._del_clink (method) +ida_idaapi.py_clinked_object_t._del_clink(self, lnk) Overwrite me. This method deletes the link -ida_idaapi.py_clinked_object_t._free (method) +ida_idaapi.py_clinked_object_t._free(self) Explicitly delete the link (only if not static) -ida_idaapi.py_clinked_object_t._get_clink_ptr (method) +ida_idaapi.py_clinked_object_t._get_clink_ptr(self) Overwrite me. Returns the C link pointer as a 64bit number -ida_idaapi.py_clinked_object_t.assign (method) +ida_idaapi.py_clinked_object_t.assign(self, other) Overwrite me. This method allows you to assign an instance contents to anothers @return: Boolean -ida_idaapi.py_clinked_object_t.clink (variable) +ida_idaapi.py_clinked_object_t.clink Returns the C link as a PyObject -ida_idaapi.py_clinked_object_t.clink_ptr (variable) +ida_idaapi.py_clinked_object_t.clink_ptr Returns the C link pointer as a number -ida_idaapi.py_clinked_object_t.copy (method) +ida_idaapi.py_clinked_object_t.copy(self) Returns a new copy of this class -ida_idaapi.pycim_get_widget (function) - pycim_get_widget(_self) -> TWidget * - - @param self: PyObject * +ida_idaapi.pycim_get_widget(_self: "PyObject *") -> "TWidget *" -ida_idaapi.pycim_view_close (function) - pycim_view_close(_self) - - @param self: PyObject * +ida_idaapi.pycim_view_close(_self: "PyObject *") -> None -ida_idaapi.pygc_create_groups (function) - pygc_create_groups(_self, groups_infos) -> [int, ...] or None - - @param self: PyObject * - @param groups_infos: PyObject * +ida_idaapi.pygc_create_groups(_self: "PyObject *", groups_infos: "PyObject *") -> "PyObject *" -ida_idaapi.pygc_delete_groups (function) - pygc_delete_groups(_self, groups, new_current) -> bool - - @param self: PyObject * - @param groups: PyObject * - @param new_current: PyObject * +ida_idaapi.pygc_delete_groups(_self: "PyObject *", groups: "PyObject *", new_current: "PyObject *") -> "PyObject *" -ida_idaapi.pygc_refresh (function) - pygc_refresh(_self) - - @param self: PyObject * +ida_idaapi.pygc_refresh(_self: "PyObject *") -> None -ida_idaapi.pygc_set_groups_visibility (function) - pygc_set_groups_visibility(_self, groups, expand, new_current) -> bool - - @param self: PyObject * - @param groups: PyObject * - @param expand: PyObject * - @param new_current: PyObject * +ida_idaapi.pygc_set_groups_visibility(_self: "PyObject *", groups: "PyObject *", expand: "PyObject *", new_current: "PyObject *") -> "PyObject *" -ida_idaapi.pyidc_cvt_helper__ (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 -ida_idaapi.pyidc_cvt_helper__.__get_value (method) +ida_idaapi.pyidc_cvt_helper__.__get_value(self) -ida_idaapi.pyidc_cvt_helper__.__init__ (method) +ida_idaapi.pyidc_cvt_helper__.__init__(self, cvt_id, value) -ida_idaapi.pyidc_cvt_helper__.__set_value (method) +ida_idaapi.pyidc_cvt_helper__.__set_value(self, v) -ida_idaapi.pyidc_opaque_object_t (class) +ida_idaapi.pyidc_opaque_object_t This is the base class for all Python<->IDC opaque objects -ida_idaapi.replfun (function) +ida_idaapi.replfun(func) -ida_idaapi.require (function) +ida_idaapi.require(modulename, package = None) Load, or reload a module. When under heavy development, a user's tool might consist of multiple @@ -31081,8 +20610,7 @@ ida_idaapi.require (function) For more information, see: . -ida_idaapi.set_script_timeout (function) - set_script_timeout(timeout) -> int +ida_idaapi.set_script_timeout(timeout) 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}. @@ -31090,159 +20618,150 @@ ida_idaapi.set_script_timeout (function) If this value is set to zero then the script will never timeout. @return: Returns the old timeout value -ida_idaapi.struct_unpack (function) +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. -ida_idc (module) +ida_idc -ida_idc.get_mark_comment (function) - get_mark_comment(slot) -> PyObject * - - @param slot: int32 +ida_idc.get_mark_comment(slot: int) -> "PyObject *" -ida_idc.get_marked_pos (function) - get_marked_pos(slot) -> ea_t - - @param slot: int32 +ida_idc.get_marked_pos(slot: int) -> ida_idaapi.ea_t -ida_idc.mark_position (function) - mark_position(ea, lnnum, x, y, slot, comment) - - @param ea: ea_t - @param lnnum: int - @param x: short - @param y: short - @param slot: int32 - @param comment: char const * +ida_idc.mark_position(ea: ida_idaapi.ea_t, lnnum: int, x: "short", y: "short", slot: int, comment: str) -> None -ida_idd (module) +ida_idd Contains definition of the interface to IDD modules. - The interface consists of structures describing the target debugged processor - and a debugging API. + The interface consists of structures describing the target debugged processor and a debugging API. + -ida_idd.APPCALL_DEBEV (variable) +ida_idd.APPCALL_DEBEV Return debug event information. -ida_idd.APPCALL_MANUAL (variable) - Only set up the appcall, do not run. debugger_t::cleanup_appcall will not be - generated by ida! +ida_idd.APPCALL_MANUAL + Only set up the appcall, do not run. debugger_t::cleanup_appcall will not be generated by ida! + -ida_idd.APPCALL_TIMEOUT (variable) - Appcall with timeout. If timed out, errbuf will contain "timeout". See - SET_APPCALL_TIMEOUT and GET_APPCALL_TIMEOUT +ida_idd.APPCALL_TIMEOUT + Appcall with timeout. If timed out, errbuf will contain "timeout". See SET_APPCALL_TIMEOUT and GET_APPCALL_TIMEOUT + -ida_idd.Appcall__ (class) - -ida_idd.Appcall__.APPCALL_DEBEV (variable) - Return debug event information - If this bit is set, exceptions during appcall - will generate idc exceptions with full - information about the exception - -ida_idd.Appcall__.APPCALL_MANUAL (variable) - Only set up the appcall, do not run it. - you should call CleanupAppcall() when finished - -ida_idd.Appcall__.APPCALL_TIMEOUT (variable) +ida_idd.Appcall__ Appcall with timeout The timeout value in milliseconds is specified in the high 2 bytes of the 'options' argument: If timed out, errbuf will contain "timeout". -ida_idd.Appcall__.Consts (variable) +ida_idd.Appcall__.APPCALL_DEBEV + Return debug event information. + +ida_idd.Appcall__.APPCALL_MANUAL + Only set up the appcall, do not run. debugger_t::cleanup_appcall will not be generated by ida! + + +ida_idd.Appcall__.APPCALL_TIMEOUT + Appcall with timeout. If timed out, errbuf will contain "timeout". See SET_APPCALL_TIMEOUT and GET_APPCALL_TIMEOUT + + +ida_idd.Appcall__.Consts Use Appcall.Consts.CONST_NAME to access constants -ida_idd.Appcall__.UTF16 (method) +ida_idd.Appcall__.UTF16(s) -ida_idd.Appcall__.__get_consts (method) +ida_idd.Appcall__.__get_consts(self) -ida_idd.Appcall__.__getattr__ (method) +ida_idd.Appcall__.__getattr__(self, name_or_ea) Allows you to call functions as if they were member functions (by returning a callable object) -ida_idd.Appcall__.__getitem__ (method) +ida_idd.Appcall__.__getitem__(self, idx) Use self[func_name] syntax if the function name contains invalid characters for an attribute name See __getattr___ -ida_idd.Appcall__.__init__ (method) +ida_idd.Appcall__.__init__(self) -ida_idd.Appcall__.__name_or_ea (method) +ida_idd.Appcall__.__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 + @return: + - Returns the resolved EA or - Raises an exception if the address is not enabled -ida_idd.Appcall__.__typedecl_or_tinfo (method) +ida_idd.Appcall__.__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 + @return: + - Returns the tinfo_t object - Raises an exception if the declaration cannot be parsed -ida_idd.Appcall__.array (method) +ida_idd.Appcall__.array(type_name) Defines an array type. Later you need to pack() / unpack() -ida_idd.Appcall__.buffer (method) +ida_idd.Appcall__.buffer(str = None, size = 0, fill = "") 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) +ida_idd.Appcall__.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) -ida_idd.Appcall__.cleanup_appcall (method) - Equivalent to IDC's CleanupAppcall() +ida_idd.Appcall__.cleanup_appcall(tid = 0) + 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. + @returns eOk if successful, otherwise an error code -ida_idd.Appcall__.cstr (method) +ida_idd.Appcall__.cstr(val) -ida_idd.Appcall__.get_appcall_options (method) +ida_idd.Appcall__.get_appcall_options() Return the global Appcall options -ida_idd.Appcall__.int64 (method) +ida_idd.Appcall__.int64(v) Whenever a 64bit number is needed use this method to construct an object -ida_idd.Appcall__.obj (method) +ida_idd.Appcall__.obj(**kwds) Returns an empty object or objects with attributes as passed via its keywords arguments -ida_idd.Appcall__.proto (method) +ida_idd.Appcall__.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 + @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) +ida_idd.Appcall__.set_appcall_options(opt) Method to change the Appcall options globally (not per Appcall) -ida_idd.Appcall__.typedobj (method) +ida_idd.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 -ida_idd.Appcall__.valueof (method) +ida_idd.Appcall__.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 -ida_idd.Appcall_array__ (class) +ida_idd.Appcall_array__ This class is used with Appcall.array() method -ida_idd.Appcall_array__.__init__ (method) +ida_idd.Appcall_array__.__init__(self, tp) -ida_idd.Appcall_array__.pack (method) +ida_idd.Appcall_array__.pack(self, L) Packs a list or tuple into a byref buffer -ida_idd.Appcall_array__.try_to_convert_to_list (method) +ida_idd.Appcall_array__.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 -ida_idd.Appcall_array__.unpack (method) +ida_idd.Appcall_array__.unpack(self, buf, as_list = True) Unpacks an array back into a list or an object -ida_idd.Appcall_callable__ (class) +ida_idd.Appcall_callable__ Helper class to issue appcalls using a natural syntax: appcall.FunctionNameInTheDatabase(arguments, ....) or @@ -31255,3389 +20774,2465 @@ ida_idd.Appcall_callable__ (class) i = byref(5) appcall.funcname(arg1, i, "hello", o) -ida_idd.Appcall_callable__.__call__ (method) +ida_idd.Appcall_callable__.__call__(self, *args) Make object callable. We redirect execution to idaapi.appcall() -ida_idd.Appcall_callable__.__get_ea (method) +ida_idd.Appcall_callable__.__get_ea(self) -ida_idd.Appcall_callable__.__get_fields (method) +ida_idd.Appcall_callable__.__get_fields(self) -ida_idd.Appcall_callable__.__get_options (method) +ida_idd.Appcall_callable__.__get_options(self) -ida_idd.Appcall_callable__.__get_size (method) +ida_idd.Appcall_callable__.__get_size(self) -ida_idd.Appcall_callable__.__get_tif (method) +ida_idd.Appcall_callable__.__get_tif(self) -ida_idd.Appcall_callable__.__get_timeout (method) +ida_idd.Appcall_callable__.__get_timeout(self) -ida_idd.Appcall_callable__.__get_type (method) +ida_idd.Appcall_callable__.__get_type(self) -ida_idd.Appcall_callable__.__init__ (method) +ida_idd.Appcall_callable__.__init__(self, ea, tinfo_or_typestr = None, fields = None) Initializes an appcall with a given function ea -ida_idd.Appcall_callable__.__set_ea (method) +ida_idd.Appcall_callable__.__set_ea(self, val) -ida_idd.Appcall_callable__.__set_options (method) +ida_idd.Appcall_callable__.__set_options(self, v) -ida_idd.Appcall_callable__.__set_timeout (method) +ida_idd.Appcall_callable__.__set_timeout(self, v) -ida_idd.Appcall_callable__.ea (variable) +ida_idd.Appcall_callable__.ea Returns or sets the EA associated with this object -ida_idd.Appcall_callable__.fields (variable) +ida_idd.Appcall_callable__.fields Returns the field names -ida_idd.Appcall_callable__.options (variable) +ida_idd.Appcall_callable__.options Sets the Appcall options locally to this Appcall instance -ida_idd.Appcall_callable__.retrieve (method) +ida_idd.Appcall_callable__.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). -ida_idd.Appcall_callable__.size (variable) +ida_idd.Appcall_callable__.size Returns the size of the type -ida_idd.Appcall_callable__.store (method) +ida_idd.Appcall_callable__.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) + @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) -ida_idd.Appcall_callable__.tif (variable) +ida_idd.Appcall_callable__.tif Returns the tinfo_t object -ida_idd.Appcall_callable__.timeout (variable) +ida_idd.Appcall_callable__.timeout An Appcall instance can change its timeout value with this attribute -ida_idd.Appcall_callable__.type (variable) +ida_idd.Appcall_callable__.type Returns the typestring -ida_idd.Appcall_consts__ (class) +ida_idd.Appcall_consts__ Helper class used by Appcall.Consts attribute It is used to retrieve constants via attribute access -ida_idd.Appcall_consts__.__getattr__ (method) +ida_idd.Appcall_consts__.__getattr__(self, attr) -ida_idd.Appcall_consts__.__init__ (method) +ida_idd.Appcall_consts__.__init__(self, default = None) -ida_idd.BPT_BAD_ADDR (variable) +ida_idd.BBLK_TRACE + basic block tracing + +ida_idd.BITNESS_CHANGED + Debugger detected the process bitness changing. + +ida_idd.BPT_BAD_ADDR ea is invalid -ida_idd.BPT_BAD_ALIGN (variable) +ida_idd.BPT_BAD_ALIGN alignment is invalid -ida_idd.BPT_BAD_LEN (variable) +ida_idd.BPT_BAD_LEN bpt len is invalid -ida_idd.BPT_BAD_TYPE (variable) +ida_idd.BPT_BAD_TYPE bpt type is not supported -ida_idd.BPT_DEFAULT (variable) +ida_idd.BPT_DEFAULT Choose bpt type automatically. -ida_idd.BPT_EXEC (variable) +ida_idd.BPT_EXEC Execute instruction. -ida_idd.BPT_INTERNAL_ERR (variable) +ida_idd.BPT_INTERNAL_ERR interr occurred when verifying breakpoint -ida_idd.BPT_OK (variable) +ida_idd.BPT_OK breakpoint can be set -ida_idd.BPT_PAGE_OK (variable) +ida_idd.BPT_PAGE_OK update_bpts(): ok, added a page bpt -ida_idd.BPT_RDWR (variable) +ida_idd.BPT_RDWR Read/write access. -ida_idd.BPT_READ (variable) +ida_idd.BPT_READ Read access. -ida_idd.BPT_READ_ERROR (variable) +ida_idd.BPT_READ_ERROR failed to read memory at bpt ea -ida_idd.BPT_SKIP (variable) +ida_idd.BPT_SKIP update_bpts(): do not process bpt -ida_idd.BPT_SOFT (variable) +ida_idd.BPT_SOFT Software breakpoint. -ida_idd.BPT_TOO_MANY (variable) +ida_idd.BPT_TOO_MANY reached max number of supported breakpoints -ida_idd.BPT_WRITE (variable) +ida_idd.BPT_WRITE Write access. -ida_idd.BPT_WRITE_ERROR (variable) +ida_idd.BPT_WRITE_ERROR failed to write memory at bpt ea -ida_idd.BREAKPOINT (variable) - Breakpoint has been reached. IDA will complain about unknown breakpoints, they - should be reported as exceptions. +ida_idd.BREAKPOINT + Breakpoint has been reached. IDA will complain about unknown breakpoints, they should be reported as exceptions. + -ida_idd.DBG_FLAG_ADD_ENVS (variable) +ida_idd.DBG_FLAG_ADD_ENVS The debugger supports launching processes with environment variables. -ida_idd.DBG_FLAG_ANYSIZE_HWBPT (variable) +ida_idd.DBG_FLAG_ANYSIZE_HWBPT The debugger supports arbitrary size hardware breakpoints. -ida_idd.DBG_FLAG_CAN_CONT_BPT (variable) - Debugger knows to continue from a bpt. This flag also means that the debugger - module hides breakpoints from ida upon read_memory +ida_idd.DBG_FLAG_CAN_CONT_BPT + Debugger knows to continue from a bpt. This flag also means that the debugger module hides breakpoints from ida upon read_memory + -ida_idd.DBG_FLAG_CLEAN_EXIT (variable) - IDA must suspend the application and remove all breakpoints before terminating - the application. Usually this is not required because the application memory - disappears upon termination. +ida_idd.DBG_FLAG_CLEAN_EXIT + IDA must suspend the application and remove all breakpoints before terminating the application. Usually this is not required because the application memory disappears upon termination. + -ida_idd.DBG_FLAG_CONNSTRING (variable) +ida_idd.DBG_FLAG_CONNSTRING Display "Connection string" instead of "Hostname" and hide the "Port" field. -ida_idd.DBG_FLAG_DEBTHREAD (variable) - Supports creation of a separate thread in ida for the debugger (the debthread). - Most debugger functions will be called from debthread (exceptions are marked - below) The debugger module may directly call only THREAD_SAFE functions. To call - other functions please use execute_sync(). The debthread significantly increases - debugging speed, especially if debug events occur frequently. +ida_idd.DBG_FLAG_DEBTHREAD + Supports creation of a separate thread in ida for the debugger (the debthread). Most debugger functions will be called from debthread (exceptions are marked below) The debugger module may directly call only THREAD_SAFE functions. To call other functions please use execute_sync(). The debthread significantly increases debugging speed, especially if debug events occur frequently. + -ida_idd.DBG_FLAG_DEBUG_DLL (variable) - Can debug standalone DLLs. For example, Bochs debugger can debug any snippet of - code +ida_idd.DBG_FLAG_DEBUG_DLL + Can debug standalone DLLs. For example, Bochs debugger can debug any snippet of code + -ida_idd.DBG_FLAG_DONT_DISTURB (variable) - Debugger can handle only get_debug_event(), request_pause(), exit_process() when - the debugged process is running. The kernel may also call service functions - (file I/O, map_address, etc) +ida_idd.DBG_FLAG_DISABLE_ASLR + The debugger support ASLR disabling (Address space layout randomization) + -ida_idd.DBG_FLAG_EXITSHOTOK (variable) +ida_idd.DBG_FLAG_DONT_DISTURB + Debugger can handle only get_debug_event(), request_pause(), exit_process() when the debugged process is running. The kernel may also call service functions (file I/O, map_address, etc) + + +ida_idd.DBG_FLAG_EXITSHOTOK IDA may take a memory snapshot at PROCESS_EXITED event. -ida_idd.DBG_FLAG_FAKE_ATTACH (variable) - PROCESS_ATTACHED is a fake event and does not suspend the execution +ida_idd.DBG_FLAG_FAKE_ATTACH + PROCESS_ATTACHED is a fake event and does not suspend the execution + -ida_idd.DBG_FLAG_FAKE_MEMORY (variable) - get_memory_info()/read_memory()/write_memory() work with the idb. (there is no - real process to read from, as for the replayer module) the kernel will not call - these functions if this flag is set. however, third party plugins may call them, - they must be implemented. +ida_idd.DBG_FLAG_FAKE_MEMORY + get_memory_info()/read_memory()/write_memory() work with the idb. (there is no real process to read from, as for the replayer module) the kernel will not call these functions if this flag is set. however, third party plugins may call them, they must be implemented. + -ida_idd.DBG_FLAG_FAST_STEP (variable) +ida_idd.DBG_FLAG_FAST_STEP Do not refresh memory layout info after single stepping. -ida_idd.DBG_FLAG_HWDATBPT_ONE (variable) - Hardware data breakpoints are one byte size by default +ida_idd.DBG_FLAG_FULL_INSTR_BPT + Setting a breakpoint in the middle of an instruction will also break. -ida_idd.DBG_FLAG_LAZY_WATCHPTS (variable) - Watchpoints are triggered before the offending instruction is executed. The - debugger must temporarily disable the watchpoint and single-step before - resuming. +ida_idd.DBG_FLAG_HWDATBPT_ONE + Hardware data breakpoints are one byte size by default + -ida_idd.DBG_FLAG_LOWCNDS (variable) +ida_idd.DBG_FLAG_LAZY_WATCHPTS + Watchpoints are triggered before the offending instruction is executed. The debugger must temporarily disable the watchpoint and single-step before resuming. + + +ida_idd.DBG_FLAG_LOWCNDS Low level breakpoint conditions are supported. -ida_idd.DBG_FLAG_MANMEMINFO (variable) - If set, manual memory region manipulation commands will be available. Use this - bit for debugger modules that cannot return memory layout information +ida_idd.DBG_FLAG_MANMEMINFO + If set, manual memory region manipulation commands will be available. Use this bit for debugger modules that cannot return memory layout information + -ida_idd.DBG_FLAG_MERGE_ENVS (variable) - The debugger supports merge or replace setting for environment variables (only - makes sense if DBG_FLAG_ADD_ENVS is set) +ida_idd.DBG_FLAG_MERGE_ENVS + The debugger supports merge or replace setting for environment variables (only makes sense if DBG_FLAG_ADD_ENVS is set) + -ida_idd.DBG_FLAG_NEEDPORT (variable) +ida_idd.DBG_FLAG_NEEDPORT Remote debugger requires port number (to be used with DBG_FLAG_NOHOST) -ida_idd.DBG_FLAG_NOHOST (variable) - Remote debugger with does not require network params (host/port/pass). (a unique - device connected to the machine) +ida_idd.DBG_FLAG_NOHOST + Remote debugger with does not require network params (host/port/pass). (a unique device connected to the machine) + -ida_idd.DBG_FLAG_NOPARAMETERS (variable) +ida_idd.DBG_FLAG_NOPARAMETERS Debugger module doesn't use commandline parameters. -ida_idd.DBG_FLAG_NOPASSWORD (variable) +ida_idd.DBG_FLAG_NOPASSWORD Remote debugger doesn't use password. -ida_idd.DBG_FLAG_NOSTARTDIR (variable) +ida_idd.DBG_FLAG_NOSTARTDIR Debugger module doesn't use startup directory. -ida_idd.DBG_FLAG_PREFER_SWBPTS (variable) +ida_idd.DBG_FLAG_PREFER_SWBPTS Prefer to use software breakpoints. -ida_idd.DBG_FLAG_REMOTE (variable) +ida_idd.DBG_FLAG_REMOTE Remote debugger (requires remote host name unless DBG_FLAG_NOHOST) -ida_idd.DBG_FLAG_SAFE (variable) - The debugger is safe (probably because it just emulates the application without - really running it) +ida_idd.DBG_FLAG_SAFE + The debugger is safe (probably because it just emulates the application without really running it) + -ida_idd.DBG_FLAG_SMALLBLKS (variable) - If set, IDA uses 256-byte blocks for caching memory contents. Otherwise, - 1024-byte blocks are used +ida_idd.DBG_FLAG_SMALLBLKS + If set, IDA uses 256-byte blocks for caching memory contents. Otherwise, 1024-byte blocks are used + -ida_idd.DBG_FLAG_TRACER_MODULE (variable) +ida_idd.DBG_FLAG_TRACER_MODULE The module is a tracer, not a full featured debugger module. -ida_idd.DBG_FLAG_USE_SREGS (variable) +ida_idd.DBG_FLAG_TTD + The debugger is a time travel debugger and supports continuing backwards. + +ida_idd.DBG_FLAG_USE_SREGS Take segment register values into account (non flat memory) -ida_idd.DBG_FLAG_VIRTHREADS (variable) - Thread IDs may be shuffled after each debug event. (to be used for virtual - threads that represent cpus for windbg kmode) +ida_idd.DBG_FLAG_VIRTHREADS + Thread IDs may be shuffled after each debug event. (to be used for virtual threads that represent cpus for windbg kmode) + -ida_idd.DBG_HAS_APPCALL (variable) +ida_idd.DBG_HAS_APPCALL supports ev_appcall, ev_cleanup_appcall -ida_idd.DBG_HAS_ATTACH_PROCESS (variable) +ida_idd.DBG_HAS_ATTACH_PROCESS supports ev_attach_process -ida_idd.DBG_HAS_CHECK_BPT (variable) +ida_idd.DBG_HAS_CHECK_BPT supports ev_check_bpt -ida_idd.DBG_HAS_DETACH_PROCESS (variable) +ida_idd.DBG_HAS_DETACH_PROCESS supports ev_detach_process -ida_idd.DBG_HAS_GET_PROCESSES (variable) +ida_idd.DBG_HAS_GET_PROCESSES supports ev_get_processes -ida_idd.DBG_HAS_MAP_ADDRESS (variable) - supports ev_map_address. Avoid using this bit, especially together with - DBG_FLAG_DEBTHREAD because it may cause big slow downs +ida_idd.DBG_HAS_MAP_ADDRESS + supports ev_map_address. Avoid using this bit, especially together with DBG_FLAG_DEBTHREAD because it may cause big slow downs + -ida_idd.DBG_HAS_OPEN_FILE (variable) +ida_idd.DBG_HAS_OPEN_FILE supports ev_open_file, ev_close_file, ev_read_file, ev_write_file -ida_idd.DBG_HAS_REQUEST_PAUSE (variable) +ida_idd.DBG_HAS_REQUEST_PAUSE supports ev_request_pause -ida_idd.DBG_HAS_REXEC (variable) +ida_idd.DBG_HAS_REXEC supports ev_rexec -ida_idd.DBG_HAS_SET_EXCEPTION_INFO (variable) +ida_idd.DBG_HAS_SET_EXCEPTION_INFO supports ev_set_exception_info -ida_idd.DBG_HAS_SET_RESUME_MODE (variable) - supports ev_set_resume_mode. Cannot be set inside the - debugger_t::init_debugger() +ida_idd.DBG_HAS_SET_RESUME_MODE + supports ev_set_resume_mode. Cannot be set inside the debugger_t::init_debugger() + -ida_idd.DBG_HAS_THREAD_CONTINUE (variable) +ida_idd.DBG_HAS_THREAD_CONTINUE supports ev_thread_continue -ida_idd.DBG_HAS_THREAD_GET_SREG_BASE (variable) +ida_idd.DBG_HAS_THREAD_GET_SREG_BASE supports ev_thread_get_sreg_base -ida_idd.DBG_HAS_THREAD_SUSPEND (variable) +ida_idd.DBG_HAS_THREAD_SUSPEND supports ev_thread_suspend -ida_idd.DBG_HAS_UPDATE_CALL_STACK (variable) +ida_idd.DBG_HAS_UPDATE_CALL_STACK supports ev_update_call_stack -ida_idd.DBG_HIDE_WINDOW (variable) +ida_idd.DBG_HIDE_WINDOW application should be hidden on startup (windows) -ida_idd.DBG_NO_ASLR (variable) +ida_idd.DBG_NO_ASLR disable ASLR (linux) -ida_idd.DBG_NO_TRACE (variable) +ida_idd.DBG_NO_TRACE do not trace the application (mac/linux) -ida_idd.DBG_PROC_32BIT (variable) +ida_idd.DBG_PROC_32BIT application is 32-bit -ida_idd.DBG_PROC_64BIT (variable) +ida_idd.DBG_PROC_64BIT application is 64-bit -ida_idd.DBG_PROC_IS_DLL (variable) +ida_idd.DBG_PROC_IS_DLL database contains a dll (not exe) -ida_idd.DBG_PROC_IS_GUI (variable) +ida_idd.DBG_PROC_IS_GUI using gui version of ida -ida_idd.DBG_RESMOD_STEP_HANDLE (variable) +ida_idd.DBG_RESMOD_STEP_BACKINTO + RESMOD_BACKINTO is available + +ida_idd.DBG_RESMOD_STEP_HANDLE RESMOD_HANDLE is available -ida_idd.DBG_RESMOD_STEP_INTO (variable) +ida_idd.DBG_RESMOD_STEP_INTO RESMOD_INTO is available -ida_idd.DBG_RESMOD_STEP_OUT (variable) +ida_idd.DBG_RESMOD_STEP_OUT RESMOD_OUT is available -ida_idd.DBG_RESMOD_STEP_OVER (variable) +ida_idd.DBG_RESMOD_STEP_OVER RESMOD_OVER is available -ida_idd.DBG_RESMOD_STEP_SRCINTO (variable) +ida_idd.DBG_RESMOD_STEP_SRCINTO RESMOD_SRCINTO is available -ida_idd.DBG_RESMOD_STEP_SRCOUT (variable) +ida_idd.DBG_RESMOD_STEP_SRCOUT RESMOD_SRCOUT is available -ida_idd.DBG_RESMOD_STEP_SRCOVER (variable) +ida_idd.DBG_RESMOD_STEP_SRCOVER RESMOD_SRCOVER is available -ida_idd.DBG_RESMOD_STEP_USER (variable) +ida_idd.DBG_RESMOD_STEP_USER RESMOD_USER is available -ida_idd.DBG_SUSPENDED (variable) +ida_idd.DBG_SUSPENDED application should be suspended on startup (mac) -ida_idd.DEBUGGER_ID_6811_EMULATOR (variable) +ida_idd.DEBUGGER_ID_6811_EMULATOR MC6812 emulator (beta) -ida_idd.DEBUGGER_ID_ARM_IPHONE_USER (variable) +ida_idd.DEBUGGER_ID_ARM_IPHONE_USER iPhone 1.x -ida_idd.DEBUGGER_ID_ARM_LINUX_USER (variable) +ida_idd.DEBUGGER_ID_ARM_LINUX_USER Userland arm linux. -ida_idd.DEBUGGER_ID_ARM_MACOS_USER (variable) +ida_idd.DEBUGGER_ID_ARM_MACOS_USER Userland arm MAC OS. -ida_idd.DEBUGGER_ID_DALVIK_USER (variable) +ida_idd.DEBUGGER_ID_DALVIK_USER Dalvik. -ida_idd.DEBUGGER_ID_GDB_USER (variable) +ida_idd.DEBUGGER_ID_GDB_USER GDB remote. -ida_idd.DEBUGGER_ID_TRACE_REPLAYER (variable) +ida_idd.DEBUGGER_ID_TRACE_REPLAYER Fake debugger to replay recorded traces. -ida_idd.DEBUGGER_ID_WINDBG (variable) +ida_idd.DEBUGGER_ID_WINDBG WinDBG using Microsoft Debug engine. -ida_idd.DEBUGGER_ID_X86_DOSBOX_EMULATOR (variable) +ida_idd.DEBUGGER_ID_X86_DOSBOX_EMULATOR Dosbox MS-DOS emulator. -ida_idd.DEBUGGER_ID_X86_IA32_BOCHS (variable) +ida_idd.DEBUGGER_ID_X86_IA32_BOCHS BochsDbg.exe 32. -ida_idd.DEBUGGER_ID_X86_IA32_LINUX_USER (variable) +ida_idd.DEBUGGER_ID_X86_IA32_LINUX_USER Userland linux processes (ptrace()) -ida_idd.DEBUGGER_ID_X86_IA32_MACOSX_USER (variable) +ida_idd.DEBUGGER_ID_X86_IA32_MACOSX_USER Userland MAC OS X processes. -ida_idd.DEBUGGER_ID_X86_IA32_WIN32_USER (variable) +ida_idd.DEBUGGER_ID_X86_IA32_WIN32_USER Userland win32 processes (win32 debugging APIs) -ida_idd.DEBUGGER_ID_X86_PIN_TRACER (variable) +ida_idd.DEBUGGER_ID_X86_PIN_TRACER PIN Tracer module. -ida_idd.DEBUGGER_ID_XNU_USER (variable) +ida_idd.DEBUGGER_ID_XNU_USER XNU Kernel. -ida_idd.DRC_CRC (variable) +ida_idd.DRC_CRC success, but the input file crc does not match -ida_idd.DRC_ERROR (variable) +ida_idd.DRC_ERROR unclassified error, may be complemented by errbuf -ida_idd.DRC_EVENTS (variable) +ida_idd.DRC_EVENTS success, there are pending events -ida_idd.DRC_FAILED (variable) +ida_idd.DRC_FAILED failed or false -ida_idd.DRC_IDBSEG (variable) +ida_idd.DRC_IDBSEG use idb segmentation -ida_idd.DRC_NETERR (variable) +ida_idd.DRC_NETERR network error -ida_idd.DRC_NOCHG (variable) +ida_idd.DRC_NOCHG no changes -ida_idd.DRC_NOFILE (variable) +ida_idd.DRC_NOFILE file not found -ida_idd.DRC_NONE (variable) +ida_idd.DRC_NONE reaction to the event not implemented -ida_idd.DRC_NOPROC (variable) +ida_idd.DRC_NOPROC the process does not exist anymore -ida_idd.DRC_OK (variable) +ida_idd.DRC_OK success -ida_idd.EXCEPTION (variable) +ida_idd.EXCEPTION Exception. -ida_idd.EXC_BREAK (variable) +ida_idd.EXC_BREAK break on the exception -ida_idd.EXC_HANDLE (variable) +ida_idd.EXC_HANDLE should be handled by the debugger? -ida_idd.EXC_MSG (variable) +ida_idd.EXC_MSG instead of a warning, log the exception to the output window -ida_idd.EXC_SILENT (variable) +ida_idd.EXC_SILENT do not warn or log to the output window -ida_idd.IDD_INTERFACE_VERSION (variable) +ida_idd.FUNC_TRACE + function tracing + +ida_idd.IDD_INTERFACE_VERSION The IDD interface version number. -ida_idd.INFORMATION (variable) - User-defined information. This event can be used to return empty information - This will cause IDA to call get_debug_event() immediately once more. +ida_idd.INFORMATION + User-defined information. This event can be used to return empty information This will cause IDA to call get_debug_event() immediately once more. + -ida_idd.LIB_LOADED (variable) +ida_idd.INSN_TRACE + instruction tracing + +ida_idd.LIB_LOADED New library has been loaded. -ida_idd.LIB_UNLOADED (variable) +ida_idd.LIB_UNLOADED Library has been unloaded. -ida_idd.NO_EVENT (variable) - Not an interesting event. This event can be used if the debugger module needs to - return an event but there are no valid events. +ida_idd.NO_EVENT + Not an interesting event. This event can be used if the debugger module needs to return an event but there are no valid events. + -ida_idd.NO_PROCESS (variable) +ida_idd.NO_PROCESS No process. -ida_idd.NO_THREAD (variable) - 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.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.PROCESS_ATTACHED (variable) +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.PROCESS_ATTACHED Successfully attached to running process. -ida_idd.PROCESS_DETACHED (variable) +ida_idd.PROCESS_DETACHED Successfully detached from process. -ida_idd.PROCESS_EXITED (variable) +ida_idd.PROCESS_EXITED Process has been stopped. -ida_idd.PROCESS_STARTED (variable) +ida_idd.PROCESS_STARTED New process has been started. -ida_idd.PROCESS_SUSPENDED (variable) - Process has been suspended. This event can be used by the debugger module to - signal if the process spontaneously gets suspended (not because of an exception, - breakpoint, or single step). IDA will silently switch to the 'suspended process' - mode without displaying any messages. +ida_idd.PROCESS_SUSPENDED + Process has been suspended. This event can be used by the debugger module to signal if the process spontaneously gets suspended (not because of an exception, breakpoint, or single step). IDA will silently switch to the 'suspended process' mode without displaying any messages. + -ida_idd.REGISTER_ADDRESS (variable) +ida_idd.REGISTER_ADDRESS may contain an address -ida_idd.REGISTER_CS (variable) +ida_idd.REGISTER_CS code segment -ida_idd.REGISTER_CUSTFMT (variable) - 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_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 (variable) +ida_idd.REGISTER_FP frame pointer -ida_idd.REGISTER_IP (variable) +ida_idd.REGISTER_IP instruction pointer -ida_idd.REGISTER_NOLF (variable) - displays this register without returning to the next line, allowing the next - register to be displayed to its right (on the same line) +ida_idd.REGISTER_NOLF + displays this register without returning to the next line, allowing the next register to be displayed to its right (on the same line) + -ida_idd.REGISTER_READONLY (variable) +ida_idd.REGISTER_READONLY the user can't modify the current value of this register -ida_idd.REGISTER_SP (variable) +ida_idd.REGISTER_SP stack pointer -ida_idd.REGISTER_SS (variable) +ida_idd.REGISTER_SS stack segment -ida_idd.RESMOD_HANDLE (variable) +ida_idd.RESMOD_BACKINTO + step backwards into call (in time-travel debugging) + +ida_idd.RESMOD_HANDLE step into the exception handler -ida_idd.RESMOD_INTO (variable) +ida_idd.RESMOD_INTO step into call (the most typical single stepping) -ida_idd.RESMOD_NONE (variable) +ida_idd.RESMOD_NONE no stepping, run freely -ida_idd.RESMOD_OUT (variable) +ida_idd.RESMOD_OUT step out of the current function (run until return) -ida_idd.RESMOD_OVER (variable) +ida_idd.RESMOD_OVER step over call -ida_idd.RESMOD_SRCINTO (variable) +ida_idd.RESMOD_SRCINTO until control reaches a different source line -ida_idd.RESMOD_SRCOUT (variable) +ida_idd.RESMOD_SRCOUT next source line in the previous stack frame -ida_idd.RESMOD_SRCOVER (variable) +ida_idd.RESMOD_SRCOVER next source line in the current stack frame -ida_idd.RESMOD_USER (variable) +ida_idd.RESMOD_USER step out to the user code -ida_idd.RVT_FLOAT (variable) +ida_idd.RQ_IDAIDLE + handle_debug_event: ida is idle + +ida_idd.RQ_IGNWERR + ignore breakpoint write failures + +ida_idd.RQ_MASKING + masking step handler: unless errors, tmpbpt handlers won't be generated should be used only with request_internal_step() + + +ida_idd.RQ_NOSUSP + running step handler: continues the app + +ida_idd.RQ_PROCEXIT + snapshots: the process is exiting + +ida_idd.RQ_RESMOD + resume_mode_t + +ida_idd.RQ_RESUME + handle_debug_event: resume application + +ida_idd.RQ_SILENT + all: no dialog boxes + +ida_idd.RQ_SUSPEND + suspending step handler: suspends the app handle_debug_event: suspends the app + + +ida_idd.RQ_SUSPRUN + handle_debug_event: suspend at PROCESS_STARTED + +ida_idd.RQ_SWSCREEN + handle_debug_event: switch screens + +ida_idd.RQ_VERBOSE + all: display dialog boxes + +ida_idd.RQ__NOTHRRF + handle_debug_event: do not refresh threads + +ida_idd.RVT_FLOAT floating point -ida_idd.RVT_INT (variable) +ida_idd.RVT_INT integer -ida_idd.RVT_UNAVAILABLE (variable) - unavailable; other values mean custom data type +ida_idd.RVT_UNAVAILABLE + unavailable; other values mean custom data type + -ida_idd.STEP (variable) - One instruction has been executed. Spurious events of this kind are silently - ignored by IDA. +ida_idd.STATUS_MASK + additional info about process state -ida_idd.THREAD_EXITED (variable) +ida_idd.STEP + One instruction has been executed. Spurious events of this kind are silently ignored by IDA. + + +ida_idd.STEP_TRACE + lowest level trace. trace buffers are not maintained + +ida_idd.THREAD_EXITED Thread has been stopped. -ida_idd.THREAD_STARTED (variable) +ida_idd.THREAD_STARTED New thread has been started. -ida_idd.TRACE_FULL (variable) - The trace buffer of the tracer module is full and IDA needs to read it before - continuing +ida_idd.TRACE_FULL + The trace buffer of the tracer module is full and IDA needs to read it before continuing + -ida_idd.appcall (function) - appcall(func_ea, tid, _type_or_none, _fields, arg_list) -> PyObject * - - @param func_ea: ea_t - @param tid: thid_t - @param _type_or_none: bytevec_t const & - @param _fields: bytevec_t const & - @param arg_list: PyObject * +ida_idd.appcall(func_ea: ida_idaapi.ea_t, tid: "thid_t", _type_or_none: "bytevec_t const &", _fields: "bytevec_t const &", arg_list: "PyObject *") -> "PyObject *" -ida_idd.bptaddr_t (class) - Proxy of C++ bptaddr_t class. +ida_idd.bptaddr_t -ida_idd.bptaddr_t.__init__ (method) - __init__(self) -> bptaddr_t +ida_idd.bptaddr_t.__init__(self) -ida_idd.bptaddr_t.hea (variable) +ida_idd.bptaddr_t.hea Possible address referenced by hardware breakpoints. -ida_idd.bptaddr_t.kea (variable) - Address of the triggered bpt from the kernel's point of view. (for some systems - with special memory mappings, the triggered ea might be different from event - ea). Use to BADADDR for flat memory model. +ida_idd.bptaddr_t.kea + Address of the triggered bpt from the kernel's point of view. (for some systems with special memory mappings, the triggered ea might be different from event ea). Use to BADADDR for flat memory model. + -ida_idd.call_stack_info_t (class) - Proxy of C++ call_stack_info_t class. +ida_idd.call_stack_info_t -ida_idd.call_stack_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: call_stack_info_t const & +ida_idd.call_stack_info_t.__eq__(self, r: "call_stack_info_t") -> bool -ida_idd.call_stack_info_t.__init__ (method) - __init__(self) -> call_stack_info_t +ida_idd.call_stack_info_t.__init__(self) -ida_idd.call_stack_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: call_stack_info_t const & +ida_idd.call_stack_info_t.__ne__(self, r: "call_stack_info_t") -> bool -ida_idd.call_stack_info_t.callea (variable) - the address of the call instruction. for the 0th frame this is usually just the - current value of EIP. +ida_idd.call_stack_info_t.callea + the address of the call instruction. for the 0th frame this is usually just the current value of EIP. + -ida_idd.call_stack_info_t.fp (variable) +ida_idd.call_stack_info_t.fp the value of the frame pointer of the called function -ida_idd.call_stack_info_t.funcea (variable) +ida_idd.call_stack_info_t.funcea the address of the called function -ida_idd.call_stack_info_t.funcok (variable) +ida_idd.call_stack_info_t.funcok is the function present? -ida_idd.call_stack_info_vec_t (class) - Proxy of C++ qvector< call_stack_info_t > class. +ida_idd.call_stack_info_vec_t -ida_idd.call_stack_info_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< call_stack_info_t > const & +ida_idd.call_stack_info_vec_t.__eq__(self, r: "call_stack_info_vec_t") -> bool -ida_idd.call_stack_info_vec_t.__getitem__ (method) - __getitem__(self, i) -> call_stack_info_t - - @param i: size_t +ida_idd.call_stack_info_vec_t.__getitem__(self, i: "size_t") -> "call_stack_info_t const &" -ida_idd.call_stack_info_vec_t.__init__ (method) - __init__(self) -> call_stack_info_vec_t - __init__(self, x) -> call_stack_info_vec_t - - @param x: qvector< call_stack_info_t > const & +ida_idd.call_stack_info_vec_t.__init__(self, *args) -ida_idd.call_stack_info_vec_t.__len__ (method) - __len__(self) -> size_t +ida_idd.call_stack_info_vec_t.__len__(self) -> "size_t" -ida_idd.call_stack_info_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< call_stack_info_t > const & +ida_idd.call_stack_info_vec_t.__ne__(self, r: "call_stack_info_vec_t") -> bool -ida_idd.call_stack_info_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: call_stack_info_t const & +ida_idd.call_stack_info_vec_t.__setitem__(self, i: "size_t", v: "call_stack_info_t") -> None -ida_idd.call_stack_info_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: call_stack_info_t const & +ida_idd.call_stack_info_vec_t._del(self, x: "call_stack_info_t") -> bool -ida_idd.call_stack_info_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: call_stack_info_t const & +ida_idd.call_stack_info_vec_t.add_unique(self, x: "call_stack_info_t") -> bool -ida_idd.call_stack_info_vec_t.at (method) - at(self, _idx) -> call_stack_info_t - - @param _idx: size_t +ida_idd.call_stack_info_vec_t.append(self, x: "call_stack_info_t") -> None -ida_idd.call_stack_info_vec_t.begin (method) - begin(self) -> call_stack_info_t +ida_idd.call_stack_info_vec_t.at(self, _idx: "size_t") -> "call_stack_info_t const &" -ida_idd.call_stack_info_vec_t.capacity (method) - capacity(self) -> size_t +ida_idd.call_stack_info_vec_t.begin(self, *args) -> "qvector< call_stack_info_t >::const_iterator" -ida_idd.call_stack_info_vec_t.clear (method) - clear(self) +ida_idd.call_stack_info_vec_t.capacity(self) -> "size_t" -ida_idd.call_stack_info_vec_t.empty (method) - empty(self) -> bool +ida_idd.call_stack_info_vec_t.clear(self) -> None -ida_idd.call_stack_info_vec_t.end (method) - end(self) -> call_stack_info_t +ida_idd.call_stack_info_vec_t.empty(self) -> bool -ida_idd.call_stack_info_vec_t.erase (method) - erase(self, it) -> call_stack_info_t - - @param it: qvector< call_stack_info_t >::iterator - - erase(self, first, last) -> call_stack_info_t - - @param first: qvector< call_stack_info_t >::iterator - @param last: qvector< call_stack_info_t >::iterator +ida_idd.call_stack_info_vec_t.end(self, *args) -> "qvector< call_stack_info_t >::const_iterator" -ida_idd.call_stack_info_vec_t.extract (method) - extract(self) -> call_stack_info_t +ida_idd.call_stack_info_vec_t.erase(self, *args) -> "qvector< call_stack_info_t >::iterator" -ida_idd.call_stack_info_vec_t.find (method) - find(self, x) -> call_stack_info_t - - @param x: call_stack_info_t const & +ida_idd.call_stack_info_vec_t.extend(self, x: "call_stack_info_vec_t") -> None -ida_idd.call_stack_info_vec_t.grow (method) - grow(self, x=call_stack_info_t()) - - @param x: call_stack_info_t const & +ida_idd.call_stack_info_vec_t.extract(self) -> "call_stack_info_t *" -ida_idd.call_stack_info_vec_t.has (method) - has(self, x) -> bool - - @param x: call_stack_info_t const & +ida_idd.call_stack_info_vec_t.find(self, *args) -> "qvector< call_stack_info_t >::const_iterator" -ida_idd.call_stack_info_vec_t.inject (method) - inject(self, s, len) - - @param s: call_stack_info_t * - @param len: size_t +ida_idd.call_stack_info_vec_t.grow(self, *args) -> None -ida_idd.call_stack_info_vec_t.insert (method) - insert(self, it, x) -> call_stack_info_t - - @param it: qvector< call_stack_info_t >::iterator - @param x: call_stack_info_t const & +ida_idd.call_stack_info_vec_t.has(self, x: "call_stack_info_t") -> bool -ida_idd.call_stack_info_vec_t.pop_back (method) - pop_back(self) +ida_idd.call_stack_info_vec_t.inject(self, s: "call_stack_info_t", len: "size_t") -> None -ida_idd.call_stack_info_vec_t.push_back (method) - push_back(self, x) - - @param x: call_stack_info_t const & - - push_back(self) -> call_stack_info_t +ida_idd.call_stack_info_vec_t.insert(self, it: "call_stack_info_t", x: "call_stack_info_t") -> "qvector< call_stack_info_t >::iterator" -ida_idd.call_stack_info_vec_t.qclear (method) - qclear(self) +ida_idd.call_stack_info_vec_t.pop_back(self) -> None -ida_idd.call_stack_info_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_idd.call_stack_info_vec_t.push_back(self, *args) -> "call_stack_info_t &" -ida_idd.call_stack_info_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: call_stack_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_idd.call_stack_info_vec_t.qclear(self) -> None -ida_idd.call_stack_info_vec_t.size (method) - size(self) -> size_t +ida_idd.call_stack_info_vec_t.reserve(self, cnt: "size_t") -> None -ida_idd.call_stack_info_vec_t.swap (method) - swap(self, r) - - @param r: qvector< call_stack_info_t > & +ida_idd.call_stack_info_vec_t.resize(self, *args) -> None -ida_idd.call_stack_info_vec_t.truncate (method) - truncate(self) +ida_idd.call_stack_info_vec_t.size(self) -> "size_t" -ida_idd.call_stack_t (class) - Proxy of C++ call_stack_t class. +ida_idd.call_stack_info_vec_t.swap(self, r: "call_stack_info_vec_t") -> None -ida_idd.call_stack_t.__init__ (method) - __init__(self) -> call_stack_t +ida_idd.call_stack_info_vec_t.truncate(self) -> None -ida_idd.can_exc_continue (function) - can_exc_continue(ev) -> bool - - @param ev: debug_event_t const * +ida_idd.call_stack_t -ida_idd.cleanup_appcall (function) - cleanup_appcall(tid) -> error_t - Cleanup after manual appcall. - - @param tid: (C++: thid_t) 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. - @return: eOk if successful, otherwise an error code +ida_idd.call_stack_t.__init__(self) -ida_idd.dbg_appcall (function) - dbg_appcall(retval, func_ea, tid, ptif, argv, argnum) -> error_t - Call a function from the debugged application. - - @param retval: (C++: idc_value_t *) function return value +ida_idd.can_exc_continue(ev: "debug_event_t") -> bool + +ida_idd.cleanup_appcall(tid: "thid_t") -> "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. + @returns eOk if successful, otherwise an error code + +ida_idd.cpu2ieee(ieee_out: "fpvalue_t *", cpu_fpval: "void const *", size: int) -> int + Convert a floating point number in CPU native format to IDA's internal format. + + @param ieee_out: output buffer + @param cpu_fpval: floating point number in CPU native format + @param size: size of cpu_fpval in bytes (size of the input buffer) + @returns Floating point/IEEE Conversion codes + +ida_idd.dbg_appcall(retval: "idc_value_t *", func_ea: ida_idaapi.ea_t, tid: "thid_t", ptif: "tinfo_t", argv: "idc_value_t *", argnum: "size_t") -> "error_t" + Call a function from the debugged application. + + @param retval: function return value * for APPCALL_MANUAL, r will hold the new stack point value - * for APPCALL_DEBEV, r will hold the exception information upon failure and the - return code will be eExecThrow - @param func_ea: (C++: ea_t) address to call - @param tid: (C++: thid_t) thread to use. NO_THREAD means to use the current thread - @param ptif: (C++: const tinfo_t *) pointer to type of the function to call - @param argv: (C++: idc_value_t *) array of arguments - @param argnum: (C++: size_t) number of actual arguments - @return: eOk if successful, otherwise an error code + * for APPCALL_DEBEV, r will hold the exception information upon failure and the return code will be eExecThrow + @param func_ea: address to call + @param tid: thread to use. NO_THREAD means to use the current thread + @param ptif: pointer to type of the function to call + @param argv: array of arguments + @param argnum: number of actual arguments + @returns eOk if successful, otherwise an error code -ida_idd.dbg_get_memory_info (function) - dbg_get_memory_info() -> PyObject * +ida_idd.dbg_get_memory_info() This function returns the memory configuration of a debugged process. - @return: None if no debugger is active + @return: + None if no debugger is active tuple(start_ea, end_ea, name, sclass, sbase, bitness, perm) -ida_idd.dbg_get_name (function) - dbg_get_name() -> PyObject * +ida_idd.dbg_get_name() This function returns the current debugger's name. @return: Debugger name or None if no debugger is active -ida_idd.dbg_get_registers (function) - dbg_get_registers() -> PyObject * +ida_idd.dbg_get_registers() 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 + @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 (function) - dbg_get_thread_sreg_base(tid, sreg_value) -> PyObject * +ida_idd.dbg_get_thread_sreg_base(tid, sreg_value) Returns the segment register base value @param tid: thread id @param sreg_value: segment register (selector) value - @return: - The base as an 'ea' + @return: + - The base as an 'ea' - Or None on failure -ida_idd.dbg_read_memory (function) - dbg_read_memory(ea, sz) -> PyObject * +ida_idd.dbg_read_memory(ea, sz) Reads from the debugee's memory at the specified ea - @param ea: ea_t - @param sz: size_t - @return: - The read buffer (as a string) + @param ea: the debuggee's memory address + @param sz: the amount of data to read + @return: + - The read buffer (as bytes) - Or None on failure -ida_idd.dbg_write_memory (function) - dbg_write_memory(ea, buf) -> bool +ida_idd.dbg_write_memory(ea, buffer) Writes a buffer to the debugee's memory - @param ea: ea_t - @param buf: bytevec_t const & + @param ea: the debuggee's memory address + @param buf: a bytes object to write @return: Boolean -ida_idd.debapp_attrs_t (class) - Proxy of C++ debapp_attrs_t class. +ida_idd.debapp_attrs_t -ida_idd.debapp_attrs_t.__init__ (method) - __init__(self) -> debapp_attrs_t +ida_idd.debapp_attrs_t.__init__(self) -ida_idd.debapp_attrs_t.addrsize (variable) - address size of the process. Since 64-bit debuggers usually can debug 32-bit - applications, we cannot rely on sizeof(ea_t) to detect the current address size. - The following variable should be used instead. It is initialized with 8 for - 64-bit debuggers but they should adjust it as soon as they learn that a 32-bit - application is being debugged. For 32-bit debuggers it is initialized with 4. +ida_idd.debapp_attrs_t.addrsize + address size of the process. Since 64-bit debuggers usually can debug 32-bit applications, we cannot rely on sizeof(ea_t) to detect the current address size. The following variable should be used instead. It is initialized with 8 for 64-bit debuggers but they should adjust it as soon as they learn that a 32-bit application is being debugged. For 32-bit debuggers it is initialized with 4. + -ida_idd.debapp_attrs_t.cbsize (variable) +ida_idd.debapp_attrs_t.cbsize control field: size of this structure -ida_idd.debapp_attrs_t.platform (variable) - platform name process is running/debugging under. (is used as a key value in - exceptions.cfg) +ida_idd.debapp_attrs_t.platform + platform name process is running/debugging under. (is used as a key value in exceptions.cfg) + -ida_idd.debug_event_t (class) - Proxy of C++ debug_event_t class. +ida_idd.debug_event_t -ida_idd.debug_event_t.__init__ (method) - __init__(self) -> debug_event_t - __init__(self, r) -> debug_event_t - - @param r: debug_event_t const & +ida_idd.debug_event_t.__init__(self, *args) -ida_idd.debug_event_t.bpt (method) - bpt(self) -> bptaddr_t +ida_idd.debug_event_t.bpt(self) -> "bptaddr_t &" + EXCEPTION -ida_idd.debug_event_t.bpt_ea (method) - bpt_ea(self) -> ea_t - On some systems with special memory mappings the triggered ea might be different - from the actual ea. Calculate the address to use. +ida_idd.debug_event_t.bpt_ea(self) -> ida_idaapi.ea_t + On some systems with special memory mappings the triggered ea might be different from the actual ea. Calculate the address to use. + -ida_idd.debug_event_t.clear (method) - clear(self) +ida_idd.debug_event_t.clear(self) -> None clear the dependent information (see below), set event code to NO_EVENT -ida_idd.debug_event_t.clear_all (method) - clear_all(self) +ida_idd.debug_event_t.clear_all(self) -> None -ida_idd.debug_event_t.copy (method) - copy(self, r) -> debug_event_t - - @param r: debug_event_t const & +ida_idd.debug_event_t.copy(self, r: "debug_event_t") -> "debug_event_t &" -ida_idd.debug_event_t.ea (variable) +ida_idd.debug_event_t.ea Address where the event occurred. -ida_idd.debug_event_t.eid (method) - eid(self) -> event_id_t +ida_idd.debug_event_t.eid(self) -> "event_id_t" Event code. -ida_idd.debug_event_t.exc (method) - exc(self) -> excinfo_t +ida_idd.debug_event_t.exc(self) -> "excinfo_t &" -ida_idd.debug_event_t.exit_code (method) - exit_code(self) -> int const & +ida_idd.debug_event_t.exit_code(self) -> "int const &" + THREAD_STARTED (thread name) LIB_UNLOADED (unloaded library name) INFORMATION (will be displayed in the output window if not empty) + -ida_idd.debug_event_t.handled (variable) - Is event handled by the debugger?. (from the system's point of view) Meaningful - for EXCEPTION events +ida_idd.debug_event_t.handled + Is event handled by the debugger?. (from the system's point of view) Meaningful for EXCEPTION events + -ida_idd.debug_event_t.info (method) - info(self) -> qstring - info(self) -> qstring const & +ida_idd.debug_event_t.info(self) -> str + BREAKPOINT -ida_idd.debug_event_t.modinfo (method) - modinfo(self) -> modinfo_t +ida_idd.debug_event_t.is_bitness_changed(self) -> bool + process bitness -ida_idd.debug_event_t.pid (variable) +ida_idd.debug_event_t.modinfo(self) -> "modinfo_t &" + Information that depends on the event code: + + < PROCESS_STARTED, PROCESS_ATTACHED, LIB_LOADED PROCESS_EXITED, THREAD_EXITED + + +ida_idd.debug_event_t.pid Process where the event occurred. -ida_idd.debug_event_t.set_bpt (method) - set_bpt(self) -> bptaddr_t +ida_idd.debug_event_t.set_bitness_changed(self, on: bool = True) -> None -ida_idd.debug_event_t.set_eid (method) - set_eid(self, id) - Set event code. If the new event code is compatible with the old one then the - dependent information (see below) will be preserved. Otherwise the event will be - cleared and the new event code will be set. - - @param id: (C++: event_id_t) enum event_id_t +ida_idd.debug_event_t.set_bpt(self) -> "bptaddr_t &" -ida_idd.debug_event_t.set_exception (method) - set_exception(self) -> excinfo_t +ida_idd.debug_event_t.set_eid(self, id: "event_id_t") -> None + Set event code. If the new event code is compatible with the old one then the dependent information (see below) will be preserved. Otherwise the event will be cleared and the new event code will be set. + -ida_idd.debug_event_t.set_exit_code (method) - set_exit_code(self, id, code) - - @param id: enum event_id_t - @param code: int +ida_idd.debug_event_t.set_exception(self) -> "excinfo_t &" -ida_idd.debug_event_t.set_info (method) - set_info(self, id) -> qstring & - - @param id: enum event_id_t +ida_idd.debug_event_t.set_exit_code(self, id: "event_id_t", code: int) -> None -ida_idd.debug_event_t.set_modinfo (method) - set_modinfo(self, id) -> modinfo_t - - @param id: enum event_id_t +ida_idd.debug_event_t.set_info(self, id: "event_id_t") -> str -ida_idd.debug_event_t.tid (variable) +ida_idd.debug_event_t.set_modinfo(self, id: "event_id_t") -> "modinfo_t &" + +ida_idd.debug_event_t.tid Thread where the event occurred. -ida_idd.debugger_t (class) - Proxy of C++ debugger_t class. +ida_idd.debugger_t -ida_idd.debugger_t.__get_bpt_bytes (method) - __get_bpt_bytes(self) -> bytevec_t +ida_idd.debugger_t.__get_bpt_bytes(self) -> "bytevec_t" -ida_idd.debugger_t.__get_nregs (method) - __get_nregs(self) -> int +ida_idd.debugger_t.__get_nregisters(self) -> int -ida_idd.debugger_t.__get_regclasses (method) - __get_regclasses(self) -> PyObject * +ida_idd.debugger_t.__get_regclasses(self) -> "PyObject *" -ida_idd.debugger_t.__get_registers (method) - __get_registers(self) -> dyn_register_info_array +ida_idd.debugger_t.__get_registers(self) -> "dynamic_wrapped_array_t< register_info_t >" -ida_idd.debugger_t.__init__ (method) - __init__(self) -> debugger_t +ida_idd.debugger_t.__init__(self) -ida_idd.debugger_t.attach_process (method) - attach_process(self, pid, event_id, dbg_proc_flags) -> drc_t - - @param pid: pid_t - @param event_id: int - @param dbg_proc_flags: uint32 +ida_idd.debugger_t.attach_process(self, pid: "pid_t", event_id: int, dbg_proc_flags: int) -> "drc_t" -ida_idd.debugger_t.bin_search (method) - bin_search(self, start_ea, end_ea, data, srch_flags) -> drc_t - - @param start_ea: ea_t - @param end_ea: ea_t - @param data: compiled_binpat_vec_t const & - @param srch_flags: int +ida_idd.debugger_t.bin_search(self, start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, data: "compiled_binpat_vec_t const &", srch_flags: int) -> "drc_t" -ida_idd.debugger_t.bpt_bytes (variable) +ida_idd.debugger_t.bpt_bytes A software breakpoint instruction. -ida_idd.debugger_t.bpt_size (variable) +ida_idd.debugger_t.bpt_size Size of the software breakpoint instruction in bytes. -ida_idd.debugger_t.cache_block_size (method) - cache_block_size(self) -> size_t +ida_idd.debugger_t.cache_block_size(self) -> "size_t" -ida_idd.debugger_t.can_continue_from_bpt (method) - can_continue_from_bpt(self) -> bool +ida_idd.debugger_t.can_continue_from_bpt(self) -> bool -ida_idd.debugger_t.can_debug_standalone_dlls (method) - can_debug_standalone_dlls(self) -> bool +ida_idd.debugger_t.can_debug_standalone_dlls(self) -> bool -ida_idd.debugger_t.check_bpt (method) - check_bpt(self, bptvc, type, ea, len) -> drc_t - - @param bptvc: int * - @param type: bpttype_t - @param ea: ea_t - @param len: int +ida_idd.debugger_t.check_bpt(self, bptvc: "int *", type: "bpttype_t", ea: ida_idaapi.ea_t, len: int) -> "drc_t" -ida_idd.debugger_t.cleanup_appcall (method) - cleanup_appcall(self, tid) -> drc_t - - @param tid: thid_t +ida_idd.debugger_t.cleanup_appcall(self, tid: "thid_t") -> "drc_t" -ida_idd.debugger_t.close_file (method) - close_file(self, fn) - - @param fn: int +ida_idd.debugger_t.close_file(self, fn: int) -> None -ida_idd.debugger_t.dbg_enable_trace (method) - dbg_enable_trace(self, tid, enable, trace_flags) -> bool - - @param tid: thid_t - @param enable: bool - @param trace_flags: int +ida_idd.debugger_t.dbg_enable_trace(self, tid: "thid_t", enable: bool, trace_flags: int) -> bool -ida_idd.debugger_t.default_regclasses (variable) +ida_idd.debugger_t.default_regclasses Mask of default printed register classes. -ida_idd.debugger_t.detach_process (method) - detach_process(self) -> drc_t - -ida_idd.debugger_t.ev_appcall (variable) - Call application function. This event calls a function from the debugged - application. This event is generated in debthread Available if HAS_APPCALL is - set - - @retval DRC_NONE - @retval DRC_OK,see: BLOB_EA - -ida_idd.debugger_t.ev_attach_process (variable) - Attach to an existing running process. event_id should be equal to -1 if not - attaching to a crashed process. This event is generated in debthread. Available - if DBG_HAS_ATTACH_PROCESS is set - - @return: DRC_NONE, DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_bin_search (variable) - Search for a binary pattern in the program. - - @return: DRC_OK EA contains the binary pattern address - @retval DRC_FAILED: not found - @retval DRC_NONE: not implemented - @retval DRC_NETERR,DRC_ERROR - -ida_idd.debugger_t.ev_check_bpt (variable) - Is it possible to set breakpoint? This event is generated in debthread or in the - main thread if debthread is not running yet. It is generated to verify hardware - breakpoints. Available if DBG_HAS_CHECK_BPT is set - - @return: DRC_OK, DRC_NONE - -ida_idd.debugger_t.ev_cleanup_appcall (variable) - Cleanup after appcall(). The debugger module must keep the stack blob in the - memory until this event is generated. It will be generated by the kernel for - each successful appcall(). There is an exception: if APPCALL_MANUAL, IDA may not - call cleanup_appcall. If the user selects to terminate a manual appcall, then - cleanup_appcall will be generated. Otherwise, the debugger module should - terminate the appcall when the generated event returns. This event is generated - in debthread. Available if HAS_APPCALL is set - - @retval DRC_EVENTS: success, there are pending events - @retval DRC_OK: success - @retval DRC_FAILED: failed - @retval DRC_NETERR: network error - -ida_idd.debugger_t.ev_close_file (variable) - @return: ignored - -ida_idd.debugger_t.ev_dbg_enable_trace (variable) - Enable/Disable tracing. The kernel will generated this event if the debugger - plugin set DBG_FLAG_TRACER_MODULE. TRACE_FLAGS can be a set of #STEP_TRACE, - #INSN_TRACE, #BBLK_TRACE or #FUNC_TRACE. This event is generated in the main - thread. - - @return: DRC_OK, DRC_FAILED, DRC_NONE - -ida_idd.debugger_t.ev_detach_process (variable) - Detach from the debugged process. May be generated while the process is running - or suspended. Must detach from the process in any case. The kernel will - repeatedly call get_debug_event() until PROCESS_DETACHED is received. In this - mode, all other events will be automatically handled and process will be - resumed. This event is generated from debthread. Available if - DBG_HAS_DETACH_PROCESS is set - - @return: DRC_NONE, DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_eval_lowcnd (variable) - Evaluate a low level breakpoint condition at 'ea'. Other evaluation errors are - displayed in a dialog box. This call is used by IDA when the process has already - been temporarily suspended for some reason and IDA has to decide whether the - process should be resumed or definitely suspended because of a breakpoint with a - low level condition. This event is generated in debthread. - - @retval DRC_OK: condition is satisfied - @retval DRC_FAILED: not satisfied - @retval DRC_NETERR: network error - -ida_idd.debugger_t.ev_exit_process (variable) - Stop the process. May be generated while the process is running or suspended. - Must terminate the process in any case. The kernel will repeatedly call - get_debug_event() until PROCESS_EXITED is received. In this mode, all other - events will be automatically handled and process will be resumed. This event is - generated in debthread. Must be implemented. - - @return: DRC_NONE, DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_get_debapp_attrs (variable) - Retrieve process- and debugger-specific runtime attributes. This event is - generated in the main thread. - - @return: DRC_NONE, DRC_OK - -ida_idd.debugger_t.ev_get_debmod_extensions (variable) - Get pointer to debugger specific events. This event returns a pointer to a - structure that holds pointers to debugger module specific events. For - information on the structure layout, please check the corresponding debugger - module. Most debugger modules return nullptr because they do not have any - extensions. Available extensions may be generated from plugins. This event is - generated in the main thread. - - @return: DRC_NONE, DRC_OK see EXT - -ida_idd.debugger_t.ev_get_debug_event (variable) - Get a pending debug event and suspend the process. This event will be generated - regularly by IDA. This event is generated in debthread. IMPORTANT: the - BREAKPOINT/EXCEPTION/STEP events must be reported only after reporting other - pending events for a thread. Must be implemented. - - @retval ignored - -ida_idd.debugger_t.ev_get_memory_info (variable) - Get information on the memory ranges. The debugger module fills 'ranges'. The - returned vector must be sorted. This event is generated in debthread. Must be - implemented. - - @retval DRC_OK: new memory layout is returned - @retval DRC_FAILED,DRC_NETERR,DRC_NOPROC,DRC_NOCHG,DRC_IDBSEG - -ida_idd.debugger_t.ev_get_processes (variable) - Return information about the running processes. This event is generated in the - main thread. Available if DBG_HAS_GET_PROCESSES is set - - @return: DRC_NONE, DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_get_srcinfo_path (variable) - Get the path to a file containing source debug info for the given module. This - allows srcinfo providers to call into the debugger when looking for debug info. - It is useful in certain cases like the iOS debugger, which is a remote debugger - but the remote debugserver does not provide dwarf info. So, we allow the - debugger client to decide where to look for debug info locally. - - @return: DRC_NONE, DRC_OK result stored in PATH - -ida_idd.debugger_t.ev_init_debugger (variable) - Initialize debugger. This event is generated in the main thread. - - @return: DRC_OK, DRC_FAILED - -ida_idd.debugger_t.ev_is_tracing_enabled (variable) - Is tracing enabled? The kernel will generated this event if the debugger plugin - set DBG_FLAG_TRACER_MODULE. TRACE_BIT can be one of the following: #STEP_TRACE, - #INSN_TRACE, #BBLK_TRACE or #FUNC_TRACE - - @retval DRC_OK: bit is set - @retval DRC_NONE: bit is not set or not implemented - -ida_idd.debugger_t.ev_map_address (variable) - Map process address. The debugger module may ignore this event. This event is - generated in debthread. IDA will generate this event only if DBG_HAS_MAP_ADDRESS - is set. - - @return: DRC_NONE, DRC_OK see MAPPED - -ida_idd.debugger_t.ev_open_file (variable) - @retval (int): handle - @retval -1: error - -ida_idd.debugger_t.ev_read_file (variable) - @retval number: of read bytes - -ida_idd.debugger_t.ev_read_memory (variable) - Read process memory. This event is generated in debthread. - - @return: DRC_OK, DRC_FAILED, DRC_NOPROC - -ida_idd.debugger_t.ev_read_registers (variable) - Read thread registers. This event is generated in debthread. Must be - implemented. - - @return: DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_rebase_if_required_to (variable) - Rebase database if the debugged program has been rebased by the system. This - event is generated in the main thread. - - @return: DRC_NONE, DRC_OK - -ida_idd.debugger_t.ev_request_pause (variable) - Prepare to pause the process. Normally the next get_debug_event() will pause the - process If the process is sleeping, then the pause will not occur until the - process wakes up. If the debugger module does not react to this event, then it - will be impossible to pause the program. This event is generated in debthread. - Available if DBG_HAS_REQUEST_PAUSE is set - - @return: DRC_NONE, DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_resume (variable) - Continue after handling the event. This event is generated in debthread. Must be - implemented. - - @return: DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_rexec (variable) - Execute a command on the remote computer. Available if DBG_HAS_REXEC is set - - @return: (int) exit code - -ida_idd.debugger_t.ev_send_ioctl (variable) - Perform a debugger-specific event. This event is generated in debthread - - @retval DRC_... - -ida_idd.debugger_t.ev_set_exception_info (variable) - Set exception handling. This event is generated in debthread or the main thread. - Available if DBG_HAS_SET_EXCEPTION_INFO is set - - @return: DRC_NONE, DRC_OK - -ida_idd.debugger_t.ev_set_resume_mode (variable) - Specify resume action Available if DBG_HAS_SET_RESUME_MODE is set - -ida_idd.debugger_t.ev_start_process (variable) - Start an executable to debug. This event is generated in debthread. Must be - implemented. - - @return: DRC_OK, DRC_CRC, DRC_FAILED, DRC_NETERR, DRC_NOFILE - -ida_idd.debugger_t.ev_suspended (variable) - This event will be generated by the kernel each time it has suspended the - debuggee process and refreshed the database. The debugger module may add - information to the database if necessary. - - The reason for introducing this event is that when an event like LOAD_DLL - happens, the database does not reflect the memory state yet and therefore we - can't add information about the dll into the database in the get_debug_event() - function. Only when the kernel has adjusted the database we can do it. Example: - for loaded PE DLLs we can add the exported function names to the list of debug - names (see set_debug_names()). - - This event is generated in the main thread. - - @return: DRC_NONE, DRC_OK - -ida_idd.debugger_t.ev_term_debugger (variable) - Terminate debugger. This event is generated in the main thread. - - @return: DRC_OK, DRC_FAILED - -ida_idd.debugger_t.ev_thread_continue (variable) - Resume a suspended thread Available if DBG_HAS_THREAD_CONTINUE is set - -ida_idd.debugger_t.ev_thread_get_sreg_base (variable) - Get information about the base of a segment register. Currently used by the IBM - PC module to resolve references like fs:0. This event is generated in debthread. - Available if DBG_HAS_THREAD_GET_SREG_BASE is set - - @return: DRC_NONE, DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_thread_suspend (variable) - Suspend a running thread Available if DBG_HAS_THREAD_SUSPEND is set - -ida_idd.debugger_t.ev_update_bpts (variable) - Add/del breakpoints. bpts array contains nadd bpts to add, followed by ndel bpts - to del. This event is generated in debthread. - - @return: DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_update_call_stack (variable) - Calculate the call stack trace for the given thread. This event is generated - when the process is suspended and should fill the 'trace' object with the - information about the current call stack. If this event returns DRC_NONE, IDA - will try to invoke a processor-specific mechanism (see - processor_t::ev_update_call_stack). If the current processor module does not - implement stack tracing, then IDA will fall back to a generic algorithm (based - on the frame pointer chain) to calculate the trace. This event is ideal if the - debugging targets manage stack frames in a peculiar way, requiring special - analysis. This event is generated in the main thread. Available if - DBG_HAS_UPDATE_CALL_STACK is set - - @retval DRC_NONE: false or not implemented - @return: DRC_OK success - -ida_idd.debugger_t.ev_update_lowcnds (variable) - Update low-level (server side) breakpoint conditions. This event is generated in - debthread. - - @return: DRC_OK, DRC_NETERR - -ida_idd.debugger_t.ev_write_file (variable) - @retval number: of written bytes - -ida_idd.debugger_t.ev_write_memory (variable) - Write process memory. This event is generated in debthread. - - @retval DRC_OK,DRC_FAILED,DRC_NOPROC - -ida_idd.debugger_t.ev_write_register (variable) - Write one thread register. This event is generated in debthread. Must be - implemented. - - @return: DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.eval_lowcnd (method) - eval_lowcnd(self, tid, ea) -> drc_t - - @param tid: thid_t - @param ea: ea_t - -ida_idd.debugger_t.exit_process (method) - exit_process(self) -> drc_t - -ida_idd.debugger_t.fake_memory (method) - fake_memory(self) -> bool - -ida_idd.debugger_t.filetype (variable) - Input file type for the instant debugger. This value will be used after - attaching to a new process. - -ida_idd.debugger_t.flags2 (variable) - Debugger module features - -ida_idd.debugger_t.get_debapp_attrs (method) - get_debapp_attrs(self, out_pattrs) -> bool - - @param out_pattrs: debapp_attrs_t * - -ida_idd.debugger_t.get_debmod_extensions (method) - get_debmod_extensions(self) -> void const * - -ida_idd.debugger_t.get_debug_event (method) - get_debug_event(self, event, timeout_ms) -> gdecode_t - - @param event: debug_event_t * - @param timeout_ms: int - -ida_idd.debugger_t.get_memory_info (method) - get_memory_info(self, ranges) -> drc_t - - @param ranges: meminfo_vec_t & - -ida_idd.debugger_t.get_processes (method) - get_processes(self, procs) -> drc_t - - @param procs: procinfo_vec_t * - -ida_idd.debugger_t.get_srcinfo_path (method) - get_srcinfo_path(self, path, base) -> bool - - @param path: qstring * - @param base: ea_t - -ida_idd.debugger_t.has_appcall (method) - has_appcall(self) -> bool - -ida_idd.debugger_t.has_attach_process (method) - has_attach_process(self) -> bool - -ida_idd.debugger_t.has_check_bpt (method) - has_check_bpt(self) -> bool - -ida_idd.debugger_t.has_detach_process (method) - has_detach_process(self) -> bool - -ida_idd.debugger_t.has_get_processes (method) - has_get_processes(self) -> bool +ida_idd.debugger_t.detach_process(self) -> "drc_t" -ida_idd.debugger_t.has_map_address (method) - has_map_address(self) -> bool - -ida_idd.debugger_t.has_open_file (method) - has_open_file(self) -> bool +ida_idd.debugger_t.ev_appcall + Call application function. This event calls a function from the debugged application. This event is generated in debthread Available if HAS_APPCALL is set + -ida_idd.debugger_t.has_request_pause (method) - has_request_pause(self) -> bool +ida_idd.debugger_t.ev_attach_process + Attach to an existing running process. event_id should be equal to -1 if not attaching to a crashed process. This event is generated in debthread. Available if DBG_HAS_ATTACH_PROCESS is set + -ida_idd.debugger_t.has_rexec (method) - has_rexec(self) -> bool +ida_idd.debugger_t.ev_bin_search + Search for a binary pattern in the program. + -ida_idd.debugger_t.has_set_exception_info (method) - has_set_exception_info(self) -> bool +ida_idd.debugger_t.ev_check_bpt + Is it possible to set breakpoint? This event is generated in debthread or in the main thread if debthread is not running yet. It is generated to verify hardware breakpoints. Available if DBG_HAS_CHECK_BPT is set + -ida_idd.debugger_t.has_set_resume_mode (method) - has_set_resume_mode(self) -> bool +ida_idd.debugger_t.ev_cleanup_appcall + Cleanup after appcall(). The debugger module must keep the stack blob in the memory until this event is generated. It will be generated by the kernel for each successful appcall(). There is an exception: if APPCALL_MANUAL, IDA may not call cleanup_appcall. If the user selects to terminate a manual appcall, then cleanup_appcall will be generated. Otherwise, the debugger module should terminate the appcall when the generated event returns. This event is generated in debthread. Available if HAS_APPCALL is set + -ida_idd.debugger_t.has_soft_bpt (method) - has_soft_bpt(self) -> bool +ida_idd.debugger_t.ev_dbg_enable_trace + Enable/Disable tracing. The kernel will generated this event if the debugger plugin set DBG_FLAG_TRACER_MODULE. TRACE_FLAGS can be a set of STEP_TRACE, INSN_TRACE, BBLK_TRACE or FUNC_TRACE. This event is generated in the main thread. + -ida_idd.debugger_t.has_thread_continue (method) - has_thread_continue(self) -> bool +ida_idd.debugger_t.ev_detach_process + Detach from the debugged process. May be generated while the process is running or suspended. Must detach from the process in any case. The kernel will repeatedly call get_debug_event() until PROCESS_DETACHED is received. In this mode, all other events will be automatically handled and process will be resumed. This event is generated from debthread. Available if DBG_HAS_DETACH_PROCESS is set + -ida_idd.debugger_t.has_thread_get_sreg_base (method) - has_thread_get_sreg_base(self) -> bool +ida_idd.debugger_t.ev_eval_lowcnd + Evaluate a low level breakpoint condition at 'ea'. Other evaluation errors are displayed in a dialog box. This call is used by IDA when the process has already been temporarily suspended for some reason and IDA has to decide whether the process should be resumed or definitely suspended because of a breakpoint with a low level condition. This event is generated in debthread. + -ida_idd.debugger_t.has_thread_suspend (method) - has_thread_suspend(self) -> bool +ida_idd.debugger_t.ev_exit_process + Stop the process. May be generated while the process is running or suspended. Must terminate the process in any case. The kernel will repeatedly call get_debug_event() until PROCESS_EXITED is received. In this mode, all other events will be automatically handled and process will be resumed. This event is generated in debthread. Must be implemented. + -ida_idd.debugger_t.has_update_call_stack (method) - has_update_call_stack(self) -> bool +ida_idd.debugger_t.ev_get_debapp_attrs + Retrieve process- and debugger-specific runtime attributes. This event is generated in the main thread. + -ida_idd.debugger_t.id (variable) +ida_idd.debugger_t.ev_get_debmod_extensions + Get pointer to debugger specific events. This event returns a pointer to a structure that holds pointers to debugger module specific events. For information on the structure layout, please check the corresponding debugger module. Most debugger modules return nullptr because they do not have any extensions. Available extensions may be generated from plugins. This event is generated in the main thread. + + +ida_idd.debugger_t.ev_get_debug_event + Get a pending debug event and suspend the process. This event will be generated regularly by IDA. This event is generated in debthread. IMPORTANT: the BREAKPOINT/EXCEPTION/STEP events must be reported only after reporting other pending events for a thread. Must be implemented. + + +ida_idd.debugger_t.ev_get_dynamic_register_set + Ask debuger to send dynamic register set + + +ida_idd.debugger_t.ev_get_memory_info + Get information on the memory ranges. The debugger module fills 'ranges'. The returned vector must be sorted. This event is generated in debthread. Must be implemented. + + +ida_idd.debugger_t.ev_get_processes + Return information about the running processes. This event is generated in the main thread. Available if DBG_HAS_GET_PROCESSES is set + + +ida_idd.debugger_t.ev_get_srcinfo_path + Get the path to a file containing source debug info for the given module. This allows srcinfo providers to call into the debugger when looking for debug info. It is useful in certain cases like the iOS debugger, which is a remote debugger but the remote debugserver does not provide dwarf info. So, we allow the debugger client to decide where to look for debug info locally. + + +ida_idd.debugger_t.ev_init_debugger + Initialize debugger. This event is generated in the main thread. + + +ida_idd.debugger_t.ev_is_tracing_enabled + Is tracing enabled? The kernel will generated this event if the debugger plugin set DBG_FLAG_TRACER_MODULE. TRACE_BIT can be one of the following: STEP_TRACE, INSN_TRACE, BBLK_TRACE or FUNC_TRACE + + +ida_idd.debugger_t.ev_map_address + Map process address. The debugger module may ignore this event. This event is generated in debthread. IDA will generate this event only if DBG_HAS_MAP_ADDRESS is set. + + +ida_idd.debugger_t.ev_read_memory + Read process memory. This event is generated in debthread. + + +ida_idd.debugger_t.ev_read_registers + Read thread registers. This event is generated in debthread. Must be implemented. + + +ida_idd.debugger_t.ev_rebase_if_required_to + Rebase database if the debugged program has been rebased by the system. This event is generated in the main thread. + + +ida_idd.debugger_t.ev_request_pause + Prepare to pause the process. Normally the next get_debug_event() will pause the process If the process is sleeping, then the pause will not occur until the process wakes up. If the debugger module does not react to this event, then it will be impossible to pause the program. This event is generated in debthread. Available if DBG_HAS_REQUEST_PAUSE is set + + +ida_idd.debugger_t.ev_resume + Continue after handling the event. This event is generated in debthread. Must be implemented. + + +ida_idd.debugger_t.ev_rexec + Execute a command on the remote computer. Available if DBG_HAS_REXEC is set + + +ida_idd.debugger_t.ev_send_ioctl + Perform a debugger-specific event. This event is generated in debthread + + +ida_idd.debugger_t.ev_set_backwards + Set whether the debugger should continue backwards or forwards. This event is generated in debthread. Available if DBG_FLAG_TTD is set + + +ida_idd.debugger_t.ev_set_dbg_options + Set debugger options (parameters that are specific to the debugger module). + + +ida_idd.debugger_t.ev_set_exception_info + Set exception handling. This event is generated in debthread or the main thread. Available if DBG_HAS_SET_EXCEPTION_INFO is set + + +ida_idd.debugger_t.ev_set_resume_mode + Specify resume action Available if DBG_HAS_SET_RESUME_MODE is set + + +ida_idd.debugger_t.ev_start_process + Start an executable to debug. This event is generated in debthread. Must be implemented. + + +ida_idd.debugger_t.ev_suspended + This event will be generated by the kernel each time it has suspended the debuggee process and refreshed the database. The debugger module may add information to the database if necessary. + The reason for introducing this event is that when an event like LOAD_DLL happens, the database does not reflect the memory state yet and therefore we can't add information about the dll into the database in the get_debug_event() function. Only when the kernel has adjusted the database we can do it. Example: for loaded PE DLLs we can add the exported function names to the list of debug names (see set_debug_names()). + This event is generated in the main thread. + + +ida_idd.debugger_t.ev_term_debugger + Terminate debugger. This event is generated in the main thread. + + +ida_idd.debugger_t.ev_thread_continue + Resume a suspended thread Available if DBG_HAS_THREAD_CONTINUE is set + + +ida_idd.debugger_t.ev_thread_get_sreg_base + Get information about the base of a segment register. Currently used by the IBM PC module to resolve references like fs:0. This event is generated in debthread. Available if DBG_HAS_THREAD_GET_SREG_BASE is set + + +ida_idd.debugger_t.ev_thread_suspend + Suspend a running thread Available if DBG_HAS_THREAD_SUSPEND is set + + +ida_idd.debugger_t.ev_update_bpts + Add/del breakpoints. bpts array contains nadd bpts to add, followed by ndel bpts to del. This event is generated in debthread. + + +ida_idd.debugger_t.ev_update_call_stack + Calculate the call stack trace for the given thread. This event is generated when the process is suspended and should fill the 'trace' object with the information about the current call stack. If this event returns DRC_NONE, IDA will try to invoke a processor-specific mechanism (see processor_t::ev_update_call_stack). If the current processor module does not implement stack tracing, then IDA will fall back to a generic algorithm (based on the frame pointer chain) to calculate the trace. This event is ideal if the debugging targets manage stack frames in a peculiar way, requiring special analysis. This event is generated in the main thread. Available if DBG_HAS_UPDATE_CALL_STACK is set + + +ida_idd.debugger_t.ev_update_lowcnds + Update low-level (server side) breakpoint conditions. This event is generated in debthread. + + +ida_idd.debugger_t.ev_write_memory + Write process memory. This event is generated in debthread. + + +ida_idd.debugger_t.ev_write_register + Write one thread register. This event is generated in debthread. Must be implemented. + + +ida_idd.debugger_t.eval_lowcnd(self, tid: "thid_t", ea: ida_idaapi.ea_t) -> "drc_t" + +ida_idd.debugger_t.exit_process(self) -> "drc_t" + +ida_idd.debugger_t.fake_memory(self) -> bool + +ida_idd.debugger_t.filetype + Input file type for the instant debugger. This value will be used after attaching to a new process. + + +ida_idd.debugger_t.get_debapp_attrs(self, out_pattrs: "debapp_attrs_t") -> bool + +ida_idd.debugger_t.get_debmod_extensions(self) -> "void const *" + +ida_idd.debugger_t.get_debug_event(self, event: "debug_event_t", timeout_ms: int) -> "gdecode_t" + +ida_idd.debugger_t.get_dynamic_register_set(self, regset: "dynamic_register_set_t *") -> bool + +ida_idd.debugger_t.get_memory_info(self, ranges: "meminfo_vec_t") -> "drc_t" + +ida_idd.debugger_t.get_processes(self, procs: "procinfo_vec_t") -> "drc_t" + +ida_idd.debugger_t.get_srcinfo_path(self, path: str, base: ida_idaapi.ea_t) -> bool + +ida_idd.debugger_t.has_appcall(self) -> bool + +ida_idd.debugger_t.has_attach_process(self) -> bool + +ida_idd.debugger_t.has_check_bpt(self) -> bool + +ida_idd.debugger_t.has_detach_process(self) -> bool + +ida_idd.debugger_t.has_get_processes(self) -> bool + +ida_idd.debugger_t.has_map_address(self) -> bool + +ida_idd.debugger_t.has_open_file(self) -> bool + +ida_idd.debugger_t.has_request_pause(self) -> bool + +ida_idd.debugger_t.has_rexec(self) -> bool + +ida_idd.debugger_t.has_set_exception_info(self) -> bool + +ida_idd.debugger_t.has_set_resume_mode(self) -> bool + +ida_idd.debugger_t.has_soft_bpt(self) -> bool + +ida_idd.debugger_t.has_thread_continue(self) -> bool + +ida_idd.debugger_t.has_thread_get_sreg_base(self) -> bool + +ida_idd.debugger_t.has_thread_suspend(self) -> bool + +ida_idd.debugger_t.has_update_call_stack(self) -> bool + +ida_idd.debugger_t.have_set_options(self) -> bool + +ida_idd.debugger_t.id one of Debugger API module id -ida_idd.debugger_t.init_debugger (method) - init_debugger(self, hostname, portnum, password) -> bool - - @param hostname: char const * - @param portnum: int - @param password: char const * +ida_idd.debugger_t.init_debugger(self, hostname: str, portnum: int, password: str) -> bool -ida_idd.debugger_t.is_remote (method) - is_remote(self) -> bool +ida_idd.debugger_t.is_remote(self) -> bool -ida_idd.debugger_t.is_resmod_avail (method) - is_resmod_avail(self, resmod) -> bool - - @param resmod: int +ida_idd.debugger_t.is_resmod_avail(self, resmod: int) -> bool -ida_idd.debugger_t.is_safe (method) - is_safe(self) -> bool +ida_idd.debugger_t.is_safe(self) -> bool -ida_idd.debugger_t.is_tracing_enabled (method) - is_tracing_enabled(self, tid, tracebit) -> bool - - @param tid: thid_t - @param tracebit: int +ida_idd.debugger_t.is_tracing_enabled(self, tid: "thid_t", tracebit: int) -> bool -ida_idd.debugger_t.map_address (method) - map_address(self, off, regs, regnum) -> ea_t - - @param off: ea_t - @param regs: regval_t const * - @param regnum: int +ida_idd.debugger_t.is_ttd(self) -> bool -ida_idd.debugger_t.may_disturb (method) - may_disturb(self) -> bool +ida_idd.debugger_t.map_address(self, off: ida_idaapi.ea_t, regs: "regval_t", regnum: int) -> ida_idaapi.ea_t -ida_idd.debugger_t.may_take_exit_snapshot (method) - may_take_exit_snapshot(self) -> bool +ida_idd.debugger_t.may_disturb(self) -> bool -ida_idd.debugger_t.memory_page_size (variable) +ida_idd.debugger_t.may_take_exit_snapshot(self) -> bool + +ida_idd.debugger_t.memory_page_size Size of a memory page. Usually 4K. -ida_idd.debugger_t.must_have_hostname (method) - must_have_hostname(self) -> bool +ida_idd.debugger_t.must_have_hostname(self) -> bool -ida_idd.debugger_t.name (variable) +ida_idd.debugger_t.name Short debugger name like win32 or linux. -ida_idd.debugger_t.nregs (variable) +ida_idd.debugger_t.nregisters Number of registers. -ida_idd.debugger_t.open_file (method) - open_file(self, file, fsize, readonly) -> int - - @param file: char const * - @param fsize: uint64 * - @param readonly: bool +ida_idd.debugger_t.open_file(self, file: str, fsize: "uint64 *", readonly: bool) -> int -ida_idd.debugger_t.processor (variable) - Required processor name. Used for instant debugging to load the correct - processor module +ida_idd.debugger_t.processor + Required processor name. Used for instant debugging to load the correct processor module + -ida_idd.debugger_t.read_file (method) - read_file(self, fn, off, buf, size) -> ssize_t - - @param fn: int - @param off: qoff64_t - @param buf: void * - @param size: size_t +ida_idd.debugger_t.read_file(self, fn: int, off: "qoff64_t", buf: "void *", size: "size_t") -> "ssize_t" -ida_idd.debugger_t.read_memory (method) - read_memory(self, nbytes, ea, buffer, size) -> drc_t - - @param nbytes: size_t * - @param ea: ea_t - @param buffer: void * - @param size: size_t +ida_idd.debugger_t.read_memory(self, nbytes: "size_t *", ea: ida_idaapi.ea_t, buffer: "void *", size: "size_t") -> "drc_t" -ida_idd.debugger_t.read_registers (method) - read_registers(self, tid, clsmask, values) -> drc_t - - @param tid: thid_t - @param clsmask: int - @param values: regval_t * +ida_idd.debugger_t.read_registers(self, tid: "thid_t", clsmask: int, values: "regval_t") -> "drc_t" -ida_idd.debugger_t.rebase_if_required_to (method) - rebase_if_required_to(self, new_base) - - @param new_base: ea_t +ida_idd.debugger_t.rebase_if_required_to(self, new_base: ida_idaapi.ea_t) -> None -ida_idd.debugger_t.regclasses (variable) +ida_idd.debugger_t.regclasses Array of register class names. -ida_idd.debugger_t.registers (variable) +ida_idd.debugger_t.registers Array of registers. Use regs() to access it. -ida_idd.debugger_t.regs (method) - regs(self, idx) -> register_info_t - - @param idx: int +ida_idd.debugger_t.regs(self, idx: int) -> "register_info_t &" -ida_idd.debugger_t.request_pause (method) - request_pause(self) -> drc_t +ida_idd.debugger_t.request_pause(self) -> "drc_t" -ida_idd.debugger_t.resume (method) - resume(self, event) -> drc_t - - @param event: debug_event_t const * +ida_idd.debugger_t.resume(self, event: "debug_event_t") -> "drc_t" -ida_idd.debugger_t.resume_modes (variable) - Resume modes +ida_idd.debugger_t.resume_modes + Resume modes + -ida_idd.debugger_t.rexec (method) - rexec(self, cmdline) -> int - - @param cmdline: char const * +ida_idd.debugger_t.rexec(self, cmdline: str) -> int -ida_idd.debugger_t.send_ioctl (method) - send_ioctl(self, fn, buf, poutbuf, poutsize) -> drc_t - - @param fn: int - @param buf: void const * - @param poutbuf: void ** - @param poutsize: ssize_t * +ida_idd.debugger_t.send_ioctl(self, fn: int, buf: "void const *", poutbuf: "void **", poutsize: "ssize_t *") -> "drc_t" -ida_idd.debugger_t.set_exception_info (method) - set_exception_info(self, info, qty) - - @param info: exception_info_t const * - @param qty: int +ida_idd.debugger_t.set_backwards(self, backwards: bool) -> "drc_t" -ida_idd.debugger_t.set_resume_mode (method) - set_resume_mode(self, tid, resmod) -> drc_t - - @param tid: thid_t - @param resmod: enum resume_mode_t +ida_idd.debugger_t.set_exception_info(self, info: "exception_info_t", qty: int) -> None -ida_idd.debugger_t.start_process (method) - start_process(self, path, args, envs, startdir, dbg_proc_flags, input_path, input_file_crc32) -> drc_t - - @param path: char const * - @param args: char const * - @param envs: launch_env_t * - @param startdir: char const * - @param dbg_proc_flags: uint32 - @param input_path: char const * - @param input_file_crc32: uint32 +ida_idd.debugger_t.set_resume_mode(self, tid: "thid_t", resmod: "resume_mode_t") -> "drc_t" -ida_idd.debugger_t.supports_debthread (method) - supports_debthread(self) -> bool +ida_idd.debugger_t.start_process(self, path: str, args: str, envs: "launch_env_t", startdir: str, dbg_proc_flags: int, input_path: str, input_file_crc32: int) -> "drc_t" -ida_idd.debugger_t.supports_lowcnds (method) - supports_lowcnds(self) -> bool +ida_idd.debugger_t.supports_debthread(self) -> bool -ida_idd.debugger_t.suspended (method) - suspended(self, dlls_added, thr_names=None) - - @param dlls_added: bool - @param thr_names: thread_name_vec_t * +ida_idd.debugger_t.supports_lowcnds(self) -> bool -ida_idd.debugger_t.term_debugger (method) - term_debugger(self) -> bool +ida_idd.debugger_t.suspended(self, dlls_added: bool, thr_names: "thread_name_vec_t *" = None) -> None -ida_idd.debugger_t.thread_continue (method) - thread_continue(self, tid) -> drc_t - - @param tid: thid_t +ida_idd.debugger_t.term_debugger(self) -> bool -ida_idd.debugger_t.thread_get_sreg_base (method) - thread_get_sreg_base(self, answer, tid, sreg_value) -> drc_t - - @param answer: ea_t * - @param tid: thid_t - @param sreg_value: int +ida_idd.debugger_t.thread_continue(self, tid: "thid_t") -> "drc_t" -ida_idd.debugger_t.thread_suspend (method) - thread_suspend(self, tid) -> drc_t - - @param tid: thid_t +ida_idd.debugger_t.thread_get_sreg_base(self, answer: "ea_t *", tid: "thid_t", sreg_value: int) -> "drc_t" -ida_idd.debugger_t.update_bpts (method) - update_bpts(self, nbpts, bpts, nadd, ndel) -> drc_t - - @param nbpts: int * - @param bpts: update_bpt_info_t * - @param nadd: int - @param ndel: int +ida_idd.debugger_t.thread_suspend(self, tid: "thid_t") -> "drc_t" -ida_idd.debugger_t.update_call_stack (method) - update_call_stack(self, tid, trace) -> drc_t - - @param tid: thid_t - @param trace: call_stack_t * +ida_idd.debugger_t.update_bpts(self, nbpts: "int *", bpts: "update_bpt_info_t *", nadd: int, ndel: int) -> "drc_t" -ida_idd.debugger_t.update_lowcnds (method) - update_lowcnds(self, nupdated, lowcnds, nlowcnds) -> drc_t - - @param nupdated: int * - @param lowcnds: lowcnd_t const * - @param nlowcnds: int +ida_idd.debugger_t.update_call_stack(self, tid: "thid_t", trace: "call_stack_t") -> "drc_t" -ida_idd.debugger_t.use_memregs (method) - use_memregs(self) -> bool +ida_idd.debugger_t.update_lowcnds(self, nupdated: "int *", lowcnds: "lowcnd_t const *", nlowcnds: int) -> "drc_t" -ida_idd.debugger_t.use_sregs (method) - use_sregs(self) -> bool +ida_idd.debugger_t.use_memregs(self) -> bool -ida_idd.debugger_t.version (variable) - Expected kernel version, should be IDD_INTERFACE_VERSION +ida_idd.debugger_t.use_sregs(self) -> bool -ida_idd.debugger_t.virtual_threads (method) - virtual_threads(self) -> bool +ida_idd.debugger_t.version + Expected kernel version, should be IDD_INTERFACE_VERSION + -ida_idd.debugger_t.write_file (method) - write_file(self, fn, off, buf) -> ssize_t - - @param fn: int - @param off: qoff64_t - @param buf: void const * +ida_idd.debugger_t.virtual_threads(self) -> bool -ida_idd.debugger_t.write_memory (method) - write_memory(self, nbytes, ea, buffer, size) -> drc_t - - @param nbytes: size_t * - @param ea: ea_t - @param buffer: void const * - @param size: size_t +ida_idd.debugger_t.write_file(self, fn: int, off: "qoff64_t", buf: "void const *") -> "ssize_t" -ida_idd.debugger_t.write_register (method) - write_register(self, tid, regidx, value) -> drc_t - - @param tid: thid_t - @param regidx: int - @param value: regval_t const * +ida_idd.debugger_t.write_memory(self, nbytes: "size_t *", ea: ida_idaapi.ea_t, buffer: "void const *", size: "size_t") -> "drc_t" -ida_idd.dyn_register_info_array (class) - Proxy of C++ dynamic_wrapped_array_t< register_info_t > class. +ida_idd.debugger_t.write_register(self, tid: "thid_t", regidx: int, value: "regval_t") -> "drc_t" -ida_idd.dyn_register_info_array.__getitem__ (method) - __getitem__(self, i) -> register_info_t - - @param i: size_t +ida_idd.dyn_register_info_array -ida_idd.dyn_register_info_array.__init__ (method) - __init__(self, _data, _count) -> dyn_register_info_array - - @param _data: register_info_t * - @param _count: size_t +ida_idd.dyn_register_info_array.__getitem__(self, i: "size_t") -> "register_info_t const &" -ida_idd.dyn_register_info_array.__len__ (method) - __len__(self) -> size_t +ida_idd.dyn_register_info_array.__init__(self, _data: "register_info_t", _count: "size_t") -ida_idd.dyn_register_info_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: register_info_t const & +ida_idd.dyn_register_info_array.__len__(self) -> "size_t" -ida_idd.exception_info_t (class) - Proxy of C++ exception_info_t class. +ida_idd.dyn_register_info_array.__setitem__(self, i: "size_t", v: "register_info_t") -> None -ida_idd.exception_info_t.__init__ (method) - __init__(self) -> exception_info_t - __init__(self, _code, _flags, _name, _desc) -> exception_info_t - - @param _code: uint - @param _flags: uint32 - @param _name: char const * - @param _desc: char const * +ida_idd.exception_info_t -ida_idd.exception_info_t.break_on (method) - break_on(self) -> bool +ida_idd.exception_info_t.__init__(self, *args) + +ida_idd.exception_info_t.break_on(self) -> bool Should we break on the exception? -ida_idd.exception_info_t.code (variable) +ida_idd.exception_info_t.code exception code -ida_idd.exception_info_t.desc (variable) +ida_idd.exception_info_t.desc Long message used to display info about the exception. -ida_idd.exception_info_t.flags (variable) - Exception info flags +ida_idd.exception_info_t.flags + Exception info flags + -ida_idd.exception_info_t.handle (method) - handle(self) -> bool +ida_idd.exception_info_t.handle(self) -> bool Should we handle the exception? -ida_idd.exception_info_t.name (variable) +ida_idd.exception_info_t.name Exception standard name. -ida_idd.excinfo_t (class) - Proxy of C++ excinfo_t class. +ida_idd.excinfo_t -ida_idd.excinfo_t.__init__ (method) - __init__(self) -> excinfo_t +ida_idd.excinfo_t.__init__(self) -ida_idd.excinfo_t.can_cont (variable) +ida_idd.excinfo_t.can_cont Execution of the process can continue after this exception? -ida_idd.excinfo_t.code (variable) +ida_idd.excinfo_t.code Exception code. -ida_idd.excinfo_t.ea (variable) +ida_idd.excinfo_t.ea Possible address referenced by the exception. -ida_idd.excinfo_t.info (variable) +ida_idd.excinfo_t.info Exception message. -ida_idd.excvec_t (class) - Proxy of C++ qvector< exception_info_t > class. - -ida_idd.excvec_t.__getitem__ (method) - __getitem__(self, i) -> exception_info_t - - @param i: size_t - -ida_idd.excvec_t.__init__ (method) - __init__(self) -> excvec_t - __init__(self, x) -> excvec_t - - @param x: qvector< exception_info_t > const & - -ida_idd.excvec_t.__len__ (method) - __len__(self) -> size_t - -ida_idd.excvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: exception_info_t const & - -ida_idd.excvec_t.at (method) - at(self, _idx) -> exception_info_t - - @param _idx: size_t - -ida_idd.excvec_t.begin (method) - begin(self) -> exception_info_t - -ida_idd.excvec_t.capacity (method) - capacity(self) -> size_t - -ida_idd.excvec_t.clear (method) - clear(self) - -ida_idd.excvec_t.empty (method) - empty(self) -> bool - -ida_idd.excvec_t.end (method) - end(self) -> exception_info_t - -ida_idd.excvec_t.erase (method) - erase(self, it) -> exception_info_t - - @param it: qvector< exception_info_t >::iterator - - erase(self, first, last) -> exception_info_t - - @param first: qvector< exception_info_t >::iterator - @param last: qvector< exception_info_t >::iterator - -ida_idd.excvec_t.extract (method) - extract(self) -> exception_info_t - -ida_idd.excvec_t.grow (method) - grow(self, x=exception_info_t()) - - @param x: exception_info_t const & - -ida_idd.excvec_t.inject (method) - inject(self, s, len) - - @param s: exception_info_t * - @param len: size_t - -ida_idd.excvec_t.insert (method) - insert(self, it, x) -> exception_info_t - - @param it: qvector< exception_info_t >::iterator - @param x: exception_info_t const & - -ida_idd.excvec_t.pop_back (method) - pop_back(self) - -ida_idd.excvec_t.push_back (method) - push_back(self, x) - - @param x: exception_info_t const & - - push_back(self) -> exception_info_t - -ida_idd.excvec_t.qclear (method) - qclear(self) - -ida_idd.excvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_idd.excvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: exception_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_idd.excvec_t.size (method) - size(self) -> size_t - -ida_idd.excvec_t.swap (method) - swap(self, r) - - @param r: qvector< exception_info_t > & - -ida_idd.excvec_t.truncate (method) - truncate(self) - -ida_idd.get_dbg (function) - get_dbg() -> debugger_t - -ida_idd.get_event_bpt_hea (function) - get_event_bpt_hea(ev) -> ea_t - - @param ev: debug_event_t const * - -ida_idd.get_event_exc_code (function) - get_event_exc_code(ev) -> uint - - @param ev: debug_event_t const * - -ida_idd.get_event_exc_ea (function) - get_event_exc_ea(ev) -> ea_t - - @param ev: debug_event_t const * - -ida_idd.get_event_exc_info (function) - get_event_exc_info(ev) -> str - - @param ev: debug_event_t const * - -ida_idd.get_event_info (function) - get_event_info(ev) -> str - - @param ev: debug_event_t const * - -ida_idd.get_event_module_base (function) - get_event_module_base(ev) -> ea_t - - @param ev: debug_event_t const * - -ida_idd.get_event_module_name (function) - get_event_module_name(ev) -> str - - @param ev: debug_event_t const * - -ida_idd.get_event_module_size (function) - get_event_module_size(ev) -> asize_t - - @param ev: debug_event_t const * - -ida_idd.launch_env_t (class) - Proxy of C++ launch_env_t class. - -ida_idd.launch_env_t.__init__ (method) - __init__(self) -> launch_env_t - -ida_idd.meminfo_vec_t (class) - Proxy of C++ meminfo_vec_t class. - -ida_idd.meminfo_vec_t.__init__ (method) - __init__(self) -> meminfo_vec_t - -ida_idd.meminfo_vec_template_t (class) - Proxy of C++ qvector< memory_info_t > class. - -ida_idd.meminfo_vec_template_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< memory_info_t > const & - -ida_idd.meminfo_vec_template_t.__getitem__ (method) - __getitem__(self, i) -> memory_info_t - - @param i: size_t - -ida_idd.meminfo_vec_template_t.__init__ (method) - __init__(self) -> meminfo_vec_template_t - __init__(self, x) -> meminfo_vec_template_t - - @param x: qvector< memory_info_t > const & - -ida_idd.meminfo_vec_template_t.__len__ (method) - __len__(self) -> size_t - -ida_idd.meminfo_vec_template_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< memory_info_t > const & - -ida_idd.meminfo_vec_template_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: memory_info_t const & - -ida_idd.meminfo_vec_template_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: memory_info_t const & - -ida_idd.meminfo_vec_template_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: memory_info_t const & - -ida_idd.meminfo_vec_template_t.at (method) - at(self, _idx) -> memory_info_t - - @param _idx: size_t - -ida_idd.meminfo_vec_template_t.begin (method) - begin(self) -> memory_info_t - -ida_idd.meminfo_vec_template_t.capacity (method) - capacity(self) -> size_t - -ida_idd.meminfo_vec_template_t.clear (method) - clear(self) - -ida_idd.meminfo_vec_template_t.empty (method) - empty(self) -> bool - -ida_idd.meminfo_vec_template_t.end (method) - end(self) -> memory_info_t - -ida_idd.meminfo_vec_template_t.erase (method) - erase(self, it) -> memory_info_t - - @param it: qvector< memory_info_t >::iterator - - erase(self, first, last) -> memory_info_t - - @param first: qvector< memory_info_t >::iterator - @param last: qvector< memory_info_t >::iterator - -ida_idd.meminfo_vec_template_t.extract (method) - extract(self) -> memory_info_t - -ida_idd.meminfo_vec_template_t.find (method) - find(self, x) -> memory_info_t - - @param x: memory_info_t const & - -ida_idd.meminfo_vec_template_t.grow (method) - grow(self, x=memory_info_t()) - - @param x: memory_info_t const & - -ida_idd.meminfo_vec_template_t.has (method) - has(self, x) -> bool - - @param x: memory_info_t const & - -ida_idd.meminfo_vec_template_t.inject (method) - inject(self, s, len) - - @param s: memory_info_t * - @param len: size_t - -ida_idd.meminfo_vec_template_t.insert (method) - insert(self, it, x) -> memory_info_t - - @param it: qvector< memory_info_t >::iterator - @param x: memory_info_t const & - -ida_idd.meminfo_vec_template_t.pop_back (method) - pop_back(self) - -ida_idd.meminfo_vec_template_t.push_back (method) - push_back(self, x) - - @param x: memory_info_t const & - - push_back(self) -> memory_info_t - -ida_idd.meminfo_vec_template_t.qclear (method) - qclear(self) - -ida_idd.meminfo_vec_template_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_idd.meminfo_vec_template_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: memory_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_idd.meminfo_vec_template_t.size (method) - size(self) -> size_t - -ida_idd.meminfo_vec_template_t.swap (method) - swap(self, r) - - @param r: qvector< memory_info_t > & - -ida_idd.meminfo_vec_template_t.truncate (method) - truncate(self) - -ida_idd.memory_info_t (class) - Proxy of C++ memory_info_t class. - -ida_idd.memory_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: memory_info_t const & - -ida_idd.memory_info_t.__init__ (method) - __init__(self) -> memory_info_t - -ida_idd.memory_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: memory_info_t const & - -ida_idd.memory_info_t.bitness (variable) +ida_idd.excvec_t + +ida_idd.excvec_t.__getitem__(self, i: "size_t") -> "exception_info_t const &" + +ida_idd.excvec_t.__init__(self, *args) + +ida_idd.excvec_t.__len__(self) -> "size_t" + +ida_idd.excvec_t.__setitem__(self, i: "size_t", v: "exception_info_t") -> None + +ida_idd.excvec_t.append(self, x: "exception_info_t") -> None + +ida_idd.excvec_t.at(self, _idx: "size_t") -> "exception_info_t const &" + +ida_idd.excvec_t.begin(self, *args) -> "qvector< exception_info_t >::const_iterator" + +ida_idd.excvec_t.capacity(self) -> "size_t" + +ida_idd.excvec_t.clear(self) -> None + +ida_idd.excvec_t.empty(self) -> bool + +ida_idd.excvec_t.end(self, *args) -> "qvector< exception_info_t >::const_iterator" + +ida_idd.excvec_t.erase(self, *args) -> "qvector< exception_info_t >::iterator" + +ida_idd.excvec_t.extend(self, x: "excvec_t") -> None + +ida_idd.excvec_t.extract(self) -> "exception_info_t *" + +ida_idd.excvec_t.grow(self, *args) -> None + +ida_idd.excvec_t.inject(self, s: "exception_info_t", len: "size_t") -> None + +ida_idd.excvec_t.insert(self, it: "exception_info_t", x: "exception_info_t") -> "qvector< exception_info_t >::iterator" + +ida_idd.excvec_t.pop_back(self) -> None + +ida_idd.excvec_t.push_back(self, *args) -> "exception_info_t &" + +ida_idd.excvec_t.qclear(self) -> None + +ida_idd.excvec_t.reserve(self, cnt: "size_t") -> None + +ida_idd.excvec_t.resize(self, *args) -> None + +ida_idd.excvec_t.size(self) -> "size_t" + +ida_idd.excvec_t.swap(self, r: "excvec_t") -> None + +ida_idd.excvec_t.truncate(self) -> None + +ida_idd.get_dbg() -> "debugger_t *" + +ida_idd.get_debug_event_name(dev: "debug_event_t") -> str + get debug event name + +ida_idd.get_event_bpt_hea(ev: "debug_event_t") -> ida_idaapi.ea_t + +ida_idd.get_event_exc_code(ev: "debug_event_t") -> "uint" + +ida_idd.get_event_exc_ea(ev: "debug_event_t") -> ida_idaapi.ea_t + +ida_idd.get_event_exc_info(ev: "debug_event_t") -> str + +ida_idd.get_event_info(ev: "debug_event_t") -> str + +ida_idd.get_event_module_base(ev: "debug_event_t") -> ida_idaapi.ea_t + +ida_idd.get_event_module_name(ev: "debug_event_t") -> str + +ida_idd.get_event_module_size(ev: "debug_event_t") -> "asize_t" + +ida_idd.ieee2cpu(cpu_fpval_out: "void *", ieee: "fpvalue_t const &", size: int) -> int + Convert a floating point number in IDA's internal format to CPU native format. + + @param cpu_fpval_out: output buffer + @param ieee: floating point number of IDA's internal format + @param size: size of cpu_fpval in bytes (size of the output buffer) + @returns Floating point/IEEE Conversion codes + +ida_idd.launch_env_t + +ida_idd.launch_env_t.__init__(self) + +ida_idd.launch_env_t.envs(self) -> "PyObject *" + +ida_idd.launch_env_t.set(self, envvar: str, value: str) -> None + +ida_idd.meminfo_vec_t + +ida_idd.meminfo_vec_t.__init__(self) + +ida_idd.meminfo_vec_template_t + +ida_idd.meminfo_vec_template_t.__eq__(self, r: "meminfo_vec_template_t") -> bool + +ida_idd.meminfo_vec_template_t.__getitem__(self, i: "size_t") -> "memory_info_t const &" + +ida_idd.meminfo_vec_template_t.__init__(self, *args) + +ida_idd.meminfo_vec_template_t.__len__(self) -> "size_t" + +ida_idd.meminfo_vec_template_t.__ne__(self, r: "meminfo_vec_template_t") -> bool + +ida_idd.meminfo_vec_template_t.__setitem__(self, i: "size_t", v: "memory_info_t") -> None + +ida_idd.meminfo_vec_template_t._del(self, x: "memory_info_t") -> bool + +ida_idd.meminfo_vec_template_t.add_unique(self, x: "memory_info_t") -> bool + +ida_idd.meminfo_vec_template_t.append(self, x: "memory_info_t") -> None + +ida_idd.meminfo_vec_template_t.at(self, _idx: "size_t") -> "memory_info_t const &" + +ida_idd.meminfo_vec_template_t.begin(self, *args) -> "qvector< memory_info_t >::const_iterator" + +ida_idd.meminfo_vec_template_t.capacity(self) -> "size_t" + +ida_idd.meminfo_vec_template_t.clear(self) -> None + +ida_idd.meminfo_vec_template_t.empty(self) -> bool + +ida_idd.meminfo_vec_template_t.end(self, *args) -> "qvector< memory_info_t >::const_iterator" + +ida_idd.meminfo_vec_template_t.erase(self, *args) -> "qvector< memory_info_t >::iterator" + +ida_idd.meminfo_vec_template_t.extend(self, x: "meminfo_vec_template_t") -> None + +ida_idd.meminfo_vec_template_t.extract(self) -> "memory_info_t *" + +ida_idd.meminfo_vec_template_t.find(self, *args) -> "qvector< memory_info_t >::const_iterator" + +ida_idd.meminfo_vec_template_t.grow(self, *args) -> None + +ida_idd.meminfo_vec_template_t.has(self, x: "memory_info_t") -> bool + +ida_idd.meminfo_vec_template_t.inject(self, s: "memory_info_t", len: "size_t") -> None + +ida_idd.meminfo_vec_template_t.insert(self, it: "memory_info_t", x: "memory_info_t") -> "qvector< memory_info_t >::iterator" + +ida_idd.meminfo_vec_template_t.pop_back(self) -> None + +ida_idd.meminfo_vec_template_t.push_back(self, *args) -> "memory_info_t &" + +ida_idd.meminfo_vec_template_t.qclear(self) -> None + +ida_idd.meminfo_vec_template_t.reserve(self, cnt: "size_t") -> None + +ida_idd.meminfo_vec_template_t.resize(self, *args) -> None + +ida_idd.meminfo_vec_template_t.size(self) -> "size_t" + +ida_idd.meminfo_vec_template_t.swap(self, r: "meminfo_vec_template_t") -> None + +ida_idd.meminfo_vec_template_t.truncate(self) -> None + +ida_idd.memory_info_t + +ida_idd.memory_info_t.__eq__(self, r: "memory_info_t") -> bool + +ida_idd.memory_info_t.__init__(self) + +ida_idd.memory_info_t.__ne__(self, r: "memory_info_t") -> bool + +ida_idd.memory_info_t.bitness Number of bits in segment addresses (0-16bit, 1-32bit, 2-64bit) -ida_idd.memory_info_t.name (variable) +ida_idd.memory_info_t.name Memory range name. -ida_idd.memory_info_t.perm (variable) +ida_idd.memory_info_t.perm Memory range permissions (0-no information): see segment.hpp. -ida_idd.memory_info_t.sbase (variable) - Segment base (meaningful only for segmented architectures, e.g. 16-bit x86) The - base is specified in paragraphs (i.e. shifted to the right by 4) +ida_idd.memory_info_t.sbase + Segment base (meaningful only for segmented architectures, e.g. 16-bit x86) The base is specified in paragraphs (i.e. shifted to the right by 4) + -ida_idd.memory_info_t.sclass (variable) +ida_idd.memory_info_t.sclass Memory range class name. -ida_idd.modinfo_t (class) - Proxy of C++ modinfo_t class. +ida_idd.modinfo_t -ida_idd.modinfo_t.__init__ (method) - __init__(self) -> modinfo_t +ida_idd.modinfo_t.__init__(self) -ida_idd.modinfo_t.base (variable) +ida_idd.modinfo_t.base module base address. if unknown pass BADADDR -ida_idd.modinfo_t.name (variable) +ida_idd.modinfo_t.name full name of the module -ida_idd.modinfo_t.rebase_to (variable) +ida_idd.modinfo_t.rebase_to if not BADADDR, then rebase the program to the specified address -ida_idd.modinfo_t.size (variable) +ida_idd.modinfo_t.size module size. if unknown pass 0 -ida_idd.process_info_t (class) - Proxy of C++ process_info_t class. +ida_idd.process_info_t -ida_idd.process_info_t.__init__ (method) - __init__(self) -> process_info_t +ida_idd.process_info_t.__init__(self) -ida_idd.process_info_t.name (variable) +ida_idd.process_info_t.name process name -ida_idd.process_info_t.pid (variable) +ida_idd.process_info_t.pid process id -ida_idd.procinfo_vec_t (class) - Proxy of C++ qvector< process_info_t > class. +ida_idd.procinfo_vec_t -ida_idd.procinfo_vec_t.__getitem__ (method) - __getitem__(self, i) -> process_info_t - - @param i: size_t +ida_idd.procinfo_vec_t.__getitem__(self, i: "size_t") -> "process_info_t const &" -ida_idd.procinfo_vec_t.__init__ (method) - __init__(self) -> procinfo_vec_t - __init__(self, x) -> procinfo_vec_t - - @param x: qvector< process_info_t > const & +ida_idd.procinfo_vec_t.__init__(self, *args) -ida_idd.procinfo_vec_t.__len__ (method) - __len__(self) -> size_t +ida_idd.procinfo_vec_t.__len__(self) -> "size_t" -ida_idd.procinfo_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: process_info_t const & +ida_idd.procinfo_vec_t.__setitem__(self, i: "size_t", v: "process_info_t") -> None -ida_idd.procinfo_vec_t.at (method) - at(self, _idx) -> process_info_t - - @param _idx: size_t +ida_idd.procinfo_vec_t.append(self, x: "process_info_t") -> None -ida_idd.procinfo_vec_t.begin (method) - begin(self) -> process_info_t +ida_idd.procinfo_vec_t.at(self, _idx: "size_t") -> "process_info_t const &" -ida_idd.procinfo_vec_t.capacity (method) - capacity(self) -> size_t +ida_idd.procinfo_vec_t.begin(self, *args) -> "qvector< process_info_t >::const_iterator" -ida_idd.procinfo_vec_t.clear (method) - clear(self) +ida_idd.procinfo_vec_t.capacity(self) -> "size_t" -ida_idd.procinfo_vec_t.empty (method) - empty(self) -> bool +ida_idd.procinfo_vec_t.clear(self) -> None -ida_idd.procinfo_vec_t.end (method) - end(self) -> process_info_t +ida_idd.procinfo_vec_t.empty(self) -> bool -ida_idd.procinfo_vec_t.erase (method) - erase(self, it) -> process_info_t - - @param it: qvector< process_info_t >::iterator - - erase(self, first, last) -> process_info_t - - @param first: qvector< process_info_t >::iterator - @param last: qvector< process_info_t >::iterator +ida_idd.procinfo_vec_t.end(self, *args) -> "qvector< process_info_t >::const_iterator" -ida_idd.procinfo_vec_t.extract (method) - extract(self) -> process_info_t +ida_idd.procinfo_vec_t.erase(self, *args) -> "qvector< process_info_t >::iterator" -ida_idd.procinfo_vec_t.grow (method) - grow(self, x=process_info_t()) - - @param x: process_info_t const & +ida_idd.procinfo_vec_t.extend(self, x: "procinfo_vec_t") -> None -ida_idd.procinfo_vec_t.inject (method) - inject(self, s, len) - - @param s: process_info_t * - @param len: size_t +ida_idd.procinfo_vec_t.extract(self) -> "process_info_t *" -ida_idd.procinfo_vec_t.insert (method) - insert(self, it, x) -> process_info_t - - @param it: qvector< process_info_t >::iterator - @param x: process_info_t const & +ida_idd.procinfo_vec_t.grow(self, *args) -> None -ida_idd.procinfo_vec_t.pop_back (method) - pop_back(self) +ida_idd.procinfo_vec_t.inject(self, s: "process_info_t", len: "size_t") -> None -ida_idd.procinfo_vec_t.push_back (method) - push_back(self, x) - - @param x: process_info_t const & - - push_back(self) -> process_info_t +ida_idd.procinfo_vec_t.insert(self, it: "process_info_t", x: "process_info_t") -> "qvector< process_info_t >::iterator" -ida_idd.procinfo_vec_t.qclear (method) - qclear(self) +ida_idd.procinfo_vec_t.pop_back(self) -> None -ida_idd.procinfo_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_idd.procinfo_vec_t.push_back(self, *args) -> "process_info_t &" -ida_idd.procinfo_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: process_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_idd.procinfo_vec_t.qclear(self) -> None -ida_idd.procinfo_vec_t.size (method) - size(self) -> size_t +ida_idd.procinfo_vec_t.reserve(self, cnt: "size_t") -> None -ida_idd.procinfo_vec_t.swap (method) - swap(self, r) - - @param r: qvector< process_info_t > & +ida_idd.procinfo_vec_t.resize(self, *args) -> None -ida_idd.procinfo_vec_t.truncate (method) - truncate(self) +ida_idd.procinfo_vec_t.size(self) -> "size_t" -ida_idd.register_info_t (class) - Proxy of C++ register_info_t class. +ida_idd.procinfo_vec_t.swap(self, r: "procinfo_vec_t") -> None -ida_idd.register_info_t.__get_bit_strings (method) - __get_bit_strings(self) -> PyObject * +ida_idd.procinfo_vec_t.truncate(self) -> None -ida_idd.register_info_t.__init__ (method) - __init__(self) -> register_info_t +ida_idd.register_info_t -ida_idd.register_info_t.bit_strings (variable) - strings corresponding to each bit of the register. (nullptr = no bit, same name - = multi-bits mask) +ida_idd.register_info_t.__get_bit_strings(self) -> "PyObject *" -ida_idd.register_info_t.default_bit_strings_mask (variable) +ida_idd.register_info_t.__init__(self) + +ida_idd.register_info_t.bit_strings + strings corresponding to each bit of the register. (nullptr = no bit, same name = multi-bits mask) + + +ida_idd.register_info_t.default_bit_strings_mask mask of default bits -ida_idd.register_info_t.dtype (variable) +ida_idd.register_info_t.dtype Register size (see Operand value types) -ida_idd.register_info_t.flags (variable) - Register info attribute flags +ida_idd.register_info_t.flags + Register info attribute flags + -ida_idd.register_info_t.name (variable) +ida_idd.register_info_t.name Register name. -ida_idd.register_info_t.register_class (variable) +ida_idd.register_info_t.register_class segment, mmx, etc. -ida_idd.regval_t (class) - Proxy of C++ regval_t class. +ida_idd.regval_t -ida_idd.regval_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: regval_t const & +ida_idd.regval_t.__eq__(self, r: "regval_t") -> bool -ida_idd.regval_t.__init__ (method) - __init__(self) -> regval_t - __init__(self, r) -> regval_t - - @param r: regval_t const & +ida_idd.regval_t.__init__(self, *args) -ida_idd.regval_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: regval_t const & +ida_idd.regval_t.__ne__(self, r: "regval_t") -> bool -ida_idd.regval_t.bytes (method) - bytes(self) -> bytevec_t - Get const custom value. - bytes(self) -> bytevec_t const & +ida_idd.regval_t.bytes(self, *args) -> "bytevec_t const &" -ida_idd.regval_t.clear (method) - clear(self) +ida_idd.regval_t.clear(self) -> None Clear register value. -ida_idd.regval_t.fval (variable) - 12: floating point value in the internal representation (see ieee.h) +ida_idd.regval_t.get_data(self, *args) -> "void const *" -ida_idd.regval_t.get_data (method) - get_data(self) - Get const pointer to value. - get_data(self) -> void const * +ida_idd.regval_t.get_data_size(self) -> "size_t" -ida_idd.regval_t.get_data_size (method) - get_data_size(self) -> size_t - Get size of value. +ida_idd.regval_t.ival + RVT_INT. -ida_idd.regval_t.ival (variable) - 8: integer value +ida_idd.regval_t.pyval(self, dtype: "op_dtype_t") -> "PyObject *" -ida_idd.regval_t.pyval (method) - pyval(self, dtype) -> PyObject * - - @param dtype: op_dtype_t - -ida_idd.regval_t.rvtype (variable) +ida_idd.regval_t.rvtype one of Register value types -ida_idd.regval_t.set_bytes (method) - set_bytes(self, data, size) - Initialize this regval to an empty custom value. - - @param data: uchar const * - @param size: size_t - - set_bytes(self, v) - - @param v: bytevec_t const & - - set_bytes(self) -> bytevec_t & +ida_idd.regval_t.set_bytes(self, *args) -> "bytevec_t &" -ida_idd.regval_t.set_float (method) - set_float(self, x) - Set float value (fval) - - @param x: (C++: const fpvalue_t &) fpvalue_t const & +ida_idd.regval_t.set_float(self, v: "bytevec_t const &") -> None -ida_idd.regval_t.set_int (method) - set_int(self, x) - - @param x: uint64 +ida_idd.regval_t.set_int(self, x: "uint64") -> None -ida_idd.regval_t.set_pyval (method) - set_pyval(self, o, dtype) -> bool - - @param o: PyObject * - @param dtype: op_dtype_t +ida_idd.regval_t.set_pyval(self, o: "PyObject *", dtype: "op_dtype_t") -> bool -ida_idd.regval_t.set_unavailable (method) - set_unavailable(self) - Mark as unavailable. +ida_idd.regval_t.set_unavailable(self) -> None -ida_idd.regval_t.swap (method) - swap(self, r) +ida_idd.regval_t.swap(self, r: "regval_t") -> None Set this = r and r = this. - - @param r: (C++: regval_t &) -ida_idd.regvals_t (class) - Proxy of C++ qvector< regval_t > class. +ida_idd.regval_t.use_bytevec(self) -> bool -ida_idd.regvals_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< regval_t > const & +ida_idd.regvals_t -ida_idd.regvals_t.__getitem__ (method) - __getitem__(self, i) -> regval_t - - @param i: size_t +ida_idd.regvals_t.__eq__(self, r: "regvals_t") -> bool -ida_idd.regvals_t.__init__ (method) - __init__(self) -> regvals_t - __init__(self, x) -> regvals_t - - @param x: qvector< regval_t > const & +ida_idd.regvals_t.__getitem__(self, i: "size_t") -> "regval_t const &" -ida_idd.regvals_t.__len__ (method) - __len__(self) -> size_t +ida_idd.regvals_t.__init__(self, *args) -ida_idd.regvals_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< regval_t > const & +ida_idd.regvals_t.__len__(self) -> "size_t" -ida_idd.regvals_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: regval_t const & +ida_idd.regvals_t.__ne__(self, r: "regvals_t") -> bool -ida_idd.regvals_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: regval_t const & +ida_idd.regvals_t.__setitem__(self, i: "size_t", v: "regval_t") -> None -ida_idd.regvals_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: regval_t const & +ida_idd.regvals_t._del(self, x: "regval_t") -> bool -ida_idd.regvals_t.at (method) - at(self, _idx) -> regval_t - - @param _idx: size_t +ida_idd.regvals_t.add_unique(self, x: "regval_t") -> bool -ida_idd.regvals_t.begin (method) - begin(self) -> regval_t +ida_idd.regvals_t.append(self, x: "regval_t") -> None -ida_idd.regvals_t.capacity (method) - capacity(self) -> size_t +ida_idd.regvals_t.at(self, _idx: "size_t") -> "regval_t const &" -ida_idd.regvals_t.clear (method) - clear(self) +ida_idd.regvals_t.begin(self, *args) -> "qvector< regval_t >::const_iterator" -ida_idd.regvals_t.empty (method) - empty(self) -> bool +ida_idd.regvals_t.capacity(self) -> "size_t" -ida_idd.regvals_t.end (method) - end(self) -> regval_t +ida_idd.regvals_t.clear(self) -> None -ida_idd.regvals_t.erase (method) - erase(self, it) -> regval_t - - @param it: qvector< regval_t >::iterator - - erase(self, first, last) -> regval_t - - @param first: qvector< regval_t >::iterator - @param last: qvector< regval_t >::iterator +ida_idd.regvals_t.empty(self) -> bool -ida_idd.regvals_t.extract (method) - extract(self) -> regval_t +ida_idd.regvals_t.end(self, *args) -> "qvector< regval_t >::const_iterator" -ida_idd.regvals_t.find (method) - find(self, x) -> regval_t - - @param x: regval_t const & +ida_idd.regvals_t.erase(self, *args) -> "qvector< regval_t >::iterator" -ida_idd.regvals_t.grow (method) - grow(self, x=regval_t()) - - @param x: regval_t const & +ida_idd.regvals_t.extend(self, x: "regvals_t") -> None -ida_idd.regvals_t.has (method) - has(self, x) -> bool - - @param x: regval_t const & +ida_idd.regvals_t.extract(self) -> "regval_t *" -ida_idd.regvals_t.inject (method) - inject(self, s, len) - - @param s: regval_t * - @param len: size_t +ida_idd.regvals_t.find(self, *args) -> "qvector< regval_t >::const_iterator" -ida_idd.regvals_t.insert (method) - insert(self, it, x) -> regval_t - - @param it: qvector< regval_t >::iterator - @param x: regval_t const & +ida_idd.regvals_t.grow(self, *args) -> None -ida_idd.regvals_t.pop_back (method) - pop_back(self) +ida_idd.regvals_t.has(self, x: "regval_t") -> bool -ida_idd.regvals_t.push_back (method) - push_back(self, x) - - @param x: regval_t const & - - push_back(self) -> regval_t +ida_idd.regvals_t.inject(self, s: "regval_t", len: "size_t") -> None -ida_idd.regvals_t.qclear (method) - qclear(self) +ida_idd.regvals_t.insert(self, it: "regval_t", x: "regval_t") -> "qvector< regval_t >::iterator" -ida_idd.regvals_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_idd.regvals_t.pop_back(self) -> None -ida_idd.regvals_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: regval_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_idd.regvals_t.push_back(self, *args) -> "regval_t &" -ida_idd.regvals_t.size (method) - size(self) -> size_t +ida_idd.regvals_t.qclear(self) -> None -ida_idd.regvals_t.swap (method) - swap(self, r) - - @param r: qvector< regval_t > & +ida_idd.regvals_t.reserve(self, cnt: "size_t") -> None -ida_idd.regvals_t.truncate (method) - truncate(self) +ida_idd.regvals_t.resize(self, *args) -> None -ida_idd.scattered_segm_t (class) - Proxy of C++ scattered_segm_t class. +ida_idd.regvals_t.size(self) -> "size_t" -ida_idd.scattered_segm_t.__init__ (method) - __init__(self) -> scattered_segm_t +ida_idd.regvals_t.swap(self, r: "regvals_t") -> None -ida_idd.scattered_segm_t.name (variable) +ida_idd.regvals_t.truncate(self) -> None + +ida_idd.scattered_segm_t + +ida_idd.scattered_segm_t.__init__(self) + +ida_idd.scattered_segm_t.name name of the segment -ida_idd.set_debug_event_code (function) - set_debug_event_code(ev, id) - - @param ev: debug_event_t * - @param id: enum event_id_t +ida_idd.set_debug_event_code(ev: "debug_event_t", id: "event_id_t") -> None -ida_idd.thread_name_t (class) - Proxy of C++ thread_name_t class. +ida_idd.thread_name_t -ida_idd.thread_name_t.__init__ (method) - __init__(self) -> thread_name_t +ida_idd.thread_name_t.__init__(self) -ida_idd.thread_name_t.name (variable) +ida_idd.thread_name_t.name new thread name -ida_idd.thread_name_t.tid (variable) +ida_idd.thread_name_t.tid thread -ida_idp (module) +ida_idp Contains definition of the interface to IDP modules. The interface consists of two structures: * definition of target assembler: ::ash * definition of current processor: ::ph - These structures contain information about target processor and assembler - features. + These structures contain information about target processor and assembler features. It also defines two groups of kernel events: * processor_t::event_t processor related events * idb_event:event_code_t database related events - The processor related events are used to communicate with the processor module. - The database related events are used to inform any interested parties, like - plugins or processor modules, about the changes in the database. + + The processor related events are used to communicate with the processor module. The database related events are used to inform any interested parties, like plugins or processor modules, about the changes in the database. + -ida_idp.AS2_BRACE (variable) +ida_idp.AS2_BRACE Use braces for all expressions. -ida_idp.AS2_BYTE1CHAR (variable) - One symbol per processor byte. Meaningful only for wide byte processors +ida_idp.AS2_BYTE1CHAR + One symbol per processor byte. Meaningful only for wide byte processors + -ida_idp.AS2_COLONSUF (variable) - addresses may have ":xx" suffix; this suffix must be ignored when extracting the - address under the cursor +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 (variable) - Description of struc/union is in the 'reverse' form (keyword before name), the - same as in borland tasm ideal +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 (variable) - Invert meaning of idainfo::wide_high_byte_first for text strings (for processors - with bytes bigger than 8 bits) +ida_idp.AS2_STRINV + Invert meaning of idainfo::wide_high_byte_first for text strings (for processors with bytes bigger than 8 bits) + -ida_idp.AS2_TERSESTR (variable) - 'terse' structure initialization form; NAME is supported +ida_idp.AS2_TERSESTR + 'terse' structure initialization form; NAME is supported + -ida_idp.AS2_YWORD (variable) +ida_idp.AS2_YWORD a_yword field is present and valid -ida_idp.AS2_ZWORD (variable) +ida_idp.AS2_ZWORD a_zword field is present and valid -ida_idp.ASB_BINF0 (variable) +ida_idp.ASB_BINF0 010101b -ida_idp.ASB_BINF1 (variable) +ida_idp.ASB_BINF1 ^B010101 -ida_idp.ASB_BINF2 (variable) +ida_idp.ASB_BINF2 %010101 -ida_idp.ASB_BINF3 (variable) +ida_idp.ASB_BINF3 0b1010101 -ida_idp.ASB_BINF4 (variable) +ida_idp.ASB_BINF4 b'1010101 -ida_idp.ASB_BINF5 (variable) +ida_idp.ASB_BINF5 b'1010101' -ida_idp.ASD_DECF0 (variable) +ida_idp.ASD_DECF0 34 -ida_idp.ASD_DECF1 (variable) +ida_idp.ASD_DECF1 #34 -ida_idp.ASD_DECF2 (variable) +ida_idp.ASD_DECF2 34. -ida_idp.ASD_DECF3 (variable) +ida_idp.ASD_DECF3 .34 -ida_idp.ASH_HEXF0 (variable) +ida_idp.ASH_HEXF0 34h -ida_idp.ASH_HEXF1 (variable) +ida_idp.ASH_HEXF1 h'34 -ida_idp.ASH_HEXF2 (variable) +ida_idp.ASH_HEXF2 34 -ida_idp.ASH_HEXF3 (variable) +ida_idp.ASH_HEXF3 0x34 -ida_idp.ASH_HEXF4 (variable) +ida_idp.ASH_HEXF4 $34 -ida_idp.ASH_HEXF5 (variable) +ida_idp.ASH_HEXF5 <^R > (radix) -ida_idp.ASO_OCTF0 (variable) +ida_idp.ASO_OCTF0 123o -ida_idp.ASO_OCTF1 (variable) +ida_idp.ASO_OCTF1 0123 -ida_idp.ASO_OCTF2 (variable) +ida_idp.ASO_OCTF2 123 -ida_idp.ASO_OCTF3 (variable) +ida_idp.ASO_OCTF3 @123 -ida_idp.ASO_OCTF4 (variable) +ida_idp.ASO_OCTF4 o'123 -ida_idp.ASO_OCTF5 (variable) +ida_idp.ASO_OCTF5 123q -ida_idp.ASO_OCTF6 (variable) +ida_idp.ASO_OCTF6 ~123 -ida_idp.ASO_OCTF7 (variable) +ida_idp.ASO_OCTF7 q'123 -ida_idp.AS_1TEXT (variable) +ida_idp.AS_1TEXT 1 text per line, no bytes -ida_idp.AS_2CHRE (variable) +ida_idp.AS_2CHRE double char constants are: "xy -ida_idp.AS_ALIGN2 (variable) - .align directive expects an exponent rather than a power of 2 (.align 5 means to - align at 32byte boundary) +ida_idp.AS_ALIGN2 + .align directive expects an exponent rather than a power of 2 (.align 5 means to align at 32byte boundary) + -ida_idp.AS_ASCIIC (variable) - ascii directive accepts C-like escape sequences (\n,\x01 and similar) +ida_idp.AS_ASCIIC + ascii directive accepts C-like escape sequences (\n,\x01 and similar) + -ida_idp.AS_ASCIIZ (variable) +ida_idp.AS_ASCIIZ ascii directive inserts implicit zero byte at the end -ida_idp.AS_BINFM (variable) +ida_idp.AS_BINFM mask - binary number format -ida_idp.AS_COLON (variable) +ida_idp.AS_COLON create colons after data names ? -ida_idp.AS_DECFM (variable) +ida_idp.AS_DECFM mask - decimal number format -ida_idp.AS_HEXFM (variable) +ida_idp.AS_HEXFM mask - hex number format -ida_idp.AS_LALIGN (variable) +ida_idp.AS_LALIGN Labels at "align" keyword are supported. -ida_idp.AS_N2CHR (variable) +ida_idp.AS_N2CHR can't have 2 byte char consts -ida_idp.AS_NCHRE (variable) +ida_idp.AS_NCHRE char constants are: 'x -ida_idp.AS_NCMAS (variable) +ida_idp.AS_NCMAS no commas in ascii directives -ida_idp.AS_NHIAS (variable) +ida_idp.AS_NHIAS no characters with high bit -ida_idp.AS_NOCODECLN (variable) +ida_idp.AS_NOCODECLN don't create colons after code names -ida_idp.AS_NOSPACE (variable) +ida_idp.AS_NOSPACE No spaces in expressions. -ida_idp.AS_NOXRF (variable) +ida_idp.AS_NOXRF Disable xrefs during the output file generation. -ida_idp.AS_OCTFM (variable) +ida_idp.AS_OCTFM mask - octal number format -ida_idp.AS_OFFST (variable) +ida_idp.AS_OFFST offsets are 'offset xxx' ? -ida_idp.AS_ONEDUP (variable) +ida_idp.AS_ONEDUP One array definition per line. -ida_idp.AS_RELSUP (variable) +ida_idp.AS_RELSUP Checkarg: 'and','or','xor' operations with addresses are possible. -ida_idp.AS_UDATA (variable) +ida_idp.AS_UDATA can use '?' in data directives -ida_idp.AS_UNEQU (variable) +ida_idp.AS_UNEQU replace undefined data items with EQU (for ANTA's A80) -ida_idp.AS_XTRNTYPE (variable) +ida_idp.AS_XTRNTYPE Assembler understands type of extern symbols as ":type" suffix. -ida_idp.AssembleLine (function) - AssembleLine(ea, cs, ip, use32, nonnul_line) -> bytes +ida_idp.AssembleLine(ea, cs, ip, use32, line) 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 cs: cs of instruction + @param ip: ip of instruction @param use32: is 32bit segment - @param nonnul_line: char const * - @return: - None on failure + @param line: line to assemble + @return: + - None on failure - or a string containing the assembled instruction -ida_idp.CF_CALL (variable) +ida_idp.CF_CALL CALL instruction (should make a procedure here) -ida_idp.CF_CHG1 (variable) +ida_idp.CF_CHG1 The instruction modifies the first operand. -ida_idp.CF_CHG2 (variable) +ida_idp.CF_CHG2 The instruction modifies the second operand. -ida_idp.CF_CHG3 (variable) +ida_idp.CF_CHG3 The instruction modifies the third operand. -ida_idp.CF_CHG4 (variable) +ida_idp.CF_CHG4 The instruction modifies the fourth operand. -ida_idp.CF_CHG5 (variable) +ida_idp.CF_CHG5 The instruction modifies the fifth operand. -ida_idp.CF_CHG6 (variable) +ida_idp.CF_CHG6 The instruction modifies the sixth operand. -ida_idp.CF_CHG7 (variable) +ida_idp.CF_CHG7 The instruction modifies the seventh operand. -ida_idp.CF_CHG8 (variable) +ida_idp.CF_CHG8 The instruction modifies the eighth operand. -ida_idp.CF_HLL (variable) - Instruction may be present in a high level language function +ida_idp.CF_HLL + Instruction may be present in a high level language function + -ida_idp.CF_JUMP (variable) - The instruction passes execution using indirect jump or call (thus needs - additional analysis) +ida_idp.CF_JUMP + The instruction passes execution using indirect jump or call (thus needs additional analysis) + -ida_idp.CF_SHFT (variable) +ida_idp.CF_SHFT Bit-shift instruction (shl,shr...) -ida_idp.CF_STOP (variable) - Instruction doesn't pass execution to the next instruction +ida_idp.CF_STOP + Instruction doesn't pass execution to the next instruction + -ida_idp.CF_USE1 (variable) +ida_idp.CF_USE1 The instruction uses value of the first operand. -ida_idp.CF_USE2 (variable) +ida_idp.CF_USE2 The instruction uses value of the second operand. -ida_idp.CF_USE3 (variable) +ida_idp.CF_USE3 The instruction uses value of the third operand. -ida_idp.CF_USE4 (variable) +ida_idp.CF_USE4 The instruction uses value of the fourth operand. -ida_idp.CF_USE5 (variable) +ida_idp.CF_USE5 The instruction uses value of the fifth operand. -ida_idp.CF_USE6 (variable) +ida_idp.CF_USE6 The instruction uses value of the sixth operand. -ida_idp.CF_USE7 (variable) +ida_idp.CF_USE7 The instruction uses value of the seventh operand. -ida_idp.CF_USE8 (variable) +ida_idp.CF_USE8 The instruction uses value of the eighth operand. -ida_idp.CUSTOM_INSN_ITYPE (variable) - Custom instruction codes defined by processor extension plugins must be greater - than or equal to this +ida_idp.CUSTOM_INSN_ITYPE + Custom instruction codes defined by processor extension plugins must be greater than or equal to this + -ida_idp.HKCB_GLOBAL (variable) - is global event listener? if true, the listener will survive database closing - and opening. it will stay in the memory until explicitly unhooked. otherwise the - kernel will delete it as soon as the owner is unloaded. should be used only with - PLUGIN_FIX plugins. +ida_idp.HKCB_GLOBAL + is global event listener? if true, the listener will survive database closing and opening. it will stay in the memory until explicitly unhooked. otherwise the kernel will delete it as soon as the owner is unloaded. should be used only with PLUGIN_FIX plugins. + -ida_idp.IDB_Hooks (class) - Proxy of C++ IDB_Hooks class. +ida_idp.IDB_Hooks -ida_idp.IDB_Hooks.__disown__ (method) +ida_idp.IDB_Hooks.__disown__(self) -ida_idp.IDB_Hooks.__init__ (method) - __init__(self, _flags=0, _hkcb_flags=0x0001) -> IDB_Hooks - - @param _flags: uint32 - @param _hkcb_flags: uint32 +ida_idp.IDB_Hooks.__init__(self, _flags: int = 0, _hkcb_flags: int = 1) -ida_idp.IDB_Hooks.adding_segm (method) - adding_segm(self, s) - A segment is being created. - +ida_idp.IDB_Hooks.adding_segm(self, s: "segment_t *") -> None + A segment is being created. + @param s: (segment_t *) -ida_idp.IDB_Hooks.allsegs_moved (method) - allsegs_moved(self, info) - Program rebasing is complete. This event is generated after series of segm_moved - events - +ida_idp.IDB_Hooks.allsegs_moved(self, info: "segm_move_infos_t *") -> None + Program rebasing is complete. This event is generated after series of segm_moved events + @param info: (segm_move_infos_t *) -ida_idp.IDB_Hooks.auto_empty (method) - auto_empty(self) +ida_idp.IDB_Hooks.auto_empty(self) -> None + Info: all analysis queues are empty. This callback is called once when the initial analysis is finished. If the queue is not empty upon the return from this callback, it will be called later again. + -ida_idp.IDB_Hooks.auto_empty_finally (method) - auto_empty_finally(self) +ida_idp.IDB_Hooks.auto_empty_finally(self) -> None + Info: all analysis queues are empty definitively. This callback is called only once. + -ida_idp.IDB_Hooks.bookmark_changed (method) - bookmark_changed(self, index, pos, desc, operation) - Boomarked position changed. - +ida_idp.IDB_Hooks.bookmark_changed(self, index: int, pos: "lochist_entry_t const *", desc: str, operation: int) -> None + Boomarked position changed. + @param index: (uint32) @param pos: (::const lochist_entry_t *) @param desc: (::const char *) - @param operation: (int) 0-added, 1-updated, 2-deleted if desc==nullptr, then the - bookmark was deleted. + @param operation: (int) 0-added, 1-updated, 2-deleted if desc==nullptr, then the bookmark was deleted. -ida_idp.IDB_Hooks.byte_patched (method) - byte_patched(self, ea, old_value) - A byte has been patched. - +ida_idp.IDB_Hooks.byte_patched(self, ea: ida_idaapi.ea_t, old_value: int) -> None + A byte has been patched. + @param ea: (::ea_t) @param old_value: (uint32) -ida_idp.IDB_Hooks.callee_addr_changed (method) - callee_addr_changed(self, ea, callee) - Callee address has been updated by the user. - +ida_idp.IDB_Hooks.callee_addr_changed(self, ea: ida_idaapi.ea_t, callee: ida_idaapi.ea_t) -> None + Callee address has been updated by the user. + @param ea: (::ea_t) @param callee: (::ea_t) -ida_idp.IDB_Hooks.changing_cmt (method) - changing_cmt(self, ea, repeatable_cmt, newcmt) - An item comment is to be changed. - +ida_idp.IDB_Hooks.changing_cmt(self, ea: ida_idaapi.ea_t, repeatable_cmt: bool, newcmt: str) -> None + An item comment is to be changed. + @param ea: (::ea_t) @param repeatable_cmt: (bool) @param newcmt: (const char *) -ida_idp.IDB_Hooks.changing_enum_bf (method) - changing_enum_bf(self, id, new_bf) - An enum type 'bitfield' attribute is to be changed. - - @param id: (enum_t) - @param new_bf: (bool) - -ida_idp.IDB_Hooks.changing_enum_cmt (method) - changing_enum_cmt(self, id, repeatable, newcmt) - An enum or member type comment is to be changed. - - @param id: (tid_t) - @param repeatable: (bool) - @param newcmt: (const char *) - -ida_idp.IDB_Hooks.changing_op_ti (method) - changing_op_ti(self, ea, n, new_type, new_fnames) - An operand typestring (c/c++ prototype) is to be changed. - +ida_idp.IDB_Hooks.changing_op_ti(self, ea: ida_idaapi.ea_t, n: int, new_type: "type_t const *", new_fnames: "p_list const *") -> None + An operand typestring (c/c++ prototype) is to be changed. + @param ea: (::ea_t) @param n: (int) @param new_type: (const type_t *) @param new_fnames: (const p_list *) -ida_idp.IDB_Hooks.changing_op_type (method) - changing_op_type(self, ea, n, opinfo) - An operand type (offset, hex, etc...) is to be changed. - +ida_idp.IDB_Hooks.changing_op_type(self, ea: ida_idaapi.ea_t, n: int, opinfo: "opinfo_t") -> None + An operand type (offset, hex, etc...) is to be changed. + @param ea: (::ea_t) @param n: (int) eventually or'ed with OPND_OUTER or OPND_ALL @param opinfo: (const opinfo_t *) additional operand info -ida_idp.IDB_Hooks.changing_range_cmt (method) - changing_range_cmt(self, kind, a, cmt, repeatable) - Range comment is to be changed. - +ida_idp.IDB_Hooks.changing_range_cmt(self, kind: "range_kind_t", a: "range_t", cmt: str, repeatable: bool) -> None + Range comment is to be changed. + @param kind: (range_kind_t) @param a: (const range_t *) @param cmt: (const char *) @param repeatable: (bool) -ida_idp.IDB_Hooks.changing_segm_class (method) - changing_segm_class(self, s) - Segment class is being changed. - +ida_idp.IDB_Hooks.changing_segm_class(self, s: "segment_t *") -> None + Segment class is being changed. + @param s: (segment_t *) -ida_idp.IDB_Hooks.changing_segm_end (method) - changing_segm_end(self, s, new_end, segmod_flags) - Segment end address is to be changed. - +ida_idp.IDB_Hooks.changing_segm_end(self, s: "segment_t *", new_end: ida_idaapi.ea_t, segmod_flags: int) -> None + Segment end address is to be changed. + @param s: (segment_t *) @param new_end: (::ea_t) @param segmod_flags: (int) -ida_idp.IDB_Hooks.changing_segm_name (method) - changing_segm_name(self, s, oldname) - Segment name is being changed. - +ida_idp.IDB_Hooks.changing_segm_name(self, s: "segment_t *", oldname: str) -> None + Segment name is being changed. + @param s: (segment_t *) @param oldname: (const char *) -ida_idp.IDB_Hooks.changing_segm_start (method) - changing_segm_start(self, s, new_start, segmod_flags) - Segment start address is to be changed. - +ida_idp.IDB_Hooks.changing_segm_start(self, s: "segment_t *", new_start: ida_idaapi.ea_t, segmod_flags: int) -> None + Segment start address is to be changed. + @param s: (segment_t *) @param new_start: (::ea_t) @param segmod_flags: (int) -ida_idp.IDB_Hooks.changing_struc_align (method) - changing_struc_align(self, sptr) - A structure type is being changed (the struct alignment). - - @param sptr: (struc_t *) - -ida_idp.IDB_Hooks.changing_struc_cmt (method) - changing_struc_cmt(self, struc_id, repeatable, newcmt) - A structure type comment is to be changed. - - @param struc_id: (tid_t) - @param repeatable: (bool) - @param newcmt: (const char *) - -ida_idp.IDB_Hooks.changing_struc_member (method) - changing_struc_member(self, sptr, mptr, flag, ti, nbytes) - A structure member is to be changed. - - @param sptr: (struc_t *) - @param mptr: (member_t *) - @param flag: (flags64_t) - @param ti: (const opinfo_t *) - @param nbytes: (::asize_t) - -ida_idp.IDB_Hooks.changing_ti (method) - changing_ti(self, ea, new_type, new_fnames) - An item typestring (c/c++ prototype) is to be changed. - +ida_idp.IDB_Hooks.changing_ti(self, ea: ida_idaapi.ea_t, new_type: "type_t const *", new_fnames: "p_list const *") -> None + An item typestring (c/c++ prototype) is to be changed. + @param ea: (::ea_t) @param new_type: (const type_t *) @param new_fnames: (const p_list *) -ida_idp.IDB_Hooks.closebase (method) - closebase(self) +ida_idp.IDB_Hooks.closebase(self) -> None The database will be closed now. -ida_idp.IDB_Hooks.cmt_changed (method) - cmt_changed(self, ea, repeatable_cmt) - An item comment has been changed. - +ida_idp.IDB_Hooks.cmt_changed(self, ea: ida_idaapi.ea_t, repeatable_cmt: bool) -> None + An item comment has been changed. + @param ea: (::ea_t) @param repeatable_cmt: (bool) -ida_idp.IDB_Hooks.compiler_changed (method) - compiler_changed(self, adjust_inf_fields) - The kernel has changed the compiler information. ( idainfo::cc structure; - get_abi_name) - +ida_idp.IDB_Hooks.compiler_changed(self, adjust_inf_fields: bool) -> None + The kernel has changed the compiler information. ( idainfo::cc structure; get_abi_name) + @param adjust_inf_fields: (::bool) may change inf fields? -ida_idp.IDB_Hooks.deleting_enum (method) - deleting_enum(self, id) - An enum type is to be deleted. - - @param id: (enum_t) - -ida_idp.IDB_Hooks.deleting_enum_member (method) - deleting_enum_member(self, id, cid) - An enum member is to be deleted. - - @param id: (enum_t) - @param cid: (const_t) - -ida_idp.IDB_Hooks.deleting_func (method) - deleting_func(self, pfn) - The kernel is about to delete a function. - +ida_idp.IDB_Hooks.deleting_func(self, pfn: "func_t *") -> None + The kernel is about to delete a function. + @param pfn: (func_t *) -ida_idp.IDB_Hooks.deleting_func_tail (method) - deleting_func_tail(self, pfn, tail) - A function tail chunk is to be removed. - +ida_idp.IDB_Hooks.deleting_func_tail(self, pfn: "func_t *", tail: "range_t") -> None + A function tail chunk is to be removed. + @param pfn: (func_t *) @param tail: (const range_t *) -ida_idp.IDB_Hooks.deleting_segm (method) - deleting_segm(self, start_ea) - A segment is to be deleted. - +ida_idp.IDB_Hooks.deleting_segm(self, start_ea: ida_idaapi.ea_t) -> None + A segment is to be deleted. + @param start_ea: (::ea_t) -ida_idp.IDB_Hooks.deleting_struc (method) - deleting_struc(self, sptr) - A structure type is to be deleted. - - @param sptr: (struc_t *) - -ida_idp.IDB_Hooks.deleting_struc_member (method) - deleting_struc_member(self, sptr, mptr) - A structure member is to be deleted. - - @param sptr: (struc_t *) - @param mptr: (member_t *) - -ida_idp.IDB_Hooks.deleting_tryblks (method) - deleting_tryblks(self, range) - About to delete tryblk information in given range - +ida_idp.IDB_Hooks.deleting_tryblks(self, range: "range_t") -> None + About to delete tryblk information in given range + @param range: (const range_t *) -ida_idp.IDB_Hooks.destroyed_items (method) - destroyed_items(self, ea1, ea2, will_disable_range) - Instructions/data have been destroyed in [ea1,ea2). - +ida_idp.IDB_Hooks.destroyed_items(self, ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, will_disable_range: bool) -> None + Instructions/data have been destroyed in [ea1,ea2). + @param ea1: (::ea_t) @param ea2: (::ea_t) @param will_disable_range: (bool) -ida_idp.IDB_Hooks.determined_main (method) - determined_main(self, main) - The main() function has been determined. - +ida_idp.IDB_Hooks.determined_main(self, main: ida_idaapi.ea_t) -> None + The main() function has been determined. + @param main: (::ea_t) address of the main() function -ida_idp.IDB_Hooks.dirtree_link (method) - dirtree_link(self, dt, path, link) - +ida_idp.IDB_Hooks.dirtree_link(self, dt: "dirtree_t *", path: str, link: bool) -> None + Dirtree: an item has been linked/unlinked. + @param dt: (dirtree_t *) @param path: (::const char *) @param link: (::bool) -ida_idp.IDB_Hooks.dirtree_mkdir (method) - dirtree_mkdir(self, dt, path) - +ida_idp.IDB_Hooks.dirtree_mkdir(self, dt: "dirtree_t *", path: str) -> None + Dirtree: a directory has been created. + @param dt: (dirtree_t *) @param path: (::const char *) -ida_idp.IDB_Hooks.dirtree_move (method) - dirtree_move(self, dt, _from, to) - +ida_idp.IDB_Hooks.dirtree_move(self, dt: "dirtree_t *", _from: str, to: str) -> None + Dirtree: a directory or item has been moved. + @param dt: (dirtree_t *) - @param from: (::const char *) @param to: (::const char *) -ida_idp.IDB_Hooks.dirtree_rank (method) - dirtree_rank(self, dt, path, rank) - +ida_idp.IDB_Hooks.dirtree_rank(self, dt: "dirtree_t *", path: str, rank: "size_t") -> None + Dirtree: a directory or item rank has been changed. + @param dt: (dirtree_t *) @param path: (::const char *) @param rank: (::size_t) -ida_idp.IDB_Hooks.dirtree_rmdir (method) - dirtree_rmdir(self, dt, path) - +ida_idp.IDB_Hooks.dirtree_rmdir(self, dt: "dirtree_t *", path: str) -> None + Dirtree: a directory has been deleted. + @param dt: (dirtree_t *) @param path: (::const char *) -ida_idp.IDB_Hooks.dirtree_rminode (method) - dirtree_rminode(self, dt, inode) - +ida_idp.IDB_Hooks.dirtree_rminode(self, dt: "dirtree_t *", inode: "inode_t") -> None + Dirtree: an inode became unavailable. + @param dt: (dirtree_t *) @param inode: (inode_t) -ida_idp.IDB_Hooks.dirtree_segm_moved (method) - dirtree_segm_moved(self, dt) - +ida_idp.IDB_Hooks.dirtree_segm_moved(self, dt: "dirtree_t *") -> None + Dirtree: inodes were changed due to a segment movement or a program rebasing + @param dt: (dirtree_t *) -ida_idp.IDB_Hooks.enum_bf_changed (method) - enum_bf_changed(self, id) - An enum type 'bitfield' attribute has been changed. - - @param id: (enum_t) - -ida_idp.IDB_Hooks.enum_cmt_changed (method) - enum_cmt_changed(self, id, repeatable) - An enum or member type comment has been changed. - - @param id: (tid_t) - @param repeatable: (bool) - -ida_idp.IDB_Hooks.enum_created (method) - enum_created(self, id) - An enum type has been created. - - @param id: (enum_t) - -ida_idp.IDB_Hooks.enum_deleted (method) - enum_deleted(self, id) - An enum type has been deleted. - - @param id: (enum_t) - -ida_idp.IDB_Hooks.enum_flag_changed (method) - enum_flag_changed(self, id, F) - Enum flags have been changed. - - @param id: (enum_t) - @param F: (flags64_t) - -ida_idp.IDB_Hooks.enum_member_created (method) - enum_member_created(self, id, cid) - An enum member has been created. - - @param id: (enum_t) - @param cid: (const_t) - -ida_idp.IDB_Hooks.enum_member_deleted (method) - enum_member_deleted(self, id, cid) - An enum member has been deleted. - - @param id: (enum_t) - @param cid: (const_t) - -ida_idp.IDB_Hooks.enum_ordinal_changed (method) - enum_ordinal_changed(self, id, ord) - Enum mapping to a local type has been changed. - - @param id: (enum_t) - @param ord: (int) - -ida_idp.IDB_Hooks.enum_renamed (method) - enum_renamed(self, id) - An enum or member has been renamed. - - @param id: (tid_t) - -ida_idp.IDB_Hooks.enum_width_changed (method) - enum_width_changed(self, id, width) - Enum width has been changed. - - @param id: (enum_t) - @param width: (int) - -ida_idp.IDB_Hooks.expanding_struc (method) - expanding_struc(self, sptr, offset, delta) - A structure type is to be expanded/shrunk. - - @param sptr: (struc_t *) - @param offset: (::ea_t) - @param delta: (::adiff_t) - -ida_idp.IDB_Hooks.extlang_changed (method) - extlang_changed(self, kind, el, idx) - The list of extlangs or the default extlang was changed. - - @param kind: (int) 0: extlang installed 1: extlang removed 2: default extlang - changed +ida_idp.IDB_Hooks.extlang_changed(self, kind: int, el: "extlang_t *", idx: int) -> None + The list of extlangs or the default extlang was changed. + + @param kind: (int) 0: extlang installed 1: extlang removed 2: default extlang changed @param el: (extlang_t *) pointer to the extlang affected @param idx: (int) extlang index -ida_idp.IDB_Hooks.extra_cmt_changed (method) - extra_cmt_changed(self, ea, line_idx, cmt) - An extra comment has been changed. - +ida_idp.IDB_Hooks.extra_cmt_changed(self, ea: ida_idaapi.ea_t, line_idx: int, cmt: str) -> None + An extra comment has been changed. + @param ea: (::ea_t) @param line_idx: (int) @param cmt: (const char *) -ida_idp.IDB_Hooks.flow_chart_created (method) - flow_chart_created(self, fc) - Gui has retrieved a function flow chart. Plugins may modify the flow chart in - this callback. - +ida_idp.IDB_Hooks.flow_chart_created(self, fc: "qflow_chart_t") -> None + Gui has retrieved a function flow chart. Plugins may modify the flow chart in this callback. + @param fc: (qflow_chart_t *) -ida_idp.IDB_Hooks.frame_deleted (method) - frame_deleted(self, pfn) - The kernel has deleted a function frame. - +ida_idp.IDB_Hooks.frame_created(self, func_ea: ida_idaapi.ea_t) -> None + A function frame has been created. + + @param func_ea: (::ea_t) idb_event::frame_deleted + +ida_idp.IDB_Hooks.frame_deleted(self, pfn: "func_t *") -> None + The kernel has deleted a function frame. + + @param pfn: (func_t *) idb_event::frame_created + +ida_idp.IDB_Hooks.frame_expanded(self, func_ea: ida_idaapi.ea_t, udm_tid: "tid_t", delta: "adiff_t") -> None + A frame type has been expanded/shrank. + + @param func_ea: (::ea_t) + @param udm_tid: (tid_t) the gap was added/removed before this member + @param delta: (::adiff_t) number of added/removed bytes + +ida_idp.IDB_Hooks.frame_udm_changed(self, func_ea: ida_idaapi.ea_t, udm_tid: "tid_t", udmold: "udm_t", udmnew: "udm_t") -> None + Frame member has been changed. + + @param func_ea: (::ea_t) + @param udm_tid: (tid_t) + @param udmold: (::const udm_t *) + @param udmnew: (::const udm_t *) + +ida_idp.IDB_Hooks.frame_udm_created(self, func_ea: ida_idaapi.ea_t, udm: "udm_t") -> None + Frame member has been added. + + @param func_ea: (::ea_t) + @param udm: (::const udm_t *) + +ida_idp.IDB_Hooks.frame_udm_deleted(self, func_ea: ida_idaapi.ea_t, udm_tid: "tid_t", udm: "udm_t") -> None + Frame member has been deleted. + + @param func_ea: (::ea_t) + @param udm_tid: (tid_t) + @param udm: (::const udm_t *) + +ida_idp.IDB_Hooks.frame_udm_renamed(self, func_ea: ida_idaapi.ea_t, udm: "udm_t", oldname: str) -> None + Frame member has been renamed. + + @param func_ea: (::ea_t) + @param udm: (::const udm_t *) + @param oldname: (::const char *) + +ida_idp.IDB_Hooks.func_added(self, pfn: "func_t *") -> None + The kernel has added a function. + @param pfn: (func_t *) -ida_idp.IDB_Hooks.func_added (method) - func_added(self, pfn) - The kernel has added a function. - - @param pfn: (func_t *) - -ida_idp.IDB_Hooks.func_deleted (method) - func_deleted(self, func_ea) - A function has been deleted. - +ida_idp.IDB_Hooks.func_deleted(self, func_ea: ida_idaapi.ea_t) -> None + A function has been deleted. + @param func_ea: (::ea_t) -ida_idp.IDB_Hooks.func_noret_changed (method) - func_noret_changed(self, pfn) - FUNC_NORET bit has been changed. - +ida_idp.IDB_Hooks.func_noret_changed(self, pfn: "func_t *") -> None + FUNC_NORET bit has been changed. + @param pfn: (func_t *) -ida_idp.IDB_Hooks.func_tail_appended (method) - func_tail_appended(self, pfn, tail) - A function tail chunk has been appended. - +ida_idp.IDB_Hooks.func_tail_appended(self, pfn: "func_t *", tail: "func_t *") -> None + A function tail chunk has been appended. + @param pfn: (func_t *) @param tail: (func_t *) -ida_idp.IDB_Hooks.func_tail_deleted (method) - func_tail_deleted(self, pfn, tail_ea) - A function tail chunk has been removed. - +ida_idp.IDB_Hooks.func_tail_deleted(self, pfn: "func_t *", tail_ea: ida_idaapi.ea_t) -> None + A function tail chunk has been removed. + @param pfn: (func_t *) @param tail_ea: (::ea_t) -ida_idp.IDB_Hooks.func_updated (method) - func_updated(self, pfn) - The kernel has updated a function. - +ida_idp.IDB_Hooks.func_updated(self, pfn: "func_t *") -> None + The kernel has updated a function. + @param pfn: (func_t *) -ida_idp.IDB_Hooks.hook (method) - hook(self) -> bool +ida_idp.IDB_Hooks.hook(self) -> bool -ida_idp.IDB_Hooks.idasgn_loaded (method) - idasgn_loaded(self, short_sig_name) - FLIRT signature has been loaded for normal processing (not for recognition of - startup sequences). - +ida_idp.IDB_Hooks.idasgn_loaded(self, short_sig_name: str) -> None + FLIRT signature has been loaded for normal processing (not for recognition of startup sequences). + @param short_sig_name: (const char *) -ida_idp.IDB_Hooks.item_color_changed (method) - item_color_changed(self, ea, color) - An item color has been changed. - +ida_idp.IDB_Hooks.idasgn_matched_ea(self, ea: ida_idaapi.ea_t, name: str, lib_name: str) -> None + A FLIRT match has been found + + @param ea: (::ea_t) the matching address + @param name: (::const char *) the matched name + @param lib_name: (::const char *) library name extracted from signature file + +ida_idp.IDB_Hooks.item_color_changed(self, ea: ida_idaapi.ea_t, color: "bgcolor_t") -> None + An item color has been changed. + @param ea: (::ea_t) @param color: (bgcolor_t) if color==DEFCOLOR, the the color is deleted. -ida_idp.IDB_Hooks.kernel_config_loaded (method) - kernel_config_loaded(self, pass_number) - This event is issued when ida.cfg is parsed. - +ida_idp.IDB_Hooks.kernel_config_loaded(self, pass_number: int) -> None + This event is issued when ida.cfg is parsed. + @param pass_number: (int) -ida_idp.IDB_Hooks.loader_finished (method) - loader_finished(self, li, neflags, filetypename) - External file loader finished its work. Use this event to augment the existing - loader functionality. - +ida_idp.IDB_Hooks.loader_finished(self, li: "linput_t *", neflags: "uint16", filetypename: str) -> None + External file loader finished its work. Use this event to augment the existing loader functionality. + @param li: (linput_t *) @param neflags: (uint16) Load file flags @param filetypename: (const char *) -ida_idp.IDB_Hooks.local_types_changed (method) - local_types_changed(self, ltc, ordinal, name) - Local types have been changed - - @param ltc: (::local_type_change_t) +ida_idp.IDB_Hooks.local_types_changed(self, ltc: "local_type_change_t", ordinal: int, name: str) -> None + Local types have been changed + + @param ltc: (local_type_change_t) @param ordinal: (uint32) 0 means ordinal is unknown @param name: (const char *) nullptr means name is unknown -ida_idp.IDB_Hooks.make_code (method) - make_code(self, insn) - An instruction is being created. - +ida_idp.IDB_Hooks.lt_udm_changed(self, udtname: str, udm_tid: "tid_t", udmold: "udm_t", udmnew: "udm_t") -> None + local type udt member has been changed + + @param udtname: (::const char *) + @param udm_tid: (tid_t) + @param udmold: (::const udm_t *) + @param udmnew: (::const udm_t *) + +ida_idp.IDB_Hooks.lt_udm_created(self, udtname: str, udm: "udm_t") -> None + local type udt member has been added + + @param udtname: (::const char *) + @param udm: (::const udm_t *) + +ida_idp.IDB_Hooks.lt_udm_deleted(self, udtname: str, udm_tid: "tid_t", udm: "udm_t") -> None + local type udt member has been deleted + + @param udtname: (::const char *) + @param udm_tid: (tid_t) + @param udm: (::const udm_t *) + +ida_idp.IDB_Hooks.lt_udm_renamed(self, udtname: str, udm: "udm_t", oldname: str) -> None + local type udt member has been renamed + + @param udtname: (::const char *) + @param udm: (::const udm_t *) + @param oldname: (::const char *) + +ida_idp.IDB_Hooks.lt_udt_expanded(self, udtname: str, udm_tid: "tid_t", delta: "adiff_t") -> None + A structure type has been expanded/shrank. + + @param udtname: (::const char *) + @param udm_tid: (tid_t) the gap was added/removed before this member + @param delta: (::adiff_t) number of added/removed bytes + +ida_idp.IDB_Hooks.make_code(self, insn: "insn_t const *") -> None + An instruction is being created. + @param insn: (const insn_t*) -ida_idp.IDB_Hooks.make_data (method) - make_data(self, ea, flags, tid, len) - A data item is being created. - +ida_idp.IDB_Hooks.make_data(self, ea: ida_idaapi.ea_t, flags: "flags64_t", tid: "tid_t", len: "asize_t") -> None + A data item is being created. + @param ea: (::ea_t) @param flags: (flags64_t) @param tid: (tid_t) @param len: (::asize_t) -ida_idp.IDB_Hooks.op_ti_changed (method) - op_ti_changed(self, ea, n, type, fnames) - An operand typestring (c/c++ prototype) has been changed. - +ida_idp.IDB_Hooks.op_ti_changed(self, ea: ida_idaapi.ea_t, n: int, type: "type_t const *", fnames: "p_list const *") -> None + An operand typestring (c/c++ prototype) has been changed. + @param ea: (::ea_t) @param n: (int) @param type: (const type_t *) @param fnames: (const p_list *) -ida_idp.IDB_Hooks.op_type_changed (method) - op_type_changed(self, ea, n) - An operand type (offset, hex, etc...) has been set or deleted. - +ida_idp.IDB_Hooks.op_type_changed(self, ea: ida_idaapi.ea_t, n: int) -> None + An operand type (offset, hex, etc...) has been set or deleted. + @param ea: (::ea_t) @param n: (int) eventually or'ed with OPND_OUTER or OPND_ALL -ida_idp.IDB_Hooks.range_cmt_changed (method) - range_cmt_changed(self, kind, a, cmt, repeatable) - Range comment has been changed. - +ida_idp.IDB_Hooks.range_cmt_changed(self, kind: "range_kind_t", a: "range_t", cmt: str, repeatable: bool) -> None + Range comment has been changed. + @param kind: (range_kind_t) @param a: (const range_t *) @param cmt: (const char *) @param repeatable: (bool) -ida_idp.IDB_Hooks.renamed (method) - renamed(self, ea, new_name, local_name, old_name) - The kernel has renamed a byte. See also the rename event - +ida_idp.IDB_Hooks.renamed(self, ea: ida_idaapi.ea_t, new_name: str, local_name: bool, old_name: str) -> None + The kernel has renamed a byte. See also the rename event + @param ea: (::ea_t) @param new_name: (const char *) can be nullptr @param local_name: (bool) @param old_name: (const char *) can be nullptr -ida_idp.IDB_Hooks.renaming_enum (method) - renaming_enum(self, id, is_enum, newname) - An enum or enum member is to be renamed. - - @param id: (tid_t) - @param is_enum: (bool) - @param newname: (const char *) - -ida_idp.IDB_Hooks.renaming_struc (method) - renaming_struc(self, id, oldname, newname) - A structure type is to be renamed. - - @param id: (tid_t) - @param oldname: (const char *) - @param newname: (const char *) - -ida_idp.IDB_Hooks.renaming_struc_member (method) - renaming_struc_member(self, sptr, mptr, newname) - A structure member is to be renamed. - - @param sptr: (struc_t *) - @param mptr: (member_t *) - @param newname: (const char *) - -ida_idp.IDB_Hooks.savebase (method) - savebase(self) +ida_idp.IDB_Hooks.savebase(self) -> None The database is being saved. -ida_idp.IDB_Hooks.segm_added (method) - segm_added(self, s) - A new segment has been created. - +ida_idp.IDB_Hooks.segm_added(self, s: "segment_t *") -> None + A new segment has been created. + @param s: (segment_t *) See also adding_segm -ida_idp.IDB_Hooks.segm_attrs_updated (method) - segm_attrs_updated(self, s) - Segment attributes has been changed. - - @param s: (segment_t *) This event is generated for secondary segment attributes - (examples: color, permissions, etc) +ida_idp.IDB_Hooks.segm_attrs_updated(self, s: "segment_t *") -> None + Segment attributes has been changed. + + @param s: (segment_t *) This event is generated for secondary segment attributes (examples: color, permissions, etc) -ida_idp.IDB_Hooks.segm_class_changed (method) - segm_class_changed(self, s, sclass) - Segment class has been changed. - +ida_idp.IDB_Hooks.segm_class_changed(self, s: "segment_t *", sclass: str) -> None + Segment class has been changed. + @param s: (segment_t *) @param sclass: (const char *) -ida_idp.IDB_Hooks.segm_deleted (method) - segm_deleted(self, start_ea, end_ea, flags) - A segment has been deleted. - +ida_idp.IDB_Hooks.segm_deleted(self, start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, flags: int) -> None + A segment has been deleted. + @param start_ea: (::ea_t) @param end_ea: (::ea_t) @param flags: (int) -ida_idp.IDB_Hooks.segm_end_changed (method) - segm_end_changed(self, s, oldend) - Segment end address has been changed. - +ida_idp.IDB_Hooks.segm_end_changed(self, s: "segment_t *", oldend: ida_idaapi.ea_t) -> None + Segment end address has been changed. + @param s: (segment_t *) @param oldend: (::ea_t) -ida_idp.IDB_Hooks.segm_moved (method) - segm_moved(self, _from, to, size, changed_netmap) - Segment has been moved. - - @param from: (::ea_t) +ida_idp.IDB_Hooks.segm_moved(self, _from: ida_idaapi.ea_t, to: ida_idaapi.ea_t, size: "asize_t", changed_netmap: bool) -> None + Segment has been moved. + @param to: (::ea_t) @param size: (::asize_t) @param changed_netmap: (bool) See also idb_event::allsegs_moved -ida_idp.IDB_Hooks.segm_name_changed (method) - segm_name_changed(self, s, name) - Segment name has been changed. - +ida_idp.IDB_Hooks.segm_name_changed(self, s: "segment_t *", name: str) -> None + Segment name has been changed. + @param s: (segment_t *) @param name: (const char *) -ida_idp.IDB_Hooks.segm_start_changed (method) - segm_start_changed(self, s, oldstart) - Segment start address has been changed. - +ida_idp.IDB_Hooks.segm_start_changed(self, s: "segment_t *", oldstart: ida_idaapi.ea_t) -> None + Segment start address has been changed. + @param s: (segment_t *) @param oldstart: (::ea_t) -ida_idp.IDB_Hooks.set_func_end (method) - set_func_end(self, pfn, new_end) - Function chunk end address will be changed. - +ida_idp.IDB_Hooks.set_func_end(self, pfn: "func_t *", new_end: ida_idaapi.ea_t) -> None + Function chunk end address will be changed. + @param pfn: (func_t *) @param new_end: (::ea_t) -ida_idp.IDB_Hooks.set_func_start (method) - set_func_start(self, pfn, new_start) - Function chunk start address will be changed. - +ida_idp.IDB_Hooks.set_func_start(self, pfn: "func_t *", new_start: ida_idaapi.ea_t) -> None + Function chunk start address will be changed. + @param pfn: (func_t *) @param new_start: (::ea_t) -ida_idp.IDB_Hooks.sgr_changed (method) - sgr_changed(self, start_ea, end_ea, regnum, value, old_value, tag) - The kernel has changed a segment register value. - +ida_idp.IDB_Hooks.sgr_changed(self, start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, regnum: int, value: "sel_t", old_value: "sel_t", tag: "uchar") -> None + The kernel has changed a segment register value. + @param start_ea: (::ea_t) @param end_ea: (::ea_t) @param regnum: (int) @@ -34645,193 +23240,96 @@ ida_idp.IDB_Hooks.sgr_changed (method) @param old_value: (::sel_t) @param tag: (uchar) Segment register range tags -ida_idp.IDB_Hooks.sgr_deleted (method) - sgr_deleted(self, start_ea, end_ea, regnum) - The kernel has deleted a segment register value. - +ida_idp.IDB_Hooks.sgr_deleted(self, start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, regnum: int) -> None + The kernel has deleted a segment register value. + @param start_ea: (::ea_t) @param end_ea: (::ea_t) @param regnum: (int) -ida_idp.IDB_Hooks.stkpnts_changed (method) - stkpnts_changed(self, pfn) - Stack change points have been modified. - +ida_idp.IDB_Hooks.stkpnts_changed(self, pfn: "func_t *") -> None + Stack change points have been modified. + @param pfn: (func_t *) -ida_idp.IDB_Hooks.struc_align_changed (method) - struc_align_changed(self, sptr) - A structure type has been changed (the struct alignment). - - @param sptr: (struc_t *) - -ida_idp.IDB_Hooks.struc_cmt_changed (method) - struc_cmt_changed(self, struc_id, repeatable_cmt) - A structure type comment has been changed. - - @param struc_id: (tid_t) - @param repeatable_cmt: (bool) - -ida_idp.IDB_Hooks.struc_created (method) - struc_created(self, struc_id) - A new structure type has been created. - - @param struc_id: (tid_t) - -ida_idp.IDB_Hooks.struc_deleted (method) - struc_deleted(self, struc_id) - A structure type has been deleted. - - @param struc_id: (tid_t) - -ida_idp.IDB_Hooks.struc_expanded (method) - struc_expanded(self, sptr) - A structure type has been expanded/shrank. - - @param sptr: (struc_t *) - -ida_idp.IDB_Hooks.struc_member_changed (method) - struc_member_changed(self, sptr, mptr) - A structure member has been changed. - - @param sptr: (struc_t *) - @param mptr: (member_t *) - -ida_idp.IDB_Hooks.struc_member_created (method) - struc_member_created(self, sptr, mptr) - A structure member has been created. - - @param sptr: (struc_t *) - @param mptr: (member_t *) - -ida_idp.IDB_Hooks.struc_member_deleted (method) - struc_member_deleted(self, sptr, member_id, offset) - A structure member has been deleted. - - @param sptr: (struc_t *) - @param member_id: (tid_t) - @param offset: (::ea_t) - -ida_idp.IDB_Hooks.struc_member_renamed (method) - struc_member_renamed(self, sptr, mptr) - A structure member has been renamed. - - @param sptr: (struc_t *) - @param mptr: (member_t *) - -ida_idp.IDB_Hooks.struc_renamed (method) - struc_renamed(self, sptr, success) - A structure type has been renamed. - - @param sptr: (struc_t *) - @param success: (::bool) the structure was successfully renamed - -ida_idp.IDB_Hooks.tail_owner_changed (method) - tail_owner_changed(self, tail, owner_func, old_owner) - A tail chunk owner has been changed. - +ida_idp.IDB_Hooks.tail_owner_changed(self, tail: "func_t *", owner_func: ida_idaapi.ea_t, old_owner: ida_idaapi.ea_t) -> None + A tail chunk owner has been changed. + @param tail: (func_t *) @param owner_func: (::ea_t) @param old_owner: (::ea_t) -ida_idp.IDB_Hooks.thunk_func_created (method) - thunk_func_created(self, pfn) - A thunk bit has been set for a function. - +ida_idp.IDB_Hooks.thunk_func_created(self, pfn: "func_t *") -> None + A thunk bit has been set for a function. + @param pfn: (func_t *) -ida_idp.IDB_Hooks.ti_changed (method) - ti_changed(self, ea, type, fnames) - An item typestring (c/c++ prototype) has been changed. - +ida_idp.IDB_Hooks.ti_changed(self, ea: ida_idaapi.ea_t, type: "type_t const *", fnames: "p_list const *") -> None + An item typestring (c/c++ prototype) has been changed. + @param ea: (::ea_t) @param type: (const type_t *) @param fnames: (const p_list *) -ida_idp.IDB_Hooks.tryblks_updated (method) - tryblks_updated(self, tbv) - Updated tryblk information - +ida_idp.IDB_Hooks.tryblks_updated(self, tbv: "tryblks_t const *") -> None + Updated tryblk information + @param tbv: (const ::tryblks_t *) -ida_idp.IDB_Hooks.unhook (method) - unhook(self) -> bool +ida_idp.IDB_Hooks.unhook(self) -> bool -ida_idp.IDB_Hooks.updating_tryblks (method) - updating_tryblks(self, tbv) - About to update tryblk information - +ida_idp.IDB_Hooks.updating_tryblks(self, tbv: "tryblks_t const *") -> None + About to update tryblk information + @param tbv: (const ::tryblks_t *) -ida_idp.IDB_Hooks.upgraded (method) - upgraded(self, _from) - The database has been upgraded and the receiver can upgrade its info as well - - @param from: (int) - old IDB version +ida_idp.IDB_Hooks.upgraded(self, _from: int) -> None + The database has been upgraded and the receiver can upgrade its info as well + -ida_idp.IDP_Hooks (class) - Proxy of C++ IDP_Hooks class. +ida_idp.IDP_Hooks -ida_idp.IDP_Hooks.__disown__ (method) +ida_idp.IDP_Hooks.__disown__(self) -ida_idp.IDP_Hooks.__init__ (method) - __init__(self, _flags=0, _hkcb_flags=0x0001) -> IDP_Hooks - - @param _flags: uint32 - @param _hkcb_flags: uint32 +ida_idp.IDP_Hooks.__init__(self, _flags: int = 0, _hkcb_flags: int = 1) -ida_idp.IDP_Hooks.ev_add_cref (method) - ev_add_cref(self, _from, to, type) -> int - A code reference is being created. - - @param from: (::ea_t) +ida_idp.IDP_Hooks.ev_add_cref(self, _from: ida_idaapi.ea_t, to: ida_idaapi.ea_t, type: "cref_t") -> int + A code reference is being created. + @param to: (::ea_t) @param type: (cref_t) @retval <0: cancel cref creation @retval 0: not implemented or continue -ida_idp.IDP_Hooks.ev_add_dref (method) - ev_add_dref(self, _from, to, type) -> int - A data reference is being created. - - @param from: (::ea_t) +ida_idp.IDP_Hooks.ev_add_dref(self, _from: ida_idaapi.ea_t, to: ida_idaapi.ea_t, type: "dref_t") -> int + A data reference is being created. + @param to: (::ea_t) @param type: (dref_t) @retval <0: cancel dref creation @retval 0: not implemented or continue -ida_idp.IDP_Hooks.ev_adjust_argloc (method) - ev_adjust_argloc(self, argloc, optional_type, size) -> int - Adjust argloc according to its type/size and platform endianess - +ida_idp.IDP_Hooks.ev_adjust_argloc(self, argloc: "argloc_t", optional_type: "tinfo_t", size: int) -> int + Adjust argloc according to its type/size and platform endianess + @param argloc: (argloc_t *), inout - @param type: (const tinfo_t *), may be nullptr nullptr means primitive type of - given size - @param size: (int) 'size' makes no sense if type != nullptr (type->get_size() - should be used instead) + @param size: (int) 'size' makes no sense if type != nullptr (type->get_size() should be used instead) @retval 0: not implemented @retval 1: ok @retval -1: error -ida_idp.IDP_Hooks.ev_adjust_libfunc_ea (method) - ev_adjust_libfunc_ea(self, sig, libfun, ea) -> int - Called when a signature module has been matched against bytes in the database. - This is used to compute the offset at which a particular module's libfunc should - be applied. - +ida_idp.IDP_Hooks.ev_adjust_libfunc_ea(self, sig: "idasgn_t const *", libfun: "libfunc_t const *", ea: "ea_t *") -> int + Called when a signature module has been matched against bytes in the database. This is used to compute the offset at which a particular module's libfunc should be applied. + @param sig: (const idasgn_t *) @param libfun: (const libfunc_t *) @param ea: (::ea_t *) - @note: 'ea' initially contains the ea_t of the start of the pattern match @retval 1: the ea_t pointed to by the third argument was modified. @retval <=0: not modified. use default algorithm. -ida_idp.IDP_Hooks.ev_adjust_refinfo (method) - ev_adjust_refinfo(self, ri, ea, n, fd) -> int - Called from apply_fixup before converting operand to reference. Can be used for - changing the reference info. (e.g. the PPC module adds REFINFO_NOBASE for some - references) - +ida_idp.IDP_Hooks.ev_adjust_refinfo(self, ri: "refinfo_t", ea: ida_idaapi.ea_t, n: int, fd: "fixup_data_t const *") -> int + Called from apply_fixup before converting operand to reference. Can be used for changing the reference info. (e.g. the PPC module adds REFINFO_NOBASE for some references) + @param ri: (refinfo_t *) @param ea: (::ea_t) instruction address @param n: (int) operand number @@ -34839,107 +23337,90 @@ ida_idp.IDP_Hooks.ev_adjust_refinfo (method) @retval <0: do not create an offset @retval 0: not implemented or refinfo adjusted -ida_idp.IDP_Hooks.ev_ana_insn (method) - ev_ana_insn(self, out) -> bool - Analyze one instruction and fill 'out' structure. This function shouldn't change - the database, flags or anything else. All these actions should be performed only - by emu_insn() function. insn_t::ea contains address of instruction to analyze. - +ida_idp.IDP_Hooks.ev_ana_insn(self, out: "insn_t *") -> bool + Analyze one instruction and fill 'out' structure. This function shouldn't change the database, flags or anything else. All these actions should be performed only by emu_insn() function. insn_t::ea contains address of instruction to analyze. + @param out: (insn_t *) - @return: length of the instruction in bytes, 0 if instruction can't be decoded. + @returns length of the instruction in bytes, 0 if instruction can't be decoded. @retval 0: if instruction can't be decoded. -ida_idp.IDP_Hooks.ev_analyze_prolog (method) - ev_analyze_prolog(self, ea) -> int - Analyzes function prolog, epilog, and updates purge, and function attributes - +ida_idp.IDP_Hooks.ev_analyze_prolog(self, ea: ida_idaapi.ea_t) -> int + Analyzes function prolog, epilog, and updates purge, and function attributes + @param ea: (::ea_t) start of function @retval 1: ok @retval 0: not implemented -ida_idp.IDP_Hooks.ev_arch_changed (method) - ev_arch_changed(self) -> int - The loader is done parsing arch-related information, which the processor module - might want to use to finish its initialization. +ida_idp.IDP_Hooks.ev_arch_changed(self) -> int + The loader is done parsing arch-related information, which the processor module might want to use to finish its initialization. + @retval 1: if success @retval 0: not implemented or failed -ida_idp.IDP_Hooks.ev_arg_addrs_ready (method) - ev_arg_addrs_ready(self, caller, n, tif, addrs) -> int - Argument address info is ready. - +ida_idp.IDP_Hooks.ev_arg_addrs_ready(self, caller: ida_idaapi.ea_t, n: int, tif: "tinfo_t", addrs: "ea_t *") -> int + Argument address info is ready. + @param caller: (::ea_t) @param n: (int) number of formal arguments @param tif: (tinfo_t *) call prototype @param addrs: (::ea_t *) argument intilization addresses @retval <0: do not save into idb; other values mean "ok to save" -ida_idp.IDP_Hooks.ev_asm_installed (method) - ev_asm_installed(self, asmnum) -> int - After setting a new assembler - +ida_idp.IDP_Hooks.ev_asm_installed(self, asmnum: int) -> int + After setting a new assembler + @param asmnum: (int) See also ev_newasm -ida_idp.IDP_Hooks.ev_assemble (method) - ev_assemble(self, ea, cs, ip, use32, line) -> PyObject * - Assemble an instruction. (display a warning if an error is found). - +ida_idp.IDP_Hooks.ev_assemble(self, ea: ida_idaapi.ea_t, cs: ida_idaapi.ea_t, ip: ida_idaapi.ea_t, use32: bool, line: str) -> "PyObject *" + Assemble an instruction. (display a warning if an error is found). + @param ea: (::ea_t) linear address of instruction @param cs: (::ea_t) cs of instruction @param ip: (::ea_t) ip of instruction @param use32: (bool) is 32bit segment? @param line: (const char *) line to assemble - @return: size of the instruction in bytes + @returns size of the instruction in bytes -ida_idp.IDP_Hooks.ev_auto_queue_empty (method) - ev_auto_queue_empty(self, type) -> int - One analysis queue is empty. - +ida_idp.IDP_Hooks.ev_auto_queue_empty(self, type: "atype_t") -> int + One analysis queue is empty. + @param type: (atype_t) @retval void: see also idb_event::auto_empty_finally -ida_idp.IDP_Hooks.ev_calc_arglocs (method) - ev_calc_arglocs(self, fti) -> int - Calculate function argument locations. This callback should fill retloc, all - arglocs, and stkargs. This callback is never called for CM_CC_SPECIAL functions. - +ida_idp.IDP_Hooks.ev_calc_arglocs(self, fti: "func_type_data_t") -> int + Calculate function argument locations. This callback should fill retloc, all arglocs, and stkargs. This callback is never called for CM_CC_SPECIAL functions. + @param fti: (func_type_data_t *) points to the func type info @retval 0: not implemented @retval 1: ok @retval -1: error -ida_idp.IDP_Hooks.ev_calc_cdecl_purged_bytes (method) - ev_calc_cdecl_purged_bytes(self, ea) -> int - Calculate number of purged bytes after call. - +ida_idp.IDP_Hooks.ev_calc_cdecl_purged_bytes(self, ea: ida_idaapi.ea_t) -> int + Calculate number of purged bytes after call. + @param ea: (::ea_t) address of the call instruction - @return: number of purged bytes (usually add sp, N) + @returns number of purged bytes (usually add sp, N) -ida_idp.IDP_Hooks.ev_calc_next_eas (method) - ev_calc_next_eas(self, res, insn, over) -> int - Calculate list of addresses the instruction in 'insn' may pass control to. This - callback is required for source level debugging. - +ida_idp.IDP_Hooks.ev_calc_next_eas(self, res: "eavec_t *", insn: "insn_t const *", over: bool) -> int + Calculate list of addresses the instruction in 'insn' may pass control to. This callback is required for source level debugging. + @param res: (eavec_t *), out: array for the results. @param insn: (const insn_t*) the instruction @param over: (bool) calculate for step over (ignore call targets) @retval <0: incalculable (indirect jumps, for example) - @retval >=0: number of addresses of called functions in the array. They must be - put at the beginning of the array (0 if over=true) + @retval >=0: number of addresses of called functions in the array. They must be put at the beginning of the array (0 if over=true) -ida_idp.IDP_Hooks.ev_calc_purged_bytes (method) - ev_calc_purged_bytes(self, p_purged_bytes, fti) -> int - Calculate number of purged bytes by the given function type. - +ida_idp.IDP_Hooks.ev_calc_purged_bytes(self, p_purged_bytes: "int *", fti: "func_type_data_t") -> int + Calculate number of purged bytes by the given function type. + @param p_purged_bytes: (int *) ptr to output @param fti: (const func_type_data_t *) func type details - @retval 1 + @retval 1: @retval 0: not implemented -ida_idp.IDP_Hooks.ev_calc_retloc (method) - ev_calc_retloc(self, retloc, rettype, cc) -> int - Calculate return value location. - +ida_idp.IDP_Hooks.ev_calc_retloc(self, retloc: "argloc_t", rettype: "tinfo_t", cc: "cm_t") -> int + Calculate return value location. + @param retloc: (argloc_t *) @param rettype: (const tinfo_t *) @param cc: (cm_t) @@ -34947,31 +23428,25 @@ ida_idp.IDP_Hooks.ev_calc_retloc (method) @retval 1: ok, @retval -1: error -ida_idp.IDP_Hooks.ev_calc_spdelta (method) - ev_calc_spdelta(self, spdelta, insn) -> int - Calculate amount of change to sp for the given insn. This event is required to - decompile code snippets. - +ida_idp.IDP_Hooks.ev_calc_spdelta(self, spdelta: "sval_t *", insn: "insn_t const *") -> int + Calculate amount of change to sp for the given insn. This event is required to decompile code snippets. + @param spdelta: (sval_t *) @param insn: (const insn_t *) @retval 1: ok @retval 0: not implemented -ida_idp.IDP_Hooks.ev_calc_step_over (method) - ev_calc_step_over(self, target, ip) -> int - Calculate the address of the instruction which will be executed after "step - over". The kernel will put a breakpoint there. If the step over is equal to step - into or we cannot calculate the address, return BADADDR. - +ida_idp.IDP_Hooks.ev_calc_step_over(self, target: "ea_t *", ip: ida_idaapi.ea_t) -> int + Calculate the address of the instruction which will be executed after "step over". The kernel will put a breakpoint there. If the step over is equal to step into or we cannot calculate the address, return BADADDR. + @param target: (::ea_t *) pointer to the answer @param ip: (::ea_t) instruction address @retval 0: unimplemented @retval 1: implemented -ida_idp.IDP_Hooks.ev_calc_switch_cases (method) - ev_calc_switch_cases(self, casevec, targets, insn_ea, si) -> int - Calculate case values and targets for a custom jump table. - +ida_idp.IDP_Hooks.ev_calc_switch_cases(self, casevec: "casevec_t *", targets: "eavec_t *", insn_ea: ida_idaapi.ea_t, si: "switch_info_t") -> int + Calculate case values and targets for a custom jump table. + @param casevec: (::casevec_t *) vector of case values (may be nullptr) @param targets: (eavec_t *) corresponding target addresses (my be nullptr) @param insn_ea: (::ea_t) address of the 'indirect jump' instruction @@ -34979,244 +23454,189 @@ ida_idp.IDP_Hooks.ev_calc_switch_cases (method) @retval 1: ok @retval <=0: failed -ida_idp.IDP_Hooks.ev_calc_varglocs (method) - ev_calc_varglocs(self, ftd, aux_regs, aux_stkargs, nfixed) -> int - Calculate locations of the arguments that correspond to '...'. - - @param ftd: (func_type_data_t *), inout: info about all arguments (including - varargs) - @param aux_regs: (regobjs_t *) buffer for hidden register arguments, may be - nullptr - @param aux_stkargs: (relobj_t *) buffer for hidden stack arguments, may be - nullptr +ida_idp.IDP_Hooks.ev_calc_varglocs(self, ftd: "func_type_data_t", aux_regs: "regobjs_t", aux_stkargs: "relobj_t", nfixed: int) -> int + Calculate locations of the arguments that correspond to '...'. + + @param ftd: (func_type_data_t *), inout: info about all arguments (including varargs) + @param aux_regs: (regobjs_t *) buffer for hidden register arguments, may be nullptr + @param aux_stkargs: (relobj_t *) buffer for hidden stack arguments, may be nullptr @param nfixed: (int) number of fixed arguments @retval 0: not implemented @retval 1: ok - @retval -1: error On some platforms variadic calls require passing additional - information: for example, number of floating variadic arguments must - be passed in rax on gcc-x64. The locations and values that - constitute this additional information are returned in the buffers - pointed by aux_regs and aux_stkargs + @retval -1: error On some platforms variadic calls require passing additional information: for example, number of floating variadic arguments must be passed in rax on gcc-x64. The locations and values that constitute this additional information are returned in the buffers pointed by aux_regs and aux_stkargs -ida_idp.IDP_Hooks.ev_calcrel (method) - ev_calcrel(self) -> int +ida_idp.IDP_Hooks.ev_calcrel(self) -> int Reserved. -ida_idp.IDP_Hooks.ev_can_have_type (method) - ev_can_have_type(self, op) -> int - Can the operand have a type as offset, segment, decimal, etc? (for example, a - register AX can't have a type, meaning that the user can't change its - representation. see bytes.hpp for information about types and flags) - +ida_idp.IDP_Hooks.ev_can_have_type(self, op: "op_t const *") -> int + Can the operand have a type as offset, segment, decimal, etc? (for example, a register AX can't have a type, meaning that the user can't change its representation. see bytes.hpp for information about types and flags) + @param op: (const op_t *) @retval 0: unknown @retval <0: no @retval 1: yes -ida_idp.IDP_Hooks.ev_clean_tbit (method) - ev_clean_tbit(self, ea, getreg, regvalues) -> int - Clear the TF bit after an insn like pushf stored it in memory. - +ida_idp.IDP_Hooks.ev_clean_tbit(self, ea: ida_idaapi.ea_t, getreg: "processor_t::regval_getter_t *", regvalues: "regval_t") -> int + Clear the TF bit after an insn like pushf stored it in memory. + @param ea: (::ea_t) instruction address - @param getreg: (::processor_t::regval_getter_t *) function to get register - values + @param getreg: (::processor_t::regval_getter_t *) function to get register values @param regvalues: (const regval_t *) register values array @retval 1: ok @retval 0: failed -ida_idp.IDP_Hooks.ev_cmp_operands (method) - ev_cmp_operands(self, op1, op2) -> int - Compare instruction operands - +ida_idp.IDP_Hooks.ev_cmp_operands(self, op1: "op_t const *", op2: "op_t const *") -> int + Compare instruction operands + @param op1: (const op_t*) @param op2: (const op_t*) @retval 1: equal @retval -1: not equal @retval 0: not implemented -ida_idp.IDP_Hooks.ev_coagulate (method) - ev_coagulate(self, start_ea) -> int - Try to define some unexplored bytes. This notification will be called if the - kernel tried all possibilities and could not find anything more useful than to - convert to array of bytes. The module can help the kernel and convert the bytes - into something more useful. - +ida_idp.IDP_Hooks.ev_coagulate(self, start_ea: ida_idaapi.ea_t) -> int + Try to define some unexplored bytes. This notification will be called if the kernel tried all possibilities and could not find anything more useful than to convert to array of bytes. The module can help the kernel and convert the bytes into something more useful. + @param start_ea: (::ea_t) - @return: number of converted bytes + @returns number of converted bytes -ida_idp.IDP_Hooks.ev_coagulate_dref (method) - ev_coagulate_dref(self, _from, to, may_define, code_ea) -> int - Data reference is being analyzed. plugin may correct 'code_ea' (e.g. for thumb - mode refs, we clear the last bit) - - @param from: (::ea_t) +ida_idp.IDP_Hooks.ev_coagulate_dref(self, _from: ida_idaapi.ea_t, to: ida_idaapi.ea_t, may_define: bool, code_ea: "ea_t *") -> int + Data reference is being analyzed. plugin may correct 'code_ea' (e.g. for thumb mode refs, we clear the last bit) + @param to: (::ea_t) @param may_define: (bool) @param code_ea: (::ea_t *) @retval <0: failed dref analysis, >0 done dref analysis @retval 0: not implemented or continue -ida_idp.IDP_Hooks.ev_create_flat_group (method) - ev_create_flat_group(self, image_base, bitness, dataseg_sel) -> int - Create special segment representing the flat group. - +ida_idp.IDP_Hooks.ev_create_flat_group(self, image_base: ida_idaapi.ea_t, bitness: int, dataseg_sel: "sel_t") -> int + Create special segment representing the flat group. + @param image_base: (::ea_t) @param bitness: (int) @param dataseg_sel: (::sel_t) return value is ignored -ida_idp.IDP_Hooks.ev_create_func_frame (method) - ev_create_func_frame(self, pfn) -> int - Create a function frame for a newly created function Set up frame size, its - attributes etc - +ida_idp.IDP_Hooks.ev_create_func_frame(self, pfn: "func_t *") -> int + Create a function frame for a newly created function Set up frame size, its attributes etc + @param pfn: (func_t *) @retval 1: ok @retval 0: not implemented -ida_idp.IDP_Hooks.ev_create_merge_handlers (method) - ev_create_merge_handlers(self, md) -> int - Create merge handlers, if needed - - @param md: (merge_data_t *) This event is generated immediately after opening - idbs. - @return: must be 0 +ida_idp.IDP_Hooks.ev_create_merge_handlers(self, md: "merge_data_t *") -> int + Create merge handlers, if needed + + @param md: (merge_data_t *) This event is generated immediately after opening idbs. + @returns must be 0 -ida_idp.IDP_Hooks.ev_create_switch_xrefs (method) - ev_create_switch_xrefs(self, jumpea, si) -> int - Create xrefs for a custom jump table. - +ida_idp.IDP_Hooks.ev_create_switch_xrefs(self, jumpea: ida_idaapi.ea_t, si: "switch_info_t") -> int + Create xrefs for a custom jump table. + @param jumpea: (::ea_t) address of the jump insn @param si: (const switch_info_t *) switch information - @return: must return 1 Must be implemented if module uses custom jump tables, - SWI_CUSTOM + @returns must return 1 Must be implemented if module uses custom jump tables, SWI_CUSTOM -ida_idp.IDP_Hooks.ev_creating_segm (method) - ev_creating_segm(self, seg) -> int - A new segment is about to be created. - +ida_idp.IDP_Hooks.ev_creating_segm(self, seg: "segment_t *") -> int + A new segment is about to be created. + @param seg: (segment_t *) @retval 1: ok @retval <0: segment should not be created -ida_idp.IDP_Hooks.ev_cvt64_hashval (method) - ev_cvt64_hashval(self, node, tag, name, data) -> int - perform 32-64 conversion for a hash value - +ida_idp.IDP_Hooks.ev_cvt64_hashval(self, node: "nodeidx_t", tag: "uchar", name: str, data: "uchar const *") -> int + perform 32-64 conversion for a hash value + @param node: (::nodeidx_t) @param tag: (uchar) @param name: (const ::char *) @param data: (const uchar *) - @return: 0 nothing was done - 1 converted successfully - -1 error (and message in errbuf) + @retval 0: nothing was done + @retval 1: converted successfully + @retval -1: error (and message in errbuf) -ida_idp.IDP_Hooks.ev_cvt64_supval (method) - ev_cvt64_supval(self, node, tag, idx, data) -> int - perform 32-64 conversion for a netnode array element - +ida_idp.IDP_Hooks.ev_cvt64_supval(self, node: "nodeidx_t", tag: "uchar", idx: "nodeidx_t", data: "uchar const *") -> int + perform 32-64 conversion for a netnode array element + @param node: (::nodeidx_t) @param tag: (uchar) @param idx: (::nodeidx_t) @param data: (const uchar *) - @return: 0 nothing was done - 1 converted successfully - -1 error (and message in errbuf) + @retval 0: nothing was done + @retval 1: converted successfully + @retval -1: error (and message in errbuf) -ida_idp.IDP_Hooks.ev_decorate_name (method) - ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * - Decorate/undecorate a C symbol name. - +ida_idp.IDP_Hooks.ev_decorate_name(self, name: str, mangle: bool, cc: int, optional_type: "tinfo_t") -> "PyObject *" + Decorate/undecorate a C symbol name. + @param name: (const char *) name of symbol @param mangle: (bool) true-mangle, false-unmangle @param cc: (cm_t) calling convention - @param optional_type: tinfo_t const * @retval 1: if success @retval 0: not implemented or failed -ida_idp.IDP_Hooks.ev_del_cref (method) - ev_del_cref(self, _from, to, expand) -> int - A code reference is being deleted. - - @param from: (::ea_t) +ida_idp.IDP_Hooks.ev_del_cref(self, _from: ida_idaapi.ea_t, to: ida_idaapi.ea_t, expand: bool) -> int + A code reference is being deleted. + @param to: (::ea_t) @param expand: (bool) @retval <0: cancel cref deletion @retval 0: not implemented or continue -ida_idp.IDP_Hooks.ev_del_dref (method) - ev_del_dref(self, _from, to) -> int - A data reference is being deleted. - - @param from: (::ea_t) +ida_idp.IDP_Hooks.ev_del_dref(self, _from: ida_idaapi.ea_t, to: ida_idaapi.ea_t) -> int + A data reference is being deleted. + @param to: (::ea_t) @retval <0: cancel dref deletion @retval 0: not implemented or continue -ida_idp.IDP_Hooks.ev_delay_slot_insn (method) - ev_delay_slot_insn(self, ea, bexec, fexec) -> PyObject * - Get delay slot instruction - - @param ea: (::ea_t *) in: instruction address in question, out: (if the answer - is positive) if the delay slot contains valid insn: the address of - the delay slot insn else: BADADDR (invalid insn, e.g. a branch) +ida_idp.IDP_Hooks.ev_delay_slot_insn(self, ea: ida_idaapi.ea_t, bexec: bool, fexec: bool) -> "PyObject *" + Get delay slot instruction + + @param ea: (::ea_t *) in: instruction address in question, out: (if the answer is positive) if the delay slot contains valid insn: the address of the delay slot insn else: BADADDR (invalid insn, e.g. a branch) @param bexec: (bool *) execute slot if jumping, initially set to 'true' @param fexec: (bool *) execute slot if not jumping, initally set to 'true' @retval 1: positive answer @retval <=0: ordinary insn - @note: Input EA may point to the instruction with a delay slot or to the delay - slot instruction itself. -ida_idp.IDP_Hooks.ev_demangle_name (method) - ev_demangle_name(self, name, disable_mask, demreq) -> PyObject * - Demangle a C++ (or another language) name into a user-readable string. This - event is called by demangle_name() - +ida_idp.IDP_Hooks.ev_demangle_name(self, name: str, disable_mask: int, demreq: int) -> "PyObject *" + Demangle a C++ (or another language) name into a user-readable string. This event is called by demangle_name() + @param name: (const char *) mangled name - @param disable_mask: (uint32) flags to inhibit parts of output or compiler - info/other (see MNG_) + @param disable_mask: (uint32) flags to inhibit parts of output or compiler info/other (see MNG_) @param demreq: (demreq_type_t) operation to perform @retval 1: if success @retval 0: not implemented - @note: if you call demangle_name() from the handler, protect against recursion! -ida_idp.IDP_Hooks.ev_emu_insn (method) - 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. - +ida_idp.IDP_Hooks.ev_emu_insn(self, insn: "insn_t const *") -> 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. + @param insn: (const insn_t *) @retval 1: ok @retval -1: the kernel will delete the instruction -ida_idp.IDP_Hooks.ev_endbinary (method) - ev_endbinary(self, ok) -> int - IDA has loaded a binary file. - +ida_idp.IDP_Hooks.ev_endbinary(self, ok: bool) -> int + IDA has loaded a binary file. + @param ok: (bool) file loaded successfully? -ida_idp.IDP_Hooks.ev_ending_undo (method) - ev_ending_undo(self, action_name, is_undo) -> int - Ended undoing/redoing an action - - @param action_name: (const char *) action that we finished undoing/redoing. is - not nullptr. +ida_idp.IDP_Hooks.ev_ending_undo(self, action_name: str, is_undo: bool) -> int + Ended undoing/redoing an action + + @param action_name: (const char *) action that we finished undoing/redoing. is not nullptr. @param is_undo: (bool) true if performing undo, false if performing redo -ida_idp.IDP_Hooks.ev_equal_reglocs (method) - ev_equal_reglocs(self, a1, a2) -> int - Are 2 register arglocs the same?. We need this callback for the pc module. - +ida_idp.IDP_Hooks.ev_equal_reglocs(self, a1: "argloc_t", a2: "argloc_t") -> int + Are 2 register arglocs the same?. We need this callback for the pc module. + @param a1: (argloc_t *) @param a2: (argloc_t *) @retval 1: yes @retval -1: no @retval 0: not implemented -ida_idp.IDP_Hooks.ev_extract_address (method) - ev_extract_address(self, out_ea, screen_ea, string, position) -> int - Extract address from a string. - +ida_idp.IDP_Hooks.ev_extract_address(self, out_ea: "ea_t *", screen_ea: ida_idaapi.ea_t, string: str, position: "size_t") -> int + Extract address from a string. + @param out_ea: (ea_t *), out @param screen_ea: (ea_t) @param string: (const char *) @@ -35225,192 +23645,165 @@ ida_idp.IDP_Hooks.ev_extract_address (method) @retval 0: kernel should use the standard algorithm @retval -1: error -ida_idp.IDP_Hooks.ev_find_op_value (method) - ev_find_op_value(self, pinsn, opn) -> PyObject * - Find operand value via a register tracker. The returned value in 'out' is valid - before executing the instruction. - +ida_idp.IDP_Hooks.ev_find_op_value(self, pinsn: "insn_t const *", opn: int) -> "PyObject *" + Find operand value via a register tracker. The returned value in 'out' is valid before executing the instruction. + @param pinsn: (const insn_t *) instruction @param opn: (int) operand index @retval 1: if implemented, and value was found @retval 0: not implemented, -1 decoding failed, or no value found -ida_idp.IDP_Hooks.ev_find_reg_value (method) - ev_find_reg_value(self, pinsn, reg) -> PyObject * - Find register value via a register tracker. The returned value in 'out' is valid - before executing the instruction. - +ida_idp.IDP_Hooks.ev_find_reg_value(self, pinsn: "insn_t const *", reg: int) -> "PyObject *" + Find register value via a register tracker. The returned value in 'out' is valid before executing the instruction. + @param pinsn: (const insn_t *) instruction @param reg: (int) register index @retval 1: if implemented, and value was found @retval 0: not implemented, -1 decoding failed, or no value found -ida_idp.IDP_Hooks.ev_func_bounds (method) - ev_func_bounds(self, possible_return_code, pfn, max_func_end_ea) -> int - find_func_bounds() finished its work. The module may fine tune the function - bounds - +ida_idp.IDP_Hooks.ev_func_bounds(self, possible_return_code: "int *", pfn: "func_t *", max_func_end_ea: ida_idaapi.ea_t) -> int + find_func_bounds() finished its work. The module may fine tune the function bounds + @param possible_return_code: (int *), in/out @param pfn: (func_t *) @param max_func_end_ea: (::ea_t) (from the kernel's point of view) - @retval void + @retval void: -ida_idp.IDP_Hooks.ev_gen_asm_or_lst (method) - ev_gen_asm_or_lst(self, starting, fp, is_asm, flags, outline) -> int - +ida_idp.IDP_Hooks.ev_gen_asm_or_lst(self, starting: bool, fp: "FILE *", is_asm: bool, flags: int, outline: "html_line_cb_t **") -> int + Callback: generating asm or lst file. The kernel calls this callback twice, at the beginning and at the end of listing generation. The processor module can intercept this event and adjust its output + @param starting: (bool) beginning listing generation @param fp: (FILE *) output file @param is_asm: (bool) true:assembler, false:listing @param flags: (int) flags passed to gen_file() - @param outline: (html_line_cb_t **) ptr to ptr to outline callback. if this - callback is defined for this code, it will be used by the kernel - to output the generated lines - @retval void + @param outline: (html_line_cb_t **) ptr to ptr to outline callback. if this callback is defined for this code, it will be used by the kernel to output the generated lines + @retval void: -ida_idp.IDP_Hooks.ev_gen_map_file (method) - ev_gen_map_file(self, nlines, fp) -> int - Generate map file. If not implemented the kernel itself will create the map - file. - +ida_idp.IDP_Hooks.ev_gen_map_file(self, nlines: "int *", fp: "FILE *") -> int + Generate map file. If not implemented the kernel itself will create the map file. + @param nlines: (int *) number of lines in map file (-1 means write error) @param fp: (FILE *) output file @retval 0: not implemented @retval 1: ok @retval -1: write error -ida_idp.IDP_Hooks.ev_gen_regvar_def (method) - ev_gen_regvar_def(self, outctx, v) -> int - Generate register variable definition line. - +ida_idp.IDP_Hooks.ev_gen_regvar_def(self, outctx: "outctx_t *", v: "regvar_t *") -> int + Generate register variable definition line. + @param outctx: (outctx_t *) @param v: (regvar_t *) @retval >0: ok, generated the definition text @retval 0: not implemented -ida_idp.IDP_Hooks.ev_gen_src_file_lnnum (method) - ev_gen_src_file_lnnum(self, outctx, file, lnnum) -> int +ida_idp.IDP_Hooks.ev_gen_src_file_lnnum(self, outctx: "outctx_t *", file: str, lnnum: "size_t") -> int + Callback: generate analog of: + #line 123 + + + @param outctx: (outctx_t *) output context @param file: (const char *) source file (may be nullptr) @param lnnum: (size_t) line number @retval 1: directive has been generated @retval 0: not implemented -ida_idp.IDP_Hooks.ev_gen_stkvar_def (method) - ev_gen_stkvar_def(self, outctx, mptr, v) -> int - Generate stack variable definition line Default line is varname = type ptr - value, where 'type' is one of byte,word,dword,qword,tbyte - +ida_idp.IDP_Hooks.ev_gen_stkvar_def(self, outctx: "outctx_t *", stkvar: "udm_t", v: int, tid: "tid_t") -> int + Generate stack variable definition line Default line is varname = type ptr value, where 'type' is one of byte,word,dword,qword,tbyte + @param outctx: (outctx_t *) - @param mptr: (const member_t *) + @param stkvar: (const udm_t *) @param v: (sval_t) + @param tid: (tid_t) stkvar TID @retval 1: ok @retval 0: not implemented -ida_idp.IDP_Hooks.ev_get_abi_info (method) - ev_get_abi_info(self, abi_names, abi_opts, comp) -> int - Get all possible ABI names and optional extensions for given compiler - abiname/option is a string entirely consisting of letters, digits and underscore - - @param abi_names: (qstrvec_t *) - all possible ABis each in form abiname- - opt1-opt2-... - @param abi_opts: (qstrvec_t *) - array of all possible options in form - "opt:description" or opt:hint-line#description +ida_idp.IDP_Hooks.ev_get_abi_info(self, comp: "comp_t") -> int + Get all possible ABI names and optional extensions for given compiler abiname/option is a string entirely consisting of letters, digits and underscore + @param comp: (comp_t) - compiler ID @retval 0: not implemented @retval 1: ok -ida_idp.IDP_Hooks.ev_get_autocmt (method) - ev_get_autocmt(self, insn) -> PyObject * - +ida_idp.IDP_Hooks.ev_get_autocmt(self, insn: "insn_t const *") -> "PyObject *" + Callback: get dynamic auto comment. Will be called if the autocomments are enabled and the comment retrieved from ida.int starts with '$!'. 'insn' contains valid info. + @param insn: (const insn_t*) the instruction @retval 1: new comment has been generated - @retval 0: callback has not been handled. the buffer must not be changed in this - case + @retval 0: callback has not been handled. the buffer must not be changed in this case -ida_idp.IDP_Hooks.ev_get_bg_color (method) - ev_get_bg_color(self, color, ea) -> int - Get item background color. Plugins can hook this callback to color disassembly - lines dynamically - +ida_idp.IDP_Hooks.ev_get_bg_color(self, color: "bgcolor_t *", ea: ida_idaapi.ea_t) -> int + Get item background color. Plugins can hook this callback to color disassembly lines dynamically + @param color: (bgcolor_t *), out @param ea: (::ea_t) @retval 0: not implemented @retval 1: color set -ida_idp.IDP_Hooks.ev_get_cc_regs (method) - ev_get_cc_regs(self, regs, cc) -> int - Get register allocation convention for given calling convention - +ida_idp.IDP_Hooks.ev_get_cc_regs(self, regs: "callregs_t", cc: "cm_t") -> int + Get register allocation convention for given calling convention + @param regs: (callregs_t *), out @param cc: (cm_t) - @retval 1 + @retval 1: @retval 0: not implemented -ida_idp.IDP_Hooks.ev_get_code16_mode (method) - ev_get_code16_mode(self, ea) -> int - Get ISA 16-bit mode - +ida_idp.IDP_Hooks.ev_get_code16_mode(self, ea: ida_idaapi.ea_t) -> int + Get ISA 16-bit mode + @param ea: (ea_t) address to get the ISA mode @retval 1: 16-bit mode @retval 0: not implemented or 32-bit mode -ida_idp.IDP_Hooks.ev_get_dbr_opnum (method) - ev_get_dbr_opnum(self, opnum, insn) -> int - Get the number of the operand to be displayed in the debugger reference view - (text mode). - +ida_idp.IDP_Hooks.ev_get_dbr_opnum(self, opnum: "int *", insn: "insn_t const *") -> int + Get the number of the operand to be displayed in the debugger reference view (text mode). + @param opnum: (int *) operand number (out, -1 means no such operand) @param insn: (const insn_t*) the instruction @retval 0: unimplemented @retval 1: implemented -ida_idp.IDP_Hooks.ev_get_default_enum_size (method) - ev_get_default_enum_size(self) -> int - Get default enum size. Not generated anymore. inf_get_cc_size_e() is used - instead +ida_idp.IDP_Hooks.ev_get_default_enum_size(self) -> int + Get default enum size. Not generated anymore. inf_get_cc_size_e() is used instead + -ida_idp.IDP_Hooks.ev_get_frame_retsize (method) - ev_get_frame_retsize(self, frsize, pfn) -> int - Get size of function return address in bytes If this event is not implemented, - the kernel will assume +ida_idp.IDP_Hooks.ev_get_frame_retsize(self, frsize: "int *", pfn: "func_t const *") -> int + Get size of function return address in bytes If this event is not implemented, the kernel will assume * 8 bytes for 64-bit function * 4 bytes for 32-bit function * 2 bytes otherwise + + @param frsize: (int *) frame size (out) @param pfn: (const func_t *), can't be nullptr @retval 1: ok @retval 0: not implemented -ida_idp.IDP_Hooks.ev_get_macro_insn_head (method) - ev_get_macro_insn_head(self, head, ip) -> int - Calculate the start of a macro instruction. This notification is called if IP - points to the middle of an instruction - +ida_idp.IDP_Hooks.ev_get_macro_insn_head(self, head: "ea_t *", ip: ida_idaapi.ea_t) -> int + Calculate the start of a macro instruction. This notification is called if IP points to the middle of an instruction + @param head: (::ea_t *), out: answer, BADADDR means normal instruction @param ip: (::ea_t) instruction address @retval 0: unimplemented @retval 1: implemented -ida_idp.IDP_Hooks.ev_get_operand_string (method) - ev_get_operand_string(self, insn, opnum) -> PyObject * - Request text string for operand (cli, java, ...). - +ida_idp.IDP_Hooks.ev_get_operand_string(self, insn: "insn_t const *", opnum: int) -> "PyObject *" + Request text string for operand (cli, java, ...). + @param insn: (const insn_t*) the instruction @param opnum: (int) operand number, -1 means any string operand @retval 0: no string (or empty string) @retval >0: original string length without terminating zero -ida_idp.IDP_Hooks.ev_get_procmod (method) - ev_get_procmod(self) -> int - Get pointer to the processor module object. All processor modules must implement - this. The pointer is returned as size_t. +ida_idp.IDP_Hooks.ev_get_procmod(self) -> int + Get pointer to the processor module object. All processor modules must implement this. The pointer is returned as size_t. + -ida_idp.IDP_Hooks.ev_get_reg_accesses (method) - ev_get_reg_accesses(self, accvec, insn, flags) -> int - Get info about the registers that are used/changed by an instruction. - +ida_idp.IDP_Hooks.ev_get_reg_accesses(self, accvec: "reg_accesses_t", insn: "insn_t const *", flags: int) -> int + Get info about the registers that are used/changed by an instruction. + @param accvec: (reg_accesses_t*) out: info about accessed registers @param insn: (const insn_t *) instruction in question @param flags: (int) reserved, must be 0 @@ -35418,39 +23811,33 @@ ida_idp.IDP_Hooks.ev_get_reg_accesses (method) @retval 1: found the requested access (and filled accvec) @retval 0: not implemented -ida_idp.IDP_Hooks.ev_get_reg_info (method) - ev_get_reg_info(self, main_regname, bitrange, regname) -> int +ida_idp.IDP_Hooks.ev_get_reg_info(self, main_regname: "char const **", bitrange: "bitrange_t", regname: str) -> int Get register information by its name. example: "ah" returns: * main_regname="eax" * bitrange_t = { offset==8, nbits==8 } - This callback may be unimplemented if the register names are all present in - processor_t::reg_names and they all have the same size + This callback may be unimplemented if the register names are all present in processor_t::reg_names and they all have the same size + @param main_regname: (const char **), out - @param bitrange: (bitrange_t *), out: position and size of the value within - 'main_regname' (empty bitrange == whole register) + @param bitrange: (bitrange_t *), out: position and size of the value within 'main_regname' (empty bitrange == whole register) @param regname: (const char *) @retval 1: ok @retval -1: failed (not found) @retval 0: unimplemented -ida_idp.IDP_Hooks.ev_get_reg_name (method) - ev_get_reg_name(self, reg, width, reghi) -> PyObject * - Generate text representation of a register. Most processor modules do not need - to implement this callback. It is useful only if processor_t::reg_names[reg] - does not provide the correct register name. - +ida_idp.IDP_Hooks.ev_get_reg_name(self, reg: int, width: "size_t", reghi: int) -> "PyObject *" + Generate text representation of a register. Most processor modules do not need to implement this callback. It is useful only if processor_t::reg_names[reg] does not provide the correct register name. + @param reg: (int) internal register number as defined in the processor module @param width: (size_t) register width in bytes @param reghi: (int) if not -1 then this function will return the register pair @retval -1: if error @retval strlen(buf): if success -ida_idp.IDP_Hooks.ev_get_simd_types (method) - ev_get_simd_types(self, out, simd_attrs, argloc, create_tifs) -> int - Get SIMD-related types according to given attributes ant/or argument location - +ida_idp.IDP_Hooks.ev_get_simd_types(self, out: "simd_info_vec_t *", simd_attrs: "simd_info_t", argloc: "argloc_t", create_tifs: bool) -> int + Get SIMD-related types according to given attributes ant/or argument location + @param out: (::simd_info_vec_t *) @param simd_attrs: (const simd_info_t *), may be nullptr @param argloc: (const argloc_t *), may be nullptr @@ -35458,105 +23845,86 @@ ida_idp.IDP_Hooks.ev_get_simd_types (method) @retval number: of found types @retval -1: error If name==nullptr, initialize all SIMD types -ida_idp.IDP_Hooks.ev_get_stkarg_area_info (method) - ev_get_stkarg_area_info(self, out, cc) -> int - Get some metrics of the stack argument area. - +ida_idp.IDP_Hooks.ev_get_stkarg_area_info(self, out: "stkarg_area_info_t", cc: "cm_t") -> int + Get some metrics of the stack argument area. + @param out: (stkarg_area_info_t *) ptr to stkarg_area_info_t @param cc: (cm_t) calling convention @retval 1: if success @retval 0: not implemented -ida_idp.IDP_Hooks.ev_get_stkvar_scale_factor (method) - ev_get_stkvar_scale_factor(self) -> int - Should stack variable references be multiplied by a coefficient before being - used in the stack frame?. Currently used by TMS320C55 because the references - into the stack should be multiplied by 2 - - @return: scaling factor +ida_idp.IDP_Hooks.ev_get_stkvar_scale_factor(self) -> int + Should stack variable references be multiplied by a coefficient before being used in the stack frame?. Currently used by TMS320C55 because the references into the stack should be multiplied by 2 + + @returns scaling factor @retval 0: not implemented - @note: PR_SCALE_STKVARS should be set to use this callback -ida_idp.IDP_Hooks.ev_getreg (method) - ev_getreg(self, regval, regnum) -> int - IBM PC only internal request, should never be used for other purpose Get - register value by internal index - +ida_idp.IDP_Hooks.ev_getreg(self, regval: "uval_t *", regnum: int) -> int + IBM PC only internal request, should never be used for other purpose Get register value by internal index + @param regval: (uval_t *), out @param regnum: (int) @retval 1: ok @retval 0: not implemented @retval -1: failed (undefined value or bad regnum) -ida_idp.IDP_Hooks.ev_init (method) - ev_init(self, idp_modname) -> int - The IDP module is just loaded. - +ida_idp.IDP_Hooks.ev_init(self, idp_modname: str) -> int + The IDP module is just loaded. + @param idp_modname: (const char *) processor module name @retval <0: on failure -ida_idp.IDP_Hooks.ev_insn_reads_tbit (method) - ev_insn_reads_tbit(self, insn, getreg, regvalues) -> int - Check if insn will read the TF bit. - +ida_idp.IDP_Hooks.ev_insn_reads_tbit(self, insn: "insn_t const *", getreg: "processor_t::regval_getter_t *", regvalues: "regval_t") -> int + Check if insn will read the TF bit. + @param insn: (const insn_t*) the instruction - @param getreg: (::processor_t::regval_getter_t *) function to get register - values + @param getreg: (::processor_t::regval_getter_t *) function to get register values @param regvalues: (const regval_t *) register values array @retval 2: yes, will generate 'step' exception @retval 1: yes, will store the TF bit in memory @retval 0: no -ida_idp.IDP_Hooks.ev_is_align_insn (method) - ev_is_align_insn(self, ea) -> int - Is the instruction created only for alignment purposes?. Do not directly call - this function, use is_align_insn() - +ida_idp.IDP_Hooks.ev_is_align_insn(self, ea: ida_idaapi.ea_t) -> int + Is the instruction created only for alignment purposes?. Do not directly call this function, use is_align_insn() + @param ea: (ea_t) - instruction address @retval number: of bytes in the instruction -ida_idp.IDP_Hooks.ev_is_alloca_probe (method) - ev_is_alloca_probe(self, ea) -> int - Does the function at 'ea' behave as __alloca_probe? - +ida_idp.IDP_Hooks.ev_is_alloca_probe(self, ea: ida_idaapi.ea_t) -> int + Does the function at 'ea' behave as __alloca_probe? + @param ea: (::ea_t) @retval 1: yes @retval 0: no -ida_idp.IDP_Hooks.ev_is_basic_block_end (method) - ev_is_basic_block_end(self, insn, call_insn_stops_block) -> int - Is the current instruction end of a basic block?. This function should be - defined for processors with delayed jump slots. - +ida_idp.IDP_Hooks.ev_is_basic_block_end(self, insn: "insn_t const *", call_insn_stops_block: bool) -> int + Is the current instruction end of a basic block?. This function should be defined for processors with delayed jump slots. + @param insn: (const insn_t*) the instruction @param call_insn_stops_block: (bool) @retval 0: unknown @retval <0: no @retval 1: yes -ida_idp.IDP_Hooks.ev_is_call_insn (method) - ev_is_call_insn(self, insn) -> int - Is the instruction a "call"? - +ida_idp.IDP_Hooks.ev_is_call_insn(self, insn: "insn_t const *") -> int + Is the instruction a "call"? + @param insn: (const insn_t *) instruction @retval 0: unknown @retval <0: no @retval 1: yes -ida_idp.IDP_Hooks.ev_is_cond_insn (method) - ev_is_cond_insn(self, insn) -> int - Is conditional instruction? - +ida_idp.IDP_Hooks.ev_is_cond_insn(self, insn: "insn_t const *") -> int + Is conditional instruction? + @param insn: (const insn_t *) instruction address @retval 1: yes @retval -1: no @retval 0: not implemented or not instruction -ida_idp.IDP_Hooks.ev_is_control_flow_guard (method) - ev_is_control_flow_guard(self, p_reg, insn) -> int - Detect if an instruction is a "thunk call" to a flow guard function (equivalent - to call reg/return/nop) - +ida_idp.IDP_Hooks.ev_is_control_flow_guard(self, p_reg: "int *", insn: "insn_t const *") -> int + Detect if an instruction is a "thunk call" to a flow guard function (equivalent to call reg/return/nop) + @param p_reg: (int *) indirect register number, may be -1 @param insn: (const insn_t *) call/jump instruction @retval -1: no thunk detected @@ -35565,34 +23933,28 @@ ida_idp.IDP_Hooks.ev_is_control_flow_guard (method) @retval 3: return thunk @retval 0: not implemented -ida_idp.IDP_Hooks.ev_is_far_jump (method) - ev_is_far_jump(self, icode) -> int - is indirect far jump or call instruction? meaningful only if the processor has - 'near' and 'far' reference types - +ida_idp.IDP_Hooks.ev_is_far_jump(self, icode: int) -> int + is indirect far jump or call instruction? meaningful only if the processor has 'near' and 'far' reference types + @param icode: (int) @retval 0: not implemented @retval 1: yes @retval -1: no -ida_idp.IDP_Hooks.ev_is_indirect_jump (method) - ev_is_indirect_jump(self, insn) -> int - Determine if instruction is an indirect jump. If CF_JUMP bit cannot describe all - jump types jumps, please define this callback. - +ida_idp.IDP_Hooks.ev_is_indirect_jump(self, insn: "insn_t const *") -> int + Determine if instruction is an indirect jump. If CF_JUMP bit cannot describe all jump types jumps, please define this callback. + @param insn: (const insn_t*) the instruction @retval 0: use CF_JUMP @retval 1: no @retval 2: yes -ida_idp.IDP_Hooks.ev_is_insn_table_jump (method) - ev_is_insn_table_jump(self) -> int +ida_idp.IDP_Hooks.ev_is_insn_table_jump(self) -> int Reserved. -ida_idp.IDP_Hooks.ev_is_jump_func (method) - ev_is_jump_func(self, pfn, jump_target, func_pointer) -> int - Is the function a trivial "jump" function?. - +ida_idp.IDP_Hooks.ev_is_jump_func(self, pfn: "func_t *", jump_target: "ea_t *", func_pointer: "ea_t *") -> int + Is the function a trivial "jump" function?. + @param pfn: (func_t *) @param jump_target: (::ea_t *) @param func_pointer: (::ea_t *) @@ -35600,369 +23962,281 @@ ida_idp.IDP_Hooks.ev_is_jump_func (method) @retval 0: don't know @retval 1: yes, see 'jump_target' and 'func_pointer' -ida_idp.IDP_Hooks.ev_is_ret_insn (method) - ev_is_ret_insn(self, insn, strict) -> int - Is the instruction a "return"? - +ida_idp.IDP_Hooks.ev_is_ret_insn(self, insn: "insn_t const *", flags: "uchar") -> int + Is the instruction a "return"? + @param insn: (const insn_t *) instruction - @param strict: (bool) 1: report only ret instructions 0: include instructions - like "leave" which begins the function epilog + @param flags: (uchar), combination of IRI_... flags (see above) @retval 0: unknown @retval <0: no @retval 1: yes -ida_idp.IDP_Hooks.ev_is_sane_insn (method) - ev_is_sane_insn(self, insn, no_crefs) -> int - Is the instruction sane for the current file type?. - +ida_idp.IDP_Hooks.ev_is_sane_insn(self, insn: "insn_t const *", no_crefs: int) -> int + Is the instruction sane for the current file type?. + @param insn: (const insn_t*) the instruction - @param no_crefs: (int) 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. + @param no_crefs: (int) 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. @retval >=0: ok @retval <0: no, the instruction isn't likely to appear in the program -ida_idp.IDP_Hooks.ev_is_sp_based (method) - ev_is_sp_based(self, mode, insn, op) -> int - Check whether the operand is relative to stack pointer or frame pointer This - event is used to determine how to output a stack variable If not implemented, - then all operands are sp based by default. Implement this event only if some - stack references use frame pointer instead of stack pointer. - +ida_idp.IDP_Hooks.ev_is_sp_based(self, mode: "int *", insn: "insn_t const *", op: "op_t const *") -> int + Check whether the operand is relative to stack pointer or frame pointer This event is used to determine how to output a stack variable If not implemented, then all operands are sp based by default. Implement this event only if some stack references use frame pointer instead of stack pointer. + @param mode: (int *) out, combination of SP/FP operand flags @param insn: (const insn_t *) @param op: (const op_t *) @retval 0: not implemented @retval 1: ok -ida_idp.IDP_Hooks.ev_is_switch (method) - ev_is_switch(self, si, insn) -> int - Find 'switch' idiom or override processor module's decision. It will be called - for instructions marked with CF_JUMP. - +ida_idp.IDP_Hooks.ev_is_switch(self, si: "switch_info_t", insn: "insn_t const *") -> int + Find 'switch' idiom or override processor module's decision. It will be called for instructions marked with CF_JUMP. + @param si: (switch_info_t *), out @param insn: (const insn_t *) instruction possibly belonging to a switch - @retval 1: switch is found, 'si' is filled. IDA will create the switch using the - filled 'si' - @retval -1: no switch found. This value forbids switch creation by the processor - module + @retval 1: switch is found, 'si' is filled. IDA will create the switch using the filled 'si' + @retval -1: no switch found. This value forbids switch creation by the processor module @retval 0: not implemented -ida_idp.IDP_Hooks.ev_last_cb_before_loader (method) - ev_last_cb_before_loader(self) -> int +ida_idp.IDP_Hooks.ev_last_cb_before_loader(self) -> int -ida_idp.IDP_Hooks.ev_loader (method) - ev_loader(self) -> int - This code and higher ones are reserved for the loaders. The arguments and the - return values are defined by the loaders +ida_idp.IDP_Hooks.ev_loader(self) -> int + This code and higher ones are reserved for the loaders. The arguments and the return values are defined by the loaders + -ida_idp.IDP_Hooks.ev_lower_func_type (method) - ev_lower_func_type(self, argnums, fti) -> int - Get function arguments which should be converted to pointers when lowering - function prototype. The processor module can also modify 'fti' in order to make - non-standard conversion of some arguments. - - @param argnums: (intvec_t *), out - numbers of arguments to be converted to - pointers in acsending order - @param fti: (func_type_data_t *), inout func type details (special values -1/-2 - for return value - position of hidden 'retstr' argument: -1 - at the - beginning, -2 - at the end) +ida_idp.IDP_Hooks.ev_lower_func_type(self, argnums: "intvec_t *", fti: "func_type_data_t") -> int + Get function arguments which should be converted to pointers when lowering function prototype. The processor module can also modify 'fti' in order to make non-standard conversion of some arguments. + + @param argnums: (intvec_t *), out - numbers of arguments to be converted to pointers in acsending order + @param fti: (func_type_data_t *), inout func type details @retval 0: not implemented @retval 1: argnums was filled - @retval 2: argnums was filled and made substantial changes to fti + @retval 2: argnums was filled and made substantial changes to fti argnums[0] can contain a special negative value indicating that the return value should be passed as a hidden 'retstr' argument: -1 this argument is passed as the first one and the function returns a pointer to the argument, -2 this argument is passed as the last one and the function returns a pointer to the argument, -3 this argument is passed as the first one and the function returns 'void'. -ida_idp.IDP_Hooks.ev_max_ptr_size (method) - ev_max_ptr_size(self) -> int - Get maximal size of a pointer in bytes. - - @return: max possible size of a pointer +ida_idp.IDP_Hooks.ev_max_ptr_size(self) -> int + Get maximal size of a pointer in bytes. + + @returns max possible size of a pointer -ida_idp.IDP_Hooks.ev_may_be_func (method) - ev_may_be_func(self, insn, state) -> int - Can a function start here? - +ida_idp.IDP_Hooks.ev_may_be_func(self, insn: "insn_t const *", state: int) -> int + Can a function start here? + @param insn: (const insn_t*) the instruction @param state: (int) autoanalysis phase 0: creating functions 1: creating chunks - @return: probability 1..100 - @note: Actually IDA uses 3 intervals of a probability: 0..50 not a function, - 51..99 a function (IDA needs another proof), 100 a function (no other - proofs needed) + @returns probability 1..100 -ida_idp.IDP_Hooks.ev_may_show_sreg (method) - ev_may_show_sreg(self, current_ea) -> int - The kernel wants to display the segment registers in the messages window. - +ida_idp.IDP_Hooks.ev_may_show_sreg(self, current_ea: ida_idaapi.ea_t) -> int + The kernel wants to display the segment registers in the messages window. + @param current_ea: (::ea_t) - @retval <0: if the kernel should not show the segment registers. (assuming that - the module has done it) + @retval <0: if the kernel should not show the segment registers. (assuming that the module has done it) @retval 0: not implemented -ida_idp.IDP_Hooks.ev_moving_segm (method) - ev_moving_segm(self, seg, to, flags) -> int - May the kernel move the segment? - +ida_idp.IDP_Hooks.ev_moving_segm(self, seg: "segment_t *", to: ida_idaapi.ea_t, flags: int) -> int + May the kernel move the segment? + @param seg: (segment_t *) segment to move @param to: (::ea_t) new segment start address @param flags: (int) combination of Move segment flags @retval 0: yes @retval <0: the kernel should stop -ida_idp.IDP_Hooks.ev_newasm (method) - ev_newasm(self, asmnum) -> int - Before setting a new assembler. - +ida_idp.IDP_Hooks.ev_newasm(self, asmnum: int) -> int + Before setting a new assembler. + @param asmnum: (int) See also ev_asm_installed -ida_idp.IDP_Hooks.ev_newbinary (method) - ev_newbinary(self, filename, fileoff, basepara, binoff, nbytes) -> int - IDA is about to load a binary file. - +ida_idp.IDP_Hooks.ev_newbinary(self, filename: "char *", fileoff: "qoff64_t", basepara: ida_idaapi.ea_t, binoff: ida_idaapi.ea_t, nbytes: "uint64") -> int + IDA is about to load a binary file. + @param filename: (char *) binary file name @param fileoff: (qoff64_t) offset in the file @param basepara: (::ea_t) base loading paragraph @param binoff: (::ea_t) loader offset @param nbytes: (::uint64) number of bytes to load -ida_idp.IDP_Hooks.ev_newfile (method) - ev_newfile(self, fname) -> int - A new file has been loaded. - +ida_idp.IDP_Hooks.ev_newfile(self, fname: "char *") -> int + A new file has been loaded. + @param fname: (char *) input file name -ida_idp.IDP_Hooks.ev_newprc (method) - ev_newprc(self, pnum, keep_cfg) -> int - Before changing processor type. - +ida_idp.IDP_Hooks.ev_newprc(self, pnum: int, keep_cfg: bool) -> int + Before changing processor type. + @param pnum: (int) processor number in the array of processor names @param keep_cfg: (bool) true: do not modify kernel configuration @retval 1: ok @retval <0: prohibit -ida_idp.IDP_Hooks.ev_next_exec_insn (method) - ev_next_exec_insn(self, target, ea, tid, getreg, regvalues) -> int - Get next address to be executed This function must return the next address to be - executed. If the instruction following the current one is executed, then it must - return BADADDR Usually the instructions to consider are: jumps, branches, calls, - returns. This function is essential if the 'single step' is not supported in - hardware. - +ida_idp.IDP_Hooks.ev_next_exec_insn(self, target: "ea_t *", ea: ida_idaapi.ea_t, tid: int, getreg: "processor_t::regval_getter_t *", regvalues: "regval_t") -> int + Get next address to be executed This function must return the next address to be executed. If the instruction following the current one is executed, then it must return BADADDR Usually the instructions to consider are: jumps, branches, calls, returns. This function is essential if the 'single step' is not supported in hardware. + @param target: (::ea_t *), out: pointer to the answer @param ea: (::ea_t) instruction address @param tid: (int) current therad id - @param getreg: (::processor_t::regval_getter_t *) function to get register - values + @param getreg: (::processor_t::regval_getter_t *) function to get register values @param regvalues: (const regval_t *) register values array @retval 0: unimplemented @retval 1: implemented -ida_idp.IDP_Hooks.ev_oldfile (method) - ev_oldfile(self, fname) -> int - An old file has been loaded. - +ida_idp.IDP_Hooks.ev_oldfile(self, fname: "char *") -> int + An old file has been loaded. + @param fname: (char *) input file name -ida_idp.IDP_Hooks.ev_out_assumes (method) - ev_out_assumes(self, outctx) -> int - Function to produce assume directives when segment register value changes. - +ida_idp.IDP_Hooks.ev_out_assumes(self, outctx: "outctx_t *") -> int + Function to produce assume directives when segment register value changes. + @param outctx: (outctx_t *) @retval 1: ok @retval 0: not implemented -ida_idp.IDP_Hooks.ev_out_data (method) - ev_out_data(self, outctx, analyze_only) -> int - Generate text representation of data items This function may change the database - and create cross-references if analyze_only is set - +ida_idp.IDP_Hooks.ev_out_data(self, outctx: "outctx_t *", analyze_only: bool) -> int + Generate text representation of data items This function may change the database and create cross-references if analyze_only is set + @param outctx: (outctx_t *) @param analyze_only: (bool) @retval 1: ok @retval 0: not implemented -ida_idp.IDP_Hooks.ev_out_footer (method) - ev_out_footer(self, outctx) -> int - Function to produce end of disassembled text - +ida_idp.IDP_Hooks.ev_out_footer(self, outctx: "outctx_t *") -> int + Function to produce end of disassembled text + @param outctx: (outctx_t *) - @retval void + @retval void: -ida_idp.IDP_Hooks.ev_out_header (method) - ev_out_header(self, outctx) -> int - Function to produce start of disassembled text - +ida_idp.IDP_Hooks.ev_out_header(self, outctx: "outctx_t *") -> int + Function to produce start of disassembled text + @param outctx: (outctx_t *) - @retval void + @retval void: -ida_idp.IDP_Hooks.ev_out_insn (method) - ev_out_insn(self, outctx) -> bool - Generate text representation of an instruction in 'ctx.insn' outctx_t provides - functions to output the generated text. This function shouldn't change the - database, flags or anything else. All these actions should be performed only by - emu_insn() function. - +ida_idp.IDP_Hooks.ev_out_insn(self, outctx: "outctx_t *") -> bool + Generate text representation of an instruction in 'ctx.insn' outctx_t provides functions to output the generated text. This function shouldn't change the database, flags or anything else. All these actions should be performed only by emu_insn() function. + @param outctx: (outctx_t *) - @retval void + @retval void: -ida_idp.IDP_Hooks.ev_out_label (method) - ev_out_label(self, outctx, colored_name) -> int - The kernel is going to generate an instruction label line or a function header. - +ida_idp.IDP_Hooks.ev_out_label(self, outctx: "outctx_t *", colored_name: str) -> int + The kernel is going to generate an instruction label line or a function header. + @param outctx: (outctx_t *) @param colored_name: (const char *) @retval <0: if the kernel should not generate the label @retval 0: not implemented or continue -ida_idp.IDP_Hooks.ev_out_mnem (method) - ev_out_mnem(self, outctx) -> int - Generate instruction mnemonics. This callback should append the colored - mnemonics to ctx.outbuf Optional notification, if absent, out_mnem will be - called. - +ida_idp.IDP_Hooks.ev_out_mnem(self, outctx: "outctx_t *") -> int + Generate instruction mnemonics. This callback should append the colored mnemonics to ctx.outbuf Optional notification, if absent, out_mnem will be called. + @param outctx: (outctx_t *) @retval 1: if appended the mnemonics @retval 0: not implemented -ida_idp.IDP_Hooks.ev_out_operand (method) - ev_out_operand(self, outctx, op) -> bool - Generate text representation of an instruction operand outctx_t provides - functions to output the generated text. All these actions should be performed - only by emu_insn() function. - +ida_idp.IDP_Hooks.ev_out_operand(self, outctx: "outctx_t *", op: "op_t const *") -> bool + Generate text representation of an instruction operand outctx_t provides functions to output the generated text. All these actions should be performed only by emu_insn() function. + @param outctx: (outctx_t *) @param op: (const op_t *) @retval 1: ok @retval -1: operand is hidden -ida_idp.IDP_Hooks.ev_out_segend (method) - ev_out_segend(self, outctx, seg) -> int - Function to produce end of segment - +ida_idp.IDP_Hooks.ev_out_segend(self, outctx: "outctx_t *", seg: "segment_t *") -> int + Function to produce end of segment + @param outctx: (outctx_t *) @param seg: (segment_t *) @retval 1: ok @retval 0: not implemented -ida_idp.IDP_Hooks.ev_out_segstart (method) - ev_out_segstart(self, outctx, seg) -> int - Function to produce start of segment - +ida_idp.IDP_Hooks.ev_out_segstart(self, outctx: "outctx_t *", seg: "segment_t *") -> int + Function to produce start of segment + @param outctx: (outctx_t *) @param seg: (segment_t *) @retval 1: ok @retval 0: not implemented -ida_idp.IDP_Hooks.ev_out_special_item (method) - ev_out_special_item(self, outctx, segtype) -> int - Generate text representation of an item in a special segment i.e. absolute - symbols, externs, communal definitions etc - +ida_idp.IDP_Hooks.ev_out_special_item(self, outctx: "outctx_t *", segtype: "uchar") -> int + Generate text representation of an item in a special segment i.e. absolute symbols, externs, communal definitions etc + @param outctx: (outctx_t *) @param segtype: (uchar) @retval 1: ok @retval 0: not implemented @retval -1: overflow -ida_idp.IDP_Hooks.ev_privrange_changed (method) - ev_privrange_changed(self, old_privrange, delta) -> int - Privrange interval has been moved to a new location. Most common actions to be - done by module in this case: fix indices of netnodes used by module - +ida_idp.IDP_Hooks.ev_privrange_changed(self, old_privrange: "range_t", delta: "adiff_t") -> int + Privrange interval has been moved to a new location. Most common actions to be done by module in this case: fix indices of netnodes used by module + @param old_privrange: (const range_t *) - old privrange interval @param delta: (::adiff_t) - @return: 0 Ok - -1 error (and message in errbuf) + @retval 0: Ok + @retval -1: error (and message in errbuf) -ida_idp.IDP_Hooks.ev_realcvt (method) - ev_realcvt(self, m, e, swt) -> int - Floating point -> IEEE conversion - +ida_idp.IDP_Hooks.ev_realcvt(self, m: "void *", e: "fpvalue_t *", swt: "uint16") -> int + Floating point -> IEEE conversion + @param m: (void *) ptr to processor-specific floating point value @param e: (fpvalue_t *) IDA representation of a floating point value @param swt: (uint16) operation (see realcvt() in ieee.h) @retval 0: not implemented - @retval 1: ok - @retval unknown -ida_idp.IDP_Hooks.ev_rename (method) - ev_rename(self, ea, new_name) -> int - The kernel is going to rename a byte. - +ida_idp.IDP_Hooks.ev_rename(self, ea: ida_idaapi.ea_t, new_name: str) -> int + The kernel is going to rename a byte. + @param ea: (::ea_t) @param new_name: (const char *) @retval <0: if the kernel should not rename it. - @retval 2: to inhibit the notification. I.e., the kernel should not rename, but - 'set_name()' should return 'true'. also see renamed the return value - is ignored when kernel is going to delete name + @retval 2: to inhibit the notification. I.e., the kernel should not rename, but 'set_name()' should return 'true'. also see renamed the return value is ignored when kernel is going to delete name -ida_idp.IDP_Hooks.ev_replaying_undo (method) - ev_replaying_undo(self, action_name, vec, is_undo) -> int - Replaying an undo/redo buffer - - @param action_name: (const char *) action that we perform undo/redo for. may be - nullptr for intermediary buffers. +ida_idp.IDP_Hooks.ev_replaying_undo(self, action_name: str, vec: "undo_records_t const *", is_undo: bool) -> int + Replaying an undo/redo buffer + + @param action_name: (const char *) action that we perform undo/redo for. may be nullptr for intermediary buffers. @param vec: (const undo_records_t *) - @param is_undo: (bool) true if performing undo, false if performing redo This - event may be generated multiple times per undo/redo + @param is_undo: (bool) true if performing undo, false if performing redo This event may be generated multiple times per undo/redo -ida_idp.IDP_Hooks.ev_set_code16_mode (method) - ev_set_code16_mode(self, ea, code16) -> int - Some processors have ISA 16-bit mode e.g. ARM Thumb mode, PPC VLE, MIPS16 Set - ISA 16-bit mode - +ida_idp.IDP_Hooks.ev_set_code16_mode(self, ea: ida_idaapi.ea_t, code16: bool) -> int + Some processors have ISA 16-bit mode e.g. ARM Thumb mode, PPC VLE, MIPS16 Set ISA 16-bit mode + @param ea: (ea_t) address to set new ISA mode @param code16: (bool) true for 16-bit mode, false for 32-bit mode -ida_idp.IDP_Hooks.ev_set_idp_options (method) - ev_set_idp_options(self, keyword, value_type, value, idb_loaded) -> int - Set IDP-specific configuration option Also see set_options_t in config.hpp - +ida_idp.IDP_Hooks.ev_set_idp_options(self, keyword: str, value_type: int, value: "void const *", idb_loaded: bool) -> int + Set IDP-specific configuration option Also see set_options_t in config.hpp + @param keyword: (const char *) @param value_type: (int) @param value: (const void *) - @param idb_loaded: (bool) true if the ev_oldfile/ev_newfile events have been - generated + @param idb_loaded: (bool) true if the ev_oldfile/ev_newfile events have been generated @retval 1: ok @retval 0: not implemented @retval -1: error (and message in errbuf) -ida_idp.IDP_Hooks.ev_set_proc_options (method) - ev_set_proc_options(self, options, confidence) -> int - Called if the user specified an option string in the command line: -p:. Can be used for setting a processor subtype. Also called if - option string is passed to set_processor_type() and IDC's SetProcessorType(). - +ida_idp.IDP_Hooks.ev_set_proc_options(self, options: str, confidence: int) -> int + Called if the user specified an option string in the command line: -p:. Can be used for setting a processor subtype. Also called if option string is passed to set_processor_type() and IDC's SetProcessorType(). + @param options: (const char *) @param confidence: (int) 0: loader's suggestion 1: user's decision @retval <0: if bad option string -ida_idp.IDP_Hooks.ev_setup_til (method) - ev_setup_til(self) -> int - Setup default type libraries. (called after loading a new file into the - database). The processor module may load tils, setup memory model and perform - other actions required to set up the type system. This is an optional callback. - @retval void +ida_idp.IDP_Hooks.ev_setup_til(self) -> int + Setup default type libraries. (called after loading a new file into the database). The processor module may load tils, setup memory model and perform other actions required to set up the type system. This is an optional callback. + + @retval void: -ida_idp.IDP_Hooks.ev_str2reg (method) - ev_str2reg(self, regname) -> int - Convert a register name to a register number. The register number is the - register index in the processor_t::reg_names array Most processor modules do not - need to implement this callback It is useful only if processor_t::reg_names[reg] - does not provide the correct register names - +ida_idp.IDP_Hooks.ev_str2reg(self, regname: str) -> int + Convert a register name to a register number. The register number is the register index in the processor_t::reg_names array Most processor modules do not need to implement this callback It is useful only if processor_t::reg_names[reg] does not provide the correct register names + @param regname: (const char *) @retval register: number + 1 @retval 0: not implemented or could not be decoded -ida_idp.IDP_Hooks.ev_term (method) - ev_term(self) -> int +ida_idp.IDP_Hooks.ev_term(self) -> int The IDP module is being unloaded. -ida_idp.IDP_Hooks.ev_treat_hindering_item (method) - ev_treat_hindering_item(self, hindering_item_ea, new_item_flags, new_item_ea, new_item_length) -> int - An item hinders creation of another item. - +ida_idp.IDP_Hooks.ev_treat_hindering_item(self, hindering_item_ea: ida_idaapi.ea_t, new_item_flags: "flags64_t", new_item_ea: ida_idaapi.ea_t, new_item_length: "asize_t") -> int + An item hinders creation of another item. + @param hindering_item_ea: (::ea_t) @param new_item_flags: (flags64_t) (0 for code) @param new_item_ea: (::ea_t) @@ -35970,2765 +24244,1022 @@ ida_idp.IDP_Hooks.ev_treat_hindering_item (method) @retval 0: no reaction @retval !=0: the kernel may delete the hindering item -ida_idp.IDP_Hooks.ev_undefine (method) - ev_undefine(self, ea) -> int - An item in the database (insn or data) is being deleted. - +ida_idp.IDP_Hooks.ev_undefine(self, ea: ida_idaapi.ea_t) -> int + An item in the database (insn or data) is being deleted. + @param ea: (ea_t) @retval 1: do not delete srranges at the item end @retval 0: srranges can be deleted -ida_idp.IDP_Hooks.ev_update_call_stack (method) - ev_update_call_stack(self, stack, tid, getreg, regvalues) -> int - Calculate the call stack trace for the given thread. This callback is invoked - when the process is suspended and should fill the 'trace' object with the - information about the current call stack. Note that this callback is NOT invoked - if the current debugger backend implements stack tracing via - debugger_t::event_t::ev_update_call_stack. The debugger-specific algorithm takes - priority. Implementing this callback in the processor module is useful when - multiple debugging platforms follow similar patterns, and thus the same - processor-specific algorithm can be used for different platforms. - +ida_idp.IDP_Hooks.ev_update_call_stack(self, stack: "call_stack_t", tid: int, getreg: "processor_t::regval_getter_t *", regvalues: "regval_t") -> int + Calculate the call stack trace for the given thread. This callback is invoked when the process is suspended and should fill the 'trace' object with the information about the current call stack. Note that this callback is NOT invoked if the current debugger backend implements stack tracing via debugger_t::event_t::ev_update_call_stack. The debugger-specific algorithm takes priority. Implementing this callback in the processor module is useful when multiple debugging platforms follow similar patterns, and thus the same processor-specific algorithm can be used for different platforms. + @param stack: (call_stack_t *) result @param tid: (int) thread id - @param getreg: (::processor_t::regval_getter_t *) function to get register - values + @param getreg: (::processor_t::regval_getter_t *) function to get register values @param regvalues: (const regval_t *) register values array @retval 1: ok @retval -1: failed @retval 0: unimplemented -ida_idp.IDP_Hooks.ev_use_arg_types (method) - ev_use_arg_types(self, ea, fti, rargs) -> int - Use information about callee arguments. - +ida_idp.IDP_Hooks.ev_use_arg_types(self, ea: ida_idaapi.ea_t, fti: "func_type_data_t", rargs: "funcargvec_t *") -> int + Use information about callee arguments. + @param ea: (::ea_t) address of the call instruction @param fti: (func_type_data_t *) info about function type @param rargs: (funcargvec_t *) array of register arguments @retval 1: (and removes handled arguments from fti and rargs) @retval 0: not implemented -ida_idp.IDP_Hooks.ev_use_regarg_type (method) - ev_use_regarg_type(self, ea, rargs) -> PyObject * - Use information about register argument. - +ida_idp.IDP_Hooks.ev_use_regarg_type(self, ea: ida_idaapi.ea_t, rargs: "funcargvec_t const *") -> "PyObject *" + Use information about register argument. + @param ea: (::ea_t) address of the instruction - @param rargs: (const funcargvec_t *) vector of register arguments (including - regs extracted from scattered arguments) - @retval 1 + @param rargs: (const funcargvec_t *) vector of register arguments (including regs extracted from scattered arguments) + @retval 1: @retval 0: not implemented -ida_idp.IDP_Hooks.ev_use_stkarg_type (method) - ev_use_stkarg_type(self, ea, arg) -> int - Use information about a stack argument. - - @param ea: (::ea_t) address of the push instruction which pushes the function - argument into the stack +ida_idp.IDP_Hooks.ev_use_stkarg_type(self, ea: ida_idaapi.ea_t, arg: "funcarg_t") -> int + Use information about a stack argument. + + @param ea: (::ea_t) address of the push instruction which pushes the function argument into the stack @param arg: (const funcarg_t *) argument info @retval 1: ok - @retval <=0: failed, the kernel will create a comment with the argument name or - type for the instruction + @retval <=0: failed, the kernel will create a comment with the argument name or type for the instruction -ida_idp.IDP_Hooks.ev_validate_flirt_func (method) - ev_validate_flirt_func(self, start_ea, funcname) -> int - Flirt has recognized a library function. This callback can be used by a plugin - or proc module to intercept it and validate such a function. - +ida_idp.IDP_Hooks.ev_validate_flirt_func(self, start_ea: ida_idaapi.ea_t, funcname: str) -> int + Flirt has recognized a library function. This callback can be used by a plugin or proc module to intercept it and validate such a function. + @param start_ea: (::ea_t) @param funcname: (const char *) @retval -1: do not create a function, @retval 0: function is validated -ida_idp.IDP_Hooks.ev_verify_noreturn (method) - ev_verify_noreturn(self, pfn) -> int - The kernel wants to set 'noreturn' flags for a function. - +ida_idp.IDP_Hooks.ev_verify_noreturn(self, pfn: "func_t *") -> int + The kernel wants to set 'noreturn' flags for a function. + @param pfn: (func_t *) @retval 0: ok. any other value: do not set 'noreturn' flag -ida_idp.IDP_Hooks.ev_verify_sp (method) - ev_verify_sp(self, pfn) -> int - All function instructions have been analyzed. Now the processor module can - analyze the stack pointer for the whole function - +ida_idp.IDP_Hooks.ev_verify_sp(self, pfn: "func_t *") -> int + All function instructions have been analyzed. Now the processor module can analyze the stack pointer for the whole function + @param pfn: (func_t *) @retval 0: ok @retval <0: bad stack pointer -ida_idp.IDP_Hooks.hook (method) - hook(self) -> bool +ida_idp.IDP_Hooks.hook(self) -> bool -ida_idp.IDP_Hooks.unhook (method) - unhook(self) -> bool +ida_idp.IDP_Hooks.unhook(self) -> bool -ida_idp.IDP_INTERFACE_VERSION (variable) - The interface version number. - @note: see also IDA_SDK_VERSION from pro.h +ida_idp.IDP_INTERFACE_VERSION + The interface version number. + -ida_idp.OP_FP_BASED (variable) +ida_idp.IRI_EXTENDED + Is the instruction a "return"? + + include instructions like "leave" that begin the function epilog + + +ida_idp.IRI_RET_LITERALLY + report only 'ret' instructions + +ida_idp.IRI_SKIP_RETTARGET + exclude 'ret' instructions that have special targets (see set_ret_target in PC) + + +ida_idp.LTC_ADDED + added a local type + +ida_idp.LTC_ALIASED + added a type alias + +ida_idp.LTC_COMPILER + changed the compiler and calling convention + +ida_idp.LTC_DELETED + deleted a local type + +ida_idp.LTC_EDITED + edited a local type + +ida_idp.LTC_NONE + no event (internal use) + +ida_idp.LTC_TIL_COMPACTED + numbered types have been compacted compact_numbered_types() + +ida_idp.LTC_TIL_LOADED + loaded a til file + +ida_idp.LTC_TIL_UNLOADED + unloaded a til file + +ida_idp.OP_FP_BASED operand is FP based -ida_idp.OP_SP_ADD (variable) +ida_idp.OP_SP_ADD operand value is added to the pointer -ida_idp.OP_SP_BASED (variable) +ida_idp.OP_SP_BASED operand is SP based -ida_idp.OP_SP_SUB (variable) +ida_idp.OP_SP_SUB operand value is subtracted from the pointer -ida_idp.PLFM_386 (variable) +ida_idp.PLFM_386 Intel 80x86. -ida_idp.PLFM_6502 (variable) +ida_idp.PLFM_6502 6502 -ida_idp.PLFM_65C816 (variable) +ida_idp.PLFM_65C816 65802/65816 -ida_idp.PLFM_6800 (variable) +ida_idp.PLFM_6800 Motorola 68xx. -ida_idp.PLFM_68K (variable) +ida_idp.PLFM_68K Motorola 680x0. -ida_idp.PLFM_80196 (variable) +ida_idp.PLFM_80196 Intel 80196. -ida_idp.PLFM_8051 (variable) +ida_idp.PLFM_8051 8051 -ida_idp.PLFM_AD2106X (variable) +ida_idp.PLFM_AD2106X Analog Devices ADSP 2106X. -ida_idp.PLFM_AD218X (variable) +ida_idp.PLFM_AD218X Analog Devices ADSP 218X. -ida_idp.PLFM_ALPHA (variable) +ida_idp.PLFM_ALPHA DEC Alpha. -ida_idp.PLFM_ARC (variable) +ida_idp.PLFM_ARC Argonaut RISC Core. -ida_idp.PLFM_ARM (variable) +ida_idp.PLFM_ARM Advanced RISC Machines. -ida_idp.PLFM_AVR (variable) +ida_idp.PLFM_AVR Atmel 8-bit RISC processor(s) -ida_idp.PLFM_C166 (variable) +ida_idp.PLFM_C166 Siemens C166 family. -ida_idp.PLFM_C39 (variable) +ida_idp.PLFM_C39 Rockwell C39. -ida_idp.PLFM_CR16 (variable) +ida_idp.PLFM_CR16 NSC CR16. -ida_idp.PLFM_DALVIK (variable) +ida_idp.PLFM_DALVIK Android Dalvik Virtual Machine. -ida_idp.PLFM_DSP56K (variable) +ida_idp.PLFM_DSP56K Motorola DSP5600x. -ida_idp.PLFM_DSP96K (variable) +ida_idp.PLFM_DSP96K Motorola DSP96000. -ida_idp.PLFM_EBC (variable) +ida_idp.PLFM_EBC EFI Bytecode. -ida_idp.PLFM_F2MC (variable) +ida_idp.PLFM_F2MC Fujistu F2MC-16. -ida_idp.PLFM_FR (variable) +ida_idp.PLFM_FR Fujitsu FR Family. -ida_idp.PLFM_H8 (variable) +ida_idp.PLFM_H8 Hitachi H8/300, H8/2000. -ida_idp.PLFM_H8500 (variable) +ida_idp.PLFM_H8500 Hitachi H8/500. -ida_idp.PLFM_HPPA (variable) +ida_idp.PLFM_HPPA Hewlett-Packard PA-RISC. -ida_idp.PLFM_I860 (variable) +ida_idp.PLFM_I860 Intel 860. -ida_idp.PLFM_I960 (variable) +ida_idp.PLFM_I960 Intel 960. -ida_idp.PLFM_IA64 (variable) +ida_idp.PLFM_IA64 Intel Itanium IA64. -ida_idp.PLFM_JAVA (variable) +ida_idp.PLFM_JAVA Java. -ida_idp.PLFM_KR1878 (variable) +ida_idp.PLFM_KR1878 Angstrem KR1878. -ida_idp.PLFM_M16C (variable) +ida_idp.PLFM_M16C Renesas M16C. -ida_idp.PLFM_M32R (variable) +ida_idp.PLFM_M32R Mitsubishi 32bit RISC. -ida_idp.PLFM_M740 (variable) +ida_idp.PLFM_M740 Mitsubishi 8bit. -ida_idp.PLFM_M7700 (variable) +ida_idp.PLFM_M7700 Mitsubishi 16bit. -ida_idp.PLFM_M7900 (variable) +ida_idp.PLFM_M7900 Mitsubishi 7900. -ida_idp.PLFM_MC6812 (variable) +ida_idp.PLFM_MC6812 Motorola 68HC12. -ida_idp.PLFM_MC6816 (variable) +ida_idp.PLFM_MC6816 Motorola 68HC16. -ida_idp.PLFM_MIPS (variable) +ida_idp.PLFM_MIPS MIPS. -ida_idp.PLFM_MN102L00 (variable) +ida_idp.PLFM_MN102L00 Panasonic MN10200. -ida_idp.PLFM_MSP430 (variable) +ida_idp.PLFM_MSP430 Texas Instruments MSP430. -ida_idp.PLFM_NEC_78K0 (variable) +ida_idp.PLFM_NEC_78K0 NEC 78K0. -ida_idp.PLFM_NEC_78K0S (variable) +ida_idp.PLFM_NEC_78K0S NEC 78K0S. -ida_idp.PLFM_NEC_V850X (variable) +ida_idp.PLFM_NEC_V850X NEC V850 and V850ES/E1/E2. -ida_idp.PLFM_NET (variable) +ida_idp.PLFM_NET Microsoft Visual Studio.Net. -ida_idp.PLFM_OAKDSP (variable) +ida_idp.PLFM_OAKDSP Atmel OAK DSP. -ida_idp.PLFM_PDP (variable) +ida_idp.PLFM_PDP PDP11. -ida_idp.PLFM_PIC (variable) +ida_idp.PLFM_PIC Microchip's PIC. -ida_idp.PLFM_PIC16 (variable) +ida_idp.PLFM_PIC16 Microchip's 16-bit PIC. -ida_idp.PLFM_PPC (variable) +ida_idp.PLFM_PPC PowerPC. -ida_idp.PLFM_RISCV (variable) +ida_idp.PLFM_RISCV RISC-V. -ida_idp.PLFM_RL78 (variable) +ida_idp.PLFM_RL78 Renesas RL78. -ida_idp.PLFM_RX (variable) +ida_idp.PLFM_RX Renesas RX. -ida_idp.PLFM_S390 (variable) +ida_idp.PLFM_S390 IBM's S390. -ida_idp.PLFM_SCR_ADPT (variable) +ida_idp.PLFM_SCR_ADPT Processor module adapter for processor modules written in scripting languages. -ida_idp.PLFM_SH (variable) +ida_idp.PLFM_SH Renesas (formerly Hitachi) SuperH. -ida_idp.PLFM_SPARC (variable) +ida_idp.PLFM_SPARC SPARC. -ida_idp.PLFM_SPC700 (variable) +ida_idp.PLFM_SPC700 Sony SPC700. -ida_idp.PLFM_SPU (variable) +ida_idp.PLFM_SPU Cell Broadband Engine Synergistic Processor Unit. -ida_idp.PLFM_ST20 (variable) +ida_idp.PLFM_ST20 SGS-Thomson ST20. -ida_idp.PLFM_ST7 (variable) +ida_idp.PLFM_ST7 SGS-Thomson ST7. -ida_idp.PLFM_ST9 (variable) +ida_idp.PLFM_ST9 ST9+. -ida_idp.PLFM_TLCS900 (variable) +ida_idp.PLFM_TLCS900 Toshiba TLCS-900. -ida_idp.PLFM_TMS (variable) +ida_idp.PLFM_TMS Texas Instruments TMS320C5x. -ida_idp.PLFM_TMS320C1X (variable) +ida_idp.PLFM_TMS320C1X Texas Instruments TMS320C1x. -ida_idp.PLFM_TMS320C28 (variable) +ida_idp.PLFM_TMS320C28 Texas Instruments TMS320C28x. -ida_idp.PLFM_TMS320C3 (variable) +ida_idp.PLFM_TMS320C3 Texas Instruments TMS320C3. -ida_idp.PLFM_TMS320C54 (variable) +ida_idp.PLFM_TMS320C54 Texas Instruments TMS320C54xx. -ida_idp.PLFM_TMS320C55 (variable) +ida_idp.PLFM_TMS320C55 Texas Instruments TMS320C55xx. -ida_idp.PLFM_TMSC6 (variable) +ida_idp.PLFM_TMSC6 Texas Instruments TMS320C6x. -ida_idp.PLFM_TRICORE (variable) +ida_idp.PLFM_TRICORE Tasking Tricore. -ida_idp.PLFM_TRIMEDIA (variable) +ida_idp.PLFM_TRIMEDIA Trimedia. -ida_idp.PLFM_UNSP (variable) +ida_idp.PLFM_UNSP SunPlus unSP. -ida_idp.PLFM_XTENSA (variable) +ida_idp.PLFM_WASM + WASM. + +ida_idp.PLFM_XTENSA Tensilica Xtensa. -ida_idp.PLFM_Z8 (variable) +ida_idp.PLFM_Z8 Z8. -ida_idp.PLFM_Z80 (variable) +ida_idp.PLFM_Z80 8085, Z80 -ida_idp.PR2_CODE16_BIT (variable) - low bit of code addresses has special meaning e.g. ARM Thumb, MIPS16 +ida_idp.PR2_CODE16_BIT + low bit of code addresses has special meaning e.g. ARM Thumb, MIPS16 + -ida_idp.PR2_FORCE_16BIT (variable) +ida_idp.PR2_FORCE_16BIT use 16-bit basic types despite of 32-bit segments (used by c166) -ida_idp.PR2_IDP_OPTS (variable) +ida_idp.PR2_IDP_OPTS the module has processor-specific configuration options -ida_idp.PR2_MACRO (variable) +ida_idp.PR2_MACRO processor supports macro instructions -ida_idp.PR2_MAPPINGS (variable) +ida_idp.PR2_MAPPINGS the processor module uses memory mapping -ida_idp.PR2_REALCVT (variable) - the module has a custom 'ev_realcvt' implementation (otherwise IEEE-754 format - is assumed) - -ida_idp.PR2_REL_BITS (variable) +ida_idp.PR2_REL_BITS (Lumina) calcrel info has bits granularity, not bytes - construction flag only -ida_idp.PR2_USE_CALCREL (variable) +ida_idp.PR2_USE_CALCREL (Lumina) the module supports calcrel info -ida_idp.PRN_BIN (variable) +ida_idp.PRN_BIN binary -ida_idp.PRN_DEC (variable) +ida_idp.PRN_DEC decimal -ida_idp.PRN_HEX (variable) +ida_idp.PRN_HEX hex -ida_idp.PRN_OCT (variable) +ida_idp.PRN_OCT octal -ida_idp.PR_ADJSEGS (variable) +ida_idp.PR_ADJSEGS IDA may adjust segments' starting/ending addresses. -ida_idp.PR_ALIGN (variable) +ida_idp.PR_ALIGN All data items should be aligned properly. -ida_idp.PR_ALIGN_INSN (variable) - 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_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 (variable) +ida_idp.PR_ASSEMBLE Module has a built-in assembler and will react to ev_assemble. -ida_idp.PR_BINMEM (variable) - 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_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 (variable) +ida_idp.PR_CHK_XREF don't allow near xrefs between segments with different bases -ida_idp.PR_CNDINSNS (variable) +ida_idp.PR_CNDINSNS has conditional instructions -ida_idp.PR_DEFNUM (variable) +ida_idp.PR_DEFNUM mask - default number representation -ida_idp.PR_DEFSEG32 (variable) +ida_idp.PR_DEFSEG32 segments are 32-bit by default -ida_idp.PR_DEFSEG64 (variable) +ida_idp.PR_DEFSEG64 segments are 64-bit by default -ida_idp.PR_DELAYED (variable) - has delayed jumps and calls. If this flag is set, - processor_t::is_basic_block_end, processor_t::delay_slot_insn should be - implemented +ida_idp.PR_DELAYED + has delayed jumps and calls. If this flag is set, processor_t::is_basic_block_end, processor_t::delay_slot_insn should be implemented + -ida_idp.PR_NOCHANGE (variable) - The user can't change segments and code/data attributes (display only) +ida_idp.PR_NOCHANGE + The user can't change segments and code/data attributes (display only) + -ida_idp.PR_NO_SEGMOVE (variable) - the processor module doesn't support move_segm() (i.e. the user can't move - segments) +ida_idp.PR_NO_SEGMOVE + the processor module doesn't support move_segm() (i.e. the user can't move segments) + -ida_idp.PR_OUTER (variable) +ida_idp.PR_OUTER has outer operands (currently only mc68k) -ida_idp.PR_PURGING (variable) +ida_idp.PR_PURGING there are calling conventions which may purge bytes from the stack -ida_idp.PR_RNAMESOK (variable) +ida_idp.PR_RNAMESOK allow user register names for location names -ida_idp.PR_SCALE_STKVARS (variable) +ida_idp.PR_SCALE_STKVARS use processor_t::get_stkvar_scale callback -ida_idp.PR_SEGS (variable) +ida_idp.PR_SEGS has segment registers? -ida_idp.PR_SEGTRANS (variable) - the processor module supports the segment translation feature (meaning it - calculates the code addresses using the map_code_ea() function) +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 (variable) +ida_idp.PR_SGROTHER the segment registers don't contain the segment selectors. -ida_idp.PR_STACK_UP (variable) +ida_idp.PR_STACK_UP the stack grows up -ida_idp.PR_TYPEINFO (variable) - the processor module fully supports type information callbacks; without full - support, function argument locations and other things will probably be wrong. +ida_idp.PR_TYPEINFO + the processor module fully supports type information callbacks; without full support, function argument locations and other things will probably be wrong. + -ida_idp.PR_USE32 (variable) +ida_idp.PR_USE32 supports 32-bit addressing? -ida_idp.PR_USE64 (variable) +ida_idp.PR_USE64 supports 64-bit addressing? -ida_idp.PR_USE_ARG_TYPES (variable) +ida_idp.PR_USE_ARG_TYPES use processor_t::use_arg_types callback -ida_idp.PR_USE_TBYTE (variable) +ida_idp.PR_USE_TBYTE BTMT_SPECFLT means _TBYTE type -ida_idp.PR_WORD_INS (variable) +ida_idp.PR_WORD_INS instruction codes are grouped 2bytes in binary line prefix -ida_idp.REG_SPOIL (variable) - processor_t::use_regarg_type uses this bit in the return value to indicate that - the register value has been spoiled +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.SETPROC_IDB (variable) +ida_idp.SETPROC_IDB set processor type for old idb -ida_idp.SETPROC_LOADER (variable) - set processor type for new idb; if the user has specified a compatible - processor, return success without changing it. if failure, call loader_failure() +ida_idp.SETPROC_LOADER + set processor type for new idb; if the user has specified a compatible processor, return success without changing it. if failure, call loader_failure() + -ida_idp.SETPROC_LOADER_NON_FATAL (variable) +ida_idp.SETPROC_LOADER_NON_FATAL the same as SETPROC_LOADER but non-fatal failures. -ida_idp.SETPROC_USER (variable) - set user-specified processor used for -p and manual processor change at later - time +ida_idp.SETPROC_USER + set user-specified processor used for -p and manual processor change at later time + -ida_idp.__ph (class) +ida_idp.__ph -ida_idp._idp_cvar_t (class) +ida_idp._notify_when_dispatcher_t -ida_idp._notify_when_dispatcher_t (class) +ida_idp._notify_when_dispatcher_t._IDB_Hooks -ida_idp._notify_when_dispatcher_t._IDB_Hooks (class) - -ida_idp._notify_when_dispatcher_t._IDB_Hooks.__init__ (method) - -ida_idp._notify_when_dispatcher_t._IDB_Hooks.closebase (method) - -ida_idp._notify_when_dispatcher_t._IDP_Hooks (class) - -ida_idp._notify_when_dispatcher_t._IDP_Hooks.__init__ (method) - -ida_idp._notify_when_dispatcher_t._IDP_Hooks.ev_newfile (method) - -ida_idp._notify_when_dispatcher_t._IDP_Hooks.ev_oldfile (method) - -ida_idp._notify_when_dispatcher_t.__init__ (method) - -ida_idp._notify_when_dispatcher_t._callback_t (class) - -ida_idp._notify_when_dispatcher_t._callback_t.__init__ (method) - -ida_idp._notify_when_dispatcher_t._find (method) - -ida_idp._notify_when_dispatcher_t.dispatch (method) - -ida_idp._notify_when_dispatcher_t.notify_when (method) - -ida_idp._processor_t (class) - Proxy of C++ processor_t class. - -ida_idp._processor_t.__init__ (method) - __init__(self) -> _processor_t - -ida_idp._processor_t.add_cref (method) - add_cref(_from, to, type) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - type: enum cref_t - -ida_idp._processor_t.add_dref (method) - add_dref(_from, to, type) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - type: enum dref_t - -ida_idp._processor_t.adjust_argloc (method) - adjust_argloc(argloc, type, size) -> ssize_t - - Parameters - ---------- - argloc: argloc_t * - type: tinfo_t const * - size: int - -ida_idp._processor_t.adjust_libfunc_ea (method) - adjust_libfunc_ea(sig, libfun, ea) -> ssize_t - - Parameters - ---------- - sig: idasgn_t const & - libfun: libfunc_t const & - ea: ea_t * - -ida_idp._processor_t.adjust_refinfo (method) - adjust_refinfo(ri, ea, n, fd) -> ssize_t - - Parameters - ---------- - ri: refinfo_t * - ea: ea_t - n: int - fd: fixup_data_t const & - -ida_idp._processor_t.ana_insn (method) - ana_insn(out) -> ssize_t - - Parameters - ---------- - out: insn_t * - -ida_idp._processor_t.analyze_prolog (method) - analyze_prolog(fct_ea) -> ssize_t - - Parameters - ---------- - fct_ea: ea_t - -ida_idp._processor_t.arch_changed (method) - arch_changed() -> ssize_t - -ida_idp._processor_t.arg_addrs_ready (method) - arg_addrs_ready(caller, n, tif, addrs) -> ssize_t - - Parameters - ---------- - caller: ea_t - n: int - tif: tinfo_t const & - addrs: ea_t * - -ida_idp._processor_t.asm_installed (method) - asm_installed(asmnum) -> ssize_t - - Parameters - ---------- - asmnum: int - -ida_idp._processor_t.assemble (method) - assemble(_bin, ea, cs, ip, _use32, line) -> ssize_t - - Parameters - ---------- - _bin: uchar * - ea: ea_t - cs: ea_t - ip: ea_t - _use32: bool - line: char const * - -ida_idp._processor_t.auto_queue_empty (method) - auto_queue_empty(type) - - Parameters - ---------- - type: int - -ida_idp._processor_t.calc_arglocs (method) - calc_arglocs(fti) -> ssize_t - - Parameters - ---------- - fti: func_type_data_t * - -ida_idp._processor_t.calc_cdecl_purged_bytes (method) - calc_cdecl_purged_bytes(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t.calc_next_eas (method) - calc_next_eas(res, insn, over) -> ssize_t - - Parameters - ---------- - res: eavec_t * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - over: bool - -ida_idp._processor_t.calc_purged_bytes (method) - calc_purged_bytes(p_purged_bytes, fti) -> ssize_t - - Parameters - ---------- - p_purged_bytes: int * - fti: func_type_data_t const & - -ida_idp._processor_t.calc_retloc (method) - calc_retloc(retloc, rettype, cc) -> ssize_t - - Parameters - ---------- - retloc: argloc_t * - rettype: tinfo_t const & - cc: cm_t - -ida_idp._processor_t.calc_spdelta (method) - calc_spdelta(spdelta, ins) -> ssize_t - - Parameters - ---------- - spdelta: sval_t * - ins: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.calc_step_over (method) - calc_step_over(target, ip) -> ssize_t - - Parameters - ---------- - target: ea_t * - ip: ea_t - -ida_idp._processor_t.calc_switch_cases (method) - calc_switch_cases(casevec, targets, insn_ea, si) -> ssize_t - - Parameters - ---------- - casevec: void * - targets: eavec_t * - insn_ea: ea_t - si: switch_info_t const & - -ida_idp._processor_t.calc_varglocs (method) - calc_varglocs(ftd, regs, stkargs, nfixed) -> ssize_t - - Parameters - ---------- - ftd: func_type_data_t * - regs: regobjs_t * - stkargs: relobj_t * - nfixed: int - -ida_idp._processor_t.calcrel (method) - calcrel(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t.calcrel_in_bits (method) - calcrel_in_bits(self) -> bool - -ida_idp._processor_t.can_have_type (method) - can_have_type(op) -> ssize_t - - Parameters - ---------- - op: op_t const & - -ida_idp._processor_t.cbsize (method) - cbsize(self) -> int - -ida_idp._processor_t.clean_tbit (method) - clean_tbit(ea, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - ea: ea_t - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t.cmp_operands (method) - cmp_operands(op1, op2) -> ssize_t - - Parameters - ---------- - op1: op_t const & - op2: op_t const & - -ida_idp._processor_t.coagulate (method) - coagulate(start_ea) -> ssize_t - - Parameters - ---------- - start_ea: ea_t - -ida_idp._processor_t.coagulate_dref (method) - coagulate_dref(_from, to, may_define, code_ea) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - may_define: bool - code_ea: ea_t * - -ida_idp._processor_t.create_flat_group (method) - create_flat_group(image_base, bitness, dataseg_sel) -> ssize_t - - Parameters - ---------- - image_base: ea_t - bitness: int - dataseg_sel: sel_t - -ida_idp._processor_t.create_func_frame (method) - create_func_frame(pfn) -> ssize_t - - Parameters - ---------- - pfn: func_t * - -ida_idp._processor_t.create_merge_handlers (method) - create_merge_handlers(md) -> ssize_t - - Parameters - ---------- - md: merge_data_t * - -ida_idp._processor_t.create_switch_xrefs (method) - create_switch_xrefs(jumpea, si) -> ssize_t - - Parameters - ---------- - jumpea: ea_t - si: switch_info_t const & - -ida_idp._processor_t.creating_segm (method) - creating_segm(seg) -> ssize_t - - Parameters - ---------- - seg: segment_t * - -ida_idp._processor_t.cvt64_hashval (method) - cvt64_hashval(self, node, tag, name, data) -> ssize_t - - Parameters - ---------- - node: nodeidx_t - tag: uchar - name: char const * - data: uchar const * - -ida_idp._processor_t.cvt64_supval (method) - cvt64_supval(self, node, tag, idx, data) -> ssize_t - - Parameters - ---------- - node: nodeidx_t - tag: uchar - idx: nodeidx_t - data: uchar const * - -ida_idp._processor_t.dbsize (method) - dbsize(self) -> int - -ida_idp._processor_t.decorate_name (method) - decorate_name(outbuf, name, mangle, cc, type) -> ssize_t - - Parameters - ---------- - outbuf: qstring * - name: char const * - mangle: bool - cc: cm_t - type: tinfo_t const & - -ida_idp._processor_t.del_cref (method) - del_cref(_from, to, expand) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - expand: bool - -ida_idp._processor_t.del_dref (method) - del_dref(_from, to) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - -ida_idp._processor_t.delay_slot_insn (method) - delay_slot_insn(self, ea, bexec, fexec) -> bool - - Parameters - ---------- - ea: ea_t * - bexec: bool * - fexec: bool * - -ida_idp._processor_t.demangle_name (method) - demangle_name(res, name, disable_mask, demreq) -> ssize_t - - Parameters - ---------- - res: int32 * - name: char const * - disable_mask: uint32 - demreq: int - -ida_idp._processor_t.emu_insn (method) - emu_insn(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.endbinary (method) - endbinary(ok) -> ssize_t - - Parameters - ---------- - ok: bool - -ida_idp._processor_t.equal_reglocs (method) - equal_reglocs(a1, a2) -> ssize_t - - Parameters - ---------- - a1: argloc_t const & - a2: argloc_t const & - -ida_idp._processor_t.extract_address (method) - extract_address(out_ea, screen_ea, string, x) -> ssize_t - - Parameters - ---------- - out_ea: ea_t * - screen_ea: ea_t - string: char const * - x: size_t - -ida_idp._processor_t.find_op_value (method) - find_op_value(insn, op) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - op: int - -ida_idp._processor_t.find_reg_value (method) - find_reg_value(insn, reg) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - reg: int - -ida_idp._processor_t.func_bounds (method) - func_bounds(possible_return_code, pfn, max_func_end_ea) -> ssize_t - - Parameters - ---------- - possible_return_code: int * - pfn: func_t * - max_func_end_ea: ea_t - -ida_idp._processor_t.gen_asm_or_lst (method) - gen_asm_or_lst(starting, fp, is_asm, flags, outline) -> ssize_t - - Parameters - ---------- - starting: bool - fp: FILE * - is_asm: bool - flags: int - outline: void * - -ida_idp._processor_t.gen_map_file (method) - gen_map_file(nlines, fp) -> ssize_t - - Parameters - ---------- - nlines: int * - fp: FILE * - -ida_idp._processor_t.gen_regvar_def (method) - gen_regvar_def(ctx, v) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - v: regvar_t * - -ida_idp._processor_t.gen_src_file_lnnum (method) - gen_src_file_lnnum(ctx, file, lnnum) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - file: char const * - lnnum: size_t - -ida_idp._processor_t.gen_stkvar_def (method) - gen_stkvar_def(ctx, mptr, v) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - mptr: member_t const * - v: sval_t - -ida_idp._processor_t.get_abi_info (method) - get_abi_info(abi_names, abi_opts, comp) -> ssize_t - - Parameters - ---------- - abi_names: qstrvec_t * - abi_opts: qstrvec_t * - comp: comp_t - -ida_idp._processor_t.get_autocmt (method) - get_autocmt(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.get_bg_color (method) - get_bg_color(color, ea) -> ssize_t - - Parameters - ---------- - color: bgcolor_t * - ea: ea_t - -ida_idp._processor_t.get_canon_feature (method) - get_canon_feature(self, itype) -> uint32 - - Parameters - ---------- - itype: uint16 - -ida_idp._processor_t.get_canon_mnem (method) - get_canon_mnem(self, itype) -> char const * - - Parameters - ---------- - itype: uint16 - -ida_idp._processor_t.get_cc_regs (method) - get_cc_regs(regs, cc) -> ssize_t - - Parameters - ---------- - regs: callregs_t * - cc: cm_t - -ida_idp._processor_t.get_code16_mode (method) - get_code16_mode(ea) -> bool - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t.get_dbr_opnum (method) - get_dbr_opnum(opnum, insn) -> ssize_t - - Parameters - ---------- - opnum: int * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.get_default_segm_bitness (method) - get_default_segm_bitness(self, is_64bit_app) -> int - - Parameters - ---------- - is_64bit_app: bool - -ida_idp._processor_t.get_frame_retsize (method) - get_frame_retsize(retsize, pfn) -> ssize_t - - Parameters - ---------- - retsize: int * - pfn: func_t const * - -ida_idp._processor_t.get_idd_opinfo (method) - get_idd_opinfo(opinf, ea, n, thread_id, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - opinf: idd_opinfo_t * - ea: ea_t - n: int - thread_id: int - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t.get_macro_insn_head (method) - get_macro_insn_head(head, ip) -> ssize_t - - Parameters - ---------- - head: ea_t * - ip: ea_t - -ida_idp._processor_t.get_operand_string (method) - get_operand_string(insn, opnum) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - opnum: int - -ida_idp._processor_t.get_proc_index (method) - get_proc_index(self) -> int - -ida_idp._processor_t.get_reg_accesses (method) - get_reg_accesses(accvec, insn, flags) -> ssize_t - - Parameters - ---------- - accvec: reg_accesses_t * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - flags: int - -ida_idp._processor_t.get_reg_info (method) - get_reg_info(regname, bitrange) -> char const * - - Parameters - ---------- - regname: char const * - bitrange: bitrange_t * - -ida_idp._processor_t.get_reg_name (method) - get_reg_name(reg, width, reghi) -> ssize_t - - Parameters - ---------- - reg: int - width: size_t - reghi: int - -ida_idp._processor_t.get_simd_types (method) - get_simd_types(out, simd_attrs, argloc, create_tifs) -> ssize_t - - Parameters - ---------- - out: void * - simd_attrs: simd_info_t const * - argloc: argloc_t const * - create_tifs: bool - -ida_idp._processor_t.get_stkarg_area_info (method) - get_stkarg_area_info(out, cc) -> ssize_t - - Parameters - ---------- - out: stkarg_area_info_t * - cc: cm_t - -ida_idp._processor_t.get_stkvar_scale (method) - get_stkvar_scale(self) -> int - -ida_idp._processor_t.get_stkvar_scale_factor (method) - get_stkvar_scale_factor() -> ssize_t - -ida_idp._processor_t.getreg (method) - getreg(rv, regnum) -> ssize_t - - Parameters - ---------- - rv: uval_t * - regnum: int - -ida_idp._processor_t.has_code16_bit (method) - has_code16_bit(self) -> bool - -ida_idp._processor_t.has_idp_opts (method) - has_idp_opts(self) -> bool - -ida_idp._processor_t.has_realcvt (method) - has_realcvt(self) -> bool - -ida_idp._processor_t.has_segregs (method) - has_segregs(self) -> bool - -ida_idp._processor_t.init (method) - init(idp_modname) -> ssize_t - - Parameters - ---------- - idp_modname: char const * - -ida_idp._processor_t.insn_reads_tbit (method) - insn_reads_tbit(insn, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t.is_align_insn (method) - is_align_insn(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t.is_alloca_probe (method) - is_alloca_probe(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t.is_basic_block_end (method) - is_basic_block_end(insn, call_insn_stops_block) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - call_insn_stops_block: bool - -ida_idp._processor_t.is_call_insn (method) - is_call_insn(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.is_cond_insn (method) - is_cond_insn(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.is_control_flow_guard (method) - is_control_flow_guard(p_reg, insn) -> ssize_t - - Parameters - ---------- - p_reg: int * - insn: insn_t const * - -ida_idp._processor_t.is_far_jump (method) - is_far_jump(icode) -> ssize_t - - Parameters - ---------- - icode: int - -ida_idp._processor_t.is_indirect_jump (method) - is_indirect_jump(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.is_jump_func (method) - is_jump_func(pfn, jump_target, func_pointer) -> ssize_t - - Parameters - ---------- - pfn: func_t * - jump_target: ea_t * - func_pointer: ea_t * - -ida_idp._processor_t.is_ret_insn (method) - is_ret_insn(insn, strict) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - strict: bool - -ida_idp._processor_t.is_sane_insn (method) - is_sane_insn(insn, no_crefs) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - no_crefs: int - -ida_idp._processor_t.is_sp_based (method) - is_sp_based(insn, x) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - x: op_t const & - -ida_idp._processor_t.is_switch (method) - is_switch(si, insn) -> ssize_t - - Parameters - ---------- - si: switch_info_t * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.loader_elf_machine (method) - loader_elf_machine(li, machine_type, p_procname, p_pd, ldr, reader) -> ssize_t - - Parameters - ---------- - li: linput_t * - machine_type: int - p_procname: char const ** - p_pd: proc_def_t ** - ldr: elf_loader_t * - reader: reader_t * - -ida_idp._processor_t.lower_func_type (method) - lower_func_type(argnums, fti) -> ssize_t - - Parameters - ---------- - argnums: intvec_t * - fti: func_type_data_t * - -ida_idp._processor_t.max_ptr_size (method) - max_ptr_size() -> ssize_t - -ida_idp._processor_t.may_be_func (method) - may_be_func(insn, state) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - state: int - -ida_idp._processor_t.may_show_sreg (method) - may_show_sreg(current_ea) -> ssize_t - - Parameters - ---------- - current_ea: ea_t - -ida_idp._processor_t.moving_segm (method) - moving_segm(seg, to, flags) -> ssize_t - - Parameters - ---------- - seg: segment_t * - to: ea_t - flags: int - -ida_idp._processor_t.newasm (method) - newasm(asmnum) -> ssize_t - - Parameters - ---------- - asmnum: int - -ida_idp._processor_t.newbinary (method) - newbinary(filename, fileoff, basepara, binoff, nbytes) -> ssize_t - - Parameters - ---------- - filename: char const * - fileoff: qoff64_t - basepara: ea_t - binoff: ea_t - nbytes: uint64 - -ida_idp._processor_t.newfile (method) - newfile(fname) -> ssize_t - - Parameters - ---------- - fname: char const * - -ida_idp._processor_t.newprc (method) - newprc(pnum, keep_cfg) -> ssize_t - - Parameters - ---------- - pnum: int - keep_cfg: bool - -ida_idp._processor_t.next_exec_insn (method) - next_exec_insn(target, ea, tid, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - target: ea_t * - ea: ea_t - tid: int - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t.notify (method) - notify(event_code) -> ssize_t - - Parameters - ---------- - event_code: enum processor_t::event_t - -ida_idp._processor_t.oldfile (method) - oldfile(fname) -> ssize_t - - Parameters - ---------- - fname: char const * - -ida_idp._processor_t.out_assumes (method) - out_assumes(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t.out_data (method) - out_data(ctx, analyze_only) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - analyze_only: bool - -ida_idp._processor_t.out_footer (method) - out_footer(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t.out_header (method) - out_header(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t.out_insn (method) - out_insn(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t.out_label (method) - out_label(ctx, colored_name) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - colored_name: char const * - -ida_idp._processor_t.out_mnem (method) - out_mnem(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t.out_operand (method) - out_operand(ctx, op) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - op: op_t const & - -ida_idp._processor_t.out_segend (method) - out_segend(ctx, seg) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - seg: segment_t * - -ida_idp._processor_t.out_segstart (method) - out_segstart(ctx, seg) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - seg: segment_t * - -ida_idp._processor_t.out_special_item (method) - out_special_item(ctx, segtype) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - segtype: uchar - -ida_idp._processor_t.privrange_changed (method) - privrange_changed(self, old_privrange, delta) -> ssize_t - - Parameters - ---------- - old_privrange: range_t const & - delta: adiff_t - -ida_idp._processor_t.realcvt (method) - realcvt(m, e, swt) -> fpvalue_error_t - - Parameters - ---------- - m: void * - e: fpvalue_t * - swt: uint16 - -ida_idp._processor_t.rename (method) - rename(ea, new_name, flags) -> ssize_t - - Parameters - ---------- - ea: ea_t - new_name: char const * - flags: int - -ida_idp._processor_t.set_code16_mode (method) - set_code16_mode(ea, code16=True) -> ssize_t - - Parameters - ---------- - ea: ea_t - code16: bool - -ida_idp._processor_t.set_idp_options (method) - set_idp_options(keyword, vtype, value, idb_loaded=True) -> char const * - - Parameters - ---------- - keyword: char const * - vtype: int - value: void const * - idb_loaded: bool - -ida_idp._processor_t.set_proc_options (method) - set_proc_options(options, confidence) -> ssize_t - - Parameters - ---------- - options: char const * - confidence: int - -ida_idp._processor_t.setup_til (method) - setup_til() -> ssize_t - -ida_idp._processor_t.sizeof_ldbl (method) - sizeof_ldbl(self) -> size_t - -ida_idp._processor_t.stkup (method) - stkup(self) -> bool - -ida_idp._processor_t.str2reg (method) - str2reg(regname) -> ssize_t - - Parameters - ---------- - regname: char const * - -ida_idp._processor_t.supports_calcrel (method) - supports_calcrel(self) -> bool - -ida_idp._processor_t.supports_macros (method) - supports_macros(self) -> bool - -ida_idp._processor_t.term (method) - term() -> ssize_t - -ida_idp._processor_t.ti (method) - ti(self) -> bool - -ida_idp._processor_t.treat_hindering_item (method) - treat_hindering_item(hindering_item_ea, new_item_flags, new_item_ea, new_item_length) -> ssize_t - - Parameters - ---------- - hindering_item_ea: ea_t - new_item_flags: flags64_t - new_item_ea: ea_t - new_item_length: asize_t - -ida_idp._processor_t.undefine (method) - undefine(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t.update_call_stack (method) - update_call_stack(stack, tid, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - stack: call_stack_t * - tid: int - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t.use32 (method) - use32(self) -> bool - -ida_idp._processor_t.use64 (method) - use64(self) -> bool - -ida_idp._processor_t.use_arg_types (method) - use_arg_types(ea, fti, rargs) -> ssize_t - - Parameters - ---------- - ea: ea_t - fti: func_type_data_t * - rargs: void * - -ida_idp._processor_t.use_mappings (method) - use_mappings(self) -> bool - -ida_idp._processor_t.use_regarg_type (method) - use_regarg_type(idx, ea, rargs) -> ssize_t - - Parameters - ---------- - idx: int * - ea: ea_t - rargs: void * - -ida_idp._processor_t.use_stkarg_type (method) - use_stkarg_type(ea, arg) -> ssize_t - - Parameters - ---------- - ea: ea_t - arg: funcarg_t const & - -ida_idp._processor_t.use_tbyte (method) - use_tbyte(self) -> bool - -ida_idp._processor_t.validate_flirt_func (method) - validate_flirt_func(start_ea, funcname) -> ssize_t - - Parameters - ---------- - start_ea: ea_t - funcname: char const * - -ida_idp._processor_t.verify_noreturn (method) - verify_noreturn(pfn) -> ssize_t - - Parameters - ---------- - pfn: func_t * - -ida_idp._processor_t.verify_sp (method) - verify_sp(pfn) -> ssize_t - - Parameters - ---------- - pfn: func_t * - -ida_idp._processor_t_Trampoline_IDB_Hooks (class) - -ida_idp._processor_t_Trampoline_IDB_Hooks.__dummy (method) - -ida_idp._processor_t_Trampoline_IDB_Hooks.__init__ (method) - -ida_idp._processor_t_Trampoline_IDB_Hooks.__make_parent_caller (method) - -ida_idp._processor_t_Trampoline_IDB_Hooks.__make_parent_caller.call_parent (function) - -ida_idp._processor_t_add_cref (function) - _processor_t_add_cref(_from, to, type) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - type: enum cref_t - -ida_idp._processor_t_add_dref (function) - _processor_t_add_dref(_from, to, type) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - type: enum dref_t - -ida_idp._processor_t_adjust_argloc (function) - _processor_t_adjust_argloc(argloc, type, size) -> ssize_t - - Parameters - ---------- - argloc: argloc_t * - type: tinfo_t const * - size: int - -ida_idp._processor_t_adjust_libfunc_ea (function) - _processor_t_adjust_libfunc_ea(sig, libfun, ea) -> ssize_t - - Parameters - ---------- - sig: idasgn_t const & - libfun: libfunc_t const & - ea: ea_t * - -ida_idp._processor_t_adjust_refinfo (function) - _processor_t_adjust_refinfo(ri, ea, n, fd) -> ssize_t - - Parameters - ---------- - ri: refinfo_t * - ea: ea_t - n: int - fd: fixup_data_t const & - -ida_idp._processor_t_ana_insn (function) - _processor_t_ana_insn(out) -> ssize_t - - Parameters - ---------- - out: insn_t * - -ida_idp._processor_t_analyze_prolog (function) - _processor_t_analyze_prolog(fct_ea) -> ssize_t - - Parameters - ---------- - fct_ea: ea_t - -ida_idp._processor_t_arch_changed (function) - _processor_t_arch_changed() -> ssize_t - -ida_idp._processor_t_arg_addrs_ready (function) - _processor_t_arg_addrs_ready(caller, n, tif, addrs) -> ssize_t - - Parameters - ---------- - caller: ea_t - n: int - tif: tinfo_t const & - addrs: ea_t * - -ida_idp._processor_t_asm_installed (function) - _processor_t_asm_installed(asmnum) -> ssize_t - - Parameters - ---------- - asmnum: int - -ida_idp._processor_t_assemble (function) - _processor_t_assemble(_bin, ea, cs, ip, _use32, line) -> ssize_t - - Parameters - ---------- - _bin: uchar * - ea: ea_t - cs: ea_t - ip: ea_t - _use32: bool - line: char const * - -ida_idp._processor_t_auto_queue_empty (function) - _processor_t_auto_queue_empty(type) - - Parameters - ---------- - type: int - -ida_idp._processor_t_calc_arglocs (function) - _processor_t_calc_arglocs(fti) -> ssize_t - - Parameters - ---------- - fti: func_type_data_t * - -ida_idp._processor_t_calc_cdecl_purged_bytes (function) - _processor_t_calc_cdecl_purged_bytes(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t_calc_next_eas (function) - _processor_t_calc_next_eas(res, insn, over) -> ssize_t - - Parameters - ---------- - res: eavec_t * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - over: bool - -ida_idp._processor_t_calc_purged_bytes (function) - _processor_t_calc_purged_bytes(p_purged_bytes, fti) -> ssize_t - - Parameters - ---------- - p_purged_bytes: int * - fti: func_type_data_t const & - -ida_idp._processor_t_calc_retloc (function) - _processor_t_calc_retloc(retloc, rettype, cc) -> ssize_t - - Parameters - ---------- - retloc: argloc_t * - rettype: tinfo_t const & - cc: cm_t - -ida_idp._processor_t_calc_spdelta (function) - _processor_t_calc_spdelta(spdelta, ins) -> ssize_t - - Parameters - ---------- - spdelta: sval_t * - ins: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_calc_step_over (function) - _processor_t_calc_step_over(target, ip) -> ssize_t - - Parameters - ---------- - target: ea_t * - ip: ea_t - -ida_idp._processor_t_calc_switch_cases (function) - _processor_t_calc_switch_cases(casevec, targets, insn_ea, si) -> ssize_t - - Parameters - ---------- - casevec: void * - targets: eavec_t * - insn_ea: ea_t - si: switch_info_t const & - -ida_idp._processor_t_calc_varglocs (function) - _processor_t_calc_varglocs(ftd, regs, stkargs, nfixed) -> ssize_t - - Parameters - ---------- - ftd: func_type_data_t * - regs: regobjs_t * - stkargs: relobj_t * - nfixed: int - -ida_idp._processor_t_calcrel (function) - _processor_t_calcrel(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t_can_have_type (function) - _processor_t_can_have_type(op) -> ssize_t - - Parameters - ---------- - op: op_t const & - -ida_idp._processor_t_clean_tbit (function) - _processor_t_clean_tbit(ea, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - ea: ea_t - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t_cmp_operands (function) - _processor_t_cmp_operands(op1, op2) -> ssize_t - - Parameters - ---------- - op1: op_t const & - op2: op_t const & - -ida_idp._processor_t_coagulate (function) - _processor_t_coagulate(start_ea) -> ssize_t - - Parameters - ---------- - start_ea: ea_t - -ida_idp._processor_t_coagulate_dref (function) - _processor_t_coagulate_dref(_from, to, may_define, code_ea) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - may_define: bool - code_ea: ea_t * - -ida_idp._processor_t_create_flat_group (function) - _processor_t_create_flat_group(image_base, bitness, dataseg_sel) -> ssize_t - - Parameters - ---------- - image_base: ea_t - bitness: int - dataseg_sel: sel_t - -ida_idp._processor_t_create_func_frame (function) - _processor_t_create_func_frame(pfn) -> ssize_t - - Parameters - ---------- - pfn: func_t * - -ida_idp._processor_t_create_merge_handlers (function) - _processor_t_create_merge_handlers(md) -> ssize_t - - Parameters - ---------- - md: merge_data_t * - -ida_idp._processor_t_create_switch_xrefs (function) - _processor_t_create_switch_xrefs(jumpea, si) -> ssize_t - - Parameters - ---------- - jumpea: ea_t - si: switch_info_t const & - -ida_idp._processor_t_creating_segm (function) - _processor_t_creating_segm(seg) -> ssize_t - - Parameters - ---------- - seg: segment_t * - -ida_idp._processor_t_decorate_name (function) - _processor_t_decorate_name(outbuf, name, mangle, cc, type) -> ssize_t - - Parameters - ---------- - outbuf: qstring * - name: char const * - mangle: bool - cc: cm_t - type: tinfo_t const & - -ida_idp._processor_t_del_cref (function) - _processor_t_del_cref(_from, to, expand) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - expand: bool - -ida_idp._processor_t_del_dref (function) - _processor_t_del_dref(_from, to) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - -ida_idp._processor_t_demangle_name (function) - _processor_t_demangle_name(res, name, disable_mask, demreq) -> ssize_t - - Parameters - ---------- - res: int32 * - name: char const * - disable_mask: uint32 - demreq: int - -ida_idp._processor_t_emu_insn (function) - _processor_t_emu_insn(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_endbinary (function) - _processor_t_endbinary(ok) -> ssize_t - - Parameters - ---------- - ok: bool - -ida_idp._processor_t_equal_reglocs (function) - _processor_t_equal_reglocs(a1, a2) -> ssize_t - - Parameters - ---------- - a1: argloc_t const & - a2: argloc_t const & - -ida_idp._processor_t_extract_address (function) - _processor_t_extract_address(out_ea, screen_ea, string, x) -> ssize_t - - Parameters - ---------- - out_ea: ea_t * - screen_ea: ea_t - string: char const * - x: size_t - -ida_idp._processor_t_find_op_value (function) - _processor_t_find_op_value(insn, op) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - op: int - -ida_idp._processor_t_find_reg_value (function) - _processor_t_find_reg_value(insn, reg) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - reg: int - -ida_idp._processor_t_func_bounds (function) - _processor_t_func_bounds(possible_return_code, pfn, max_func_end_ea) -> ssize_t - - Parameters - ---------- - possible_return_code: int * - pfn: func_t * - max_func_end_ea: ea_t - -ida_idp._processor_t_gen_asm_or_lst (function) - _processor_t_gen_asm_or_lst(starting, fp, is_asm, flags, outline) -> ssize_t - - Parameters - ---------- - starting: bool - fp: FILE * - is_asm: bool - flags: int - outline: void * - -ida_idp._processor_t_gen_map_file (function) - _processor_t_gen_map_file(nlines, fp) -> ssize_t - - Parameters - ---------- - nlines: int * - fp: FILE * - -ida_idp._processor_t_gen_regvar_def (function) - _processor_t_gen_regvar_def(ctx, v) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - v: regvar_t * - -ida_idp._processor_t_gen_src_file_lnnum (function) - _processor_t_gen_src_file_lnnum(ctx, file, lnnum) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - file: char const * - lnnum: size_t - -ida_idp._processor_t_gen_stkvar_def (function) - _processor_t_gen_stkvar_def(ctx, mptr, v) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - mptr: member_t const * - v: sval_t - -ida_idp._processor_t_get_abi_info (function) - _processor_t_get_abi_info(abi_names, abi_opts, comp) -> ssize_t - - Parameters - ---------- - abi_names: qstrvec_t * - abi_opts: qstrvec_t * - comp: comp_t - -ida_idp._processor_t_get_autocmt (function) - _processor_t_get_autocmt(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_get_bg_color (function) - _processor_t_get_bg_color(color, ea) -> ssize_t - - Parameters - ---------- - color: bgcolor_t * - ea: ea_t - -ida_idp._processor_t_get_cc_regs (function) - _processor_t_get_cc_regs(regs, cc) -> ssize_t - - Parameters - ---------- - regs: callregs_t * - cc: cm_t - -ida_idp._processor_t_get_code16_mode (function) - _processor_t_get_code16_mode(ea) -> bool - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t_get_dbr_opnum (function) - _processor_t_get_dbr_opnum(opnum, insn) -> ssize_t - - Parameters - ---------- - opnum: int * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_get_frame_retsize (function) - _processor_t_get_frame_retsize(retsize, pfn) -> ssize_t - - Parameters - ---------- - retsize: int * - pfn: func_t const * - -ida_idp._processor_t_get_idd_opinfo (function) - _processor_t_get_idd_opinfo(opinf, ea, n, thread_id, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - opinf: idd_opinfo_t * - ea: ea_t - n: int - thread_id: int - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t_get_macro_insn_head (function) - _processor_t_get_macro_insn_head(head, ip) -> ssize_t - - Parameters - ---------- - head: ea_t * - ip: ea_t - -ida_idp._processor_t_get_operand_string (function) - _processor_t_get_operand_string(insn, opnum) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - opnum: int - -ida_idp._processor_t_get_reg_accesses (function) - _processor_t_get_reg_accesses(accvec, insn, flags) -> ssize_t - - Parameters - ---------- - accvec: reg_accesses_t * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - flags: int - -ida_idp._processor_t_get_reg_info (function) - _processor_t_get_reg_info(regname, bitrange) -> char const * - - Parameters - ---------- - regname: char const * - bitrange: bitrange_t * - -ida_idp._processor_t_get_reg_name (function) - _processor_t_get_reg_name(reg, width, reghi) -> ssize_t - - Parameters - ---------- - reg: int - width: size_t - reghi: int - -ida_idp._processor_t_get_simd_types (function) - _processor_t_get_simd_types(out, simd_attrs, argloc, create_tifs) -> ssize_t - - Parameters - ---------- - out: void * - simd_attrs: simd_info_t const * - argloc: argloc_t const * - create_tifs: bool - -ida_idp._processor_t_get_stkarg_area_info (function) - _processor_t_get_stkarg_area_info(out, cc) -> ssize_t - - Parameters - ---------- - out: stkarg_area_info_t * - cc: cm_t - -ida_idp._processor_t_get_stkvar_scale_factor (function) - _processor_t_get_stkvar_scale_factor() -> ssize_t - -ida_idp._processor_t_getreg (function) - _processor_t_getreg(rv, regnum) -> ssize_t - - Parameters - ---------- - rv: uval_t * - regnum: int - -ida_idp._processor_t_init (function) - _processor_t_init(idp_modname) -> ssize_t - - Parameters - ---------- - idp_modname: char const * - -ida_idp._processor_t_insn_reads_tbit (function) - _processor_t_insn_reads_tbit(insn, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t_is_align_insn (function) - _processor_t_is_align_insn(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t_is_alloca_probe (function) - _processor_t_is_alloca_probe(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t_is_basic_block_end (function) - _processor_t_is_basic_block_end(insn, call_insn_stops_block) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - call_insn_stops_block: bool - -ida_idp._processor_t_is_call_insn (function) - _processor_t_is_call_insn(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_is_cond_insn (function) - _processor_t_is_cond_insn(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_is_control_flow_guard (function) - _processor_t_is_control_flow_guard(p_reg, insn) -> ssize_t - - Parameters - ---------- - p_reg: int * - insn: insn_t const * - -ida_idp._processor_t_is_far_jump (function) - _processor_t_is_far_jump(icode) -> ssize_t - - Parameters - ---------- - icode: int - -ida_idp._processor_t_is_indirect_jump (function) - _processor_t_is_indirect_jump(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_is_jump_func (function) - _processor_t_is_jump_func(pfn, jump_target, func_pointer) -> ssize_t - - Parameters - ---------- - pfn: func_t * - jump_target: ea_t * - func_pointer: ea_t * - -ida_idp._processor_t_is_ret_insn (function) - _processor_t_is_ret_insn(insn, strict) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - strict: bool - -ida_idp._processor_t_is_sane_insn (function) - _processor_t_is_sane_insn(insn, no_crefs) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - no_crefs: int - -ida_idp._processor_t_is_sp_based (function) - _processor_t_is_sp_based(insn, x) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - x: op_t const & - -ida_idp._processor_t_is_switch (function) - _processor_t_is_switch(si, insn) -> ssize_t - - Parameters - ---------- - si: switch_info_t * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_loader_elf_machine (function) - _processor_t_loader_elf_machine(li, machine_type, p_procname, p_pd, ldr, reader) -> ssize_t - - Parameters - ---------- - li: linput_t * - machine_type: int - p_procname: char const ** - p_pd: proc_def_t ** - ldr: elf_loader_t * - reader: reader_t * - -ida_idp._processor_t_lower_func_type (function) - _processor_t_lower_func_type(argnums, fti) -> ssize_t - - Parameters - ---------- - argnums: intvec_t * - fti: func_type_data_t * - -ida_idp._processor_t_max_ptr_size (function) - _processor_t_max_ptr_size() -> ssize_t - -ida_idp._processor_t_may_be_func (function) - _processor_t_may_be_func(insn, state) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - state: int - -ida_idp._processor_t_may_show_sreg (function) - _processor_t_may_show_sreg(current_ea) -> ssize_t - - Parameters - ---------- - current_ea: ea_t - -ida_idp._processor_t_moving_segm (function) - _processor_t_moving_segm(seg, to, flags) -> ssize_t - - Parameters - ---------- - seg: segment_t * - to: ea_t - flags: int - -ida_idp._processor_t_newasm (function) - _processor_t_newasm(asmnum) -> ssize_t - - Parameters - ---------- - asmnum: int - -ida_idp._processor_t_newbinary (function) - _processor_t_newbinary(filename, fileoff, basepara, binoff, nbytes) -> ssize_t - - Parameters - ---------- - filename: char const * - fileoff: qoff64_t - basepara: ea_t - binoff: ea_t - nbytes: uint64 - -ida_idp._processor_t_newfile (function) - _processor_t_newfile(fname) -> ssize_t - - Parameters - ---------- - fname: char const * - -ida_idp._processor_t_newprc (function) - _processor_t_newprc(pnum, keep_cfg) -> ssize_t - - Parameters - ---------- - pnum: int - keep_cfg: bool - -ida_idp._processor_t_next_exec_insn (function) - _processor_t_next_exec_insn(target, ea, tid, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - target: ea_t * - ea: ea_t - tid: int - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t_notify (function) - _processor_t_notify(event_code) -> ssize_t - - Parameters - ---------- - event_code: enum processor_t::event_t - -ida_idp._processor_t_oldfile (function) - _processor_t_oldfile(fname) -> ssize_t - - Parameters - ---------- - fname: char const * - -ida_idp._processor_t_out_assumes (function) - _processor_t_out_assumes(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t_out_data (function) - _processor_t_out_data(ctx, analyze_only) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - analyze_only: bool - -ida_idp._processor_t_out_footer (function) - _processor_t_out_footer(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t_out_header (function) - _processor_t_out_header(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t_out_insn (function) - _processor_t_out_insn(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t_out_label (function) - _processor_t_out_label(ctx, colored_name) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - colored_name: char const * - -ida_idp._processor_t_out_mnem (function) - _processor_t_out_mnem(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t_out_operand (function) - _processor_t_out_operand(ctx, op) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - op: op_t const & - -ida_idp._processor_t_out_segend (function) - _processor_t_out_segend(ctx, seg) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - seg: segment_t * - -ida_idp._processor_t_out_segstart (function) - _processor_t_out_segstart(ctx, seg) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - seg: segment_t * - -ida_idp._processor_t_out_special_item (function) - _processor_t_out_special_item(ctx, segtype) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - segtype: uchar - -ida_idp._processor_t_realcvt (function) - _processor_t_realcvt(m, e, swt) -> fpvalue_error_t - - Parameters - ---------- - m: void * - e: fpvalue_t * - swt: uint16 - -ida_idp._processor_t_rename (function) - _processor_t_rename(ea, new_name, flags) -> ssize_t - - Parameters - ---------- - ea: ea_t - new_name: char const * - flags: int - -ida_idp._processor_t_set_code16_mode (function) - _processor_t_set_code16_mode(ea, code16=True) -> ssize_t - - Parameters - ---------- - ea: ea_t - code16: bool - -ida_idp._processor_t_set_idp_options (function) - _processor_t_set_idp_options(keyword, vtype, value, idb_loaded=True) -> char const * - - Parameters - ---------- - keyword: char const * - vtype: int - value: void const * - idb_loaded: bool - -ida_idp._processor_t_set_proc_options (function) - _processor_t_set_proc_options(options, confidence) -> ssize_t - - Parameters - ---------- - options: char const * - confidence: int - -ida_idp._processor_t_setup_til (function) - _processor_t_setup_til() -> ssize_t - -ida_idp._processor_t_str2reg (function) - _processor_t_str2reg(regname) -> ssize_t - - Parameters - ---------- - regname: char const * - -ida_idp._processor_t_term (function) - _processor_t_term() -> ssize_t - -ida_idp._processor_t_treat_hindering_item (function) - _processor_t_treat_hindering_item(hindering_item_ea, new_item_flags, new_item_ea, new_item_length) -> ssize_t - - Parameters - ---------- - hindering_item_ea: ea_t - new_item_flags: flags64_t - new_item_ea: ea_t - new_item_length: asize_t - -ida_idp._processor_t_undefine (function) - _processor_t_undefine(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t_update_call_stack (function) - _processor_t_update_call_stack(stack, tid, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - stack: call_stack_t * - tid: int - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t_use_arg_types (function) - _processor_t_use_arg_types(ea, fti, rargs) -> ssize_t - - Parameters - ---------- - ea: ea_t - fti: func_type_data_t * - rargs: void * - -ida_idp._processor_t_use_regarg_type (function) - _processor_t_use_regarg_type(idx, ea, rargs) -> ssize_t - - Parameters - ---------- - idx: int * - ea: ea_t - rargs: void * - -ida_idp._processor_t_use_stkarg_type (function) - _processor_t_use_stkarg_type(ea, arg) -> ssize_t - - Parameters - ---------- - ea: ea_t - arg: funcarg_t const & - -ida_idp._processor_t_validate_flirt_func (function) - _processor_t_validate_flirt_func(start_ea, funcname) -> ssize_t - - Parameters - ---------- - start_ea: ea_t - funcname: char const * - -ida_idp._processor_t_verify_noreturn (function) - _processor_t_verify_noreturn(pfn) -> ssize_t - - Parameters - ---------- - pfn: func_t * - -ida_idp._processor_t_verify_sp (function) - _processor_t_verify_sp(pfn) -> ssize_t - - Parameters - ---------- - pfn: func_t * - -ida_idp.asm_t (class) - Proxy of C++ asm_t class. - -ida_idp.asm_t.__init__ (method) - __init__(self) -> asm_t - -ida_idp.asm_t.a_align (variable) +ida_idp._notify_when_dispatcher_t._IDB_Hooks.__init__(self, dispatcher) + +ida_idp._notify_when_dispatcher_t._IDB_Hooks.closebase(self) + +ida_idp._notify_when_dispatcher_t._IDP_Hooks + +ida_idp._notify_when_dispatcher_t._IDP_Hooks.__init__(self, dispatcher) + +ida_idp._notify_when_dispatcher_t._IDP_Hooks.ev_newfile(self, name) + +ida_idp._notify_when_dispatcher_t._IDP_Hooks.ev_oldfile(self, name) + +ida_idp._notify_when_dispatcher_t.__init__(self) + +ida_idp._notify_when_dispatcher_t._callback_t + +ida_idp._notify_when_dispatcher_t._callback_t.__init__(self, fun) + +ida_idp._notify_when_dispatcher_t._find(self, fun) + +ida_idp._notify_when_dispatcher_t.dispatch(self, slot, *args) + +ida_idp._notify_when_dispatcher_t.notify_when(self, when, fun) + +ida_idp._processor_t + +ida_idp._processor_t.__init__(self) + +ida_idp._processor_t.add_cref(_from: ida_idaapi.ea_t, to: ida_idaapi.ea_t, type: "cref_t") -> "ssize_t" + +ida_idp._processor_t.add_dref(_from: ida_idaapi.ea_t, to: ida_idaapi.ea_t, type: "dref_t") -> "ssize_t" + +ida_idp._processor_t.adjust_argloc(argloc: "argloc_t", type: "tinfo_t", size: int) -> "ssize_t" + +ida_idp._processor_t.adjust_libfunc_ea(sig: "idasgn_t const &", libfun: "libfunc_t const &", ea: "ea_t *") -> "ssize_t" + +ida_idp._processor_t.adjust_refinfo(ri: "refinfo_t", ea: ida_idaapi.ea_t, n: int, fd: "fixup_data_t const &") -> "ssize_t" + +ida_idp._processor_t.ana_insn(out: "insn_t *") -> "ssize_t" + +ida_idp._processor_t.analyze_prolog(fct_ea: ida_idaapi.ea_t) -> "ssize_t" + +ida_idp._processor_t.arch_changed() -> "ssize_t" + +ida_idp._processor_t.arg_addrs_ready(caller: ida_idaapi.ea_t, n: int, tif: "tinfo_t", addrs: "ea_t *") -> "ssize_t" + +ida_idp._processor_t.asm_installed(asmnum: int) -> "ssize_t" + +ida_idp._processor_t.assemble(_bin: "uchar *", ea: ida_idaapi.ea_t, cs: ida_idaapi.ea_t, ip: ida_idaapi.ea_t, _use32: bool, line: str) -> "ssize_t" + +ida_idp._processor_t.auto_queue_empty(type: int) -> None + +ida_idp._processor_t.calc_arglocs(fti: "func_type_data_t") -> "ssize_t" + +ida_idp._processor_t.calc_cdecl_purged_bytes(ea: ida_idaapi.ea_t) -> "ssize_t" + +ida_idp._processor_t.calc_next_eas(res: "eavec_t *", insn: "insn_t const &", over: bool) -> "ssize_t" + +ida_idp._processor_t.calc_purged_bytes(p_purged_bytes: "int *", fti: "func_type_data_t") -> "ssize_t" + +ida_idp._processor_t.calc_retloc(retloc: "argloc_t", rettype: "tinfo_t", cc: "cm_t") -> "ssize_t" + +ida_idp._processor_t.calc_spdelta(spdelta: "sval_t *", ins: "insn_t const &") -> "ssize_t" + +ida_idp._processor_t.calc_step_over(target: "ea_t *", ip: ida_idaapi.ea_t) -> "ssize_t" + +ida_idp._processor_t.calc_switch_cases(casevec: "void *", targets: "eavec_t *", insn_ea: ida_idaapi.ea_t, si: "switch_info_t") -> "ssize_t" + +ida_idp._processor_t.calc_varglocs(ftd: "func_type_data_t", regs: "regobjs_t", stkargs: "relobj_t", nfixed: int) -> "ssize_t" + +ida_idp._processor_t.calcrel(ea: ida_idaapi.ea_t) -> "bytevec_t *, size_t *" + +ida_idp._processor_t.calcrel_in_bits(self) -> bool + +ida_idp._processor_t.can_have_type(op: "op_t const &") -> "ssize_t" + +ida_idp._processor_t.cbsize(self) -> int + +ida_idp._processor_t.clean_tbit(ea: ida_idaapi.ea_t, _getreg: "processor_t::regval_getter_t *", regvalues: "regval_t") -> "ssize_t" + +ida_idp._processor_t.cmp_operands(op1: "op_t const &", op2: "op_t const &") -> "ssize_t" + +ida_idp._processor_t.coagulate(start_ea: ida_idaapi.ea_t) -> "ssize_t" + +ida_idp._processor_t.coagulate_dref(_from: ida_idaapi.ea_t, to: ida_idaapi.ea_t, may_define: bool, code_ea: "ea_t *") -> "ssize_t" + +ida_idp._processor_t.create_flat_group(image_base: ida_idaapi.ea_t, bitness: int, dataseg_sel: "sel_t") -> "ssize_t" + +ida_idp._processor_t.create_func_frame(pfn: "func_t *") -> "ssize_t" + +ida_idp._processor_t.create_merge_handlers(md: "merge_data_t *") -> "ssize_t" + +ida_idp._processor_t.create_switch_xrefs(jumpea: ida_idaapi.ea_t, si: "switch_info_t") -> "ssize_t" + +ida_idp._processor_t.creating_segm(seg: "segment_t *") -> "ssize_t" + +ida_idp._processor_t.cvt64_hashval(self, node: "nodeidx_t", tag: "uchar", name: str, data: "uchar const *") -> "ssize_t" + +ida_idp._processor_t.cvt64_supval(self, node: "nodeidx_t", tag: "uchar", idx: "nodeidx_t", data: "uchar const *") -> "ssize_t" + +ida_idp._processor_t.dbsize(self) -> int + +ida_idp._processor_t.decorate_name(outbuf: str, name: str, mangle: bool, cc: "cm_t", type: "tinfo_t") -> "ssize_t" + +ida_idp._processor_t.del_cref(_from: ida_idaapi.ea_t, to: ida_idaapi.ea_t, expand: bool) -> "ssize_t" + +ida_idp._processor_t.del_dref(_from: ida_idaapi.ea_t, to: ida_idaapi.ea_t) -> "ssize_t" + +ida_idp._processor_t.delay_slot_insn(self, ea: "ea_t *", bexec: "bool *", fexec: "bool *") -> bool + +ida_idp._processor_t.demangle_name(res: "int32 *", name: str, disable_mask: int, demreq: int) -> int + +ida_idp._processor_t.emu_insn(insn: "insn_t const &") -> "ssize_t" + +ida_idp._processor_t.endbinary(ok: bool) -> "ssize_t" + +ida_idp._processor_t.equal_reglocs(a1: "argloc_t", a2: "argloc_t") -> "ssize_t" + +ida_idp._processor_t.extract_address(out_ea: "ea_t *", screen_ea: ida_idaapi.ea_t, string: str, x: "size_t") -> "ssize_t" + +ida_idp._processor_t.find_op_value(insn: "insn_t const &", op: int) -> "uint64 *" + +ida_idp._processor_t.find_reg_value(insn: "insn_t const &", reg: int) -> "uint64 *" + +ida_idp._processor_t.func_bounds(possible_return_code: "int *", pfn: "func_t *", max_func_end_ea: ida_idaapi.ea_t) -> "ssize_t" + +ida_idp._processor_t.gen_asm_or_lst(starting: bool, fp: "FILE *", is_asm: bool, flags: int, outline: "void *") -> "ssize_t" + +ida_idp._processor_t.gen_map_file(nlines: "int *", fp: "FILE *") -> "ssize_t" + +ida_idp._processor_t.gen_regvar_def(ctx: "outctx_t &", v: "regvar_t *") -> "ssize_t" + +ida_idp._processor_t.gen_src_file_lnnum(ctx: "outctx_t &", file: str, lnnum: "size_t") -> "ssize_t" + +ida_idp._processor_t.gen_stkvar_def(ctx: "outctx_t &", mptr: "udm_t", v: int, tid: "tid_t") -> "ssize_t" + +ida_idp._processor_t.get_abi_info(comp: "comp_t") -> "qstrvec_t *, qstrvec_t *" + +ida_idp._processor_t.get_autocmt(insn: "insn_t const &") -> str + +ida_idp._processor_t.get_bg_color(color: "bgcolor_t *", ea: ida_idaapi.ea_t) -> "ssize_t" + +ida_idp._processor_t.get_canon_feature(self, itype: "uint16") -> int + +ida_idp._processor_t.get_canon_mnem(self, itype: "uint16") -> str + +ida_idp._processor_t.get_cc_regs(regs: "callregs_t", cc: "cm_t") -> "ssize_t" + +ida_idp._processor_t.get_code16_mode(ea: ida_idaapi.ea_t) -> bool + +ida_idp._processor_t.get_dbr_opnum(opnum: "int *", insn: "insn_t const &") -> "ssize_t" + +ida_idp._processor_t.get_default_segm_bitness(self, is_64bit_app: bool) -> int + +ida_idp._processor_t.get_frame_retsize(retsize: "int *", pfn: "func_t const *") -> "ssize_t" + +ida_idp._processor_t.get_idd_opinfo(opinf: "idd_opinfo_t", ea: ida_idaapi.ea_t, n: int, thread_id: int, _getreg: "processor_t::regval_getter_t *", regvalues: "regval_t") -> "ssize_t" + +ida_idp._processor_t.get_macro_insn_head(head: "ea_t *", ip: ida_idaapi.ea_t) -> "ssize_t" + +ida_idp._processor_t.get_operand_string(insn: "insn_t const &", opnum: int) -> str + +ida_idp._processor_t.get_proc_index(self) -> int + +ida_idp._processor_t.get_reg_accesses(accvec: "reg_accesses_t", insn: "insn_t const &", flags: int) -> "ssize_t" + +ida_idp._processor_t.get_reg_info(regname: str, bitrange: "bitrange_t") -> str + +ida_idp._processor_t.get_reg_name(reg: int, width: "size_t", reghi: int) -> str + Get text representation of a register. For most processors this function will just return processor_t::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 + @param width: register width in bytes + @param reghi: if specified, then this function will return the register pair + @returns length of register name in bytes or -1 if failure + +ida_idp._processor_t.get_simd_types(out: "void *", simd_attrs: "simd_info_t", argloc: "argloc_t", create_tifs: bool) -> "ssize_t" + +ida_idp._processor_t.get_stkarg_area_info(out: "stkarg_area_info_t", cc: "cm_t") -> "ssize_t" + +ida_idp._processor_t.get_stkvar_scale(self) -> int + +ida_idp._processor_t.get_stkvar_scale_factor() -> "ssize_t" + +ida_idp._processor_t.getreg(rv: "uval_t *", regnum: int) -> "ssize_t" + +ida_idp._processor_t.has_code16_bit(self) -> bool + +ida_idp._processor_t.has_idp_opts(self) -> bool + +ida_idp._processor_t.has_segregs(self) -> bool + +ida_idp._processor_t.init(idp_modname: str) -> "ssize_t" + +ida_idp._processor_t.insn_reads_tbit(insn: "insn_t const &", _getreg: "processor_t::regval_getter_t *", regvalues: "regval_t") -> "ssize_t" + +ida_idp._processor_t.is_align_insn(ea: ida_idaapi.ea_t) -> "ssize_t" + If the instruction at 'ea' looks like an alignment instruction, return its length in bytes. Otherwise return 0. + + +ida_idp._processor_t.is_alloca_probe(ea: ida_idaapi.ea_t) -> "ssize_t" + +ida_idp._processor_t.is_basic_block_end(insn: "insn_t const &", call_insn_stops_block: bool) -> "ssize_t" + Is the instruction the end of a basic block? + +ida_idp._processor_t.is_call_insn(insn: "insn_t const &") -> "ssize_t" + Is the instruction a "call"? + +ida_idp._processor_t.is_cond_insn(insn: "insn_t const &") -> "ssize_t" + +ida_idp._processor_t.is_control_flow_guard(p_reg: "int *", insn: "insn_t const *") -> "ssize_t" + +ida_idp._processor_t.is_far_jump(icode: int) -> "ssize_t" + +ida_idp._processor_t.is_indirect_jump(insn: "insn_t const &") -> "ssize_t" + +ida_idp._processor_t.is_jump_func(pfn: "func_t *", jump_target: "ea_t *", func_pointer: "ea_t *") -> "ssize_t" + +ida_idp._processor_t.is_ret_insn(insn: "insn_t const &", iri_flags: "uchar") -> "ssize_t" + +ida_idp._processor_t.is_sane_insn(insn: "insn_t const &", no_crefs: int) -> "ssize_t" + +ida_idp._processor_t.is_sp_based(insn: "insn_t const &", x: "op_t const &") -> "ssize_t" + +ida_idp._processor_t.is_switch(si: "switch_info_t", insn: "insn_t const &") -> "ssize_t" + +ida_idp._processor_t.loader_elf_machine(li: "linput_t *", machine_type: int, p_procname: "char const **", p_pd: "proc_def_t **", ldr: "elf_loader_t *", reader: "reader_t *") -> "ssize_t" + +ida_idp._processor_t.lower_func_type(argnums: "intvec_t *", fti: "func_type_data_t") -> "ssize_t" + +ida_idp._processor_t.max_ptr_size() -> "ssize_t" + +ida_idp._processor_t.may_be_func(insn: "insn_t const &", state: int) -> "ssize_t" + +ida_idp._processor_t.may_show_sreg(current_ea: ida_idaapi.ea_t) -> "ssize_t" + +ida_idp._processor_t.moving_segm(seg: "segment_t *", to: ida_idaapi.ea_t, flags: int) -> "ssize_t" + +ida_idp._processor_t.newasm(asmnum: int) -> "ssize_t" + +ida_idp._processor_t.newbinary(filename: str, fileoff: "qoff64_t", basepara: ida_idaapi.ea_t, binoff: ida_idaapi.ea_t, nbytes: "uint64") -> "ssize_t" + +ida_idp._processor_t.newfile(fname: str) -> "ssize_t" + +ida_idp._processor_t.newprc(pnum: int, keep_cfg: bool) -> "ssize_t" + +ida_idp._processor_t.next_exec_insn(target: "ea_t *", ea: ida_idaapi.ea_t, tid: int, _getreg: "processor_t::regval_getter_t *", regvalues: "regval_t") -> "ssize_t" + +ida_idp._processor_t.notify(*args) -> "ssize_t" + +ida_idp._processor_t.oldfile(fname: str) -> "ssize_t" + +ida_idp._processor_t.out_assumes(ctx: "outctx_t &") -> "ssize_t" + +ida_idp._processor_t.out_data(ctx: "outctx_t &", analyze_only: bool) -> "ssize_t" + +ida_idp._processor_t.out_footer(ctx: "outctx_t &") -> "ssize_t" + +ida_idp._processor_t.out_header(ctx: "outctx_t &") -> "ssize_t" + +ida_idp._processor_t.out_insn(ctx: "outctx_t &") -> "ssize_t" + +ida_idp._processor_t.out_label(ctx: "outctx_t &", colored_name: str) -> "ssize_t" + +ida_idp._processor_t.out_mnem(ctx: "outctx_t &") -> "ssize_t" + +ida_idp._processor_t.out_operand(ctx: "outctx_t &", op: "op_t const &") -> "ssize_t" + +ida_idp._processor_t.out_segend(ctx: "outctx_t &", seg: "segment_t *") -> "ssize_t" + +ida_idp._processor_t.out_segstart(ctx: "outctx_t &", seg: "segment_t *") -> "ssize_t" + +ida_idp._processor_t.out_special_item(ctx: "outctx_t &", segtype: "uchar") -> "ssize_t" + +ida_idp._processor_t.privrange_changed(self, old_privrange: "range_t", delta: "adiff_t") -> "ssize_t" + +ida_idp._processor_t.realcvt(m: "void *", e: "fpvalue_t *", swt: "uint16") -> "fpvalue_error_t" + +ida_idp._processor_t.rename(ea: ida_idaapi.ea_t, new_name: str, flags: int) -> "ssize_t" + +ida_idp._processor_t.set_code16_mode(ea: ida_idaapi.ea_t, code16: bool = True) -> "ssize_t" + +ida_idp._processor_t.set_idp_options(keyword: str, vtype: int, value: "void const *", idb_loaded: bool = True) -> str + +ida_idp._processor_t.set_proc_options(options: str, confidence: int) -> "ssize_t" + +ida_idp._processor_t.setup_til() -> "ssize_t" + +ida_idp._processor_t.sizeof_ldbl(self) -> "size_t" + +ida_idp._processor_t.stkup(self) -> bool + +ida_idp._processor_t.str2reg(regname: str) -> "ssize_t" + Get any register number (-1 on error) + +ida_idp._processor_t.supports_calcrel(self) -> bool + +ida_idp._processor_t.supports_macros(self) -> bool + +ida_idp._processor_t.term() -> "ssize_t" + +ida_idp._processor_t.ti(self) -> bool + +ida_idp._processor_t.treat_hindering_item(hindering_item_ea: ida_idaapi.ea_t, new_item_flags: "flags64_t", new_item_ea: ida_idaapi.ea_t, new_item_length: "asize_t") -> "ssize_t" + +ida_idp._processor_t.undefine(ea: ida_idaapi.ea_t) -> "ssize_t" + +ida_idp._processor_t.update_call_stack(stack: "call_stack_t", tid: int, _getreg: "processor_t::regval_getter_t *", regvalues: "regval_t") -> "ssize_t" + +ida_idp._processor_t.use32(self) -> bool + +ida_idp._processor_t.use64(self) -> bool + +ida_idp._processor_t.use_arg_types(ea: ida_idaapi.ea_t, fti: "func_type_data_t", rargs: "void *") -> "ssize_t" + +ida_idp._processor_t.use_mappings(self) -> bool + +ida_idp._processor_t.use_regarg_type(idx: "int *", ea: ida_idaapi.ea_t, rargs: "void *") -> "ssize_t" + +ida_idp._processor_t.use_stkarg_type(ea: ida_idaapi.ea_t, arg: "funcarg_t") -> "ssize_t" + +ida_idp._processor_t.use_tbyte(self) -> bool + +ida_idp._processor_t.validate_flirt_func(start_ea: ida_idaapi.ea_t, funcname: str) -> "ssize_t" + +ida_idp._processor_t.verify_noreturn(pfn: "func_t *") -> "ssize_t" + +ida_idp._processor_t.verify_sp(pfn: "func_t *") -> "ssize_t" + +ida_idp._processor_t_Trampoline_IDB_Hooks + +ida_idp._processor_t_Trampoline_IDB_Hooks.__dummy(self, *args) + +ida_idp._processor_t_Trampoline_IDB_Hooks.__init__(self, proc) + +ida_idp._processor_t_Trampoline_IDB_Hooks.__make_parent_caller(self, key) + +ida_idp._processor_t_Trampoline_IDB_Hooks.__make_parent_caller.call_parent(*args) + +ida_idp.asm_t + +ida_idp.asm_t.__init__(self) + +ida_idp.asm_t.a_align "align" keyword -ida_idp.asm_t.a_ascii (variable) +ida_idp.asm_t.a_ascii string literal directive -ida_idp.asm_t.a_band (variable) +ida_idp.asm_t.a_band & bit and assembler time operation -ida_idp.asm_t.a_bnot (variable) +ida_idp.asm_t.a_bnot ~ bit not assembler time operation -ida_idp.asm_t.a_bor (variable) +ida_idp.asm_t.a_bor | bit or assembler time operation -ida_idp.asm_t.a_bss (variable) - uninitialized data directive should include 's' for the size of data +ida_idp.asm_t.a_bss + uninitialized data directive should include 's' for the size of data + -ida_idp.asm_t.a_byte (variable) +ida_idp.asm_t.a_byte byte directive -ida_idp.asm_t.a_comdef (variable) +ida_idp.asm_t.a_comdef "comm" (communal variable) -ida_idp.asm_t.a_curip (variable) +ida_idp.asm_t.a_curip current IP (instruction pointer) symbol in assembler -ida_idp.asm_t.a_double (variable) +ida_idp.asm_t.a_double double; 8bytes; nullptr if not allowed -ida_idp.asm_t.a_dups (variable) +ida_idp.asm_t.a_dups array keyword. the following sequences may appear: * #h header * #d size * #v value - * #s(b,w,l,q,f,d,o) size specifiers for byte,word, dword,qword, - float,double,oword + * #s(b,w,l,q,f,d,o) size specifiers for byte,word, dword,qword, float,double,oword + + + -ida_idp.asm_t.a_dword (variable) +ida_idp.asm_t.a_dword nullptr if not allowed -ida_idp.asm_t.a_equ (variable) +ida_idp.asm_t.a_equ 'equ' Used if AS_UNEQU is set -ida_idp.asm_t.a_extrn (variable) +ida_idp.asm_t.a_extrn "extern" name keyword -ida_idp.asm_t.a_float (variable) +ida_idp.asm_t.a_float float; 4bytes; nullptr if not allowed -ida_idp.asm_t.a_include_fmt (variable) +ida_idp.asm_t.a_include_fmt the include directive (format string) -ida_idp.asm_t.a_mod (variable) +ida_idp.asm_t.a_mod % mod assembler time operation -ida_idp.asm_t.a_oword (variable) +ida_idp.asm_t.a_oword nullptr if not allowed -ida_idp.asm_t.a_packreal (variable) +ida_idp.asm_t.a_packreal packed decimal real nullptr if not allowed -ida_idp.asm_t.a_public (variable) +ida_idp.asm_t.a_public "public" name keyword. nullptr-use default, ""-do not generate -ida_idp.asm_t.a_qword (variable) +ida_idp.asm_t.a_qword nullptr if not allowed -ida_idp.asm_t.a_rva (variable) - 'rva' keyword for image based offsets (see REFINFO_RVAOFF) +ida_idp.asm_t.a_rva + 'rva' keyword for image based offsets (see REFINFO_RVAOFF) + -ida_idp.asm_t.a_seg (variable) +ida_idp.asm_t.a_seg 'seg ' prefix (example: push seg seg001) -ida_idp.asm_t.a_shl (variable) +ida_idp.asm_t.a_shl << shift left assembler time operation -ida_idp.asm_t.a_shr (variable) +ida_idp.asm_t.a_shr >> shift right assembler time operation -ida_idp.asm_t.a_sizeof_fmt (variable) +ida_idp.asm_t.a_sizeof_fmt size of type (format string) -ida_idp.asm_t.a_tbyte (variable) +ida_idp.asm_t.a_tbyte long double; nullptr if not allowed -ida_idp.asm_t.a_vstruc_fmt (variable) - if a named item is a structure and displayed in the verbose (multiline) form - then display the name as printf(a_strucname_fmt, typename) (for asms with type - checking, e.g. tasm ideal) +ida_idp.asm_t.a_vstruc_fmt + if a named item is a structure and displayed in the verbose (multiline) form then display the name as printf(a_strucname_fmt, typename) (for asms with type checking, e.g. tasm ideal) + -ida_idp.asm_t.a_weak (variable) +ida_idp.asm_t.a_weak "weak" name keyword. nullptr-use default, ""-do not generate -ida_idp.asm_t.a_word (variable) +ida_idp.asm_t.a_word word directive -ida_idp.asm_t.a_xor (variable) +ida_idp.asm_t.a_xor ^ bit xor assembler time operation -ida_idp.asm_t.a_yword (variable) - 32-byte (256-bit) data; nullptr if not allowed requires AS2_YWORD +ida_idp.asm_t.a_yword + 32-byte (256-bit) data; nullptr if not allowed requires AS2_YWORD + -ida_idp.asm_t.a_zword (variable) - 64-byte (512-bit) data; nullptr if not allowed requires AS2_ZWORD +ida_idp.asm_t.a_zword + 64-byte (512-bit) data; nullptr if not allowed requires AS2_ZWORD + -ida_idp.asm_t.accsep (variable) +ida_idp.asm_t.accsep char constant delimiter -ida_idp.asm_t.ascsep (variable) +ida_idp.asm_t.ascsep string literal delimiter -ida_idp.asm_t.cmnt (variable) +ida_idp.asm_t.cmnt comment string (see also cmnt2) -ida_idp.asm_t.cmnt2 (variable) - comment close string (usually nullptr) this is used to denote a string which - closes comments, for example, if the comments are represented with (* ... *) - then cmnt = "(*" and cmnt2 = "*)" +ida_idp.asm_t.cmnt2 + comment close string (usually nullptr) this is used to denote a string which closes comments, for example, if the comments are represented with (* ... *) then cmnt = "(*" and cmnt2 = "*)" + -ida_idp.asm_t.end (variable) +ida_idp.asm_t.end end directive -ida_idp.asm_t.esccodes (variable) - special chars that cannot appear as is in string and char literals +ida_idp.asm_t.esccodes + special chars that cannot appear as is in string and char literals + -ida_idp.asm_t.flag (variable) - Assembler feature bits +ida_idp.asm_t.flag + Assembler feature bits + -ida_idp.asm_t.flag2 (variable) - Secondary assembler feature bits +ida_idp.asm_t.flag2 + Secondary assembler feature bits + -ida_idp.asm_t.header (variable) - array of automatically generated header lines they appear at the start of - disassembled text +ida_idp.asm_t.header + array of automatically generated header lines they appear at the start of disassembled text + -ida_idp.asm_t.help (variable) +ida_idp.asm_t.help Help screen number, 0 - no help. -ida_idp.asm_t.high16 (variable) +ida_idp.asm_t.high16 high16 -ida_idp.asm_t.high8 (variable) +ida_idp.asm_t.high8 high8 -ida_idp.asm_t.lbrace (variable) +ida_idp.asm_t.lbrace left brace used in complex expressions -ida_idp.asm_t.low16 (variable) +ida_idp.asm_t.low16 low16 -ida_idp.asm_t.low8 (variable) +ida_idp.asm_t.low8 low8 operation, should contain s for the operand -ida_idp.asm_t.name (variable) +ida_idp.asm_t.name Assembler name (displayed in menus) -ida_idp.asm_t.origin (variable) +ida_idp.asm_t.origin org directive -ida_idp.asm_t.rbrace (variable) +ida_idp.asm_t.rbrace right brace used in complex expressions -ida_idp.asm_t.uflag (variable) - user defined flags (local only for IDP) you may define and use your own bits +ida_idp.asm_t.uflag + user defined flags (local only for IDP) you may define and use your own bits + -ida_idp.assemble (function) - assemble(ea, cs, ip, use32, line) -> bool +ida_idp.assemble(ea, cs, ip, use32, line) Assemble an instruction into the database (display a warning if an error is found) @param ea: linear address of instruction @@ -38739,222 +25270,118 @@ ida_idp.assemble (function) @return: Boolean. True on success. -ida_idp.cfg_get_cc_header_path (function) - cfg_get_cc_header_path(compid) -> char const * - - @param compid: comp_t +ida_idp.cfg_get_cc_header_path(compid: "comp_t") -> str -ida_idp.cfg_get_cc_parm (function) - cfg_get_cc_parm(compid, name) -> char const * - - @param compid: comp_t - @param name: char const * +ida_idp.cfg_get_cc_parm(compid: "comp_t", name: str) -> str -ida_idp.cfg_get_cc_predefined_macros (function) - cfg_get_cc_predefined_macros(compid) -> char const * - - @param compid: comp_t +ida_idp.cfg_get_cc_predefined_macros(compid: "comp_t") -> str -ida_idp.delay_slot_insn (function) - delay_slot_insn(ea, bexec, fexec) -> bool - - @param ea: ea_t * - @param bexec: bool * - @param fexec: bool * +ida_idp.delay_slot_insn(ea: "ea_t *", bexec: "bool *", fexec: "bool *") -> bool -ida_idp.gen_idb_event (function) - gen_idb_event(code) +ida_idp.gen_idb_event(*args) -> None the kernel will use this function to generate idb_events - - @param code: (C++: idb_event::event_code_t) enum idb_event::event_code_t -ida_idp.get_ash (function) - get_ash() -> asm_t +ida_idp.get_ash() -> "asm_t *" -ida_idp.get_config_value (function) - get_config_value(key) -> bool - - @param key: char const * +ida_idp.get_config_value(key: str) -> "jvalue_t *" -ida_idp.get_idb_notifier_addr (function) - get_idb_notifier_addr(arg1) -> PyObject * - - @param arg1: PyObject * +ida_idp.get_idb_notifier_addr(arg1: "PyObject *") -> "PyObject *" -ida_idp.get_idb_notifier_ud_addr (function) - get_idb_notifier_ud_addr(hooks) -> PyObject * - - @param hooks: IDB_Hooks * +ida_idp.get_idb_notifier_ud_addr(hooks: "IDB_Hooks") -> "PyObject *" -ida_idp.get_idp_name (function) - 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 nullptr +ida_idp.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 nullptr + -ida_idp.get_idp_notifier_addr (function) - get_idp_notifier_addr(arg1) -> PyObject * - - @param arg1: PyObject * +ida_idp.get_idp_notifier_addr(arg1: "PyObject *") -> "PyObject *" -ida_idp.get_idp_notifier_ud_addr (function) - get_idp_notifier_ud_addr(hooks) -> PyObject * - - @param hooks: IDP_Hooks * +ida_idp.get_idp_notifier_ud_addr(hooks: "IDP_Hooks") -> "PyObject *" -ida_idp.get_ph (function) - get_ph() -> _processor_t +ida_idp.get_ph() -> "processor_t *" -ida_idp.get_reg_info (function) - get_reg_info(regname, bitrange) -> char const * - - @param regname: char const * - @param bitrange: bitrange_t * +ida_idp.get_reg_info(regname: str, bitrange: "bitrange_t") -> str -ida_idp.get_reg_name (function) - get_reg_name(reg, width, reghi=-1) -> str - Get text representation of a register. For most processors this function will - just return processor_t::reg_names[reg]. If the processor module has implemented - processor_t::get_reg_name, it will be used instead - - @param reg: (C++: int) internal register number as defined in the processor module - @param width: (C++: size_t) register width in bytes - @param reghi: (C++: int) if specified, then this function will return the register pair - @return: length of register name in bytes or -1 if failure +ida_idp.get_reg_name(reg: int, width: "size_t", reghi: int = -1) -> str + Get text representation of a register. For most processors this function will just return processor_t::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 + @param width: register width in bytes + @param reghi: if specified, then this function will return the register pair + @returns length of register name in bytes or -1 if failure -ida_idp.has_cf_chg (function) - has_cf_chg(feature, opnum) -> bool +ida_idp.has_cf_chg(feature: int, opnum: "uint") -> 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 (function) - has_cf_use(feature, opnum) -> bool +ida_idp.has_cf_use(feature: int, opnum: "uint") -> 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 (function) - has_insn_feature(icode, bit) -> bool +ida_idp.has_insn_feature(icode: "uint16", bit: int) -> bool Does the specified instruction have the specified feature? - - @param icode: (C++: uint16) - @param bit: (C++: uint32) -ida_idp.is_align_insn (function) - 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_align_insn(ea: ida_idaapi.ea_t) -> int + If the instruction at 'ea' looks like an alignment instruction, return its length in bytes. Otherwise return 0. + -ida_idp.is_basic_block_end (function) - is_basic_block_end(insn, call_insn_stops_block) -> bool +ida_idp.is_basic_block_end(insn: "insn_t const &", call_insn_stops_block: bool) -> bool Is the instruction the end of a basic block? - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - @param call_insn_stops_block: (C++: bool) -ida_idp.is_call_insn (function) - is_call_insn(insn) -> bool +ida_idp.is_call_insn(insn: "insn_t const &") -> bool Is the instruction a "call"? - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) -ida_idp.is_indirect_jump_insn (function) - is_indirect_jump_insn(insn) -> bool +ida_idp.is_indirect_jump_insn(insn: "insn_t const &") -> bool Is the instruction an indirect jump? - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) -ida_idp.is_ret_insn (function) - is_ret_insn(insn, strict=True) -> bool - Is the instruction a "return"? - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - @param strict: (C++: bool) +ida_idp.is_ret_insn(*args) -> bool -ida_idp.num_range_t (class) - Proxy of C++ cfgopt_t::num_range_t class. +ida_idp.num_range_t -ida_idp.num_range_t.__init__ (method) - __init__(self, _min, _max) -> num_range_t - - @param _min: int64 - @param _max: int64 +ida_idp.num_range_t.__init__(self, _min: "int64", _max: "int64") -ida_idp.params_t (class) - Proxy of C++ cfgopt_t::params_t class. +ida_idp.params_t -ida_idp.params_t.__init__ (method) - __init__(self, _p1, _p2) -> params_t - - @param _p1: int64 - @param _p2: int64 +ida_idp.params_t.__init__(self, _p1: "int64", _p2: "int64") -ida_idp.parse_reg_name (function) - parse_reg_name(ri, regname) -> bool - Get register info by name. - - @param ri: (C++: reg_info_t *) result - @param regname: (C++: const char *) name of register - @return: success +ida_idp.parse_reg_name(ri: "reg_info_t", regname: str) -> bool + Get register info by name. + + @param ri: result + @param regname: name of register + @returns success -ida_idp.ph_calcrel (function) - ph_calcrel(ea) - - @param ea: ea_t +ida_idp.ph_calcrel(ea: ida_idaapi.ea_t) -> "bytevec_t *, size_t *" -ida_idp.ph_find_op_value (function) - ph_find_op_value(insn, op) -> ssize_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param op: int +ida_idp.ph_find_op_value(insn: "insn_t const &", op: int) -> "uint64 *" -ida_idp.ph_find_reg_value (function) - ph_find_reg_value(insn, reg) -> ssize_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param reg: int +ida_idp.ph_find_reg_value(insn: "insn_t const &", reg: int) -> "uint64 *" -ida_idp.ph_get_cnbits (function) - ph_get_cnbits() -> size_t +ida_idp.ph_get_abi_info(comp: "comp_t") -> "qstrvec_t *, qstrvec_t *" + +ida_idp.ph_get_cnbits() Returns the 'ph.cnbits' -ida_idp.ph_get_dnbits (function) - ph_get_dnbits() -> size_t +ida_idp.ph_get_dnbits() Returns the 'ph.dnbits' -ida_idp.ph_get_flag (function) - ph_get_flag() -> size_t +ida_idp.ph_get_flag() Returns the 'ph.flag' -ida_idp.ph_get_icode_return (function) - ph_get_icode_return() -> size_t +ida_idp.ph_get_icode_return() Returns the 'ph.icode_return' -ida_idp.ph_get_id (function) - ph_get_id() -> size_t +ida_idp.ph_get_id() Returns the 'ph.id' field -ida_idp.ph_get_instruc (function) - ph_get_instruc() -> [(str, int), ...] +ida_idp.ph_get_instruc() 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 (function) - ph_get_instruc_end() -> size_t +ida_idp.ph_get_instruc_end() Returns the 'ph.instruc_end' -ida_idp.ph_get_instruc_start (function) - ph_get_instruc_start() -> size_t +ida_idp.ph_get_instruc_start() Returns the 'ph.instruc_start' -ida_idp.ph_get_operand_info (function) - ph_get_operand_info(ea, n) -> (int, int, int, int, int) or None +ida_idp.ph_get_operand_info(ea: ida_idaapi.ea_t, n: int) -> Union[Tuple[int, ida_idaapi.ea_t, int, int, int], None] Returns the operand information given an ea and operand number. @param ea: address @@ -38963,52 +25390,37 @@ ida_idp.ph_get_operand_info (function) @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_accesses (function) - ph_get_reg_accesses(accvec, insn, flags) -> ssize_t - - @param accvec: reg_accesses_t * - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param flags: int +ida_idp.ph_get_reg_accesses(accvec: "reg_accesses_t", insn: "insn_t const &", flags: int) -> "ssize_t" -ida_idp.ph_get_reg_code_sreg (function) - ph_get_reg_code_sreg() -> size_t +ida_idp.ph_get_reg_code_sreg() Returns the 'ph.reg_code_sreg' -ida_idp.ph_get_reg_data_sreg (function) - ph_get_reg_data_sreg() -> size_t +ida_idp.ph_get_reg_data_sreg() Returns the 'ph.reg_data_sreg' -ida_idp.ph_get_reg_first_sreg (function) - ph_get_reg_first_sreg() -> size_t +ida_idp.ph_get_reg_first_sreg() Returns the 'ph.reg_first_sreg' -ida_idp.ph_get_reg_last_sreg (function) - ph_get_reg_last_sreg() -> size_t +ida_idp.ph_get_reg_last_sreg() Returns the 'ph.reg_last_sreg' -ida_idp.ph_get_regnames (function) - ph_get_regnames() -> [str, ...] +ida_idp.ph_get_regnames() Returns the list of register names as defined in the processor module -ida_idp.ph_get_segreg_size (function) - ph_get_segreg_size() -> size_t +ida_idp.ph_get_segreg_size() Returns the 'ph.segreg_size' -ida_idp.ph_get_tbyte_size (function) - ph_get_tbyte_size() -> size_t +ida_idp.ph_get_tbyte_size() Returns the 'ph.tbyte_size' field as defined in he processor module -ida_idp.ph_get_version (function) - ph_get_version() -> size_t +ida_idp.ph_get_version() Returns the 'ph.version' -ida_idp.process_config_directive (function) - process_config_directive(directive, priority=2) - - @param directive: char const * - @param priority: int +ida_idp.process_config_directive(directive: str, priority: int = 2) -> None -ida_idp.processor_t (class) +ida_idp.processor_t + +ida_idp.processor_t.__idc_cvt_id__ Base class for all processor module scripts A processor_t instance is both an ida_idp.IDP_Hooks, and an @@ -39017,1477 +25429,1283 @@ ida_idp.processor_t (class) 'ida_idp.IDP_Hooks.ev_init' (replaced with processor_t.__init__), and 'ida_idp.IDP_Hooks.ev_term' (replaced with processor_t.__del__)). -ida_idp.processor_t.__init__ (method) +ida_idp.processor_t.__init__(self) -ida_idp.processor_t._get_idb_notifier_addr (method) +ida_idp.processor_t._get_idb_notifier_addr(self) -ida_idp.processor_t._get_idb_notifier_ud_addr (method) +ida_idp.processor_t._get_idb_notifier_ud_addr(self) -ida_idp.processor_t._get_idp_notifier_addr (method) +ida_idp.processor_t._get_idp_notifier_addr(self) -ida_idp.processor_t._get_idp_notifier_ud_addr (method) +ida_idp.processor_t._get_idp_notifier_ud_addr(self) -ida_idp.processor_t._get_notify (method) +ida_idp.processor_t._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. -ida_idp.processor_t._make_forced_value_wrapper (method) +ida_idp.processor_t._make_forced_value_wrapper(self, val, meth = None) -ida_idp.processor_t._make_forced_value_wrapper.f (function) +ida_idp.processor_t._make_forced_value_wrapper.f(*args) -ida_idp.processor_t._make_int_returning_wrapper (method) +ida_idp.processor_t._make_int_returning_wrapper(self, meth, intval = 0) -ida_idp.processor_t._make_int_returning_wrapper.f (function) +ida_idp.processor_t._make_int_returning_wrapper.f(*args) -ida_idp.processor_t.auto_empty (method) +ida_idp.processor_t.auto_empty(self, *args) -ida_idp.processor_t.auto_empty_finally (method) +ida_idp.processor_t.auto_empty_finally(self, *args) -ida_idp.processor_t.closebase (method) +ida_idp.processor_t.closebase(self, *args) -ida_idp.processor_t.compiler_changed (method) +ida_idp.processor_t.compiler_changed(self, *args) -ida_idp.processor_t.deleting_func (method) +ida_idp.processor_t.deleting_func(self, pfn) -ida_idp.processor_t.determined_main (method) +ida_idp.processor_t.determined_main(self, *args) -ida_idp.processor_t.ev_ana_insn (method) +ida_idp.processor_t.ev_ana_insn(self, *args) -ida_idp.processor_t.ev_assemble (method) +ida_idp.processor_t.ev_assemble(self, *args) -ida_idp.processor_t.ev_auto_queue_empty (method) +ida_idp.processor_t.ev_auto_queue_empty(self, *args) -ida_idp.processor_t.ev_calc_step_over (method) +ida_idp.processor_t.ev_calc_step_over(self, target, ip) -ida_idp.processor_t.ev_can_have_type (method) +ida_idp.processor_t.ev_can_have_type(self, *args) -ida_idp.processor_t.ev_cmp_operands (method) +ida_idp.processor_t.ev_cmp_operands(self, *args) -ida_idp.processor_t.ev_coagulate (method) +ida_idp.processor_t.ev_coagulate(self, *args) -ida_idp.processor_t.ev_coagulate_dref (method) +ida_idp.processor_t.ev_coagulate_dref(self, from_ea, to_ea, may_define, _code_ea) -ida_idp.processor_t.ev_create_func_frame (method) +ida_idp.processor_t.ev_create_func_frame(self, pfn) -ida_idp.processor_t.ev_create_switch_xrefs (method) +ida_idp.processor_t.ev_create_switch_xrefs(self, *args) -ida_idp.processor_t.ev_creating_segm (method) +ida_idp.processor_t.ev_creating_segm(self, s) -ida_idp.processor_t.ev_emu_insn (method) +ida_idp.processor_t.ev_emu_insn(self, *args) -ida_idp.processor_t.ev_endbinary (method) +ida_idp.processor_t.ev_endbinary(self, *args) -ida_idp.processor_t.ev_func_bounds (method) +ida_idp.processor_t.ev_func_bounds(self, _possible_return_code, pfn, max_func_end_ea) -ida_idp.processor_t.ev_gen_map_file (method) +ida_idp.processor_t.ev_gen_map_file(self, nlines, fp) -ida_idp.processor_t.ev_gen_regvar_def (method) +ida_idp.processor_t.ev_gen_regvar_def(self, ctx, v) -ida_idp.processor_t.ev_gen_src_file_lnnum (method) +ida_idp.processor_t.ev_gen_src_file_lnnum(self, *args) -ida_idp.processor_t.ev_get_autocmt (method) +ida_idp.processor_t.ev_get_autocmt(self, *args) -ida_idp.processor_t.ev_get_frame_retsize (method) +ida_idp.processor_t.ev_get_frame_retsize(self, frsize, pfn) -ida_idp.processor_t.ev_get_operand_string (method) +ida_idp.processor_t.ev_get_operand_string(self, buf, insn, opnum) -ida_idp.processor_t.ev_is_align_insn (method) +ida_idp.processor_t.ev_is_align_insn(self, *args) -ida_idp.processor_t.ev_is_alloca_probe (method) +ida_idp.processor_t.ev_is_alloca_probe(self, *args) -ida_idp.processor_t.ev_is_basic_block_end (method) +ida_idp.processor_t.ev_is_basic_block_end(self, *args) -ida_idp.processor_t.ev_is_call_insn (method) +ida_idp.processor_t.ev_is_call_insn(self, *args) -ida_idp.processor_t.ev_is_far_jump (method) +ida_idp.processor_t.ev_is_far_jump(self, *args) -ida_idp.processor_t.ev_is_indirect_jump (method) +ida_idp.processor_t.ev_is_indirect_jump(self, *args) -ida_idp.processor_t.ev_is_insn_table_jump (method) +ida_idp.processor_t.ev_is_insn_table_jump(self, *args) -ida_idp.processor_t.ev_is_ret_insn (method) +ida_idp.processor_t.ev_is_ret_insn(self, *args) -ida_idp.processor_t.ev_is_sane_insn (method) +ida_idp.processor_t.ev_is_sane_insn(self, *args) -ida_idp.processor_t.ev_is_sp_based (method) +ida_idp.processor_t.ev_is_sp_based(self, mode, insn, op) -ida_idp.processor_t.ev_is_switch (method) +ida_idp.processor_t.ev_is_switch(self, *args) -ida_idp.processor_t.ev_may_be_func (method) +ida_idp.processor_t.ev_may_be_func(self, *args) -ida_idp.processor_t.ev_may_show_sreg (method) +ida_idp.processor_t.ev_may_show_sreg(self, *args) -ida_idp.processor_t.ev_moving_segm (method) +ida_idp.processor_t.ev_moving_segm(self, s, to_ea, flags) -ida_idp.processor_t.ev_newbinary (method) +ida_idp.processor_t.ev_newbinary(self, *args) -ida_idp.processor_t.ev_newfile (method) +ida_idp.processor_t.ev_newfile(self, *args) -ida_idp.processor_t.ev_newprc (method) +ida_idp.processor_t.ev_newprc(self, *args) -ida_idp.processor_t.ev_oldfile (method) +ida_idp.processor_t.ev_oldfile(self, *args) -ida_idp.processor_t.ev_out_assumes (method) +ida_idp.processor_t.ev_out_assumes(self, *args) -ida_idp.processor_t.ev_out_data (method) +ida_idp.processor_t.ev_out_data(self, *args) -ida_idp.processor_t.ev_out_footer (method) +ida_idp.processor_t.ev_out_footer(self, *args) -ida_idp.processor_t.ev_out_header (method) +ida_idp.processor_t.ev_out_header(self, *args) -ida_idp.processor_t.ev_out_insn (method) +ida_idp.processor_t.ev_out_insn(self, *args) -ida_idp.processor_t.ev_out_label (method) +ida_idp.processor_t.ev_out_label(self, *args) -ida_idp.processor_t.ev_out_mnem (method) +ida_idp.processor_t.ev_out_mnem(self, *args) -ida_idp.processor_t.ev_out_operand (method) +ida_idp.processor_t.ev_out_operand(self, *args) -ida_idp.processor_t.ev_out_segend (method) +ida_idp.processor_t.ev_out_segend(self, ctx, s) -ida_idp.processor_t.ev_out_segstart (method) +ida_idp.processor_t.ev_out_segstart(self, ctx, s) -ida_idp.processor_t.ev_out_special_item (method) +ida_idp.processor_t.ev_out_special_item(self, *args) -ida_idp.processor_t.ev_rename (method) +ida_idp.processor_t.ev_rename(self, *args) -ida_idp.processor_t.ev_set_idp_options (method) +ida_idp.processor_t.ev_set_idp_options(self, keyword, value_type, value, idb_loaded) -ida_idp.processor_t.ev_set_proc_options (method) +ida_idp.processor_t.ev_set_proc_options(self, *args) -ida_idp.processor_t.ev_str2reg (method) +ida_idp.processor_t.ev_str2reg(self, *args) -ida_idp.processor_t.ev_treat_hindering_item (method) +ida_idp.processor_t.ev_treat_hindering_item(self, *args) -ida_idp.processor_t.ev_undefine (method) +ida_idp.processor_t.ev_undefine(self, *args) -ida_idp.processor_t.ev_validate_flirt_func (method) +ida_idp.processor_t.ev_validate_flirt_func(self, *args) -ida_idp.processor_t.ev_verify_noreturn (method) +ida_idp.processor_t.ev_verify_noreturn(self, pfn) -ida_idp.processor_t.ev_verify_sp (method) +ida_idp.processor_t.ev_verify_sp(self, pfn) -ida_idp.processor_t.func_added (method) +ida_idp.processor_t.func_added(self, pfn) -ida_idp.processor_t.get_auxpref (method) +ida_idp.processor_t.get_auxpref(self, insn) This function returns insn.auxpref value -ida_idp.processor_t.get_idpdesc (method) +ida_idp.processor_t.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. -ida_idp.processor_t.get_uFlag (method) - Use this utility function to retrieve the 'uFlag' global variable +ida_idp.processor_t.idasgn_loaded(self, *args) -ida_idp.processor_t.idasgn_loaded (method) +ida_idp.processor_t.kernel_config_loaded(self, *args) -ida_idp.processor_t.kernel_config_loaded (method) +ida_idp.processor_t.make_code(self, *args) -ida_idp.processor_t.make_code (method) +ida_idp.processor_t.make_data(self, *args) -ida_idp.processor_t.make_data (method) +ida_idp.processor_t.renamed(self, *args) -ida_idp.processor_t.renamed (method) +ida_idp.processor_t.savebase(self, *args) -ida_idp.processor_t.savebase (method) +ida_idp.processor_t.segm_moved(self, from_ea, to_ea, size, changed_netmap) -ida_idp.processor_t.segm_moved (method) +ida_idp.processor_t.set_func_end(self, *args) -ida_idp.processor_t.set_func_end (method) +ida_idp.processor_t.set_func_start(self, *args) -ida_idp.processor_t.set_func_start (method) +ida_idp.processor_t.sgr_changed(self, *args) -ida_idp.processor_t.sgr_changed (method) +ida_idp.reg_access_t -ida_idp.reg_access_t (class) - Proxy of C++ reg_access_t class. +ida_idp.reg_access_t.__eq__(self, r: "reg_access_t") -> bool -ida_idp.reg_access_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: reg_access_t const & +ida_idp.reg_access_t.__init__(self) -ida_idp.reg_access_t.__init__ (method) - __init__(self) -> reg_access_t +ida_idp.reg_access_t.__ne__(self, r: "reg_access_t") -> bool -ida_idp.reg_access_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: reg_access_t const & +ida_idp.reg_access_t.have_common_bits(self, r: "reg_access_t") -> bool -ida_idp.reg_access_t.have_common_bits (method) - have_common_bits(self, r) -> bool - - @param r: reg_access_t const & - -ida_idp.reg_access_t.opnum (variable) +ida_idp.reg_access_t.opnum operand number -ida_idp.reg_access_t.range (variable) +ida_idp.reg_access_t.range bitrange inside the register -ida_idp.reg_access_t.regnum (variable) +ida_idp.reg_access_t.regnum register number (only entire registers) -ida_idp.reg_access_vec_t (class) - Proxy of C++ qvector< reg_access_t > class. +ida_idp.reg_access_vec_t -ida_idp.reg_access_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< reg_access_t > const & +ida_idp.reg_access_vec_t.__eq__(self, r: "reg_access_vec_t") -> bool -ida_idp.reg_access_vec_t.__getitem__ (method) - __getitem__(self, i) -> reg_access_t - - @param i: size_t +ida_idp.reg_access_vec_t.__getitem__(self, i: "size_t") -> "reg_access_t const &" -ida_idp.reg_access_vec_t.__init__ (method) - __init__(self) -> reg_access_vec_t - __init__(self, x) -> reg_access_vec_t - - @param x: qvector< reg_access_t > const & +ida_idp.reg_access_vec_t.__init__(self, *args) -ida_idp.reg_access_vec_t.__len__ (method) - __len__(self) -> size_t +ida_idp.reg_access_vec_t.__len__(self) -> "size_t" -ida_idp.reg_access_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< reg_access_t > const & +ida_idp.reg_access_vec_t.__ne__(self, r: "reg_access_vec_t") -> bool -ida_idp.reg_access_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: reg_access_t const & +ida_idp.reg_access_vec_t.__setitem__(self, i: "size_t", v: "reg_access_t") -> None -ida_idp.reg_access_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: reg_access_t const & +ida_idp.reg_access_vec_t._del(self, x: "reg_access_t") -> bool -ida_idp.reg_access_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: reg_access_t const & +ida_idp.reg_access_vec_t.add_unique(self, x: "reg_access_t") -> bool -ida_idp.reg_access_vec_t.at (method) - at(self, _idx) -> reg_access_t - - @param _idx: size_t +ida_idp.reg_access_vec_t.append(self, x: "reg_access_t") -> None -ida_idp.reg_access_vec_t.begin (method) - begin(self) -> reg_access_t +ida_idp.reg_access_vec_t.at(self, _idx: "size_t") -> "reg_access_t const &" -ida_idp.reg_access_vec_t.capacity (method) - capacity(self) -> size_t +ida_idp.reg_access_vec_t.begin(self, *args) -> "qvector< reg_access_t >::const_iterator" -ida_idp.reg_access_vec_t.clear (method) - clear(self) +ida_idp.reg_access_vec_t.capacity(self) -> "size_t" -ida_idp.reg_access_vec_t.empty (method) - empty(self) -> bool +ida_idp.reg_access_vec_t.clear(self) -> None -ida_idp.reg_access_vec_t.end (method) - end(self) -> reg_access_t +ida_idp.reg_access_vec_t.empty(self) -> bool -ida_idp.reg_access_vec_t.erase (method) - erase(self, it) -> reg_access_t - - @param it: qvector< reg_access_t >::iterator - - erase(self, first, last) -> reg_access_t - - @param first: qvector< reg_access_t >::iterator - @param last: qvector< reg_access_t >::iterator +ida_idp.reg_access_vec_t.end(self, *args) -> "qvector< reg_access_t >::const_iterator" -ida_idp.reg_access_vec_t.extract (method) - extract(self) -> reg_access_t +ida_idp.reg_access_vec_t.erase(self, *args) -> "qvector< reg_access_t >::iterator" -ida_idp.reg_access_vec_t.find (method) - find(self, x) -> reg_access_t - - @param x: reg_access_t const & +ida_idp.reg_access_vec_t.extend(self, x: "reg_access_vec_t") -> None -ida_idp.reg_access_vec_t.grow (method) - grow(self, x=reg_access_t()) - - @param x: reg_access_t const & +ida_idp.reg_access_vec_t.extract(self) -> "reg_access_t *" -ida_idp.reg_access_vec_t.has (method) - has(self, x) -> bool - - @param x: reg_access_t const & +ida_idp.reg_access_vec_t.find(self, *args) -> "qvector< reg_access_t >::const_iterator" -ida_idp.reg_access_vec_t.inject (method) - inject(self, s, len) - - @param s: reg_access_t * - @param len: size_t +ida_idp.reg_access_vec_t.grow(self, *args) -> None -ida_idp.reg_access_vec_t.insert (method) - insert(self, it, x) -> reg_access_t - - @param it: qvector< reg_access_t >::iterator - @param x: reg_access_t const & +ida_idp.reg_access_vec_t.has(self, x: "reg_access_t") -> bool -ida_idp.reg_access_vec_t.pop_back (method) - pop_back(self) +ida_idp.reg_access_vec_t.inject(self, s: "reg_access_t", len: "size_t") -> None -ida_idp.reg_access_vec_t.push_back (method) - push_back(self, x) - - @param x: reg_access_t const & - - push_back(self) -> reg_access_t +ida_idp.reg_access_vec_t.insert(self, it: "reg_access_t", x: "reg_access_t") -> "qvector< reg_access_t >::iterator" -ida_idp.reg_access_vec_t.qclear (method) - qclear(self) +ida_idp.reg_access_vec_t.pop_back(self) -> None -ida_idp.reg_access_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_idp.reg_access_vec_t.push_back(self, *args) -> "reg_access_t &" -ida_idp.reg_access_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: reg_access_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_idp.reg_access_vec_t.qclear(self) -> None -ida_idp.reg_access_vec_t.size (method) - size(self) -> size_t +ida_idp.reg_access_vec_t.reserve(self, cnt: "size_t") -> None -ida_idp.reg_access_vec_t.swap (method) - swap(self, r) - - @param r: qvector< reg_access_t > & +ida_idp.reg_access_vec_t.resize(self, *args) -> None -ida_idp.reg_access_vec_t.truncate (method) - truncate(self) +ida_idp.reg_access_vec_t.size(self) -> "size_t" -ida_idp.reg_accesses_t (class) - Proxy of C++ reg_accesses_t class. +ida_idp.reg_access_vec_t.swap(self, r: "reg_access_vec_t") -> None -ida_idp.reg_accesses_t.__init__ (method) - __init__(self) -> reg_accesses_t +ida_idp.reg_access_vec_t.truncate(self) -> None -ida_idp.reg_info_t (class) - Proxy of C++ reg_info_t class. +ida_idp.reg_accesses_t -ida_idp.reg_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: reg_info_t const & +ida_idp.reg_accesses_t.__init__(self) -ida_idp.reg_info_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: reg_info_t const & +ida_idp.reg_info_t -ida_idp.reg_info_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: reg_info_t const & +ida_idp.reg_info_t.__eq__(self, r: "reg_info_t") -> bool -ida_idp.reg_info_t.__init__ (method) - __init__(self) -> reg_info_t +ida_idp.reg_info_t.__ge__(self, r: "reg_info_t") -> bool -ida_idp.reg_info_t.__le__ (method) - __le__(self, r) -> bool - - @param r: reg_info_t const & +ida_idp.reg_info_t.__gt__(self, r: "reg_info_t") -> bool -ida_idp.reg_info_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: reg_info_t const & +ida_idp.reg_info_t.__init__(self) -ida_idp.reg_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: reg_info_t const & +ida_idp.reg_info_t.__le__(self, r: "reg_info_t") -> bool -ida_idp.reg_info_t.compare (method) - compare(self, r) -> int - - @param r: reg_info_t const & +ida_idp.reg_info_t.__lt__(self, r: "reg_info_t") -> bool -ida_idp.reg_info_t.reg (variable) +ida_idp.reg_info_t.__ne__(self, r: "reg_info_t") -> bool + +ida_idp.reg_info_t.compare(self, r: "reg_info_t") -> int + +ida_idp.reg_info_t.reg register number -ida_idp.reg_info_t.size (variable) +ida_idp.reg_info_t.size register size -ida_idp.register_cfgopts (function) - register_cfgopts(opts, nopts, cb=None, obj=None) -> bool - - @param opts: cfgopt_t const [] - @param nopts: size_t - @param cb: config_changed_cb_t * - @param obj: void * +ida_idp.register_cfgopts(opts: "cfgopt_t const []", nopts: "size_t", cb: "config_changed_cb_t *" = None, obj: "void *" = None) -> bool -ida_idp.set_processor_type (function) - 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: (C++: const char *) name of processor type (one of names present in - processor_t::psnames) - @param level: (C++: setproc_level_t) SETPROC_ - @return: success +ida_idp.set_processor_type(procname: str, level: "setproc_level_t") -> 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 processor_t::psnames) + @param level: SETPROC_ + @returns success -ida_idp.set_target_assembler (function) - set_target_assembler(asmnum) -> bool - Set target assembler. - - @param asmnum: (C++: int) number of assembler in the current processor module - @return: success +ida_idp.set_target_assembler(asmnum: int) -> bool + Set target assembler. + + @param asmnum: number of assembler in the current processor module + @returns success -ida_idp.sizeof_ldbl (function) - sizeof_ldbl() -> size_t +ida_idp.sizeof_ldbl() -> "size_t" -ida_idp.str2reg (function) - str2reg(p) -> int - Get any reg number (-1 on error) - - @param p: (C++: const char *) char const * +ida_idp.str2reg(p: str) -> int + Get any register number (-1 on error) -ida_ieee (module) +ida_idp.str2sreg(name: str) + get segment register number from its name or -1 + +ida_ieee IEEE floating point functions. -ida_ieee.E_SPECIAL_EXP (variable) +ida_ieee.E_SPECIAL_EXP Exponent in fpvalue_t for NaN and Inf. -ida_ieee.FPV_BADARG (variable) +ida_ieee.FPVAL_NWORDS + number of words in fpvalue_t + +ida_ieee.FPV_BADARG wrong value of max_exp -ida_ieee.FPV_NAN (variable) +ida_ieee.FPV_NAN NaN. -ida_ieee.FPV_NINF (variable) +ida_ieee.FPV_NINF negative infinity -ida_ieee.FPV_NORM (variable) +ida_ieee.FPV_NORM regular value -ida_ieee.FPV_PINF (variable) +ida_ieee.FPV_PINF positive infinity -ida_ieee.IEEE_EXONE (variable) +ida_ieee.IEEE_E + Array offset to exponent. + +ida_ieee.IEEE_EXONE The exponent of 1.0. -ida_ieee.REAL_ERROR_FPOVER (variable) +ida_ieee.IEEE_M + Array offset to high guard word + + +ida_ieee.IEEE_NI + Number of 16 bit words in eNI. + +ida_ieee.REAL_ERROR_BADDATA + realcvt: illegal real data for load (IEEE data not filled) + +ida_ieee.REAL_ERROR_BADSTR + asctoreal: illegal input string + +ida_ieee.REAL_ERROR_FORMAT + realcvt: not supported format for current .idp + +ida_ieee.REAL_ERROR_FPOVER floating overflow or underflow -ida_ieee.REAL_ERROR_INTOVER (variable) +ida_ieee.REAL_ERROR_INTOVER eetol*: integer overflow -ida_ieee.REAL_ERROR_OK (variable) +ida_ieee.REAL_ERROR_OK no error -ida_ieee.ecleaz (function) - ecleaz(x) - - @param x: unsigned short [(6+3)] +ida_ieee.REAL_ERROR_RANGE + realcvt: number too big (small) for store (mem NOT modified) -ida_ieee.fpvalue_shorts_array_t (class) - Proxy of C++ wrapped_array_t< uint16,FPVAL_NWORDS > class. +ida_ieee.REAL_ERROR_ZERODIV + ediv: divide by 0 -ida_ieee.fpvalue_shorts_array_t.__getitem__ (method) - __getitem__(self, i) -> unsigned short const & - - @param i: size_t +ida_ieee.ecleaz(x: "eNI") -> None -ida_ieee.fpvalue_shorts_array_t.__init__ (method) - __init__(self, data) -> fpvalue_shorts_array_t - - @param data: unsigned short (&)[FPVAL_NWORDS] +ida_ieee.fpvalue_shorts_array_t -ida_ieee.fpvalue_shorts_array_t.__len__ (method) - __len__(self) -> size_t +ida_ieee.fpvalue_shorts_array_t.__getitem__(self, i: "size_t") -> "unsigned short const &" -ida_ieee.fpvalue_shorts_array_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: unsigned short const & +ida_ieee.fpvalue_shorts_array_t.__init__(self, data: "unsigned short (&)[FPVAL_NWORDS]") -ida_ieee.fpvalue_shorts_array_t._get_bytes (method) - _get_bytes(self) -> bytevec_t +ida_ieee.fpvalue_shorts_array_t.__len__(self) -> "size_t" -ida_ieee.fpvalue_shorts_array_t._set_bytes (method) - _set_bytes(self, bts) - - Parameters - ---------- - bts: bytevec_t const & +ida_ieee.fpvalue_shorts_array_t.__setitem__(self, i: "size_t", v: "unsigned short const &") -> None -ida_ieee.fpvalue_t (class) - Proxy of C++ fpvalue_t class. +ida_ieee.fpvalue_shorts_array_t._get_bytes(self) -> "bytevec_t" -ida_ieee.fpvalue_t.__add__ (method) - __add__(self, o) -> fpvalue_t - - @param o: fpvalue_t const & +ida_ieee.fpvalue_shorts_array_t._set_bytes(self, bts: "bytevec_t const &") -> None -ida_ieee.fpvalue_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: fpvalue_t const & +ida_ieee.fpvalue_t -ida_ieee.fpvalue_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: fpvalue_t const & +ida_ieee.fpvalue_t.__add__(self, o: "fpvalue_t") -> "fpvalue_t" -ida_ieee.fpvalue_t.__getitem__ (method) +ida_ieee.fpvalue_t.__eq__(self, r: "fpvalue_t") -> bool -ida_ieee.fpvalue_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: fpvalue_t const & +ida_ieee.fpvalue_t.__ge__(self, r: "fpvalue_t") -> bool -ida_ieee.fpvalue_t.__init__ (method) - __init__(self) -> fpvalue_t - __init__(self, _in) -> fpvalue_t - - @param in: bytevec12_t const & +ida_ieee.fpvalue_t.__getitem__(self, i) -ida_ieee.fpvalue_t.__iter__ (method) +ida_ieee.fpvalue_t.__gt__(self, r: "fpvalue_t") -> bool -ida_ieee.fpvalue_t.__le__ (method) - __le__(self, r) -> bool - - @param r: fpvalue_t const & +ida_ieee.fpvalue_t.__init__(self, *args) -ida_ieee.fpvalue_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: fpvalue_t const & +ida_ieee.fpvalue_t.__iter__(self) -ida_ieee.fpvalue_t.__mul__ (method) - __mul__(self, o) -> fpvalue_t - - @param o: fpvalue_t const & +ida_ieee.fpvalue_t.__le__(self, r: "fpvalue_t") -> bool -ida_ieee.fpvalue_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: fpvalue_t const & +ida_ieee.fpvalue_t.__lt__(self, r: "fpvalue_t") -> bool -ida_ieee.fpvalue_t.__setitem__ (method) +ida_ieee.fpvalue_t.__mul__(self, o: "fpvalue_t") -> "fpvalue_t" -ida_ieee.fpvalue_t.__str__ (method) - __str__(self) -> qstring +ida_ieee.fpvalue_t.__ne__(self, r: "fpvalue_t") -> bool -ida_ieee.fpvalue_t.__sub__ (method) - __sub__(self, o) -> fpvalue_t - - @param o: fpvalue_t const & +ida_ieee.fpvalue_t.__repr__(self) -ida_ieee.fpvalue_t.__truediv__ (method) - __truediv__(self, o) -> fpvalue_t - - @param o: fpvalue_t const & +ida_ieee.fpvalue_t.__setitem__(self, i, v) -ida_ieee.fpvalue_t._get_10bytes (method) - _get_10bytes(self) +ida_ieee.fpvalue_t.__str__(self) -> str -ida_ieee.fpvalue_t._get_bytes (method) - _get_bytes(self) +ida_ieee.fpvalue_t.__sub__(self, o: "fpvalue_t") -> "fpvalue_t" -ida_ieee.fpvalue_t._get_float (method) - _get_float(self) -> double +ida_ieee.fpvalue_t.__truediv__(self, o: "fpvalue_t") -> "fpvalue_t" -ida_ieee.fpvalue_t._get_shorts (method) - _get_shorts(self) -> fpvalue_shorts_array_t +ida_ieee.fpvalue_t._get_bytes(self) -> None -ida_ieee.fpvalue_t._set_10bytes (method) - _set_10bytes(self, _in) - - Parameters - ---------- - in: bytevec10_t const & +ida_ieee.fpvalue_t._get_float(self) -> "double" -ida_ieee.fpvalue_t._set_bytes (method) - _set_bytes(self, _in) - - Parameters - ---------- - in: bytevec12_t const & +ida_ieee.fpvalue_t._get_shorts(self) -> "wrapped_array_t< uint16,FPVAL_NWORDS >" -ida_ieee.fpvalue_t._set_float (method) - _set_float(self, v) - - Parameters - ---------- - v: double +ida_ieee.fpvalue_t._set_bytes(self, _in: "bytevec16_t const &") -> None -ida_ieee.fpvalue_t.assign (method) - assign(self, r) - - @param r: fpvalue_t const & +ida_ieee.fpvalue_t._set_float(self, v: "double") -> None -ida_ieee.fpvalue_t.clear (method) - clear(self) +ida_ieee.fpvalue_t.assign(self, r: "fpvalue_t") -> None -ida_ieee.fpvalue_t.compare (method) - compare(self, r) -> int - - @param r: fpvalue_t const & +ida_ieee.fpvalue_t.clear(self) -> None -ida_ieee.fpvalue_t.eabs (method) - eabs(self) +ida_ieee.fpvalue_t.compare(self, r: "fpvalue_t") -> int + +ida_ieee.fpvalue_t.copy(self) -> "fpvalue_t" + +ida_ieee.fpvalue_t.eabs(self) -> None Calculate absolute value. -ida_ieee.fpvalue_t.fadd (method) - fadd(self, y) -> fpvalue_error_t +ida_ieee.fpvalue_t.fadd(self, y: "fpvalue_t") -> "fpvalue_error_t" Arithmetic operations. - - @param y: (C++: const fpvalue_t &) fpvalue_t const & -ida_ieee.fpvalue_t.fdiv (method) - fdiv(self, y) -> fpvalue_error_t - - @param y: fpvalue_t const & +ida_ieee.fpvalue_t.fdiv(self, y: "fpvalue_t") -> "fpvalue_error_t" -ida_ieee.fpvalue_t.fmul (method) - fmul(self, y) -> fpvalue_error_t - - @param y: fpvalue_t const & +ida_ieee.fpvalue_t.fmul(self, y: "fpvalue_t") -> "fpvalue_error_t" -ida_ieee.fpvalue_t.from_10bytes (method) - from_10bytes(self, fpval) -> fpvalue_error_t +ida_ieee.fpvalue_t.from_10bytes(self, fpval: "void const *") -> "fpvalue_error_t" Conversions for 10-byte floating point values. - - @param fpval: (C++: const void *) void const * -ida_ieee.fpvalue_t.from_12bytes (method) - from_12bytes(self, fpval) -> fpvalue_error_t +ida_ieee.fpvalue_t.from_12bytes(self, fpval: "void const *") -> "fpvalue_error_t" Conversions for 12-byte floating point values. - - @param fpval: (C++: const void *) void const * -ida_ieee.fpvalue_t.from_int64 (method) - from_int64(self, x) - - @param x: int64 +ida_ieee.fpvalue_t.from_int64(self, x: "int64") -> None -ida_ieee.fpvalue_t.from_str (method) - from_str(self, p) -> fpvalue_error_t - Convert string to IEEE. - - @param p_str: (C++: const char **) pointer to pointer to string. it will advanced. +ida_ieee.fpvalue_t.from_str(self, p: str) -> "fpvalue_error_t" + Convert string to IEEE. + -ida_ieee.fpvalue_t.from_sval (method) - from_sval(self, x) +ida_ieee.fpvalue_t.from_sval(self, x: int) -> None Convert integer to IEEE. - - @param x: (C++: sval_t) -ida_ieee.fpvalue_t.from_uint64 (method) - from_uint64(self, x) - - @param x: uint64 +ida_ieee.fpvalue_t.from_uint64(self, x: "uint64") -> None -ida_ieee.fpvalue_t.fsub (method) - fsub(self, y) -> fpvalue_error_t - - @param y: fpvalue_t const & +ida_ieee.fpvalue_t.fsub(self, y: "fpvalue_t") -> "fpvalue_error_t" -ida_ieee.fpvalue_t.get_kind (method) - get_kind(self) -> fpvalue_kind_t +ida_ieee.fpvalue_t.get_kind(self) -> "fpvalue_kind_t" Get value kind. -ida_ieee.fpvalue_t.is_negative (method) - is_negative(self) -> bool +ida_ieee.fpvalue_t.is_negative(self) -> bool Is negative value? -ida_ieee.fpvalue_t.mul_pow2 (method) - mul_pow2(self, power_of_2) -> fpvalue_error_t +ida_ieee.fpvalue_t.mul_pow2(self, power_of_2: int) -> "fpvalue_error_t" Multiply by a power of 2. - - @param power_of_2: (C++: int32) -ida_ieee.fpvalue_t.negate (method) - negate(self) +ida_ieee.fpvalue_t.negate(self) -> None Negate. -ida_ieee.fpvalue_t.to_10bytes (method) - to_10bytes(self, fpval) -> fpvalue_error_t - - @param fpval: void * +ida_ieee.fpvalue_t.new_from_str(p: str) -> "fpvalue_t" -ida_ieee.fpvalue_t.to_12bytes (method) - to_12bytes(self, fpval) -> fpvalue_error_t - - @param fpval: void * +ida_ieee.fpvalue_t.to_10bytes(self, fpval: "void *") -> "fpvalue_error_t" -ida_ieee.fpvalue_t.to_int64 (method) - to_int64(self, round=False) -> fpvalue_error_t - - @param round: bool +ida_ieee.fpvalue_t.to_12bytes(self, fpval: "void *") -> "fpvalue_error_t" -ida_ieee.fpvalue_t.to_str (method) - to_str(self, mode) - Convert IEEE to string. - - @param mode: (C++: uint) broken down into: +ida_ieee.fpvalue_t.to_int64(self, round: bool = False) -> "fpvalue_error_t" + +ida_ieee.fpvalue_t.to_str(self, *args) -> None + Convert IEEE to string. + + @param buf: the output buffer + @param bufsize: the size of the output buffer + @param mode: broken down into: * low byte: number of digits after '.' * second byte: FPNUM_LENGTH * third byte: FPNUM_DIGITS -ida_ieee.fpvalue_t.to_sval (method) - to_sval(self, round=False) -> fpvalue_error_t +ida_ieee.fpvalue_t.to_sval(self, round: bool = False) -> "fpvalue_error_t" Convert IEEE to integer (+-0.5 if round) - - @param round: (C++: bool) -ida_ieee.fpvalue_t.to_uint64 (method) - to_uint64(self, round=False) -> fpvalue_error_t - - @param round: bool +ida_ieee.fpvalue_t.to_uint64(self, round: bool = False) -> "fpvalue_error_t" -ida_kernwin (module) +ida_kernwin Defines the interface between the kernel and the UI. It contains: * the UI dispatcher notification codes (ui_notification_t) * convenience functions for UI services - * structures which hold information about the lines (disassembly, structures, - enums) generated by the kernel + * structures which hold information about the lines (disassembly, structures, enums) generated by the kernel * functions to interact with the user (dialog boxes) - * some string and conversion functions. + * some string and conversion functions. + + + -ida_kernwin.AA_CHECKABLE (variable) +ida_kernwin.AA_CHECKABLE see update_action_checkable() -ida_kernwin.AA_CHECKED (variable) +ida_kernwin.AA_CHECKED see update_action_checked() -ida_kernwin.AA_ICON (variable) +ida_kernwin.AA_ICON see update_action_icon() -ida_kernwin.AA_LABEL (variable) +ida_kernwin.AA_LABEL see update_action_label() -ida_kernwin.AA_NONE (variable) +ida_kernwin.AA_NONE no effect -ida_kernwin.AA_SHORTCUT (variable) +ida_kernwin.AA_SHORTCUT see update_action_shortcut() -ida_kernwin.AA_STATE (variable) +ida_kernwin.AA_STATE see update_action_state() -ida_kernwin.AA_TOOLTIP (variable) +ida_kernwin.AA_TOOLTIP see update_action_tooltip() -ida_kernwin.AA_VISIBILITY (variable) +ida_kernwin.AA_VISIBILITY see update_action_visibility() -ida_kernwin.ACF_HAS_FIELD_DIRTREE_SELECTION (variable) - 'cur_enum_member' and 'dirtree_selection' fields are present +ida_kernwin.ACF_HAS_FIELD_DIRTREE_SELECTION + 'dirtree_selection' field is present -ida_kernwin.ACF_HAS_SELECTION (variable) +ida_kernwin.ACF_HAS_SELECTION there is currently a valid selection -ida_kernwin.ACF_HAS_SOURCE (variable) +ida_kernwin.ACF_HAS_SOURCE 'source' field is present -ida_kernwin.ACF_HAS_TYPE_REF (variable) +ida_kernwin.ACF_HAS_TYPE_REF 'type_ref' field is present -ida_kernwin.ACF_XTRN_EA (variable) +ida_kernwin.ACF_XTRN_EA cur_ea is in 'externs' segment -ida_kernwin.ADF_CHECKABLE (variable) +ida_kernwin.ADF_CHECKABLE action is checkable -ida_kernwin.ADF_CHECKED (variable) +ida_kernwin.ADF_CHECKED starts in a checked state (requires ADF_CHECKABLE) -ida_kernwin.ADF_GLOBAL (variable) - Register the action globally, so that it's available even if no IDB is present +ida_kernwin.ADF_GLOBAL + Register the action globally, so that it's available even if no IDB is present + -ida_kernwin.ADF_NO_HIGHLIGHT (variable) - After activating, do not update the highlight according to what's under the - cursor (listings only.) +ida_kernwin.ADF_NO_HIGHLIGHT + After activating, do not update the highlight according to what's under the cursor (listings only.) + -ida_kernwin.ADF_NO_UNDO (variable) - the action does not create an undo point. useful for actions that do not modify - the database. +ida_kernwin.ADF_NO_UNDO + the action does not create an undo point. useful for actions that do not modify the database. + -ida_kernwin.ADF_OT_MASK (variable) +ida_kernwin.ADF_OT_MASK Owner type mask. -ida_kernwin.ADF_OT_PLUGIN (variable) +ida_kernwin.ADF_OT_PLUGIN Owner is a plugin_t. -ida_kernwin.ADF_OT_PLUGMOD (variable) +ida_kernwin.ADF_OT_PLUGMOD Owner is a plugmod_t. -ida_kernwin.ADF_OT_PROCMOD (variable) +ida_kernwin.ADF_OT_PROCMOD Owner is a procmod_t. -ida_kernwin.ADF_OWN_HANDLER (variable) - handler is owned by the action; it'll be destroyed when the action is - unregistered. Use DYNACTION_DESC_LITERAL to set this bit. +ida_kernwin.ADF_OWN_HANDLER + handler is owned by the action; it'll be destroyed when the action is unregistered. Use DYNACTION_DESC_LITERAL to set this bit. + -ida_kernwin.AHF_VERSION (variable) +ida_kernwin.AHF_VERSION action handler version (used by action_handler_t::flags) -ida_kernwin.AHF_VERSION_MASK (variable) +ida_kernwin.AHF_VERSION_MASK mask for action_handler_t::flags -ida_kernwin.ASKBTN_BTN1 (variable) +ida_kernwin.ASKBTN_BTN1 First (Yes) button. -ida_kernwin.ASKBTN_BTN2 (variable) +ida_kernwin.ASKBTN_BTN2 Second (No) button. -ida_kernwin.ASKBTN_BTN3 (variable) +ida_kernwin.ASKBTN_BTN3 Third (Cancel) button. -ida_kernwin.ASKBTN_CANCEL (variable) +ida_kernwin.ASKBTN_CANCEL Cancel button. -ida_kernwin.ASKBTN_NO (variable) +ida_kernwin.ASKBTN_NO No button. -ida_kernwin.ASKBTN_YES (variable) +ida_kernwin.ASKBTN_YES Yes button. -ida_kernwin.AST_DISABLE (variable) +ida_kernwin.AST_DISABLE analog of AST_ENABLE -ida_kernwin.AST_DISABLE_ALWAYS (variable) +ida_kernwin.AST_DISABLE_ALWAYS disable action and do not call action_handler_t::action() anymore -ida_kernwin.AST_DISABLE_FOR_IDB (variable) +ida_kernwin.AST_DISABLE_FOR_IDB analog of AST_ENABLE_FOR_IDB -ida_kernwin.AST_DISABLE_FOR_WIDGET (variable) +ida_kernwin.AST_DISABLE_FOR_WIDGET analog of AST_ENABLE_FOR_WIDGET -ida_kernwin.AST_ENABLE (variable) +ida_kernwin.AST_ENABLE enable action - call action_handler_t::update() when anything changes -ida_kernwin.AST_ENABLE_ALWAYS (variable) +ida_kernwin.AST_ENABLE_ALWAYS enable action and do not call action_handler_t::update() anymore -ida_kernwin.AST_ENABLE_FOR_IDB (variable) - enable action for the current idb. call action_handler_t::update() when a - database is opened/closed +ida_kernwin.AST_ENABLE_FOR_IDB + enable action for the current idb. call action_handler_t::update() when a database is opened/closed + -ida_kernwin.AST_ENABLE_FOR_WIDGET (variable) - enable action for the current widget. call action_handler_t::update() when a - widget gets/loses focus +ida_kernwin.AST_ENABLE_FOR_WIDGET + enable action for the current widget. call action_handler_t::update() when a widget gets/loses focus + -ida_kernwin.BWN_ADDRWATCH (variable) +ida_kernwin.BWN_ADDRWATCH the 'Watch List' window -ida_kernwin.BWN_BOOKMARKS (variable) +ida_kernwin.BWN_BOOKMARKS a persistent 'Bookmarks' widget -ida_kernwin.BWN_BPTS (variable) +ida_kernwin.BWN_BPTS breakpoints -ida_kernwin.BWN_CALLS (variable) +ida_kernwin.BWN_CALLS function calls -ida_kernwin.BWN_CALLS_CALLEES (variable) +ida_kernwin.BWN_CALLS_CALLEES function calls, callees -ida_kernwin.BWN_CALLS_CALLERS (variable) +ida_kernwin.BWN_CALLS_CALLERS function calls, callers -ida_kernwin.BWN_CALL_STACK (variable) +ida_kernwin.BWN_CALL_STACK call stack -ida_kernwin.BWN_CHOOSER (variable) +ida_kernwin.BWN_CHOOSER a non-builtin chooser -ida_kernwin.BWN_CLI (variable) +ida_kernwin.BWN_CLI the command-line, in the output window -ida_kernwin.BWN_CMDPALCSR (variable) +ida_kernwin.BWN_CMDPALCSR the command palette chooser (Qt version only) -ida_kernwin.BWN_CMDPALWIN (variable) +ida_kernwin.BWN_CMDPALWIN the command palette window (Qt version only) -ida_kernwin.BWN_CPUREGS (variable) +ida_kernwin.BWN_CPUREGS one of the 'General registers', 'FPU register', ... debugger windows -ida_kernwin.BWN_CUSTVIEW (variable) +ida_kernwin.BWN_CUSTVIEW custom viewers -ida_kernwin.BWN_CV_LINE_INFOS (variable) +ida_kernwin.BWN_CV_LINE_INFOS custom viewers' lineinfo widget -ida_kernwin.BWN_DISASM (variable) +ida_kernwin.BWN_DISASM disassembly views -ida_kernwin.BWN_DISASMS (variable) - Alias. Some BWN_* were confusing, and thus have been renamed. This is to ensure - bw-compat. - -ida_kernwin.BWN_DISASM_ARROWS (variable) +ida_kernwin.BWN_DISASM_ARROWS disassembly arrows widget -ida_kernwin.BWN_DUMP (variable) - hex dumps - -ida_kernwin.BWN_DUMPS (variable) - Alias. Some BWN_* were confusing, and thus have been renamed. This is to ensure - bw-compat. - -ida_kernwin.BWN_ENUMS (variable) - enumerations - -ida_kernwin.BWN_EXPORTS (variable) +ida_kernwin.BWN_EXPORTS exports -ida_kernwin.BWN_FRAME (variable) +ida_kernwin.BWN_FRAME function frame -ida_kernwin.BWN_FUNCS (variable) +ida_kernwin.BWN_FUNCS functions -ida_kernwin.BWN_IMPORTS (variable) +ida_kernwin.BWN_HEXVIEW + hex view + +ida_kernwin.BWN_IMPORTS imports -ida_kernwin.BWN_LOCALS (variable) +ida_kernwin.BWN_LOCALS the 'locals' debugger window -ida_kernwin.BWN_LOCTYPS (variable) - local types - -ida_kernwin.BWN_MDVIEWCSR (variable) +ida_kernwin.BWN_MDVIEWCSR lumina metadata view chooser -ida_kernwin.BWN_MODULES (variable) +ida_kernwin.BWN_MODULES modules -ida_kernwin.BWN_NAMES (variable) +ida_kernwin.BWN_NAMES names -ida_kernwin.BWN_NAVBAND (variable) +ida_kernwin.BWN_NAVBAND navigation band -ida_kernwin.BWN_NOTEPAD (variable) +ida_kernwin.BWN_NOTEPAD notepad -ida_kernwin.BWN_OUTPUT (variable) +ida_kernwin.BWN_OUTPUT the text area, in the output window -ida_kernwin.BWN_PROBS (variable) +ida_kernwin.BWN_PROBS problems -ida_kernwin.BWN_PSEUDOCODE (variable) +ida_kernwin.BWN_PSEUDOCODE hexrays decompiler views -ida_kernwin.BWN_SCRIPTS_CSR (variable) +ida_kernwin.BWN_SCRIPTS_CSR the "Recent scripts" chooser -ida_kernwin.BWN_SEARCH (variable) +ida_kernwin.BWN_SEARCH search results -ida_kernwin.BWN_SEARCHS (variable) - Alias. Some BWN_* were confusing, and thus have been renamed. This is to ensure - bw-compat. - -ida_kernwin.BWN_SEGREGS (variable) +ida_kernwin.BWN_SEGREGS segment registers -ida_kernwin.BWN_SEGS (variable) +ida_kernwin.BWN_SEGS segments -ida_kernwin.BWN_SELS (variable) +ida_kernwin.BWN_SELS selectors -ida_kernwin.BWN_SHORTCUTCSR (variable) +ida_kernwin.BWN_SHORTCUTCSR the shortcuts chooser (Qt version only) -ida_kernwin.BWN_SHORTCUTWIN (variable) +ida_kernwin.BWN_SHORTCUTWIN the shortcuts window (Qt version only) -ida_kernwin.BWN_SIGNS (variable) +ida_kernwin.BWN_SIGNS signatures -ida_kernwin.BWN_SNIPPETS (variable) +ida_kernwin.BWN_SNIPPETS the 'Execute script' window -ida_kernwin.BWN_SNIPPETS_CSR (variable) +ida_kernwin.BWN_SNIPPETS_CSR the list of snippets in the 'Execute script' window -ida_kernwin.BWN_SO_OFFSETS (variable) +ida_kernwin.BWN_SO_OFFSETS the 'Structure offsets' dialog's offset panel -ida_kernwin.BWN_SO_STRUCTS (variable) +ida_kernwin.BWN_SO_STRUCTS the 'Structure offsets' dialog's 'Structures and Unions' panel -ida_kernwin.BWN_SRCPTHMAP_CSR (variable) +ida_kernwin.BWN_SRCPTHMAP_CSR "Source paths..."'s path mappings chooser -ida_kernwin.BWN_SRCPTHUND_CSR (variable) +ida_kernwin.BWN_SRCPTHUND_CSR "Source paths..."'s undesired paths chooser -ida_kernwin.BWN_STACK (variable) - Alias. Some BWN_* were confusing, and thus have been renamed. This is to ensure - bw-compat. - -ida_kernwin.BWN_STKVIEW (variable) +ida_kernwin.BWN_STKVIEW the 'Stack view' debugger window -ida_kernwin.BWN_STRINGS (variable) +ida_kernwin.BWN_STRINGS strings -ida_kernwin.BWN_STRUCTS (variable) - structures - -ida_kernwin.BWN_THREADS (variable) +ida_kernwin.BWN_THREADS threads -ida_kernwin.BWN_TILIST (variable) - a types listing widget +ida_kernwin.BWN_TICSR + type library widget's (e.g., "Local types") chooser -ida_kernwin.BWN_TILS (variable) +ida_kernwin.BWN_TILIST + a type listing widget + +ida_kernwin.BWN_TILS type libraries -ida_kernwin.BWN_TRACE (variable) +ida_kernwin.BWN_TIL_VIEW + a type library's toplevel widget + +ida_kernwin.BWN_TRACE tracing view -ida_kernwin.BWN_UNDOHIST (variable) +ida_kernwin.BWN_UNDOHIST Undo history. -ida_kernwin.BWN_UNKNOWN (variable) +ida_kernwin.BWN_UNKNOWN unknown window -ida_kernwin.BWN_WATCH (variable) +ida_kernwin.BWN_WATCH the 'watches' debugger window -ida_kernwin.BWN_XREFS (variable) +ida_kernwin.BWN_XREFS xrefs -ida_kernwin.CDVF_LINEICONS (variable) +ida_kernwin.CDVF_LINEICONS icons can be drawn over the line control -ida_kernwin.CDVF_NOLINES (variable) +ida_kernwin.CDVF_NOLINES don't show line numbers -ida_kernwin.CDVF_STATUSBAR (variable) +ida_kernwin.CDVF_STATUSBAR keep the status bar in the custom viewer -ida_kernwin.CDVH_LINES_ALIGNMENT (variable) +ida_kernwin.CDVH_LINES_ALIGNMENT see set_code_viewer_lines_alignment() -ida_kernwin.CDVH_LINES_CLICK (variable) +ida_kernwin.CDVH_LINES_CLICK see code_viewer_lines_click_t -ida_kernwin.CDVH_LINES_DBLCLICK (variable) +ida_kernwin.CDVH_LINES_DBLCLICK see code_viewer_lines_click_t -ida_kernwin.CDVH_LINES_DRAWICON (variable) +ida_kernwin.CDVH_LINES_DRAWICON see code_viewer_lines_icon_t -ida_kernwin.CDVH_LINES_ICONMARGIN (variable) +ida_kernwin.CDVH_LINES_ICONMARGIN see set_code_viewer_lines_icon_margin() -ida_kernwin.CDVH_LINES_LINENUM (variable) +ida_kernwin.CDVH_LINES_LINENUM see code_viewer_lines_linenum_t -ida_kernwin.CDVH_LINES_POPUP (variable) +ida_kernwin.CDVH_LINES_POPUP see code_viewer_lines_click_t -ida_kernwin.CDVH_LINES_RADIX (variable) +ida_kernwin.CDVH_LINES_RADIX see set_code_viewer_lines_radix() -ida_kernwin.CDVH_SRCVIEW (variable) +ida_kernwin.CDVH_SRCVIEW see set_code_viewer_is_source() -ida_kernwin.CDVH_USERDATA (variable) +ida_kernwin.CDVH_USERDATA see set_code_viewer_user_data() -ida_kernwin.CH2_LAZY_LOADED (variable) - The chooser is lazy-loaded; it receives the callback do_lazy_load_dir() (only - meaningful when CH_HAS_DIRTREE is set) +ida_kernwin.CH2_LAZY_LOADED + The chooser is lazy-loaded; it receives the callback do_lazy_load_dir() (only meaningful when CH_HAS_DIRTREE is set) + -ida_kernwin.CHCOL_DEC (variable) +ida_kernwin.CHCOL_DEC decimal number -ida_kernwin.CHCOL_DEFHIDDEN (variable) +ida_kernwin.CHCOL_DEFHIDDEN column should be hidden by default -ida_kernwin.CHCOL_DRAGHINT (variable) - the column number that will be used to build hints for the dragging undo label. - This should be provided for at most one column for any given chooser. +ida_kernwin.CHCOL_DRAGHINT + the column number that will be used to build hints for the dragging undo label. This should be provided for at most one column for any given chooser. + -ida_kernwin.CHCOL_EA (variable) +ida_kernwin.CHCOL_EA address -ida_kernwin.CHCOL_FNAME (variable) - function name. If a chooser column has this flag set and implements - chooser_base_t::get_ea(), rows background colors will be automatically set to - match the navigator's "Library function", "Lumina function" and "External - symbol" colors +ida_kernwin.CHCOL_FNAME + function name. If a chooser column has this flag set and implements chooser_base_t::get_ea(), rows background colors will be automatically set to match the navigator's "Library function", "Lumina function" and "External symbol" colors + -ida_kernwin.CHCOL_FORMAT (variable) +ida_kernwin.CHCOL_FORMAT column format mask -ida_kernwin.CHCOL_HEX (variable) +ida_kernwin.CHCOL_HEX hexadecimal number -ida_kernwin.CHCOL_INODENAME (variable) - if CH_HAS_DIRTREE has been specified, this instructs the chooser that this - column shows the inode name. This should be provided for at most one column for - any given chooser. +ida_kernwin.CHCOL_INODENAME + if CH_HAS_DIRTREE has been specified, this instructs the chooser that this column shows the inode name. This should be provided for at most one column for any given chooser. + -ida_kernwin.CHCOL_PATH (variable) - file path. TUI IDA will truncate excessive cell lengths starting at their - beginning, and prepending the resulting text with "..." order to leave the - filename visible +ida_kernwin.CHCOL_PATH + file path. TUI IDA will truncate excessive cell lengths starting at their beginning, and prepending the resulting text with "..." order to leave the filename visible + -ida_kernwin.CHCOL_PLAIN (variable) +ida_kernwin.CHCOL_PLAIN plain string -ida_kernwin.CHITEM_BOLD (variable) +ida_kernwin.CHITEM_BOLD display the item in bold -ida_kernwin.CHITEM_GRAY (variable) +ida_kernwin.CHITEM_GRAY gray out the item -ida_kernwin.CHITEM_ITALIC (variable) +ida_kernwin.CHITEM_ITALIC display the item in italic -ida_kernwin.CHITEM_STRIKE (variable) +ida_kernwin.CHITEM_STRIKE strikeout the item -ida_kernwin.CHITEM_UNDER (variable) +ida_kernwin.CHITEM_UNDER underline the item -ida_kernwin.CHOOSER_NOMAINMENU (variable) +ida_kernwin.CHOOSER_NOMAINMENU do not display main menu -ida_kernwin.CHOOSER_NOSTATUSBAR (variable) +ida_kernwin.CHOOSER_NOSTATUSBAR do not display status bar (obsolete. Use CH_NO_STATUS_BAR instead) -ida_kernwin.CH_ATTRS (variable) +ida_kernwin.CH_ATTRS generate ui_get_chooser_item_attrs (gui only) -ida_kernwin.CH_BUILTIN_MASK (variable) +ida_kernwin.CH_BUILTIN_MASK Mask for builtin chooser numbers. Plugins should not use them. -ida_kernwin.CH_CAN_DEL (variable) +ida_kernwin.CH_CAN_DEL allow to delete existing item(s) -ida_kernwin.CH_CAN_EDIT (variable) +ida_kernwin.CH_CAN_EDIT allow to edit existing item(s) -ida_kernwin.CH_CAN_INS (variable) +ida_kernwin.CH_CAN_INS allow to insert new items -ida_kernwin.CH_CAN_REFRESH (variable) +ida_kernwin.CH_CAN_REFRESH allow to refresh chooser -ida_kernwin.CH_FORCE_DEFAULT (variable) - if a non-modal chooser was already open, change selection to the default one +ida_kernwin.CH_FORCE_DEFAULT + if a non-modal chooser was already open, change selection to the default one + -ida_kernwin.CH_HAS_DIFF (variable) +ida_kernwin.CH_HAS_DIFF The chooser can be used in a diffing/merging workflow. -ida_kernwin.CH_HAS_DIRTREE (variable) - The chooser can provide a dirtree_t, meaning a tree-like structure can be - provided to the user (instead of a flat table) +ida_kernwin.CH_HAS_DIRTREE + The chooser can provide a dirtree_t, meaning a tree-like structure can be provided to the user (instead of a flat table) + -ida_kernwin.CH_KEEP (variable) - 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_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 (variable) +ida_kernwin.CH_MODAL Modal chooser. -ida_kernwin.CH_MULTI (variable) - The chooser will allow multi-selection (only for GUI choosers). This bit is set - when using the chooser_multi_t structure. +ida_kernwin.CH_MULTI + The chooser will allow multi-selection (only for GUI choosers). This bit is set when using the chooser_multi_t structure. + -ida_kernwin.CH_MULTI_EDIT (variable) +ida_kernwin.CH_MULTI_EDIT Obsolete. -ida_kernwin.CH_NOBTNS (variable) - 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_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_NON_PERSISTED_TREE (variable) - the chooser tree is not persisted (it is not loaded on startup and is not saved - on exit) +ida_kernwin.CH_NON_PERSISTED_TREE + the chooser tree is not persisted (it is not loaded on startup and is not saved on exit) + -ida_kernwin.CH_NO_FILTER (variable) +ida_kernwin.CH_NO_FILTER The chooser will not have filtering abilities. -ida_kernwin.CH_NO_SORT (variable) +ida_kernwin.CH_NO_SORT The chooser will not have sorting abilities. -ida_kernwin.CH_NO_STATUS_BAR (variable) +ida_kernwin.CH_NO_STATUS_BAR don't show a status bar -ida_kernwin.CH_QFLT (variable) +ida_kernwin.CH_QFLT open with quick filter enabled and focused -ida_kernwin.CH_QFTYP_DEFAULT (variable) +ida_kernwin.CH_QFTYP_DEFAULT set quick filtering type to the possible existing default for this chooser -ida_kernwin.CH_QFTYP_FUZZY (variable) +ida_kernwin.CH_QFTYP_FUZZY fuzzy search quick filter type -ida_kernwin.CH_QFTYP_NORMAL (variable) +ida_kernwin.CH_QFTYP_NORMAL normal (i.e., lexicographical) quick filter type -ida_kernwin.CH_QFTYP_REGEX (variable) +ida_kernwin.CH_QFTYP_REGEX regex quick filter type -ida_kernwin.CH_QFTYP_WHOLE_WORDS (variable) +ida_kernwin.CH_QFTYP_WHOLE_WORDS whole words quick filter type -ida_kernwin.CH_RENAME_IS_EDIT (variable) - triggering a 'edit/rename' (i.e., F2 shortcut) on a cell, should call the edit() - callback for the corresponding row. +ida_kernwin.CH_RENAME_IS_EDIT + triggering a 'edit/rename' (i.e., F2 shortcut) on a cell, should call the edit() callback for the corresponding row. + -ida_kernwin.CH_RESTORE (variable) - restore floating position if present (equivalent of WOPN_RESTORE) (GUI version - only) - -ida_kernwin.CH_TM_FOLDERS_ONLY (variable) - chooser will show in folders-only mode - -ida_kernwin.CH_TM_FULL_TREE (variable) - chooser will show in no-tree mode - -ida_kernwin.CH_TM_NO_TREE (variable) - chooser will show up in no-tree mode - -ida_kernwin.CK_EXTRA1 (variable) - extra background overlay #1 - -ida_kernwin.CK_EXTRA10 (variable) - extra background overlay #10 - -ida_kernwin.CK_EXTRA11 (variable) - extra background overlay #11 - -ida_kernwin.CK_EXTRA12 (variable) - extra background overlay #12 - -ida_kernwin.CK_EXTRA13 (variable) - extra background overlay #13 - -ida_kernwin.CK_EXTRA14 (variable) - extra background overlay #14 - -ida_kernwin.CK_EXTRA15 (variable) - extra background overlay #15 - -ida_kernwin.CK_EXTRA16 (variable) - extra background overlay #16 - -ida_kernwin.CK_EXTRA2 (variable) - extra background overlay #2 - -ida_kernwin.CK_EXTRA3 (variable) - extra background overlay #3 - -ida_kernwin.CK_EXTRA4 (variable) - extra background overlay #4 - -ida_kernwin.CK_EXTRA5 (variable) - extra background overlay #5 - -ida_kernwin.CK_EXTRA6 (variable) - extra background overlay #6 - -ida_kernwin.CK_EXTRA7 (variable) - extra background overlay #7 - -ida_kernwin.CK_EXTRA8 (variable) - extra background overlay #8 - -ida_kernwin.CK_EXTRA9 (variable) - extra background overlay #9 - -ida_kernwin.CK_TRACE (variable) - traced address - -ida_kernwin.CK_TRACE_OVL (variable) - overlay trace address - -ida_kernwin.CLNL_FINDCMT (variable) - Search for the comment symbol everywhere in the line, not only at the beginning. - -ida_kernwin.CLNL_LTRIM (variable) - Remove leading space characters. - -ida_kernwin.CLNL_RTRIM (variable) - Remove trailing space characters. - -ida_kernwin.CREATETB_ADV (variable) - toolbar is for 'advanced mode' only - -ida_kernwin.CVH_CLICK (variable) - see custom_viewer_click_t - -ida_kernwin.CVH_CLOSE (variable) - see custom_viewer_close_t - -ida_kernwin.CVH_CURPOS (variable) - see custom_viewer_curpos_t - -ida_kernwin.CVH_DBLCLICK (variable) - see custom_viewer_dblclick_t - -ida_kernwin.CVH_HELP (variable) - see custom_viewer_help_t - -ida_kernwin.CVH_KEYDOWN (variable) - see custom_viewer_keydown_t - -ida_kernwin.CVH_MOUSEMOVE (variable) - see custom_viewer_mouse_moved_t - -ida_kernwin.CVH_POPUP (variable) - see custom_viewer_popup_t - -ida_kernwin.CVH_QT_AWARE (variable) - see set_custom_viewer_qt_aware() - -ida_kernwin.CVLF_USE_MOUSE (variable) - Fetch the location from the mouse, instead of caret in the listing. - -ida_kernwin.CVNF_ACT (variable) - activate (i.e., switch to) the viewer. Activation is performed before the new - lochist_entry_t instance is actually copied to the viewer's lochist_t - (otherwise, if the viewer was invisible its on_location_changed() handler - wouldn't be called.) - -ida_kernwin.CVNF_JUMP (variable) - push the current position in this viewer's lochist_t before going to the new - location - -ida_kernwin.CVNF_LAZY (variable) - try and move the cursor to a line displaying the place_t if possible. This might - disregard the Y position in case of success - -ida_kernwin.Choose (class) - The chooser can be used in a diffing/merging workflow - -ida_kernwin.Choose.ALREADY_EXISTS (variable) - the non-modal chooser with the same data is already open - -ida_kernwin.Choose.Activate (method) - Activates a visible chooser - -ida_kernwin.Choose.AddCommand (method) - -ida_kernwin.Choose.CH_CAN_DEL (variable) - allow to delete existing item(s) - -ida_kernwin.Choose.CH_CAN_EDIT (variable) - allow to edit existing item(s) - -ida_kernwin.Choose.CH_CAN_INS (variable) - allow to insert new items - -ida_kernwin.Choose.CH_CAN_REFRESH (variable) - allow to refresh chooser - -ida_kernwin.Choose.CH_FORCE_DEFAULT (variable) - If a non-modal chooser was already open, change selection to the given - default one - -ida_kernwin.Choose.CH_MODAL (variable) - Modal chooser - -ida_kernwin.Choose.CH_MULTI (variable) - Allow multi selection. - Refer the description of the OnInsertLine(), OnDeleteLine(), - OnEditLine(), OnSelectLine(), OnRefresh(), OnSelectionChange() to - see a difference between single and multi selection callbacks. - -ida_kernwin.Choose.CH_NOIDB (variable) - use the chooser even without an open database, same as x0=-2 - -ida_kernwin.Choose.CH_NO_STATUS_BAR (variable) - don't show a status bar - -ida_kernwin.Choose.CH_QFLT (variable) - open with quick filter enabled and focused - -ida_kernwin.Choose.CH_RENAME_IS_EDIT (variable) - triggering a 'edit/rename' (i.e., F2 shortcut) on a cell, - should call the edit() callback for the corresponding row. - -ida_kernwin.Choose.CH_RESTORE (variable) +ida_kernwin.CH_RESTORE restore floating position if present (equivalent of WOPN_RESTORE) (GUI version only) -ida_kernwin.Choose.Close (method) +ida_kernwin.CH_TM_FOLDERS_ONLY + chooser will show in folders-only mode + +ida_kernwin.CH_TM_FULL_TREE + chooser will show in full-tree mode + +ida_kernwin.CH_TM_NO_TREE + chooser will show in no-tree mode + +ida_kernwin.CK_EXTRA1 + extra background overlay #1 + +ida_kernwin.CK_EXTRA10 + extra background overlay #10 + +ida_kernwin.CK_EXTRA11 + extra background overlay #11 + +ida_kernwin.CK_EXTRA12 + extra background overlay #12 + +ida_kernwin.CK_EXTRA13 + extra background overlay #13 + +ida_kernwin.CK_EXTRA14 + extra background overlay #14 + +ida_kernwin.CK_EXTRA15 + extra background overlay #15 + +ida_kernwin.CK_EXTRA16 + extra background overlay #16 + +ida_kernwin.CK_EXTRA2 + extra background overlay #2 + +ida_kernwin.CK_EXTRA3 + extra background overlay #3 + +ida_kernwin.CK_EXTRA4 + extra background overlay #4 + +ida_kernwin.CK_EXTRA5 + extra background overlay #5 + +ida_kernwin.CK_EXTRA6 + extra background overlay #6 + +ida_kernwin.CK_EXTRA7 + extra background overlay #7 + +ida_kernwin.CK_EXTRA8 + extra background overlay #8 + +ida_kernwin.CK_EXTRA9 + extra background overlay #9 + +ida_kernwin.CK_TRACE + traced address + +ida_kernwin.CK_TRACE_OVL + overlay trace address + +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.CVH_CLICK + see custom_viewer_click_t + +ida_kernwin.CVH_CLOSE + see custom_viewer_close_t + +ida_kernwin.CVH_CURPOS + see custom_viewer_curpos_t + +ida_kernwin.CVH_DBLCLICK + see custom_viewer_dblclick_t + +ida_kernwin.CVH_HELP + see custom_viewer_help_t + +ida_kernwin.CVH_KEYDOWN + see custom_viewer_keydown_t + +ida_kernwin.CVH_MOUSEMOVE + see custom_viewer_mouse_moved_t + +ida_kernwin.CVH_POPUP + see custom_viewer_popup_t + +ida_kernwin.CVH_QT_AWARE + see set_custom_viewer_qt_aware() + +ida_kernwin.CVLF_USE_MOUSE + Fetch the location from the mouse, instead of caret in the listing. + +ida_kernwin.CVNF_ACT + activate (i.e., switch to) the viewer. Activation is performed before the new lochist_entry_t instance is actually copied to the viewer's lochist_t (otherwise, if the viewer was invisible its on_location_changed() handler wouldn't be called.) + + +ida_kernwin.CVNF_JUMP + push the current position in this viewer's lochist_t before going to the new location + + +ida_kernwin.CVNF_LAZY + try and move the cursor to a line displaying the place_t if possible. This might disregard the Y position in case of success + + +ida_kernwin.Choose + The chooser can be used in a diffing/merging workflow + +ida_kernwin.Choose.ALREADY_EXISTS + the non-modal chooser with the same data is already open + +ida_kernwin.Choose.Activate(self) + Activates a visible chooser + +ida_kernwin.Choose.AddCommand(self, caption, flags = _ida_kernwin.CHOOSER_POPUP_MENU, menu_index = -1, icon = -1, emb = None, shortcut = None) + +ida_kernwin.Choose.CHCOL_DEC + decimal number + +ida_kernwin.Choose.CHCOL_DEFHIDDEN + column should be hidden by default + +ida_kernwin.Choose.CHCOL_DRAGHINT + the column number that will be used to build hints for the dragging undo label. This should be provided for at most one column for any given chooser. + + +ida_kernwin.Choose.CHCOL_EA + address + +ida_kernwin.Choose.CHCOL_FNAME + function name. If a chooser column has this flag set and implements chooser_base_t::get_ea(), rows background colors will be automatically set to match the navigator's "Library function", "Lumina function" and "External symbol" colors + + +ida_kernwin.Choose.CHCOL_FORMAT + column format mask + +ida_kernwin.Choose.CHCOL_HEX + hexadecimal number + +ida_kernwin.Choose.CHCOL_INODENAME + if CH_HAS_DIRTREE has been specified, this instructs the chooser that this column shows the inode name. This should be provided for at most one column for any given chooser. + + +ida_kernwin.Choose.CHCOL_PATH + file path. TUI IDA will truncate excessive cell lengths starting at their beginning, and prepending the resulting text with "..." order to leave the filename visible + + +ida_kernwin.Choose.CHCOL_PLAIN + plain string + +ida_kernwin.Choose.CH_ATTRS + generate ui_get_chooser_item_attrs (gui only) + +ida_kernwin.Choose.CH_BUILTIN_MASK + Mask for builtin chooser numbers. Plugins should not use them. + +ida_kernwin.Choose.CH_CAN_DEL + allow to delete existing item(s) + +ida_kernwin.Choose.CH_CAN_EDIT + allow to edit existing item(s) + +ida_kernwin.Choose.CH_CAN_INS + allow to insert new items + +ida_kernwin.Choose.CH_CAN_REFRESH + allow to refresh chooser + +ida_kernwin.Choose.CH_FORCE_DEFAULT + if a non-modal chooser was already open, change selection to the default one + + +ida_kernwin.Choose.CH_HAS_DIFF + The chooser can be used in a diffing/merging workflow. + +ida_kernwin.Choose.CH_HAS_DIRTREE + The chooser can provide a dirtree_t, meaning a tree-like structure can be provided to the user (instead of a flat table) + + +ida_kernwin.Choose.CH_MODAL + Modal chooser. + +ida_kernwin.Choose.CH_MULTI + The chooser will allow multi-selection (only for GUI choosers). This bit is set when using the chooser_multi_t structure. + + +ida_kernwin.Choose.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.Choose.CH_NOIDB + use the chooser even without an open database, same as x0=-2 + +ida_kernwin.Choose.CH_NO_STATUS_BAR + don't show a status bar + +ida_kernwin.Choose.CH_QFLT + open with quick filter enabled and focused + +ida_kernwin.Choose.CH_QFTYP_DEFAULT + set quick filtering type to the possible existing default for this chooser + +ida_kernwin.Choose.CH_QFTYP_FUZZY + fuzzy search quick filter type + +ida_kernwin.Choose.CH_QFTYP_NORMAL + normal (i.e., lexicographical) quick filter type + +ida_kernwin.Choose.CH_QFTYP_REGEX + regex quick filter type + +ida_kernwin.Choose.CH_QFTYP_WHOLE_WORDS + whole words quick filter type + +ida_kernwin.Choose.CH_RENAME_IS_EDIT + triggering a 'edit/rename' (i.e., F2 shortcut) on a cell, should call the edit() callback for the corresponding row. + + +ida_kernwin.Choose.CH_RESTORE + restore floating position if present (equivalent of WOPN_RESTORE) (GUI version only) + +ida_kernwin.Choose.Close(self) Closes the chooser -ida_kernwin.Choose.EMPTY_CHOOSER (variable) +ida_kernwin.Choose.EMPTY_CHOOSER the chooser is initialized -ida_kernwin.Choose.Embedded (method) +ida_kernwin.Choose.Embedded(self, create_chobj = False) Creates an embedded chooser (as opposed to Show()) @return: Returns 0 on success or NO_ATTR -ida_kernwin.Choose.GetEmbSelection (method) +ida_kernwin.Choose.GetEmbSelection(self) Deprecated. For embedded choosers, the selection is available through 'Form.EmbeddedChooserControl.selection' -ida_kernwin.Choose.GetWidget (method) +ida_kernwin.Choose.GetWidget(self) Return the TWidget underlying this view. @return: The TWidget underlying this view, or None. -ida_kernwin.Choose.NO_ATTR (variable) +ida_kernwin.Choose.NO_ATTR some mandatory attribute is missing -ida_kernwin.Choose.NO_SELECTION (variable) +ida_kernwin.Choose.NO_SELECTION there is no selected item -ida_kernwin.Choose.OnClose (method) +ida_kernwin.Choose.OnClose(self) The chooser window is closed. -ida_kernwin.Choose.OnDeleteLine (method) +ida_kernwin.Choose.OnDeleteLine(self, sel) User deleted an element - @param sel: the current selection - @return: a tuple (changed, selection) + @param sel the current selection + @return a tuple (changed, selection) -ida_kernwin.Choose.OnEditLine (method) +ida_kernwin.Choose.OnEditLine(self, sel) User asked to edit an element. - @param sel: the current selection - @return: a tuple (changed, selection) + @param sel the current selection + @return a tuple (changed, selection) -ida_kernwin.Choose.OnGetDirTree (method) +ida_kernwin.Choose.OnGetDirTree(self) Get the dirtree_t that will be used to present a tree-like structure to the user (see CH_HAS_DIRTREE) - @return: the dirtree_t, or None + @return the dirtree_t, or None -ida_kernwin.Choose.OnGetEA (method) +ida_kernwin.Choose.OnGetEA(self, n) Get the address of an element When this function returns valid addresses: @@ -40498,96 +26716,96 @@ ida_kernwin.Choose.OnGetEA (method) * When a selection is present and the user presses `` (`` if the chooser is modal), IDA will jump to that address (through jumpto()) - @param n: element number (0-based) - @return: the effective address, ida_idaapi.BADADDR if the element has no address + @param n element number (0-based) + @return the effective address, ida_idaapi.BADADDR if the element has no address -ida_kernwin.Choose.OnGetIcon (method) +ida_kernwin.Choose.OnGetIcon(self, n) Get an icon to associate with the first cell of an element - @param n: index of the element - @return: an icon ID + @param n index of the element + @return an icon ID -ida_kernwin.Choose.OnGetLine (method) +ida_kernwin.Choose.OnGetLine(self, n) Get data for an element This callback is mandatory - @param n: the index to fetch data for - @return: a list of strings + @param n the index to fetch data for + @return a list of strings -ida_kernwin.Choose.OnGetLineAttr (method) +ida_kernwin.Choose.OnGetLineAttr(self, n) Get attributes for an element - @param n: index of the element - @return: a tuple (color, flags) + @param n index of the element + @return a tuple (color, flags) -ida_kernwin.Choose.OnGetSize (method) +ida_kernwin.Choose.OnGetSize(self) Get the number of elements in the chooser. This callback is mandatory - @return: the number of elements + @return the number of elements -ida_kernwin.Choose.OnIndexToDiffpos (method) +ida_kernwin.Choose.OnIndexToDiffpos(self, n) Map an element index to a diffpos_t This callback is mandatory if CH_HAS_DIFF is specified - @param n: index of the element - @return: the diffpos + @param n index of the element + @return the diffpos -ida_kernwin.Choose.OnIndexToInode (method) +ida_kernwin.Choose.OnIndexToInode(self, n) Map an element index to a dirtree_t inode This callback is mandatory if CH_HAS_DIRTREE is specified - @param n: index of the element - @return: the inode number + @param n index of the element + @return the inode number -ida_kernwin.Choose.OnInit (method) +ida_kernwin.Choose.OnInit(self) Initialize the chooser and populate it. This callback is optional -ida_kernwin.Choose.OnInsertLine (method) +ida_kernwin.Choose.OnInsertLine(self, sel) User asked to insert an element - @param sel: the current selection - @return: a tuple (changed, selection) + @param sel the current selection + @return a tuple (changed, selection) -ida_kernwin.Choose.OnLazyLoadDir (method) +ida_kernwin.Choose.OnLazyLoadDir(self, path) Callback for lazy-loaded, dirtree-based choosers; the function will be called when a folder is expanded and it has not been loaded before. The implementation should use the given dirtree's link() or mkdir() methods to add the folder contents. - @param path: an absolute dirtree path to the directory that is being expanded - @return: success + @param path an absolute dirtree path to the directory that is being expanded + @return success -ida_kernwin.Choose.OnPopup (method) +ida_kernwin.Choose.OnPopup(self, widget, popup_handle) -ida_kernwin.Choose.OnRefresh (method) +ida_kernwin.Choose.OnRefresh(self, sel) The chooser needs to be refreshed. It returns the new positions of the selected items. - @param sel: the current selection - @return: a tuple (changed, selection) + @param sel the current selection + @return a tuple (changed, selection) -ida_kernwin.Choose.OnSelectLine (method) +ida_kernwin.Choose.OnSelectLine(self, sel) User pressed the enter key, or double-clicked a selection - @param sel: the current selection - @return: a tuple (changed, selection) + @param sel the current selection + @return a tuple (changed, selection) -ida_kernwin.Choose.OnSelectionChange (method) +ida_kernwin.Choose.OnSelectionChange(self, sel) Selection changed - @param sel: the new selection + @param sel the new selection -ida_kernwin.Choose.Refresh (method) +ida_kernwin.Choose.Refresh(self) Causes the refresh callback to trigger -ida_kernwin.Choose.Show (method) +ida_kernwin.Choose.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 @@ -40599,13 +26817,13 @@ ida_kernwin.Choose.Show (method) 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 (class) +ida_kernwin.Choose.UI_Hooks_Trampoline -ida_kernwin.Choose.UI_Hooks_Trampoline.__init__ (method) +ida_kernwin.Choose.UI_Hooks_Trampoline.__init__(self, v) -ida_kernwin.Choose.UI_Hooks_Trampoline.populating_widget_popup (method) +ida_kernwin.Choose.UI_Hooks_Trampoline.populating_widget_popup(self, widget, popup_handle) -ida_kernwin.Choose.__init__ (method) +ida_kernwin.Choose.__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, flags2 = 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 @@ -40620,24 +26838,24 @@ ida_kernwin.Choose.__init__ (method) ["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 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 -ida_kernwin.Choose.__init__._qccb (function) +ida_kernwin.Choose.__init__._qccb(ctx, cmd_id) -ida_kernwin.Choose.adjust_last_item (method) +ida_kernwin.Choose.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 + @param: line number of the remaining select item @return: list of selected lines numbers (one element or empty) -ida_kernwin.CustomIDAMemo (class) +ida_kernwin.CustomIDAMemo -ida_kernwin.CustomIDAMemo.CreateGroups (method) +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. @@ -40650,12 +26868,12 @@ ida_kernwin.CustomIDAMemo.CreateGroups (method) @param groups_infos: A list of objects that describe those groups. @return: A [, , ...] list of group nodes, or None (failure). -ida_kernwin.CustomIDAMemo.DelNodesInfos (method) +ida_kernwin.CustomIDAMemo.DelNodesInfos(self, *nodes) Delete the properties for the given node(s). @param nodes: A list of node IDs -ida_kernwin.CustomIDAMemo.DeleteGroups (method) +ida_kernwin.CustomIDAMemo.DeleteGroups(self, groups, new_current = -1) Send a request to delete the specified groups in the graph, and perform an animation. @@ -40663,34 +26881,34 @@ ida_kernwin.CustomIDAMemo.DeleteGroups (method) @param new_current: A node to focus on after the groups have been deleted @return: True on success, False otherwise. -ida_kernwin.CustomIDAMemo.GetCurrentRendererType (method) +ida_kernwin.CustomIDAMemo.GetCurrentRendererType(self) -ida_kernwin.CustomIDAMemo.GetNodeInfo (method) +ida_kernwin.CustomIDAMemo.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 -ida_kernwin.CustomIDAMemo.GetWidget (method) +ida_kernwin.CustomIDAMemo.GetWidget(self) Return the TWidget underlying this view. @return: The TWidget underlying this view, or None. -ida_kernwin.CustomIDAMemo.GetWidgetAsGraphViewer (method) +ida_kernwin.CustomIDAMemo.GetWidgetAsGraphViewer(self) Return the graph_viewer_t underlying this view. @return: The graph_viewer_t underlying this view, or None. -ida_kernwin.CustomIDAMemo.Refresh (method) +ida_kernwin.CustomIDAMemo.Refresh(self) Refreshes the view. This causes the OnRefresh() to be called -ida_kernwin.CustomIDAMemo.SetCurrentRendererType (method) +ida_kernwin.CustomIDAMemo.SetCurrentRendererType(self, rtype) Set the current view's renderer. @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. -ida_kernwin.CustomIDAMemo.SetGroupsVisibility (method) +ida_kernwin.CustomIDAMemo.SetGroupsVisibility(self, groups, expand, new_current = -1) Send a request to expand/collapse the specified groups in the graph, and perform an animation. @@ -40699,7 +26917,7 @@ ida_kernwin.CustomIDAMemo.SetGroupsVisibility (method) @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 (method) +ida_kernwin.CustomIDAMemo.SetNodeInfo(self, node_index, node_info, flags) Set the properties for the given node. Example usage (set second nodes's bg color to red): @@ -40712,7 +26930,7 @@ ida_kernwin.CustomIDAMemo.SetNodeInfo (method) @param node_info: An idaapi.node_info_t instance. @param flags: An OR'ed value of NIF_* values. -ida_kernwin.CustomIDAMemo.SetNodesInfos (method) +ida_kernwin.CustomIDAMemo.SetNodesInfos(self, values) Set the properties for the given nodes. Example usage (set first three nodes's bg color to purple): @@ -40723,73 +26941,73 @@ ida_kernwin.CustomIDAMemo.SetNodesInfos (method) @param values: A dictionary of 'int -> node_info_t' objects. -ida_kernwin.CustomIDAMemo._OnBind (method) +ida_kernwin.CustomIDAMemo._OnBind(self, hook) -ida_kernwin.CustomIDAMemo.__init__ (method) +ida_kernwin.CustomIDAMemo.__init__(self) -ida_kernwin.CustomIDAMemo._dummy_cb (method) +ida_kernwin.CustomIDAMemo._dummy_cb(*args) -ida_kernwin.CustomIDAMemo._get_cb (method) +ida_kernwin.CustomIDAMemo._get_cb(self, view, cb_name) -ida_kernwin.CustomIDAMemo._get_cb_arity (method) +ida_kernwin.CustomIDAMemo._get_cb_arity(self, cb) -ida_kernwin.CustomIDAMemo._graph_item_tuple (method) +ida_kernwin.CustomIDAMemo._graph_item_tuple(self, ve) -ida_kernwin.CustomIDAMemo.view_activated (method) +ida_kernwin.CustomIDAMemo.view_activated(self, view) -ida_kernwin.CustomIDAMemo.view_click (method) +ida_kernwin.CustomIDAMemo.view_click(self, view, ve) -ida_kernwin.CustomIDAMemo.view_close (method) +ida_kernwin.CustomIDAMemo.view_close(self, view, *args) -ida_kernwin.CustomIDAMemo.view_curpos (method) +ida_kernwin.CustomIDAMemo.view_curpos(self, view, *args) -ida_kernwin.CustomIDAMemo.view_dblclick (method) +ida_kernwin.CustomIDAMemo.view_dblclick(self, view, ve) -ida_kernwin.CustomIDAMemo.view_deactivated (method) +ida_kernwin.CustomIDAMemo.view_deactivated(self, view) -ida_kernwin.CustomIDAMemo.view_keydown (method) +ida_kernwin.CustomIDAMemo.view_keydown(self, view, key, state) -ida_kernwin.CustomIDAMemo.view_loc_changed (method) +ida_kernwin.CustomIDAMemo.view_loc_changed(self, view, now, was) -ida_kernwin.CustomIDAMemo.view_mouse_moved (method) +ida_kernwin.CustomIDAMemo.view_mouse_moved(self, view, ve) -ida_kernwin.CustomIDAMemo.view_mouse_over (method) +ida_kernwin.CustomIDAMemo.view_mouse_over(self, view, ve) -ida_kernwin.CustomIDAMemo.view_switched (method) +ida_kernwin.CustomIDAMemo.view_switched(self, view, rt) -ida_kernwin.DP_BEFORE (variable) - Place src_form before dst_form in the tab bar instead of after; used with - DP_INSIDE or DP_TAB. +ida_kernwin.DP_BEFORE + Place src_form before dst_form in the tab bar instead of after; used with DP_INSIDE or DP_TAB. + -ida_kernwin.DP_BOTTOM (variable) +ida_kernwin.DP_BOTTOM Dock src_form below dest_form. -ida_kernwin.DP_FLOATING (variable) +ida_kernwin.DP_FLOATING Make src_form floating. -ida_kernwin.DP_INSIDE (variable) +ida_kernwin.DP_INSIDE Create a new tab bar with both src_form and dest_form. -ida_kernwin.DP_LEFT (variable) +ida_kernwin.DP_LEFT Dock src_form to the left of dest_form. -ida_kernwin.DP_RIGHT (variable) +ida_kernwin.DP_RIGHT Dock src_form to the right of dest_form. -ida_kernwin.DP_SZHINT (variable) - When floating or in a splitter (i.e., not tabbed), use the widget's size hint to - determine the best geometry (Qt only) +ida_kernwin.DP_SZHINT + When floating or in a splitter (i.e., not tabbed), use the widget's size hint to determine the best geometry (Qt only) + -ida_kernwin.DP_TAB (variable) - 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_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 (variable) +ida_kernwin.DP_TOP Dock src_form above dest_form. -ida_kernwin.Form (class) +ida_kernwin.Form -ida_kernwin.Form.Add (method) +ida_kernwin.Form.Add(self, name, ctrl, mkattr = True) Low level function. Prefer AddControls() to this function. This function adds one control to the form. @@ -40797,67 +27015,67 @@ ida_kernwin.Form.Add (method) @param ctrl: Control object @param mkattr: Create control name / control object as a form attribute -ida_kernwin.Form.AddControls (method) +ida_kernwin.Form.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 -ida_kernwin.Form.ButtonInput (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.__init__ (method) +ida_kernwin.Form.ButtonInput.__init__(self, handler, code = "", swidth = "", hlp = None) @param handler: Button handler. A callback taking one argument which is the code. @param code: A code associated with the button and that is later passed to the handler. -ida_kernwin.Form.ButtonInput.helper_cb (method) +ida_kernwin.Form.ButtonInput.helper_cb(self, button_code, p_fa) -ida_kernwin.Form.ButtonInput.is_input_field (method) +ida_kernwin.Form.ButtonInput.is_input_field(self) -ida_kernwin.Form.ChkGroupControl (class) +ida_kernwin.Form.ChkGroupControl Checkbox group control class. It holds a set of checkbox controls -ida_kernwin.Form.ChkGroupControl.ItemClass (variable) +ida_kernwin.Form.ChkGroupControl.ItemClass Group control item factory class instance We need this because later we won't be treating ChkGroupControl or RadGroupControl individually, instead we will be working with GroupControl in general. -ida_kernwin.Form.ChkGroupControl.__init__ (method) +ida_kernwin.Form.ChkGroupControl.__init__(self, children_names, value = 0, secondary = False) -ida_kernwin.Form.ChkGroupItemControl (class) +ida_kernwin.Form.ChkGroupItemControl Checkbox group item control -ida_kernwin.Form.ChkGroupItemControl.__get_value (method) +ida_kernwin.Form.ChkGroupItemControl.__get_value(self) -ida_kernwin.Form.ChkGroupItemControl.__init__ (method) +ida_kernwin.Form.ChkGroupItemControl.__init__(self, tag, parent) -ida_kernwin.Form.ChkGroupItemControl.__set_value (method) +ida_kernwin.Form.ChkGroupItemControl.__set_value(self, v) -ida_kernwin.Form.ChkGroupItemControl.checked (variable) +ida_kernwin.Form.ChkGroupItemControl.checked Get/Sets checkbox item check status -ida_kernwin.Form.Close (method) +ida_kernwin.Form.Close(self, close_normally) Close the form - @param close_normally + @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 -ida_kernwin.Form.ColorInput (class) +ida_kernwin.Form.ColorInput Color button input control -ida_kernwin.Form.ColorInput.__init__ (method) +ida_kernwin.Form.ColorInput.__init__(self, value = 0) @param value: Initial color value in RGB -ida_kernwin.Form.Compile (method) +ida_kernwin.Form.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 -ida_kernwin.Form.CompileEx (method) +ida_kernwin.Form.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(). @@ -40871,172 +27089,172 @@ ida_kernwin.Form.CompileEx (method) @param form: Compiles the form and returns the arguments needed to be passed to ask_form() -ida_kernwin.Form.CompileEx.next_control (function) +ida_kernwin.Form.CompileEx.next_control(form, p, first_pass) -ida_kernwin.Form.Compiled (method) +ida_kernwin.Form.Compiled(self) Checks if the form has already been compiled @return: Boolean -ida_kernwin.Form.Control (class) +ida_kernwin.Form.Control -ida_kernwin.Form.Control.__init__ (method) +ida_kernwin.Form.Control.__init__(self) Reference to the parent form. It is filled by Form.Add() -ida_kernwin.Form.Control.free (method) +ida_kernwin.Form.Control.free(self) Free the control -ida_kernwin.Form.Control.get_arg (method) +ida_kernwin.Form.Control.get_arg(self) Control returns the parameter to be pushed on the stack (Of ask_form()) -ida_kernwin.Form.Control.get_tag (method) +ida_kernwin.Form.Control.get_tag(self) 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 (method) +ida_kernwin.Form.Control.is_input_field(self) Return True if this field acts as an input -ida_kernwin.Form.ControlToFieldTypeIdAndSize (method) +ida_kernwin.Form.ControlToFieldTypeIdAndSize(ctrl) Converts a control object to a tuple containing the field id and the associated buffer size -ida_kernwin.Form.DirInput (class) +ida_kernwin.Form.DirInput Directory browsing control -ida_kernwin.Form.DirInput.__init__ (method) +ida_kernwin.Form.DirInput.__init__(self, width = 512, swidth = 80, hlp = None, value = None) -ida_kernwin.Form.DropdownListControl (class) +ida_kernwin.Form.DropdownListControl Dropdown control This control allows manipulating a dropdown control -ida_kernwin.Form.DropdownListControl.__get_selval (method) +ida_kernwin.Form.DropdownListControl.__get_selval(self) -ida_kernwin.Form.DropdownListControl.__init__ (method) +ida_kernwin.Form.DropdownListControl.__init__(self, items = [], readonly = True, selval = 0, width = 50, swidth = 50, hlp = None) @param items: A string list of items used to prepopulate the control @param readonly: Specifies whether the dropdown list is editable or not @param selval: The preselected item index (when readonly) or text value (when editable) @param width: the control width (n/a if the dropdown list is readonly) @param swidth: string width -ida_kernwin.Form.DropdownListControl.__set_selval (method) +ida_kernwin.Form.DropdownListControl.__set_selval(self, val) -ida_kernwin.Form.DropdownListControl.free (method) +ida_kernwin.Form.DropdownListControl.free(self) -ida_kernwin.Form.DropdownListControl.selval (variable) +ida_kernwin.Form.DropdownListControl.selval Read/write the selection value. The value is used as an item index in readonly mode or text value in editable mode This value can be used only after the form has been closed. -ida_kernwin.Form.DropdownListControl.set_items (method) +ida_kernwin.Form.DropdownListControl.set_items(self, items) Sets the dropdown list items -ida_kernwin.Form.EmbeddedChooserControl (class) +ida_kernwin.Form.EmbeddedChooserControl Embedded chooser control. This control links to a Chooser2 control created with the 'embedded=True' -ida_kernwin.Form.EmbeddedChooserControl.__get_selection__ (method) +ida_kernwin.Form.EmbeddedChooserControl.__get_selection__(self) -ida_kernwin.Form.EmbeddedChooserControl.__init__ (method) +ida_kernwin.Form.EmbeddedChooserControl.__init__(self, chooser = None, swidth = 40, hlp = None) Embedded chooser control @param chooser: A chooser2 instance (must be constructed with 'embedded=True') -ida_kernwin.Form.EmbeddedChooserControl.free (method) +ida_kernwin.Form.EmbeddedChooserControl.free(self) Frees the embedded chooser data -ida_kernwin.Form.EmbeddedChooserControl.selection (variable) +ida_kernwin.Form.EmbeddedChooserControl.selection Returns the selection -ida_kernwin.Form.EmbeddedChooserControl.value (variable) +ida_kernwin.Form.EmbeddedChooserControl.value Returns the embedded chooser instance -ida_kernwin.Form.EnableField (method) +ida_kernwin.Form.EnableField(self, ctrl, enable) Enable or disable an input field @return: False - no such control -ida_kernwin.Form.Execute (method) +ida_kernwin.Form.Execute(self) Displays a modal dialog containing the compiled form. @return: 1 - ok ; 0 - cancel -ida_kernwin.Form.FT_ADDR (variable) +ida_kernwin.Form.FT_ADDR Address - ea_t * -ida_kernwin.Form.FT_ASCII (variable) +ida_kernwin.Form.FT_ASCII Ascii string - char * -ida_kernwin.Form.FT_BIN (variable) +ida_kernwin.Form.FT_BIN Binary number, 0b prefix - sval_t * -ida_kernwin.Form.FT_BUTTON (variable) +ida_kernwin.Form.FT_BUTTON Button - def handler(code) -ida_kernwin.Form.FT_CHAR (variable) +ida_kernwin.Form.FT_CHAR Char value -- sval_t * -ida_kernwin.Form.FT_COLOR (variable) +ida_kernwin.Form.FT_COLOR Color button - bgcolor_t * -ida_kernwin.Form.FT_DEC (variable) +ida_kernwin.Form.FT_DEC Decimal number - sval_t * -ida_kernwin.Form.FT_DIR (variable) +ida_kernwin.Form.FT_DIR Path to directory - char * at least QMAXPATH -ida_kernwin.Form.FT_DROPDOWN_LIST (variable) +ida_kernwin.Form.FT_DROPDOWN_LIST Dropdown list control - Form.DropdownControl -ida_kernwin.Form.FT_ECHOOSER (variable) +ida_kernwin.Form.FT_ECHOOSER Embedded chooser - idaapi.Choose -ida_kernwin.Form.FT_FILE (variable) +ida_kernwin.Form.FT_FILE File browse - char * at least QMAXPATH -ida_kernwin.Form.FT_FORMCHG (variable) +ida_kernwin.Form.FT_FORMCHG Form change callback - formchgcb_t -ida_kernwin.Form.FT_HEX (variable) +ida_kernwin.Form.FT_HEX Hex number - uval_t * -ida_kernwin.Form.FT_HTML_LABEL (variable) +ida_kernwin.Form.FT_HTML_LABEL HTML label to display (only for GUI version, and for dynamic labels; no input) -ida_kernwin.Form.FT_IDENT (variable) +ida_kernwin.Form.FT_IDENT Identifier - char * at least MAXNAMELEN -ida_kernwin.Form.FT_INT64 (variable) +ida_kernwin.Form.FT_INT64 default base int64 - int64 -ida_kernwin.Form.FT_MULTI_LINE_TEXT (variable) +ida_kernwin.Form.FT_MULTI_LINE_TEXT Multi text control - textctrl_info_t -ida_kernwin.Form.FT_OCT (variable) +ida_kernwin.Form.FT_OCT Octal number, C notation - sval_t * -ida_kernwin.Form.FT_RAWHEX (variable) +ida_kernwin.Form.FT_RAWHEX Hex number, no 0x prefix - uval_t * -ida_kernwin.Form.FT_SEG (variable) +ida_kernwin.Form.FT_SEG Segment - sel_t * -ida_kernwin.Form.FT_SHEX (variable) +ida_kernwin.Form.FT_SHEX Signed hex number - sval_t * -ida_kernwin.Form.FT_TYPE (variable) +ida_kernwin.Form.FT_TYPE Type declaration - char * at least MAXSTR -ida_kernwin.Form.FT_UINT64 (variable) +ida_kernwin.Form.FT_UINT64 default base uint64 - uint64 -ida_kernwin.Form.FileInput (class) +ida_kernwin.Form.FileInput File Open/Save input control -ida_kernwin.Form.FileInput.__init__ (method) +ida_kernwin.Form.FileInput.__init__(self, width = 512, swidth = 80, save = False, open = False, hlp = None, value = None) -ida_kernwin.Form.FindControlById (method) +ida_kernwin.Form.FindControlById(self, id) Finds a control instance given its id -ida_kernwin.Form.FormChangeCb (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. @@ -41049,185 +27267,186 @@ ida_kernwin.Form.FormChangeCb (class) Special control IDs: -1 (The form is initialized) and -2 (Ok has been clicked) -ida_kernwin.Form.FormChangeCb.__init__ (method) +ida_kernwin.Form.FormChangeCb.__init__(self, handler) Constructs the handler. @param handler: The handler (preferrably a member function of a class derived from the Form class). -ida_kernwin.Form.FormChangeCb.free (method) +ida_kernwin.Form.FormChangeCb.free(self) -ida_kernwin.Form.FormChangeCb.get_tag (method) +ida_kernwin.Form.FormChangeCb.get_tag(self) -ida_kernwin.Form.FormChangeCb.helper_cb (method) +ida_kernwin.Form.FormChangeCb.helper_cb(self, fid, p_fa) -ida_kernwin.Form.Free (method) +ida_kernwin.Form.Free(self) Frees all resources associated with a compiled form. Make sure you call this function when you finish using the form. -ida_kernwin.Form.GetControlValue (method) +ida_kernwin.Form.GetControlValue(self, ctrl) Returns the control's value depending on its type @param ctrl: Form control instance - @return: - color button, radio controls: integer + @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 (method) +ida_kernwin.Form.GetFocusedField(self) Get currently focused input field. @return: None if no field is selected otherwise the control ID -ida_kernwin.Form.GroupControl (class) +ida_kernwin.Form.GroupControl Base class for group controls -ida_kernwin.Form.GroupControl.__init__ (method) +ida_kernwin.Form.GroupControl.__init__(self, children_names, tag, value = 0) -ida_kernwin.Form.GroupControl._reset (method) +ida_kernwin.Form.GroupControl._reset(self) -ida_kernwin.Form.GroupControl.get_tag (method) +ida_kernwin.Form.GroupControl.get_tag(self) -ida_kernwin.Form.GroupControl.next_child_pos (method) +ida_kernwin.Form.GroupControl.next_child_pos(self) -ida_kernwin.Form.GroupItemControl (class) +ida_kernwin.Form.GroupItemControl Base class for group control items -ida_kernwin.Form.GroupItemControl.__init__ (method) +ida_kernwin.Form.GroupItemControl.__init__(self, tag, parent) -ida_kernwin.Form.GroupItemControl.assign_pos (method) +ida_kernwin.Form.GroupItemControl.assign_pos(self) -ida_kernwin.Form.GroupItemControl.get_tag (method) +ida_kernwin.Form.GroupItemControl.get_tag(self) -ida_kernwin.Form.GroupItemControl.is_input_field (method) +ida_kernwin.Form.GroupItemControl.is_input_field(self) -ida_kernwin.Form.InputControl (class) +ida_kernwin.Form.InputControl Generic form input control. It could be numeric control, string control, directory/file browsing, etc... -ida_kernwin.Form.InputControl.__init__ (method) +ida_kernwin.Form.InputControl.__init__(self, tp, width, swidth, hlp = None, is_relative_offset = False) @param width: The maximum possible number of characters that can be entered into the input field @param swidth: The width of visible part of the input field -ida_kernwin.Form.InputControl.get_tag (method) +ida_kernwin.Form.InputControl.get_tag(self) -ida_kernwin.Form.InputControl.is_input_field (method) +ida_kernwin.Form.InputControl.is_input_field(self) -ida_kernwin.Form.LabelControl (class) +ida_kernwin.Form.LabelControl Base class for static label control -ida_kernwin.Form.LabelControl.__init__ (method) +ida_kernwin.Form.LabelControl.__init__(self, tp) -ida_kernwin.Form.LabelControl.get_tag (method) +ida_kernwin.Form.LabelControl.get_tag(self) -ida_kernwin.Form.MoveField (method) +ida_kernwin.Form.MoveField(self, ctrl, x, y, w, h) Move/resize an input field @return: False - no such fiel -ida_kernwin.Form.MultiLineTextControl (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.__init__ (method) +ida_kernwin.Form.MultiLineTextControl.__init__(self, text = "", flags = 0, tabsize = 0, width = 50, swidth = 50, hlp = None) @param text: Initial text value @param flags: One of textctrl_info_t.TXTF_.... values @param tabsize: Tab size @param width: Display width @param swidth: String width -ida_kernwin.Form.MultiLineTextControl.free (method) +ida_kernwin.Form.MultiLineTextControl.free(self) -ida_kernwin.Form.NumericArgument (class) +ida_kernwin.Form.NumericArgument Argument representing various integer arguments (ushort, uint32, uint64, etc...) @param tp: One of Form.FT_XXX -ida_kernwin.Form.NumericArgument.__init__ (method) +ida_kernwin.Form.NumericArgument.__init__(self, tp, value, i64 = None) -ida_kernwin.Form.NumericArgument.__set_value (method) +ida_kernwin.Form.NumericArgument.__set_value(self, v) -ida_kernwin.Form.NumericInput (class) +ida_kernwin.Form.NumericInput A composite class serving as a base numeric input control class -ida_kernwin.Form.NumericInput.__init__ (method) +ida_kernwin.Form.NumericInput.__init__(self, tp = None, value = 0, width = 50, swidth = 10, hlp = None, is_relative_offset = False, i64 = None) -ida_kernwin.Form.NumericLabel (class) +ida_kernwin.Form.NumericLabel Numeric label control -ida_kernwin.Form.NumericLabel.__init__ (method) +ida_kernwin.Form.NumericLabel.__init__(self, value, tp = None) -ida_kernwin.Form.Open (method) +ida_kernwin.Form.Open(self) Opens a widget containing the compiled form. -ida_kernwin.Form.RadGroupControl (class) +ida_kernwin.Form.RadGroupControl Radiobox group control class. It holds a set of radiobox controls -ida_kernwin.Form.RadGroupControl.__init__ (method) +ida_kernwin.Form.RadGroupControl.__init__(self, children_names, value = 0, secondary = False) Creates a radiogroup control. @param children_names: A tuple containing group item names @param value: Initial selected radio item @param secondory: Allows rendering one the same line as the previous group control. Use this if you have another group control on the same line. -ida_kernwin.Form.RadGroupItemControl (class) +ida_kernwin.Form.RadGroupItemControl Radiobox group item control -ida_kernwin.Form.RadGroupItemControl.__get_value (method) +ida_kernwin.Form.RadGroupItemControl.__get_value(self) -ida_kernwin.Form.RadGroupItemControl.__init__ (method) +ida_kernwin.Form.RadGroupItemControl.__init__(self, tag, parent) -ida_kernwin.Form.RadGroupItemControl.__set_value (method) +ida_kernwin.Form.RadGroupItemControl.__set_value(self, v) -ida_kernwin.Form.RadGroupItemControl.selected (variable) +ida_kernwin.Form.RadGroupItemControl.selected Get/Sets radiobox item selection status -ida_kernwin.Form.RefreshField (method) +ida_kernwin.Form.RefreshField(self, ctrl) Refresh a field @return: False - no such control -ida_kernwin.Form.SetControlValue (method) +ida_kernwin.Form.SetControlValue(self, ctrl, value) Set the control's value depending on its type @param ctrl: Form control instance - @param value + @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 (method) +ida_kernwin.Form.SetFocusedField(self, ctrl) Set currently focused input field @return: False - no such control -ida_kernwin.Form.ShowField (method) +ida_kernwin.Form.ShowField(self, ctrl, show) Show or hide an input field @return: False - no such control -ida_kernwin.Form.StringArgument (class) +ida_kernwin.Form.StringArgument Argument representing a character buffer -ida_kernwin.Form.StringArgument.__get_value (method) +ida_kernwin.Form.StringArgument.__get_value(self) -ida_kernwin.Form.StringArgument.__init__ (method) +ida_kernwin.Form.StringArgument.__init__(self, size = None, value = None) -ida_kernwin.Form.StringArgument.__set_value (method) +ida_kernwin.Form.StringArgument.__set_value(self, v) -ida_kernwin.Form.StringInput (class) +ida_kernwin.Form.StringInput Base string input control class. This class also constructs a StringArgument -ida_kernwin.Form.StringInput.__init__ (method) +ida_kernwin.Form.StringInput.__init__(self, tp = None, width = ida_pro.MAXSTR, swidth = 40, hlp = None, value = None, size = None) @param width: String size. But in some cases it has special meaning. For example in FileInput control. If you want to define the string buffer size then pass the 'size' argument @param swidth: Control width @param value: Initial value @param size: String size -ida_kernwin.Form.StringLabel (class) +ida_kernwin.Form.StringLabel String label control -ida_kernwin.Form.StringLabel.__init__ (method) +ida_kernwin.Form.StringLabel.__init__(self, value, tp = None, size = ida_pro.MAXSTR) Type field can be one of: A - ascii string T - type declaration @@ -41236,118 +27455,117 @@ ida_kernwin.Form.StringLabel.__init__ (method) f - file X - command -ida_kernwin.Form._AddGroup (method) +ida_kernwin.Form._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) -ida_kernwin.Form._ChkCompiled (method) +ida_kernwin.Form._ChkCompiled(self) -ida_kernwin.Form._FT_USHORT (variable) +ida_kernwin.Form._FT_USHORT Unsigned short -ida_kernwin.Form._ParseFormTitle (method) +ida_kernwin.Form._ParseFormTitle(form) Parses the form's title from the form text -ida_kernwin.Form.__getitem__ (method) +ida_kernwin.Form.__getitem__(self, name) Returns a control object by name -ida_kernwin.Form.__init__ (method) +ida_kernwin.Form.__init__(self, form, controls) If non-modal, these flags will be passed to open_form. This is an OR'ed combination of the PluginForm.FORM_* values. -ida_kernwin.Form._reset (method) +ida_kernwin.Form._reset(self) Resets the Form class state variables -ida_kernwin.Form.create_string_buffer (method) +ida_kernwin.Form.create_string_buffer(value, size = None) -ida_kernwin.Form.fieldtype_to_ctype (method) +ida_kernwin.Form.fieldtype_to_ctype(tp, i64 = False) Factory method returning a ctype class corresponding to the field type string -ida_kernwin.GCRF_ALL (variable) +ida_kernwin.GCRF_ALL Return all rows. -ida_kernwin.GCRF_CURRENT (variable) +ida_kernwin.GCRF_CURRENT Return the current row. -ida_kernwin.GCRF_HEADER (variable) +ida_kernwin.GCRF_HEADER Return header texts. -ida_kernwin.GCRF_SELECTION (variable) +ida_kernwin.GCRF_SELECTION Return selected rows. -ida_kernwin.HIF_IDENTIFIER (variable) - text is an identifier (i.e., when searching for the current highlight, - SEARCH_IDENT will be used) +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 (variable) +ida_kernwin.HIF_LOCKED locked; clicking/moving the cursor around doesn't change the highlight -ida_kernwin.HIF_NOCASE (variable) +ida_kernwin.HIF_NOCASE case insensitive -ida_kernwin.HIF_REGISTER (variable) +ida_kernwin.HIF_REGISTER text represents a register (aliases/subregisters will be highlit as well) -ida_kernwin.HIF_SLOT_0 (variable) +ida_kernwin.HIF_SLOT_0 operate on slot 0 -ida_kernwin.HIF_SLOT_1 (variable) +ida_kernwin.HIF_SLOT_1 operate on slot 1 -ida_kernwin.HIF_SLOT_2 (variable) +ida_kernwin.HIF_SLOT_2 operate on slot 2 -ida_kernwin.HIF_SLOT_3 (variable) +ida_kernwin.HIF_SLOT_3 operate on slot 3 -ida_kernwin.HIF_SLOT_4 (variable) +ida_kernwin.HIF_SLOT_4 operate on slot 4 -ida_kernwin.HIF_SLOT_5 (variable) +ida_kernwin.HIF_SLOT_5 operate on slot 5 -ida_kernwin.HIF_SLOT_6 (variable) +ida_kernwin.HIF_SLOT_6 operate on slot 6 -ida_kernwin.HIF_SLOT_7 (variable) +ida_kernwin.HIF_SLOT_7 operate on slot 7 -ida_kernwin.HIF_SLOT_SHIFT (variable) +ida_kernwin.HIF_SLOT_SHIFT position of the 3 top bits specifying which highlight to use -ida_kernwin.HIF_USE_SLOT (variable) +ida_kernwin.HIF_USE_SLOT use the given number, or just use the "floating" highlight -ida_kernwin.HIST_CMD (variable) +ida_kernwin.HIST_CMD commands -ida_kernwin.HIST_CMT (variable) +ida_kernwin.HIST_CMT comments -ida_kernwin.HIST_DIR (variable) +ida_kernwin.HIST_DIR directory names (text version only) -ida_kernwin.HIST_FILE (variable) +ida_kernwin.HIST_FILE file names -ida_kernwin.HIST_IDENT (variable) +ida_kernwin.HIST_IDENT identifiers. usually CPU register names are forbidden -ida_kernwin.HIST_IDENT2 (variable) +ida_kernwin.HIST_IDENT2 identifiers, including CPU register names -ida_kernwin.HIST_SEG (variable) +ida_kernwin.HIST_SEG segment names -ida_kernwin.HIST_SRCH (variable) +ida_kernwin.HIST_SRCH search substrings -ida_kernwin.HIST_TYPE (variable) +ida_kernwin.HIST_TYPE type declarations -ida_kernwin.IDAViewWrapper (class) +ida_kernwin.IDAViewWrapper Deprecated. Use View_Hooks instead. Because the lifecycle of an IDAView is not trivial to track (e.g., a user @@ -41355,1321 +27573,1114 @@ ida_kernwin.IDAViewWrapper (class) 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.Bind (method) +ida_kernwin.IDAViewWrapper.Bind(self) -ida_kernwin.IDAViewWrapper.Unbind (method) +ida_kernwin.IDAViewWrapper.Unbind(self) -ida_kernwin.IDAViewWrapper.__init__ (method) +ida_kernwin.IDAViewWrapper.__init__(self, title) -ida_kernwin.IDA_DEBUG_ACCESSIBILITY (variable) +ida_kernwin.IDA_DEBUG_ACCESSIBILITY accessibility -ida_kernwin.IDA_DEBUG_ALREADY (variable) +ida_kernwin.IDA_DEBUG_ALREADY already data or code -ida_kernwin.IDA_DEBUG_ALWAYS (variable) +ida_kernwin.IDA_DEBUG_ALWAYS everything -ida_kernwin.IDA_DEBUG_APPCALL (variable) +ida_kernwin.IDA_DEBUG_APPCALL appcall -ida_kernwin.IDA_DEBUG_CHECKMEM (variable) +ida_kernwin.IDA_DEBUG_CHECKMEM check heap consistency -ida_kernwin.IDA_DEBUG_CONFIG (variable) +ida_kernwin.IDA_DEBUG_CONFIG config file -ida_kernwin.IDA_DEBUG_DBGINFO (variable) +ida_kernwin.IDA_DEBUG_DBGINFO handling of debug info (e.g. pdb, dwarf) -ida_kernwin.IDA_DEBUG_DEBUGGER (variable) +ida_kernwin.IDA_DEBUG_DEBUGGER debugger -ida_kernwin.IDA_DEBUG_DEMANGLE (variable) +ida_kernwin.IDA_DEBUG_DEMANGLE demangler -ida_kernwin.IDA_DEBUG_DREFS (variable) +ida_kernwin.IDA_DEBUG_DREFS drefs -ida_kernwin.IDA_DEBUG_FLIRT (variable) +ida_kernwin.IDA_DEBUG_FLIRT flirt -ida_kernwin.IDA_DEBUG_IDP (variable) +ida_kernwin.IDA_DEBUG_IDP idp module -ida_kernwin.IDA_DEBUG_IDS (variable) +ida_kernwin.IDA_DEBUG_IDS ids files -ida_kernwin.IDA_DEBUG_INTERNET (variable) +ida_kernwin.IDA_DEBUG_INTERNET internet connection (for API backward compatibility) -ida_kernwin.IDA_DEBUG_LDR (variable) +ida_kernwin.IDA_DEBUG_LDR ldr module -ida_kernwin.IDA_DEBUG_LICENSE (variable) +ida_kernwin.IDA_DEBUG_LICENSE licensing -ida_kernwin.IDA_DEBUG_LUMINA (variable) +ida_kernwin.IDA_DEBUG_LUMINA lumina related -ida_kernwin.IDA_DEBUG_NETWORK (variable) +ida_kernwin.IDA_DEBUG_NETWORK network -ida_kernwin.IDA_DEBUG_NOTIFY (variable) +ida_kernwin.IDA_DEBUG_NOTIFY show all notifications -ida_kernwin.IDA_DEBUG_OFFSET (variable) +ida_kernwin.IDA_DEBUG_OFFSET offsets -ida_kernwin.IDA_DEBUG_PLUGIN (variable) +ida_kernwin.IDA_DEBUG_PLUGIN plugin module -ida_kernwin.IDA_DEBUG_QUEUE (variable) +ida_kernwin.IDA_DEBUG_QUEUE queue -ida_kernwin.IDA_DEBUG_REGEX (variable) +ida_kernwin.IDA_DEBUG_RANGECB + range-based entities like segments, functions and so on + +ida_kernwin.IDA_DEBUG_REGEX regular expression -ida_kernwin.IDA_DEBUG_ROLLBACK (variable) +ida_kernwin.IDA_DEBUG_ROLLBACK rollback -ida_kernwin.IDA_DEBUG_SIMPLEX (variable) +ida_kernwin.IDA_DEBUG_SIMPLEX full stack analysis -ida_kernwin.IDA_DEBUG_SRCDBG (variable) +ida_kernwin.IDA_DEBUG_SRCDBG source debugging -ida_kernwin.IDA_DEBUG_SUBPROC (variable) +ida_kernwin.IDA_DEBUG_SUBPROC sub process -ida_kernwin.IDA_DEBUG_THEMES (variable) +ida_kernwin.IDA_DEBUG_THEMES themes -ida_kernwin.IDA_DEBUG_TIL (variable) +ida_kernwin.IDA_DEBUG_TIL type system -ida_kernwin.IDCHK_ARG (variable) +ida_kernwin.IDCHK_ARG bad argument(s) -ida_kernwin.IDCHK_KEY (variable) +ida_kernwin.IDCHK_KEY bad hotkey name -ida_kernwin.IDCHK_MAX (variable) +ida_kernwin.IDCHK_MAX too many IDC hotkeys -ida_kernwin.IDCHK_OK (variable) +ida_kernwin.IDCHK_OK ok -ida_kernwin.IWID_ADDRWATCH (variable) - address watches (47) +ida_kernwin.IWID_ADDRWATCH + address watches -ida_kernwin.IWID_ALL (variable) +ida_kernwin.IWID_ALL mask -ida_kernwin.IWID_BOOKMARKS (variable) - bookmarks list (59) +ida_kernwin.IWID_ANY_LISTING + anything that uses a listing widget -ida_kernwin.IWID_BPTS (variable) - breakpoints (13) +ida_kernwin.IWID_BOOKMARKS + bookmarks list -ida_kernwin.IWID_CALLS (variable) - function calls (11) +ida_kernwin.IWID_BPTS + breakpoints -ida_kernwin.IWID_CALLS_CALLEES (variable) - funcalls, callees (50) +ida_kernwin.IWID_CALLS + function calls -ida_kernwin.IWID_CALLS_CALLERS (variable) - funcalls, callers (49) +ida_kernwin.IWID_CALLS_CALLEES + funcalls, callees -ida_kernwin.IWID_CALL_STACK (variable) - call stack (17) +ida_kernwin.IWID_CALLS_CALLERS + funcalls, callers -ida_kernwin.IWID_CHOOSER (variable) - chooser (37) +ida_kernwin.IWID_CALL_STACK + call stack -ida_kernwin.IWID_CLI (variable) - input line (33) +ida_kernwin.IWID_CHOOSER + chooser -ida_kernwin.IWID_CMDPALCSR (variable) - command palette (43) +ida_kernwin.IWID_CLI + input line -ida_kernwin.IWID_CMDPALWIN (variable) - command palette (44) +ida_kernwin.IWID_CMDPALCSR + command palette -ida_kernwin.IWID_CPUREGS (variable) - registers (40) +ida_kernwin.IWID_CMDPALWIN + command palette -ida_kernwin.IWID_CUSTVIEW (variable) - custom viewers (46) +ida_kernwin.IWID_CPUREGS + registers -ida_kernwin.IWID_CV_LINE_INFOS (variable) - lineinfo widget (53) +ida_kernwin.IWID_CUSTVIEW + custom viewers -ida_kernwin.IWID_DISASM (variable) - disassembly views (29) +ida_kernwin.IWID_CV_LINE_INFOS + lineinfo widget -ida_kernwin.IWID_DISASM_ARROWS (variable) - arrows widget (52) +ida_kernwin.IWID_DISASM + disassembly views -ida_kernwin.IWID_DUMP (variable) - hex dumps (30) +ida_kernwin.IWID_DISASM_ARROWS + arrows widget -ida_kernwin.IWID_ENUMS (variable) - enumerations (27) +ida_kernwin.IWID_EA_LISTING + anything that can be used to represent data/code at an address -ida_kernwin.IWID_EXPORTS (variable) - exports (0) +ida_kernwin.IWID_EXPORTS + exports -ida_kernwin.IWID_FRAME (variable) - function frame (25) +ida_kernwin.IWID_FRAME + function frame -ida_kernwin.IWID_FUNCS (variable) - functions (3) +ida_kernwin.IWID_FUNCS + functions -ida_kernwin.IWID_IMPORTS (variable) - imports (1) +ida_kernwin.IWID_HEXVIEW + hex views -ida_kernwin.IWID_LOCALS (variable) - locals (35) +ida_kernwin.IWID_IMPORTS + imports -ida_kernwin.IWID_LOCTYPS (variable) - local types (10) +ida_kernwin.IWID_LOCALS + locals -ida_kernwin.IWID_MDVIEWCSR (variable) - lumina md view (51) +ida_kernwin.IWID_MDVIEWCSR + lumina md view -ida_kernwin.IWID_MODULES (variable) - modules (15) +ida_kernwin.IWID_MODULES + modules -ida_kernwin.IWID_NAMES (variable) - names (2) +ida_kernwin.IWID_NAMES + names -ida_kernwin.IWID_NAVBAND (variable) - navigation band (26) +ida_kernwin.IWID_NAVBAND + navigation band -ida_kernwin.IWID_NOTEPAD (variable) - notepad (31) +ida_kernwin.IWID_NOTEPAD + notepad -ida_kernwin.IWID_OUTPUT (variable) - output (32) +ida_kernwin.IWID_OUTPUT + output -ida_kernwin.IWID_PROBS (variable) - problems (12) +ida_kernwin.IWID_PROBS + problems -ida_kernwin.IWID_PSEUDOCODE (variable) - decompiler (48) +ida_kernwin.IWID_PSEUDOCODE + decompiler -ida_kernwin.IWID_SCRIPTS_CSR (variable) - recent scripts (58) +ida_kernwin.IWID_SCRIPTS_CSR + recent scripts -ida_kernwin.IWID_SEARCH (variable) - search results (19) +ida_kernwin.IWID_SEARCH + search results -ida_kernwin.IWID_SEGREGS (variable) - segment registers (6) +ida_kernwin.IWID_SEGREGS + segment registers -ida_kernwin.IWID_SEGS (variable) - segments (5) +ida_kernwin.IWID_SEGS + segments -ida_kernwin.IWID_SELS (variable) - selectors (7) +ida_kernwin.IWID_SELS + selectors -ida_kernwin.IWID_SHORTCUTCSR (variable) - shortcuts chooser (38) +ida_kernwin.IWID_SHORTCUTCSR + shortcuts chooser -ida_kernwin.IWID_SHORTCUTWIN (variable) - shortcuts window (39) +ida_kernwin.IWID_SHORTCUTWIN + shortcuts window -ida_kernwin.IWID_SIGNS (variable) - signatures (8) +ida_kernwin.IWID_SIGNS + signatures -ida_kernwin.IWID_SNIPPETS (variable) - snippets (45) +ida_kernwin.IWID_SNIPPETS + snippets -ida_kernwin.IWID_SNIPPETS_CSR (variable) - snippets chooser (57) +ida_kernwin.IWID_SNIPPETS_CSR + snippets chooser -ida_kernwin.IWID_SO_OFFSETS (variable) - stroff (42) +ida_kernwin.IWID_SO_OFFSETS + stroff -ida_kernwin.IWID_SO_STRUCTS (variable) - stroff (41) +ida_kernwin.IWID_SO_STRUCTS + stroff -ida_kernwin.IWID_SRCPTHMAP_CSR (variable) - mappings chooser (54) +ida_kernwin.IWID_SRCPTHMAP_CSR + mappings chooser -ida_kernwin.IWID_SRCPTHUND_CSR (variable) - undesired chooser (55) +ida_kernwin.IWID_SRCPTHUND_CSR + undesired chooser -ida_kernwin.IWID_STACK (variable) - Alias. Some IWID_* were confusing, and thus have been renamed. This is to ensure - bw-compat. +ida_kernwin.IWID_STKVIEW + stack view -ida_kernwin.IWID_STKVIEW (variable) - stack view (36) +ida_kernwin.IWID_STRINGS + strings -ida_kernwin.IWID_STRINGS (variable) - strings (4) +ida_kernwin.IWID_THREADS + threads -ida_kernwin.IWID_STRUCTS (variable) - structures (28) +ida_kernwin.IWID_TICSR + type library widget's (e.g., "Local types") chooser -ida_kernwin.IWID_THREADS (variable) - threads (14) +ida_kernwin.IWID_TILIST + type listing -ida_kernwin.IWID_TILIST (variable) - types listing (60) +ida_kernwin.IWID_TILS + type libraries -ida_kernwin.IWID_TILS (variable) - type libraries (9) +ida_kernwin.IWID_TIL_VIEW + type library's toplevel widget -ida_kernwin.IWID_TRACE (variable) - tracing view (16) +ida_kernwin.IWID_TRACE + tracing view -ida_kernwin.IWID_UNDOHIST (variable) - Undo history (56) +ida_kernwin.IWID_UNDOHIST + Undo history. -ida_kernwin.IWID_WATCH (variable) - watches (34) +ida_kernwin.IWID_WATCH + watches -ida_kernwin.IWID_XREFS (variable) - xrefs (18) +ida_kernwin.IWID_XREFS + xrefs -ida_kernwin.LROEF_CPS_RANGE (variable) +ida_kernwin.LROEF_CPS_RANGE background for range of chars -ida_kernwin.LROEF_FULL_LINE (variable) +ida_kernwin.LROEF_FULL_LINE full line background -ida_kernwin.MFF_FAST (variable) - execute code as soon as possible - this mode is ok call ui related functions - that do not query the database. +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 (variable) - Do not wait for the request to be executed. - he caller should ensure that the request is not - destroyed until the execution completes. - if not, the request will be ignored. - the return code of execute_sync() is meaningless - in this case. - This flag can be used to delay the code execution - until the next UI loop run even from the main thread +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. the request must be created using the 'new' operator to use it with this flag. 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 (variable) - 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_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 (variable) - 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.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.PCF_EA_CAPABLE (variable) +ida_kernwin.PCF_EA_CAPABLE toea() implementation returns meaningful data -ida_kernwin.PCF_MAKEPLACE_ALLOCATES (variable) - makeplace() returns a freshly allocated (i.e., non-static) instance. All new - code should pass that flag to register_place_class(), and the corresponding - makeplace() class implementation should return new instances. +ida_kernwin.PCF_MAKEPLACE_ALLOCATES + makeplace() returns a freshly allocated (i.e., non-static) instance. All new code should pass that flag to register_place_class(), and the corresponding makeplace() class implementation should return new instances. + -ida_kernwin.PluginForm (class) - PluginForm class. - - This form can be used to host additional controls. Please check the PyQt example. +ida_kernwin.PluginForm + This flag should be used when Close() is called from an event handler -ida_kernwin.PluginForm.Close (method) +ida_kernwin.PluginForm.Close(self, options) Closes the form. @param options: Close options (WCLS_SAVE, WCLS_NO_CONTEXT, ...) @return: None -ida_kernwin.PluginForm.GetWidget (method) +ida_kernwin.PluginForm.GetWidget(self) Return the TWidget underlying this view. @return: The TWidget underlying this view, or None. -ida_kernwin.PluginForm.OnClose (method) +ida_kernwin.PluginForm.OnClose(self, form) Called when the plugin form is closed @return: None -ida_kernwin.PluginForm.OnCreate (method) +ida_kernwin.PluginForm.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 -ida_kernwin.PluginForm.QtWidgetToTWidget (method) +ida_kernwin.PluginForm.QtWidgetToTWidget(w, ctx = sys.modules["__main__"]) 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 (method) +ida_kernwin.PluginForm.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 -ida_kernwin.PluginForm.TWidgetToPyQtWidget (method) - 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.WCLS_DELETE_LATER + assign the deletion of the widget to the UI loop ///< -ida_kernwin.PluginForm.TWidgetToPySideWidget (method) - 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.WCLS_DONT_SAVE_SIZE + don't save size of the window -ida_kernwin.PluginForm.WCLS_DELETE_LATER (variable) - This flag should be used when Close() is called from an event handler +ida_kernwin.PluginForm.WCLS_NO_CONTEXT + don't change the current context (useful for toolbars) -ida_kernwin.PluginForm.WCLS_DONT_SAVE_SIZE (variable) - Don't save size of the window +ida_kernwin.PluginForm.WCLS_SAVE + save state in desktop config -ida_kernwin.PluginForm.WCLS_NO_CONTEXT (variable) - Don't change the current context (useful for toolbars) +ida_kernwin.PluginForm.WOPN_DP_BEFORE + Place widget before dst_form in the tab bar instead of after; used with WOPN_DP_INSIDE and WOPN_DP_TAB + -ida_kernwin.PluginForm.WCLS_SAVE (variable) - Save state in desktop config +ida_kernwin.PluginForm.WOPN_DP_BOTTOM + Dock widget below dest_ctrl. -ida_kernwin.PluginForm.WOPN_DP_BEFORE (variable) - place widget before dst_form in the tab bar instead of after - used with #WOPN_DP_INSIDE and #WOPN_DP_TAB +ida_kernwin.PluginForm.WOPN_DP_FLOATING + Make widget floating. -ida_kernwin.PluginForm.WOPN_DP_BOTTOM (variable) - Dock widget below dest_ctrl +ida_kernwin.PluginForm.WOPN_DP_INSIDE + Create a new tab bar with both widget and dest_ctrl. -ida_kernwin.PluginForm.WOPN_DP_FLOATING (variable) - When floating or in a splitter (i.e., not tabbed), - use the widget's size hint to determine the best - geometry (Qt only) +ida_kernwin.PluginForm.WOPN_DP_LEFT + Dock widget to the left of dest_ctrl. -ida_kernwin.PluginForm.WOPN_DP_INSIDE (variable) - Create a new tab bar with both widget and dest_ctrl +ida_kernwin.PluginForm.WOPN_DP_RIGHT + Dock widget to the right of dest_ctrl. -ida_kernwin.PluginForm.WOPN_DP_LEFT (variable) - Dock widget to the left of dest_ctrl +ida_kernwin.PluginForm.WOPN_DP_SZHINT + when floating or in a splitter (i.e., not tabbed), use the widget's size hint to determine the best geometry (Qt only) + -ida_kernwin.PluginForm.WOPN_DP_RIGHT (variable) - Dock widget to the right of dest_ctrl +ida_kernwin.PluginForm.WOPN_DP_TAB + Place widget into a tab next to dest_ctrl, if dest_ctrl is in a tab bar (otherwise the same as WOPN_DP_INSIDE) + -ida_kernwin.PluginForm.WOPN_DP_SZHINT (variable) - Make widget floating +ida_kernwin.PluginForm.WOPN_DP_TOP + Dock widget above dest_ctrl. -ida_kernwin.PluginForm.WOPN_DP_TAB (variable) - Place widget into a tab next to dest_ctrl, - if dest_ctrl is in a tab bar - (otherwise the same as #WOPN_DP_INSIDE) +ida_kernwin.PluginForm.WOPN_PERSIST + widget will remain available when starting or stopping debugger sessions -ida_kernwin.PluginForm.WOPN_DP_TOP (variable) - Dock widget above dest_ctrl +ida_kernwin.PluginForm.WOPN_RESTORE + if the widget was the only widget in a floating area the last time it was closed, it will be restored as floating, with the same position+size as before + -ida_kernwin.PluginForm.WOPN_PERSIST (variable) - form will persist until explicitly closed with Close() +ida_kernwin.PluginForm.__init__(self) + -ida_kernwin.PluginForm.WOPN_RESTORE (variable) - if the widget is the only widget in a floating area when - it is closed, remember that area's geometry. The next - time that widget is created as floating (i.e., WOPN_DP_FLOATING) - its geometry will be restored (e.g., "Execute script" +ida_kernwin.PluginForm._ensure_widget_deps(ctx) -ida_kernwin.PluginForm.__init__ (method) - -ida_kernwin.PluginForm._ensure_widget_deps (method) - -ida_kernwin.RENADDR_HR (variable) +ida_kernwin.RENADDR_HR dialog for "Pseudocode"; additional flags: * 0x01 Library function - * 0x02 Mark as decompiled + * 0x02 Mark as decompiled + + + -ida_kernwin.RENADDR_IDA (variable) +ida_kernwin.RENADDR_IDA dialog for "IDA View" -ida_kernwin.S2EAOPT_NOCALC (variable) +ida_kernwin.S2EAOPT_NOCALC don't try to interpret string as IDC (or current extlang) expression -ida_kernwin.SETMENU_APP (variable) +ida_kernwin.SETMENU_APP add menu item after the specified path -ida_kernwin.SETMENU_ENSURE_SEP (variable) +ida_kernwin.SETMENU_ENSURE_SEP make sure there is a separator before the action -ida_kernwin.SETMENU_FIRST (variable) +ida_kernwin.SETMENU_FIRST add item to the beginning of menu -ida_kernwin.SETMENU_INS (variable) +ida_kernwin.SETMENU_INS add menu item before the specified path (default) -ida_kernwin.SVF_COPY_LINES (variable) +ida_kernwin.SVF_COPY_LINES keep a local copy of '*lines' -ida_kernwin.SVF_LINES_BYPTR (variable) +ida_kernwin.SVF_LINES_BYPTR remember the 'lines' ptr. do not make a copy of '*lines' -ida_kernwin.TCCPT_ENUMPLACE (variable) - enumplace_t - -ida_kernwin.TCCPT_IDAPLACE (variable) +ida_kernwin.TCCPT_IDAPLACE idaplace_t -ida_kernwin.TCCPT_INVALID (variable) +ida_kernwin.TCCPT_INVALID invalid -ida_kernwin.TCCPT_PLACE (variable) +ida_kernwin.TCCPT_PLACE place_t -ida_kernwin.TCCPT_SIMPLELINE_PLACE (variable) +ida_kernwin.TCCPT_SIMPLELINE_PLACE simpleline_place_t -ida_kernwin.TCCPT_STRUCTPLACE (variable) - structplace_t - -ida_kernwin.TCCPT_TIPLACE (variable) +ida_kernwin.TCCPT_TIPLACE tiplace_t -ida_kernwin.TCCRT_FLAT (variable) +ida_kernwin.TCCRT_FLAT flat view -ida_kernwin.TCCRT_GRAPH (variable) +ida_kernwin.TCCRT_GRAPH graph view -ida_kernwin.TCCRT_INVALID (variable) +ida_kernwin.TCCRT_INVALID invalid -ida_kernwin.TCCRT_PROXIMITY (variable) +ida_kernwin.TCCRT_PROXIMITY proximity view -ida_kernwin.TWidget__from_ptrval__ (function) - TWidget__from_ptrval__(ptrval) -> TWidget * - - @param ptrval: size_t +ida_kernwin.TWidget__from_ptrval__(ptrval: "size_t") -> "TWidget *" -ida_kernwin.UIJMP_ACTIVATE (variable) +ida_kernwin.UIJMP_ACTIVATE activate the new window -ida_kernwin.UIJMP_ANYVIEW (variable) +ida_kernwin.UIJMP_ANYVIEW jump in any ea_t-capable view -ida_kernwin.UIJMP_DONTPUSH (variable) - do not remember the current address in the navigation history +ida_kernwin.UIJMP_DONTPUSH + do not remember the current address in the navigation history + -ida_kernwin.UIJMP_IDAVIEW (variable) +ida_kernwin.UIJMP_IDAVIEW jump in idaview -ida_kernwin.UIJMP_IDAVIEW_NEW (variable) +ida_kernwin.UIJMP_IDAVIEW_NEW jump in new idaview -ida_kernwin.UI_Hooks (class) - Proxy of C++ UI_Hooks class. +ida_kernwin.UI_Hooks -ida_kernwin.UI_Hooks.__disown__ (method) +ida_kernwin.UI_Hooks.__disown__(self) -ida_kernwin.UI_Hooks.__init__ (method) - __init__(self, _flags=0, _hkcb_flags=0x0001) -> UI_Hooks - - @param _flags: uint32 - @param _hkcb_flags: uint32 +ida_kernwin.UI_Hooks.__init__(self, _flags: int = 0, _hkcb_flags: int = 1) -ida_kernwin.UI_Hooks.create_desktop_widget (method) - create_desktop_widget(self, title, cfg) -> PyObject * - create a widget, to be placed in the widget tree (at desktop-creation time.) - +ida_kernwin.UI_Hooks.create_desktop_widget(self, title: str, cfg: "jobj_wrapper_t") -> "PyObject *" + create a widget, to be placed in the widget tree (at desktop-creation time.) + @param title: (const char *) @param cfg: (const jobj_t *) - @return: TWidget * the created widget, or null + @returns TWidget * the created widget, or null -ida_kernwin.UI_Hooks.current_widget_changed (method) - current_widget_changed(self, widget, prev_widget) - The currently-active TWidget changed. - +ida_kernwin.UI_Hooks.current_widget_changed(self, widget: "TWidget *", prev_widget: "TWidget *") -> None + The currently-active TWidget changed. + @param widget: (TWidget *) @param prev_widget: (TWidget *) + @returns void -ida_kernwin.UI_Hooks.database_closed (method) - database_closed(self) - The database has been closed. See also processor_t::closebase, it occurs - earlier. See also ui_initing_database. This is not the same as IDA exiting. If - you need to perform cleanup at the exiting time, use qatexit(). +ida_kernwin.UI_Hooks.database_closed(self) -> None + The database has been closed. See also processor_t::closebase, it occurs earlier. See also ui_initing_database. This is not the same as IDA exiting. If you need to perform cleanup at the exiting time, use qatexit(). + + @returns void -ida_kernwin.UI_Hooks.database_inited (method) - database_inited(self, is_new_database, idc_script) - database initialization has completed. the kernel is about to run idc - scripts - +ida_kernwin.UI_Hooks.database_inited(self, is_new_database: int, idc_script: str) -> None + database initialization has completed. the kernel is about to run idc scripts + @param is_new_database: (int) @param idc_script: (const char *) - may be nullptr - @return: void See also ui_initing_database. This event is called for both new - and old databases. + @returns void See also ui_initing_database. This event is called for both new and old databases. -ida_kernwin.UI_Hooks.debugger_menu_change (method) - debugger_menu_change(self, enable) - debugger menu modification detected - - @param enable: (bool) true: debugger menu has been added, or a different - debugger has been selected false: debugger menu will be removed - (user switched to "No debugger") +ida_kernwin.UI_Hooks.debugger_menu_change(self, enable: bool) -> None + debugger menu modification detected + + @param enable: (bool) true: debugger menu has been added, or a different debugger has been selected false: debugger menu will be removed (user switched to "No debugger") + @returns void -ida_kernwin.UI_Hooks.desktop_applied (method) - desktop_applied(self, name, from_idb, type) - a desktop has been applied - +ida_kernwin.UI_Hooks.desktop_applied(self, name: str, from_idb: bool, type: int) -> None + a desktop has been applied + @param name: (const char *) the desktop name - @param from_idb: (bool) the desktop was stored in the IDB (false if it comes - from the registry) + @param from_idb: (bool) the desktop was stored in the IDB (false if it comes from the registry) @param type: (int) the desktop type (1-disassembly, 2-debugger, 3-merge) -ida_kernwin.UI_Hooks.destroying_plugmod (method) - destroying_plugmod(self, plugmod, entry) - The plugin object is about to be destroyed - +ida_kernwin.UI_Hooks.destroying_plugmod(self, plugmod: "plugmod_t", entry: "plugin_t const *") -> None + The plugin object is about to be destroyed + @param plugmod: (const plugmod_t *) @param entry: (const plugin_t *) -ida_kernwin.UI_Hooks.destroying_procmod (method) - destroying_procmod(self, procmod) - The processor module is about to be destroyed - +ida_kernwin.UI_Hooks.destroying_procmod(self, procmod: "procmod_t") -> None + The processor module is about to be destroyed + @param procmod: (const procmod_t *) -ida_kernwin.UI_Hooks.finish_populating_widget_popup (method) - finish_populating_widget_popup(self, widget, popup_handle, ctx=None) - IDA is about to be done populating the context menu for a widget. This is - your chance to attach_action_to_popup(). +ida_kernwin.UI_Hooks.finish_populating_widget_popup(self, widget: "TWidget *", popup_handle: "TPopupMenu *", ctx: "action_ctx_base_t" = None) -> None + IDA is about to be done populating the context menu for a widget. This is your chance to attach_action_to_popup(). @param widget: (TWidget *) @param popup_handle: (TPopupMenu *) @param ctx: (const action_activation_ctx_t *) + @returns void -ida_kernwin.UI_Hooks.get_chooser_item_attrs (method) - get_chooser_item_attrs(self, chooser, n, attrs) - get item-specific attributes for a chooser. This callback is generated only - after enable_chooser_attrs() - +ida_kernwin.UI_Hooks.get_chooser_item_attrs(self, chooser: "chooser_base_t", n: "size_t", attrs: "chooser_item_attrs_t") -> None + get item-specific attributes for a chooser. This callback is generated only after enable_chooser_attrs() + @param chooser: (const chooser_base_t *) @param n: (::size_t) @param attrs: (chooser_item_attrs_t *) + @returns void -ida_kernwin.UI_Hooks.get_custom_viewer_hint (method) - get_custom_viewer_hint(self, viewer, place) -> PyObject * - ui wants to display a hint for a viewer (idaview or custom). Every - subscriber is supposed to append the hint lines to HINT and increment - IMPORTANT_LINES accordingly. Completely overwriting the existing lines in HINT - is possible but not recommended. If the REG_HINTS_MARKER sequence is found in - the returned hints string, it will be replaced with the contents of the - "regular" hints. If the SRCDBG_HINTS_MARKER sequence is found in the returned - hints string, it will be replaced with the contents of the source-level - debugger-generated hints. The following keywords might appear at the beginning - of the returned hints: HIGHLIGHT text - where text will be highlighted CAPTION caption - caption for the hint widget - +ida_kernwin.UI_Hooks.get_custom_viewer_hint(self, viewer: "TWidget *", place: "place_t") -> "PyObject *" + ui wants to display a hint for a viewer (idaview or custom). Every subscriber is supposed to append the hint lines to HINT and increment IMPORTANT_LINES accordingly. Completely overwriting the existing lines in HINT is possible but not recommended. If the REG_HINTS_MARKER sequence is found in the returned hints string, it will be replaced with the contents of the "regular" hints. If the SRCDBG_HINTS_MARKER sequence is found in the returned hints string, it will be replaced with the contents of the source-level debugger-generated hints. The following keywords might appear at the beginning of the returned hints: HIGHLIGHT text + where text will be highlighted CAPTION caption + caption for the hint widget + @param viewer: (TWidget*) viewer @param place: (place_t *) current position in the viewer @retval 0: continue collecting hints with other subscribers @retval 1: stop collecting hints -ida_kernwin.UI_Hooks.get_ea_hint (method) - get_ea_hint(self, ea) -> PyObject * - ui wants to display a simple hint for an address. Use this event to generate - a custom hint See also more generic ui_get_item_hint - +ida_kernwin.UI_Hooks.get_ea_hint(self, ea: ida_idaapi.ea_t) -> "PyObject *" + ui wants to display a simple hint for an address. Use this event to generate a custom hint See also more generic ui_get_item_hint + @param ea: (::ea_t) - @return: true if generated a hint + @returns true if generated a hint -ida_kernwin.UI_Hooks.get_item_hint (method) - get_item_hint(self, ea, max_lines) -> PyObject * - ui wants to display multiline hint for an item. See also more generic - ui_get_custom_viewer_hint - +ida_kernwin.UI_Hooks.get_item_hint(self, ea: ida_idaapi.ea_t, max_lines: int) -> "PyObject *" + ui wants to display multiline hint for an item. See also more generic ui_get_custom_viewer_hint + @param ea: (ea_t) or item id like a structure or enum member @param max_lines: (int) maximal number of lines - @return: true if generated a hint + @returns true if generated a hint -ida_kernwin.UI_Hooks.get_lines_rendering_info (method) - get_lines_rendering_info(self, out, widget, info) - get lines rendering information - +ida_kernwin.UI_Hooks.get_lines_rendering_info(self, out: "lines_rendering_output_t", widget: "TWidget const *", info: "lines_rendering_input_t") -> None + get lines rendering information + @param out: (lines_rendering_output_t *) @param widget: (const TWidget *) @param info: (const lines_rendering_input_t *) + @returns void -ida_kernwin.UI_Hooks.get_widget_config (method) - get_widget_config(self, widget, cfg) -> PyObject * - retrieve the widget configuration (it will be passed back at - ui_create_desktop_widget-, and ui_set_widget_config-time) - +ida_kernwin.UI_Hooks.get_widget_config(self, widget: "TWidget const *", cfg: "jobj_t *") -> "PyObject *" + retrieve the widget configuration (it will be passed back at ui_create_desktop_widget-, and ui_set_widget_config-time) + @param widget: (const TWidget *) @param cfg: (jobj_t *) + @returns void -ida_kernwin.UI_Hooks.hook (method) - hook(self) -> bool +ida_kernwin.UI_Hooks.hook(self) -> bool -ida_kernwin.UI_Hooks.idcstart (method) - idcstart(self) - Start of IDC engine work. +ida_kernwin.UI_Hooks.idcstart(self) -> None + Start of IDC engine work. + + @returns void -ida_kernwin.UI_Hooks.idcstop (method) - idcstop(self) - Stop of IDC engine work. +ida_kernwin.UI_Hooks.idcstop(self) -> None + Stop of IDC engine work. + + @returns void -ida_kernwin.UI_Hooks.initing_database (method) - initing_database(self) - database initialization has started. - - @return: void See also ui_database_inited. This event is called for both new and - old databases. +ida_kernwin.UI_Hooks.initing_database(self) -> None + database initialization has started. + + @returns void See also ui_database_inited. This event is called for both new and old databases. -ida_kernwin.UI_Hooks.plugin_loaded (method) - plugin_loaded(self, plugin_info) - The plugin was loaded in memory. - +ida_kernwin.UI_Hooks.plugin_loaded(self, plugin_info: "plugin_info_t const *") -> None + The plugin was loaded in memory. + @param plugin_info: (const plugin_info_t *) -ida_kernwin.UI_Hooks.plugin_unloading (method) - plugin_unloading(self, plugin_info) - The plugin is about to be unloaded - +ida_kernwin.UI_Hooks.plugin_unloading(self, plugin_info: "plugin_info_t const *") -> None + The plugin is about to be unloaded + @param plugin_info: (const plugin_info_t *) -ida_kernwin.UI_Hooks.populating_widget_popup (method) - populating_widget_popup(self, widget, popup_handle, ctx=None) - IDA is populating the context menu for a widget. This is your chance to - attach_action_to_popup(). - - Have a look at ui_finish_populating_widget_popup, if you want to augment the - context menu with your own actions after the menu has had a chance to be - properly populated by the owning component or plugin (which typically does it on - ui_populating_widget_popup.) +ida_kernwin.UI_Hooks.populating_widget_popup(self, widget: "TWidget *", popup_handle: "TPopupMenu *", ctx: "action_ctx_base_t" = None) -> None + IDA is populating the context menu for a widget. This is your chance to attach_action_to_popup(). + Have a look at ui_finish_populating_widget_popup, if you want to augment the context menu with your own actions after the menu has had a chance to be properly populated by the owning component or plugin (which typically does it on ui_populating_widget_popup.) @param widget: (TWidget *) @param popup_handle: (TPopupMenu *) @param ctx: (const action_activation_ctx_t *) + @returns void -ida_kernwin.UI_Hooks.postprocess_action (method) - postprocess_action(self) +ida_kernwin.UI_Hooks.postprocess_action(self) -> None an ida ui action has been handled -ida_kernwin.UI_Hooks.preprocess_action (method) - preprocess_action(self, name) -> int - ida ui is about to handle a user action. - - @param name: (const char *) ui action name. these names can be looked up in - ida[tg]ui.cfg +ida_kernwin.UI_Hooks.preprocess_action(self, name: str) -> int + ida ui is about to handle a user action. + + @param name: (const char *) ui action name. these names can be looked up in ida[tg]ui.cfg @retval 0: ok @retval nonzero: a plugin has handled the command -ida_kernwin.UI_Hooks.range (method) - range(self) - The disassembly range has been changed ( idainfo::min_ea ... - idainfo::max_ea). UI should redraw the scrollbars. See also: - ui_lock_range_refresh +ida_kernwin.UI_Hooks.range(self) -> None + The disassembly range has been changed ( idainfo::min_ea ... idainfo::max_ea). UI should redraw the scrollbars. See also: ui_lock_range_refresh + + @returns void -ida_kernwin.UI_Hooks.ready_to_run (method) - ready_to_run(self) - all UI elements have been initialized. Automatic plugins may hook to this - event to perform their tasks. +ida_kernwin.UI_Hooks.ready_to_run(self) -> None + all UI elements have been initialized. Automatic plugins may hook to this event to perform their tasks. + + @returns void -ida_kernwin.UI_Hooks.resume (method) - resume(self) - Resume the suspended graphical interface. Only the text version. Interface - should respond to it +ida_kernwin.UI_Hooks.resume(self) -> None + Resume the suspended graphical interface. Only the text version. Interface should respond to it + + @returns void -ida_kernwin.UI_Hooks.saved (method) - saved(self, path) - The kernel has saved the database. This callback just informs the interface. - Note that at the time this notification is sent, the internal paths are not - updated yet, and calling get_path(PATH_TYPE_IDB) will return the previous path. - +ida_kernwin.UI_Hooks.saved(self, path: str) -> None + The kernel has saved the database. This callback just informs the interface. Note that at the time this notification is sent, the internal paths are not updated yet, and calling get_path(PATH_TYPE_IDB) will return the previous path. + @param path: (const char *) the database path + @returns void -ida_kernwin.UI_Hooks.saving (method) - saving(self) - The kernel is flushing its buffers to the disk. The user interface should - save its state. Parameters: none Returns: none +ida_kernwin.UI_Hooks.saving(self) -> None + The kernel is flushing its buffers to the disk. The user interface should save its state. Parameters: none Returns: none + -ida_kernwin.UI_Hooks.screen_ea_changed (method) - screen_ea_changed(self, ea, prev_ea) - The "current address" changed - +ida_kernwin.UI_Hooks.screen_ea_changed(self, ea: ida_idaapi.ea_t, prev_ea: ida_idaapi.ea_t) -> None + The "current address" changed + @param ea: (ea_t) @param prev_ea: (ea_t) + @returns void -ida_kernwin.UI_Hooks.set_widget_config (method) - set_widget_config(self, widget, cfg) - set the widget configuration - +ida_kernwin.UI_Hooks.set_widget_config(self, widget: "TWidget const *", cfg: "jobj_wrapper_t") -> None + set the widget configuration + @param widget: (const TWidget *) @param cfg: (const jobj_t *) + @returns void -ida_kernwin.UI_Hooks.suspend (method) - suspend(self) - Suspend graphical interface. Only the text version. Interface should respond - to it. +ida_kernwin.UI_Hooks.suspend(self) -> None + Suspend graphical interface. Only the text version. Interface should respond to it. + + @returns void -ida_kernwin.UI_Hooks.unhook (method) - unhook(self) -> bool +ida_kernwin.UI_Hooks.unhook(self) -> bool -ida_kernwin.UI_Hooks.updated_actions (method) - updated_actions(self) - IDA is done updating actions. +ida_kernwin.UI_Hooks.updated_actions(self) -> None + IDA is done updating actions. + + @returns void -ida_kernwin.UI_Hooks.updating_actions (method) - updating_actions(self, ctx) - IDA is about to update all actions. If your plugin needs to perform - expensive operations more than once (e.g., once per action it registers), you - should do them only once, right away. - +ida_kernwin.UI_Hooks.updating_actions(self, ctx: "action_ctx_base_t") -> None + IDA is about to update all actions. If your plugin needs to perform expensive operations more than once (e.g., once per action it registers), you should do them only once, right away. + @param ctx: (action_update_ctx_t *) + @returns void -ida_kernwin.UI_Hooks.widget_closing (method) - widget_closing(self, widget) - TWidget is about to close. This event precedes ui_widget_invisible. Use this to - perform some possible actions relevant to the lifecycle of this widget - +ida_kernwin.UI_Hooks.widget_closing(self, widget: "TWidget *") -> None + TWidget is about to close. This event precedes ui_widget_invisible. Use this to perform some possible actions relevant to the lifecycle of this widget + @param widget: (TWidget *) + @returns void -ida_kernwin.UI_Hooks.widget_invisible (method) - widget_invisible(self, widget) - TWidget is being closed. Use this event to destroy the window controls - +ida_kernwin.UI_Hooks.widget_invisible(self, widget: "TWidget *") -> None + TWidget is being closed. Use this event to destroy the window controls + @param widget: (TWidget *) + @returns void -ida_kernwin.UI_Hooks.widget_visible (method) - widget_visible(self, widget) - TWidget is displayed on the screen. Use this event to populate the window with - controls - +ida_kernwin.UI_Hooks.widget_visible(self, widget: "TWidget *") -> None + TWidget is displayed on the screen. Use this event to populate the window with controls + @param widget: (TWidget *) + @returns void -ida_kernwin.VES_SHIFT (variable) - state & 1 => Shift is pressed - state & 2 => Alt is pressed - state & 4 => Ctrl is pressed - state & 8 => Mouse left button is pressed - state & 16 => Mouse right button is pressed - state & 32 => Mouse middle button is pressed - state & 128 => Meta is pressed (OSX only) +ida_kernwin.VES_SHIFT + state & 1 => Shift is pressed + state & 2 => Alt is pressed + state & 4 => Ctrl is pressed + state & 8 => Mouse left button is pressed + state & 16 => Mouse right button is pressed + state & 32 => Mouse middle button is pressed + state & 128 => Meta is pressed (OSX only) + -ida_kernwin.VME_LEFT_BUTTON (variable) +ida_kernwin.VME_LEFT_BUTTON left mouse button -ida_kernwin.VME_MID_BUTTON (variable) +ida_kernwin.VME_MID_BUTTON middle mouse button -ida_kernwin.VME_RIGHT_BUTTON (variable) +ida_kernwin.VME_RIGHT_BUTTON right mouse button -ida_kernwin.VME_UNKNOWN (variable) +ida_kernwin.VME_UNKNOWN unknown mouse button -ida_kernwin.View_Hooks (class) - Proxy of C++ View_Hooks class. +ida_kernwin.View_Hooks -ida_kernwin.View_Hooks.__disown__ (method) +ida_kernwin.View_Hooks.__disown__(self) -ida_kernwin.View_Hooks.__init__ (method) - __init__(self, _flags=0, _hkcb_flags=0x0001) -> View_Hooks - - @param _flags: uint32 - @param _hkcb_flags: uint32 +ida_kernwin.View_Hooks.__init__(self, _flags: int = 0, _hkcb_flags: int = 1) -ida_kernwin.View_Hooks.hook (method) - hook(self) -> bool +ida_kernwin.View_Hooks.hook(self) -> bool -ida_kernwin.View_Hooks.unhook (method) - unhook(self) -> bool +ida_kernwin.View_Hooks.unhook(self) -> bool -ida_kernwin.View_Hooks.view_activated (method) - view_activated(self, view) - A view is activated - +ida_kernwin.View_Hooks.view_activated(self, view: "TWidget *") -> None + A view is activated + @param view: (TWidget *) -ida_kernwin.View_Hooks.view_click (method) - view_click(self, view, event) - Click event - +ida_kernwin.View_Hooks.view_click(self, view: "TWidget *", event: "view_mouse_event_t") -> None + Click event + @param view: (TWidget *) @param event: (const view_mouse_event_t *) -ida_kernwin.View_Hooks.view_close (method) - view_close(self, view) - View closed - +ida_kernwin.View_Hooks.view_close(self, view: "TWidget *") -> None + View closed + @param view: (TWidget *) -ida_kernwin.View_Hooks.view_created (method) - view_created(self, view) - A view is being created. - +ida_kernwin.View_Hooks.view_created(self, view: "TWidget *") -> None + A view is being created. + @param view: (TWidget *) -ida_kernwin.View_Hooks.view_curpos (method) - view_curpos(self, view) - Cursor position changed - +ida_kernwin.View_Hooks.view_curpos(self, view: "TWidget *") -> None + Cursor position changed + @param view: (TWidget *) -ida_kernwin.View_Hooks.view_dblclick (method) - view_dblclick(self, view, event) - Double click event - +ida_kernwin.View_Hooks.view_dblclick(self, view: "TWidget *", event: "view_mouse_event_t") -> None + Double click event + @param view: (TWidget *) @param event: (const view_mouse_event_t *) -ida_kernwin.View_Hooks.view_deactivated (method) - view_deactivated(self, view) - A view is deactivated - +ida_kernwin.View_Hooks.view_deactivated(self, view: "TWidget *") -> None + A view is deactivated + @param view: (TWidget *) -ida_kernwin.View_Hooks.view_keydown (method) - view_keydown(self, view, key, state) - Key down event - +ida_kernwin.View_Hooks.view_keydown(self, view: "TWidget *", key: int, state: "view_event_state_t") -> None + Key down event + @param view: (TWidget *) @param key: (int) @param state: (::view_event_state_t) -ida_kernwin.View_Hooks.view_loc_changed (method) - view_loc_changed(self, view, now, was) - The location for the view has changed (can be either the place_t, the - renderer_info_t, or both.) - +ida_kernwin.View_Hooks.view_loc_changed(self, view: "TWidget *", now: "lochist_entry_t const *", was: "lochist_entry_t const *") -> None + The location for the view has changed (can be either the place_t, the renderer_info_t, or both.) + @param view: (TWidget *) @param now: (const lochist_entry_t *) @param was: (const lochist_entry_t *) -ida_kernwin.View_Hooks.view_mouse_moved (method) - view_mouse_moved(self, view, event) - The mouse moved on the view - +ida_kernwin.View_Hooks.view_mouse_moved(self, view: "TWidget *", event: "view_mouse_event_t") -> None + The mouse moved on the view + @param view: (TWidget *) @param event: (const view_mouse_event_t *) -ida_kernwin.View_Hooks.view_mouse_over (method) - view_mouse_over(self, view, event) - The user moved the mouse over (or out of) a node or an edge. This is only - relevant in a graph view. - +ida_kernwin.View_Hooks.view_mouse_over(self, view: "TWidget *", event: "view_mouse_event_t") -> None + The user moved the mouse over (or out of) a node or an edge. This is only relevant in a graph view. + @param view: (TWidget *) @param event: (const view_mouse_event_t *) -ida_kernwin.View_Hooks.view_switched (method) - view_switched(self, view, rt) - A view's renderer has changed. - +ida_kernwin.View_Hooks.view_switched(self, view: "TWidget *", rt: "tcc_renderer_type_t") -> None + A view's renderer has changed. + @param view: (TWidget *) @param rt: (tcc_renderer_type_t) -ida_kernwin.WCLS_DELETE_LATER (variable) +ida_kernwin.WCLS_DELETE_LATER assign the deletion of the widget to the UI loop ///< -ida_kernwin.WCLS_DONT_SAVE_SIZE (variable) +ida_kernwin.WCLS_DONT_SAVE_SIZE don't save size of the window -ida_kernwin.WCLS_NO_CONTEXT (variable) +ida_kernwin.WCLS_NO_CONTEXT don't change the current context (useful for toolbars) -ida_kernwin.WCLS_SAVE (variable) +ida_kernwin.WCLS_SAVE save state in desktop config -ida_kernwin.WOPN_CLOSED_BY_ESC (variable) +ida_kernwin.WOPN_CLOSED_BY_ESC override idagui.cfg:CLOSED_BY_ESC: esc will close -ida_kernwin.WOPN_DP_BEFORE (variable) - Place widget before dst_form in the tab bar instead of after; used with - WOPN_DP_INSIDE and WOPN_DP_TAB +ida_kernwin.WOPN_DP_BEFORE + Place widget before dst_form in the tab bar instead of after; used with WOPN_DP_INSIDE and WOPN_DP_TAB + -ida_kernwin.WOPN_DP_BOTTOM (variable) +ida_kernwin.WOPN_DP_BOTTOM Dock widget below dest_ctrl. -ida_kernwin.WOPN_DP_FLOATING (variable) +ida_kernwin.WOPN_DP_FLOATING Make widget floating. -ida_kernwin.WOPN_DP_INSIDE (variable) +ida_kernwin.WOPN_DP_INSIDE Create a new tab bar with both widget and dest_ctrl. -ida_kernwin.WOPN_DP_LEFT (variable) +ida_kernwin.WOPN_DP_LEFT Dock widget to the left of dest_ctrl. -ida_kernwin.WOPN_DP_RIGHT (variable) +ida_kernwin.WOPN_DP_RIGHT Dock widget to the right of dest_ctrl. -ida_kernwin.WOPN_DP_SZHINT (variable) - when floating or in a splitter (i.e., not tabbed), use the widget's size hint to - determine the best geometry (Qt only) +ida_kernwin.WOPN_DP_SZHINT + when floating or in a splitter (i.e., not tabbed), use the widget's size hint to determine the best geometry (Qt only) + -ida_kernwin.WOPN_DP_TAB (variable) - Place widget into a tab next to dest_ctrl, if dest_ctrl is in a tab bar - (otherwise the same as WOPN_DP_INSIDE) +ida_kernwin.WOPN_DP_TAB + Place widget into a tab next to dest_ctrl, if dest_ctrl is in a tab bar (otherwise the same as WOPN_DP_INSIDE) + -ida_kernwin.WOPN_DP_TOP (variable) +ida_kernwin.WOPN_DP_TOP Dock widget above dest_ctrl. -ida_kernwin.WOPN_NOT_CLOSED_BY_ESC (variable) +ida_kernwin.WOPN_NOT_CLOSED_BY_ESC override idagui.cfg:CLOSED_BY_ESC: esc will not close -ida_kernwin.WOPN_PERSIST (variable) +ida_kernwin.WOPN_PERSIST widget will remain available when starting or stopping debugger sessions -ida_kernwin.WOPN_RESTORE (variable) - if the widget was the only widget in a floating area the last time it was - closed, it will be restored as floating, with the same position+size as before +ida_kernwin.WOPN_RESTORE + if the widget was the only widget in a floating area the last time it was closed, it will be restored as floating, with the same position+size as before + -ida_kernwin.__qtimer_t (class) - Proxy of C++ __qtimer_t class. +ida_kernwin.__qtimer_t -ida_kernwin.__qtimer_t.__init__ (method) - __init__(self) -> __qtimer_t +ida_kernwin.__qtimer_t.__init__(self) -ida_kernwin._ask_addr (function) - _ask_addr(addr, format) -> bool - - Parameters - ---------- - addr: ea_t * - format: char const * +ida_kernwin._ask_addr(*args) -> "ea_t *" -ida_kernwin._ask_long (function) - _ask_long(value, format) -> bool - - Parameters - ---------- - value: sval_t * - format: char const * +ida_kernwin._ask_long(*args) -> "sval_t *" -ida_kernwin._ask_seg (function) - _ask_seg(sel, format) -> bool - - Parameters - ---------- - sel: sel_t * - format: char const * +ida_kernwin._ask_seg(*args) -> "sel_t *" -ida_kernwin._kludge_force_declare_dirspec_t (function) - _kludge_force_declare_dirspec_t(arg1) - - Parameters - ---------- - arg1: dirspec_t const * +ida_kernwin._kludge_force_declare_dirspec_t(arg1: "dirspec_t const *") -> None -ida_kernwin._kludge_force_declare_dirtree_t (function) - _kludge_force_declare_dirtree_t(arg1) - - Parameters - ---------- - arg1: dirtree_t const * +ida_kernwin._kludge_force_declare_dirtree_t(arg1: "dirtree_t const *") -> None -ida_kernwin.action_ctx_base_cur_sel_t (class) - Proxy of C++ action_ctx_base_cur_sel_t class. +ida_kernwin.action_ctx_base_cur_sel_t -ida_kernwin.action_ctx_base_cur_sel_t.__init__ (method) - __init__(self) -> action_ctx_base_cur_sel_t +ida_kernwin.action_ctx_base_cur_sel_t.__init__(self) -ida_kernwin.action_ctx_base_cur_sel_t.reset (method) - reset(self) +ida_kernwin.action_ctx_base_cur_sel_t.reset(self) -> None -ida_kernwin.action_ctx_base_cur_sel_t.to (variable) +ida_kernwin.action_ctx_base_cur_sel_t.to end of selection -ida_kernwin.action_ctx_base_source_t (class) - Proxy of C++ action_ctx_base_source_t class. +ida_kernwin.action_ctx_base_t -ida_kernwin.action_ctx_base_source_t.__init__ (method) - __init__(self) -> action_ctx_base_source_t +ida_kernwin.action_ctx_base_t.__init__(self) -ida_kernwin.action_ctx_base_source_t.reset (method) - reset(self) - -ida_kernwin.action_ctx_base_t (class) - Proxy of C++ action_ctx_base_t class. - -ida_kernwin.action_ctx_base_t.__init__ (method) - __init__(self) -> action_ctx_base_t - -ida_kernwin.action_ctx_base_t.action (variable) +ida_kernwin.action_ctx_base_t.action action name -ida_kernwin.action_ctx_base_t.chooser_selection (variable) - current chooser selection (0-based) - -ida_kernwin.action_ctx_base_t.cur_ea (variable) - the current EA of the position in the view - -ida_kernwin.action_ctx_base_t.cur_enum (variable) - the current enum - -ida_kernwin.action_ctx_base_t.cur_fchunk (variable) - the current function chunk - -ida_kernwin.action_ctx_base_t.cur_flags (variable) - Current address information. see Action context property bits. - -ida_kernwin.action_ctx_base_t.cur_func (variable) - the current function - -ida_kernwin.action_ctx_base_t.cur_seg (variable) - the current segment - -ida_kernwin.action_ctx_base_t.cur_sel (variable) - the currently selected range. also see ACF_HAS_SELECTION - -ida_kernwin.action_ctx_base_t.cur_strmem (variable) - the current structure member - -ida_kernwin.action_ctx_base_t.cur_struc (variable) - the current structure - -ida_kernwin.action_ctx_base_t.cur_value (variable) - the possible address, or value the cursor is positioned on - -ida_kernwin.action_ctx_base_t.dirtree_selection (variable) - the current dirtree_t selection (if applicable) - -ida_kernwin.action_ctx_base_t.focus (variable) - The focused widget in case it is not the 'form' itself (e.g., the 'quick filter' - input in choosers.) - -ida_kernwin.action_ctx_base_t.graph_selection (variable) - the current graph selection (if in a graph view) - -ida_kernwin.action_ctx_base_t.has_flag (method) - has_flag(self, flag) -> bool - Check if the given flag is set. - - @param flag: (C++: uint32) - -ida_kernwin.action_ctx_base_t.regname (variable) - register name (if widget_type == BWN_CPUREGS and context menu opened on - register) - -ida_kernwin.action_ctx_base_t.reset (method) - reset(self) - Invalidate all context info. - -ida_kernwin.action_ctx_base_t.source (variable) +ida_kernwin.action_ctx_base_t.chooser the underlying chooser_base_t (if 'widget' is a chooser widget) -ida_kernwin.action_ctx_base_t.type_ref (variable) - a reference to the current type (if 'widget' is a types listing widget; nullptr - otherwise) +ida_kernwin.action_ctx_base_t.chooser_selection + current chooser selection (0-based) -ida_kernwin.action_ctx_base_t.widget_title (variable) +ida_kernwin.action_ctx_base_t.cur_ea + the current EA of the position in the view + +ida_kernwin.action_ctx_base_t.cur_fchunk + the current function chunk + +ida_kernwin.action_ctx_base_t.cur_flags + Current address information. see Action context property bits. + +ida_kernwin.action_ctx_base_t.cur_func + the current function + +ida_kernwin.action_ctx_base_t.cur_seg + the current segment + +ida_kernwin.action_ctx_base_t.cur_sel + the currently selected range. also see ACF_HAS_SELECTION + +ida_kernwin.action_ctx_base_t.cur_value + the possible address, or value the cursor is positioned on + +ida_kernwin.action_ctx_base_t.dirtree_selection + the current dirtree_t selection (if applicable) + +ida_kernwin.action_ctx_base_t.focus + The focused widget in case it is not the 'form' itself (e.g., the 'quick filter' input in choosers.) + +ida_kernwin.action_ctx_base_t.graph + the current graph (if in a graph view) + +ida_kernwin.action_ctx_base_t.graph_selection + the current graph selection (if in a graph view) + +ida_kernwin.action_ctx_base_t.has_flag(self, flag: int) -> bool + Check if the given flag is set. + +ida_kernwin.action_ctx_base_t.hovered + the current item being hovered (if in a graph view) + +ida_kernwin.action_ctx_base_t.regname + register name (if widget_type == BWN_CPUREGS and context menu opened on register) + +ida_kernwin.action_ctx_base_t.reset(self) -> None + Invalidate all context info. + +ida_kernwin.action_ctx_base_t.type_ref + a reference to the current type (if 'widget' is a type listing widget; nullptr otherwise) + +ida_kernwin.action_ctx_base_t.widget_title title of current widget -ida_kernwin.action_ctx_base_t.widget_type (variable) +ida_kernwin.action_ctx_base_t.widget_type type of current widget -ida_kernwin.action_desc_t (class) - Proxy of C++ action_desc_t class. +ida_kernwin.action_desc_t -ida_kernwin.action_desc_t.__init__ (method) - __init__(self, name, label, handler, shortcut=None, tooltip=None, icon=-1, flags=0) -> action_desc_t - - @param name: char const * - @param label: char const * - @param handler: PyObject * - @param shortcut: char const * - @param tooltip: char const * - @param icon: int - @param flags: int +ida_kernwin.action_desc_t.__init__(self, name: str, label: str, handler: "PyObject *", shortcut: str = None, tooltip: str = None, icon: int = -1, flags: int = 0) -ida_kernwin.action_desc_t.cb (variable) +ida_kernwin.action_desc_t.cb size of this structure -ida_kernwin.action_desc_t.flags (variable) +ida_kernwin.action_desc_t.flags See Action flags. -ida_kernwin.action_desc_t.icon (variable) +ida_kernwin.action_desc_t.icon an optional icon ID to use -ida_kernwin.action_desc_t.label (variable) - the label of the action, possibly with an accelerator key definition (e.g., - "~J~ump to operand") +ida_kernwin.action_desc_t.label + the label of the action, possibly with an accelerator key definition (e.g., "~J~ump to operand") + -ida_kernwin.action_desc_t.name (variable) - the internal name of the action; must be unique. a way to reduce possible - conflicts is to prefix it with some specific prefix. E.g., "myplugin:doSthg". +ida_kernwin.action_desc_t.name + the internal name of the action; must be unique. a way to reduce possible conflicts is to prefix it with some specific prefix. E.g., "myplugin:doSthg". + -ida_kernwin.action_desc_t.owner (variable) - either the plugin_t, or plugmod_t responsible for registering the action. Can be - nullptr Please see ACTION_DESC_LITERAL_PLUGMOD +ida_kernwin.action_desc_t.owner + either the plugin_t, or plugmod_t responsible for registering the action. Can be nullptr Please see ACTION_DESC_LITERAL_PLUGMOD + -ida_kernwin.action_desc_t.shortcut (variable) +ida_kernwin.action_desc_t.shortcut an optional shortcut definition. E.g., "Ctrl+Enter" -ida_kernwin.action_desc_t.tooltip (variable) +ida_kernwin.action_desc_t.tooltip an optional tooltip for the action -ida_kernwin.action_handler_t (class) +ida_kernwin.action_handler_t -ida_kernwin.action_handler_t.__init__ (method) +ida_kernwin.action_handler_t.__init__(self) -ida_kernwin.action_handler_t.activate (method) - Activate an action. This function implements the core behavior of an action. It - is called when the action is triggered, from a menu, from a popup menu, from the - toolbar, or programmatically. - - @return: non-zero: all IDA windows will be refreshed +ida_kernwin.action_handler_t.activate(self, ctx) + Activate an action. This function implements the core behavior of an action. It is called when the action is triggered, from a menu, from a popup menu, from the toolbar, or programmatically. + + @returns non-zero: all IDA windows will be refreshed -ida_kernwin.action_handler_t.update (method) - Update an action. This is called when the context of the UI changed, and we need - to let the action update some of its properties if needed (label, icon, ...) - - In addition, this lets IDA know whether the action is enabled, and when it - should be queried for availability again. - - Note: This callback is not meant to change anything in the application's state, - except by calling one (or many) of the "update_action_*()" functions on this - very action. +ida_kernwin.action_handler_t.update(self, ctx) + Update an action. This is called when the context of the UI changed, and we need to let the action update some of its properties if needed (label, icon, ...) + In addition, this lets IDA know whether the action is enabled, and when it should be queried for availability again. + Note: This callback is not meant to change anything in the application's state, except by calling one (or many) of the "update_action_*()" functions on this very action. + -ida_kernwin.activate_widget (function) - activate_widget(widget, take_focus) - Activate widget (only gui version) (ui_activate_widget). - - @param widget: (C++: TWidget *) existing widget to display - @param take_focus: (C++: bool) give focus to given widget +ida_kernwin.activate_widget(widget: "TWidget *", take_focus: bool) -> None + Activate widget (only gui version) (ui_activate_widget). + + @param widget: existing widget to display + @param take_focus: give focus to given widget -ida_kernwin.add_hotkey (function) - add_hotkey(hotkey, pyfunc) -> PyCapsule +ida_kernwin.add_hotkey(hotkey, callable) Associates a function call with a hotkey. - Callable pyfunc will be called each time the hotkey is pressed + Callable 'callable' will be called each time the hotkey is pressed @param hotkey: The hotkey - @param pyfunc: Callable + @param callable: Callable @return: Context object on success or None on failure. -ida_kernwin.add_idc_hotkey (function) - add_idc_hotkey(hotkey, idcfunc) -> int - Add hotkey for IDC function (ui_add_idckey). - - @param hotkey: (C++: const char *) hotkey name - @param idcfunc: (C++: const char *) IDC function name - @return: IDC hotkey error codes +ida_kernwin.add_idc_hotkey(hotkey: str, idcfunc: str) -> int + Add hotkey for IDC function (ui_add_idckey). + + @param hotkey: hotkey name + @param idcfunc: IDC function name + @returns IDC hotkey error codes -ida_kernwin.add_spaces (function) - add_spaces(s, len) -> str - 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 str: (C++: char *) pointer to colored string to modify (may not be nullptr) - @param len: (C++: ssize_t) the desired length of the string - @return: pointer to the end of input string +ida_kernwin.add_spaces(s: str, len: "size_t") -> str + 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 + @returns pointer to the end of input string -ida_kernwin.addon_count (function) - addon_count() -> int +ida_kernwin.addon_count() -> int Get number of installed addons. -ida_kernwin.addon_info_t (class) - Proxy of C++ addon_info_t class. +ida_kernwin.addon_info_t -ida_kernwin.addon_info_t.__init__ (method) - __init__(self) -> addon_info_t +ida_kernwin.addon_info_t.__init__(self) -ida_kernwin.analyzer_options (function) - analyzer_options() - Allow the user to set analyzer options. (show a dialog box) - (ui_analyzer_options) +ida_kernwin.analyzer_options() -> None + Allow the user to set analyzer options. (show a dialog box) (ui_analyzer_options) -ida_kernwin.ask_addr (function) - Output a formatted string to the output window (msg) preprended with "**DATABASE - IS CORRUPTED: " Display a dialog box and wait for the user to input an address - (ui_ask_addr). - +ida_kernwin.ask_addr(defval, format) + Output a formatted string to the output window (msg) preprended with "**DATABASE IS CORRUPTED: " Display a dialog box and wait for the user to input an address (ui_ask_addr). + + @param format: printf() style format string with the question @retval 0: the user pressed Esc. @retval 1: ok, the user entered an address -ida_kernwin.ask_buttons (function) - ask_buttons(Yes, No, Cancel, deflt, format) -> int - Display a dialog box and get choice from maximum three possibilities - (ui_ask_buttons). - @note: for all buttons: - * use "" or nullptr to take the default name for the button. - * prepend "HIDECANCEL\n" in 'format' to hide the Cancel button - - @param Yes: (C++: const char *) text for the first button - @param No: (C++: const char *) text for the second button - @param Cancel: (C++: const char *) text for the third button - @param deflt: (C++: int) default choice: one of Button IDs - @param format: (C++: const char *) printf-style format string for question. It may have some - prefixes, see below. - @return: one of Button IDs specifying the selected button (Esc key returns - Cancel/3rd button value) +ida_kernwin.ask_buttons(*args) -> int + Display a dialog box and get choice from maximum three possibilities (ui_ask_buttons). + + @param Yes: text for the first button + @param No: text for the second button + @param Cancel: text for the third button + @param deflt: default choice: one of Button IDs + @param format: printf-style format string for question. It may have some prefixes, see below. + @returns one of Button IDs specifying the selected button (Esc key returns Cancel/3rd button value) -ida_kernwin.ask_file (function) - ask_file(for_saving, defval, format) -> char * - - @param for_saving: bool - @param defval: char const * - @param format: char const * +ida_kernwin.ask_file(*args) -> "char *" -ida_kernwin.ask_for_feedback (function) - ask_for_feedback(format) - Show a message box asking to send the input file to \link{mailto:support@hex- - rays.com,support@hex-rays.com}. - - @param format: (C++: const char *) the reason why the input file is bad +ida_kernwin.ask_for_feedback(*args) -> None + Show a message box asking to send the input file to [support@hex-rays.com](mailto:support@hex-rays.com). + + @param format: the reason why the input file is bad -ida_kernwin.ask_form (function) - Display a dialog box and wait for the user. If the form contains the "BUTTON NO - " keyword, then the return values are the same as in the ask_yn() - function (Button IDs) - - @retval 0: no memory to display or form syntax error (a warning is displayed in - this case). the user pressed the 'No' button (if the form has it) or - the user cancelled the dialog otherwise. all variables retain their - original values. +ida_kernwin.ask_form(*args) + Display a dialog box and wait for the user. If the form contains the "BUTTON NO <title>" keyword, then the return values are the same as in the ask_yn() function (Button IDs) + + @param form: dialog box as a string. see ask_form()/open_form() + @retval 0: no memory to display or form syntax error (a warning is displayed in this case). the user pressed the 'No' button (if the form has it) or the user cancelled the dialog otherwise. all variables retain their original values. @retval 1: ok, all input fields are filled and validated. @retval -1: the form has the 'No' button and the user cancelled the dialog -ida_kernwin.ask_ident (function) - Display a dialog box and wait for the user to input an identifier. If the user - enters a non-valid identifier, this function displays a warning and allows the - user to correct it. CPU register names are usually forbidden. - - @return: false if the user cancelled the dialog, otherwise returns true. +ida_kernwin.ask_ident(defval, format) + Display a dialog box and wait for the user to input an identifier. If the user enters a non-valid identifier, this function displays a warning and allows the user to correct it. CPU register names are usually forbidden. + + @param format: printf() style format string with the question + @returns false if the user cancelled the dialog, otherwise returns true. -ida_kernwin.ask_ident2 (function) - ask_ident2(str, format) -> bool - Display a dialog box and wait for the user to input an identifier. If the user - enters a non-valid identifier, this function displays a warning and allows the - user to correct it. CPU register names are permitted. - - @param str: (C++: qstring *) qstring to fill. Can contain the default value. Cannot be nullptr. - @param format: (C++: const char *) printf() style format string with the question - @return: false if the user cancelled the dialog, otherwise returns true. +ida_kernwin.ask_ident2(*args) -> bool + Display a dialog box and wait for the user to input an identifier. If the user enters a non-valid identifier, this function displays a warning and allows the user to correct it. CPU register names are permitted. + + @param str: qstring to fill. Can contain the default value. Cannot be nullptr. + @param format: printf() style format string with the question + @returns false if the user cancelled the dialog, otherwise returns true. -ida_kernwin.ask_long (function) - Display a dialog box and wait for the user to input an number (ui_ask_long). The - number is represented in C-style. This function allows to enter any IDC - expression and properly calculates it. - +ida_kernwin.ask_long(defval, format) + Display a dialog box and wait for the user to input an number (ui_ask_long). The number is represented in C-style. This function allows to enter any IDC expression and properly calculates it. + + @param format: printf() style format string with the question @retval 0: if the user pressed Esc. @retval 1: ok, the user entered a valid number. -ida_kernwin.ask_seg (function) - Display a dialog box and wait for the user to input an segment name - (ui_ask_seg). This function allows to enter segment register names, segment base - paragraphs, segment names to denote a segment. - +ida_kernwin.ask_seg(defval, format) + Display a dialog box and wait for the user to input an segment name (ui_ask_seg). This function allows to enter segment register names, segment base paragraphs, segment names to denote a segment. + + @param format: printf() style format string with the question @retval 0: if the user pressed Esc. @retval 1: ok, the user entered an segment name -ida_kernwin.ask_str (function) - ask_str(defval, hist, prompt) -> str or None +ida_kernwin.ask_str(defval, hist, prompt) Asks for a long text @param defval: The default value - @param hist: history id + @param hist: history id @param prompt: The prompt value @return: None or the entered string -ida_kernwin.ask_text (function) - ask_text(max_size, defval, prompt) -> str +ida_kernwin.ask_text(max_size: int, defval: str, prompt: str) -> Union[str, None] Asks for a long text @param max_size: Maximum text length, 0 for unlimited @@ -42677,32 +28688,26 @@ ida_kernwin.ask_text (function) @param prompt: The prompt value @return: None or the entered string -ida_kernwin.ask_yn (function) - ask_yn(deflt, format) -> int - Display a dialog box and get choice from "Yes", "No", "Cancel". - - @param deflt: (C++: int) default choice: one of Button IDs - @param format: (C++: const char *) The question in printf() style format - @return: the selected button (one of Button IDs). Esc key returns ASKBTN_CANCEL. +ida_kernwin.ask_yn(*args) -> int + Display a dialog box and get choice from "Yes", "No", "Cancel". + + @param deflt: default choice: one of Button IDs + @param format: The question in printf() style format + @returns the selected button (one of Button IDs). Esc key returns ASKBTN_CANCEL. -ida_kernwin.atoea (function) - atoea(str) -> bool - Convert a number in C notation to an address. decimal: 1234 - octal: 0123 - hexadecimal: 0xabcd - binary: 0b00101010 - - @param str: (C++: const char *) the string to parse +ida_kernwin.atoea(str: str) -> "uint64 *" + Convert a number in C notation to an address. decimal: 1234 + octal: 0123 + hexadecimal: 0xabcd + binary: 0b00101010 + + @param str: the string to parse -ida_kernwin.attach_action_to_menu (function) - attach_action_to_menu(menupath, name, flags=0) -> bool - Attach a previously-registered action to the menu (ui_attach_action_to_menu). - @note: 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). +ida_kernwin.attach_action_to_menu(menupath: str, name: str, flags: int = 0) -> bool + Attach a previously-registered action to the menu (ui_attach_action_to_menu). + + @param menupath: path to the menu item after or before which the insertion will take place. - @param menupath: (C++: const char *) 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. @@ -42710,682 +28715,476 @@ ida_kernwin.attach_action_to_menu (function) * 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 - @param name: (C++: const char *) the action name - @param flags: (C++: int) a combination of Set menu flags, to determine menu item position - @return: success + @param name: the action name + @param flags: a combination of Set menu flags, to determine menu item position + @returns success -ida_kernwin.attach_action_to_popup (function) - 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: (C++: TWidget *) target widget - @param popup_handle: (C++: TPopupMenu *) target popup menu - * if non-nullptr, the action is added to this popup menu invocation (i.e., - 'single-shot') - * if nullptr, the action is added to a list of actions that should always be - present in context menus for this widget (i.e., 'permanent'.) - @param name: (C++: const char *) action name - @param popuppath: (C++: const char *) can be nullptr - @param flags: (C++: int) a combination of SETMENU_ flags (see Set menu flags) - @return: success +ida_kernwin.attach_action_to_popup(widget: "TWidget *", popup_handle: "TPopupMenu *", name: str, popuppath: str = None, flags: int = 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 + @param popup_handle: target popup menu + * if non-nullptr, the action is added to this popup menu invocation (i.e., 'single-shot') + * if nullptr, the action is added to a list of actions that should always be present in context menus for this widget (i.e., 'permanent'.) + @param name: action name + @param popuppath: can be nullptr + @param flags: a combination of SETMENU_ flags (see Set menu flags) + @returns success -ida_kernwin.attach_action_to_toolbar (function) - attach_action_to_toolbar(toolbar_name, name) -> bool - Attach an action to an existing toolbar (ui_attach_action_to_toolbar). - - @param toolbar_name: (C++: const char *) the name of the toolbar - @param name: (C++: const char *) the action name - @return: success +ida_kernwin.attach_action_to_toolbar(toolbar_name: str, name: str) -> bool + Attach an action to an existing toolbar (ui_attach_action_to_toolbar). + + @param toolbar_name: the name of the toolbar + @param name: the action name + @returns success -ida_kernwin.attach_dynamic_action_to_popup (function) - attach_dynamic_action_to_popup(unused, popup_handle, desc, popuppath=None, flags=0) -> bool +ida_kernwin.attach_dynamic_action_to_popup(unused, popup_handle, desc, popuppath = None, flags = 0) Create & insert an action into the widget's popup menu (::ui_attach_dynamic_action_to_popup). Note: The action description in the 'desc' parameter is modified by this call so you should prepare a new description for each call. For example: - desc = idaapi.action_desc_t(None, 'Dynamic popup action', Handler()) - idaapi.attach_dynamic_action_to_popup(form, popup, desc) + desc = ida_kernwin.action_desc_t(None, 'Dynamic popup action', Handler()) + ida_kernwin.attach_dynamic_action_to_popup(form, popup, desc) - @param unused: deprecated; should be None + @param unused: deprecated; should be None @param popup_handle: target popup - @param desc: action description of type action_desc_t - @param popuppath: can be None - @param flags: a combination of SETMENU_ constants + @param desc: action description of type action_desc_t + @param popuppath: can be None + @param flags: a combination of SETMENU_ constants @return: success -ida_kernwin.banner (function) - banner(wait) -> bool - Show a banner dialog box (ui_banner). - - @param wait: (C++: int) time to wait before closing +ida_kernwin.banner(wait: int) -> bool + Show a banner dialog box (ui_banner). + + @param wait: time to wait before closing @retval 1: ok @retval 0: esc was pressed -ida_kernwin.beep (function) - beep(beep_type=beep_default) - Issue a beeping sound (ui_beep). - - @param beep_type: (C++: beep_t) +ida_kernwin.beep(beep_type: "beep_t" = beep_default) -> None + Issue a beeping sound (ui_beep). + + @param beep_type: beep_t -ida_kernwin.call_nav_colorizer (function) - call_nav_colorizer(dict, ea, nbytes) -> uint32 +ida_kernwin.call_nav_colorizer(colorizer, ea: ida_idaapi.ea_t, nbytes: int) To be used with the IDA-provided colorizer, that is returned as result of the first call to set_nav_colorizer(). - @param dict: PyObject * - @param ea: ea_t - @param nbytes: asize_t + @param colorizer: the Python colorizer to call + @param ea: the address to colorize + @param nbytes: the size of the range to colorize -ida_kernwin.cancel_exec_request (function) - cancel_exec_request(req_id) -> bool - Try to cancel an asynchronous exec request (ui_cancel_exec_request). - - @param req_id: (C++: int) request id +ida_kernwin.cancel_exec_request(req_id: int) -> bool + Try to cancel an asynchronous exec request (::ui_cancel_exec_request). + + @param req_id: request id @retval true: successfully canceled @retval false: request has already been processed. -ida_kernwin.cancel_thread_exec_requests (function) - cancel_thread_exec_requests(tid) -> int - Try to cancel asynchronous exec requests created by the specified thread. - - @param tid: (C++: qthread_t) thread id - @return: number of the canceled requests. +ida_kernwin.cancel_thread_exec_requests(tid: "__qthread_t") -> int + Try to cancel asynchronous exec requests created by the specified thread. + + @param tid: thread id + @returns number of the canceled requests. -ida_kernwin.choose_activate (function) - choose_activate(_self) - - @param self: PyObject * +ida_kernwin.choose_activate(_self: "PyObject *") -> None -ida_kernwin.choose_choose (function) - choose_choose(_self) -> PyObject * - - @param self: PyObject * +ida_kernwin.choose_choose(_self: "PyObject *") -> "PyObject *" -ida_kernwin.choose_close (function) - choose_close(_self) - - @param self: PyObject * +ida_kernwin.choose_close(_self: "PyObject *") -> None -ida_kernwin.choose_create_embedded_chobj (function) - choose_create_embedded_chobj(_self) -> PyObject * - - @param self: PyObject * +ida_kernwin.choose_create_embedded_chobj(_self: "PyObject *") -> "PyObject *" -ida_kernwin.choose_entry (function) - choose_entry(title) -> ea_t - Choose an entry point (ui_choose, chtype_entry). - - @param title: (C++: const char *) chooser title - @return: ea of selected entry point, BADADDR if none selected +ida_kernwin.choose_entry(title: str) -> ida_idaapi.ea_t + Choose an entry point (ui_choose, chtype_entry). + + @param title: chooser title + @returns ea of selected entry point, BADADDR if none selected -ida_kernwin.choose_enum (function) - choose_enum(out, title, default_ord) -> bool - - @param out: tinfo_t * - @param title: char const * - @param default_ord: uint32 - - choose_enum(title, default_id) -> enum_t - - @param title: char const * - @param default_id: enum_t +ida_kernwin.choose_enum(out: "tinfo_t", title: str, default_ord: int) -> bool + Choose an enum (ui_choose, chtype_enum). + + @param out: the selected enum type + @param title: chooser title + @param default_ord: ordinal of enum to select by default + @retval true: the selected type is in OUT + @retval false: nothing was selected -ida_kernwin.choose_enum_by_value (function) - choose_enum_by_value(out, title, default_ord, value, nbytes) -> bool - - @param out: tinfo_t * - @param title: char const * - @param default_ord: uint32 - @param value: uint64 - @param nbytes: int - - choose_enum_by_value(title, default_id, value, nbytes) -> enum_t - - @param title: char const * - @param default_id: enum_t - @param value: uint64 - @param nbytes: int +ida_kernwin.choose_enum_by_value(out: "tinfo_t", title: str, default_ord: int, value: "uint64", nbytes: int) -> "uchar *" + 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 out: the selected enum type + @param title: chooser title + @param default_ord: ordinal of enum to select by default + @param value: value to search for + @param nbytes: size of value + @retval true: the selected type is in OUT + @retval false: nothing was selected -ida_kernwin.choose_find (function) - choose_find(title) -> MyChoose or None +ida_kernwin.choose_find(title: str) -> Union[object, None] + Retrieve the chooser object by title - @param title: char const * + @param title the chooser title + @return the chooser, or None -ida_kernwin.choose_func (function) - choose_func(title, default_ea) -> func_t * - Choose a function (ui_choose, chtype_func). - - @param title: (C++: const char *) chooser title - @param default_ea: (C++: ea_t) ea of function to select by default - @return: pointer to function that was selected, nullptr if none selected +ida_kernwin.choose_func(title: str, default_ea: ida_idaapi.ea_t) -> "func_t *" + Choose a function (ui_choose, chtype_func). + + @param title: chooser title + @param default_ea: ea of function to select by default + @returns pointer to function that was selected, nullptr if none selected -ida_kernwin.choose_get_widget (function) - choose_get_widget(_self) -> TWidget * - - @param self: PyObject * +ida_kernwin.choose_get_widget(_self: "PyObject *") -> "TWidget *" -ida_kernwin.choose_idasgn (function) - choose_idasgn() -> PyObject * +ida_kernwin.choose_idasgn() Opens the signature chooser @return: None or the selected signature name -ida_kernwin.choose_name (function) - choose_name(title) -> ea_t - Choose a name (ui_choose, chtype_name). - - @param title: (C++: const char *) chooser title - @return: ea of selected name, BADADDR if none selected +ida_kernwin.choose_name(title: str) -> ida_idaapi.ea_t + Choose a name (ui_choose, chtype_name). + + @param title: chooser title + @returns ea of selected name, BADADDR if none selected -ida_kernwin.choose_refresh (function) - choose_refresh(_self) - - @param self: PyObject * +ida_kernwin.choose_refresh(_self: "PyObject *") -> None -ida_kernwin.choose_segm (function) - choose_segm(title, default_ea) -> segment_t * - Choose a segment (ui_choose, chtype_segm). - - @param title: (C++: const char *) chooser title - @param default_ea: (C++: ea_t) ea of segment to select by default - @return: pointer to segment that was selected, nullptr if none selected +ida_kernwin.choose_segm(title: str, default_ea: ida_idaapi.ea_t) -> "segment_t *" + Choose a segment (ui_choose, chtype_segm). + + @param title: chooser title + @param default_ea: ea of segment to select by default + @returns pointer to segment that was selected, nullptr if none selected -ida_kernwin.choose_srcp (function) - choose_srcp(title) -> sreg_range_t * - Choose a segment register change point (ui_choose, chtype_srcp). - - @param title: (C++: const char *) chooser title - @return: pointer to segment register range of selected change point, nullptr if - none selected +ida_kernwin.choose_srcp(title: str) -> "sreg_range_t *" + Choose a segment register change point (ui_choose, chtype_srcp). + + @param title: chooser title + @returns pointer to segment register range of selected change point, nullptr if none selected -ida_kernwin.choose_stkvar_xref (function) - choose_stkvar_xref(pfn, mptr) -> ea_t - Choose an xref to a stack variable (ui_choose, chtype_name). - - @param pfn: (C++: func_t *) function - @param mptr: (C++: member_t *) variable - @return: ea of the selected xref, BADADDR if none selected +ida_kernwin.choose_stkvar_xref(pfn: "func_t *", srkvar_tid: "tid_t") -> ida_idaapi.ea_t + Choose an xref to a stack variable (ui_choose, chtype_name). + + @param pfn: function + @param srkvar_tid: frame variable TID + @returns ea of the selected xref, BADADDR if none selected -ida_kernwin.choose_struc (function) - choose_struc(title) -> struc_t * - - @param title: char const * - -ida_kernwin.choose_struct (function) - choose_struct(out, title) -> bool - Choose a structure (ui_choose, chtype_struct). - - @param out: (C++: tinfo_t *) the selected structure type - @param title: (C++: const char *) chooser title +ida_kernwin.choose_struct(out: "tinfo_t", title: str) -> bool + Choose a structure (ui_choose, chtype_struct). + + @param out: the selected structure type + @param title: chooser title @retval true: the selected type is in OUT @retval false: nothing was selected -ida_kernwin.choose_til (function) - choose_til() -> str - Choose a type library (ui_choose, chtype_idatil). - +ida_kernwin.choose_til() -> str + Choose a type library (ui_choose, chtype_idatil). + @retval true: 'buf' was filled with the name of the selected til @retval false: otherwise -ida_kernwin.choose_xref (function) - choose_xref(to) -> ea_t - Choose an xref to an address (ui_choose, chtype_xref). - - @param to: (C++: ea_t) referenced address - @return: ea of selected xref, BADADDR if none selected +ida_kernwin.choose_xref(to: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Choose an xref to an address (ui_choose, chtype_xref). + + @param to: referenced address + @returns ea of selected xref, BADADDR if none selected -ida_kernwin.chooser_base_t (class) - Proxy of C++ chooser_base_t class. +ida_kernwin.chooser_base_t -ida_kernwin.chooser_base_t.__init__ (method) +ida_kernwin.chooser_base_t.__init__(self, *args, **kwargs) -ida_kernwin.chooser_base_t.ask_item_attrs (method) - ask_item_attrs(self) -> bool +ida_kernwin.chooser_base_t.ask_item_attrs(self) -> bool should chooser generate ui_get_chooser_item_attrs events? -ida_kernwin.chooser_base_t.can_del (method) - can_del(self) -> bool +ida_kernwin.chooser_base_t.can_del(self) -> bool -ida_kernwin.chooser_base_t.can_edit (method) - can_edit(self) -> bool +ida_kernwin.chooser_base_t.can_edit(self) -> bool -ida_kernwin.chooser_base_t.can_filter (method) - can_filter(self) -> bool +ida_kernwin.chooser_base_t.can_filter(self) -> bool -ida_kernwin.chooser_base_t.can_ins (method) - can_ins(self) -> bool +ida_kernwin.chooser_base_t.can_ins(self) -> bool is an operation allowed? -ida_kernwin.chooser_base_t.can_refresh (method) - can_refresh(self) -> bool +ida_kernwin.chooser_base_t.can_refresh(self) -> bool -ida_kernwin.chooser_base_t.can_sort (method) - can_sort(self) -> bool +ida_kernwin.chooser_base_t.can_sort(self) -> bool -ida_kernwin.chooser_base_t.columns (variable) +ida_kernwin.chooser_base_t.columns number of columns -ida_kernwin.chooser_base_t.deflt_col (variable) +ida_kernwin.chooser_base_t.deflt_col Column that will have focus. -ida_kernwin.chooser_base_t.get_builtin_number (method) - get_builtin_number(self) -> uint +ida_kernwin.chooser_base_t.get_builtin_number(self) -> "uint" get number of the built-in chooser -ida_kernwin.chooser_base_t.get_count (method) - get_count(self) -> size_t +ida_kernwin.chooser_base_t.get_count(self) -> "size_t" get the number of elements in the chooser -ida_kernwin.chooser_base_t.get_ea (method) - get_ea(self, arg2) -> ea_t - get the address of an element. When this function returns valid addresses: * If - any column has the `CHCOL_FNAME` flag, rows will be colored according to the - attributes of the functions who own those addresses (extern, library function, - Lumina, ... - similar to what the "Functions" widget does) * When a selection is - present and the user presses `<Enter>` (`<Shift+Enter>` if the chooser is - modal), IDA will jump to that address (through jumpto()) +ida_kernwin.chooser_base_t.get_ea(self, arg2: "size_t") -> ida_idaapi.ea_t + get the address of an element. When this function returns valid addresses: * If any column has the `CHCOL_FNAME` flag, rows will be colored according to the attributes of the functions who own those addresses (extern, library function, Lumina, ... - similar to what the "Functions" widget does) * When a selection is present and the user presses `<Enter>` (`<Shift+Enter>` if the chooser is modal), IDA will jump to that address (through jumpto()) + + @returns the effective address, BADADDR if the element has no address + +ida_kernwin.chooser_base_t.get_quick_filter_initial_mode(self) -> int + +ida_kernwin.chooser_base_t.get_row(self, n: int) -> Tuple[List[str], int, chooser_item_attrs_t] + Get data & attributes for a row in a chooser. - @param arg2: size_t - @return: the effective address, BADADDR if the element has no address + @param n The row number + @return a tuple (list-of-strings, icon-id, row-attributes) -ida_kernwin.chooser_base_t.get_quick_filter_initial_mode (method) - get_quick_filter_initial_mode(self) -> int +ida_kernwin.chooser_base_t.has_diff_capability(self) -> bool -ida_kernwin.chooser_base_t.get_row (method) - get_row(self, n) -> ([str, ...], int, chooser_item_attrs_t) - get a description of an element. - - @param n: (C++: size_t) element number (0..get_count()-1) +ida_kernwin.chooser_base_t.has_dirtree(self) -> bool -ida_kernwin.chooser_base_t.has_diff_capability (method) - has_diff_capability(self) -> bool +ida_kernwin.chooser_base_t.has_inode_to_index(self) -> bool -ida_kernwin.chooser_base_t.has_dirtree (method) - has_dirtree(self) -> bool +ida_kernwin.chooser_base_t.has_widget_lifecycle(self) -> bool + should chooser object be deleted when the widget gets destroyed? -ida_kernwin.chooser_base_t.has_inode_to_index (method) - has_inode_to_index(self) -> bool +ida_kernwin.chooser_base_t.header + header line; contains the tooltips, and column name for each of 'columns' columns. When tooltips need to be provided, the syntax should be: "#tooltip#column-name". (Otherwise, the syntax is simply "column-name".) + -ida_kernwin.chooser_base_t.header (variable) - header line; contains the tooltips, and column name for each of 'columns' - columns. When tooltips need to be provided, the syntax should be: - "#tooltip#column-name". (Otherwise, the syntax is simply "column-name".) - -ida_kernwin.chooser_base_t.height (variable) +ida_kernwin.chooser_base_t.height (in chars) -ida_kernwin.chooser_base_t.icon (variable) +ida_kernwin.chooser_base_t.icon default icon -ida_kernwin.chooser_base_t.is_dirtree_persisted (method) - is_dirtree_persisted(self) -> bool +ida_kernwin.chooser_base_t.is_dirtree_persisted(self) -> bool -ida_kernwin.chooser_base_t.is_force_default (method) - is_force_default(self) -> bool +ida_kernwin.chooser_base_t.is_force_default(self) -> bool should selection of the already opened non-modal chooser be changed? -ida_kernwin.chooser_base_t.is_lazy_loaded (method) - is_lazy_loaded(self) -> bool +ida_kernwin.chooser_base_t.is_lazy_loaded(self) -> bool -ida_kernwin.chooser_base_t.is_modal (method) - is_modal(self) -> bool +ida_kernwin.chooser_base_t.is_modal(self) -> bool is choose modal? -ida_kernwin.chooser_base_t.is_multi (method) - is_multi(self) -> bool +ida_kernwin.chooser_base_t.is_multi(self) -> bool is multi-selection allowed? -ida_kernwin.chooser_base_t.is_quick_filter_visible_initially (method) - is_quick_filter_visible_initially(self) -> bool +ida_kernwin.chooser_base_t.is_quick_filter_visible_initially(self) -> bool -ida_kernwin.chooser_base_t.is_same (method) - is_same(self, other) -> bool +ida_kernwin.chooser_base_t.is_same(self, other: "chooser_base_t") -> bool do the current and the given objects hold the same data? - - @param other: (C++: const chooser_base_t *) chooser_base_t const * -ida_kernwin.chooser_base_t.is_status_bar_hidden (method) - is_status_bar_hidden(self) -> bool +ida_kernwin.chooser_base_t.is_status_bar_hidden(self) -> bool -ida_kernwin.chooser_base_t.popup_allowed (method) - popup_allowed(self, stdact_idx) -> bool +ida_kernwin.chooser_base_t.popup_allowed(self, stdact_idx: int) -> bool is a standard action allowed? - - @param stdact_idx: (C++: int) -ida_kernwin.chooser_base_t.popup_names (variable) - array of custom labels of the standard actions. Used to replace labels for these - actions. - An empty name means that the default name will be used. - @note: Availability of these actions is determined by the CH_CAN_... flags. The - label, icon and other action attributes can be overwritten in the action - description returned by get_stdact_descs() +ida_kernwin.chooser_base_t.popup_names + array of custom labels of the standard actions. Used to replace labels for these actions. + An empty name means that the default name will be used. + -ida_kernwin.chooser_base_t.should_rename_trigger_edit (method) - should_rename_trigger_edit(self) -> bool +ida_kernwin.chooser_base_t.should_rename_trigger_edit(self) -> bool -ida_kernwin.chooser_base_t.should_restore_geometry (method) - should_restore_geometry(self) -> bool +ida_kernwin.chooser_base_t.should_restore_geometry(self) -> bool -ida_kernwin.chooser_base_t.title (variable) +ida_kernwin.chooser_base_t.title menu title (includes ptr to help). May have chooser title prefixes (see "Chooser - title" above). + title" above). + -ida_kernwin.chooser_base_t.width (variable) +ida_kernwin.chooser_base_t.width (in chars) -ida_kernwin.chooser_base_t.widths (variable) +ida_kernwin.chooser_base_t.widths column widths * low 16 bits of each value hold the column width - * high 16 bits are flags (see Chooser column flags) + * high 16 bits are flags (see Chooser column flags) + + + -ida_kernwin.chooser_base_t.x0 (variable) +ida_kernwin.chooser_base_t.x0 screen position, Functions: generic list choosers -ida_kernwin.chooser_item_attrs_t (class) - Proxy of C++ chooser_item_attrs_t class. +ida_kernwin.chooser_item_attrs_t -ida_kernwin.chooser_item_attrs_t.__eq__ (method) - __eq__(self, other) -> bool - - @param other: chooser_item_attrs_t const & +ida_kernwin.chooser_item_attrs_t.__eq__(self, other: "chooser_item_attrs_t") -> bool -ida_kernwin.chooser_item_attrs_t.__init__ (method) - __init__(self) -> chooser_item_attrs_t +ida_kernwin.chooser_item_attrs_t.__init__(self) -ida_kernwin.chooser_item_attrs_t.color (variable) +ida_kernwin.chooser_item_attrs_t.color item color -ida_kernwin.chooser_item_attrs_t.flags (variable) +ida_kernwin.chooser_item_attrs_t.flags Chooser item property bits -ida_kernwin.chooser_item_attrs_t.reset (method) - reset(self) +ida_kernwin.chooser_item_attrs_t.reset(self) -> None -ida_kernwin.chooser_row_info_t (class) - Proxy of C++ chooser_row_info_t class. +ida_kernwin.chooser_row_info_t -ida_kernwin.chooser_row_info_t.__eq__ (method) - __eq__(self, other) -> bool - - @param other: chooser_row_info_t const & +ida_kernwin.chooser_row_info_t.__eq__(self, other: "chooser_row_info_t") -> bool -ida_kernwin.chooser_row_info_t.__init__ (method) - __init__(self) -> chooser_row_info_t +ida_kernwin.chooser_row_info_t.__init__(self) -ida_kernwin.chooser_row_info_t.__ne__ (method) - __ne__(self, other) -> bool - - @param other: chooser_row_info_t const & +ida_kernwin.chooser_row_info_t.__ne__(self, other: "chooser_row_info_t") -> bool -ida_kernwin.chooser_row_info_t.attrs (variable) +ida_kernwin.chooser_row_info_t.attrs styling attributes -ida_kernwin.chooser_row_info_t.icon (variable) +ida_kernwin.chooser_row_info_t.icon icon number -ida_kernwin.chooser_row_info_t.texts (variable) +ida_kernwin.chooser_row_info_t.texts texts, one per chooser column -ida_kernwin.chooser_row_info_vec_t (class) - Proxy of C++ qvector< chooser_row_info_t > class. +ida_kernwin.chooser_row_info_vec_t -ida_kernwin.chooser_row_info_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< chooser_row_info_t > const & +ida_kernwin.chooser_row_info_vec_t.__eq__(self, r: "chooser_row_info_vec_t") -> bool -ida_kernwin.chooser_row_info_vec_t.__getitem__ (method) - __getitem__(self, i) -> chooser_row_info_t - - @param i: size_t +ida_kernwin.chooser_row_info_vec_t.__getitem__(self, i: "size_t") -> "chooser_row_info_t const &" -ida_kernwin.chooser_row_info_vec_t.__init__ (method) - __init__(self) -> chooser_row_info_vec_t - __init__(self, x) -> chooser_row_info_vec_t - - @param x: qvector< chooser_row_info_t > const & +ida_kernwin.chooser_row_info_vec_t.__init__(self, *args) -ida_kernwin.chooser_row_info_vec_t.__len__ (method) - __len__(self) -> size_t +ida_kernwin.chooser_row_info_vec_t.__len__(self) -> "size_t" -ida_kernwin.chooser_row_info_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< chooser_row_info_t > const & +ida_kernwin.chooser_row_info_vec_t.__ne__(self, r: "chooser_row_info_vec_t") -> bool -ida_kernwin.chooser_row_info_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: chooser_row_info_t const & +ida_kernwin.chooser_row_info_vec_t.__setitem__(self, i: "size_t", v: "chooser_row_info_t") -> None -ida_kernwin.chooser_row_info_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: chooser_row_info_t const & +ida_kernwin.chooser_row_info_vec_t._del(self, x: "chooser_row_info_t") -> bool -ida_kernwin.chooser_row_info_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: chooser_row_info_t const & +ida_kernwin.chooser_row_info_vec_t.add_unique(self, x: "chooser_row_info_t") -> bool -ida_kernwin.chooser_row_info_vec_t.at (method) - at(self, _idx) -> chooser_row_info_t - - @param _idx: size_t +ida_kernwin.chooser_row_info_vec_t.append(self, x: "chooser_row_info_t") -> None -ida_kernwin.chooser_row_info_vec_t.begin (method) - begin(self) -> chooser_row_info_t +ida_kernwin.chooser_row_info_vec_t.at(self, _idx: "size_t") -> "chooser_row_info_t const &" -ida_kernwin.chooser_row_info_vec_t.capacity (method) - capacity(self) -> size_t +ida_kernwin.chooser_row_info_vec_t.begin(self, *args) -> "qvector< chooser_row_info_t >::const_iterator" -ida_kernwin.chooser_row_info_vec_t.clear (method) - clear(self) +ida_kernwin.chooser_row_info_vec_t.capacity(self) -> "size_t" -ida_kernwin.chooser_row_info_vec_t.empty (method) - empty(self) -> bool +ida_kernwin.chooser_row_info_vec_t.clear(self) -> None -ida_kernwin.chooser_row_info_vec_t.end (method) - end(self) -> chooser_row_info_t +ida_kernwin.chooser_row_info_vec_t.empty(self) -> bool -ida_kernwin.chooser_row_info_vec_t.erase (method) - erase(self, it) -> chooser_row_info_t - - @param it: qvector< chooser_row_info_t >::iterator - - erase(self, first, last) -> chooser_row_info_t - - @param first: qvector< chooser_row_info_t >::iterator - @param last: qvector< chooser_row_info_t >::iterator +ida_kernwin.chooser_row_info_vec_t.end(self, *args) -> "qvector< chooser_row_info_t >::const_iterator" -ida_kernwin.chooser_row_info_vec_t.extract (method) - extract(self) -> chooser_row_info_t +ida_kernwin.chooser_row_info_vec_t.erase(self, *args) -> "qvector< chooser_row_info_t >::iterator" -ida_kernwin.chooser_row_info_vec_t.find (method) - find(self, x) -> chooser_row_info_t - - @param x: chooser_row_info_t const & +ida_kernwin.chooser_row_info_vec_t.extend(self, x: "chooser_row_info_vec_t") -> None -ida_kernwin.chooser_row_info_vec_t.grow (method) - grow(self, x=chooser_row_info_t()) - - @param x: chooser_row_info_t const & +ida_kernwin.chooser_row_info_vec_t.extract(self) -> "chooser_row_info_t *" -ida_kernwin.chooser_row_info_vec_t.has (method) - has(self, x) -> bool - - @param x: chooser_row_info_t const & +ida_kernwin.chooser_row_info_vec_t.find(self, *args) -> "qvector< chooser_row_info_t >::const_iterator" -ida_kernwin.chooser_row_info_vec_t.inject (method) - inject(self, s, len) - - @param s: chooser_row_info_t * - @param len: size_t +ida_kernwin.chooser_row_info_vec_t.grow(self, *args) -> None -ida_kernwin.chooser_row_info_vec_t.insert (method) - insert(self, it, x) -> chooser_row_info_t - - @param it: qvector< chooser_row_info_t >::iterator - @param x: chooser_row_info_t const & +ida_kernwin.chooser_row_info_vec_t.has(self, x: "chooser_row_info_t") -> bool -ida_kernwin.chooser_row_info_vec_t.pop_back (method) - pop_back(self) +ida_kernwin.chooser_row_info_vec_t.inject(self, s: "chooser_row_info_t", len: "size_t") -> None -ida_kernwin.chooser_row_info_vec_t.push_back (method) - push_back(self, x) - - @param x: chooser_row_info_t const & - - push_back(self) -> chooser_row_info_t +ida_kernwin.chooser_row_info_vec_t.insert(self, it: "chooser_row_info_t", x: "chooser_row_info_t") -> "qvector< chooser_row_info_t >::iterator" -ida_kernwin.chooser_row_info_vec_t.qclear (method) - qclear(self) +ida_kernwin.chooser_row_info_vec_t.pop_back(self) -> None -ida_kernwin.chooser_row_info_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_kernwin.chooser_row_info_vec_t.push_back(self, *args) -> "chooser_row_info_t &" -ida_kernwin.chooser_row_info_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: chooser_row_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_kernwin.chooser_row_info_vec_t.qclear(self) -> None -ida_kernwin.chooser_row_info_vec_t.size (method) - size(self) -> size_t +ida_kernwin.chooser_row_info_vec_t.reserve(self, cnt: "size_t") -> None -ida_kernwin.chooser_row_info_vec_t.swap (method) - swap(self, r) - - @param r: qvector< chooser_row_info_t > & +ida_kernwin.chooser_row_info_vec_t.resize(self, *args) -> None -ida_kernwin.chooser_row_info_vec_t.truncate (method) - truncate(self) +ida_kernwin.chooser_row_info_vec_t.size(self) -> "size_t" -ida_kernwin.chooser_stdact_desc_t (class) - Proxy of C++ chooser_stdact_desc_t class. +ida_kernwin.chooser_row_info_vec_t.swap(self, r: "chooser_row_info_vec_t") -> None -ida_kernwin.chooser_stdact_desc_t.__disown__ (method) +ida_kernwin.chooser_row_info_vec_t.truncate(self) -> None -ida_kernwin.chooser_stdact_desc_t.__init__ (method) - __init__(self, _label=None, _tooltip=None, _icon=-1) -> chooser_stdact_desc_t - - @param _label: char const * - @param _tooltip: char const * - @param _icon: int +ida_kernwin.chooser_stdact_desc_t -ida_kernwin.chooser_stdact_desc_t.label (variable) +ida_kernwin.chooser_stdact_desc_t.__disown__(self) + +ida_kernwin.chooser_stdact_desc_t.__init__(self, _label: str = None, _tooltip: str = None, _icon: int = -1) + +ida_kernwin.chooser_stdact_desc_t.label see action_desc_t -ida_kernwin.chooser_stdact_desc_t.ucb (method) - ucb(self, arg0) -> action_state_t - the update callback, see action_handler_t::update() When the update callback is - called from the chooser UI engine, it can be sure that ctx.source.chooser is a - valid pointer to chooser_base_t and that there are selected items for the Delete - and Edit actions. - - @param arg0: action_update_ctx_t * +ida_kernwin.chooser_stdact_desc_t.ucb(self, arg0: "action_ctx_base_t") -> "action_state_t" + the update callback, see action_handler_t::update() When the update callback is called from the chooser UI engine, it can be sure that ctx.source.chooser is a valid pointer to chooser_base_t and that there are selected items for the Delete and Edit actions. + -ida_kernwin.chooser_stdact_desc_t.version (variable) +ida_kernwin.chooser_stdact_desc_t.version to support the backward compatibility -ida_kernwin.chtype_entry (variable) +ida_kernwin.chtype_entry see choose_entry() -ida_kernwin.chtype_enum (variable) +ida_kernwin.chtype_enum see choose_enum() -ida_kernwin.chtype_enum_by_value (variable) - Deprecated. See chtype_enum_by_value_and_size. - -ida_kernwin.chtype_enum_by_value_and_size (variable) +ida_kernwin.chtype_enum_by_value_and_size see choose_enum_by_value() -ida_kernwin.chtype_func (variable) +ida_kernwin.chtype_func see choose_func() -ida_kernwin.chtype_generic (variable) +ida_kernwin.chtype_generic the generic choose() function -ida_kernwin.chtype_idasgn (variable) +ida_kernwin.chtype_idasgn see choose_idasgn() -ida_kernwin.chtype_idatil (variable) +ida_kernwin.chtype_idatil see choose_til() -ida_kernwin.chtype_name (variable) +ida_kernwin.chtype_name see choose_name() -ida_kernwin.chtype_obsolete_enum (variable) - see choose_enum() - -ida_kernwin.chtype_obsolete_enum_by_value_and_size (variable) - see choose_enum_by_value() - -ida_kernwin.chtype_obsolete_struc (variable) - see choose_struc() - -ida_kernwin.chtype_segm (variable) +ida_kernwin.chtype_segm see choose_segm() -ida_kernwin.chtype_srcp (variable) +ida_kernwin.chtype_srcp see choose_srcp() -ida_kernwin.chtype_stkvar_xref (variable) +ida_kernwin.chtype_stkvar_xref see choose_stkvar_xref() -ida_kernwin.chtype_strpath (variable) +ida_kernwin.chtype_strpath see choose_struc_path() -ida_kernwin.chtype_struct (variable) +ida_kernwin.chtype_struct see choose_struct() -ida_kernwin.chtype_xref (variable) +ida_kernwin.chtype_xref see choose_xref() -ida_kernwin.clear_refresh_request (function) - clear_refresh_request(mask) - - @param mask: uint64 +ida_kernwin.clear_refresh_request(mask: "uint64") -> None -ida_kernwin.cli_t (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.OnCompleteLine (method) - The user pressed Tab. Find a completion number N for prefix PREFIX - - This callback is optional. - - @param prefix: Line prefix at prefix_start (string) - @param n: completion number (int) - @param line: the current line (string) - @param prefix_start: the index where PREFIX starts in LINE (int) - - @return: None if no completion could be generated otherwise a String with the completion suggestion - -ida_kernwin.cli_t.OnExecuteLine (method) +ida_kernwin.cli_t.OnExecuteLine(self, line) The user pressed Enter. The CLI is free to execute the line immediately or ask for more lines. This callback is mandatory. @param line: typed line(s) - @return: Boolean: True-executed line, False-ask for more lines + @return Boolean: True-executed line, False-ask for more lines -ida_kernwin.cli_t.OnKeydown (method) +ida_kernwin.cli_t.OnFindCompletions(self, line, x) + The user pressed Tab. Return a list of completions + + This callback is optional. + + @param line: the current line (string) + @param x: the index where the cursor is (int) + + @return: None if no completion could be generated, otherwise a tuple: + (completions : Sequence[str], hints : Sequence[str], docs: Sequence[str], + match_start: int, match_end: int) + +ida_kernwin.cli_t.OnKeydown(self, line, x, sellen, vkey, shift) A keyboard key has been pressed This is a generic callback and the CLI is free to do whatever it wants. @@ -43397,369 +29196,240 @@ ida_kernwin.cli_t.OnKeydown (method) @param vkey: virtual key code. if the key has been handled, it should be returned as zero @param shift: shift state - @return: None - Nothing was changed + @return: + None - Nothing was changed tuple(line, x, sellen, vkey): if either of the input line or the x coordinate or the selection length has been modified. It is possible to return a tuple with None elements to preserve old values. Example: tuple(new_line, None, None, None) or tuple(new_line) -ida_kernwin.cli_t.__del__ (method) +ida_kernwin.cli_t.__del__(self) -ida_kernwin.cli_t.__init__ (method) +ida_kernwin.cli_t.__init__(self) -ida_kernwin.cli_t.register (method) +ida_kernwin.cli_t.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 + @param hint: Hint for the input line - @return: Boolean: True-Success, False-Failed + @return Boolean: True-Success, False-Failed -ida_kernwin.cli_t.unregister (method) +ida_kernwin.cli_t.unregister(self) Unregisters the CLI (if it was registered) -ida_kernwin.close_chooser (function) - close_chooser(title) -> bool - Close a non-modal chooser (ui_close_chooser). - - @param title: (C++: const char *) window title of chooser to close - @return: success +ida_kernwin.close_chooser(title: str) -> bool + Close a non-modal chooser (ui_close_chooser). + + @param title: window title of chooser to close + @returns success -ida_kernwin.close_widget (function) - close_widget(widget, options) - Close widget (ui_close_widget, only gui version). - - @param widget: (C++: TWidget *) pointer to the widget to close - @param options: (C++: int) Form close flags +ida_kernwin.close_widget(widget: "TWidget *", options: int) -> None + Close widget (ui_close_widget, only gui version). + + @param widget: pointer to the widget to close + @param options: Form close flags -ida_kernwin.clr_cancelled (function) - clr_cancelled() +ida_kernwin.clr_cancelled() -> None Clear "Cancelled" flag (ui_clr_cancelled) -ida_kernwin.create_code_viewer (function) - 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. +ida_kernwin.create_code_viewer(custview: "TWidget *", flags: int = 0, parent: "TWidget *" = 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: (C++: TWidget *) the custom view to be added - @param flags: (C++: int) Code viewer flags - @param parent: (C++: TWidget *) widget to contain the new code viewer + @param custview: the custom view to be added + @param flags: Code viewer flags + @param parent: widget to contain the new code viewer -ida_kernwin.create_empty_widget (function) - create_empty_widget(title, icon=-1) -> TWidget * - Create an empty widget, serving as a container for custom user widgets +ida_kernwin.create_empty_widget(title: str, icon: int = -1) -> "TWidget *" + Create an empty widget, serving as a container for custom user widgets + + +ida_kernwin.create_menu(name: str, label: str, menupath: str = 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-nullptr, 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 + "My menu", "Edit/Comments/Enter comment..."); - @param title: (C++: const char *) char const * - @param icon: (C++: int) - -ida_kernwin.create_menu (function) - 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-nullptr, 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: (C++: const char *) name of menu (must be unique) - @param label: (C++: const char *) label of menu - @param menupath: (C++: const char *) where should the menu be inserted - @return: success - -ida_kernwin.create_toolbar (function) - create_toolbar(name, label, before=None, flags=0) -> bool - Create a toolbar with the given name, label and optional position + The new 'My menu' submenu will appear at the end of the + 'Comments' submenu. + "My menu", "Edit/Comments/"); - @param name: (C++: const char *) name of toolbar (must be unique) - @param label: (C++: const char *) label of toolbar - @param before: (C++: const char *) if non-nullptr, the toolbar before which the new toolbar will be - inserted - @param flags: (C++: int) a combination of create toolbar flags, to determine toolbar - position - @return: success - -ida_kernwin.custom_viewer_jump (function) - custom_viewer_jump(v, loc, flags=0) -> bool - Append 'loc' to the viewer's history, and cause the viewer to display it. - @param v: (C++: TWidget *) (TWidget *) - @param loc: (C++: const lochist_entry_t &) (const lochist_entry_t &) - @param flags: (C++: uint32) (uint32) or'ed combination of CVNF_* values - @return: success + + @param name: name of menu (must be unique) + @param label: label of menu + @param menupath: where should the menu be inserted + @returns success -ida_kernwin.del_hotkey (function) - del_hotkey(pyctx) -> bool +ida_kernwin.create_toolbar(name: str, label: str, before: str = None, flags: int = 0) -> bool + Create a toolbar with the given name, label and optional position + + @param name: name of toolbar (must be unique) + @param label: label of toolbar + @param before: if non-nullptr, the toolbar before which the new toolbar will be inserted + @param flags: a combination of create toolbar flags, to determine toolbar position + @returns success + +ida_kernwin.custom_viewer_jump(v: "TWidget *", loc: "lochist_entry_t const &", flags: int = 0) -> bool + Append 'loc' to the viewer's history, and cause the viewer to display it. + + @param v: (TWidget *) + @param loc: (const lochist_entry_t &) + @param flags: (uint32) or'ed combination of CVNF_* values + @returns success + +ida_kernwin.del_hotkey(ctx) Deletes a previously registered function hotkey @param ctx: Hotkey context previously returned by add_hotkey() @return: Boolean. -ida_kernwin.del_idc_hotkey (function) - del_idc_hotkey(hotkey) -> bool - - @param hotkey: char const * +ida_kernwin.del_idc_hotkey(hotkey: str) -> bool -ida_kernwin.delete_menu (function) - delete_menu(name) -> bool - Delete an existing menu - - @param name: (C++: const char *) name of menu - @return: success +ida_kernwin.delete_menu(name: str) -> bool + Delete an existing menu + + @param name: name of menu + @returns success -ida_kernwin.delete_toolbar (function) - delete_toolbar(name) -> bool - Delete an existing toolbar - - @param name: (C++: const char *) name of toolbar - @return: success +ida_kernwin.delete_toolbar(name: str) -> bool + Delete an existing toolbar + + @param name: name of toolbar + @returns success -ida_kernwin.detach_action_from_menu (function) - detach_action_from_menu(menupath, name) -> bool - Detach an action from the menu (ui_detach_action_from_menu). - - @param menupath: (C++: const char *) path to the menu item - @param name: (C++: const char *) the action name - @return: success +ida_kernwin.detach_action_from_menu(menupath: str, name: str) -> bool + Detach an action from the menu (ui_detach_action_from_menu). + + @param menupath: path to the menu item + @param name: the action name + @returns success -ida_kernwin.detach_action_from_popup (function) - 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: (C++: TWidget *) target widget - @param name: (C++: const char *) action name +ida_kernwin.detach_action_from_popup(widget: "TWidget *", name: str) -> 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 + @param name: action name -ida_kernwin.detach_action_from_toolbar (function) - detach_action_from_toolbar(toolbar_name, name) -> bool - Detach an action from the toolbar (ui_detach_action_from_toolbar). - - @param toolbar_name: (C++: const char *) the name of the toolbar - @param name: (C++: const char *) the action name - @return: success +ida_kernwin.detach_action_from_toolbar(toolbar_name: str, name: str) -> bool + Detach an action from the toolbar (ui_detach_action_from_toolbar). + + @param toolbar_name: the name of the toolbar + @param name: the action name + @returns success -ida_kernwin.disabled_script_timeout_t (class) +ida_kernwin.disabled_script_timeout_t -ida_kernwin.disabled_script_timeout_t.__enter__ (method) +ida_kernwin.disabled_script_timeout_t.__enter__(self) -ida_kernwin.disabled_script_timeout_t.__exit__ (method) +ida_kernwin.disabled_script_timeout_t.__exit__(self, type, value, tb) -ida_kernwin.disasm_line_t (class) - Proxy of C++ disasm_line_t class. +ida_kernwin.disasm_line_t -ida_kernwin.disasm_line_t.__init__ (method) - __init__(self) -> disasm_line_t - __init__(self, other) -> disasm_line_t - - @param other: disasm_line_t const & +ida_kernwin.disasm_line_t.__init__(self, *args) -ida_kernwin.disasm_text_t (class) - Proxy of C++ qvector< disasm_line_t > class. +ida_kernwin.disasm_text_t -ida_kernwin.disasm_text_t.__getitem__ (method) - __getitem__(self, i) -> disasm_line_t - - @param i: size_t +ida_kernwin.disasm_text_t.__getitem__(self, i: "size_t") -> "disasm_line_t const &" -ida_kernwin.disasm_text_t.__init__ (method) - __init__(self) -> disasm_text_t - __init__(self, x) -> disasm_text_t - - @param x: qvector< disasm_line_t > const & +ida_kernwin.disasm_text_t.__init__(self, *args) -ida_kernwin.disasm_text_t.__len__ (method) - __len__(self) -> size_t +ida_kernwin.disasm_text_t.__len__(self) -> "size_t" -ida_kernwin.disasm_text_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: disasm_line_t const & +ida_kernwin.disasm_text_t.__setitem__(self, i: "size_t", v: "disasm_line_t") -> None -ida_kernwin.disasm_text_t.at (method) - at(self, _idx) -> disasm_line_t - - @param _idx: size_t +ida_kernwin.disasm_text_t.append(self, x: "disasm_line_t") -> None -ida_kernwin.disasm_text_t.begin (method) - begin(self) -> disasm_line_t +ida_kernwin.disasm_text_t.at(self, _idx: "size_t") -> "disasm_line_t const &" -ida_kernwin.disasm_text_t.capacity (method) - capacity(self) -> size_t +ida_kernwin.disasm_text_t.begin(self, *args) -> "qvector< disasm_line_t >::const_iterator" -ida_kernwin.disasm_text_t.clear (method) - clear(self) +ida_kernwin.disasm_text_t.capacity(self) -> "size_t" -ida_kernwin.disasm_text_t.empty (method) - empty(self) -> bool +ida_kernwin.disasm_text_t.clear(self) -> None -ida_kernwin.disasm_text_t.end (method) - end(self) -> disasm_line_t +ida_kernwin.disasm_text_t.empty(self) -> bool -ida_kernwin.disasm_text_t.erase (method) - erase(self, it) -> disasm_line_t - - @param it: qvector< disasm_line_t >::iterator - - erase(self, first, last) -> disasm_line_t - - @param first: qvector< disasm_line_t >::iterator - @param last: qvector< disasm_line_t >::iterator +ida_kernwin.disasm_text_t.end(self, *args) -> "qvector< disasm_line_t >::const_iterator" -ida_kernwin.disasm_text_t.extract (method) - extract(self) -> disasm_line_t +ida_kernwin.disasm_text_t.erase(self, *args) -> "qvector< disasm_line_t >::iterator" -ida_kernwin.disasm_text_t.grow (method) - grow(self, x=disasm_line_t()) - - @param x: disasm_line_t const & +ida_kernwin.disasm_text_t.extend(self, x: "disasm_text_t") -> None -ida_kernwin.disasm_text_t.inject (method) - inject(self, s, len) - - @param s: disasm_line_t * - @param len: size_t +ida_kernwin.disasm_text_t.extract(self) -> "disasm_line_t *" -ida_kernwin.disasm_text_t.insert (method) - insert(self, it, x) -> disasm_line_t - - @param it: qvector< disasm_line_t >::iterator - @param x: disasm_line_t const & +ida_kernwin.disasm_text_t.grow(self, *args) -> None -ida_kernwin.disasm_text_t.pop_back (method) - pop_back(self) +ida_kernwin.disasm_text_t.inject(self, s: "disasm_line_t", len: "size_t") -> None -ida_kernwin.disasm_text_t.push_back (method) - push_back(self, x) - - @param x: disasm_line_t const & - - push_back(self) -> disasm_line_t +ida_kernwin.disasm_text_t.insert(self, it: "disasm_line_t", x: "disasm_line_t") -> "qvector< disasm_line_t >::iterator" -ida_kernwin.disasm_text_t.qclear (method) - qclear(self) +ida_kernwin.disasm_text_t.pop_back(self) -> None -ida_kernwin.disasm_text_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_kernwin.disasm_text_t.push_back(self, *args) -> "disasm_line_t &" -ida_kernwin.disasm_text_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: disasm_line_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_kernwin.disasm_text_t.qclear(self) -> None -ida_kernwin.disasm_text_t.size (method) - size(self) -> size_t +ida_kernwin.disasm_text_t.reserve(self, cnt: "size_t") -> None -ida_kernwin.disasm_text_t.swap (method) - swap(self, r) - - @param r: qvector< disasm_line_t > & +ida_kernwin.disasm_text_t.resize(self, *args) -> None -ida_kernwin.disasm_text_t.truncate (method) - truncate(self) +ida_kernwin.disasm_text_t.size(self) -> "size_t" -ida_kernwin.display_copyright_warning (function) - display_copyright_warning() -> bool - Display copyright warning (ui_copywarn). - - @return: yes/no +ida_kernwin.disasm_text_t.swap(self, r: "disasm_text_t") -> None -ida_kernwin.display_widget (function) - display_widget(widget, options, dest_ctrl=None) - Display a widget, dock it if not done before - - @param widget: (C++: TWidget *) widget to display - @param options: (C++: uint32) Widget open flags - @param dest_ctrl: (C++: const char *) where to dock: if nullptr or invalid then use the active - docker if there is not create a new tab relative to current - active tab +ida_kernwin.disasm_text_t.truncate(self) -> None -ida_kernwin.ea2str (function) - ea2str(ea) -> str +ida_kernwin.display_copyright_warning() -> bool + Display copyright warning (ui_copywarn). + + @returns yes/no + +ida_kernwin.display_widget(widget: "TWidget *", options: int, dest_ctrl: str = None) -> None + Display a widget, dock it if not done before + + @param widget: widget to display + @param options: Widget open flags + @param dest_ctrl: where to dock: if nullptr or invalid then use the active docker if there is not create a new tab relative to current active tab + +ida_kernwin.ea2str(ea: ida_idaapi.ea_t) -> str Convert linear address to UTF-8 string. - - @param ea: (C++: ea_t) -ida_kernwin.ea_viewer_history_push_and_jump (function) - 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: (C++: TWidget *) ea viewer - @param ea: (C++: ea_t) jump destination - @param x: (C++: int) ,y: coords on screen - @param lnnum: (C++: int) desired line number of given address - @param lnnum: (C++: int) desired line number of given address +ida_kernwin.ea_viewer_history_push_and_jump(v: "TWidget *", ea: ida_idaapi.ea_t, x: int, y: int, lnnum: int) -> 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 + @param ea: jump destination + @param x: coords on screen + @param y: coords on screen + @param lnnum: desired line number of given address -ida_kernwin.enable_chooser_item_attrs (function) - 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_attrs - events 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 *) char const * - @param enable: (C++: bool) - @return: success +ida_kernwin.enable_chooser_item_attrs(chooser_caption: str, enable: bool) -> 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_attrs + events 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. + + @returns success -ida_kernwin.enumplace_t (class) - Proxy of C++ enumplace_t class. - -ida_kernwin.enumplace_t.__init__ (method) - -ida_kernwin.enumplace_t.bmask (variable) - enum member bitmask - -ida_kernwin.enumplace_t.idx (variable) - enum serial number - -ida_kernwin.enumplace_t.serial (variable) - enum member serial number - -ida_kernwin.enumplace_t.value (variable) - enum member value - -ida_kernwin.error (function) - error(format) +ida_kernwin.error(message) Display a fatal message in a message box and quit IDA @param format: message to print -ida_kernwin.execute_sync (function) - execute_sync(py_callable, reqf) -> int +ida_kernwin.execute_sync(callable, reqf) 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 py_callable: A python callable object, must return an integer value + @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 (function) - execute_ui_requests(py_list) -> bool +ida_kernwin.execute_ui_requests(callable_list) 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. @@ -43768,292 +29438,195 @@ ida_kernwin.execute_ui_requests (function) @note: A callable should return True if it wants to be called more than once. @return: Boolean. False if the list contains a non callable item -ida_kernwin.find_widget (function) - 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: (C++: const char *) title of tab, or window title if widget is not tabbed - @return: pointer to the TWidget, nullptr if none is found +ida_kernwin.find_widget(caption: str) -> "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 + @returns pointer to the TWidget, nullptr if none is found -ida_kernwin.formchgcbfa_close (function) - formchgcbfa_close(p_fa, close_normally) - - @param p_fa: size_t - @param close_normally: int +ida_kernwin.formchgcbfa_close(p_fa: "size_t", close_normally: int) -> None -ida_kernwin.formchgcbfa_enable_field (function) - formchgcbfa_enable_field(p_fa, fid, enable) -> bool - - @param p_fa: size_t - @param fid: int - @param enable: bool +ida_kernwin.formchgcbfa_enable_field(p_fa: "size_t", fid: int, enable: bool) -> bool -ida_kernwin.formchgcbfa_get_field_value (function) - formchgcbfa_get_field_value(p_fa, fid, ft, sz) -> PyObject * - - @param p_fa: size_t - @param fid: int - @param ft: int - @param sz: size_t +ida_kernwin.formchgcbfa_get_field_value(p_fa: "size_t", fid: int, ft: int, sz: "size_t") -> "PyObject *" -ida_kernwin.formchgcbfa_get_focused_field (function) - formchgcbfa_get_focused_field(p_fa) -> int - - @param p_fa: size_t +ida_kernwin.formchgcbfa_get_focused_field(p_fa: "size_t") -> int -ida_kernwin.formchgcbfa_move_field (function) - formchgcbfa_move_field(p_fa, fid, x, y, w, h) -> bool - - @param p_fa: size_t - @param fid: int - @param x: int - @param y: int - @param w: int - @param h: int +ida_kernwin.formchgcbfa_move_field(p_fa: "size_t", fid: int, x: int, y: int, w: int, h: int) -> bool -ida_kernwin.formchgcbfa_refresh_field (function) - formchgcbfa_refresh_field(p_fa, fid) - - @param p_fa: size_t - @param fid: int +ida_kernwin.formchgcbfa_refresh_field(p_fa: "size_t", fid: int) -> None -ida_kernwin.formchgcbfa_set_field_value (function) - formchgcbfa_set_field_value(p_fa, fid, ft, py_val) -> bool - - @param p_fa: size_t - @param fid: int - @param ft: int - @param py_val: PyObject * +ida_kernwin.formchgcbfa_set_field_value(p_fa: "size_t", fid: int, ft: int, py_val: "PyObject *") -> bool -ida_kernwin.formchgcbfa_set_focused_field (function) - formchgcbfa_set_focused_field(p_fa, fid) -> bool - - @param p_fa: size_t - @param fid: int +ida_kernwin.formchgcbfa_set_focused_field(p_fa: "size_t", fid: int) -> bool -ida_kernwin.formchgcbfa_show_field (function) - formchgcbfa_show_field(p_fa, fid, show) -> bool - - @param p_fa: size_t - @param fid: int - @param show: bool +ida_kernwin.formchgcbfa_show_field(p_fa: "size_t", fid: int, show: bool) -> bool -ida_kernwin.free_custom_icon (function) - free_custom_icon(icon_id) +ida_kernwin.free_custom_icon(icon_id) Frees an icon loaded with load_custom_icon() - @param icon_id: int + @param icon_id: The ID of the icon to free -ida_kernwin.gen_disasm_text (function) - gen_disasm_text(text, ea1, ea2, truncate_lines) - Generate disassembly text for a range. - - @param text: (C++: text_t &) result - @param ea1: (C++: ea_t) start address - @param ea2: (C++: ea_t) end address - @param truncate_lines: (C++: bool) (on idainfo::margin) +ida_kernwin.gen_disasm_text(text: "disasm_text_t", ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, truncate_lines: bool) -> None + Generate disassembly text for a range. + + @param text: result + @param ea1: start address + @param ea2: end address + @param truncate_lines: (on idainfo::margin) -ida_kernwin.get_action_checkable (function) - get_action_checkable(name) -> bool - Get an action's checkability (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success +ida_kernwin.get_action_checkable(name: str) -> "bool *" + Get an action's checkability (ui_get_action_attr). + + @param name: the action name + @returns success -ida_kernwin.get_action_checked (function) - get_action_checked(name) -> bool - Get an action's checked state (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success +ida_kernwin.get_action_checked(name: str) -> "bool *" + Get an action's checked state (ui_get_action_attr). + + @param name: the action name + @returns success -ida_kernwin.get_action_icon (function) - get_action_icon(name) -> bool - Get an action's icon (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success +ida_kernwin.get_action_icon(name: str) -> "int *" + Get an action's icon (ui_get_action_attr). + + @param name: the action name + @returns success -ida_kernwin.get_action_label (function) - get_action_label(name) -> str - Get an action's label (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success +ida_kernwin.get_action_label(name: str) -> str + Get an action's label (ui_get_action_attr). + + @param name: the action name + @returns success -ida_kernwin.get_action_shortcut (function) - get_action_shortcut(name) -> str - Get an action's shortcut (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success +ida_kernwin.get_action_shortcut(name: str) -> str + Get an action's shortcut (ui_get_action_attr). + + @param name: the action name + @returns success -ida_kernwin.get_action_state (function) - get_action_state(name) -> bool - Get an action's state (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success +ida_kernwin.get_action_state(name: str) -> "action_state_t *" + Get an action's state (ui_get_action_attr). + + @param name: the action name + @returns success -ida_kernwin.get_action_tooltip (function) - get_action_tooltip(name) -> str - Get an action's tooltip (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success +ida_kernwin.get_action_tooltip(name: str) -> str + Get an action's tooltip (ui_get_action_attr). + + @param name: the action name + @returns success -ida_kernwin.get_action_visibility (function) - get_action_visibility(name) -> bool - Get an action's visibility (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success +ida_kernwin.get_action_visibility(name: str) -> "bool *" + Get an action's visibility (ui_get_action_attr). + + @param name: the action name + @returns success -ida_kernwin.get_active_modal_widget (function) - 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 nullptr even if it is - currently shown. - - @return: TWidget * the active modal widget, or nullptr +ida_kernwin.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 nullptr even if it is currently shown. + + @returns TWidget * the active modal widget, or nullptr -ida_kernwin.get_addon_info (function) - 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 *) char const * - @param info: (C++: addon_info_t *) - @return: false if not found +ida_kernwin.get_addon_info(id: str, info: "addon_info_t") -> 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 + + @returns false if not found -ida_kernwin.get_addon_info_idx (function) - 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_addon_info_idx(index: int, info: "addon_info_t") -> 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 + + @returns false if index is out of range -ida_kernwin.get_chooser_data (function) - get_chooser_data(chooser_caption, n) -> [str, ...] - Get the text corresponding to the index N in the chooser data. Use -1 to get the - header. +ida_kernwin.get_chooser_data(title: str, n: int) -> List[str] + Get the text corresponding to the index N in the chooser data. + Use -1 to get the header. - See also get_chooser_rows(). - - @param chooser_caption: (C++: const char *) char const * - @param n: (C++: int) + @param title The chooser title + @return a list of strings, or None -ida_kernwin.get_chooser_obj (function) - get_chooser_obj(chooser_caption) -> void * +ida_kernwin.get_chooser_obj(chooser_caption: str) -> "void *" Get the underlying object of the specified chooser (ui_get_chooser_obj). + This attemps to find the choser by its title and, if found, returns the result of calling its chooser_base_t::get_chooser_obj() method. - This attemps to find the choser by its title and, if found, returns the result - of calling its chooser_base_t::get_chooser_obj() method. - - @note: This is object is chooser-specific. - - @param chooser_caption: (C++: const char *) char const * - @return: the object that was used to create the chooser + @returns the object that was used to create the chooser -ida_kernwin.get_chooser_rows (function) - get_chooser_rows(out, chooser_caption, what) -> bool - Get the chooser contents corresponding to the rows indicated by "what". - - @param out: (C++: chooser_row_info_vec_t *) A vector of chooser_row_info_t, one entry per returned row. - @param chooser_caption: (C++: const char *) The caption that identifies the desired chooser. - @param what: (C++: size_t) Either one of the GCRF_ flags, or a row index. - @return: Success. +ida_kernwin.get_chooser_rows(out: "chooser_row_info_vec_t", chooser_caption: str, what: "size_t") -> bool + Get the chooser contents corresponding to the rows indicated by "what". + + @param out: A vector of chooser_row_info_t, one entry per returned row. + @param chooser_caption: The caption that identifies the desired chooser. + @param what: Either one of the GCRF_ flags, or a row index. + @returns Success. -ida_kernwin.get_curline (function) - 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_curline() -> str + Get current line from the disassemble window (ui_get_curline). + + @returns cptr current line with the color codes (use tag_remove() to remove the color codes) -ida_kernwin.get_current_viewer (function) - get_current_viewer() -> TWidget * +ida_kernwin.get_current_viewer() -> "TWidget *" Get current ida viewer (idaview or custom viewer) (ui_get_current_viewer) -ida_kernwin.get_current_widget (function) - get_current_widget() -> TWidget * +ida_kernwin.get_current_widget() -> "TWidget *" Get a pointer to the current widget (ui_get_current_widget). -ida_kernwin.get_cursor (function) - get_cursor() -> bool - Get the cursor position on the screen (ui_get_cursor). - @note: coordinates are 0-based - +ida_kernwin.get_cursor() -> "int *, int *" + Get the cursor position on the screen (ui_get_cursor). + @retval true: pointers are filled @retval false: no disassembly window open -ida_kernwin.get_custom_viewer_curline (function) - 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 - +ida_kernwin.get_custom_viewer_curline(custom_viewer: "TWidget *", mouse: bool) -> str + Get current line of custom viewer (ui_get_custom_viewer_curline). The returned line contains color codes See also the more powerful get_custom_viewer_location() - @param custom_viewer: (C++: TWidget *) view - @param mouse: (C++: bool) mouse position (otherwise cursor position) - @return: pointer to contents of current line + @param custom_viewer: view + @param mouse: mouse position (otherwise cursor position) + @returns pointer to contents of current line -ida_kernwin.get_custom_viewer_location (function) - get_custom_viewer_location(out, custom_viewer, mouse=False) -> bool - Get the current location in a custom viewer (ui_get_custom_viewer_location_2). +ida_kernwin.get_custom_viewer_location(*args) -> bool + Get information about the current location in a listing - @param out: (C++: listing_location_t *) output structure to fill - @param custom_viewer: (C++: TWidget *) the listing widget - @param flags: (C++: uint32) or'ed combination of CVLF_* values - get_custom_viewer_location(out, custom_viewer, flags=0) -> bool + This function has the following signatures: - @param out: listing_location_t * - @param custom_viewer: TWidget * - @param flags: uint32 + 1. get_custom_viewer_location(out_entry: ida_moves.lochist_entry_t, widget: TWidget, mouse: bool=False) -> bool + 2. get_custom_viewer_location(out_entry: ida_kernwin.listing_location_t, widget: TWidget, flags: int=0) -> bool + + The 2nd form is a superset of the 1st, and retrieves + the text (and tags) of the text. -ida_kernwin.get_custom_viewer_place (function) - get_custom_viewer_place(custom_viewer, mouse) -> place_t +ida_kernwin.get_custom_viewer_place(custom_viewer: "TWidget *", mouse: bool) -> "int *, int *" Get current place in a custom viewer (ui_get_curplace). - See also the more complete get_custom_viewer_location() - @param custom_viewer: (C++: TWidget *) view - @param mouse: (C++: bool) mouse position (otherwise cursor position) + @param custom_viewer: view + @param mouse: mouse position (otherwise cursor position) -ida_kernwin.get_custom_viewer_place_xcoord (function) - get_custom_viewer_place_xcoord(custom_viewer, pline, pitem) -> int - Get the X position of the item, in the line - - @param custom_viewer: (C++: TWidget *) the widget - @param pline: (C++: const place_t *) a place corresponding to the line - @param pitem: (C++: const place_t *) a place corresponding to the item - @return: -1 if 'pitem' is not included in the line - -2 if 'pitem' points at the entire line - >= 0 for the X coordinate within the pline, where pitem points +ida_kernwin.get_custom_viewer_place_xcoord(custom_viewer: "TWidget *", pline: "place_t", pitem: "place_t") -> int + Get the X position of the item, in the line + + @param custom_viewer: the widget + @param pline: a place corresponding to the line + @param pitem: a place corresponding to the item + @retval -1: if 'pitem' is not included in the line + @retval -2: if 'pitem' points at the entire line + @retval >=: 0 for the X coordinate within the pline, where pitem points -ida_kernwin.get_ea_viewer_history_info (function) - get_ea_viewer_history_info(nback, nfwd, v) -> bool - Get information about what's in the history (ui_ea_viewer_history_info). - - @param nback: (C++: int *) number of available back steps - @param nfwd: (C++: int *) number of available forward steps - @param v: (C++: TWidget *) ea viewer +ida_kernwin.get_ea_viewer_history_info(nback: "int *", nfwd: "int *", v: "TWidget *") -> bool + Get information about what's in the history (ui_ea_viewer_history_info). + + @param nback: number of available back steps + @param nfwd: number of available forward steps + @param v: ea viewer @retval false: if the given ea viewer does not exist @retval true: otherwise -ida_kernwin.get_hexdump_ea (function) - get_hexdump_ea(hexdump_num) -> ea_t - Get the current address in a hex view. - - @param hexdump_num: (C++: int) number of hexview window +ida_kernwin.get_hexdump_ea(hexdump_num: int) -> ida_idaapi.ea_t + Get the current address in a hex view. + + @param hexdump_num: number of hexview window -ida_kernwin.get_highlight (function) - get_highlight(v, in_flags=0) -> (str, int) or None +ida_kernwin.get_highlight(v, flags = 0) Returns the currently highlighted identifier and flags @param v: The UI widget to operate on @@ -44061,1990 +29634,1225 @@ ida_kernwin.get_highlight (function) @return: a tuple (text, flags), or None if nothing is highlighted or in case of error. -ida_kernwin.get_icon_id_by_name (function) - get_icon_id_by_name(icon_name) -> int - Retrieve the id of the icon by name (ui_get_icon_id_by_name). - - @param icon_name: (C++: const char *) full name of the icon - @return: icon id +ida_kernwin.get_icon_id_by_name(icon_name: str) -> int + Retrieve the id of the icon by name (ui_get_icon_id_by_name). + + @param icon_name: full name of the icon + @returns icon id -ida_kernwin.get_kernel_version (function) - get_kernel_version() -> str +ida_kernwin.get_kernel_version() -> str Get IDA kernel version (in a string like "5.1"). -ida_kernwin.get_key_code (function) - get_key_code(keyname) -> ushort +ida_kernwin.get_key_code(keyname: str) -> "ushort" Get keyboard key code by its name (ui_get_key_code) - - @param keyname: (C++: const char *) char const * -ida_kernwin.get_navband_ea (function) - get_navband_ea(pixel) -> ea_t +ida_kernwin.get_last_widget(*args) -> "TWidget *" + Get last ida viewer (idaview or custom viewer) (ui_get_last_widget) + + @param mask: an OR'ed set of IWID_* to limit the search to + @returns the viewer, if found + +ida_kernwin.get_navband_ea(pixel: int) -> ida_idaapi.ea_t Translate the pixel position on the navigation band, into an address. - - @param pixel: (C++: int) -ida_kernwin.get_navband_pixel (function) - get_navband_pixel(ea) -> int +ida_kernwin.get_navband_pixel(ea) Maps an address, onto a pixel coordinate within the navigation band @param ea: The address to map @return: a list [pixel, is_vertical] -ida_kernwin.get_opnum (function) - get_opnum() -> int +ida_kernwin.get_opnum() -> int Get current operand number, -1 means no operand (ui_get_opnum) -ida_kernwin.get_output_curline (function) - get_output_curline(mouse) -> str - Get current line of output window (ui_get_output_curline). - - @param mouse: (C++: bool) current for mouse pointer? - @return: false if output contains no text +ida_kernwin.get_output_curline(mouse: bool) -> str + Get current line of output window (ui_get_output_curline). + + @param mouse: current for mouse pointer? + @returns false if output contains no text -ida_kernwin.get_output_cursor (function) - get_output_cursor() -> bool - Get coordinates of the output window's cursor (ui_get_output_cursor). - @note: coordinates are 0-based - @note: this function will succeed even if the output window is not visible - +ida_kernwin.get_output_cursor() -> "int *, int *" + Get coordinates of the output window's cursor (ui_get_output_cursor). + @retval false: the output window has been destroyed. @retval true: pointers are filled -ida_kernwin.get_output_selected_text (function) - get_output_selected_text() -> str - Returns selected text from output window (ui_get_output_selected_text). - - @return: true if there is a selection +ida_kernwin.get_output_selected_text() -> str + Returns selected text from output window (ui_get_output_selected_text). + + @returns true if there is a selection -ida_kernwin.get_place_class (function) - 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: (C++: int *) output flags (can be nullptr) - @param out_sdk_version: (C++: int *) sdk version the place was created with (can be nullptr) - @param id: (C++: int) place class ID - @return: the place_t template, or nullptr if not found +ida_kernwin.get_place_class(out_flags: "int *", out_sdk_version: "int *", id: int) -> "place_t const *" + Get information about a previously-registered place_t class. See also register_place_class(). + + @param out_flags: output flags (can be nullptr) + @param out_sdk_version: sdk version the place was created with (can be nullptr) + @param id: place class ID + @returns the place_t template, or nullptr if not found -ida_kernwin.get_place_class_id (function) - get_place_class_id(name) -> int - Get the place class ID for the place that has been registered as 'name'. - - @param name: (C++: const char *) the class name - @return: the place class ID, or -1 if not found +ida_kernwin.get_place_class_id(name: str) -> int + Get the place class ID for the place that has been registered as 'name'. + + @param name: the class name + @returns the place class ID, or -1 if not found -ida_kernwin.get_place_class_template (function) - get_place_class_template(id) -> place_t +ida_kernwin.get_place_class_template(id: int) -> "place_t const *" See get_place_class() + +ida_kernwin.get_registered_actions() -> List[str] + Get a list with the names of all currently-registered actions. - @param id: (C++: int) + @return the list of action names -ida_kernwin.get_registered_actions (function) - get_registered_actions() -> [str, ...] - Get a list of all currently-registered actions - -ida_kernwin.get_screen_ea (function) - get_screen_ea() -> ea_t +ida_kernwin.get_screen_ea() -> ida_idaapi.ea_t Get the address at the screen cursor (ui_screenea) -ida_kernwin.get_synced_group (function) - get_synced_group(w) -> synced_group_t - Get the group of widgets/registers this view is synchronized with - - @param w: (C++: const TWidget *) the widget - @return: the group of widgets/registers, or nullptr +ida_kernwin.get_synced_group(w: "TWidget const *") -> "synced_group_t const *" + Get the group of widgets/registers this view is synchronized with + + @param w: the widget + @returns the group of widgets/registers, or nullptr -ida_kernwin.get_tab_size (function) - get_tab_size(path) -> int - Get the size of a tab in spaces (ui_get_tab_size). - - @param path: (C++: const char *) the path of the source view for which the tab size is requested. +ida_kernwin.get_tab_size(path: str) -> 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 nullptr, the default size is returned. -ida_kernwin.get_user_input_event (function) - get_user_input_event(out) -> bool - Get the current user input event (mouse button press, key press, ...) It is - sometimes desirable to be able to tell when a certain situation happens (e.g., - 'view_curpos' gets triggered); this function exists to provide that context (GUI - version only) - - @param out: (C++: input_event_t *) the input event data - @return: false if we are not currently processing a user input event +ida_kernwin.get_user_input_event(out: "input_event_t") -> bool + Get the current user input event (mouse button press, key press, ...) It is sometimes desirable to be able to tell when a certain situation happens (e.g., 'view_curpos' gets triggered); this function exists to provide that context (GUI version only) + + @param out: the input event data + @returns false if we are not currently processing a user input event -ida_kernwin.get_user_strlist_options (function) - get_user_strlist_options(out) - - @param out: strwinsetup_t * +ida_kernwin.get_user_strlist_options(out: "strwinsetup_t *") -> None -ida_kernwin.get_view_renderer_type (function) - 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_view_renderer_type(v: "TWidget *") -> "tcc_renderer_type_t" + Get the type of renderer currently in use in the given view (ui_get_renderer_type) -ida_kernwin.get_viewer_place_type (function) - 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_place_type(viewer: "TWidget *") -> "tcc_place_type_t" + Get the type of place_t instances a viewer uses & creates (ui_get_viewer_place_type). -ida_kernwin.get_viewer_user_data (function) - get_viewer_user_data(viewer) -> void * +ida_kernwin.get_viewer_user_data(viewer: "TWidget *") -> "void *" Get the user data from a custom viewer (ui_get_viewer_user_data) - - @param viewer: (C++: TWidget *) -ida_kernwin.get_widget_title (function) - get_widget_title(widget) -> str +ida_kernwin.get_widget_title(widget: "TWidget *") -> str Get the TWidget's title (ui_get_widget_title). - - @param widget: (C++: TWidget *) -ida_kernwin.get_widget_type (function) - get_widget_type(widget) -> twidget_type_t +ida_kernwin.get_widget_type(widget: "TWidget *") -> "twidget_type_t" Get the type of the TWidget * (ui_get_widget_type). - - @param widget: (C++: TWidget *) -ida_kernwin.get_window_id (function) - get_window_id(name=None) -> void * - Get the system-specific window ID (GUI version only) - - @param name: (C++: const char *) name of the window (nullptr means the main IDA window) - @return: the low-level window ID +ida_kernwin.get_window_id(name: str = None) -> "void *" + Get the system-specific window ID (GUI version only) + + @param name: name of the window (nullptr means the main IDA window) + @returns the low-level window ID -ida_kernwin.hide_wait_box (function) - hide_wait_box() +ida_kernwin.hide_wait_box() -> None Hide the "Please wait dialog box". -ida_kernwin.idaplace_t (class) - Proxy of C++ idaplace_t class. +ida_kernwin.idaplace_t -ida_kernwin.idaplace_t.__init__ (method) +ida_kernwin.idaplace_t.__init__(self, *args, **kwargs) -ida_kernwin.idaplace_t.ea (variable) +ida_kernwin.idaplace_t.ea address -ida_kernwin.info (function) - info(format) - - @param format: char const * +ida_kernwin.info(*args) -> "ssize_t" -ida_kernwin.input_event_keyboard_data_t (class) - Proxy of C++ input_event_t::input_event_keyboard_data_t class. +ida_kernwin.input_event_keyboard_data_t -ida_kernwin.input_event_keyboard_data_t.__init__ (method) - __init__(self) -> input_event_keyboard_data_t +ida_kernwin.input_event_keyboard_data_t.__init__(self) -ida_kernwin.input_event_mouse_data_t (class) - Proxy of C++ input_event_t::input_event_mouse_data_t class. +ida_kernwin.input_event_mouse_data_t -ida_kernwin.input_event_mouse_data_t.__init__ (method) - __init__(self) -> input_event_mouse_data_t +ida_kernwin.input_event_mouse_data_t.__init__(self) -ida_kernwin.input_event_shortcut_data_t (class) - Proxy of C++ input_event_t::input_event_shortcut_data_t class. +ida_kernwin.input_event_shortcut_data_t -ida_kernwin.input_event_shortcut_data_t.__init__ (method) - __init__(self) -> input_event_shortcut_data_t +ida_kernwin.input_event_shortcut_data_t.__init__(self) -ida_kernwin.input_event_t (class) - Proxy of C++ input_event_t class. +ida_kernwin.input_event_t -ida_kernwin.input_event_t.__init__ (method) - __init__(self) -> input_event_t +ida_kernwin.input_event_t.__init__(self) -ida_kernwin.input_event_t._source_as_size (method) - _source_as_size(self) -> size_t +ida_kernwin.input_event_t._source_as_size(self) -> "size_t" -ida_kernwin.input_event_t._target_as_size (method) - _target_as_size(self) -> size_t +ida_kernwin.input_event_t._target_as_size(self) -> "size_t" -ida_kernwin.input_event_t.cb (variable) +ida_kernwin.input_event_t.cb size marker -ida_kernwin.input_event_t.get_source_QEvent (method) +ida_kernwin.input_event_t.get_source_QEvent(self) -ida_kernwin.input_event_t.get_target_QWidget (method) +ida_kernwin.input_event_t.get_target_QWidget(self) -ida_kernwin.input_event_t.kind (variable) +ida_kernwin.input_event_t.kind the kind of event -ida_kernwin.input_event_t.modifiers (variable) +ida_kernwin.input_event_t.modifiers current keyboard (and mouse) modifiers -ida_kernwin.input_event_t.source (variable) - the source event, should it be required for detailed inform (e.g., a QEvent in - the GUI version of IDA) +ida_kernwin.input_event_t.source + the source event, should it be required for detailed inform (e.g., a QEvent in the GUI version of IDA) -ida_kernwin.input_event_t.target (variable) +ida_kernwin.input_event_t.target the target widget -ida_kernwin.install_command_interpreter (function) - install_command_interpreter(py_obj) -> int +ida_kernwin.install_command_interpreter(py_obj: "PyObject *") -> int Install command line interpreter (ui_install_cli) - - @param py_obj: PyObject * -ida_kernwin.internal_register_place_class (function) - internal_register_place_class(tmplate, flags, owner, sdk_version) -> int - - @param tmplate: place_t const * - @param flags: int - @param owner: plugin_t const * - @param sdk_version: int +ida_kernwin.internal_register_place_class(tmplate: "place_t", flags: int, owner: "plugin_t const *", sdk_version: int) -> int -ida_kernwin.is_action_enabled (function) - is_action_enabled(s) -> bool +ida_kernwin.is_action_enabled(s: "action_state_t") -> bool Check if the given action state is one of AST_ENABLE*. - - @param s: (C++: action_state_t) enum action_state_t -ida_kernwin.is_chooser_widget (function) - is_chooser_widget(t) -> bool +ida_kernwin.is_chooser_widget(t: "twidget_type_t") -> bool Does the given widget type specify a chooser widget? - - @param t: (C++: twidget_type_t) -ida_kernwin.is_idaq (function) - is_idaq() -> bool +ida_kernwin.is_ida_library(path: "char *", pathsize: "size_t", handle: "void **") -> bool + +ida_kernwin.is_idaq() Returns True or False depending if IDAPython is hosted by IDAQ -ida_kernwin.is_idaview (function) - is_idaview(v) -> bool +ida_kernwin.is_idaview(v: "TWidget *") -> bool Is the given custom view an idaview? (ui_is_idaview) - - @param v: (C++: TWidget *) -ida_kernwin.is_msg_inited (function) - is_msg_inited() -> bool +ida_kernwin.is_msg_inited() -> bool Can we use msg() functions? -ida_kernwin.is_place_class_ea_capable (function) - is_place_class_ea_capable(id) -> bool +ida_kernwin.is_place_class_ea_capable(id: int) -> bool See get_place_class() + +ida_kernwin.is_refresh_requested(mask: "uint64") -> bool + Get a refresh request state + + @param mask: Window refresh flags + @returns the state (set or cleared) + +ida_kernwin.is_tif_cursor_footer(c: "tif_cursor_t") -> bool + +ida_kernwin.is_tif_cursor_header(c: "tif_cursor_t") -> bool + +ida_kernwin.is_tif_cursor_index(c: "tif_cursor_t") -> bool + +ida_kernwin.jobj_wrapper_t + +ida_kernwin.jobj_wrapper_t.__init__(self, *args, **kwargs) + +ida_kernwin.jobj_wrapper_t.get_dict(self) -> dict + Retrieve the contents of this object, as a dict - @param id: (C++: int) + @return a dict containing all kvp's in this object -ida_kernwin.is_refresh_requested (function) - is_refresh_requested(mask) -> bool - Get a refresh request state +ida_kernwin.jumpto(*args) -> bool + This function has the following signatures: - @param mask: (C++: uint64) Window refresh flags - @return: the state (set or cleared) - -ida_kernwin.is_tif_cursor_footer (function) - is_tif_cursor_footer(c) -> bool + 0. jumpto(ea: ida_idaapi.ea_t, opnum: int=-1, uijmp_flags: int=UIJMP_ACTIVATE) -> bool + 1. jumpto(custom_viewer: TWidget *, place: place_t *, x: int, y: int) -> bool - @param c: tif_cursor_t - -ida_kernwin.is_tif_cursor_header (function) - is_tif_cursor_header(c) -> bool + # 0: jumpto(ea: ida_idaapi.ea_t, opnum: int=-1, uijmp_flags: int=UIJMP_ACTIVATE) -> bool - @param c: tif_cursor_t - -ida_kernwin.is_tif_cursor_index (function) - is_tif_cursor_index(c) -> bool + Jump to the specified address (ui_jumpto). + + @returns success - @param c: tif_cursor_t - -ida_kernwin.jobj_wrapper_t (class) - Proxy of C++ jobj_wrapper_t class. - -ida_kernwin.jobj_wrapper_t.__init__ (method) - -ida_kernwin.jobj_wrapper_t.get_dict (method) - get_dict(self) -> dict - -ida_kernwin.jumpto (function) - jumpto(ea, opnum=-1, uijmp_flags=0x0001) -> bool - Set cursor position in custom ida viewer. + # 1: jumpto(custom_viewer: TWidget *, place: place_t *, x: int, y: int) -> bool - @param custom_viewer: (C++: TWidget *) view - @param place: (C++: place_t *) target position - @param uijmp_flags: int - - @return: success - jumpto(custom_viewer, place, x, y) -> bool - - @param custom_viewer: TWidget * - @param place: place_t * - @param x: int + Set cursor position in custom ida viewer. + + @returns success -ida_kernwin.l_compare2 (function) - l_compare2(t1, t2, ud) -> int - - @param t1: place_t const * - @param t2: place_t const * - @param ud: void * +ida_kernwin.l_compare2(t1: "place_t", t2: "place_t", ud: "void *") -> int -ida_kernwin.line_rendering_output_entries_refs_t (class) - Proxy of C++ qvector< line_rendering_output_entry_t * > class. +ida_kernwin.line_rendering_output_entries_refs_t -ida_kernwin.line_rendering_output_entries_refs_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< line_rendering_output_entry_t * > const & +ida_kernwin.line_rendering_output_entries_refs_t.__eq__(self, r: "line_rendering_output_entries_refs_t") -> bool -ida_kernwin.line_rendering_output_entries_refs_t.__getitem__ (method) - __getitem__(self, i) -> line_rendering_output_entry_t - - @param i: size_t +ida_kernwin.line_rendering_output_entries_refs_t.__getitem__(self, i: "size_t") -> "line_rendering_output_entry_t *const &" -ida_kernwin.line_rendering_output_entries_refs_t.__init__ (method) - __init__(self) -> line_rendering_output_entries_refs_t - __init__(self, x) -> line_rendering_output_entries_refs_t - - @param x: qvector< line_rendering_output_entry_t * > const & +ida_kernwin.line_rendering_output_entries_refs_t.__init__(self, *args) -ida_kernwin.line_rendering_output_entries_refs_t.__len__ (method) - __len__(self) -> size_t +ida_kernwin.line_rendering_output_entries_refs_t.__len__(self) -> "size_t" -ida_kernwin.line_rendering_output_entries_refs_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< line_rendering_output_entry_t * > const & +ida_kernwin.line_rendering_output_entries_refs_t.__ne__(self, r: "line_rendering_output_entries_refs_t") -> bool -ida_kernwin.line_rendering_output_entries_refs_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: line_rendering_output_entry_t *const & +ida_kernwin.line_rendering_output_entries_refs_t.__setitem__(self, i: "size_t", v: "line_rendering_output_entry_t") -> None -ida_kernwin.line_rendering_output_entries_refs_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: line_rendering_output_entry_t *const & +ida_kernwin.line_rendering_output_entries_refs_t._del(self, x: "line_rendering_output_entry_t") -> bool -ida_kernwin.line_rendering_output_entries_refs_t._internal_push_back (method) - _internal_push_back(self, e) - - Parameters - ---------- - e: line_rendering_output_entry_t * +ida_kernwin.line_rendering_output_entries_refs_t._internal_push_back(self, e: "line_rendering_output_entry_t") -> None -ida_kernwin.line_rendering_output_entries_refs_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: line_rendering_output_entry_t *const & +ida_kernwin.line_rendering_output_entries_refs_t.add_unique(self, x: "line_rendering_output_entry_t") -> bool -ida_kernwin.line_rendering_output_entries_refs_t.at (method) - at(self, _idx) -> line_rendering_output_entry_t - - @param _idx: size_t +ida_kernwin.line_rendering_output_entries_refs_t.append(self, x: "line_rendering_output_entry_t") -> None -ida_kernwin.line_rendering_output_entries_refs_t.begin (method) - begin(self) -> qvector< line_rendering_output_entry_t * >::iterator - begin(self) -> qvector< line_rendering_output_entry_t * >::const_iterator +ida_kernwin.line_rendering_output_entries_refs_t.at(self, _idx: "size_t") -> "line_rendering_output_entry_t *const &" -ida_kernwin.line_rendering_output_entries_refs_t.capacity (method) - capacity(self) -> size_t +ida_kernwin.line_rendering_output_entries_refs_t.begin(self, *args) -> "qvector< line_rendering_output_entry_t * >::const_iterator" -ida_kernwin.line_rendering_output_entries_refs_t.clear (method) - clear(self) +ida_kernwin.line_rendering_output_entries_refs_t.capacity(self) -> "size_t" -ida_kernwin.line_rendering_output_entries_refs_t.empty (method) - empty(self) -> bool +ida_kernwin.line_rendering_output_entries_refs_t.clear(self) -> None -ida_kernwin.line_rendering_output_entries_refs_t.end (method) - end(self) -> qvector< line_rendering_output_entry_t * >::iterator - end(self) -> qvector< line_rendering_output_entry_t * >::const_iterator +ida_kernwin.line_rendering_output_entries_refs_t.empty(self) -> bool -ida_kernwin.line_rendering_output_entries_refs_t.erase (method) - erase(self, it) -> qvector< line_rendering_output_entry_t * >::iterator - - @param it: qvector< line_rendering_output_entry_t * >::iterator - - erase(self, first, last) -> qvector< line_rendering_output_entry_t * >::iterator - - @param first: qvector< line_rendering_output_entry_t * >::iterator - @param last: qvector< line_rendering_output_entry_t * >::iterator +ida_kernwin.line_rendering_output_entries_refs_t.end(self, *args) -> "qvector< line_rendering_output_entry_t * >::const_iterator" -ida_kernwin.line_rendering_output_entries_refs_t.extract (method) - extract(self) -> line_rendering_output_entry_t ** +ida_kernwin.line_rendering_output_entries_refs_t.erase(self, *args) -> "qvector< line_rendering_output_entry_t * >::iterator" -ida_kernwin.line_rendering_output_entries_refs_t.find (method) - find(self, x) -> qvector< line_rendering_output_entry_t * >::iterator - - @param x: line_rendering_output_entry_t *const & - - find(self, x) -> qvector< line_rendering_output_entry_t * >::const_iterator - - @param x: line_rendering_output_entry_t *const & +ida_kernwin.line_rendering_output_entries_refs_t.extend(self, x: "line_rendering_output_entries_refs_t") -> None -ida_kernwin.line_rendering_output_entries_refs_t.has (method) - has(self, x) -> bool - - @param x: line_rendering_output_entry_t *const & +ida_kernwin.line_rendering_output_entries_refs_t.extract(self) -> "line_rendering_output_entry_t **" -ida_kernwin.line_rendering_output_entries_refs_t.inject (method) - inject(self, s, len) - - @param s: line_rendering_output_entry_t ** - @param len: size_t +ida_kernwin.line_rendering_output_entries_refs_t.find(self, *args) -> "qvector< line_rendering_output_entry_t * >::const_iterator" -ida_kernwin.line_rendering_output_entries_refs_t.insert (method) - insert(self, it, x) -> qvector< line_rendering_output_entry_t * >::iterator - - @param it: qvector< line_rendering_output_entry_t * >::iterator - @param x: line_rendering_output_entry_t *const & +ida_kernwin.line_rendering_output_entries_refs_t.has(self, x: "line_rendering_output_entry_t") -> bool -ida_kernwin.line_rendering_output_entries_refs_t.pop_back (method) - pop_back(self) +ida_kernwin.line_rendering_output_entries_refs_t.inject(self, s: "line_rendering_output_entry_t **", len: "size_t") -> None -ida_kernwin.line_rendering_output_entries_refs_t.push_back (method) - push_back(self, x) - - @param x: line_rendering_output_entry_t *const & - - push_back(self) -> line_rendering_output_entry_t *& +ida_kernwin.line_rendering_output_entries_refs_t.insert(self, it: "qvector< line_rendering_output_entry_t * >::iterator", x: "line_rendering_output_entry_t") -> "qvector< line_rendering_output_entry_t * >::iterator" -ida_kernwin.line_rendering_output_entries_refs_t.push_back (method) +ida_kernwin.line_rendering_output_entries_refs_t.pop_back(self) -> None -ida_kernwin.line_rendering_output_entries_refs_t.qclear (method) - qclear(self) +ida_kernwin.line_rendering_output_entries_refs_t.push_back(self, *args) -> "line_rendering_output_entry_t *&" -ida_kernwin.line_rendering_output_entries_refs_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_kernwin.line_rendering_output_entries_refs_t.push_back(self, e) -ida_kernwin.line_rendering_output_entries_refs_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: line_rendering_output_entry_t *const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_kernwin.line_rendering_output_entries_refs_t.qclear(self) -> None -ida_kernwin.line_rendering_output_entries_refs_t.size (method) - size(self) -> size_t +ida_kernwin.line_rendering_output_entries_refs_t.reserve(self, cnt: "size_t") -> None -ida_kernwin.line_rendering_output_entries_refs_t.swap (method) - swap(self, r) - - @param r: qvector< line_rendering_output_entry_t * > & +ida_kernwin.line_rendering_output_entries_refs_t.resize(self, *args) -> None -ida_kernwin.line_rendering_output_entries_refs_t.truncate (method) - truncate(self) +ida_kernwin.line_rendering_output_entries_refs_t.size(self) -> "size_t" -ida_kernwin.line_rendering_output_entry_t (class) - Proxy of C++ line_rendering_output_entry_t class. +ida_kernwin.line_rendering_output_entries_refs_t.swap(self, r: "line_rendering_output_entries_refs_t") -> None -ida_kernwin.line_rendering_output_entry_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: line_rendering_output_entry_t const & +ida_kernwin.line_rendering_output_entries_refs_t.truncate(self) -> None -ida_kernwin.line_rendering_output_entry_t.__init__ (method) - __init__(self, _line, _flags=0, _bg_color=0) -> line_rendering_output_entry_t - - @param _line: twinline_t const * - @param _flags: uint32 - @param _bg_color: bgcolor_t - - __init__(self, _line, _cpx, _nchars, _flags, _bg_color) -> line_rendering_output_entry_t - - @param _line: twinline_t const * - @param _cpx: int - @param _nchars: int - @param _flags: uint32 - @param _bg_color: bgcolor_t +ida_kernwin.line_rendering_output_entry_t -ida_kernwin.line_rendering_output_entry_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: line_rendering_output_entry_t const & +ida_kernwin.line_rendering_output_entry_t.__eq__(self, r: "line_rendering_output_entry_t") -> bool -ida_kernwin.line_rendering_output_entry_t.cpx (variable) +ida_kernwin.line_rendering_output_entry_t.__init__(self, *args) + +ida_kernwin.line_rendering_output_entry_t.__ne__(self, r: "line_rendering_output_entry_t") -> bool + +ida_kernwin.line_rendering_output_entry_t.cpx number of char to start from, valid if LROEF_CPS_RANGE -ida_kernwin.line_rendering_output_entry_t.flags (variable) +ida_kernwin.line_rendering_output_entry_t.flags line_rendering_output_entry_t flags -ida_kernwin.line_rendering_output_entry_t.is_bg_color_direct (method) - is_bg_color_direct(self) -> bool +ida_kernwin.line_rendering_output_entry_t.is_bg_color_direct(self) -> bool -ida_kernwin.line_rendering_output_entry_t.is_bg_color_empty (method) - is_bg_color_empty(self) -> bool +ida_kernwin.line_rendering_output_entry_t.is_bg_color_empty(self) -> bool -ida_kernwin.line_rendering_output_entry_t.is_bg_color_key (method) - is_bg_color_key(self) -> bool +ida_kernwin.line_rendering_output_entry_t.is_bg_color_key(self) -> bool -ida_kernwin.line_rendering_output_entry_t.nchars (variable) +ida_kernwin.line_rendering_output_entry_t.nchars chars count, valid if LROEF_CPS_RANGE -ida_kernwin.line_section_t (class) - Proxy of C++ line_section_t class. +ida_kernwin.line_section_t -ida_kernwin.line_section_t.__init__ (method) - __init__(self) -> line_section_t +ida_kernwin.line_section_t.__eq__(self, r: "line_section_t") -> bool -ida_kernwin.line_section_t.contains (method) - contains(self, x) -> bool - - @param x: cpidx_t +ida_kernwin.line_section_t.__init__(self) -ida_kernwin.line_section_t.is_closed (method) - is_closed(self) -> bool +ida_kernwin.line_section_t.__ne__(self, r: "line_section_t") -> bool -ida_kernwin.line_section_t.is_open (method) - is_open(self) -> bool +ida_kernwin.line_section_t.contains(self, x: "cpidx_t") -> bool -ida_kernwin.line_section_t.valid (method) - valid(self) -> bool +ida_kernwin.line_section_t.is_closed(self) -> bool -ida_kernwin.linearray_t (class) - Proxy of C++ linearray_t class. +ida_kernwin.line_section_t.is_open(self) -> bool -ida_kernwin.linearray_t.__init__ (method) - __init__(self, _ud) -> linearray_t - - @param _ud: void * +ida_kernwin.line_section_t.valid(self) -> bool -ida_kernwin.linearray_t.beginning (method) - beginning(self) -> bool +ida_kernwin.linearray_t + +ida_kernwin.linearray_t.__init__(self, _ud: "void *") + +ida_kernwin.linearray_t.beginning(self) -> bool Are we at the beginning? -ida_kernwin.linearray_t.down (method) - down(self) -> qstring const * - Get a line from down direction. place is ok BEFORE +ida_kernwin.linearray_t.down(self) -> str + Get a line from down direction. place is ok BEFORE + -ida_kernwin.linearray_t.ending (method) - ending(self) -> bool +ida_kernwin.linearray_t.ending(self) -> bool -ida_kernwin.linearray_t.get_bg_color (method) - get_bg_color(self) -> bgcolor_t - Get current background color. (the same behavior as with get_place(): good - before down() and after up()) +ida_kernwin.linearray_t.get_bg_color(self) -> "bgcolor_t" + Get current background color. (the same behavior as with get_place(): good before down() and after up()) + -ida_kernwin.linearray_t.get_dlnnum (method) - get_dlnnum(self) -> int - Get default line number. (the same behavior as with get_place(): good before - down() and after up()) +ida_kernwin.linearray_t.get_dlnnum(self) -> int + Get default line number. (the same behavior as with get_place(): good before down() and after up()) + -ida_kernwin.linearray_t.get_linecnt (method) - get_linecnt(self) -> int - Get number of lines for the current place. (the same behavior as with - get_place(): good before down() and after up()) +ida_kernwin.linearray_t.get_linecnt(self) -> int + Get number of lines for the current place. (the same behavior as with get_place(): good before down() and after up()) + -ida_kernwin.linearray_t.get_pfx_color (method) - get_pfx_color(self) -> bgcolor_t - Get current prefix color. (the same behavior as with get_place(): good before - down() and after up()) +ida_kernwin.linearray_t.get_pfx_color(self) -> "bgcolor_t" + Get current prefix color. (the same behavior as with get_place(): good before down() and after up()) + -ida_kernwin.linearray_t.get_place (method) - get_place(self) -> place_t - Get the current place. If called before down(), then returns place of line which - will be returned by down(). If called after up(), then returns place if line - returned by up(). +ida_kernwin.linearray_t.get_place(self) -> "place_t *" + Get the current place. If called before down(), then returns place of line which will be returned by down(). If called after up(), then returns place if line returned by up(). + -ida_kernwin.linearray_t.set_place (method) - set_place(self, new_at) -> int - Position the array. This function must be called before calling any other member - functions. +ida_kernwin.linearray_t.set_place(self, new_at: "place_t") -> int + Position the array. This function must be called before calling any other member functions. + linearray_t doesn't own place_t structures. The caller must take care of place_t objects. - linearray_t doesn't own place_t structures. The caller must take care of place_t - objects. - - @param new_at: (C++: const place_t *) new position of the array - @return: the delta of lines that the linearray_t had to adjust the place by. - For example, if the place_t has a lnnum of 5, but it turns out, upon generating - lines, - that the number of lines for that particular place is only 2, then 3 will be - returned. + @param new_at: new position of the array + @returns the delta of lines that the linearray_t had to adjust the place by. + For example, if the place_t has a lnnum of 5, but it turns out, upon generating lines, + that the number of lines for that particular place is only 2, then 3 will be returned. -ida_kernwin.linearray_t.set_userdata (method) - set_userdata(self, userd) +ida_kernwin.linearray_t.set_userdata(self, userd: "void *") -> None Change the user data. - - @param userd: (C++: void *) -ida_kernwin.linearray_t.up (method) - up(self) -> qstring const * - Get a line from up direction. place is ok AFTER +ida_kernwin.linearray_t.up(self) -> str + Get a line from up direction. place is ok AFTER + -ida_kernwin.linearray_t.userdata (method) - userdata(self) -> void * +ida_kernwin.linearray_t.userdata(self) -> "void *" Get pointer to user data. -ida_kernwin.lines_rendering_input_t (class) - Proxy of C++ lines_rendering_input_t class. +ida_kernwin.lines_rendering_input_t -ida_kernwin.lines_rendering_input_t.__init__ (method) - __init__(self) -> lines_rendering_input_t +ida_kernwin.lines_rendering_input_t.__init__(self) -ida_kernwin.lines_rendering_input_t.sections_lines (variable) +ida_kernwin.lines_rendering_input_t.sections_lines references to the lines that are used for rendering -ida_kernwin.lines_rendering_input_t.sync_group (variable) - the 'synced' group 'widget' (see ui_get_lines_rendering_info) belongs to, or - nullptr +ida_kernwin.lines_rendering_input_t.sync_group + the 'synced' group 'widget' (see ui_get_lines_rendering_info) belongs to, or nullptr -ida_kernwin.lines_rendering_output_t (class) - Proxy of C++ lines_rendering_output_t class. +ida_kernwin.lines_rendering_output_t -ida_kernwin.lines_rendering_output_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: lines_rendering_output_t const & +ida_kernwin.lines_rendering_output_t.__eq__(self, r: "lines_rendering_output_t") -> bool -ida_kernwin.lines_rendering_output_t.__init__ (method) - __init__(self) -> lines_rendering_output_t +ida_kernwin.lines_rendering_output_t.__init__(self) -ida_kernwin.lines_rendering_output_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: lines_rendering_output_t const & +ida_kernwin.lines_rendering_output_t.__ne__(self, r: "lines_rendering_output_t") -> bool -ida_kernwin.lines_rendering_output_t.clear (method) - clear(self) +ida_kernwin.lines_rendering_output_t.clear(self) -> None -ida_kernwin.lines_rendering_output_t.swap (method) - swap(self, r) - - @param r: lines_rendering_output_t & +ida_kernwin.lines_rendering_output_t.swap(self, r: "lines_rendering_output_t") -> None -ida_kernwin.listing_location_t (class) - Proxy of C++ listing_location_t class. +ida_kernwin.listing_location_t -ida_kernwin.listing_location_t.__init__ (method) - __init__(self) -> listing_location_t +ida_kernwin.listing_location_t.__init__(self) -ida_kernwin.load_custom_icon (function) - 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. - - Load an icon and return its id (ui_load_custom_icon). - - @return: icon id +ida_kernwin.load_custom_icon(file_name = None, data = None, format = None) + Load an icon from a file (ui_load_custom_icon_file). Also see load_custom_icon(const void *, unsigned int, const char *) + + @param file_name: path to file + @returns icon id -ida_kernwin.load_dbg_dbginfo (function) - load_dbg_dbginfo(path, li=None, base=BADADDR, verbose=False) -> bool - Load debugging information from a file. - - @param path: (C++: const char *) path to file - @param li: (C++: linput_t *) loader input. if nullptr, check DBG_NAME_KEY - @param base: (C++: ea_t) loading address - @param verbose: (C++: bool) dump status to message window +ida_kernwin.load_dbg_dbginfo(*args) -> bool + Load debugging information from a file. + + @param path: path to file + @param li: loader input. if nullptr, check DBG_NAME_KEY + @param base: loading address + @param verbose: dump status to message window -ida_kernwin.lookup_key_code (function) - lookup_key_code(key, shift, is_qt) -> ushort - Get shortcut code previously created by ui_get_key_code. - - @param key: (C++: int) key constant - @param shift: (C++: int) modifiers - @param is_qt: (C++: bool) are we using gui version? +ida_kernwin.lookup_key_code(key: int, shift: int, is_qt: bool) -> "ushort" + Get shortcut code previously created by ui_get_key_code. + + @param key: key constant + @param shift: modifiers + @param is_qt: are we using gui version? -ida_kernwin.mbox_internal (variable) +ida_kernwin.mbox_internal internal error -ida_kernwin.msg (function) - msg(o) -> int - Display an UTF-8 string in the message window +ida_kernwin.msg(message) + Display a message 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 + @param message: message to print -ida_kernwin.msg_activated (variable) - The message window is activated. +ida_kernwin.msg_activated + The message window is activated. + -ida_kernwin.msg_clear (function) - msg_clear() +ida_kernwin.msg_clear() -> None Clear the "Output" window. -ida_kernwin.msg_click (variable) - Click event. - - @retval 1: handled - @retval 0: not handled (invoke default handler) +ida_kernwin.msg_click + Click event. + -ida_kernwin.msg_closed (variable) - View closed. +ida_kernwin.msg_closed + View closed. + -ida_kernwin.msg_dblclick (variable) - Double click event. - - @retval 1: handled - @retval 0: not handled (invoke default handler) +ida_kernwin.msg_dblclick + Double click event. + -ida_kernwin.msg_deactivated (variable) - The message window is deactivated. +ida_kernwin.msg_deactivated + The message window is deactivated. + -ida_kernwin.msg_get_lines (function) - msg_get_lines(count=-1) -> [str, ...] - Retrieve the last 'count' lines from the output window, in reverse order (from - most recent, to least recent) - - @param count: (C++: int) The number of lines to retrieve. -1 means: all +ida_kernwin.msg_get_lines(count: int = -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 -ida_kernwin.msg_keydown (variable) - Key down event. - - @retval 1: handled - @retval 0: not handled (invoke default handler) +ida_kernwin.msg_keydown + Key down event. + -ida_kernwin.msg_save (function) - msg_save(path) -> bool - Save the "Output" window contents into a file - - @param path: (C++: qstring &) 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. - @return: success +ida_kernwin.msg_save(path: str) -> 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. + @returns success -ida_kernwin.nomem (function) - nomem(format) - - @param format: char const * +ida_kernwin.nomem(*args) -> None -ida_kernwin.open_bookmarks_window (function) - open_bookmarks_window(w) -> TWidget * - Open the bookmarks window (ui_open_builtin). - - @param w: (C++: TWidget *) The widget for which the bookmarks will open. For example, this can be - an IDAView, or Enums view, etc. - @return: pointer to resulting window +ida_kernwin.open_bookmarks_window(w: "TWidget *") -> "TWidget *" + Open the bookmarks window (ui_open_builtin). + + @param w: The widget for which the bookmarks will open. For example, this can be an IDAView, or Enums view, etc. + @returns pointer to resulting window -ida_kernwin.open_bpts_window (function) - open_bpts_window(ea) -> TWidget * - Open the breakpoints window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window +ida_kernwin.open_bpts_window(ea: ida_idaapi.ea_t) -> "TWidget *" + Open the breakpoints window (ui_open_builtin). + + @param ea: index of entry to select by default + @returns pointer to resulting window -ida_kernwin.open_calls_window (function) - 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_calls_window(ea: ida_idaapi.ea_t) -> "TWidget *" + Open the function calls window (ui_open_builtin). + + @returns pointer to resulting window -ida_kernwin.open_disasm_window (function) - open_disasm_window(window_title, ranges=None) -> TWidget * - Open a disassembly view (ui_open_builtin). - - @param window_title: (C++: const char *) title of view to open - @param ranges: (C++: const rangevec_t *) if != nullptr, then display a flow chart with the specified - ranges - @return: pointer to resulting window +ida_kernwin.open_disasm_window(window_title: str, ranges: "rangevec_t" = None) -> "TWidget *" + Open a disassembly view (ui_open_builtin). + + @param window_title: title of view to open + @param ranges: if != nullptr, then display a flow chart with the specified ranges + @returns pointer to resulting window -ida_kernwin.open_enums_window (function) - open_enums_window(const_id=BADADDR) -> TWidget * - Open the enums window (ui_open_builtin). - - @param const_id: (C++: tid_t) index of entry to select by default - @return: pointer to resulting window +ida_kernwin.open_exports_window(ea: ida_idaapi.ea_t) -> "TWidget *" + Open the exports window (ui_open_builtin). + + @param ea: index of entry to select by default + @returns pointer to resulting window -ida_kernwin.open_exports_window (function) - open_exports_window(ea) -> TWidget * - Open the exports window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window - -ida_kernwin.open_form (function) - Display a dockable modeless dialog box and return a handle to it. The modeless - form can be closed in the following ways: +ida_kernwin.open_form(*args) + Display a dockable modeless dialog box and return a handle to it. The modeless form can be closed in the following ways: * by pressing the small 'x' in the window title * by calling form_actions_t::close() from the form callback (form_actions_t) - @note: pressing the 'Yes/No/Cancel' buttons does not close the modeless form, - except if the form callback explicitly calls close(). - @return: handle to the form or nullptr. the handle can be used with TWidget - -ida_kernwin.open_frame_window (function) - open_frame_window(pfn, offset) -> TWidget * - Open the frame window for the given function (ui_open_builtin). - @param pfn: (C++: func_t *) function to analyze - @param offset: (C++: uval_t) offset where the cursor is placed - @return: pointer to resulting window if 'pfn' is a valid function and the window - was displayed, - nullptr otherwise - -ida_kernwin.open_funcs_window (function) - open_funcs_window(ea) -> TWidget * - Open the 'Functions' window (ui_open_builtin). - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window + @param form: dialog box as a string. see ask_form()/open_form() + @param flags: Widget open flags + @returns handle to the form or nullptr. the handle can be used with TWidget functions: close_widget()/activate_widget()/etc -ida_kernwin.open_hexdump_window (function) - open_hexdump_window(window_title) -> TWidget * - Open a hexdump view (ui_open_builtin). - - @param window_title: (C++: const char *) title of view to open - @return: pointer to resulting window +ida_kernwin.open_frame_window(pfn: "func_t *", offset: int) -> "TWidget *" + Open the frame window for the given function (ui_open_builtin). + + @param pfn: function to analyze + @param offset: offset where the cursor is placed + @returns pointer to resulting window if 'pfn' is a valid function and the window was displayed, + nullptr otherwise -ida_kernwin.open_imports_window (function) - open_imports_window(ea) -> TWidget * - Open the exports window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window +ida_kernwin.open_funcs_window(ea: ida_idaapi.ea_t) -> "TWidget *" + Open the 'Functions' window (ui_open_builtin). + + @param ea: index of entry to select by default + @returns pointer to resulting window -ida_kernwin.open_loctypes_window (function) - open_loctypes_window(ordinal, cursor=None) -> TWidget * - Open the local types window (ui_open_builtin). - - @param ordinal: (C++: int) ordinal of type to select by default - @param cursor: (C++: const tif_cursor_t *) cursor to the type member - @return: pointer to resulting window +ida_kernwin.open_hexdump_window(window_title: str) -> "TWidget *" + Open a hexdump view (ui_open_builtin). + + @param window_title: title of view to open + @returns pointer to resulting window -ida_kernwin.open_modules_window (function) - open_modules_window() -> TWidget * - Open the modules window (ui_open_builtin). - - @return: pointer to resulting window +ida_kernwin.open_imports_window(ea: ida_idaapi.ea_t) -> "TWidget *" + Open the exports window (ui_open_builtin). + + @param ea: index of entry to select by default + @returns pointer to resulting window -ida_kernwin.open_names_window (function) - open_names_window(ea) -> TWidget * - Open the names window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window +ida_kernwin.open_loctypes_window(ordinal: int, cursor: "tif_cursor_t const *" = None) -> "TWidget *" + Open the local types window (ui_open_builtin2). + + @param ordinal: ordinal of type to select by default + @param cursor: cursor to the type member + @returns pointer to resulting window -ida_kernwin.open_navband_window (function) - open_navband_window(ea, zoom) -> TWidget * - Open the navigation band window (ui_open_builtin). - - @param ea: (C++: ea_t) sets the address of the navband arrow - @param zoom: (C++: int) sets the navband zoom level - @return: pointer to resulting window +ida_kernwin.open_modules_window() -> "TWidget *" + Open the modules window (ui_open_builtin). + + @returns pointer to resulting window -ida_kernwin.open_notepad_window (function) - open_notepad_window() -> TWidget * - Open the notepad window (ui_open_builtin). - - @return: pointer to resulting window +ida_kernwin.open_names_window(ea: ida_idaapi.ea_t) -> "TWidget *" + Open the names window (ui_open_builtin). + + @param ea: index of entry to select by default + @returns pointer to resulting window -ida_kernwin.open_problems_window (function) - open_problems_window(ea) -> TWidget * - Open the problems window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window +ida_kernwin.open_navband_window(ea: ida_idaapi.ea_t, zoom: int) -> "TWidget *" + Open the navigation band window (ui_open_builtin). + + @param ea: sets the address of the navband arrow + @param zoom: sets the navband zoom level + @returns pointer to resulting window -ida_kernwin.open_segments_window (function) - open_segments_window(ea) -> TWidget * - Open the segments window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window +ida_kernwin.open_notepad_window() -> "TWidget *" + Open the notepad window (ui_open_builtin). + + @returns pointer to resulting window -ida_kernwin.open_segregs_window (function) - open_segregs_window(ea) -> TWidget * - Open the segment registers window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window +ida_kernwin.open_problems_window(ea: ida_idaapi.ea_t) -> "TWidget *" + Open the problems window (ui_open_builtin). + + @param ea: index of entry to select by default + @returns pointer to resulting window -ida_kernwin.open_selectors_window (function) - open_selectors_window() -> TWidget * - Open the selectors window (ui_open_builtin). - - @return: pointer to resulting window +ida_kernwin.open_segments_window(ea: ida_idaapi.ea_t) -> "TWidget *" + Open the segments window (ui_open_builtin). + + @param ea: index of entry to select by default + @returns pointer to resulting window -ida_kernwin.open_signatures_window (function) - open_signatures_window() -> TWidget * - Open the signatures window (ui_open_builtin). - - @return: pointer to resulting window +ida_kernwin.open_segregs_window(ea: ida_idaapi.ea_t) -> "TWidget *" + Open the segment registers window (ui_open_builtin). + + @param ea: index of entry to select by default + @returns pointer to resulting window -ida_kernwin.open_stack_window (function) - open_stack_window() -> TWidget * - Open the call stack window (ui_open_builtin). - - @return: pointer to resulting window +ida_kernwin.open_selectors_window() -> "TWidget *" + Open the selectors window (ui_open_builtin). + + @returns pointer to resulting window -ida_kernwin.open_strings_window (function) - open_strings_window(ea, selstart=BADADDR, selend=BADADDR) -> TWidget * - Open the 'Strings' window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @param selstart: (C++: ea_t) ,selend: only display strings that occur within this range - @param selend: (C++: ea_t) - @return: pointer to resulting window +ida_kernwin.open_signatures_window() -> "TWidget *" + Open the signatures window (ui_open_builtin). + + @returns pointer to resulting window -ida_kernwin.open_structs_window (function) - open_structs_window(id=BADADDR, offset=0) -> TWidget * - Open the structs window (ui_open_builtin). - - @param id: (C++: tid_t) index of entry to select by default - @param offset: (C++: uval_t) offset where the cursor is placed - @return: pointer to resulting window +ida_kernwin.open_stack_window() -> "TWidget *" + Open the call stack window (ui_open_builtin). + + @returns pointer to resulting window -ida_kernwin.open_threads_window (function) - open_threads_window() -> TWidget * - Open the threads window (ui_open_builtin). - - @return: pointer to resulting window +ida_kernwin.open_strings_window(*args) -> "TWidget *" + Open the 'Strings' window (ui_open_builtin). + + @param ea: index of entry to select by default + @param selstart: only display strings that occur within this range + @param selend: only display strings that occur within this range + @returns pointer to resulting window -ida_kernwin.open_tils_window (function) - open_tils_window() -> TWidget * - Open the type libraries window (ui_open_builtin). - - @return: pointer to resulting window +ida_kernwin.open_threads_window() -> "TWidget *" + Open the threads window (ui_open_builtin). + + @returns pointer to resulting window -ida_kernwin.open_trace_window (function) - open_trace_window() -> TWidget * - Open the tracing window (ui_open_builtin). - - @return: pointer to resulting window +ida_kernwin.open_til_view_window(tif: "tinfo_t", cursor: "tif_cursor_t const *" = None) -> "TWidget *" + Open the sub-til window (ui_open_builtin2). + + @param tif: tif to open + @param cursor: cursor to the type member + @returns pointer to resulting window -ida_kernwin.open_url (function) - open_url(url) +ida_kernwin.open_tils_window() -> "TWidget *" + Open the type libraries window (ui_open_builtin). + + @returns pointer to resulting window + +ida_kernwin.open_trace_window() -> "TWidget *" + Open the tracing window (ui_open_builtin). + + @returns pointer to resulting window + +ida_kernwin.open_url(url: str) -> None Open the given url (ui_open_url) + +ida_kernwin.open_xrefs_window(ea: ida_idaapi.ea_t) -> "TWidget *" + Open the cross references window (ui_open_builtin). + + @param ea: index of entry to select by default + @returns pointer to resulting window + +ida_kernwin.parse_tagged_line_sections(out: "tagged_line_sections_t", line: str) -> bool + Collect tagged sections in a color-tagged line (produced by `place_t::generate`) - @param url: (C++: const char *) char const * + @param out: sections storage + @param line: input line + @returns success -ida_kernwin.open_xrefs_window (function) - open_xrefs_window(ea) -> TWidget * - Open the cross references window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window +ida_kernwin.place_t -ida_kernwin.place_t (class) - Proxy of C++ place_t class. +ida_kernwin.place_t.__init__(self, *args, **kwargs) -ida_kernwin.place_t.__init__ (method) +ida_kernwin.place_t._print(self, ud: "void *") -> None -ida_kernwin.place_t._print (method) - _print(self, ud) - - Parameters - ---------- - ud: void * +ida_kernwin.place_t.adjust(self, ud: "void *") -> None + Adjust the current location to point to a displayable object. This function validates the location and makes sure that it points to an existing object. For example, if the location points to the middle of an instruction, it will be adjusted to point to the beginning of the instruction. + + @param ud: pointer to user-defined context data. Is supplied by linearray_t -ida_kernwin.place_t.adjust (method) - adjust(self, ud) - Adjust the current location to point to a displayable object. This function - validates the location and makes sure that it points to an existing object. For - example, if the location points to the middle of an instruction, it will be - adjusted to point to the beginning of the instruction. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t +ida_kernwin.place_t.as_idaplace_t(p: "place_t") -> "idaplace_t *" -ida_kernwin.place_t.as_enumplace_t (method) - as_enumplace_t(p) -> enumplace_t - - @param p: place_t * +ida_kernwin.place_t.as_simpleline_place_t(p: "place_t") -> "simpleline_place_t *" -ida_kernwin.place_t.as_idaplace_t (method) - as_idaplace_t(p) -> idaplace_t - - @param p: place_t * +ida_kernwin.place_t.as_tiplace_t(p: "place_t") -> "tiplace_t *" -ida_kernwin.place_t.as_simpleline_place_t (method) - as_simpleline_place_t(p) -> simpleline_place_t - - @param p: place_t * +ida_kernwin.place_t.beginning(self, ud: "void *") -> bool + Are we at the first displayable object?. + + @param ud: pointer to user-defined context data. Is supplied by linearray_t + @returns true if the current location points to the first displayable object -ida_kernwin.place_t.as_structplace_t (method) - as_structplace_t(p) -> structplace_t - - @param p: place_t * +ida_kernwin.place_t.clone(self) -> "place_t *" + Clone the location. + + @returns a pointer to a copy of the current location in dynamic memory -ida_kernwin.place_t.as_tiplace_t (method) - as_tiplace_t(p) -> tiplace_t - - @param p: place_t * - -ida_kernwin.place_t.beginning (method) - beginning(self, ud) -> bool - Are we at the first displayable object?. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - @return: true if the current location points to the first displayable object - -ida_kernwin.place_t.clone (method) - clone(self) -> place_t - Clone the location. - - @return: a pointer to a copy of the current location in dynamic memory - -ida_kernwin.place_t.compare (method) - compare(self, t2) -> int +ida_kernwin.place_t.compare(self, t2: "place_t") -> int Deprecated. Please consider compare2(const place_t *, void *) instead. - - @param t2: (C++: const place_t *) place_t const * -ida_kernwin.place_t.compare2 (method) - compare2(self, t2, arg3) -> int - Compare two locations except line numbers (lnnum). This function is used to - organize loops. For example, if the user has selected an range, its boundaries - are remembered as location objects. Any operation within the selection will have - the following look: for ( loc=starting_location; loc < ending_location; - loc.next() ) In this loop, the comparison function is used. - - @param t2: (C++: const place_t *) the place to compare this one to. - @param arg3: void * +ida_kernwin.place_t.compare2(self, t2: "place_t", arg3: "void *") -> int + Compare two locations except line numbers (lnnum). This function is used to organize loops. For example, if the user has selected an range, its boundaries are remembered as location objects. Any operation within the selection will have the following look: for ( loc=starting_location; loc < ending_location; loc.next() ) In this loop, the comparison function is used. + + @param t2: the place to compare this one to. + @retval -1: if the current location is less than 't2' + @retval 0: if the current location is equal to than 't2' + @retval 1: if the current location is greater than 't2' -ida_kernwin.place_t.copyfrom (method) - copyfrom(self, _from) +ida_kernwin.place_t.copyfrom(self, _from: "place_t") -> None Copy the specified location object to the current object. - - @param from: (C++: const place_t *) place_t const * -ida_kernwin.place_t.deserialize (method) - deserialize(self, _in) -> bool - De-serialize into this instance. 'pptr' should be incremented by as many bytes - as de-serialization consumed. - - @param pptr: (C++: const uchar **) pointer to a serialized representation of a place_t of this type. - @return: whether de-serialization was successful +ida_kernwin.place_t.deserialize(self, _in: "bytevec_t const &") -> bool + De-serialize into this instance. 'pptr' should be incremented by as many bytes as de-serialization consumed. + + @returns whether de-serialization was successful -ida_kernwin.place_t.ending (method) - ending(self, ud) -> bool - Are we at the last displayable object?. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - @return: true if the current location points to the last displayable object +ida_kernwin.place_t.ending(self, ud: "void *") -> bool + Are we at the last displayable object?. + + @param ud: pointer to user-defined context data. Is supplied by linearray_t + @returns true if the current location points to the last displayable object -ida_kernwin.place_t.enter (method) - enter(self, arg2) -> place_t - Visit this place, possibly 'unhiding' a section of text. If entering that place - required some expanding, a place_t should be returned that represents that - section, plus some flags for later use by 'leave()'. - - @param out_flags: flags to be used together with the place_t that is returned, - in order to restore the section to its original state when - leave() is called. - @return: a place_t corresponding to the beginning of the section of text that - had to be expanded. That place_t's leave() will be called with the - flags contained in 'out_flags' when the user navigates away from it. +ida_kernwin.place_t.enter(self, arg2: "uint32 *") -> "place_t *" + Visit this place, possibly 'unhiding' a section of text. If entering that place required some expanding, a place_t should be returned that represents that section, plus some flags for later use by 'leave()'. + + @returns a place_t corresponding to the beginning of the section of text that had to be expanded. That place_t's leave() will be called with the flags contained in 'out_flags' when the user navigates away from it. -ida_kernwin.place_t.generate (method) - generate(self, ud, maxsize) -> ([str, ...], int, int, int) +ida_kernwin.place_t.generate(self, ud, maxsize: int) -> Tuple[List[str], int, int, int] Generate text lines for the current location. - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - @param maxsize: (C++: int) the maximum number of lines to generate - @return: number of generated lines + @param ud The user data object + @param maxsize The maximum number of lines to generate + @return a tuple (lines-of-text, default-line-number, prefix-color, background-color) -ida_kernwin.place_t.id (method) - id(self) -> int - Get the place's ID (i.e., the value returned by register_place_class()) - - @return: the id +ida_kernwin.place_t.id(self) -> int + Get the place's ID (i.e., the value returned by register_place_class()) + + @returns the id -ida_kernwin.place_t.leave (method) - leave(self, arg2) - Leave this place, possibly 'hiding' a section of text that was previously - expanded (at enter()-time.) - - @param arg2: uint32 +ida_kernwin.place_t.leave(self, arg2: int) -> None + Leave this place, possibly 'hiding' a section of text that was previously expanded (at enter()-time.) + -ida_kernwin.place_t.lnnum (variable) +ida_kernwin.place_t.lnnum Number of line within the current object. -ida_kernwin.place_t.makeplace (method) - makeplace(self, ud, x, lnnum) -> place_t - Map a number to a location. When the user clicks on the scrollbar and drags it, - we need to determine the location corresponding to the new scrollbar position. - This function is used to determine it. It builds a location object for the - specified 'x' and returns a pointer to it. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - @param x: (C++: uval_t) number to map - @param lnnum: (C++: int) line number to initialize 'lnnum' - @return: a freshly allocated object. See also PCF_MAKEPLACE_ALLOCATES +ida_kernwin.place_t.makeplace(self, ud: "void *", x: int, lnnum: int) -> "place_t *" + Map a number to a location. When the user clicks on the scrollbar and drags it, we need to determine the location corresponding to the new scrollbar position. This function is used to determine it. It builds a location object for the specified 'x' and returns a pointer to it. + + @param ud: pointer to user-defined context data. Is supplied by linearray_t + @param x: number to map + @param lnnum: line number to initialize 'lnnum' + @returns a freshly allocated object. See also PCF_MAKEPLACE_ALLOCATES -ida_kernwin.place_t.name (method) - name(self) -> char const * - Get this place type name. All instances of a given class must return the same - string. - - @return: the place type name. Please try and pick something that is not too - generic, as it might clash w/ other plugins. A good practice is to - prefix the class name with the name of your plugin. E.g., - "myplugin:srcplace_t". +ida_kernwin.place_t.name(self) -> str + Get this place type name. All instances of a given class must return the same string. + + @returns the place type name. Please try and pick something that is not too generic, as it might clash w/ other plugins. A good practice is to prefix the class name with the name of your plugin. E.g., "myplugin:srcplace_t". -ida_kernwin.place_t.next (method) - next(self, ud) -> bool - Move to the next displayable location. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - @return: success +ida_kernwin.place_t.next(self, ud: "void *") -> bool + Move to the next displayable location. + + @param ud: pointer to user-defined context data. Is supplied by linearray_t + @returns success -ida_kernwin.place_t.prev (method) - prev(self, ud) -> bool - Move to the previous displayable location. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - @return: success +ida_kernwin.place_t.prev(self, ud: "void *") -> bool + Move to the previous displayable location. + + @param ud: pointer to user-defined context data. Is supplied by linearray_t + @returns success -ida_kernwin.place_t.rebase (method) - rebase(self, arg2) -> bool - Rebase the place instance - - @param arg2: segm_move_infos_t const & - @return: true if place was rebased, false otherwise +ida_kernwin.place_t.rebase(self, arg2: "segm_move_infos_t const &") -> bool + Rebase the place instance + + @returns true if place was rebased, false otherwise -ida_kernwin.place_t.serialize (method) - serialize(self) - Serialize this instance. It is fundamental that all instances of a particular - subclass of of place_t occupy the same number of bytes when serialized. +ida_kernwin.place_t.serialize(self) -> None + Serialize this instance. It is fundamental that all instances of a particular subclass of of place_t occupy the same number of bytes when serialized. + -ida_kernwin.place_t.toea (method) - toea(self) -> ea_t - Map the location to an ea_t. - - @return: the corresponding ea_t, or BADADDR; +ida_kernwin.place_t.toea(self) -> ida_idaapi.ea_t + Map the location to an ea_t. + + @returns the corresponding ea_t, or BADADDR; -ida_kernwin.place_t.touval (method) - touval(self, ud) -> uval_t - Map the location to a number. This mapping is used to draw the vertical - scrollbar. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t +ida_kernwin.place_t.touval(self, ud: "void *") -> int + Map the location to a number. This mapping is used to draw the vertical scrollbar. + + @param ud: pointer to user-defined context data. Is supplied by linearray_t -ida_kernwin.place_t_as_enumplace_t (function) - place_t_as_enumplace_t(p) -> enumplace_t - - @param p: place_t * +ida_kernwin.plgform_close(py_link: "PyObject *", options: int) -> None -ida_kernwin.place_t_as_idaplace_t (function) - place_t_as_idaplace_t(p) -> idaplace_t - - @param p: place_t * +ida_kernwin.plgform_get_widget(py_link: "PyObject *") -> "TWidget *" -ida_kernwin.place_t_as_simpleline_place_t (function) - place_t_as_simpleline_place_t(p) -> simpleline_place_t - - @param p: place_t * +ida_kernwin.plgform_new() -> "PyObject *" -ida_kernwin.place_t_as_structplace_t (function) - place_t_as_structplace_t(p) -> structplace_t - - @param p: place_t * +ida_kernwin.plgform_show(*args) -> bool -ida_kernwin.place_t_as_tiplace_t (function) - place_t_as_tiplace_t(p) -> tiplace_t - - @param p: place_t * - -ida_kernwin.plgform_close (function) - plgform_close(py_link, options) - - @param py_link: PyObject * - @param options: int - -ida_kernwin.plgform_get_widget (function) - plgform_get_widget(py_link) -> TWidget * - - @param py_link: PyObject * - -ida_kernwin.plgform_new (function) - plgform_new() -> PyObject * - -ida_kernwin.plgform_show (function) - plgform_show(py_link, py_obj, caption, options=(0x0040 << 16)|0x00000004u) -> bool - - @param py_link: PyObject * - @param py_obj: PyObject * - @param caption: char const * - @param options: int - -ida_kernwin.process_ui_action (function) - process_ui_action(name, flags=0) -> bool +ida_kernwin.process_ui_action(name: str, flags: int = 0) Invokes an IDA UI action by name - @param name: action name - @param flags: int + @param name: action name + @param flags: reserved @return: Boolean -ida_kernwin.py_chooser_base_t_get_row (function) - py_chooser_base_t_get_row(chobj, n) -> PyObject * - - @param chobj: chooser_base_t const * - @param n: size_t +ida_kernwin.prompt_function_prototype(out_tif: "tinfo_t", pfn: "func_t *", tif: "tinfo_t", name: str) -> str + Open function prototype editor to edit function type and create new type. Allows to change the function prototype either in the "old" one-liner mode or in the new multi-line editor, which supports shortcuts, etc. Note: changes will not apply! It is the caller's job to apply the resulting out_tif. Parameters: + + @param out_tif: - (tinfo_t *) tif for created type + @param pfn: - (func_t *) editing function + @param tif: - (tinfo_t *) current function type + @param name: - (const char *) function name + @returns true if new type created successfully -ida_kernwin.py_get_ask_form (function) - py_get_ask_form() -> size_t +ida_kernwin.py_chooser_base_t_get_row(chobj: "chooser_base_t", n: "size_t") -> "PyObject *" -ida_kernwin.py_get_open_form (function) - py_get_open_form() -> size_t +ida_kernwin.py_get_ask_form() -> "size_t" -ida_kernwin.py_load_custom_icon_data (function) - py_load_custom_icon_data(data, format) -> int - - @param data: PyObject * - @param format: char const * +ida_kernwin.py_get_open_form() -> "size_t" -ida_kernwin.py_load_custom_icon_fn (function) - py_load_custom_icon_fn(filename) -> int - - @param filename: char const * +ida_kernwin.py_load_custom_icon_data(data: "PyObject *", format: str) -> int -ida_kernwin.py_register_compiled_form (function) - py_register_compiled_form(py_form) - - @param py_form: PyObject * +ida_kernwin.py_load_custom_icon_fn(filename: str) -> int -ida_kernwin.py_unregister_compiled_form (function) - py_unregister_compiled_form(py_form) - - @param py_form: PyObject * +ida_kernwin.py_register_compiled_form(py_form: "PyObject *") -> None -ida_kernwin.pyidag_bind (function) - pyidag_bind(_self) -> bool - - @param self: PyObject * +ida_kernwin.py_unregister_compiled_form(py_form: "PyObject *") -> None -ida_kernwin.pyidag_unbind (function) - pyidag_unbind(_self) -> bool - - @param self: PyObject * +ida_kernwin.pyidag_bind(_self: "PyObject *") -> bool -ida_kernwin.pyscv_add_line (function) - pyscv_add_line(py_this, py_sl) -> bool - - @param py_this: PyObject * - @param py_sl: PyObject * +ida_kernwin.pyidag_unbind(_self: "PyObject *") -> bool -ida_kernwin.pyscv_clear_lines (function) - pyscv_clear_lines(py_this) -> PyObject * - - @param py_this: PyObject * +ida_kernwin.pyscv_add_line(py_this: "PyObject *", py_sl: "PyObject *") -> bool -ida_kernwin.pyscv_close (function) - pyscv_close(py_this) - - @param py_this: PyObject * +ida_kernwin.pyscv_clear_lines(py_this: "PyObject *") -> "PyObject *" -ida_kernwin.pyscv_count (function) - pyscv_count(py_this) -> size_t - - @param py_this: PyObject * +ida_kernwin.pyscv_close(py_this: "PyObject *") -> None -ida_kernwin.pyscv_del_line (function) - pyscv_del_line(py_this, nline) -> bool - - @param py_this: PyObject * - @param nline: size_t +ida_kernwin.pyscv_count(py_this: "PyObject *") -> "size_t" -ida_kernwin.pyscv_edit_line (function) - pyscv_edit_line(py_this, nline, py_sl) -> bool - - @param py_this: PyObject * - @param nline: size_t - @param py_sl: PyObject * +ida_kernwin.pyscv_del_line(py_this: "PyObject *", nline: "size_t") -> bool -ida_kernwin.pyscv_get_current_line (function) - pyscv_get_current_line(py_this, mouse, notags) -> PyObject * - - @param py_this: PyObject * - @param mouse: bool - @param notags: bool +ida_kernwin.pyscv_edit_line(py_this: "PyObject *", nline: "size_t", py_sl: "PyObject *") -> bool -ida_kernwin.pyscv_get_current_word (function) - pyscv_get_current_word(py_this, mouse) -> PyObject * - - @param py_this: PyObject * - @param mouse: bool +ida_kernwin.pyscv_get_current_line(py_this: "PyObject *", mouse: bool, notags: bool) -> "PyObject *" -ida_kernwin.pyscv_get_line (function) - pyscv_get_line(py_this, nline) -> PyObject * - - @param py_this: PyObject * - @param nline: size_t +ida_kernwin.pyscv_get_current_word(py_this: "PyObject *", mouse: bool) -> "PyObject *" -ida_kernwin.pyscv_get_pos (function) - pyscv_get_pos(py_this, mouse) -> PyObject * - - @param py_this: PyObject * - @param mouse: bool +ida_kernwin.pyscv_get_line(py_this: "PyObject *", nline: "size_t") -> "PyObject *" -ida_kernwin.pyscv_get_selection (function) - pyscv_get_selection(py_this) -> PyObject * - - @param py_this: PyObject * +ida_kernwin.pyscv_get_pos(py_this: "PyObject *", mouse: bool) -> "PyObject *" -ida_kernwin.pyscv_get_widget (function) - pyscv_get_widget(py_this) -> TWidget * - - @param py_this: PyObject * +ida_kernwin.pyscv_get_selection(py_this: "PyObject *") -> "PyObject *" -ida_kernwin.pyscv_init (function) - pyscv_init(py_link, title) -> PyObject * - - @param py_link: PyObject * - @param title: char const * +ida_kernwin.pyscv_get_widget(py_this: "PyObject *") -> "TWidget *" -ida_kernwin.pyscv_insert_line (function) - pyscv_insert_line(py_this, nline, py_sl) -> bool - - @param py_this: PyObject * - @param nline: size_t - @param py_sl: PyObject * +ida_kernwin.pyscv_init(py_link: "PyObject *", title: str) -> "PyObject *" -ida_kernwin.pyscv_is_focused (function) - pyscv_is_focused(py_this) -> bool - - @param py_this: PyObject * +ida_kernwin.pyscv_insert_line(py_this: "PyObject *", nline: "size_t", py_sl: "PyObject *") -> bool -ida_kernwin.pyscv_jumpto (function) - pyscv_jumpto(py_this, ln, x, y) -> bool - - @param py_this: PyObject * - @param ln: size_t - @param x: int - @param y: int +ida_kernwin.pyscv_is_focused(py_this: "PyObject *") -> bool -ida_kernwin.pyscv_patch_line (function) - pyscv_patch_line(py_this, nline, offs, value) -> bool - - @param py_this: PyObject * - @param nline: size_t - @param offs: size_t - @param value: int +ida_kernwin.pyscv_jumpto(py_this: "PyObject *", ln: "size_t", x: int, y: int) -> bool -ida_kernwin.pyscv_refresh (function) - pyscv_refresh(py_this) -> bool - - @param py_this: PyObject * +ida_kernwin.pyscv_patch_line(py_this: "PyObject *", nline: "size_t", offs: "size_t", value: int) -> bool -ida_kernwin.pyscv_show (function) - pyscv_show(py_this) -> bool - - @param py_this: PyObject * +ida_kernwin.pyscv_refresh(py_this: "PyObject *") -> bool -ida_kernwin.qcleanline (function) - qcleanline(cmt_char='\0', flags=((1 << 0)|(1 << 1))|(1 << 2)) -> str - Performs some cleanup operations to a line. - - @param cmt_char: (C++: 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 - @param flags: (C++: uint32) a combination of line cleanup flags. defaults to CLNL_TRIM - @return: length of line +ida_kernwin.pyscv_show(py_this: "PyObject *") -> bool -ida_kernwin.quick_widget_commands_t (class) +ida_kernwin.qcleanline(*args) -> str + Performs some cleanup operations to a line. + + @param buf: string to modify + @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 + @param flags: a combination of line cleanup flags. defaults to CLNL_TRIM + @returns length of line -ida_kernwin.quick_widget_commands_t.__init__ (method) +ida_kernwin.quick_widget_commands_t -ida_kernwin.quick_widget_commands_t._ah_t (class) +ida_kernwin.quick_widget_commands_t.__init__(self, callback) -ida_kernwin.quick_widget_commands_t._ah_t.__init__ (method) +ida_kernwin.quick_widget_commands_t._ah_t -ida_kernwin.quick_widget_commands_t._ah_t.activate (method) +ida_kernwin.quick_widget_commands_t._ah_t.__init__(self, parent, cmd_id) -ida_kernwin.quick_widget_commands_t._ah_t.update (method) +ida_kernwin.quick_widget_commands_t._ah_t.activate(self, ctx) -ida_kernwin.quick_widget_commands_t._cmd_t (class) +ida_kernwin.quick_widget_commands_t._ah_t.update(self, ctx) -ida_kernwin.quick_widget_commands_t._cmd_t.__init__ (method) +ida_kernwin.quick_widget_commands_t._cmd_t -ida_kernwin.quick_widget_commands_t.add (method) +ida_kernwin.quick_widget_commands_t._cmd_t.__init__(self, caption, flags, menu_index, icon, emb, shortcut) -ida_kernwin.quick_widget_commands_t.populate_popup (method) +ida_kernwin.quick_widget_commands_t.add(self, caption, flags, menu_index, icon, emb, shortcut) -ida_kernwin.read_range_selection (function) - read_range_selection(v) -> bool - Get the address range for the selected range boundaries, this is the convenient - function for read_selection() - - @param v: (C++: TWidget *) view, nullptr means the last active window containing addresses +ida_kernwin.quick_widget_commands_t.populate_popup(self, widget, popup) + +ida_kernwin.read_range_selection(v: "TWidget *") -> "ea_t *, ea_t *" + Get the address range for the selected range boundaries, this is the convenient function for read_selection() + + @param v: view, nullptr means the last active window containing addresses @retval 0: no range is selected @retval 1: ok, start ea and end ea are filled -ida_kernwin.read_selection (function) - read_selection(v, p1, p2) -> bool - Read the user selection, and store its information in p0 (from) and p1 (to). +ida_kernwin.read_selection(v, p1, p2) + Read the user selection, and store its information in p1 (from) and p2 (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) + >>> p1 = ida_kernwin.twinpos_t() + p2 = ida_kernwin.twinpos_t() + view = ida_kernwin.get_current_viewer() + ida_kernwin.read_selection(view, p1, p2) - At that point, p0 and p1 hold information for the selection. - But, the 'at' property of p0 and p1 is not properly typed. + At that point, p1 and p2 hold information for the selection. + But, the 'at' property of p1 and p2 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) + >>> place0 = p1.place(view) + place1 = p2.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 p1: Storage for the "to" part of the selection. - @param p1: Storage for the "to" part of the selection. + @param v: The view to retrieve the selection for. + @param p1: Storage for the "from" part of the selection. + @param p2: Storage for the "to" part of the selection. @return: a bool value indicating success. -ida_kernwin.refresh_chooser (function) - refresh_chooser(title) -> bool - Mark a non-modal custom chooser for a refresh (ui_refresh_chooser). - - @param title: (C++: const char *) title of chooser - @return: success +ida_kernwin.refresh_chooser(title: str) -> bool + Mark a non-modal custom chooser for a refresh (ui_refresh_chooser). + + @param title: title of chooser + @returns success -ida_kernwin.refresh_choosers (function) - refresh_choosers() +ida_kernwin.refresh_choosers() -> None -ida_kernwin.refresh_custom_viewer (function) - refresh_custom_viewer(custom_viewer) +ida_kernwin.refresh_custom_viewer(custom_viewer: "TWidget *") -> None Refresh custom ida viewer (ui_refresh_custom_viewer) - - @param custom_viewer: (C++: TWidget *) -ida_kernwin.refresh_idaview (function) - refresh_idaview() +ida_kernwin.refresh_idaview() -> None Refresh marked windows (ui_refreshmarked) -ida_kernwin.refresh_idaview_anyway (function) - refresh_idaview_anyway() - Refresh all disassembly views (ui_refresh), forces an immediate refresh. Please - consider request_refresh() instead +ida_kernwin.refresh_idaview_anyway() -> None + Refresh all disassembly views (ui_refresh), forces an immediate refresh. Please consider request_refresh() instead + -ida_kernwin.refresh_navband (function) - refresh_navband(force) - Refresh navigation band if changed (ui_refresh_navband). - - @param force: (C++: bool) refresh regardless +ida_kernwin.refresh_navband(force: bool) -> None + Refresh navigation band if changed (ui_refresh_navband). + + @param force: refresh regardless -ida_kernwin.register_action (function) - 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: (C++: const action_desc_t &) action to register - @return: success +ida_kernwin.register_action(desc: "action_desc_t") -> 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 + @returns success -ida_kernwin.register_addon (function) - 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 *) addon_info_t const * +ida_kernwin.register_addon(info: "addon_info_t") -> 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 + -ida_kernwin.register_and_attach_to_menu (function) - register_and_attach_to_menu(menupath, name, label, shortcut, flags, handler, owner, action_desc_t_flags) -> bool +ida_kernwin.register_and_attach_to_menu(menupath: str, name: str, label: str, shortcut: str, flags: int, handler: "action_handler_t *", owner: "void *", action_desc_t_flags: int) -> 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 *) char const * - @param name: (C++: const char *) char const * - @param label: (C++: const char *) char const * - @param shortcut: (C++: const char *) char const * - @param flags: (C++: int) - @param handler: (C++: action_handler_t *) - @param owner: (C++: void *) - @param action_desc_t_flags: (C++: int) + 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. + -ida_kernwin.register_timer (function) - register_timer(interval, py_callback) -> PyCapsule +ida_kernwin.register_timer(interval, callback) Register a timer @param interval: Interval in milliseconds - @param py_callback: A Python callable that takes no parameters and returns an integer. + @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 (function) - remove_command_interpreter(cli_idx) +ida_kernwin.remove_command_interpreter(cli_idx: int) -> None Remove command line interpreter (ui_install_cli) - - @param cli_idx: int -ida_kernwin.renderer_pos_info_t (class) - Proxy of C++ renderer_pos_info_t class. +ida_kernwin.renderer_pos_info_t -ida_kernwin.renderer_pos_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: renderer_pos_info_t const & +ida_kernwin.renderer_pos_info_t.__eq__(self, r: "renderer_pos_info_t") -> bool -ida_kernwin.renderer_pos_info_t.__init__ (method) - __init__(self) -> renderer_pos_info_t +ida_kernwin.renderer_pos_info_t.__init__(self) -ida_kernwin.renderer_pos_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: renderer_pos_info_t const & +ida_kernwin.renderer_pos_info_t.__ne__(self, r: "renderer_pos_info_t") -> bool -ida_kernwin.renderer_pos_info_t.cx (variable) - the X coords of the character in the current line. When in graph mode: X coords - of the character in 'node'. - When in flat mode: X coords of the character in the line, w/o - taking scrolling into consideration. +ida_kernwin.renderer_pos_info_t.cx + the X coords of the character in the current line. When in graph mode: X coords of the character in 'node'. + When in flat mode: X coords of the character in the line, w/o + taking scrolling into consideration. + -ida_kernwin.renderer_pos_info_t.cy (variable) - the Y coords of the character. When in graph mode: Y coords of the character in - 'node'. - When in flat mode: Line number, starting from the top. +ida_kernwin.renderer_pos_info_t.cy + the Y coords of the character. When in graph mode: Y coords of the character in 'node'. + When in flat mode: Line number, starting from the top. + -ida_kernwin.renderer_pos_info_t.node (variable) - the node, or -1 if the current renderer is not a graph renderer. +ida_kernwin.renderer_pos_info_t.node + the node, or -1 if the current renderer is not a graph renderer. + -ida_kernwin.renderer_pos_info_t.sx (variable) +ida_kernwin.renderer_pos_info_t.sx the number of chars that are scrolled (flat mode only) -ida_kernwin.repaint_custom_viewer (function) - repaint_custom_viewer(custom_viewer) +ida_kernwin.repaint_custom_viewer(custom_viewer: "TWidget *") -> None Repaint the given widget immediately (ui_repaint_qwidget) - - @param custom_viewer: (C++: TWidget *) -ida_kernwin.replace_wait_box (function) - replace_wait_box(format) +ida_kernwin.replace_wait_box(*args) -> None Replace the label of "Please wait dialog box". + +ida_kernwin.request_refresh(mask: "uint64", cnd: bool = True) -> None + Request a refresh of a builtin window. + + @param mask: Window refresh flags + @param cnd: set if true or clear flag otherwise + +ida_kernwin.restore_database_snapshot(snapshot, callback, userdata) -> bool + Restore a database snapshot. - @param format: (C++: const char *) char const * - -ida_kernwin.request_refresh (function) - request_refresh(mask, cnd=True) - Request a refresh of a builtin window. + Note: This call is asynchronous. When it is completed, the callback will be triggered. - @param mask: (C++: uint64) Window refresh flags - @param cnd: (C++: bool) set if true or clear flag otherwise + @param snapshot the snapshot object + @param callback a callback function + @param userdata payload to pass to the callback + @return success -ida_kernwin.restore_database_snapshot (function) - restore_database_snapshot(ss, pyfunc_or_none, pytuple_or_none) -> bool - Restore a database snapshot. Note: This call is asynchronous. When it is - completed, the callback will be triggered. - - @param ss: (C++: const snapshot_t *) snapshot instance (see build_snapshot_tree()) - @param pyfunc_or_none: PyObject * - @param pytuple_or_none: PyObject * - @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.section_lines_refs_t -ida_kernwin.section_lines_refs_t (class) - Proxy of C++ qvector< twinline_t const * > class. +ida_kernwin.section_lines_refs_t.__eq__(self, r: "section_lines_refs_t") -> bool -ida_kernwin.section_lines_refs_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< twinline_t const * > const & +ida_kernwin.section_lines_refs_t.__getitem__(self, i: "size_t") -> "twinline_t const *const &" -ida_kernwin.section_lines_refs_t.__getitem__ (method) - __getitem__(self, i) -> twinline_t - - @param i: size_t +ida_kernwin.section_lines_refs_t.__init__(self, *args) -ida_kernwin.section_lines_refs_t.__init__ (method) - __init__(self) -> section_lines_refs_t - __init__(self, x) -> section_lines_refs_t - - @param x: qvector< twinline_t const * > const & +ida_kernwin.section_lines_refs_t.__len__(self) -> "size_t" -ida_kernwin.section_lines_refs_t.__len__ (method) - __len__(self) -> size_t +ida_kernwin.section_lines_refs_t.__ne__(self, r: "section_lines_refs_t") -> bool -ida_kernwin.section_lines_refs_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< twinline_t const * > const & +ida_kernwin.section_lines_refs_t.__setitem__(self, i: "size_t", v: "twinline_t") -> None -ida_kernwin.section_lines_refs_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: twinline_t const *const & +ida_kernwin.section_lines_refs_t._del(self, x: "twinline_t") -> bool -ida_kernwin.section_lines_refs_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: twinline_t const *const & +ida_kernwin.section_lines_refs_t.add_unique(self, x: "twinline_t") -> bool -ida_kernwin.section_lines_refs_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: twinline_t const *const & +ida_kernwin.section_lines_refs_t.append(self, x: "twinline_t") -> None -ida_kernwin.section_lines_refs_t.at (method) - at(self, _idx) -> twinline_t - - @param _idx: size_t +ida_kernwin.section_lines_refs_t.at(self, _idx: "size_t") -> "twinline_t const *const &" -ida_kernwin.section_lines_refs_t.begin (method) - begin(self) -> qvector< twinline_t const * >::iterator - begin(self) -> qvector< twinline_t const * >::const_iterator +ida_kernwin.section_lines_refs_t.begin(self, *args) -> "qvector< twinline_t const * >::const_iterator" -ida_kernwin.section_lines_refs_t.capacity (method) - capacity(self) -> size_t +ida_kernwin.section_lines_refs_t.capacity(self) -> "size_t" -ida_kernwin.section_lines_refs_t.clear (method) - clear(self) +ida_kernwin.section_lines_refs_t.clear(self) -> None -ida_kernwin.section_lines_refs_t.empty (method) - empty(self) -> bool +ida_kernwin.section_lines_refs_t.empty(self) -> bool -ida_kernwin.section_lines_refs_t.end (method) - end(self) -> qvector< twinline_t const * >::iterator - end(self) -> qvector< twinline_t const * >::const_iterator +ida_kernwin.section_lines_refs_t.end(self, *args) -> "qvector< twinline_t const * >::const_iterator" -ida_kernwin.section_lines_refs_t.erase (method) - erase(self, it) -> qvector< twinline_t const * >::iterator - - @param it: qvector< twinline_t const * >::iterator - - erase(self, first, last) -> qvector< twinline_t const * >::iterator - - @param first: qvector< twinline_t const * >::iterator - @param last: qvector< twinline_t const * >::iterator +ida_kernwin.section_lines_refs_t.erase(self, *args) -> "qvector< twinline_t const * >::iterator" -ida_kernwin.section_lines_refs_t.extract (method) - extract(self) -> twinline_t const ** +ida_kernwin.section_lines_refs_t.extend(self, x: "section_lines_refs_t") -> None -ida_kernwin.section_lines_refs_t.find (method) - find(self, x) -> qvector< twinline_t const * >::iterator - - @param x: twinline_t const *const & - - find(self, x) -> qvector< twinline_t const * >::const_iterator - - @param x: twinline_t const *const & +ida_kernwin.section_lines_refs_t.extract(self) -> "twinline_t const **" -ida_kernwin.section_lines_refs_t.has (method) - has(self, x) -> bool - - @param x: twinline_t const *const & +ida_kernwin.section_lines_refs_t.find(self, *args) -> "qvector< twinline_t const * >::const_iterator" -ida_kernwin.section_lines_refs_t.inject (method) - inject(self, s, len) - - @param s: twinline_t const ** - @param len: size_t +ida_kernwin.section_lines_refs_t.has(self, x: "twinline_t") -> bool -ida_kernwin.section_lines_refs_t.insert (method) - insert(self, it, x) -> qvector< twinline_t const * >::iterator - - @param it: qvector< twinline_t const * >::iterator - @param x: twinline_t const *const & +ida_kernwin.section_lines_refs_t.inject(self, s: "twinline_t const **", len: "size_t") -> None -ida_kernwin.section_lines_refs_t.pop_back (method) - pop_back(self) +ida_kernwin.section_lines_refs_t.insert(self, it: "qvector< twinline_t const * >::iterator", x: "twinline_t") -> "qvector< twinline_t const * >::iterator" -ida_kernwin.section_lines_refs_t.push_back (method) - push_back(self, x) - - @param x: twinline_t const *const & - - push_back(self) -> twinline_t const *& +ida_kernwin.section_lines_refs_t.pop_back(self) -> None -ida_kernwin.section_lines_refs_t.qclear (method) - qclear(self) +ida_kernwin.section_lines_refs_t.push_back(self, *args) -> "twinline_t const *&" -ida_kernwin.section_lines_refs_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_kernwin.section_lines_refs_t.qclear(self) -> None -ida_kernwin.section_lines_refs_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: twinline_t const *const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_kernwin.section_lines_refs_t.reserve(self, cnt: "size_t") -> None -ida_kernwin.section_lines_refs_t.size (method) - size(self) -> size_t +ida_kernwin.section_lines_refs_t.resize(self, *args) -> None -ida_kernwin.section_lines_refs_t.swap (method) - swap(self, r) - - @param r: qvector< twinline_t const * > & +ida_kernwin.section_lines_refs_t.size(self) -> "size_t" -ida_kernwin.section_lines_refs_t.truncate (method) - truncate(self) +ida_kernwin.section_lines_refs_t.swap(self, r: "section_lines_refs_t") -> None -ida_kernwin.sections_lines_refs_t (class) - Proxy of C++ qvector< section_lines_refs_t > class. +ida_kernwin.section_lines_refs_t.truncate(self) -> None -ida_kernwin.sections_lines_refs_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< section_lines_refs_t > const & +ida_kernwin.sections_lines_refs_t -ida_kernwin.sections_lines_refs_t.__getitem__ (method) - __getitem__(self, i) -> section_lines_refs_t - - @param i: size_t +ida_kernwin.sections_lines_refs_t.__eq__(self, r: "sections_lines_refs_t") -> bool -ida_kernwin.sections_lines_refs_t.__init__ (method) - __init__(self) -> sections_lines_refs_t - __init__(self, x) -> sections_lines_refs_t - - @param x: qvector< section_lines_refs_t > const & +ida_kernwin.sections_lines_refs_t.__getitem__(self, i: "size_t") -> "section_lines_refs_t const &" -ida_kernwin.sections_lines_refs_t.__len__ (method) - __len__(self) -> size_t +ida_kernwin.sections_lines_refs_t.__init__(self, *args) -ida_kernwin.sections_lines_refs_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< section_lines_refs_t > const & +ida_kernwin.sections_lines_refs_t.__len__(self) -> "size_t" -ida_kernwin.sections_lines_refs_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: section_lines_refs_t const & +ida_kernwin.sections_lines_refs_t.__ne__(self, r: "sections_lines_refs_t") -> bool -ida_kernwin.sections_lines_refs_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: section_lines_refs_t const & +ida_kernwin.sections_lines_refs_t.__setitem__(self, i: "size_t", v: "section_lines_refs_t") -> None -ida_kernwin.sections_lines_refs_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: section_lines_refs_t const & +ida_kernwin.sections_lines_refs_t._del(self, x: "section_lines_refs_t") -> bool -ida_kernwin.sections_lines_refs_t.at (method) - at(self, _idx) -> section_lines_refs_t - - @param _idx: size_t +ida_kernwin.sections_lines_refs_t.add_unique(self, x: "section_lines_refs_t") -> bool -ida_kernwin.sections_lines_refs_t.begin (method) - begin(self) -> qvector< section_lines_refs_t >::iterator - begin(self) -> qvector< section_lines_refs_t >::const_iterator +ida_kernwin.sections_lines_refs_t.append(self, x: "section_lines_refs_t") -> None -ida_kernwin.sections_lines_refs_t.capacity (method) - capacity(self) -> size_t +ida_kernwin.sections_lines_refs_t.at(self, _idx: "size_t") -> "section_lines_refs_t const &" -ida_kernwin.sections_lines_refs_t.clear (method) - clear(self) +ida_kernwin.sections_lines_refs_t.begin(self, *args) -> "qvector< section_lines_refs_t >::const_iterator" -ida_kernwin.sections_lines_refs_t.empty (method) - empty(self) -> bool +ida_kernwin.sections_lines_refs_t.capacity(self) -> "size_t" -ida_kernwin.sections_lines_refs_t.end (method) - end(self) -> qvector< section_lines_refs_t >::iterator - end(self) -> qvector< section_lines_refs_t >::const_iterator +ida_kernwin.sections_lines_refs_t.clear(self) -> None -ida_kernwin.sections_lines_refs_t.erase (method) - erase(self, it) -> qvector< section_lines_refs_t >::iterator - - @param it: qvector< section_lines_refs_t >::iterator - - erase(self, first, last) -> qvector< section_lines_refs_t >::iterator - - @param first: qvector< section_lines_refs_t >::iterator - @param last: qvector< section_lines_refs_t >::iterator +ida_kernwin.sections_lines_refs_t.empty(self) -> bool -ida_kernwin.sections_lines_refs_t.extract (method) - extract(self) -> section_lines_refs_t +ida_kernwin.sections_lines_refs_t.end(self, *args) -> "qvector< section_lines_refs_t >::const_iterator" -ida_kernwin.sections_lines_refs_t.find (method) - find(self, x) -> qvector< section_lines_refs_t >::iterator - - @param x: section_lines_refs_t const & - - find(self, x) -> qvector< section_lines_refs_t >::const_iterator - - @param x: section_lines_refs_t const & +ida_kernwin.sections_lines_refs_t.erase(self, *args) -> "qvector< section_lines_refs_t >::iterator" -ida_kernwin.sections_lines_refs_t.grow (method) - grow(self, x=section_lines_refs_t()) - - @param x: section_lines_refs_t const & +ida_kernwin.sections_lines_refs_t.extend(self, x: "sections_lines_refs_t") -> None -ida_kernwin.sections_lines_refs_t.has (method) - has(self, x) -> bool - - @param x: section_lines_refs_t const & +ida_kernwin.sections_lines_refs_t.extract(self) -> "section_lines_refs_t *" -ida_kernwin.sections_lines_refs_t.inject (method) - inject(self, s, len) - - @param s: section_lines_refs_t * - @param len: size_t +ida_kernwin.sections_lines_refs_t.find(self, *args) -> "qvector< section_lines_refs_t >::const_iterator" -ida_kernwin.sections_lines_refs_t.insert (method) - insert(self, it, x) -> qvector< section_lines_refs_t >::iterator - - @param it: qvector< section_lines_refs_t >::iterator - @param x: section_lines_refs_t const & +ida_kernwin.sections_lines_refs_t.grow(self, *args) -> None -ida_kernwin.sections_lines_refs_t.pop_back (method) - pop_back(self) +ida_kernwin.sections_lines_refs_t.has(self, x: "section_lines_refs_t") -> bool -ida_kernwin.sections_lines_refs_t.push_back (method) - push_back(self, x) - - @param x: section_lines_refs_t const & - - push_back(self) -> section_lines_refs_t +ida_kernwin.sections_lines_refs_t.inject(self, s: "section_lines_refs_t", len: "size_t") -> None -ida_kernwin.sections_lines_refs_t.qclear (method) - qclear(self) +ida_kernwin.sections_lines_refs_t.insert(self, it: "qvector< section_lines_refs_t >::iterator", x: "section_lines_refs_t") -> "qvector< section_lines_refs_t >::iterator" -ida_kernwin.sections_lines_refs_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_kernwin.sections_lines_refs_t.pop_back(self) -> None -ida_kernwin.sections_lines_refs_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: section_lines_refs_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_kernwin.sections_lines_refs_t.push_back(self, *args) -> "section_lines_refs_t &" -ida_kernwin.sections_lines_refs_t.size (method) - size(self) -> size_t +ida_kernwin.sections_lines_refs_t.qclear(self) -> None -ida_kernwin.sections_lines_refs_t.swap (method) - swap(self, r) - - @param r: qvector< section_lines_refs_t > & +ida_kernwin.sections_lines_refs_t.reserve(self, cnt: "size_t") -> None -ida_kernwin.sections_lines_refs_t.truncate (method) - truncate(self) +ida_kernwin.sections_lines_refs_t.resize(self, *args) -> None -ida_kernwin.set_cancelled (function) - set_cancelled() +ida_kernwin.sections_lines_refs_t.size(self) -> "size_t" + +ida_kernwin.sections_lines_refs_t.swap(self, r: "sections_lines_refs_t") -> None + +ida_kernwin.sections_lines_refs_t.truncate(self) -> None + +ida_kernwin.set_cancelled() -> None Set "Cancelled" flag (ui_set_cancelled) -ida_kernwin.set_code_viewer_handler (function) - 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: (C++: TWidget *) the code viewer - @param handler_id: (C++: custom_viewer_handler_id_t) one of CDVH_ in custom_viewer_handler_id_t - @param handler_or_data: (C++: void *) can be a handler or data. see examples in Functions: - custom viewer handlers - @return: old value of the handler or data +ida_kernwin.set_code_viewer_handler(code_viewer: "TWidget *", handler_id: "custom_viewer_handler_id_t", handler_or_data: "void *") -> "void *" + Set a handler for a code viewer event (ui_set_custom_viewer_handler). + + @param code_viewer: the code viewer + @param handler_id: one of CDVH_ in custom_viewer_handler_id_t + @param handler_or_data: can be a handler or data. see examples in Functions: custom viewer handlers + @returns old value of the handler or data -ida_kernwin.set_code_viewer_is_source (function) - 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_is_source(code_viewer: "TWidget *") -> bool + Specify that the given code viewer is used to display source code (ui_set_custom_viewer_handler). -ida_kernwin.set_code_viewer_line_handlers (function) - 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 nullptr - - @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_line_handlers(code_viewer: "TWidget *", click_handler: "code_viewer_lines_click_t *", popup_handler: "code_viewer_lines_click_t *", dblclick_handler: "code_viewer_lines_click_t *", drawicon_handler: "code_viewer_lines_icon_t *", linenum_handler: "code_viewer_lines_linenum_t *") -> None + Set handlers for code viewer line events. Any of these handlers may be nullptr + -ida_kernwin.set_code_viewer_lines_alignment (function) - set_code_viewer_lines_alignment(code_viewer, align) -> bool +ida_kernwin.set_code_viewer_lines_alignment(code_viewer: "TWidget *", align: int) -> 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 (function) - 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_icon_margin(code_viewer: "TWidget *", margin: int) -> bool + Set space allowed for icons in the margin of a code viewer (ui_set_custom_viewer_handler). -ida_kernwin.set_code_viewer_lines_radix (function) - set_code_viewer_lines_radix(code_viewer, radix) -> bool +ida_kernwin.set_code_viewer_lines_radix(code_viewer: "TWidget *", radix: int) -> 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 (function) - set_code_viewer_user_data(code_viewer, ud) -> bool +ida_kernwin.set_code_viewer_user_data(code_viewer: "TWidget *", ud: "void *") -> 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 (function) - set_custom_viewer_qt_aware(custom_viewer) -> bool +ida_kernwin.set_custom_viewer_qt_aware(custom_viewer: "TWidget *") -> bool Allow the given viewer to interpret Qt events (ui_set_custom_viewer_handler) - - @param custom_viewer: (C++: TWidget *) -ida_kernwin.set_dock_pos (function) - set_dock_pos(src_ctrl, dest_ctrl, orient, left=0, top=0, right=0, bottom=0) -> bool +ida_kernwin.set_dock_pos(src_ctrl, dest_ctrl, orient, left = 0, top = 0, right = 0, bottom = 0) Sets the dock orientation of a window relatively to another window. Use the left, top, right, bottom parameters if DP_FLOATING is used, or if you want to specify the width of docked windows. - @param src_ctrl: char const * - @param dest_ctrl: char const * + @param src_ctrl: Source docking control + @param dest_ctrl: Destination docking control @param orient: One of DP_XXXX constants - @param left: int - @param top: int - @param right: int - @param bottom: int @return: Boolean Example: set_dock_pos('Structures', 'Enums', DP_RIGHT) <- docks the Structures window to the right of Enums window -ida_kernwin.set_highlight (function) - set_highlight(viewer, str, flags) -> bool - Set the highlighted identifier in the viewer (ui_set_highlight). +ida_kernwin.set_execute_sync_availability(tid: "__qthread_t", availability: "execute_sync_availability_t") -> "execute_sync_availability_t" + Set the availability of the execute_sync functionality for the given thread + Setting it to `esa_unavailable` will cause the existing requests for this thread to be cancelled. Setting it to `esa_release` will clear the status for this thread, and should be issued right before a call to `qthread_free` is issued. - @param viewer: (C++: TWidget *) the viewer - @param str: (C++: const char *) the text to match, or nullptr to remove current - @param flags: (C++: int) combination of HIF_... bits (see set_highlight flags) - @return: false if an error occurred + @param tid: thread id + @param availability: the availability + @returns the previous availability -ida_kernwin.set_nav_colorizer (function) - set_nav_colorizer(new_py_colorizer) -> dict or None +ida_kernwin.set_highlight(viewer: "TWidget *", str: str, flags: int) -> bool + Set the highlighted identifier in the viewer (ui_set_highlight). + + @param viewer: the viewer + @param str: the text to match, or nullptr to remove current + @param flags: combination of HIF_... bits (see set_highlight flags) + @returns false if an error occurred + +ida_kernwin.set_nav_colorizer(callback) Set a new colorizer for the navigation band. The 'callback' is a function of 2 arguments: @@ -46066,1614 +30874,1281 @@ ida_kernwin.set_nav_colorizer (function) 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) + orig = ida_kernwin.call_nav_colorizer(ida_colorizer, ea, nbytes) return long(~orig) - ida_colorizer = idaapi.set_nav_colorizer(my_colorizer) + ida_colorizer = ida_kernwin.set_nav_colorizer(my_colorizer) - @param new_py_colorizer: PyObject * + @param callback: the new colorizer -ida_kernwin.set_view_renderer_type (function) - set_view_renderer_type(v, rt) +ida_kernwin.set_view_renderer_type(v: "TWidget *", rt: "tcc_renderer_type_t") -> None 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) enum tcc_renderer_type_t -ida_kernwin.show_wait_box (function) - show_wait_box(message) - Display a dialog box with "Please wait...". The behavior of the dialog box can - be configured with well-known - tokens, that should be placed at the start of the format string: - "NODELAY\n": the dialog will show immediately, instead of - appearing after usual grace threshold - "HIDECANCEL\n": the cancel button won't be added to the dialog box - and user_cancelled() will always return false (but - can be called to refresh UI) - Using "HIDECANCEL" implies "NODELAY" - Plugins must call hide_wait_box() to close the dialog box, otherwise - the user interface will remain disabled. - Note that, if the wait dialog is already visible, show_wait_box() will - 1) push the currently-displayed text on a stack - 2) display the new text - Then, when hide_wait_box() is called, if that stack isn't empty its top - label will be popped and restored in the wait dialog. - This implies that a plugin should call hide_wait_box() exactly as many - times as it called show_wait_box(), or the wait dialog might remain - visible and block the UI. - Also, in case the plugin knows the wait dialog is currently displayed, +ida_kernwin.show_wait_box(message: str) -> None + Display a dialog box with "Please wait...". The behavior of the dialog box can be configured with well-known + tokens, that should be placed at the start of the format string: + "NODELAY\n": the dialog will show immediately, instead of + appearing after usual grace threshold + "HIDECANCEL\n": the cancel button won't be added to the dialog box + and user_cancelled() will always return false (but + can be called to refresh UI) + Using "HIDECANCEL" implies "NODELAY" + Plugins must call hide_wait_box() to close the dialog box, otherwise + the user interface will remain disabled. + Note that, if the wait dialog is already visible, show_wait_box() will + 1) push the currently-displayed text on a stack + 2) display the new text + Then, when hide_wait_box() is called, if that stack isn't empty its top + label will be popped and restored in the wait dialog. + This implies that a plugin should call hide_wait_box() exactly as many + times as it called show_wait_box(), or the wait dialog might remain + visible 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 the - dialog without pushing the currently-displayed text on the stack. - - @param message: char const * + dialog without pushing the currently-displayed text on the stack. + -ida_kernwin.simplecustviewer_t (class) +ida_kernwin.simplecustviewer_t The base class for implementing simple custom viewers -ida_kernwin.simplecustviewer_t.AddLine (method) +ida_kernwin.simplecustviewer_t.AddLine(self, line, fgcolor = None, bgcolor = None) Adds a colored line to the view @return: Boolean -ida_kernwin.simplecustviewer_t.ClearLines (method) +ida_kernwin.simplecustviewer_t.ClearLines(self) Clears all the lines -ida_kernwin.simplecustviewer_t.Close (method) +ida_kernwin.simplecustviewer_t.Close(self) 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 (method) +ida_kernwin.simplecustviewer_t.Count(self) Returns the number of lines in the view -ida_kernwin.simplecustviewer_t.Create (method) +ida_kernwin.simplecustviewer_t.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 -ida_kernwin.simplecustviewer_t.DelLine (method) +ida_kernwin.simplecustviewer_t.DelLine(self, lineno) Deletes an existing line @return: Boolean -ida_kernwin.simplecustviewer_t.EditLine (method) +ida_kernwin.simplecustviewer_t.EditLine(self, lineno, line, fgcolor = None, bgcolor = None) Edits an existing line. @return: Boolean -ida_kernwin.simplecustviewer_t.GetCurrentLine (method) +ida_kernwin.simplecustviewer_t.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 -ida_kernwin.simplecustviewer_t.GetCurrentWord (method) +ida_kernwin.simplecustviewer_t.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 -ida_kernwin.simplecustviewer_t.GetLine (method) +ida_kernwin.simplecustviewer_t.GetLine(self, lineno) Returns a line @param lineno: The line number - @return: Returns a tuple (colored_line, fgcolor, bgcolor) or None + @return: + Returns a tuple (colored_line, fgcolor, bgcolor) or None -ida_kernwin.simplecustviewer_t.GetLineNo (method) +ida_kernwin.simplecustviewer_t.GetLineNo(self, mouse = 0) Calls GetPos() and returns the current line number or -1 on failure -ida_kernwin.simplecustviewer_t.GetPos (method) +ida_kernwin.simplecustviewer_t.GetPos(self, mouse = 0) Returns the current cursor or mouse position. @param mouse: return mouse position @return: Returns a tuple (lineno, x, y) -ida_kernwin.simplecustviewer_t.GetSelection (method) +ida_kernwin.simplecustviewer_t.GetSelection(self) Returns the selected range or None - @return: - tuple(x1, y1, x2, y2) + @return: + - tuple(x1, y1, x2, y2) - None if no selection -ida_kernwin.simplecustviewer_t.GetWidget (method) +ida_kernwin.simplecustviewer_t.GetWidget(self) Return the TWidget underlying this view. @return: The TWidget underlying this view, or None. -ida_kernwin.simplecustviewer_t.InsertLine (method) +ida_kernwin.simplecustviewer_t.InsertLine(self, lineno, line, fgcolor = None, bgcolor = None) Inserts a line in the given position @return: Boolean -ida_kernwin.simplecustviewer_t.IsFocused (method) +ida_kernwin.simplecustviewer_t.IsFocused(self) Returns True if the current view is the focused view -ida_kernwin.simplecustviewer_t.Jump (method) +ida_kernwin.simplecustviewer_t.Jump(self, lineno, x = 0, y = 0) -ida_kernwin.simplecustviewer_t.OnPopup (method) +ida_kernwin.simplecustviewer_t.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 -ida_kernwin.simplecustviewer_t.PatchLine (method) +ida_kernwin.simplecustviewer_t.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 -ida_kernwin.simplecustviewer_t.Refresh (method) +ida_kernwin.simplecustviewer_t.Refresh(self) -ida_kernwin.simplecustviewer_t.RefreshCurrent (method) +ida_kernwin.simplecustviewer_t.RefreshCurrent(self) Refreshes the current line only -ida_kernwin.simplecustviewer_t.Show (method) +ida_kernwin.simplecustviewer_t.Show(self) Shows an already created view. It the view was closed, then it will call Create() for you @return: Boolean -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline (class) +ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.__init__ (method) +ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.__init__(self, v) -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.populating_widget_popup (method) +ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.populating_widget_popup(self, form, popup_handle) -ida_kernwin.simplecustviewer_t.__init__ (method) +ida_kernwin.simplecustviewer_t.__init__(self) -ida_kernwin.simplecustviewer_t.__make_sl_arg (method) +ida_kernwin.simplecustviewer_t.__make_sl_arg(line, fgcolor = None, bgcolor = None) -ida_kernwin.simpleline_place_t (class) - Proxy of C++ simpleline_place_t class. +ida_kernwin.simpleline_place_t -ida_kernwin.simpleline_place_t.__init__ (method) +ida_kernwin.simpleline_place_t.__init__(self, *args, **kwargs) -ida_kernwin.simpleline_place_t.n (variable) +ida_kernwin.simpleline_place_t.n line number -ida_kernwin.simpleline_t (class) - Proxy of C++ simpleline_t class. +ida_kernwin.simpleline_t -ida_kernwin.simpleline_t.__init__ (method) - __init__(self) -> simpleline_t - __init__(self, c, str) -> simpleline_t - - @param c: color_t - @param str: char const * - - __init__(self, str) -> simpleline_t - - @param str: char const * +ida_kernwin.simpleline_t.__init__(self, *args) -ida_kernwin.simpleline_t.bgcolor (variable) +ida_kernwin.simpleline_t.bgcolor line background color -ida_kernwin.simpleline_t.color (variable) +ida_kernwin.simpleline_t.color line prefix color -ida_kernwin.simpleline_t.line (variable) +ida_kernwin.simpleline_t.line line text -ida_kernwin.str2ea (function) - str2ea(str, screen_ea=BADADDR) -> bool - Convert string to linear address. Tries to interpret the string as: - 1) "current IP" keyword if supported by assembler (e.g. "$" in x86) - 2) segment:offset expression, where "segment" may be a name or a fixed segment - register (e.g. cs, ds) - 3) just segment name/register (translated to segment's start address) - 4) a name in the database (or debug name during debugging) - 5) hexadecimal value without prefix or suffix - 6) +delta or -delta, where numerical 'delta' is added to or subtracted from - 'screen_ea' - 7) register name (only during debugging) +ida_kernwin.str2ea(*args) -> "uint64 *" + Convert string to linear address. Tries to interpret the string as: + 1) "current IP" keyword if supported by assembler (e.g. "$" in x86) + 2) segment:offset expression, where "segment" may be a name or a fixed segment register (e.g. cs, ds) + 3) just segment name/register (translated to segment's start address) + 4) a name in the database (or debug name during debugging) + 5) hexadecimal value without prefix or suffix + 6) +delta or -delta, where numerical 'delta' is added to or subtracted from 'screen_ea' + 7) register name (only during debugging) 8) if all else fails, try to evaluate 'str' as an IDC expression - @param str: (C++: const char *) string to parse - @param screen_ea: (C++: ea_t) the current address in the disassembly/pseudocode view - @return: success + @param str: string to parse + @param screen_ea: the current address in the disassembly/pseudocode view + @returns success -ida_kernwin.str2ea_ex (function) - str2ea_ex(str, screen_ea=BADADDR, flags=0) -> bool - Same as str2ea() but possibly with some steps skipped. +ida_kernwin.str2ea_ex(*args) -> "uint64 *" + Same as str2ea() but possibly with some steps skipped. + + @param out: the buffer to put the result + @param str: string to parse + @param screen_ea: the current address in the disassembly/pseudocode view + @param flags: see String to address conversion flags + @returns success + +ida_kernwin.strarray(array: "strarray_t", array_size: "size_t", code: int) -> str + 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 "". + + +ida_kernwin.strarray_t + +ida_kernwin.strarray_t.__init__(self) + +ida_kernwin.sync_source_t + +ida_kernwin.sync_source_t.__eq__(self, _o: "sync_source_t") -> bool + +ida_kernwin.sync_source_t.__init__(self, *args) + +ida_kernwin.sync_source_t.__ne__(self, _o: "sync_source_t") -> bool + +ida_kernwin.sync_source_t.get_register(self) -> str + +ida_kernwin.sync_source_t.get_widget(self) -> "TWidget const *" + +ida_kernwin.sync_source_t.is_register(self) -> bool + +ida_kernwin.sync_source_t.is_widget(self) -> bool + +ida_kernwin.sync_source_vec_t + +ida_kernwin.sync_source_vec_t.__eq__(self, r: "sync_source_vec_t") -> bool + +ida_kernwin.sync_source_vec_t.__getitem__(self, i: "size_t") -> "sync_source_t const &" + +ida_kernwin.sync_source_vec_t.__init__(self, *args) + +ida_kernwin.sync_source_vec_t.__len__(self) -> "size_t" + +ida_kernwin.sync_source_vec_t.__ne__(self, r: "sync_source_vec_t") -> bool + +ida_kernwin.sync_source_vec_t.__setitem__(self, i: "size_t", v: "sync_source_t") -> None + +ida_kernwin.sync_source_vec_t._del(self, x: "sync_source_t") -> bool + +ida_kernwin.sync_source_vec_t.add_unique(self, x: "sync_source_t") -> bool + +ida_kernwin.sync_source_vec_t.append(self, x: "sync_source_t") -> None + +ida_kernwin.sync_source_vec_t.at(self, _idx: "size_t") -> "sync_source_t const &" + +ida_kernwin.sync_source_vec_t.begin(self, *args) -> "qvector< sync_source_t >::const_iterator" + +ida_kernwin.sync_source_vec_t.capacity(self) -> "size_t" + +ida_kernwin.sync_source_vec_t.clear(self) -> None + +ida_kernwin.sync_source_vec_t.empty(self) -> bool + +ida_kernwin.sync_source_vec_t.end(self, *args) -> "qvector< sync_source_t >::const_iterator" + +ida_kernwin.sync_source_vec_t.erase(self, *args) -> "qvector< sync_source_t >::iterator" + +ida_kernwin.sync_source_vec_t.extend(self, x: "sync_source_vec_t") -> None + +ida_kernwin.sync_source_vec_t.extract(self) -> "sync_source_t *" + +ida_kernwin.sync_source_vec_t.find(self, *args) -> "qvector< sync_source_t >::const_iterator" + +ida_kernwin.sync_source_vec_t.has(self, x: "sync_source_t") -> bool + +ida_kernwin.sync_source_vec_t.inject(self, s: "sync_source_t", len: "size_t") -> None + +ida_kernwin.sync_source_vec_t.insert(self, it: "sync_source_t", x: "sync_source_t") -> "qvector< sync_source_t >::iterator" + +ida_kernwin.sync_source_vec_t.pop_back(self) -> None + +ida_kernwin.sync_source_vec_t.push_back(self, x: "sync_source_t") -> None + +ida_kernwin.sync_source_vec_t.qclear(self) -> None + +ida_kernwin.sync_source_vec_t.reserve(self, cnt: "size_t") -> None + +ida_kernwin.sync_source_vec_t.size(self) -> "size_t" + +ida_kernwin.sync_source_vec_t.swap(self, r: "sync_source_vec_t") -> None + +ida_kernwin.sync_source_vec_t.truncate(self) -> None + +ida_kernwin.sync_sources(what: "sync_source_t", _with: "sync_source_t", sync: bool) -> bool + [Un]synchronize sources + + @returns success + +ida_kernwin.synced_group_t + +ida_kernwin.synced_group_t.__init__(self) + +ida_kernwin.synced_group_t.has(self, ss: "sync_source_t") -> bool + +ida_kernwin.synced_group_t.has_register(self, r: str) -> bool + +ida_kernwin.synced_group_t.has_widget(self, v: "TWidget const *") -> bool + +ida_kernwin.tagged_line_section_t + +ida_kernwin.tagged_line_section_t.__eq__(self, r: "tagged_line_section_t") -> bool + +ida_kernwin.tagged_line_section_t.__init__(self) + +ida_kernwin.tagged_line_section_t.__ne__(self, r: "tagged_line_section_t") -> bool + +ida_kernwin.tagged_line_section_t.__str__(self) -> str + +ida_kernwin.tagged_line_section_t.substr(self, _in: str, end: "tagged_line_section_t" = None) -> bool + +ida_kernwin.tagged_line_section_t.valid(self) -> bool + +ida_kernwin.tagged_line_section_t.valid_in(self, _in: str) -> bool + +ida_kernwin.tagged_line_section_vec_t + +ida_kernwin.tagged_line_section_vec_t.__eq__(self, r: "tagged_line_section_vec_t") -> bool + +ida_kernwin.tagged_line_section_vec_t.__getitem__(self, i: "size_t") -> "tagged_line_section_t const &" + +ida_kernwin.tagged_line_section_vec_t.__init__(self, *args) + +ida_kernwin.tagged_line_section_vec_t.__len__(self) -> "size_t" + +ida_kernwin.tagged_line_section_vec_t.__ne__(self, r: "tagged_line_section_vec_t") -> bool + +ida_kernwin.tagged_line_section_vec_t.__setitem__(self, i: "size_t", v: "tagged_line_section_t") -> None + +ida_kernwin.tagged_line_section_vec_t._del(self, x: "tagged_line_section_t") -> bool + +ida_kernwin.tagged_line_section_vec_t.add_unique(self, x: "tagged_line_section_t") -> bool + +ida_kernwin.tagged_line_section_vec_t.append(self, x: "tagged_line_section_t") -> None + +ida_kernwin.tagged_line_section_vec_t.at(self, _idx: "size_t") -> "tagged_line_section_t const &" + +ida_kernwin.tagged_line_section_vec_t.begin(self, *args) -> "qvector< tagged_line_section_t >::const_iterator" + +ida_kernwin.tagged_line_section_vec_t.capacity(self) -> "size_t" + +ida_kernwin.tagged_line_section_vec_t.clear(self) -> None + +ida_kernwin.tagged_line_section_vec_t.empty(self) -> bool + +ida_kernwin.tagged_line_section_vec_t.end(self, *args) -> "qvector< tagged_line_section_t >::const_iterator" + +ida_kernwin.tagged_line_section_vec_t.erase(self, *args) -> "qvector< tagged_line_section_t >::iterator" + +ida_kernwin.tagged_line_section_vec_t.extend(self, x: "tagged_line_section_vec_t") -> None + +ida_kernwin.tagged_line_section_vec_t.extract(self) -> "tagged_line_section_t *" + +ida_kernwin.tagged_line_section_vec_t.find(self, *args) -> "qvector< tagged_line_section_t >::const_iterator" + +ida_kernwin.tagged_line_section_vec_t.grow(self, *args) -> None + +ida_kernwin.tagged_line_section_vec_t.has(self, x: "tagged_line_section_t") -> bool + +ida_kernwin.tagged_line_section_vec_t.inject(self, s: "tagged_line_section_t", len: "size_t") -> None + +ida_kernwin.tagged_line_section_vec_t.insert(self, it: "tagged_line_section_t", x: "tagged_line_section_t") -> "qvector< tagged_line_section_t >::iterator" + +ida_kernwin.tagged_line_section_vec_t.pop_back(self) -> None + +ida_kernwin.tagged_line_section_vec_t.push_back(self, *args) -> "tagged_line_section_t &" + +ida_kernwin.tagged_line_section_vec_t.qclear(self) -> None + +ida_kernwin.tagged_line_section_vec_t.reserve(self, cnt: "size_t") -> None + +ida_kernwin.tagged_line_section_vec_t.resize(self, *args) -> None + +ida_kernwin.tagged_line_section_vec_t.size(self) -> "size_t" + +ida_kernwin.tagged_line_section_vec_t.swap(self, r: "tagged_line_section_vec_t") -> None + +ida_kernwin.tagged_line_section_vec_t.truncate(self) -> None + +ida_kernwin.tagged_line_sections_t + +ida_kernwin.tagged_line_sections_t.__init__(self) + +ida_kernwin.tagged_line_sections_t.first(self, tag: "color_t") -> "tagged_line_section_t const *" + +ida_kernwin.tagged_line_sections_t.nearest_after(self, range: "tagged_line_section_t", start: "cpidx_t", tag: "color_t" = 0) -> "tagged_line_section_t const *" + +ida_kernwin.tagged_line_sections_t.nearest_at(self, x: "cpidx_t", tag: "color_t" = 0) -> "tagged_line_section_t const *" + +ida_kernwin.tagged_line_sections_t.nearest_before(self, range: "tagged_line_section_t", start: "cpidx_t", tag: "color_t" = 0) -> "tagged_line_section_t const *" + +ida_kernwin.tagged_line_sections_t.sections_at(self, out: "tagged_line_sections_t", x: "cpidx_t", tag: "color_t" = 0) -> None + +ida_kernwin.take_database_snapshot(snapshot) -> Tuple[bool, str] + Take a database snapshot. - @param str: (C++: const char *) string to parse - @param screen_ea: (C++: ea_t) the current address in the disassembly/pseudocode view - @param flags: (C++: int) see String to address conversion flags - @return: success + @param snapshot the snapshot object + @return a tuple (success, error-message) -ida_kernwin.strarray (function) - 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 *) strarray_t const * - @param array_size: (C++: size_t) - @param code: (C++: int) +ida_kernwin.text_t -ida_kernwin.strarray_t (class) - Proxy of C++ strarray_t class. +ida_kernwin.text_t.__getitem__(self, i: "size_t") -> "twinline_t const &" -ida_kernwin.strarray_t.__init__ (method) - __init__(self) -> strarray_t +ida_kernwin.text_t.__init__(self, *args) -ida_kernwin.structplace_t (class) - Proxy of C++ structplace_t class. +ida_kernwin.text_t.__len__(self) -> "size_t" -ida_kernwin.structplace_t.__init__ (method) +ida_kernwin.text_t.__setitem__(self, i: "size_t", v: "twinline_t") -> None -ida_kernwin.structplace_t.idx (variable) - struct serial number +ida_kernwin.text_t.append(self, x: "twinline_t") -> None -ida_kernwin.structplace_t.offset (variable) - offset within struct +ida_kernwin.text_t.at(self, _idx: "size_t") -> "twinline_t const &" -ida_kernwin.sync_source_t (class) - Proxy of C++ sync_source_t class. +ida_kernwin.text_t.begin(self, *args) -> "qvector< twinline_t >::const_iterator" -ida_kernwin.sync_source_t.__eq__ (method) - __eq__(self, _o) -> bool - - @param _o: sync_source_t const & +ida_kernwin.text_t.capacity(self) -> "size_t" -ida_kernwin.sync_source_t.__init__ (method) - __init__(self, _view) -> sync_source_t - - @param _view: TWidget const * - - __init__(self, _regname) -> sync_source_t - - @param _regname: char const * +ida_kernwin.text_t.clear(self) -> None -ida_kernwin.sync_source_t.__ne__ (method) - __ne__(self, _o) -> bool - - @param _o: sync_source_t const & +ida_kernwin.text_t.empty(self) -> bool -ida_kernwin.sync_source_t.get_register (method) - get_register(self) -> char const * +ida_kernwin.text_t.end(self, *args) -> "qvector< twinline_t >::const_iterator" -ida_kernwin.sync_source_t.get_widget (method) - get_widget(self) -> TWidget const * +ida_kernwin.text_t.erase(self, *args) -> "qvector< twinline_t >::iterator" -ida_kernwin.sync_source_t.is_register (method) - is_register(self) -> bool +ida_kernwin.text_t.extend(self, x: "text_t") -> None -ida_kernwin.sync_source_t.is_widget (method) - is_widget(self) -> bool +ida_kernwin.text_t.extract(self) -> "twinline_t *" -ida_kernwin.sync_source_vec_t (class) - Proxy of C++ qvector< sync_source_t > class. +ida_kernwin.text_t.grow(self, *args) -> None -ida_kernwin.sync_source_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< sync_source_t > const & +ida_kernwin.text_t.inject(self, s: "twinline_t", len: "size_t") -> None -ida_kernwin.sync_source_vec_t.__getitem__ (method) - __getitem__(self, i) -> sync_source_t - - @param i: size_t +ida_kernwin.text_t.insert(self, it: "twinline_t", x: "twinline_t") -> "qvector< twinline_t >::iterator" -ida_kernwin.sync_source_vec_t.__init__ (method) - __init__(self) -> sync_source_vec_t - __init__(self, x) -> sync_source_vec_t - - @param x: qvector< sync_source_t > const & +ida_kernwin.text_t.pop_back(self) -> None -ida_kernwin.sync_source_vec_t.__len__ (method) - __len__(self) -> size_t +ida_kernwin.text_t.push_back(self, *args) -> "twinline_t &" -ida_kernwin.sync_source_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< sync_source_t > const & +ida_kernwin.text_t.qclear(self) -> None -ida_kernwin.sync_source_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: sync_source_t const & +ida_kernwin.text_t.reserve(self, cnt: "size_t") -> None -ida_kernwin.sync_source_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: sync_source_t const & +ida_kernwin.text_t.resize(self, *args) -> None -ida_kernwin.sync_source_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: sync_source_t const & +ida_kernwin.text_t.size(self) -> "size_t" -ida_kernwin.sync_source_vec_t.at (method) - at(self, _idx) -> sync_source_t - - @param _idx: size_t +ida_kernwin.text_t.swap(self, r: "text_t") -> None -ida_kernwin.sync_source_vec_t.begin (method) - begin(self) -> sync_source_t +ida_kernwin.text_t.truncate(self) -> None -ida_kernwin.sync_source_vec_t.capacity (method) - capacity(self) -> size_t +ida_kernwin.textctrl_info_t + Flags value -ida_kernwin.sync_source_vec_t.clear (method) - clear(self) - -ida_kernwin.sync_source_vec_t.empty (method) - empty(self) -> bool - -ida_kernwin.sync_source_vec_t.end (method) - end(self) -> sync_source_t - -ida_kernwin.sync_source_vec_t.erase (method) - erase(self, it) -> sync_source_t - - @param it: qvector< sync_source_t >::iterator - - erase(self, first, last) -> sync_source_t - - @param first: qvector< sync_source_t >::iterator - @param last: qvector< sync_source_t >::iterator - -ida_kernwin.sync_source_vec_t.extract (method) - extract(self) -> sync_source_t - -ida_kernwin.sync_source_vec_t.find (method) - find(self, x) -> sync_source_t - - @param x: sync_source_t const & - -ida_kernwin.sync_source_vec_t.has (method) - has(self, x) -> bool - - @param x: sync_source_t const & - -ida_kernwin.sync_source_vec_t.inject (method) - inject(self, s, len) - - @param s: sync_source_t * - @param len: size_t - -ida_kernwin.sync_source_vec_t.insert (method) - insert(self, it, x) -> sync_source_t - - @param it: qvector< sync_source_t >::iterator - @param x: sync_source_t const & - -ida_kernwin.sync_source_vec_t.pop_back (method) - pop_back(self) - -ida_kernwin.sync_source_vec_t.push_back (method) - push_back(self, x) - - @param x: sync_source_t const & - -ida_kernwin.sync_source_vec_t.qclear (method) - qclear(self) - -ida_kernwin.sync_source_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_kernwin.sync_source_vec_t.size (method) - size(self) -> size_t - -ida_kernwin.sync_source_vec_t.swap (method) - swap(self, r) - - @param r: qvector< sync_source_t > & - -ida_kernwin.sync_source_vec_t.truncate (method) - truncate(self) - -ida_kernwin.sync_sources (function) - 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.synced_group_t (class) - Proxy of C++ synced_group_t class. - -ida_kernwin.synced_group_t.__init__ (method) - __init__(self) -> synced_group_t - -ida_kernwin.synced_group_t.has (method) - has(self, ss) -> bool - - @param ss: sync_source_t const & - -ida_kernwin.synced_group_t.has_register (method) - has_register(self, r) -> bool - - @param r: char const * - -ida_kernwin.synced_group_t.has_widget (method) - has_widget(self, v) -> bool - - @param v: TWidget const * - -ida_kernwin.tagged_line_section_t (class) - Proxy of C++ tagged_line_section_t class. - -ida_kernwin.tagged_line_section_t.__init__ (method) - __init__(self) -> tagged_line_section_t - -ida_kernwin.tagged_line_section_t.substr (method) - substr(self, _in) -> bool - - @param in: qstring const & - -ida_kernwin.tagged_line_section_t.valid (method) - valid(self) -> bool - -ida_kernwin.tagged_line_section_t.valid_in (method) - valid_in(self, _in) -> bool - - @param in: qstring const & - -ida_kernwin.tagged_line_sections_t (class) - Proxy of C++ tagged_line_sections_t class. - -ida_kernwin.tagged_line_sections_t.__init__ (method) - __init__(self) -> tagged_line_sections_t - -ida_kernwin.tagged_line_sections_t.find_in (method) - find_in(self, range, tag=0) -> tagged_line_section_t - - @param range: tagged_line_section_t const & - @param tag: color_t - -ida_kernwin.tagged_line_sections_t.nearest_at (method) - nearest_at(self, x, tag=0) -> tagged_line_section_t - - @param x: cpidx_t - @param tag: color_t - -ida_kernwin.tagged_line_sections_t.sections_at (method) - sections_at(self, out, x, tag=0) - - @param out: tagged_line_sections_t * - @param x: cpidx_t - @param tag: color_t - -ida_kernwin.take_database_snapshot (function) - take_database_snapshot(ss) -> (bool, NoneType) - Take a database snapshot (ui_take_database_snapshot). - - @param ss: (C++: snapshot_t *) in/out parameter. - * in: description, flags - * out: filename, id - @return: success - -ida_kernwin.text_t (class) - Proxy of C++ qvector< twinline_t > class. - -ida_kernwin.text_t.__getitem__ (method) - __getitem__(self, i) -> twinline_t - - @param i: size_t - -ida_kernwin.text_t.__init__ (method) - __init__(self) -> text_t - __init__(self, x) -> text_t - - @param x: qvector< twinline_t > const & - -ida_kernwin.text_t.__len__ (method) - __len__(self) -> size_t - -ida_kernwin.text_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: twinline_t const & - -ida_kernwin.text_t.at (method) - at(self, _idx) -> twinline_t - - @param _idx: size_t - -ida_kernwin.text_t.begin (method) - begin(self) -> twinline_t - -ida_kernwin.text_t.capacity (method) - capacity(self) -> size_t - -ida_kernwin.text_t.clear (method) - clear(self) - -ida_kernwin.text_t.empty (method) - empty(self) -> bool - -ida_kernwin.text_t.end (method) - end(self) -> twinline_t - -ida_kernwin.text_t.erase (method) - erase(self, it) -> twinline_t - - @param it: qvector< twinline_t >::iterator - - erase(self, first, last) -> twinline_t - - @param first: qvector< twinline_t >::iterator - @param last: qvector< twinline_t >::iterator - -ida_kernwin.text_t.extract (method) - extract(self) -> twinline_t - -ida_kernwin.text_t.grow (method) - grow(self, x=twinline_t()) - - @param x: twinline_t const & - -ida_kernwin.text_t.inject (method) - inject(self, s, len) - - @param s: twinline_t * - @param len: size_t - -ida_kernwin.text_t.insert (method) - insert(self, it, x) -> twinline_t - - @param it: qvector< twinline_t >::iterator - @param x: twinline_t const & - -ida_kernwin.text_t.pop_back (method) - pop_back(self) - -ida_kernwin.text_t.push_back (method) - push_back(self, x) - - @param x: twinline_t const & - - push_back(self) -> twinline_t - -ida_kernwin.text_t.qclear (method) - qclear(self) - -ida_kernwin.text_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_kernwin.text_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: twinline_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_kernwin.text_t.size (method) - size(self) -> size_t - -ida_kernwin.text_t.swap (method) - swap(self, r) - - @param r: qvector< twinline_t > & - -ida_kernwin.text_t.truncate (method) - truncate(self) - -ida_kernwin.textctrl_info_t (class) - Class representing textctrl_info_t - -ida_kernwin.textctrl_info_t.TXTF_ACCEPTTABS (variable) +ida_kernwin.textctrl_info_t.TXTF_ACCEPTTABS Tab key inserts 'tabsize' spaces -ida_kernwin.textctrl_info_t.TXTF_AUTOINDENT (variable) +ida_kernwin.textctrl_info_t.TXTF_AUTOINDENT Auto-indent on new line -ida_kernwin.textctrl_info_t.TXTF_FIXEDFONT (variable) +ida_kernwin.textctrl_info_t.TXTF_FIXEDFONT The control uses IDA's fixed font -ida_kernwin.textctrl_info_t.TXTF_MODIFIED (variable) +ida_kernwin.textctrl_info_t.TXTF_MODIFIED Gets/sets the modified status -ida_kernwin.textctrl_info_t.TXTF_READONLY (variable) +ida_kernwin.textctrl_info_t.TXTF_READONLY Text cannot be edited (but can be selected and copied) -ida_kernwin.textctrl_info_t.TXTF_SELECTED (variable) +ida_kernwin.textctrl_info_t.TXTF_SELECTED Shows the field with its text selected -ida_kernwin.textctrl_info_t.__get_flags__ (method) +ida_kernwin.textctrl_info_t.__get_flags__(self) Returns the flags value -ida_kernwin.textctrl_info_t.__get_tabsize__ (method) +ida_kernwin.textctrl_info_t.__get_tabsize__(self) Returns the tabsize value -ida_kernwin.textctrl_info_t.__get_text (method) +ida_kernwin.textctrl_info_t.__get_text(self) Sets the text value -ida_kernwin.textctrl_info_t.__init__ (method) +ida_kernwin.textctrl_info_t.__init__(self, text = "", flags = 0, tabsize = 0) -ida_kernwin.textctrl_info_t.__set_flags__ (method) +ida_kernwin.textctrl_info_t.__set_flags__(self, flags) Sets the flags value -ida_kernwin.textctrl_info_t.__set_tabsize__ (method) +ida_kernwin.textctrl_info_t.__set_tabsize__(self, tabsize) Sets the tabsize value -ida_kernwin.textctrl_info_t.__set_text (method) +ida_kernwin.textctrl_info_t.__set_text(self, s) Sets the text value -ida_kernwin.textctrl_info_t._create_clink (method) +ida_kernwin.textctrl_info_t._create_clink(self) -ida_kernwin.textctrl_info_t._del_clink (method) +ida_kernwin.textctrl_info_t._del_clink(self, lnk) -ida_kernwin.textctrl_info_t._get_clink_ptr (method) +ida_kernwin.textctrl_info_t._get_clink_ptr(self) -ida_kernwin.textctrl_info_t.assign (method) +ida_kernwin.textctrl_info_t.assign(self, other) Copies the contents of 'other' to 'self' -ida_kernwin.textctrl_info_t.flags (variable) - Text control property bits +ida_kernwin.textctrl_info_t.flags + Text control property bits + -ida_kernwin.textctrl_info_t.tabsize (variable) +ida_kernwin.textctrl_info_t.tabsize how many spaces a single tab will indent -ida_kernwin.textctrl_info_t.text (variable) +ida_kernwin.textctrl_info_t.text in, out: text control value -ida_kernwin.textctrl_info_t.value (variable) +ida_kernwin.textctrl_info_t.value Alias for the text property -ida_kernwin.textctrl_info_t_assign (function) - textctrl_info_t_assign(_self, other) -> bool - - @param self: PyObject * - @param other: PyObject * +ida_kernwin.textctrl_info_t_assign(_self: "PyObject *", other: "PyObject *") -> bool -ida_kernwin.textctrl_info_t_create (function) - textctrl_info_t_create() -> PyObject * +ida_kernwin.textctrl_info_t_create() -> "PyObject *" -ida_kernwin.textctrl_info_t_destroy (function) - textctrl_info_t_destroy(py_obj) -> bool - - @param py_obj: PyObject * +ida_kernwin.textctrl_info_t_destroy(py_obj: "PyObject *") -> bool -ida_kernwin.textctrl_info_t_get_clink (function) - textctrl_info_t_get_clink(_self) -> textctrl_info_t * - - @param self: PyObject * +ida_kernwin.textctrl_info_t_get_clink(_self: "PyObject *") -> "textctrl_info_t *" -ida_kernwin.textctrl_info_t_get_clink_ptr (function) - textctrl_info_t_get_clink_ptr(_self) -> PyObject * - - @param self: PyObject * +ida_kernwin.textctrl_info_t_get_clink_ptr(_self: "PyObject *") -> "PyObject *" -ida_kernwin.textctrl_info_t_get_flags (function) - textctrl_info_t_get_flags(_self) -> unsigned int - - @param self: PyObject * +ida_kernwin.textctrl_info_t_get_flags(_self: "PyObject *") -> "unsigned int" -ida_kernwin.textctrl_info_t_get_tabsize (function) - textctrl_info_t_get_tabsize(_self) -> unsigned int - - @param self: PyObject * +ida_kernwin.textctrl_info_t_get_tabsize(_self: "PyObject *") -> "unsigned int" -ida_kernwin.textctrl_info_t_get_text (function) - textctrl_info_t_get_text(_self) -> char const * - - @param self: PyObject * +ida_kernwin.textctrl_info_t_get_text(_self: "PyObject *") -> str -ida_kernwin.textctrl_info_t_set_flags (function) - textctrl_info_t_set_flags(_self, flags) -> bool - - @param self: PyObject * - @param flags: unsigned int +ida_kernwin.textctrl_info_t_set_flags(_self: "PyObject *", flags: "unsigned int") -> bool -ida_kernwin.textctrl_info_t_set_tabsize (function) - textctrl_info_t_set_tabsize(_self, tabsize) -> bool - - @param self: PyObject * - @param tabsize: unsigned int +ida_kernwin.textctrl_info_t_set_tabsize(_self: "PyObject *", tabsize: "unsigned int") -> bool -ida_kernwin.textctrl_info_t_set_text (function) - textctrl_info_t_set_text(_self, s) -> bool - - @param self: PyObject * - @param s: char const * +ida_kernwin.textctrl_info_t_set_text(_self: "PyObject *", s: str) -> bool -ida_kernwin.tiplace_t (class) - Proxy of C++ tiplace_t class. +ida_kernwin.tiplace_t -ida_kernwin.tiplace_t.__init__ (method) +ida_kernwin.tiplace_t.__init__(self, *args, **kwargs) -ida_kernwin.tiplace_t.calc_udm_offset (method) - calc_udm_offset(self, ud, p_udmidx=None, p_bitoff=None) -> uint64 - for structs: calculate the offset that corresponds to the tiplace. - - @param ud: (C++: const void *) pointer to user-defined context data. Is supplied by linearray_t - @param p_udmidx: (C++: ssize_t *) place to return the index of the current udt member, if any. if - there is no member at the current offset, return -1 - @param p_bitoff: (C++: int *) place to return the bit offset of the item from the beginning - of the bit bucket if there no bitfields, return -1 - @return: the current offset or uint64(-1) +ida_kernwin.tiplace_t.calc_udm_offset(self, ud: "void const *", p_udmidx: "ssize_t *" = None, p_bitoff: "int *" = None) -> "uint64" + for structs: calculate the offset that corresponds to the tiplace. + + @param ud: pointer to user-defined context data. Is supplied by linearray_t + @param p_udmidx: place to return the index of the current udt member, if any. if there is no member at the current offset, return -1 + @param p_bitoff: place to return the bit offset of the item from the beginning of the bit bucket if there no bitfields, return -1 + @returns the current offset or uint64(-1) -ida_kernwin.tiplace_t.fill_type_ref (method) - fill_type_ref(self, out, ud) -> bool - fill the type information for use in actions - - @param out: (C++: til_type_ref_t *) pointer to storage - @param ud: (C++: const void *) pointer to user-defined context data. Is supplied by linearray_t - @return: success +ida_kernwin.tiplace_t.fill_type_ref(self, out: "til_type_ref_t", ud: "void const *") -> bool + fill the type information for use in actions + + @param out: pointer to storage + @param ud: pointer to user-defined context data. Is supplied by linearray_t + @returns success -ida_kernwin.tiplace_t.get_kind (method) - get_kind(self, ud) -> type_t - get the kind of type this place represents - - @param ud: (C++: const void *) pointer to user-defined context data. Is supplied by linearray_t - @return: one of BTF_TYPEDEF, BTF_STRUCT, BTF_UNION, BTF_ENUM or BT_UNK +ida_kernwin.tiplace_t.get_kind(self, ud: "void const *") -> "type_t" + get the kind of type this place represents + + @param ud: pointer to user-defined context data. Is supplied by linearray_t + @returns one of BTF_TYPEDEF, BTF_STRUCT, BTF_UNION, BTF_ENUM or BT_UNK -ida_kernwin.tiplace_t.is_footer (method) - is_footer(self) -> bool +ida_kernwin.tiplace_t.is_footer(self) -> bool -ida_kernwin.tiplace_t.is_header (method) - is_header(self) -> bool +ida_kernwin.tiplace_t.is_header(self) -> bool -ida_kernwin.tiplace_t.is_index (method) - is_index(self) -> bool +ida_kernwin.tiplace_t.is_index(self) -> bool -ida_kernwin.tiplace_t.reset (method) - reset(self) +ida_kernwin.tiplace_t.reset(self) -> None -ida_kernwin.tiplace_t.set_footer (method) - set_footer(self) +ida_kernwin.tiplace_t.set_footer(self) -> None -ida_kernwin.tiplace_t.set_header (method) - set_header(self) +ida_kernwin.tiplace_t.set_header(self) -> None -ida_kernwin.tiplace_t.set_index_by_offset (method) - set_index_by_offset(self, ud, offset) - for structs: calculate the index that corresponds to the offset and set it. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - @param offset: (C++: uint64) offset of udt member +ida_kernwin.tiplace_t.set_index_by_offset(self, ud: "void *", offset: "uint64") -> None + for structs: calculate the index that corresponds to the offset and set it. + + @param ud: pointer to user-defined context data. Is supplied by linearray_t + @param offset: offset of udt member -ida_kernwin.tiplace_t.valid_ord (method) - valid_ord(self) -> bool +ida_kernwin.tiplace_t.valid_ord(self) -> bool -ida_kernwin.twinline_t (class) - Proxy of C++ twinline_t class. +ida_kernwin.twinline_t -ida_kernwin.twinline_t.__init__ (method) - __init__(self) -> twinline_t - __init__(self, t, pc, bc) -> twinline_t - - @param t: place_t * - @param pc: color_t - @param bc: bgcolor_t +ida_kernwin.twinline_t.__init__(self, *args) -ida_kernwin.twinline_t.at (variable) +ida_kernwin.twinline_t.at location in view -ida_kernwin.twinline_t.bg_color (variable) +ida_kernwin.twinline_t.bg_color line background color -ida_kernwin.twinline_t.is_default (variable) +ida_kernwin.twinline_t.is_default is this the default line of the current location? -ida_kernwin.twinline_t.line (variable) +ida_kernwin.twinline_t.line line contents -ida_kernwin.twinline_t.prefix_color (variable) +ida_kernwin.twinline_t.prefix_color line prefix color -ida_kernwin.twinpos_t (class) - Proxy of C++ twinpos_t class. +ida_kernwin.twinpos_t -ida_kernwin.twinpos_t.__init__ (method) - __init__(self) -> twinpos_t - __init__(self, t) -> twinpos_t - - @param t: place_t * - - __init__(self, t, x0) -> twinpos_t - - @param t: place_t * - @param x0: int +ida_kernwin.twinpos_t.__init__(self, *args) -ida_kernwin.twinpos_t.at (variable) +ida_kernwin.twinpos_t.at location in view -ida_kernwin.twinpos_t.place (method) +ida_kernwin.twinpos_t.place(self, view) -ida_kernwin.twinpos_t.place_as_enumplace_t (method) +ida_kernwin.twinpos_t.place_as_idaplace_t(self) -ida_kernwin.twinpos_t.place_as_idaplace_t (method) +ida_kernwin.twinpos_t.place_as_simpleline_place_t(self) -ida_kernwin.twinpos_t.place_as_simpleline_place_t (method) +ida_kernwin.twinpos_t.place_as_tiplace_t(self) -ida_kernwin.twinpos_t.place_as_structplace_t (method) - -ida_kernwin.twinpos_t.place_as_tiplace_t (method) - -ida_kernwin.twinpos_t.x (variable) +ida_kernwin.twinpos_t.x cursor x -ida_kernwin.ui_load_new_file (function) - 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: (C++: qstring *) name of the file with the extracted archive member. - @param filename: (C++: qstring *) the name of input file as is, library or archive name - @param pli: (C++: linput_t **) loader input source, may be changed to point to temp_file - @param neflags: (C++: ushort) combination of NEF_... bits (see Load file flags) - @param ploaders: (C++: load_info_t **) list of loaders which accept file, may be changed for loaders - of temp_file +ida_kernwin.ui_load_new_file(temp_file: str, filename: str, pli: "linput_t **", neflags: "ushort", ploaders: "load_info_t **") -> bool + Display a load file dialog and load file (ui_load_file). + + @param temp_file: name of the file with the extracted archive member. + @param filename: the name of input file as is, library or archive name + @param pli: loader input source, may be changed to point to temp_file + @param neflags: combination of NEF_... bits (see Load file flags) + @param ploaders: list of loaders which accept file, may be changed for loaders of temp_file @retval true: file was successfully loaded @retval false: otherwise -ida_kernwin.ui_requests_t (class) - Proxy of C++ ui_requests_t class. +ida_kernwin.ui_requests_t -ida_kernwin.ui_requests_t.__init__ (method) - __init__(self) -> ui_requests_t +ida_kernwin.ui_requests_t.__init__(self) -ida_kernwin.ui_run_debugger (function) - ui_run_debugger(dbgopts, exename, argc, argv) -> bool - Load a debugger plugin and run the specified program (ui_run_dbg). - - @param dbgopts: (C++: const char *) value of the -r command line switch - @param exename: (C++: const char *) name of the file to run - @param argc: (C++: int) number of arguments for the executable - @param argv: (C++: const char *const *) argument vector - @return: success +ida_kernwin.ui_run_debugger(dbgopts: str, exename: str, argc: int, argv: "char const *const *") -> bool + Load a debugger plugin and run the specified program (ui_run_dbg). + + @param dbgopts: value of the -r command line switch + @param exename: name of the file to run + @param argc: number of arguments for the executable + @param argv: argument vector + @returns success -ida_kernwin.unmark_selection (function) - unmark_selection() +ida_kernwin.unmark_selection() -> None Unmark selection (ui_unmarksel) -ida_kernwin.unregister_action (function) - unregister_action(name) -> bool - Delete a previously-registered action (ui_unregister_action). - - @param name: (C++: const char *) name of action - @return: success +ida_kernwin.unregister_action(name: str) -> bool + Delete a previously-registered action (ui_unregister_action). + + @param name: name of action + @returns success -ida_kernwin.unregister_timer (function) - unregister_timer(py_timerctx) -> bool +ida_kernwin.unregister_timer(timer_obj) 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 (function) - update_action_checkable(name, checkable) -> bool - Update an action's checkability (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param checkable: (C++: bool) new checkability - @return: success +ida_kernwin.update_action_checkable(name: str, checkable: bool) -> bool + Update an action's checkability (ui_update_action_attr). + + @param name: action name + @param checkable: new checkability + @returns success -ida_kernwin.update_action_checked (function) - update_action_checked(name, checked) -> bool - Update an action's checked state (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param checked: (C++: bool) new checked state - @return: success +ida_kernwin.update_action_checked(name: str, checked: bool) -> bool + Update an action's checked state (ui_update_action_attr). + + @param name: action name + @param checked: new checked state + @returns success -ida_kernwin.update_action_icon (function) - update_action_icon(name, icon) -> bool - Update an action's icon (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param icon: (C++: int) new icon id - @return: success +ida_kernwin.update_action_icon(name: str, icon: int) -> bool + Update an action's icon (ui_update_action_attr). + + @param name: action name + @param icon: new icon id + @returns success -ida_kernwin.update_action_label (function) - update_action_label(name, label) -> bool - Update an action's label (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param label: (C++: const char *) new label - @return: success +ida_kernwin.update_action_label(name: str, label: str) -> bool + Update an action's label (ui_update_action_attr). + + @param name: action name + @param label: new label + @returns success -ida_kernwin.update_action_shortcut (function) - update_action_shortcut(name, shortcut) -> bool - Update an action's shortcut (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param shortcut: (C++: const char *) new shortcut - @return: success +ida_kernwin.update_action_shortcut(name: str, shortcut: str) -> bool + Update an action's shortcut (ui_update_action_attr). + + @param name: action name + @param shortcut: new shortcut + @returns success -ida_kernwin.update_action_state (function) - update_action_state(name, state) -> bool - Update an action's state (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param state: (C++: action_state_t) new state - @return: success +ida_kernwin.update_action_state(name: str, state: "action_state_t") -> bool + Update an action's state (ui_update_action_attr). + + @param name: action name + @param state: new state + @returns success -ida_kernwin.update_action_tooltip (function) - update_action_tooltip(name, tooltip) -> bool - Update an action's tooltip (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param tooltip: (C++: const char *) new tooltip - @return: success +ida_kernwin.update_action_tooltip(name: str, tooltip: str) -> bool + Update an action's tooltip (ui_update_action_attr). + + @param name: action name + @param tooltip: new tooltip + @returns success -ida_kernwin.update_action_visibility (function) - update_action_visibility(name, visible) -> bool - Update an action's visibility (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param visible: (C++: bool) new visibility - @return: success +ida_kernwin.update_action_visibility(name: str, visible: bool) -> bool + Update an action's visibility (ui_update_action_attr). + + @param name: action name + @param visible: new visibility + @returns success -ida_kernwin.user_cancelled (function) - user_cancelled() -> bool - Test the ctrl-break flag (ui_test_cancelled). +ida_kernwin.user_cancelled() -> bool + Test the ctrl-break flag (ui_test_cancelled). + @retval 1: Ctrl-Break is detected, a message is displayed @retval 2: Ctrl-Break is detected again, a message is not displayed @retval 0: Ctrl-Break is not detected -ida_kernwin.view_activated (variable) - A view is activated +ida_kernwin.view_activated + A view is activated + -ida_kernwin.view_click (variable) - Click event +ida_kernwin.view_click + Click event + -ida_kernwin.view_close (variable) - View closed +ida_kernwin.view_close + View closed + -ida_kernwin.view_created (variable) - A view is being created. +ida_kernwin.view_created + A view is being created. + -ida_kernwin.view_curpos (variable) - Cursor position changed +ida_kernwin.view_curpos + Cursor position changed + -ida_kernwin.view_dblclick (variable) - Double click event +ida_kernwin.view_dblclick + Double click event + -ida_kernwin.view_deactivated (variable) - A view is deactivated +ida_kernwin.view_deactivated + A view is deactivated + -ida_kernwin.view_keydown (variable) - Key down event +ida_kernwin.view_keydown + Key down event + -ida_kernwin.view_loc_changed (variable) - The location for the view has changed (can be either the place_t, the - renderer_info_t, or both.) +ida_kernwin.view_loc_changed + The location for the view has changed (can be either the place_t, the renderer_info_t, or both.) + -ida_kernwin.view_mouse_event_location_t (class) - Proxy of C++ view_mouse_event_location_t class. +ida_kernwin.view_mouse_event_location_t -ida_kernwin.view_mouse_event_location_t.__init__ (method) - __init__(self) -> view_mouse_event_location_t +ida_kernwin.view_mouse_event_location_t.__init__(self) -ida_kernwin.view_mouse_event_location_t.ea (variable) +ida_kernwin.view_mouse_event_location_t.ea flat view (rtype == TCCRT_FLAT) -ida_kernwin.view_mouse_event_location_t.item (variable) - graph views (rtype != TCCRT_FLAT). nullptr if mouse is not currently over an - item. +ida_kernwin.view_mouse_event_location_t.item + graph views (rtype != TCCRT_FLAT). nullptr if mouse is not currently over an item. + -ida_kernwin.view_mouse_event_t (class) - Proxy of C++ view_mouse_event_t class. +ida_kernwin.view_mouse_event_t -ida_kernwin.view_mouse_event_t.__init__ (method) - __init__(self) -> view_mouse_event_t +ida_kernwin.view_mouse_event_t.__init__(self) -ida_kernwin.view_mouse_event_t.button (variable) - represents which mouse button was responsible for generating the event. This - field does not care about the current state of the mouse. +ida_kernwin.view_mouse_event_t.button + represents which mouse button was responsible for generating the event. This field does not care about the current state of the mouse. + -ida_kernwin.view_mouse_event_t.location (variable) +ida_kernwin.view_mouse_event_t.location location where event was generated -ida_kernwin.view_mouse_event_t.renderer_pos (variable) +ida_kernwin.view_mouse_event_t.renderer_pos position where event was generated, relative to the renderer -ida_kernwin.view_mouse_event_t.rtype (variable) +ida_kernwin.view_mouse_event_t.rtype type of renderer that received the event -ida_kernwin.view_mouse_event_t.state (variable) - contains information about what buttons are CURRENTLY pressed on the keyboard - and mouse. view_mouse_event_t instances created in functions like - mouseReleaseEvent() won't contain any information about the mouse, because it - has been released. +ida_kernwin.view_mouse_event_t.state + contains information about what buttons are CURRENTLY pressed on the keyboard and mouse. view_mouse_event_t instances created in functions like mouseReleaseEvent() won't contain any information about the mouse, because it has been released. + -ida_kernwin.view_mouse_event_t.x (variable) +ida_kernwin.view_mouse_event_t.x screen x coordinate -ida_kernwin.view_mouse_event_t.y (variable) +ida_kernwin.view_mouse_event_t.y screen y coordinate -ida_kernwin.view_mouse_moved (variable) - The mouse moved on the view +ida_kernwin.view_mouse_moved + The mouse moved on the view + -ida_kernwin.view_mouse_over (variable) - The user moved the mouse over (or out of) a node or an edge. This is only - relevant in a graph view. +ida_kernwin.view_mouse_over + The user moved the mouse over (or out of) a node or an edge. This is only relevant in a graph view. + -ida_kernwin.view_switched (variable) - A view's renderer has changed. +ida_kernwin.view_switched + A view's renderer has changed. + -ida_kernwin.warning (function) - warning(format) - Display a message in a message box +ida_kernwin.warning(message) + Display a message in a warning 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 + @param message: message to print -ida_lines (module) - High level functions that deal with the generation of the disassembled text - lines. +ida_libfuncs + +ida_libfuncs.get_idasgn_header_by_short_name(out_header: "idasgn_header_t", name: str) -> str + Get idasgn header by a short signature name. + + @param out_header: buffer for the signature file header + @param name: short name of a signature + @returns true in case of success + +ida_libfuncs.get_idasgn_path_by_short_name(name: str) -> str + Get idasgn full path by a short signature name. + + @param name: short name of a signature + @returns true in case of success + +ida_libfuncs.idasgn_header_t + +ida_libfuncs.idasgn_header_t.__init__(self) + +ida_lines + High level functions that deal with the generation of the disassembled text lines. This file also contains definitions for the syntax highlighting. - - Finally there are functions that deal with anterior/posterior user-defined - lines. + Finally there are functions that deal with anterior/posterior user-defined lines. + -ida_lines.COLOR_ADDR (variable) - hidden address marks. the address is represented as 8digit hex number: 01234567. - it doesn't have COLOR_OFF pair. NB: for 64-bit IDA, the address is 16digit. +ida_lines.COLOR_ADDR + hidden address marks. the address is represented as 8digit hex number: 01234567. it doesn't have COLOR_OFF pair. NB: for 64-bit IDA, the address is 16digit. + -ida_lines.COLOR_ADDR_SIZE (variable) +ida_lines.COLOR_ADDR_SIZE Size of a tagged address (see COLOR_ADDR) -ida_lines.COLOR_ALTOP (variable) +ida_lines.COLOR_ALTOP Alternative operand. -ida_lines.COLOR_ASMDIR (variable) +ida_lines.COLOR_ASMDIR Assembler directive. -ida_lines.COLOR_AUTOCMT (variable) +ida_lines.COLOR_AUTOCMT Automatic comment. -ida_lines.COLOR_BG_MAX (variable) +ida_lines.COLOR_BG_MAX Max color number. -ida_lines.COLOR_BINPREF (variable) +ida_lines.COLOR_BINPREF Binary line prefix bytes. -ida_lines.COLOR_CHAR (variable) +ida_lines.COLOR_CHAR Char constant in instruction. -ida_lines.COLOR_CNAME (variable) +ida_lines.COLOR_CNAME Regular code name. -ida_lines.COLOR_CODE (variable) +ida_lines.COLOR_CODE Single instruction. -ida_lines.COLOR_CODNAME (variable) +ida_lines.COLOR_CODNAME Dummy code name. -ida_lines.COLOR_COLLAPSED (variable) +ida_lines.COLOR_COLLAPSED Collapsed line. -ida_lines.COLOR_CREF (variable) +ida_lines.COLOR_CREF Code reference. -ida_lines.COLOR_CREFTAIL (variable) +ida_lines.COLOR_CREFTAIL Code reference to tail byte. -ida_lines.COLOR_CURITEM (variable) +ida_lines.COLOR_CURITEM Current item. -ida_lines.COLOR_CURLINE (variable) +ida_lines.COLOR_CURLINE Current line. -ida_lines.COLOR_DATA (variable) +ida_lines.COLOR_DATA Data bytes. -ida_lines.COLOR_DATNAME (variable) +ida_lines.COLOR_DATNAME Dummy Data Name. -ida_lines.COLOR_DCHAR (variable) +ida_lines.COLOR_DCHAR Char constant in data directive. -ida_lines.COLOR_DEFAULT (variable) +ida_lines.COLOR_DEFAULT Default. -ida_lines.COLOR_DEMNAME (variable) +ida_lines.COLOR_DEMNAME Demangled Name. -ida_lines.COLOR_DNAME (variable) +ida_lines.COLOR_DNAME Regular Data Name. -ida_lines.COLOR_DNUM (variable) +ida_lines.COLOR_DNUM Numeric constant in data directive. -ida_lines.COLOR_DREF (variable) +ida_lines.COLOR_DREF Data reference. -ida_lines.COLOR_DREFTAIL (variable) +ida_lines.COLOR_DREFTAIL Data reference to tail byte. -ida_lines.COLOR_DSTR (variable) +ida_lines.COLOR_DSTR String constant in data directive. -ida_lines.COLOR_ERROR (variable) +ida_lines.COLOR_ERROR Error or problem. -ida_lines.COLOR_ESC (variable) - Escape character (Quote next character). This is needed to output '\1' and '\2' - characters. +ida_lines.COLOR_ESC + Escape character (Quote next character). This is needed to output '\1' and '\2' characters. + -ida_lines.COLOR_EXTERN (variable) +ida_lines.COLOR_EXTERN External name definition segment. -ida_lines.COLOR_EXTRA (variable) +ida_lines.COLOR_EXTRA Extra line. -ida_lines.COLOR_FG_MAX (variable) +ida_lines.COLOR_FG_MAX Max color number. -ida_lines.COLOR_HIDLINE (variable) +ida_lines.COLOR_HIDLINE Hidden line. -ida_lines.COLOR_HIDNAME (variable) +ida_lines.COLOR_HIDNAME Hidden name. -ida_lines.COLOR_IMPNAME (variable) +ida_lines.COLOR_IMPNAME Imported name. -ida_lines.COLOR_INSN (variable) +ida_lines.COLOR_INSN Instruction. -ida_lines.COLOR_INV (variable) - 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_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_KEYWORD (variable) +ida_lines.COLOR_KEYWORD Keywords. -ida_lines.COLOR_LIBFUNC (variable) +ida_lines.COLOR_LIBFUNC Library function. -ida_lines.COLOR_LIBNAME (variable) +ida_lines.COLOR_LIBNAME Library function name. -ida_lines.COLOR_LOCNAME (variable) +ida_lines.COLOR_LOCNAME Local variable name. -ida_lines.COLOR_LUMFUNC (variable) +ida_lines.COLOR_LUMFUNC Lumina function. -ida_lines.COLOR_LUMINA (variable) +ida_lines.COLOR_LUMINA Lumina-related, only for the navigation band. -ida_lines.COLOR_MACRO (variable) +ida_lines.COLOR_MACRO Macro. -ida_lines.COLOR_NUMBER (variable) +ida_lines.COLOR_NUMBER Numeric constant in instruction. -ida_lines.COLOR_OFF (variable) - Escape character (OFF). Followed by a color code (color_t). +ida_lines.COLOR_OFF + Escape character (OFF). Followed by a color code (color_t). + -ida_lines.COLOR_ON (variable) - Escape character (ON). Followed by a color code (color_t). +ida_lines.COLOR_ON + Escape character (ON). Followed by a color code (color_t). + -ida_lines.COLOR_OPND1 (variable) +ida_lines.COLOR_OPND1 Instruction operand 1. -ida_lines.COLOR_OPND2 (variable) +ida_lines.COLOR_OPND2 Instruction operand 2. -ida_lines.COLOR_OPND3 (variable) +ida_lines.COLOR_OPND3 Instruction operand 3. -ida_lines.COLOR_OPND4 (variable) +ida_lines.COLOR_OPND4 Instruction operand 4. -ida_lines.COLOR_OPND5 (variable) +ida_lines.COLOR_OPND5 Instruction operand 5. -ida_lines.COLOR_OPND6 (variable) +ida_lines.COLOR_OPND6 Instruction operand 6. -ida_lines.COLOR_OPND7 (variable) +ida_lines.COLOR_OPND7 Instruction operand 7. -ida_lines.COLOR_OPND8 (variable) +ida_lines.COLOR_OPND8 Instruction operand 8. -ida_lines.COLOR_PREFIX (variable) +ida_lines.COLOR_PREFIX Line prefix. -ida_lines.COLOR_REG (variable) +ida_lines.COLOR_REG Register name. -ida_lines.COLOR_REGCMT (variable) +ida_lines.COLOR_REGCMT Regular comment. -ida_lines.COLOR_REGFUNC (variable) +ida_lines.COLOR_REGFUNC Regular function. -ida_lines.COLOR_RESERVED1 (variable) +ida_lines.COLOR_RESERVED1 This tag is reserved for internal IDA use. -ida_lines.COLOR_RPTCMT (variable) +ida_lines.COLOR_RPTCMT Repeatable comment (comment defined somewhere else) -ida_lines.COLOR_SEGNAME (variable) +ida_lines.COLOR_SEGNAME Segment name. -ida_lines.COLOR_SELECTED (variable) +ida_lines.COLOR_SELECTED Selected. -ida_lines.COLOR_STRING (variable) +ida_lines.COLOR_STRING String constant in instruction. -ida_lines.COLOR_SYMBOL (variable) +ida_lines.COLOR_SYMBOL Punctuation. -ida_lines.COLOR_UNAME (variable) +ida_lines.COLOR_UNAME Regular unknown name. -ida_lines.COLOR_UNKNAME (variable) +ida_lines.COLOR_UNKNAME Dummy unknown name. -ida_lines.COLOR_UNKNOWN (variable) +ida_lines.COLOR_UNKNOWN Unexplored byte. -ida_lines.COLOR_VOIDOP (variable) +ida_lines.COLOR_VOIDOP Void operand. -ida_lines.COLSTR (function) +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 -ida_lines.SCOLOR_ADDR (variable) +ida_lines.SCOLOR_ADDR Hidden address mark. -ida_lines.SCOLOR_ALTOP (variable) +ida_lines.SCOLOR_ALTOP Alternative operand. -ida_lines.SCOLOR_ASMDIR (variable) +ida_lines.SCOLOR_ASMDIR Assembler directive. -ida_lines.SCOLOR_AUTOCMT (variable) +ida_lines.SCOLOR_AUTOCMT Automatic comment. -ida_lines.SCOLOR_BINPREF (variable) +ida_lines.SCOLOR_BINPREF Binary line prefix bytes. -ida_lines.SCOLOR_CHAR (variable) +ida_lines.SCOLOR_CHAR Char constant in instruction. -ida_lines.SCOLOR_CNAME (variable) +ida_lines.SCOLOR_CNAME Regular code name. -ida_lines.SCOLOR_CODNAME (variable) +ida_lines.SCOLOR_CODNAME Dummy code name. -ida_lines.SCOLOR_COLLAPSED (variable) +ida_lines.SCOLOR_COLLAPSED Collapsed line. -ida_lines.SCOLOR_CREF (variable) +ida_lines.SCOLOR_CREF Code reference. -ida_lines.SCOLOR_CREFTAIL (variable) +ida_lines.SCOLOR_CREFTAIL Code reference to tail byte. -ida_lines.SCOLOR_DATNAME (variable) +ida_lines.SCOLOR_DATNAME Dummy Data Name. -ida_lines.SCOLOR_DCHAR (variable) +ida_lines.SCOLOR_DCHAR Char constant in data directive. -ida_lines.SCOLOR_DEFAULT (variable) +ida_lines.SCOLOR_DEFAULT Default. -ida_lines.SCOLOR_DEMNAME (variable) +ida_lines.SCOLOR_DEMNAME Demangled Name. -ida_lines.SCOLOR_DNAME (variable) +ida_lines.SCOLOR_DNAME Regular Data Name. -ida_lines.SCOLOR_DNUM (variable) +ida_lines.SCOLOR_DNUM Numeric constant in data directive. -ida_lines.SCOLOR_DREF (variable) +ida_lines.SCOLOR_DREF Data reference. -ida_lines.SCOLOR_DREFTAIL (variable) +ida_lines.SCOLOR_DREFTAIL Data reference to tail byte. -ida_lines.SCOLOR_DSTR (variable) +ida_lines.SCOLOR_DSTR String constant in data directive. -ida_lines.SCOLOR_ERROR (variable) +ida_lines.SCOLOR_ERROR Error or problem. -ida_lines.SCOLOR_ESC (variable) +ida_lines.SCOLOR_ESC Escape character (Quote next character) -ida_lines.SCOLOR_EXTRA (variable) +ida_lines.SCOLOR_EXTRA Extra line. -ida_lines.SCOLOR_HIDNAME (variable) +ida_lines.SCOLOR_HIDNAME Hidden name. -ida_lines.SCOLOR_IMPNAME (variable) +ida_lines.SCOLOR_IMPNAME Imported name. -ida_lines.SCOLOR_INSN (variable) +ida_lines.SCOLOR_INSN Instruction. -ida_lines.SCOLOR_INV (variable) +ida_lines.SCOLOR_INV Escape character (Inverse colors) -ida_lines.SCOLOR_KEYWORD (variable) +ida_lines.SCOLOR_KEYWORD Keywords. -ida_lines.SCOLOR_LIBNAME (variable) +ida_lines.SCOLOR_LIBNAME Library function name. -ida_lines.SCOLOR_LOCNAME (variable) +ida_lines.SCOLOR_LOCNAME Local variable name. -ida_lines.SCOLOR_MACRO (variable) +ida_lines.SCOLOR_MACRO Macro. -ida_lines.SCOLOR_NUMBER (variable) +ida_lines.SCOLOR_NUMBER Numeric constant in instruction. -ida_lines.SCOLOR_OFF (variable) +ida_lines.SCOLOR_OFF Escape character (OFF) -ida_lines.SCOLOR_ON (variable) +ida_lines.SCOLOR_ON Escape character (ON) -ida_lines.SCOLOR_PREFIX (variable) +ida_lines.SCOLOR_PREFIX Line prefix. -ida_lines.SCOLOR_REG (variable) +ida_lines.SCOLOR_REG Register name. -ida_lines.SCOLOR_REGCMT (variable) +ida_lines.SCOLOR_REGCMT Regular comment. -ida_lines.SCOLOR_RPTCMT (variable) +ida_lines.SCOLOR_RPTCMT Repeatable comment (defined not here) -ida_lines.SCOLOR_SEGNAME (variable) +ida_lines.SCOLOR_SEGNAME Segment name. -ida_lines.SCOLOR_STRING (variable) +ida_lines.SCOLOR_STRING String constant in instruction. -ida_lines.SCOLOR_SYMBOL (variable) +ida_lines.SCOLOR_SYMBOL Punctuation. -ida_lines.SCOLOR_UNAME (variable) +ida_lines.SCOLOR_UNAME Regular unknown name. -ida_lines.SCOLOR_UNKNAME (variable) +ida_lines.SCOLOR_UNKNAME Dummy unknown name. -ida_lines.SCOLOR_VOIDOP (variable) +ida_lines.SCOLOR_VOIDOP Void operand. -ida_lines.add_extra_cmt (function) - add_extra_cmt(ea, isprev, format) -> bool - Add anterior/posterior comment line(s). - - @param ea: (C++: ea_t) linear address - @param isprev: (C++: bool) do we add anterior lines? (0-no, posterior) - @param format: (C++: const char *) 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. - @return: true if success +ida_lines.VEL_CMT + append comment line -ida_lines.add_extra_line (function) - add_extra_line(ea, isprev, format) -> bool - Add anterior/posterior non-comment line(s). - - @param ea: (C++: ea_t) linear address - @param isprev: (C++: bool) do we add anterior lines? (0-no, posterior) - @param format: (C++: const char *) printf() style format string. may contain \n to denote new lines. - @return: true if success +ida_lines.VEL_POST + append posterior line -ida_lines.add_pgm_cmt (function) - add_pgm_cmt(format) -> bool - Add anterior comment line(s) at the start of program. - - @param format: (C++: const char *) 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. - @return: true if success +ida_lines.add_extra_cmt(*args) -> bool -ida_lines.add_sourcefile (function) - 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: (C++: ea_t) linear address of start of the address range - @param ea2: (C++: ea_t) linear address of end of the address range (excluded) - @param filename: (C++: const char *) name of source file. - @return: success +ida_lines.add_extra_line(*args) -> bool -ida_lines.calc_bg_color (function) - calc_bg_color(ea) -> bgcolor_t - Get background color for line at 'ea' - - @param ea: (C++: ea_t) - @return: RGB color +ida_lines.add_pgm_cmt(*args) -> bool -ida_lines.calc_prefix_color (function) - calc_prefix_color(ea) -> color_t - Get prefix color for line at 'ea' - - @param ea: (C++: ea_t) - @return: Line prefix colors +ida_lines.add_sourcefile(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, filename: str) -> bool -ida_lines.create_encoding_helper (function) - create_encoding_helper(encidx=-1, nr=nr_once) -> encoder_t * - - @param encidx: int - @param nr: enum encoder_t::notify_recerr_t +ida_lines.calc_bg_color(ea: ida_idaapi.ea_t) -> "bgcolor_t" + Get background color for line at 'ea' + + @returns RGB color -ida_lines.del_extra_cmt (function) - del_extra_cmt(ea, what) - - @param ea: ea_t - @param what: int +ida_lines.calc_prefix_color(ea: ida_idaapi.ea_t) -> "color_t" + Get prefix color for line at 'ea' + + @returns Line prefix colors -ida_lines.del_sourcefile (function) - del_sourcefile(ea) -> bool - Delete information about the source file. - - @param ea: (C++: ea_t) linear address - @return: success +ida_lines.create_encoding_helper(*args) -> "encoder_t *" -ida_lines.delete_extra_cmts (function) - delete_extra_cmts(ea, what) - - @param ea: ea_t - @param what: int +ida_lines.del_extra_cmt(ea: ida_idaapi.ea_t, what: int) -> bool -ida_lines.generate_disasm_line (function) - generate_disasm_line(ea, flags=0) -> str - - @param ea: ea_t - @param flags: int +ida_lines.del_sourcefile(ea: ida_idaapi.ea_t) -> bool -ida_lines.generate_disassembly (function) - generate_disassembly(ea, max_lines, as_stack, notags) -> (int, [str, ...]) +ida_lines.delete_extra_cmts(ea: ida_idaapi.ea_t, what: int) -> None + +ida_lines.generate_disasm_line(ea: ida_idaapi.ea_t, flags: int = 0) -> str + +ida_lines.generate_disassembly(ea, max_lines, as_stack, notags) 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 - @param notags: bool - @return: - None on failure + @return: + - None on failure - tuple(most_important_line_number, list(lines)) : Returns a tuple containing the most important line number and a list of generated lines -ida_lines.get_extra_cmt (function) - get_extra_cmt(ea, what) -> ssize_t - - @param ea: ea_t - @param what: int +ida_lines.get_extra_cmt(ea: ida_idaapi.ea_t, what: int) -> int -ida_lines.get_first_free_extra_cmtidx (function) - get_first_free_extra_cmtidx(ea, start) -> int - - @param ea: ea_t - @param start: int +ida_lines.get_first_free_extra_cmtidx(ea: ida_idaapi.ea_t, start: int) -> int -ida_lines.get_sourcefile (function) - get_sourcefile(ea, bounds=None) -> char const * - Get name of source file occupying the given address. - - @param ea: (C++: ea_t) linear address - @param bounds: (C++: range_t *) pointer to the output buffer with the address range for the - current file. May be nullptr. - @return: nullptr if source file information is not found, otherwise returns - pointer to file name +ida_lines.get_sourcefile(ea: ida_idaapi.ea_t, bounds: "range_t" = None) -> str -ida_lines.install_user_defined_prefix (function) - install_user_defined_prefix(prefix_len, udp, owner) -> bool - User-defined line-prefixes are displayed just after the autogenerated line - prefixes in the disassembly listing. There is no need to call this function - explicitly. Use the user_defined_prefix_t class. - - @param prefix_len: (C++: size_t) prefixed length. if 0, then uninstall UDP - @param udp: (C++: struct user_defined_prefix_t *) object to generate user-defined prefix - @param owner: (C++: const void *) pointer to the plugin_t that owns UDP if non-nullptr, then the - object will be uninstalled and destroyed when the plugin gets - unloaded +ida_lines.install_user_defined_prefix(*args) -> bool -ida_lines.requires_color_esc (function) - Checks if the given character requires escaping +ida_lines.requires_color_esc(c) Is the given char a color escape character? -ida_lines.set_user_defined_prefix (function) - set_user_defined_prefix(width, pycb) -> bool - Deprecated. Please use install_user_defined_prefix() instead - - @param width: size_t - @param pycb: PyObject * +ida_lines.tag_addr(ea: ida_idaapi.ea_t) -> str + Insert an address mark into a string. + + @param ea: address to include -ida_lines.tag_addr (function) - tag_addr(ea) -> PyObject * - Insert an address mark into a string. - - @param ea: (C++: ea_t) address to include +ida_lines.tag_advance(line: str, cnt: int) -> int + Move pointer to a 'line' to 'cnt' positions right. Take into account escape sequences. + + @param line: pointer to string + @param cnt: number of positions to move right + @returns moved pointer -ida_lines.tag_advance (function) - tag_advance(line, cnt) -> int - Move pointer to a 'line' to 'cnt' positions right. Take into account escape - sequences. - - @param line: (C++: const char *) pointer to string - @param cnt: (C++: int) number of positions to move right - @return: moved pointer +ida_lines.tag_remove(nonnul_instr: str) -> str + Remove color escape sequences from a string. + + @returns length of resulting string, -1 if error -ida_lines.tag_remove (function) - tag_remove(nonnul_instr) -> str - - @param nonnul_instr: char const * +ida_lines.tag_skipcode(line: str) -> 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. + + @returns moved pointer -ida_lines.tag_skipcode (function) - 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 *) char const * - @return: moved pointer +ida_lines.tag_skipcodes(line: str) -> int + Move the pointer past all color codes. + + @param line: can't be nullptr + @returns moved pointer, can't be nullptr -ida_lines.tag_skipcodes (function) - tag_skipcodes(line) -> int - Move the pointer past all color codes. - - @param line: (C++: const char *) can't be nullptr - @return: moved pointer, can't be nullptr +ida_lines.tag_strlen(line: str) -> "ssize_t" + Calculate length of a colored string This function computes the length in unicode codepoints of a line + + @returns the number of codepoints in the line, or -1 on error -ida_lines.tag_strlen (function) - 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 *) char const * - @return: the number of codepoints in the line, or -1 on error +ida_lines.update_extra_cmt(ea: ida_idaapi.ea_t, what: int, str: str) -> bool -ida_lines.update_extra_cmt (function) - update_extra_cmt(ea, what, str) - - @param ea: ea_t - @param what: int - @param str: char const * +ida_lines.user_defined_prefix_t -ida_lines.user_defined_prefix_t (class) - Proxy of C++ user_defined_prefix_t class. +ida_lines.user_defined_prefix_t.__disown__(self) -ida_lines.user_defined_prefix_t.__disown__ (method) +ida_lines.user_defined_prefix_t.__init__(self, *args) -ida_lines.user_defined_prefix_t.__init__ (method) - __init__(self, prefix_len, owner) -> user_defined_prefix_t - - @param prefix_len: size_t - @param owner: void const * +ida_lines.user_defined_prefix_t.get_user_defined_prefix(self, ea: ida_idaapi.ea_t, insn: "insn_t const &", lnnum: int, indent: int, line: str) -> None + This callback must be overridden by the derived class. + + @param ea: the current address + @param insn: the current instruction. if the current item is not an instruction, then insn.itype is zero. + @param lnnum: number of the current line (each address may have several listing lines for it). 0 means the very first line for the current address. + @param indent: see explanations for gen_printf() + @param line: the line to be generated. the line usually contains color tags. this argument can be examined to decide whether to generate the prefix. -ida_lines.user_defined_prefix_t.get_user_defined_prefix (method) - get_user_defined_prefix(self, ea, insn, lnnum, indent, line) - This callback must be overridden by the derived class. - - @param ea: (C++: ea_t) the current address - @param insn: (C++: const class insn_t &) the current instruction. if the current item is not an instruction, - then insn.itype is zero. - @param lnnum: (C++: int) number of the current line (each address may have several listing - lines for it). 0 means the very first line for the current - address. - @param indent: (C++: int) see explanations for gen_printf() - @param line: (C++: const char *) the line to be generated. the line usually contains color tags. - this argument can be examined to decide whether to generate the - prefix. - -ida_loader (module) +ida_loader Definitions of IDP, LDR, PLUGIN module interfaces. This file also contains: @@ -47681,740 +32156,1486 @@ ida_loader (module) * functions to generate output files * high level functions to work with the database (open, save, close) - The LDR interface consists of one structure: loader_t - The IDP interface consists of one structure: processor_t + + The LDR interface consists of one structure: loader_t + The IDP interface consists of one structure: processor_t The PLUGIN interface consists of one structure: plugin_t - - Modules can't use standard FILE* functions. They must use functions from - <fpro.h> - - Modules can't use standard memory allocation functions. They must use functions - from <pro.h> - - The exported entry #1 in the module should point to the the appropriate - structure. (loader_t for LDR module, for example) + Modules can't use standard FILE* functions. They must use functions from <fpro.h> + Modules can't use standard memory allocation functions. They must use functions from <pro.h> + The exported entry #1 in the module should point to the the appropriate structure. (loader_t for LDR module, for example) + -ida_loader.ACCEPT_ARCHIVE (variable) - Specify that a file format is served by archive loader See loader_t::accept_file +ida_loader.ACCEPT_ARCHIVE + Specify that a file format is served by archive loader See loader_t::accept_file + -ida_loader.ACCEPT_CONTINUE (variable) - Specify that the function must be called another time 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 (variable) - Specify that a file format should be place first in "load file" dialog box. 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 (variable) +ida_loader.DBFL_BAK create backup file (if !DBFL_KILL) -ida_loader.DBFL_COMP (variable) +ida_loader.DBFL_COMP collect garbage -ida_loader.DBFL_KILL (variable) +ida_loader.DBFL_KILL delete unpacked database -ida_loader.DBFL_TEMP (variable) +ida_loader.DBFL_TEMP temporary database -ida_loader.FILEREG_NOTPATCHABLE (variable) - the data is kept in some encoded form in the file. +ida_loader.FILEREG_NOTPATCHABLE + the data is kept in some encoded form in the file. + -ida_loader.FILEREG_PATCHABLE (variable) - means that the input file may be patched (i.e. no compression, no iterated data, - etc) +ida_loader.FILEREG_PATCHABLE + means that the input file may be patched (i.e. no compression, no iterated data, etc) + -ida_loader.GENFLG_ASMINC (variable) +ida_loader.GENFLG_ASMINC OFILE_ASM,OFILE_LST: gen information only about types -ida_loader.GENFLG_ASMTYPE (variable) +ida_loader.GENFLG_ASMTYPE OFILE_ASM,OFILE_LST: gen information about types too -ida_loader.GENFLG_GENHTML (variable) +ida_loader.GENFLG_GENHTML OFILE_ASM,OFILE_LST: generate html (ui_genfile_callback will be used) -ida_loader.LDRF_RELOAD (variable) +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 (variable) - Requires a processor to be set. if this bit is not set, load_file() must call - set_processor_type(..., SETPROC_LOADER) +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 (variable) +ida_loader.MAX_DATABASE_DESCRIPTION Maximum database snapshot description length. -ida_loader.NEF_CODE (variable) - for load_binary_file(): load as a code segment +ida_loader.NEF_CODE + for load_binary_file(): load as a code segment + -ida_loader.NEF_FILL (variable) +ida_loader.NEF_FILL Fill segment gaps. -ida_loader.NEF_FIRST (variable) - This is the first file loaded into the database. +ida_loader.NEF_FIRST + This is the first file loaded into the database. + -ida_loader.NEF_FLAT (variable) +ida_loader.NEF_FLAT Autocreate FLAT group (PE) -ida_loader.NEF_IMPS (variable) +ida_loader.NEF_IMPS Create import segment. -ida_loader.NEF_LALL (variable) +ida_loader.NEF_LALL Load all segments without questions. -ida_loader.NEF_LOPT (variable) +ida_loader.NEF_LOPT Display additional loader options dialog. -ida_loader.NEF_MAN (variable) +ida_loader.NEF_MAN Manual load. -ida_loader.NEF_MINI (variable) - Create mini database (do not copy segment bytes from the input file; use only - the file header metadata) +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 (variable) +ida_loader.NEF_NAME Rename entries. -ida_loader.NEF_RELOAD (variable) +ida_loader.NEF_RELOAD reload the file at the same place: * don't create segments * don't create fixup info * don't import segments * etc. - Load only the bytes into the base. A loader should have the LDRF_RELOAD bit set. + + Load only the bytes into the base. A loader should have the LDRF_RELOAD bit set. + -ida_loader.NEF_RSCS (variable) +ida_loader.NEF_RSCS Load resources. -ida_loader.NEF_SEGS (variable) +ida_loader.NEF_SEGS Create segments. -ida_loader.OFILE_ASM (variable) +ida_loader.OFILE_ASM Assembly. -ida_loader.OFILE_DIF (variable) +ida_loader.OFILE_DIF Difference. -ida_loader.OFILE_EXE (variable) +ida_loader.OFILE_EXE Executable file. -ida_loader.OFILE_IDC (variable) +ida_loader.OFILE_IDC IDC file. -ida_loader.OFILE_LST (variable) +ida_loader.OFILE_LST Disassembly listing. -ida_loader.OFILE_MAP (variable) +ida_loader.OFILE_MAP MAP file. -ida_loader.PATH_TYPE_CMD (variable) +ida_loader.PATH_TYPE_CMD full path to the file specified in the command line -ida_loader.PATH_TYPE_ID0 (variable) +ida_loader.PATH_TYPE_ID0 full path of ID0 file -ida_loader.PATH_TYPE_IDB (variable) +ida_loader.PATH_TYPE_IDB full path of IDB file -ida_loader.PLUGIN_DLL (variable) +ida_loader.PLUGIN_DLL Pattern to find plugin files. -ida_loader.SSF_AUTOMATIC (variable) +ida_loader.SSF_AUTOMATIC automatic snapshot -ida_loader.SSUF_DESC (variable) +ida_loader.SSUF_DESC Update the description. -ida_loader.SSUF_FLAGS (variable) +ida_loader.SSUF_FLAGS Update the flags. -ida_loader.SSUF_PATH (variable) +ida_loader.SSUF_PATH Update the path. -ida_loader.base2file (function) - base2file(fp, pos, ea1, ea2) -> int - Unload database to a binary file. This function works for wide byte processors - too. - - @param fp: (C++: FILE *) pointer to file - @param pos: (C++: qoff64_t) position in the file - @param ea1: (C++: ea_t) ,ea2: range of source linear addresses - @param ea2: (C++: ea_t) - @return: 1-ok(always), write error leads to immediate exit +ida_loader.base2file(fp: "FILE *", pos: "qoff64_t", ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> int + Unload database to a binary file. This function works for wide byte processors too. + + @param fp: pointer to file + @param pos: position in the file + @param ea1: range of source linear addresses + @param ea2: range of source linear addresses + @returns 1-ok(always), write error leads to immediate exit -ida_loader.build_snapshot_tree (function) - build_snapshot_tree(root) -> bool - Build the snapshot tree. - - @param root: (C++: snapshot_t *) snapshot root that will contain the snapshot tree elements. - @return: success +ida_loader.build_snapshot_tree(root: "snapshot_t") -> bool + Build the snapshot tree. + + @param root: snapshot root that will contain the snapshot tree elements. + @returns success -ida_loader.clr_database_flag (function) - clr_database_flag(dbfl) - - @param dbfl: uint32 +ida_loader.clr_database_flag(dbfl: int) -> None -ida_loader.extract_module_from_archive (function) - extract_module_from_archive(fname, is_remote=False) -> (NoneType, NoneType), (str, str) - 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 filename: (C++: char *) in: input file. out: name of the selected module. - @param is_remote: (C++: bool) is the input file remote? +ida_loader.extract_module_from_archive(fname: str, is_remote: bool = 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? @retval true: ok - @retval false: something bad happened (error message has been displayed to the - user) + @retval false: something bad happened (error message has been displayed to the user) -ida_loader.file2base (function) - 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: (C++: linput_t *) pointer of input source - @param pos: (C++: qoff64_t) position in the file - @param ea1: (C++: ea_t) ,ea2: range of destination linear addresses - @param patchable: (C++: int) should the kernel remember correspondence of file offsets to - linear addresses. +ida_loader.file2base(li: "linput_t *", pos: "qoff64_t", ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, patchable: int) -> 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 + @param pos: position in the file + @param ea1: range of destination linear addresses + @param ea2: range of destination linear addresses + @param patchable: should the kernel remember correspondence of file offsets to linear addresses. @retval 1: ok @retval 0: read error, a warning is displayed - @note: The storage type of the specified range will be changed to STT_VA. - @param patchable: (C++: int) should the kernel remember correspondence of file offsets to - linear addresses. - @retval 1: ok - @retval 0: read error, a warning is displayed - @note: The storage type of the specified range will be changed to STT_VA. -ida_loader.find_plugin (function) - find_plugin(name, load_if_needed=False) -> plugin_t * - Find a user-defined plugin and optionally load it. - - @param name: (C++: const char *) short plugin name without path and extension, or absolute path to - the file name - @param load_if_needed: (C++: bool) if the plugin is not present in the memory, try to load - it - @return: pointer to plugin description block +ida_loader.find_plugin(name: str, load_if_needed: bool = 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 + @param load_if_needed: if the plugin is not present in the memory, try to load it + @returns pointer to plugin description block -ida_loader.flush_buffers (function) - flush_buffers() -> int +ida_loader.flush_buffers() -> int Flush buffers to the disk. -ida_loader.gen_exe_file (function) - 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 == nullptr then return: +ida_loader.gen_exe_file(fp: "FILE *") -> int + Generate an exe file (unload the database in binary form). + + @returns fp the output file handle. if fp == nullptr then return: * 1: can generate an executable file * 0: can't generate an executable file @retval 1: ok @retval 0: failed -ida_loader.gen_file (function) - gen_file(otype, fp, ea1, ea2, flags) -> int - Generate an output file. - - @param otype: (C++: ofile_type_t) type of output file. - @param fp: (C++: FILE *) the output file handle - @param ea1: (C++: ea_t) start address. For some file types this argument is ignored - @param ea2: (C++: ea_t) end address. For some file types this argument is ignored as usual - in ida, the end address of the range is not included - @param flags: (C++: int) Generate file flagsOFILE_EXE: +ida_loader.gen_file(otype: "ofile_type_t", fp: "FILE *", ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, flags: int) -> int + Generate an output file. OFILE_EXE: + + @param otype: type of output file. + @param fp: the output file handle + @param ea1: start address. For some file types this argument is ignored + @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 + @param flags: Generate file flags + @returns number of the generated lines. -1 if an error occurred @retval 0: can't generate exe file @retval 1: ok - @return: number of the generated lines. -1 if an error occurred -ida_loader.get_basic_file_type (function) - 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_basic_file_type(li: "linput_t *") -> "filetype_t" + Get the input file type. This function can recognize libraries and zip files. + -ida_loader.get_elf_debug_file_directory (function) - get_elf_debug_file_directory() -> char const * - Get the value of the ELF_DEBUG_FILE_DIRECTORY configuration directive. +ida_loader.get_elf_debug_file_directory() -> str + Get the value of the ELF_DEBUG_FILE_DIRECTORY configuration directive. + -ida_loader.get_file_type_name (function) - get_file_type_name() -> str - Get name of the current file type. The current file type is kept in - idainfo::filetype. - - @return: size of answer, this function always succeeds +ida_loader.get_file_type_name() -> str + Get name of the current file type. The current file type is kept in idainfo::filetype. + + @returns size of answer, this function always succeeds -ida_loader.get_fileregion_ea (function) - 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_ea(offset: "qoff64_t") -> ida_idaapi.ea_t + Get linear address which corresponds to the specified input file offset. If can't be found, return BADADDR + -ida_loader.get_fileregion_offset (function) - 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_fileregion_offset(ea: ida_idaapi.ea_t) -> "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. + -ida_loader.get_path (function) - get_path(pt) -> char const * - Get the file path - - @param pt: (C++: path_type_t) file path type Types of the file pathes - @return: file path, never returns nullptr +ida_loader.get_path(pt: "path_type_t") -> str + Get the file path + + @param pt: file path type Types of the file pathes + @returns file path, never returns nullptr -ida_loader.get_plugin_options (function) - 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 nullptr if there we no options specified - - @param plugin: (C++: const char *) char const * +ida_loader.get_plugin_options(plugin: str) -> str + 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 nullptr if there we no options specified + -ida_loader.idp_desc_t (class) - Proxy of C++ idp_desc_t class. +ida_loader.idp_desc_t -ida_loader.idp_desc_t.__init__ (method) - __init__(self) -> idp_desc_t +ida_loader.idp_desc_t.__init__(self) -ida_loader.idp_desc_t.checked (variable) +ida_loader.idp_desc_t.checked internal, for cache management -ida_loader.idp_desc_t.family (variable) +ida_loader.idp_desc_t.family processor's family -ida_loader.idp_desc_t.is_script (variable) +ida_loader.idp_desc_t.is_script the processor module is a script -ida_loader.idp_desc_t.mtime (variable) +ida_loader.idp_desc_t.mtime time of last modification -ida_loader.idp_desc_t.names (variable) +ida_loader.idp_desc_t.names processor names -ida_loader.idp_desc_t.path (variable) +ida_loader.idp_desc_t.path module file name -ida_loader.idp_name_t (class) - Proxy of C++ idp_name_t class. +ida_loader.idp_name_t -ida_loader.idp_name_t.__init__ (method) - __init__(self) -> idp_name_t +ida_loader.idp_name_t.__init__(self) -ida_loader.idp_name_t.hidden (variable) +ida_loader.idp_name_t.hidden is hidden -ida_loader.idp_name_t.lname (variable) +ida_loader.idp_name_t.lname long processor name -ida_loader.idp_name_t.sname (variable) +ida_loader.idp_name_t.sname short processor name -ida_loader.is_database_flag (function) - is_database_flag(dbfl) -> bool - Get the current database flag - - @param dbfl: (C++: uint32) flag Database flags - @return: the state of the flag (set or cleared) +ida_loader.is_database_flag(dbfl: int) -> bool + Get the current database flag + + @param dbfl: flag Database flags + @returns the state of the flag (set or cleared) -ida_loader.is_trusted_idb (function) - is_trusted_idb() -> bool +ida_loader.is_trusted_idb() -> bool Is the database considered as trusted? -ida_loader.load_and_run_plugin (function) - load_and_run_plugin(name, arg) -> bool +ida_loader.load_and_run_plugin(name: str, arg: "size_t") -> bool Load & run a plugin. - - @param name: (C++: const char *) char const * - @param arg: (C++: size_t) -ida_loader.load_binary_file (function) - 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: (C++: const char *) the name of input file as is (if the input file is from - library, then this is the name from the library) - @param li: (C++: linput_t *) loader input source - @param _neflags: (C++: ushort) Load file flags. For the first file, the flag NEF_FIRST must be - set. - @param fileoff: (C++: qoff64_t) Offset in the input file - @param basepara: (C++: ea_t) Load address in paragraphs - @param binoff: (C++: ea_t) Load offset (load_address=(basepara<<4)+binoff) - @param nbytes: (C++: uint64) Number of bytes to load from the file. +ida_loader.load_binary_file(filename: str, li: "linput_t *", _neflags: "ushort", fileoff: "qoff64_t", basepara: ida_idaapi.ea_t, binoff: ida_idaapi.ea_t, nbytes: "uint64") -> 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) + @param li: loader input source + @param _neflags: Load file flags. For the first file, the flag NEF_FIRST must be set. + @param fileoff: Offset in the input file + @param basepara: Load address in paragraphs + @param binoff: Load offset (load_address=(basepara<<4)+binoff) + @param nbytes: Number of bytes to load from the file. * 0: up to the end of the file @retval true: ok @retval false: failed (couldn't open the file) -ida_loader.load_ids_module (function) - 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: (C++: char *) name of file to apply +ida_loader.load_ids_module(fname: "char *") -> 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 @retval 1: ok - @retval 0: some error (a message is displayed). if the ids file does not exist, - no message is displayed + @retval 0: some error (a message is displayed). if the ids file does not exist, no message is displayed -ida_loader.load_plugin (function) - load_plugin(name) -> PyCapsule or None +ida_loader.load_plugin(name) Loads a plugin - @param name: char const * - @return: - None if plugin could not be loaded + @param name: short plugin name without path and extension, + or absolute path to the file name + @return: + - None if plugin could not be loaded - An opaque object representing the loaded plugin -ida_loader.loader_t (class) - Proxy of C++ loader_t class. +ida_loader.loader_t -ida_loader.loader_t.__init__ (method) - __init__(self) -> loader_t +ida_loader.loader_t.__init__(self) -ida_loader.loader_t.flags (variable) - Loader flags +ida_loader.loader_t.flags + Loader flags + -ida_loader.loader_t.version (variable) +ida_loader.loader_t.version api version, should be IDP_INTERFACE_VERSION -ida_loader.mem2base (function) - mem2base(py_mem, ea, fpos=-1) -> int +ida_loader.mem2base(mem, ea, fpos) Load database from the memory. - @param py_mem: the buffer + @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 + @return: + - Returns zero if the passed buffer was not a string - Otherwise 1 is returned -ida_loader.plugin_info_t (class) - Proxy of C++ plugin_info_t class. +ida_loader.plugin_info_t -ida_loader.plugin_info_t.__init__ (method) - __init__(self) -> plugin_info_t +ida_loader.plugin_info_t.__init__(self) -ida_loader.plugin_info_t.arg (variable) +ida_loader.plugin_info_t.arg argument used to call the plugin -ida_loader.plugin_info_t.comment (variable) +ida_loader.plugin_info_t.comment a copy of plugin_t::comment -ida_loader.plugin_info_t.entry (variable) +ida_loader.plugin_info_t.entry pointer to the plugin if it is already loaded -ida_loader.plugin_info_t.flags (variable) +ida_loader.plugin_info_t.flags a copy of plugin_t::flags -ida_loader.plugin_info_t.hotkey (variable) +ida_loader.plugin_info_t.hotkey current hotkey to run the plugin -ida_loader.plugin_info_t.name (variable) - short name of the plugin it will appear in the menu +ida_loader.plugin_info_t.idaplg_name + "name" provided by ida-plugin.json or basename of path (without extension) -ida_loader.plugin_info_t.next (variable) +ida_loader.plugin_info_t.name + short name of the plugin it will appear in the menu + + +ida_loader.plugin_info_t.next next plugin information -ida_loader.plugin_info_t.org_hotkey (variable) +ida_loader.plugin_info_t.org_hotkey original hotkey to run the plugin -ida_loader.plugin_info_t.org_name (variable) +ida_loader.plugin_info_t.org_name original short name of the plugin -ida_loader.plugin_info_t.path (variable) +ida_loader.plugin_info_t.path full path to the plugin -ida_loader.process_archive (function) - 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 'loader' is a pointer - to load_info_t structure. - - @param temp_file: (C++: qstring *) - @param li: (C++: linput_t *) - @param module_name: (C++: qstring *) - @param neflags: (C++: ushort *) - @param defmember: (C++: const char *) char const * - @param loader: (C++: const load_info_t *) load_info_t const * +ida_loader.process_archive(temp_file: str, li: "linput_t *", module_name: str, neflags: "ushort *", defmember: str, loader: "load_info_t const *") -> str + Calls loader_t::process_archive() For parameters and return value description look at loader_t::process_archive(). Additional parameter 'loader' is a pointer to load_info_t structure. + -ida_loader.qvector_snapshotvec_t (class) - Proxy of C++ qvector< snapshot_t * > class. +ida_loader.qvector_snapshotvec_t -ida_loader.qvector_snapshotvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< snapshot_t * > const & +ida_loader.qvector_snapshotvec_t.__eq__(self, r: "qvector_snapshotvec_t") -> bool -ida_loader.qvector_snapshotvec_t.__getitem__ (method) - __getitem__(self, i) -> snapshot_t - - @param i: size_t +ida_loader.qvector_snapshotvec_t.__getitem__(self, i: "size_t") -> "snapshot_t *const &" -ida_loader.qvector_snapshotvec_t.__init__ (method) - __init__(self) -> qvector_snapshotvec_t - __init__(self, x) -> qvector_snapshotvec_t - - @param x: qvector< snapshot_t * > const & +ida_loader.qvector_snapshotvec_t.__init__(self, *args) -ida_loader.qvector_snapshotvec_t.__len__ (method) - __len__(self) -> size_t +ida_loader.qvector_snapshotvec_t.__len__(self) -> "size_t" -ida_loader.qvector_snapshotvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< snapshot_t * > const & +ida_loader.qvector_snapshotvec_t.__ne__(self, r: "qvector_snapshotvec_t") -> bool -ida_loader.qvector_snapshotvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: snapshot_t *const & +ida_loader.qvector_snapshotvec_t.__setitem__(self, i: "size_t", v: "snapshot_t") -> None -ida_loader.qvector_snapshotvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: snapshot_t *const & +ida_loader.qvector_snapshotvec_t._del(self, x: "snapshot_t") -> bool -ida_loader.qvector_snapshotvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: snapshot_t *const & +ida_loader.qvector_snapshotvec_t.add_unique(self, x: "snapshot_t") -> bool -ida_loader.qvector_snapshotvec_t.at (method) - at(self, _idx) -> snapshot_t - - @param _idx: size_t +ida_loader.qvector_snapshotvec_t.append(self, x: "snapshot_t") -> None -ida_loader.qvector_snapshotvec_t.begin (method) - begin(self) -> qvector< snapshot_t * >::iterator - begin(self) -> qvector< snapshot_t * >::const_iterator +ida_loader.qvector_snapshotvec_t.at(self, _idx: "size_t") -> "snapshot_t *const &" -ida_loader.qvector_snapshotvec_t.capacity (method) - capacity(self) -> size_t +ida_loader.qvector_snapshotvec_t.begin(self, *args) -> "qvector< snapshot_t * >::const_iterator" -ida_loader.qvector_snapshotvec_t.clear (method) - clear(self) +ida_loader.qvector_snapshotvec_t.capacity(self) -> "size_t" -ida_loader.qvector_snapshotvec_t.empty (method) - empty(self) -> bool +ida_loader.qvector_snapshotvec_t.clear(self) -> None -ida_loader.qvector_snapshotvec_t.end (method) - end(self) -> qvector< snapshot_t * >::iterator - end(self) -> qvector< snapshot_t * >::const_iterator +ida_loader.qvector_snapshotvec_t.empty(self) -> bool -ida_loader.qvector_snapshotvec_t.erase (method) - erase(self, it) -> qvector< snapshot_t * >::iterator - - @param it: qvector< snapshot_t * >::iterator - - erase(self, first, last) -> qvector< snapshot_t * >::iterator - - @param first: qvector< snapshot_t * >::iterator - @param last: qvector< snapshot_t * >::iterator +ida_loader.qvector_snapshotvec_t.end(self, *args) -> "qvector< snapshot_t * >::const_iterator" -ida_loader.qvector_snapshotvec_t.extract (method) - extract(self) -> snapshot_t ** +ida_loader.qvector_snapshotvec_t.erase(self, *args) -> "qvector< snapshot_t * >::iterator" -ida_loader.qvector_snapshotvec_t.find (method) - find(self, x) -> qvector< snapshot_t * >::iterator - - @param x: snapshot_t *const & - - find(self, x) -> qvector< snapshot_t * >::const_iterator - - @param x: snapshot_t *const & +ida_loader.qvector_snapshotvec_t.extend(self, x: "qvector_snapshotvec_t") -> None -ida_loader.qvector_snapshotvec_t.has (method) - has(self, x) -> bool - - @param x: snapshot_t *const & +ida_loader.qvector_snapshotvec_t.extract(self) -> "snapshot_t **" -ida_loader.qvector_snapshotvec_t.inject (method) - inject(self, s, len) - - @param s: snapshot_t ** - @param len: size_t +ida_loader.qvector_snapshotvec_t.find(self, *args) -> "qvector< snapshot_t * >::const_iterator" -ida_loader.qvector_snapshotvec_t.insert (method) - insert(self, it, x) -> qvector< snapshot_t * >::iterator - - @param it: qvector< snapshot_t * >::iterator - @param x: snapshot_t *const & +ida_loader.qvector_snapshotvec_t.has(self, x: "snapshot_t") -> bool -ida_loader.qvector_snapshotvec_t.pop_back (method) - pop_back(self) +ida_loader.qvector_snapshotvec_t.inject(self, s: "snapshot_t **", len: "size_t") -> None -ida_loader.qvector_snapshotvec_t.push_back (method) - push_back(self, x) - - @param x: snapshot_t *const & - - push_back(self) -> snapshot_t *& +ida_loader.qvector_snapshotvec_t.insert(self, it: "qvector< snapshot_t * >::iterator", x: "snapshot_t") -> "qvector< snapshot_t * >::iterator" -ida_loader.qvector_snapshotvec_t.qclear (method) - qclear(self) +ida_loader.qvector_snapshotvec_t.pop_back(self) -> None -ida_loader.qvector_snapshotvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_loader.qvector_snapshotvec_t.push_back(self, *args) -> "snapshot_t *&" -ida_loader.qvector_snapshotvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: snapshot_t *const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_loader.qvector_snapshotvec_t.qclear(self) -> None -ida_loader.qvector_snapshotvec_t.size (method) - size(self) -> size_t +ida_loader.qvector_snapshotvec_t.reserve(self, cnt: "size_t") -> None -ida_loader.qvector_snapshotvec_t.swap (method) - swap(self, r) - - @param r: qvector< snapshot_t * > & +ida_loader.qvector_snapshotvec_t.resize(self, *args) -> None -ida_loader.qvector_snapshotvec_t.truncate (method) - truncate(self) +ida_loader.qvector_snapshotvec_t.size(self) -> "size_t" -ida_loader.reload_file (function) - 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: (C++: const char *) name of the input file. if file == nullptr then returns: +ida_loader.qvector_snapshotvec_t.swap(self, r: "qvector_snapshotvec_t") -> None + +ida_loader.qvector_snapshotvec_t.truncate(self) -> None + +ida_loader.reload_file(file: str, is_remote: bool) -> 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 == nullptr then returns: * 1: can reload the input file * 0: can't reload the input file - @param is_remote: (C++: bool) is the file located on a remote computer with the debugger - server? - @return: success + @param is_remote: is the file located on a remote computer with the debugger server? + @returns success -ida_loader.run_plugin (function) - run_plugin(plg, arg) -> bool +ida_loader.run_plugin(plg, arg) Runs a plugin @param plg: A plugin object (returned by load_plugin()) - @param arg: size_t + @param arg: the code to pass to the plugin's "run()" function @return: Boolean -ida_loader.save_database (function) - save_database(outfile, flags, root=None, attr=None) -> bool - Save current database using a new file name. - - @param outfile: (C++: const char *) output database file name - @param flags: (C++: uint32) Database flags - @param root: (C++: const snapshot_t *) optional: snapshot tree root. - @param attr: (C++: const snapshot_t *) optional: snapshot attributes - @note: when both root and attr are not nullptr then the snapshot attributes will - be updated, otherwise the snapshot attributes will be inherited from the - current database. - @return: success +ida_loader.save_database(outfile: str = None, flags: int = -1, root: "snapshot_t" = None, attr: "snapshot_t" = None) -> bool + Save current database using a new file name. + + @param outfile: output database file name; nullptr means the current path + @param flags: Database flags; -1 means the current flags + @param root: optional: snapshot tree root. + @param attr: optional: snapshot attributes + @returns success -ida_loader.set_database_flag (function) - set_database_flag(dbfl, cnd=True) - Set or clear database flag - - @param dbfl: (C++: uint32) flag Database flags - @param cnd: (C++: bool) set if true or clear flag otherwise +ida_loader.set_database_flag(dbfl: int, cnd: bool = True) -> None + Set or clear database flag + + @param dbfl: flag Database flags + @param cnd: set if true or clear flag otherwise -ida_loader.set_import_name (function) - set_import_name(modnode, ea, name) - Set information about the named import entry. This function performs - 'modnode.supset_ea(ea, name);' - - @param modnode: (C++: uval_t) node with information about imported entries - @param ea: (C++: ea_t) linear address of the entry - @param name: (C++: const char *) name of the entry +ida_loader.set_import_name(modnode: int, ea: ida_idaapi.ea_t, name: str) -> None + Set information about the named import entry. This function performs 'modnode.supset_ea(ea, name);' + + @param modnode: node with information about imported entries + @param ea: linear address of the entry + @param name: name of the entry -ida_loader.set_import_ordinal (function) - set_import_ordinal(modnode, ea, ord) - Set information about the ordinal import entry. This function performs - 'modnode.altset(ord, ea2node(ea));' - - @param modnode: (C++: uval_t) node with information about imported entries - @param ea: (C++: ea_t) linear address of the entry - @param ord: (C++: uval_t) ordinal number of the entry +ida_loader.set_import_ordinal(modnode: int, ea: ida_idaapi.ea_t, ord: int) -> None + Set information about the ordinal import entry. This function performs 'modnode.altset(ord, ea2node(ea));' + + @param modnode: node with information about imported entries + @param ea: linear address of the entry + @param ord: ordinal number of the entry -ida_loader.set_path (function) - set_path(pt, path) - Set the file path - - @param pt: (C++: path_type_t) file path type Types of the file pathes - @param path: (C++: const char *) new file path, use nullptr or empty string to clear the file path +ida_loader.set_path(pt: "path_type_t", path: str) -> None + Set the file path + + @param pt: file path type Types of the file pathes + @param path: new file path, use nullptr or empty string to clear the file path -ida_loader.snapshot_t (class) - Proxy of C++ snapshot_t class. +ida_loader.snapshot_t -ida_loader.snapshot_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: snapshot_t const & +ida_loader.snapshot_t.__eq__(self, r: "snapshot_t") -> bool -ida_loader.snapshot_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: snapshot_t const & +ida_loader.snapshot_t.__ge__(self, r: "snapshot_t") -> bool -ida_loader.snapshot_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: snapshot_t const & +ida_loader.snapshot_t.__gt__(self, r: "snapshot_t") -> bool -ida_loader.snapshot_t.__init__ (method) - __init__(self) -> snapshot_t +ida_loader.snapshot_t.__init__(self) -ida_loader.snapshot_t.__le__ (method) - __le__(self, r) -> bool - - @param r: snapshot_t const & +ida_loader.snapshot_t.__le__(self, r: "snapshot_t") -> bool -ida_loader.snapshot_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: snapshot_t const & +ida_loader.snapshot_t.__lt__(self, r: "snapshot_t") -> bool -ida_loader.snapshot_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: snapshot_t const & +ida_loader.snapshot_t.__ne__(self, r: "snapshot_t") -> bool -ida_loader.snapshot_t.children (variable) +ida_loader.snapshot_t.children snapshot children -ida_loader.snapshot_t.clear (method) - clear(self) +ida_loader.snapshot_t.clear(self) -> None -ida_loader.snapshot_t.desc (variable) +ida_loader.snapshot_t.desc snapshot description -ida_loader.snapshot_t.filename (variable) +ida_loader.snapshot_t.filename snapshot file name -ida_loader.snapshot_t.flags (variable) - Snapshot flags +ida_loader.snapshot_t.flags + Snapshot flags + -ida_loader.snapshot_t.id (variable) +ida_loader.snapshot_t.id snapshot ID. This value is computed using qgettimeofday() -ida_moves (module) +ida_lumina + +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 + apply kvps that seem to be of higher "quality" than what's currently in the IDB + + +ida_lumina.apply_metadata(ea: ida_idaapi.ea_t, fi: "func_info_t", flags: int = 0) -> None + +ida_lumina.backup_metadata(ea: ida_idaapi.ea_t) -> bool + +ida_lumina.calc_func_metadata(out_fi: "func_info_t", pfn: "func_t const *", append_metadata: "metadata_appender_t *" = None) -> "md5_t *" + +ida_lumina.diff_metadata(handler: "func_md_diff_handler_t", left: "func_info_t", right: "func_info_t", flags: int = 0) -> bool + +ida_lumina.extra_cmt_t + +ida_lumina.extra_cmt_t.__init__(self) + +ida_lumina.extra_cmts_t + +ida_lumina.extra_cmts_t.__getitem__(self, i: "size_t") -> "extra_cmt_t const &" + +ida_lumina.extra_cmts_t.__init__(self, *args) + +ida_lumina.extra_cmts_t.__len__(self) -> "size_t" + +ida_lumina.extra_cmts_t.__setitem__(self, i: "size_t", v: "extra_cmt_t") -> None + +ida_lumina.extra_cmts_t.append(self, x: "extra_cmt_t") -> None + +ida_lumina.extra_cmts_t.at(self, _idx: "size_t") -> "extra_cmt_t const &" + +ida_lumina.extra_cmts_t.begin(self, *args) -> "qvector< extra_cmt_t >::const_iterator" + +ida_lumina.extra_cmts_t.capacity(self) -> "size_t" + +ida_lumina.extra_cmts_t.clear(self) -> None + +ida_lumina.extra_cmts_t.empty(self) -> bool + +ida_lumina.extra_cmts_t.end(self, *args) -> "qvector< extra_cmt_t >::const_iterator" + +ida_lumina.extra_cmts_t.erase(self, *args) -> "qvector< extra_cmt_t >::iterator" + +ida_lumina.extra_cmts_t.extend(self, x: "extra_cmts_t") -> None + +ida_lumina.extra_cmts_t.extract(self) -> "extra_cmt_t *" + +ida_lumina.extra_cmts_t.grow(self, *args) -> None + +ida_lumina.extra_cmts_t.inject(self, s: "extra_cmt_t", len: "size_t") -> None + +ida_lumina.extra_cmts_t.insert(self, it: "extra_cmt_t", x: "extra_cmt_t") -> "qvector< extra_cmt_t >::iterator" + +ida_lumina.extra_cmts_t.pop_back(self) -> None + +ida_lumina.extra_cmts_t.push_back(self, *args) -> "extra_cmt_t &" + +ida_lumina.extra_cmts_t.qclear(self) -> None + +ida_lumina.extra_cmts_t.reserve(self, cnt: "size_t") -> None + +ida_lumina.extra_cmts_t.resize(self, *args) -> None + +ida_lumina.extra_cmts_t.size(self) -> "size_t" + +ida_lumina.extra_cmts_t.swap(self, r: "extra_cmts_t") -> None + +ida_lumina.extra_cmts_t.truncate(self) -> None + +ida_lumina.extract_extra_cmts_from_metadata(out: "extra_cmts_t", ptr: "uchar const *") -> None + +ida_lumina.extract_frame_desc_from_metadata(out: "frame_desc_t", ptr: "uchar const *") -> None + +ida_lumina.extract_insn_cmts_from_metadata(out: "insn_cmts_t", ptr: "uchar const *") -> None + +ida_lumina.extract_insn_opreprs_from_metadata(out: "insn_ops_reprs_t", ptr: "uchar const *") -> None + +ida_lumina.extract_insn_opreprs_from_metadata_ex(out: "insn_ops_reprs_t", ptr: "uchar const *") -> None + +ida_lumina.extract_type_from_metadata(out: "tinfo_t", _in: "bytevec_t const &") -> bool + +ida_lumina.extract_user_stkpnts_from_metadata(out: "user_stkpnts_t", ptr: "uchar const *") -> None + +ida_lumina.frame_desc_t + +ida_lumina.frame_desc_t.__init__(self, *args) + +ida_lumina.frame_mem_t + +ida_lumina.frame_mem_t.__init__(self, *args) + +ida_lumina.frame_mems_t + +ida_lumina.frame_mems_t.__getitem__(self, i: "size_t") -> "frame_mem_t const &" + +ida_lumina.frame_mems_t.__init__(self, *args) + +ida_lumina.frame_mems_t.__len__(self) -> "size_t" + +ida_lumina.frame_mems_t.__setitem__(self, i: "size_t", v: "frame_mem_t") -> None + +ida_lumina.frame_mems_t.append(self, x: "frame_mem_t") -> None + +ida_lumina.frame_mems_t.at(self, _idx: "size_t") -> "frame_mem_t const &" + +ida_lumina.frame_mems_t.begin(self, *args) -> "qvector< frame_mem_t >::const_iterator" + +ida_lumina.frame_mems_t.capacity(self) -> "size_t" + +ida_lumina.frame_mems_t.clear(self) -> None + +ida_lumina.frame_mems_t.empty(self) -> bool + +ida_lumina.frame_mems_t.end(self, *args) -> "qvector< frame_mem_t >::const_iterator" + +ida_lumina.frame_mems_t.erase(self, *args) -> "qvector< frame_mem_t >::iterator" + +ida_lumina.frame_mems_t.extend(self, x: "frame_mems_t") -> None + +ida_lumina.frame_mems_t.extract(self) -> "frame_mem_t *" + +ida_lumina.frame_mems_t.grow(self, *args) -> None + +ida_lumina.frame_mems_t.inject(self, s: "frame_mem_t", len: "size_t") -> None + +ida_lumina.frame_mems_t.insert(self, it: "frame_mem_t", x: "frame_mem_t") -> "qvector< frame_mem_t >::iterator" + +ida_lumina.frame_mems_t.pop_back(self) -> None + +ida_lumina.frame_mems_t.push_back(self, *args) -> "frame_mem_t &" + +ida_lumina.frame_mems_t.qclear(self) -> None + +ida_lumina.frame_mems_t.reserve(self, cnt: "size_t") -> None + +ida_lumina.frame_mems_t.resize(self, *args) -> None + +ida_lumina.frame_mems_t.size(self) -> "size_t" + +ida_lumina.frame_mems_t.swap(self, r: "frame_mems_t") -> None + +ida_lumina.frame_mems_t.truncate(self) -> None + +ida_lumina.func_info_and_frequency_t + +ida_lumina.func_info_and_frequency_t.__init__(self, __frequency: int = 0) + +ida_lumina.func_info_and_frequency_vec_t + +ida_lumina.func_info_and_frequency_vec_t.__getitem__(self, i: "size_t") -> "func_info_and_frequency_t const &" + +ida_lumina.func_info_and_frequency_vec_t.__init__(self, *args) + +ida_lumina.func_info_and_frequency_vec_t.__len__(self) -> "size_t" + +ida_lumina.func_info_and_frequency_vec_t.__setitem__(self, i: "size_t", v: "func_info_and_frequency_t") -> None + +ida_lumina.func_info_and_frequency_vec_t.append(self, x: "func_info_and_frequency_t") -> None + +ida_lumina.func_info_and_frequency_vec_t.at(self, _idx: "size_t") -> "func_info_and_frequency_t const &" + +ida_lumina.func_info_and_frequency_vec_t.begin(self, *args) -> "qvector< func_info_and_frequency_t >::const_iterator" + +ida_lumina.func_info_and_frequency_vec_t.capacity(self) -> "size_t" + +ida_lumina.func_info_and_frequency_vec_t.clear(self) -> None + +ida_lumina.func_info_and_frequency_vec_t.empty(self) -> bool + +ida_lumina.func_info_and_frequency_vec_t.end(self, *args) -> "qvector< func_info_and_frequency_t >::const_iterator" + +ida_lumina.func_info_and_frequency_vec_t.erase(self, *args) -> "qvector< func_info_and_frequency_t >::iterator" + +ida_lumina.func_info_and_frequency_vec_t.extend(self, x: "func_info_and_frequency_vec_t") -> None + +ida_lumina.func_info_and_frequency_vec_t.extract(self) -> "func_info_and_frequency_t *" + +ida_lumina.func_info_and_frequency_vec_t.grow(self, *args) -> None + +ida_lumina.func_info_and_frequency_vec_t.inject(self, s: "func_info_and_frequency_t", len: "size_t") -> None + +ida_lumina.func_info_and_frequency_vec_t.insert(self, it: "func_info_and_frequency_t", x: "func_info_and_frequency_t") -> "qvector< func_info_and_frequency_t >::iterator" + +ida_lumina.func_info_and_frequency_vec_t.pop_back(self) -> None + +ida_lumina.func_info_and_frequency_vec_t.push_back(self, *args) -> "func_info_and_frequency_t &" + +ida_lumina.func_info_and_frequency_vec_t.qclear(self) -> None + +ida_lumina.func_info_and_frequency_vec_t.reserve(self, cnt: "size_t") -> None + +ida_lumina.func_info_and_frequency_vec_t.resize(self, *args) -> None + +ida_lumina.func_info_and_frequency_vec_t.size(self) -> "size_t" + +ida_lumina.func_info_and_frequency_vec_t.swap(self, r: "func_info_and_frequency_vec_t") -> None + +ida_lumina.func_info_and_frequency_vec_t.truncate(self) -> None + +ida_lumina.func_info_and_pattern_t + +ida_lumina.func_info_and_pattern_t.__init__(self, *args) + +ida_lumina.func_info_and_pattern_vec_t + +ida_lumina.func_info_and_pattern_vec_t.__getitem__(self, i: "size_t") -> "func_info_and_pattern_t const &" + +ida_lumina.func_info_and_pattern_vec_t.__init__(self, *args) + +ida_lumina.func_info_and_pattern_vec_t.__len__(self) -> "size_t" + +ida_lumina.func_info_and_pattern_vec_t.__setitem__(self, i: "size_t", v: "func_info_and_pattern_t") -> None + +ida_lumina.func_info_and_pattern_vec_t.append(self, x: "func_info_and_pattern_t") -> None + +ida_lumina.func_info_and_pattern_vec_t.at(self, _idx: "size_t") -> "func_info_and_pattern_t const &" + +ida_lumina.func_info_and_pattern_vec_t.begin(self, *args) -> "qvector< func_info_and_pattern_t >::const_iterator" + +ida_lumina.func_info_and_pattern_vec_t.capacity(self) -> "size_t" + +ida_lumina.func_info_and_pattern_vec_t.clear(self) -> None + +ida_lumina.func_info_and_pattern_vec_t.empty(self) -> bool + +ida_lumina.func_info_and_pattern_vec_t.end(self, *args) -> "qvector< func_info_and_pattern_t >::const_iterator" + +ida_lumina.func_info_and_pattern_vec_t.erase(self, *args) -> "qvector< func_info_and_pattern_t >::iterator" + +ida_lumina.func_info_and_pattern_vec_t.extend(self, x: "func_info_and_pattern_vec_t") -> None + +ida_lumina.func_info_and_pattern_vec_t.extract(self) -> "func_info_and_pattern_t *" + +ida_lumina.func_info_and_pattern_vec_t.grow(self, *args) -> None + +ida_lumina.func_info_and_pattern_vec_t.inject(self, s: "func_info_and_pattern_t", len: "size_t") -> None + +ida_lumina.func_info_and_pattern_vec_t.insert(self, it: "func_info_and_pattern_t", x: "func_info_and_pattern_t") -> "qvector< func_info_and_pattern_t >::iterator" + +ida_lumina.func_info_and_pattern_vec_t.pop_back(self) -> None + +ida_lumina.func_info_and_pattern_vec_t.push_back(self, *args) -> "func_info_and_pattern_t &" + +ida_lumina.func_info_and_pattern_vec_t.qclear(self) -> None + +ida_lumina.func_info_and_pattern_vec_t.reserve(self, cnt: "size_t") -> None + +ida_lumina.func_info_and_pattern_vec_t.resize(self, *args) -> None + +ida_lumina.func_info_and_pattern_vec_t.size(self) -> "size_t" + +ida_lumina.func_info_and_pattern_vec_t.swap(self, r: "func_info_and_pattern_vec_t") -> None + +ida_lumina.func_info_and_pattern_vec_t.truncate(self) -> None + +ida_lumina.func_info_base_t + +ida_lumina.func_info_base_t.__init__(self, *args) + +ida_lumina.func_info_pattern_and_frequency_t + +ida_lumina.func_info_pattern_and_frequency_t.__init__(self, __frequency: int = 0) + +ida_lumina.func_info_pattern_and_frequency_vec_t + +ida_lumina.func_info_pattern_and_frequency_vec_t.__getitem__(self, i: "size_t") -> "func_info_pattern_and_frequency_t const &" + +ida_lumina.func_info_pattern_and_frequency_vec_t.__init__(self, *args) + +ida_lumina.func_info_pattern_and_frequency_vec_t.__len__(self) -> "size_t" + +ida_lumina.func_info_pattern_and_frequency_vec_t.__setitem__(self, i: "size_t", v: "func_info_pattern_and_frequency_t") -> None + +ida_lumina.func_info_pattern_and_frequency_vec_t.append(self, x: "func_info_pattern_and_frequency_t") -> None + +ida_lumina.func_info_pattern_and_frequency_vec_t.at(self, _idx: "size_t") -> "func_info_pattern_and_frequency_t const &" + +ida_lumina.func_info_pattern_and_frequency_vec_t.begin(self, *args) -> "qvector< func_info_pattern_and_frequency_t >::const_iterator" + +ida_lumina.func_info_pattern_and_frequency_vec_t.capacity(self) -> "size_t" + +ida_lumina.func_info_pattern_and_frequency_vec_t.clear(self) -> None + +ida_lumina.func_info_pattern_and_frequency_vec_t.empty(self) -> bool + +ida_lumina.func_info_pattern_and_frequency_vec_t.end(self, *args) -> "qvector< func_info_pattern_and_frequency_t >::const_iterator" + +ida_lumina.func_info_pattern_and_frequency_vec_t.erase(self, *args) -> "qvector< func_info_pattern_and_frequency_t >::iterator" + +ida_lumina.func_info_pattern_and_frequency_vec_t.extend(self, x: "func_info_pattern_and_frequency_vec_t") -> None + +ida_lumina.func_info_pattern_and_frequency_vec_t.extract(self) -> "func_info_pattern_and_frequency_t *" + +ida_lumina.func_info_pattern_and_frequency_vec_t.grow(self, *args) -> None + +ida_lumina.func_info_pattern_and_frequency_vec_t.inject(self, s: "func_info_pattern_and_frequency_t", len: "size_t") -> None + +ida_lumina.func_info_pattern_and_frequency_vec_t.insert(self, it: "func_info_pattern_and_frequency_t", x: "func_info_pattern_and_frequency_t") -> "qvector< func_info_pattern_and_frequency_t >::iterator" + +ida_lumina.func_info_pattern_and_frequency_vec_t.pop_back(self) -> None + +ida_lumina.func_info_pattern_and_frequency_vec_t.push_back(self, *args) -> "func_info_pattern_and_frequency_t &" + +ida_lumina.func_info_pattern_and_frequency_vec_t.qclear(self) -> None + +ida_lumina.func_info_pattern_and_frequency_vec_t.reserve(self, cnt: "size_t") -> None + +ida_lumina.func_info_pattern_and_frequency_vec_t.resize(self, *args) -> None + +ida_lumina.func_info_pattern_and_frequency_vec_t.size(self) -> "size_t" + +ida_lumina.func_info_pattern_and_frequency_vec_t.swap(self, r: "func_info_pattern_and_frequency_vec_t") -> None + +ida_lumina.func_info_pattern_and_frequency_vec_t.truncate(self) -> None + +ida_lumina.func_info_t + +ida_lumina.func_info_t.__init__(self, *args) + +ida_lumina.func_info_vec_t + +ida_lumina.func_info_vec_t.__getitem__(self, i: "size_t") -> "func_info_t const &" + +ida_lumina.func_info_vec_t.__init__(self, *args) + +ida_lumina.func_info_vec_t.__len__(self) -> "size_t" + +ida_lumina.func_info_vec_t.__setitem__(self, i: "size_t", v: "func_info_t") -> None + +ida_lumina.func_info_vec_t.append(self, x: "func_info_t") -> None + +ida_lumina.func_info_vec_t.at(self, _idx: "size_t") -> "func_info_t const &" + +ida_lumina.func_info_vec_t.begin(self, *args) -> "qvector< func_info_t >::const_iterator" + +ida_lumina.func_info_vec_t.capacity(self) -> "size_t" + +ida_lumina.func_info_vec_t.clear(self) -> None + +ida_lumina.func_info_vec_t.empty(self) -> bool + +ida_lumina.func_info_vec_t.end(self, *args) -> "qvector< func_info_t >::const_iterator" + +ida_lumina.func_info_vec_t.erase(self, *args) -> "qvector< func_info_t >::iterator" + +ida_lumina.func_info_vec_t.extend(self, x: "func_info_vec_t") -> None + +ida_lumina.func_info_vec_t.extract(self) -> "func_info_t *" + +ida_lumina.func_info_vec_t.grow(self, *args) -> None + +ida_lumina.func_info_vec_t.inject(self, s: "func_info_t", len: "size_t") -> None + +ida_lumina.func_info_vec_t.insert(self, it: "func_info_t", x: "func_info_t") -> "qvector< func_info_t >::iterator" + +ida_lumina.func_info_vec_t.pop_back(self) -> None + +ida_lumina.func_info_vec_t.push_back(self, *args) -> "func_info_t &" + +ida_lumina.func_info_vec_t.qclear(self) -> None + +ida_lumina.func_info_vec_t.reserve(self, cnt: "size_t") -> None + +ida_lumina.func_info_vec_t.resize(self, *args) -> None + +ida_lumina.func_info_vec_t.size(self) -> "size_t" + +ida_lumina.func_info_vec_t.swap(self, r: "func_info_vec_t") -> None + +ida_lumina.func_info_vec_t.truncate(self) -> None + +ida_lumina.func_md_diff_handler_t + +ida_lumina.func_md_diff_handler_t.__disown__(self) + +ida_lumina.func_md_diff_handler_t.__init__(self) + +ida_lumina.func_md_diff_handler_t.on_comment_changed(self, fchunk_nr: int, fchunk_off: int, l: str, r: str, rep: bool) -> None + +ida_lumina.func_md_diff_handler_t.on_extra_comment_changed(self, fchunk_nr: int, fchunk_off: int, l: str, r: str, is_prev: bool) -> None + +ida_lumina.func_md_diff_handler_t.on_frame_member_changed(self, offset: int, l: "frame_mem_t", r: "frame_mem_t") -> None + +ida_lumina.func_md_diff_handler_t.on_function_comment_changed(self, l: str, r: str, rep: bool) -> None + +ida_lumina.func_md_diff_handler_t.on_insn_ops_repr_changed(self, fchunk_nr: int, fchunk_off: int, l: "insn_ops_repr_t", r: "insn_ops_repr_t") -> None + +ida_lumina.func_md_diff_handler_t.on_name_changed(self, l: str, r: str) -> None + +ida_lumina.func_md_diff_handler_t.on_proto_changed(self, l: "md_type_parts_t", r: "md_type_parts_t") -> None + +ida_lumina.func_md_diff_handler_t.on_score_changed(self, l: int, r: int) -> None + +ida_lumina.func_md_diff_handler_t.on_user_stkpnt_changed(self, fchunk_nr: int, fchunk_off: int, l: "int64 const *", r: "int64 const *") -> None + +ida_lumina.get_lumina_rpc_packet_t_index_from_base(code: "lumina_rpc_packet_t") -> "uchar" + +ida_lumina.get_server_connection() -> "lumina_client_t *" + +ida_lumina.get_server_connection2(flags: int) -> "lumina_client_t *" + +ida_lumina.has_backup_metadata(ea: ida_idaapi.ea_t) -> bool + +ida_lumina.input_file_t + +ida_lumina.input_file_t.__init__(self, *args) + +ida_lumina.insn_cmt_t + +ida_lumina.insn_cmt_t.__init__(self) + +ida_lumina.insn_cmts_t + +ida_lumina.insn_cmts_t.__getitem__(self, i: "size_t") -> "insn_cmt_t const &" + +ida_lumina.insn_cmts_t.__init__(self, *args) + +ida_lumina.insn_cmts_t.__len__(self) -> "size_t" + +ida_lumina.insn_cmts_t.__setitem__(self, i: "size_t", v: "insn_cmt_t") -> None + +ida_lumina.insn_cmts_t.append(self, x: "insn_cmt_t") -> None + +ida_lumina.insn_cmts_t.at(self, _idx: "size_t") -> "insn_cmt_t const &" + +ida_lumina.insn_cmts_t.begin(self, *args) -> "qvector< insn_cmt_t >::const_iterator" + +ida_lumina.insn_cmts_t.capacity(self) -> "size_t" + +ida_lumina.insn_cmts_t.clear(self) -> None + +ida_lumina.insn_cmts_t.empty(self) -> bool + +ida_lumina.insn_cmts_t.end(self, *args) -> "qvector< insn_cmt_t >::const_iterator" + +ida_lumina.insn_cmts_t.erase(self, *args) -> "qvector< insn_cmt_t >::iterator" + +ida_lumina.insn_cmts_t.extend(self, x: "insn_cmts_t") -> None + +ida_lumina.insn_cmts_t.extract(self) -> "insn_cmt_t *" + +ida_lumina.insn_cmts_t.grow(self, *args) -> None + +ida_lumina.insn_cmts_t.inject(self, s: "insn_cmt_t", len: "size_t") -> None + +ida_lumina.insn_cmts_t.insert(self, it: "insn_cmt_t", x: "insn_cmt_t") -> "qvector< insn_cmt_t >::iterator" + +ida_lumina.insn_cmts_t.pop_back(self) -> None + +ida_lumina.insn_cmts_t.push_back(self, *args) -> "insn_cmt_t &" + +ida_lumina.insn_cmts_t.qclear(self) -> None + +ida_lumina.insn_cmts_t.reserve(self, cnt: "size_t") -> None + +ida_lumina.insn_cmts_t.resize(self, *args) -> None + +ida_lumina.insn_cmts_t.size(self) -> "size_t" + +ida_lumina.insn_cmts_t.swap(self, r: "insn_cmts_t") -> None + +ida_lumina.insn_cmts_t.truncate(self) -> None + +ida_lumina.insn_ops_repr_t + +ida_lumina.insn_ops_repr_t.__init__(self) + +ida_lumina.insn_ops_reprs_t + +ida_lumina.insn_ops_reprs_t.__getitem__(self, i: "size_t") -> "insn_ops_repr_t const &" + +ida_lumina.insn_ops_reprs_t.__init__(self, *args) + +ida_lumina.insn_ops_reprs_t.__len__(self) -> "size_t" + +ida_lumina.insn_ops_reprs_t.__setitem__(self, i: "size_t", v: "insn_ops_repr_t") -> None + +ida_lumina.insn_ops_reprs_t.append(self, x: "insn_ops_repr_t") -> None + +ida_lumina.insn_ops_reprs_t.at(self, _idx: "size_t") -> "insn_ops_repr_t const &" + +ida_lumina.insn_ops_reprs_t.begin(self, *args) -> "qvector< insn_ops_repr_t >::const_iterator" + +ida_lumina.insn_ops_reprs_t.capacity(self) -> "size_t" + +ida_lumina.insn_ops_reprs_t.clear(self) -> None + +ida_lumina.insn_ops_reprs_t.empty(self) -> bool + +ida_lumina.insn_ops_reprs_t.end(self, *args) -> "qvector< insn_ops_repr_t >::const_iterator" + +ida_lumina.insn_ops_reprs_t.erase(self, *args) -> "qvector< insn_ops_repr_t >::iterator" + +ida_lumina.insn_ops_reprs_t.extend(self, x: "insn_ops_reprs_t") -> None + +ida_lumina.insn_ops_reprs_t.extract(self) -> "insn_ops_repr_t *" + +ida_lumina.insn_ops_reprs_t.grow(self, *args) -> None + +ida_lumina.insn_ops_reprs_t.inject(self, s: "insn_ops_repr_t", len: "size_t") -> None + +ida_lumina.insn_ops_reprs_t.insert(self, it: "insn_ops_repr_t", x: "insn_ops_repr_t") -> "qvector< insn_ops_repr_t >::iterator" + +ida_lumina.insn_ops_reprs_t.pop_back(self) -> None + +ida_lumina.insn_ops_reprs_t.push_back(self, *args) -> "insn_ops_repr_t &" + +ida_lumina.insn_ops_reprs_t.qclear(self) -> None + +ida_lumina.insn_ops_reprs_t.reserve(self, cnt: "size_t") -> None + +ida_lumina.insn_ops_reprs_t.resize(self, *args) -> None + +ida_lumina.insn_ops_reprs_t.size(self) -> "size_t" + +ida_lumina.insn_ops_reprs_t.swap(self, r: "insn_ops_reprs_t") -> None + +ida_lumina.insn_ops_reprs_t.truncate(self) -> None + +ida_lumina.insn_site_t + +ida_lumina.insn_site_t.__init__(self) + +ida_lumina.insn_site_t.toea(self, pfn: "func_t const *") -> ida_idaapi.ea_t + +ida_lumina.lumina_client_t + +ida_lumina.lumina_client_t.__init__(self, *args, **kwargs) + +ida_lumina.lumina_client_t.del_history(self, funcs: "eavec_t const &") -> bool + +ida_lumina.lumina_client_t.get_pop(self, nresults: int = 10) -> "pkt_get_pop_result_t *" + +ida_lumina.lumina_client_t.is_pattern_id(self, pid: "pattern_id_t", md5: "md5_t const &") -> bool + +ida_lumina.lumina_client_t.pull_md(self, *args) -> "pkt_pull_md_result_t *" + This function has the following signatures: + 0. pull_md(pattern_ids: pattern_ids_t &, errbuf: str, pull_md_flags: int=0) -> pkt_pull_md_result_t * + 1. pull_md(funcs: eavec_t *, errbuf: str, pull_md_flags: int=0) -> pkt_pull_md_result_t * + + # 0: pull_md(pattern_ids: pattern_ids_t &, errbuf: str, pull_md_flags: int=0) -> pkt_pull_md_result_t * + + + # 1: pull_md(funcs: eavec_t *, errbuf: str, pull_md_flags: int=0) -> pkt_pull_md_result_t * -ida_moves.bookmarks_t (class) - Proxy of C++ bookmarks_t class. +ida_lumina.lumina_client_t.push_md(self, result: "push_md_result_t", opts: "push_md_opts_t", append_metadata: "metadata_appender_t *" = None, flags: int = 0) -> bool -ida_moves.bookmarks_t.__getitem__ (method) +ida_lumina.lumina_client_t.set_pattern_id_md5(self, out: "pattern_id_t", md5: "md5_t const &") -> None + +ida_lumina.lumina_info_t + +ida_lumina.lumina_info_t.__init__(self, *args) + +ida_lumina.lumina_op_res_vec_t + +ida_lumina.lumina_op_res_vec_t.__eq__(self, r: "lumina_op_res_vec_t") -> bool + +ida_lumina.lumina_op_res_vec_t.__getitem__(self, i: "size_t") -> "lumina_op_res_t const &" + +ida_lumina.lumina_op_res_vec_t.__init__(self, *args) + +ida_lumina.lumina_op_res_vec_t.__len__(self) -> "size_t" + +ida_lumina.lumina_op_res_vec_t.__ne__(self, r: "lumina_op_res_vec_t") -> bool + +ida_lumina.lumina_op_res_vec_t.__setitem__(self, i: "size_t", v: "lumina_op_res_t const &") -> None + +ida_lumina.lumina_op_res_vec_t._del(self, x: "lumina_op_res_t const &") -> bool + +ida_lumina.lumina_op_res_vec_t.add_unique(self, x: "lumina_op_res_t const &") -> bool + +ida_lumina.lumina_op_res_vec_t.append(self, x: "lumina_op_res_t const &") -> None + +ida_lumina.lumina_op_res_vec_t.at(self, _idx: "size_t") -> "lumina_op_res_t const &" + +ida_lumina.lumina_op_res_vec_t.begin(self, *args) -> "qvector< lumina_op_res_t >::const_iterator" + +ida_lumina.lumina_op_res_vec_t.capacity(self) -> "size_t" + +ida_lumina.lumina_op_res_vec_t.clear(self) -> None + +ida_lumina.lumina_op_res_vec_t.empty(self) -> bool + +ida_lumina.lumina_op_res_vec_t.end(self, *args) -> "qvector< lumina_op_res_t >::const_iterator" + +ida_lumina.lumina_op_res_vec_t.erase(self, *args) -> "qvector< lumina_op_res_t >::iterator" + +ida_lumina.lumina_op_res_vec_t.extend(self, x: "lumina_op_res_vec_t") -> None + +ida_lumina.lumina_op_res_vec_t.extract(self) -> "lumina_op_res_t *" + +ida_lumina.lumina_op_res_vec_t.find(self, *args) -> "qvector< lumina_op_res_t >::const_iterator" + +ida_lumina.lumina_op_res_vec_t.grow(self, *args) -> None + +ida_lumina.lumina_op_res_vec_t.has(self, x: "lumina_op_res_t const &") -> bool + +ida_lumina.lumina_op_res_vec_t.inject(self, s: "lumina_op_res_t *", len: "size_t") -> None + +ida_lumina.lumina_op_res_vec_t.insert(self, it: "qvector< lumina_op_res_t >::iterator", x: "lumina_op_res_t const &") -> "qvector< lumina_op_res_t >::iterator" + +ida_lumina.lumina_op_res_vec_t.pop_back(self) -> None + +ida_lumina.lumina_op_res_vec_t.push_back(self, *args) -> "lumina_op_res_t &" + +ida_lumina.lumina_op_res_vec_t.qclear(self) -> None + +ida_lumina.lumina_op_res_vec_t.reserve(self, cnt: "size_t") -> None + +ida_lumina.lumina_op_res_vec_t.resize(self, *args) -> None + +ida_lumina.lumina_op_res_vec_t.size(self) -> "size_t" + +ida_lumina.lumina_op_res_vec_t.swap(self, r: "lumina_op_res_vec_t") -> None + +ida_lumina.lumina_op_res_vec_t.truncate(self) -> None + +ida_lumina.lumina_server_info_t + +ida_lumina.lumina_server_info_t.__init__(self, __macaddr: str = None, __verstr: str = None, __start_time: "utc_timestamp_t" = 0, __current_time: "utc_timestamp_t" = 0) + +ida_lumina.lumina_user_t + +ida_lumina.lumina_user_t.__init__(self, *args) + +ida_lumina.lumina_user_t.can_del_history(self) -> bool + +ida_lumina.lumina_user_t.is_admin(self) -> bool + +ida_lumina.lumina_user_t.set_can_del_history(self, v: bool = True) -> None + +ida_lumina.lumina_user_t.set_is_admin(self, v: bool = True) -> None + +ida_lumina.md_type_parts_t + +ida_lumina.md_type_parts_t.__eq__(self, r: "md_type_parts_t") -> bool + +ida_lumina.md_type_parts_t.__init__(self) + +ida_lumina.md_type_parts_t.__ne__(self, r: "md_type_parts_t") -> bool + +ida_lumina.metadata_iterator_t + +ida_lumina.metadata_iterator_t.__init__(self, _md: "metadata_t const &") + +ida_lumina.metadata_iterator_t.data_end(self) -> "uchar const *" + +ida_lumina.metadata_iterator_t.next(self) -> bool + +ida_lumina.new_packet(code: "uchar", ptr: "uchar const *" = None, len: "size_t" = 0, version: int = -1) -> "rpc_packet_data_t *" + +ida_lumina.oprepr_t + +ida_lumina.oprepr_t.__init__(self) + +ida_lumina.pattern_id_t + +ida_lumina.pattern_id_t.__init__(self, *args) + +ida_lumina.peer_conn_t + +ida_lumina.peer_conn_t.__init__(self, *args) + +ida_lumina.pkt_get_lumina_info_result_t + +ida_lumina.pkt_get_lumina_info_result_t.__init__(self) + +ida_lumina.pkt_get_lumina_info_t + +ida_lumina.pkt_get_lumina_info_t.__init__(self) + +ida_lumina.pkt_get_pop_result_t + +ida_lumina.pkt_get_pop_result_t.__init__(self) + +ida_lumina.pkt_get_pop_t + +ida_lumina.pkt_get_pop_t.__init__(self) + +ida_lumina.pkt_helo_result_t + +ida_lumina.pkt_helo_result_t.__init__(self) + +ida_lumina.pkt_helo_t + +ida_lumina.pkt_helo_t.__init__(self) + +ida_lumina.pkt_pull_md_result_t + +ida_lumina.pkt_pull_md_result_t.__init__(self) + +ida_lumina.pkt_pull_md_t + +ida_lumina.pkt_pull_md_t.__init__(self) + +ida_lumina.pkt_push_md_result_t + +ida_lumina.pkt_push_md_result_t.__init__(self) + +ida_lumina.pkt_push_md_t + +ida_lumina.pkt_push_md_t.__init__(self) + +ida_lumina.pkt_rpc_fail_t + +ida_lumina.pkt_rpc_fail_t.__init__(self) + +ida_lumina.pkt_rpc_notify_t + +ida_lumina.pkt_rpc_notify_t.__init__(self) + +ida_lumina.pkt_rpc_ok_t + +ida_lumina.pkt_rpc_ok_t.__init__(self) + +ida_lumina.pop_fun_t + +ida_lumina.pop_fun_t.__init__(self, *args) + +ida_lumina.push_md_opts_t + +ida_lumina.push_md_opts_t.__init__(self, *args) + +ida_lumina.push_md_result_t + +ida_lumina.push_md_result_t.__init__(self) + +ida_lumina.revert_metadata(ea: ida_idaapi.ea_t) -> bool + +ida_lumina.score_metadata(fi: "func_info_t") -> int + +ida_lumina.serialized_tinfo + +ida_lumina.serialized_tinfo.__init__(self, __type: "type_t const *" = None, __fields: "type_t const *" = None) + +ida_lumina.simple_idb_diff_handler_t + +ida_lumina.simple_idb_diff_handler_t.__init__(self, pfn) + +ida_lumina.simple_idb_diff_handler_t.ensure_header_generated(self) + +ida_lumina.simple_idb_diff_handler_t.format_extra_cmt(self, cmt) + +ida_lumina.simple_idb_diff_handler_t.format_frame_member(self, m) + +ida_lumina.simple_idb_diff_handler_t.format_insn_ops(self, ro) + +ida_lumina.simple_idb_diff_handler_t.format_stkpnt(self, stkpnt) + +ida_lumina.simple_idb_diff_handler_t.format_type(self, type_parts) + +ida_lumina.simple_idb_diff_handler_t.indenter_t + +ida_lumina.simple_idb_diff_handler_t.indenter_t.__del__(self) + +ida_lumina.simple_idb_diff_handler_t.indenter_t.__init__(self, handler) + +ida_lumina.simple_idb_diff_handler_t.on_comment_changed(self, fchunk_nr, fchunk_off, l, r, rep) + +ida_lumina.simple_idb_diff_handler_t.on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev) + +ida_lumina.simple_idb_diff_handler_t.on_frame_member_changed(self, offset, l, r) + +ida_lumina.simple_idb_diff_handler_t.on_function_comment_changed(self, l, r, rep) + +ida_lumina.simple_idb_diff_handler_t.on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r) + +ida_lumina.simple_idb_diff_handler_t.on_name_changed(self, l, r) + +ida_lumina.simple_idb_diff_handler_t.on_proto_changed(self, l, r) + +ida_lumina.simple_idb_diff_handler_t.on_score_changed(self, l, r) + +ida_lumina.simple_idb_diff_handler_t.on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r) + +ida_lumina.simple_idb_diff_handler_t.put(self, msg) + +ida_lumina.simple_idb_diff_handler_t.put2(self, l, r, topic) + +ida_lumina.simple_idb_diff_handler_t.where(self, fchunk_nr, fchunk_off) + +ida_lumina.skipped_func_t + +ida_lumina.skipped_func_t.__init__(self, *args) + +ida_lumina.skipped_funcs_t + +ida_lumina.skipped_funcs_t.__getitem__(self, i: "size_t") -> "skipped_func_t const &" + +ida_lumina.skipped_funcs_t.__init__(self, *args) + +ida_lumina.skipped_funcs_t.__len__(self) -> "size_t" + +ida_lumina.skipped_funcs_t.__setitem__(self, i: "size_t", v: "skipped_func_t") -> None + +ida_lumina.skipped_funcs_t.append(self, x: "skipped_func_t") -> None + +ida_lumina.skipped_funcs_t.at(self, _idx: "size_t") -> "skipped_func_t const &" + +ida_lumina.skipped_funcs_t.begin(self, *args) -> "qvector< skipped_func_t >::const_iterator" + +ida_lumina.skipped_funcs_t.capacity(self) -> "size_t" + +ida_lumina.skipped_funcs_t.clear(self) -> None + +ida_lumina.skipped_funcs_t.empty(self) -> bool + +ida_lumina.skipped_funcs_t.end(self, *args) -> "qvector< skipped_func_t >::const_iterator" + +ida_lumina.skipped_funcs_t.erase(self, *args) -> "qvector< skipped_func_t >::iterator" + +ida_lumina.skipped_funcs_t.extend(self, x: "skipped_funcs_t") -> None + +ida_lumina.skipped_funcs_t.extract(self) -> "skipped_func_t *" + +ida_lumina.skipped_funcs_t.grow(self, *args) -> None + +ida_lumina.skipped_funcs_t.inject(self, s: "skipped_func_t", len: "size_t") -> None + +ida_lumina.skipped_funcs_t.insert(self, it: "skipped_func_t", x: "skipped_func_t") -> "qvector< skipped_func_t >::iterator" + +ida_lumina.skipped_funcs_t.pop_back(self) -> None + +ida_lumina.skipped_funcs_t.push_back(self, *args) -> "skipped_func_t &" + +ida_lumina.skipped_funcs_t.qclear(self) -> None + +ida_lumina.skipped_funcs_t.reserve(self, cnt: "size_t") -> None + +ida_lumina.skipped_funcs_t.resize(self, *args) -> None + +ida_lumina.skipped_funcs_t.size(self) -> "size_t" + +ida_lumina.skipped_funcs_t.swap(self, r: "skipped_funcs_t") -> None + +ida_lumina.skipped_funcs_t.truncate(self) -> None + +ida_lumina.split_metadata(metadata: bytes) -> dict + Split the metadata blob into a set of KVP's + + @param metadata a metadata blob + @return a set of KVP's + +ida_lumina.user_license_info_t + +ida_lumina.user_license_info_t.__init__(self, __id: str = None, __name: str = None, __email: str = None) + +ida_lumina.user_stkpnt_t + +ida_lumina.user_stkpnt_t.__init__(self) + +ida_lumina.user_stkpnts_t + +ida_lumina.user_stkpnts_t.__getitem__(self, i: "size_t") -> "user_stkpnt_t const &" + +ida_lumina.user_stkpnts_t.__init__(self, *args) + +ida_lumina.user_stkpnts_t.__len__(self) -> "size_t" + +ida_lumina.user_stkpnts_t.__setitem__(self, i: "size_t", v: "user_stkpnt_t") -> None + +ida_lumina.user_stkpnts_t.append(self, x: "user_stkpnt_t") -> None + +ida_lumina.user_stkpnts_t.at(self, _idx: "size_t") -> "user_stkpnt_t const &" + +ida_lumina.user_stkpnts_t.begin(self, *args) -> "qvector< user_stkpnt_t >::const_iterator" + +ida_lumina.user_stkpnts_t.capacity(self) -> "size_t" + +ida_lumina.user_stkpnts_t.clear(self) -> None + +ida_lumina.user_stkpnts_t.empty(self) -> bool + +ida_lumina.user_stkpnts_t.end(self, *args) -> "qvector< user_stkpnt_t >::const_iterator" + +ida_lumina.user_stkpnts_t.erase(self, *args) -> "qvector< user_stkpnt_t >::iterator" + +ida_lumina.user_stkpnts_t.extend(self, x: "user_stkpnts_t") -> None + +ida_lumina.user_stkpnts_t.extract(self) -> "user_stkpnt_t *" + +ida_lumina.user_stkpnts_t.grow(self, *args) -> None + +ida_lumina.user_stkpnts_t.inject(self, s: "user_stkpnt_t", len: "size_t") -> None + +ida_lumina.user_stkpnts_t.insert(self, it: "user_stkpnt_t", x: "user_stkpnt_t") -> "qvector< user_stkpnt_t >::iterator" + +ida_lumina.user_stkpnts_t.pop_back(self) -> None + +ida_lumina.user_stkpnts_t.push_back(self, *args) -> "user_stkpnt_t &" + +ida_lumina.user_stkpnts_t.qclear(self) -> None + +ida_lumina.user_stkpnts_t.reserve(self, cnt: "size_t") -> None + +ida_lumina.user_stkpnts_t.resize(self, *args) -> None + +ida_lumina.user_stkpnts_t.size(self) -> "size_t" + +ida_lumina.user_stkpnts_t.swap(self, r: "user_stkpnts_t") -> None + +ida_lumina.user_stkpnts_t.truncate(self) -> None + +ida_moves + +ida_moves.UNHID_FUNC + unhid a function at 'target' + +ida_moves.UNHID_RANGE + unhid an range at 'target' + +ida_moves.UNHID_SEGM + unhid a segment at 'target' + +ida_moves.bookmarks_t + +ida_moves.bookmarks_t.__getitem__(self, idx) Get the n-th bookmark for the widget. -ida_moves.bookmarks_t.__init__ (method) +ida_moves.bookmarks_t.__init__(self, *args, **kwargs) -ida_moves.bookmarks_t.__init__ (method) +ida_moves.bookmarks_t.__init__(self, w) Build an object suitable for iterating bookmarks associated with the specified widget. @@ -48422,2924 +33643,1858 @@ ida_moves.bookmarks_t.__init__ (method) "Pseudocode-*", "Hex View-*", ...) share a common storage, so bookmarks can be re-used interchangeably between them -ida_moves.bookmarks_t.__iter__ (method) +ida_moves.bookmarks_t.__iter__(self) Iterate on bookmarks present for the widget. -ida_moves.bookmarks_t.__len__ (method) +ida_moves.bookmarks_t.__len__(self) Get the number of bookmarks for the widget. -ida_moves.bookmarks_t.erase (method) - erase(e, index, ud) -> bool - - @param e: lochist_entry_t const & - @param index: uint32 - @param ud: void * - -ida_moves.bookmarks_t.find_index (method) - find_index(e, ud) -> uint32 - - @param e: lochist_entry_t const & - @param ud: void * - -ida_moves.bookmarks_t.get (method) - get(out, _index, ud) -> PyObject * - - @param out: lochist_entry_t * - @param _index: uint32 - @param ud: void * - -ida_moves.bookmarks_t.get_desc (method) - get_desc(e, index, ud) -> bool - - @param e: lochist_entry_t const & - @param index: uint32 - @param ud: void * - -ida_moves.bookmarks_t.get_dirtree_id (method) - get_dirtree_id(e, ud) -> dirtree_id_t - - @param e: lochist_entry_t const & - @param ud: void * - -ida_moves.bookmarks_t.mark (method) - mark(e, index, title, desc, ud) -> uint32 - - @param e: lochist_entry_t const & - @param index: uint32 - @param title: char const * - @param desc: char const * - @param ud: void * - -ida_moves.bookmarks_t.size (method) - size(e, ud) -> uint32 - - @param e: lochist_entry_t const & - @param ud: void * - -ida_moves.bookmarks_t_erase (function) - bookmarks_t_erase(e, index, ud) -> bool - - @param e: lochist_entry_t const & - @param index: uint32 - @param ud: void * - -ida_moves.bookmarks_t_find_index (function) - bookmarks_t_find_index(e, ud) -> uint32 - - @param e: lochist_entry_t const & - @param ud: void * - -ida_moves.bookmarks_t_get (function) - bookmarks_t_get(out, _index, ud) -> PyObject * - - @param out: lochist_entry_t * - @param _index: uint32 - @param ud: void * - -ida_moves.bookmarks_t_get_desc (function) - bookmarks_t_get_desc(e, index, ud) -> str - - @param e: lochist_entry_t const & - @param index: uint32 - @param ud: void * - -ida_moves.bookmarks_t_get_dirtree_id (function) - bookmarks_t_get_dirtree_id(e, ud) -> dirtree_id_t - - @param e: lochist_entry_t const & - @param ud: void * - -ida_moves.bookmarks_t_mark (function) - bookmarks_t_mark(e, index, title, desc, ud) -> uint32 - - @param e: lochist_entry_t const & - @param index: uint32 - @param title: char const * - @param desc: char const * - @param ud: void * - -ida_moves.bookmarks_t_size (function) - bookmarks_t_size(e, ud) -> uint32 - - @param e: lochist_entry_t const & - @param ud: void * - -ida_moves.graph_location_info_t (class) - Proxy of C++ graph_location_info_t class. - -ida_moves.graph_location_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: graph_location_info_t const & - -ida_moves.graph_location_info_t.__init__ (method) - __init__(self) -> graph_location_info_t - -ida_moves.graph_location_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: graph_location_info_t const & - -ida_moves.lochist_entry_t (class) - Proxy of C++ lochist_entry_t class. - -ida_moves.lochist_entry_t.__init__ (method) - __init__(self) -> lochist_entry_t - __init__(self, p, r) -> lochist_entry_t - - @param p: place_t const * - @param r: renderer_info_t const & - - __init__(self, other) -> lochist_entry_t - - @param other: lochist_entry_t const & - -ida_moves.lochist_entry_t.acquire_place (method) - acquire_place(self, in_p) - - @param in_p: place_t * - -ida_moves.lochist_entry_t.is_valid (method) - is_valid(self) -> bool - -ida_moves.lochist_entry_t.place (method) - place(self) -> place_t - -ida_moves.lochist_entry_t.renderer_info (method) - renderer_info(self) -> renderer_info_t - -ida_moves.lochist_entry_t.set_place (method) - set_place(self, p) - - @param p: place_t const * - -ida_moves.lochist_t (class) - Proxy of C++ lochist_t class. - -ida_moves.lochist_t.__init__ (method) - __init__(self) -> lochist_t - -ida_moves.lochist_t.back (method) - back(self, cnt, try_to_unhide) -> bool - - @param cnt: uint32 - @param try_to_unhide: bool - -ida_moves.lochist_t.clear (method) - clear(self) - -ida_moves.lochist_t.current_index (method) - current_index(self) -> uint32 - -ida_moves.lochist_t.fwd (method) - fwd(self, cnt, try_to_unhide) -> bool - - @param cnt: uint32 - @param try_to_unhide: bool - -ida_moves.lochist_t.get (method) - get(self, out, index) -> bool - - @param out: lochist_entry_t * - @param index: uint32 - -ida_moves.lochist_t.get_current (method) - get_current(self) -> lochist_entry_t - -ida_moves.lochist_t.get_place_id (method) - get_place_id(self) -> int - -ida_moves.lochist_t.get_template_place (method) - get_template_place(self) -> place_t - -ida_moves.lochist_t.init (method) - init(self, stream_name, _defpos, _ud, _flags) -> bool - - @param stream_name: char const * - @param _defpos: place_t const * - @param _ud: void * - @param _flags: uint32 - -ida_moves.lochist_t.is_history_enabled (method) - is_history_enabled(self) -> bool - -ida_moves.lochist_t.jump (method) - jump(self, try_to_unhide, e) - - @param try_to_unhide: bool - @param e: lochist_entry_t const & - -ida_moves.lochist_t.netcode (method) - netcode(self) -> nodeidx_t - -ida_moves.lochist_t.save (method) - save(self) - -ida_moves.lochist_t.seek (method) - seek(self, index, try_to_unhide) -> bool - - @param index: uint32 - @param try_to_unhide: bool - -ida_moves.lochist_t.set (method) - set(self, index, e) - - @param index: uint32 - @param e: lochist_entry_t const & - -ida_moves.lochist_t.set_current (method) - set_current(self, e) - - @param e: lochist_entry_t const & - -ida_moves.lochist_t.size (method) - size(self) -> uint32 - -ida_moves.renderer_info_pos_t (class) - Proxy of C++ renderer_info_pos_t class. - -ida_moves.renderer_info_pos_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: renderer_info_pos_t const & - -ida_moves.renderer_info_pos_t.__init__ (method) - __init__(self) -> renderer_info_pos_t - -ida_moves.renderer_info_pos_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: renderer_info_pos_t const & - -ida_moves.renderer_info_t (class) - Proxy of C++ renderer_info_t class. - -ida_moves.renderer_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: renderer_info_t const & - -ida_moves.renderer_info_t.__init__ (method) - __init__(self) -> renderer_info_t - __init__(self, _rtype, cx, cy) -> renderer_info_t - - @param _rtype: enum tcc_renderer_type_t - @param cx: short - @param cy: short - -ida_moves.renderer_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: renderer_info_t const & - -ida_moves.segm_move_info_t (class) - Proxy of C++ segm_move_info_t class. - -ida_moves.segm_move_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: segm_move_info_t const & - -ida_moves.segm_move_info_t.__init__ (method) - __init__(self, _from=0, _to=0, _sz=0) -> segm_move_info_t - - @param _from: ea_t - @param _to: ea_t - @param _sz: size_t - -ida_moves.segm_move_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t (class) - Proxy of C++ qvector< segm_move_info_t > class. - -ida_moves.segm_move_info_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< segm_move_info_t > const & - -ida_moves.segm_move_info_vec_t.__getitem__ (method) - __getitem__(self, i) -> segm_move_info_t - - @param i: size_t - -ida_moves.segm_move_info_vec_t.__init__ (method) - __init__(self) -> segm_move_info_vec_t - __init__(self, x) -> segm_move_info_vec_t - - @param x: qvector< segm_move_info_t > const & - -ida_moves.segm_move_info_vec_t.__len__ (method) - __len__(self) -> size_t - -ida_moves.segm_move_info_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< segm_move_info_t > const & - -ida_moves.segm_move_info_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t.at (method) - at(self, _idx) -> segm_move_info_t - - @param _idx: size_t - -ida_moves.segm_move_info_vec_t.begin (method) - begin(self) -> segm_move_info_t - -ida_moves.segm_move_info_vec_t.capacity (method) - capacity(self) -> size_t - -ida_moves.segm_move_info_vec_t.clear (method) - clear(self) - -ida_moves.segm_move_info_vec_t.empty (method) - empty(self) -> bool - -ida_moves.segm_move_info_vec_t.end (method) - end(self) -> segm_move_info_t - -ida_moves.segm_move_info_vec_t.erase (method) - erase(self, it) -> segm_move_info_t - - @param it: qvector< segm_move_info_t >::iterator - - erase(self, first, last) -> segm_move_info_t - - @param first: qvector< segm_move_info_t >::iterator - @param last: qvector< segm_move_info_t >::iterator - -ida_moves.segm_move_info_vec_t.extract (method) - extract(self) -> segm_move_info_t - -ida_moves.segm_move_info_vec_t.find (method) - find(self, x) -> segm_move_info_t - - @param x: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t.grow (method) - grow(self, x=segm_move_info_t()) - - @param x: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t.has (method) - has(self, x) -> bool - - @param x: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t.inject (method) - inject(self, s, len) - - @param s: segm_move_info_t * - @param len: size_t - -ida_moves.segm_move_info_vec_t.insert (method) - insert(self, it, x) -> segm_move_info_t - - @param it: qvector< segm_move_info_t >::iterator - @param x: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t.pop_back (method) - pop_back(self) - -ida_moves.segm_move_info_vec_t.push_back (method) - push_back(self, x) - - @param x: segm_move_info_t const & - - push_back(self) -> segm_move_info_t - -ida_moves.segm_move_info_vec_t.qclear (method) - qclear(self) - -ida_moves.segm_move_info_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_moves.segm_move_info_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: segm_move_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_moves.segm_move_info_vec_t.size (method) - size(self) -> size_t - -ida_moves.segm_move_info_vec_t.swap (method) - swap(self, r) - - @param r: qvector< segm_move_info_t > & - -ida_moves.segm_move_info_vec_t.truncate (method) - truncate(self) - -ida_moves.segm_move_infos_t (class) - Proxy of C++ segm_move_infos_t class. - -ida_moves.segm_move_infos_t.__init__ (method) - __init__(self) -> segm_move_infos_t - -ida_moves.segm_move_infos_t.find (method) - find(self, ea) -> segm_move_info_t - - @param ea: ea_t - -ida_nalt (module) +ida_moves.bookmarks_t.erase(e: "lochist_entry_t", index: int, ud: "void *") -> bool + +ida_moves.bookmarks_t.find_index(e: "lochist_entry_t", ud: "void *") -> int + +ida_moves.bookmarks_t.get(out: "lochist_entry_t", _index: int, ud: "void *") -> "PyObject *" + +ida_moves.bookmarks_t.get_desc(e: "lochist_entry_t", index: int, ud: "void *") -> str + +ida_moves.bookmarks_t.get_dirtree_id(e: "lochist_entry_t", ud: "void *") -> "dirtree_id_t" + +ida_moves.bookmarks_t.mark(e: "lochist_entry_t", index: int, title: str, desc: str, ud: "void *") -> int + +ida_moves.bookmarks_t.size(e: "lochist_entry_t", ud: "void *") -> int + +ida_moves.graph_location_info_t + +ida_moves.graph_location_info_t.__eq__(self, r: "graph_location_info_t") -> bool + +ida_moves.graph_location_info_t.__init__(self) + +ida_moves.graph_location_info_t.__ne__(self, r: "graph_location_info_t") -> bool + +ida_moves.lochist_entry_t + +ida_moves.lochist_entry_t.__init__(self, *args) + +ida_moves.lochist_entry_t.acquire_place(self, in_p: "place_t") -> None + +ida_moves.lochist_entry_t.is_valid(self) -> bool + +ida_moves.lochist_entry_t.place(self) -> "place_t *" + +ida_moves.lochist_entry_t.renderer_info(self) -> "renderer_info_t &" + +ida_moves.lochist_entry_t.set_place(self, p: "place_t") -> None + +ida_moves.lochist_t + +ida_moves.lochist_t.__init__(self) + +ida_moves.lochist_t.back(self, cnt: int, try_to_unhide: bool) -> bool + +ida_moves.lochist_t.clear(self) -> None + +ida_moves.lochist_t.current_index(self) -> int + +ida_moves.lochist_t.fwd(self, cnt: int, try_to_unhide: bool) -> bool + +ida_moves.lochist_t.get(self, out: "lochist_entry_t", index: int) -> bool + +ida_moves.lochist_t.get_current(self) -> "lochist_entry_t const &" + +ida_moves.lochist_t.get_place_id(self) -> int + +ida_moves.lochist_t.get_template_place(self) -> "place_t const *" + +ida_moves.lochist_t.init(self, stream_name: str, _defpos: "place_t", _ud: "void *", _flags: int) -> bool + +ida_moves.lochist_t.is_history_enabled(self) -> bool + +ida_moves.lochist_t.jump(self, try_to_unhide: bool, e: "lochist_entry_t") -> None + +ida_moves.lochist_t.netcode(self) -> "nodeidx_t" + +ida_moves.lochist_t.save(self) -> None + +ida_moves.lochist_t.seek(self, index: int, try_to_unhide: bool) -> bool + +ida_moves.lochist_t.set(self, index: int, e: "lochist_entry_t") -> None + +ida_moves.lochist_t.set_current(self, e: "lochist_entry_t") -> None + +ida_moves.lochist_t.size(self) -> int + +ida_moves.renderer_info_pos_t + +ida_moves.renderer_info_pos_t.__eq__(self, r: "renderer_info_pos_t") -> bool + +ida_moves.renderer_info_pos_t.__init__(self) + +ida_moves.renderer_info_pos_t.__ne__(self, r: "renderer_info_pos_t") -> bool + +ida_moves.renderer_info_t + +ida_moves.renderer_info_t.__eq__(self, r: "renderer_info_t") -> bool + +ida_moves.renderer_info_t.__init__(self, *args) + +ida_moves.renderer_info_t.__ne__(self, r: "renderer_info_t") -> bool + +ida_moves.segm_move_info_t + +ida_moves.segm_move_info_t.__eq__(self, r: "segm_move_info_t") -> bool + +ida_moves.segm_move_info_t.__init__(self, _from: ida_idaapi.ea_t = 0, _to: ida_idaapi.ea_t = 0, _sz: "size_t" = 0) + +ida_moves.segm_move_info_t.__ne__(self, r: "segm_move_info_t") -> bool + +ida_moves.segm_move_info_vec_t + +ida_moves.segm_move_info_vec_t.__eq__(self, r: "segm_move_info_vec_t") -> bool + +ida_moves.segm_move_info_vec_t.__getitem__(self, i: "size_t") -> "segm_move_info_t const &" + +ida_moves.segm_move_info_vec_t.__init__(self, *args) + +ida_moves.segm_move_info_vec_t.__len__(self) -> "size_t" + +ida_moves.segm_move_info_vec_t.__ne__(self, r: "segm_move_info_vec_t") -> bool + +ida_moves.segm_move_info_vec_t.__setitem__(self, i: "size_t", v: "segm_move_info_t") -> None + +ida_moves.segm_move_info_vec_t._del(self, x: "segm_move_info_t") -> bool + +ida_moves.segm_move_info_vec_t.add_unique(self, x: "segm_move_info_t") -> bool + +ida_moves.segm_move_info_vec_t.append(self, x: "segm_move_info_t") -> None + +ida_moves.segm_move_info_vec_t.at(self, _idx: "size_t") -> "segm_move_info_t const &" + +ida_moves.segm_move_info_vec_t.begin(self, *args) -> "qvector< segm_move_info_t >::const_iterator" + +ida_moves.segm_move_info_vec_t.capacity(self) -> "size_t" + +ida_moves.segm_move_info_vec_t.clear(self) -> None + +ida_moves.segm_move_info_vec_t.empty(self) -> bool + +ida_moves.segm_move_info_vec_t.end(self, *args) -> "qvector< segm_move_info_t >::const_iterator" + +ida_moves.segm_move_info_vec_t.erase(self, *args) -> "qvector< segm_move_info_t >::iterator" + +ida_moves.segm_move_info_vec_t.extend(self, x: "segm_move_info_vec_t") -> None + +ida_moves.segm_move_info_vec_t.extract(self) -> "segm_move_info_t *" + +ida_moves.segm_move_info_vec_t.find(self, *args) -> "qvector< segm_move_info_t >::const_iterator" + +ida_moves.segm_move_info_vec_t.grow(self, *args) -> None + +ida_moves.segm_move_info_vec_t.has(self, x: "segm_move_info_t") -> bool + +ida_moves.segm_move_info_vec_t.inject(self, s: "segm_move_info_t", len: "size_t") -> None + +ida_moves.segm_move_info_vec_t.insert(self, it: "segm_move_info_t", x: "segm_move_info_t") -> "qvector< segm_move_info_t >::iterator" + +ida_moves.segm_move_info_vec_t.pop_back(self) -> None + +ida_moves.segm_move_info_vec_t.push_back(self, *args) -> "segm_move_info_t &" + +ida_moves.segm_move_info_vec_t.qclear(self) -> None + +ida_moves.segm_move_info_vec_t.reserve(self, cnt: "size_t") -> None + +ida_moves.segm_move_info_vec_t.resize(self, *args) -> None + +ida_moves.segm_move_info_vec_t.size(self) -> "size_t" + +ida_moves.segm_move_info_vec_t.swap(self, r: "segm_move_info_vec_t") -> None + +ida_moves.segm_move_info_vec_t.truncate(self) -> None + +ida_moves.segm_move_infos_t + +ida_moves.segm_move_infos_t.__init__(self) + +ida_moves.segm_move_infos_t.find(self, ea: ida_idaapi.ea_t) -> "segm_move_info_t const *" + +ida_nalt Definitions of various information kept in netnodes. Each address in the program has a corresponding netnode: netnode(ea). - - If we have no information about an address, the corresponding netnode is not - created. Otherwise we will create a netnode and save information in it. All - variable length information (names, comments, offset information, etc) is stored - in the netnode. - + If we have no information about an address, the corresponding netnode is not created. Otherwise we will create a netnode and save information in it. All variable length information (names, comments, offset information, etc) is stored in the netnode. Don't forget that some information is already stored in the flags (bytes.hpp) - - @warning: Many of the functions in this file are very low level (they are marked - as low level functions). Use them only if you can't find higher level - function to set/get/del information.netnode. + netnode. + -ida_nalt.AFL_ALIGNFLOW (variable) +ida_nalt.AFL_ALIGNFLOW the previous insn was created for alignment purposes only -ida_nalt.AFL_BNOT0 (variable) +ida_nalt.AFL_BNOT0 the 1st operand is bitwise negated -ida_nalt.AFL_BNOT1 (variable) +ida_nalt.AFL_BNOT1 the 2nd operand is bitwise negated -ida_nalt.AFL_COLORED (variable) +ida_nalt.AFL_COLORED has user defined instruction color? -ida_nalt.AFL_FIXEDSPD (variable) - sp delta value is fixed by analysis. should not be modified by modules +ida_nalt.AFL_FIXEDSPD + sp delta value is fixed by analysis. should not be modified by modules + -ida_nalt.AFL_HIDDEN (variable) +ida_nalt.AFL_HIDDEN the item is hidden completely -ida_nalt.AFL_HR_DETERMINED (variable) +ida_nalt.AFL_HR_DETERMINED the type is definitely guessed by the decompiler -ida_nalt.AFL_HR_GUESSED_DATA (variable) +ida_nalt.AFL_HR_GUESSED_DATA the data type is guessed by the decompiler -ida_nalt.AFL_HR_GUESSED_FUNC (variable) +ida_nalt.AFL_HR_GUESSED_FUNC the function type is guessed by the decompiler -ida_nalt.AFL_IDA_GUESSED (variable) +ida_nalt.AFL_IDA_GUESSED the type is guessed by IDA -ida_nalt.AFL_LIB (variable) - item from the standard library. low level flag, is used to set FUNC_LIB of - func_t +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 (variable) +ida_nalt.AFL_LINNUM has line number info -ida_nalt.AFL_LNAME (variable) +ida_nalt.AFL_LNAME has local name too (FF_NAME should be set) -ida_nalt.AFL_LZERO0 (variable) +ida_nalt.AFL_LZERO0 toggle leading zeroes for the 1st operand -ida_nalt.AFL_LZERO1 (variable) +ida_nalt.AFL_LZERO1 toggle leading zeroes for the 2nd operand -ida_nalt.AFL_MANUAL (variable) +ida_nalt.AFL_MANUAL the instruction/data is specified by the user -ida_nalt.AFL_NOBRD (variable) +ida_nalt.AFL_NOBRD the code/data border is hidden -ida_nalt.AFL_NORET (variable) - 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_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 (variable) +ida_nalt.AFL_NOTCODE autoanalysis should not create code here -ida_nalt.AFL_NOTPROC (variable) +ida_nalt.AFL_NOTPROC autoanalysis should not create proc here -ida_nalt.AFL_PUBNAM (variable) +ida_nalt.AFL_PUBNAM name is public (inter-file linkage) -ida_nalt.AFL_RETFP (variable) +ida_nalt.AFL_RETFP function returns a floating point value -ida_nalt.AFL_TERSESTR (variable) +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 (variable) +ida_nalt.AFL_TI has typeinfo? (NSUP_TYPEINFO); used only for addresses, not for member_t -ida_nalt.AFL_TI0 (variable) +ida_nalt.AFL_TI0 has typeinfo for operand 0? (NSUP_OPTYPES) -ida_nalt.AFL_TI1 (variable) +ida_nalt.AFL_TI1 has typeinfo for operand 1? (NSUP_OPTYPES+1) -ida_nalt.AFL_TILCMT (variable) +ida_nalt.AFL_TILCMT has type comment? (such a comment may be changed by IDA) -ida_nalt.AFL_TYPE_GUESSED (variable) +ida_nalt.AFL_TYPE_GUESSED who guessed the type information? -ida_nalt.AFL_USEMODSP (variable) - insn modifes SP and uses the modified value; example: pop [rsp+N] +ida_nalt.AFL_USEMODSP + insn modifes SP and uses the modified value; example: pop [rsp+N] + -ida_nalt.AFL_USERSP (variable) +ida_nalt.AFL_USERSP user-defined SP value -ida_nalt.AFL_USERTI (variable) - the type information is definitive. (comes from the user or type library) if not - set see AFL_TYPE_GUESSED +ida_nalt.AFL_USERTI + the type information is definitive. (comes from the user or type library) if not set see AFL_TYPE_GUESSED + -ida_nalt.AFL_WEAKNAM (variable) +ida_nalt.AFL_WEAKNAM name is weak -ida_nalt.AFL_ZSTROFF (variable) - display struct field name at 0 offset when displaying an offset. example: - offset somestruct.field_0 if this flag is clear, then - offset somestruct +ida_nalt.AFL_ZSTROFF + display struct field name at 0 offset when displaying an offset. example: `offset somestruct.field_0 ` if this flag is clear, then `offset somestruct ` + -ida_nalt.AP_ALLOWDUPS (variable) +ida_nalt.AP_ALLOWDUPS use 'dup' construct -ida_nalt.AP_ARRAY (variable) +ida_nalt.AP_ARRAY create as array (this flag is not stored in database) -ida_nalt.AP_IDXBASEMASK (variable) +ida_nalt.AP_IDXBASEMASK mask for number base of the indexes -ida_nalt.AP_IDXBIN (variable) +ida_nalt.AP_IDXBIN display indexes in binary -ida_nalt.AP_IDXDEC (variable) +ida_nalt.AP_IDXDEC display indexes in decimal -ida_nalt.AP_IDXHEX (variable) +ida_nalt.AP_IDXHEX display indexes in hex -ida_nalt.AP_IDXOCT (variable) +ida_nalt.AP_IDXOCT display indexes in octal -ida_nalt.AP_INDEX (variable) +ida_nalt.AP_INDEX display array element indexes as comments -ida_nalt.AP_SIGNED (variable) +ida_nalt.AP_SIGNED treats numbers as signed -ida_nalt.IDB_DESKTOPS_NODE_NAME (variable) +ida_nalt.GOTEA_NODE_NAME + node containing address of .got section + +ida_nalt.IDB_DESKTOPS_NODE_NAME hash indexed by desktop name with dekstop netnode -ida_nalt.IDB_DESKTOPS_TAG (variable) +ida_nalt.IDB_DESKTOPS_TAG tag to store desktop blob & timestamp -ida_nalt.MAXSTRUCPATH (variable) +ida_nalt.MAXSTRUCPATH maximal inclusion depth of unions -ida_nalt.NALT_ABSBASE (variable) +ida_nalt.NALT_ABSBASE absolute segment location -ida_nalt.NALT_AFLAGS (variable) +ida_nalt.NALT_AFLAGS additional flags for an item -ida_nalt.NALT_ALIGN (variable) - alignment value if the item is FF_ALIGN (should by equal to power of 2) +ida_nalt.NALT_ALIGN + alignment value if the item is FF_ALIGN (should by equal to power of 2) + -ida_nalt.NALT_COLOR (variable) +ida_nalt.NALT_COLOR instruction/data background color -ida_nalt.NALT_CREF_FROM (variable) +ida_nalt.NALT_CREF_FROM code xref from, idx: source address -ida_nalt.NALT_CREF_TO (variable) +ida_nalt.NALT_CREF_TO code xref to, idx: target address -ida_nalt.NALT_DREF_FROM (variable) +ida_nalt.NALT_DREF_FROM data xref from, idx: source address -ida_nalt.NALT_DREF_TO (variable) +ida_nalt.NALT_DREF_TO data xref to, idx: target address -ida_nalt.NALT_ENUM0 (variable) +ida_nalt.NALT_ENUM0 enum id for the first operand -ida_nalt.NALT_ENUM1 (variable) +ida_nalt.NALT_ENUM1 enum id for the second operand -ida_nalt.NALT_GR_LAYX (variable) +ida_nalt.NALT_GR_LAYX group layout ptrs, hash: md5 of 'belongs' -ida_nalt.NALT_LINNUM (variable) +ida_nalt.NALT_LINNUM source line number -ida_nalt.NALT_PURGE (variable) +ida_nalt.NALT_PURGE number of bytes purged from the stack when a function is called indirectly -ida_nalt.NALT_STRTYPE (variable) +ida_nalt.NALT_STRTYPE type of string item -ida_nalt.NALT_STRUCT (variable) +ida_nalt.NALT_STRUCT struct id -ida_nalt.NALT_SWITCH (variable) +ida_nalt.NALT_SWITCH switch idiom address (used at jump targets) -ida_nalt.NSUP_ARGEAS (variable) +ida_nalt.NSUP_ARGEAS instructions that initialize call arguments -ida_nalt.NSUP_ARRAY (variable) +ida_nalt.NSUP_ARRAY array parameters -ida_nalt.NSUP_CMT (variable) +ida_nalt.NSUP_CMT regular comment -ida_nalt.NSUP_CUSTDT (variable) +ida_nalt.NSUP_CUSTDT custom data type id -ida_nalt.NSUP_EX_FLAGS (variable) +ida_nalt.NSUP_EX_FLAGS Extended flags. -ida_nalt.NSUP_FOP1 (variable) +ida_nalt.NSUP_FOP1 forced operand 1 -ida_nalt.NSUP_FOP2 (variable) +ida_nalt.NSUP_FOP2 forced operand 2 -ida_nalt.NSUP_FOP3 (variable) +ida_nalt.NSUP_FOP3 forced operand 3 -ida_nalt.NSUP_FOP4 (variable) +ida_nalt.NSUP_FOP4 forced operand 4 -ida_nalt.NSUP_FOP5 (variable) +ida_nalt.NSUP_FOP5 forced operand 5 -ida_nalt.NSUP_FOP6 (variable) +ida_nalt.NSUP_FOP6 forced operand 6 -ida_nalt.NSUP_FOP7 (variable) +ida_nalt.NSUP_FOP7 forced operand 7 -ida_nalt.NSUP_FOP8 (variable) +ida_nalt.NSUP_FOP8 forced operand 8 -ida_nalt.NSUP_FTAILS (variable) - function tails or tail referers values NSUP_FTAILS..NSUP_FTAILS+0x1000 are - reserved +ida_nalt.NSUP_FRAME + function frame type values NSUP_FRAME..NSUP_FRAME+0x10000 are reserved + -ida_nalt.NSUP_GROUP (variable) - graph group information values NSUP_GROUP..NSUP_GROUP+0x1000 are reserved +ida_nalt.NSUP_FTAILS + function tails or tail referers values NSUP_FTAILS..NSUP_FTAILS+0x1000 are reserved + -ida_nalt.NSUP_GR_INFO (variable) +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 (variable) +ida_nalt.NSUP_GR_LAYT group layouts, idx: layout pointer -ida_nalt.NSUP_JINFO (variable) +ida_nalt.NSUP_JINFO jump table info -ida_nalt.NSUP_LLABEL (variable) - local labels. values NSUP_LLABEL..NSUP_LLABEL+0x1000 are reserved +ida_nalt.NSUP_LLABEL + local labels. values NSUP_LLABEL..NSUP_LLABEL+0x1000 are reserved + -ida_nalt.NSUP_MANUAL (variable) - manual instruction. values NSUP_MANUAL..NSUP_MANUAL+0x1000 are reserved +ida_nalt.NSUP_MANUAL + manual instruction. values NSUP_MANUAL..NSUP_MANUAL+0x1000 are reserved + -ida_nalt.NSUP_OPTYPES (variable) - operand type information. values NSUP_OPTYPES..NSUP_OPTYPES+0x100000 are - reserved +ida_nalt.NSUP_OMFGRP + OMF: group of segments (not used anymore) -ida_nalt.NSUP_OREF0 (variable) +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 (variable) +ida_nalt.NSUP_OREF1 outer complex reference information for operand 2 -ida_nalt.NSUP_OREF2 (variable) +ida_nalt.NSUP_OREF2 outer complex reference information for operand 3 -ida_nalt.NSUP_OREF3 (variable) +ida_nalt.NSUP_OREF3 outer complex reference information for operand 4 -ida_nalt.NSUP_OREF4 (variable) +ida_nalt.NSUP_OREF4 outer complex reference information for operand 5 -ida_nalt.NSUP_OREF5 (variable) +ida_nalt.NSUP_OREF5 outer complex reference information for operand 6 -ida_nalt.NSUP_OREF6 (variable) +ida_nalt.NSUP_OREF6 outer complex reference information for operand 7 -ida_nalt.NSUP_OREF7 (variable) +ida_nalt.NSUP_OREF7 outer complex reference information for operand 8 -ida_nalt.NSUP_ORIGFMD (variable) - function metadata before lumina information was applied values - NSUP_ORIGFMD..NSUP_ORIGFMD+0x1000 are reserved +ida_nalt.NSUP_ORIGFMD + function metadata before lumina information was applied values NSUP_ORIGFMD..NSUP_ORIGFMD+0x1000 are reserved + -ida_nalt.NSUP_POINTS (variable) - SP change points blob (see funcs.cpp). values NSUP_POINTS..NSUP_POINTS+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 (variable) +ida_nalt.NSUP_REF0 complex reference information for operand 1 -ida_nalt.NSUP_REF1 (variable) +ida_nalt.NSUP_REF1 complex reference information for operand 2 -ida_nalt.NSUP_REF2 (variable) +ida_nalt.NSUP_REF2 complex reference information for operand 3 -ida_nalt.NSUP_REF3 (variable) +ida_nalt.NSUP_REF3 complex reference information for operand 4 -ida_nalt.NSUP_REF4 (variable) +ida_nalt.NSUP_REF4 complex reference information for operand 5 -ida_nalt.NSUP_REF5 (variable) +ida_nalt.NSUP_REF5 complex reference information for operand 6 -ida_nalt.NSUP_REF6 (variable) +ida_nalt.NSUP_REF6 complex reference information for operand 7 -ida_nalt.NSUP_REF7 (variable) +ida_nalt.NSUP_REF7 complex reference information for operand 8 -ida_nalt.NSUP_REGARG (variable) - register argument type/name descriptions values NSUP_REGARG..NSUP_REGARG+0x1000 - are reserved +ida_nalt.NSUP_REGARG + register argument type/name descriptions values NSUP_REGARG..NSUP_REGARG+0x1000 are reserved + -ida_nalt.NSUP_REGVAR (variable) - register variables. values NSUP_REGVAR..NSUP_REGVAR+0x1000 are reserved +ida_nalt.NSUP_REGVAR + register variables. values NSUP_REGVAR..NSUP_REGVAR+0x1000 are reserved + -ida_nalt.NSUP_REPCMT (variable) +ida_nalt.NSUP_REPCMT repeatable comment -ida_nalt.NSUP_SEGTRANS (variable) +ida_nalt.NSUP_SEGTRANS segment translations -ida_nalt.NSUP_SWITCH (variable) +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 (variable) - type information. values NSUP_TYPEINFO..NSUP_TYPEINFO+0x1000 are reserved +ida_nalt.NSUP_TYPEINFO + type information. values NSUP_TYPEINFO..NSUP_TYPEINFO+0x1000 are reserved + -ida_nalt.NSUP_XREFPOS (variable) +ida_nalt.NSUP_XREFPOS saved xref address and type in the xrefs window -ida_nalt.PATCH_TAG (variable) +ida_nalt.PATCH_TAG Patch netnode tag. -ida_nalt.REFINFO_CUSTOM (variable) - a custom reference. see custom_refinfo_handler_t. the id of the custom refinfo - is stored under the REFINFO_TYPE mask. +ida_nalt.REFINFO_CUSTOM + a custom reference. see custom_refinfo_handler_t. the id of the custom refinfo is stored under the REFINFO_TYPE mask. + -ida_nalt.REFINFO_NOBASE (variable) - 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_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_NO_ONES (variable) +ida_nalt.REFINFO_NO_ONES an opval of ~0 will be considered invalid -ida_nalt.REFINFO_NO_ZEROS (variable) +ida_nalt.REFINFO_NO_ZEROS an opval of 0 will be considered invalid -ida_nalt.REFINFO_PASTEND (variable) - reference past an item; it may point to an nonexistent address; do not destroy - alignment dirs +ida_nalt.REFINFO_PASTEND + reference past an item; it may point to an nonexistent address; do not destroy alignment dirs + -ida_nalt.REFINFO_RVAOFF (variable) - based reference (rva); refinfo_t::base will be forced to get_imagebase(); such a - reference is displayed with the asm_t::a_rva keyword +ida_nalt.REFINFO_RVAOFF + based reference (rva); refinfo_t::base will be forced to get_imagebase(); such a reference is displayed with the asm_t::a_rva keyword + -ida_nalt.REFINFO_SELFREF (variable) - the self-based reference; refinfo_t::base will be forced to the reference - address +ida_nalt.REFINFO_SELFREF + the self-based reference; refinfo_t::base will be forced to the reference address + -ida_nalt.REFINFO_SIGNEDOP (variable) +ida_nalt.REFINFO_SIGNEDOP the operand value is sign-extended (only supported for REF_OFF8/16/32/64) -ida_nalt.REFINFO_SUBTRACT (variable) - the reference value is subtracted from the base value instead of (as usual) - being added to it +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 (variable) - reference type (reftype_t), or custom reference ID if REFINFO_CUSTOM set +ida_nalt.REFINFO_TYPE + reference type (reftype_t), or custom reference ID if REFINFO_CUSTOM set + -ida_nalt.REF_HIGH16 (variable) +ida_nalt.REF_HIGH16 high 16bits of 32bit offset -ida_nalt.REF_HIGH8 (variable) +ida_nalt.REF_HIGH8 high 8bits of 16bit offset -ida_nalt.REF_LOW16 (variable) +ida_nalt.REF_LOW16 low 16bits of 32bit offset -ida_nalt.REF_LOW8 (variable) +ida_nalt.REF_LOW8 low 8bits of 16bit offset -ida_nalt.REF_OFF16 (variable) +ida_nalt.REF_OFF16 16bit full offset -ida_nalt.REF_OFF32 (variable) +ida_nalt.REF_OFF32 32bit full offset -ida_nalt.REF_OFF64 (variable) +ida_nalt.REF_OFF64 64bit full offset -ida_nalt.REF_OFF8 (variable) +ida_nalt.REF_OFF8 8bit full offset -ida_nalt.RIDX_ABINAME (variable) +ida_nalt.RIDX_ABINAME ABI name (processor specific) -ida_nalt.RIDX_ARCHIVE_PATH (variable) +ida_nalt.RIDX_ARCHIVE_PATH archive file path -ida_nalt.RIDX_C_MACROS (variable) +ida_nalt.RIDX_C_MACROS C predefined macros. -ida_nalt.RIDX_DBG_BINPATHS (variable) +ida_nalt.RIDX_DBG_BINPATHS unused (20 indexes) -ida_nalt.RIDX_DUALOP_GRAPH (variable) +ida_nalt.RIDX_DUALOP_GRAPH Graph text representation options. -ida_nalt.RIDX_DUALOP_TEXT (variable) +ida_nalt.RIDX_DUALOP_TEXT Text text representation options. -ida_nalt.RIDX_FILE_FORMAT_NAME (variable) +ida_nalt.RIDX_FILE_FORMAT_NAME file format name for loader modules -ida_nalt.RIDX_GROUPS (variable) +ida_nalt.RIDX_GROUPS segment group information (see init_groups()) -ida_nalt.RIDX_H_PATH (variable) +ida_nalt.RIDX_H_PATH C header path. -ida_nalt.RIDX_IDA_VERSION (variable) +ida_nalt.RIDX_IDA_VERSION version of ida which created the database -ida_nalt.RIDX_INCLUDE (variable) +ida_nalt.RIDX_INCLUDE assembler include file name -ida_nalt.RIDX_MD5 (variable) +ida_nalt.RIDX_MD5 MD5 of the input file. -ida_nalt.RIDX_NOTEPAD (variable) +ida_nalt.RIDX_NOTEPAD notepad blob, occupies 1000 indexes (1MB of text) -ida_nalt.RIDX_PROBLEMS (variable) +ida_nalt.RIDX_PROBLEMS problem lists -ida_nalt.RIDX_SELECTORS (variable) +ida_nalt.RIDX_SELECTORS 2..63 are for selector_t blob (see init_selectors()) -ida_nalt.RIDX_SHA256 (variable) +ida_nalt.RIDX_SHA256 SHA256 of the input file. -ida_nalt.RIDX_SMALL_IDC (variable) +ida_nalt.RIDX_SMALL_IDC Instant IDC statements, blob. -ida_nalt.RIDX_SMALL_IDC_OLD (variable) +ida_nalt.RIDX_SMALL_IDC_OLD Instant IDC statements (obsolete) -ida_nalt.RIDX_SRCDBG_PATHS (variable) +ida_nalt.RIDX_SRCDBG_PATHS source debug paths, occupies 20 indexes -ida_nalt.RIDX_SRCDBG_UNDESIRED (variable) +ida_nalt.RIDX_SRCDBG_UNDESIRED user-closed source files, occupies 20 indexes -ida_nalt.RIDX_STR_ENCODINGS (variable) +ida_nalt.RIDX_STR_ENCODINGS a list of encodings for the program strings -ida_nalt.STRENC_DEFAULT (variable) +ida_nalt.STRENC_DEFAULT use default encoding for this type (see get_default_encoding_idx()) -ida_nalt.STRENC_NONE (variable) +ida_nalt.STRENC_NONE force no-conversion encoding -ida_nalt.STRTYPE_C (variable) +ida_nalt.STRTYPE_C Zero-terminated 16bit chars. -ida_nalt.STRTYPE_C_16 (variable) +ida_nalt.STRTYPE_C_16 Zero-terminated 32bit chars. -ida_nalt.STRTYPE_C_32 (variable) +ida_nalt.STRTYPE_C_32 Pascal-style, one-byte length prefix. -ida_nalt.STRTYPE_LEN2 (variable) +ida_nalt.STRTYPE_LEN2 Pascal-style, 16bit chars, two-byte length prefix. -ida_nalt.STRTYPE_LEN2_16 (variable) +ida_nalt.STRTYPE_LEN2_16 Pascal-style, 32bit chars, two-byte length prefix. -ida_nalt.STRTYPE_LEN2_32 (variable) +ida_nalt.STRTYPE_LEN2_32 Pascal-style, four-byte length prefix. -ida_nalt.STRTYPE_LEN4 (variable) +ida_nalt.STRTYPE_LEN4 Pascal-style, 16bit chars, four-byte length prefix. -ida_nalt.STRTYPE_LEN4_16 (variable) +ida_nalt.STRTYPE_LEN4_16 Pascal-style, 32bit chars, four-byte length prefix. -ida_nalt.STRTYPE_PASCAL (variable) +ida_nalt.STRTYPE_PASCAL Pascal-style, 16bit chars, one-byte length prefix. -ida_nalt.STRTYPE_PASCAL_16 (variable) +ida_nalt.STRTYPE_PASCAL_16 Pascal-style, 32bit chars, one-byte length prefix. -ida_nalt.STRTYPE_PASCAL_32 (variable) +ida_nalt.STRTYPE_PASCAL_32 Pascal-style, two-byte length prefix. -ida_nalt.STRTYPE_TERMCHR (variable) +ida_nalt.STRTYPE_TERMCHR C-style string. -ida_nalt.SWI_CUSTOM (variable) - custom jump table. processor_t::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_CUSTOM + custom jump table. processor_t::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 (variable) +ida_nalt.SWI_DEFRET return in the default case (defjump==BADADDR) -ida_nalt.SWI_DEF_IN_TBL (variable) +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) {jump table - size} == {value table size} + 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. + * The sparse indirect switch (i.e. a switch with a values table) {jump table size} == {value table size} + 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 (variable) - elbase is present (otherwise the base of the switch segment will be used) +ida_nalt.SWI_ELBASE + elbase is present (otherwise the base of the switch segment will be used) + -ida_nalt.SWI_HXNOLOWCASE (variable) +ida_nalt.SWI_HXNOLOWCASE lowcase value should not be used by the decompiler (internal flag) -ida_nalt.SWI_INDIRECT (variable) - value table elements are used as indexes into the jump table (for sparse - switches) +ida_nalt.SWI_INDIRECT + value table elements are used as indexes into the jump table (for sparse switches) + -ida_nalt.SWI_J32 (variable) +ida_nalt.SWI_J32 32-bit jump offsets -ida_nalt.SWI_JMPINSN (variable) - 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_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 (variable) - jumptable is inversed. (last entry is for first entry in values table) +ida_nalt.SWI_JMP_INV + jumptable is inversed. (last entry is for first entry in values table) + -ida_nalt.SWI_JSIZE (variable) +ida_nalt.SWI_JSIZE jump offset expansion bit -ida_nalt.SWI_SELFREL (variable) +ida_nalt.SWI_SELFREL jump address is relative to the element not to ELBASE -ida_nalt.SWI_SEPARATE (variable) +ida_nalt.SWI_SEPARATE create an array of individual elements (otherwise separate items) -ida_nalt.SWI_SHIFT_MASK (variable) +ida_nalt.SWI_SHIFT_MASK use formula (element<<shift) + elbase to find jump targets -ida_nalt.SWI_SIGNED (variable) +ida_nalt.SWI_SIGNED jump table entries are signed -ida_nalt.SWI_SPARSE (variable) - sparse switch (value table present), otherwise lowcase present +ida_nalt.SWI_SPARSE + sparse switch (value table present), otherwise lowcase present + -ida_nalt.SWI_STDTBL (variable) - custom jump table with standard table formatting. ATM IDA doesn't use SWI_CUSTOM - for switches with standard table formatting. So this flag can be considered as - obsolete. +ida_nalt.SWI_STDTBL + custom jump table with standard table formatting. ATM IDA doesn't use SWI_CUSTOM for switches with standard table formatting. So this flag can be considered as obsolete. + -ida_nalt.SWI_SUBTRACT (variable) +ida_nalt.SWI_SUBTRACT table values are subtracted from the elbase instead of being added -ida_nalt.SWI_USER (variable) +ida_nalt.SWI_USER user specified switch (starting from version 2) -ida_nalt.SWI_V32 (variable) +ida_nalt.SWI_V32 32-bit values in table -ida_nalt.SWI_VERSION (variable) +ida_nalt.SWI_VERSION the structure contains the VERSION member -ida_nalt.SWI_VSIZE (variable) +ida_nalt.SWI_VSIZE value table element size expansion bit -ida_nalt.SWI_VSPLIT (variable) +ida_nalt.SWI_VSPLIT value table is split (only for 32-bit values) -ida_nalt.V695_REF_OFF8 (variable) +ida_nalt.V695_REF_OFF8 reserved -ida_nalt.V695_REF_VHIGH (variable) +ida_nalt.V695_REF_VHIGH obsolete -ida_nalt.V695_REF_VLOW (variable) +ida_nalt.V695_REF_VLOW obsolete -ida_nalt.add_encoding (function) - add_encoding(encname) -> int - Add a new encoding (e.g. "UTF-8"). If it's already in the list, return its - index. - - @param encname: (C++: const char *) the encoding name - @return: its index (1-based); -1 means error +ida_nalt.add_encoding(encname: str) -> int -ida_nalt.array_parameters_t (class) - Proxy of C++ array_parameters_t class. +ida_nalt.array_parameters_t -ida_nalt.array_parameters_t.__init__ (method) - __init__(self, _f=0x00000001, _l=0, _a=-1) -> array_parameters_t - - @param _f: int32 - @param _l: int32 - @param _a: int32 +ida_nalt.array_parameters_t.__init__(self, _f: int = 1, _l: int = 0, _a: int = -1) -ida_nalt.array_parameters_t.alignment (variable) - -1 - don't align. 0 - align automatically. else item width +ida_nalt.array_parameters_t.alignment + -1 - don't align. 0 - align automatically. else item width + -ida_nalt.array_parameters_t.is_default (method) - is_default(self) -> bool +ida_nalt.array_parameters_t.is_default(self) -> bool -ida_nalt.array_parameters_t.lineitems (variable) +ida_nalt.array_parameters_t.lineitems number of items on a line -ida_nalt.clr__bnot0 (function) - clr__bnot0(ea) - - @param ea: ea_t +ida_nalt.clr__bnot0(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr__bnot1 (function) - clr__bnot1(ea) - - @param ea: ea_t +ida_nalt.clr__bnot1(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr__invsign0 (function) - clr__invsign0(ea) - - @param ea: ea_t +ida_nalt.clr__invsign0(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr__invsign1 (function) - clr__invsign1(ea) - - @param ea: ea_t +ida_nalt.clr__invsign1(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_abits (function) - clr_abits(ea, bits) - - @param ea: ea_t - @param bits: aflags_t +ida_nalt.clr_abits(ea: ida_idaapi.ea_t, bits: "aflags_t") -> None -ida_nalt.clr_align_flow (function) - clr_align_flow(ea) - - @param ea: ea_t +ida_nalt.clr_align_flow(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_colored_item (function) - clr_colored_item(ea) - - @param ea: ea_t +ida_nalt.clr_colored_item(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_fixed_spd (function) - clr_fixed_spd(ea) - - @param ea: ea_t +ida_nalt.clr_fixed_spd(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_has_lname (function) - clr_has_lname(ea) - - @param ea: ea_t +ida_nalt.clr_has_lname(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_has_ti (function) - clr_has_ti(ea) - - @param ea: ea_t +ida_nalt.clr_has_ti(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_has_ti0 (function) - clr_has_ti0(ea) - - @param ea: ea_t +ida_nalt.clr_has_ti0(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_has_ti1 (function) - clr_has_ti1(ea) - - @param ea: ea_t +ida_nalt.clr_has_ti1(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_libitem (function) - clr_libitem(ea) - - @param ea: ea_t +ida_nalt.clr_libitem(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_lzero0 (function) - clr_lzero0(ea) - - @param ea: ea_t +ida_nalt.clr_lzero0(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_lzero1 (function) - clr_lzero1(ea) - - @param ea: ea_t +ida_nalt.clr_lzero1(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_noret (function) - clr_noret(ea) - - @param ea: ea_t +ida_nalt.clr_noret(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_notcode (function) - clr_notcode(ea) +ida_nalt.clr_notcode(ea: ida_idaapi.ea_t) -> None Clear not-code mark. - - @param ea: (C++: ea_t) -ida_nalt.clr_notproc (function) - clr_notproc(ea) - - @param ea: ea_t +ida_nalt.clr_notproc(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_retfp (function) - clr_retfp(ea) - - @param ea: ea_t +ida_nalt.clr_retfp(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_terse_struc (function) - clr_terse_struc(ea) - - @param ea: ea_t +ida_nalt.clr_terse_struc(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_tilcmt (function) - clr_tilcmt(ea) - - @param ea: ea_t +ida_nalt.clr_tilcmt(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_usemodsp (function) - clr_usemodsp(ea) - - @param ea: ea_t +ida_nalt.clr_usemodsp(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_usersp (function) - clr_usersp(ea) - - @param ea: ea_t +ida_nalt.clr_usersp(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_userti (function) - clr_userti(ea) - - @param ea: ea_t +ida_nalt.clr_userti(ea: ida_idaapi.ea_t) -> None -ida_nalt.clr_zstroff (function) - clr_zstroff(ea) - - @param ea: ea_t +ida_nalt.clr_zstroff(ea: ida_idaapi.ea_t) -> None -ida_nalt.custom_data_type_ids_fids_array (class) - Proxy of C++ wrapped_array_t< int16,8 > class. +ida_nalt.custom_data_type_ids_fids_array -ida_nalt.custom_data_type_ids_fids_array.__getitem__ (method) - __getitem__(self, i) -> short const & - - @param i: size_t +ida_nalt.custom_data_type_ids_fids_array.__getitem__(self, i: "size_t") -> "short const &" -ida_nalt.custom_data_type_ids_fids_array.__init__ (method) - __init__(self, data) -> custom_data_type_ids_fids_array - - @param data: short (&)[8] +ida_nalt.custom_data_type_ids_fids_array.__init__(self, data: "short (&)[8]") -ida_nalt.custom_data_type_ids_fids_array.__len__ (method) - __len__(self) -> size_t +ida_nalt.custom_data_type_ids_fids_array.__len__(self) -> "size_t" -ida_nalt.custom_data_type_ids_fids_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: short const & +ida_nalt.custom_data_type_ids_fids_array.__setitem__(self, i: "size_t", v: "short const &") -> None -ida_nalt.custom_data_type_ids_fids_array._get_bytes (method) - _get_bytes(self) -> bytevec_t +ida_nalt.custom_data_type_ids_fids_array._get_bytes(self) -> "bytevec_t" -ida_nalt.custom_data_type_ids_fids_array._set_bytes (method) - _set_bytes(self, bts) - - Parameters - ---------- - bts: bytevec_t const & +ida_nalt.custom_data_type_ids_fids_array._set_bytes(self, bts: "bytevec_t const &") -> None -ida_nalt.custom_data_type_ids_t (class) - Proxy of C++ custom_data_type_ids_t class. +ida_nalt.custom_data_type_ids_t -ida_nalt.custom_data_type_ids_t.__getFids (method) - __getFids(self) -> custom_data_type_ids_fids_array +ida_nalt.custom_data_type_ids_t.__getFids(self) -> "wrapped_array_t< int16,8 >" -ida_nalt.custom_data_type_ids_t.__init__ (method) - __init__(self) -> custom_data_type_ids_t +ida_nalt.custom_data_type_ids_t.__init__(self) -ida_nalt.custom_data_type_ids_t.dtid (variable) +ida_nalt.custom_data_type_ids_t.dtid data type id -ida_nalt.custom_data_type_ids_t.fids (variable) +ida_nalt.custom_data_type_ids_t.fids data format ids -ida_nalt.custom_data_type_ids_t.get_dtid (method) - get_dtid(self) -> tid_t +ida_nalt.custom_data_type_ids_t.fids + data format ids -ida_nalt.custom_data_type_ids_t.set (method) - set(self, tid) - - @param tid: tid_t +ida_nalt.custom_data_type_ids_t.get_dtid(self) -> "tid_t" -ida_nalt.dbg_get_input_path (function) - dbg_get_input_path() -> str +ida_nalt.custom_data_type_ids_t.set(self, tid: "tid_t") -> None + +ida_nalt.dbg_get_input_path() -> str Get debugger input file name/path (see LFLG_DBG_NOPATH) -ida_nalt.del_absbase (function) - del_absbase(ea) - - @param ea: ea_t +ida_nalt.del_absbase(ea: ida_idaapi.ea_t) -> None -ida_nalt.del_aflags (function) - del_aflags(ea) - - @param ea: ea_t +ida_nalt.del_aflags(ea: ida_idaapi.ea_t) -> None -ida_nalt.del_alignment (function) - del_alignment(ea) - - @param ea: ea_t +ida_nalt.del_alignment(ea: ida_idaapi.ea_t) -> None -ida_nalt.del_array_parameters (function) - del_array_parameters(ea) - - @param ea: ea_t +ida_nalt.del_array_parameters(ea: ida_idaapi.ea_t) -> None -ida_nalt.del_custom_data_type_ids (function) - del_custom_data_type_ids(ea) - - @param ea: ea_t +ida_nalt.del_custom_data_type_ids(ea: ida_idaapi.ea_t) -> None -ida_nalt.del_encoding (function) - del_encoding(idx) -> bool - Delete an encoding The encoding is not actually removed because its index may be - used in strtype. So the deletion just clears the encoding name. The default - encoding cannot be deleted. - - @param idx: (C++: int) the encoding index (1-based) +ida_nalt.del_encoding(idx: int) -> bool -ida_nalt.del_ind_purged (function) - del_ind_purged(ea) - - @param ea: ea_t +ida_nalt.del_ind_purged(ea: ida_idaapi.ea_t) -> None -ida_nalt.del_item_color (function) - del_item_color(ea) -> bool - - @param ea: ea_t +ida_nalt.del_item_color(ea: ida_idaapi.ea_t) -> bool -ida_nalt.del_op_tinfo (function) - del_op_tinfo(ea, n) - - @param ea: ea_t - @param n: int +ida_nalt.del_op_tinfo(ea: ida_idaapi.ea_t, n: int) -> None -ida_nalt.del_refinfo (function) - del_refinfo(ea, n) -> bool - - @param ea: ea_t - @param n: int +ida_nalt.del_refinfo(ea: ida_idaapi.ea_t, n: int) -> bool -ida_nalt.del_source_linnum (function) - del_source_linnum(ea) - - @param ea: ea_t +ida_nalt.del_source_linnum(ea: ida_idaapi.ea_t) -> None -ida_nalt.del_str_type (function) - del_str_type(ea) - - @param ea: ea_t +ida_nalt.del_str_type(ea: ida_idaapi.ea_t) -> None -ida_nalt.del_switch_info (function) - del_switch_info(ea) - - @param ea: ea_t +ida_nalt.del_switch_info(ea: ida_idaapi.ea_t) -> None -ida_nalt.del_switch_parent (function) - del_switch_parent(ea) - - @param ea: ea_t +ida_nalt.del_switch_parent(ea: ida_idaapi.ea_t) -> None -ida_nalt.del_tinfo (function) - del_tinfo(ea) - - @param ea: ea_t +ida_nalt.del_tinfo(ea: ida_idaapi.ea_t) -> None -ida_nalt.delete_imports (function) - delete_imports() - Delete all imported modules information. +ida_nalt.delete_imports() -> None -ida_nalt.ea2node (function) - ea2node(ea) -> nodeidx_t +ida_nalt.ea2node(ea: ida_idaapi.ea_t) -> "nodeidx_t" Get netnode for the specified address. - - @param ea: (C++: ea_t) -ida_nalt.encoding_from_strtype (function) - encoding_from_strtype(strtype) -> char const * - Get encoding name for this strtype - @retval nullptr: if STRTYPE has an incorrent encoding index - @retval empty: string if the encoding was deleted - - @param strtype: (C++: int32) +ida_nalt.encoding_from_strtype(strtype: int) -> str -ida_nalt.end_ea2node (function) - end_ea2node(ea) -> nodeidx_t - - @param ea: ea_t +ida_nalt.end_ea2node(ea: ida_idaapi.ea_t) -> "nodeidx_t" -ida_nalt.enum_const_t (class) - Proxy of C++ enum_const_t class. +ida_nalt.enum_const_t -ida_nalt.enum_const_t.__init__ (method) - __init__(self) -> enum_const_t +ida_nalt.enum_const_t.__init__(self) -ida_nalt.enum_import_names (function) - enum_import_names(mod_index, py_cb) -> int +ida_nalt.enum_import_names(mod_index, callback) Enumerate imports from a specific module. - Please refer to ex_imports.py example. + Please refer to list_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 (function) - find_custom_refinfo(name) -> int +ida_nalt.find_custom_refinfo(name: str) -> int Get id of a custom refinfo type. - - @param name: (C++: const char *) char const * -ida_nalt.get_abi_name (function) +ida_nalt.get_abi_name() -ida_nalt.get_absbase (function) - get_absbase(ea) -> ea_t - - @param ea: ea_t +ida_nalt.get_absbase(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t -ida_nalt.get_aflags (function) - get_aflags(ea) -> aflags_t - - @param ea: ea_t +ida_nalt.get_aflags(ea: ida_idaapi.ea_t) -> "aflags_t" -ida_nalt.get_alignment (function) - get_alignment(ea) -> uint32 - - @param ea: ea_t +ida_nalt.get_alignment(ea: ida_idaapi.ea_t) -> int -ida_nalt.get_archive_path (function) - get_archive_path() -> str +ida_nalt.get_archive_path() -> str Get archive file path from which input file was extracted. -ida_nalt.get_array_parameters (function) - get_array_parameters(out, ea) -> ssize_t - - @param out: array_parameters_t * - @param ea: ea_t +ida_nalt.get_array_parameters(out: "array_parameters_t", ea: ida_idaapi.ea_t) -> "ssize_t" -ida_nalt.get_asm_inc_file (function) - get_asm_inc_file() -> str +ida_nalt.get_asm_inc_file() -> str Get name of the include file. -ida_nalt.get_custom_data_type_ids (function) - get_custom_data_type_ids(cdis, ea) -> int - - @param cdis: custom_data_type_ids_t * - @param ea: ea_t +ida_nalt.get_custom_data_type_ids(cdis: "custom_data_type_ids_t", ea: ida_idaapi.ea_t) -> int -ida_nalt.get_custom_refinfo (function) - get_custom_refinfo(crid) -> custom_refinfo_handler_t const * +ida_nalt.get_custom_refinfo(crid: int) -> "custom_refinfo_handler_t const *" Get definition of a registered custom refinfo type. - - @param crid: (C++: int) -ida_nalt.get_default_encoding_idx (function) - get_default_encoding_idx(bpu) -> int - Get default encoding index for a specific string type. - - @param bpu: (C++: int) the amount of bytes per unit (e.g., 1 for ASCII, CP1252, UTF-8..., 2 - for UTF-16, 4 for UTF-32) - @retval 0: bad BPU argument +ida_nalt.get_default_encoding_idx(bpu: int) -> int -ida_nalt.get_elapsed_secs (function) - get_elapsed_secs() -> size_t +ida_nalt.get_elapsed_secs() -> "size_t" Get seconds database stayed open. -ida_nalt.get_encoding_bpu (function) - 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: (C++: int) the encoding index (1-based) - @return: the number of bytes per units (1/2/4); -1 means error +ida_nalt.get_encoding_bpu(idx: int) -> int -ida_nalt.get_encoding_bpu_by_name (function) - get_encoding_bpu_by_name(encname) -> int - Get the amount of bytes per unit for the given encoding - - @param encname: (C++: const char *) the encoding name - @return: the number of bytes per units (1/2/4); -1 means error +ida_nalt.get_encoding_bpu_by_name(encname: str) -> int -ida_nalt.get_encoding_name (function) - get_encoding_name(idx) -> char const * - Get encoding name for specific index (1-based). - - @param idx: (C++: int) the encoding index (1-based) - @retval nullptr: if IDX is out of bounds - @retval empty: string if the encoding was deleted +ida_nalt.get_encoding_name(idx: int) -> str -ida_nalt.get_encoding_qty (function) - get_encoding_qty() -> int - Get total number of encodings (counted from 0) +ida_nalt.get_encoding_qty() -> int -ida_nalt.get_gotea (function) - get_gotea() -> ea_t +ida_nalt.get_gotea() -> ida_idaapi.ea_t -ida_nalt.get_ida_notepad_text (function) - get_ida_notepad_text() -> str +ida_nalt.get_ida_notepad_text() -> str Get notepad text. -ida_nalt.get_idb_ctime (function) - get_idb_ctime() -> time_t +ida_nalt.get_idb_ctime() -> "time_t" Get database creation timestamp. -ida_nalt.get_idb_nopens (function) - get_idb_nopens() -> size_t +ida_nalt.get_idb_nopens() -> "size_t" Get number of times the database is opened. -ida_nalt.get_ids_modnode (function) - get_ids_modnode() -> netnode +ida_nalt.get_ids_modnode() -> "netnode" Get ids modnode. -ida_nalt.get_imagebase (function) - get_imagebase() -> ea_t +ida_nalt.get_imagebase() -> ida_idaapi.ea_t Get image base address. -ida_nalt.get_import_module_name (function) - get_import_module_name(mod_index) -> str +ida_nalt.get_import_module_name(mod_index) Returns the name of an imported module given its index - @param mod_index: int + @param mod_index: the module index @return: None or the module name -ida_nalt.get_import_module_qty (function) - get_import_module_qty() -> uint - Get number of import modules. +ida_nalt.get_import_module_qty() -> "uint" -ida_nalt.get_ind_purged (function) - get_ind_purged(ea) -> ea_t - - @param ea: ea_t +ida_nalt.get_ind_purged(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t -ida_nalt.get_initial_ida_version (function) - get_initial_ida_version() -> str +ida_nalt.get_initial_ida_version() -> str Get version of ida which created the database (string format like "7.5") -ida_nalt.get_initial_idb_version (function) - get_initial_idb_version() -> ushort +ida_nalt.get_initial_idb_version() -> "ushort" Get initial version of the database (numeric format like 700) -ida_nalt.get_input_file_path (function) - get_input_file_path() -> str +ida_nalt.get_input_file_path() -> str Get full path of the input file. -ida_nalt.get_item_color (function) - get_item_color(ea) -> bgcolor_t - - @param ea: ea_t +ida_nalt.get_item_color(ea: ida_idaapi.ea_t) -> "bgcolor_t" -ida_nalt.get_loader_format_name (function) - get_loader_format_name() -> str +ida_nalt.get_loader_format_name() -> str Get file format name for loader modules. -ida_nalt.get_op_tinfo (function) - get_op_tinfo(tif, ea, n) -> bool - - @param tif: tinfo_t * - @param ea: ea_t - @param n: int +ida_nalt.get_op_tinfo(tif: "tinfo_t", ea: ida_idaapi.ea_t, n: int) -> bool -ida_nalt.get_outfile_encoding_idx (function) - get_outfile_encoding_idx() -> int - Get the index of the encoding used when producing files - @retval 0: the IDB's default 1 byte-per-unit encoding is used +ida_nalt.get_outfile_encoding_idx() -> int -ida_nalt.get_refinfo (function) - get_refinfo(ri, ea, n) -> bool - - @param ri: refinfo_t * - @param ea: ea_t - @param n: int +ida_nalt.get_refinfo(ri: "refinfo_t", ea: ida_idaapi.ea_t, n: int) -> bool -ida_nalt.get_reftype_by_size (function) - 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_reftype_by_size(size: "size_t") -> "reftype_t" + Get REF_... constant from size Supported sizes: 1,2,4,8,16 For other sizes returns reftype_t(-1) + -ida_nalt.get_root_filename (function) - get_root_filename() -> str +ida_nalt.get_root_filename() -> str Get file name only of the input file. -ida_nalt.get_source_linnum (function) - get_source_linnum(ea) -> uval_t - - @param ea: ea_t +ida_nalt.get_source_linnum(ea: ida_idaapi.ea_t) -> int -ida_nalt.get_srcdbg_paths (function) - get_srcdbg_paths() -> str +ida_nalt.get_srcdbg_paths() -> str Get source debug paths. -ida_nalt.get_srcdbg_undesired_paths (function) - get_srcdbg_undesired_paths() -> str +ida_nalt.get_srcdbg_undesired_paths() -> str Get user-closed source files. -ida_nalt.get_str_encoding_idx (function) - get_str_encoding_idx(strtype) -> uchar - Get index of the string encoding for this string. - - @param strtype: (C++: int32) +ida_nalt.get_str_encoding_idx(strtype: int) -> "uchar" -ida_nalt.get_str_term1 (function) - get_str_term1(strtype) -> char - - @param strtype: int32 +ida_nalt.get_str_term1(strtype: int) -> "char" -ida_nalt.get_str_term2 (function) - get_str_term2(strtype) -> char - - @param strtype: int32 +ida_nalt.get_str_term2(strtype: int) -> "char" -ida_nalt.get_str_type (function) - get_str_type(ea) -> uint32 - - @param ea: ea_t +ida_nalt.get_str_type(ea: ida_idaapi.ea_t) -> int -ida_nalt.get_str_type_code (function) - get_str_type_code(strtype) -> uchar - - @param strtype: int32 +ida_nalt.get_str_type_code(strtype: int) -> "uchar" -ida_nalt.get_str_type_prefix_length (function) - get_str_type_prefix_length(strtype) -> size_t - - @param strtype: int32 +ida_nalt.get_str_type_prefix_length(strtype: int) -> "size_t" -ida_nalt.get_strid (function) - get_strid(ea) -> tid_t - - @param ea: ea_t +ida_nalt.get_strid(ea: ida_idaapi.ea_t) -> "tid_t" -ida_nalt.get_strtype_bpu (function) - get_strtype_bpu(strtype) -> int - - @param strtype: int32 +ida_nalt.get_strtype_bpu(strtype: int) -> int -ida_nalt.get_switch_info (function) - get_switch_info(out, ea) -> ssize_t - - @param out: switch_info_t * - @param ea: ea_t +ida_nalt.get_switch_info(out: "switch_info_t", ea: ida_idaapi.ea_t) -> "ssize_t" -ida_nalt.get_switch_info (function) +ida_nalt.get_switch_info(*args) -ida_nalt.get_switch_parent (function) - get_switch_parent(ea) -> ea_t - - @param ea: ea_t +ida_nalt.get_switch_parent(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t -ida_nalt.get_tinfo (function) - get_tinfo(tif, ea) -> bool - - @param tif: tinfo_t * - @param ea: ea_t +ida_nalt.get_tinfo(tif: "tinfo_t", ea: ida_idaapi.ea_t) -> bool -ida_nalt.getnode (function) - getnode(ea) -> netnode - - @param ea: ea_t +ida_nalt.getnode(ea: ida_idaapi.ea_t) -> "netnode" -ida_nalt.has_aflag_linnum (function) - has_aflag_linnum(flags) -> bool - - @param flags: aflags_t +ida_nalt.has_aflag_linnum(flags: "aflags_t") -> bool -ida_nalt.has_aflag_lname (function) - has_aflag_lname(flags) -> bool - - @param flags: aflags_t +ida_nalt.has_aflag_lname(flags: "aflags_t") -> bool -ida_nalt.has_aflag_ti (function) - has_aflag_ti(flags) -> bool - - @param flags: aflags_t +ida_nalt.has_aflag_ti(flags: "aflags_t") -> bool -ida_nalt.has_aflag_ti0 (function) - has_aflag_ti0(flags) -> bool - - @param flags: aflags_t +ida_nalt.has_aflag_ti0(flags: "aflags_t") -> bool -ida_nalt.has_aflag_ti1 (function) - has_aflag_ti1(flags) -> bool - - @param flags: aflags_t +ida_nalt.has_aflag_ti1(flags: "aflags_t") -> bool -ida_nalt.has_lname (function) - has_lname(ea) -> bool - - @param ea: ea_t +ida_nalt.has_lname(ea: ida_idaapi.ea_t) -> bool -ida_nalt.has_ti (function) - has_ti(ea) -> bool - - @param ea: ea_t +ida_nalt.has_ti(ea: ida_idaapi.ea_t) -> bool -ida_nalt.has_ti0 (function) - has_ti0(ea) -> bool - - @param ea: ea_t +ida_nalt.has_ti0(ea: ida_idaapi.ea_t) -> bool -ida_nalt.has_ti1 (function) - has_ti1(ea) -> bool - - @param ea: ea_t +ida_nalt.has_ti1(ea: ida_idaapi.ea_t) -> bool -ida_nalt.hide_border (function) - hide_border(ea) - - @param ea: ea_t +ida_nalt.hide_border(ea: ida_idaapi.ea_t) -> None -ida_nalt.hide_item (function) - hide_item(ea) - - @param ea: ea_t +ida_nalt.hide_item(ea: ida_idaapi.ea_t) -> None -ida_nalt.is__bnot0 (function) - is__bnot0(ea) -> bool - - @param ea: ea_t +ida_nalt.is__bnot0(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is__bnot1 (function) - is__bnot1(ea) -> bool - - @param ea: ea_t +ida_nalt.is__bnot1(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is__invsign0 (function) - is__invsign0(ea) -> bool - - @param ea: ea_t +ida_nalt.is__invsign0(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is__invsign1 (function) - is__invsign1(ea) -> bool - - @param ea: ea_t +ida_nalt.is__invsign1(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_aflag__bnot0 (function) - is_aflag__bnot0(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag__bnot0(flags: "aflags_t") -> bool -ida_nalt.is_aflag__bnot1 (function) - is_aflag__bnot1(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag__bnot1(flags: "aflags_t") -> bool -ida_nalt.is_aflag__invsign0 (function) - is_aflag__invsign0(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag__invsign0(flags: "aflags_t") -> bool -ida_nalt.is_aflag__invsign1 (function) - is_aflag__invsign1(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag__invsign1(flags: "aflags_t") -> bool -ida_nalt.is_aflag_align_flow (function) - is_aflag_align_flow(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_align_flow(flags: "aflags_t") -> bool -ida_nalt.is_aflag_colored_item (function) - is_aflag_colored_item(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_colored_item(flags: "aflags_t") -> bool -ida_nalt.is_aflag_data_guessed_by_hexrays (function) - is_aflag_data_guessed_by_hexrays(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_data_guessed_by_hexrays(flags: "aflags_t") -> bool -ida_nalt.is_aflag_fixed_spd (function) - is_aflag_fixed_spd(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_fixed_spd(flags: "aflags_t") -> bool -ida_nalt.is_aflag_func_guessed_by_hexrays (function) - is_aflag_func_guessed_by_hexrays(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_func_guessed_by_hexrays(flags: "aflags_t") -> bool -ida_nalt.is_aflag_hidden_border (function) - is_aflag_hidden_border(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_hidden_border(flags: "aflags_t") -> bool -ida_nalt.is_aflag_hidden_item (function) - is_aflag_hidden_item(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_hidden_item(flags: "aflags_t") -> bool -ida_nalt.is_aflag_libitem (function) - is_aflag_libitem(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_libitem(flags: "aflags_t") -> bool -ida_nalt.is_aflag_lzero0 (function) - is_aflag_lzero0(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_lzero0(flags: "aflags_t") -> bool -ida_nalt.is_aflag_lzero1 (function) - is_aflag_lzero1(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_lzero1(flags: "aflags_t") -> bool -ida_nalt.is_aflag_manual_insn (function) - is_aflag_manual_insn(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_manual_insn(flags: "aflags_t") -> bool -ida_nalt.is_aflag_noret (function) - is_aflag_noret(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_noret(flags: "aflags_t") -> bool -ida_nalt.is_aflag_notcode (function) - is_aflag_notcode(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_notcode(flags: "aflags_t") -> bool -ida_nalt.is_aflag_notproc (function) - is_aflag_notproc(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_notproc(flags: "aflags_t") -> bool -ida_nalt.is_aflag_public_name (function) - is_aflag_public_name(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_public_name(flags: "aflags_t") -> bool -ida_nalt.is_aflag_retfp (function) - is_aflag_retfp(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_retfp(flags: "aflags_t") -> bool -ida_nalt.is_aflag_terse_struc (function) - is_aflag_terse_struc(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_terse_struc(flags: "aflags_t") -> bool -ida_nalt.is_aflag_tilcmt (function) - is_aflag_tilcmt(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_tilcmt(flags: "aflags_t") -> bool -ida_nalt.is_aflag_type_determined_by_hexrays (function) - is_aflag_type_determined_by_hexrays(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_type_determined_by_hexrays(flags: "aflags_t") -> bool -ida_nalt.is_aflag_type_guessed_by_hexrays (function) - is_aflag_type_guessed_by_hexrays(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_type_guessed_by_hexrays(flags: "aflags_t") -> bool -ida_nalt.is_aflag_type_guessed_by_ida (function) - is_aflag_type_guessed_by_ida(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_type_guessed_by_ida(flags: "aflags_t") -> bool -ida_nalt.is_aflag_usersp (function) - is_aflag_usersp(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_usersp(flags: "aflags_t") -> bool -ida_nalt.is_aflag_userti (function) - is_aflag_userti(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_userti(flags: "aflags_t") -> bool -ida_nalt.is_aflag_weak_name (function) - is_aflag_weak_name(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_weak_name(flags: "aflags_t") -> bool -ida_nalt.is_aflag_zstroff (function) - is_aflag_zstroff(flags) -> bool - - @param flags: aflags_t +ida_nalt.is_aflag_zstroff(flags: "aflags_t") -> bool -ida_nalt.is_align_flow (function) - is_align_flow(ea) -> bool - - @param ea: ea_t +ida_nalt.is_align_flow(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_colored_item (function) - is_colored_item(ea) -> bool - - @param ea: ea_t +ida_nalt.is_colored_item(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_data_guessed_by_hexrays (function) - is_data_guessed_by_hexrays(ea) -> bool - - @param ea: ea_t +ida_nalt.is_data_guessed_by_hexrays(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_finally_visible_item (function) - is_finally_visible_item(ea) -> bool +ida_nalt.is_finally_visible_item(ea: ida_idaapi.ea_t) -> bool Is instruction visible? - - @param ea: (C++: ea_t) -ida_nalt.is_fixed_spd (function) - is_fixed_spd(ea) -> bool - - @param ea: ea_t +ida_nalt.is_fixed_spd(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_func_guessed_by_hexrays (function) - is_func_guessed_by_hexrays(ea) -> bool - - @param ea: ea_t +ida_nalt.is_func_guessed_by_hexrays(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_hidden_border (function) - is_hidden_border(ea) -> bool - - @param ea: ea_t +ida_nalt.is_hidden_border(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_hidden_item (function) - is_hidden_item(ea) -> bool - - @param ea: ea_t +ida_nalt.is_hidden_item(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_libitem (function) - is_libitem(ea) -> bool - - @param ea: ea_t +ida_nalt.is_libitem(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_lzero0 (function) - is_lzero0(ea) -> bool - - @param ea: ea_t +ida_nalt.is_lzero0(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_lzero1 (function) - is_lzero1(ea) -> bool - - @param ea: ea_t +ida_nalt.is_lzero1(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_noret (function) - is_noret(ea) -> bool - - @param ea: ea_t +ida_nalt.is_noret(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_notcode (function) - is_notcode(ea) -> bool +ida_nalt.is_notcode(ea: ida_idaapi.ea_t) -> bool Is the address marked as not-code? - - @param ea: (C++: ea_t) -ida_nalt.is_notproc (function) - is_notproc(ea) -> bool - - @param ea: ea_t +ida_nalt.is_notproc(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_pascal (function) - is_pascal(strtype) -> bool - - @param strtype: int32 +ida_nalt.is_pascal(strtype: int) -> bool -ida_nalt.is_reftype_target_optional (function) - is_reftype_target_optional(type) -> bool +ida_nalt.is_reftype_target_optional(type: "reftype_t") -> bool Can the target be calculated using operand value? - - @param type: (C++: reftype_t) -ida_nalt.is_retfp (function) - is_retfp(ea) -> bool - - @param ea: ea_t +ida_nalt.is_retfp(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_terse_struc (function) - is_terse_struc(ea) -> bool - - @param ea: ea_t +ida_nalt.is_terse_struc(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_tilcmt (function) - is_tilcmt(ea) -> bool - - @param ea: ea_t +ida_nalt.is_tilcmt(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_type_determined_by_hexrays (function) - is_type_determined_by_hexrays(ea) -> bool - - @param ea: ea_t +ida_nalt.is_type_determined_by_hexrays(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_type_guessed_by_hexrays (function) - is_type_guessed_by_hexrays(ea) -> bool - - @param ea: ea_t +ida_nalt.is_type_guessed_by_hexrays(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_type_guessed_by_ida (function) - is_type_guessed_by_ida(ea) -> bool - - @param ea: ea_t +ida_nalt.is_type_guessed_by_ida(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_usersp (function) - is_usersp(ea) -> bool - - @param ea: ea_t +ida_nalt.is_usersp(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_userti (function) - is_userti(ea) -> bool - - @param ea: ea_t +ida_nalt.is_userti(ea: ida_idaapi.ea_t) -> bool -ida_nalt.is_visible_item (function) - is_visible_item(ea) -> bool +ida_nalt.is_visible_item(ea: ida_idaapi.ea_t) -> bool Test visibility of item at given ea. - - @param ea: (C++: ea_t) -ida_nalt.is_zstroff (function) - is_zstroff(ea) -> bool - - @param ea: ea_t +ida_nalt.is_zstroff(ea: ida_idaapi.ea_t) -> bool -ida_nalt.make_str_type (function) - make_str_type(type_code, encoding_idx, term1=0, term2=0) -> int32 - Get string type for a string in the given encoding. - - @param type_code: (C++: uchar) - @param encoding_idx: (C++: int) - @param term1: (C++: uchar) - @param term2: (C++: uchar) +ida_nalt.make_str_type(type_code: "uchar", encoding_idx: int, term1: "uchar" = 0, term2: "uchar" = 0) -> int -ida_nalt.node2ea (function) - node2ea(ndx) -> ea_t - - @param ndx: nodeidx_t +ida_nalt.node2ea(ndx: "nodeidx_t") -> ida_idaapi.ea_t -ida_nalt.opinfo_t (class) - Proxy of C++ opinfo_t class. +ida_nalt.opinfo_t -ida_nalt.opinfo_t.__init__ (method) - __init__(self) -> opinfo_t +ida_nalt.opinfo_t.__init__(self) -ida_nalt.opinfo_t.cd (variable) +ida_nalt.opinfo_t.cd for custom data -ida_nalt.opinfo_t.ec (variable) +ida_nalt.opinfo_t.ec for enums -ida_nalt.opinfo_t.path (variable) +ida_nalt.opinfo_t.path for stroff -ida_nalt.opinfo_t.ri (variable) +ida_nalt.opinfo_t.ri for offset members -ida_nalt.opinfo_t.strtype (variable) +ida_nalt.opinfo_t.strtype for strings (String type codes) -ida_nalt.opinfo_t.tid (variable) +ida_nalt.opinfo_t.tid for struct, etc. members -ida_nalt.printop_t (class) - Proxy of C++ printop_t class. +ida_nalt.printop_t -ida_nalt.printop_t.__init__ (method) - __init__(self) -> printop_t +ida_nalt.printop_t.__init__(self) -ida_nalt.printop_t.get_ti (method) - get_ti(self) -> opinfo_t +ida_nalt.printop_t.get_ti(self) -> "opinfo_t const *" -ida_nalt.printop_t.is_aflags_initialized (method) - is_aflags_initialized(self) -> bool +ida_nalt.printop_t.is_aflags_initialized(self) -> bool -ida_nalt.printop_t.is_f64 (method) - is_f64(self) -> bool +ida_nalt.printop_t.is_f64(self) -> bool -ida_nalt.printop_t.is_ti_initialized (method) - is_ti_initialized(self) -> bool +ida_nalt.printop_t.is_ti_initialized(self) -> bool -ida_nalt.printop_t.set_aflags_initialized (method) - set_aflags_initialized(self, v=True) - - @param v: bool +ida_nalt.printop_t.set_aflags_initialized(self, v: bool = True) -> None -ida_nalt.printop_t.set_ti_initialized (method) - set_ti_initialized(self, v=True) - - @param v: bool +ida_nalt.printop_t.set_ti_initialized(self, v: bool = True) -> None -ida_nalt.refinfo_t (class) - Proxy of C++ refinfo_t class. +ida_nalt.refinfo_t -ida_nalt.refinfo_t.__init__ (method) - __init__(self) -> refinfo_t +ida_nalt.refinfo_t.__init__(self) -ida_nalt.refinfo_t.base (variable) +ida_nalt.refinfo_t.base base of reference (may be BADADDR) -ida_nalt.refinfo_t.flags (variable) - Reference info flags +ida_nalt.refinfo_t.flags + Reference info flags + -ida_nalt.refinfo_t.init (method) - init(self, reft_and_flags, _base=0, _target=BADADDR, _tdelta=0) - - @param reft_and_flags: uint32 - @param _base: ea_t - @param _target: ea_t - @param _tdelta: adiff_t +ida_nalt.refinfo_t.init(self, *args) -> None -ida_nalt.refinfo_t.is_custom (method) - is_custom(self) -> bool +ida_nalt.refinfo_t.is_custom(self) -> bool -ida_nalt.refinfo_t.is_no_ones (method) - is_no_ones(self) -> bool +ida_nalt.refinfo_t.is_no_ones(self) -> bool -ida_nalt.refinfo_t.is_no_zeros (method) - is_no_zeros(self) -> bool +ida_nalt.refinfo_t.is_no_zeros(self) -> bool -ida_nalt.refinfo_t.is_pastend (method) - is_pastend(self) -> bool +ida_nalt.refinfo_t.is_pastend(self) -> bool -ida_nalt.refinfo_t.is_rvaoff (method) - is_rvaoff(self) -> bool +ida_nalt.refinfo_t.is_rvaoff(self) -> bool -ida_nalt.refinfo_t.is_selfref (method) - is_selfref(self) -> bool +ida_nalt.refinfo_t.is_selfref(self) -> bool -ida_nalt.refinfo_t.is_signed (method) - is_signed(self) -> bool +ida_nalt.refinfo_t.is_signed(self) -> bool -ida_nalt.refinfo_t.is_subtract (method) - is_subtract(self) -> bool +ida_nalt.refinfo_t.is_subtract(self) -> bool -ida_nalt.refinfo_t.is_target_optional (method) - is_target_optional(self) -> bool +ida_nalt.refinfo_t.is_target_optional(self) -> bool < is_reftype_target_optional() -ida_nalt.refinfo_t.no_base_xref (method) - no_base_xref(self) -> bool +ida_nalt.refinfo_t.no_base_xref(self) -> bool -ida_nalt.refinfo_t.set_type (method) - set_type(self, rt) - - @param rt: reftype_t +ida_nalt.refinfo_t.set_type(self, rt: "reftype_t") -> None -ida_nalt.refinfo_t.target (variable) +ida_nalt.refinfo_t.target reference target (BADADDR-none) -ida_nalt.refinfo_t.tdelta (variable) +ida_nalt.refinfo_t.tdelta offset from the target -ida_nalt.refinfo_t.type (method) - type(self) -> reftype_t +ida_nalt.refinfo_t.type(self) -> "reftype_t" -ida_nalt.rename_encoding (function) - rename_encoding(idx, encname) -> bool - Change name for an encoding The number of bytes per unit (BPU) of the new - encoding must match this number of the existing default encoding. Specifying the - empty name simply deletes this encoding. - - @param idx: (C++: int) the encoding index (1-based) - @param encname: (C++: const char *) the new encoding name +ida_nalt.rename_encoding(idx: int, encname: str) -> bool -ida_nalt.retrieve_input_file_crc32 (function) - 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_crc32() -> int + 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 (function) - retrieve_input_file_md5() -> bytes +ida_nalt.retrieve_input_file_md5() -> bytes Get input file md5. -ida_nalt.retrieve_input_file_sha256 (function) - retrieve_input_file_sha256() -> bytes +ida_nalt.retrieve_input_file_sha256() -> bytes Get input file sha256. -ida_nalt.retrieve_input_file_size (function) - retrieve_input_file_size() -> size_t +ida_nalt.retrieve_input_file_size() -> "size_t" Get size of input file in bytes. -ida_nalt.set__bnot0 (function) - set__bnot0(ea) - - @param ea: ea_t +ida_nalt.set__bnot0(ea: ida_idaapi.ea_t) -> None -ida_nalt.set__bnot1 (function) - set__bnot1(ea) - - @param ea: ea_t +ida_nalt.set__bnot1(ea: ida_idaapi.ea_t) -> None -ida_nalt.set__invsign0 (function) - set__invsign0(ea) - - @param ea: ea_t +ida_nalt.set__invsign0(ea: ida_idaapi.ea_t) -> None -ida_nalt.set__invsign1 (function) - set__invsign1(ea) - - @param ea: ea_t +ida_nalt.set__invsign1(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_abits (function) - set_abits(ea, bits) - - @param ea: ea_t - @param bits: aflags_t +ida_nalt.set_abits(ea: ida_idaapi.ea_t, bits: "aflags_t") -> None -ida_nalt.set_absbase (function) - set_absbase(ea, x) - - @param ea: ea_t - @param x: ea_t +ida_nalt.set_absbase(ea: ida_idaapi.ea_t, x: ida_idaapi.ea_t) -> None -ida_nalt.set_aflags (function) - set_aflags(ea, flags) - - @param ea: ea_t - @param flags: aflags_t +ida_nalt.set_aflags(ea: ida_idaapi.ea_t, flags: "aflags_t") -> None -ida_nalt.set_align_flow (function) - set_align_flow(ea) - - @param ea: ea_t +ida_nalt.set_align_flow(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_alignment (function) - set_alignment(ea, x) - - @param ea: ea_t - @param x: uint32 +ida_nalt.set_alignment(ea: ida_idaapi.ea_t, x: int) -> None -ida_nalt.set_archive_path (function) - set_archive_path(file) -> bool +ida_nalt.set_archive_path(file: str) -> bool Set archive file path from which input file was extracted. - - @param file: (C++: const char *) char const * -ida_nalt.set_array_parameters (function) - set_array_parameters(ea, _in) - - @param ea: ea_t - @param in: array_parameters_t const * +ida_nalt.set_array_parameters(ea: ida_idaapi.ea_t, _in: "array_parameters_t") -> None -ida_nalt.set_asm_inc_file (function) - set_asm_inc_file(file) -> bool +ida_nalt.set_asm_inc_file(file: str) -> bool Set name of the include file. - - @param file: (C++: const char *) char const * -ida_nalt.set_colored_item (function) - set_colored_item(ea) - - @param ea: ea_t +ida_nalt.set_colored_item(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_custom_data_type_ids (function) - set_custom_data_type_ids(ea, cdis) - - @param ea: ea_t - @param cdis: custom_data_type_ids_t const * +ida_nalt.set_custom_data_type_ids(ea: ida_idaapi.ea_t, cdis: "custom_data_type_ids_t") -> None -ida_nalt.set_data_guessed_by_hexrays (function) - set_data_guessed_by_hexrays(ea) - - @param ea: ea_t +ida_nalt.set_data_guessed_by_hexrays(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_default_encoding_idx (function) - set_default_encoding_idx(bpu, idx) -> bool - Set default encoding for a string type - - @param bpu: (C++: int) the amount of bytes per unit - @param idx: (C++: int) the encoding index. It cannot be 0 +ida_nalt.set_default_encoding_idx(bpu: int, idx: int) -> bool -ida_nalt.set_fixed_spd (function) - set_fixed_spd(ea) - - @param ea: ea_t +ida_nalt.set_fixed_spd(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_func_guessed_by_hexrays (function) - set_func_guessed_by_hexrays(ea) - - @param ea: ea_t +ida_nalt.set_func_guessed_by_hexrays(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_gotea (function) - set_gotea(gotea) - - @param gotea: ea_t +ida_nalt.set_gotea(gotea: ida_idaapi.ea_t) -> None -ida_nalt.set_has_lname (function) - set_has_lname(ea) - - @param ea: ea_t +ida_nalt.set_has_lname(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_has_ti (function) - set_has_ti(ea) - - @param ea: ea_t +ida_nalt.set_has_ti(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_has_ti0 (function) - set_has_ti0(ea) - - @param ea: ea_t +ida_nalt.set_has_ti0(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_has_ti1 (function) - set_has_ti1(ea) - - @param ea: ea_t +ida_nalt.set_has_ti1(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_ida_notepad_text (function) - set_ida_notepad_text(text, size=0) +ida_nalt.set_ida_notepad_text(text: str, size: "size_t" = 0) -> None Set notepad text. - - @param text: (C++: const char *) char const * - @param size: (C++: size_t) -ida_nalt.set_ids_modnode (function) - set_ids_modnode(id) +ida_nalt.set_ids_modnode(id: "netnode") -> None Set ids modnode. - - @param id: (C++: netnode) -ida_nalt.set_imagebase (function) - set_imagebase(base) +ida_nalt.set_imagebase(base: ida_idaapi.ea_t) -> None Set image base address. - - @param base: (C++: ea_t) -ida_nalt.set_item_color (function) - set_item_color(ea, color) - - @param ea: ea_t - @param color: bgcolor_t +ida_nalt.set_item_color(ea: ida_idaapi.ea_t, color: "bgcolor_t") -> None -ida_nalt.set_libitem (function) - set_libitem(ea) - - @param ea: ea_t +ida_nalt.set_libitem(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_loader_format_name (function) - set_loader_format_name(name) +ida_nalt.set_loader_format_name(name: str) -> None Set file format name for loader modules. - - @param name: (C++: const char *) char const * -ida_nalt.set_lzero0 (function) - set_lzero0(ea) - - @param ea: ea_t +ida_nalt.set_lzero0(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_lzero1 (function) - set_lzero1(ea) - - @param ea: ea_t +ida_nalt.set_lzero1(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_noret (function) - set_noret(ea) - - @param ea: ea_t +ida_nalt.set_noret(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_notcode (function) - set_notcode(ea) +ida_nalt.set_notcode(ea: ida_idaapi.ea_t) -> None Mark address so that it cannot be converted to instruction. - - @param ea: (C++: ea_t) -ida_nalt.set_notproc (function) - set_notproc(ea) - - @param ea: ea_t +ida_nalt.set_notproc(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_op_tinfo (function) - set_op_tinfo(ea, n, tif) -> bool - - @param ea: ea_t - @param n: int - @param tif: tinfo_t const * +ida_nalt.set_op_tinfo(ea: ida_idaapi.ea_t, n: int, tif: "tinfo_t") -> bool -ida_nalt.set_outfile_encoding_idx (function) - set_outfile_encoding_idx(idx) -> bool - set encoding to be used when producing files - - @param idx: (C++: int) the encoding index IDX can be 0 to use the IDB's default 1-byte-per- - unit encoding +ida_nalt.set_outfile_encoding_idx(idx: int) -> bool -ida_nalt.set_refinfo (function) - set_refinfo(ea, n, type, target=BADADDR, base=0, tdelta=0) -> bool - - @param ea: ea_t - @param n: int - @param type: reftype_t - @param target: ea_t - @param base: ea_t - @param tdelta: adiff_t +ida_nalt.set_refinfo(*args) -> bool -ida_nalt.set_refinfo_ex (function) - set_refinfo_ex(ea, n, ri) -> bool - - @param ea: ea_t - @param n: int - @param ri: refinfo_t const * +ida_nalt.set_refinfo_ex(ea: ida_idaapi.ea_t, n: int, ri: "refinfo_t") -> bool -ida_nalt.set_retfp (function) - set_retfp(ea) - - @param ea: ea_t +ida_nalt.set_retfp(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_root_filename (function) - set_root_filename(file) +ida_nalt.set_root_filename(file: str) -> None Set full path of the input file. - - @param file: (C++: const char *) char const * -ida_nalt.set_source_linnum (function) - set_source_linnum(ea, lnnum) - - @param ea: ea_t - @param lnnum: uval_t +ida_nalt.set_source_linnum(ea: ida_idaapi.ea_t, lnnum: int) -> None -ida_nalt.set_srcdbg_paths (function) - set_srcdbg_paths(paths) +ida_nalt.set_srcdbg_paths(paths: str) -> None Set source debug paths. - - @param paths: (C++: const char *) char const * -ida_nalt.set_srcdbg_undesired_paths (function) - set_srcdbg_undesired_paths(paths) +ida_nalt.set_srcdbg_undesired_paths(paths: str) -> None Set user-closed source files. - - @param paths: (C++: const char *) char const * -ida_nalt.set_str_encoding_idx (function) - set_str_encoding_idx(strtype, encoding_idx) -> int32 - Set index of the string encoding in the string type. - - @param strtype: (C++: int32) - @param encoding_idx: (C++: int) +ida_nalt.set_str_encoding_idx(strtype: int, encoding_idx: int) -> int -ida_nalt.set_str_type (function) - set_str_type(ea, x) - - @param ea: ea_t - @param x: uint32 +ida_nalt.set_str_type(ea: ida_idaapi.ea_t, x: int) -> None -ida_nalt.set_switch_info (function) - set_switch_info(ea, _in) - - @param ea: ea_t - @param in: switch_info_t const & +ida_nalt.set_switch_info(ea: ida_idaapi.ea_t, _in: "switch_info_t") -> None -ida_nalt.set_switch_parent (function) - set_switch_parent(ea, x) - - @param ea: ea_t - @param x: ea_t +ida_nalt.set_switch_parent(ea: ida_idaapi.ea_t, x: ida_idaapi.ea_t) -> None -ida_nalt.set_terse_struc (function) - set_terse_struc(ea) - - @param ea: ea_t +ida_nalt.set_terse_struc(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_tilcmt (function) - set_tilcmt(ea) - - @param ea: ea_t +ida_nalt.set_tilcmt(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_tinfo (function) - set_tinfo(ea, tif) -> bool - - @param ea: ea_t - @param tif: tinfo_t const * +ida_nalt.set_tinfo(ea: ida_idaapi.ea_t, tif: "tinfo_t") -> bool -ida_nalt.set_type_determined_by_hexrays (function) - set_type_determined_by_hexrays(ea) - - @param ea: ea_t +ida_nalt.set_type_determined_by_hexrays(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_type_guessed_by_ida (function) - set_type_guessed_by_ida(ea) - - @param ea: ea_t +ida_nalt.set_type_guessed_by_ida(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_usemodsp (function) - set_usemodsp(ea) - - @param ea: ea_t +ida_nalt.set_usemodsp(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_usersp (function) - set_usersp(ea) - - @param ea: ea_t +ida_nalt.set_usersp(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_userti (function) - set_userti(ea) - - @param ea: ea_t +ida_nalt.set_userti(ea: ida_idaapi.ea_t) -> None -ida_nalt.set_visible_item (function) - set_visible_item(ea, visible) +ida_nalt.set_visible_item(ea: ida_idaapi.ea_t, visible: bool) -> None Change visibility of item at given ea. - - @param ea: (C++: ea_t) - @param visible: (C++: bool) -ida_nalt.set_zstroff (function) - set_zstroff(ea) - - @param ea: ea_t +ida_nalt.set_zstroff(ea: ida_idaapi.ea_t) -> None -ida_nalt.strpath_ids_array (class) - Proxy of C++ wrapped_array_t< tid_t,32 > class. +ida_nalt.strpath_ids_array -ida_nalt.strpath_ids_array.__getitem__ (method) - __getitem__(self, i) -> unsigned-ea-like-numeric-type const & - - @param i: size_t +ida_nalt.strpath_ids_array.__getitem__(self, i: "size_t") -> "unsigned long long const &" -ida_nalt.strpath_ids_array.__init__ (method) - __init__(self, data) -> strpath_ids_array - - @param data: unsigned-ea-like-numeric-type (&)[32] +ida_nalt.strpath_ids_array.__init__(self, data: "unsigned long long (&)[32]") -ida_nalt.strpath_ids_array.__len__ (method) - __len__(self) -> size_t +ida_nalt.strpath_ids_array.__len__(self) -> "size_t" -ida_nalt.strpath_ids_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: unsigned-ea-like-numeric-type const & +ida_nalt.strpath_ids_array.__setitem__(self, i: "size_t", v: "unsigned long long const &") -> None -ida_nalt.strpath_ids_array._get_bytes (method) - _get_bytes(self) -> bytevec_t +ida_nalt.strpath_ids_array._get_bytes(self) -> "bytevec_t" -ida_nalt.strpath_ids_array._set_bytes (method) - _set_bytes(self, bts) - - Parameters - ---------- - bts: bytevec_t const & +ida_nalt.strpath_ids_array._set_bytes(self, bts: "bytevec_t const &") -> None -ida_nalt.strpath_t (class) - Proxy of C++ strpath_t class. +ida_nalt.strpath_t -ida_nalt.strpath_t.__getIds (method) - __getIds(self) -> strpath_ids_array +ida_nalt.strpath_t.__getIds(self) -> "wrapped_array_t< tid_t,32 >" -ida_nalt.strpath_t.__init__ (method) - __init__(self) -> strpath_t +ida_nalt.strpath_t.__init__(self) -ida_nalt.switch_info_t (class) - Proxy of C++ switch_info_t class. +ida_nalt.switch_info_t -ida_nalt.switch_info_t.__init__ (method) - __init__(self) -> switch_info_t +ida_nalt.switch_info_t.__init__(self) -ida_nalt.switch_info_t._get_values_lowcase (method) - _get_values_lowcase(self) -> ea_t +ida_nalt.switch_info_t._get_values_lowcase(self) -> ida_idaapi.ea_t -ida_nalt.switch_info_t._set_values_lowcase (method) - _set_values_lowcase(self, values) - - Parameters - ---------- - values: ea_t +ida_nalt.switch_info_t._set_values_lowcase(self, values: ida_idaapi.ea_t) -> None -ida_nalt.switch_info_t.assign (method) - assign(self, other) - - @param other: switch_info_t const & +ida_nalt.switch_info_t.assign(self, other: "switch_info_t") -> None -ida_nalt.switch_info_t.clear (method) - clear(self) +ida_nalt.switch_info_t.clear(self) -> None -ida_nalt.switch_info_t.custom (variable) +ida_nalt.switch_info_t.custom information for custom tables (filled and used by modules) -ida_nalt.switch_info_t.defjump (variable) +ida_nalt.switch_info_t.defjump default jump address (BADADDR if no default case) -ida_nalt.switch_info_t.elbase (variable) +ida_nalt.switch_info_t.elbase element base -ida_nalt.switch_info_t.expr_ea (variable) - the address before that the switch expression is in REGNUM. If BADADDR, then the - first insn marked as IM_SWITCH after STARTEA is used. +ida_nalt.switch_info_t.expr_ea + the address before that the switch expression is in REGNUM. If BADADDR, then the first insn marked as IM_SWITCH after STARTEA is used. + -ida_nalt.switch_info_t.flags (variable) - Switch info flags +ida_nalt.switch_info_t.flags + Switch info flags + -ida_nalt.switch_info_t.get_jrange_vrange (method) - get_jrange_vrange(self, jrange=None, vrange=None) -> bool +ida_nalt.switch_info_t.get_jrange_vrange(self, jrange: "range_t" = None, vrange: "range_t" = None) -> bool get separate parts of the switch - - @param jrange: (C++: range_t *) - @param vrange: (C++: range_t *) -ida_nalt.switch_info_t.get_jtable_element_size (method) - get_jtable_element_size(self) -> int +ida_nalt.switch_info_t.get_jtable_element_size(self) -> int -ida_nalt.switch_info_t.get_jtable_size (method) - get_jtable_size(self) -> int +ida_nalt.switch_info_t.get_jtable_size(self) -> int -ida_nalt.switch_info_t.get_lowcase (method) - get_lowcase(self) -> sval_t +ida_nalt.switch_info_t.get_lowcase(self) -> int -ida_nalt.switch_info_t.get_shift (method) - get_shift(self) -> int - See SWI_SHIFT_MASK. possible answers: 0..3. +ida_nalt.switch_info_t.get_shift(self) -> int + See SWI_SHIFT_MASK. possible answers: 0..3. + -ida_nalt.switch_info_t.get_version (method) - get_version(self) -> int +ida_nalt.switch_info_t.get_version(self) -> int -ida_nalt.switch_info_t.get_vtable_element_size (method) - get_vtable_element_size(self) -> int +ida_nalt.switch_info_t.get_vtable_element_size(self) -> int -ida_nalt.switch_info_t.has_default (method) - has_default(self) -> bool +ida_nalt.switch_info_t.has_default(self) -> bool -ida_nalt.switch_info_t.has_elbase (method) - has_elbase(self) -> bool +ida_nalt.switch_info_t.has_elbase(self) -> bool -ida_nalt.switch_info_t.is_custom (method) - is_custom(self) -> bool +ida_nalt.switch_info_t.is_custom(self) -> bool -ida_nalt.switch_info_t.is_indirect (method) - is_indirect(self) -> bool +ida_nalt.switch_info_t.is_indirect(self) -> bool -ida_nalt.switch_info_t.is_nolowcase (method) - is_nolowcase(self) -> bool +ida_nalt.switch_info_t.is_nolowcase(self) -> bool -ida_nalt.switch_info_t.is_sparse (method) - is_sparse(self) -> bool +ida_nalt.switch_info_t.is_sparse(self) -> bool -ida_nalt.switch_info_t.is_subtract (method) - is_subtract(self) -> bool +ida_nalt.switch_info_t.is_subtract(self) -> bool -ida_nalt.switch_info_t.is_user_defined (method) - is_user_defined(self) -> bool +ida_nalt.switch_info_t.is_user_defined(self) -> bool -ida_nalt.switch_info_t.jcases (variable) +ida_nalt.switch_info_t.jcases number of entries in the jump table (SWI_INDIRECT) -ida_nalt.switch_info_t.jumps (variable) +ida_nalt.switch_info_t.jumps jump table start address -ida_nalt.switch_info_t.lowcase (variable) +ida_nalt.switch_info_t.lowcase the lowest value in cases -ida_nalt.switch_info_t.marks (variable) +ida_nalt.switch_info_t.lowcase + the lowest value in cases + +ida_nalt.switch_info_t.marks the insns marked as IM_SWITCH. They are used to delete the switch. -ida_nalt.switch_info_t.ncases (variable) +ida_nalt.switch_info_t.ncases number of cases (excluding default) -ida_nalt.switch_info_t.regdtype (variable) +ida_nalt.switch_info_t.regdtype size of the switch expression register as dtype -ida_nalt.switch_info_t.regnum (variable) - the switch expression as a value of the REGNUM register before the instruction - at EXPR_EA. -1 means 'unknown' +ida_nalt.switch_info_t.regnum + the switch expression as a value of the REGNUM register before the instruction at EXPR_EA. -1 means 'unknown' + -ida_nalt.switch_info_t.set_elbase (method) - set_elbase(self, base) - - @param base: ea_t +ida_nalt.switch_info_t.set_elbase(self, base: ida_idaapi.ea_t) -> None -ida_nalt.switch_info_t.set_expr (method) - set_expr(self, r, dt) - - @param r: int - @param dt: op_dtype_t +ida_nalt.switch_info_t.set_expr(self, r: int, dt: "op_dtype_t") -> None -ida_nalt.switch_info_t.set_jtable_element_size (method) - set_jtable_element_size(self, size) - - @param size: int +ida_nalt.switch_info_t.set_jtable_element_size(self, size: int) -> None -ida_nalt.switch_info_t.set_jtable_size (method) - set_jtable_size(self, size) - - @param size: int +ida_nalt.switch_info_t.set_jtable_size(self, size: int) -> None -ida_nalt.switch_info_t.set_shift (method) - set_shift(self, shift) +ida_nalt.switch_info_t.set_shift(self, shift: int) -> None See SWI_SHIFT_MASK. - - @param shift: (C++: int) -ida_nalt.switch_info_t.set_vtable_element_size (method) - set_vtable_element_size(self, size) - - @param size: int +ida_nalt.switch_info_t.set_vtable_element_size(self, size: int) -> None -ida_nalt.switch_info_t.startea (variable) +ida_nalt.switch_info_t.startea start of the switch idiom -ida_nalt.switch_info_t.use_std_table (method) - use_std_table(self) -> bool +ida_nalt.switch_info_t.use_std_table(self) -> bool -ida_nalt.switch_info_t.values (variable) +ida_nalt.switch_info_t.values values table address (if SWI_SPARSE is set) -ida_nalt.switch_info_t__from_ptrval__ (function) - switch_info_t__from_ptrval__(ptrval) -> switch_info_t - - @param ptrval: size_t +ida_nalt.switch_info_t.values + values table address (if SWI_SPARSE is set) -ida_nalt.unhide_border (function) - unhide_border(ea) - - @param ea: ea_t +ida_nalt.switch_info_t__from_ptrval__(ptrval: "size_t") -> "switch_info_t *" -ida_nalt.unhide_item (function) - unhide_item(ea) - - @param ea: ea_t +ida_nalt.unhide_border(ea: ida_idaapi.ea_t) -> None -ida_nalt.upd_abits (function) - upd_abits(ea, clr_bits, set_bits) - - @param ea: ea_t - @param clr_bits: aflags_t - @param set_bits: aflags_t +ida_nalt.unhide_item(ea: ida_idaapi.ea_t) -> None -ida_nalt.uses_aflag_modsp (function) - uses_aflag_modsp(flags) -> bool - - @param flags: aflags_t +ida_nalt.upd_abits(ea: ida_idaapi.ea_t, clr_bits: "aflags_t", set_bits: "aflags_t") -> None -ida_nalt.uses_modsp (function) - uses_modsp(ea) -> bool - - @param ea: ea_t +ida_nalt.uses_aflag_modsp(flags: "aflags_t") -> bool -ida_nalt.validate_idb_names (function) - validate_idb_names(do_repair) -> int - - @param do_repair: bool +ida_nalt.uses_modsp(ea: ida_idaapi.ea_t) -> bool -ida_name (module) +ida_name Functions that deal with names. - A non-tail address of the program may have a name. Tail addresses (i.e. the - addresses in the middle of an instruction or data item) cannot have names. + A non-tail address of the program may have a name. Tail addresses (i.e. the addresses in the middle of an instruction or data item) cannot have names. + -ida_name.DEBNAME_EXACT (variable) +ida_name.CN_KEEP_TRAILING_DIGITS + do not remove "_\d+" at the end of name + +ida_name.CN_KEEP_UNDERSCORES + do not remove leading underscores. but it is ok to remove __imp_. + + +ida_name.DEBNAME_EXACT find a name at exactly the specified address -ida_name.DEBNAME_LOWER (variable) +ida_name.DEBNAME_LOWER find a name with the address >= the specified address -ida_name.DEBNAME_NICE (variable) +ida_name.DEBNAME_NICE find a name with the address <= the specified address -ida_name.DEBNAME_UPPER (variable) +ida_name.DEBNAME_UPPER find a name with the address > the specified address -ida_name.FUNC_IMPORT_PREFIX (variable) +ida_name.DQT_COMPILER + only detect compiler that generated the name + +ida_name.DQT_FULL + really demangle + +ida_name.DQT_NAME_TYPE + only detect the name type (data/code) + +ida_name.DQT_NPURGED_2 + only calculate number of purged bytes (sizeof(arg)==2) + +ida_name.DQT_NPURGED_4 + only calculate number of purged bytes (sizeof(arg)==4) + +ida_name.DQT_NPURGED_8 + only calculate number of purged bytes (sizeof(arg)==8) + +ida_name.FUNC_IMPORT_PREFIX Name prefix used by IDA for the imported functions. -ida_name.GETN_APPZERO (variable) - meaningful only if the name refers to a structure. append a struct field name if - the field offset is zero? +ida_name.GETN_APPZERO + meaningful only if the name refers to a structure. append a struct field name if the field offset is zero? + -ida_name.GETN_NODUMMY (variable) +ida_name.GETN_NODUMMY do not create a new dummy name but pretend it exists -ida_name.GETN_NOFIXUP (variable) +ida_name.GETN_NOFIXUP ignore the fixup information when producing the name -ida_name.GNCN_NOCOLOR (variable) +ida_name.GNCN_NOCOLOR generate an uncolored name -ida_name.GNCN_NODBGNM (variable) +ida_name.GNCN_NODBGNM don't use debug names -ida_name.GNCN_NOFUNC (variable) +ida_name.GNCN_NOFUNC don't generate funcname+... expressions -ida_name.GNCN_NOLABEL (variable) +ida_name.GNCN_NOLABEL don't generate labels -ida_name.GNCN_NOSEG (variable) +ida_name.GNCN_NOSEG ignore the segment prefix when producing the name -ida_name.GNCN_PREFDBG (variable) +ida_name.GNCN_PREFDBG if using debug names, prefer debug names over function names -ida_name.GNCN_REQFUNC (variable) +ida_name.GNCN_REQFUNC return 0 if the address does not belong to a function -ida_name.GNCN_REQNAME (variable) +ida_name.GNCN_REQNAME return 0 if the address can only be represented as a hex number -ida_name.GNCN_SEGNUM (variable) +ida_name.GNCN_SEGNUM segment part is displayed as a hex number -ida_name.GNCN_SEG_FUNC (variable) - generate both segment and function names (default is to omit segment name if a - function name is present) +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 (variable) +ida_name.GN_COLORED return colored name -ida_name.GN_DEMANGLED (variable) +ida_name.GN_DEMANGLED return demangled name -ida_name.GN_ISRET (variable) +ida_name.GN_ISRET for dummy names: use retloc -ida_name.GN_LOCAL (variable) +ida_name.GN_LOCAL try to get local name first; if failed, get global -ida_name.GN_LONG (variable) +ida_name.GN_LONG use long form of demangled name -ida_name.GN_NOT_DUMMY (variable) +ida_name.GN_NOT_DUMMY do not return a dummy name -ida_name.GN_NOT_ISRET (variable) +ida_name.GN_NOT_ISRET for dummy names: do not use retloc -ida_name.GN_SHORT (variable) +ida_name.GN_SHORT use short form of demangled name -ida_name.GN_STRICT (variable) +ida_name.GN_STRICT fail if cannot demangle -ida_name.GN_VISIBLE (variable) +ida_name.GN_VISIBLE replace forbidden characters by SUBSTCHAR -ida_name.MAXNAMELEN (variable) +ida_name.MAXNAMELEN Maximum length of a name in IDA (with the trailing zero) -ida_name.NT_ABS (variable) +ida_name.NT_ABS name is absolute symbol (SEG_ABSSYM) -ida_name.NT_BMASK (variable) +ida_name.NT_BMASK name is a bit group mask name -ida_name.NT_BYTE (variable) +ida_name.NT_BYTE name is byte name (regular name) -ida_name.NT_ENUM (variable) +ida_name.NT_ENUM name is symbolic constant -ida_name.NT_LOCAL (variable) +ida_name.NT_LOCAL name is local label -ida_name.NT_NONE (variable) +ida_name.NT_NONE name doesn't exist or has no value -ida_name.NT_REGVAR (variable) +ida_name.NT_REGVAR name is a renamed register (*value is idx into pfn->regvars) -ida_name.NT_SEG (variable) +ida_name.NT_SEG name is segment or segment register name -ida_name.NT_STKVAR (variable) +ida_name.NT_STKVAR name is stack variable name -ida_name.NT_STROFF (variable) +ida_name.NT_STROFF name is structure member -ida_name.NearestName (class) +ida_name.NearestName Utility class to help find the nearest name in a given ea/name dictionary -ida_name.NearestName.__getitem__ (method) +ida_name.NearestName.__getitem__(self, index) Returns the tupple (ea, name, index) -ida_name.NearestName.__init__ (method) +ida_name.NearestName.__init__(self, ea_names) -ida_name.NearestName.__iter__ (method) +ida_name.NearestName.__iter__(self) -ida_name.NearestName._get_item (method) +ida_name.NearestName._get_item(self, index) -ida_name.NearestName.find (method) +ida_name.NearestName.find(self, ea) Returns a tupple (ea, name, pos) that is the nearest to the passed ea If no name is matched then None is returned -ida_name.NearestName.update (method) +ida_name.NearestName.update(self, ea_names) Updates the ea/names map -ida_name.SN_AUTO (variable) +ida_name.SN_AUTO if set, make name autogenerated -ida_name.SN_CHECK (variable) +ida_name.SN_CHECK Fail if the name contains invalid characters. -ida_name.SN_DELTAIL (variable) - if name cannot be set because of a tail byte, delete the hindering item +ida_name.SN_DELTAIL + if name cannot be set because of a tail byte, delete the hindering item + -ida_name.SN_FORCE (variable) - if the specified name is already present in the database, try variations with a - numerical suffix like "_123" +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 (variable) - 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_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 (variable) - 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_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 (variable) - Replace invalid characters silently. If this bit is set, all invalid chars (not - in NameChars or MangleChars) will be replaced by '_' List of valid characters is - defined in ida.cfg +ida_name.SN_NOCHECK + Replace invalid characters silently. If this bit is set, all invalid chars (not in NameChars or MangleChars) will be replaced by '_' List of valid characters is defined in ida.cfg + -ida_name.SN_NODUMMY (variable) - automatically prepend the name with '_' if it begins with a dummy suffix such as - 'sub_'. See also SN_IDBENC +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 (variable) - 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_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 (variable) +ida_name.SN_NON_AUTO if set, make name non-autogenerated -ida_name.SN_NON_PUBLIC (variable) +ida_name.SN_NON_PUBLIC if set, make name non-public -ida_name.SN_NON_WEAK (variable) +ida_name.SN_NON_WEAK if set, make name non-weak -ida_name.SN_NOWARN (variable) +ida_name.SN_NOWARN don't display a warning if failed -ida_name.SN_PUBLIC (variable) +ida_name.SN_PUBLIC if set, make name public -ida_name.SN_WEAK (variable) +ida_name.SN_WEAK if set, make name weak -ida_name.append_struct_fields (function) - 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: (C++: adiff_t *) displacement from the name - @param n: (C++: int) operand number in which the name appears - @param path: (C++: const tid_t *) path in the struct. path is an array of id's. maximal length of - array is MAXSTRUCPATH. the first element of the array is the - structure id. consecutive elements are id's of used union members - (if any). - @param flags: (C++: flags64_t) the input flags. they will be returned if the struct cannot be - found. - @param delta: (C++: adiff_t) delta to add to displacement - @param appzero: (C++: bool) should append a struct field name if the displacement is zero? - @return: flags of the innermost struct member or the input flags +ida_name.UCDR_MANGLED + mangled names -ida_name.calc_gtn_flags (function) +ida_name.UCDR_NAME + regular (unmangled) names + +ida_name.UCDR_STRLIT + string literals + +ida_name.UCDR_TYPE + type names + +ida_name.VNT_IDENT + identifier (e.g., function name) + +ida_name.VNT_STRLIT + string literal + +ida_name.VNT_TYPE + type name (can contain '<', '>', ...) + +ida_name.VNT_UDTMEM + UDT (structure, union, enum) member. + +ida_name.VNT_VISIBLE + visible cp (obsolete; will be deleted) + +ida_name.append_struct_fields(disp: "adiff_t *", n: int, path: "tid_t const *", flags: "flags64_t", delta: "adiff_t", appzero: bool) -> str + Append names of struct fields to a name if the name is a struct name. + + @param disp: displacement from the name + @param n: operand number in which the name appears + @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). + @param flags: the input flags. they will be returned if the struct cannot be found. + @param delta: delta to add to displacement + @param appzero: should append a struct field name if the displacement is zero? + @returns flags of the innermost struct member or the input flags + +ida_name.calc_gtn_flags(fromaddr, ea) Calculate flags for get_ea_name() function @param fromaddr: the referring address. May be BADADDR. @@ -51347,329 +35502,155 @@ ida_name.calc_gtn_flags (function) @return: flags -ida_name.cleanup_name (function) - cleanup_name(ea, name, flags=0) -> str - - @param ea: ea_t - @param name: char const * - @param flags: uint32 +ida_name.cleanup_name(ea: ida_idaapi.ea_t, name: str, flags: int = 0) -> str -ida_name.del_debug_names (function) - del_debug_names(ea1, ea2) - - @param ea1: ea_t - @param ea2: ea_t +ida_name.del_debug_names(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t) -> None -ida_name.del_global_name (function) - del_global_name(ea) -> bool - - @param ea: ea_t +ida_name.del_global_name(ea: ida_idaapi.ea_t) -> bool -ida_name.del_local_name (function) - del_local_name(ea) -> bool - - @param ea: ea_t +ida_name.del_local_name(ea: ida_idaapi.ea_t) -> bool -ida_name.demangle_name (function) - demangle_name(name, disable_mask, demreq=DQT_FULL) -> str - Demangle a name. - - @param name: (C++: const char *) char const * - @param disable_mask: (C++: uint32) - @param demreq: (C++: demreq_type_t) enum demreq_type_t +ida_name.demangle_name(name: str, disable_mask: int, demreq: "demreq_type_t" = DQT_FULL) -> str + Demangle a name. + + @param name: name to demangle + @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_). + @param demreq: the request type demreq_type_t + @returns ME_... or MT__ bitmasks from demangle.hpp -ida_name.ea_name_t (class) - Proxy of C++ ea_name_t class. +ida_name.ea_name_t -ida_name.ea_name_t.__init__ (method) - __init__(self) -> ea_name_t - __init__(self, _ea, _name) -> ea_name_t - - @param _ea: ea_t - @param _name: qstring const & +ida_name.ea_name_t.__init__(self, *args) -ida_name.ea_name_vec_t (class) - Proxy of C++ qvector< ea_name_t > class. +ida_name.ea_name_vec_t -ida_name.ea_name_vec_t.__getitem__ (method) - __getitem__(self, i) -> ea_name_t - - @param i: size_t +ida_name.ea_name_vec_t.__getitem__(self, i: "size_t") -> "ea_name_t const &" -ida_name.ea_name_vec_t.__init__ (method) - __init__(self) -> ea_name_vec_t - __init__(self, x) -> ea_name_vec_t - - @param x: qvector< ea_name_t > const & +ida_name.ea_name_vec_t.__init__(self, *args) -ida_name.ea_name_vec_t.__len__ (method) - __len__(self) -> size_t +ida_name.ea_name_vec_t.__len__(self) -> "size_t" -ida_name.ea_name_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: ea_name_t const & +ida_name.ea_name_vec_t.__setitem__(self, i: "size_t", v: "ea_name_t") -> None -ida_name.ea_name_vec_t.at (method) - at(self, _idx) -> ea_name_t - - @param _idx: size_t +ida_name.ea_name_vec_t.append(self, x: "ea_name_t") -> None -ida_name.ea_name_vec_t.begin (method) - begin(self) -> ea_name_t +ida_name.ea_name_vec_t.at(self, _idx: "size_t") -> "ea_name_t const &" -ida_name.ea_name_vec_t.capacity (method) - capacity(self) -> size_t +ida_name.ea_name_vec_t.begin(self, *args) -> "qvector< ea_name_t >::const_iterator" -ida_name.ea_name_vec_t.clear (method) - clear(self) +ida_name.ea_name_vec_t.capacity(self) -> "size_t" -ida_name.ea_name_vec_t.empty (method) - empty(self) -> bool +ida_name.ea_name_vec_t.clear(self) -> None -ida_name.ea_name_vec_t.end (method) - end(self) -> ea_name_t +ida_name.ea_name_vec_t.empty(self) -> bool -ida_name.ea_name_vec_t.erase (method) - erase(self, it) -> ea_name_t - - @param it: qvector< ea_name_t >::iterator - - erase(self, first, last) -> ea_name_t - - @param first: qvector< ea_name_t >::iterator - @param last: qvector< ea_name_t >::iterator +ida_name.ea_name_vec_t.end(self, *args) -> "qvector< ea_name_t >::const_iterator" -ida_name.ea_name_vec_t.extract (method) - extract(self) -> ea_name_t +ida_name.ea_name_vec_t.erase(self, *args) -> "qvector< ea_name_t >::iterator" -ida_name.ea_name_vec_t.grow (method) - grow(self, x=ea_name_t()) - - @param x: ea_name_t const & +ida_name.ea_name_vec_t.extend(self, x: "ea_name_vec_t") -> None -ida_name.ea_name_vec_t.inject (method) - inject(self, s, len) - - @param s: ea_name_t * - @param len: size_t +ida_name.ea_name_vec_t.extract(self) -> "ea_name_t *" -ida_name.ea_name_vec_t.insert (method) - insert(self, it, x) -> ea_name_t - - @param it: qvector< ea_name_t >::iterator - @param x: ea_name_t const & +ida_name.ea_name_vec_t.grow(self, *args) -> None -ida_name.ea_name_vec_t.pop_back (method) - pop_back(self) +ida_name.ea_name_vec_t.inject(self, s: "ea_name_t", len: "size_t") -> None -ida_name.ea_name_vec_t.push_back (method) - push_back(self, x) - - @param x: ea_name_t const & - - push_back(self) -> ea_name_t +ida_name.ea_name_vec_t.insert(self, it: "ea_name_t", x: "ea_name_t") -> "qvector< ea_name_t >::iterator" -ida_name.ea_name_vec_t.qclear (method) - qclear(self) +ida_name.ea_name_vec_t.pop_back(self) -> None -ida_name.ea_name_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_name.ea_name_vec_t.push_back(self, *args) -> "ea_name_t &" -ida_name.ea_name_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: ea_name_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_name.ea_name_vec_t.qclear(self) -> None -ida_name.ea_name_vec_t.size (method) - size(self) -> size_t +ida_name.ea_name_vec_t.reserve(self, cnt: "size_t") -> None -ida_name.ea_name_vec_t.swap (method) - swap(self, r) - - @param r: qvector< ea_name_t > & +ida_name.ea_name_vec_t.resize(self, *args) -> None -ida_name.ea_name_vec_t.truncate (method) - truncate(self) +ida_name.ea_name_vec_t.size(self) -> "size_t" -ida_name.extract_name (function) - extract_name(line, x) -> str - Extract a name or address from the specified string. - - @param line: (C++: const char *) input string - @param x: (C++: int) x coordinate of cursor - @return: -1 if cannot extract. otherwise length of the name +ida_name.ea_name_vec_t.swap(self, r: "ea_name_vec_t") -> None -ida_name.force_name (function) - force_name(ea, name, flags=0) -> bool - - @param ea: ea_t - @param name: char const * - @param flags: int +ida_name.ea_name_vec_t.truncate(self) -> None -ida_name.get_colored_demangled_name (function) - get_colored_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring - - @param ea: ea_t - @param inhibitor: int32 - @param demform: int - @param gtn_flags: int +ida_name.extract_name(line: str, x: int) -> str + Extract a name or address from the specified string. + + @param line: input string + @param x: x coordinate of cursor + @returns -1 if cannot extract. otherwise length of the name -ida_name.get_colored_long_name (function) - get_colored_long_name(ea, gtn_flags=0) -> qstring - - @param ea: ea_t - @param gtn_flags: int +ida_name.force_name(ea: ida_idaapi.ea_t, name: str, flags: int = 0) -> bool -ida_name.get_colored_name (function) - get_colored_name(ea) -> qstring - - @param ea: ea_t +ida_name.get_colored_demangled_name(ea: ida_idaapi.ea_t, inhibitor: int, demform: int, gtn_flags: int = 0) -> str -ida_name.get_colored_short_name (function) - get_colored_short_name(ea, gtn_flags=0) -> qstring - - @param ea: ea_t - @param gtn_flags: int +ida_name.get_colored_long_name(ea: ida_idaapi.ea_t, gtn_flags: int = 0) -> str -ida_name.get_cp_validity (function) - 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) enum ucdr_kind_t - @param cp: (C++: wchar32_t) - @param endcp: (C++: wchar32_t) +ida_name.get_colored_name(ea: ida_idaapi.ea_t) -> str -ida_name.get_debug_name (function) - get_debug_name(ea_ptr, how) -> str - - @param ea_ptr: ea_t * - @param how: enum debug_name_how_t +ida_name.get_colored_short_name(ea: ida_idaapi.ea_t, gtn_flags: int = 0) -> str -ida_name.get_debug_name_ea (function) - get_debug_name_ea(name) -> ea_t - - @param name: char const * +ida_name.get_cp_validity(*args) -> 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 + -ida_name.get_debug_names (function) - get_debug_names(names, ea1, ea2) - - @param names: ea_name_vec_t * - @param ea1: ea_t - @param ea2: ea_t - - get_debug_names(ea1, ea2, return_list=False) -> dict or None - - @param ea1: ea_t - @param ea2: ea_t - @param return_list: bool +ida_name.get_debug_name(ea_ptr: "ea_t *", how: "debug_name_how_t") -> str -ida_name.get_demangled_name (function) - get_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring - - @param ea: ea_t - @param inhibitor: int32 - @param demform: int - @param gtn_flags: int +ida_name.get_debug_name_ea(name: str) -> ida_idaapi.ea_t -ida_name.get_ea_name (function) - get_ea_name(ea, gtn_flags=0) -> qstring - Get name at the specified address. - - @param ea: (C++: ea_t) linear address - @param gtn_flags: (C++: int) how exactly the name should be retrieved. combination of bits - for get_ea_name() function. There is a convenience bits - @return: success +ida_name.get_debug_names(*args) -> "PyObject *" -ida_name.get_long_name (function) - get_long_name(ea, gtn_flags=0) -> qstring - - @param ea: ea_t - @param gtn_flags: int +ida_name.get_demangled_name(ea: ida_idaapi.ea_t, inhibitor: int, demform: int, gtn_flags: int = 0) -> str -ida_name.get_mangled_name_type (function) - get_mangled_name_type(name) -> mangled_name_type_t - - @param name: char const * +ida_name.get_ea_name(ea: ida_idaapi.ea_t, gtn_flags: int = 0) -> str + Get name at the specified address. + + @param ea: linear address + @param gtn_flags: how exactly the name should be retrieved. combination of bits for get_ea_name() function. There is a convenience bits + @returns success -ida_name.get_name (function) - get_name(ea) -> qstring - - @param ea: ea_t +ida_name.get_long_name(ea: ida_idaapi.ea_t, gtn_flags: int = 0) -> str -ida_name.get_name_base_ea (function) - get_name_base_ea(_from, to) -> ea_t - Get address of the name used in the expression for the address - - @param from: (C++: ea_t) address of the operand which references to the address - @param to: (C++: ea_t) the referenced address - @return: address of the name used to represent the operand +ida_name.get_mangled_name_type(name: str) -> "mangled_name_type_t" -ida_name.get_name_color (function) - get_name_color(_from, ea) -> color_t +ida_name.get_name(ea: ida_idaapi.ea_t) -> str + +ida_name.get_name_base_ea(_from: ida_idaapi.ea_t, to: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get address of the name used in the expression for the address + + @param to: the referenced address + @returns address of the name used to represent the operand + +ida_name.get_name_color(_from: ida_idaapi.ea_t, ea: ida_idaapi.ea_t) -> "color_t" Calculate flags for get_ea_name() function. - Get name color. - - @param from: (C++: ea_t) 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. - @param ea: (C++: ea_t) linear address + Get name color. + + @param ea: linear address -ida_name.get_name_ea (function) - get_name_ea(_from, name) -> ea_t - Get the address of a name. This function resolves a name into an address. It can - handle regular global and local names, as well as debugger names. - - @param from: (C++: ea_t) linear address where the name is used. If specified, the local - labels of the function at the specified address will will be - checked. BADADDR means that local names won't be consulted. - @param name: (C++: const char *) any name in the program or nullptr - @return: address of the name or BADADDR +ida_name.get_name_ea(_from: ida_idaapi.ea_t, name: str) -> ida_idaapi.ea_t + Get the address of a name. This function resolves a name into an address. It can handle regular global and local names, as well as debugger names. + + @param name: any name in the program or nullptr + @returns address of the name or BADADDR -ida_name.get_name_expr (function) - 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 <name> +/- <offset>). It also knows about structure members and arrays. - If the specified address doesn't have a name, a dummy name is generated. - - @param from: (C++: ea_t) linear address of instruction operand or data referring to the - name. This address will be used to get fixup information, so it - should point to exact position of the operand in the instruction. - @param n: (C++: int) number of referencing operand. for data items specify 0 - @param ea: (C++: ea_t) address to convert to name expression - @param off: (C++: uval_t) 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. - @param flags: (C++: int) Name expression flags - @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_expr(_from: ida_idaapi.ea_t, n: int, ea: ida_idaapi.ea_t, off: int, flags: int = 1) -> 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 <name> +/- <offset>). It also knows about structure members and arrays. If the specified address doesn't have a name, a dummy name is generated. + + @param n: number of referencing operand. for data items specify 0 + @param ea: address to convert to name expression + @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. + @param flags: Name expression flags + @returns < 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 (function) - get_name_value(_from, name) -> int - Get value of the name. This function knows about: regular names, enums, special - segments, etc. - - @param from: (C++: ea_t) linear address where the name is used if not applicable, then - should be BADADDR - @param name: (C++: const char *) any name in the program or nullptr - @return: Name value result codes +ida_name.get_name_value(_from: ida_idaapi.ea_t, name: str) -> "uval_t *" + Get value of the name. This function knows about: regular names, enums, special segments, etc. + + @param name: any name in the program or nullptr + @returns Name value result codes -ida_name.get_nice_colored_name (function) - get_nice_colored_name(ea, flags=0) -> str +ida_name.get_nice_colored_name(ea: ida_idaapi.ea_t, flags: int = 0) -> str Get a nice colored name at the specified address. Ex: * segment:sub+offset * segment:sub:local_label @@ -51677,1445 +35658,630 @@ ida_name.get_nice_colored_name (function) * segment:address * segment:address+offset - @param ea: (C++: ea_t) linear address - @param flags: (C++: int) Nice colored name flags - @return: the length of the generated name in bytes. - -ida_name.get_nlist_ea (function) - get_nlist_ea(idx) -> ea_t - Get address from the list at 'idx'. - @param idx: (C++: size_t) - -ida_name.get_nlist_idx (function) - get_nlist_idx(ea) -> size_t - Get index of the name in the list - @warning: returns the closest match. may return idx >= size. - @param ea: (C++: ea_t) + @param ea: linear address + @param flags: Nice colored name flags + @returns the length of the generated name in bytes. -ida_name.get_nlist_name (function) - get_nlist_name(idx) -> char const * - Get name using idx. - - @param idx: (C++: size_t) +ida_name.get_nlist_ea(idx: "size_t") -> ida_idaapi.ea_t -ida_name.get_nlist_size (function) - get_nlist_size() -> size_t - Get number of names in the list. +ida_name.get_nlist_idx(ea: ida_idaapi.ea_t) -> "size_t" -ida_name.get_short_name (function) - get_short_name(ea, gtn_flags=0) -> qstring - - @param ea: ea_t - @param gtn_flags: int +ida_name.get_nlist_name(idx: "size_t") -> str -ida_name.get_visible_name (function) - get_visible_name(ea, gtn_flags=0) -> qstring - - @param ea: ea_t - @param gtn_flags: int +ida_name.get_nlist_size() -> "size_t" -ida_name.hide_name (function) - hide_name(ea) - Remove name from the list of names - - @param ea: (C++: ea_t) address of the name +ida_name.get_short_name(ea: ida_idaapi.ea_t, gtn_flags: int = 0) -> str -ida_name.is_ident (function) - is_ident(name) -> bool +ida_name.get_visible_name(ea: ida_idaapi.ea_t, gtn_flags: int = 0) -> str + +ida_name.hide_name(ea: ida_idaapi.ea_t) -> None + Remove name from the list of names + + @param ea: address of the name + +ida_name.is_ident(name: str) -> bool Is a valid name? (including ::MangleChars) - - @param name: (C++: const char *) char const * -ida_name.is_ident_cp (function) - is_ident_cp(cp) -> bool +ida_name.is_ident_cp(cp: "wchar32_t") -> bool Can a character appear in a name? (present in ::NameChars or ::MangleChars) - - @param cp: (C++: wchar32_t) -ida_name.is_in_nlist (function) - is_in_nlist(ea) -> bool - Is the name included into the name list? - - @param ea: (C++: ea_t) +ida_name.is_in_nlist(ea: ida_idaapi.ea_t) -> bool -ida_name.is_name_defined_locally (function) - 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: (C++: func_t *) pointer to function - @param name: (C++: const char *) name to check - @param ignore_name_def: (C++: ignore_name_def_t) which names to ignore when checking - @param ea1: (C++: ea_t) the starting address of the range inside the function (optional) - @param ea2: (C++: ea_t) the ending address of the range inside the function (optional) - @return: true if the name has been defined +ida_name.is_name_defined_locally(*args) -> bool + Is the name defined locally in the specified function? + + @param pfn: pointer to function + @param name: name to check + @param ignore_name_def: which names to ignore when checking + @param ea1: the starting address of the range inside the function (optional) + @param ea2: the ending address of the range inside the function (optional) + @returns true if the name has been defined -ida_name.is_public_name (function) - is_public_name(ea) -> bool - - @param ea: ea_t +ida_name.is_public_name(ea: ida_idaapi.ea_t) -> bool -ida_name.is_strlit_cp (function) - 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 *) rangeset_crefvec_t const * +ida_name.is_strlit_cp(cp: "wchar32_t", specific_ranges: "rangeset_crefvec_t const *" = 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) + -ida_name.is_uname (function) - is_uname(name) -> bool - Is valid user-specified name? (valid name & !dummy prefix). - - @param name: (C++: const char *) name to test. may be nullptr. +ida_name.is_uname(name: str) -> bool + Is valid user-specified name? (valid name & !dummy prefix). + + @param name: name to test. may be nullptr. @retval 1: yes @retval 0: no -ida_name.is_valid_cp (function) - is_valid_cp(cp, kind, data=None) -> bool +ida_name.is_valid_cp(cp: "wchar32_t", kind: "nametype_t", data: "void *" = None) -> bool Is the given codepoint acceptable in the given context? - - @param cp: (C++: wchar32_t) - @param kind: (C++: nametype_t) enum nametype_t - @param data: (C++: void *) -ida_name.is_valid_name (function) - is_valid_name(name, cpuregs_permitted) -> bool - - @param name: char const * - @param cpuregs_permitted: bool - -ida_name.is_valid_typename (function) - is_valid_typename(name) -> bool - Is valid type name? - - @param name: (C++: const char *) name to test. may be nullptr. +ida_name.is_valid_typename(name: str) -> bool + Is valid type name? + + @param name: name to test. may be nullptr. @retval 1: yes @retval 0: no -ida_name.is_visible_cp (function) - is_visible_cp(cp) -> bool +ida_name.is_visible_cp(cp: "wchar32_t") -> bool Can a character be displayed in a name? (present in ::NameChars) - - @param cp: (C++: wchar32_t) -ida_name.is_weak_name (function) - is_weak_name(ea) -> bool - - @param ea: ea_t +ida_name.is_weak_name(ea: ida_idaapi.ea_t) -> bool -ida_name.make_name_auto (function) - make_name_auto(ea) -> bool - - @param ea: ea_t +ida_name.make_name_auto(ea: ida_idaapi.ea_t) -> bool -ida_name.make_name_non_public (function) - make_name_non_public(ea) - - @param ea: ea_t +ida_name.make_name_non_public(ea: ida_idaapi.ea_t) -> None -ida_name.make_name_non_weak (function) - make_name_non_weak(ea) - - @param ea: ea_t +ida_name.make_name_non_weak(ea: ida_idaapi.ea_t) -> None -ida_name.make_name_public (function) - make_name_public(ea) - - @param ea: ea_t +ida_name.make_name_public(ea: ida_idaapi.ea_t) -> None -ida_name.make_name_user (function) - make_name_user(ea) -> bool - - @param ea: ea_t +ida_name.make_name_user(ea: ida_idaapi.ea_t) -> bool -ida_name.make_name_weak (function) - make_name_weak(ea) - - @param ea: ea_t +ida_name.make_name_weak(ea: ida_idaapi.ea_t) -> None -ida_name.rebuild_nlist (function) - rebuild_nlist() - Rebuild the name list. +ida_name.rebuild_nlist() -> None -ida_name.reorder_dummy_names (function) - reorder_dummy_names() +ida_name.reorder_dummy_names() -> None Renumber dummy names. -ida_name.set_cp_validity (function) - 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) enum ucdr_kind_t - @param cp: (C++: wchar32_t) - @param endcp: (C++: wchar32_t) +ida_name.set_cp_validity(*args) -> None + 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 + -ida_name.set_debug_name (function) - set_debug_name(ea, name) -> bool - - @param ea: ea_t - @param name: char const * +ida_name.set_debug_name(ea: ida_idaapi.ea_t, name: str) -> bool -ida_name.set_dummy_name (function) - set_dummy_name(_from, ea) -> bool - Give an autogenerated (dummy) name. Autogenerated names have special prefixes - (loc_...). - - @param from: (C++: ea_t) linear address of the operand which references to the address - @param ea: (C++: ea_t) linear address +ida_name.set_dummy_name(_from: ida_idaapi.ea_t, ea: ida_idaapi.ea_t) -> bool + Give an autogenerated (dummy) name. Autogenerated names have special prefixes (loc_...). + + @param ea: linear address @retval 1: ok, dummy name is generated or the byte already had a name @retval 0: failure, invalid address or tail byte -ida_name.set_name (function) - 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: (C++: ea_t) linear address. do nothing if ea is not valid (return 0). tail bytes - can't have names. - @param name: (C++: const char *) new name. +ida_name.set_name(ea: ida_idaapi.ea_t, name: str, flags: int = 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. + @param name: new name. * nullptr: do nothing (return 0). * "" : delete name. * otherwise this is a new name. - @param flags: (C++: int) 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. + @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. @retval 1: ok, name is changed @retval 0: failure, a warning is displayed -ida_name.show_name (function) - show_name(ea) +ida_name.show_name(ea: ida_idaapi.ea_t) -> None Insert name to the list of names. - - @param ea: (C++: ea_t) -ida_name.validate_name (function) - validate_name(name, type, flags=0) -> PyObject * - Validate a name. If SN_NOCHECK is specified, 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). +ida_name.validate_name(name: str, type: "nametype_t", flags: int = 1) -> "PyObject *" + Validate a name. If SN_NOCHECK is specified, 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: (C++: qstring *) ptr to name. the name will be modified - @param type: (C++: nametype_t) the type of name we want to validate - @param flags: (C++: int) see SN_* - @return: success + @param name: ptr to name. the name will be modified + @param type: the type of name we want to validate + @param flags: see SN_* + @returns success -ida_netnode (module) - Functions that provide the lowest level public interface to the database. - Namely, we use Btree. To learn more about BTree: - - \link{https://en.wikipedia.org/wiki/B-tree} - - We do not use Btree directly. Instead, we have another layer built on the top of - Btree. Here is a brief explanation of this layer. - - An object called "netnode" is modeled on the top of Btree. Each netnode has a - unique id: a 32-bit value (64-bit for ida64). Initially there is a trivial - mapping of the linear addresses used in the program to netnodes (later this - mapping may be modified using ea2node and node2ea functions; this is used for - fast database rebasings). If we have additional information about an address - (for example, a comment is attached to it), this information is stored in the - corresponding netnode. See nalt.hpp to see how the kernel uses netnodes. Also, - some netnodes have no corresponding linear address (however, they still have an - id). They are used to store information not related to a particular address. +ida_netnode + Functions that provide the lowest level public interface to the database. Namely, we use Btree. To learn more about BTree: + [https://en.wikipedia.org/wiki/B-tree](https://en.wikipedia.org/wiki/B-tree) + We do not use Btree directly. Instead, we have another layer built on the top of Btree. Here is a brief explanation of this layer. + An object called "netnode" is modeled on the top of Btree. Each netnode has a unique id: a 32-bit value (64-bit for ida64). Initially there is a trivial mapping of the linear addresses used in the program to netnodes (later this mapping may be modified using ea2node and node2ea functions; this is used for fast database rebasings). If we have additional information about an address (for example, a comment is attached to it), this information is stored in the corresponding netnode. See nalt.hpp to see how the kernel uses netnodes. Also, some netnodes have no corresponding linear address (however, they still have an id). They are used to store information not related to a particular address. Each netnode _may_ have the following attributes: * a name: an arbitrary non-empty string, up to 255KB-1 bytes * a value: arbitrary sized object, max size is MAXSPECSIZE - * altvals: a sparse array of 32-bit values. indexes in this array may be 8-bit - or 32-bit values - * supvals: an array of arbitrary sized objects. (size of each object is limited - by MAXSPECSIZE) indexes in this array may be 8-bit or 32-bit values - * charvals: a sparse array of 8-bit values. indexes in this array may be 8-bit - or 32-bit values - * hashvals: a hash (an associative array). indexes in this array are strings - values are arbitrary sized (max size is MAXSPECSIZE) + * altvals: a sparse array of 32-bit values. indexes in this array may be 8-bit or 32-bit values + * supvals: an array of arbitrary sized objects. (size of each object is limited by MAXSPECSIZE) indexes in this array may be 8-bit or 32-bit values + * charvals: a sparse array of 8-bit values. indexes in this array may be 8-bit or 32-bit values + * hashvals: a hash (an associative array). indexes in this array are strings values are arbitrary sized (max size is MAXSPECSIZE) - Initially a new netnode contains no information at all so no disk space is used - for it. As you add new information, the netnode grows. - All arrays that are attached to the netnode behave in the same manner. - Initially: + Initially a new netnode contains no information at all so no disk space is used for it. As you add new information, the netnode grows. + All arrays that are attached to the netnode behave in the same manner. Initially: * all members of altvals/charvals array are zeroes * all members of supvals/hashvals array are undefined - If you need to store objects bigger that MAXSPECSIZE, please note that there are - high-level functions to store arbitrary sized objects in supvals. See - setblob/getblob and other blob-related functions. - You may use netnodes to store additional information about the program. - Limitations on the use of netnodes are the following: + If you need to store objects bigger that MAXSPECSIZE, please note that there are high-level functions to store arbitrary sized objects in supvals. See setblob/getblob and other blob-related functions. + You may use netnodes to store additional information about the program. Limitations on the use of netnodes are the following: - * use netnodes only if you could not find a kernel service to store your type of - information - * do not create netnodes with valid identifier names. Use the "$ " prefix (or - any other prefix with characters not allowed in the identifiers for the names of - your netnodes. Although you will probably not destroy anything by accident, - using already defined names for the names of your netnodes is still discouraged. - * you may create as many netnodes as you want (creation of an unnamed netnode - does not increase the size of the database). however, since each netnode has a - number, creating too many netnodes could lead to the exhaustion of the netnode - numbers (the numbering starts at 0xFF000000) + * use netnodes only if you could not find a kernel service to store your type of information + * do not create netnodes with valid identifier names. Use the "$ " prefix (or any other prefix with characters not allowed in the identifiers for the names of your netnodes. Although you will probably not destroy anything by accident, using already defined names for the names of your netnodes is still discouraged. + * you may create as many netnodes as you want (creation of an unnamed netnode does not increase the size of the database). however, since each netnode has a number, creating too many netnodes could lead to the exhaustion of the netnode numbers (the numbering starts at 0xFF000000) * remember that netnodes are automatically saved to the disk by the kernel. - Advanced info: - In fact a netnode may contain up to 256 arrays of arbitrary sized objects (not - only the 4 listed above). Each array has an 8-bit tag. Usually tags are - represented by character constants. For example, altvals and supvals are simply - 2 of 256 arrays, with the tags 'A' and 'S' respectively. + Advanced info: + In fact a netnode may contain up to 256 arrays of arbitrary sized objects (not only the 4 listed above). Each array has an 8-bit tag. Usually tags are represented by character constants. For example, altvals and supvals are simply 2 of 256 arrays, with the tags 'A' and 'S' respectively. + -ida_netnode.BADNODE (variable) +ida_netnode.BADNODE A number to represent a bad netnode reference. -ida_netnode.MAXNAMESIZE (variable) +ida_netnode.MAXNAMESIZE Maximum length of a netnode name. WILL BE REMOVED IN THE FUTURE. -ida_netnode.MAXSPECSIZE (variable) +ida_netnode.MAXSPECSIZE Maximum length of strings or objects stored in a supval array element. -ida_netnode.MAX_NODENAME_SIZE (variable) +ida_netnode.MAX_NODENAME_SIZE Maximum length of a name. We permit names up to 32KB-1 bytes. -ida_netnode.atag (variable) +ida_netnode.atag Array of altvals. -ida_netnode.exist (function) - exist(n) -> bool - - @param n: netnode const & +ida_netnode.exist(n: "netnode") -> bool -ida_netnode.htag (variable) +ida_netnode.htag Array of hashvals. -ida_netnode.ltag (variable) +ida_netnode.ltag Links between netnodes. -ida_netnode.netnode (class) - Proxy of C++ netnode class. +ida_netnode.netnode -ida_netnode.netnode.__eq__ (method) - __eq__(self, n) -> bool - - @param n: netnode & - - __eq__(self, x) -> bool - - @param x: nodeidx_t +ida_netnode.netnode.__eq__(self, *args) -> bool -ida_netnode.netnode.__init__ (method) - __init__(self, num=nodeidx_t(-1)) -> netnode - - @param num: nodeidx_t - - __init__(self, _name, namlen=0, do_create=False) -> netnode - - @param _name: char const * - @param namlen: size_t - @param do_create: bool +ida_netnode.netnode.__init__(self, *args) -ida_netnode.netnode.__ne__ (method) - __ne__(self, n) -> bool - - @param n: netnode & - - __ne__(self, x) -> bool - - @param x: nodeidx_t +ida_netnode.netnode.__ne__(self, *args) -> bool -ida_netnode.netnode.altdel (method) - altdel(self, alt, tag=atag) -> bool - Delete all elements of altval array. This function may be applied to 32-bit and - 8-bit altval arrays. This function deletes the whole altval array. - - @param alt: nodeidx_t - @param tag: uchar - - @return: success - altdel(self) -> bool +ida_netnode.netnode.altdel(self, *args) -> bool -ida_netnode.netnode.altdel_all (method) - altdel_all(self, tag=atag) -> bool - Delete all elements of the specified altval array. This function may be applied - to 32-bit and 8-bit altval arrays. This function deletes the whole altval array. - - @param tag: (C++: uchar) tag of array - @return: success +ida_netnode.netnode.altdel_all(self, *args) -> bool -ida_netnode.netnode.altdel_ea (method) - altdel_ea(self, ea, tag=atag) -> bool - - @param ea: ea_t - @param tag: uchar +ida_netnode.netnode.altdel_ea(self, *args) -> bool -ida_netnode.netnode.altdel_idx8 (method) - altdel_idx8(self, alt, tag) -> bool - - @param alt: uchar - @param tag: uchar +ida_netnode.netnode.altdel_idx8(self, alt: "uchar", tag: "uchar") -> bool -ida_netnode.netnode.altfirst (method) - altfirst(self, tag=atag) -> nodeidx_t - Get first existing element of altval array. - - @param tag: (C++: uchar) tag of array - @return: index of first existing element of altval array, BADNODE if altval - array is empty +ida_netnode.netnode.altfirst(self, *args) -> "nodeidx_t" -ida_netnode.netnode.altfirst_idx8 (method) - altfirst_idx8(self, tag) -> nodeidx_t - - @param tag: uchar +ida_netnode.netnode.altfirst_idx8(self, tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.altlast (method) - altlast(self, tag=atag) -> nodeidx_t - Get last element of altval array. - - @param tag: (C++: uchar) tag of array - @return: index of last existing element of altval array, BADNODE if altval array - is empty +ida_netnode.netnode.altlast(self, *args) -> "nodeidx_t" -ida_netnode.netnode.altlast_idx8 (method) - altlast_idx8(self, tag) -> nodeidx_t - - @param tag: uchar +ida_netnode.netnode.altlast_idx8(self, tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.altnext (method) - altnext(self, cur, tag=atag) -> nodeidx_t - Get next existing element of altval array. - - @param cur: (C++: nodeidx_t) current index - @param tag: (C++: uchar) tag of array - @return: index of the next existing element of altval array, BADNODE if no more - altval array elements exist +ida_netnode.netnode.altnext(self, *args) -> "nodeidx_t" -ida_netnode.netnode.altnext_idx8 (method) - altnext_idx8(self, cur, tag) -> nodeidx_t - - @param cur: uchar - @param tag: uchar +ida_netnode.netnode.altnext_idx8(self, cur: "uchar", tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.altprev (method) - altprev(self, cur, tag=atag) -> nodeidx_t - Get previous existing element of altval array. - - @param cur: (C++: nodeidx_t) current index - @param tag: (C++: uchar) tag of array - @return: index of the previous existing element of altval array, BADNODE if no - more altval array elements exist +ida_netnode.netnode.altprev(self, *args) -> "nodeidx_t" -ida_netnode.netnode.altprev_idx8 (method) - altprev_idx8(self, cur, tag) -> nodeidx_t - - @param cur: uchar - @param tag: uchar +ida_netnode.netnode.altprev_idx8(self, cur: "uchar", tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.altset (method) - altset(self, alt, value, tag=atag) -> bool - Set value of altval array. - - @param alt: (C++: nodeidx_t) index into array of altvals - @param value: (C++: nodeidx_t) new value of altval element - @param tag: (C++: uchar) tag of array - @retval 1: ok - @retval 0: failed, normally should not occur +ida_netnode.netnode.altset(self, *args) -> bool -ida_netnode.netnode.altset_ea (method) - altset_ea(self, ea, value, tag=atag) -> bool - - @param ea: ea_t - @param value: nodeidx_t - @param tag: uchar +ida_netnode.netnode.altset_ea(self, *args) -> bool -ida_netnode.netnode.altset_idx8 (method) - altset_idx8(self, alt, val, tag) -> bool - - @param alt: uchar - @param val: nodeidx_t - @param tag: uchar +ida_netnode.netnode.altset_idx8(self, alt: "uchar", val: "nodeidx_t", tag: "uchar") -> bool -ida_netnode.netnode.altshift (method) - altshift(self, _from, to, size, tag=atag) -> size_t - Shift the altval array elements. Moves the array elements at (from..from+size) - to (to..to+size) - - @param from: (C++: nodeidx_t) - @param to: (C++: nodeidx_t) - @param size: (C++: nodeidx_t) - @param tag: (C++: uchar) - @return: number of shifted elements +ida_netnode.netnode.altshift(self, *args) -> "size_t" -ida_netnode.netnode.altval (method) - altval(self, alt, tag=atag) -> nodeidx_t - Get altval element of the specified array. - - @param alt: (C++: nodeidx_t) index into array of altvals - @param tag: (C++: uchar) tag of array. may be omitted - @return: value of altval element. nonexistent altval members are returned as - zeroes +ida_netnode.netnode.altval(self, *args) -> "nodeidx_t" -ida_netnode.netnode.altval_ea (method) - altval_ea(self, ea, tag=atag) -> nodeidx_t - - @param ea: ea_t - @param tag: uchar +ida_netnode.netnode.altval_ea(self, *args) -> "nodeidx_t" -ida_netnode.netnode.altval_idx8 (method) - altval_idx8(self, alt, tag) -> nodeidx_t - - @param alt: uchar - @param tag: uchar +ida_netnode.netnode.altval_idx8(self, alt: "uchar", tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.blobshift (method) - blobshift(self, _from, to, size, tag) -> size_t - Shift the blob array elements. Moves the array elements at (from..from+size) to - (to..to+size) - - @param from: (C++: nodeidx_t) - @param to: (C++: nodeidx_t) - @param size: (C++: nodeidx_t) - @param tag: (C++: uchar) - @return: number of shifted elements +ida_netnode.netnode.blobshift(self, _from: "nodeidx_t", to: "nodeidx_t", size: "nodeidx_t", tag: "uchar") -> "size_t" -ida_netnode.netnode.blobsize (method) - blobsize(self, _start, tag) -> size_t - Get size of blob. - - @param _start: (C++: nodeidx_t) index of the first supval element used to store blob - @param tag: (C++: uchar) tag of supval array - @return: number of bytes required to store a blob +ida_netnode.netnode.blobsize(self, _start: "nodeidx_t", tag: "uchar") -> "size_t" -ida_netnode.netnode.blobsize_ea (method) - blobsize_ea(self, ea, tag) -> size_t - - @param ea: ea_t - @param tag: uchar +ida_netnode.netnode.blobsize_ea(self, ea: ida_idaapi.ea_t, tag: "uchar") -> "size_t" -ida_netnode.netnode.chardel (method) - chardel(self, alt, tag) -> bool - - @param alt: nodeidx_t - @param tag: uchar +ida_netnode.netnode.chardel(self, alt: "nodeidx_t", tag: "uchar") -> bool -ida_netnode.netnode.chardel_ea (method) - chardel_ea(self, ea, tag) -> bool - - @param ea: ea_t - @param tag: uchar +ida_netnode.netnode.chardel_ea(self, ea: ida_idaapi.ea_t, tag: "uchar") -> bool -ida_netnode.netnode.chardel_idx8 (method) - chardel_idx8(self, alt, tag) -> bool - - @param alt: uchar - @param tag: uchar +ida_netnode.netnode.chardel_idx8(self, alt: "uchar", tag: "uchar") -> bool -ida_netnode.netnode.charfirst (method) - charfirst(self, tag) -> nodeidx_t - - @param tag: uchar +ida_netnode.netnode.charfirst(self, tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.charfirst_idx8 (method) - charfirst_idx8(self, tag) -> nodeidx_t - - @param tag: uchar +ida_netnode.netnode.charfirst_idx8(self, tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.charlast (method) - charlast(self, tag) -> nodeidx_t - - @param tag: uchar +ida_netnode.netnode.charlast(self, tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.charlast_idx8 (method) - charlast_idx8(self, tag) -> nodeidx_t - - @param tag: uchar +ida_netnode.netnode.charlast_idx8(self, tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.charnext (method) - charnext(self, cur, tag) -> nodeidx_t - - @param cur: nodeidx_t - @param tag: uchar +ida_netnode.netnode.charnext(self, cur: "nodeidx_t", tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.charnext_idx8 (method) - charnext_idx8(self, cur, tag) -> nodeidx_t - - @param cur: uchar - @param tag: uchar +ida_netnode.netnode.charnext_idx8(self, cur: "uchar", tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.charprev (method) - charprev(self, cur, tag) -> nodeidx_t - - @param cur: nodeidx_t - @param tag: uchar +ida_netnode.netnode.charprev(self, cur: "nodeidx_t", tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.charprev_idx8 (method) - charprev_idx8(self, cur, tag) -> nodeidx_t - - @param cur: uchar - @param tag: uchar +ida_netnode.netnode.charprev_idx8(self, cur: "uchar", tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.charset (method) - charset(self, alt, val, tag) -> bool - - @param alt: nodeidx_t - @param val: uchar - @param tag: uchar +ida_netnode.netnode.charset(self, alt: "nodeidx_t", val: "uchar", tag: "uchar") -> bool -ida_netnode.netnode.charset_ea (method) - charset_ea(self, ea, val, tag) -> bool - - @param ea: ea_t - @param val: uchar - @param tag: uchar +ida_netnode.netnode.charset_ea(self, ea: ida_idaapi.ea_t, val: "uchar", tag: "uchar") -> bool -ida_netnode.netnode.charset_idx8 (method) - charset_idx8(self, alt, val, tag) -> bool - - @param alt: uchar - @param val: uchar - @param tag: uchar +ida_netnode.netnode.charset_idx8(self, alt: "uchar", val: "uchar", tag: "uchar") -> bool -ida_netnode.netnode.charshift (method) - charshift(self, _from, to, size, tag) -> size_t - - @param from: nodeidx_t - @param to: nodeidx_t - @param size: nodeidx_t - @param tag: uchar +ida_netnode.netnode.charshift(self, _from: "nodeidx_t", to: "nodeidx_t", size: "nodeidx_t", tag: "uchar") -> "size_t" -ida_netnode.netnode.charval (method) - charval(self, alt, tag) -> uchar - - @param alt: nodeidx_t - @param tag: uchar +ida_netnode.netnode.charval(self, alt: "nodeidx_t", tag: "uchar") -> "uchar" -ida_netnode.netnode.charval_ea (method) - charval_ea(self, ea, tag) -> uchar - - @param ea: ea_t - @param tag: uchar +ida_netnode.netnode.charval_ea(self, ea: ida_idaapi.ea_t, tag: "uchar") -> "uchar" -ida_netnode.netnode.charval_idx8 (method) - charval_idx8(self, alt, tag) -> uchar - - @param alt: uchar - @param tag: uchar +ida_netnode.netnode.charval_idx8(self, alt: "uchar", tag: "uchar") -> "uchar" -ida_netnode.netnode.copyto (method) - copyto(self, destnode, count=1) -> size_t - - @param destnode: netnode - @param count: nodeidx_t +ida_netnode.netnode.copyto(self, destnode: "netnode", count: "nodeidx_t" = 1) -> "size_t" -ida_netnode.netnode.create (method) - create(self, _name, namlen=0) -> bool - Create unnamed netnode. - @retval 1: ok - @retval 0: should not happen, indicates internal error - - @param _name: char const * - @param namlen: size_t - - create(self) -> bool +ida_netnode.netnode.create(self, *args) -> bool -ida_netnode.netnode.delblob (method) - delblob(self, _start, tag) -> int - Delete a blob. - - @param _start: (C++: nodeidx_t) index of the first supval element used to store blob - @param tag: (C++: uchar) tag of supval array - @return: number of deleted supvals +ida_netnode.netnode.delblob(self, _start: "nodeidx_t", tag: "uchar") -> int -ida_netnode.netnode.delblob_ea (method) - delblob_ea(self, ea, tag) -> int - - @param ea: ea_t - @param tag: uchar +ida_netnode.netnode.delblob_ea(self, ea: ida_idaapi.ea_t, tag: "uchar") -> int -ida_netnode.netnode.delvalue (method) - delvalue(self) -> bool - Delete value of netnode. - @retval 1: ok - @retval 0: failed, netnode is bad or other error +ida_netnode.netnode.delvalue(self) -> bool -ida_netnode.netnode.eadel (method) - eadel(self, ea, tag) -> bool - - @param ea: ea_t - @param tag: uchar +ida_netnode.netnode.eadel(self, ea: ida_idaapi.ea_t, tag: "uchar") -> bool -ida_netnode.netnode.eadel_idx8 (method) - eadel_idx8(self, idx, tag) -> bool - - @param idx: uchar - @param tag: uchar +ida_netnode.netnode.eadel_idx8(self, idx: "uchar", tag: "uchar") -> bool -ida_netnode.netnode.eaget (method) - eaget(self, ea, tag) -> ea_t - - @param ea: ea_t - @param tag: uchar +ida_netnode.netnode.eaget(self, ea: ida_idaapi.ea_t, tag: "uchar") -> ida_idaapi.ea_t -ida_netnode.netnode.eaget_idx (method) - eaget_idx(self, idx, tag) -> ea_t - - @param idx: nodeidx_t - @param tag: uchar +ida_netnode.netnode.eaget_idx(self, idx: "nodeidx_t", tag: "uchar") -> ida_idaapi.ea_t -ida_netnode.netnode.eaget_idx8 (method) - eaget_idx8(self, idx, tag) -> ea_t - - @param idx: uchar - @param tag: uchar +ida_netnode.netnode.eaget_idx8(self, idx: "uchar", tag: "uchar") -> ida_idaapi.ea_t -ida_netnode.netnode.easet (method) - easet(self, ea, addr, tag) -> bool - Store/retrieve/delete an address value in the netnode that corresponds to an - address. - - @param ea: (C++: ea_t) - @param addr: (C++: ea_t) - @param tag: (C++: uchar) +ida_netnode.netnode.easet(self, ea: ida_idaapi.ea_t, addr: ida_idaapi.ea_t, tag: "uchar") -> bool -ida_netnode.netnode.easet_idx (method) - easet_idx(self, idx, addr, tag) -> bool - - @param idx: nodeidx_t - @param addr: ea_t - @param tag: uchar +ida_netnode.netnode.easet_idx(self, idx: "nodeidx_t", addr: ida_idaapi.ea_t, tag: "uchar") -> bool -ida_netnode.netnode.easet_idx8 (method) - easet_idx8(self, idx, addr, tag) -> bool - - @param idx: uchar - @param addr: ea_t - @param tag: uchar +ida_netnode.netnode.easet_idx8(self, idx: "uchar", addr: ida_idaapi.ea_t, tag: "uchar") -> bool -ida_netnode.netnode.end (method) - end(self) -> bool - Get last netnode in the graph. Sets netnodenumber to the highest existing - number. - @retval true: ok - @retval false: graph is empty +ida_netnode.netnode.end(self) -> bool -ida_netnode.netnode.exist (method) - exist(_name) -> bool +ida_netnode.netnode.exist(_name: str) -> bool Does the netnode with the specified name exist? + +ida_netnode.netnode.get_name(self) -> "ssize_t" + +ida_netnode.netnode.getblob(self, start, tag) -> Union[bytes, None] + Get a blob from a netnode. - @param _name: (C++: const char *) char const * + @param start the index where the blob starts (it may span on multiple indexes) + @param tag the netnode tag + @return a blob, or None -ida_netnode.netnode.get_name (method) - get_name(self) -> ssize_t - Get the netnode name. +ida_netnode.netnode.getblob_ea(self, ea: ida_idaapi.ea_t, tag: "char") -> "PyObject *" + +ida_netnode.netnode.getclob(self, start, tag) -> Union[str, None] + Get a large amount of text from a netnode. - @return: -1 if netnode is unnamed (buf is untouched in this case), otherwise the - name length + @param start the index where the clob starts (it may span on multiple indexes) + @param tag the netnode tag + @return a clob, or None -ida_netnode.netnode.getblob (method) - getblob(self, start, tag) -> bytes or None - Get blob from a netnode into a qstring* and make sure the string is null- - terminated. - - @param start: nodeidx_t - @param tag: (C++: uchar) tag of supval array - @return: -1 if blob doesn't exist size of string (including terminating null) - otherwise +ida_netnode.netnode.hashdel(self, *args) -> bool -ida_netnode.netnode.getblob_ea (method) - getblob_ea(self, ea, tag) -> PyObject * - - @param ea: ea_t - @param tag: char +ida_netnode.netnode.hashdel_all(self, *args) -> bool -ida_netnode.netnode.getclob (method) - getclob(self, start, tag) -> str - - @param start: nodeidx_t - @param tag: char +ida_netnode.netnode.hashfirst(self, *args) -> "ssize_t" -ida_netnode.netnode.hashdel (method) - hashdel(self, idx, tag=htag) -> bool - Delete hash element. - - @param idx: (C++: const char *) index into hash - @param tag: (C++: uchar) tag of hash. Default: htag - @retval true: deleted - @retval false: element does not exist +ida_netnode.netnode.hashlast(self, *args) -> "ssize_t" -ida_netnode.netnode.hashdel_all (method) - hashdel_all(self, tag=htag) -> bool - Delete all elements of hash. This function deletes the whole hash. - - @param tag: (C++: uchar) tag of hash. Default: htag - @return: success +ida_netnode.netnode.hashnext(self, *args) -> "ssize_t" -ida_netnode.netnode.hashfirst (method) - hashfirst(self, tag=htag) -> ssize_t - @see: hashfirst(qstring *buf, uchar tag=htag) const - - @param tag: (C++: uchar) +ida_netnode.netnode.hashprev(self, *args) -> "ssize_t" -ida_netnode.netnode.hashlast (method) - hashlast(self, tag=htag) -> ssize_t - @see: hashlast(qstring *buf, uchar tag=htag) const - - @param tag: (C++: uchar) +ida_netnode.netnode.hashset(self, *args) -> bool -ida_netnode.netnode.hashnext (method) - hashnext(self, idx, tag=htag) -> ssize_t - @see: hashnext(qstring *buf, const char *idx, uchar tag=htag) const - - @param idx: (C++: const char *) char const * - @param tag: (C++: uchar) +ida_netnode.netnode.hashset_buf(self, *args) -> bool -ida_netnode.netnode.hashprev (method) - hashprev(self, idx, tag=htag) -> ssize_t - @see: hashprev(qstring *buf, const char *idx, uchar tag=htag) const - - @param idx: (C++: const char *) char const * - @param tag: (C++: uchar) +ida_netnode.netnode.hashset_idx(self, *args) -> bool -ida_netnode.netnode.hashset (method) - hashset(self, idx, value, tag=htag) -> bool - Set value of hash element to long value. - - @param idx: (C++: const char *) index into hash - @param value: (C++: nodeidx_t) new value of hash element - @param tag: (C++: uchar) tag of hash. Default: htag - @retval 1: ok - @retval 0: should not occur - indicates internal error +ida_netnode.netnode.hashstr(self, *args) -> "ssize_t" -ida_netnode.netnode.hashset_buf (method) - hashset_buf(self, idx, py_str, tag=htag) -> bool - - @param idx: char const * - @param py_str: PyObject * - @param tag: char +ida_netnode.netnode.hashstr_buf(self, *args) -> "PyObject *" -ida_netnode.netnode.hashset_idx (method) - hashset_idx(self, idx, value, tag=htag) -> bool - - @param idx: char const * - @param value: nodeidx_t - @param tag: uchar +ida_netnode.netnode.hashval(self, *args) -> "ssize_t" -ida_netnode.netnode.hashstr (method) - hashstr(self, idx, tag=htag) -> ssize_t - @see: hashstr(qstring *buf, const char *idx, uchar tag=htag) const - - @param idx: (C++: const char *) char const * - @param tag: (C++: uchar) +ida_netnode.netnode.hashval_long(self, *args) -> "nodeidx_t" -ida_netnode.netnode.hashstr_buf (method) - hashstr_buf(self, idx, tag=htag) -> PyObject * - - @param idx: char const * - @param tag: char +ida_netnode.netnode.index(self) -> "nodeidx_t" -ida_netnode.netnode.hashval (method) - hashval(self, idx, tag=htag) -> ssize_t - Get value of the specified hash element. - - @param idx: (C++: const char *) index into hash - @param tag: (C++: uchar) tag of hash. Default: htag - @return: -1 if element doesn't exist or idx is nullptr. otherwise returns the - value size in bytes +ida_netnode.netnode.kill(self) -> None -ida_netnode.netnode.hashval_long (method) - hashval_long(self, idx, tag=htag) -> nodeidx_t - Get value of the specified hash element. - - @param idx: (C++: const char *) index into hash - @param tag: (C++: uchar) tag of hash. Default: htag - @return: value of hash element (it should be set using hashset(nodeidx_t)), 0 if - the element does not exist +ida_netnode.netnode.long_value(self) -> "nodeidx_t" -ida_netnode.netnode.index (method) - index(self) -> nodeidx_t +ida_netnode.netnode.lower_bound(self, *args) -> "nodeidx_t" -ida_netnode.netnode.kill (method) - kill(self) - Delete a netnode with all information attached to it. +ida_netnode.netnode.lower_bound_ea(self, *args) -> "nodeidx_t" -ida_netnode.netnode.long_value (method) - long_value(self) -> nodeidx_t +ida_netnode.netnode.lower_bound_idx8(self, alt: "uchar", tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.lower_bound (method) - lower_bound(self, cur, tag=stag) -> nodeidx_t - Get lower bound of existing elements of supval array. - - @param cur: (C++: nodeidx_t) current index - @param tag: (C++: uchar) tag of array - @return: index of first existing element of supval array >= cur BADNODE if - supval array is empty +ida_netnode.netnode.moveto(self, destnode: "netnode", count: "nodeidx_t" = 1) -> "size_t" -ida_netnode.netnode.lower_bound_ea (method) - lower_bound_ea(self, ea, tag=stag) -> nodeidx_t - - @param ea: ea_t - @param tag: uchar +ida_netnode.netnode.next(self) -> bool -ida_netnode.netnode.lower_bound_idx8 (method) - lower_bound_idx8(self, alt, tag) -> nodeidx_t - - @param alt: uchar - @param tag: uchar +ida_netnode.netnode.prev(self) -> bool -ida_netnode.netnode.moveto (method) - moveto(self, destnode, count=1) -> size_t - - @param destnode: netnode - @param count: nodeidx_t +ida_netnode.netnode.rename(self, newname: str, namlen: "size_t" = 0) -> bool -ida_netnode.netnode.next (method) - next(self) -> bool - Get next netnode in the graph. Sets netnodenumber to the next existing number - @retval true: ok - @retval false: no more netnodes +ida_netnode.netnode.set(self, value: "void const *") -> bool -ida_netnode.netnode.prev (method) - prev(self) -> bool - Get prev netnode in the graph. Sets netnodenumber to the previous existing - number - @retval true: ok - @retval false: no more netnodes +ida_netnode.netnode.set_long(self, x: "nodeidx_t") -> bool -ida_netnode.netnode.rename (method) - rename(self, newname, namlen=0) -> bool - Rename a netnode. - - @param newname: (C++: const char *) new name of netnode. nullptr or "" means to delete name. names - of user-defined netnodes must have the "$ " prefix in order to - avoid clashes with program byte names. - @param namlen: (C++: size_t) length of new name. if not specified, it will be calculated using - strlen() - @retval 1: ok - @retval 0: failed, newname is already used +ida_netnode.netnode.setblob(self, buf: "void const *", _start: "nodeidx_t", tag: "uchar") -> bool -ida_netnode.netnode.set (method) - set(self, value) -> bool - Set value of netnode. - - @param value: (C++: const void *) pointer to value - @return: 1 - ok +ida_netnode.netnode.setblob_ea(self, buf: "void const *", ea: ida_idaapi.ea_t, tag: "uchar") -> bool -ida_netnode.netnode.set_long (method) - set_long(self, x) -> bool - Value of netnode as a long number: - - @param x: (C++: nodeidx_t) +ida_netnode.netnode.start(self) -> bool -ida_netnode.netnode.setblob (method) - setblob(self, buf, _start, tag) -> bool - Store a blob in a netnode. - - @param buf: (C++: const void *) pointer to blob to save - @param _start: (C++: nodeidx_t) - @param tag: (C++: uchar) tag of supval array - @return: success +ida_netnode.netnode.supdel(self, *args) -> bool -ida_netnode.netnode.setblob_ea (method) - setblob_ea(self, buf, ea, tag) -> bool - - @param buf: void const * - @param ea: ea_t - @param tag: uchar +ida_netnode.netnode.supdel_all(self, tag: "uchar") -> bool -ida_netnode.netnode.start (method) - start(self) -> bool - Get first netnode in the graph. Sets netnodenumber to the lowest existing - number. - @retval true: ok - @retval false: graph is empty +ida_netnode.netnode.supdel_ea(self, *args) -> bool -ida_netnode.netnode.supdel (method) - supdel(self, alt, tag=stag) -> bool - Delete all elements of supval array. This function may be applied to 32-bit and - 8-bit supval arrays. This function deletes the whole supval array. - - @param alt: nodeidx_t - @param tag: uchar - - @return: success - supdel(self) -> bool +ida_netnode.netnode.supdel_idx8(self, alt: "uchar", tag: "uchar") -> bool -ida_netnode.netnode.supdel_all (method) - supdel_all(self, tag) -> bool - Delete all elements of the specified supval array. This function may be applied - to 32-bit and 8-bit supval arrays. This function deletes the whole supval array. - - @param tag: (C++: uchar) - @return: success +ida_netnode.netnode.supdel_range(self, idx1: "nodeidx_t", idx2: "nodeidx_t", tag: "uchar") -> int -ida_netnode.netnode.supdel_ea (method) - supdel_ea(self, ea, tag=stag) -> bool - - @param ea: ea_t - @param tag: uchar +ida_netnode.netnode.supdel_range_idx8(self, idx1: "uchar", idx2: "uchar", tag: "uchar") -> int -ida_netnode.netnode.supdel_idx8 (method) - supdel_idx8(self, alt, tag) -> bool - - @param alt: uchar - @param tag: uchar +ida_netnode.netnode.supfirst(self, *args) -> "nodeidx_t" -ida_netnode.netnode.supdel_range (method) - supdel_range(self, idx1, idx2, tag) -> int - Delete range of elements in the specified supval array. Elements in range [idx1, - idx2) will be deleted. - @note: This function can also be used to delete a range of altval elements - - @param idx1: (C++: nodeidx_t) first element to delete - @param idx2: (C++: nodeidx_t) last element to delete + 1 - @param tag: (C++: uchar) tag of array - @return: number of deleted elements +ida_netnode.netnode.supfirst_idx8(self, tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.supdel_range_idx8 (method) - supdel_range_idx8(self, idx1, idx2, tag) -> int - Same as above, but accepts 8-bit indexes. - - @param idx1: (C++: uchar) - @param idx2: (C++: uchar) - @param tag: (C++: uchar) +ida_netnode.netnode.suplast(self, *args) -> "nodeidx_t" -ida_netnode.netnode.supfirst (method) - supfirst(self, tag=stag) -> nodeidx_t - Get first existing element of supval array. - - @param tag: (C++: uchar) tag of array - @return: index of first existing element of supval array, BADNODE if supval - array is empty +ida_netnode.netnode.suplast_idx8(self, tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.supfirst_idx8 (method) - supfirst_idx8(self, tag) -> nodeidx_t - - @param tag: uchar +ida_netnode.netnode.supnext(self, *args) -> "nodeidx_t" -ida_netnode.netnode.suplast (method) - suplast(self, tag=stag) -> nodeidx_t - Get last existing element of supval array. - - @param tag: (C++: uchar) tag of array - @return: index of last existing element of supval array, BADNODE if supval array - is empty +ida_netnode.netnode.supnext_idx8(self, alt: "uchar", tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.suplast_idx8 (method) - suplast_idx8(self, tag) -> nodeidx_t - - @param tag: uchar +ida_netnode.netnode.supprev(self, *args) -> "nodeidx_t" -ida_netnode.netnode.supnext (method) - supnext(self, cur, tag=stag) -> nodeidx_t - Get next existing element of supval array. - - @param cur: (C++: nodeidx_t) current index - @param tag: (C++: uchar) tag of array - @return: index of the next existing element of supval array, BADNODE if no more - supval array elements exist +ida_netnode.netnode.supprev_idx8(self, alt: "uchar", tag: "uchar") -> "nodeidx_t" -ida_netnode.netnode.supnext_idx8 (method) - supnext_idx8(self, alt, tag) -> nodeidx_t - - @param alt: uchar - @param tag: uchar +ida_netnode.netnode.supset(self, *args) -> bool -ida_netnode.netnode.supprev (method) - supprev(self, cur, tag=stag) -> nodeidx_t - Get previous existing element of supval array. - - @param cur: (C++: nodeidx_t) current index - @param tag: (C++: uchar) tag of array - @return: index of the previous existing element of supval array BADNODE if no - more supval array elements exist +ida_netnode.netnode.supset_ea(self, *args) -> bool -ida_netnode.netnode.supprev_idx8 (method) - supprev_idx8(self, alt, tag) -> nodeidx_t - - @param alt: uchar - @param tag: uchar +ida_netnode.netnode.supset_idx8(self, alt: "uchar", value: "void const *", tag: "uchar") -> bool -ida_netnode.netnode.supset (method) - supset(self, alt, value, tag=stag) -> bool - Set value of supval array element. - - @param alt: (C++: nodeidx_t) index into array of supvals - @param value: (C++: const void *) pointer to supval value - @param tag: (C++: uchar) tag of array - @retval 1: ok - @retval 0: should not occur - indicates internal error +ida_netnode.netnode.supshift(self, *args) -> "size_t" -ida_netnode.netnode.supset_ea (method) - supset_ea(self, ea, value, tag=stag) -> bool - - @param ea: ea_t - @param value: void const * - @param tag: uchar +ida_netnode.netnode.supstr(self, *args) -> "ssize_t" -ida_netnode.netnode.supset_idx8 (method) - supset_idx8(self, alt, value, tag) -> bool - - @param alt: uchar - @param value: void const * - @param tag: uchar +ida_netnode.netnode.supstr_ea(self, *args) -> "ssize_t" -ida_netnode.netnode.supshift (method) - supshift(self, _from, to, size, tag=stag) -> size_t - Shift the supval array elements. Moves the array elements at (from..from+size) - to (to..to+size) - - @param from: (C++: nodeidx_t) - @param to: (C++: nodeidx_t) - @param size: (C++: nodeidx_t) - @param tag: (C++: uchar) - @return: number of shifted elements +ida_netnode.netnode.supstr_idx8(self, alt: "uchar", tag: "uchar") -> "ssize_t" -ida_netnode.netnode.supstr (method) - supstr(self, alt, tag=stag) -> ssize_t - @see: supstr(qstring *buf, nodeidx_t alt, uchar tag=stag) const - - @param alt: (C++: nodeidx_t) - @param tag: (C++: uchar) +ida_netnode.netnode.supval(self, *args) -> "ssize_t" -ida_netnode.netnode.supstr_ea (method) - supstr_ea(self, ea, tag=stag) -> ssize_t - - @param ea: ea_t - @param tag: uchar +ida_netnode.netnode.supval_ea(self, *args) -> "ssize_t" -ida_netnode.netnode.supstr_idx8 (method) - supstr_idx8(self, alt, tag) -> ssize_t - - @param alt: uchar - @param tag: uchar +ida_netnode.netnode.supval_idx8(self, *args) -> "ssize_t" -ida_netnode.netnode.supval (method) - supval(self, alt, tag=stag) -> ssize_t - Get value of the specified supval array element. NB: do not use this function to - retrieve strings, see supstr()! - - @param alt: (C++: nodeidx_t) index into array of supvals - @param tag: (C++: uchar) tag of array. Default: stag - @return: size of value, -1 if element doesn't exist +ida_netnode.netnode.valobj(self, *args) -> "ssize_t" -ida_netnode.netnode.supval_ea (method) - supval_ea(self, ea, tag=stag) -> ssize_t - - @param ea: ea_t - @param tag: uchar +ida_netnode.netnode.valstr(self) -> "ssize_t" -ida_netnode.netnode.supval_idx8 (method) - supval_idx8(self, alt, tag) -> ssize_t - - @param alt: uchar - @param tag: uchar +ida_netnode.netnode.value_exists(self) -> bool -ida_netnode.netnode.valobj (method) - valobj(self) -> ssize_t - Get value of netnode. Netnode values are arbitrary sized objects with max size - is MAXSPECSIZE. NB: do not use this function for strings - see valstr(). - - @return: length of value, -1 if no value present - -ida_netnode.netnode.valstr (method) - valstr(self) -> ssize_t - @see: valstr(qstring *buf) const - -ida_netnode.netnode.value_exists (method) - value_exists(self) -> bool - -ida_netnode.netnode_exist (function) - netnode_exist(_name) -> bool - - @param _name: char const * - -ida_netnode.ntag (variable) +ida_netnode.ntag Name of netnode. -ida_netnode.stag (variable) +ida_netnode.stag Array of supvals. -ida_netnode.vtag (variable) +ida_netnode.vtag Value of netnode. -ida_offset (module) +ida_offset Functions that deal with offsets. - "Being an offset" is a characteristic of an operand. This means that operand or - its part represent offset from some address in the program. This linear address - is called "offset base". Some operands may have 2 offsets simultaneously. - Generally, IDA doesn't handle this except for Motorola outer offsets. Thus there - may be two offset values in an operand: simple offset and outer offset. - - Outer offsets are handled by specifying special operand number: it should be - ORed with OPND_OUTER value. - - See bytes.hpp for further explanation of operand numbers. + "Being an offset" is a characteristic of an operand. This means that operand or its part represent offset from some address in the program. This linear address is called "offset base". Some operands may have 2 offsets simultaneously. Generally, IDA doesn't handle this except for Motorola outer offsets. Thus there may be two offset values in an operand: simple offset and outer offset. + Outer offsets are handled by specifying special operand number: it should be ORed with OPND_OUTER value. + See bytes.hpp for further explanation of operand numbers. + -ida_offset.add_refinfo_dref (function) - 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: (C++: const insn_t &) the referencing instruction - @param from: (C++: ea_t) the referencing instruction/data address - @param ri: (C++: const refinfo_t &) reference info block from the database - @param opval: (C++: adiff_t) operand value (usually op_t::value or op_t::addr) - @param type: (C++: dref_t) type of xref - @param opoff: (C++: int) offset of the operand from the start of instruction - @return: the target address of the reference +ida_offset.add_refinfo_dref(insn: "insn_t const &", _from: ida_idaapi.ea_t, ri: "refinfo_t", opval: "adiff_t", type: "dref_t", opoff: int) -> ida_idaapi.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 + @param ri: reference info block from the database + @param opval: operand value (usually op_t::value or op_t::addr) + @param type: type of xref + @param opoff: offset of the operand from the start of instruction + @returns the target address of the reference -ida_offset.calc_basevalue (function) - calc_basevalue(target, base) -> ea_t +ida_offset.calc_basevalue(target: ida_idaapi.ea_t, base: ida_idaapi.ea_t) -> ida_idaapi.ea_t Calculate the value of the reference base. - - @param target: (C++: ea_t) - @param base: (C++: ea_t) -ida_offset.calc_offset_base (function) - 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: (C++: ea_t) the referencing instruction/data address - @param n: (C++: int) operand number +ida_offset.calc_offset_base(ea: ida_idaapi.ea_t, n: int) -> ida_idaapi.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 + @param n: operand number * 0: first operand * 1: second operand * ... * 7: eighth operand - @return: output base address or BADADDR + @returns output base address or BADADDR -ida_offset.calc_probable_base_by_value (function) - 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 +ida_offset.calc_probable_base_by_value(ea: ida_idaapi.ea_t, off: int) -> ida_idaapi.ea_t + Try to calculate the offset base. 2 bases are checked: current ds and cs. If fails, return BADADDR + + +ida_offset.calc_reference_data(target: "ea_t *", base: "ea_t *", _from: ida_idaapi.ea_t, ri: "refinfo_t", opval: "adiff_t") -> 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 + @param base: output base address + @param ri: reference info block from the database + @param opval: operand value (usually op_t::value or op_t::addr) + @returns success + +ida_offset.calc_target(*args) -> ida_idaapi.ea_t + This function has the following signatures: - @param ea: (C++: ea_t) - @param off: (C++: uval_t) - -ida_offset.calc_reference_data (function) - 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. + 0. calc_target(from: ida_idaapi.ea_t, opval: adiff_t, ri: const refinfo_t &) -> ida_idaapi.ea_t + 1. calc_target(from: ida_idaapi.ea_t, ea: ida_idaapi.ea_t, n: int, opval: adiff_t) -> ida_idaapi.ea_t + + # 0: calc_target(from: ida_idaapi.ea_t, opval: adiff_t, ri: const refinfo_t &) -> ida_idaapi.ea_t + + Calculate the target using the provided refinfo_t. + + + # 1: calc_target(from: ida_idaapi.ea_t, ea: ida_idaapi.ea_t, n: int, opval: adiff_t) -> ida_idaapi.ea_t - @param target: (C++: ea_t *) output target address - @param base: (C++: ea_t *) output base address - @param from: (C++: ea_t) the referencing instruction/data address - @param ri: (C++: const refinfo_t &) reference info block from the database - @param opval: (C++: adiff_t) operand value (usually op_t::value or op_t::addr) - @return: success - -ida_offset.calc_target (function) - calc_target(_from, opval, ri) -> ea_t Retrieve refinfo_t structure and calculate the target. - - @param from: (C++: ea_t) - @param opval: (C++: adiff_t) - @param ri: refinfo_t const & - - calc_target(_from, ea, n, opval) -> ea_t - - @param from: ea_t - @param ea: ea_t - @param n: int - @param opval: adiff_t -ida_offset.can_be_off32 (function) - 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.can_be_off32(ea: ida_idaapi.ea_t) -> ida_idaapi.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. + -ida_offset.get_default_reftype (function) - 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, REF_OFF64 +ida_offset.get_default_reftype(ea: ida_idaapi.ea_t) -> "reftype_t" + Get default reference type depending on the segment. + + @returns one of REF_OFF8, REF_OFF16, REF_OFF32, REF_OFF64 -ida_offset.get_offbase (function) - get_offbase(ea, n) -> ea_t - Get offset base value - - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number - @return: offset base or BADADDR +ida_offset.get_offbase(ea: ida_idaapi.ea_t, n: int) -> ida_idaapi.ea_t + Get offset base value + + @param ea: linear address + @param n: 0..UA_MAXOP-1 operand number + @returns offset base or BADADDR -ida_offset.get_offset_expr (function) - get_offset_expr(ea, n, ri, _from, offset, getn_flags=0) -> str +ida_offset.get_offset_expr(ea: ida_idaapi.ea_t, n: int, ri: "refinfo_t", _from: ida_idaapi.ea_t, offset: "adiff_t", getn_flags: int = 0) -> str See get_offset_expression() - - @param ea: (C++: ea_t) - @param n: (C++: int) - @param ri: (C++: const refinfo_t &) refinfo_t const & - @param from: (C++: ea_t) - @param offset: (C++: adiff_t) - @param getn_flags: (C++: int) -ida_offset.get_offset_expression (function) - 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 ( processor_t::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); +ida_offset.get_offset_expression(ea: ida_idaapi.ea_t, n: int, _from: ida_idaapi.ea_t, offset: "adiff_t", getn_flags: int = 0) -> str + Get offset expression (in the form "offset name+displ"). This function uses offset translation function ( processor_t::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: (C++: ea_t) start of instruction or data with the offset expression - @param n: (C++: int) operand number (may be ORed with OPND_OUTER) + +address of instruction` and the function will return a colored string: `offset array ` + + @param ea: start of instruction or data with the offset expression + @param n: operand number (may be ORed with OPND_OUTER) * 0: first operand * 1: second operand * ... * 7: eighth operand - @param from: (C++: ea_t) linear address of instruction operand or data referring to the - name. This address will be used to get fixup information, so it - should point to exact position of operand in the instruction. - @param offset: (C++: adiff_t) value of operand or its part. The function will return text - representation of this value as offset expression. - @param getn_flags: (C++: int) 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) + @param offset: value of operand or its part. The function will return text representation of this value as offset expression. + @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) @retval 0: can't convert to offset expression @retval 1: ok, a simple offset expression @retval 2: ok, a complex offset expression -ida_offset.op_offset (function) - op_offset(ea, n, type_and_flags, target=BADADDR, base=0, tdelta=0) -> bool +ida_offset.op_offset(*args) -> bool See op_offset_ex() - - @param ea: (C++: ea_t) - @param n: (C++: int) - @param type_and_flags: (C++: uint32) - @param target: (C++: ea_t) - @param base: (C++: ea_t) - @param tdelta: (C++: adiff_t) -ida_offset.op_offset_ex (function) - op_offset_ex(ea, n, ri) -> bool - Convert operand to a reference. To delete an offset, use clr_op_type() function. - - @param ea: (C++: ea_t) linear address. if 'ea' has unexplored bytes, try to convert them to +ida_offset.op_offset_ex(ea: ida_idaapi.ea_t, n: int, ri: "refinfo_t") -> bool + 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 - @param n: (C++: int) operand number (may be ORed with OPND_OUTER) + @param n: operand number (may be ORed with OPND_OUTER) * 0: first * 1: second * ... * 7: eighth operand - * OPND_MASK: all operands - @param ri: (C++: const refinfo_t *) reference information - @return: success - -ida_offset.op_plain_offset (function) - 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) + + * OPND_MASK: all operands + @param ri: reference information + @returns success -ida_pro (module) +ida_offset.op_plain_offset(ea: ida_idaapi.ea_t, n: int, base: ida_idaapi.ea_t) -> bool + Convert operand to a reference with the default reference type. + +ida_pro This is the first header included in the IDA project. - It defines the most common types, functions and data. Also, it tries to make - system dependent definitions. - - The following preprocessor macros are used in the project (the list may be - incomplete) - + It defines the most common types, functions and data. Also, it tries to make system dependent definitions. + The following preprocessor macros are used in the project (the list may be incomplete) Platform must be specified as one of: - - __NT__ - MS Windows (all platforms) - __LINUX__ - Linux - __MAC__ - MAC OS X - - __EA64__ - 64-bit address size (sizeof(ea_t)==8) - __X86__ - 32-bit debug servers (sizeof(void*)==4) - __X64__ - x64 processor (sizeof(void*)==8) default - __PPC__ - PowerPC - __ARM__ - ARM + __NT__ - MS Windows (all platforms) + __LINUX__ - Linux + __MAC__ - MAC OS X + __EA64__ - 64-bit address size (sizeof(ea_t)==8) + __X86__ - 32-bit debug servers (sizeof(void*)==4) + __X64__ - x64 processor (sizeof(void*)==8) default + __PPC__ - PowerPC + __ARM__ - ARM + -ida_pro.CP_UTF16 (variable) +ida_pro.CP_UTF16 UTF-16 codepage. -ida_pro.IDA_SDK_VERSION (variable) - IDA SDK v8.4. +ida_pro.IDA_SDK_VERSION + IDA SDK v9.1. -ida_pro.IDBDEC_ESCAPE (variable) +ida_pro.IDBDEC_ESCAPE convert non-printable characters to C escapes ( , \xNN, \uNNNN) -ida_pro.IOREDIR_APPEND (variable) +ida_pro.IOREDIR_APPEND append, do not overwrite the output file -ida_pro.IOREDIR_INPUT (variable) +ida_pro.IOREDIR_INPUT input redirection -ida_pro.IOREDIR_OUTPUT (variable) +ida_pro.IOREDIR_OUTPUT output redirection -ida_pro.IOREDIR_QUOTED (variable) +ida_pro.IOREDIR_QUOTED the file name was quoted -ida_pro.MAXSTR (variable) +ida_pro.MAXSTR maximum string size -ida_pro.SUBSTCHAR (variable) +ida_pro.SUBSTCHAR default char, used if a char cannot be represented in a codepage -ida_pro.__MF__ (variable) - byte sex of our platform (Most significant byte First). 0: little endian (Intel - 80x86). 1: big endian (PowerPC). +ida_pro.__MF__ + byte sex of our platform (Most significant byte First). 0: little endian (Intel 80x86). 1: big endian (PowerPC). + -ida_pro.__qmutex_t (class) - Proxy of C++ __qmutex_t class. +ida_pro.__qmutex_t -ida_pro.__qmutex_t.__init__ (method) - __init__(self) -> __qmutex_t +ida_pro.__qmutex_t.__init__(self) -ida_pro.__qsemaphore_t (class) - Proxy of C++ __qsemaphore_t class. +ida_pro.__qsemaphore_t -ida_pro.__qsemaphore_t.__init__ (method) - __init__(self) -> __qsemaphore_t +ida_pro.__qsemaphore_t.__init__(self) -ida_pro.__qthread_t (class) - Proxy of C++ __qthread_t class. +ida_pro.__qthread_t -ida_pro.__qthread_t.__init__ (method) - __init__(self) -> __qthread_t +ida_pro.__qthread_t.__init__(self) -ida_pro._qstrvec_t (class) +ida_pro._qstrvec_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. @@ -53127,3524 +36293,2409 @@ ida_pro._qstrvec_t (class) This is, afaict, the only situation where a Python _qstrvec_t is required. -ida_pro._qstrvec_t.__get_size (method) +ida_pro._qstrvec_t.__get_size(self) -ida_pro._qstrvec_t.__getitem__ (method) +ida_pro._qstrvec_t.__getitem__(self, idx) Gets the string at the given index -ida_pro._qstrvec_t.__init__ (method) +ida_pro._qstrvec_t.__init__(self, items = None) -ida_pro._qstrvec_t.__setitem__ (method) +ida_pro._qstrvec_t.__setitem__(self, idx, s) Sets string at the given index -ida_pro._qstrvec_t._create_clink (method) +ida_pro._qstrvec_t._create_clink(self) -ida_pro._qstrvec_t._del_clink (method) +ida_pro._qstrvec_t._del_clink(self, lnk) -ida_pro._qstrvec_t._get_clink_ptr (method) +ida_pro._qstrvec_t._get_clink_ptr(self) -ida_pro._qstrvec_t.add (method) +ida_pro._qstrvec_t.add(self, s) Add a string to the vector -ida_pro._qstrvec_t.addressof (method) +ida_pro._qstrvec_t.addressof(self, idx) Returns the address (as number) of the qstring at the given index -ida_pro._qstrvec_t.assign (method) +ida_pro._qstrvec_t.assign(self, other) Copies the contents of 'other' to 'self' -ida_pro._qstrvec_t.clear (method) +ida_pro._qstrvec_t.clear(self, qclear = False) Clears all strings from the vector. @param qclear: Just reset the size but do not actually free the memory -ida_pro._qstrvec_t.from_list (method) +ida_pro._qstrvec_t.from_list(self, lst) Populates the vector from a Python string list -ida_pro._qstrvec_t.insert (method) +ida_pro._qstrvec_t.insert(self, idx, s) Insert a string into the vector -ida_pro._qstrvec_t.remove (method) +ida_pro._qstrvec_t.remove(self, idx) Removes a string from the vector -ida_pro._qstrvec_t.size (variable) +ida_pro._qstrvec_t.size Returns the count of elements -ida_pro.boolvec_t (class) - Proxy of C++ qvector< bool > class. +ida_pro.adiff_pointer -ida_pro.boolvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< bool > const & +ida_pro.adiff_pointer.__init__(self) -ida_pro.boolvec_t.__getitem__ (method) - __getitem__(self, i) -> bool const & - - @param i: size_t +ida_pro.adiff_pointer.assign(self, value: "adiff_t") -> None -ida_pro.boolvec_t.__init__ (method) - __init__(self) -> boolvec_t - __init__(self, x) -> boolvec_t - - @param x: qvector< bool > const & +ida_pro.adiff_pointer.cast(self) -> "adiff_t *" -ida_pro.boolvec_t.__len__ (method) - __len__(self) -> size_t +ida_pro.adiff_pointer.frompointer(t: "adiff_t *") -> "adiff_pointer *" -ida_pro.boolvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< bool > const & +ida_pro.adiff_pointer.value(self) -> "adiff_t" -ida_pro.boolvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: bool const & +ida_pro.asize_pointer -ida_pro.boolvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: bool const & +ida_pro.asize_pointer.__init__(self) -ida_pro.boolvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: bool const & +ida_pro.asize_pointer.assign(self, value: "asize_t") -> None -ida_pro.boolvec_t.at (method) - at(self, _idx) -> bool const & - - @param _idx: size_t +ida_pro.asize_pointer.cast(self) -> "asize_t *" -ida_pro.boolvec_t.begin (method) - begin(self) -> qvector< bool >::iterator - begin(self) -> qvector< bool >::const_iterator +ida_pro.asize_pointer.frompointer(t: "asize_t *") -> "asize_pointer *" -ida_pro.boolvec_t.capacity (method) - capacity(self) -> size_t +ida_pro.asize_pointer.value(self) -> "asize_t" -ida_pro.boolvec_t.clear (method) - clear(self) +ida_pro.bool_pointer -ida_pro.boolvec_t.empty (method) - empty(self) -> bool +ida_pro.bool_pointer.__init__(self) -ida_pro.boolvec_t.end (method) - end(self) -> qvector< bool >::iterator - end(self) -> qvector< bool >::const_iterator +ida_pro.bool_pointer.assign(self, value: bool) -> None -ida_pro.boolvec_t.erase (method) - erase(self, it) -> qvector< bool >::iterator - - @param it: qvector< bool >::iterator - - erase(self, first, last) -> qvector< bool >::iterator - - @param first: qvector< bool >::iterator - @param last: qvector< bool >::iterator +ida_pro.bool_pointer.cast(self) -> "bool *" -ida_pro.boolvec_t.extract (method) - extract(self) -> bool * +ida_pro.bool_pointer.frompointer(t: "bool *") -> "bool_pointer *" -ida_pro.boolvec_t.find (method) - find(self, x) -> qvector< bool >::iterator - - @param x: bool const & - - find(self, x) -> qvector< bool >::const_iterator - - @param x: bool const & +ida_pro.bool_pointer.value(self) -> bool -ida_pro.boolvec_t.grow (method) - grow(self, x=bool()) - - @param x: bool const & +ida_pro.boolvec_t -ida_pro.boolvec_t.has (method) - has(self, x) -> bool - - @param x: bool const & +ida_pro.boolvec_t.__eq__(self, r: "boolvec_t") -> bool -ida_pro.boolvec_t.inject (method) - inject(self, s, len) - - @param s: bool * - @param len: size_t +ida_pro.boolvec_t.__getitem__(self, i: "size_t") -> "bool const &" -ida_pro.boolvec_t.insert (method) - insert(self, it, x) -> qvector< bool >::iterator - - @param it: qvector< bool >::iterator - @param x: bool const & +ida_pro.boolvec_t.__init__(self, *args) -ida_pro.boolvec_t.pop_back (method) - pop_back(self) +ida_pro.boolvec_t.__len__(self) -> "size_t" -ida_pro.boolvec_t.push_back (method) - push_back(self, x) - - @param x: bool const & - - push_back(self) -> bool & +ida_pro.boolvec_t.__ne__(self, r: "boolvec_t") -> bool -ida_pro.boolvec_t.qclear (method) - qclear(self) +ida_pro.boolvec_t.__setitem__(self, i: "size_t", v: "bool const &") -> None -ida_pro.boolvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_pro.boolvec_t._del(self, x: "bool const &") -> bool -ida_pro.boolvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: bool const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_pro.boolvec_t.add_unique(self, x: "bool const &") -> bool -ida_pro.boolvec_t.size (method) - size(self) -> size_t +ida_pro.boolvec_t.append(self, x: "bool const &") -> None -ida_pro.boolvec_t.swap (method) - swap(self, r) - - @param r: qvector< bool > & +ida_pro.boolvec_t.at(self, _idx: "size_t") -> "bool const &" -ida_pro.boolvec_t.truncate (method) - truncate(self) +ida_pro.boolvec_t.begin(self, *args) -> "qvector< bool >::const_iterator" -ida_pro.channel_redir_t (class) - Proxy of C++ channel_redir_t class. +ida_pro.boolvec_t.capacity(self) -> "size_t" -ida_pro.channel_redir_t.__init__ (method) - __init__(self) -> channel_redir_t +ida_pro.boolvec_t.clear(self) -> None -ida_pro.channel_redir_t.fd (variable) +ida_pro.boolvec_t.empty(self) -> bool + +ida_pro.boolvec_t.end(self, *args) -> "qvector< bool >::const_iterator" + +ida_pro.boolvec_t.erase(self, *args) -> "qvector< bool >::iterator" + +ida_pro.boolvec_t.extend(self, x: "boolvec_t") -> None + +ida_pro.boolvec_t.extract(self) -> "bool *" + +ida_pro.boolvec_t.find(self, *args) -> "qvector< bool >::const_iterator" + +ida_pro.boolvec_t.grow(self, *args) -> None + +ida_pro.boolvec_t.has(self, x: "bool const &") -> bool + +ida_pro.boolvec_t.inject(self, s: "bool *", len: "size_t") -> None + +ida_pro.boolvec_t.insert(self, it: "qvector< bool >::iterator", x: "bool const &") -> "qvector< bool >::iterator" + +ida_pro.boolvec_t.pop_back(self) -> None + +ida_pro.boolvec_t.push_back(self, *args) -> "bool &" + +ida_pro.boolvec_t.qclear(self) -> None + +ida_pro.boolvec_t.reserve(self, cnt: "size_t") -> None + +ida_pro.boolvec_t.resize(self, *args) -> None + +ida_pro.boolvec_t.size(self) -> "size_t" + +ida_pro.boolvec_t.swap(self, r: "boolvec_t") -> None + +ida_pro.boolvec_t.truncate(self) -> None + +ida_pro.channel_redir_t + +ida_pro.channel_redir_t.__init__(self) + +ida_pro.channel_redir_t.fd channel number -ida_pro.channel_redir_t.file (variable) - file name to redirect to/from. if empty, the channel must be closed. +ida_pro.channel_redir_t.file + file name to redirect to/from. if empty, the channel must be closed. + -ida_pro.channel_redir_t.flags (variable) - i/o redirection flags +ida_pro.channel_redir_t.flags + i/o redirection flags + -ida_pro.channel_redir_t.is_append (method) - is_append(self) -> bool +ida_pro.channel_redir_t.is_append(self) -> bool -ida_pro.channel_redir_t.is_input (method) - is_input(self) -> bool +ida_pro.channel_redir_t.is_input(self) -> bool -ida_pro.channel_redir_t.is_output (method) - is_output(self) -> bool +ida_pro.channel_redir_t.is_output(self) -> bool -ida_pro.channel_redir_t.is_quoted (method) - is_quoted(self) -> bool +ida_pro.channel_redir_t.is_quoted(self) -> bool -ida_pro.channel_redir_t.length (variable) +ida_pro.channel_redir_t.length length of the redirection string in the command line -ida_pro.channel_redir_t.start (variable) +ida_pro.channel_redir_t.start begin of the redirection string in the command line -ida_pro.check_process_exit (function) - check_process_exit(handle, exit_code, msecs=-1) -> int - Check whether process has terminated or not. - - @param handle: (C++: void *) process handle to wait for - @param exit_code: (C++: int *) pointer to the buffer for the exit code - @param msecs: how long to wait. special values: - * 0: do not wait - * 1 or -1: wait infinitely - * other values: timeout in milliseconds - @retval 0: process has exited, and the exit code is available. if *exit_code < - 0: the process was killed with a signal -*exit_code +ida_pro.char_pointer + +ida_pro.char_pointer.__init__(self) + +ida_pro.char_pointer.assign(self, value: "char") -> None + +ida_pro.char_pointer.cast(self) -> "char *" + +ida_pro.char_pointer.frompointer(t: "char *") -> "char_pointer *" + +ida_pro.char_pointer.value(self) -> "char" + +ida_pro.check_process_exit(handle: "void *", exit_code: "int *", msecs: int = -1) -> int + Check whether process has terminated or not. + + @param handle: process handle to wait for + @param exit_code: pointer to the buffer for the exit code + @retval 0: process has exited, and the exit code is available. if *exit_code < 0: the process was killed with a signal -*exit_code @retval 1: process has not exited yet @retval -1: error happened, see error code for winerr() in *exit_code -ida_pro.ea_array (class) - Proxy of C++ ea_array class. +ida_pro.ea32_pointer -ida_pro.ea_array.__getitem__ (method) - __getitem__(self, index) -> ea_t - - @param index: size_t +ida_pro.ea32_pointer.__init__(self) -ida_pro.ea_array.__init__ (method) - __init__(self, nelements) -> ea_array - - @param nelements: size_t +ida_pro.ea32_pointer.assign(self, value: "ea32_t") -> None -ida_pro.ea_array.__setitem__ (method) - __setitem__(self, index, value) - - @param index: size_t - @param value: ea_t +ida_pro.ea32_pointer.cast(self) -> "ea32_t *" -ida_pro.ea_array.cast (method) - cast(self) -> ea_t * +ida_pro.ea32_pointer.frompointer(t: "ea32_t *") -> "ea32_pointer *" -ida_pro.ea_array.frompointer (method) - frompointer(t) -> ea_array - - @param t: ea_t * +ida_pro.ea32_pointer.value(self) -> "ea32_t" -ida_pro.ea_array_frompointer (function) - ea_array_frompointer(t) -> ea_array - - @param t: ea_t * +ida_pro.ea64_pointer -ida_pro.ea_pointer (class) - Proxy of C++ ea_pointer class. +ida_pro.ea64_pointer.__init__(self) -ida_pro.ea_pointer.__init__ (method) - __init__(self) -> ea_pointer +ida_pro.ea64_pointer.assign(self, value: "ea64_t") -> None -ida_pro.ea_pointer.assign (method) - assign(self, value) - - @param value: ea_t +ida_pro.ea64_pointer.cast(self) -> "ea64_t *" -ida_pro.ea_pointer.cast (method) - cast(self) -> ea_t * +ida_pro.ea64_pointer.frompointer(t: "ea64_t *") -> "ea64_pointer *" -ida_pro.ea_pointer.frompointer (method) - frompointer(t) -> ea_pointer - - @param t: ea_t * +ida_pro.ea64_pointer.value(self) -> "ea64_t" -ida_pro.ea_pointer.value (method) - value(self) -> ea_t +ida_pro.ea_array -ida_pro.ea_pointer_frompointer (function) - ea_pointer_frompointer(t) -> ea_pointer - - @param t: ea_t * +ida_pro.ea_array.__getitem__(self, index: "size_t") -> ida_idaapi.ea_t -ida_pro.extend_sign (function) - 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) +ida_pro.ea_array.__init__(self, nelements: "size_t") -ida_pro.instant_dbgopts_t (class) - Proxy of C++ instant_dbgopts_t class. +ida_pro.ea_array.__setitem__(self, index: "size_t", value: ida_idaapi.ea_t) -> None -ida_pro.instant_dbgopts_t.__init__ (method) - __init__(self) -> instant_dbgopts_t +ida_pro.ea_array.cast(self) -> "ea_t *" -ida_pro.instant_dbgopts_t.attach (variable) +ida_pro.ea_array.frompointer(t: "ea_t *") -> "ea_array *" + +ida_pro.ea_pointer + +ida_pro.ea_pointer.__init__(self) + +ida_pro.ea_pointer.assign(self, value: ida_idaapi.ea_t) -> None + +ida_pro.ea_pointer.cast(self) -> "ea_t *" + +ida_pro.ea_pointer.frompointer(t: "ea_t *") -> "ea_pointer *" + +ida_pro.ea_pointer.value(self) -> ida_idaapi.ea_t + +ida_pro.extend_sign(v: "uint64", nbytes: int, sign_extend: bool) -> "uint64" + Sign-, or zero-extend the value 'v' to occupy 64 bits. The value 'v' is considered to be of size 'nbytes'. + + +ida_pro.flags64_pointer + +ida_pro.flags64_pointer.__init__(self) + +ida_pro.flags64_pointer.assign(self, value: "flags64_t") -> None + +ida_pro.flags64_pointer.cast(self) -> "flags64_t *" + +ida_pro.flags64_pointer.frompointer(t: "flags64_t *") -> "flags64_pointer *" + +ida_pro.flags64_pointer.value(self) -> "flags64_t" + +ida_pro.flags_pointer + +ida_pro.flags_pointer.__init__(self) + +ida_pro.flags_pointer.assign(self, value: "flags_t") -> None + +ida_pro.flags_pointer.cast(self) -> "flags_t *" + +ida_pro.flags_pointer.frompointer(t: "flags_t *") -> "flags_pointer *" + +ida_pro.flags_pointer.value(self) -> "flags_t" + +ida_pro.get_available_core_count() -> int + Get the number of logical CPU cores available to the current process if supported by the OS. + + @returns the logical core count available for the process, or -1 on error + +ida_pro.get_logical_core_count() -> int + Get the total CPU logical core count + + @returns the logical core count, or -1 on error + +ida_pro.get_login_name() -> str + Get the user name for the current desktop session + + @returns success + +ida_pro.get_physical_core_count() -> int + Get the total CPU physical core count + + @returns the physical core count, or -1 on error + +ida_pro.instant_dbgopts_t + +ida_pro.instant_dbgopts_t.__init__(self) + +ida_pro.instant_dbgopts_t.attach should attach to a process? -ida_pro.instant_dbgopts_t.debmod (variable) +ida_pro.instant_dbgopts_t.debmod name of debugger module -ida_pro.instant_dbgopts_t.env (variable) +ida_pro.instant_dbgopts_t.env config variables for debmod. example: DEFAULT_CPU=13;MAXPACKETSIZE=-1 -ida_pro.instant_dbgopts_t.event_id (variable) +ida_pro.instant_dbgopts_t.event_id event to trigger upon attaching -ida_pro.instant_dbgopts_t.host (variable) +ida_pro.instant_dbgopts_t.host remote hostname (if remote debugging) -ida_pro.instant_dbgopts_t.pid (variable) +ida_pro.instant_dbgopts_t.pid process to attach to (-1: ask the user) -ida_pro.instant_dbgopts_t.port (variable) +ida_pro.instant_dbgopts_t.port port number for the remote debugger server -ida_pro.int64vec_t (class) - Proxy of C++ qvector< long long > class. - -ida_pro.int64vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< long long > const & - -ida_pro.int64vec_t.__getitem__ (method) - __getitem__(self, i) -> long long const & - - @param i: size_t - -ida_pro.int64vec_t.__init__ (method) - __init__(self) -> int64vec_t - __init__(self, x) -> int64vec_t - - @param x: qvector< long long > const & - -ida_pro.int64vec_t.__len__ (method) - __len__(self) -> size_t - -ida_pro.int64vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< long long > const & - -ida_pro.int64vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: long long const & - -ida_pro.int64vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: long long const & - -ida_pro.int64vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: long long const & - -ida_pro.int64vec_t.at (method) - at(self, _idx) -> long long const & - - @param _idx: size_t - -ida_pro.int64vec_t.begin (method) - begin(self) -> qvector< long long >::iterator - begin(self) -> qvector< long long >::const_iterator - -ida_pro.int64vec_t.capacity (method) - capacity(self) -> size_t - -ida_pro.int64vec_t.clear (method) - clear(self) - -ida_pro.int64vec_t.empty (method) - empty(self) -> bool - -ida_pro.int64vec_t.end (method) - end(self) -> qvector< long long >::iterator - end(self) -> qvector< long long >::const_iterator - -ida_pro.int64vec_t.erase (method) - erase(self, it) -> qvector< long long >::iterator - - @param it: qvector< long long >::iterator - - erase(self, first, last) -> qvector< long long >::iterator - - @param first: qvector< long long >::iterator - @param last: qvector< long long >::iterator - -ida_pro.int64vec_t.extract (method) - extract(self) -> long long * - -ida_pro.int64vec_t.find (method) - find(self, x) -> qvector< long long >::iterator - - @param x: long long const & - - find(self, x) -> qvector< long long >::const_iterator - - @param x: long long const & - -ida_pro.int64vec_t.has (method) - has(self, x) -> bool - - @param x: long long const & - -ida_pro.int64vec_t.inject (method) - inject(self, s, len) - - @param s: long long * - @param len: size_t - -ida_pro.int64vec_t.insert (method) - insert(self, it, x) -> qvector< long long >::iterator - - @param it: qvector< long long >::iterator - @param x: long long const & - -ida_pro.int64vec_t.pop_back (method) - pop_back(self) - -ida_pro.int64vec_t.push_back (method) - push_back(self, x) - - @param x: long long const & - - push_back(self) -> long long & - -ida_pro.int64vec_t.qclear (method) - qclear(self) - -ida_pro.int64vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_pro.int64vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: long long const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_pro.int64vec_t.size (method) - size(self) -> size_t - -ida_pro.int64vec_t.swap (method) - swap(self, r) - - @param r: qvector< long long > & - -ida_pro.int64vec_t.truncate (method) - truncate(self) - -ida_pro.int_pointer (class) - Proxy of C++ int_pointer class. - -ida_pro.int_pointer.__init__ (method) - __init__(self) -> int_pointer - -ida_pro.int_pointer.assign (method) - assign(self, value) - - @param value: int - -ida_pro.int_pointer.cast (method) - cast(self) -> int * - -ida_pro.int_pointer.frompointer (method) - frompointer(t) -> int_pointer - - @param t: int * - -ida_pro.int_pointer.value (method) - value(self) -> int - -ida_pro.int_pointer_frompointer (function) - int_pointer_frompointer(t) -> int_pointer - - @param t: int * - -ida_pro.intvec_t (class) - Proxy of C++ qvector< int > class. - -ida_pro.intvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< int > const & - -ida_pro.intvec_t.__getitem__ (method) - __getitem__(self, i) -> int const & - - @param i: size_t - -ida_pro.intvec_t.__init__ (method) - __init__(self) -> intvec_t - __init__(self, x) -> intvec_t - - @param x: qvector< int > const & - -ida_pro.intvec_t.__len__ (method) - __len__(self) -> size_t - -ida_pro.intvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< int > const & - -ida_pro.intvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: int const & - -ida_pro.intvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: int const & - -ida_pro.intvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: int const & - -ida_pro.intvec_t.at (method) - at(self, _idx) -> int const & - - @param _idx: size_t - -ida_pro.intvec_t.begin (method) - begin(self) -> qvector< int >::iterator - begin(self) -> qvector< int >::const_iterator - -ida_pro.intvec_t.capacity (method) - capacity(self) -> size_t - -ida_pro.intvec_t.clear (method) - clear(self) - -ida_pro.intvec_t.empty (method) - empty(self) -> bool - -ida_pro.intvec_t.end (method) - end(self) -> qvector< int >::iterator - end(self) -> qvector< int >::const_iterator - -ida_pro.intvec_t.erase (method) - erase(self, it) -> qvector< int >::iterator - - @param it: qvector< int >::iterator - - erase(self, first, last) -> qvector< int >::iterator - - @param first: qvector< int >::iterator - @param last: qvector< int >::iterator - -ida_pro.intvec_t.extract (method) - extract(self) -> int * - -ida_pro.intvec_t.find (method) - find(self, x) -> qvector< int >::iterator - - @param x: int const & - - find(self, x) -> qvector< int >::const_iterator - - @param x: int const & - -ida_pro.intvec_t.has (method) - has(self, x) -> bool - - @param x: int const & - -ida_pro.intvec_t.inject (method) - inject(self, s, len) - - @param s: int * - @param len: size_t - -ida_pro.intvec_t.insert (method) - insert(self, it, x) -> qvector< int >::iterator - - @param it: qvector< int >::iterator - @param x: int const & - -ida_pro.intvec_t.pop_back (method) - pop_back(self) - -ida_pro.intvec_t.push_back (method) - push_back(self, x) - - @param x: int const & - - push_back(self) -> int & - -ida_pro.intvec_t.qclear (method) - qclear(self) - -ida_pro.intvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_pro.intvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: int const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_pro.intvec_t.size (method) - size(self) -> size_t - -ida_pro.intvec_t.swap (method) - swap(self, r) - - @param r: qvector< int > & - -ida_pro.intvec_t.truncate (method) - truncate(self) - -ida_pro.is_control_tty (function) - 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_cvt64 (function) - is_cvt64() -> bool +ida_pro.int16_pointer + +ida_pro.int16_pointer.__init__(self) + +ida_pro.int16_pointer.assign(self, value: "int16") -> None + +ida_pro.int16_pointer.cast(self) -> "int16 *" + +ida_pro.int16_pointer.frompointer(t: "int16 *") -> "int16_pointer *" + +ida_pro.int16_pointer.value(self) -> "int16" + +ida_pro.int32_pointer + +ida_pro.int32_pointer.__init__(self) + +ida_pro.int32_pointer.assign(self, value: int) -> None + +ida_pro.int32_pointer.cast(self) -> "int32 *" + +ida_pro.int32_pointer.frompointer(t: "int32 *") -> "int32_pointer *" + +ida_pro.int32_pointer.value(self) -> int + +ida_pro.int64_pointer + +ida_pro.int64_pointer.__init__(self) + +ida_pro.int64_pointer.assign(self, value: "int64") -> None + +ida_pro.int64_pointer.cast(self) -> "int64 *" + +ida_pro.int64_pointer.frompointer(t: "int64 *") -> "int64_pointer *" + +ida_pro.int64_pointer.value(self) -> "int64" + +ida_pro.int64vec_t + +ida_pro.int64vec_t.__eq__(self, r: "int64vec_t") -> bool + +ida_pro.int64vec_t.__getitem__(self, i: "size_t") -> "long long const &" + +ida_pro.int64vec_t.__init__(self, *args) + +ida_pro.int64vec_t.__len__(self) -> "size_t" + +ida_pro.int64vec_t.__ne__(self, r: "int64vec_t") -> bool + +ida_pro.int64vec_t.__setitem__(self, i: "size_t", v: "long long const &") -> None + +ida_pro.int64vec_t._del(self, x: "long long const &") -> bool + +ida_pro.int64vec_t.add_unique(self, x: "long long const &") -> bool + +ida_pro.int64vec_t.append(self, x: "long long const &") -> None + +ida_pro.int64vec_t.at(self, _idx: "size_t") -> "long long const &" + +ida_pro.int64vec_t.begin(self, *args) -> "qvector< long long >::const_iterator" + +ida_pro.int64vec_t.capacity(self) -> "size_t" + +ida_pro.int64vec_t.clear(self) -> None + +ida_pro.int64vec_t.empty(self) -> bool + +ida_pro.int64vec_t.end(self, *args) -> "qvector< long long >::const_iterator" + +ida_pro.int64vec_t.erase(self, *args) -> "qvector< long long >::iterator" + +ida_pro.int64vec_t.extend(self, x: "int64vec_t") -> None + +ida_pro.int64vec_t.extract(self) -> "long long *" + +ida_pro.int64vec_t.find(self, *args) -> "qvector< long long >::const_iterator" + +ida_pro.int64vec_t.has(self, x: "long long const &") -> bool + +ida_pro.int64vec_t.inject(self, s: "long long *", len: "size_t") -> None + +ida_pro.int64vec_t.insert(self, it: "qvector< long long >::iterator", x: "long long const &") -> "qvector< long long >::iterator" + +ida_pro.int64vec_t.pop_back(self) -> None + +ida_pro.int64vec_t.push_back(self, *args) -> "long long &" + +ida_pro.int64vec_t.qclear(self) -> None + +ida_pro.int64vec_t.reserve(self, cnt: "size_t") -> None + +ida_pro.int64vec_t.resize(self, *args) -> None + +ida_pro.int64vec_t.size(self) -> "size_t" + +ida_pro.int64vec_t.swap(self, r: "int64vec_t") -> None + +ida_pro.int64vec_t.truncate(self) -> None + +ida_pro.int8_pointer + +ida_pro.int8_pointer.__init__(self) + +ida_pro.int8_pointer.assign(self, value: "int8") -> None + +ida_pro.int8_pointer.cast(self) -> "int8 *" + +ida_pro.int8_pointer.frompointer(t: "int8 *") -> "int8_pointer *" + +ida_pro.int8_pointer.value(self) -> "int8" + +ida_pro.int_pointer + +ida_pro.int_pointer.__init__(self) + +ida_pro.int_pointer.assign(self, value: int) -> None + +ida_pro.int_pointer.cast(self) -> "int *" + +ida_pro.int_pointer.frompointer(t: "int *") -> "int_pointer *" + +ida_pro.int_pointer.value(self) -> int + +ida_pro.intvec_t + +ida_pro.intvec_t.__eq__(self, r: "intvec_t") -> bool + +ida_pro.intvec_t.__getitem__(self, i: "size_t") -> "int const &" + +ida_pro.intvec_t.__init__(self, *args) + +ida_pro.intvec_t.__len__(self) -> "size_t" + +ida_pro.intvec_t.__ne__(self, r: "intvec_t") -> bool + +ida_pro.intvec_t.__setitem__(self, i: "size_t", v: "int const &") -> None + +ida_pro.intvec_t._del(self, x: "int const &") -> bool + +ida_pro.intvec_t.add_unique(self, x: "int const &") -> bool + +ida_pro.intvec_t.append(self, x: "int const &") -> None + +ida_pro.intvec_t.at(self, _idx: "size_t") -> "int const &" + +ida_pro.intvec_t.begin(self, *args) -> "qvector< int >::const_iterator" + +ida_pro.intvec_t.capacity(self) -> "size_t" + +ida_pro.intvec_t.clear(self) -> None + +ida_pro.intvec_t.empty(self) -> bool + +ida_pro.intvec_t.end(self, *args) -> "qvector< int >::const_iterator" + +ida_pro.intvec_t.erase(self, *args) -> "qvector< int >::iterator" + +ida_pro.intvec_t.extend(self, x: "intvec_t") -> None + +ida_pro.intvec_t.extract(self) -> "int *" + +ida_pro.intvec_t.find(self, *args) -> "qvector< int >::const_iterator" + +ida_pro.intvec_t.has(self, x: "int const &") -> bool + +ida_pro.intvec_t.inject(self, s: "int *", len: "size_t") -> None + +ida_pro.intvec_t.insert(self, it: "qvector< int >::iterator", x: "int const &") -> "qvector< int >::iterator" + +ida_pro.intvec_t.pop_back(self) -> None + +ida_pro.intvec_t.push_back(self, *args) -> "int &" + +ida_pro.intvec_t.qclear(self) -> None + +ida_pro.intvec_t.reserve(self, cnt: "size_t") -> None + +ida_pro.intvec_t.resize(self, *args) -> None + +ida_pro.intvec_t.size(self) -> "size_t" + +ida_pro.intvec_t.swap(self, r: "intvec_t") -> None + +ida_pro.intvec_t.truncate(self) -> None + +ida_pro.is_control_tty(fd: int) -> "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). + + +ida_pro.is_cvt64() -> bool is IDA converting IDB into I64? -ida_pro.is_main_thread (function) - is_main_thread() -> bool +ida_pro.is_main_thread() -> bool Are we running in the main thread? -ida_pro.log2ceil (function) - log2ceil(d64) -> int - calculate ceil(log2(d64)) or floor(log2(d64)), it returns 0 if d64 == 0 - - @param d64: (C++: uint64) +ida_pro.log2ceil(d64: "uint64") -> int + calculate ceil(log2(d64)) or floor(log2(d64)), it returns 0 if d64 == 0 + -ida_pro.log2floor (function) - log2floor(d64) -> int - - @param d64: uint64 +ida_pro.log2floor(d64: "uint64") -> int -ida_pro.parse_dbgopts (function) - 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 *) instant_dbgopts_t * - @param r_switch: (C++: const char *) char const * - @return: true-ok, false-parse error +ida_pro.parse_dbgopts(ido: "instant_dbgopts_t", r_switch: str) -> bool + Parse the -r command line switch (for instant debugging). r_switch points to the value of the -r switch. Example: win32@localhost+ + + @returns true-ok, false-parse error -ida_pro.qatoll (function) - qatoll(nptr) -> int64 - - @param nptr: char const * +ida_pro.plugin_options_t -ida_pro.qcontrol_tty (function) - qcontrol_tty() - Make the current terminal the controlling terminal of the calling process. - @note: The current terminal is supposed to be /dev/tty +ida_pro.plugin_options_t.__init__(self) -ida_pro.qdetach_tty (function) - qdetach_tty() - If the current terminal is the controlling terminal of the calling process, give - up this controlling terminal. - @note: The current terminal is supposed to be /dev/tty +ida_pro.plugin_options_t.erase(self, name: str) -> bool -ida_pro.qexit (function) - qexit(code) - Call qatexit functions, shut down UI and kernel, and exit. - - @param code: (C++: int) exit code +ida_pro.plugin_options_t.find(self, name: str) -> "plugin_option_t const *" -ida_pro.qmutex_locker_t (class) - Proxy of C++ qmutex_locker_t class. +ida_pro.qatoll(nptr: str) -> "int64" -ida_pro.qmutex_locker_t.__init__ (method) - __init__(self, _lock) -> qmutex_locker_t - - @param _lock: qmutex_t +ida_pro.qcontrol_tty() -> None + Make the current terminal the controlling terminal of the calling process. + -ida_pro.qrefcnt_obj_t (class) - Proxy of C++ qrefcnt_obj_t class. +ida_pro.qdetach_tty() -> None + If the current terminal is the controlling terminal of the calling process, give up this controlling terminal. + -ida_pro.qrefcnt_obj_t.__init__ (method) +ida_pro.qexit(code: int) -> None + Call qatexit functions, shut down UI and kernel, and exit. + + @param code: exit code -ida_pro.qrefcnt_obj_t.refcnt (variable) - counter +ida_pro.qmutex_locker_t -ida_pro.qrefcnt_obj_t.release (method) - release(self) - Call destructor. We use release() instead of operator delete() to maintain - binary compatibility with all compilers (vc and gcc use different vtable layouts - for operator delete) +ida_pro.qmutex_locker_t.__init__(self, _lock: "__qmutex_t") -ida_pro.qstrvec_t_add (function) - qstrvec_t_add(_self, s) -> bool - - @param self: PyObject * - @param s: char const * +ida_pro.qrefcnt_obj_t -ida_pro.qstrvec_t_addressof (function) - qstrvec_t_addressof(_self, idx) -> PyObject * - - @param self: PyObject * - @param idx: size_t +ida_pro.qrefcnt_obj_t.__init__(self, *args, **kwargs) -ida_pro.qstrvec_t_assign (function) - qstrvec_t_assign(_self, other) -> bool - - @param self: PyObject * - @param other: PyObject * +ida_pro.qrefcnt_obj_t.refcnt + counter + -ida_pro.qstrvec_t_clear (function) - qstrvec_t_clear(_self, qclear) -> bool - - @param self: PyObject * - @param qclear: bool +ida_pro.qrefcnt_obj_t.release(self) -> None + Call destructor. We use release() instead of operator delete() to maintain binary compatibility with all compilers (vc and gcc use different vtable layouts for operator delete) + -ida_pro.qstrvec_t_create (function) - qstrvec_t_create() -> PyObject * +ida_pro.qstrvec_t_add(_self: "PyObject *", s: str) -> bool -ida_pro.qstrvec_t_destroy (function) - qstrvec_t_destroy(py_obj) -> bool - - @param py_obj: PyObject * +ida_pro.qstrvec_t_addressof(_self: "PyObject *", idx: "size_t") -> "PyObject *" -ida_pro.qstrvec_t_from_list (function) - qstrvec_t_from_list(_self, py_list) -> bool - - @param self: PyObject * - @param py_list: PyObject * +ida_pro.qstrvec_t_assign(_self: "PyObject *", other: "PyObject *") -> bool -ida_pro.qstrvec_t_get (function) - qstrvec_t_get(_self, idx) -> PyObject * - - @param self: PyObject * - @param idx: size_t +ida_pro.qstrvec_t_clear(_self: "PyObject *", qclear: bool) -> bool -ida_pro.qstrvec_t_get_clink (function) - qstrvec_t_get_clink(_self) -> qstrvec_t * - - @param self: PyObject * +ida_pro.qstrvec_t_create() -> "PyObject *" -ida_pro.qstrvec_t_get_clink_ptr (function) - qstrvec_t_get_clink_ptr(_self) -> PyObject * - - @param self: PyObject * +ida_pro.qstrvec_t_destroy(py_obj: "PyObject *") -> bool -ida_pro.qstrvec_t_insert (function) - qstrvec_t_insert(_self, idx, s) -> bool - - @param self: PyObject * - @param idx: size_t - @param s: char const * +ida_pro.qstrvec_t_from_list(_self: "PyObject *", py_list: "PyObject *") -> bool -ida_pro.qstrvec_t_remove (function) - qstrvec_t_remove(_self, idx) -> bool - - @param self: PyObject * - @param idx: size_t +ida_pro.qstrvec_t_get(_self: "PyObject *", idx: "size_t") -> "PyObject *" -ida_pro.qstrvec_t_set (function) - qstrvec_t_set(_self, idx, s) -> bool - - @param self: PyObject * - @param idx: size_t - @param s: char const * +ida_pro.qstrvec_t_get_clink(_self: "PyObject *") -> "qstrvec_t *" -ida_pro.qstrvec_t_size (function) - qstrvec_t_size(_self) -> size_t - - @param self: PyObject * +ida_pro.qstrvec_t_get_clink_ptr(_self: "PyObject *") -> "PyObject *" -ida_pro.qthread_equal (function) - qthread_equal(q1, q2) -> bool +ida_pro.qstrvec_t_insert(_self: "PyObject *", idx: "size_t", s: str) -> bool + +ida_pro.qstrvec_t_remove(_self: "PyObject *", idx: "size_t") -> bool + +ida_pro.qstrvec_t_set(_self: "PyObject *", idx: "size_t", s: str) -> bool + +ida_pro.qstrvec_t_size(_self: "PyObject *") -> "size_t" + +ida_pro.qthread_equal(q1: "__qthread_t", q2: "__qthread_t") -> bool Are two threads equal? - - @param q1: (C++: qthread_t) - @param q2: (C++: qthread_t) -ida_pro.quote_cmdline_arg (function) - 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.quote_cmdline_arg(arg: str) -> 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 + + @returns true: modified 'arg' -ida_pro.qvector_reserve (function) - qvector_reserve(vec, old, cnt, elsize) -> void * - Change capacity of given qvector. - - @param vec: (C++: void *) a pointer to a qvector - @param old: (C++: void *) a pointer to the qvector's array - @param cnt: (C++: size_t) number of elements to reserve - @param elsize: (C++: size_t) size of each element - @return: a pointer to the newly allocated array +ida_pro.qvector_reserve(vec: "void *", old: "void *", cnt: "size_t", elsize: "size_t") -> "void *" + Change capacity of given qvector. + + @param vec: a pointer to a qvector + @param old: a pointer to the qvector's array + @param cnt: number of elements to reserve + @param elsize: size of each element + @returns a pointer to the newly allocated array -ida_pro.readbytes (function) - readbytes(h, res, size, mf) -> int - Read at most 4 bytes from file. - - @param h: (C++: int) file handle - @param res: (C++: uint32 *) value read from file - @param size: (C++: int) size of value in bytes (1,2,4) - @param mf: (C++: bool) is MSB first? - @return: 0 on success, nonzero otherwise +ida_pro.readbytes(h: int, res: "uint32 *", size: int, mf: bool) -> int + Read at most 4 bytes from file. + + @param h: file handle + @param res: value read from file + @param size: size of value in bytes (1,2,4) + @param mf: is MSB first? + @returns 0 on success, nonzero otherwise -ida_pro.reloc_value (function) - reloc_value(value, size, delta, mf) - - @param value: void * - @param size: int - @param delta: adiff_t - @param mf: bool +ida_pro.reloc_value(value: "void *", size: int, delta: "adiff_t", mf: bool) -> None -ida_pro.relocate_relobj (function) - relocate_relobj(_relobj, ea, mf) -> bool - - @param _relobj: relobj_t * - @param ea: ea_t - @param mf: bool +ida_pro.relocate_relobj(_relobj: "relobj_t *", ea: ida_idaapi.ea_t, mf: bool) -> bool -ida_pro.sel_array (class) - Proxy of C++ sel_array class. +ida_pro.sel_array -ida_pro.sel_array.__getitem__ (method) - __getitem__(self, index) -> sel_t - - @param index: size_t +ida_pro.sel_array.__getitem__(self, index: "size_t") -> "sel_t" -ida_pro.sel_array.__init__ (method) - __init__(self, nelements) -> sel_array - - @param nelements: size_t +ida_pro.sel_array.__init__(self, nelements: "size_t") -ida_pro.sel_array.__setitem__ (method) - __setitem__(self, index, value) - - @param index: size_t - @param value: sel_t +ida_pro.sel_array.__setitem__(self, index: "size_t", value: "sel_t") -> None -ida_pro.sel_array.cast (method) - cast(self) -> sel_t * +ida_pro.sel_array.cast(self) -> "sel_t *" -ida_pro.sel_array.frompointer (method) - frompointer(t) -> sel_array - - @param t: sel_t * +ida_pro.sel_array.frompointer(t: "sel_t *") -> "sel_array *" -ida_pro.sel_array_frompointer (function) - sel_array_frompointer(t) -> sel_array - - @param t: sel_t * +ida_pro.sel_pointer -ida_pro.sel_pointer (class) - Proxy of C++ sel_pointer class. +ida_pro.sel_pointer.__init__(self) -ida_pro.sel_pointer.__init__ (method) - __init__(self) -> sel_pointer +ida_pro.sel_pointer.assign(self, value: "sel_t") -> None -ida_pro.sel_pointer.assign (method) - assign(self, value) - - @param value: sel_t +ida_pro.sel_pointer.cast(self) -> "sel_t *" -ida_pro.sel_pointer.cast (method) - cast(self) -> sel_t * +ida_pro.sel_pointer.frompointer(t: "sel_t *") -> "sel_pointer *" -ida_pro.sel_pointer.frompointer (method) - frompointer(t) -> sel_pointer - - @param t: sel_t * +ida_pro.sel_pointer.value(self) -> "sel_t" -ida_pro.sel_pointer.value (method) - value(self) -> sel_t +ida_pro.short_pointer -ida_pro.sel_pointer_frompointer (function) - sel_pointer_frompointer(t) -> sel_pointer - - @param t: sel_t * +ida_pro.short_pointer.__init__(self) -ida_pro.sizevec_t (class) - Proxy of C++ qvector< size_t > class. +ida_pro.short_pointer.assign(self, value: "short") -> None -ida_pro.sizevec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< size_t > const & +ida_pro.short_pointer.cast(self) -> "short *" -ida_pro.sizevec_t.__getitem__ (method) - __getitem__(self, i) -> size_t const & - - @param i: size_t +ida_pro.short_pointer.frompointer(t: "short *") -> "short_pointer *" -ida_pro.sizevec_t.__init__ (method) - __init__(self) -> sizevec_t - __init__(self, x) -> sizevec_t - - @param x: qvector< size_t > const & +ida_pro.short_pointer.value(self) -> "short" -ida_pro.sizevec_t.__len__ (method) - __len__(self) -> size_t +ida_pro.sint8_pointer -ida_pro.sizevec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< size_t > const & +ida_pro.sint8_pointer.__init__(self) -ida_pro.sizevec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: size_t const & +ida_pro.sint8_pointer.assign(self, value: "sint8") -> None -ida_pro.sizevec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: size_t const & +ida_pro.sint8_pointer.cast(self) -> "sint8 *" -ida_pro.sizevec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: size_t const & +ida_pro.sint8_pointer.frompointer(t: "sint8 *") -> "sint8_pointer *" -ida_pro.sizevec_t.at (method) - at(self, _idx) -> size_t const & - - @param _idx: size_t +ida_pro.sint8_pointer.value(self) -> "sint8" -ida_pro.sizevec_t.begin (method) - begin(self) -> qvector< size_t >::iterator - begin(self) -> qvector< size_t >::const_iterator +ida_pro.sizevec_t -ida_pro.sizevec_t.capacity (method) - capacity(self) -> size_t +ida_pro.sizevec_t.__eq__(self, r: "sizevec_t") -> bool -ida_pro.sizevec_t.clear (method) - clear(self) +ida_pro.sizevec_t.__getitem__(self, i: "size_t") -> "size_t const &" -ida_pro.sizevec_t.empty (method) - empty(self) -> bool +ida_pro.sizevec_t.__init__(self, *args) -ida_pro.sizevec_t.end (method) - end(self) -> qvector< size_t >::iterator - end(self) -> qvector< size_t >::const_iterator +ida_pro.sizevec_t.__len__(self) -> "size_t" -ida_pro.sizevec_t.erase (method) - erase(self, it) -> qvector< size_t >::iterator - - @param it: qvector< size_t >::iterator - - erase(self, first, last) -> qvector< size_t >::iterator - - @param first: qvector< size_t >::iterator - @param last: qvector< size_t >::iterator +ida_pro.sizevec_t.__ne__(self, r: "sizevec_t") -> bool -ida_pro.sizevec_t.extract (method) - extract(self) -> size_t * +ida_pro.sizevec_t.__setitem__(self, i: "size_t", v: "size_t const &") -> None -ida_pro.sizevec_t.find (method) - find(self, x) -> qvector< size_t >::iterator - - @param x: size_t const & - - find(self, x) -> qvector< size_t >::const_iterator - - @param x: size_t const & +ida_pro.sizevec_t._del(self, x: "size_t const &") -> bool -ida_pro.sizevec_t.grow (method) - grow(self, x=size_t()) - - @param x: size_t const & +ida_pro.sizevec_t.add_unique(self, x: "size_t const &") -> bool -ida_pro.sizevec_t.has (method) - has(self, x) -> bool - - @param x: size_t const & +ida_pro.sizevec_t.append(self, x: "size_t const &") -> None -ida_pro.sizevec_t.inject (method) - inject(self, s, len) - - @param s: size_t * - @param len: size_t +ida_pro.sizevec_t.at(self, _idx: "size_t") -> "size_t const &" -ida_pro.sizevec_t.insert (method) - insert(self, it, x) -> qvector< size_t >::iterator - - @param it: qvector< size_t >::iterator - @param x: size_t const & +ida_pro.sizevec_t.begin(self, *args) -> "qvector< size_t >::const_iterator" -ida_pro.sizevec_t.pop_back (method) - pop_back(self) +ida_pro.sizevec_t.capacity(self) -> "size_t" -ida_pro.sizevec_t.push_back (method) - push_back(self, x) - - @param x: size_t const & - - push_back(self) -> size_t & +ida_pro.sizevec_t.clear(self) -> None -ida_pro.sizevec_t.qclear (method) - qclear(self) +ida_pro.sizevec_t.empty(self) -> bool -ida_pro.sizevec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_pro.sizevec_t.end(self, *args) -> "qvector< size_t >::const_iterator" -ida_pro.sizevec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: size_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_pro.sizevec_t.erase(self, *args) -> "qvector< size_t >::iterator" -ida_pro.sizevec_t.size (method) - size(self) -> size_t +ida_pro.sizevec_t.extend(self, x: "sizevec_t") -> None -ida_pro.sizevec_t.swap (method) - swap(self, r) - - @param r: qvector< size_t > & +ida_pro.sizevec_t.extract(self) -> "size_t *" -ida_pro.sizevec_t.truncate (method) - truncate(self) +ida_pro.sizevec_t.find(self, *args) -> "qvector< size_t >::const_iterator" -ida_pro.str2user (function) - str2user(str) -> str or None +ida_pro.sizevec_t.grow(self, *args) -> None + +ida_pro.sizevec_t.has(self, x: "size_t const &") -> bool + +ida_pro.sizevec_t.inject(self, s: "size_t *", len: "size_t") -> None + +ida_pro.sizevec_t.insert(self, it: "qvector< size_t >::iterator", x: "size_t const &") -> "qvector< size_t >::iterator" + +ida_pro.sizevec_t.pop_back(self) -> None + +ida_pro.sizevec_t.push_back(self, *args) -> "size_t &" + +ida_pro.sizevec_t.qclear(self) -> None + +ida_pro.sizevec_t.reserve(self, cnt: "size_t") -> None + +ida_pro.sizevec_t.resize(self, *args) -> None + +ida_pro.sizevec_t.size(self) -> "size_t" + +ida_pro.sizevec_t.swap(self, r: "sizevec_t") -> None + +ida_pro.sizevec_t.truncate(self) -> None + +ida_pro.ssize_pointer + +ida_pro.ssize_pointer.__init__(self) + +ida_pro.ssize_pointer.assign(self, value: "ssize_t") -> None + +ida_pro.ssize_pointer.cast(self) -> "ssize_t *" + +ida_pro.ssize_pointer.frompointer(t: "ssize_t *") -> "ssize_pointer *" + +ida_pro.ssize_pointer.value(self) -> "ssize_t" + +ida_pro.str2user(str) Insert C-style escape characters to string - @param str: char const * - @return: new string with escape characters inserted - -ida_pro.strvec_t (class) - Proxy of C++ qvector< simpleline_t > class. - -ida_pro.strvec_t.__getitem__ (method) - __getitem__(self, i) -> simpleline_t const & - - @param i: size_t - -ida_pro.strvec_t.__init__ (method) - __init__(self) -> strvec_t - __init__(self, x) -> strvec_t - - @param x: qvector< simpleline_t > const & - -ida_pro.strvec_t.__len__ (method) - __len__(self) -> size_t - -ida_pro.strvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: simpleline_t const & - -ida_pro.strvec_t.at (method) - at(self, _idx) -> simpleline_t const & - - @param _idx: size_t - -ida_pro.strvec_t.begin (method) - begin(self) -> qvector< simpleline_t >::iterator - begin(self) -> qvector< simpleline_t >::const_iterator - -ida_pro.strvec_t.capacity (method) - capacity(self) -> size_t - -ida_pro.strvec_t.clear (method) - clear(self) - -ida_pro.strvec_t.empty (method) - empty(self) -> bool - -ida_pro.strvec_t.end (method) - end(self) -> qvector< simpleline_t >::iterator - end(self) -> qvector< simpleline_t >::const_iterator - -ida_pro.strvec_t.erase (method) - erase(self, it) -> qvector< simpleline_t >::iterator - - @param it: qvector< simpleline_t >::iterator - - erase(self, first, last) -> qvector< simpleline_t >::iterator - - @param first: qvector< simpleline_t >::iterator - @param last: qvector< simpleline_t >::iterator - -ida_pro.strvec_t.extract (method) - extract(self) -> simpleline_t * - -ida_pro.strvec_t.grow (method) - grow(self, x=simpleline_t()) - - @param x: simpleline_t const & - -ida_pro.strvec_t.inject (method) - inject(self, s, len) - - @param s: simpleline_t * - @param len: size_t - -ida_pro.strvec_t.insert (method) - insert(self, it, x) -> qvector< simpleline_t >::iterator - - @param it: qvector< simpleline_t >::iterator - @param x: simpleline_t const & - -ida_pro.strvec_t.pop_back (method) - pop_back(self) - -ida_pro.strvec_t.push_back (method) - push_back(self, x) - - @param x: simpleline_t const & - - push_back(self) -> simpleline_t & - -ida_pro.strvec_t.qclear (method) - qclear(self) - -ida_pro.strvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_pro.strvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: simpleline_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_pro.strvec_t.size (method) - size(self) -> size_t - -ida_pro.strvec_t.swap (method) - swap(self, r) - - @param r: qvector< simpleline_t > & - -ida_pro.strvec_t.truncate (method) - truncate(self) - -ida_pro.sval_pointer (class) - Proxy of C++ sval_pointer class. - -ida_pro.sval_pointer.__init__ (method) - __init__(self) -> sval_pointer - -ida_pro.sval_pointer.assign (method) - assign(self, value) - - @param value: sval_t - -ida_pro.sval_pointer.cast (method) - cast(self) -> sval_t * - -ida_pro.sval_pointer.frompointer (method) - frompointer(t) -> sval_pointer - - @param t: sval_t * - -ida_pro.sval_pointer.value (method) - value(self) -> sval_t - -ida_pro.sval_pointer_frompointer (function) - sval_pointer_frompointer(t) -> sval_pointer - - @param t: sval_t * - -ida_pro.tid_array (class) - Proxy of C++ tid_array class. - -ida_pro.tid_array.__getitem__ (method) - __getitem__(self, index) -> tid_t - - @param index: size_t - -ida_pro.tid_array.__init__ (method) - __init__(self, nelements) -> tid_array - - @param nelements: size_t - -ida_pro.tid_array.__setitem__ (method) - __setitem__(self, index, value) - - @param index: size_t - @param value: tid_t - -ida_pro.tid_array.cast (method) - cast(self) -> tid_t * - -ida_pro.tid_array.frompointer (method) - frompointer(t) -> tid_array - - @param t: tid_t * - -ida_pro.tid_array_frompointer (function) - tid_array_frompointer(t) -> tid_array - - @param t: tid_t * - -ida_pro.uchar_array (class) - Proxy of C++ uchar_array class. - -ida_pro.uchar_array.__getitem__ (method) - __getitem__(self, index) -> uchar - - @param index: size_t - -ida_pro.uchar_array.__init__ (method) - __init__(self, nelements) -> uchar_array - - @param nelements: size_t - -ida_pro.uchar_array.__setitem__ (method) - __setitem__(self, index, value) - - @param index: size_t - @param value: uchar - -ida_pro.uchar_array.cast (method) - cast(self) -> uchar * - -ida_pro.uchar_array.frompointer (method) - frompointer(t) -> uchar_array - - @param t: uchar * - -ida_pro.uchar_array_frompointer (function) - uchar_array_frompointer(t) -> uchar_array - - @param t: uchar * - -ida_pro.uint64vec_t (class) - Proxy of C++ qvector< unsigned long long > class. - -ida_pro.uint64vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< unsigned long long > const & - -ida_pro.uint64vec_t.__getitem__ (method) - __getitem__(self, i) -> unsigned long long const & - - @param i: size_t - -ida_pro.uint64vec_t.__init__ (method) - __init__(self) -> uint64vec_t - __init__(self, x) -> uint64vec_t - - @param x: qvector< unsigned long long > const & - -ida_pro.uint64vec_t.__len__ (method) - __len__(self) -> size_t - -ida_pro.uint64vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< unsigned long long > const & - -ida_pro.uint64vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: unsigned long long const & - -ida_pro.uint64vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: unsigned long long const & - -ida_pro.uint64vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: unsigned long long const & - -ida_pro.uint64vec_t.at (method) - at(self, _idx) -> unsigned long long const & - - @param _idx: size_t - -ida_pro.uint64vec_t.begin (method) - begin(self) -> qvector< unsigned long long >::iterator - begin(self) -> qvector< unsigned long long >::const_iterator - -ida_pro.uint64vec_t.capacity (method) - capacity(self) -> size_t - -ida_pro.uint64vec_t.clear (method) - clear(self) - -ida_pro.uint64vec_t.empty (method) - empty(self) -> bool - -ida_pro.uint64vec_t.end (method) - end(self) -> qvector< unsigned long long >::iterator - end(self) -> qvector< unsigned long long >::const_iterator - -ida_pro.uint64vec_t.erase (method) - erase(self, it) -> qvector< unsigned long long >::iterator - - @param it: qvector< unsigned long long >::iterator - - erase(self, first, last) -> qvector< unsigned long long >::iterator - - @param first: qvector< unsigned long long >::iterator - @param last: qvector< unsigned long long >::iterator - -ida_pro.uint64vec_t.extract (method) - extract(self) -> unsigned long long * - -ida_pro.uint64vec_t.find (method) - find(self, x) -> qvector< unsigned long long >::iterator - - @param x: unsigned long long const & - - find(self, x) -> qvector< unsigned long long >::const_iterator - - @param x: unsigned long long const & - -ida_pro.uint64vec_t.has (method) - has(self, x) -> bool - - @param x: unsigned long long const & - -ida_pro.uint64vec_t.inject (method) - inject(self, s, len) - - @param s: unsigned long long * - @param len: size_t - -ida_pro.uint64vec_t.insert (method) - insert(self, it, x) -> qvector< unsigned long long >::iterator - - @param it: qvector< unsigned long long >::iterator - @param x: unsigned long long const & - -ida_pro.uint64vec_t.pop_back (method) - pop_back(self) - -ida_pro.uint64vec_t.push_back (method) - push_back(self, x) - - @param x: unsigned long long const & - - push_back(self) -> unsigned long long & - -ida_pro.uint64vec_t.qclear (method) - qclear(self) - -ida_pro.uint64vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_pro.uint64vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: unsigned long long const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_pro.uint64vec_t.size (method) - size(self) -> size_t - -ida_pro.uint64vec_t.swap (method) - swap(self, r) - - @param r: qvector< unsigned long long > & - -ida_pro.uint64vec_t.truncate (method) - truncate(self) - -ida_pro.uintvec_t (class) - Proxy of C++ qvector< unsigned int > class. - -ida_pro.uintvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< unsigned int > const & - -ida_pro.uintvec_t.__getitem__ (method) - __getitem__(self, i) -> unsigned int const & - - @param i: size_t - -ida_pro.uintvec_t.__init__ (method) - __init__(self) -> uintvec_t - __init__(self, x) -> uintvec_t - - @param x: qvector< unsigned int > const & - -ida_pro.uintvec_t.__len__ (method) - __len__(self) -> size_t - -ida_pro.uintvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< unsigned int > const & - -ida_pro.uintvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: unsigned int const & - -ida_pro.uintvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: unsigned int const & - -ida_pro.uintvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: unsigned int const & - -ida_pro.uintvec_t.at (method) - at(self, _idx) -> unsigned int const & - - @param _idx: size_t - -ida_pro.uintvec_t.begin (method) - begin(self) -> qvector< unsigned int >::iterator - begin(self) -> qvector< unsigned int >::const_iterator - -ida_pro.uintvec_t.capacity (method) - capacity(self) -> size_t - -ida_pro.uintvec_t.clear (method) - clear(self) - -ida_pro.uintvec_t.empty (method) - empty(self) -> bool - -ida_pro.uintvec_t.end (method) - end(self) -> qvector< unsigned int >::iterator - end(self) -> qvector< unsigned int >::const_iterator - -ida_pro.uintvec_t.erase (method) - erase(self, it) -> qvector< unsigned int >::iterator - - @param it: qvector< unsigned int >::iterator - - erase(self, first, last) -> qvector< unsigned int >::iterator - - @param first: qvector< unsigned int >::iterator - @param last: qvector< unsigned int >::iterator - -ida_pro.uintvec_t.extract (method) - extract(self) -> unsigned int * - -ida_pro.uintvec_t.find (method) - find(self, x) -> qvector< unsigned int >::iterator - - @param x: unsigned int const & - - find(self, x) -> qvector< unsigned int >::const_iterator - - @param x: unsigned int const & - -ida_pro.uintvec_t.has (method) - has(self, x) -> bool - - @param x: unsigned int const & - -ida_pro.uintvec_t.inject (method) - inject(self, s, len) - - @param s: unsigned int * - @param len: size_t - -ida_pro.uintvec_t.insert (method) - insert(self, it, x) -> qvector< unsigned int >::iterator - - @param it: qvector< unsigned int >::iterator - @param x: unsigned int const & - -ida_pro.uintvec_t.pop_back (method) - pop_back(self) - -ida_pro.uintvec_t.push_back (method) - push_back(self, x) - - @param x: unsigned int const & - - push_back(self) -> unsigned int & - -ida_pro.uintvec_t.qclear (method) - qclear(self) - -ida_pro.uintvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_pro.uintvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: unsigned int const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_pro.uintvec_t.size (method) - size(self) -> size_t - -ida_pro.uintvec_t.swap (method) - swap(self, r) - - @param r: qvector< unsigned int > & - -ida_pro.uintvec_t.truncate (method) - truncate(self) - -ida_pro.uval_array (class) - Proxy of C++ uval_array class. - -ida_pro.uval_array.__getitem__ (method) - __getitem__(self, index) -> uval_t - - @param index: size_t - -ida_pro.uval_array.__init__ (method) - __init__(self, nelements) -> uval_array - - @param nelements: size_t - -ida_pro.uval_array.__setitem__ (method) - __setitem__(self, index, value) - - @param index: size_t - @param value: uval_t - -ida_pro.uval_array.cast (method) - cast(self) -> uval_t * - -ida_pro.uval_array.frompointer (method) - frompointer(t) -> uval_array - - @param t: uval_t * - -ida_pro.uval_array_frompointer (function) - uval_array_frompointer(t) -> uval_array - - @param t: uval_t * - -ida_pro.writebytes (function) - writebytes(h, l, size, mf) -> int - Write at most 4 bytes to file. - - @param h: (C++: int) file handle - @param l: (C++: uint32) value to write - @param size: (C++: int) size of value in bytes (1,2,4) - @param mf: (C++: bool) is MSB first? - @return: 0 on success, nonzero otherwise - -ida_problems (module) + @param str: the input string + @return: new string with escape characters inserted, or None + +ida_pro.strvec_t + +ida_pro.strvec_t.__getitem__(self, i: "size_t") -> "simpleline_t const &" + +ida_pro.strvec_t.__init__(self, *args) + +ida_pro.strvec_t.__len__(self) -> "size_t" + +ida_pro.strvec_t.__setitem__(self, i: "size_t", v: "simpleline_t const &") -> None + +ida_pro.strvec_t.append(self, x: "simpleline_t const &") -> None + +ida_pro.strvec_t.at(self, _idx: "size_t") -> "simpleline_t const &" + +ida_pro.strvec_t.begin(self, *args) -> "qvector< simpleline_t >::const_iterator" + +ida_pro.strvec_t.capacity(self) -> "size_t" + +ida_pro.strvec_t.clear(self) -> None + +ida_pro.strvec_t.empty(self) -> bool + +ida_pro.strvec_t.end(self, *args) -> "qvector< simpleline_t >::const_iterator" + +ida_pro.strvec_t.erase(self, *args) -> "qvector< simpleline_t >::iterator" + +ida_pro.strvec_t.extend(self, x: "strvec_t") -> None + +ida_pro.strvec_t.extract(self) -> "simpleline_t *" + +ida_pro.strvec_t.grow(self, *args) -> None + +ida_pro.strvec_t.inject(self, s: "simpleline_t *", len: "size_t") -> None + +ida_pro.strvec_t.insert(self, it: "qvector< simpleline_t >::iterator", x: "simpleline_t const &") -> "qvector< simpleline_t >::iterator" + +ida_pro.strvec_t.pop_back(self) -> None + +ida_pro.strvec_t.push_back(self, *args) -> "simpleline_t &" + +ida_pro.strvec_t.qclear(self) -> None + +ida_pro.strvec_t.reserve(self, cnt: "size_t") -> None + +ida_pro.strvec_t.resize(self, *args) -> None + +ida_pro.strvec_t.size(self) -> "size_t" + +ida_pro.strvec_t.swap(self, r: "strvec_t") -> None + +ida_pro.strvec_t.truncate(self) -> None + +ida_pro.sval_pointer + +ida_pro.sval_pointer.__init__(self) + +ida_pro.sval_pointer.assign(self, value: int) -> None + +ida_pro.sval_pointer.cast(self) -> "sval_t *" + +ida_pro.sval_pointer.frompointer(t: "sval_t *") -> "sval_pointer *" + +ida_pro.sval_pointer.value(self) -> int + +ida_pro.tid_array + +ida_pro.tid_array.__getitem__(self, index: "size_t") -> "tid_t" + +ida_pro.tid_array.__init__(self, nelements: "size_t") + +ida_pro.tid_array.__setitem__(self, index: "size_t", value: "tid_t") -> None + +ida_pro.tid_array.cast(self) -> "tid_t *" + +ida_pro.tid_array.frompointer(t: "tid_t *") -> "tid_array *" + +ida_pro.tid_pointer + +ida_pro.tid_pointer.__init__(self) + +ida_pro.tid_pointer.assign(self, value: "tid_t") -> None + +ida_pro.tid_pointer.cast(self) -> "tid_t *" + +ida_pro.tid_pointer.frompointer(t: "tid_t *") -> "tid_pointer *" + +ida_pro.tid_pointer.value(self) -> "tid_t" + +ida_pro.uchar_array + +ida_pro.uchar_array.__getitem__(self, index: "size_t") -> "uchar" + +ida_pro.uchar_array.__init__(self, nelements: "size_t") + +ida_pro.uchar_array.__setitem__(self, index: "size_t", value: "uchar") -> None + +ida_pro.uchar_array.cast(self) -> "uchar *" + +ida_pro.uchar_array.frompointer(t: "uchar *") -> "uchar_array *" + +ida_pro.uchar_pointer + +ida_pro.uchar_pointer.__init__(self) + +ida_pro.uchar_pointer.assign(self, value: "uchar") -> None + +ida_pro.uchar_pointer.cast(self) -> "uchar *" + +ida_pro.uchar_pointer.frompointer(t: "uchar *") -> "uchar_pointer *" + +ida_pro.uchar_pointer.value(self) -> "uchar" + +ida_pro.uint16_pointer + +ida_pro.uint16_pointer.__init__(self) + +ida_pro.uint16_pointer.assign(self, value: "uint16") -> None + +ida_pro.uint16_pointer.cast(self) -> "uint16 *" + +ida_pro.uint16_pointer.frompointer(t: "uint16 *") -> "uint16_pointer *" + +ida_pro.uint16_pointer.value(self) -> "uint16" + +ida_pro.uint32_pointer + +ida_pro.uint32_pointer.__init__(self) + +ida_pro.uint32_pointer.assign(self, value: int) -> None + +ida_pro.uint32_pointer.cast(self) -> "uint32 *" + +ida_pro.uint32_pointer.frompointer(t: "uint32 *") -> "uint32_pointer *" + +ida_pro.uint32_pointer.value(self) -> int + +ida_pro.uint64_pointer + +ida_pro.uint64_pointer.__init__(self) + +ida_pro.uint64_pointer.assign(self, value: "uint64") -> None + +ida_pro.uint64_pointer.cast(self) -> "uint64 *" + +ida_pro.uint64_pointer.frompointer(t: "uint64 *") -> "uint64_pointer *" + +ida_pro.uint64_pointer.value(self) -> "uint64" + +ida_pro.uint64vec_t + +ida_pro.uint64vec_t.__eq__(self, r: "uint64vec_t") -> bool + +ida_pro.uint64vec_t.__getitem__(self, i: "size_t") -> "unsigned long long const &" + +ida_pro.uint64vec_t.__init__(self, *args) + +ida_pro.uint64vec_t.__len__(self) -> "size_t" + +ida_pro.uint64vec_t.__ne__(self, r: "uint64vec_t") -> bool + +ida_pro.uint64vec_t.__setitem__(self, i: "size_t", v: "unsigned long long const &") -> None + +ida_pro.uint64vec_t._del(self, x: "unsigned long long const &") -> bool + +ida_pro.uint64vec_t.add_unique(self, x: "unsigned long long const &") -> bool + +ida_pro.uint64vec_t.append(self, x: "unsigned long long const &") -> None + +ida_pro.uint64vec_t.at(self, _idx: "size_t") -> "unsigned long long const &" + +ida_pro.uint64vec_t.begin(self, *args) -> "qvector< unsigned long long >::const_iterator" + +ida_pro.uint64vec_t.capacity(self) -> "size_t" + +ida_pro.uint64vec_t.clear(self) -> None + +ida_pro.uint64vec_t.empty(self) -> bool + +ida_pro.uint64vec_t.end(self, *args) -> "qvector< unsigned long long >::const_iterator" + +ida_pro.uint64vec_t.erase(self, *args) -> "qvector< unsigned long long >::iterator" + +ida_pro.uint64vec_t.extend(self, x: "uint64vec_t") -> None + +ida_pro.uint64vec_t.extract(self) -> "unsigned long long *" + +ida_pro.uint64vec_t.find(self, *args) -> "qvector< unsigned long long >::const_iterator" + +ida_pro.uint64vec_t.has(self, x: "unsigned long long const &") -> bool + +ida_pro.uint64vec_t.inject(self, s: "unsigned long long *", len: "size_t") -> None + +ida_pro.uint64vec_t.insert(self, it: "qvector< unsigned long long >::iterator", x: "unsigned long long const &") -> "qvector< unsigned long long >::iterator" + +ida_pro.uint64vec_t.pop_back(self) -> None + +ida_pro.uint64vec_t.push_back(self, *args) -> "unsigned long long &" + +ida_pro.uint64vec_t.qclear(self) -> None + +ida_pro.uint64vec_t.reserve(self, cnt: "size_t") -> None + +ida_pro.uint64vec_t.resize(self, *args) -> None + +ida_pro.uint64vec_t.size(self) -> "size_t" + +ida_pro.uint64vec_t.swap(self, r: "uint64vec_t") -> None + +ida_pro.uint64vec_t.truncate(self) -> None + +ida_pro.uint8_pointer + +ida_pro.uint8_pointer.__init__(self) + +ida_pro.uint8_pointer.assign(self, value: "uint8") -> None + +ida_pro.uint8_pointer.cast(self) -> "uint8 *" + +ida_pro.uint8_pointer.frompointer(t: "uint8 *") -> "uint8_pointer *" + +ida_pro.uint8_pointer.value(self) -> "uint8" + +ida_pro.uint_pointer + +ida_pro.uint_pointer.__init__(self) + +ida_pro.uint_pointer.assign(self, value: "uint") -> None + +ida_pro.uint_pointer.cast(self) -> "uint *" + +ida_pro.uint_pointer.frompointer(t: "uint *") -> "uint_pointer *" + +ida_pro.uint_pointer.value(self) -> "uint" + +ida_pro.uintvec_t + +ida_pro.uintvec_t.__eq__(self, r: "uintvec_t") -> bool + +ida_pro.uintvec_t.__getitem__(self, i: "size_t") -> "unsigned int const &" + +ida_pro.uintvec_t.__init__(self, *args) + +ida_pro.uintvec_t.__len__(self) -> "size_t" + +ida_pro.uintvec_t.__ne__(self, r: "uintvec_t") -> bool + +ida_pro.uintvec_t.__setitem__(self, i: "size_t", v: "unsigned int const &") -> None + +ida_pro.uintvec_t._del(self, x: "unsigned int const &") -> bool + +ida_pro.uintvec_t.add_unique(self, x: "unsigned int const &") -> bool + +ida_pro.uintvec_t.append(self, x: "unsigned int const &") -> None + +ida_pro.uintvec_t.at(self, _idx: "size_t") -> "unsigned int const &" + +ida_pro.uintvec_t.begin(self, *args) -> "qvector< unsigned int >::const_iterator" + +ida_pro.uintvec_t.capacity(self) -> "size_t" + +ida_pro.uintvec_t.clear(self) -> None + +ida_pro.uintvec_t.empty(self) -> bool + +ida_pro.uintvec_t.end(self, *args) -> "qvector< unsigned int >::const_iterator" + +ida_pro.uintvec_t.erase(self, *args) -> "qvector< unsigned int >::iterator" + +ida_pro.uintvec_t.extend(self, x: "uintvec_t") -> None + +ida_pro.uintvec_t.extract(self) -> "unsigned int *" + +ida_pro.uintvec_t.find(self, *args) -> "qvector< unsigned int >::const_iterator" + +ida_pro.uintvec_t.has(self, x: "unsigned int const &") -> bool + +ida_pro.uintvec_t.inject(self, s: "unsigned int *", len: "size_t") -> None + +ida_pro.uintvec_t.insert(self, it: "qvector< unsigned int >::iterator", x: "unsigned int const &") -> "qvector< unsigned int >::iterator" + +ida_pro.uintvec_t.pop_back(self) -> None + +ida_pro.uintvec_t.push_back(self, *args) -> "unsigned int &" + +ida_pro.uintvec_t.qclear(self) -> None + +ida_pro.uintvec_t.reserve(self, cnt: "size_t") -> None + +ida_pro.uintvec_t.resize(self, *args) -> None + +ida_pro.uintvec_t.size(self) -> "size_t" + +ida_pro.uintvec_t.swap(self, r: "uintvec_t") -> None + +ida_pro.uintvec_t.truncate(self) -> None + +ida_pro.ushort_pointer + +ida_pro.ushort_pointer.__init__(self) + +ida_pro.ushort_pointer.assign(self, value: "ushort") -> None + +ida_pro.ushort_pointer.cast(self) -> "ushort *" + +ida_pro.ushort_pointer.frompointer(t: "ushort *") -> "ushort_pointer *" + +ida_pro.ushort_pointer.value(self) -> "ushort" + +ida_pro.uval_array + +ida_pro.uval_array.__getitem__(self, index: "size_t") -> int + +ida_pro.uval_array.__init__(self, nelements: "size_t") + +ida_pro.uval_array.__setitem__(self, index: "size_t", value: int) -> None + +ida_pro.uval_array.cast(self) -> "uval_t *" + +ida_pro.uval_array.frompointer(t: "uval_t *") -> "uval_array *" + +ida_pro.uval_pointer + +ida_pro.uval_pointer.__init__(self) + +ida_pro.uval_pointer.assign(self, value: int) -> None + +ida_pro.uval_pointer.cast(self) -> "uval_t *" + +ida_pro.uval_pointer.frompointer(t: "uval_t *") -> "uval_pointer *" + +ida_pro.uval_pointer.value(self) -> int + +ida_pro.writebytes(h: int, l: int, size: int, mf: bool) -> int + Write at most 4 bytes to file. + + @param h: file handle + @param l: value to write + @param size: size of value in bytes (1,2,4) + @param mf: is MSB first? + @returns 0 on success, nonzero otherwise + +ida_problems Functions that deal with the list of problems. - There are several problem lists. An address may be inserted to any list. The - kernel simply maintains these lists, no additional processing is done. - - The problem lists are accessible for the user from the View->Subviews->Problems - menu item. - - Addresses in the lists are kept sorted. In general IDA just maintains these - lists without using them during analysis (except PR_ROLLED). + There are several problem lists. An address may be inserted to any list. The kernel simply maintains these lists, no additional processing is done. + The problem lists are accessible for the user from the View->Subviews->Problems menu item. + Addresses in the lists are kept sorted. In general IDA just maintains these lists without using them during analysis (except PR_ROLLED). + -ida_problems.PR_ATTN (variable) +ida_problems.PR_ATTN Attention! Probably erroneous situation. -ida_problems.PR_BADSTACK (variable) +ida_problems.PR_BADSTACK Failed to trace the value of the stack pointer. -ida_problems.PR_COLLISION (variable) +ida_problems.PR_COLLISION FLAIR collision: the function with the given name already exists. -ida_problems.PR_DECIMP (variable) - FLAIR match indecision: the patterns matched, but not the function(s) being - referenced. +ida_problems.PR_DECIMP + FLAIR match indecision: the patterns matched, but not the function(s) being referenced. -ida_problems.PR_DISASM (variable) +ida_problems.PR_DISASM Can't disasm. -ida_problems.PR_END (variable) +ida_problems.PR_END Number of problem types. -ida_problems.PR_FINAL (variable) +ida_problems.PR_FINAL Decision to convert to instruction/data is made by IDA. -ida_problems.PR_HEAD (variable) +ida_problems.PR_HEAD Already head. -ida_problems.PR_ILLADDR (variable) +ida_problems.PR_ILLADDR Exec flows beyond limits. -ida_problems.PR_JUMP (variable) +ida_problems.PR_JUMP Jump by table !!!! ignored. -ida_problems.PR_MANYLINES (variable) +ida_problems.PR_MANYLINES Too many lines. -ida_problems.PR_NOBASE (variable) +ida_problems.PR_NOBASE Can't find offset base. -ida_problems.PR_NOCMT (variable) +ida_problems.PR_NOCMT Can't find comment (not used anymore) -ida_problems.PR_NOFOP (variable) +ida_problems.PR_NOFOP Can't find forced op (not used anymore) -ida_problems.PR_NONAME (variable) +ida_problems.PR_NONAME Can't find name. -ida_problems.PR_NOXREFS (variable) +ida_problems.PR_NOXREFS Can't find references. -ida_problems.PR_ROLLED (variable) +ida_problems.PR_ROLLED The decision made by IDA was wrong and rolled back. -ida_problems.forget_problem (function) - forget_problem(type, ea) -> bool - Remove an address from a problem list - - @param type: (C++: problist_id_t) problem list type - @param ea: (C++: ea_t) linear address - @return: success +ida_problems.forget_problem(type: "problist_id_t", ea: ida_idaapi.ea_t) -> bool + Remove an address from a problem list + + @param type: problem list type + @param ea: linear address + @returns success -ida_problems.get_problem (function) - get_problem(type, lowea) -> ea_t - Get an address from the specified problem list. The address is not removed from - the list. - - @param type: (C++: problist_id_t) problem list type - @param lowea: (C++: ea_t) the returned address will be higher or equal than the specified - address - @return: linear address or BADADDR +ida_problems.get_problem(type: "problist_id_t", lowea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get an address from the specified problem list. The address is not removed from the list. + + @param type: problem list type + @param lowea: the returned address will be higher or equal than the specified address + @returns linear address or BADADDR -ida_problems.get_problem_desc (function) - get_problem_desc(t, ea) -> str - Get the human-friendly description of the problem, if one was provided to - remember_problem. - - @param t: (C++: problist_id_t) problem list type. - @param ea: (C++: ea_t) linear address. - @return: the message length or -1 if none +ida_problems.get_problem_desc(t: "problist_id_t", ea: ida_idaapi.ea_t) -> str + Get the human-friendly description of the problem, if one was provided to remember_problem. + + @param t: problem list type. + @param ea: linear address. + @returns the message length or -1 if none -ida_problems.get_problem_name (function) - get_problem_name(type, longname=True) -> char const * +ida_problems.get_problem_name(type: "problist_id_t", longname: bool = True) -> str Get problem list description. - - @param type: (C++: problist_id_t) - @param longname: (C++: bool) -ida_problems.is_problem_present (function) - is_problem_present(t, ea) -> bool +ida_problems.is_problem_present(t: "problist_id_t", ea: ida_idaapi.ea_t) -> 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 (function) - 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: (C++: problist_id_t) problem list type - @param ea: (C++: ea_t) linear address - @param msg: (C++: const char *) a user-friendly message to be displayed instead of the default more - generic one associated with the type of problem. Defaults to - nullptr. +ida_problems.remember_problem(type: "problist_id_t", ea: ida_idaapi.ea_t, msg: str = None) -> 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 + @param ea: linear address + @param msg: a user-friendly message to be displayed instead of the default more generic one associated with the type of problem. Defaults to nullptr. -ida_problems.was_ida_decision (function) - was_ida_decision(ea) -> bool - - @param ea: ea_t +ida_problems.was_ida_decision(ea: ida_idaapi.ea_t) -> bool -ida_range (module) +ida_range Contains the definition of range_t. - A range is a non-empty continuous range of addresses (specified by its start and - end addresses, the end address is excluded from the range). - - Ranges are stored in the Btree part of the IDA database. To learn more about - Btrees (Balanced Trees): \link{http://www.bluerwhite.org/btree/} + A range is a non-empty continuous range of addresses (specified by its start and end addresses, the end address is excluded from the range). + Ranges are stored in the Btree part of the IDA database. To learn more about Btrees (Balanced Trees): [http://www.bluerwhite.org/btree/](http://www.bluerwhite.org/btree/) + -ida_range.RANGE_KIND_FUNC (variable) +ida_range.RANGE_KIND_FUNC func_t -ida_range.RANGE_KIND_HIDDEN_RANGE (variable) +ida_range.RANGE_KIND_HIDDEN_RANGE hidden_range_t -ida_range.RANGE_KIND_SEGMENT (variable) +ida_range.RANGE_KIND_SEGMENT segment_t -ida_range.array_of_rangesets (class) - Proxy of C++ qvector< rangeset_t > class. +ida_range.array_of_rangesets -ida_range.array_of_rangesets.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< rangeset_t > const & +ida_range.array_of_rangesets.__eq__(self, r: "array_of_rangesets") -> bool -ida_range.array_of_rangesets.__getitem__ (method) - __getitem__(self, i) -> rangeset_t - - @param i: size_t +ida_range.array_of_rangesets.__getitem__(self, i: "size_t") -> "rangeset_t const &" -ida_range.array_of_rangesets.__init__ (method) - __init__(self) -> array_of_rangesets - __init__(self, x) -> array_of_rangesets - - @param x: qvector< rangeset_t > const & +ida_range.array_of_rangesets.__init__(self, *args) -ida_range.array_of_rangesets.__len__ (method) - __len__(self) -> size_t +ida_range.array_of_rangesets.__len__(self) -> "size_t" -ida_range.array_of_rangesets.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< rangeset_t > const & +ida_range.array_of_rangesets.__ne__(self, r: "array_of_rangesets") -> bool -ida_range.array_of_rangesets.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: rangeset_t const & +ida_range.array_of_rangesets.__setitem__(self, i: "size_t", v: "rangeset_t") -> None -ida_range.array_of_rangesets._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: rangeset_t const & +ida_range.array_of_rangesets._del(self, x: "rangeset_t") -> bool -ida_range.array_of_rangesets.add_unique (method) - add_unique(self, x) -> bool - - @param x: rangeset_t const & +ida_range.array_of_rangesets.add_unique(self, x: "rangeset_t") -> bool -ida_range.array_of_rangesets.at (method) - at(self, _idx) -> rangeset_t - - @param _idx: size_t +ida_range.array_of_rangesets.append(self, x: "rangeset_t") -> None -ida_range.array_of_rangesets.begin (method) - begin(self) -> rangeset_t +ida_range.array_of_rangesets.at(self, _idx: "size_t") -> "rangeset_t const &" -ida_range.array_of_rangesets.capacity (method) - capacity(self) -> size_t +ida_range.array_of_rangesets.begin(self, *args) -> "qvector< rangeset_t >::const_iterator" -ida_range.array_of_rangesets.clear (method) - clear(self) +ida_range.array_of_rangesets.capacity(self) -> "size_t" -ida_range.array_of_rangesets.empty (method) - empty(self) -> bool +ida_range.array_of_rangesets.clear(self) -> None -ida_range.array_of_rangesets.end (method) - end(self) -> rangeset_t +ida_range.array_of_rangesets.empty(self) -> bool -ida_range.array_of_rangesets.erase (method) - erase(self, it) -> rangeset_t - - @param it: qvector< rangeset_t >::iterator - - erase(self, first, last) -> rangeset_t - - @param first: qvector< rangeset_t >::iterator - @param last: qvector< rangeset_t >::iterator +ida_range.array_of_rangesets.end(self, *args) -> "qvector< rangeset_t >::const_iterator" -ida_range.array_of_rangesets.extract (method) - extract(self) -> rangeset_t +ida_range.array_of_rangesets.erase(self, *args) -> "qvector< rangeset_t >::iterator" -ida_range.array_of_rangesets.find (method) - find(self, x) -> rangeset_t - - @param x: rangeset_t const & +ida_range.array_of_rangesets.extend(self, x: "array_of_rangesets") -> None -ida_range.array_of_rangesets.grow (method) - grow(self, x=rangeset_t()) - - @param x: rangeset_t const & +ida_range.array_of_rangesets.extract(self) -> "rangeset_t *" -ida_range.array_of_rangesets.has (method) - has(self, x) -> bool - - @param x: rangeset_t const & +ida_range.array_of_rangesets.find(self, *args) -> "qvector< rangeset_t >::const_iterator" -ida_range.array_of_rangesets.inject (method) - inject(self, s, len) - - @param s: rangeset_t * - @param len: size_t +ida_range.array_of_rangesets.grow(self, *args) -> None -ida_range.array_of_rangesets.insert (method) - insert(self, it, x) -> rangeset_t - - @param it: qvector< rangeset_t >::iterator - @param x: rangeset_t const & +ida_range.array_of_rangesets.has(self, x: "rangeset_t") -> bool -ida_range.array_of_rangesets.pop_back (method) - pop_back(self) +ida_range.array_of_rangesets.inject(self, s: "rangeset_t", len: "size_t") -> None -ida_range.array_of_rangesets.push_back (method) - push_back(self, x) - - @param x: rangeset_t const & - - push_back(self) -> rangeset_t +ida_range.array_of_rangesets.insert(self, it: "rangeset_t", x: "rangeset_t") -> "qvector< rangeset_t >::iterator" -ida_range.array_of_rangesets.qclear (method) - qclear(self) +ida_range.array_of_rangesets.pop_back(self) -> None -ida_range.array_of_rangesets.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_range.array_of_rangesets.push_back(self, *args) -> "rangeset_t &" -ida_range.array_of_rangesets.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: rangeset_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_range.array_of_rangesets.qclear(self) -> None -ida_range.array_of_rangesets.size (method) - size(self) -> size_t +ida_range.array_of_rangesets.reserve(self, cnt: "size_t") -> None -ida_range.array_of_rangesets.swap (method) - swap(self, r) - - @param r: qvector< rangeset_t > & +ida_range.array_of_rangesets.resize(self, *args) -> None -ida_range.array_of_rangesets.truncate (method) - truncate(self) +ida_range.array_of_rangesets.size(self) -> "size_t" -ida_range.range_t (class) - Proxy of C++ range_t class. +ida_range.array_of_rangesets.swap(self, r: "array_of_rangesets") -> None -ida_range.range_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: range_t const & +ida_range.array_of_rangesets.truncate(self) -> None -ida_range.range_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: range_t const & +ida_range.range_t -ida_range.range_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: range_t const & +ida_range.range_t.__eq__(self, r: "range_t") -> bool -ida_range.range_t.__init__ (method) - __init__(self, ea1=0, ea2=0) -> range_t - - @param ea1: ea_t - @param ea2: ea_t +ida_range.range_t.__ge__(self, r: "range_t") -> bool -ida_range.range_t.__le__ (method) - __le__(self, r) -> bool - - @param r: range_t const & +ida_range.range_t.__gt__(self, r: "range_t") -> bool -ida_range.range_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: range_t const & +ida_range.range_t.__init__(self, ea1: ida_idaapi.ea_t = 0, ea2: ida_idaapi.ea_t = 0) -ida_range.range_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: range_t const & +ida_range.range_t.__le__(self, r: "range_t") -> bool -ida_range.range_t._print (method) - _print(self) -> size_t +ida_range.range_t.__lt__(self, r: "range_t") -> bool -ida_range.range_t.clear (method) - clear(self) +ida_range.range_t.__ne__(self, r: "range_t") -> bool + +ida_range.range_t._print(self, *args) -> "size_t" + +ida_range.range_t.clear(self) -> None Set start_ea, end_ea to 0. -ida_range.range_t.compare (method) - compare(self, r) -> int - - @param r: range_t const & +ida_range.range_t.compare(self, r: "range_t") -> int -ida_range.range_t.contains (method) - contains(self, ea) -> bool +ida_range.range_t.contains(self, *args) -> bool + This function has the following signatures: + + 0. contains(ea: ida_idaapi.ea_t) -> bool + 1. contains(r: const range_t &) -> bool + + # 0: contains(ea: ida_idaapi.ea_t) -> bool + + Compare two range_t instances, based on the start_ea. + + Is 'ea' in the address range? + + + # 1: contains(r: const range_t &) -> bool + Is every ea in 'r' also in this range_t? - - @param ea: ea_t - - contains(self, r) -> bool - - @param r: range_t const & -ida_range.range_t.empty (method) - empty(self) -> bool +ida_range.range_t.empty(self) -> bool Is the size of the range_t <= 0? -ida_range.range_t.end_ea (variable) +ida_range.range_t.end_ea end_ea excluded -ida_range.range_t.extend (method) - extend(self, ea) +ida_range.range_t.extend(self, ea: ida_idaapi.ea_t) -> None Ensure that the range_t includes 'ea'. - - @param ea: (C++: ea_t) -ida_range.range_t.intersect (method) - intersect(self, r) +ida_range.range_t.intersect(self, r: "range_t") -> None Assign the range_t to the intersection between the range_t and 'r'. - - @param r: (C++: const range_t &) range_t const & -ida_range.range_t.overlaps (method) - overlaps(self, r) -> bool +ida_range.range_t.overlaps(self, r: "range_t") -> bool Is there an ea in 'r' that is also in this range_t? - - @param r: (C++: const range_t &) range_t const & -ida_range.range_t.size (method) - size(self) -> asize_t +ida_range.range_t.size(self) -> "asize_t" Get end_ea - start_ea. -ida_range.range_t.start_ea (variable) +ida_range.range_t.start_ea start_ea included -ida_range.range_t_print (function) - range_t_print(cb) -> str +ida_range.range_t_print(cb: "range_t") -> str Helper function. Should not be called directly! - - @param cb: range_t const * -ida_range.rangeset_t (class) - Proxy of C++ rangeset_t class. +ida_range.rangeset_t -ida_range.rangeset_t.__eq__ (method) - __eq__(self, aset) -> bool - - @param aset: rangeset_t const & +ida_range.rangeset_t.__eq__(self, aset: "rangeset_t") -> bool -ida_range.rangeset_t.__getitem__ (method) +ida_range.rangeset_t.__getitem__(self, idx) -ida_range.rangeset_t.__init__ (method) - __init__(self) -> rangeset_t - __init__(self, range) -> rangeset_t - - @param range: range_t const & - - __init__(self, ivs) -> rangeset_t - - @param ivs: rangeset_t const & +ida_range.rangeset_t.__init__(self, *args) -ida_range.rangeset_t.__ne__ (method) - __ne__(self, aset) -> bool - - @param aset: rangeset_t const & +ida_range.rangeset_t.__ne__(self, aset: "rangeset_t") -> bool -ida_range.rangeset_t._print (method) - _print(self) -> size_t +ida_range.rangeset_t._print(self, *args) -> "size_t" -ida_range.rangeset_t.add (method) - add(self, range) -> bool - Add each element of 'aset' to the set. +ida_range.rangeset_t.add(self, *args) -> bool + This function has the following signatures: - @param range: range_t const & + 0. add(range: const range_t &) -> bool + 1. add(start: ida_idaapi.ea_t, _end: ida_idaapi.ea_t) -> bool + 2. add(aset: const rangeset_t &) -> bool - @return: false if no elements were added (the set was unchanged) - add(self, start, _end) -> bool + # 0: add(range: const range_t &) -> bool - @param start: ea_t - @param _end: ea_t + Add an address range to the set. If 'range' intersects an existing element e, then e is extended to include 'range', and any superfluous elements (subsets of e) are removed. + + @returns false if 'range' was not added (the set was unchanged) - add(self, aset) -> bool + # 1: add(start: ida_idaapi.ea_t, _end: ida_idaapi.ea_t) -> bool - @param aset: rangeset_t const & + Create a new range_t from 'start' and 'end' and add it to the set. + + + # 2: add(aset: const rangeset_t &) -> bool + + Add each element of 'aset' to the set. + + @returns false if no elements were added (the set was unchanged) -ida_range.rangeset_t.begin (method) - begin(self) -> range_t +ida_range.rangeset_t.begin(self) -> "rangeset_t::iterator" Get an iterator that points to the first element in the set. -ida_range.rangeset_t.cached_range (method) - cached_range(self) -> range_t - When searching the rangeset, we keep a cached element to help speed up searches. - - @return: a pointer to the cached element +ida_range.rangeset_t.cached_range(self) -> "range_t const *" + When searching the rangeset, we keep a cached element to help speed up searches. + + @returns a pointer to the cached element -ida_range.rangeset_t.clear (method) - clear(self) +ida_range.rangeset_t.clear(self) -> None Delete all elements from the set. See qvector::clear() -ida_range.rangeset_t.contains (method) - contains(self, ea) -> bool - Is every element in 'aset' contained in an element of this rangeset?. See - range_t::contains(range_t) +ida_range.rangeset_t.contains(self, *args) -> bool + This function has the following signatures: - @param ea: ea_t + 0. contains(ea: ida_idaapi.ea_t) -> bool + 1. contains(aset: const rangeset_t &) -> bool - contains(self, aset) -> bool + # 0: contains(ea: ida_idaapi.ea_t) -> bool - @param aset: rangeset_t const & + Does an element of the rangeset contain 'ea'? See range_t::contains(ea_t) + + + # 1: contains(aset: const rangeset_t &) -> bool + + Is every element in 'aset' contained in an element of this rangeset?. See range_t::contains(range_t) -ida_range.rangeset_t.empty (method) - empty(self) -> bool +ida_range.rangeset_t.empty(self) -> bool Does the set have zero elements. -ida_range.rangeset_t.end (method) - end(self) -> range_t - Get an iterator that points to the end of the set. (This is NOT the last - element) +ida_range.rangeset_t.end(self) -> "rangeset_t::iterator" + Get an iterator that points to the end of the set. (This is NOT the last element) -ida_range.rangeset_t.find_range (method) - find_range(self, ea) -> range_t - Get the element from the set that contains 'ea'. - - @param ea: (C++: ea_t) - @return: nullptr if there is no such element +ida_range.rangeset_t.find_range(self, ea: ida_idaapi.ea_t) -> "range_t const *" + Get the element from the set that contains 'ea'. + + @returns nullptr if there is no such element -ida_range.rangeset_t.getrange (method) - getrange(self, idx) -> range_t +ida_range.rangeset_t.getrange(self, idx: int) -> "range_t const &" Get the range_t at index 'idx'. - - @param idx: (C++: int) -ida_range.rangeset_t.has_common (method) - has_common(self, range) -> bool - Does any element of 'aset' overlap with an element in this rangeset?. See - range_t::overlaps() +ida_range.rangeset_t.has_common(self, *args) -> bool + This function has the following signatures: - @param range: range_t const & + 0. has_common(range: const range_t &) -> bool + 1. has_common(aset: const rangeset_t &) -> bool - has_common(self, aset) -> bool + # 0: has_common(range: const range_t &) -> bool - @param aset: rangeset_t const & + Is there an ea in 'range' that is also in the rangeset? + + + # 1: has_common(aset: const rangeset_t &) -> bool + + Does any element of 'aset' overlap with an element in this rangeset?. See range_t::overlaps() -ida_range.rangeset_t.includes (method) - includes(self, range) -> bool +ida_range.rangeset_t.includes(self, range: "range_t") -> bool Is every ea in 'range' contained in the rangeset? - - @param range: (C++: const range_t &) range_t const & -ida_range.rangeset_t.intersect (method) - intersect(self, aset) -> bool - Set the rangeset to its intersection with 'aset'. - - @param aset: (C++: const rangeset_t &) rangeset_t const & - @return: false if the set was unchanged +ida_range.rangeset_t.intersect(self, aset: "rangeset_t") -> bool + Set the rangeset to its intersection with 'aset'. + + @returns false if the set was unchanged -ida_range.rangeset_t.is_equal (method) - is_equal(self, aset) -> bool +ida_range.rangeset_t.is_equal(self, aset: "rangeset_t") -> bool Do this rangeset and 'aset' have identical elements? - - @param aset: (C++: const rangeset_t &) rangeset_t const & -ida_range.rangeset_t.is_subset_of (method) - is_subset_of(self, aset) -> bool +ida_range.rangeset_t.is_subset_of(self, aset: "rangeset_t") -> bool Is every element in the rangeset contained in an element of 'aset'? - - @param aset: (C++: const rangeset_t &) rangeset_t const & -ida_range.rangeset_t.lastrange (method) - lastrange(self) -> range_t +ida_range.rangeset_t.lastrange(self) -> "range_t const &" Get the last range_t in the set. -ida_range.rangeset_t.next_addr (method) - next_addr(self, ea) -> ea_t +ida_range.rangeset_t.next_addr(self, ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t Get the smallest ea_t value greater than 'ea' contained in the rangeset. - - @param ea: (C++: ea_t) -ida_range.rangeset_t.next_range (method) - next_range(self, ea) -> ea_t - Get the smallest ea_t value greater than 'ea' that is not in the same range as - 'ea'. - - @param ea: (C++: ea_t) +ida_range.rangeset_t.next_range(self, ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get the smallest ea_t value greater than 'ea' that is not in the same range as 'ea'. -ida_range.rangeset_t.nranges (method) - nranges(self) -> size_t +ida_range.rangeset_t.nranges(self) -> "size_t" Get the number of range_t elements in the set. -ida_range.rangeset_t.prev_addr (method) - prev_addr(self, ea) -> ea_t +ida_range.rangeset_t.prev_addr(self, ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t Get the largest ea_t value less than 'ea' contained in the rangeset. - - @param ea: (C++: ea_t) -ida_range.rangeset_t.prev_range (method) - prev_range(self, ea) -> ea_t +ida_range.rangeset_t.prev_range(self, ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t Get the largest ea_t value less than 'ea' that is not in the same range as 'ea'. - - @param ea: (C++: ea_t) -ida_range.rangeset_t.sub (method) - sub(self, range) -> bool - Subtract each range in 'aset' from the set +ida_range.rangeset_t.sub(self, *args) -> bool + This function has the following signatures: - @param range: range_t const & + 0. sub(range: const range_t &) -> bool + 1. sub(ea: ida_idaapi.ea_t) -> bool + 2. sub(aset: const rangeset_t &) -> bool - @return: false if nothing was subtracted (the set was unchanged) - sub(self, ea) -> bool + # 0: sub(range: const range_t &) -> bool - @param ea: ea_t + Subtract an address range from the set. All subsets of 'range' will be removed, and all elements that intersect 'range' will be truncated/split so they do not include 'range'. + + @returns false if 'range' was not subtracted (the set was unchanged) - sub(self, aset) -> bool + # 1: sub(ea: ida_idaapi.ea_t) -> bool - @param aset: rangeset_t const & + Subtract an ea (an range of size 1) from the set. See sub(const range_t &) + + + # 2: sub(aset: const rangeset_t &) -> bool + + Subtract each range in 'aset' from the set + + @returns false if nothing was subtracted (the set was unchanged) -ida_range.rangeset_t.swap (method) - swap(self, r) +ida_range.rangeset_t.swap(self, r: "rangeset_t") -> None Set this = 'r' and 'r' = this. See qvector::swap() - - @param r: (C++: rangeset_t &) -ida_range.rangevec_base_t (class) - Proxy of C++ qvector< range_t > class. +ida_range.rangevec_base_t -ida_range.rangevec_base_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< range_t > const & +ida_range.rangevec_base_t.__eq__(self, r: "rangevec_base_t") -> bool -ida_range.rangevec_base_t.__getitem__ (method) - __getitem__(self, i) -> range_t - - @param i: size_t +ida_range.rangevec_base_t.__getitem__(self, i: "size_t") -> "range_t const &" -ida_range.rangevec_base_t.__init__ (method) - __init__(self) -> rangevec_base_t - __init__(self, x) -> rangevec_base_t - - @param x: qvector< range_t > const & +ida_range.rangevec_base_t.__init__(self, *args) -ida_range.rangevec_base_t.__len__ (method) - __len__(self) -> size_t +ida_range.rangevec_base_t.__len__(self) -> "size_t" -ida_range.rangevec_base_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< range_t > const & +ida_range.rangevec_base_t.__ne__(self, r: "rangevec_base_t") -> bool -ida_range.rangevec_base_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: range_t const & +ida_range.rangevec_base_t.__setitem__(self, i: "size_t", v: "range_t") -> None -ida_range.rangevec_base_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: range_t const & +ida_range.rangevec_base_t._del(self, x: "range_t") -> bool -ida_range.rangevec_base_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: range_t const & +ida_range.rangevec_base_t.add_unique(self, x: "range_t") -> bool -ida_range.rangevec_base_t.at (method) - at(self, _idx) -> range_t - - @param _idx: size_t +ida_range.rangevec_base_t.append(self, x: "range_t") -> None -ida_range.rangevec_base_t.begin (method) - begin(self) -> range_t +ida_range.rangevec_base_t.at(self, _idx: "size_t") -> "range_t const &" -ida_range.rangevec_base_t.capacity (method) - capacity(self) -> size_t +ida_range.rangevec_base_t.begin(self, *args) -> "qvector< range_t >::const_iterator" -ida_range.rangevec_base_t.clear (method) - clear(self) +ida_range.rangevec_base_t.capacity(self) -> "size_t" -ida_range.rangevec_base_t.empty (method) - empty(self) -> bool +ida_range.rangevec_base_t.clear(self) -> None -ida_range.rangevec_base_t.end (method) - end(self) -> range_t +ida_range.rangevec_base_t.empty(self) -> bool -ida_range.rangevec_base_t.erase (method) - erase(self, it) -> range_t - - @param it: qvector< range_t >::iterator - - erase(self, first, last) -> range_t - - @param first: qvector< range_t >::iterator - @param last: qvector< range_t >::iterator +ida_range.rangevec_base_t.end(self, *args) -> "qvector< range_t >::const_iterator" -ida_range.rangevec_base_t.extract (method) - extract(self) -> range_t +ida_range.rangevec_base_t.erase(self, *args) -> "qvector< range_t >::iterator" -ida_range.rangevec_base_t.find (method) - find(self, x) -> range_t - - @param x: range_t const & +ida_range.rangevec_base_t.extend(self, x: "rangevec_base_t") -> None -ida_range.rangevec_base_t.grow (method) - grow(self, x=range_t()) - - @param x: range_t const & +ida_range.rangevec_base_t.extract(self) -> "range_t *" -ida_range.rangevec_base_t.has (method) - has(self, x) -> bool - - @param x: range_t const & +ida_range.rangevec_base_t.find(self, *args) -> "qvector< range_t >::const_iterator" -ida_range.rangevec_base_t.inject (method) - inject(self, s, len) - - @param s: range_t * - @param len: size_t +ida_range.rangevec_base_t.grow(self, *args) -> None -ida_range.rangevec_base_t.insert (method) - insert(self, it, x) -> range_t - - @param it: qvector< range_t >::iterator - @param x: range_t const & +ida_range.rangevec_base_t.has(self, x: "range_t") -> bool -ida_range.rangevec_base_t.pop_back (method) - pop_back(self) +ida_range.rangevec_base_t.inject(self, s: "range_t", len: "size_t") -> None -ida_range.rangevec_base_t.push_back (method) - push_back(self, x) - - @param x: range_t const & - - push_back(self) -> range_t +ida_range.rangevec_base_t.insert(self, it: "range_t", x: "range_t") -> "qvector< range_t >::iterator" -ida_range.rangevec_base_t.qclear (method) - qclear(self) +ida_range.rangevec_base_t.pop_back(self) -> None -ida_range.rangevec_base_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_range.rangevec_base_t.push_back(self, *args) -> "range_t &" -ida_range.rangevec_base_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: range_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_range.rangevec_base_t.qclear(self) -> None -ida_range.rangevec_base_t.size (method) - size(self) -> size_t +ida_range.rangevec_base_t.reserve(self, cnt: "size_t") -> None -ida_range.rangevec_base_t.swap (method) - swap(self, r) - - @param r: qvector< range_t > & +ida_range.rangevec_base_t.resize(self, *args) -> None -ida_range.rangevec_base_t.truncate (method) - truncate(self) +ida_range.rangevec_base_t.size(self) -> "size_t" -ida_range.rangevec_t (class) - Proxy of C++ rangevec_t class. +ida_range.rangevec_base_t.swap(self, r: "rangevec_base_t") -> None -ida_range.rangevec_t.__init__ (method) - __init__(self) -> rangevec_t +ida_range.rangevec_base_t.truncate(self) -> None -ida_registry (module) +ida_range.rangevec_t + +ida_range.rangevec_t.__init__(self) + +ida_registry Registry related functions. - IDA uses the registry to store global configuration options that must persist - after IDA has been closed. - - On Windows, IDA uses the Windows registry directly. On Unix systems, the - registry is stored in a file (typically ~/.idapro/ida.reg). - - The root key for accessing IDA settings in the registry is defined by - ROOT_KEY_NAME. + IDA uses the registry to store global configuration options that must persist after IDA has been closed. + On Windows, IDA uses the Windows registry directly. On Unix systems, the registry is stored in a file (typically ~/.idapro/ida.reg). + The root key for accessing IDA settings in the registry is defined by ROOT_KEY_NAME. + -ida_registry.ROOT_KEY_NAME (variable) - Default key used to store IDA settings in registry (Windows version). - @note: this name is automatically prepended to all key names passed to functions - in this file. +ida_registry.ROOT_KEY_NAME + Default key used to store IDA settings in registry (Windows version). + -ida_registry.reg_binary (variable) +ida_registry.reg_binary binary data -ida_registry.reg_data_type (function) - reg_data_type(name, subkey=None) -> regval_type_t - Get data type of a given value. - - @param name: (C++: const char *) value name - @param subkey: (C++: const char *) key name - @return: false if the [key+]value doesn't exist +ida_registry.reg_data_type(name: str, subkey: str = None) -> "regval_type_t" + Get data type of a given value. + + @param name: value name + @param subkey: key name + @returns false if the [key+]value doesn't exist -ida_registry.reg_delete (function) - reg_delete(name, subkey=None) -> bool - Delete a value from the registry. - - @param name: (C++: const char *) value name - @param subkey: (C++: const char *) parent key - @return: success +ida_registry.reg_delete(name: str, subkey: str = None) -> bool + Delete a value from the registry. + + @param name: value name + @param subkey: parent key + @returns success -ida_registry.reg_delete_subkey (function) - reg_delete_subkey(name) -> bool +ida_registry.reg_delete_subkey(name: str) -> bool Delete a key from the registry. - - @param name: (C++: const char *) char const * -ida_registry.reg_delete_tree (function) - reg_delete_tree(name) -> bool +ida_registry.reg_delete_tree(name: str) -> bool Delete a subtree from the registry. - - @param name: (C++: const char *) char const * -ida_registry.reg_dword (variable) +ida_registry.reg_dword 32-bit number -ida_registry.reg_exists (function) - reg_exists(name, subkey=None) -> bool - Is there already a value with the given name? - - @param name: (C++: const char *) value name - @param subkey: (C++: const char *) parent key +ida_registry.reg_exists(name: str, subkey: str = None) -> bool + Is there already a value with the given name? + + @param name: value name + @param subkey: parent key -ida_registry.reg_flush (function) - reg_flush() +ida_registry.reg_read_binary(name: str, subkey: str = None) -> "PyObject *" + Read binary data from the registry. + + @param name: value name + @param subkey: key name + @returns false if 'data' is not large enough to hold all data present. in this case 'data' is left untouched. -ida_registry.reg_load (function) - reg_load() +ida_registry.reg_read_bool(name: str, defval: bool, subkey: str = None) -> bool + Read boolean value from the registry. + + @param name: value name + @param defval: default value + @param subkey: key name + @returns boolean read from registry, or 'defval' if the read failed -ida_registry.reg_read_binary (function) - reg_read_binary(name, subkey=None) -> bytes or None - Read binary data from the registry. - - @param name: (C++: const char *) value name - @param subkey: (C++: const char *) key name - @return: success +ida_registry.reg_read_int(name: str, defval: int, subkey: str = None) -> int + Read integer value from the registry. + + @param name: value name + @param defval: default value + @param subkey: key name + @returns the value read from the registry, or 'defval' if the read failed -ida_registry.reg_read_bool (function) - reg_read_bool(name, defval, subkey=None) -> bool - Read boolean value from the registry. - - @param name: (C++: const char *) value name - @param defval: (C++: bool) default value - @param subkey: (C++: const char *) key name - @return: boolean read from registry, or 'defval' if the read failed +ida_registry.reg_read_string(name: str, subkey: str = None, _def: str = None) -> "PyObject *" + Read a string from the registry. + + @param name: value name + @param subkey: key name + @returns success -ida_registry.reg_read_int (function) - reg_read_int(name, defval, subkey=None) -> int - Read integer value from the registry. - - @param name: (C++: const char *) value name - @param defval: (C++: int) default value - @param subkey: (C++: const char *) key name - @return: the value read from the registry, or 'defval' if the read failed +ida_registry.reg_read_strlist(subkey: str) -> "qstrvec_t *" + Retrieve all string values associated with the given key. Also see reg_update_strlist(), reg_write_strlist() + -ida_registry.reg_read_string (function) - reg_read_string(name, subkey=None, _def=None) -> str - Read a string from the registry. - - @param name: (C++: const char *) value name - @param subkey: (C++: const char *) key name - @param def: char const * - @return: success - -ida_registry.reg_read_strlist (function) - reg_read_strlist(subkey) - Retrieve all string values associated with the given key. Also see - reg_update_strlist(). - - @param subkey: (C++: const char *) char const * - -ida_registry.reg_subkey_exists (function) - reg_subkey_exists(name) -> bool +ida_registry.reg_subkey_exists(name: str) -> bool Is there already a key with the given name? - - @param name: (C++: const char *) char const * -ida_registry.reg_subkey_subkeys (function) - reg_subkey_subkeys(name) -> [str, ...] +ida_registry.reg_subkey_subkeys(name: str) -> "PyObject *" Get all subkey names of given key. - - @param name: (C++: const char *) char const * -ida_registry.reg_subkey_values (function) - reg_subkey_values(name) -> [str, ...] +ida_registry.reg_subkey_values(name: str) -> "PyObject *" Get all value names under given key. - - @param name: (C++: const char *) char const * -ida_registry.reg_sz (variable) +ida_registry.reg_sz utf8 string -ida_registry.reg_unknown (variable) +ida_registry.reg_unknown unknown -ida_registry.reg_update_filestrlist (function) - reg_update_filestrlist(subkey, add, maxrecs, rem=None) - Update registry with a file list. Case sensitivity will vary depending on the - target OS. - @note: 'add' and 'rem' must be UTF-8, just like for regular string operations. - - @param subkey: (C++: const char *) char const * - @param add: (C++: const char *) char const * - @param maxrecs: (C++: size_t) - @param rem: (C++: const char *) char const * +ida_registry.reg_update_filestrlist(subkey: str, add: str, maxrecs: "size_t", rem: str = None) -> None + Update registry with a file list. Case sensitivity will vary depending on the target OS. + -ida_registry.reg_update_strlist (function) - reg_update_strlist(subkey, add, maxrecs, rem=None, ignorecase=False) - Update list of strings associated with given key. - - @param subkey: (C++: const char *) key name - @param add: (C++: const char *) string to be added to list, can be nullptr - @param maxrecs: (C++: size_t) limit list to this size - @param rem: (C++: const char *) string to be removed from list, can be nullptr - @param ignorecase: (C++: bool) ignore case for 'add' and 'rem' +ida_registry.reg_update_strlist(subkey: str, add: str, maxrecs: "size_t", rem: str = None, ignorecase: bool = False) -> None + Update list of strings associated with given key. + + @param subkey: key name + @param add: string to be added to list, can be nullptr + @param maxrecs: limit list to this size + @param rem: string to be removed from list, can be nullptr + @param ignorecase: ignore case for 'add' and 'rem' -ida_registry.reg_write_binary (function) - reg_write_binary(name, py_bytes, subkey=None) -> PyObject * - Write binary data to the registry. - - @param name: (C++: const char *) value name - @param py_bytes: PyObject * - @param subkey: (C++: const char *) key name +ida_registry.reg_write_binary(name: str, py_bytes: "PyObject *", subkey: str = None) -> "PyObject *" + Write binary data to the registry. + + @param name: value name + @param subkey: key name -ida_registry.reg_write_bool (function) - reg_write_bool(name, value, subkey=None) - Write boolean value to the registry. - - @param name: (C++: const char *) value name - @param value: (C++: int) boolean to write (nonzero = true) - @param subkey: (C++: const char *) key name +ida_registry.reg_write_bool(name: str, value: int, subkey: str = None) -> None + Write boolean value to the registry. + + @param name: value name + @param value: boolean to write (nonzero = true) + @param subkey: key name -ida_registry.reg_write_int (function) - reg_write_int(name, value, subkey=None) - Write integer value to the registry. - - @param name: (C++: const char *) value name - @param value: (C++: int) value to write - @param subkey: (C++: const char *) key name +ida_registry.reg_write_int(name: str, value: int, subkey: str = None) -> None + Write integer value to the registry. + + @param name: value name + @param value: value to write + @param subkey: key name -ida_registry.reg_write_string (function) - reg_write_string(name, utf8, subkey=None) - Write a string to the registry. - - @param name: (C++: const char *) value name - @param utf8: (C++: const char *) utf8-encoded string - @param subkey: (C++: const char *) key name +ida_registry.reg_write_string(name: str, utf8: str, subkey: str = None) -> None + Write a string to the registry. + + @param name: value name + @param utf8: utf8-encoded string + @param subkey: key name -ida_registry.set_registry_root (function) - set_registry_root(name) -> bool - - @param name: char const * +ida_registry.reg_write_strlist(_in: "qstrvec_t const &", subkey: str) -> None + Write string values associated with the given key. Also see reg_read_strlist(), reg_update_strlist() + -ida_regfinder (module) - +ida_registry.set_registry_name(name: str) -> bool -ida_regfinder.find_nearest_rvi (function) - find_nearest_rvi(rvi, ea, reg) -> int - Find the value of any of the two registers using the register tracker. First, - this function tries to find the registers in the basic block of EA, and if it - could not do this, then it tries to find in the entire function. - - @param rvi: (C++: reg_value_info_t *) the found value with additional attributes - @param ea: (C++: ea_t) the address to find a value at - @param reg: (C++: const int) the registers to find - @return: the index of the found register or -1 +ida_regfinder -ida_regfinder.find_reg_value (function) - find_reg_value(ea, reg) -> int - Find register value using the register tracker. - @note: The returned value is valid *before* executing the instruction. - - @param ea: (C++: ea_t) the address to find a value at - @param reg: (C++: int) the register to find - @retval 0: no value (the value is varying or the find depth is not enough to - find a value) +ida_regfinder.find_nearest_rvi(rvi: "reg_value_info_t", ea: ida_idaapi.ea_t, reg: "int const [2]") -> int + Find the value of any of the two registers using the register tracker. First, this function tries to find the registers in the basic block of EA, and if it could not do this, then it tries to find in the entire function. + + @param rvi: the found value with additional attributes + @param ea: the address to find a value at + @param reg: the registers to find + @returns the index of the found register or -1 + +ida_regfinder.find_reg_value(ea: ida_idaapi.ea_t, reg: int) -> "uint64 *" + Find register value using the register tracker. + + @param ea: the address to find a value at + @param reg: the register to find + @retval 0: no value (the value is varying or the find depth is not enough to find a value) @retval 1: the found value is in VAL @retval -1: the processor module does not support a register tracker -ida_regfinder.find_reg_value_info (function) - find_reg_value_info(rvi, ea, reg, max_depth=0) -> bool - Find register value using the register tracker. - @note: The returned value is valid *before* executing the instruction. - @note: The _undefined_ value means that there is no execution flow to EA, e.g. - we try to find a value after the call of NORET function. - @note: The _unknown_ value means that the value is: - * a result of unsupported instruction, e.g. the result of a call, - * a function argument, - * is varying, e.g. it is a loop counter. - - @param rvi: (C++: reg_value_info_t *) the found value with additional attributes - @param ea: (C++: ea_t) the address to find a value at - @param reg: (C++: int) the register to find - @param max_depth: (C++: int) the number of basic blocks to look before aborting the search - and returning the unknown value. 0 means the value of - REGTRACK_MAX_DEPTH from ida.cfg for ordinal registers or - REGTRACK_FUNC_MAX_DEPTH for the function-wide registers, -1 - means the value of REGTRACK_FUNC_MAX_DEPTH from ida.cfg. +ida_regfinder.find_reg_value_info(rvi: "reg_value_info_t", ea: ida_idaapi.ea_t, reg: int, max_depth: int = 0) -> bool + Find register value using the register tracker. + + @param rvi: the found value with additional attributes + @param ea: the address to find a value at + @param reg: the register to find + @param max_depth: the number of basic blocks to look before aborting the search and returning the unknown value. 0 means the value of REGTRACK_MAX_DEPTH from ida.cfg for ordinal registers or REGTRACK_FUNC_MAX_DEPTH for the function-wide registers, -1 means the value of REGTRACK_FUNC_MAX_DEPTH from ida.cfg. @retval 'false': the processor module does not support a register tracker @retval 'true': the found value is in RVI -ida_regfinder.find_sp_value (function) - find_sp_value(ea, reg=-1) -> int - Find a value of the SP based register using the register tracker. - @note: The returned value is valid *before* executing the instruction. - - @param ea: (C++: ea_t) the address to find a value at - @param reg: (C++: int) the register to find. by default the SP register is used. - @retval 0: no value (the value is varying or the find depth is not enough to - find a value) +ida_regfinder.find_sp_value(ea: ida_idaapi.ea_t, reg: int = -1) -> "int64 *" + Find a value of the SP based register using the register tracker. + + @param ea: the address to find a value at + @param reg: the register to find. by default the SP register is used. + @retval 0: no value (the value is varying or the find depth is not enough to find a value) @retval 1: the found value is in VAL @retval -1: the processor module does not support a register tracker -ida_regfinder.invalidate_regfinder_cache (function) - invalidate_regfinder_cache(ea=BADADDR) - Remove from the register tracker cache all values at EA and all dependent - values. As if the control flow to this instruction has changed. if EA == BADADDR - then clear the entire cache. - - @param ea: (C++: ea_t) +ida_regfinder.invalidate_regfinder_cache(*args) -> None + The control flow from FROM to TO has changed. Remove from the register tracker cache all values at TO and all dependent values. if TO == BADADDR then clear the entire cache. + -ida_regfinder.reg_value_def_t (class) - Proxy of C++ reg_value_def_t class. +ida_regfinder.reg_value_def_t -ida_regfinder.reg_value_def_t.LIKE_GOT (variable) - the value is like GOT only for numbers - @see: is_num() +ida_regfinder.reg_value_def_t.LIKE_GOT + the value is like GOT only for numbers + -ida_regfinder.reg_value_def_t.NOVAL (variable) +ida_regfinder.reg_value_def_t.NOVAL without a value -ida_regfinder.reg_value_def_t.PC_BASED (variable) - the value depends on DEF_EA only for numbers - @see: is_num() +ida_regfinder.reg_value_def_t.PC_BASED + the value depends on DEF_EA only for numbers + -ida_regfinder.reg_value_def_t.SHORT_INSN (variable) +ida_regfinder.reg_value_def_t.SHORT_INSN like 'addi reg, imm' -ida_regfinder.reg_value_def_t.SPVAL (variable) +ida_regfinder.reg_value_def_t.SPVAL as a SP delta -ida_regfinder.reg_value_def_t.UVAL (variable) +ida_regfinder.reg_value_def_t.UVAL as a number -ida_regfinder.reg_value_def_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: reg_value_def_t const & +ida_regfinder.reg_value_def_t.__eq__(self, r: "reg_value_def_t") -> bool -ida_regfinder.reg_value_def_t.__init__ (method) - __init__(self) -> reg_value_def_t - __init__(self, _val, ea, _flags=0) -> reg_value_def_t - - @param _val: uval_t - @param ea: ea_t - @param _flags: uint16 - - __init__(self, _val, insn, _flags=0) -> reg_value_def_t - - @param _val: uval_t - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param _flags: uint16 +ida_regfinder.reg_value_def_t.__init__(self, *args) -ida_regfinder.reg_value_def_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: reg_value_def_t const & +ida_regfinder.reg_value_def_t.__lt__(self, r: "reg_value_def_t") -> bool -ida_regfinder.reg_value_def_t.def_ea (variable) +ida_regfinder.reg_value_def_t.def_ea the instruction address -ida_regfinder.reg_value_def_t.def_itype (variable) +ida_regfinder.reg_value_def_t.def_itype the instruction code (processor specific) -ida_regfinder.reg_value_def_t.dstr (method) - dstr(self, how, pm=None) -> qstring +ida_regfinder.reg_value_def_t.dstr(self, how: "reg_value_def_t::dstr_val_t", pm: "procmod_t" = None) -> str Return the string representation. - - @param how: (C++: dstr_val_t) enum reg_value_def_t::dstr_val_t - @param pm: (C++: const procmod_t *) procmod_t const * -ida_regfinder.reg_value_def_t.flags (variable) +ida_regfinder.reg_value_def_t.flags additional info about the value -ida_regfinder.reg_value_def_t.is_like_got (method) - is_like_got(self) -> bool +ida_regfinder.reg_value_def_t.is_like_got(self) -> bool -ida_regfinder.reg_value_def_t.is_pc_based (method) - is_pc_based(self) -> bool +ida_regfinder.reg_value_def_t.is_pc_based(self) -> bool -ida_regfinder.reg_value_def_t.is_short_insn (method) - is_short_insn(self, insn) -> bool +ida_regfinder.reg_value_def_t.is_short_insn(self, *args) -> bool + This function has the following signatures: - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) + 0. is_short_insn() -> bool + 1. is_short_insn(insn: const insn_t &) -> bool - is_short_insn(self) -> bool + # 0: is_short_insn() -> bool + + + # 1: is_short_insn(insn: const insn_t &) -> bool -ida_regfinder.reg_value_def_t.val (variable) +ida_regfinder.reg_value_def_t.val the value -ida_regfinder.reg_value_info_t (class) - Proxy of C++ reg_value_info_t class. +ida_regfinder.reg_value_info_t -ida_regfinder.reg_value_info_t.CONTAINED (variable) +ida_regfinder.reg_value_info_t.CONTAINED L is contained in R (i.e. L\R is empty) -ida_regfinder.reg_value_info_t.CONTAINS (variable) +ida_regfinder.reg_value_info_t.CONTAINS L contains R (i.e. R\L is empty) -ida_regfinder.reg_value_info_t.EQUAL (variable) +ida_regfinder.reg_value_info_t.EQUAL L==R. -ida_regfinder.reg_value_info_t.NOT_COMPARABLE (variable) +ida_regfinder.reg_value_info_t.NOT_COMPARABLE L\R is not empty and R\L is not empty. -ida_regfinder.reg_value_info_t.__getitem__ (method) - __getitem__(self, i) -> reg_value_def_t - - @param i: size_t +ida_regfinder.reg_value_info_t.__getitem__(self, i: "size_t") -> "reg_value_def_t const &" -ida_regfinder.reg_value_info_t.__init__ (method) - __init__(self) -> reg_value_info_t +ida_regfinder.reg_value_info_t.__init__(self) -ida_regfinder.reg_value_info_t.__len__ (method) - __len__(self) -> size_t +ida_regfinder.reg_value_info_t.__len__(self) -> "size_t" -ida_regfinder.reg_value_info_t.__str__ (method) - __str__(self) -> qstring +ida_regfinder.reg_value_info_t.__str__(self) -> str -ida_regfinder.reg_value_info_t.aborted (method) - aborted(self) -> bool +ida_regfinder.reg_value_info_t.aborted(self) -> bool Return 'true' if the tracking process was aborted. -ida_regfinder.reg_value_info_t.add (method) - add(self, r, insn) - Add R to the value, save INSN as a defining instruction. - @note: Either THIS or R must have a single value. - - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) +ida_regfinder.reg_value_info_t.add(self, r: "reg_value_info_t", insn: "insn_t const &") -> None + Add R to the value, save INSN as a defining instruction. + -ida_regfinder.reg_value_info_t.add_num (method) - add_num(self, r, insn) - Add R to the value, do not change the defining instructions. - @note: This method do nothing for unknown values. +ida_regfinder.reg_value_info_t.add_num(self, *args) -> None + This function has the following signatures: - @param r: (C++: uval_t) - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) + 0. add_num(r: int, insn: const insn_t &) -> None + 1. add_num(r: int) -> None - add_num(self, r) + # 0: add_num(r: int, insn: const insn_t &) -> None - @param r: uval_t + Add R to the value, save INSN as a defining instruction. + + + # 1: add_num(r: int) -> None + + Add R to the value, do not change the defining instructions. + -ida_regfinder.reg_value_info_t.band (method) - band(self, r, insn) - Make bitwise AND of R to the value, save INSN as a defining instruction. - @note: Either THIS or R must have a single value. - - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) +ida_regfinder.reg_value_info_t.band(self, r: "reg_value_info_t", insn: "insn_t const &") -> None + Make bitwise AND of R to the value, save INSN as a defining instruction. + -ida_regfinder.reg_value_info_t.bandnot (method) - bandnot(self, r, insn) - Make bitwise AND of the inverse of R to the value, save INSN as a defining - instruction. - @note: Either THIS or R must have a single value. - - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) +ida_regfinder.reg_value_info_t.bandnot(self, r: "reg_value_info_t", insn: "insn_t const &") -> None + Make bitwise AND of the inverse of R to the value, save INSN as a defining instruction. + -ida_regfinder.reg_value_info_t.bnot (method) - bnot(self, insn) - Make bitwise inverse of the value, save INSN as a defining instruction. - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) +ida_regfinder.reg_value_info_t.bnot(self, insn: "insn_t const &") -> None + Make bitwise inverse of the value, save INSN as a defining instruction. + -ida_regfinder.reg_value_info_t.bor (method) - bor(self, r, insn) - Make bitwise OR of R to the value, save INSN as a defining instruction. - @note: Either THIS or R must have a single value. - - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) +ida_regfinder.reg_value_info_t.bor(self, r: "reg_value_info_t", insn: "insn_t const &") -> None + Make bitwise OR of R to the value, save INSN as a defining instruction. + -ida_regfinder.reg_value_info_t.bxor (method) - bxor(self, r, insn) - Make bitwise eXclusive OR of R to the value, save INSN as a defining - instruction. - @note: Either THIS or R must have a single value. - - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) +ida_regfinder.reg_value_info_t.bxor(self, r: "reg_value_info_t", insn: "insn_t const &") -> None + Make bitwise eXclusive OR of R to the value, save INSN as a defining instruction. + -ida_regfinder.reg_value_info_t.clear (method) - clear(self) +ida_regfinder.reg_value_info_t.clear(self) -> None Undefine the value. -ida_regfinder.reg_value_info_t.empty (method) - empty(self) -> bool +ida_regfinder.reg_value_info_t.empty(self) -> bool Return 'true' if we know nothing about a value. -ida_regfinder.reg_value_info_t.extend (method) - extend(self, pm, width, is_signed) - Sign-, or zero-extend the number or SP delta value to full size. The initial - value is considered to be of size WIDTH. - @note: This method do nothing for unknown values. - - @param pm: (C++: const procmod_t &) procmod_t const & - @param width: (C++: int) - @param is_signed: (C++: bool) +ida_regfinder.reg_value_info_t.extend(self, pm: "procmod_t", width: int, is_signed: bool) -> None + Sign-, or zero-extend the number or SP delta value to full size. The initial value is considered to be of size WIDTH. + -ida_regfinder.reg_value_info_t.get_def_ea (method) - get_def_ea(self) -> ea_t +ida_regfinder.reg_value_info_t.get_def_ea(self) -> ida_idaapi.ea_t Return the defining address. -ida_regfinder.reg_value_info_t.get_def_itype (method) - get_def_itype(self) -> uint16 +ida_regfinder.reg_value_info_t.get_def_itype(self) -> "uint16" Return the defining instruction code (processor specific). -ida_regfinder.reg_value_info_t.get_num (method) - get_num(self) -> bool - Return the number if the value is a constant. - @see: is_num() +ida_regfinder.reg_value_info_t.get_num(self) -> bool + Return the number if the value is a constant. + -ida_regfinder.reg_value_info_t.get_spd (method) - get_spd(self) -> bool - Return the SP delta if the value depends on the stack pointer. - @see: is_spd() +ida_regfinder.reg_value_info_t.get_spd(self) -> bool + Return the SP delta if the value depends on the stack pointer. + -ida_regfinder.reg_value_info_t.have_all_vals_flag (method) - have_all_vals_flag(self, val_flags) -> bool +ida_regfinder.reg_value_info_t.has_any_vals_flag(self, val_flags: "uint16") -> bool + +ida_regfinder.reg_value_info_t.have_all_vals_flag(self, val_flags: "uint16") -> bool Check the given flag for each value. - - @param val_flags: (C++: uint16) -ida_regfinder.reg_value_info_t.is_all_vals_like_got (method) - is_all_vals_like_got(self) -> bool +ida_regfinder.reg_value_info_t.is_all_vals_like_got(self) -> bool -ida_regfinder.reg_value_info_t.is_all_vals_pc_based (method) - is_all_vals_pc_based(self) -> bool +ida_regfinder.reg_value_info_t.is_all_vals_pc_based(self) -> bool -ida_regfinder.reg_value_info_t.is_badinsn (method) - is_badinsn(self) -> bool +ida_regfinder.reg_value_info_t.is_any_vals_like_got(self) -> bool + +ida_regfinder.reg_value_info_t.is_any_vals_pc_based(self) -> bool + +ida_regfinder.reg_value_info_t.is_badinsn(self) -> bool Return 'true' if the value is unknown because of a bad insn. -ida_regfinder.reg_value_info_t.is_dead_end (method) - is_dead_end(self) -> bool +ida_regfinder.reg_value_info_t.is_dead_end(self) -> bool Return 'true' if the value is undefined because of a dead end. -ida_regfinder.reg_value_info_t.is_known (method) - is_known(self) -> bool +ida_regfinder.reg_value_info_t.is_known(self) -> bool Return 'true' if the value is known (i.e. it is a number or SP delta). -ida_regfinder.reg_value_info_t.is_num (method) - is_num(self) -> bool +ida_regfinder.reg_value_info_t.is_num(self) -> bool Return 'true' if the value is a constant. -ida_regfinder.reg_value_info_t.is_spd (method) - is_spd(self) -> bool +ida_regfinder.reg_value_info_t.is_spd(self) -> bool Return 'true' if the value depends on the stack pointer. -ida_regfinder.reg_value_info_t.is_special (method) - is_special(self) -> bool +ida_regfinder.reg_value_info_t.is_special(self) -> bool Return 'true' if the value requires special handling. -ida_regfinder.reg_value_info_t.is_unkfunc (method) - is_unkfunc(self) -> bool +ida_regfinder.reg_value_info_t.is_unkfunc(self) -> bool Return 'true' if the value is unknown from the function start. -ida_regfinder.reg_value_info_t.is_unkinsn (method) - is_unkinsn(self) -> bool +ida_regfinder.reg_value_info_t.is_unkinsn(self) -> bool Return 'true' if the value is unknown after executing the insn. -ida_regfinder.reg_value_info_t.is_unkloop (method) - is_unkloop(self) -> bool +ida_regfinder.reg_value_info_t.is_unkloop(self) -> bool Return 'true' if the value is unknown because it changes in a loop. -ida_regfinder.reg_value_info_t.is_unkmult (method) - is_unkmult(self) -> bool - Return 'true' if the value is unknown because the register has incompatible - values (a number and SP delta). +ida_regfinder.reg_value_info_t.is_unkmult(self) -> bool + Return 'true' if the value is unknown because the register has incompatible values (a number and SP delta). + -ida_regfinder.reg_value_info_t.is_unknown (method) - is_unknown(self) -> bool +ida_regfinder.reg_value_info_t.is_unknown(self) -> bool Return 'true' if the value is unknown. -ida_regfinder.reg_value_info_t.is_value_unique (method) - is_value_unique(self) -> bool +ida_regfinder.reg_value_info_t.is_unkvals(self) -> bool + Return 'true' if the value is unknown because the register has too many values. + + +ida_regfinder.reg_value_info_t.is_unkxref(self) -> bool + Return 'true' if the value is unknown because there are too many xrefs. + +ida_regfinder.reg_value_info_t.is_value_unique(self) -> bool Check that the value is unique. -ida_regfinder.reg_value_info_t.make_aborted (method) - make_aborted(bblk_ea) -> reg_value_info_t - Return the value after aborting. - @see: aborted() - - @param bblk_ea: (C++: ea_t) +ida_regfinder.reg_value_info_t.make_aborted(bblk_ea: ida_idaapi.ea_t) -> "reg_value_info_t" + Return the value after aborting. + -ida_regfinder.reg_value_info_t.make_badinsn (method) - make_badinsn(insn_ea) -> reg_value_info_t - Return the unknown value after a bad insn. - @see: is_badinsn() - - @param insn_ea: (C++: ea_t) +ida_regfinder.reg_value_info_t.make_badinsn(insn_ea: ida_idaapi.ea_t) -> "reg_value_info_t" + Return the unknown value after a bad insn. + -ida_regfinder.reg_value_info_t.make_dead_end (method) - make_dead_end(dead_end_ea) -> reg_value_info_t - Return the undefined value because of a dead end. - @see: is_dead_end() - - @param dead_end_ea: (C++: ea_t) +ida_regfinder.reg_value_info_t.make_dead_end(dead_end_ea: ida_idaapi.ea_t) -> "reg_value_info_t" + Return the undefined value because of a dead end. + -ida_regfinder.reg_value_info_t.make_initial_sp (method) - make_initial_sp(func_ea) -> reg_value_info_t - Return the value that is the initial stack pointer. - @see: is_spd() - - @param func_ea: (C++: ea_t) +ida_regfinder.reg_value_info_t.make_initial_sp(func_ea: ida_idaapi.ea_t) -> "reg_value_info_t" + Return the value that is the initial stack pointer. + -ida_regfinder.reg_value_info_t.make_num (method) - make_num(rval, insn, val_flags=0) -> reg_value_info_t - Return the value that is the RVAL number. - @see: is_num() +ida_regfinder.reg_value_info_t.make_num(*args) -> "reg_value_info_t" + This function has the following signatures: - @param rval: (C++: uval_t) - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param val_flags: (C++: uint16) + 0. make_num(rval: int, insn: const insn_t &, val_flags: uint16=0) -> reg_value_info_t + 1. make_num(rval: int, val_ea: ida_idaapi.ea_t, val_flags: uint16=0) -> reg_value_info_t - make_num(rval, val_ea, val_flags=0) -> reg_value_info_t + # 0: make_num(rval: int, insn: const insn_t &, val_flags: uint16=0) -> reg_value_info_t - @param rval: uval_t - @param val_ea: ea_t - @param val_flags: uint16 + Return the value that is the RVAL number. + + + # 1: make_num(rval: int, val_ea: ida_idaapi.ea_t, val_flags: uint16=0) -> reg_value_info_t + + Return the value that is the RVAL number. + -ida_regfinder.reg_value_info_t.make_unkfunc (method) - make_unkfunc(func_ea) -> reg_value_info_t - Return the unknown value from the function start. - @see: is_unkfunc() - - @param func_ea: (C++: ea_t) +ida_regfinder.reg_value_info_t.make_unkfunc(func_ea: ida_idaapi.ea_t) -> "reg_value_info_t" + Return the unknown value from the function start. + -ida_regfinder.reg_value_info_t.make_unkinsn (method) - make_unkinsn(insn) -> reg_value_info_t - Return the unknown value after executing the insn. - @see: is_unkinsn() - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) +ida_regfinder.reg_value_info_t.make_unkinsn(insn: "insn_t const &") -> "reg_value_info_t" + Return the unknown value after executing the insn. + -ida_regfinder.reg_value_info_t.make_unkloop (method) - make_unkloop(bblk_ea) -> reg_value_info_t - Return the unknown value if it changes in a loop. - @see: is_unkloop() - - @param bblk_ea: (C++: ea_t) +ida_regfinder.reg_value_info_t.make_unkloop(bblk_ea: ida_idaapi.ea_t) -> "reg_value_info_t" + Return the unknown value if it changes in a loop. + -ida_regfinder.reg_value_info_t.make_unkmult (method) - make_unkmult(bblk_ea) -> reg_value_info_t - Return the unknown value if the register has incompatible values. - @see: is_unkmult() - - @param bblk_ea: (C++: ea_t) +ida_regfinder.reg_value_info_t.make_unkmult(bblk_ea: ida_idaapi.ea_t) -> "reg_value_info_t" + Return the unknown value if the register has incompatible values. + -ida_regfinder.reg_value_info_t.neg (method) - neg(self, insn) +ida_regfinder.reg_value_info_t.make_unkvals(bblk_ea: ida_idaapi.ea_t) -> "reg_value_info_t" + Return the unknown value if the register has too many values. + + +ida_regfinder.reg_value_info_t.make_unkxref(bblk_ea: ida_idaapi.ea_t) -> "reg_value_info_t" + Return the unknown value if there are too many xrefs. + + +ida_regfinder.reg_value_info_t.movt(self, r: "reg_value_info_t", insn: "insn_t const &") -> None + Replace the top 16 bits with bottom 16 bits of R, leaving the bottom 16 bits untouched, save INSN as a defining instruction. + + +ida_regfinder.reg_value_info_t.neg(self, insn: "insn_t const &") -> None Negate the value, save INSN as a defining instruction. - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) -ida_regfinder.reg_value_info_t.set_aborted (method) - set_aborted(self, bblk_ea) - Set the value after aborting. - @see: aborted() - - @param bblk_ea: (C++: ea_t) +ida_regfinder.reg_value_info_t.set_aborted(self, bblk_ea: ida_idaapi.ea_t) -> None + Set the value after aborting. + -ida_regfinder.reg_value_info_t.set_badinsn (method) - set_badinsn(self, insn_ea) - Set the value to be unknown after a bad insn. - @see: is_badinsn() - - @param insn_ea: (C++: ea_t) +ida_regfinder.reg_value_info_t.set_all_vals_flag(self, val_flags: "uint16") -> None + Set the given flag for each value. -ida_regfinder.reg_value_info_t.set_dead_end (method) - set_dead_end(self, dead_end_ea) - Set the value to be undefined because of a dead end. - @see: is_dead_end() - - @param dead_end_ea: (C++: ea_t) +ida_regfinder.reg_value_info_t.set_all_vals_got_based(self) -> None -ida_regfinder.reg_value_info_t.set_num (method) - set_num(self, rval, insn, val_flags=0) - Set the value to be a number before an address. - @see: is_num() - - @param rval: (C++: uval_t) - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param val_flags: (C++: uint16) - - set_num(self, rvals, insn) - - @param rvals: uvalvec_t * - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - - set_num(self, rval, val_ea, val_flags=0) - - @param rval: uval_t - @param val_ea: ea_t - @param val_flags: uint16 +ida_regfinder.reg_value_info_t.set_all_vals_pc_based(self) -> None -ida_regfinder.reg_value_info_t.set_unkfunc (method) - set_unkfunc(self, func_ea) - Set the value to be unknown from the function start. - @see: is_unkfunc() - - @param func_ea: (C++: ea_t) +ida_regfinder.reg_value_info_t.set_badinsn(self, insn_ea: ida_idaapi.ea_t) -> None + Set the value to be unknown after a bad insn. + -ida_regfinder.reg_value_info_t.set_unkinsn (method) - set_unkinsn(self, insn) - Set the value to be unknown after executing the insn. - @see: is_unkinsn() - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) +ida_regfinder.reg_value_info_t.set_dead_end(self, dead_end_ea: ida_idaapi.ea_t) -> None + Set the value to be undefined because of a dead end. + -ida_regfinder.reg_value_info_t.set_unkloop (method) - set_unkloop(self, bblk_ea) - Set the value to be unknown because it changes in a loop. - @see: is_unkloop() +ida_regfinder.reg_value_info_t.set_num(self, *args) -> None + This function has the following signatures: - @param bblk_ea: (C++: ea_t) - -ida_regfinder.reg_value_info_t.set_unkmult (method) - set_unkmult(self, bblk_ea) - Set the value to be unknown because the register has incompatible values. - @see: is_unkmult() + 0. set_num(rval: int, insn: const insn_t &, val_flags: uint16=0) -> None + 1. set_num(rvals: uvalvec_t *, insn: const insn_t &) -> None + 2. set_num(rval: int, val_ea: ida_idaapi.ea_t, val_flags: uint16=0) -> None - @param bblk_ea: (C++: ea_t) - -ida_regfinder.reg_value_info_t.shift_left (method) - shift_left(self, r) - Shift the value left by R, do not change the defining instructions. - @note: This method do nothing for unknown values. + # 0: set_num(rval: int, insn: const insn_t &, val_flags: uint16=0) -> None - @param r: (C++: uval_t) - -ida_regfinder.reg_value_info_t.shift_right (method) - shift_right(self, r) - Shift the value right by R, do not change the defining instructions. - @note: This method do nothing for unknown values. + Set the value to be a number after executing an insn. + - @param r: (C++: uval_t) - -ida_regfinder.reg_value_info_t.sll (method) - sll(self, r, insn) - Shift the value left by R, save INSN as a defining instruction. - @note: Either THIS or R must have a single value. + # 1: set_num(rvals: uvalvec_t *, insn: const insn_t &) -> None - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t.slr (method) - slr(self, r, insn) - Shift the value right by R, save INSN as a defining instruction. - @note: Either THIS or R must have a single value. + Set the value to be numbers after executing an insn. + - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t.sub (method) - sub(self, r, insn) - Subtract R from the value, save INSN as a defining instruction. - @note: Either THIS or R must have a single value. + # 2: set_num(rval: int, val_ea: ida_idaapi.ea_t, val_flags: uint16=0) -> None - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) + Set the value to be a number before an address. + -ida_regfinder.reg_value_info_t.trunc_uval (method) - trunc_uval(self, pm) - Truncate the number to the application bitness. - @note: This method do nothing for non-number values. - - @param pm: (C++: const procmod_t &) procmod_t const & +ida_regfinder.reg_value_info_t.set_unkfunc(self, func_ea: ida_idaapi.ea_t) -> None + Set the value to be unknown from the function start. + -ida_regfinder.reg_value_info_t.vals_union (method) - vals_union(self, r) -> reg_value_info_t::set_compare_res_t - Add values from R into THIS ignoring duplicates. - @note: This method is the only way to get multiple values. +ida_regfinder.reg_value_info_t.set_unkinsn(self, insn: "insn_t const &") -> None + Set the value to be unknown after executing the insn. + + +ida_regfinder.reg_value_info_t.set_unkloop(self, bblk_ea: ida_idaapi.ea_t) -> None + Set the value to be unknown because it changes in a loop. + + +ida_regfinder.reg_value_info_t.set_unkmult(self, bblk_ea: ida_idaapi.ea_t) -> None + Set the value to be unknown because the register has incompatible values. + + +ida_regfinder.reg_value_info_t.set_unkvals(self, bblk_ea: ida_idaapi.ea_t) -> None + Set the value to be unknown because the register has too many values. + + +ida_regfinder.reg_value_info_t.set_unkxref(self, bblk_ea: ida_idaapi.ea_t) -> None + Set the value to be unknown because there are too many xrefs. + + +ida_regfinder.reg_value_info_t.shift_left(self, r: int) -> None + Shift the value left by R, do not change the defining instructions. + + +ida_regfinder.reg_value_info_t.shift_right(self, r: int) -> None + Shift the value right by R, do not change the defining instructions. + + +ida_regfinder.reg_value_info_t.sll(self, r: "reg_value_info_t", insn: "insn_t const &") -> None + Shift the value left by R, save INSN as a defining instruction. + + +ida_regfinder.reg_value_info_t.slr(self, r: "reg_value_info_t", insn: "insn_t const &") -> None + Shift the value right by R, save INSN as a defining instruction. + + +ida_regfinder.reg_value_info_t.sub(self, r: "reg_value_info_t", insn: "insn_t const &") -> None + Subtract R from the value, save INSN as a defining instruction. + + +ida_regfinder.reg_value_info_t.swap(self, r: "reg_value_info_t") -> None + +ida_regfinder.reg_value_info_t.trunc_uval(self, pm: "procmod_t") -> None + Truncate the number to the application bitness. + + +ida_regfinder.reg_value_info_t.vals_union(self, r: "reg_value_info_t") -> "reg_value_info_t::set_compare_res_t" + Add values from R into THIS ignoring duplicates. + @retval EQUAL: THIS is not changed @retval CONTAINS: THIS is not changed @retval CONTAINED: THIS is a copy of R @retval NOT_COMPARABLE: values from R are added to THIS - - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & -ida_regfinder.reg_value_info_t_make_aborted (function) - reg_value_info_t_make_aborted(bblk_ea) -> reg_value_info_t - - @param bblk_ea: ea_t - -ida_regfinder.reg_value_info_t_make_badinsn (function) - reg_value_info_t_make_badinsn(insn_ea) -> reg_value_info_t - - @param insn_ea: ea_t - -ida_regfinder.reg_value_info_t_make_dead_end (function) - reg_value_info_t_make_dead_end(dead_end_ea) -> reg_value_info_t - - @param dead_end_ea: ea_t - -ida_regfinder.reg_value_info_t_make_initial_sp (function) - reg_value_info_t_make_initial_sp(func_ea) -> reg_value_info_t - - @param func_ea: ea_t - -ida_regfinder.reg_value_info_t_make_num (function) - reg_value_info_t_make_num(rval, insn, val_flags=0) -> reg_value_info_t - - @param rval: uval_t - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param val_flags: uint16 - - reg_value_info_t_make_num(rval, val_ea, val_flags=0) -> reg_value_info_t - - @param rval: uval_t - @param val_ea: ea_t - @param val_flags: uint16 - -ida_regfinder.reg_value_info_t_make_unkfunc (function) - reg_value_info_t_make_unkfunc(func_ea) -> reg_value_info_t - - @param func_ea: ea_t - -ida_regfinder.reg_value_info_t_make_unkinsn (function) - reg_value_info_t_make_unkinsn(insn) -> reg_value_info_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t_make_unkloop (function) - reg_value_info_t_make_unkloop(bblk_ea) -> reg_value_info_t - - @param bblk_ea: ea_t - -ida_regfinder.reg_value_info_t_make_unkmult (function) - reg_value_info_t_make_unkmult(bblk_ea) -> reg_value_info_t - - @param bblk_ea: ea_t - -ida_search (module) +ida_search Middle-level search functions. - They all are controlled by Search flags + They all are controlled by Search flags + -ida_search.SEARCH_BRK (variable) +ida_search.SEARCH_BRK return BADADDR if the search was cancelled. -ida_search.SEARCH_CASE (variable) +ida_search.SEARCH_CASE case-sensitive search (case-insensitive otherwise) -ida_search.SEARCH_DOWN (variable) +ida_search.SEARCH_DEF + find_reg_access: search for a definition (write access) + +ida_search.SEARCH_DOWN search towards higher addresses -ida_search.SEARCH_IDENT (variable) - search for an identifier (text search). it means that the characters before and - after the match cannot be is_visible_char(). +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 (variable) - skip the starting address when searching. this bit is useful only for search(), - bin_search2(), find_reg_access(). find_.. functions skip the starting address - automatically. +ida_search.SEARCH_NEXT + skip the starting address when searching. this bit is useful only for search(), bin_search(), find_reg_access(). find_.. functions skip the starting address automatically. + -ida_search.SEARCH_NOBRK (variable) +ida_search.SEARCH_NOBRK do not test if the user clicked cancel to interrupt the search -ida_search.SEARCH_NOSHOW (variable) +ida_search.SEARCH_NOSHOW do not display the search progress/refresh screen -ida_search.SEARCH_REGEX (variable) +ida_search.SEARCH_REGEX regular expressions in search string (supported only for the text search) -ida_search.SEARCH_UP (variable) +ida_search.SEARCH_UP search towards lower addresses -ida_search.SEARCH_USESEL (variable) - query the UI for a possible current selection to limit the search to +ida_search.SEARCH_USE + find_reg_access: search for a use (read access) -ida_search.find_binary (function) - find_binary(arg1, arg2, arg3, arg4, arg5) -> ea_t - Deprecated. Please use ida_bytes.bin_search() instead. - - @param arg1: ea_t - @param arg2: ea_t - @param arg3: char const * - @param arg4: int - @param arg5: int +ida_search.SEARCH_USESEL + query the UI for a possible current selection to limit the search to + -ida_search.find_code (function) - find_code(ea, sflag) -> ea_t - Find next code address. - - @param ea: (C++: ea_t) - @param sflag: (C++: int) +ida_search.find_code(ea: ida_idaapi.ea_t, sflag: int) -> ida_idaapi.ea_t -ida_search.find_data (function) - find_data(ea, sflag) -> ea_t - Find next data address. - - @param ea: (C++: ea_t) - @param sflag: (C++: int) +ida_search.find_data(ea: ida_idaapi.ea_t, sflag: int) -> ida_idaapi.ea_t -ida_search.find_defined (function) - 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_defined(ea: ida_idaapi.ea_t, sflag: int) -> ida_idaapi.ea_t -ida_search.find_error (function) - find_error(ea, sflag) -> ea_t - Find next error or problem. - - @param ea: (C++: ea_t) - @param sflag: (C++: int) +ida_search.find_error(ea: ida_idaapi.ea_t, sflag: int) -> "int *" -ida_search.find_imm (function) - find_imm(ea, sflag, search_value) -> ea_t - Find next immediate operand with the given value. - - @param ea: (C++: ea_t) - @param sflag: (C++: int) - @param search_value: (C++: uval_t) +ida_search.find_imm(ea: ida_idaapi.ea_t, sflag: int, search_value: int) -> "int *" -ida_search.find_not_func (function) - 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_not_func(ea: ida_idaapi.ea_t, sflag: int) -> ida_idaapi.ea_t -ida_search.find_notype (function) - 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_notype(ea: ida_idaapi.ea_t, sflag: int) -> "int *" -ida_search.find_reg_access (function) - find_reg_access(out, start_ea, end_ea, regname, sflag) -> ea_t - Find access to a register. - - @param out: (C++: struct reg_access_t *) pointer to the output buffer. must be non-null. upon success - contains info about the found register. upon failed search for a - read access out->range contains the info about the non-redefined - parts of the register. - @param start_ea: (C++: ea_t) starting address - @param end_ea: (C++: ea_t) ending address. BADADDR means that the end limit is missing. - otherwise, if the search direction is SEARCH_UP, END_EA must be - lower than START_EA. - @param regname: (C++: const char *) the register to search for. - @param sflag: (C++: int) combination of Search flags bits. - @note: This function does not care about the control flow and probes all - instructions in the specified range, starting from START_EA. Only direct - references to registers are detected. Function calls and system traps are - ignored. - @return: the found address. BADADDR if not found or error. +ida_search.find_reg_access(out: "reg_access_t", start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, regname: str, sflag: int) -> ida_idaapi.ea_t -ida_search.find_suspop (function) - find_suspop(ea, sflag) -> ea_t - Find next suspicious operand. - - @param ea: (C++: ea_t) - @param sflag: (C++: int) +ida_search.find_suspop(ea: ida_idaapi.ea_t, sflag: int) -> "int *" -ida_search.find_text (function) - 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 *) char const * - @param sflag: (C++: int) +ida_search.find_text(start_ea: ida_idaapi.ea_t, y: int, x: int, ustr: str, sflag: int) -> ida_idaapi.ea_t -ida_search.find_unknown (function) - find_unknown(ea, sflag) -> ea_t - Find next unexplored address. - - @param ea: (C++: ea_t) - @param sflag: (C++: int) +ida_search.find_unknown(ea: ida_idaapi.ea_t, sflag: int) -> ida_idaapi.ea_t -ida_search.search_down (function) - search_down(sflag) -> bool +ida_search.search_down(sflag: int) -> bool Is the SEARCH_DOWN bit set? - - @param sflag: (C++: int) -ida_segment (module) +ida_segment Functions that deal with segments. - IDA requires that all program addresses belong to segments (each address must - belong to exactly one segment). The situation when an address doesn't belong to - any segment is allowed as a temporary situation only when the user changes - program segmentation. Bytes outside a segment can't be converted to - instructions, have names, comments, etc. Each segment has its start address, - ending address and represents a contiguous range of addresses. There might be - unused holes between segments. - - Each segment has its unique segment selector. This selector is used to - distinguish the segment from other segments. For 16-bit programs the selector is - equal to the segment base paragraph. For 32-bit programs there is special array - to translate the selectors to the segment base paragraphs. A selector is a 32/64 - bit value. - - The segment base paragraph determines the offsets in the segment. If the start - address of the segment == (base << 4) then the first offset in the segment will - be 0. The start address should be higher or equal to (base << 4). We will call - the offsets in the segment 'virtual addresses'. So, the virtual address of the - first byte of the segment is - + IDA requires that all program addresses belong to segments (each address must belong to exactly one segment). The situation when an address doesn't belong to any segment is allowed as a temporary situation only when the user changes program segmentation. Bytes outside a segment can't be converted to instructions, have names, comments, etc. Each segment has its start address, ending address and represents a contiguous range of addresses. There might be unused holes between segments. + Each segment has its unique segment selector. This selector is used to distinguish the segment from other segments. For 16-bit programs the selector is equal to the segment base paragraph. For 32-bit programs there is special array to translate the selectors to the segment base paragraphs. A selector is a 32/64 bit value. + The segment base paragraph determines the offsets in the segment. If the start address of the segment == (base << 4) then the first offset in the segment will be 0. The start address should be higher or equal to (base << 4). We will call the offsets in the segment 'virtual addresses'. So, the virtual address of the first byte of the segment is (start address of segment - segment base linear address) - - For IBM PC, the virtual address corresponds to the offset part of the address. - For other processors (Z80, for example), virtual addresses correspond to Z80 - addresses and linear addresses are used only internally. For MS Windows programs - the segment base paragraph is 0 and therefore the segment virtual addresses are - equal to linear addresses. + For IBM PC, the virtual address corresponds to the offset part of the address. For other processors (Z80, for example), virtual addresses correspond to Z80 addresses and linear addresses are used only internally. For MS Windows programs the segment base paragraph is 0 and therefore the segment virtual addresses are equal to linear addresses. + -ida_segment.ADDSEG_FILLGAP (variable) - 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_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 (variable) - 'name' and 'sclass' are given in the IDB encoding; non-ASCII bytes will be - decoded accordingly +ida_segment.ADDSEG_IDBENC + 'name' and 'sclass' are given in the IDB encoding; non-ASCII bytes will be decoded accordingly + -ida_segment.ADDSEG_NOAA (variable) +ida_segment.ADDSEG_NOAA do not mark new segment for auto-analysis -ida_segment.ADDSEG_NOSREG (variable) - set all default segment register values to BADSEL (undefine all default segment - registers) +ida_segment.ADDSEG_NOSREG + set all default segment register values to BADSEL (undefine all default segment registers) + -ida_segment.ADDSEG_NOTRUNC (variable) - don't truncate the new segment at the beginning of the next segment if they - overlap. destroy/truncate old segments instead. +ida_segment.ADDSEG_NOTRUNC + don't truncate the new segment at the beginning of the next segment if they overlap. destroy/truncate old segments instead. + -ida_segment.ADDSEG_OR_DIE (variable) +ida_segment.ADDSEG_OR_DIE qexit() if can't add a segment -ida_segment.ADDSEG_QUIET (variable) +ida_segment.ADDSEG_QUIET silent mode, no "Adding segment..." in the messages window -ida_segment.ADDSEG_SPARSE (variable) - use sparse storage method for the new ranges of the created segment. please note - that the ranges that were already enabled before creating the segment will not - change their storage type. +ida_segment.ADDSEG_SPARSE + use sparse storage method for the new ranges of the created segment. please note that the ranges that were already enabled before creating the segment will not change their storage type. + -ida_segment.CSS_BREAK (variable) +ida_segment.CSS_BREAK memory reading process stopped by user -ida_segment.CSS_NODBG (variable) +ida_segment.CSS_NODBG debugger is not running -ida_segment.CSS_NOMEM (variable) - not enough memory (might be because the segment is too big) +ida_segment.CSS_NOMEM + not enough memory (might be because the segment is too big) + -ida_segment.CSS_NORANGE (variable) +ida_segment.CSS_NORANGE could not find corresponding memory range -ida_segment.CSS_OK (variable) +ida_segment.CSS_OK ok -ida_segment.MAX_GROUPS (variable) +ida_segment.MAX_GROUPS max number of segment groups -ida_segment.MAX_SEGM_TRANSLATIONS (variable) +ida_segment.MAX_SEGM_TRANSLATIONS max number of segment translations -ida_segment.MOVE_SEGM_CHUNK (variable) +ida_segment.MOVE_SEGM_CHUNK Too many chunks are defined, can't move. -ida_segment.MOVE_SEGM_DEBUG (variable) +ida_segment.MOVE_SEGM_DEBUG Debugger segments cannot be moved. -ida_segment.MOVE_SEGM_IDP (variable) +ida_segment.MOVE_SEGM_IDP IDP module forbids moving the segment. -ida_segment.MOVE_SEGM_INVAL (variable) +ida_segment.MOVE_SEGM_INVAL Invalid argument (delta/target does not fit the address space) -ida_segment.MOVE_SEGM_LOADER (variable) +ida_segment.MOVE_SEGM_LOADER The segment has been moved but the loader complained. -ida_segment.MOVE_SEGM_MAPPING (variable) +ida_segment.MOVE_SEGM_MAPPING Memory mapping ranges of addresses hinder segment movement. -ida_segment.MOVE_SEGM_ODD (variable) +ida_segment.MOVE_SEGM_ODD Cannot move segments by an odd number of bytes. -ida_segment.MOVE_SEGM_OK (variable) +ida_segment.MOVE_SEGM_OK all ok -ida_segment.MOVE_SEGM_ORPHAN (variable) +ida_segment.MOVE_SEGM_ORPHAN Orphan bytes hinder segment movement. -ida_segment.MOVE_SEGM_PARAM (variable) +ida_segment.MOVE_SEGM_PARAM The specified segment does not exist. -ida_segment.MOVE_SEGM_ROOM (variable) +ida_segment.MOVE_SEGM_ROOM Not enough free room at the target address. -ida_segment.MOVE_SEGM_SOURCEFILES (variable) +ida_segment.MOVE_SEGM_SOURCEFILES Source files ranges of addresses hinder segment movement. -ida_segment.MSF_FIXONCE (variable) - call loader only once with the special calling method. valid for - rebase_program(). see loader_t::move_segm. +ida_segment.MSF_FIXONCE + call loader only once with the special calling method. valid for rebase_program(). see loader_t::move_segm. + -ida_segment.MSF_LDKEEP (variable) +ida_segment.MSF_LDKEEP keep the loader in the memory (optimization) -ida_segment.MSF_NETNODES (variable) - move netnodes instead of changing inf.netdelta (this is slower); valid for - rebase_program() +ida_segment.MSF_NETNODES + move netnodes instead of changing inf.netdelta (this is slower); valid for rebase_program() + -ida_segment.MSF_NOFIX (variable) +ida_segment.MSF_NOFIX don't call the loader to fix relocations -ida_segment.MSF_PRIORITY (variable) - loader segments will overwrite any existing debugger segments when moved. valid - for move_segm() +ida_segment.MSF_PRIORITY + loader segments will overwrite any existing debugger segments when moved. valid for move_segm() + -ida_segment.MSF_SILENT (variable) +ida_segment.MSF_SILENT don't display a "please wait" box on the screen -ida_segment.SEGMOD_KEEP (variable) +ida_segment.SEGMOD_KEEP keep information (code & data, etc) -ida_segment.SEGMOD_KEEP0 (variable) +ida_segment.SEGMOD_KEEP0 flag for internal use, don't set -ida_segment.SEGMOD_KEEPSEL (variable) +ida_segment.SEGMOD_KEEPSEL do not try to delete unused selector -ida_segment.SEGMOD_KILL (variable) +ida_segment.SEGMOD_KILL disable addresses if segment gets shrinked or deleted -ida_segment.SEGMOD_NOMOVE (variable) - don't move info from the start of segment to the new start address (for - set_segm_start()) +ida_segment.SEGMOD_NOMOVE + don't move info from the start of segment to the new start address (for set_segm_start()) + -ida_segment.SEGMOD_SILENT (variable) +ida_segment.SEGMOD_SILENT be silent -ida_segment.SEGMOD_SPARSE (variable) - use sparse storage if extending the segment (for set_segm_start(), - set_segm_end()) +ida_segment.SEGMOD_SPARSE + use sparse storage if extending the segment (for set_segm_start(), set_segm_end()) + -ida_segment.SEGPERM_EXEC (variable) +ida_segment.SEGPERM_EXEC Execute. -ida_segment.SEGPERM_READ (variable) +ida_segment.SEGPERM_MAXVAL + Execute + Write + Read. + +ida_segment.SEGPERM_READ Read. -ida_segment.SEGPERM_WRITE (variable) +ida_segment.SEGPERM_WRITE Write. -ida_segment.SEG_ABSSYM (variable) +ida_segment.SEG_ABSSYM * segment with definitions of absolute symbols -ida_segment.SEG_BSS (variable) +ida_segment.SEG_BSS uninitialized segment -ida_segment.SEG_CODE (variable) +ida_segment.SEG_CODE code segment -ida_segment.SEG_COMM (variable) +ida_segment.SEG_COMM * segment with communal definitions -ida_segment.SEG_DATA (variable) +ida_segment.SEG_DATA data segment -ida_segment.SEG_GRP (variable) +ida_segment.SEG_GRP * group of segments -ida_segment.SEG_IMEM (variable) +ida_segment.SEG_IMEM internal processor memory & sfr (8051) -ida_segment.SEG_NORM (variable) +ida_segment.SEG_IMP + java: implementation segment + +ida_segment.SEG_MAX_BITNESS_CODE + Maximum segment bitness value. + +ida_segment.SEG_MAX_SEGTYPE_CODE + maximum value segment type can take + +ida_segment.SEG_NORM unknown type, no assumptions -ida_segment.SEG_NULL (variable) +ida_segment.SEG_NULL zero-length segment -ida_segment.SEG_UNDF (variable) +ida_segment.SEG_UNDF undefined segment type (not used) -ida_segment.SEG_XTRN (variable) - * segment with 'extern' definitions. no instructions are allowed +ida_segment.SEG_XTRN + * segment with 'extern' definitions. no instructions are allowed + -ida_segment.SFL_COMORG (variable) - IDP dependent field (IBM PC: if set, ORG directive is not commented out) +ida_segment.SFL_COMORG + IDP dependent field (IBM PC: if set, ORG directive is not commented out) + -ida_segment.SFL_DEBUG (variable) - Is the segment created for the debugger?. Such segments are temporary and do not - have permanent flags. +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 (variable) - Header segment (do not create offsets to it in the disassembly) +ida_segment.SFL_HEADER + Header segment (do not create offsets to it in the disassembly) + -ida_segment.SFL_HIDDEN (variable) - Is the segment hidden? +ida_segment.SFL_HIDDEN + Is the segment hidden? + -ida_segment.SFL_HIDETYPE (variable) - Hide segment type (do not print it in the listing) +ida_segment.SFL_HIDETYPE + Hide segment type (do not print it in the listing) + -ida_segment.SFL_LOADER (variable) - Is the segment created by the loader? +ida_segment.SFL_LOADER + Is the segment created by the loader? + -ida_segment.SFL_OBOK (variable) - Orgbase is present? (IDP dependent field) +ida_segment.SFL_OBOK + Orgbase is present? (IDP dependent field) + -ida_segment.SNAP_ALL_SEG (variable) +ida_segment.SNAP_ALL_SEG Take a snapshot of all segments. -ida_segment.SNAP_CUR_SEG (variable) +ida_segment.SNAP_CUR_SEG Take a snapshot of current segment. -ida_segment.SNAP_LOAD_SEG (variable) +ida_segment.SNAP_LOAD_SEG Take a snapshot of loader segments. -ida_segment.SREG_NUM (variable) +ida_segment.SREG_NUM Maximum number of segment registers is 16 (see segregs.hpp) -ida_segment.add_segm (function) - 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: (C++: ea_t) segment base paragraph. if paragraph can't fit in 16bit, then a new - selector is allocated and mapped to the paragraph. - @param start: (C++: ea_t) start address of the segment. if start==BADADDR then start <- - to_ea(para,0). - @param end: (C++: ea_t) 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. - @param name: (C++: const char *) name of new segment. may be nullptr - @param sclass: (C++: const char *) class of the segment. may be nullptr. type of the new segment is - modified if class is one of predefined names: +ida_segment.add_segm(para: ida_idaapi.ea_t, start: ida_idaapi.ea_t, end: ida_idaapi.ea_t, name: str, sclass: str, flags: int = 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. + @param start: start address of the segment. if start==BADADDR then start <- to_ea(para,0). + @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. + @param name: name of new segment. may be nullptr + @param sclass: class of the segment. may be nullptr. type of the new segment is modified if class is one of predefined names: * "CODE" -> SEG_CODE * "DATA" -> SEG_DATA * "CONST" -> SEG_DATA @@ -56653,11041 +38704,7688 @@ ida_segment.add_segm (function) * "XTRN" -> SEG_XTRN * "COMM" -> SEG_COMM * "ABS" -> SEG_ABSSYM - @param flags: (C++: int) Add segment flags + @param flags: Add segment flags @retval 1: ok @retval 0: failed, a warning message is displayed -ida_segment.add_segm_ex (function) - add_segm_ex(NONNULL_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 NONNULL_s: (C++: segment_t *) - @param name: (C++: const char *) name of new segment. may be nullptr. if specified, the segment is - immediately renamed - @param sclass: (C++: const char *) class of the segment. may be nullptr. if specified, the segment - class is immediately changed - @param flags: (C++: int) Add segment flags +ida_segment.add_segm_ex(NONNULL_s: "segment_t", name: str, sclass: str, flags: int) -> 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 name: name of new segment. may be nullptr. if specified, the segment is immediately renamed + @param sclass: class of the segment. may be nullptr. if specified, the segment class is immediately changed + @param flags: Add segment flags @retval 1: ok @retval 0: failed, a warning message is displayed -ida_segment.add_segment_translation (function) - add_segment_translation(segstart, mappedseg) -> bool - Add segment translation. - - @param segstart: (C++: ea_t) start address of the segment to add translation to - @param mappedseg: (C++: ea_t) start address of the overlayed segment +ida_segment.add_segment_translation(segstart: ida_idaapi.ea_t, mappedseg: ida_idaapi.ea_t) -> bool + Add segment translation. + + @param segstart: start address of the segment to add translation to + @param mappedseg: start address of the overlayed segment @retval 1: ok @retval 0: too many translations or bad segstart -ida_segment.allocate_selector (function) - 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: (C++: ea_t) a new segment base paragraph - @return: the allocated selector number +ida_segment.allocate_selector(segbase: ida_idaapi.ea_t) -> "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 + @returns the allocated selector number -ida_segment.change_segment_status (function) - 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: (C++: segment_t *) segment to modify - @param is_deb_segm: (C++: bool) new status of the segment - @return: Change segment status result codes +ida_segment.change_segment_status(s: "segment_t", is_deb_segm: bool) -> 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 + @param is_deb_segm: new status of the segment + @returns Change segment status result codes -ida_segment.del_segm (function) - del_segm(ea, flags) -> bool - Delete a segment. - - @param ea: (C++: ea_t) any address belonging to the segment - @param flags: (C++: int) Segment modification flags +ida_segment.del_segm(ea: ida_idaapi.ea_t, flags: int) -> bool + Delete a segment. + + @param ea: any address belonging to the segment + @param flags: Segment modification flags @retval 1: ok @retval 0: failed, no segment at 'ea'. -ida_segment.del_segment_translations (function) - del_segment_translations(segstart) - Delete the translation list - - @param segstart: (C++: ea_t) start address of the segment to delete translation list +ida_segment.del_segment_translations(segstart: ida_idaapi.ea_t) -> None + Delete the translation list + + @param segstart: start address of the segment to delete translation list -ida_segment.del_selector (function) - 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: (C++: sel_t) number of selector to remove from the translation table +ida_segment.del_selector(selector: "sel_t") -> None + 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 -ida_segment.find_free_selector (function) - find_free_selector() -> sel_t - Find first unused selector. - - @return: a number >= 1 +ida_segment.find_free_selector() -> "sel_t" + Find first unused selector. + + @returns a number >= 1 -ida_segment.find_selector (function) - find_selector(base) -> sel_t - Find a selector that has mapping to the specified paragraph. - - @param base: (C++: ea_t) paragraph to search in the translation table - @return: selector value or base +ida_segment.find_selector(base: ida_idaapi.ea_t) -> "sel_t" + Find a selector that has mapping to the specified paragraph. + + @param base: paragraph to search in the translation table + @returns selector value or base -ida_segment.get_defsr (function) - get_defsr(s, reg) -> sel_t +ida_segment.get_defsr(s, reg) Deprecated, use instead: - value = s.defsr[reg] - - @param s: segment_t * - @param reg: int + value = s.defsr[reg] -ida_segment.get_first_seg (function) - get_first_seg() -> segment_t +ida_segment.get_first_seg() -> "segment_t *" Get pointer to the first segment. -ida_segment.get_group_selector (function) - get_group_selector(grpsel) -> sel_t - Get common selector for a group of segments. - - @param grpsel: (C++: sel_t) selector of group segment - @return: common selector of the group or 'grpsel' if no such group is found +ida_segment.get_group_selector(grpsel: "sel_t") -> "sel_t" + Get common selector for a group of segments. + + @param grpsel: selector of group segment + @returns common selector of the group or 'grpsel' if no such group is found -ida_segment.get_last_seg (function) - get_last_seg() -> segment_t +ida_segment.get_last_seg() -> "segment_t *" Get pointer to the last segment. -ida_segment.get_next_seg (function) - get_next_seg(ea) -> segment_t +ida_segment.get_next_seg(ea: ida_idaapi.ea_t) -> "segment_t *" Get pointer to the next segment. - - @param ea: (C++: ea_t) -ida_segment.get_prev_seg (function) - get_prev_seg(ea) -> segment_t +ida_segment.get_prev_seg(ea: ida_idaapi.ea_t) -> "segment_t *" Get pointer to the previous segment. - - @param ea: (C++: ea_t) -ida_segment.get_segm_base (function) - 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: (C++: const segment_t *) pointer to segment - @return: 0 if s == nullptr, otherwise segment base linear address +ida_segment.get_segm_base(s: "segment_t") -> ida_idaapi.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 + @returns 0 if s == nullptr, otherwise segment base linear address -ida_segment.get_segm_by_name (function) - 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: (C++: const char *) segment name. may be nullptr. - @return: nullptr or pointer to segment structure +ida_segment.get_segm_by_name(name: str) -> "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 nullptr. + @returns nullptr or pointer to segment structure -ida_segment.get_segm_by_sel (function) - 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: (C++: sel_t) a segment with the specified selector will be returned - @return: pointer to segment or nullptr +ida_segment.get_segm_by_sel(selector: "sel_t") -> "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 + @returns pointer to segment or nullptr -ida_segment.get_segm_class (function) - get_segm_class(s) -> str - Get segment class. Segment class is arbitrary text (max 8 characters). - - @param s: (C++: const segment_t *) pointer to segment - @return: size of segment class (-1 if s==nullptr or bufsize<=0) +ida_segment.get_segm_class(s: "segment_t") -> str + Get segment class. Segment class is arbitrary text (max 8 characters). + + @param s: pointer to segment + @returns size of segment class (-1 if s==nullptr or bufsize<=0) -ida_segment.get_segm_name (function) - get_segm_name(s, flags=0) -> str - Get true segment name by pointer to segment. - - @param s: (C++: const segment_t *) pointer to segment - @param flags: (C++: int) 0-return name as is; 1-substitute bad symbols with _ 1 corresponds - to GN_VISIBLE - @return: size of segment name (-1 if s==nullptr) +ida_segment.get_segm_name(s: "segment_t", flags: int = 0) -> str + Get true segment name by pointer to segment. + + @param s: pointer to segment + @param flags: 0-return name as is; 1-substitute bad symbols with _ 1 corresponds to GN_VISIBLE + @returns size of segment name (-1 if s==nullptr) -ida_segment.get_segm_num (function) - get_segm_num(ea) -> int - Get number of segment by address. - - @param ea: (C++: ea_t) linear address belonging to the segment - @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_num(ea: ida_idaapi.ea_t) -> int + Get number of segment by address. + + @param ea: linear address belonging to the segment + @returns -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 (function) - 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: (C++: const segment_t *) pointer to segment - @return: 0 if s == nullptr, the segment base paragraph +ida_segment.get_segm_para(s: "segment_t") -> ida_idaapi.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 + @returns 0 if s == nullptr, the segment base paragraph -ida_segment.get_segm_qty (function) - get_segm_qty() -> int +ida_segment.get_segm_qty() -> int Get number of segments. -ida_segment.get_segment_alignment (function) - 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_alignment(align: "uchar") -> str + Get text representation of segment alignment code. + + @returns text digestable by IBM PC assembler. -ida_segment.get_segment_cmt (function) - get_segment_cmt(s, repeatable) -> str - Get segment comment. - - @param s: (C++: const segment_t *) pointer to segment structure - @param repeatable: (C++: bool) 0: get regular comment. 1: get repeatable comment. - @return: size of comment or -1 +ida_segment.get_segment_cmt(s: "segment_t", repeatable: bool) -> str + Get segment comment. + + @param s: pointer to segment structure + @param repeatable: 0: get regular comment. 1: get repeatable comment. + @returns size of comment or -1 -ida_segment.get_segment_combination (function) - 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_combination(comb: "uchar") -> str + Get text representation of segment combination code. + + @returns text digestable by IBM PC assembler. -ida_segment.get_segment_translations (function) - get_segment_translations(transmap, segstart) -> ssize_t - Get segment translation list. - - @param transmap: (C++: eavec_t *) vector of segment start addresses for the translation list - @param segstart: (C++: ea_t) start address of the segment to get information about - @return: -1 if no translation list or bad segstart. otherwise returns size of - translation list. +ida_segment.get_segment_translations(transmap: "eavec_t *", segstart: ida_idaapi.ea_t) -> "ssize_t" + Get segment translation list. + + @param transmap: vector of segment start addresses for the translation list + @param segstart: start address of the segment to get information about + @returns -1 if no translation list or bad segstart. otherwise returns size of translation list. -ida_segment.get_selector_qty (function) - get_selector_qty() -> size_t +ida_segment.get_selector_qty() -> "size_t" Get number of defined selectors. -ida_segment.get_visible_segm_name (function) - get_visible_segm_name(s) -> str - Get segment name by pointer to segment. - - @param s: (C++: const segment_t *) pointer to segment - @return: size of segment name (-1 if s==nullptr) +ida_segment.get_visible_segm_name(s: "segment_t") -> str + Get segment name by pointer to segment. + + @param s: pointer to segment + @returns size of segment name (-1 if s==nullptr) -ida_segment.getn_selector (function) - getn_selector(n) -> bool +ida_segment.getn_selector(n: int) -> "sel_t *, ea_t *" Get description of selector (0..get_selector_qty()-1) - - @param n: (C++: int) -ida_segment.getnseg (function) - getnseg(n) -> segment_t - Get pointer to segment by its number. - @warning: Obsoleted because it can slow down the debugger (it has to refresh the - whole memory segmentation to calculate the correct answer) - - @param n: (C++: int) segment number in the range (0..get_segm_qty()-1) - @return: nullptr or pointer to segment structure +ida_segment.getnseg(n: int) -> "segment_t *" + Get pointer to segment by its number. + + @param n: segment number in the range (0..get_segm_qty()-1) + @returns nullptr or pointer to segment structure -ida_segment.getseg (function) - getseg(ea) -> segment_t - Get pointer to segment by linear address. - - @param ea: (C++: ea_t) linear address belonging to the segment - @return: nullptr or pointer to segment structure +ida_segment.getseg(ea: ida_idaapi.ea_t) -> "segment_t *" + Get pointer to segment by linear address. + + @param ea: linear address belonging to the segment + @returns nullptr or pointer to segment structure -ida_segment.is_finally_visible_segm (function) - is_finally_visible_segm(s) -> bool +ida_segment.is_finally_visible_segm(s: "segment_t") -> bool See SFL_HIDDEN, SCF_SHHID_SEGM. - - @param s: (C++: segment_t *) -ida_segment.is_miniidb (function) - 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_miniidb() -> bool + Is the database a miniidb created by the debugger?. + + @returns true if the database contains no segments or only debugger segments -ida_segment.is_segm_locked (function) - is_segm_locked(segm) -> bool +ida_segment.is_segm_locked(segm: "segment_t") -> bool Is a segment pointer locked? - - @param segm: (C++: const segment_t *) segment_t const * -ida_segment.is_spec_ea (function) - 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: (C++: ea_t) linear address +ida_segment.is_spec_ea(ea: ida_idaapi.ea_t) -> bool + Does the address belong to a segment with a special type?. (SEG_XTRN, SEG_GRP, SEG_ABSSYM, SEG_COMM) + + @param ea: linear address -ida_segment.is_spec_segm (function) - 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_spec_segm(seg_type: "uchar") -> bool + Has segment a special type?. (SEG_XTRN, SEG_GRP, SEG_ABSSYM, SEG_COMM) + -ida_segment.is_visible_segm (function) - is_visible_segm(s) -> bool +ida_segment.is_visible_segm(s: "segment_t") -> bool See SFL_HIDDEN. - - @param s: (C++: segment_t *) -ida_segment.lock_segm (function) - 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 *) segment_t const * - @param lock: (C++: bool) +ida_segment.lock_segm(segm: "segment_t", lock: bool) -> None + Lock segment pointer Locked pointers are guaranteed to remain valid until they are unlocked. Ranges with locked pointers cannot be deleted or moved. + -ida_segment.lock_segment (class) - Proxy of C++ lock_segment class. +ida_segment.lock_segment -ida_segment.lock_segment.__init__ (method) - __init__(self, _segm) -> lock_segment - - @param _segm: segment_t const * +ida_segment.lock_segment.__init__(self, _segm: "segment_t") -ida_segment.move_segm (function) - move_segm(s, to, flags=0) -> move_segm_code_t - This function moves all information to the new address. It fixes up address - sensitive information in the kernel. The total effect is equal to reloading the - segment to the target address. For the file format dependent address sensitive - information, loader_t::move_segm is called. Also IDB notification event - idb_event::segm_moved is called. - - @param s: (C++: segment_t *) segment to move - @param to: (C++: ea_t) new segment start address - @param flags: (C++: int) Move segment flags - @return: Move segment result codes +ida_segment.move_segm(s: "segment_t", to: ida_idaapi.ea_t, flags: int = 0) -> "move_segm_code_t" + This function moves all information to the new address. It fixes up address sensitive information in the kernel. The total effect is equal to reloading the segment to the target address. For the file format dependent address sensitive information, loader_t::move_segm is called. Also IDB notification event idb_event::segm_moved is called. + + @param s: segment to move + @param to: new segment start address + @param flags: Move segment flags + @returns Move segment result codes -ida_segment.move_segm_start (function) - 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. - @note: this function never disables addresses. - - @param ea: (C++: ea_t) any address belonging to the segment - @param newstart: (C++: ea_t) new start address of the segment note that segment start - address should be higher than segment base linear address. - @param mode: (C++: int) 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) +ida_segment.move_segm_start(ea: ida_idaapi.ea_t, newstart: ida_idaapi.ea_t, mode: int) -> 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. + + @param ea: any address belonging to the segment + @param newstart: new start address of the segment note that segment start address should be higher than segment base linear address. + @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) @retval 1: ok @retval 0: failed, a warning message is displayed -ida_segment.move_segm_strerror (function) - move_segm_strerror(code) -> char const * +ida_segment.move_segm_strerror(code: "move_segm_code_t") -> str Return string describing error MOVE_SEGM_... code. - - @param code: (C++: move_segm_code_t) enum move_segm_code_t -ida_segment.rebase_program (function) - rebase_program(delta, flags) -> int - Rebase the whole program by 'delta' bytes. - - @param delta: (C++: adiff_t) number of bytes to move the program - @param flags: (C++: int) Move segment flags it is recommended to use MSF_FIXONCE so that - the loader takes care of global variables it stored in the - database - @return: Move segment result codes +ida_segment.rebase_program(delta: "PyObject *", flags: int) -> int + Rebase the whole program by 'delta' bytes. + + @param delta: number of bytes to move the program + @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 + @returns Move segment result codes -ida_segment.saAbs (variable) +ida_segment.saAbs Absolute segment. -ida_segment.saGroup (variable) +ida_segment.saGroup Segment group. -ida_segment.saRel1024Bytes (variable) +ida_segment.saRel1024Bytes 1024 bytes -ida_segment.saRel128Bytes (variable) +ida_segment.saRel128Bytes 128 bytes -ida_segment.saRel2048Bytes (variable) +ida_segment.saRel2048Bytes 2048 bytes -ida_segment.saRel32Bytes (variable) +ida_segment.saRel32Bytes 32 bytes -ida_segment.saRel4K (variable) - This value is used by the PharLap OMF for page (4K) alignment. It is not - supported by LINK. +ida_segment.saRel4K + This value is used by the PharLap OMF for page (4K) alignment. It is not supported by LINK. + -ida_segment.saRel512Bytes (variable) +ida_segment.saRel512Bytes 512 bytes -ida_segment.saRel64Bytes (variable) +ida_segment.saRel64Bytes 64 bytes -ida_segment.saRelByte (variable) +ida_segment.saRelByte Relocatable, byte aligned. -ida_segment.saRelDble (variable) - Relocatable, aligned on a double word (4-byte) boundary. +ida_segment.saRelDble + Relocatable, aligned on a double word (4-byte) boundary. + -ida_segment.saRelPage (variable) +ida_segment.saRelPage Relocatable, aligned on 256-byte boundary. -ida_segment.saRelPara (variable) +ida_segment.saRelPara Relocatable, paragraph (16-byte) aligned. -ida_segment.saRelQword (variable) +ida_segment.saRelQword 8 bytes -ida_segment.saRelWord (variable) +ida_segment.saRelWord Relocatable, word (2-byte) aligned. -ida_segment.scCommon (variable) +ida_segment.scCommon Common. Combine by overlay using maximum size. -ida_segment.scGroup (variable) +ida_segment.scGroup Segment group. -ida_segment.scPriv (variable) - Private. Do not combine with any other program segment. +ida_segment.scPriv + Private. Do not combine with any other program segment. + -ida_segment.scPub (variable) - Public. Combine by appending at an offset that meets the alignment requirement. +ida_segment.scPub + Public. Combine by appending at an offset that meets the alignment requirement. + -ida_segment.scPub2 (variable) +ida_segment.scPub2 As defined by Microsoft, same as C=2 (public). -ida_segment.scPub3 (variable) +ida_segment.scPub3 As defined by Microsoft, same as C=2 (public). -ida_segment.scStack (variable) - Stack. Combine as for C=2. This combine type forces byte alignment. +ida_segment.scStack + Stack. Combine as for C=2. This combine type forces byte alignment. + -ida_segment.segm_adjust_diff (function) - segm_adjust_diff(s, delta) -> adiff_t +ida_segment.segm_adjust_diff(s: "segment_t", delta: "adiff_t") -> "adiff_t" Truncate and sign extend a delta depending on the segment. - - @param s: (C++: const segment_t *) segment_t const * - @param delta: (C++: adiff_t) -ida_segment.segm_adjust_ea (function) - segm_adjust_ea(s, ea) -> ea_t +ida_segment.segm_adjust_ea(s: "segment_t", ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t Truncate an address depending on the segment. - - @param s: (C++: const segment_t *) segment_t const * - @param ea: (C++: ea_t) -ida_segment.segment_defsr_array (class) - Proxy of C++ wrapped_array_t< sel_t,SREG_NUM > class. +ida_segment.segment_defsr_array -ida_segment.segment_defsr_array.__getitem__ (method) - __getitem__(self, i) -> unsigned-ea-like-numeric-type const & - - @param i: size_t +ida_segment.segment_defsr_array.__getitem__(self, i: "size_t") -> "unsigned long long const &" -ida_segment.segment_defsr_array.__init__ (method) - __init__(self, data) -> segment_defsr_array - - @param data: unsigned-ea-like-numeric-type (&)[SREG_NUM] +ida_segment.segment_defsr_array.__init__(self, data: "unsigned long long (&)[SREG_NUM]") -ida_segment.segment_defsr_array.__len__ (method) - __len__(self) -> size_t +ida_segment.segment_defsr_array.__len__(self) -> "size_t" -ida_segment.segment_defsr_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: unsigned-ea-like-numeric-type const & +ida_segment.segment_defsr_array.__setitem__(self, i: "size_t", v: "unsigned long long const &") -> None -ida_segment.segment_defsr_array._get_bytes (method) - _get_bytes(self) -> bytevec_t +ida_segment.segment_defsr_array._get_bytes(self) -> "bytevec_t" -ida_segment.segment_defsr_array._set_bytes (method) - _set_bytes(self, bts) - - Parameters - ---------- - bts: bytevec_t const & +ida_segment.segment_defsr_array._set_bytes(self, bts: "bytevec_t const &") -> None -ida_segment.segment_t (class) - Proxy of C++ segment_t class. +ida_segment.segment_t -ida_segment.segment_t.__getDefsr (method) - __getDefsr(self) -> segment_defsr_array +ida_segment.segment_t.__getDefsr(self) -> "wrapped_array_t< sel_t,SREG_NUM >" -ida_segment.segment_t.__init__ (method) - __init__(self) -> segment_t +ida_segment.segment_t.__init__(self) -ida_segment.segment_t.abits (method) - abits(self) -> int +ida_segment.segment_t.abits(self) -> int Get number of address bits. -ida_segment.segment_t.abytes (method) - abytes(self) -> int +ida_segment.segment_t.abytes(self) -> int Get number of address bytes. -ida_segment.segment_t.align (variable) - Segment alignment codes +ida_segment.segment_t.align + Segment alignment codes + -ida_segment.segment_t.bitness (variable) +ida_segment.segment_t.bitness Number of bits in the segment addressing * 0: 16 bits * 1: 32 bits - * 2: 64 bits + * 2: 64 bits + + + -ida_segment.segment_t.clr_comorg (method) - clr_comorg(self) +ida_segment.segment_t.clr_comorg(self) -> None -ida_segment.segment_t.clr_ob_ok (method) - clr_ob_ok(self) +ida_segment.segment_t.clr_ob_ok(self) -> None -ida_segment.segment_t.color (variable) +ida_segment.segment_t.color the segment color -ida_segment.segment_t.comb (variable) - Segment combination codes +ida_segment.segment_t.comb + Segment combination codes + -ida_segment.segment_t.comorg (method) - comorg(self) -> bool +ida_segment.segment_t.comorg(self) -> bool -ida_segment.segment_t.defsr (variable) - default segment register values. first element of this array keeps information - about value of processor_t::reg_first_sreg +ida_segment.segment_t.defsr + default segment register values. first element of this array keeps information about value of processor_t::reg_first_sreg + -ida_segment.segment_t.flags (variable) +ida_segment.segment_t.defsr + default segment register values. first element of this array keeps information about value of processor_t::reg_first_sreg + + +ida_segment.segment_t.flags Segment flags -ida_segment.segment_t.is_16bit (method) - is_16bit(self) -> bool +ida_segment.segment_t.is_16bit(self) -> bool Is a 16-bit segment? -ida_segment.segment_t.is_32bit (method) - is_32bit(self) -> bool +ida_segment.segment_t.is_32bit(self) -> bool Is a 32-bit segment? -ida_segment.segment_t.is_64bit (method) - is_64bit(self) -> bool +ida_segment.segment_t.is_64bit(self) -> bool Is a 64-bit segment? -ida_segment.segment_t.is_header_segm (method) - is_header_segm(self) -> bool +ida_segment.segment_t.is_header_segm(self) -> bool -ida_segment.segment_t.is_hidden_segtype (method) - is_hidden_segtype(self) -> bool +ida_segment.segment_t.is_hidden_segtype(self) -> bool -ida_segment.segment_t.is_loader_segm (method) - is_loader_segm(self) -> bool +ida_segment.segment_t.is_loader_segm(self) -> bool -ida_segment.segment_t.is_visible_segm (method) - is_visible_segm(self) -> bool +ida_segment.segment_t.is_visible_segm(self) -> bool -ida_segment.segment_t.name (variable) +ida_segment.segment_t.name use get/set_segm_name() functions -ida_segment.segment_t.ob_ok (method) - ob_ok(self) -> bool +ida_segment.segment_t.ob_ok(self) -> bool -ida_segment.segment_t.orgbase (variable) - this field is IDP dependent. you may keep your information about the segment - here +ida_segment.segment_t.orgbase + this field is IDP dependent. you may keep your information about the segment here + -ida_segment.segment_t.perm (variable) - Segment permissions (0 means no information) +ida_segment.segment_t.perm + Segment permissions (0 means no information) + -ida_segment.segment_t.sclass (variable) +ida_segment.segment_t.sclass use get/set_segm_class() functions -ida_segment.segment_t.sel (variable) - segment selector - should be unique. You can't change this field after creating - the segment. Exception: 16bit OMF files may have several segments with the same - selector, but this is not good (no way to denote a segment exactly) so it should - be fixed in the future. +ida_segment.segment_t.sel + segment selector - should be unique. You can't change this field after creating the segment. Exception: 16bit OMF files may have several segments with the same selector, but this is not good (no way to denote a segment exactly) so it should be fixed in the future. + -ida_segment.segment_t.set_comorg (method) - set_comorg(self) +ida_segment.segment_t.set_comorg(self) -> None -ida_segment.segment_t.set_debugger_segm (method) - set_debugger_segm(self, debseg) - - @param debseg: bool +ida_segment.segment_t.set_debugger_segm(self, debseg: bool) -> None -ida_segment.segment_t.set_header_segm (method) - set_header_segm(self, on) - - @param on: bool +ida_segment.segment_t.set_header_segm(self, on: bool) -> None -ida_segment.segment_t.set_hidden_segtype (method) - set_hidden_segtype(self, hide) - - @param hide: bool +ida_segment.segment_t.set_hidden_segtype(self, hide: bool) -> None -ida_segment.segment_t.set_loader_segm (method) - set_loader_segm(self, ldrseg) - - @param ldrseg: bool +ida_segment.segment_t.set_loader_segm(self, ldrseg: bool) -> None -ida_segment.segment_t.set_ob_ok (method) - set_ob_ok(self) +ida_segment.segment_t.set_ob_ok(self) -> None -ida_segment.segment_t.set_visible_segm (method) - set_visible_segm(self, visible) - - @param visible: bool +ida_segment.segment_t.set_visible_segm(self, visible: bool) -> None -ida_segment.segment_t.type (variable) - segment type (see Segment types). The kernel treats different segment types - differently. Segments marked with '*' contain no instructions or data and are - not declared as 'segments' in the disassembly. +ida_segment.segment_t.type + segment type (see Segment types). The kernel treats different segment types differently. Segments marked with '*' contain no instructions or data and are not declared as 'segments' in the disassembly. + -ida_segment.segment_t.update (method) - update(self) -> bool - Update segment information. You must call this function after modification of - segment characteristics. Note that not all fields of segment structure may be - modified directly, there are special functions to modify some fields. - - @return: success +ida_segment.segment_t.update(self) -> bool + Update segment information. You must call this function after modification of segment characteristics. Note that not all fields of segment structure may be modified directly, there are special functions to modify some fields. + + @returns success -ida_segment.segtype (function) - segtype(ea) -> uchar - Get segment type. - - @param ea: (C++: ea_t) any linear address within the segment - @return: Segment types, SEG_UNDF if no segment found at 'ea' +ida_segment.segtype(ea: ida_idaapi.ea_t) -> "uchar" + Get segment type. + + @param ea: any linear address within the segment + @returns Segment types, SEG_UNDF if no segment found at 'ea' -ida_segment.sel2ea (function) - sel2ea(selector) -> ea_t - Get mapping of a selector as a linear address. - - @param selector: (C++: sel_t) number of selector to translate to linear address - @return: linear address the specified selector is mapped to. if there is no - mapping, returns to_ea(selector,0); +ida_segment.sel2ea(selector: "sel_t") -> ida_idaapi.ea_t + Get mapping of a selector as a linear address. + + @param selector: number of selector to translate to linear address + @returns linear address the specified selector is mapped to. if there is no mapping, returns to_ea(selector,0); -ida_segment.sel2para (function) - sel2para(selector) -> ea_t - Get mapping of a selector. - - @param selector: (C++: sel_t) number of selector to translate - @return: paragraph the specified selector is mapped to. if there is no mapping, - returns 'selector'. +ida_segment.sel2para(selector: "sel_t") -> ida_idaapi.ea_t + Get mapping of a selector. + + @param selector: number of selector to translate + @returns paragraph the specified selector is mapped to. if there is no mapping, returns 'selector'. -ida_segment.set_defsr (function) - set_defsr(s, reg, value) +ida_segment.set_defsr(s, reg, value) Deprecated, use instead: - s.defsr[reg] = value - - @param s: segment_t * - @param reg: int - @param value: sel_t + s.defsr[reg] = value -ida_segment.set_group_selector (function) - set_group_selector(grp, sel) -> int - Create a new group of segments (used OMF files). - - @param grp: (C++: sel_t) 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. - @param sel: (C++: sel_t) common selector of all segments belonging to the segment You should - create all segments within the group with the same selector value. - @return: 1 ok - 0 too many groups (see MAX_GROUPS) +ida_segment.set_group_selector(grp: "sel_t", sel: "sel_t") -> int + 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. + @param sel: common selector of all segments belonging to the segment You should create all segments within the group with the same selector value. + @retval 1: ok + @retval 0: too many groups (see MAX_GROUPS) -ida_segment.set_segm_addressing (function) - 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: (C++: segment_t *) pointer to segment - @param bitness: (C++: size_t) new addressing mode of segment +ida_segment.set_segm_addressing(s: "segment_t", bitness: "size_t") -> 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 + @param bitness: new addressing mode of segment * 2: 64bit segment * 1: 32bit segment * 0: 16bit segment - @return: success + @returns success -ida_segment.set_segm_base (function) - set_segm_base(s, newbase) -> bool +ida_segment.set_segm_base(s: "segment_t", newbase: ida_idaapi.ea_t) -> bool Internal function. - - @param s: (C++: segment_t *) - @param newbase: (C++: ea_t) -ida_segment.set_segm_class (function) - set_segm_class(s, sclass, flags=0) -> int - Set segment class. - - @param s: (C++: segment_t *) pointer to segment (may be nullptr) - @param sclass: (C++: const char *) segment class (may be nullptr). If segment type is SEG_NORM and - segment class is one of predefined names, then segment type is - changed to: +ida_segment.set_segm_class(s: "segment_t", sclass: str, flags: int = 0) -> int + Set segment class. + + @param s: pointer to segment (may be nullptr) + @param sclass: segment class (may be nullptr). 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. - @param flags: (C++: int) Add segment flags + @param flags: Add segment flags @retval 1: ok, name is good and segment is renamed @retval 0: failure, name is nullptr or bad or segment is nullptr -ida_segment.set_segm_end (function) - 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: (C++: ea_t) any address belonging to the segment - @param newend: (C++: ea_t) new end address of the segment - @param flags: (C++: int) Segment modification flags +ida_segment.set_segm_end(ea: ida_idaapi.ea_t, newend: ida_idaapi.ea_t, flags: int) -> 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 + @param newend: new end address of the segment + @param flags: Segment modification flags @retval 1: ok @retval 0: failed, a warning message is displayed -ida_segment.set_segm_name (function) - 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: (C++: segment_t *) pointer to segment (may be nullptr) - @param name: (C++: const char *) new segment name - @param flags: (C++: int) ADDSEG_IDBENC or 0 +ida_segment.set_segm_name(s: "segment_t", name: str, flags: int = 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 nullptr) + @param name: new segment name + @param flags: ADDSEG_IDBENC or 0 @retval 1: ok, name is good and segment is renamed @retval 0: failure, name is bad or segment is nullptr -ida_segment.set_segm_start (function) - 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: (C++: ea_t) any address belonging to the segment - @param newstart: (C++: ea_t) new start address of the segment note that segment start - address should be higher than segment base linear address. - @param flags: (C++: int) Segment modification flags +ida_segment.set_segm_start(ea: ida_idaapi.ea_t, newstart: ida_idaapi.ea_t, flags: int) -> 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 + @param newstart: new start address of the segment note that segment start address should be higher than segment base linear address. + @param flags: Segment modification flags @retval 1: ok @retval 0: failed, a warning message is displayed -ida_segment.set_segment_cmt (function) - set_segment_cmt(s, cmt, repeatable) - Set segment comment. - - @param s: (C++: const segment_t *) pointer to segment structure - @param cmt: (C++: const char *) comment string, may be multiline (with ' +ida_segment.set_segment_cmt(s: "segment_t", cmt: str, repeatable: bool) -> None + Set segment comment. + + @param s: pointer to segment structure + @param cmt: comment string, may be multiline (with ' '). maximal size is 4096 bytes. Use empty str ("") to delete comment - @param repeatable: (C++: bool) 0: set regular comment. 1: set repeatable comment. + @param repeatable: 0: set regular comment. 1: set repeatable comment. -ida_segment.set_segment_translations (function) - set_segment_translations(segstart, transmap) -> bool - Set new translation list. - - @param segstart: (C++: ea_t) start address of the segment to add translation to - @param transmap: (C++: const eavec_t &) vector of segment start addresses for the translation list. If - transmap is empty, the translation list is deleted. +ida_segment.set_segment_translations(segstart: ida_idaapi.ea_t, transmap: "eavec_t const &") -> bool + Set new translation list. + + @param segstart: start address of the segment to add translation to + @param transmap: vector of segment start addresses for the translation list. If transmap is empty, the translation list is deleted. @retval 1: ok @retval 0: too many translations or bad segstart -ida_segment.set_selector (function) - set_selector(selector, paragraph) -> int - Set mapping of selector to a paragraph. You should call this function _before_ - creating a segment which uses the selector, otherwise the creation of the - segment will fail. - - @param selector: (C++: sel_t) number of selector to map +ida_segment.set_selector(selector: "sel_t", paragraph: ida_idaapi.ea_t) -> int + Set mapping of selector to a paragraph. You should call this function _before_ creating 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. - @param paragraph: (C++: ea_t) paragraph to map selector + * if the selector number is equal to paragraph value, then the mapping is destroyed because we don't need to keep trivial mappings. + @param paragraph: paragraph to map selector @retval 1: ok @retval 0: failure (bad selector or too many mappings) -ida_segment.set_visible_segm (function) - set_visible_segm(s, visible) +ida_segment.set_visible_segm(s: "segment_t", visible: bool) -> None See SFL_HIDDEN. - - @param s: (C++: segment_t *) - @param visible: (C++: bool) -ida_segment.setup_selector (function) - 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: (C++: ea_t) a new segment base paragraph - @return: the allocated selector number +ida_segment.setup_selector(segbase: ida_idaapi.ea_t) -> "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 + @returns the allocated selector number -ida_segment.std_out_segm_footer (function) - 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 &) outctx_t & - @param seg: (C++: segment_t *) +ida_segment.std_out_segm_footer(ctx: "outctx_t &", seg: "segment_t") -> None + 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. + -ida_segment.take_memory_snapshot (function) - take_memory_snapshot(type) -> bool - Take a memory snapshot of the running process. - - @param type: (C++: int) specifies which snapshot we want (see SNAP_ Snapshot types) - @return: success +ida_segment.take_memory_snapshot(type: int) -> bool + Take a memory snapshot of the running process. + + @param type: specifies which snapshot we want (see SNAP_ Snapshot types) + @returns success -ida_segment.update_segm (function) - update_segm(s) -> bool - - @param s: segment_t * +ida_segment.update_segm(s: "segment_t") -> bool -ida_segregs (module) +ida_segregs Functions that deal with the segment registers. - If your processor doesn't use segment registers, then these functions are of no - use for you. However, you should define two virtual segment registers - CS and - DS (for code segment and data segment) and specify their internal numbers in the - LPH structure (processor_t::reg_code_sreg and processor_t::reg_data_sreg). + If your processor doesn't use segment registers, then these functions are of no use for you. However, you should define two virtual segment registers - CS and DS (for code segment and data segment) and specify their internal numbers in the LPH structure (processor_t::reg_code_sreg and processor_t::reg_data_sreg). + -ida_segregs.SR_auto (variable) +ida_segregs.SR_auto the value is determined by IDA -ida_segregs.SR_autostart (variable) +ida_segregs.SR_autostart used as SR_auto for segment starting address -ida_segregs.SR_inherit (variable) +ida_segregs.SR_inherit the value is inherited from the previous range -ida_segregs.SR_user (variable) +ida_segregs.SR_user the value is specified by the user -ida_segregs.copy_sreg_ranges (function) - copy_sreg_ranges(dst_rg, src_rg, map_selector=False) - Duplicate segment register ranges. - - @param dst_rg: (C++: int) number of destination segment register - @param src_rg: (C++: int) copy ranges from - @param map_selector: (C++: bool) map selectors to linear addresses using sel2ea() +ida_segregs.copy_sreg_ranges(dst_rg: int, src_rg: int, map_selector: bool = False) -> None + Duplicate segment register ranges. + + @param dst_rg: number of destination segment register + @param src_rg: copy ranges from + @param map_selector: map selectors to linear addresses using sel2ea() -ida_segregs.del_sreg_range (function) - 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: (C++: ea_t) start_ea of the deleted range - @param rg: (C++: int) the segment register number - @return: success +ida_segregs.del_sreg_range(ea: ida_idaapi.ea_t, rg: int) -> 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 + @param rg: the segment register number + @returns success -ida_segregs.get_prev_sreg_range (function) - get_prev_sreg_range(out, ea, rg) -> bool - Get segment register range previous to one with address. - @note: more efficient then get_sreg_range(reg, ea-1) - - @param out: (C++: sreg_range_t *) segment register range - @param ea: (C++: ea_t) any linear address in the program - @param rg: (C++: int) the segment register number - @return: success +ida_segregs.get_prev_sreg_range(out: "sreg_range_t", ea: ida_idaapi.ea_t, rg: int) -> bool + Get segment register range previous to one with address. + + @param out: segment register range + @param ea: any linear address in the program + @param rg: the segment register number + @returns success -ida_segregs.get_sreg (function) - 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: (C++: ea_t) linear address in the program - @param rg: (C++: int) number of the segment register - @return: value of the segment register, BADSEL if value is unknown. +ida_segregs.get_sreg(ea: ida_idaapi.ea_t, rg: int) -> "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 + @param rg: number of the segment register + @returns value of the segment register, BADSEL if value is unknown or rg is not a segment register. -ida_segregs.get_sreg_range (function) - get_sreg_range(out, ea, rg) -> bool - Get segment register range by linear address. - - @param out: (C++: sreg_range_t *) segment register range - @param ea: (C++: ea_t) any linear address in the program - @param rg: (C++: int) the segment register number - @return: success +ida_segregs.get_sreg_range(out: "sreg_range_t", ea: ida_idaapi.ea_t, rg: int) -> bool + Get segment register range by linear address. + + @param out: segment register range + @param ea: any linear address in the program + @param rg: the segment register number + @returns success -ida_segregs.get_sreg_range_num (function) - get_sreg_range_num(ea, rg) -> int - Get number of segment register range by address. - - @param ea: (C++: ea_t) any address in the range - @param rg: (C++: int) the segment register number - @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_range_num(ea: ida_idaapi.ea_t, rg: int) -> int + Get number of segment register range by address. + + @param ea: any address in the range + @param rg: the segment register number + @returns -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 (function) - get_sreg_ranges_qty(rg) -> size_t - Get number of segment register ranges. - - @param rg: (C++: int) the segment register number +ida_segregs.get_sreg_ranges_qty(rg: int) -> "size_t" + Get number of segment register ranges. + + @param rg: the segment register number -ida_segregs.getn_sreg_range (function) - getn_sreg_range(out, rg, n) -> bool - Get segment register range by its number. - - @param out: (C++: sreg_range_t *) segment register range - @param rg: (C++: int) the segment register number - @param n: (C++: int) number of range (0..qty()-1) - @return: success +ida_segregs.getn_sreg_range(out: "sreg_range_t", rg: int, n: int) -> bool + Get segment register range by its number. + + @param out: segment register range + @param rg: the segment register number + @param n: number of range (0..qty()-1) + @returns success -ida_segregs.set_default_dataseg (function) - set_default_dataseg(ds_sel) +ida_segregs.set_default_dataseg(ds_sel: "sel_t") -> None Set default value of DS register for all segments. - - @param ds_sel: (C++: sel_t) -ida_segregs.set_default_sreg_value (function) - set_default_sreg_value(sg, rg, value) -> bool - Set default value of a segment register for a segment. - - @param sg: (C++: segment_t *) pointer to segment structure if nullptr, then set the register for - all segments - @param rg: (C++: int) number of segment register - @param value: (C++: sel_t) its default value. this value will be used by get_sreg() if value - of the register is unknown at the specified address. - @return: success +ida_segregs.set_default_sreg_value(sg: "segment_t *", rg: int, value: "sel_t") -> bool + Set default value of a segment register for a segment. + + @param sg: pointer to segment structure if nullptr, then set the register for all segments + @param rg: number of segment register + @param value: its default value. this value will be used by get_sreg() if value of the register is unknown at the specified address. + @returns success -ida_segregs.set_sreg_at_next_code (function) - 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: (C++: ea_t) address to start to search for an instruction - @param ea2: (C++: ea_t) the maximal address - @param rg: (C++: int) the segment register number - @param value: (C++: sel_t) the segment register value +ida_segregs.set_sreg_at_next_code(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, rg: int, value: "sel_t") -> None + 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 + @param ea2: the maximal address + @param rg: the segment register number + @param value: the segment register value -ida_segregs.split_sreg_range (function) - 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: (C++: ea_t) linear address where the segment register will have a new value. if - ea==BADADDR, nothing to do. - @param rg: (C++: int) the number of the segment register - @param v: (C++: sel_t) the new value of the segment register. If the value is unknown, you - should specify BADSEL. - @param tag: (C++: uchar) the register info tag. see Segment register range tags - @param silent: (C++: bool) if false, display a warning() in the case of failure - @return: success +ida_segregs.split_sreg_range(ea: ida_idaapi.ea_t, rg: int, v: "sel_t", tag: "uchar", silent: bool = 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. + @param rg: the number of the segment register + @param v: the new value of the segment register. If the value is unknown, you should specify BADSEL. + @param tag: the register info tag. see Segment register range tags + @param silent: if false, display a warning() in the case of failure + @returns success -ida_segregs.sreg_range_t (class) - Proxy of C++ sreg_range_t class. +ida_segregs.sreg_range_t -ida_segregs.sreg_range_t.__init__ (method) - __init__(self) -> sreg_range_t +ida_segregs.sreg_range_t.__init__(self) -ida_segregs.sreg_range_t.tag (variable) +ida_segregs.sreg_range_t.tag Segment register range tags -ida_segregs.sreg_range_t.val (variable) +ida_segregs.sreg_range_t.val segment register value -ida_srclang (module) +ida_srclang Third-party compiler support. -ida_srclang.SRCLANG_C (variable) +ida_srclang.SRCLANG_C C. -ida_srclang.SRCLANG_CPP (variable) +ida_srclang.SRCLANG_CPP C++. -ida_srclang.SRCLANG_GO (variable) +ida_srclang.SRCLANG_GO Golang (not supported yet) -ida_srclang.SRCLANG_OBJC (variable) +ida_srclang.SRCLANG_OBJC Objective-C. -ida_srclang.SRCLANG_SWIFT (variable) +ida_srclang.SRCLANG_SWIFT Swift (not supported yet) -ida_srclang.parse_decls_for_srclang (function) - parse_decls_for_srclang(lang, til, input, is_path) -> int - Parse type declarations in the specified language - - @param lang: (C++: srclang_t) the source language(s) expected in the input - @param til: (C++: til_t *) type library to store the types - @param input: (C++: const char *) input source. can be a file path or decl string - @param is_path: (C++: bool) true if input parameter is a path to a source file, false if the - input is an in-memory source snippet +ida_srclang.parse_decls_for_srclang(lang: "srclang_t", til: "til_t", input: str, is_path: bool) -> int + Parse type declarations in the specified language + + @param lang: the source language(s) expected in the input + @param til: type library to store the types + @param input: input source. can be a file path or decl string + @param is_path: true if input parameter is a path to a source file, false if the input is an in-memory source snippet @retval -1: no parser was found that supports the given source language(s) @retval else: the number of errors encountered in the input source -ida_srclang.parse_decls_with_parser (function) - parse_decls_with_parser(parser_name, til, input, is_path) -> int - Parse type declarations using the parser with the specified name - - @param parser_name: (C++: const char *) name of the target parser - @param til: (C++: til_t *) type library to store the types - @param input: (C++: const char *) input source. can be a file path or decl string - @param is_path: (C++: bool) true if input parameter is a path to a source file, false if the - input is an in-memory source snippet +ida_srclang.parse_decls_with_parser(parser_name: str, til: "til_t", input: str, is_path: bool) -> int + Parse type declarations using the parser with the specified name + + @param parser_name: name of the target parser + @param til: type library to store the types + @param input: input source. can be a file path or decl string + @param is_path: true if input parameter is a path to a source file, false if the input is an in-memory source snippet @retval -1: no parser was found with the given name @retval else: the number of errors encountered in the input source -ida_srclang.select_parser_by_name (function) - select_parser_by_name(name) -> bool - Set the parser with the given name as the current parser. Pass nullptr or an - empty string to select the default parser. - - @param name: (C++: const char *) char const * - @return: false if no parser was found with the given name +ida_srclang.select_parser_by_name(name: str) -> bool + Set the parser with the given name as the current parser. Pass nullptr or an empty string to select the default parser. + + @returns false if no parser was found with the given name -ida_srclang.select_parser_by_srclang (function) - select_parser_by_srclang(lang) -> bool - Set the parser that supports the given language(s) as the current parser. The - selected parser must support all languages specified by the given srclang_t. - - @param lang: (C++: srclang_t) - @return: false if no such parser was found +ida_srclang.select_parser_by_srclang(lang: "srclang_t") -> bool + Set the parser that supports the given language(s) as the current parser. The selected parser must support all languages specified by the given srclang_t. + + @returns false if no such parser was found -ida_srclang.set_parser_argv (function) - set_parser_argv(parser_name, argv) -> int - Set the command-line args to use for invocations of the parser with the given - name - - @param parser_name: (C++: const char *) name of the target parser - @param argv: (C++: const char *) argument list +ida_srclang.set_parser_argv(parser_name: str, argv: str) -> int + Set the command-line args to use for invocations of the parser with the given name + + @param parser_name: name of the target parser + @param argv: argument list @retval -1: no parser was found with the given name @retval -2: the operation is not supported by the given parser @retval 0: success -ida_strlist (module) +ida_strlist Functions that deal with the string list. - While the kernel keeps the string list, it does not update it. The string list - is not used by the kernel because keeping it up-to-date would slow down IDA - without any benefit. If the string list is not cleared using clear_strlist(), - the list will be saved to the database and restored on the next startup. - - The users of this list should call build_strlist() if they need an up-to-date - version. + While the kernel keeps the string list, it does not update it. The string list is not used by the kernel because keeping it up-to-date would slow down IDA without any benefit. If the string list is not cleared using clear_strlist(), the list will be saved to the database and restored on the next startup. + The users of this list should call build_strlist() if they need an up-to-date version. + -ida_strlist.build_strlist (function) - build_strlist() +ida_strlist.build_strlist() -> None Rebuild the string list. -ida_strlist.clear_strlist (function) - clear_strlist() +ida_strlist.clear_strlist() -> None Clear the string list. -ida_strlist.get_strlist_item (function) - get_strlist_item(si, n) -> bool +ida_strlist.get_strlist_item(si: "string_info_t", n: "size_t") -> 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 (function) - get_strlist_options() -> strwinsetup_t +ida_strlist.get_strlist_options() -> "strwinsetup_t const *" Get the static string list options. -ida_strlist.get_strlist_qty (function) - get_strlist_qty() -> size_t - Get number of elements in the string list. The list will be loaded from the - database (if saved) or built from scratch. +ida_strlist.get_strlist_qty() -> "size_t" + Get number of elements in the string list. The list will be loaded from the database (if saved) or built from scratch. + -ida_strlist.string_info_t (class) - Proxy of C++ string_info_t class. +ida_strlist.string_info_t -ida_strlist.string_info_t.__init__ (method) - __init__(self, _ea=BADADDR) -> string_info_t - - @param _ea: ea_t +ida_strlist.string_info_t.__init__(self, *args) -ida_strlist.string_info_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: string_info_t const & +ida_strlist.string_info_t.__lt__(self, r: "string_info_t") -> bool -ida_strlist.strwinsetup_t (class) - Proxy of C++ strwinsetup_t class. +ida_strlist.strwinsetup_t -ida_strlist.strwinsetup_t.__init__ (method) - __init__(self) -> strwinsetup_t +ida_strlist.strwinsetup_t.__init__(self) -ida_strlist.strwinsetup_t._get_strtypes (method) - _get_strtypes(self) -> PyObject * +ida_strlist.strwinsetup_t._get_strtypes(self) -> "PyObject *" -ida_strlist.strwinsetup_t._set_strtypes (method) - _set_strtypes(self, py_t) -> PyObject * - - Parameters - ---------- - py_t: PyObject * +ida_strlist.strwinsetup_t._set_strtypes(self, py_t: "PyObject *") -> "PyObject *" -ida_struct (module) - Structure type management (assembly level types) - -ida_struct.MF_BASECLASS (variable) - a special member representing base class - -ida_struct.MF_BYTIL (variable) - the member was created due to the type system - -ida_struct.MF_DTOR (variable) - a special member representing destructor - -ida_struct.MF_DUPNAME (variable) - duplicate name resolved with _N suffix (N==soff) - -ida_struct.MF_HASTI (variable) - has type information? - -ida_struct.MF_HASUNI (variable) - has members of type "union"? - -ida_struct.MF_OK (variable) - is the member ok? (always yes) - -ida_struct.MF_UNIMEM (variable) - is a member of a union? - -ida_struct.SET_MEMTI_BYTIL (variable) - new type was created by the type subsystem - -ida_struct.SET_MEMTI_COMPATIBLE (variable) - new type must be compatible with the old - -ida_struct.SET_MEMTI_FUNCARG (variable) - mptr is function argument (cannot create arrays) - -ida_struct.SET_MEMTI_MAY_DESTROY (variable) - may destroy other members - -ida_struct.SET_MEMTI_USERTI (variable) - user-specified type - -ida_struct.SF_ALIGN (variable) - alignment (shift amount: 0..31) - -ida_struct.SF_FRAME (variable) - the structure is a function frame - -ida_struct.SF_GHOST (variable) - ghost copy of a local type - -ida_struct.SF_HASUNI (variable) - has members of type "union"? - -ida_struct.SF_HIDDEN (variable) - the structure is collapsed - -ida_struct.SF_NOLIST (variable) - don't include in the chooser list - -ida_struct.SF_TYPLIB (variable) - the structure comes from type library - -ida_struct.SF_UNION (variable) - is a union? varunions are prohibited! - -ida_struct.SF_VAR (variable) - 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.SMT_ARRAY (variable) - arrays are forbidden as function arguments - -ida_struct.SMT_BADARG (variable) - bad parameters - -ida_struct.SMT_FAILED (variable) - failed to set new member type - -ida_struct.SMT_KEEP (variable) - no need to change the member type, the old type is better - -ida_struct.SMT_NOCOMPAT (variable) - the new type is not compatible with the old type - -ida_struct.SMT_OVERLAP (variable) - member would overlap with members that cannot be deleted - -ida_struct.SMT_SIZE (variable) - the new type is incompatible with the member size - -ida_struct.SMT_WORSE (variable) - the new type is worse than the old type - -ida_struct.STRNFL_REGEX (variable) - apply regular expressions to beautify the name - -ida_struct.STRUC_ERROR_MEMBER_LTUDT (variable) - failed to change corresponding local type - -ida_struct.STRUC_ERROR_MEMBER_NAME (variable) - already has member with this name (bad name) - -ida_struct.STRUC_ERROR_MEMBER_NESTED (variable) - recursive structure nesting is forbidden - -ida_struct.STRUC_ERROR_MEMBER_OFFSET (variable) - already has member at this offset - -ida_struct.STRUC_ERROR_MEMBER_OK (variable) - success - -ida_struct.STRUC_ERROR_MEMBER_SIZE (variable) - bad number of bytes or bad sizeof(type) - -ida_struct.STRUC_ERROR_MEMBER_STRUCT (variable) - bad struct id (the 1st argument) - -ida_struct.STRUC_ERROR_MEMBER_TINFO (variable) - bad typeid parameter - -ida_struct.STRUC_ERROR_MEMBER_UNIVAR (variable) - unions can't have variable sized members - -ida_struct.STRUC_ERROR_MEMBER_VARLAST (variable) - variable sized member should be the last member in the structure - -ida_struct.STRUC_SEPARATOR (variable) - structname.fieldname - -ida_struct.add_struc (function) - add_struc(idx, name, is_union=False) -> tid_t - Create a structure type. if idx==BADADDR then add as the last idx. if - name==nullptr then a name will be generated "struct_%d". - - @param idx: (C++: uval_t) - @param name: (C++: const char *) char const * - @param is_union: (C++: bool) - -ida_struct.add_struc_member (function) - add_struc_member(sptr, fieldname, offset, flag, mt, nbytes) -> struc_error_t - Add member to existing structure. - - @param sptr: (C++: struc_t *) structure to modify - @param fieldname: (C++: const char *) if nullptr, then "anonymous_#" name will be generated - @param offset: (C++: ea_t) BADADDR means add to the end of structure - @param flag: (C++: flags64_t) type + representation bits - @param mt: (C++: const opinfo_t *) additional info about member type. must be present for structs, - offsets, enums, strings, struct offsets. - @param nbytes: (C++: asize_t) if == 0 then the structure will be a varstruct. in this case the - member should be the last member in the structure - -ida_struct.del_member_tinfo (function) - 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 (function) - del_struc(sptr) -> bool - Delete a structure type This function deletes as well local type synced with the - structure - - @param sptr: (C++: struc_t *) - -ida_struct.del_struc_member (function) - 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 (function) - 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.dyn_member_ref_array (class) - Proxy of C++ dynamic_wrapped_array_t< member_t > class. - -ida_struct.dyn_member_ref_array.__getitem__ (method) - __getitem__(self, i) -> member_t - - @param i: size_t - -ida_struct.dyn_member_ref_array.__init__ (method) - __init__(self, _data, _count) -> dyn_member_ref_array - - @param _data: member_t * - @param _count: size_t - -ida_struct.dyn_member_ref_array.__len__ (method) - __len__(self) -> size_t - -ida_struct.dyn_member_ref_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: member_t const & - -ida_struct.expand_struc (function) - 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 (function) - 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 *) struc_t const * - @param offset: (C++: asize_t) - -ida_struct.get_first_struc_idx (function) - get_first_struc_idx() -> uval_t - Get index of first structure. - - @return: BADADDR if no known structures, 0 otherwise - -ida_struct.get_innermost_member (function) - get_innermost_member(sptr, offset) -> (member_t, struc_t, int) - Get the innermost member at the given offset - - @param sptr: the starting structure - @param offset: offset into the starting structure - @return: - None on failure - - tuple(member_t, struct_t, offset) - where member_t: a member in SPTR (it is not a structure), - struct_t: the innermost structure, - offset: remaining offset into the returned member - -ida_struct.get_last_struc_idx (function) - 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 (function) - 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 (function) - get_member(sptr, offset) -> member_t - Get member at given offset. - - @param sptr: (C++: const struc_t *) struc_t const * - @param offset: (C++: asize_t) - -ida_struct.get_member_by_fullname (function) - get_member_by_fullname(fullname) -> member_t - Get a member by its fully qualified name, "struct.field". - - @param fullname: (C++: const char *) char const * - -ida_struct.get_member_by_id (function) - get_member_by_id(mid) -> member_t - Check if the specified member id points to a struct member. convenience - function. - - @param mid: (C++: tid_t) - -ida_struct.get_member_by_name (function) - get_member_by_name(sptr, membername) -> member_t - Get a member by its name, like "field44". - - @param sptr: (C++: const struc_t *) struc_t const * - @param membername: (C++: const char *) char const * - -ida_struct.get_member_cmt (function) - get_member_cmt(mid, repeatable) -> str - Get comment of structure member. - - @param mid: (C++: tid_t) - @param repeatable: (C++: bool) - -ida_struct.get_member_fullname (function) - get_member_fullname(mid) -> str - Get a member's fully qualified name, "struct.field". - - @param mid: (C++: tid_t) - -ida_struct.get_member_id (function) - get_member_id(sptr, offset) -> tid_t - Get member id at given offset. - - @param sptr: (C++: const struc_t *) struc_t const * - @param offset: (C++: asize_t) - -ida_struct.get_member_name (function) - get_member_name(mid) -> str - - @param mid: tid_t - -ida_struct.get_member_size (function) - get_member_size(NONNULL_mptr) -> asize_t - Get size of structure member. May return 0 for the last member of varstruct. For - union members, returns member_t::eoff. - - @param NONNULL_mptr: (C++: const member_t *) member_t const * - -ida_struct.get_member_struc (function) - get_member_struc(fullname) -> struc_t - Get containing structure of member by its full name "struct.field". - - @param fullname: (C++: const char *) char const * - -ida_struct.get_member_tinfo (function) - get_member_tinfo(tif, mptr) -> bool - Get tinfo for given member. - - @param tif: (C++: tinfo_t *) - @param mptr: (C++: const member_t *) member_t const * - -ida_struct.get_next_member_idx (function) - 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 *) struc_t const * - @param off: (C++: asize_t) - -ida_struct.get_next_struc_idx (function) - 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 (function) - 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 *) member_t const * - -ida_struct.get_prev_member_idx (function) - 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 *) struc_t const * - @param off: (C++: asize_t) - -ida_struct.get_prev_struc_idx (function) - 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 (function) - get_sptr(mptr) -> struc_t - Get child struct if member is a struct. - - @param mptr: (C++: const member_t *) member_t const * - -ida_struct.get_struc (function) - get_struc(id) -> struc_t - Get pointer to struct type info. - - @param id: (C++: tid_t) - -ida_struct.get_struc_by_idx (function) - get_struc_by_idx(idx) -> tid_t - Get struct id by struct number. - - @param idx: (C++: uval_t) - -ida_struct.get_struc_cmt (function) - get_struc_cmt(id, repeatable) -> str - Get struct comment. - - @param id: (C++: tid_t) - @param repeatable: (C++: bool) - -ida_struct.get_struc_first_offset (function) - get_struc_first_offset(sptr) -> ea_t - Get offset of first member. - - @param sptr: (C++: const struc_t *) struc_t const * - @return: BADADDR if memqty == 0 - -ida_struct.get_struc_id (function) - get_struc_id(name) -> tid_t - Get struct id by name. - - @param name: (C++: const char *) char const * - -ida_struct.get_struc_idx (function) - get_struc_idx(id) -> uval_t - Get internal number of the structure. - - @param id: (C++: tid_t) - -ida_struct.get_struc_last_offset (function) - get_struc_last_offset(sptr) -> ea_t - Get offset of last member. - - @param sptr: (C++: const struc_t *) struc_t const * - @return: BADADDR if memqty == 0 - -ida_struct.get_struc_name (function) - get_struc_name(id, flags=0) -> str - - @param id: tid_t - @param flags: int - -ida_struct.get_struc_next_offset (function) - get_struc_next_offset(sptr, offset) -> ea_t - Get offset of member with smallest offset larger than 'offset'. - - @param sptr: (C++: const struc_t *) struc_t const * - @param offset: (C++: ea_t) - @return: BADADDR if no next offset - -ida_struct.get_struc_prev_offset (function) - get_struc_prev_offset(sptr, offset) -> ea_t - Get offset of member with largest offset less than 'offset'. - - @param sptr: (C++: const struc_t *) struc_t const * - @param offset: (C++: ea_t) - @return: BADADDR if no prev offset - -ida_struct.get_struc_qty (function) - get_struc_qty() -> size_t - Get number of known structures. - -ida_struct.get_struc_size (function) - get_struc_size(sptr) -> asize_t - Get struct size (also see get_struc_size(const struc_t *)) - - @param sptr: struc_t const * - - get_struc_size(id) -> asize_t - - @param id: tid_t - -ida_struct.is_anonymous_member_name (function) - is_anonymous_member_name(name) -> bool - Is member name prefixed with "anonymous"? - - @param name: (C++: const char *) char const * - -ida_struct.is_dummy_member_name (function) - is_dummy_member_name(name) -> bool - Is member name an auto-generated name? - - @param name: (C++: const char *) char const * - -ida_struct.is_member_id (function) - is_member_id(mid) -> bool - Is a member id? - - @param mid: (C++: tid_t) - -ida_struct.is_special_member (function) - is_special_member(id) -> bool - Is a special member with the name beginning with ' '? - - @param id: (C++: tid_t) - -ida_struct.is_union (function) - is_union(id) -> bool - Is a union? - - @param id: (C++: tid_t) - -ida_struct.is_varmember (function) - is_varmember(mptr) -> bool - Is variable size member? - - @param mptr: (C++: const member_t *) member_t const * - -ida_struct.is_varstr (function) - is_varstr(id) -> bool - Is variable size structure? - - @param id: (C++: tid_t) - -ida_struct.member_t (class) - Proxy of C++ member_t class. - -ida_struct.member_t.__init__ (method) - __init__(self) -> member_t - -ida_struct.member_t.by_til (method) - by_til(self) -> bool - Was the member created due to the type system? - -ida_struct.member_t.eoff (variable) - end offset - -ida_struct.member_t.flag (variable) - type+representation bits - -ida_struct.member_t.get_size (method) - get_size(self) -> asize_t - Get member size. - -ida_struct.member_t.get_soff (method) - get_soff(self) -> ea_t - Get start offset (for unions - returns 0) - -ida_struct.member_t.has_ti (method) - has_ti(self) -> bool - Has type information? - -ida_struct.member_t.has_union (method) - has_union(self) -> bool - Has members of type "union"? - -ida_struct.member_t.id (variable) - name(), cmt, rptcmt - -ida_struct.member_t.is_baseclass (method) - is_baseclass(self) -> bool - Is a base class member? - -ida_struct.member_t.is_destructor (method) - is_destructor(self) -> bool - Is a virtual destructor? - -ida_struct.member_t.is_dupname (method) - is_dupname(self) -> bool - Duplicate name was resolved during import? - -ida_struct.member_t.props (variable) - Struct member properties - -ida_struct.member_t.soff (variable) - start offset (for unions - number of the member 0..n) - -ida_struct.member_t.unimem (method) - unimem(self) -> bool - Is a member of a union? - -ida_struct.retrieve_member_info (function) - retrieve_member_info(buf, mptr) -> opinfo_t - Get operand type info for member. - - @param buf: (C++: opinfo_t *) - @param mptr: (C++: const member_t *) member_t const * - -ida_struct.save_struc (function) - save_struc(sptr, may_update_ltypes=True) - Update struct information in the database (internal function) - - @param sptr: (C++: const struc_t *) struc_t const * - @param may_update_ltypes: (C++: bool) - -ida_struct.set_member_cmt (function) - set_member_cmt(mptr, cmt, repeatable) -> bool - Set member comment. - - @param mptr: (C++: member_t *) - @param cmt: (C++: const char *) char const * - @param repeatable: (C++: bool) - -ida_struct.set_member_name (function) - 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 *) char const * - -ida_struct.set_member_tinfo (function) - set_member_tinfo(sptr, mptr, memoff, tif, flags) -> smt_code_t - Set tinfo for given member. - - @param sptr: (C++: struc_t *) containing struct - @param mptr: (C++: member_t *) target member - @param memoff: (C++: uval_t) offset within member - @param tif: (C++: const tinfo_t &) type info - @param flags: (C++: int) Set member tinfo flags - -ida_struct.set_member_type (function) - 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++: flags64_t) - @param mt: (C++: const opinfo_t *) opinfo_t const * - @param nbytes: (C++: asize_t) - -ida_struct.set_struc_align (function) - 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 (function) - set_struc_cmt(id, cmt, repeatable) -> bool - Set structure comment. - - @param id: (C++: tid_t) - @param cmt: (C++: const char *) char const * - @param repeatable: (C++: bool) - -ida_struct.set_struc_hidden (function) - 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 (function) - 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 *) struc_t const * - @param idx: (C++: uval_t) - -ida_struct.set_struc_listed (function) - 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 (function) - set_struc_name(id, name) -> bool - Set structure name. - - @param id: (C++: tid_t) - @param name: (C++: const char *) char const * - -ida_struct.stroff_as_size (function) - stroff_as_size(plen, sptr, value) -> bool - - @param plen: int - @param sptr: struc_t const * - @param value: asize_t - - stroff_as_size(plen, tif, value) -> bool - - @param plen: int - @param tif: tinfo_t const & - @param value: asize_t - -ida_struct.struc_t (class) - Proxy of C++ struc_t class. - -ida_struct.struc_t.__get_members__ (method) - __get_members__(self) -> dyn_member_ref_array - -ida_struct.struc_t.__init__ (method) - -ida_struct.struc_t.age (variable) - not used - -ida_struct.struc_t.from_til (method) - from_til(self) -> bool - Does structure come from a type library? - -ida_struct.struc_t.get_alignment (method) - get_alignment(self) -> int - See SF_ALIGN. - -ida_struct.struc_t.get_last_member (method) - get_last_member(self) -> member_t - -ida_struct.struc_t.get_member (method) - -ida_struct.struc_t.has_union (method) - has_union(self) -> bool - Has members of type "union"? - -ida_struct.struc_t.id (variable) - struct id - -ida_struct.struc_t.is_choosable (method) - is_choosable(self) -> bool - Is included in chooser list? Use set_struc_listed to change the listed status - -ida_struct.struc_t.is_copyof (method) - is_copyof(self) -> bool - Is copied from a local type? - -ida_struct.struc_t.is_frame (method) - is_frame(self) -> bool - Is this structure a function frame? - -ida_struct.struc_t.is_ghost (method) - is_ghost(self) -> bool - Is a ghost copy of a local type? - -ida_struct.struc_t.is_hidden (method) - is_hidden(self) -> bool - Is the structure collapsed? Use set_struc_hidden to change the hidden status - -ida_struct.struc_t.is_mappedto (method) - is_mappedto(self) -> bool - Is mapped to a local type? - -ida_struct.struc_t.is_synced (method) - is_synced(self) -> bool - Is synced with a local type? - -ida_struct.struc_t.is_union (method) - is_union(self) -> bool - Is a union? - -ida_struct.struc_t.is_varstr (method) - is_varstr(self) -> bool - Is variable size structure? - -ida_struct.struc_t.like_union (method) - like_union(self) -> bool - Is a union or contains members of type "union"? - -ida_struct.struc_t.members (variable) - only defined members are stored here. there may be gaps between members. - -ida_struct.struc_t.memqty (variable) - number of members - -ida_struct.struc_t.ordinal (variable) - corresponding local type ordinal number - -ida_struct.struc_t.props (variable) - Structure properties - -ida_struct.struc_t.set_alignment (method) - set_alignment(self, shift) - Do not use; use set_struc_align() - - @param shift: (C++: int) - -ida_struct.struct_field_visitor_t (class) - Proxy of C++ struct_field_visitor_t class. - -ida_struct.struct_field_visitor_t.__disown__ (method) - -ida_struct.struct_field_visitor_t.__init__ (method) - __init__(self) -> struct_field_visitor_t - - @param self: PyObject * - -ida_struct.struct_field_visitor_t.visit_field (method) - visit_field(self, sptr, mptr) -> int - - @param sptr: struc_t * - @param mptr: member_t * - -ida_struct.udm_visitor_t (class) - Proxy of C++ udm_visitor_t class. - -ida_struct.udm_visitor_t.__disown__ (method) - -ida_struct.udm_visitor_t.__init__ (method) - __init__(self) -> udm_visitor_t - - @param self: PyObject * - -ida_struct.udm_visitor_t.visit_udm (method) - visit_udm(self, tid, tif, udt, idx) -> int - - @param tid: (C++: tid_t) udt tid - @param tif: (C++: const tinfo_t *) udt type info (may be nullptr for corrupted idbs) - @param udt: (C++: const udt_type_data_t *) udt type data (may be nullptr for corrupted idbs) - @param idx: (C++: ssize_t) the index of udt the member (may be -1 if udm was not found) - -ida_struct.unsync_and_delete_struc (function) - unsync_and_delete_struc(sptr) - Delete the structure but leave synced ltudt unchanged. Note del_struc() deletes - both ASM struc and the corresponding local type - - @param sptr: (C++: struc_t *) - -ida_struct.visit_stroff_fields (function) - visit_stroff_fields(sfv, path, disp, appzero) -> flags64_t - - @param sfv: struct_field_visitor_t & - @param path: tid_t const * - @param disp: adiff_t * - @param appzero: bool - -ida_struct.visit_stroff_udms (function) - visit_stroff_udms(sfv, path, disp, appzero) -> int - 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: (C++: udm_visitor_t &) visitor object - @param path: (C++: const tid_t *) struct path (path[0] contains the initial struct id) - @param disp: (C++: adiff_t *) offset into structure - @param appzero: (C++: bool) should visit field at offset zero? - @return: visitor result - -ida_tryblks (module) +ida_tryblks Architecture independent exception handling info. Try blocks have the following general properties: * A try block specifies a possibly fragmented guarded code region. * Each try block has always at least one catch/except block description * Each catch block contains its boundaries and a filter. - * Additionally a catch block can hold sp adjustment and the offset to the - exception object offset (C++). - * Try blocks can be nested. Nesting is automatically calculated at the retrieval - time. + * Additionally a catch block can hold sp adjustment and the offset to the exception object offset (C++). + * Try blocks can be nested. Nesting is automatically calculated at the retrieval time. * There may be (nested) multiple try blocks starting at the same address. - See examples in tests/input/src/eh_tests. + + See examples in tests/input/src/eh_tests. + -ida_tryblks.TBERR_EMPTY (variable) +ida_tryblks.TBEA_CATCH + is EA the start of a c++ catch/cleanup block? + +ida_tryblks.TBEA_FALLTHRU + is there a fall through into provided ea from an unwind region + +ida_tryblks.TBEA_SEHFILT + is EA the start of a seh filter? + +ida_tryblks.TBEA_SEHLPAD + is EA the start of a seh finally/except block? + +ida_tryblks.TBEA_SEHTRY + is EA within a seh try block + +ida_tryblks.TBEA_TRY + is EA within a c++ try block? + +ida_tryblks.TBERR_EMPTY empty try block -ida_tryblks.TBERR_END (variable) +ida_tryblks.TBERR_END bad end address -ida_tryblks.TBERR_INTERSECT (variable) +ida_tryblks.TBERR_INTERSECT range would intersect inner tryblk -ida_tryblks.TBERR_KIND (variable) +ida_tryblks.TBERR_KIND illegal try block kind -ida_tryblks.TBERR_NO_CATCHES (variable) +ida_tryblks.TBERR_NO_CATCHES no catch blocks at all -ida_tryblks.TBERR_OK (variable) +ida_tryblks.TBERR_OK ok -ida_tryblks.TBERR_ORDER (variable) +ida_tryblks.TBERR_ORDER bad address order -ida_tryblks.TBERR_START (variable) +ida_tryblks.TBERR_START bad start address -ida_tryblks.add_tryblk (function) - add_tryblk(tb) -> int - Add one try block information. +ida_tryblks.add_tryblk(tb: "tryblk_t") -> int + Add one try block information. + + @param tb: try block to add. + @returns error code; 0 means good + +ida_tryblks.catch_t + +ida_tryblks.catch_t.__init__(self) + +ida_tryblks.catchvec_t + +ida_tryblks.catchvec_t.__eq__(self, r: "catchvec_t") -> bool + +ida_tryblks.catchvec_t.__getitem__(self, i: "size_t") -> "catch_t const &" + +ida_tryblks.catchvec_t.__init__(self, *args) + +ida_tryblks.catchvec_t.__len__(self) -> "size_t" + +ida_tryblks.catchvec_t.__ne__(self, r: "catchvec_t") -> bool + +ida_tryblks.catchvec_t.__setitem__(self, i: "size_t", v: "catch_t") -> None + +ida_tryblks.catchvec_t._del(self, x: "catch_t") -> bool + +ida_tryblks.catchvec_t.add_unique(self, x: "catch_t") -> bool + +ida_tryblks.catchvec_t.append(self, x: "catch_t") -> None + +ida_tryblks.catchvec_t.at(self, _idx: "size_t") -> "catch_t const &" + +ida_tryblks.catchvec_t.begin(self, *args) -> "qvector< catch_t >::const_iterator" + +ida_tryblks.catchvec_t.capacity(self) -> "size_t" + +ida_tryblks.catchvec_t.clear(self) -> None + +ida_tryblks.catchvec_t.empty(self) -> bool + +ida_tryblks.catchvec_t.end(self, *args) -> "qvector< catch_t >::const_iterator" + +ida_tryblks.catchvec_t.erase(self, *args) -> "qvector< catch_t >::iterator" + +ida_tryblks.catchvec_t.extend(self, x: "catchvec_t") -> None + +ida_tryblks.catchvec_t.extract(self) -> "catch_t *" + +ida_tryblks.catchvec_t.find(self, *args) -> "qvector< catch_t >::const_iterator" + +ida_tryblks.catchvec_t.grow(self, *args) -> None + +ida_tryblks.catchvec_t.has(self, x: "catch_t") -> bool + +ida_tryblks.catchvec_t.inject(self, s: "catch_t", len: "size_t") -> None + +ida_tryblks.catchvec_t.insert(self, it: "catch_t", x: "catch_t") -> "qvector< catch_t >::iterator" + +ida_tryblks.catchvec_t.pop_back(self) -> None + +ida_tryblks.catchvec_t.push_back(self, *args) -> "catch_t &" + +ida_tryblks.catchvec_t.qclear(self) -> None + +ida_tryblks.catchvec_t.reserve(self, cnt: "size_t") -> None + +ida_tryblks.catchvec_t.resize(self, *args) -> None + +ida_tryblks.catchvec_t.size(self) -> "size_t" + +ida_tryblks.catchvec_t.swap(self, r: "catchvec_t") -> None + +ida_tryblks.catchvec_t.truncate(self) -> None + +ida_tryblks.del_tryblks(range: "range_t") -> None + Delete try block information in the specified range. + + @param range: the range to be cleared + +ida_tryblks.find_syseh(ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Find the start address of the system eh region including the argument. + + @param ea: search address + @returns start address of surrounding tryblk, otherwise BADADDR + +ida_tryblks.get_tryblks(tbv: "tryblks_t", range: "range_t") -> "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 nullptr + @param range: address range to change + @returns number of found try blocks + +ida_tryblks.is_ea_tryblks(ea: ida_idaapi.ea_t, flags: int) -> bool + Check if the given address ea is part of tryblks description. + + @param ea: address to check + @param flags: combination of flags for is_ea_tryblks() + +ida_tryblks.seh_t + +ida_tryblks.seh_t.__init__(self) + +ida_tryblks.seh_t.clear(self) -> None + +ida_tryblks.try_handler_t + +ida_tryblks.try_handler_t.__init__(self) + +ida_tryblks.try_handler_t.clear(self) -> None + +ida_tryblks.tryblk_t + +ida_tryblks.tryblk_t.__init__(self, *args) + +ida_tryblks.tryblk_t.clear(self) -> None + +ida_tryblks.tryblk_t.cpp(self) -> "catchvec_t &" + +ida_tryblks.tryblk_t.empty(self) -> bool + +ida_tryblks.tryblk_t.get_kind(self) -> "uchar" + +ida_tryblks.tryblk_t.is_cpp(self) -> bool + +ida_tryblks.tryblk_t.is_seh(self) -> bool + +ida_tryblks.tryblk_t.seh(self) -> "seh_t &" + +ida_tryblks.tryblk_t.set_cpp(self) -> "catchvec_t &" + +ida_tryblks.tryblk_t.set_seh(self) -> "seh_t &" + +ida_tryblks.tryblks_t + +ida_tryblks.tryblks_t.__eq__(self, r: "tryblks_t") -> bool + +ida_tryblks.tryblks_t.__getitem__(self, i: "size_t") -> "tryblk_t const &" + +ida_tryblks.tryblks_t.__init__(self, *args) + +ida_tryblks.tryblks_t.__len__(self) -> "size_t" + +ida_tryblks.tryblks_t.__ne__(self, r: "tryblks_t") -> bool + +ida_tryblks.tryblks_t.__setitem__(self, i: "size_t", v: "tryblk_t") -> None + +ida_tryblks.tryblks_t._del(self, x: "tryblk_t") -> bool + +ida_tryblks.tryblks_t.add_unique(self, x: "tryblk_t") -> bool + +ida_tryblks.tryblks_t.append(self, x: "tryblk_t") -> None + +ida_tryblks.tryblks_t.at(self, _idx: "size_t") -> "tryblk_t const &" + +ida_tryblks.tryblks_t.begin(self, *args) -> "qvector< tryblk_t >::const_iterator" + +ida_tryblks.tryblks_t.capacity(self) -> "size_t" + +ida_tryblks.tryblks_t.clear(self) -> None + +ida_tryblks.tryblks_t.empty(self) -> bool + +ida_tryblks.tryblks_t.end(self, *args) -> "qvector< tryblk_t >::const_iterator" + +ida_tryblks.tryblks_t.erase(self, *args) -> "qvector< tryblk_t >::iterator" + +ida_tryblks.tryblks_t.extend(self, x: "tryblks_t") -> None + +ida_tryblks.tryblks_t.extract(self) -> "tryblk_t *" + +ida_tryblks.tryblks_t.find(self, *args) -> "qvector< tryblk_t >::const_iterator" + +ida_tryblks.tryblks_t.grow(self, *args) -> None + +ida_tryblks.tryblks_t.has(self, x: "tryblk_t") -> bool + +ida_tryblks.tryblks_t.inject(self, s: "tryblk_t", len: "size_t") -> None + +ida_tryblks.tryblks_t.insert(self, it: "tryblk_t", x: "tryblk_t") -> "qvector< tryblk_t >::iterator" + +ida_tryblks.tryblks_t.pop_back(self) -> None + +ida_tryblks.tryblks_t.push_back(self, *args) -> "tryblk_t &" + +ida_tryblks.tryblks_t.qclear(self) -> None + +ida_tryblks.tryblks_t.reserve(self, cnt: "size_t") -> None + +ida_tryblks.tryblks_t.resize(self, *args) -> None + +ida_tryblks.tryblks_t.size(self) -> "size_t" + +ida_tryblks.tryblks_t.swap(self, r: "tryblks_t") -> None + +ida_tryblks.tryblks_t.truncate(self) -> None + +ida_typeinf + Type information in IDA. - @param tb: (C++: const tryblk_t &) try block to add. - @return: error code; 0 means good - -ida_tryblks.catch_t (class) - Proxy of C++ catch_t class. - -ida_tryblks.catch_t.__init__ (method) - __init__(self) -> catch_t - -ida_tryblks.catchvec_t (class) - Proxy of C++ qvector< catch_t > class. - -ida_tryblks.catchvec_t.__eq__ (method) - __eq__(self, r) -> bool + In IDA, types are represented by and manipulated through tinfo_t objects. + A tinfo_t can represent a simple type (e.g., `int`, `float`), a complex type (a structure, enum, union, typedef), or even an array, or a function prototype. + The key types in this file are: - @param r: qvector< catch_t > const & - -ida_tryblks.catchvec_t.__getitem__ (method) - __getitem__(self, i) -> catch_t + * til_t - a type info library. Holds type information in serialized form. + * tinfo_t - information about a type (simple, complex, ...) - @param i: size_t - -ida_tryblks.catchvec_t.__init__ (method) - __init__(self) -> catchvec_t - __init__(self, x) -> catchvec_t - @param x: qvector< catch_t > const & - -ida_tryblks.catchvec_t.__len__ (method) - __len__(self) -> size_t - -ida_tryblks.catchvec_t.__ne__ (method) - __ne__(self, r) -> bool + # Glossary + All throughout this file, there are certain terms that will keep appearing: - @param r: qvector< catch_t > const & - -ida_tryblks.catchvec_t.__setitem__ (method) - __setitem__(self, i, v) + * udt: "user-defined type": a structure or union - but not enums. See udt_type_data_t + * udm: "udt member": i.e., a structure or union member. See udm_t + * edm: "enum member": i.e., an enumeration member - i.e., an enumerator. See edm_t - @param i: size_t - @param v: catch_t const & - -ida_tryblks.catchvec_t._del (method) - _del(self, x) -> bool - Parameters - ---------- - x: catch_t const & - -ida_tryblks.catchvec_t.add_unique (method) - add_unique(self, x) -> bool + # Under the hood + The tinfo_t type provides a lot of useful methods already, but it's possible to achieve even more by retrieving its contents into the container classes: - @param x: catch_t const & - -ida_tryblks.catchvec_t.at (method) - at(self, _idx) -> catch_t + * udt_type_data_t - for structures & unions. See tinfo_t::get_udt_details . Essentially, a vector of udm_t + * enum_type_data_t - for enumerations. See tinfo_t::get_enum_details . Essentially, a vector of edm_t + * ptr_type_data_t - for pointers. See tinfo_t::get_ptr_details + * array_type_data_t - for arrays. See tinfo_t::get_array_details + * func_type_data_t - for function prototypes. See tinfo_t::get_func_details + * bitfield_type_data_t - for bitfields. See tinfo_t::get_bitfield_details - @param _idx: size_t - -ida_tryblks.catchvec_t.begin (method) - begin(self) -> catch_t - -ida_tryblks.catchvec_t.capacity (method) - capacity(self) -> size_t - -ida_tryblks.catchvec_t.clear (method) - clear(self) - -ida_tryblks.catchvec_t.empty (method) - empty(self) -> bool - -ida_tryblks.catchvec_t.end (method) - end(self) -> catch_t - -ida_tryblks.catchvec_t.erase (method) - erase(self, it) -> catch_t - @param it: qvector< catch_t >::iterator - - erase(self, first, last) -> catch_t - - @param first: qvector< catch_t >::iterator - @param last: qvector< catch_t >::iterator - -ida_tryblks.catchvec_t.extract (method) - extract(self) -> catch_t - -ida_tryblks.catchvec_t.find (method) - find(self, x) -> catch_t - - @param x: catch_t const & - -ida_tryblks.catchvec_t.grow (method) - grow(self, x=catch_t()) - - @param x: catch_t const & - -ida_tryblks.catchvec_t.has (method) - has(self, x) -> bool - - @param x: catch_t const & - -ida_tryblks.catchvec_t.inject (method) - inject(self, s, len) - - @param s: catch_t * - @param len: size_t - -ida_tryblks.catchvec_t.insert (method) - insert(self, it, x) -> catch_t - - @param it: qvector< catch_t >::iterator - @param x: catch_t const & - -ida_tryblks.catchvec_t.pop_back (method) - pop_back(self) - -ida_tryblks.catchvec_t.push_back (method) - push_back(self, x) - - @param x: catch_t const & - - push_back(self) -> catch_t - -ida_tryblks.catchvec_t.qclear (method) - qclear(self) - -ida_tryblks.catchvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_tryblks.catchvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: catch_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_tryblks.catchvec_t.size (method) - size(self) -> size_t - -ida_tryblks.catchvec_t.swap (method) - swap(self, r) - - @param r: qvector< catch_t > & - -ida_tryblks.catchvec_t.truncate (method) - truncate(self) - -ida_tryblks.del_tryblks (function) - del_tryblks(range) - Delete try block information in the specified range. - - @param range: (C++: const range_t &) the range to be cleared - -ida_tryblks.find_syseh (function) - find_syseh(ea) -> ea_t - Find the start address of the system eh region including the argument. - - @param ea: (C++: ea_t) search address - @return: start address of surrounding tryblk, otherwise BADADDR - -ida_tryblks.get_tryblks (function) - 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: (C++: tryblks_t *) output buffer; may be nullptr - @param range: (C++: const range_t &) address range to change - @return: number of found try blocks - -ida_tryblks.is_ea_tryblks (function) - is_ea_tryblks(ea, flags) -> bool - Check if the given address ea is part of tryblks description. - - @param ea: (C++: ea_t) address to check - @param flags: (C++: uint32) combination of flags for is_ea_tryblks() - -ida_tryblks.seh_t (class) - Proxy of C++ seh_t class. - -ida_tryblks.seh_t.__init__ (method) - __init__(self) -> seh_t - -ida_tryblks.seh_t.clear (method) - clear(self) - -ida_tryblks.try_handler_t (class) - Proxy of C++ try_handler_t class. - -ida_tryblks.try_handler_t.__init__ (method) - __init__(self) -> try_handler_t - -ida_tryblks.try_handler_t.clear (method) - clear(self) - -ida_tryblks.tryblk_t (class) - Proxy of C++ tryblk_t class. - -ida_tryblks.tryblk_t.__init__ (method) - __init__(self) -> tryblk_t - __init__(self, r) -> tryblk_t - - @param r: tryblk_t const & - -ida_tryblks.tryblk_t.clear (method) - clear(self) - -ida_tryblks.tryblk_t.cpp (method) - cpp(self) -> catchvec_t - -ida_tryblks.tryblk_t.empty (method) - empty(self) -> bool - -ida_tryblks.tryblk_t.get_kind (method) - get_kind(self) -> uchar - -ida_tryblks.tryblk_t.is_cpp (method) - is_cpp(self) -> bool - -ida_tryblks.tryblk_t.is_seh (method) - is_seh(self) -> bool - -ida_tryblks.tryblk_t.seh (method) - seh(self) -> seh_t - -ida_tryblks.tryblk_t.set_cpp (method) - set_cpp(self) -> catchvec_t - -ida_tryblks.tryblk_t.set_seh (method) - set_seh(self) -> seh_t - -ida_tryblks.tryblks_t (class) - Proxy of C++ qvector< tryblk_t > class. - -ida_tryblks.tryblks_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< tryblk_t > const & - -ida_tryblks.tryblks_t.__getitem__ (method) - __getitem__(self, i) -> tryblk_t - - @param i: size_t - -ida_tryblks.tryblks_t.__init__ (method) - __init__(self) -> tryblks_t - __init__(self, x) -> tryblks_t - - @param x: qvector< tryblk_t > const & - -ida_tryblks.tryblks_t.__len__ (method) - __len__(self) -> size_t - -ida_tryblks.tryblks_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< tryblk_t > const & - -ida_tryblks.tryblks_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: tryblk_t const & - -ida_tryblks.tryblks_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: tryblk_t const & - -ida_tryblks.tryblks_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: tryblk_t const & - -ida_tryblks.tryblks_t.at (method) - at(self, _idx) -> tryblk_t - - @param _idx: size_t - -ida_tryblks.tryblks_t.begin (method) - begin(self) -> tryblk_t - -ida_tryblks.tryblks_t.capacity (method) - capacity(self) -> size_t - -ida_tryblks.tryblks_t.clear (method) - clear(self) - -ida_tryblks.tryblks_t.empty (method) - empty(self) -> bool - -ida_tryblks.tryblks_t.end (method) - end(self) -> tryblk_t - -ida_tryblks.tryblks_t.erase (method) - erase(self, it) -> tryblk_t - - @param it: qvector< tryblk_t >::iterator - - erase(self, first, last) -> tryblk_t - - @param first: qvector< tryblk_t >::iterator - @param last: qvector< tryblk_t >::iterator - -ida_tryblks.tryblks_t.extract (method) - extract(self) -> tryblk_t - -ida_tryblks.tryblks_t.find (method) - find(self, x) -> tryblk_t - - @param x: tryblk_t const & - -ida_tryblks.tryblks_t.grow (method) - grow(self, x=tryblk_t()) - - @param x: tryblk_t const & - -ida_tryblks.tryblks_t.has (method) - has(self, x) -> bool - - @param x: tryblk_t const & - -ida_tryblks.tryblks_t.inject (method) - inject(self, s, len) - - @param s: tryblk_t * - @param len: size_t - -ida_tryblks.tryblks_t.insert (method) - insert(self, it, x) -> tryblk_t - - @param it: qvector< tryblk_t >::iterator - @param x: tryblk_t const & - -ida_tryblks.tryblks_t.pop_back (method) - pop_back(self) - -ida_tryblks.tryblks_t.push_back (method) - push_back(self, x) - - @param x: tryblk_t const & - - push_back(self) -> tryblk_t - -ida_tryblks.tryblks_t.qclear (method) - qclear(self) - -ida_tryblks.tryblks_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_tryblks.tryblks_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: tryblk_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_tryblks.tryblks_t.size (method) - size(self) -> size_t - -ida_tryblks.tryblks_t.swap (method) - swap(self, r) - - @param r: qvector< tryblk_t > & - -ida_tryblks.tryblks_t.truncate (method) - truncate(self) - -ida_typeinf (module) - Describes the type information records in IDA. - - The recommended way of using type info is to use the tinfo_t class. The type - information is internally kept as an array of bytes terminated by 0. - - Items in brackets [] are optional and sometimes are omitted. type_t... means a - sequence of type_t bytes which defines a type. - - @note: to work with the types of instructions or data in the database, use - get_tinfo()/set_tinfo() and similar functions. - -ida_typeinf.ADDTIL_ABORTED (variable) + # Attached & detached tinfo_t objects + tinfo_t objects can be attached to a til_t library, or can be created without using any til_t. + Here is an example, assigning a function prototype: + func_type_data_t func_info; + funcarg_t argc; argc.name = "argc"; argc.type = tinfo_t(BT_INT); func_info.push_back(argc); + funcarg_t argv; argc.name = "argv"; argc.type = tinfo_t("const char **"); func_info.push_back(argv) + tinfo_t tif; if ( tif.create_func(func_info) ) { ea_t ea = // get address of "main" apply_tinfo(ea, tif, TINFO_DEFINITE); } + This code manipulates a "detached" tinfo_t object, which does not depend on any til_t file. However, any complex type will require a til_t file. In IDA, there is always a default til_t file for each idb file. This til_t file can be specified by nullptr. + On the other hand, the following code manipulates an "attached" tinfo_t object, and any operation that modifies it, will also modify it in the hosting til_t: + tinfo_t tif; Load type from the "Local Types" til_t. Note: we could have used `get_idati()` instead of nullptr if ( tif.get_named_type(nullptr, "my_struct_t") ) tif.add_udm("extra_field", "unsigned long long"); + You can check if a tinfo_t instance is attached to a type in a til_t file by calling tinfo_t::is_typeref + + +ida_typeinf.ADDTIL_ABORTED til was not loaded (incompatible til rejected by user) -ida_typeinf.ADDTIL_COMP (variable) +ida_typeinf.ADDTIL_COMP ok, but til is not compatible with the current compiler -ida_typeinf.ADDTIL_DEFAULT (variable) +ida_typeinf.ADDTIL_DEFAULT default behavior -ida_typeinf.ADDTIL_FAILED (variable) +ida_typeinf.ADDTIL_FAILED something bad, the warning is displayed -ida_typeinf.ADDTIL_INCOMP (variable) +ida_typeinf.ADDTIL_INCOMP load incompatible tils -ida_typeinf.ADDTIL_OK (variable) +ida_typeinf.ADDTIL_OK ok, til is loaded -ida_typeinf.ADDTIL_SILENT (variable) +ida_typeinf.ADDTIL_SILENT do not ask any questions -ida_typeinf.ALOC_CUSTOM (variable) +ida_typeinf.ALOC_CUSTOM custom argloc (7 or higher) -ida_typeinf.ALOC_DIST (variable) +ida_typeinf.ALOC_DIST distributed (scattered) -ida_typeinf.ALOC_NONE (variable) +ida_typeinf.ALOC_NONE none -ida_typeinf.ALOC_REG1 (variable) +ida_typeinf.ALOC_REG1 one register (and offset within it) -ida_typeinf.ALOC_REG2 (variable) +ida_typeinf.ALOC_REG2 register pair -ida_typeinf.ALOC_RREL (variable) +ida_typeinf.ALOC_RREL register relative -ida_typeinf.ALOC_STACK (variable) +ida_typeinf.ALOC_STACK stack offset -ida_typeinf.ALOC_STATIC (variable) +ida_typeinf.ALOC_STATIC global address -ida_typeinf.ARGREGS_BY_SLOTS (variable) +ida_typeinf.ARGREGS_BY_SLOTS fixed FP/GP register per each slot (like vc64) -ida_typeinf.ARGREGS_FP_CONSUME_GP (variable) +ida_typeinf.ARGREGS_FP_MASKS_GP FP register also consumes one or more GP regs but not vice versa (aix ppc ABI) -ida_typeinf.ARGREGS_GP_ONLY (variable) +ida_typeinf.ARGREGS_GP_ONLY GP registers used for all arguments. -ida_typeinf.ARGREGS_INDEPENDENT (variable) +ida_typeinf.ARGREGS_INDEPENDENT FP/GP registers used separately (like gcc64) -ida_typeinf.ARGREGS_MIPS_O32 (variable) +ida_typeinf.ARGREGS_MIPS_O32 MIPS ABI o32. -ida_typeinf.BADSIZE (variable) +ida_typeinf.ARGREGS_RISCV + Risc-V API FP arguments are passed in GP registers if FP registers are exhausted and GP ones are not. Wide FP arguments are passed in GP registers. Variadic FP arguments are passed in GP registers. + + +ida_typeinf.BADSIZE bad type size -ida_typeinf.BFA_FUNC_EXT_FORMAT (variable) +ida_typeinf.BFA_FUNC_EXT_FORMAT This is NOT a real attribute (used internally as marker for extended format) -ida_typeinf.BFA_FUNC_MARKER (variable) +ida_typeinf.BFA_FUNC_MARKER This is NOT a cc! (used internally as a marker) -ida_typeinf.BFA_HIGH (variable) +ida_typeinf.BFA_HIGH high level prototype (with possibly hidden args) -ida_typeinf.BFA_NORET (variable) +ida_typeinf.BFA_NORET __noreturn -ida_typeinf.BFA_PURE (variable) +ida_typeinf.BFA_PURE __pure -ida_typeinf.BFA_STATIC (variable) +ida_typeinf.BFA_STATIC static -ida_typeinf.BFA_VIRTUAL (variable) +ida_typeinf.BFA_VIRTUAL virtual -ida_typeinf.BTE_ALWAYS (variable) +ida_typeinf.BTE_ALWAYS this bit MUST be present -ida_typeinf.BTE_BITMASK (variable) +ida_typeinf.BTE_BITMASK 'subarrays'. In this case ANY record has the following format: * 'de' mask (has name) * 'dt' cnt * cnt records of 'de' values (cnt CAN be 0) - @note: delta for ALL subsegment is ONE -ida_typeinf.BTE_CHAR (variable) +ida_typeinf.BTE_CHAR char or hex -ida_typeinf.BTE_HEX (variable) +ida_typeinf.BTE_HEX hex -ida_typeinf.BTE_OUT_MASK (variable) +ida_typeinf.BTE_OUT_MASK output style mask -ida_typeinf.BTE_RESERVED (variable) - must be 0, in order to distinguish from a tah-byte +ida_typeinf.BTE_RESERVED + must be 0, in order to distinguish from a tah-byte + -ida_typeinf.BTE_SDEC (variable) +ida_typeinf.BTE_SDEC signed decimal -ida_typeinf.BTE_SIZE_MASK (variable) +ida_typeinf.BTE_SIZE_MASK storage size. * if == 0 then inf_get_cc_size_e() * else 1 << (n -1) = 1,2,4,8 - * n == 5,6,7 are reserved + * n == 5,6,7 are reserved + + + -ida_typeinf.BTE_UDEC (variable) +ida_typeinf.BTE_UDEC unsigned decimal -ida_typeinf.BTF_BOOL (variable) +ida_typeinf.BTF_BOOL boolean -ida_typeinf.BTF_BYTE (variable) +ida_typeinf.BTF_BYTE byte -ida_typeinf.BTF_CHAR (variable) +ida_typeinf.BTF_CHAR signed char -ida_typeinf.BTF_DOUBLE (variable) +ida_typeinf.BTF_DOUBLE double -ida_typeinf.BTF_ENUM (variable) +ida_typeinf.BTF_ENUM enum -ida_typeinf.BTF_FLOAT (variable) +ida_typeinf.BTF_FLOAT float -ida_typeinf.BTF_INT (variable) +ida_typeinf.BTF_INT int, unknown signedness -ida_typeinf.BTF_INT128 (variable) +ida_typeinf.BTF_INT128 signed 128-bit value -ida_typeinf.BTF_INT16 (variable) +ida_typeinf.BTF_INT16 signed short -ida_typeinf.BTF_INT32 (variable) +ida_typeinf.BTF_INT32 signed int -ida_typeinf.BTF_INT64 (variable) +ida_typeinf.BTF_INT64 signed long -ida_typeinf.BTF_INT8 (variable) +ida_typeinf.BTF_INT8 signed byte -ida_typeinf.BTF_LDOUBLE (variable) +ida_typeinf.BTF_LDOUBLE long double -ida_typeinf.BTF_SINT (variable) +ida_typeinf.BTF_SINT singed int -ida_typeinf.BTF_STRUCT (variable) +ida_typeinf.BTF_STRUCT struct -ida_typeinf.BTF_TBYTE (variable) +ida_typeinf.BTF_TBYTE see BTMT_SPECFLT -ida_typeinf.BTF_TYPEDEF (variable) +ida_typeinf.BTF_TYPEDEF typedef -ida_typeinf.BTF_UCHAR (variable) +ida_typeinf.BTF_UCHAR unsigned char -ida_typeinf.BTF_UINT (variable) +ida_typeinf.BTF_UINT unsigned int -ida_typeinf.BTF_UINT128 (variable) +ida_typeinf.BTF_UINT128 unsigned 128-bit value -ida_typeinf.BTF_UINT16 (variable) +ida_typeinf.BTF_UINT16 unsigned short -ida_typeinf.BTF_UINT32 (variable) +ida_typeinf.BTF_UINT32 unsigned int -ida_typeinf.BTF_UINT64 (variable) +ida_typeinf.BTF_UINT64 unsigned long -ida_typeinf.BTF_UINT8 (variable) +ida_typeinf.BTF_UINT8 unsigned byte -ida_typeinf.BTF_UNION (variable) +ida_typeinf.BTF_UNION union -ida_typeinf.BTF_UNK (variable) +ida_typeinf.BTF_UNK unknown -ida_typeinf.BTF_VOID (variable) +ida_typeinf.BTF_VOID void -ida_typeinf.BTMT_ARRESERV (variable) +ida_typeinf.BTMT_ARRESERV reserved bit -ida_typeinf.BTMT_BFLDI16 (variable) +ida_typeinf.BTMT_BFLDI16 __int16 -ida_typeinf.BTMT_BFLDI32 (variable) +ida_typeinf.BTMT_BFLDI32 __int32 -ida_typeinf.BTMT_BFLDI64 (variable) +ida_typeinf.BTMT_BFLDI64 __int64 -ida_typeinf.BTMT_BFLDI8 (variable) +ida_typeinf.BTMT_BFLDI8 __int8 -ida_typeinf.BTMT_BOOL1 (variable) +ida_typeinf.BTMT_BOOL1 size 1byte -ida_typeinf.BTMT_BOOL2 (variable) +ida_typeinf.BTMT_BOOL2 size 2bytes - !inf_is_64bit() -ida_typeinf.BTMT_BOOL4 (variable) +ida_typeinf.BTMT_BOOL4 size 4bytes -ida_typeinf.BTMT_BOOL8 (variable) +ida_typeinf.BTMT_BOOL8 size 8bytes - inf_is_64bit() -ida_typeinf.BTMT_CHAR (variable) +ida_typeinf.BTMT_CHAR specify char or segment register * BT_INT8 - char * BT_INT - segment register - * other BT_INT... - don't use + * other BT_INT... - don't use + + + -ida_typeinf.BTMT_CLOSURE (variable) +ida_typeinf.BTMT_CLOSURE closure. - * if ptr to BT_FUNC - __closure. in this case next byte MUST be RESERVED_BYTE, - and after it BT_FUNC + * if ptr to BT_FUNC - __closure. in this case next byte MUST be RESERVED_BYTE, and after it BT_FUNC * else the next byte contains sizeof(ptr) allowed values are 1 - ph.max_ptr_size - * if value is bigger than ph.max_ptr_size, based_ptr_name_and_size() is called - to find out the typeinfo + * if value is bigger than ph.max_ptr_size, based_ptr_name_and_size() is called to find out the typeinfo + + + -ida_typeinf.BTMT_DEFBOOL (variable) +ida_typeinf.BTMT_DEFBOOL size is model specific or unknown(?) -ida_typeinf.BTMT_DEFCALL (variable) +ida_typeinf.BTMT_DEFCALL call method - default for model or unknown -ida_typeinf.BTMT_DEFPTR (variable) +ida_typeinf.BTMT_DEFPTR default for model -ida_typeinf.BTMT_DOUBLE (variable) +ida_typeinf.BTMT_DOUBLE double (8 bytes) -ida_typeinf.BTMT_FAR (variable) +ida_typeinf.BTMT_ENUM + enum: next byte bte_t (see below) N records: de delta(s) OR blocks (see below) + + +ida_typeinf.BTMT_FAR far -ida_typeinf.BTMT_FARCALL (variable) +ida_typeinf.BTMT_FARCALL function returns by retf -ida_typeinf.BTMT_FLOAT (variable) +ida_typeinf.BTMT_FLOAT float (4 bytes) -ida_typeinf.BTMT_INTCALL (variable) - function returns by iret in this case cc MUST be 'unknown' +ida_typeinf.BTMT_INTCALL + function returns by iret in this case cc MUST be 'unknown' + -ida_typeinf.BTMT_LNGDBL (variable) +ida_typeinf.BTMT_LNGDBL long double (compiler specific) -ida_typeinf.BTMT_NEAR (variable) +ida_typeinf.BTMT_NEAR near -ida_typeinf.BTMT_NEARCALL (variable) +ida_typeinf.BTMT_NEARCALL function returns by retn -ida_typeinf.BTMT_NONBASED (variable) - if set - array base==0 - format: dt num_elem; [tah-typeattrs]; type_t... - if num_elem==0 then the array size is unknown - else - format: da num_elem, base; [tah-typeattrs]; type_t... - used only for serialization +ida_typeinf.BTMT_NONBASED + set + array base==0 + format: dt num_elem; [tah-typeattrs]; type_t... + if num_elem==0 then the array size is unknown + + format: da num_elem, base; [tah-typeattrs]; type_t... + + + -ida_typeinf.BTMT_SIGNED (variable) +ida_typeinf.BTMT_SIGNED signed -ida_typeinf.BTMT_SIZE0 (variable) +ida_typeinf.BTMT_SIZE0 BT_VOID - normal void; BT_UNK - don't use -ida_typeinf.BTMT_SIZE12 (variable) +ida_typeinf.BTMT_SIZE12 size = 1 byte if BT_VOID; 2 if BT_UNK -ida_typeinf.BTMT_SIZE128 (variable) - size = 16 bytes if BT_VOID; unknown if BT_UNK (IN struct alignment - see below) +ida_typeinf.BTMT_SIZE128 + size = 16 bytes if BT_VOID; unknown if BT_UNK (IN struct alignment - see below) + -ida_typeinf.BTMT_SIZE48 (variable) +ida_typeinf.BTMT_SIZE48 size = 4 bytes if BT_VOID; 8 if BT_UNK -ida_typeinf.BTMT_SPECFLT (variable) - float (variable size). if processor_t::use_tbyte() then use - processor_t::tbyte_size, otherwise 2 bytes +ida_typeinf.BTMT_SPECFLT + float (variable size). if processor_t::use_tbyte() then use processor_t::tbyte_size, otherwise 2 bytes + -ida_typeinf.BTMT_TYPEDEF (variable) - named reference always p_string name +ida_typeinf.BTMT_STRUCT + struct: MCNT records: type_t; [sdacl-typeattrs]; + -ida_typeinf.BTMT_UNKSIGN (variable) +ida_typeinf.BTMT_TYPEDEF + named reference always p_string name + + +ida_typeinf.BTMT_UNION + union: MCNT records: type_t... + + +ida_typeinf.BTMT_UNKSIGN unknown signedness -ida_typeinf.BTMT_USIGNED (variable) +ida_typeinf.BTMT_USIGNED unsigned -ida_typeinf.BTM_CONST (variable) +ida_typeinf.BTM_CONST const -ida_typeinf.BTM_VOLATILE (variable) +ida_typeinf.BTM_VOLATILE volatile -ida_typeinf.BT_ARRAY (variable) +ida_typeinf.BT_ARRAY array -ida_typeinf.BT_BITFIELD (variable) - bitfield (only in struct) ['bitmasked' enum see below] next byte is dt ((size in - bits << 1) | (unsigned ? 1 : 0)) +ida_typeinf.BT_BITFIELD + bitfield (only in struct) ['bitmasked' enum see below] next byte is dt ((size in bits << 1) | (unsigned ? 1 : 0)) + -ida_typeinf.BT_BOOL (variable) +ida_typeinf.BT_BOOL bool -ida_typeinf.BT_COMPLEX (variable) - struct/union/enum/typedef. format: +ida_typeinf.BT_COMPLEX + struct/union/enum/typedef. format: [dt N (N=field count) if !BTMT_TYPEDEF] - if N == 0: - p_string name (unnamed types have names "anon_...") - [sdacl-typeattrs]; - else, for struct & union: - if N == 0x7FFE // Support for high (i.e., > 4095) members count - N = deserialize_de() - ALPOW = N & 0x7 - MCNT = N >> 3 - if MCNT == 0 - empty struct - if ALPOW == 0 - ALIGN = get_default_align() - else - ALIGN = (1 << (ALPOW - 1)) - [sdacl-typeattrs]; - else, for enums: - if N == 0x7FFE // Support for high enum entries count. - N = deserialize_de() - [tah-typeattrs]; + if N == 0: + p_string name (unnamed types have names "anon_...") + [sdacl-typeattrs]; + else, for struct & union: + if N == 0x7FFE // Support for high (i.e., > 4095) members count + N = deserialize_de() + ALPOW = N & 0x7 + MCNT = N >> 3 + if MCNT == 0 + empty struct + if ALPOW == 0 + ALIGN = get_default_align() + else + ALIGN = (1 << (ALPOW - 1)) + [sdacl-typeattrs]; + else, for enums: + if N == 0x7FFE // Support for high enum entries count. + N = deserialize_de() + [tah-typeattrs]; + -ida_typeinf.BT_FLOAT (variable) +ida_typeinf.BT_FLOAT float -ida_typeinf.BT_FUNC (variable) - function. format: +ida_typeinf.BT_FUNC + function. format: optional: CM_CC_SPOILED | num_of_spoiled_regs - if num_of_spoiled_reg == BFA_FUNC_MARKER: - ::bfa_byte - if (bfa_byte & BFA_FUNC_EXT_FORMAT) != 0 - ::fti_bits (only low bits: FTI_SPOILED,...,FTI_VIRTUAL) - num_of_spoiled_reg times: spoiled reg info (see - extract_spoiledreg) - else - bfa_byte is function attribute byte (see Function attribute - byte...) - else: - num_of_spoiled_reg times: spoiled reg info (see - extract_spoiledreg) - cm_t ... calling convention and memory model - [tah-typeattrs]; - type_t ... return type; - [serialized argloc_t of returned value (if CM_CC_SPECIAL{PE} && !return - void); - if !CM_CC_VOIDARG: - dt N (N=number of parameters) - if ( N == 0 ) - if CM_CC_ELLIPSIS or CM_CC_SPECIALE - func(...) - else - parameters are unknown - else - N records: - type_t ... (i.e. type of each parameter) - [serialized argloc_t (if CM_CC_SPECIAL{PE})] (i.e. place of each - parameter) - [FAH_BYTE + de( funcarg_t::flags )] + if num_of_spoiled_reg == BFA_FUNC_MARKER: + ::bfa_byte + if (bfa_byte & BFA_FUNC_EXT_FORMAT) != 0 + ::fti_bits (only low bits: FTI_SPOILED,...,FTI_VIRTUAL) + num_of_spoiled_reg times: spoiled reg info (see extract_spoiledreg) + else + bfa_byte is function attribute byte (see Function attribute byte...) + else: + num_of_spoiled_reg times: spoiled reg info (see extract_spoiledreg) + cm_t ... calling convention and memory model + [tah-typeattrs]; + type_t ... return type; + [serialized argloc_t of returned value (if CM_CC_SPECIAL{PE} && !return void); + if !CM_CC_VOIDARG: + dt N (N=number of parameters) + if ( N == 0 ) + if CM_CC_ELLIPSIS or CM_CC_SPECIALE + func(...) + else + parameters are unknown + else + N records: + type_t ... (i.e. type of each parameter) + [serialized argloc_t (if CM_CC_SPECIAL{PE})] (i.e. place of each parameter) + [FAH_BYTE + de( funcarg_t::flags )] + -ida_typeinf.BT_INT (variable) +ida_typeinf.BT_INT natural int. (size provided by idp module) -ida_typeinf.BT_INT128 (variable) +ida_typeinf.BT_INT128 __int128 (for alpha & future use) -ida_typeinf.BT_INT16 (variable) +ida_typeinf.BT_INT16 __int16 -ida_typeinf.BT_INT32 (variable) +ida_typeinf.BT_INT32 __int32 -ida_typeinf.BT_INT64 (variable) +ida_typeinf.BT_INT64 __int64 -ida_typeinf.BT_INT8 (variable) +ida_typeinf.BT_INT8 __int8 -ida_typeinf.BT_PTR (variable) - pointer. has the following format: [db sizeof(ptr)]; [tah-typeattrs]; type_t... +ida_typeinf.BT_PTR + pointer. has the following format: [db sizeof(ptr)]; [tah-typeattrs]; type_t... + -ida_typeinf.BT_RESERVED (variable) +ida_typeinf.BT_RESERVED RESERVED. -ida_typeinf.BT_SEGREG (variable) +ida_typeinf.BT_SEGREG segment register -ida_typeinf.BT_UNK (variable) +ida_typeinf.BT_UNK unknown -ida_typeinf.BT_UNKNOWN (variable) +ida_typeinf.BT_UNKNOWN unknown size - for parameters -ida_typeinf.BT_UNK_BYTE (variable) +ida_typeinf.BT_UNK_BYTE 1 byte -ida_typeinf.BT_UNK_DWORD (variable) +ida_typeinf.BT_UNK_DWORD 4 bytes -ida_typeinf.BT_UNK_OWORD (variable) +ida_typeinf.BT_UNK_OWORD 16 bytes -ida_typeinf.BT_UNK_QWORD (variable) +ida_typeinf.BT_UNK_QWORD 8 bytes -ida_typeinf.BT_UNK_WORD (variable) +ida_typeinf.BT_UNK_WORD 2 bytes -ida_typeinf.BT_VOID (variable) +ida_typeinf.BT_VOID void -ida_typeinf.CC_ALLOW_ARGPERM (variable) +ida_typeinf.CC_ALLOW_ARGPERM disregard argument order? -ida_typeinf.CC_ALLOW_REGHOLES (variable) +ida_typeinf.CC_ALLOW_REGHOLES allow holes in register argument list? -ida_typeinf.CC_CDECL_OK (variable) +ida_typeinf.CC_CDECL_OK can use __cdecl calling convention? -ida_typeinf.CC_GOLANG_OK (variable) - can use __golang calling convention +ida_typeinf.CC_GOLANG_OK + can use __golang calling convention + -ida_typeinf.CC_HAS_ELLIPSIS (variable) +ida_typeinf.CC_HAS_ELLIPSIS function has a variable list of arguments? -ida_typeinf.CM_CC_CDECL (variable) +ida_typeinf.CM_CC_CDECL stack -ida_typeinf.CM_CC_ELLIPSIS (variable) +ida_typeinf.CM_CC_ELLIPSIS cdecl + ellipsis -ida_typeinf.CM_CC_FASTCALL (variable) +ida_typeinf.CM_CC_FASTCALL stack, purged (x86), first args are in regs (compiler-dependent) -ida_typeinf.CM_CC_GOLANG (variable) +ida_typeinf.CM_CC_GOLANG (Go) arguments and return value in stack -ida_typeinf.CM_CC_INVALID (variable) +ida_typeinf.CM_CC_INVALID this value is invalid -ida_typeinf.CM_CC_PASCAL (variable) +ida_typeinf.CM_CC_PASCAL stack, purged, reverse order of args -ida_typeinf.CM_CC_SPECIALE (variable) +ida_typeinf.CM_CC_SPECIAL + usercall: locations of all arguments and the return value are explicitly specified + + +ida_typeinf.CM_CC_SPECIALE CM_CC_SPECIAL with ellipsis -ida_typeinf.CM_CC_SPECIALP (variable) +ida_typeinf.CM_CC_SPECIALP Equal to CM_CC_SPECIAL, but with purged stack. -ida_typeinf.CM_CC_SPOILED (variable) - This is NOT a cc! Mark of __spoil record the low nibble is count and after n - {spoilreg_t} present real cm_t byte. if n == BFA_FUNC_MARKER, the next byte is - the function attribute byte. +ida_typeinf.CM_CC_SPOILED + This is NOT a cc! Mark of __spoil record the low nibble is count and after n {spoilreg_t} present real cm_t byte. if n == BFA_FUNC_MARKER, the next byte is the function attribute byte. + -ida_typeinf.CM_CC_STDCALL (variable) +ida_typeinf.CM_CC_STDCALL stack, purged -ida_typeinf.CM_CC_SWIFT (variable) +ida_typeinf.CM_CC_SWIFT (Swift) arguments and return values in registers (compiler-dependent) -ida_typeinf.CM_CC_THISCALL (variable) +ida_typeinf.CM_CC_THISCALL stack, purged (x86), first arg is in reg (compiler-dependent) -ida_typeinf.CM_CC_UNKNOWN (variable) +ida_typeinf.CM_CC_UNKNOWN unknown calling convention -ida_typeinf.CM_CC_VOIDARG (variable) - function without arguments if has other cc and argnum == 0, represent as f() - - unknown list +ida_typeinf.CM_CC_VOIDARG + function without arguments if has other cc and argnum == 0, represent as f() - unknown list + -ida_typeinf.CM_N16_F32 (variable) +ida_typeinf.CM_M_FF + large: code=far, data=far + +ida_typeinf.CM_M_FN + medium: code=far, data=near + +ida_typeinf.CM_M_NF + compact: code=near, data=far + +ida_typeinf.CM_M_NN + small: code=near, data=near (or unknown if CM_UNKNOWN) + +ida_typeinf.CM_N16_F32 near 2 bytes, far 4 bytes -ida_typeinf.CM_N32_F48 (variable) +ida_typeinf.CM_N32_F48 near 4 bytes, far 6 bytes -ida_typeinf.CM_N64 (variable) +ida_typeinf.CM_N64 if sizeof(int)>2: near 8 bytes, far 8 bytes -ida_typeinf.CM_N8_F16 (variable) +ida_typeinf.CM_N8_F16 if sizeof(int)<=2: near 1 byte, far 2 bytes -ida_typeinf.CM_UNKNOWN (variable) +ida_typeinf.CM_UNKNOWN unknown -ida_typeinf.COMP_BC (variable) +ida_typeinf.COMP_BC Borland C++. -ida_typeinf.COMP_BP (variable) +ida_typeinf.COMP_BP Delphi. -ida_typeinf.COMP_GNU (variable) +ida_typeinf.COMP_GNU GNU C++. -ida_typeinf.COMP_MS (variable) +ida_typeinf.COMP_MS Visual C++. -ida_typeinf.COMP_UNK (variable) +ida_typeinf.COMP_UNK Unknown. -ida_typeinf.COMP_UNSURE (variable) +ida_typeinf.COMP_UNSURE uncertain compiler id -ida_typeinf.COMP_VISAGE (variable) +ida_typeinf.COMP_VISAGE Visual Age C++. -ida_typeinf.COMP_WATCOM (variable) +ida_typeinf.COMP_WATCOM Watcom C++. -ida_typeinf.DEFMASK64 (variable) +ida_typeinf.DEFMASK64 default bitmask 64bits -ida_typeinf.ETF_ASMENUM (variable) - asm enum compatibility mode *- +ida_typeinf.ETF_AUTONAME + udm - generate a member name if was not specified (add_udm, set_udm_type) -ida_typeinf.ETF_AUTONAME (variable) - generate a member name if was not specified (add_udm, set_udm_type) +ida_typeinf.ETF_BYTIL + udm - new type was created by the type subsystem -ida_typeinf.ETF_COMPATIBLE (variable) +ida_typeinf.ETF_COMPATIBLE new type must be compatible with the old -ida_typeinf.ETF_FORCENAME (variable) +ida_typeinf.ETF_FORCENAME anyway use name, see below for more usage description -ida_typeinf.ETF_FUNCARG (variable) - mptr is function argument (cannot create arrays) +ida_typeinf.ETF_FUNCARG + udm - member is a function argument (cannot create arrays) -ida_typeinf.ETF_MAY_DESTROY (variable) +ida_typeinf.ETF_MAY_DESTROY may destroy other members -ida_typeinf.ETF_NO_IDBSYNC (variable) - do not sync type to IDB (udt only) *- +ida_typeinf.ETF_NO_ARRAY + add_udm, set_udm_type - do not convert type to an array on the size mismatch -ida_typeinf.ETF_NO_LAYOUT (variable) +ida_typeinf.ETF_NO_LAYOUT don't calc type layout before editing -ida_typeinf.ETF_NO_SAVE (variable) - don't save to til (normally typerefs are saved to til) A call with ETF_NO_SAVE - must be followed by a call without it. Otherwise there may be inconsistencies - between the memory and the type library. +ida_typeinf.ETF_NO_SAVE + don't save to til (normally typerefs are saved to til) A call with ETF_NO_SAVE must be followed by a call without it. Otherwise there may be inconsistencies between the memory and the type library. + -ida_typeinf.FAH_BYTE (variable) +ida_typeinf.FAH_BYTE function argument attribute header byte -ida_typeinf.FAI_ARRAY (variable) - was initially an array; see "__org_typedef" or "__org_arrdim" type attributes to - determine the original type +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 (variable) +ida_typeinf.FAI_HIDDEN hidden argument -ida_typeinf.FAI_RETPTR (variable) +ida_typeinf.FAI_RETPTR pointer to return value. implies hidden -ida_typeinf.FAI_STRUCT (variable) +ida_typeinf.FAI_STRUCT was initially a structure -ida_typeinf.FAI_UNUSED (variable) +ida_typeinf.FAI_UNUSED argument is not used by the function -ida_typeinf.FIRST_NONTRIVIAL_TYPID (variable) +ida_typeinf.FIRST_NONTRIVIAL_TYPID Denotes the first bit describing a nontrivial type. -ida_typeinf.FRB_CHAR (variable) +ida_typeinf.FRB_CHAR Char. -ida_typeinf.FRB_CUSTOM (variable) +ida_typeinf.FRB_CUSTOM *Custom data type -ida_typeinf.FRB_ENUM (variable) +ida_typeinf.FRB_ENUM *Enumeration -ida_typeinf.FRB_FLOAT (variable) - Floating point number (for interpreting an integer type as a floating value) +ida_typeinf.FRB_FLOAT + Floating point number (for interpreting an integer type as a floating value) + -ida_typeinf.FRB_INVBITS (variable) +ida_typeinf.FRB_INVBITS Invert bits (0x01 is represented as ~0xFE) -ida_typeinf.FRB_INVSIGN (variable) +ida_typeinf.FRB_INVSIGN Invert sign (0x01 is represented as -0xFF) -ida_typeinf.FRB_LZERO (variable) +ida_typeinf.FRB_LZERO Toggle leading zeroes (used for integers) -ida_typeinf.FRB_MASK (variable) +ida_typeinf.FRB_MASK Mask for the value type (* means requires additional info): -ida_typeinf.FRB_NUMB (variable) +ida_typeinf.FRB_NUMB Binary number. -ida_typeinf.FRB_NUMD (variable) +ida_typeinf.FRB_NUMD Decimal number. -ida_typeinf.FRB_NUMH (variable) +ida_typeinf.FRB_NUMH Hexadecimal number. -ida_typeinf.FRB_NUMO (variable) +ida_typeinf.FRB_NUMO Octal number. -ida_typeinf.FRB_OFFSET (variable) +ida_typeinf.FRB_OFFSET *Offset -ida_typeinf.FRB_SEG (variable) +ida_typeinf.FRB_SEG Segment. -ida_typeinf.FRB_SIGNED (variable) +ida_typeinf.FRB_SIGNED Force signed representation. -ida_typeinf.FRB_STRLIT (variable) +ida_typeinf.FRB_STRLIT *String literal (used for arrays) -ida_typeinf.FRB_STROFF (variable) +ida_typeinf.FRB_STROFF *Struct offset -ida_typeinf.FRB_TABFORM (variable) - has additional tabular parameters +ida_typeinf.FRB_TABFORM + has additional tabular parameters + -ida_typeinf.FRB_UNK (variable) +ida_typeinf.FRB_UNK Unknown. -ida_typeinf.FTI_ALL (variable) +ida_typeinf.FTI_ALL all defined bits -ida_typeinf.FTI_ARGLOCS (variable) - info about argument locations has been calculated (stkargs and retloc too) +ida_typeinf.FTI_ARGLOCS + info about argument locations has been calculated (stkargs and retloc too) + -ida_typeinf.FTI_CALLTYPE (variable) +ida_typeinf.FTI_CALLTYPE mask for FTI_*CALL -ida_typeinf.FTI_CONST (variable) +ida_typeinf.FTI_CONST const member function -ida_typeinf.FTI_CTOR (variable) +ida_typeinf.FTI_CTOR constructor -ida_typeinf.FTI_DEFCALL (variable) +ida_typeinf.FTI_DEFCALL default call -ida_typeinf.FTI_DTOR (variable) +ida_typeinf.FTI_DTOR destructor -ida_typeinf.FTI_EXPLOCS (variable) +ida_typeinf.FTI_EXPLOCS all arglocs are specified explicitly -ida_typeinf.FTI_FARCALL (variable) +ida_typeinf.FTI_FARCALL far call -ida_typeinf.FTI_HIGH (variable) +ida_typeinf.FTI_HIGH high level prototype (with possibly hidden args) -ida_typeinf.FTI_INTCALL (variable) +ida_typeinf.FTI_INTCALL interrupt call -ida_typeinf.FTI_NEARCALL (variable) +ida_typeinf.FTI_NEARCALL near call -ida_typeinf.FTI_NORET (variable) +ida_typeinf.FTI_NORET noreturn -ida_typeinf.FTI_PURE (variable) +ida_typeinf.FTI_PURE __pure -ida_typeinf.FTI_SPOILED (variable) +ida_typeinf.FTI_SPOILED information about spoiled registers is present -ida_typeinf.FTI_STATIC (variable) +ida_typeinf.FTI_STATIC static -ida_typeinf.FTI_VIRTUAL (variable) +ida_typeinf.FTI_VIRTUAL virtual -ida_typeinf.GTD_CALC_ARGLOCS (variable) +ida_typeinf.GTD_CALC_ARGLOCS calculate func arg locations -ida_typeinf.GTD_CALC_LAYOUT (variable) +ida_typeinf.GTD_CALC_LAYOUT calculate udt layout -ida_typeinf.GTD_DEL_BITFLDS (variable) +ida_typeinf.GTD_DEL_BITFLDS delete udt bitfields -ida_typeinf.GTD_NO_ARGLOCS (variable) - don't calculate func arg locations please note that the locations may have been - calculated earlier +ida_typeinf.GTD_NO_ARGLOCS + don't calculate func arg locations please note that the locations may have been calculated earlier + -ida_typeinf.GTD_NO_LAYOUT (variable) - don't calculate udt layout please note that udt layout may have been calculated - earlier +ida_typeinf.GTD_NO_LAYOUT + don't calculate udt layout please note that udt layout may have been calculated earlier + -ida_typeinf.GTS_BASECLASS (variable) +ida_typeinf.GTS_BASECLASS is baseclass of a udt -ida_typeinf.GTS_NESTED (variable) +ida_typeinf.GTS_NESTED nested type (embedded into a udt) -ida_typeinf.GUESS_FUNC_FAILED (variable) +ida_typeinf.GUESS_FUNC_FAILED couldn't guess the function type -ida_typeinf.GUESS_FUNC_OK (variable) +ida_typeinf.GUESS_FUNC_OK ok, some non-trivial information is gathered -ida_typeinf.GUESS_FUNC_TRIVIAL (variable) +ida_typeinf.GUESS_FUNC_TRIVIAL the function type doesn't have interesting info -ida_typeinf.HTI_CPP (variable) +ida_typeinf.HTI_CPP C++ mode (not implemented) -ida_typeinf.HTI_DCL (variable) +ida_typeinf.HTI_DCL don't complain about redeclarations -ida_typeinf.HTI_FIL (variable) - "input" is file name, otherwise "input" contains a C declaration +ida_typeinf.HTI_EXT + debug: print external representation of types -ida_typeinf.HTI_HIGH (variable) - assume high level prototypes (with hidden args, etc) +ida_typeinf.HTI_FIL + "input" is file name, otherwise "input" contains a C declaration + -ida_typeinf.HTI_LOWER (variable) +ida_typeinf.HTI_HIGH + assume high level prototypes (with hidden args, etc) + + +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 (variable) +ida_typeinf.HTI_MAC define macros from the base tils -ida_typeinf.HTI_NDC (variable) +ida_typeinf.HTI_NDC don't decorate names -ida_typeinf.HTI_NER (variable) +ida_typeinf.HTI_NER ignore all errors but display them -ida_typeinf.HTI_NOBASE (variable) +ida_typeinf.HTI_NOBASE do not inspect base tils -ida_typeinf.HTI_NWR (variable) +ida_typeinf.HTI_NWR no warning messages -ida_typeinf.HTI_PAK (variable) +ida_typeinf.HTI_PAK explicit structure pack value (#pragma pack) -ida_typeinf.HTI_PAK1 (variable) +ida_typeinf.HTI_PAK1 #pragma pack(1) -ida_typeinf.HTI_PAK16 (variable) +ida_typeinf.HTI_PAK16 #pragma pack(16) -ida_typeinf.HTI_PAK2 (variable) +ida_typeinf.HTI_PAK2 #pragma pack(2) -ida_typeinf.HTI_PAK4 (variable) +ida_typeinf.HTI_PAK4 #pragma pack(4) -ida_typeinf.HTI_PAK8 (variable) +ida_typeinf.HTI_PAK8 #pragma pack(8) -ida_typeinf.HTI_PAKDEF (variable) +ida_typeinf.HTI_PAKDEF default pack value -ida_typeinf.HTI_PAK_SHIFT (variable) - 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_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 (variable) +ida_typeinf.HTI_RAWARGS leave argument names unchanged (do not remove underscores) -ida_typeinf.HTI_RELAXED (variable) +ida_typeinf.HTI_RELAXED accept references to unknown namespaces -ida_typeinf.HTI_TST (variable) +ida_typeinf.HTI_SEMICOLON + do not complain if the terminated semicolon is absent + +ida_typeinf.HTI_TST test mode: discard the result -ida_typeinf.IMPTYPE_LOCAL (variable) - 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.HTI_UNP + debug: check the result by unpacking it -ida_typeinf.MAX_FUNC_ARGS (variable) +ida_typeinf.MAX_ENUM_SERIAL + Max number of identical constants allowed for one enum type. + +ida_typeinf.MAX_FUNC_ARGS max number of function arguments -ida_typeinf.NTF_64BIT (variable) +ida_typeinf.NTF_64BIT value is 64bit -ida_typeinf.NTF_CHKSYNC (variable) - check that synchronization to IDB passed OK (set_numbered_type, set_named_type) +ida_typeinf.NTF_CHKSYNC + check that synchronization to IDB passed OK (set_numbered_type, set_named_type) + -ida_typeinf.NTF_COPY (variable) - save a new type definition, not a typeref (tinfo_t::set_numbered_type, - tinfo_t::set_named_type) +ida_typeinf.NTF_COPY + save a new type definition, not a typeref (tinfo_t::set_numbered_type, tinfo_t::set_named_type) -ida_typeinf.NTF_FIXNAME (variable) - force-validate the name of the type when setting (set_named_type, - set_numbered_type only) +ida_typeinf.NTF_FIXNAME + force-validate the name of the type when setting (set_named_type, set_numbered_type only) + -ida_typeinf.NTF_IDBENC (variable) - 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_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 (variable) +ida_typeinf.NTF_NOBASE don't inspect base tils (for get_named_type) -ida_typeinf.NTF_NOCUR (variable) +ida_typeinf.NTF_NOCUR don't inspect current til file (for get_named_type) -ida_typeinf.NTF_NO_NAMECHK (variable) - do not validate type name (set_numbered_type, set_named_type) +ida_typeinf.NTF_NO_NAMECHK + do not validate type name (set_numbered_type, set_named_type) + -ida_typeinf.NTF_REPLACE (variable) +ida_typeinf.NTF_REPLACE replace original type (for set_named_type) -ida_typeinf.NTF_SYMM (variable) - symbol, name is mangled ('_func'); only one of NTF_TYPE and NTF_SYMU, NTF_SYMM - can be used +ida_typeinf.NTF_SYMM + symbol, name is mangled ('_func'); only one of NTF_TYPE and NTF_SYMU, NTF_SYMM can be used + -ida_typeinf.NTF_SYMU (variable) +ida_typeinf.NTF_SYMU symbol, name is unmangled ('func') -ida_typeinf.NTF_TYPE (variable) +ida_typeinf.NTF_TYPE type name -ida_typeinf.NTF_UMANGLED (variable) +ida_typeinf.NTF_UMANGLED name is unmangled (don't use this flag) -ida_typeinf.PDF_DEF_BASE (variable) +ida_typeinf.PDF_DEF_BASE Include base types: __int8, __int16, etc.. -ida_typeinf.PDF_DEF_FWD (variable) +ida_typeinf.PDF_DEF_FWD Allow forward declarations. -ida_typeinf.PDF_HEADER_CMT (variable) +ida_typeinf.PDF_HEADER_CMT Prepend output with a descriptive comment. -ida_typeinf.PDF_INCL_DEPS (variable) +ida_typeinf.PDF_INCL_DEPS Include all type dependencies. -ida_typeinf.PIO_IGNORE_PTRS (variable) +ida_typeinf.PIO_IGNORE_PTRS do not follow pointers -ida_typeinf.PIO_NOATTR_FAIL (variable) +ida_typeinf.PIO_NOATTR_FAIL missing attributes are not ok -ida_typeinf.PRALOC_STKOFF (variable) +ida_typeinf.PRALOC_STKOFF print stack offsets -ida_typeinf.PRALOC_VERIFY (variable) +ida_typeinf.PRALOC_VERIFY interr if illegal argloc -ida_typeinf.PRTYPE_1LINCMT (variable) +ida_typeinf.PRTYPE_1LINCMT print comments even in the one line mode -ida_typeinf.PRTYPE_1LINE (variable) +ida_typeinf.PRTYPE_1LINE print to one line -ida_typeinf.PRTYPE_COLORED (variable) +ida_typeinf.PRTYPE_ARGLOCS + print function arglocs (not only for usercall) + +ida_typeinf.PRTYPE_COLORED add color tag COLOR_SYMBOL for any parentheses, commas and colons -ida_typeinf.PRTYPE_CPP (variable) +ida_typeinf.PRTYPE_CPP use c++ name (only for print_type()) -ida_typeinf.PRTYPE_HEADER (variable) +ida_typeinf.PRTYPE_DEF + tinfo_t: print definition, if available + +ida_typeinf.PRTYPE_HEADER print only type header (only for definitions) -ida_typeinf.PRTYPE_MAXSTR (variable) +ida_typeinf.PRTYPE_MAXSTR limit the output length to 1024 bytes (the output may be slightly longer) -ida_typeinf.PRTYPE_MULTI (variable) +ida_typeinf.PRTYPE_METHODS + tinfo_t: print udt methods + +ida_typeinf.PRTYPE_MULTI print to many lines -ida_typeinf.PRTYPE_NOREGEX (variable) +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_PRAGMA (variable) +ida_typeinf.PRTYPE_NORES + tinfo_t: never resolve types (meaningful with PRTYPE_DEF) + +ida_typeinf.PRTYPE_OFFSETS + print udt member offsets + +ida_typeinf.PRTYPE_PRAGMA print pragmas for alignment -ida_typeinf.PRTYPE_SEMI (variable) +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 (variable) +ida_typeinf.PRTYPE_TAIL + print only the definition tail (only for definitions, exclusive with PRTYPE_HEADER) + +ida_typeinf.PRTYPE_TYPE print type declaration (not variable declaration) -ida_typeinf.PT_HIGH (variable) - assume high level prototypes (with hidden args, etc) +ida_typeinf.PT_EMPTY + accept empty decl -ida_typeinf.PT_LOWER (variable) +ida_typeinf.PT_HIGH + assume high level prototypes (with hidden args, etc) + + +ida_typeinf.PT_LOWER lower the function prototypes -ida_typeinf.PT_NDC (variable) +ida_typeinf.PT_NDC don't decorate names -ida_typeinf.PT_PACKMASK (variable) +ida_typeinf.PT_PACKMASK mask for pack alignment values -ida_typeinf.PT_RAWARGS (variable) +ida_typeinf.PT_RAWARGS leave argument names unchanged (do not remove underscores) -ida_typeinf.PT_RELAXED (variable) +ida_typeinf.PT_RELAXED accept references to unknown namespaces -ida_typeinf.PT_REPLACE (variable) +ida_typeinf.PT_REPLACE replace the old type (used in idc) -ida_typeinf.PT_SIL (variable) +ida_typeinf.PT_SEMICOLON + append the terminated semicolon + +ida_typeinf.PT_SIL silent, no messages -ida_typeinf.PT_TYP (variable) +ida_typeinf.PT_TYP return declared type information -ida_typeinf.PT_VAR (variable) +ida_typeinf.PT_VAR return declared object information -ida_typeinf.RESERVED_BYTE (variable) +ida_typeinf.RESERVED_BYTE multifunctional purpose -ida_typeinf.SC_AUTO (variable) +ida_typeinf.SC_AUTO auto -ida_typeinf.SC_EXT (variable) +ida_typeinf.SC_EXT extern -ida_typeinf.SC_FRIEND (variable) +ida_typeinf.SC_FRIEND friend -ida_typeinf.SC_REG (variable) +ida_typeinf.SC_REG register -ida_typeinf.SC_STAT (variable) +ida_typeinf.SC_STAT static -ida_typeinf.SC_TYPE (variable) +ida_typeinf.SC_TYPE typedef -ida_typeinf.SC_UNK (variable) +ida_typeinf.SC_UNK unknown -ida_typeinf.SC_VIRT (variable) +ida_typeinf.SC_VIRT virtual -ida_typeinf.SETCOMP_BY_USER (variable) +ida_typeinf.SETCOMP_BY_USER invoked by user, cannot be replaced by module/loader -ida_typeinf.SETCOMP_ONLY_ABI (variable) +ida_typeinf.SETCOMP_ONLY_ABI ignore cc field complete, use only abiname -ida_typeinf.SETCOMP_ONLY_ID (variable) - cc has only 'id' field; the rest will be set to defaults corresponding to the - program bitness +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 (variable) +ida_typeinf.SETCOMP_OVERRIDE may override old compiler info -ida_typeinf.STI_ACCHAR (variable) +ida_typeinf.STI_ACCHAR const char[] -ida_typeinf.STI_ACHAR (variable) +ida_typeinf.STI_ACHAR char[] -ida_typeinf.STI_ACUCHAR (variable) +ida_typeinf.STI_ACUCHAR const uint8[] -ida_typeinf.STI_AEABI_LCMP (variable) +ida_typeinf.STI_AEABI_LCMP int __fastcall __pure(int64 x, int64 y) -ida_typeinf.STI_AEABI_MEMCLR (variable) +ida_typeinf.STI_AEABI_MEMCLR void __fastcall(void *, size_t) -ida_typeinf.STI_AEABI_MEMCPY (variable) +ida_typeinf.STI_AEABI_MEMCPY void __fastcall(void *, const void *, size_t) -ida_typeinf.STI_AEABI_MEMSET (variable) +ida_typeinf.STI_AEABI_MEMSET void __fastcall(void *, size_t, int) -ida_typeinf.STI_AEABI_ULCMP (variable) +ida_typeinf.STI_AEABI_ULCMP int __fastcall __pure(uint64 x, uint64 y) -ida_typeinf.STI_AUCHAR (variable) +ida_typeinf.STI_AUCHAR uint8[] -ida_typeinf.STI_COMPLEX128 (variable) +ida_typeinf.STI_COMPLEX128 struct complex128_t { double real, imag; } -ida_typeinf.STI_COMPLEX64 (variable) +ida_typeinf.STI_COMPLEX64 struct complex64_t { float real, imag; } -ida_typeinf.STI_DONT_USE (variable) +ida_typeinf.STI_DONT_USE unused stock type id; should not be used -ida_typeinf.STI_FDELOP (variable) +ida_typeinf.STI_FDELOP void __cdecl(void *) -ida_typeinf.STI_FPURGING (variable) +ida_typeinf.STI_FPURGING void __userpurge(int) -ida_typeinf.STI_MSGSEND (variable) +ida_typeinf.STI_MSGSEND void *(void *, const char *, ...) -ida_typeinf.STI_PBYTE (variable) +ida_typeinf.STI_PBYTE _BYTE * -ida_typeinf.STI_PCCHAR (variable) +ida_typeinf.STI_PCCHAR const char * -ida_typeinf.STI_PCHAR (variable) +ida_typeinf.STI_PCHAR char * -ida_typeinf.STI_PCUCHAR (variable) +ida_typeinf.STI_PCUCHAR const uint8 * -ida_typeinf.STI_PCVOID (variable) +ida_typeinf.STI_PCVOID const void * -ida_typeinf.STI_PINT (variable) +ida_typeinf.STI_PINT int * -ida_typeinf.STI_PPVOID (variable) +ida_typeinf.STI_PPVOID void ** -ida_typeinf.STI_PUCHAR (variable) +ida_typeinf.STI_PUCHAR uint8 * -ida_typeinf.STI_PUINT (variable) +ida_typeinf.STI_PUINT unsigned int * -ida_typeinf.STI_PVOID (variable) +ida_typeinf.STI_PUNKNOWN + _UNKNOWN * + +ida_typeinf.STI_PVOID void * -ida_typeinf.STI_RTC_CHECK_2 (variable) +ida_typeinf.STI_RTC_CHECK_2 int16 __fastcall(int16 x) -ida_typeinf.STI_RTC_CHECK_4 (variable) +ida_typeinf.STI_RTC_CHECK_4 int32 __fastcall(int32 x) -ida_typeinf.STI_RTC_CHECK_8 (variable) +ida_typeinf.STI_RTC_CHECK_8 int64 __fastcall(int64 x) -ida_typeinf.STI_SIZE_T (variable) +ida_typeinf.STI_SIZE_T size_t -ida_typeinf.STI_SSIZE_T (variable) +ida_typeinf.STI_SSIZE_T ssize_t -ida_typeinf.STRMEM_ANON (variable) - can be combined with STRMEM_NAME: look inside anonymous members too. +ida_typeinf.STRMEM_ANON + can be combined with STRMEM_NAME: look inside anonymous members too. + -ida_typeinf.STRMEM_AUTO (variable) +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)! + * nb: struct: offset is in bytes (not in bits)! + + + -ida_typeinf.STRMEM_CASTABLE_TO (variable) - can be combined with STRMEM_TYPE: member type must be castable to the specified - type +ida_typeinf.STRMEM_CASTABLE_TO + can be combined with STRMEM_TYPE: member type must be castable to the specified type + -ida_typeinf.STRMEM_INDEX (variable) +ida_typeinf.STRMEM_INDEX get member by number - * in: udm->offset - is a member number + * in: udm->offset - is a member number + + + -ida_typeinf.STRMEM_MAXS (variable) +ida_typeinf.STRMEM_LOWBND + get member by offset or the next member (lower bound) + * in: udm->offset - is a member offset in bits + + + + +ida_typeinf.STRMEM_MAXS get biggest member by size. -ida_typeinf.STRMEM_MINS (variable) +ida_typeinf.STRMEM_MINS get smallest member by size. -ida_typeinf.STRMEM_NAME (variable) +ida_typeinf.STRMEM_NAME get member by name - * in: udm->name - the desired member name. + * in: udm->name - the desired member name. + + + -ida_typeinf.STRMEM_OFFSET (variable) +ida_typeinf.STRMEM_NEXT + get next member after the offset + * in: udm->offset - is a member offset in bits + + + + +ida_typeinf.STRMEM_OFFSET get member by offset - * in: udm->offset - is a member offset in bits + * in: udm->offset - is a member offset in bits + + + -ida_typeinf.STRMEM_SIZE (variable) +ida_typeinf.STRMEM_SIZE get member by size. - * in: udm->size - the desired member size. + * in: udm->size - the desired member size. + + + -ida_typeinf.STRMEM_SKIP_EMPTY (variable) - 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_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 (variable) +ida_typeinf.STRMEM_SKIP_GAPS + can be combined with STRMEM_OFFSET, STRMEM_LOWBND skip gap members + + +ida_typeinf.STRMEM_TYPE get member by type. - * in: udm->type - the desired member type. member types are compared with - tinfo_t::equals_to() + * in: udm->type - the desired member type. member types are compared with tinfo_t::equals_to() + + + -ida_typeinf.STRMEM_VFTABLE (variable) - can be combined with STRMEM_OFFSET, STRMEM_AUTO get vftable instead of the base - class +ida_typeinf.STRMEM_VFTABLE + can be combined with STRMEM_OFFSET, STRMEM_AUTO get vftable instead of the base class + -ida_typeinf.SUDT_ALIGN (variable) - recalculate field alignments, struct packing, etc to match the offsets and size - info +ida_typeinf.STRUC_SEPARATOR + structname.fieldname -ida_typeinf.SUDT_CONST (variable) +ida_typeinf.SUDT_ALIGN + recalculate field alignments, struct packing, etc to match the offsets and size info + + +ida_typeinf.SUDT_CONST only for serialize_udt: make type const -ida_typeinf.SUDT_FAST (variable) +ida_typeinf.SUDT_FAST serialize without verifying offsets and alignments -ida_typeinf.SUDT_GAPS (variable) +ida_typeinf.SUDT_GAPS allow to fill gaps with additional members (_BYTE[]) -ida_typeinf.SUDT_SORT (variable) +ida_typeinf.SUDT_SERDEF + serialize: if a typeref, serialize its definition + +ida_typeinf.SUDT_SORT fields are not sorted by offset, sort them first -ida_typeinf.SUDT_UNEX (variable) - references to nonexistent member types are acceptable; in this case it is better - to set the corresponding udm_t::fda field to the type alignment. If this field - is not set, ida will try to guess the alignment. +ida_typeinf.SUDT_TRUNC + serialize: truncate useless strings from fields, fldcmts -ida_typeinf.SUDT_VOLATILE (variable) +ida_typeinf.SUDT_UNEX + references to nonexistent member types are acceptable; in this case it is better to set the corresponding udm_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.TAFLD_METHOD (variable) +ida_typeinf.TAENUM_64BIT + enum: store 64-bit values + +ida_typeinf.TAENUM_BIN + enum: binary representation, if BTE_HEX only one of OCT/BIN bits can be set. they are meaningful only if BTE_HEX is used. + + +ida_typeinf.TAENUM_LZERO + enum: print numbers with leading zeroes (only for HEX/OCT/BIN) + +ida_typeinf.TAENUM_NUMSIGN + enum: signed representation, if BTE_HEX + +ida_typeinf.TAENUM_OCT + enum: octal representation, if BTE_HEX + +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_BYTIL + field: was the member created due to the type system + +ida_typeinf.TAFLD_FRAME_R + frame: function return address frame slot + +ida_typeinf.TAFLD_FRAME_S + frame: function saved registers frame slot + +ida_typeinf.TAFLD_GAP + field: gap member (displayed as padding in type details) + +ida_typeinf.TAFLD_METHOD denotes a udt member function -ida_typeinf.TAH_ALL (variable) +ida_typeinf.TAFLD_REGCMT + field: the comment is regular (if not set, it is repeatable) + +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 (variable) +ida_typeinf.TAH_BYTE type attribute header byte -ida_typeinf.TAH_HASATTRS (variable) +ida_typeinf.TAH_HASATTRS has extended attributes -ida_typeinf.TA_FORMAT (variable) - info about the 'format' argument. 3 times pack_dd: format_functype_t, argument - number of 'format', argument number of '...' +ida_typeinf.TAPTR_PTR32 + ptr: __ptr32 -ida_typeinf.TA_ORG_ARRDIM (variable) +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_FIXED + struct: fixed field offsets, stored in serialized form; cannot be set for unions + + +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 (variable) +ida_typeinf.TA_ORG_TYPEDEF the original typedef name (simple string) -ida_typeinf.TA_VALUE_REPR (variable) +ida_typeinf.TA_VALUE_REPR serialized value_repr_t (used for scalars and arrays) -ida_typeinf.TCMP_ANYBASE (variable) +ida_typeinf.TCMP_ANYBASE accept any base class when casting -ida_typeinf.TCMP_AUTOCAST (variable) +ida_typeinf.TCMP_AUTOCAST can t1 be cast into t2 automatically? -ida_typeinf.TCMP_CALL (variable) +ida_typeinf.TCMP_CALL can t1 be called with t2 type? -ida_typeinf.TCMP_DECL (variable) +ida_typeinf.TCMP_DECL compare declarations without resolving them -ida_typeinf.TCMP_DELPTR (variable) +ida_typeinf.TCMP_DELPTR remove pointer from types before comparing -ida_typeinf.TCMP_EQUAL (variable) +ida_typeinf.TCMP_EQUAL are types equal? -ida_typeinf.TCMP_IGNMODS (variable) +ida_typeinf.TCMP_IGNMODS ignore const/volatile modifiers -ida_typeinf.TCMP_MANCAST (variable) +ida_typeinf.TCMP_MANCAST can t1 be cast into t2 manually? -ida_typeinf.TCMP_SKIPTHIS (variable) +ida_typeinf.TCMP_SKIPTHIS skip the first function argument in comparison -ida_typeinf.TERR_ALIEN_NAME (variable) +ida_typeinf.TERR_ALIEN_NAME enum member name is used in another enum -ida_typeinf.TERR_BAD_ARG (variable) +ida_typeinf.TERR_BAD_ARG bad argument -ida_typeinf.TERR_BAD_ARRAY (variable) +ida_typeinf.TERR_BAD_ARRAY arrays are forbidden as function arguments -ida_typeinf.TERR_BAD_BASE (variable) +ida_typeinf.TERR_BAD_BASE bad base class -ida_typeinf.TERR_BAD_BF (variable) +ida_typeinf.TERR_BAD_BF bitfields are forbidden as function arguments -ida_typeinf.TERR_BAD_BMASK (variable) - Bad enum member mask 0xI64X. The specified mask should not intersect with any - existing mask in the enum. Zero masks are prohibited too. +ida_typeinf.TERR_BAD_BMASK + Bad enum member mask 0xI64X. The specified mask should not intersect with any existing mask in the enum. Zero masks are prohibited too. -ida_typeinf.TERR_BAD_GAP (variable) +ida_typeinf.TERR_BAD_FX_SIZE + cannot extend struct beyond fixed size + +ida_typeinf.TERR_BAD_GAP bad gap -ida_typeinf.TERR_BAD_GROUPS (variable) +ida_typeinf.TERR_BAD_GROUPS bad group sizes for bitmask enum -ida_typeinf.TERR_BAD_INDEX (variable) +ida_typeinf.TERR_BAD_INDEX bad index d -ida_typeinf.TERR_BAD_LAYOUT (variable) +ida_typeinf.TERR_BAD_LAYOUT failed to calculate the structure/union layout -ida_typeinf.TERR_BAD_MSKVAL (variable) +ida_typeinf.TERR_BAD_MSKVAL bad bmask and value combination (value=0xI64X; bitmask 0xI64X) -ida_typeinf.TERR_BAD_NAME (variable) +ida_typeinf.TERR_BAD_NAME name s is not acceptable -ida_typeinf.TERR_BAD_OFFSET (variable) +ida_typeinf.TERR_BAD_OFFSET bad member offset s -ida_typeinf.TERR_BAD_REPR (variable) +ida_typeinf.TERR_BAD_REPR bad or incompatible field representation -ida_typeinf.TERR_BAD_SERIAL (variable) +ida_typeinf.TERR_BAD_SERIAL enum value has too many serials -ida_typeinf.TERR_BAD_SIZE (variable) +ida_typeinf.TERR_BAD_SIZE bad size d -ida_typeinf.TERR_BAD_SUBTYPE (variable) +ida_typeinf.TERR_BAD_SUBTYPE recursive structure nesting is forbidden -ida_typeinf.TERR_BAD_SYNC (variable) - failed to synchronize with IDB - -ida_typeinf.TERR_BAD_TAH (variable) +ida_typeinf.TERR_BAD_TAH bad bits in the type attributes (TAH bits) -ida_typeinf.TERR_BAD_TYPE (variable) +ida_typeinf.TERR_BAD_TYPE bad type -ida_typeinf.TERR_BAD_UNIVAR (variable) +ida_typeinf.TERR_BAD_UNIVAR unions cannot have variable sized members -ida_typeinf.TERR_BAD_VALUE (variable) +ida_typeinf.TERR_BAD_VALUE value 0xI64X is not acceptable -ida_typeinf.TERR_BAD_VARLAST (variable) +ida_typeinf.TERR_BAD_VARLAST variable sized member must be the last member in the structure -ida_typeinf.TERR_DUPNAME (variable) +ida_typeinf.TERR_DUPNAME duplicate name s -ida_typeinf.TERR_ENUM_SIZE (variable) +ida_typeinf.TERR_ENUM_SIZE bad enum size -ida_typeinf.TERR_GRP_NOEMPTY (variable) +ida_typeinf.TERR_GRP_NOEMPTY could not delete group mask for not empty group 0xI64X -ida_typeinf.TERR_NESTED (variable) +ida_typeinf.TERR_NESTED recursive structure nesting is forbidden -ida_typeinf.TERR_NOT_COMPAT (variable) +ida_typeinf.TERR_NOT_COMPAT the new type is not compatible with the old type -ida_typeinf.TERR_NOT_IMPL (variable) +ida_typeinf.TERR_NOT_FOUND + member not found + +ida_typeinf.TERR_NOT_IMPL not implemented -ida_typeinf.TERR_NO_BMASK (variable) +ida_typeinf.TERR_NO_BMASK bitmask 0xI64X is not found -ida_typeinf.TERR_OK (variable) +ida_typeinf.TERR_OK ok -ida_typeinf.TERR_OVERLAP (variable) +ida_typeinf.TERR_OVERLAP the member overlaps with other members that cannot be deleted -ida_typeinf.TERR_SAVE_ERROR (variable) +ida_typeinf.TERR_SAVE_ERROR failed to save -ida_typeinf.TERR_SERIALIZE (variable) +ida_typeinf.TERR_SERIALIZE failed to serialize -ida_typeinf.TERR_STOCK (variable) +ida_typeinf.TERR_STOCK stock type info cannot be modified -ida_typeinf.TERR_UNION_BF (variable) +ida_typeinf.TERR_STRUCT_SIZE + bad fixed structure size + +ida_typeinf.TERR_TYPE_WORSE + the new type is worse than the old type + +ida_typeinf.TERR_UNION_BF unions cannot have bitfields -ida_typeinf.TIL_ADD_ALREADY (variable) +ida_typeinf.TIL_ADD_ALREADY the base til was already added -ida_typeinf.TIL_ADD_FAILED (variable) +ida_typeinf.TIL_ADD_FAILED see errbuf -ida_typeinf.TIL_ADD_OK (variable) +ida_typeinf.TIL_ADD_OK some tils were added -ida_typeinf.TIL_ALI (variable) +ida_typeinf.TIL_ALI type aliases are present (this bit is used only on the disk) -ida_typeinf.TIL_ESI (variable) +ida_typeinf.TIL_ESI extended sizeof info (short, long, longlong) -ida_typeinf.TIL_MAC (variable) +ida_typeinf.TIL_MAC til has macro table -ida_typeinf.TIL_MOD (variable) +ida_typeinf.TIL_MOD til has been modified, should be saved -ida_typeinf.TIL_ORD (variable) +ida_typeinf.TIL_ORD type ordinal numbers are present -ida_typeinf.TIL_SLD (variable) +ida_typeinf.TIL_SLD sizeof(long double) -ida_typeinf.TIL_STM (variable) +ida_typeinf.TIL_STM til has extra streams -ida_typeinf.TIL_UNI (variable) +ida_typeinf.TIL_UNI universal til for any compiler -ida_typeinf.TIL_ZIP (variable) +ida_typeinf.TIL_ZIP pack buckets using zip -ida_typeinf.TINFO_DEFINITE (variable) +ida_typeinf.TINFO_DEFINITE this is a definite type -ida_typeinf.TINFO_DELAYFUNC (variable) - 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_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 (variable) +ida_typeinf.TINFO_GUESSED this is a guessed type -ida_typeinf.TINFO_STRICT (variable) +ida_typeinf.TINFO_STRICT never convert given type to another one before applying -ida_typeinf.TVIS_CMT (variable) +ida_typeinf.TVIS_CMT new comment is present (only for udt members) -ida_typeinf.TVIS_NAME (variable) +ida_typeinf.TVIS_NAME new name is present (only for funcargs and udt members) -ida_typeinf.TVIS_RPTCMT (variable) +ida_typeinf.TVIS_RPTCMT the new comment is repeatable -ida_typeinf.TVIS_TYPE (variable) +ida_typeinf.TVIS_TYPE new type info is present -ida_typeinf.TVST_DEF (variable) +ida_typeinf.TVST_DEF visit type definition (meaningful for typerefs) -ida_typeinf.TVST_PRUNE (variable) +ida_typeinf.TVST_PRUNE don't visit children of current type -ida_typeinf.TYPE_BASE_MASK (variable) +ida_typeinf.TYPE_BASE_MASK the low 4 bits define the basic type -ida_typeinf.TYPE_FLAGS_MASK (variable) - type flags - they have different meaning depending on the basic type +ida_typeinf.TYPE_FLAGS_MASK + type flags - they have different meaning depending on the basic type + -ida_typeinf.TYPE_FULL_MASK (variable) +ida_typeinf.TYPE_FULL_MASK basic type with type flags -ida_typeinf.TYPE_MODIF_MASK (variable) +ida_typeinf.TYPE_MODIF_MASK modifiers. * for BT_ARRAY see Derived type: array - * BT_VOID can have them ONLY in 'void *' + * BT_VOID can have them ONLY in 'void *' + + + -ida_typeinf.TYPID_ISREF (variable) +ida_typeinf.TYPID_ISREF Identifies that a type that is a typeref. -ida_typeinf.TYPID_SHIFT (variable) +ida_typeinf.TYPID_SHIFT First type detail bit. -ida_typeinf.VALSTR_OPEN (variable) +ida_typeinf.VALSTR_OPEN printed opening curly brace '{' -ida_typeinf._BT_LAST_BASIC (variable) - the last basic type, all basic types may be followed by [tah-typeattrs] +ida_typeinf._BT_LAST_BASIC + the last basic type, all basic types may be followed by [tah-typeattrs] + -ida_typeinf._wrap_cvar (class) +ida_typeinf._wrap_cvar -ida_typeinf._wrap_cvar.__getattr__ (method) +ida_typeinf._wrap_cvar.__getattr__(self, attr) -ida_typeinf._wrap_cvar.__setattr__ (method) +ida_typeinf._wrap_cvar.__setattr__(self, attr, value) -ida_typeinf.add_til (function) - add_til(name, flags) -> int - Load a til file and add it the database type libraries list. IDA will also apply - function prototypes for matching function names. - - @param name: (C++: const char *) til name - @param flags: (C++: int) combination of Load TIL flags - @return: one of Load TIL result codes +ida_typeinf.add_til(name: str, flags: int) -> int + Load a til file and add it the database type libraries list. IDA will also apply function prototypes for matching function names. + + @param name: til name + @param flags: combination of Load TIL flags + @returns one of Load TIL result codes -ida_typeinf.alloc_type_ordinal (function) - alloc_type_ordinal(ti) -> uint32 +ida_typeinf.alloc_type_ordinal(ti: "til_t") -> int alloc_type_ordinals(ti, 1) - - @param ti: (C++: til_t *) -ida_typeinf.alloc_type_ordinals (function) - alloc_type_ordinals(ti, qty) -> uint32 - Allocate a range of ordinal numbers for new types. - - @param ti: (C++: til_t *) type library - @param qty: (C++: int) number of ordinals to allocate - @return: the first ordinal. 0 means failure. +ida_typeinf.alloc_type_ordinals(ti: "til_t", qty: int) -> int + Allocate a range of ordinal numbers for new types. + + @param ti: type library + @param qty: number of ordinals to allocate + @returns the first ordinal. 0 means failure. -ida_typeinf.aloc_visitor_t (class) - Proxy of C++ aloc_visitor_t class. +ida_typeinf.aloc_visitor_t -ida_typeinf.aloc_visitor_t.__disown__ (method) +ida_typeinf.aloc_visitor_t.__disown__(self) -ida_typeinf.aloc_visitor_t.__init__ (method) - __init__(self) -> aloc_visitor_t - - @param self: PyObject * +ida_typeinf.aloc_visitor_t.__init__(self) -ida_typeinf.aloc_visitor_t.visit_location (method) - visit_location(self, v, off, size) -> int - - @param v: argloc_t & - @param off: int - @param size: int +ida_typeinf.aloc_visitor_t.visit_location(self, v: "argloc_t", off: int, size: int) -> int -ida_typeinf.append_abi_opts (function) - 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: (C++: const char *) - ABI options to add/remove in form opt1-opt2-... - @param user_level: (C++: bool) - initiated by user if TRUE (==SETCOMP_BY_USER) - @return: success +ida_typeinf.append_abi_opts(abi_opts: str, user_level: bool = 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-... + @param user_level: - initiated by user if TRUE (==SETCOMP_BY_USER) + @returns success -ida_typeinf.append_argloc (function) - append_argloc(out, vloc) -> bool - Serialize argument location - - @param out: (C++: qtype *) - @param vloc: (C++: const argloc_t &) argloc_t const & +ida_typeinf.append_argloc(out: "qtype *", vloc: "argloc_t") -> bool + Serialize argument location + -ida_typeinf.append_tinfo_covered (function) - append_tinfo_covered(out, typid, offset) -> bool - - @param out: rangeset_t * - @param typid: uint32 - @param offset: uint64 +ida_typeinf.append_tinfo_covered(out: "rangeset_t", typid: "typid_t", offset: "uint64") -> bool -ida_typeinf.apply_callee_tinfo (function) - 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: (C++: ea_t) linear address of the calling instruction. must belong to a - function. - @param tif: (C++: const tinfo_t &) type info - @return: success +ida_typeinf.apply_callee_tinfo(caller: ida_idaapi.ea_t, tif: "tinfo_t") -> 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. + @param tif: type info + @returns success -ida_typeinf.apply_cdecl (function) - 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: (C++: til_t *) type library - @param ea: (C++: ea_t) linear address - @param decl: (C++: const char *) type declaration in C form - @param flags: (C++: int) flags to pass to apply_tinfo (TINFO_DEFINITE is always passed) - @return: success +ida_typeinf.apply_cdecl(til: "til_t", ea: ida_idaapi.ea_t, decl: str, flags: int = 0) -> bool + Apply the specified type to the address. This function parses the declaration and calls apply_tinfo() + + @param til: type library + @param ea: linear address + @param decl: type declaration in C form + @param flags: flags to pass to apply_tinfo (TINFO_DEFINITE is always passed) + @returns success -ida_typeinf.apply_named_type (function) - apply_named_type(ea, name) -> bool - Apply the specified named type to the address. - - @param ea: (C++: ea_t) linear address - @param name: (C++: const char *) the type name, e.g. "FILE" - @return: success +ida_typeinf.apply_named_type(ea: ida_idaapi.ea_t, name: str) -> bool + Apply the specified named type to the address. + + @param ea: linear address + @param name: the type name, e.g. "FILE" + @returns success -ida_typeinf.apply_once_tinfo_and_name (function) - 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 type - does not exist or the new type is 'better' than the old type, then the - new type will be applied. A type is considered better if it has more - information (e.g. BTMT_STRUCT is better than BT_INT). - The same logic is with the name: if the address already have a meaningful - name, it will be preserved. Only if the old name does not exist or it - is a dummy name like byte_123, it will be replaced by the new name. - - @param dea: (C++: ea_t) linear address - @param tif: (C++: const tinfo_t &) type string in the internal format - @param name: (C++: const char *) new name for the address - @return: success +ida_typeinf.apply_once_tinfo_and_name(dea: ida_idaapi.ea_t, tif: "tinfo_t", name: str) -> bool + Apply the specified type and name to the address. This function checks if the address already has a type. If the old type + does not exist or the new type is 'better' than the old type, then the + new type will be applied. A type is considered better if it has more + information (e.g. BTMT_STRUCT is better than BT_INT). + The same logic is with the name: if the address already have a meaningful + name, it will be preserved. Only if the old name does not exist or it + is a dummy name like byte_123, it will be replaced by the new name. + + @param dea: linear address + @param tif: type string in the internal format + @param name: new name for the address + @returns success -ida_typeinf.apply_tinfo (function) - 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: (C++: ea_t) linear address - @param tif: (C++: const tinfo_t &) type string in internal format - @param flags: (C++: uint32) combination of Apply tinfo flags - @return: success +ida_typeinf.apply_tinfo(ea: ida_idaapi.ea_t, tif: "tinfo_t", flags: int) -> 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 + @param tif: type string in internal format + @param flags: combination of Apply tinfo flags + @returns success -ida_typeinf.apply_tinfo_to_stkarg (function) - apply_tinfo_to_stkarg(insn, x, v, tif, name) -> bool - Helper function for the processor modules. to be called from - processor_t::use_stkarg_type - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - @param x: (C++: const op_t &) op_t const & - @param v: (C++: uval_t) - @param tif: (C++: const tinfo_t &) tinfo_t const & - @param name: (C++: const char *) char const * +ida_typeinf.apply_tinfo_to_stkarg(insn: "insn_t const &", x: "op_t const &", v: int, tif: "tinfo_t", name: str) -> bool + Helper function for the processor modules. to be called from processor_t::use_stkarg_type + -ida_typeinf.apply_type (function) - apply_type(ti, type, fields, ea, flags) -> bool +ida_typeinf.apply_type(til: til_t, type: bytes, fields: bytes, ea: ida_idaapi.ea_t, flags: int) -> bool Apply the specified type to the address - @param ti: Type info library. 'None' can be used. - @param type: type_t const * - @param fields: p_list const * + @param til: Type info library. 'None' can be used. + @param type: type string + @param 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 -ida_typeinf.argloc_t (class) - Proxy of C++ argloc_t class. +ida_typeinf.argloc_t -ida_typeinf.argloc_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: argloc_t const & +ida_typeinf.argloc_t.__eq__(self, r: "argloc_t") -> bool -ida_typeinf.argloc_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: argloc_t const & +ida_typeinf.argloc_t.__ge__(self, r: "argloc_t") -> bool -ida_typeinf.argloc_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: argloc_t const & +ida_typeinf.argloc_t.__gt__(self, r: "argloc_t") -> bool -ida_typeinf.argloc_t.__init__ (method) - __init__(self) -> argloc_t - __init__(self, r) -> argloc_t - - @param r: argloc_t const & +ida_typeinf.argloc_t.__init__(self, *args) -ida_typeinf.argloc_t.__le__ (method) - __le__(self, r) -> bool - - @param r: argloc_t const & +ida_typeinf.argloc_t.__le__(self, r: "argloc_t") -> bool -ida_typeinf.argloc_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: argloc_t const & +ida_typeinf.argloc_t.__lt__(self, r: "argloc_t") -> bool -ida_typeinf.argloc_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: argloc_t const & +ida_typeinf.argloc_t.__ne__(self, r: "argloc_t") -> bool -ida_typeinf.argloc_t._consume_rrel (method) - _consume_rrel(self, p) -> bool - - Parameters - ---------- - p: rrel_t * +ida_typeinf.argloc_t._consume_rrel(self, p: "rrel_t") -> bool + Use consume_rrel() -ida_typeinf.argloc_t._consume_scattered (method) - _consume_scattered(self, p) -> bool - - Parameters - ---------- - p: scattered_aloc_t * +ida_typeinf.argloc_t._consume_scattered(self, p: "scattered_aloc_t") -> bool + Use consume_scattered() -ida_typeinf.argloc_t._set_badloc (method) - _set_badloc(self) +ida_typeinf.argloc_t._set_badloc(self) -> None + Use set_badloc() -ida_typeinf.argloc_t._set_biggest (method) - _set_biggest(self, ct, data) - - Parameters - ---------- - ct: argloc_type_t - data: argloc_t::biggest_t +ida_typeinf.argloc_t._set_biggest(self, ct: "argloc_type_t", data: "argloc_t::biggest_t") -> None + Set biggest element in internal union (careful - this function does not clean up!) -ida_typeinf.argloc_t._set_custom (method) - _set_custom(self, ct, pdata) - - Parameters - ---------- - ct: argloc_type_t - pdata: void * +ida_typeinf.argloc_t._set_custom(self, ct: "argloc_type_t", pdata: "void *") -> None + Set custom argument location (careful - this function does not clean up!) -ida_typeinf.argloc_t._set_ea (method) - _set_ea(self, _ea) - - Parameters - ---------- - _ea: ea_t +ida_typeinf.argloc_t._set_ea(self, _ea: ida_idaapi.ea_t) -> None + Use set_ea + -ida_typeinf.argloc_t._set_reg1 (method) - _set_reg1(self, reg, off=0) - - Parameters - ---------- - reg: int - off: int +ida_typeinf.argloc_t._set_reg1(self, reg: int, off: int = 0) -> None + Use set_reg1() -ida_typeinf.argloc_t._set_reg2 (method) - _set_reg2(self, _reg1, _reg2) - - Parameters - ---------- - _reg1: int - _reg2: int +ida_typeinf.argloc_t._set_reg2(self, _reg1: int, _reg2: int) -> None + Use set_reg2() -ida_typeinf.argloc_t._set_stkoff (method) - _set_stkoff(self, off) - - Parameters - ---------- - off: sval_t +ida_typeinf.argloc_t._set_stkoff(self, off: int) -> None + Use set_stkoff() -ida_typeinf.argloc_t.advance (method) - advance(self, delta) -> bool +ida_typeinf.argloc_t.advance(self, delta: int) -> bool Move the location to point 'delta' bytes further. - - @param delta: (C++: int) -ida_typeinf.argloc_t.align_reg_high (method) - align_reg_high(self, size, _slotsize) +ida_typeinf.argloc_t.align_reg_high(self, size: "size_t", _slotsize: "size_t") -> None Set register offset to align it to the upper part of _SLOTSIZE. - - @param size: (C++: size_t) - @param _slotsize: (C++: size_t) -ida_typeinf.argloc_t.align_stkoff_high (method) - align_stkoff_high(self, size, _slotsize) +ida_typeinf.argloc_t.align_stkoff_high(self, size: "size_t", _slotsize: "size_t") -> None Set stack offset to align to the upper part of _SLOTSIZE. - - @param size: (C++: size_t) - @param _slotsize: (C++: size_t) -ida_typeinf.argloc_t.atype (method) - atype(self) -> argloc_type_t +ida_typeinf.argloc_t.atype(self) -> "argloc_type_t" Get type (Argument location types) -ida_typeinf.argloc_t.calc_offset (method) - calc_offset(self) -> sval_t +ida_typeinf.argloc_t.calc_offset(self) -> int Calculate offset that can be used to compare 2 similar arglocs. -ida_typeinf.argloc_t.compare (method) - compare(self, r) -> int - - @param r: argloc_t const & +ida_typeinf.argloc_t.compare(self, r: "argloc_t") -> int -ida_typeinf.argloc_t.consume_rrel (method) - consume_rrel(self, p) +ida_typeinf.argloc_t.consume_rrel(self, p: "rrel_t") -> None Set register-relative location - can't be nullptr. - - @param p: (C++: rrel_t *) -ida_typeinf.argloc_t.consume_scattered (method) - consume_scattered(self, p) +ida_typeinf.argloc_t.consume_scattered(self, p: "scattered_aloc_t") -> None Set distributed argument location. - - @param p: (C++: scattered_aloc_t *) scattered_aloc_t const & -ida_typeinf.argloc_t.get_biggest (method) - get_biggest(self) -> argloc_t::biggest_t +ida_typeinf.argloc_t.get_biggest(self) -> "argloc_t::biggest_t" Get largest element in internal union. -ida_typeinf.argloc_t.get_custom (method) - get_custom(self) -> void * - Get custom argloc info. Use if atype() == ALOC_CUSTOM +ida_typeinf.argloc_t.get_custom(self) -> "void *" + Get custom argloc info. Use if atype() == ALOC_CUSTOM + -ida_typeinf.argloc_t.get_ea (method) - get_ea(self) -> ea_t - Get the global address. Use when atype() == ALOC_STATIC +ida_typeinf.argloc_t.get_ea(self) -> ida_idaapi.ea_t + Get the global address. Use when atype() == ALOC_STATIC + -ida_typeinf.argloc_t.get_reginfo (method) - get_reginfo(self) -> uint32 - Get all register info. Use when atype() == ALOC_REG1 or ALOC_REG2 +ida_typeinf.argloc_t.get_reginfo(self) -> int + Get all register info. Use when atype() == ALOC_REG1 or ALOC_REG2 + -ida_typeinf.argloc_t.get_rrel (method) - get_rrel(self) -> rrel_t - Get register-relative info. Use when atype() == ALOC_RREL +ida_typeinf.argloc_t.get_rrel(self) -> "rrel_t &" + Get register-relative info. Use when atype() == ALOC_RREL + -ida_typeinf.argloc_t.has_reg (method) - has_reg(self) -> bool +ida_typeinf.argloc_t.has_reg(self) -> bool TRUE if argloc has a register part. -ida_typeinf.argloc_t.has_stkoff (method) - has_stkoff(self) -> bool +ida_typeinf.argloc_t.has_stkoff(self) -> bool TRUE if argloc has a stack part. -ida_typeinf.argloc_t.in_stack (method) - in_stack(self) -> bool +ida_typeinf.argloc_t.in_stack(self) -> bool TRUE if argloc is in stack entirely. -ida_typeinf.argloc_t.is_badloc (method) - is_badloc(self) -> bool +ida_typeinf.argloc_t.is_badloc(self) -> bool See ALOC_NONE. -ida_typeinf.argloc_t.is_custom (method) - is_custom(self) -> bool +ida_typeinf.argloc_t.is_custom(self) -> bool See ALOC_CUSTOM. -ida_typeinf.argloc_t.is_ea (method) - is_ea(self) -> bool +ida_typeinf.argloc_t.is_ea(self) -> bool See ALOC_STATIC. -ida_typeinf.argloc_t.is_fragmented (method) - is_fragmented(self) -> bool +ida_typeinf.argloc_t.is_fragmented(self) -> bool is_scattered() || is_reg2() -ida_typeinf.argloc_t.is_mixed_scattered (method) - is_mixed_scattered(self) -> bool +ida_typeinf.argloc_t.is_mixed_scattered(self) -> bool mixed scattered: consists of register and stack parts -ida_typeinf.argloc_t.is_reg (method) - is_reg(self) -> bool +ida_typeinf.argloc_t.is_reg(self) -> bool is_reg1() || is_reg2() -ida_typeinf.argloc_t.is_reg1 (method) - is_reg1(self) -> bool +ida_typeinf.argloc_t.is_reg1(self) -> bool See ALOC_REG1. -ida_typeinf.argloc_t.is_reg2 (method) - is_reg2(self) -> bool +ida_typeinf.argloc_t.is_reg2(self) -> bool See ALOC_REG2. -ida_typeinf.argloc_t.is_rrel (method) - is_rrel(self) -> bool +ida_typeinf.argloc_t.is_rrel(self) -> bool See ALOC_RREL. -ida_typeinf.argloc_t.is_scattered (method) - is_scattered(self) -> bool +ida_typeinf.argloc_t.is_scattered(self) -> bool See ALOC_DIST. -ida_typeinf.argloc_t.is_stkoff (method) - is_stkoff(self) -> bool +ida_typeinf.argloc_t.is_stkoff(self) -> bool See ALOC_STACK. -ida_typeinf.argloc_t.reg1 (method) - reg1(self) -> int - Get the register info. Use when atype() == ALOC_REG1 or ALOC_REG2 +ida_typeinf.argloc_t.reg1(self) -> int + Get the register info. Use when atype() == ALOC_REG1 or ALOC_REG2 + -ida_typeinf.argloc_t.reg2 (method) - reg2(self) -> int - Get info for the second register. Use when atype() == ALOC_REG2 +ida_typeinf.argloc_t.reg2(self) -> int + Get info for the second register. Use when atype() == ALOC_REG2 + -ida_typeinf.argloc_t.regoff (method) - regoff(self) -> int - Get offset from the beginning of the register in bytes. Use when atype() == - ALOC_REG1 +ida_typeinf.argloc_t.regoff(self) -> int + Get offset from the beginning of the register in bytes. Use when atype() == ALOC_REG1 + -ida_typeinf.argloc_t.scattered (method) - scattered(self) -> scattered_aloc_t - Get scattered argument info. Use when atype() == ALOC_DIST +ida_typeinf.argloc_t.scattered(self) -> "scattered_aloc_t &" + Get scattered argument info. Use when atype() == ALOC_DIST + -ida_typeinf.argloc_t.set_badloc (method) - set_badloc(self) +ida_typeinf.argloc_t.set_badloc(self) -> None Set to invalid location. -ida_typeinf.argloc_t.set_ea (method) - set_ea(self, _ea) +ida_typeinf.argloc_t.set_ea(self, _ea: ida_idaapi.ea_t) -> None Set static ea location. - - @param _ea: (C++: ea_t) -ida_typeinf.argloc_t.set_reg1 (method) - set_reg1(self, reg, off=0) +ida_typeinf.argloc_t.set_reg1(self, reg: int, off: int = 0) -> None Set register location. - - @param reg: (C++: int) - @param off: (C++: int) -ida_typeinf.argloc_t.set_reg2 (method) - set_reg2(self, _reg1, _reg2) +ida_typeinf.argloc_t.set_reg2(self, _reg1: int, _reg2: int) -> None Set secondary register location. - - @param _reg1: (C++: int) - @param _reg2: (C++: int) -ida_typeinf.argloc_t.set_stkoff (method) - set_stkoff(self, off) +ida_typeinf.argloc_t.set_stkoff(self, off: int) -> None Set stack offset location. - - @param off: (C++: sval_t) -ida_typeinf.argloc_t.stkoff (method) - stkoff(self) -> sval_t - Get the stack offset. Use if atype() == ALOC_STACK +ida_typeinf.argloc_t.stkoff(self) -> int + Get the stack offset. Use if atype() == ALOC_STACK + -ida_typeinf.argloc_t.swap (method) - swap(self, r) +ida_typeinf.argloc_t.swap(self, r: "argloc_t") -> None Assign this == r and r == this. - - @param r: (C++: argloc_t &) -ida_typeinf.argpart_t (class) - Proxy of C++ argpart_t class. +ida_typeinf.argpart_t -ida_typeinf.argpart_t.__init__ (method) - __init__(self, a) -> argpart_t - - @param a: argloc_t const & - - __init__(self) -> argpart_t +ida_typeinf.argpart_t.__init__(self, *args) -ida_typeinf.argpart_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: argpart_t const & +ida_typeinf.argpart_t.__lt__(self, r: "argpart_t") -> bool -ida_typeinf.argpart_t.bad_offset (method) - bad_offset(self) -> bool +ida_typeinf.argpart_t.bad_offset(self) -> bool Does this argpart have a valid offset? -ida_typeinf.argpart_t.bad_size (method) - bad_size(self) -> bool +ida_typeinf.argpart_t.bad_size(self) -> bool Does this argpart have a valid size? -ida_typeinf.argpart_t.off (variable) +ida_typeinf.argpart_t.off offset from the beginning of the argument -ida_typeinf.argpart_t.size (variable) +ida_typeinf.argpart_t.size the number of bytes -ida_typeinf.argpart_t.swap (method) - swap(self, r) +ida_typeinf.argpart_t.swap(self, r: "argpart_t") -> None Assign this = r and r = this. - - @param r: (C++: argpart_t &) -ida_typeinf.argpartvec_t (class) - Proxy of C++ qvector< argpart_t > class. +ida_typeinf.argpartvec_t -ida_typeinf.argpartvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< argpart_t > const & +ida_typeinf.argpartvec_t.__eq__(self, r: "argpartvec_t") -> bool -ida_typeinf.argpartvec_t.__getitem__ (method) - __getitem__(self, i) -> argpart_t - - @param i: size_t +ida_typeinf.argpartvec_t.__getitem__(self, i: "size_t") -> "argpart_t const &" -ida_typeinf.argpartvec_t.__init__ (method) - __init__(self) -> argpartvec_t - __init__(self, x) -> argpartvec_t - - @param x: qvector< argpart_t > const & +ida_typeinf.argpartvec_t.__init__(self, *args) -ida_typeinf.argpartvec_t.__len__ (method) - __len__(self) -> size_t +ida_typeinf.argpartvec_t.__len__(self) -> "size_t" -ida_typeinf.argpartvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< argpart_t > const & +ida_typeinf.argpartvec_t.__ne__(self, r: "argpartvec_t") -> bool -ida_typeinf.argpartvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: argpart_t const & +ida_typeinf.argpartvec_t.__setitem__(self, i: "size_t", v: "argpart_t") -> None -ida_typeinf.argpartvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: argpart_t const & +ida_typeinf.argpartvec_t._del(self, x: "argpart_t") -> bool -ida_typeinf.argpartvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: argpart_t const & +ida_typeinf.argpartvec_t.add_unique(self, x: "argpart_t") -> bool -ida_typeinf.argpartvec_t.at (method) - at(self, _idx) -> argpart_t - - @param _idx: size_t +ida_typeinf.argpartvec_t.append(self, x: "argpart_t") -> None -ida_typeinf.argpartvec_t.begin (method) - begin(self) -> argpart_t +ida_typeinf.argpartvec_t.at(self, _idx: "size_t") -> "argpart_t const &" -ida_typeinf.argpartvec_t.capacity (method) - capacity(self) -> size_t +ida_typeinf.argpartvec_t.begin(self, *args) -> "qvector< argpart_t >::const_iterator" -ida_typeinf.argpartvec_t.clear (method) - clear(self) +ida_typeinf.argpartvec_t.capacity(self) -> "size_t" -ida_typeinf.argpartvec_t.empty (method) - empty(self) -> bool +ida_typeinf.argpartvec_t.clear(self) -> None -ida_typeinf.argpartvec_t.end (method) - end(self) -> argpart_t +ida_typeinf.argpartvec_t.empty(self) -> bool -ida_typeinf.argpartvec_t.erase (method) - erase(self, it) -> argpart_t - - @param it: qvector< argpart_t >::iterator - - erase(self, first, last) -> argpart_t - - @param first: qvector< argpart_t >::iterator - @param last: qvector< argpart_t >::iterator +ida_typeinf.argpartvec_t.end(self, *args) -> "qvector< argpart_t >::const_iterator" -ida_typeinf.argpartvec_t.extract (method) - extract(self) -> argpart_t +ida_typeinf.argpartvec_t.erase(self, *args) -> "qvector< argpart_t >::iterator" -ida_typeinf.argpartvec_t.find (method) - find(self, x) -> argpart_t - - @param x: argpart_t const & +ida_typeinf.argpartvec_t.extend(self, x: "argpartvec_t") -> None -ida_typeinf.argpartvec_t.grow (method) - grow(self, x=argpart_t()) - - @param x: argpart_t const & +ida_typeinf.argpartvec_t.extract(self) -> "argpart_t *" -ida_typeinf.argpartvec_t.has (method) - has(self, x) -> bool - - @param x: argpart_t const & +ida_typeinf.argpartvec_t.find(self, *args) -> "qvector< argpart_t >::const_iterator" -ida_typeinf.argpartvec_t.inject (method) - inject(self, s, len) - - @param s: argpart_t * - @param len: size_t +ida_typeinf.argpartvec_t.grow(self, *args) -> None -ida_typeinf.argpartvec_t.insert (method) - insert(self, it, x) -> argpart_t - - @param it: qvector< argpart_t >::iterator - @param x: argpart_t const & +ida_typeinf.argpartvec_t.has(self, x: "argpart_t") -> bool -ida_typeinf.argpartvec_t.pop_back (method) - pop_back(self) +ida_typeinf.argpartvec_t.inject(self, s: "argpart_t", len: "size_t") -> None -ida_typeinf.argpartvec_t.push_back (method) - push_back(self, x) - - @param x: argpart_t const & - - push_back(self) -> argpart_t +ida_typeinf.argpartvec_t.insert(self, it: "argpart_t", x: "argpart_t") -> "qvector< argpart_t >::iterator" -ida_typeinf.argpartvec_t.qclear (method) - qclear(self) +ida_typeinf.argpartvec_t.pop_back(self) -> None -ida_typeinf.argpartvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_typeinf.argpartvec_t.push_back(self, *args) -> "argpart_t &" -ida_typeinf.argpartvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: argpart_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_typeinf.argpartvec_t.qclear(self) -> None -ida_typeinf.argpartvec_t.size (method) - size(self) -> size_t +ida_typeinf.argpartvec_t.reserve(self, cnt: "size_t") -> None -ida_typeinf.argpartvec_t.swap (method) - swap(self, r) - - @param r: qvector< argpart_t > & +ida_typeinf.argpartvec_t.resize(self, *args) -> None -ida_typeinf.argpartvec_t.truncate (method) - truncate(self) +ida_typeinf.argpartvec_t.size(self) -> "size_t" -ida_typeinf.argtinfo_helper_t (class) - Proxy of C++ argtinfo_helper_t class. +ida_typeinf.argpartvec_t.swap(self, r: "argpartvec_t") -> None -ida_typeinf.argtinfo_helper_t.__disown__ (method) +ida_typeinf.argpartvec_t.truncate(self) -> None -ida_typeinf.argtinfo_helper_t.__init__ (method) - __init__(self) -> argtinfo_helper_t - - @param self: PyObject * +ida_typeinf.argtinfo_helper_t -ida_typeinf.argtinfo_helper_t.has_delay_slot (method) - has_delay_slot(self, arg0) -> bool +ida_typeinf.argtinfo_helper_t.__disown__(self) + +ida_typeinf.argtinfo_helper_t.__init__(self) + +ida_typeinf.argtinfo_helper_t.has_delay_slot(self, arg0: ida_idaapi.ea_t) -> bool The call instruction with a delay slot?. - - @param arg0: ea_t -ida_typeinf.argtinfo_helper_t.is_stkarg_load (method) - is_stkarg_load(self, insn, src, dst) -> bool +ida_typeinf.argtinfo_helper_t.is_stkarg_load(self, insn: "insn_t const &", src: "int *", dst: "int *") -> bool Is the current insn a stkarg load?. if yes: * src: index of the source operand in insn_t::ops - * dst: index of the destination operand in insn_t::ops insn_t::ops[dst].addr is - expected to have the stack offset + * dst: index of the destination operand in insn_t::ops insn_t::ops[dst].addr is expected to have the stack offset - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - @param src: (C++: int *) - @param dst: (C++: int *) + + -ida_typeinf.argtinfo_helper_t.set_op_tinfo (method) - set_op_tinfo(self, insn, x, tif, name) -> bool +ida_typeinf.argtinfo_helper_t.set_op_tinfo(self, insn: "insn_t const &", x: "op_t const &", tif: "tinfo_t", name: str) -> bool Set the operand type as specified. - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - @param x: (C++: const op_t &) op_t const & - @param tif: (C++: const tinfo_t &) tinfo_t const & - @param name: (C++: const char *) char const * -ida_typeinf.argtinfo_helper_t.use_arg_tinfos (method) - use_arg_tinfos(self, caller, fti, rargs) - This function is to be called by the processor module in response to - ev_use_arg_types. - - @param caller: (C++: ea_t) - @param fti: (C++: func_type_data_t *) - @param rargs: (C++: funcargvec_t *) +ida_typeinf.argtinfo_helper_t.use_arg_tinfos(self, caller: ida_idaapi.ea_t, fti: "func_type_data_t", rargs: "funcargvec_t") -> None + This function is to be called by the processor module in response to ev_use_arg_types. + -ida_typeinf.array_type_data_t (class) - Proxy of C++ array_type_data_t class. +ida_typeinf.array_type_data_t -ida_typeinf.array_type_data_t.__init__ (method) - __init__(self, b=0, n=0) -> array_type_data_t - - @param b: size_t - @param n: size_t +ida_typeinf.array_type_data_t.__init__(self, b: "size_t" = 0, n: "size_t" = 0) -ida_typeinf.array_type_data_t.base (variable) +ida_typeinf.array_type_data_t.base array base -ida_typeinf.array_type_data_t.elem_type (variable) +ida_typeinf.array_type_data_t.elem_type element type -ida_typeinf.array_type_data_t.nelems (variable) +ida_typeinf.array_type_data_t.nelems number of elements -ida_typeinf.array_type_data_t.swap (method) - swap(self, r) +ida_typeinf.array_type_data_t.swap(self, r: "array_type_data_t") -> None set this = r and r = this - - @param r: (C++: array_type_data_t &) -ida_typeinf.begin_type_updating (function) - 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) enum update_type_t +ida_typeinf.begin_type_updating(utp: "update_type_t") -> None + 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() + -ida_typeinf.bitfield_type_data_t (class) - Proxy of C++ bitfield_type_data_t class. +ida_typeinf.bitfield_type_data_t -ida_typeinf.bitfield_type_data_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: bitfield_type_data_t const & +ida_typeinf.bitfield_type_data_t.__eq__(self, r: "bitfield_type_data_t") -> bool -ida_typeinf.bitfield_type_data_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: bitfield_type_data_t const & +ida_typeinf.bitfield_type_data_t.__ge__(self, r: "bitfield_type_data_t") -> bool -ida_typeinf.bitfield_type_data_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: bitfield_type_data_t const & +ida_typeinf.bitfield_type_data_t.__gt__(self, r: "bitfield_type_data_t") -> bool -ida_typeinf.bitfield_type_data_t.__init__ (method) - __init__(self, _nbytes=0, _width=0, _is_unsigned=False) -> bitfield_type_data_t - - @param _nbytes: uchar - @param _width: uchar - @param _is_unsigned: bool +ida_typeinf.bitfield_type_data_t.__init__(self, _nbytes: "uchar" = 0, _width: "uchar" = 0, _is_unsigned: bool = False) -ida_typeinf.bitfield_type_data_t.__le__ (method) - __le__(self, r) -> bool - - @param r: bitfield_type_data_t const & +ida_typeinf.bitfield_type_data_t.__le__(self, r: "bitfield_type_data_t") -> bool -ida_typeinf.bitfield_type_data_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: bitfield_type_data_t const & +ida_typeinf.bitfield_type_data_t.__lt__(self, r: "bitfield_type_data_t") -> bool -ida_typeinf.bitfield_type_data_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: bitfield_type_data_t const & +ida_typeinf.bitfield_type_data_t.__ne__(self, r: "bitfield_type_data_t") -> bool -ida_typeinf.bitfield_type_data_t.compare (method) - compare(self, r) -> int - - @param r: bitfield_type_data_t const & +ida_typeinf.bitfield_type_data_t.compare(self, r: "bitfield_type_data_t") -> int -ida_typeinf.bitfield_type_data_t.is_unsigned (variable) +ida_typeinf.bitfield_type_data_t.is_unsigned is bitfield unsigned? -ida_typeinf.bitfield_type_data_t.is_valid_bitfield (method) - is_valid_bitfield(self) -> bool +ida_typeinf.bitfield_type_data_t.is_valid_bitfield(self) -> bool -ida_typeinf.bitfield_type_data_t.nbytes (variable) +ida_typeinf.bitfield_type_data_t.nbytes enclosing type size (1,2,4,8 bytes) -ida_typeinf.bitfield_type_data_t.swap (method) - swap(self, r) - - @param r: bitfield_type_data_t & +ida_typeinf.bitfield_type_data_t.swap(self, r: "bitfield_type_data_t") -> None -ida_typeinf.bitfield_type_data_t.width (variable) +ida_typeinf.bitfield_type_data_t.width number of bits -ida_typeinf.calc_c_cpp_name (function) - calc_c_cpp_name(name, type, ccn_flags) -> str - Get C or C++ form of the name. - - @param name: (C++: const char *) original (mangled or decorated) name - @param type: (C++: const tinfo_t *) name type if known, otherwise nullptr - @param ccn_flags: (C++: int) one of C/C++ naming flags +ida_typeinf.calc_c_cpp_name(name: str, type: "tinfo_t", ccn_flags: int) -> str + Get C or C++ form of the name. + + @param name: original (mangled or decorated) name + @param type: name type if known, otherwise nullptr + @param ccn_flags: one of C/C++ naming flags -ida_typeinf.calc_number_of_children (function) - 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: (C++: const argloc_t &) location of the data (ALOC_STATIC or ALOC_CUSTOM) - @param tif: (C++: const tinfo_t &) type info - @param dont_deref_ptr: (C++: bool) consider 'ea' as the ptr value +ida_typeinf.calc_number_of_children(loc: "argloc_t", tif: "tinfo_t", dont_deref_ptr: bool = 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) + @param tif: type info + @param dont_deref_ptr: consider 'ea' as the ptr value @retval 0: data is not expandable @retval -1: error, see qerrno @retval else: the max number of lines -ida_typeinf.calc_tinfo_gaps (function) - calc_tinfo_gaps(out, typid) -> bool - - @param out: rangeset_t * - @param typid: uint32 +ida_typeinf.calc_tinfo_gaps(out: "rangeset_t", typid: "typid_t") -> bool -ida_typeinf.calc_type_size (function) - calc_type_size(ti, tp) -> PyObject * +ida_typeinf.calc_type_size(til: til_t, type: bytes) Returns the size of a type - - @param ti: Type info library. 'None' can be passed. - @param tp: serialized type byte string - @return: - None on failure + @param til: Type info library. 'None' can be passed. + @param type: serialized type byte string + @return: + - None on failure - The size of the type -ida_typeinf.callregs_t (class) - Proxy of C++ callregs_t class. +ida_typeinf.callregs_t -ida_typeinf.callregs_t.__init__ (method) - __init__(self) -> callregs_t - __init__(self, cc) -> callregs_t - - @param cc: cm_t +ida_typeinf.callregs_t.__init__(self, *args) -ida_typeinf.callregs_t.by_slots (method) - by_slots(self) -> bool +ida_typeinf.callregs_t.by_slots(self) -> bool -ida_typeinf.callregs_t.fpregs (variable) +ida_typeinf.callregs_t.fpregs array of fp registers -ida_typeinf.callregs_t.gpregs (variable) +ida_typeinf.callregs_t.gpregs array of gp registers -ida_typeinf.callregs_t.init_regs (method) - init_regs(self, cc) +ida_typeinf.callregs_t.init_regs(self, cc: "cm_t") -> None Init policy & registers for given CC. - - @param cc: (C++: cm_t) -ida_typeinf.callregs_t.nregs (variable) +ida_typeinf.callregs_t.nregs max number of registers that can be used in a call -ida_typeinf.callregs_t.policy (variable) +ida_typeinf.callregs_t.policy argument policy -ida_typeinf.callregs_t.regcount (method) - regcount(cc) -> int +ida_typeinf.callregs_t.regcount(cc: "cm_t") -> int Get max number of registers may be used in a function call. - - @param cc: (C++: cm_t) -ida_typeinf.callregs_t.reginds (method) - reginds(self, gp_ind, fp_ind, r) -> bool - Get register indexes within GP/FP arrays. (-1 -> is not present in the - corresponding array) - - @param gp_ind: (C++: int *) - @param fp_ind: (C++: int *) - @param r: (C++: int) +ida_typeinf.callregs_t.reginds(self, gp_ind: "int *", fp_ind: "int *", r: int) -> bool + Get register indexes within GP/FP arrays. (-1 -> is not present in the corresponding array) + -ida_typeinf.callregs_t.reset (method) - reset(self) +ida_typeinf.callregs_t.reset(self) -> None Set policy and registers to invalid values. -ida_typeinf.callregs_t.set (method) - set(self, _policy, gprs, fprs) +ida_typeinf.callregs_t.set(self, _policy: "argreg_policy_t", gprs: "int const *", fprs: "int const *") -> None Init policy & registers (arrays are -1-terminated) - - @param _policy: (C++: argreg_policy_t) enum argreg_policy_t - @param gprs: (C++: const int *) int const * - @param fprs: (C++: const int *) int const * -ida_typeinf.callregs_t.swap (method) - swap(self, r) +ida_typeinf.callregs_t.set_registers(self, kind: "callregs_t::reg_kind_t", first_reg: int, last_reg: int) -> None + +ida_typeinf.callregs_t.swap(self, r: "callregs_t") -> None swap two instances - - @param r: (C++: callregs_t &) -ida_typeinf.callregs_t_regcount (function) - callregs_t_regcount(cc) -> int - - @param cc: cm_t +ida_typeinf.choose_local_tinfo(ti: "til_t", title: str, func: "local_tinfo_predicate_t *" = None, def_ord: int = 0, ud: "void *" = None) -> int + Choose a type from the local type library. + + @param ti: pointer to til + @param title: title of listbox to display + @param func: predicate to select types to display (maybe nullptr) + @param def_ord: ordinal to position cursor before choose + @param ud: user data + @returns == 0 means nothing is chosen, otherwise an ordinal number -ida_typeinf.choose_local_tinfo (function) - choose_local_tinfo(ti, title, func=None, def_ord=0, ud=None) -> uint32 - Choose a type from the local type library. - - @param ti: (C++: const til_t *) pointer to til - @param title: (C++: const char *) title of listbox to display - @param func: (C++: local_tinfo_predicate_t *) predicate to select types to display (maybe nullptr) - @param def_ord: (C++: uint32) ordinal to position cursor before choose - @param ud: (C++: void *) user data - @return: == 0 means nothing is chosen, otherwise an ordinal number +ida_typeinf.choose_local_tinfo_and_delta(delta: "int32 *", ti: "til_t", title: str, func: "local_tinfo_predicate_t *" = None, def_ord: int = 0, ud: "void *" = None) -> int + Choose a type from the local type library and specify the pointer shift value. + + @param delta: pointer shift value + @param ti: pointer to til + @param title: title of listbox to display + @param func: predicate to select types to display (maybe nullptr) + @param def_ord: ordinal to position cursor before choose + @param ud: user data + @returns == 0 means nothing is chosen, otherwise an ordinal number -ida_typeinf.choose_local_tinfo_and_delta (function) - 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: (C++: int32 *) pointer shift value - @param ti: (C++: const til_t *) pointer to til - @param title: (C++: const char *) title of listbox to display - @param func: (C++: local_tinfo_predicate_t *) predicate to select types to display (maybe nullptr) - @param def_ord: (C++: uint32) ordinal to position cursor before choose - @param ud: (C++: void *) user data - @return: == 0 means nothing is chosen, otherwise an ordinal number +ida_typeinf.choose_named_type(out_sym: "til_symbol_t", root_til: "til_t", title: str, ntf_flags: int, predicate: "predicate_t" = None) -> bool + Choose a type from a type library. + + @param out_sym: pointer to be filled with the chosen type + @param root_til: pointer to starting til (the function will inspect the base tils if allowed by flags) + @param title: title of listbox to display + @param ntf_flags: combination of Flags for named types + @param predicate: predicate to select types to display (maybe nullptr) + @returns false if nothing is chosen, otherwise true -ida_typeinf.choose_named_type (function) - choose_named_type(out_sym, root_til, title, ntf_flags, predicate=None) -> bool - Choose a type from a type library. - - @param out_sym: (C++: til_symbol_t *) pointer to be filled with the chosen type - @param root_til: (C++: const til_t *) pointer to starting til (the function will inspect the base - tils if allowed by flags) - @param title: (C++: const char *) title of listbox to display - @param ntf_flags: (C++: int) combination of Flags for named types - @param predicate: (C++: predicate_t *) predicate to select types to display (maybe nullptr) - @return: false if nothing is chosen, otherwise true +ida_typeinf.clear_tinfo_t(_this: "tinfo_t") -> None -ida_typeinf.clear_tinfo_t (function) - clear_tinfo_t(_this) - - @param _this: tinfo_t * +ida_typeinf.compact_til(ti: "til_t") -> bool + Collect garbage in til. Must be called before storing the til. + + @returns true if any memory was freed -ida_typeinf.compact_til (function) - 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(t1: "typid_t", t2: "typid_t", tcflags: int) -> bool -ida_typeinf.compare_tinfo (function) - compare_tinfo(t1, t2, tcflags) -> bool - - @param t1: uint32 - @param t2: uint32 - @param tcflags: int +ida_typeinf.const_aloc_visitor_t -ida_typeinf.const_aloc_visitor_t (class) - Proxy of C++ const_aloc_visitor_t class. +ida_typeinf.const_aloc_visitor_t.__disown__(self) -ida_typeinf.const_aloc_visitor_t.__disown__ (method) +ida_typeinf.const_aloc_visitor_t.__init__(self) -ida_typeinf.const_aloc_visitor_t.__init__ (method) - __init__(self) -> const_aloc_visitor_t - - @param self: PyObject * +ida_typeinf.const_aloc_visitor_t.visit_location(self, v: "argloc_t", off: int, size: int) -> int -ida_typeinf.const_aloc_visitor_t.visit_location (method) - visit_location(self, v, off, size) -> int - - @param v: argloc_t const & - @param off: int - @param size: int +ida_typeinf.convert_pt_flags_to_hti(pt_flags: int) -> 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) + -ida_typeinf.convert_pt_flags_to_hti (function) - 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(dsttil: "til_t", srctil: "til_t", name: str) -> int + 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 original types enabled + @param srctil: Source til. + @param name: name of the type to copy + @returns ordinal number of the copied type. 0 means error -ida_typeinf.copy_named_type (function) - 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: (C++: til_t *) Destination til. It must have orginal types enabled - @param srctil: (C++: const til_t *) Source til. - @param name: (C++: const char *) name of the type to copy - @return: ordinal number of the copied type. 0 means error +ida_typeinf.copy_tinfo_t(_this: "tinfo_t", r: "tinfo_t") -> None -ida_typeinf.copy_tinfo_t (function) - copy_tinfo_t(_this, r) - - @param _this: tinfo_t * - @param r: tinfo_t const & +ida_typeinf.create_enum_type(enum_name: str, ei: "enum_type_data_t", enum_width: int, sign: "type_sign_t", convert_to_bitmask: bool, enum_cmt: str = None) -> "tid_t" + Create type enum + + @param enum_name: type name + @param ei: enum type data + @param enum_width: the width of an enum element allowed values: 0 (unspecified),1,2,4,8,16,32,64 + @param sign: enum sign + @param convert_to_bitmask: try convert enum to bitmask enum + @param enum_cmt: enum type comment + @returns enum TID -ida_typeinf.create_enum_type (function) - create_enum_type(enum_name, ei, enum_width, sign, convert_to_bitmask, enum_cmt=None) -> tid_t - Create type enum - - @param enum_name: (C++: const char *) type name - @param ei: (C++: enum_type_data_t &) enum type data - @param enum_width: (C++: int) the width of an enum element allowed values: 0 - (unspecified),1,2,4,8,16,32,64 - @param sign: (C++: type_sign_t) enum sign - @param convert_to_bitmask: (C++: bool) try convert enum to bitmask enum - @param enum_cmt: (C++: const char *) enum type comment - @return: enum TID +ida_typeinf.create_numbered_type_name(ord: int) -> 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 + -ida_typeinf.create_numbered_type_name (function) - 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) +ida_typeinf.create_tinfo(_this: "tinfo_t", bt: "type_t", bt2: "type_t", ptr: "void *") -> bool -ida_typeinf.create_tinfo (function) - create_tinfo(_this, bt, bt2, ptr) -> bool - - @param _this: tinfo_t * - @param bt: type_t - @param bt2: type_t - @param ptr: void * +ida_typeinf.custom_data_type_info_t -ida_typeinf.create_tinfo2 (function) - create_tinfo2(_this, bt, bt2, ptr) -> bool - - @param _this: tinfo_t * - @param bt: type_t - @param bt2: type_t - @param ptr: void * +ida_typeinf.custom_data_type_info_t.__init__(self) -ida_typeinf.custom_data_type_info_t (class) - Proxy of C++ custom_data_type_info_t class. - -ida_typeinf.custom_data_type_info_t.__init__ (method) - __init__(self) -> custom_data_type_info_t - -ida_typeinf.custom_data_type_info_t.dtid (variable) +ida_typeinf.custom_data_type_info_t.dtid data type id -ida_typeinf.custom_data_type_info_t.fid (variable) +ida_typeinf.custom_data_type_info_t.fid data format ids -ida_typeinf.default_compiler (function) - default_compiler() -> comp_t +ida_typeinf.default_compiler() -> "comp_t" Get compiler specified by inf.cc. -ida_typeinf.del_named_type (function) - del_named_type(ti, name, ntf_flags) -> bool - Delete information about a symbol. - - @param ti: (C++: til_t *) type library - @param name: (C++: const char *) name of symbol - @param ntf_flags: (C++: int) combination of Flags for named types - @return: success +ida_typeinf.del_named_type(ti: "til_t", name: str, ntf_flags: int) -> bool + Delete information about a symbol. + + @param ti: type library + @param name: name of symbol + @param ntf_flags: combination of Flags for named types + @returns success -ida_typeinf.del_numbered_type (function) - del_numbered_type(ti, ordinal) -> bool +ida_typeinf.del_numbered_type(ti: "til_t", ordinal: int) -> bool Delete a numbered type. - - @param ti: (C++: til_t *) - @param ordinal: (C++: uint32) -ida_typeinf.del_til (function) - del_til(name) -> bool +ida_typeinf.del_til(name: str) -> bool Unload a til file. - - @param name: (C++: const char *) char const * -ida_typeinf.del_tinfo_attr (function) - del_tinfo_attr(tif, key, make_copy) -> bool - - @param tif: tinfo_t * - @param key: qstring const & - @param make_copy: bool +ida_typeinf.del_tinfo_attr(tif: "tinfo_t", key: str, make_copy: bool) -> bool -ida_typeinf.del_vftable_ea (function) - del_vftable_ea(ordinal) -> bool - Delete the address of a vftable instance for a vftable type. - - @param ordinal: (C++: uint32) ordinal number of a vftable type. - @return: success +ida_typeinf.del_vftable_ea(ordinal: int) -> bool + Delete the address of a vftable instance for a vftable type. + + @param ordinal: ordinal number of a vftable type. + @returns success -ida_typeinf.deref_ptr (function) - deref_ptr(ptr_ea, tif, closure_obj=None) -> bool - Dereference a pointer. - - @param ptr_ea: (C++: ea_t *) in/out parameter +ida_typeinf.deref_ptr(ptr_ea: "ea_t *", tif: "tinfo_t", closure_obj: "ea_t *" = None) -> bool + Dereference a pointer. + + @param ptr_ea: in/out parameter * in: address of the pointer * out: the pointed address - @param tif: (C++: const tinfo_t &) type of the pointer - @param closure_obj: (C++: ea_t *) closure object (not used yet) - @return: success + @param tif: type of the pointer + @param closure_obj: closure object (not used yet) + @returns success -ida_typeinf.deserialize_tinfo (function) - deserialize_tinfo(tif, til, ptype, pfields, pfldcmts, cmt=None) -> bool - - @param tif: tinfo_t * - @param til: til_t const * - @param ptype: type_t const ** - @param pfields: p_list const ** - @param pfldcmts: p_list const ** - @param cmt: char const * +ida_typeinf.deserialize_tinfo(tif: "tinfo_t", til: "til_t", ptype: "type_t const **", pfields: "p_list const **", pfldcmts: "p_list const **", cmt: str = None) -> bool -ida_typeinf.dstr_tinfo (function) - dstr_tinfo(tif) -> char const * - - @param tif: tinfo_t const * +ida_typeinf.detach_tinfo_t(_this: "tinfo_t") -> bool -ida_typeinf.dump_func_type_data (function) - dump_func_type_data(fti, praloc_bits) -> str +ida_typeinf.dstr_tinfo(tif: "tinfo_t") -> str + +ida_typeinf.dump_func_type_data(fti: "func_type_data_t", praloc_bits: int) -> str Use func_type_data_t::dump() + +ida_typeinf.edm_t + +ida_typeinf.edm_t.__eq__(self, r: "edm_t") -> bool + +ida_typeinf.edm_t.__init__(self, *args) + Create an enumerator, with the specified name and value - @param fti: (C++: const func_type_data_t &) func_type_data_t const & - @param praloc_bits: (C++: int) - -ida_typeinf.edm_t (class) - Proxy of C++ edm_t class. - -ida_typeinf.edm_t.__eq__ (method) - __eq__(self, r) -> bool + This constructor has the following signatures: - @param r: edm_t const & - -ida_typeinf.edm_t.__init__ (method) - __init__(self) -> edm_t - -ida_typeinf.edm_t.__ne__ (method) - __ne__(self, r) -> bool + 1. edm_t(edm: edm_t) + 2. edm_t(name: str, value: int, cmt: str=None) - @param r: edm_t const & + @param name Enumerator name. Must not be empty (1st form) + @param value Enumerator value (1st form) + @param cmt Enumerator repeatable comment. May be empty (1st form) + @param edm An enum member to copy -ida_typeinf.edm_t.get_tid (method) - get_tid(self) -> tid_t +ida_typeinf.edm_t.__ne__(self, r: "edm_t") -> bool -ida_typeinf.edm_t.swap (method) - swap(self, r) - - @param r: edm_t & +ida_typeinf.edm_t.empty(self) -> bool -ida_typeinf.edmvec_t (class) - Proxy of C++ qvector< edm_t > class. +ida_typeinf.edm_t.get_tid(self) -> "tid_t" -ida_typeinf.edmvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< edm_t > const & +ida_typeinf.edm_t.swap(self, r: "edm_t") -> None -ida_typeinf.edmvec_t.__getitem__ (method) - __getitem__(self, i) -> edm_t - - @param i: size_t +ida_typeinf.edmvec_t -ida_typeinf.edmvec_t.__init__ (method) - __init__(self) -> edmvec_t - __init__(self, x) -> edmvec_t - - @param x: qvector< edm_t > const & +ida_typeinf.edmvec_t.__eq__(self, r: "edmvec_t") -> bool -ida_typeinf.edmvec_t.__len__ (method) - __len__(self) -> size_t +ida_typeinf.edmvec_t.__getitem__(self, i: "size_t") -> "edm_t const &" -ida_typeinf.edmvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< edm_t > const & +ida_typeinf.edmvec_t.__init__(self, *args) -ida_typeinf.edmvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: edm_t const & +ida_typeinf.edmvec_t.__len__(self) -> "size_t" -ida_typeinf.edmvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: edm_t const & +ida_typeinf.edmvec_t.__ne__(self, r: "edmvec_t") -> bool -ida_typeinf.edmvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: edm_t const & +ida_typeinf.edmvec_t.__setitem__(self, i: "size_t", v: "edm_t") -> None -ida_typeinf.edmvec_t.at (method) - at(self, _idx) -> edm_t - - @param _idx: size_t +ida_typeinf.edmvec_t._del(self, x: "edm_t") -> bool -ida_typeinf.edmvec_t.begin (method) - begin(self) -> edm_t +ida_typeinf.edmvec_t.add_unique(self, x: "edm_t") -> bool -ida_typeinf.edmvec_t.capacity (method) - capacity(self) -> size_t +ida_typeinf.edmvec_t.append(self, x: "edm_t") -> None -ida_typeinf.edmvec_t.clear (method) - clear(self) +ida_typeinf.edmvec_t.at(self, _idx: "size_t") -> "edm_t const &" -ida_typeinf.edmvec_t.empty (method) - empty(self) -> bool +ida_typeinf.edmvec_t.begin(self, *args) -> "qvector< edm_t >::const_iterator" -ida_typeinf.edmvec_t.end (method) - end(self) -> edm_t +ida_typeinf.edmvec_t.capacity(self) -> "size_t" -ida_typeinf.edmvec_t.erase (method) - erase(self, it) -> edm_t - - @param it: qvector< edm_t >::iterator - - erase(self, first, last) -> edm_t - - @param first: qvector< edm_t >::iterator - @param last: qvector< edm_t >::iterator +ida_typeinf.edmvec_t.clear(self) -> None -ida_typeinf.edmvec_t.extract (method) - extract(self) -> edm_t +ida_typeinf.edmvec_t.empty(self) -> bool -ida_typeinf.edmvec_t.find (method) - find(self, x) -> edm_t - - @param x: edm_t const & +ida_typeinf.edmvec_t.end(self, *args) -> "qvector< edm_t >::const_iterator" -ida_typeinf.edmvec_t.grow (method) - grow(self, x=edm_t()) - - @param x: edm_t const & +ida_typeinf.edmvec_t.erase(self, *args) -> "qvector< edm_t >::iterator" -ida_typeinf.edmvec_t.has (method) - has(self, x) -> bool - - @param x: edm_t const & +ida_typeinf.edmvec_t.extend(self, x: "edmvec_t") -> None -ida_typeinf.edmvec_t.inject (method) - inject(self, s, len) - - @param s: edm_t * - @param len: size_t +ida_typeinf.edmvec_t.extract(self) -> "edm_t *" -ida_typeinf.edmvec_t.insert (method) - insert(self, it, x) -> edm_t - - @param it: qvector< edm_t >::iterator - @param x: edm_t const & +ida_typeinf.edmvec_t.find(self, *args) -> "qvector< edm_t >::const_iterator" -ida_typeinf.edmvec_t.pop_back (method) - pop_back(self) +ida_typeinf.edmvec_t.grow(self, *args) -> None -ida_typeinf.edmvec_t.push_back (method) - push_back(self, x) - - @param x: edm_t const & - - push_back(self) -> edm_t +ida_typeinf.edmvec_t.has(self, x: "edm_t") -> bool -ida_typeinf.edmvec_t.qclear (method) - qclear(self) +ida_typeinf.edmvec_t.inject(self, s: "edm_t", len: "size_t") -> None -ida_typeinf.edmvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_typeinf.edmvec_t.insert(self, it: "edm_t", x: "edm_t") -> "qvector< edm_t >::iterator" -ida_typeinf.edmvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: edm_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_typeinf.edmvec_t.pop_back(self) -> None -ida_typeinf.edmvec_t.size (method) - size(self) -> size_t +ida_typeinf.edmvec_t.push_back(self, *args) -> "edm_t &" -ida_typeinf.edmvec_t.swap (method) - swap(self, r) - - @param r: qvector< edm_t > & +ida_typeinf.edmvec_t.qclear(self) -> None -ida_typeinf.edmvec_t.truncate (method) - truncate(self) +ida_typeinf.edmvec_t.reserve(self, cnt: "size_t") -> None -ida_typeinf.enable_numbered_types (function) - enable_numbered_types(ti, enable) -> bool - Enable the use of numbered types in til. Currently it is impossible to disable - numbered types once they are enabled - - @param ti: (C++: til_t *) - @param enable: (C++: bool) +ida_typeinf.edmvec_t.resize(self, *args) -> None -ida_typeinf.end_type_updating (function) - 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) enum update_type_t +ida_typeinf.edmvec_t.size(self) -> "size_t" -ida_typeinf.enum_type_data_t (class) - Proxy of C++ enum_type_data_t class. +ida_typeinf.edmvec_t.swap(self, r: "edmvec_t") -> None -ida_typeinf.enum_type_data_t.__init__ (method) - __init__(self, _bte=BTE_ALWAYS|BTE_HEX) -> enum_type_data_t - - @param _bte: bte_t +ida_typeinf.edmvec_t.truncate(self) -> None -ida_typeinf.enum_type_data_t.add_constant (method) - add_constant(self, name, value, cmt=None) +ida_typeinf.enable_numbered_types(ti: "til_t", enable: bool) -> bool + Enable the use of numbered types in til. Currently it is impossible to disable numbered types once they are enabled + + +ida_typeinf.end_type_updating(utp: "update_type_t") -> None + Mark the end of a large update operation on the types (see begin_type_updating()) + +ida_typeinf.enum_type_data_t + +ida_typeinf.enum_type_data_t.__init__(self, *args) + +ida_typeinf.enum_type_data_t.add_constant(self, name: str, value: "uint64", cmt: str = None) -> None add constant for regular enum - - @param name: (C++: const char *) char const * - @param value: (C++: uint64) - @param cmt: (C++: const char *) char const * -ida_typeinf.enum_type_data_t.bte (variable) - enum member sizes (shift amount) and style. do not manually set BTE_BITMASK, use - set_enum_is_bitmask() +ida_typeinf.enum_type_data_t.all_constants(self) + Generate tupples of all constants except of bitmasks. + Each tupple is: + [0] constant index + [1] enum member index of group start + [2] group size + In case of regular enum the second element of tupple is 0 and the third element of tupple is the number of enum members. -ida_typeinf.enum_type_data_t.calc_mask (method) - calc_mask(self) -> uint64 +ida_typeinf.enum_type_data_t.all_groups(self, skip_trivial = False) + Generate tuples for bitmask enum groups. + Each tupple is: + [0] enum member index of group start + [1] group size + Tupples may include or not the group with 1 element. -ida_typeinf.enum_type_data_t.calc_nbytes (method) - calc_nbytes(self) -> int +ida_typeinf.enum_type_data_t.bte + enum member sizes (shift amount) and style. do not manually set BTE_BITMASK, use set_enum_is_bitmask() + + +ida_typeinf.enum_type_data_t.calc_mask(self) -> "uint64" + +ida_typeinf.enum_type_data_t.calc_nbytes(self) -> int get the width of enum in bytes -ida_typeinf.enum_type_data_t.find_member (method) - find_member(self, name, _from=0, to=size_t(-1)) -> ssize_t +ida_typeinf.enum_type_data_t.find_member(self, *args) -> "ssize_t" + This function has the following signatures: + + 0. find_member(name: str, from: size_t=0, to: size_t=size_t(-1)) -> ssize_t + 1. find_member(value: uint64, serial: uchar, from: size_t=0, to: size_t=size_t(-1), vmask: uint64=uint64(-1)) -> ssize_t + + # 0: find_member(name: str, from: size_t=0, to: size_t=size_t(-1)) -> ssize_t + + find member (constant or bmask) by name + + + # 1: find_member(value: uint64, serial: uchar, from: size_t=0, to: size_t=size_t(-1), vmask: uint64=uint64(-1)) -> ssize_t + find member (constant or bmask) by value - - @param name: char const * - @param from: (C++: size_t) - @param to: (C++: size_t) - - find_member(self, value, serial, _from=0, to=size_t(-1), vmask=uint64(-1)) -> ssize_t - - @param value: uint64 - @param serial: uchar - @param from: size_t - @param to: size_t - @param vmask: uint64 -ida_typeinf.enum_type_data_t.get_constant_group (method) - get_constant_group(self, group_start_index, group_size, idx) -> bool - get group parameters for the constant, valid for etimask enum - - @param group_start_index: (C++: size_t *) index of the group mask - @param group_size: (C++: size_t *) group size (>=1) - @param idx: (C++: size_t) constant index - @return: success +ida_typeinf.enum_type_data_t.get_constant_group(self, *args) -> "PyObject *" + get group parameters for the constant, valid for bitmask enum + + @param group_start_index: index of the group mask + @param group_size: group size (>=1) + @param idx: constant index + @returns success -ida_typeinf.enum_type_data_t.get_enum_radix (method) - get_enum_radix(self) -> int - Get enum constant radix - - @return: radix or 1 for BTE_CHAR +ida_typeinf.enum_type_data_t.get_enum_radix(self) -> int + Get enum constant radix + + @returns radix or 1 for BTE_CHAR -ida_typeinf.enum_type_data_t.group_sizes (variable) - if present, specifies bitmask group sizes each non-trivial group starts with a - mask member +ida_typeinf.enum_type_data_t.get_max_serial(self, value: "uint64") -> "uchar" + return the maximum serial for the value -ida_typeinf.enum_type_data_t.has_lzero (method) - has_lzero(self) -> bool +ida_typeinf.enum_type_data_t.get_serial(self, index: "size_t") -> "uchar" + returns serial for the constant -ida_typeinf.enum_type_data_t.is_bf (method) - is_bf(self) -> bool +ida_typeinf.enum_type_data_t.get_value_repr(self, repr: "value_repr_t") -> "tinfo_code_t" + get enum radix and other representation info + + @param repr: value display info + +ida_typeinf.enum_type_data_t.group_sizes + if present, specifies bitmask group sizes each non-trivial group starts with a mask member + + +ida_typeinf.enum_type_data_t.has_lzero(self) -> bool + +ida_typeinf.enum_type_data_t.is_bf(self) -> bool is bitmask or ordinary enum? -ida_typeinf.enum_type_data_t.is_bin (method) - is_bin(self) -> bool +ida_typeinf.enum_type_data_t.is_bin(self) -> bool -ida_typeinf.enum_type_data_t.is_char (method) - is_char(self) -> bool +ida_typeinf.enum_type_data_t.is_char(self) -> bool -ida_typeinf.enum_type_data_t.is_dec (method) - is_dec(self) -> bool +ida_typeinf.enum_type_data_t.is_dec(self) -> bool -ida_typeinf.enum_type_data_t.is_group_mask_at (method) - is_group_mask_at(self, idx) -> bool - is the enum member at IDX a non-trivial group mask? a trivial group consist of - one bit and has just one member, which can be considered as a mask or a bitfield - constant - - @param idx: (C++: size_t) index - @return: success +ida_typeinf.enum_type_data_t.is_group_mask_at(self, idx: "size_t") -> bool + is the enum member at IDX a non-trivial group mask? a trivial group consist of one bit and has just one member, which can be considered as a mask or a bitfield constant + + @param idx: index + @returns success -ida_typeinf.enum_type_data_t.is_hex (method) - is_hex(self) -> bool +ida_typeinf.enum_type_data_t.is_hex(self) -> bool -ida_typeinf.enum_type_data_t.is_number_signed (method) - is_number_signed(self) -> bool +ida_typeinf.enum_type_data_t.is_number_signed(self) -> bool -ida_typeinf.enum_type_data_t.is_oct (method) - is_oct(self) -> bool +ida_typeinf.enum_type_data_t.is_oct(self) -> bool -ida_typeinf.enum_type_data_t.is_sbin (method) - is_sbin(self) -> bool +ida_typeinf.enum_type_data_t.is_sbin(self) -> bool -ida_typeinf.enum_type_data_t.is_shex (method) - is_shex(self) -> bool +ida_typeinf.enum_type_data_t.is_shex(self) -> bool -ida_typeinf.enum_type_data_t.is_soct (method) - is_soct(self) -> bool +ida_typeinf.enum_type_data_t.is_soct(self) -> bool -ida_typeinf.enum_type_data_t.is_udec (method) - is_udec(self) -> bool +ida_typeinf.enum_type_data_t.is_udec(self) -> bool -ida_typeinf.enum_type_data_t.is_valid_group_sizes (method) - is_valid_group_sizes(self) -> bool +ida_typeinf.enum_type_data_t.is_valid_group_sizes(self) -> bool is valid group sizes -ida_typeinf.enum_type_data_t.set_enum_radix (method) - set_enum_radix(self, radix, sign) - Set radix to display constants - - @param radix: (C++: int) radix with the special case 1 to display as character - @param sign: (C++: bool) +ida_typeinf.enum_type_data_t.set_enum_radix(self, radix: int, sign: bool) -> None + Set radix to display constants + + @param radix: radix with the special case 1 to display as character -ida_typeinf.enum_type_data_t.set_lzero (method) - set_lzero(self, on) - - @param on: bool +ida_typeinf.enum_type_data_t.set_lzero(self, on: bool) -> None -ida_typeinf.enum_type_data_t.set_nbytes (method) - set_nbytes(self, nbytes) -> bool +ida_typeinf.enum_type_data_t.set_nbytes(self, nbytes: int) -> bool set enum width (nbytes) - - @param nbytes: (C++: int) -ida_typeinf.enum_type_data_t.set_value_repr (method) - set_value_repr(self, repr) -> tinfo_code_t - set enum radix and other representation info - - @param repr: (C++: const value_repr_t &) value display info +ida_typeinf.enum_type_data_t.set_value_repr(self, repr: "value_repr_t") -> "tinfo_code_t" + set enum radix and other representation info + + @param repr: value display info -ida_typeinf.enum_type_data_t.store_64bit_values (method) - store_64bit_values(self) -> bool +ida_typeinf.enum_type_data_t.store_64bit_values(self) -> bool -ida_typeinf.enum_type_data_t.swap (method) - swap(self, r) +ida_typeinf.enum_type_data_t.swap(self, r: "enum_type_data_t") -> None swap two instances - - @param r: (C++: enum_type_data_t &) -ida_typeinf.enum_type_data_t.taenum_bits (variable) +ida_typeinf.enum_type_data_t.taenum_bits Type attributes for enums -ida_typeinf.enum_type_data_t__get_max_serial (function) - enum_type_data_t__get_max_serial(ei, value) -> uchar - - @param ei: enum_type_data_t const * - @param value: uint64 +ida_typeinf.extract_argloc(vloc: "argloc_t", ptype: "type_t const **", forbid_stkoff: bool) -> bool + Deserialize an argument location. Argument FORBID_STKOFF checks location type. It can be used, for example, to check the return location of a function that cannot return a value in the stack + -ida_typeinf.extract_argloc (function) - extract_argloc(vloc, ptype, forbid_stkoff) -> bool - Deserialize an argument location. Argument FORBID_STKOFF checks location type. - It can be used, for example, to check the return location of a function that - cannot return a value in the stack - - @param vloc: (C++: argloc_t *) - @param ptype: (C++: const type_t **) type_t const ** - @param forbid_stkoff: (C++: bool) +ida_typeinf.find_tinfo_udt_member(udm: "udm_t", typid: "typid_t", strmem_flags: int) -> int -ida_typeinf.find_tinfo_udt_member (function) - find_tinfo_udt_member(udm, typid, strmem_flags) -> int - - @param udm: udm_t * - @param typid: uint32 - @param strmem_flags: int +ida_typeinf.first_named_type(ti: "til_t", ntf_flags: int) -> str + Enumerate types. + + @param ti: type library. nullptr means the local type library for the current database. + @param ntf_flags: combination of Flags for named types + @returns Type or symbol names, depending of ntf_flags. Returns mangled names. Never returns anonymous types. To include them, enumerate types by ordinals. -ida_typeinf.first_named_type (function) - first_named_type(ti, ntf_flags) -> char const * - Enumerate types. - - @param ti: (C++: const til_t *) type library. nullptr means the local type library for the current - database. - @param ntf_flags: (C++: int) combination of Flags for named types - @return: Type or symbol names, depending of ntf_flags. Returns mangled names. - Never returns anonymous types. To include them, enumerate types by - ordinals. - -ida_typeinf.for_all_arglocs (function) - for_all_arglocs(vv, vloc, size, off=0) -> int +ida_typeinf.for_all_arglocs(vv: "aloc_visitor_t", vloc: "argloc_t", size: int, off: int = 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 (function) - for_all_const_arglocs(vv, vloc, size, off=0) -> int +ida_typeinf.for_all_const_arglocs(vv: "const_aloc_visitor_t", vloc: "argloc_t", size: int, off: int = 0) -> int See for_all_arglocs() - - @param vv: (C++: const_aloc_visitor_t &) - @param vloc: (C++: const argloc_t &) argloc_t const & - @param size: (C++: int) - @param off: (C++: int) -ida_typeinf.free_til (function) - free_til(ti) +ida_typeinf.free_til(ti: "til_t") -> None Free memory allocated by til. - - @param ti: (C++: til_t *) -ida_typeinf.func_has_stkframe_hole (function) - 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 &) func_type_data_t const & +ida_typeinf.func_has_stkframe_hole(ea: ida_idaapi.ea_t, fti: "func_type_data_t") -> 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. + -ida_typeinf.func_type_data_t (class) - Proxy of C++ func_type_data_t class. +ida_typeinf.func_type_data_t -ida_typeinf.func_type_data_t.__init__ (method) - __init__(self) -> func_type_data_t +ida_typeinf.func_type_data_t.__init__(self) -ida_typeinf.func_type_data_t.cc (variable) +ida_typeinf.func_type_data_t.cc calling convention -ida_typeinf.func_type_data_t.dump (method) - dump(self, praloc_bits=0x02) -> bool - Dump information that is not always visible in the function prototype. (argument - locations, return location, total stkarg size) - - @param praloc_bits: (C++: int) +ida_typeinf.func_type_data_t.dump(self, praloc_bits: int = 2) -> bool + Dump information that is not always visible in the function prototype. (argument locations, return location, total stkarg size) + -ida_typeinf.func_type_data_t.flags (variable) - Function type data property bits +ida_typeinf.func_type_data_t.find_argument(self, *args) -> "ssize_t" + find argument by name -ida_typeinf.func_type_data_t.get_call_method (method) - get_call_method(self) -> int +ida_typeinf.func_type_data_t.flags + Function type data property bits + -ida_typeinf.func_type_data_t.guess_cc (method) - guess_cc(self, purged, cc_flags) -> cm_t - Guess function calling convention use the following info: argument locations and - 'stkargs' - - @param purged: (C++: int) - @param cc_flags: (C++: int) +ida_typeinf.func_type_data_t.get_call_method(self) -> int -ida_typeinf.func_type_data_t.is_const (method) - is_const(self) -> bool +ida_typeinf.func_type_data_t.guess_cc(self, purged: int, cc_flags: int) -> "cm_t" + Guess function calling convention use the following info: argument locations and 'stkargs' + -ida_typeinf.func_type_data_t.is_ctor (method) - is_ctor(self) -> bool +ida_typeinf.func_type_data_t.is_const(self) -> bool -ida_typeinf.func_type_data_t.is_dtor (method) - is_dtor(self) -> bool +ida_typeinf.func_type_data_t.is_ctor(self) -> bool -ida_typeinf.func_type_data_t.is_golang_cc (method) - is_golang_cc(self) -> bool +ida_typeinf.func_type_data_t.is_dtor(self) -> bool -ida_typeinf.func_type_data_t.is_high (method) - is_high(self) -> bool +ida_typeinf.func_type_data_t.is_golang_cc(self) -> bool -ida_typeinf.func_type_data_t.is_noret (method) - is_noret(self) -> bool +ida_typeinf.func_type_data_t.is_high(self) -> bool -ida_typeinf.func_type_data_t.is_pure (method) - is_pure(self) -> bool +ida_typeinf.func_type_data_t.is_noret(self) -> bool -ida_typeinf.func_type_data_t.is_static (method) - is_static(self) -> bool +ida_typeinf.func_type_data_t.is_pure(self) -> bool -ida_typeinf.func_type_data_t.is_swift_cc (method) - is_swift_cc(self) -> bool +ida_typeinf.func_type_data_t.is_static(self) -> bool -ida_typeinf.func_type_data_t.is_vararg_cc (method) - is_vararg_cc(self) -> bool +ida_typeinf.func_type_data_t.is_swift_cc(self) -> bool -ida_typeinf.func_type_data_t.is_virtual (method) - is_virtual(self) -> bool +ida_typeinf.func_type_data_t.is_vararg_cc(self) -> bool -ida_typeinf.func_type_data_t.retloc (variable) +ida_typeinf.func_type_data_t.is_virtual(self) -> bool + +ida_typeinf.func_type_data_t.retloc return location -ida_typeinf.func_type_data_t.rettype (variable) +ida_typeinf.func_type_data_t.rettype return type -ida_typeinf.func_type_data_t.spoiled (variable) - spoiled register information. if spoiled register info is present, it overrides - the standard spoil info (eax, edx, ecx for x86) +ida_typeinf.func_type_data_t.spoiled + spoiled register information. if spoiled register info is present, it overrides the standard spoil info (eax, edx, ecx for x86) + -ida_typeinf.func_type_data_t.stkargs (variable) +ida_typeinf.func_type_data_t.stkargs size of stack arguments (not used in build_func_type) -ida_typeinf.func_type_data_t.swap (method) - swap(self, r) +ida_typeinf.func_type_data_t.swap(self, r: "func_type_data_t") -> None + +ida_typeinf.funcarg_t + +ida_typeinf.funcarg_t.__eq__(self, r: "funcarg_t") -> bool + +ida_typeinf.funcarg_t.__init__(self, *args) + Create a function argument, with the specified name and type. - @param r: func_type_data_t & - -ida_typeinf.funcarg_t (class) - Proxy of C++ funcarg_t class. - -ida_typeinf.funcarg_t.__eq__ (method) - __eq__(self, r) -> bool + This constructor has the following signatures: - @param r: funcarg_t const & - -ida_typeinf.funcarg_t.__init__ (method) - __init__(self) -> funcarg_t - -ida_typeinf.funcarg_t.__ne__ (method) - __ne__(self, r) -> bool + 1. funcarg_t(name: str, type, argloc: argloc_t) + 2. funcarg_t(funcarg: funcarg_t) - @param r: funcarg_t const & + In the 1st form, the 'type' descriptor, can be one of: + + * type_t: if the type is simple (integral/floating/bool). E.g., `BTF_INT` + * tinfo_t: can handle more complex types (structures, pointers, arrays, ...) + * str: a C type declaration + + If an input argument is incorrect, the constructor may raise an exception + + @param name a valid argument name. May not be empty (1st form). + @param type the member type (1st form). + @param argloc the argument location. Can be empty (1st form). + @param funcarg a funcarg_t to copy -ida_typeinf.funcarg_t.argloc (variable) +ida_typeinf.funcarg_t.__ne__(self, r: "funcarg_t") -> bool + +ida_typeinf.funcarg_t.argloc argument location -ida_typeinf.funcarg_t.cmt (variable) +ida_typeinf.funcarg_t.cmt argument comment (may be empty) -ida_typeinf.funcarg_t.flags (variable) - Function argument property bits +ida_typeinf.funcarg_t.flags + Function argument property bits + -ida_typeinf.funcarg_t.name (variable) +ida_typeinf.funcarg_t.name argument name (may be empty) -ida_typeinf.funcarg_t.type (variable) +ida_typeinf.funcarg_t.type argument type -ida_typeinf.funcargvec_t (class) - Proxy of C++ qvector< funcarg_t > class. +ida_typeinf.funcargvec_t -ida_typeinf.funcargvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< funcarg_t > const & +ida_typeinf.funcargvec_t.__eq__(self, r: "funcargvec_t") -> bool -ida_typeinf.funcargvec_t.__getitem__ (method) - __getitem__(self, i) -> funcarg_t - - @param i: size_t +ida_typeinf.funcargvec_t.__getitem__(self, i: "size_t") -> "funcarg_t const &" -ida_typeinf.funcargvec_t.__init__ (method) - __init__(self) -> funcargvec_t - __init__(self, x) -> funcargvec_t - - @param x: qvector< funcarg_t > const & +ida_typeinf.funcargvec_t.__init__(self, *args) -ida_typeinf.funcargvec_t.__len__ (method) - __len__(self) -> size_t +ida_typeinf.funcargvec_t.__len__(self) -> "size_t" -ida_typeinf.funcargvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< funcarg_t > const & +ida_typeinf.funcargvec_t.__ne__(self, r: "funcargvec_t") -> bool -ida_typeinf.funcargvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: funcarg_t const & +ida_typeinf.funcargvec_t.__setitem__(self, i: "size_t", v: "funcarg_t") -> None -ida_typeinf.funcargvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: funcarg_t const & +ida_typeinf.funcargvec_t._del(self, x: "funcarg_t") -> bool -ida_typeinf.funcargvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: funcarg_t const & +ida_typeinf.funcargvec_t.add_unique(self, x: "funcarg_t") -> bool -ida_typeinf.funcargvec_t.at (method) - at(self, _idx) -> funcarg_t - - @param _idx: size_t +ida_typeinf.funcargvec_t.append(self, x: "funcarg_t") -> None -ida_typeinf.funcargvec_t.begin (method) - begin(self) -> funcarg_t +ida_typeinf.funcargvec_t.at(self, _idx: "size_t") -> "funcarg_t const &" -ida_typeinf.funcargvec_t.capacity (method) - capacity(self) -> size_t +ida_typeinf.funcargvec_t.begin(self, *args) -> "qvector< funcarg_t >::const_iterator" -ida_typeinf.funcargvec_t.clear (method) - clear(self) +ida_typeinf.funcargvec_t.capacity(self) -> "size_t" -ida_typeinf.funcargvec_t.empty (method) - empty(self) -> bool +ida_typeinf.funcargvec_t.clear(self) -> None -ida_typeinf.funcargvec_t.end (method) - end(self) -> funcarg_t +ida_typeinf.funcargvec_t.empty(self) -> bool -ida_typeinf.funcargvec_t.erase (method) - erase(self, it) -> funcarg_t - - @param it: qvector< funcarg_t >::iterator - - erase(self, first, last) -> funcarg_t - - @param first: qvector< funcarg_t >::iterator - @param last: qvector< funcarg_t >::iterator +ida_typeinf.funcargvec_t.end(self, *args) -> "qvector< funcarg_t >::const_iterator" -ida_typeinf.funcargvec_t.extract (method) - extract(self) -> funcarg_t +ida_typeinf.funcargvec_t.erase(self, *args) -> "qvector< funcarg_t >::iterator" -ida_typeinf.funcargvec_t.find (method) - find(self, x) -> funcarg_t - - @param x: funcarg_t const & +ida_typeinf.funcargvec_t.extend(self, x: "funcargvec_t") -> None -ida_typeinf.funcargvec_t.grow (method) - grow(self, x=funcarg_t()) - - @param x: funcarg_t const & +ida_typeinf.funcargvec_t.extract(self) -> "funcarg_t *" -ida_typeinf.funcargvec_t.has (method) - has(self, x) -> bool - - @param x: funcarg_t const & +ida_typeinf.funcargvec_t.find(self, *args) -> "qvector< funcarg_t >::const_iterator" -ida_typeinf.funcargvec_t.inject (method) - inject(self, s, len) - - @param s: funcarg_t * - @param len: size_t +ida_typeinf.funcargvec_t.grow(self, *args) -> None -ida_typeinf.funcargvec_t.insert (method) - insert(self, it, x) -> funcarg_t - - @param it: qvector< funcarg_t >::iterator - @param x: funcarg_t const & +ida_typeinf.funcargvec_t.has(self, x: "funcarg_t") -> bool -ida_typeinf.funcargvec_t.pop_back (method) - pop_back(self) +ida_typeinf.funcargvec_t.inject(self, s: "funcarg_t", len: "size_t") -> None -ida_typeinf.funcargvec_t.push_back (method) - push_back(self, x) - - @param x: funcarg_t const & - - push_back(self) -> funcarg_t +ida_typeinf.funcargvec_t.insert(self, it: "funcarg_t", x: "funcarg_t") -> "qvector< funcarg_t >::iterator" -ida_typeinf.funcargvec_t.qclear (method) - qclear(self) +ida_typeinf.funcargvec_t.pop_back(self) -> None -ida_typeinf.funcargvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_typeinf.funcargvec_t.push_back(self, *args) -> "funcarg_t &" -ida_typeinf.funcargvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: funcarg_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_typeinf.funcargvec_t.qclear(self) -> None -ida_typeinf.funcargvec_t.size (method) - size(self) -> size_t +ida_typeinf.funcargvec_t.reserve(self, cnt: "size_t") -> None -ida_typeinf.funcargvec_t.swap (method) - swap(self, r) - - @param r: qvector< funcarg_t > & +ida_typeinf.funcargvec_t.resize(self, *args) -> None -ida_typeinf.funcargvec_t.truncate (method) - truncate(self) +ida_typeinf.funcargvec_t.size(self) -> "size_t" -ida_typeinf.gcc_layout (function) - gcc_layout() -> bool +ida_typeinf.funcargvec_t.swap(self, r: "funcargvec_t") -> None + +ida_typeinf.funcargvec_t.truncate(self) -> None + +ida_typeinf.gcc_layout() -> bool Should use the struct/union layout as done by gcc? -ida_typeinf.gen_decorate_name (function) - gen_decorate_name(name, mangle, cc, type) -> str +ida_typeinf.gen_decorate_name(name: str, mangle: bool, cc: "cm_t", type: "tinfo_t") -> str Generic function for decorate_name() (may be used in IDP modules) - - @param name: (C++: const char *) char const * - @param mangle: (C++: bool) - @param cc: (C++: cm_t) - @param type: (C++: const tinfo_t *) tinfo_t const * -ida_typeinf.gen_use_arg_tinfos (function) - gen_use_arg_tinfos(caller, fti, rargs, set_optype, is_stkarg_load, has_delay_slot) - - @param caller: ea_t - @param fti: func_type_data_t * - @param rargs: funcargvec_t * - @param set_optype: set_op_tinfo_t * - @param is_stkarg_load: is_stkarg_load_t * - @param has_delay_slot: has_delay_slot_t * - -ida_typeinf.gen_use_arg_tinfos2 (function) - gen_use_arg_tinfos2(_this, caller, fti, rargs) +ida_typeinf.gen_use_arg_tinfos(_this: "argtinfo_helper_t", caller: ida_idaapi.ea_t, fti: "func_type_data_t", rargs: "funcargvec_t") -> None Do not call this function directly, use argtinfo_helper_t. - - @param _this: (C++: struct argtinfo_helper_t *) argtinfo_helper_t * - @param caller: (C++: ea_t) - @param fti: (C++: func_type_data_t *) - @param rargs: (C++: funcargvec_t *) -ida_typeinf.get_abi_name (function) - get_abi_name() -> str - Get ABI name. - - @return: length of the name (>=0) +ida_typeinf.get_abi_name() -> str + Get ABI name. + + @returns length of the name (>=0) -ida_typeinf.get_alias_target (function) - 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 *) til_t const * - @param ordinal: (C++: uint32) +ida_typeinf.get_alias_target(ti: "til_t", ordinal: int) -> int + Find the final alias destination. If the ordinal has not been aliased, return the specified ordinal itself If failed, returns 0. + -ida_typeinf.get_arg_addrs (function) - get_arg_addrs(caller) -> PyObject * +ida_typeinf.get_arg_addrs(caller: ida_idaapi.ea_t) Retrieve addresses of argument initialization instructions @param caller: the address of the call instruction @return: list of instruction addresses -ida_typeinf.get_base_type (function) - get_base_type(t) -> type_t +ida_typeinf.get_base_type(t: "type_t") -> "type_t" Get get basic type bits (TYPE_BASE_MASK) - - @param t: (C++: type_t) -ida_typeinf.get_c_header_path (function) - get_c_header_path() -> str +ida_typeinf.get_c_header_path() -> str Get the include directory path of the target compiler. -ida_typeinf.get_c_macros (function) - get_c_macros() -> str +ida_typeinf.get_c_macros() -> str Get predefined macros for the target compiler. -ida_typeinf.get_comp (function) - get_comp(comp) -> comp_t +ida_typeinf.get_comp(comp: "comp_t") -> "comp_t" Get compiler bits. - - @param comp: (C++: comp_t) -ida_typeinf.get_compiler_abbr (function) - get_compiler_abbr(id) -> char const * +ida_typeinf.get_compiler_abbr(id: "comp_t") -> str Get abbreviated compiler name. - - @param id: (C++: comp_t) -ida_typeinf.get_compiler_name (function) - get_compiler_name(id) -> char const * +ida_typeinf.get_compiler_name(id: "comp_t") -> str Get full compiler name. - - @param id: (C++: comp_t) -ida_typeinf.get_compilers (function) - get_compilers(ids, names, abbrs) +ida_typeinf.get_compilers(ids: "compvec_t *", names: "qstrvec_t *", abbrs: "qstrvec_t *") -> None 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 (function) - 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: (C++: const tinfo_t &) enumeration type - @param serial: (C++: int) which enumeration member to use (0 means the first with the given - value) - @param value: (C++: uint64) value to search in the enumeration type - @return: success +ida_typeinf.get_enum_member_expr(tif: "tinfo_t", serial: int, value: "uint64") -> 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 + @param serial: which enumeration member to use (0 means the first with the given value) + @param value: value to search in the enumeration type + @returns success -ida_typeinf.get_full_type (function) - get_full_type(t) -> type_t +ida_typeinf.get_full_type(t: "type_t") -> "type_t" Get basic type bits + type flags (TYPE_FULL_MASK) - - @param t: (C++: type_t) -ida_typeinf.get_idainfo64_by_type (function) - get_idainfo64_by_type(out_flags, tif) -> bool - Extract information from a tinfo_t. - - @param out_flags: (C++: flags64_t *) description of type using flags64_t - @param tif: (C++: const tinfo_t &) the type to inspect +ida_typeinf.get_idainfo_by_type(tif: "tinfo_t") -> "size_t *, flags64_t *, opinfo_t *, size_t *" + Extract information from a tinfo_t. + + @param tif: the type to inspect -ida_typeinf.get_idainfo_by_type (function) - get_idainfo_by_type(tif) -> bool - Extract information from a tinfo_t. - - @param tif: (C++: const tinfo_t &) the type to inspect +ida_typeinf.get_idainfo_by_udm(*args) -> bool + Calculate IDA info from udt member + + @param udm: udt member + @param refinfo_ea: if specified will be used to adjust the refinfo_t data -ida_typeinf.get_idati (function) - get_idati() -> til_t - Pointer to the local type library - this til is private for each IDB file - Functions that accept til_t* default to `idati` when is nullptr provided. +ida_typeinf.get_idati() -> "til_t *" + Pointer to the local type library - this til is private for each IDB file Functions that accept til_t* default to `idati` when is nullptr provided. + -ida_typeinf.get_named_type (function) - get_named_type(til, name, ntf_flags) -> (int, bytes, bytes, NoneType, NoneType, int, int) +ida_typeinf.get_named_type(til: til_t, name: str, ntf_flags: int) Get a type data by its name. - @param til: the type library + @param til: Type library @param name: the type name @param ntf_flags: a combination of NTF_* constants - @return: None on failure + @return: + None on failure tuple(code, type_str, fields_str, cmt, field_cmts, sclass, value) on success -ida_typeinf.get_named_type64 (function) - get_named_type64(til, name, ntf_flags) -> (int, bytes, NoneType, NoneType, NoneType, int, int) - See get_named_type() above. - @note: If the value in the 'ti' library is 32-bit, it will be sign-extended - before being stored in the 'value' pointer. +ida_typeinf.get_named_type64(til: til_t, name: str, ntf_flags: int = 0) -> Union[Tuple[int, bytes, bytes, str, str, int, int], None] + Get a named type from a type library. - @param til: til_t const * - @param name: (C++: const char *) char const * - @param ntf_flags: (C++: int) + Please use til_t.get_named_type instead. -ida_typeinf.get_named_type_tid (function) - get_named_type_tid(name) -> tid_t - Get named local type TID +ida_typeinf.get_named_type_tid(name: str) -> "tid_t" + Get named local type TID + + @param name: type name + @returns TID or BADADDR + +ida_typeinf.get_numbered_type(til: til_t, ordinal: int) -> Union[Tuple[bytes, bytes, str, str, int], None] + Get a type from a type library, by its ordinal - @param name: (C++: const char *) type name - @return: TID or BADADDR + Please use til_t.get_numbered_type instead. -ida_typeinf.get_numbered_type (function) - get_numbered_type(til, ordinal) -> (bytes, NoneType, NoneType, NoneType, int), (bytes, bytes, NoneType, NoneType, int) - Retrieve a type by its ordinal number. - - @param til: til_t const * - @param ordinal: (C++: uint32) +ida_typeinf.get_numbered_type_name(ti: "til_t", ordinal: int) -> str + Get type name (if exists) by its ordinal. If the type is anonymous, returns "". If failed, returns nullptr + -ida_typeinf.get_numbered_type_name (function) - 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 nullptr - - @param ti: (C++: const til_t *) til_t const * - @param ordinal: (C++: uint32) +ida_typeinf.get_ordinal_count(ti: "til_t" = None) -> int + Get number of allocated ordinals. + + @param ti: type library; nullptr means the local types for the current database. + @returns 0 if ordinals have not been enabled for the til. -ida_typeinf.get_ordinal_count (function) - get_ordinal_count(ti=None) -> uint32 - Get number of allocated ordinals. - - @param ti: (C++: const til_t *) type library; nullptr means the local types for the current database. - @return: 0 if ordinals have not been enabled for the til. +ida_typeinf.get_ordinal_limit(ti: "til_t" = None) -> int + Get number of allocated ordinals + 1. If there are no allocated ordinals, return 0. To enumerate all ordinals, use: for ( uint32 i = 1; i < limit; ++i ) + + @param ti: type library; nullptr means the local types for the current database. + @returns uint32(-1) if ordinals have not been enabled for the til. For local types (idati), ordinals are always enabled. -ida_typeinf.get_ordinal_from_idb_type (function) - 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 *) char const * - @param type: (C++: const type_t *) type_t const * +ida_typeinf.get_scalar_bt(size: int) -> "type_t" -ida_typeinf.get_ordinal_limit (function) - get_ordinal_limit(ti=None) -> uint32 - Get number of allocated ordinals + 1. If there are no allocated ordinals, return - 0. To enumerate all ordinals, use: for ( uint32 i = 1; i < limit; ++i ) - - @param ti: (C++: const til_t *) type library; nullptr means the local types for the current database. - @return: uint32(-1) if ordinals have not been enabled for the til. For local - types (idati), ordinals are always enabled. +ida_typeinf.get_stock_tinfo(tif: "tinfo_t", id: "stock_type_id_t") -> bool -ida_typeinf.get_ordinal_qty (function) - get_ordinal_qty(ti) -> uint32 - - @param ti: til_t const * +ida_typeinf.get_tid_name(tid: "tid_t") -> str + Get a type name for the specified TID + + @param tid: type TID + @returns true if there is type with TID -ida_typeinf.get_scalar_bt (function) - get_scalar_bt(size) -> type_t - - @param size: int +ida_typeinf.get_tid_ordinal(tid: "tid_t") -> int + Get type ordinal number for TID + + @param tid: type/enum constant/udt member TID + @returns type ordinal number or 0 -ida_typeinf.get_stock_tinfo (function) - get_stock_tinfo(tif, id) -> bool - - @param tif: tinfo_t * - @param id: enum stock_type_id_t +ida_typeinf.get_tinfo_attr(typid: "typid_t", key: str, bv: "bytevec_t *", all_attrs: bool) -> bool -ida_typeinf.get_tid_name (function) - get_tid_name(tid) -> str - Get a type name for the specified TID - - @param tid: (C++: tid_t) type TID - @return: true if there is type with TID - @note: this function is the inverse to get_named_type_tid +ida_typeinf.get_tinfo_attrs(typid: "typid_t", tav: "type_attrs_t", include_ref_attrs: bool) -> bool -ida_typeinf.get_tid_ordinal (function) - get_tid_ordinal(tid) -> uint32 - Get type ordinal number for TID - - @param tid: (C++: tid_t) type/enum constant/udt member TID - @return: type ordinal number or 0 +ida_typeinf.get_tinfo_by_edm_name(tif: "tinfo_t", til: "til_t", mname: str) -> "ssize_t" -ida_typeinf.get_tinfo_attr (function) - get_tinfo_attr(typid, key, bv, all_attrs) -> bool - - @param typid: uint32 - @param key: qstring const & - @param bv: bytevec_t * - @param all_attrs: bool +ida_typeinf.get_tinfo_by_flags(out: "tinfo_t", flags: "flags64_t") -> bool + Get tinfo object that corresponds to data flags + + @param out: type info + @param flags: simple flags (byte, word, ..., zword) -ida_typeinf.get_tinfo_attrs (function) - get_tinfo_attrs(typid, tav, include_ref_attrs) -> bool - - @param typid: uint32 - @param tav: type_attrs_t * - @param include_ref_attrs: bool +ida_typeinf.get_tinfo_details(typid: "typid_t", bt2: "type_t", buf: "void *") -> bool -ida_typeinf.get_tinfo_by_flags (function) - get_tinfo_by_flags(out, flags) -> bool - Get tinfo object that corresponds to data flags - - @param out: (C++: tinfo_t *) type info - @param flags: (C++: flags64_t) simple flags (byte, word, ..., zword) +ida_typeinf.get_tinfo_pdata(outptr: "void *", typid: "typid_t", what: int) -> "size_t" -ida_typeinf.get_tinfo_details (function) - get_tinfo_details(typid, bt2, buf) -> bool - - @param typid: uint32 - @param bt2: type_t - @param buf: void * +ida_typeinf.get_tinfo_property(typid: "typid_t", gta_prop: int) -> "size_t" -ida_typeinf.get_tinfo_details2 (function) - get_tinfo_details2(typid, bt2, buf) -> bool - - @param typid: uint32 - @param bt2: type_t - @param buf: void * +ida_typeinf.get_tinfo_property4(typid: "typid_t", gta_prop: int, p1: "size_t", p2: "size_t", p3: "size_t", p4: "size_t") -> "size_t" -ida_typeinf.get_tinfo_pdata (function) - get_tinfo_pdata(outptr, typid, what) -> size_t - - @param outptr: void * - @param typid: uint32 - @param what: int +ida_typeinf.get_tinfo_size(p_effalign: "uint32 *", typid: "typid_t", gts_code: int) -> "size_t" -ida_typeinf.get_tinfo_property (function) - get_tinfo_property(typid, gta_prop) -> size_t - - @param typid: uint32 - @param gta_prop: int - -ida_typeinf.get_tinfo_property4 (function) - get_tinfo_property4(typid, gta_prop, p1, p2, p3, p4) -> size_t - - @param typid: uint32 - @param gta_prop: int - @param p1: size_t - @param p2: size_t - @param p3: size_t - @param p4: size_t - -ida_typeinf.get_tinfo_size (function) - get_tinfo_size(p_effalign, typid, gts_code) -> size_t - - @param p_effalign: uint32 * - @param typid: uint32 - @param gts_code: int - -ida_typeinf.get_tinfo_tid (function) - get_tinfo_tid(tif, force_tid) -> tid_t - - @param tif: tinfo_t * - @param force_tid: bool - -ida_typeinf.get_type_flags (function) - get_type_flags(t) -> type_t +ida_typeinf.get_type_flags(t: "type_t") -> "type_t" Get type flags (TYPE_FLAGS_MASK) - - @param t: (C++: type_t) -ida_typeinf.get_type_ordinal (function) - get_type_ordinal(ti, name) -> int32 +ida_typeinf.get_type_ordinal(ti: "til_t", name: str) -> int Get type ordinal by its name. - - @param ti: (C++: const til_t *) til_t const * - @param name: (C++: const char *) char const * -ida_typeinf.get_udm_by_fullname (function) - get_udm_by_fullname(udm, fullname) -> ssize_t - Get udt member by full name - - @param udm: (C++: udm_t *) member, can be NULL - @param fullname: (C++: const char *) udt member name in format <udt name>.<member name> - @return: member index into udt_type_data_t or -1 +ida_typeinf.get_udm_by_fullname(udm: "udm_t", fullname: str) -> "ssize_t" + Get udt member by full name + + @param udm: member, can be NULL + @param fullname: udt member name in format <udt name>.<member name> + @returns member index into udt_type_data_t or -1 -ida_typeinf.get_udm_tid (function) - get_udm_tid(udm, udt_name) -> tid_t - - @param udm: udm_t const * - @param udt_name: char const * +ida_typeinf.get_vftable_ea(ordinal: int) -> ida_idaapi.ea_t + Get address of a virtual function table. + + @param ordinal: ordinal number of a vftable type. + @returns address of the corresponding virtual function table in the current database. -ida_typeinf.get_vftable_ea (function) - get_vftable_ea(ordinal) -> ea_t - Get address of a virtual function table. - - @param ordinal: (C++: uint32) ordinal number of a vftable type. - @return: address of the corresponding virtual function table in the current - database. +ida_typeinf.get_vftable_ordinal(vftable_ea: ida_idaapi.ea_t) -> int + Get ordinal number of the virtual function table. + + @param vftable_ea: address of a virtual function table. + @returns ordinal number of the corresponding vftable type. 0 - failure. -ida_typeinf.get_vftable_ordinal (function) - get_vftable_ordinal(vftable_ea) -> uint32 - Get ordinal number of the virtual function table. - - @param vftable_ea: (C++: ea_t) address of a virtual function table. - @return: ordinal number of the corresponding vftable type. 0 - failure. - -ida_typeinf.guess_func_cc (function) - guess_func_cc(fti, npurged, cc_flags) -> cm_t +ida_typeinf.guess_func_cc(fti: "func_type_data_t", npurged: int, cc_flags: int) -> "cm_t" Use func_type_data_t::guess_cc() - - @param fti: (C++: const func_type_data_t &) func_type_data_t const & - @param npurged: (C++: int) - @param cc_flags: (C++: int) -ida_typeinf.guess_tinfo (function) - guess_tinfo(out, id) -> int - Generate a type information about the id from the disassembly. id can be a - structure/union/enum id or an address. - - @param out: (C++: tinfo_t *) - @param id: (C++: tid_t) - @return: one of Guess tinfo codes +ida_typeinf.guess_tinfo(out: "tinfo_t", id: "tid_t") -> int + Generate a type information about the id from the disassembly. id can be a structure/union/enum id or an address. + + @returns one of Guess tinfo codes -ida_typeinf.ida_lowertype_helper_t (class) - Proxy of C++ ida_lowertype_helper_t class. +ida_typeinf.ida_lowertype_helper_t -ida_typeinf.ida_lowertype_helper_t.__init__ (method) - __init__(self, _tif, _ea, _pb) -> ida_lowertype_helper_t - - @param _tif: tinfo_t const & - @param _ea: ea_t - @param _pb: int +ida_typeinf.ida_lowertype_helper_t.__init__(self, _tif: "tinfo_t", _ea: ida_idaapi.ea_t, _pb: int) -ida_typeinf.ida_lowertype_helper_t.func_has_stkframe_hole (method) - func_has_stkframe_hole(self, candidate, candidate_data) -> bool - - @param candidate: tinfo_t const & - @param candidate_data: func_type_data_t const & +ida_typeinf.ida_lowertype_helper_t.func_has_stkframe_hole(self, candidate: "tinfo_t", candidate_data: "func_type_data_t") -> bool -ida_typeinf.ida_lowertype_helper_t.get_func_purged_bytes (method) - get_func_purged_bytes(self, candidate, arg3) -> int - - @param candidate: tinfo_t const & - @param arg3: func_type_data_t const & +ida_typeinf.ida_lowertype_helper_t.get_func_purged_bytes(self, candidate: "tinfo_t", arg3: "func_type_data_t") -> int -ida_typeinf.idc_get_local_type (function) - idc_get_local_type(ordinal, flags) -> str - - @param ordinal: int - @param flags: int +ida_typeinf.idc_get_local_type(ordinal: int, flags: int) -> str -ida_typeinf.idc_get_local_type_name (function) - idc_get_local_type_name(ordinal) -> str - - @param ordinal: int +ida_typeinf.idc_get_local_type_name(ordinal: int) -> str -ida_typeinf.idc_get_local_type_raw (function) - idc_get_local_type_raw(ordinal) -> (bytes, bytes) +ida_typeinf.idc_get_local_type_raw(ordinal) -> Tuple[bytes, bytes] - @param ordinal: int -ida_typeinf.idc_get_type (function) - idc_get_type(ea) -> str - - @param ea: ea_t +ida_typeinf.idc_get_type(ea: ida_idaapi.ea_t) -> str -ida_typeinf.idc_get_type_raw (function) - idc_get_type_raw(ea) -> PyObject * - - @param ea: ea_t +ida_typeinf.idc_get_type_raw(ea: ida_idaapi.ea_t) -> "PyObject *" -ida_typeinf.idc_guess_type (function) - idc_guess_type(ea) -> str - - @param ea: ea_t +ida_typeinf.idc_guess_type(ea: ida_idaapi.ea_t) -> str -ida_typeinf.idc_parse_decl (function) - idc_parse_decl(ti, decl, flags) -> (str, bytes, bytes) or None +ida_typeinf.idc_parse_decl(til: til_t, decl: str, flags: int) -> Tuple[str, bytes, bytes] - @param ti: til_t * - @param decl: char const * - @param flags: int -ida_typeinf.idc_parse_types (function) - idc_parse_types(input, flags) -> int - - @param input: char const * - @param flags: int +ida_typeinf.idc_parse_types(input: str, flags: int) -> int -ida_typeinf.idc_print_type (function) - idc_print_type(type, fields, name, flags) -> str +ida_typeinf.idc_print_type(type: bytes, fields: bytes, name: str, flags: int) -> str - @param type: type_t const * - @param fields: p_list const * - @param name: char const * - @param flags: int -ida_typeinf.idc_set_local_type (function) - idc_set_local_type(ordinal, dcl, flags) -> int - - @param ordinal: int - @param dcl: char const * - @param flags: int +ida_typeinf.idc_set_local_type(ordinal: int, dcl: str, flags: int) -> int -ida_typeinf.import_type (function) - import_type(til, idx, name, flags=0) -> tid_t - Copy a named type from til to idb. - - @param til: (C++: const til_t *) type library - @param idx: (C++: int) the position of the new type in the list of types (structures or - enums). -1 means at the end of the list - @param name: (C++: const char *) the type name - @param flags: (C++: int) combination of Import type flags - @return: BADNODE on error +ida_typeinf.inf_big_arg_align(*args) -> bool -ida_typeinf.inf_big_arg_align (function) - inf_big_arg_align() -> bool - inf_big_arg_align(cc) -> bool - - @param cc: cm_t +ida_typeinf.inf_huge_arg_align(*args) -> bool -ida_typeinf.inf_huge_arg_align (function) - inf_huge_arg_align() -> bool - inf_huge_arg_align(cc) -> bool - - @param cc: cm_t +ida_typeinf.inf_pack_stkargs(*args) -> bool -ida_typeinf.inf_pack_stkargs (function) - inf_pack_stkargs() -> bool - inf_pack_stkargs(cc) -> bool - - @param cc: cm_t - -ida_typeinf.is_autosync (function) - is_autosync(name, type) -> bool - Is the specified idb type automatically synchronized? - - @param name: (C++: const char *) char const * - @param type: type_t const * - - is_autosync(name, tif) -> bool - - @param name: char const * - @param tif: tinfo_t const & - -ida_typeinf.is_code_far (function) - is_code_far(cm) -> bool +ida_typeinf.is_code_far(cm: "cm_t") -> bool Does the given model specify far code?. - - @param cm: (C++: cm_t) -ida_typeinf.is_comp_unsure (function) - is_comp_unsure(comp) -> comp_t +ida_typeinf.is_comp_unsure(comp: "comp_t") -> "comp_t" See COMP_UNSURE. - - @param comp: (C++: comp_t) -ida_typeinf.is_data_far (function) - is_data_far(cm) -> bool +ida_typeinf.is_data_far(cm: "cm_t") -> bool Does the given model specify far data?. - - @param cm: (C++: cm_t) -ida_typeinf.is_gcc (function) - is_gcc() -> bool +ida_typeinf.is_gcc() -> bool Is the target compiler COMP_GNU? -ida_typeinf.is_gcc32 (function) - is_gcc32() -> bool +ida_typeinf.is_gcc32() -> bool Is the target compiler 32 bit gcc? -ida_typeinf.is_gcc64 (function) - is_gcc64() -> bool +ida_typeinf.is_gcc64() -> bool Is the target compiler 64 bit gcc? -ida_typeinf.is_golang_cc (function) - is_golang_cc(cc) -> bool +ida_typeinf.is_golang_cc(cc: "cm_t") -> bool GO language calling convention (return value in stack)? - - @param cc: (C++: cm_t) -ida_typeinf.is_ordinal_name (function) - 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 *) char const * - @param ord: (C++: uint32 *) +ida_typeinf.is_one_bit_mask(mask: int) -> bool + Is bitmask one bit? -ida_typeinf.is_purging_cc (function) - is_purging_cc(cm) -> bool - Does the calling convention clean the stack arguments upon return?. - @note: this function is valid only for x86 code - - @param cm: (C++: cm_t) +ida_typeinf.is_ordinal_name(name: str, ord: "uint32 *" = None) -> bool + Check if the name is an ordinal name. Ordinal names have the following format: '#' + set_de(ord) + -ida_typeinf.is_restype_enum (function) - is_restype_enum(til, type) -> bool - - @param til: til_t const * - @param type: type_t const * +ida_typeinf.is_purging_cc(cm: "cm_t") -> bool + Does the calling convention clean the stack arguments upon return?. + -ida_typeinf.is_restype_struct (function) - is_restype_struct(til, type) -> bool - - @param til: til_t const * - @param type: type_t const * +ida_typeinf.is_restype_enum(til: "til_t", type: "type_t const *") -> bool -ida_typeinf.is_restype_struni (function) - is_restype_struni(til, type) -> bool - - @param til: til_t const * - @param type: type_t const * +ida_typeinf.is_restype_struct(til: "til_t", type: "type_t const *") -> bool -ida_typeinf.is_restype_void (function) - is_restype_void(til, type) -> bool - - @param til: til_t const * - @param type: type_t const * +ida_typeinf.is_restype_struni(til: "til_t", type: "type_t const *") -> bool -ida_typeinf.is_sdacl_byte (function) - 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_restype_void(til: "til_t", type: "type_t const *") -> bool -ida_typeinf.is_swift_cc (function) - is_swift_cc(cc) -> bool +ida_typeinf.is_sdacl_byte(t: "type_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) + + +ida_typeinf.is_swift_cc(cc: "cm_t") -> bool Swift calling convention (arguments and return values in registers)? - - @param cc: (C++: cm_t) -ida_typeinf.is_tah_byte (function) - 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_tah_byte(t: "type_t") -> bool + The TAH byte (type attribute header byte) denotes the start of type attributes. (see "tah-typeattrs" in the type bit definitions) + -ida_typeinf.is_type_arithmetic (function) - is_type_arithmetic(t) -> bool +ida_typeinf.is_type_arithmetic(t: "type_t") -> bool Is the type an arithmetic type? (floating or integral) - - @param t: (C++: type_t) -ida_typeinf.is_type_array (function) - is_type_array(t) -> bool +ida_typeinf.is_type_array(t: "type_t") -> bool See BT_ARRAY. - - @param t: (C++: type_t) -ida_typeinf.is_type_bitfld (function) - is_type_bitfld(t) -> bool +ida_typeinf.is_type_bitfld(t: "type_t") -> bool See BT_BITFIELD. - - @param t: (C++: type_t) -ida_typeinf.is_type_bool (function) - is_type_bool(t) -> bool +ida_typeinf.is_type_bool(t: "type_t") -> bool See BTF_BOOL. - - @param t: (C++: type_t) -ida_typeinf.is_type_char (function) - 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_char(t: "type_t") -> bool + Does the type specify a char value? (signed or unsigned, see Basic type: integer) -ida_typeinf.is_type_choosable (function) - is_type_choosable(ti, ordinal) -> bool - Check if a struct/union type is choosable - - @param ti: (C++: const til_t *) type library - @param ordinal: (C++: uint32) ordinal number of a UDT type +ida_typeinf.is_type_choosable(ti: "til_t", ordinal: int) -> bool + Check if a struct/union type is choosable + + @param ti: type library + @param ordinal: ordinal number of a UDT type -ida_typeinf.is_type_complex (function) - is_type_complex(t) -> bool +ida_typeinf.is_type_complex(t: "type_t") -> bool See BT_COMPLEX. - - @param t: (C++: type_t) -ida_typeinf.is_type_const (function) - is_type_const(t) -> bool +ida_typeinf.is_type_const(t: "type_t") -> bool See BTM_CONST. - - @param t: (C++: type_t) -ida_typeinf.is_type_double (function) - is_type_double(t) -> bool +ida_typeinf.is_type_double(t: "type_t") -> bool See BTF_DOUBLE. - - @param t: (C++: type_t) -ida_typeinf.is_type_enum (function) - is_type_enum(t) -> bool +ida_typeinf.is_type_enum(t: "type_t") -> bool See BTF_ENUM. - - @param t: (C++: type_t) -ida_typeinf.is_type_ext_arithmetic (function) - is_type_ext_arithmetic(t) -> bool +ida_typeinf.is_type_ext_arithmetic(t: "type_t") -> bool Is the type an extended arithmetic type? (arithmetic or enum) - - @param t: (C++: type_t) -ida_typeinf.is_type_ext_integral (function) - is_type_ext_integral(t) -> bool +ida_typeinf.is_type_ext_integral(t: "type_t") -> bool Is the type an extended integral type? (integral or enum) - - @param t: (C++: type_t) -ida_typeinf.is_type_float (function) - is_type_float(t) -> bool +ida_typeinf.is_type_float(t: "type_t") -> bool See BTF_FLOAT. - - @param t: (C++: type_t) -ida_typeinf.is_type_floating (function) - is_type_floating(t) -> bool +ida_typeinf.is_type_floating(t: "type_t") -> bool Is the type a floating point type? - - @param t: (C++: type_t) -ida_typeinf.is_type_func (function) - is_type_func(t) -> bool +ida_typeinf.is_type_func(t: "type_t") -> bool See BT_FUNC. - - @param t: (C++: type_t) -ida_typeinf.is_type_int (function) - is_type_int(bt) -> bool +ida_typeinf.is_type_int(bt: "type_t") -> 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 (function) - 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_int128(t: "type_t") -> bool + Does the type specify a 128-bit value? (signed or unsigned, see Basic type: integer) -ida_typeinf.is_type_int16 (function) - 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_int16(t: "type_t") -> bool + Does the type specify a 16-bit value? (signed or unsigned, see Basic type: integer) -ida_typeinf.is_type_int32 (function) - 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_int32(t: "type_t") -> bool + Does the type specify a 32-bit value? (signed or unsigned, see Basic type: integer) -ida_typeinf.is_type_int64 (function) - 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_int64(t: "type_t") -> bool + Does the type specify a 64-bit value? (signed or unsigned, see Basic type: integer) -ida_typeinf.is_type_integral (function) - is_type_integral(t) -> bool +ida_typeinf.is_type_integral(t: "type_t") -> bool Is the type an integral type (char/short/int/long/bool)? - - @param t: (C++: type_t) -ida_typeinf.is_type_ldouble (function) - is_type_ldouble(t) -> bool +ida_typeinf.is_type_ldouble(t: "type_t") -> bool See BTF_LDOUBLE. - - @param t: (C++: type_t) -ida_typeinf.is_type_paf (function) - is_type_paf(t) -> bool +ida_typeinf.is_type_paf(t: "type_t") -> bool Is the type a pointer, array, or function type? - - @param t: (C++: type_t) -ida_typeinf.is_type_partial (function) - 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_partial(t: "type_t") -> bool + Identifies an unknown or void type with a known size (see Basic type: unknown & void) -ida_typeinf.is_type_ptr (function) - is_type_ptr(t) -> bool +ida_typeinf.is_type_ptr(t: "type_t") -> bool See BT_PTR. - - @param t: (C++: type_t) -ida_typeinf.is_type_ptr_or_array (function) - is_type_ptr_or_array(t) -> bool +ida_typeinf.is_type_ptr_or_array(t: "type_t") -> bool Is the type a pointer or array type? - - @param t: (C++: type_t) -ida_typeinf.is_type_struct (function) - is_type_struct(t) -> bool +ida_typeinf.is_type_struct(t: "type_t") -> bool See BTF_STRUCT. - - @param t: (C++: type_t) -ida_typeinf.is_type_struni (function) - is_type_struni(t) -> bool +ida_typeinf.is_type_struni(t: "type_t") -> bool Is the type a struct or union? - - @param t: (C++: type_t) -ida_typeinf.is_type_sue (function) - is_type_sue(t) -> bool +ida_typeinf.is_type_sue(t: "type_t") -> bool Is the type a struct/union/enum? - - @param t: (C++: type_t) -ida_typeinf.is_type_tbyte (function) - is_type_tbyte(t) -> bool +ida_typeinf.is_type_tbyte(t: "type_t") -> bool See BTF_FLOAT. - - @param t: (C++: type_t) -ida_typeinf.is_type_typedef (function) - is_type_typedef(t) -> bool +ida_typeinf.is_type_typedef(t: "type_t") -> bool See BTF_TYPEDEF. - - @param t: (C++: type_t) -ida_typeinf.is_type_uchar (function) - is_type_uchar(t) -> bool +ida_typeinf.is_type_uchar(t: "type_t") -> bool See BTF_UCHAR. - - @param t: (C++: type_t) -ida_typeinf.is_type_uint (function) - is_type_uint(t) -> bool +ida_typeinf.is_type_uint(t: "type_t") -> bool See BTF_UINT. - - @param t: (C++: type_t) -ida_typeinf.is_type_uint128 (function) - is_type_uint128(t) -> bool +ida_typeinf.is_type_uint128(t: "type_t") -> bool See BTF_UINT128. - - @param t: (C++: type_t) -ida_typeinf.is_type_uint16 (function) - is_type_uint16(t) -> bool +ida_typeinf.is_type_uint16(t: "type_t") -> bool See BTF_UINT16. - - @param t: (C++: type_t) -ida_typeinf.is_type_uint32 (function) - is_type_uint32(t) -> bool +ida_typeinf.is_type_uint32(t: "type_t") -> bool See BTF_UINT32. - - @param t: (C++: type_t) -ida_typeinf.is_type_uint64 (function) - is_type_uint64(t) -> bool +ida_typeinf.is_type_uint64(t: "type_t") -> bool See BTF_UINT64. - - @param t: (C++: type_t) -ida_typeinf.is_type_union (function) - is_type_union(t) -> bool +ida_typeinf.is_type_union(t: "type_t") -> bool See BTF_UNION. - - @param t: (C++: type_t) -ida_typeinf.is_type_unknown (function) - is_type_unknown(t) -> bool +ida_typeinf.is_type_unknown(t: "type_t") -> bool See BT_UNKNOWN. - - @param t: (C++: type_t) -ida_typeinf.is_type_void (function) - is_type_void(t) -> bool +ida_typeinf.is_type_void(t: "type_t") -> bool See BTF_VOID. - - @param t: (C++: type_t) -ida_typeinf.is_type_volatile (function) - is_type_volatile(t) -> bool +ida_typeinf.is_type_volatile(t: "type_t") -> bool See BTM_VOLATILE. - - @param t: (C++: type_t) -ida_typeinf.is_typeid_last (function) - 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_typeid_last(t: "type_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) + -ida_typeinf.is_user_cc (function) - is_user_cc(cm) -> bool +ida_typeinf.is_user_cc(cm: "cm_t") -> bool Does the calling convention specify argument locations explicitly? - - @param cm: (C++: cm_t) -ida_typeinf.is_vararg_cc (function) - is_vararg_cc(cm) -> bool +ida_typeinf.is_vararg_cc(cm: "cm_t") -> bool Does the calling convention use ellipsis? - - @param cm: (C++: cm_t) -ida_typeinf.lexcompare_tinfo (function) - lexcompare_tinfo(t1, t2, arg3) -> int - - @param t1: uint32 - @param t2: uint32 - @param arg3: int +ida_typeinf.lexcompare_tinfo(t1: "typid_t", t2: "typid_t", arg3: int) -> int -ida_typeinf.load_til (function) - load_til(name, tildir=None) -> til_t - Load til from a file without adding it to the database list (see also add_til). - Failure to load base tils are reported into 'errbuf'. They do not prevent - loading of the main til. - - @param name: (C++: const char *) filename of the til. If it's an absolute path, tildir is ignored. +ida_typeinf.load_til(name: str, tildir: str = None) -> str + Load til from a file without adding it to the database list (see also add_til). 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 - @param tildir: (C++: const char *) directory where to load the til from. nullptr means default til - subdirectories. - @return: pointer to resulting til, nullptr if failed and error message is in - errbuf + @param tildir: directory where to load the til from. nullptr means default til subdirectories. + @returns pointer to resulting til, nullptr if failed and error message is in errbuf -ida_typeinf.load_til_header (function) - load_til_header(tildir, name) -> til_t +ida_typeinf.load_til_header(tildir: str, name: str) -> str Get human-readable til description. - - @param tildir: (C++: const char *) char const * - @param name: (C++: const char *) char const * -ida_typeinf.lower_type (function) - 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, etc - We introduce explicit arguments (i.e. 'this' pointer) and call the result +ida_typeinf.lower_type(til: "til_t", tif: "tinfo_t", name: str = None, _helper: "lowertype_helper_t" = 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, etc + We 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 children - types walked through by recursion. + 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 children + types walked through by recursion. + @retval 1: removed FTI_HIGH, @retval 2: made substantial changes @retval -1: failure - - @param til: (C++: til_t *) - @param tif: (C++: tinfo_t *) - @param name: (C++: const char *) char const * - @param _helper: (C++: lowertype_helper_t *) -ida_typeinf.lowertype_helper_t (class) - Proxy of C++ lowertype_helper_t class. +ida_typeinf.lowertype_helper_t -ida_typeinf.lowertype_helper_t.__init__ (method) +ida_typeinf.lowertype_helper_t.__init__(self, *args, **kwargs) -ida_typeinf.lowertype_helper_t.func_has_stkframe_hole (method) - func_has_stkframe_hole(self, candidate, candidate_data) -> bool - - @param candidate: tinfo_t const & - @param candidate_data: func_type_data_t const & +ida_typeinf.lowertype_helper_t.func_has_stkframe_hole(self, candidate: "tinfo_t", candidate_data: "func_type_data_t") -> bool -ida_typeinf.lowertype_helper_t.get_func_purged_bytes (method) - get_func_purged_bytes(self, candidate, candidate_data) -> int - - @param candidate: tinfo_t const & - @param candidate_data: func_type_data_t const & +ida_typeinf.lowertype_helper_t.get_func_purged_bytes(self, candidate: "tinfo_t", candidate_data: "func_type_data_t") -> int -ida_typeinf.new_til (function) - new_til(name, desc) -> til_t +ida_typeinf.new_til(name: str, desc: str) -> "til_t *" Initialize a til. - - @param name: (C++: const char *) char const * - @param desc: (C++: const char *) char const * -ida_typeinf.next_named_type (function) - next_named_type(ti, name, ntf_flags) -> char const * - Enumerate types. - - @param ti: (C++: const til_t *) type library. nullptr means the local type library for the current - database. - @param name: (C++: const char *) the current name. the name that follows this one will be returned. - @param ntf_flags: (C++: int) combination of Flags for named types - @return: Type or symbol names, depending of ntf_flags. Returns mangled names. - Never returns anonymous types. To include them, enumerate types by - ordinals. +ida_typeinf.next_named_type(ti: "til_t", name: str, ntf_flags: int) -> str + Enumerate types. + + @param ti: type library. nullptr means the local type library for the current database. + @param name: the current name. the name that follows this one will be returned. + @param ntf_flags: combination of Flags for named types + @returns Type or symbol names, depending of ntf_flags. Returns mangled names. Never returns anonymous types. To include them, enumerate types by ordinals. -ida_typeinf.no_sign (variable) +ida_typeinf.no_sign no sign, or unknown -ida_typeinf.optimize_argloc (function) - optimize_argloc(vloc, size, gaps) -> bool - Verify and optimize scattered argloc into simple form. All new arglocs must be - processed by this function. +ida_typeinf.optimize_argloc(vloc: "argloc_t", size: int, gaps: "rangeset_t") -> bool + Verify and optimize scattered argloc into simple form. All new arglocs must be processed by this function. + @retval true: success @retval false: the input argloc was illegal - - @param vloc: (C++: argloc_t *) - @param size: (C++: int) - @param gaps: (C++: const rangeset_t *) rangeset_t const * -ida_typeinf.pack_idcobj_to_bv (function) - 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 *) idc_value_t const * - @param tif: (C++: const tinfo_t &) tinfo_t const & - @param bytes: (C++: relobj_t *) - @param objoff: (C++: void *) - @param pio_flags: (C++: int) +ida_typeinf.pack_idcobj_to_bv(obj: "idc_value_t const *", tif: "tinfo_t", bytes: "relobj_t", objoff: "void *", pio_flags: int = 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 + -ida_typeinf.pack_idcobj_to_idb (function) - pack_idcobj_to_idb(obj, tif, ea, pio_flags=0) -> error_t +ida_typeinf.pack_idcobj_to_idb(obj: "idc_value_t const *", tif: "tinfo_t", ea: ida_idaapi.ea_t, pio_flags: int = 0) -> "error_t" Write a typed idc object to the database. - - @param obj: (C++: const idc_value_t *) idc_value_t const * - @param tif: (C++: const tinfo_t &) tinfo_t const & - @param ea: (C++: ea_t) - @param pio_flags: (C++: int) -ida_typeinf.pack_object_to_bv (function) - pack_object_to_bv(py_obj, ti, type, fields, base_ea, pio_flags=0) -> PyObject * +ida_typeinf.pack_object_to_bv(obj, til: til_t, type: bytes, fields: bytes, base_ea: ida_idaapi.ea_t, pio_flags: int = 0) Packs a typed object to a string - @param py_obj: PyObject * - @param ti: Type info. 'None' can be passed. - @param type: type_t const * + @param til: Type library. 'None' can be passed. + @param type: 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 + @return: + tuple(0, err_code) on failure tuple(1, packed_buf) on success -ida_typeinf.pack_object_to_idb (function) - pack_object_to_idb(py_obj, ti, type, fields, ea, pio_flags=0) -> PyObject * +ida_typeinf.pack_object_to_idb(obj, til: til_t, type: bytes, fields: bytes, ea: ida_idaapi.ea_t, pio_flags: int = 0) 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 py_obj: PyObject * - @param ti: Type info. 'None' can be passed. - @param type: type_t const * + @param til: Type library. 'None' can be passed. + @param type: 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 (function) - parse_decl(out_tif, til, decl, pt_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. - @note: name & tif may be empty after the call! - - @param out_tif: (C++: tinfo_t *) type info - @param til: (C++: til_t *) type library to use. may be nullptr - @param decl: (C++: const char *) C declaration to parse - @param pt_flags: (C++: int) combination of Type parsing flags bits +ida_typeinf.parse_decl(out_tif: "tinfo_t", til: "til_t", decl: str, pt_flags: int) -> 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. + + @param out_tif: type info + @param til: type library to use. may be nullptr + @param decl: C declaration to parse + @param pt_flags: combination of Type parsing flags bits @retval true: ok @retval false: declaration is bad, the error message is displayed if !PT_SIL -ida_typeinf.parse_decls (function) - 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: (C++: til_t *) type library to store the result - @param input: (C++: const char *) input string or file name (see hti_flags) - @param printer: (C++: printer_t *) function to output error messages (use msg or nullptr or your - own callback) - @param hti_flags: (C++: int) combination of Type formatting flags - @return: number of errors, 0 means ok. +ida_typeinf.parse_decls(til: "til_t", input: str, printer: "printer_t *", hti_flags: int) -> 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 + @param input: input string or file name (see hti_flags) + @param printer: function to output error messages (use msg or nullptr or your own callback) + @param hti_flags: combination of Type formatting flags + @returns number of errors, 0 means ok. -ida_typeinf.predicate_t (class) - Proxy of C++ predicate_t class. +ida_typeinf.predicate_t -ida_typeinf.predicate_t.__disown__ (method) +ida_typeinf.predicate_t.__disown__(self) -ida_typeinf.predicate_t.__init__ (method) - __init__(self) -> predicate_t - - @param self: PyObject * +ida_typeinf.predicate_t.__init__(self) -ida_typeinf.predicate_t.should_display (method) - should_display(self, til, name, type, fields) -> bool - - @param til: til_t const * - @param name: char const * - @param type: type_t const * - @param fields: p_list const * +ida_typeinf.predicate_t.should_display(self, til: "til_t", name: str, type: "type_t const *", fields: "p_list const *") -> bool -ida_typeinf.print_argloc (function) - print_argloc(vloc, size=0, vflags=0) -> str +ida_typeinf.print_argloc(vloc: "argloc_t", size: int = 0, vflags: int = 0) -> "size_t" Convert an argloc to human readable form. - - @param vloc: (C++: const argloc_t &) argloc_t const & - @param size: (C++: int) - @param vflags: (C++: int) -ida_typeinf.print_decls (function) - print_decls(printer, til, py_ordinals, flags) -> int +ida_typeinf.print_decls(printer: text_sink_t, til: til_t, ordinals: List[int], flags: int) -> int Print types (and possibly their dependencies) in a format suitable for using in a header file. This is the reverse parse_decls(). - @param printer: (C++: text_sink_t &) a handler for printing text - @param til: (C++: til_t *) the type library holding the ordinals - @param py_ordinals: ordinals of types to export. nullptr means: all ordinals in til - @param pdf_flags: (C++: uint32) flags for the algorithm. A combination of PDF_ constants - @retval >0: the number of types exported - @retval 0: an error occurred - @retval <0: the negated number of types exported. There were minor errors and + @param printer a handler for printing text + @param til the type library holding the ordinals + @param ordinals a list of ordinals corresponding to the types to print + @param flags a combination of PDF_ constants + @return + >0: the number of types exported + 0: an error occurred + <0: the negated number of types exported. There were minor errors and the resulting output might not be compilable. -ida_typeinf.print_tinfo (function) - print_tinfo(prefix, indent, cmtindent, flags, tif, name, cmt) -> str - - @param prefix: char const * - @param indent: int - @param cmtindent: int - @param flags: int - @param tif: tinfo_t const * - @param name: char const * - @param cmt: char const * +ida_typeinf.print_tinfo(prefix: str, indent: int, cmtindent: int, flags: int, tif: "tinfo_t", name: str, cmt: str) -> str -ida_typeinf.print_type (function) - print_type(ea, prtype_flags) -> str - Get type declaration for the specified address. - - @param ea: (C++: ea_t) address - @param prtype_flags: (C++: int) combination of Type printing flags - @return: success +ida_typeinf.print_type(ea: ida_idaapi.ea_t, prtype_flags: int) -> str + Get type declaration for the specified address. + + @param ea: address + @param prtype_flags: combination of Type printing flags + @returns success -ida_typeinf.ptr_type_data_t (class) - Proxy of C++ ptr_type_data_t class. +ida_typeinf.ptr_type_data_t -ida_typeinf.ptr_type_data_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: ptr_type_data_t const & +ida_typeinf.ptr_type_data_t.__eq__(self, r: "ptr_type_data_t") -> bool -ida_typeinf.ptr_type_data_t.__init__ (method) - __init__(self, c=tinfo_t(), bps=0, p=tinfo_t(), d=0) -> ptr_type_data_t - - @param c: tinfo_t - @param bps: uchar - @param p: tinfo_t - @param d: int32 +ida_typeinf.ptr_type_data_t.__init__(self, *args) -ida_typeinf.ptr_type_data_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: ptr_type_data_t const & +ida_typeinf.ptr_type_data_t.__ne__(self, r: "ptr_type_data_t") -> bool -ida_typeinf.ptr_type_data_t.closure (variable) +ida_typeinf.ptr_type_data_t.closure cannot have both closure and based_ptr_size -ida_typeinf.ptr_type_data_t.delta (variable) +ida_typeinf.ptr_type_data_t.delta Offset from the beginning of the parent struct. -ida_typeinf.ptr_type_data_t.is_code_ptr (method) - is_code_ptr(self) -> bool +ida_typeinf.ptr_type_data_t.is_code_ptr(self) -> bool Are we pointing to code? -ida_typeinf.ptr_type_data_t.is_shifted (method) - is_shifted(self) -> bool +ida_typeinf.ptr_type_data_t.is_shifted(self) -> bool -ida_typeinf.ptr_type_data_t.obj_type (variable) +ida_typeinf.ptr_type_data_t.obj_type pointed object type -ida_typeinf.ptr_type_data_t.parent (variable) +ida_typeinf.ptr_type_data_t.parent Parent struct. -ida_typeinf.ptr_type_data_t.swap (method) - swap(self, r) +ida_typeinf.ptr_type_data_t.swap(self, r: "ptr_type_data_t") -> None Set this = r and r = this. - - @param r: (C++: ptr_type_data_t &) -ida_typeinf.ptr_type_data_t.taptr_bits (variable) +ida_typeinf.ptr_type_data_t.taptr_bits TAH bits. -ida_typeinf.read_tinfo_bitfield_value (function) - read_tinfo_bitfield_value(typid, v, bitoff) -> uint64 - - @param typid: uint32 - @param v: uint64 - @param bitoff: int +ida_typeinf.read_tinfo_bitfield_value(typid: "typid_t", v: "uint64", bitoff: int) -> "uint64" -ida_typeinf.reginfovec_t (class) - Proxy of C++ qvector< reg_info_t > class. +ida_typeinf.reginfovec_t -ida_typeinf.reginfovec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< reg_info_t > const & +ida_typeinf.reginfovec_t.__eq__(self, r: "reginfovec_t") -> bool -ida_typeinf.reginfovec_t.__getitem__ (method) - __getitem__(self, i) -> reg_info_t - - @param i: size_t +ida_typeinf.reginfovec_t.__getitem__(self, i: "size_t") -> "reg_info_t const &" -ida_typeinf.reginfovec_t.__init__ (method) - __init__(self) -> reginfovec_t - __init__(self, x) -> reginfovec_t - - @param x: qvector< reg_info_t > const & +ida_typeinf.reginfovec_t.__init__(self, *args) -ida_typeinf.reginfovec_t.__len__ (method) - __len__(self) -> size_t +ida_typeinf.reginfovec_t.__len__(self) -> "size_t" -ida_typeinf.reginfovec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< reg_info_t > const & +ida_typeinf.reginfovec_t.__ne__(self, r: "reginfovec_t") -> bool -ida_typeinf.reginfovec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: reg_info_t const & +ida_typeinf.reginfovec_t.__setitem__(self, i: "size_t", v: "reg_info_t") -> None -ida_typeinf.reginfovec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: reg_info_t const & +ida_typeinf.reginfovec_t._del(self, x: "reg_info_t") -> bool -ida_typeinf.reginfovec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: reg_info_t const & +ida_typeinf.reginfovec_t.add_unique(self, x: "reg_info_t") -> bool -ida_typeinf.reginfovec_t.at (method) - at(self, _idx) -> reg_info_t - - @param _idx: size_t +ida_typeinf.reginfovec_t.append(self, x: "reg_info_t") -> None -ida_typeinf.reginfovec_t.begin (method) - begin(self) -> reg_info_t +ida_typeinf.reginfovec_t.at(self, _idx: "size_t") -> "reg_info_t const &" -ida_typeinf.reginfovec_t.capacity (method) - capacity(self) -> size_t +ida_typeinf.reginfovec_t.begin(self, *args) -> "qvector< reg_info_t >::const_iterator" -ida_typeinf.reginfovec_t.clear (method) - clear(self) +ida_typeinf.reginfovec_t.capacity(self) -> "size_t" -ida_typeinf.reginfovec_t.empty (method) - empty(self) -> bool +ida_typeinf.reginfovec_t.clear(self) -> None -ida_typeinf.reginfovec_t.end (method) - end(self) -> reg_info_t +ida_typeinf.reginfovec_t.empty(self) -> bool -ida_typeinf.reginfovec_t.erase (method) - erase(self, it) -> reg_info_t - - @param it: qvector< reg_info_t >::iterator - - erase(self, first, last) -> reg_info_t - - @param first: qvector< reg_info_t >::iterator - @param last: qvector< reg_info_t >::iterator +ida_typeinf.reginfovec_t.end(self, *args) -> "qvector< reg_info_t >::const_iterator" -ida_typeinf.reginfovec_t.extract (method) - extract(self) -> reg_info_t +ida_typeinf.reginfovec_t.erase(self, *args) -> "qvector< reg_info_t >::iterator" -ida_typeinf.reginfovec_t.find (method) - find(self, x) -> reg_info_t - - @param x: reg_info_t const & +ida_typeinf.reginfovec_t.extend(self, x: "reginfovec_t") -> None -ida_typeinf.reginfovec_t.grow (method) - grow(self, x=reg_info_t()) - - @param x: reg_info_t const & +ida_typeinf.reginfovec_t.extract(self) -> "reg_info_t *" -ida_typeinf.reginfovec_t.has (method) - has(self, x) -> bool - - @param x: reg_info_t const & +ida_typeinf.reginfovec_t.find(self, *args) -> "qvector< reg_info_t >::const_iterator" -ida_typeinf.reginfovec_t.inject (method) - inject(self, s, len) - - @param s: reg_info_t * - @param len: size_t +ida_typeinf.reginfovec_t.grow(self, *args) -> None -ida_typeinf.reginfovec_t.insert (method) - insert(self, it, x) -> reg_info_t - - @param it: qvector< reg_info_t >::iterator - @param x: reg_info_t const & +ida_typeinf.reginfovec_t.has(self, x: "reg_info_t") -> bool -ida_typeinf.reginfovec_t.pop_back (method) - pop_back(self) +ida_typeinf.reginfovec_t.inject(self, s: "reg_info_t", len: "size_t") -> None -ida_typeinf.reginfovec_t.push_back (method) - push_back(self, x) - - @param x: reg_info_t const & - - push_back(self) -> reg_info_t +ida_typeinf.reginfovec_t.insert(self, it: "reg_info_t", x: "reg_info_t") -> "qvector< reg_info_t >::iterator" -ida_typeinf.reginfovec_t.qclear (method) - qclear(self) +ida_typeinf.reginfovec_t.pop_back(self) -> None -ida_typeinf.reginfovec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_typeinf.reginfovec_t.push_back(self, *args) -> "reg_info_t &" -ida_typeinf.reginfovec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: reg_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_typeinf.reginfovec_t.qclear(self) -> None -ida_typeinf.reginfovec_t.size (method) - size(self) -> size_t +ida_typeinf.reginfovec_t.reserve(self, cnt: "size_t") -> None -ida_typeinf.reginfovec_t.swap (method) - swap(self, r) - - @param r: qvector< reg_info_t > & +ida_typeinf.reginfovec_t.resize(self, *args) -> None -ida_typeinf.reginfovec_t.truncate (method) - truncate(self) +ida_typeinf.reginfovec_t.size(self) -> "size_t" -ida_typeinf.regobj_t (class) - Proxy of C++ regobj_t class. +ida_typeinf.reginfovec_t.swap(self, r: "reginfovec_t") -> None -ida_typeinf.regobj_t.__init__ (method) - __init__(self) -> regobj_t +ida_typeinf.reginfovec_t.truncate(self) -> None -ida_typeinf.regobj_t.regidx (variable) +ida_typeinf.regobj_t + +ida_typeinf.regobj_t.__init__(self) + +ida_typeinf.regobj_t.regidx index into dbg->registers -ida_typeinf.regobj_t.relocate (variable) +ida_typeinf.regobj_t.relocate 0-plain num, 1-must relocate -ida_typeinf.regobj_t.size (method) - size(self) -> size_t +ida_typeinf.regobj_t.size(self) -> "size_t" -ida_typeinf.regobjs_t (class) - Proxy of C++ regobjs_t class. +ida_typeinf.regobjs_t -ida_typeinf.regobjs_t.__init__ (method) - __init__(self) -> regobjs_t +ida_typeinf.regobjs_t.__init__(self) -ida_typeinf.regobjvec_t (class) - Proxy of C++ qvector< regobj_t > class. +ida_typeinf.regobjvec_t -ida_typeinf.regobjvec_t.__getitem__ (method) - __getitem__(self, i) -> regobj_t - - @param i: size_t +ida_typeinf.regobjvec_t.__getitem__(self, i: "size_t") -> "regobj_t const &" -ida_typeinf.regobjvec_t.__init__ (method) - __init__(self) -> regobjvec_t - __init__(self, x) -> regobjvec_t - - @param x: qvector< regobj_t > const & +ida_typeinf.regobjvec_t.__init__(self, *args) -ida_typeinf.regobjvec_t.__len__ (method) - __len__(self) -> size_t +ida_typeinf.regobjvec_t.__len__(self) -> "size_t" -ida_typeinf.regobjvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: regobj_t const & +ida_typeinf.regobjvec_t.__setitem__(self, i: "size_t", v: "regobj_t") -> None -ida_typeinf.regobjvec_t.at (method) - at(self, _idx) -> regobj_t - - @param _idx: size_t +ida_typeinf.regobjvec_t.append(self, x: "regobj_t") -> None -ida_typeinf.regobjvec_t.begin (method) - begin(self) -> regobj_t +ida_typeinf.regobjvec_t.at(self, _idx: "size_t") -> "regobj_t const &" -ida_typeinf.regobjvec_t.capacity (method) - capacity(self) -> size_t +ida_typeinf.regobjvec_t.begin(self, *args) -> "qvector< regobj_t >::const_iterator" -ida_typeinf.regobjvec_t.clear (method) - clear(self) +ida_typeinf.regobjvec_t.capacity(self) -> "size_t" -ida_typeinf.regobjvec_t.empty (method) - empty(self) -> bool +ida_typeinf.regobjvec_t.clear(self) -> None -ida_typeinf.regobjvec_t.end (method) - end(self) -> regobj_t +ida_typeinf.regobjvec_t.empty(self) -> bool -ida_typeinf.regobjvec_t.erase (method) - erase(self, it) -> regobj_t - - @param it: qvector< regobj_t >::iterator - - erase(self, first, last) -> regobj_t - - @param first: qvector< regobj_t >::iterator - @param last: qvector< regobj_t >::iterator +ida_typeinf.regobjvec_t.end(self, *args) -> "qvector< regobj_t >::const_iterator" -ida_typeinf.regobjvec_t.extract (method) - extract(self) -> regobj_t +ida_typeinf.regobjvec_t.erase(self, *args) -> "qvector< regobj_t >::iterator" -ida_typeinf.regobjvec_t.grow (method) - grow(self, x=regobj_t()) - - @param x: regobj_t const & +ida_typeinf.regobjvec_t.extend(self, x: "regobjvec_t") -> None -ida_typeinf.regobjvec_t.inject (method) - inject(self, s, len) - - @param s: regobj_t * - @param len: size_t +ida_typeinf.regobjvec_t.extract(self) -> "regobj_t *" -ida_typeinf.regobjvec_t.insert (method) - insert(self, it, x) -> regobj_t - - @param it: qvector< regobj_t >::iterator - @param x: regobj_t const & +ida_typeinf.regobjvec_t.grow(self, *args) -> None -ida_typeinf.regobjvec_t.pop_back (method) - pop_back(self) +ida_typeinf.regobjvec_t.inject(self, s: "regobj_t", len: "size_t") -> None -ida_typeinf.regobjvec_t.push_back (method) - push_back(self, x) - - @param x: regobj_t const & - - push_back(self) -> regobj_t +ida_typeinf.regobjvec_t.insert(self, it: "regobj_t", x: "regobj_t") -> "qvector< regobj_t >::iterator" -ida_typeinf.regobjvec_t.qclear (method) - qclear(self) +ida_typeinf.regobjvec_t.pop_back(self) -> None -ida_typeinf.regobjvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_typeinf.regobjvec_t.push_back(self, *args) -> "regobj_t &" -ida_typeinf.regobjvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: regobj_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_typeinf.regobjvec_t.qclear(self) -> None -ida_typeinf.regobjvec_t.size (method) - size(self) -> size_t +ida_typeinf.regobjvec_t.reserve(self, cnt: "size_t") -> None -ida_typeinf.regobjvec_t.swap (method) - swap(self, r) - - @param r: qvector< regobj_t > & +ida_typeinf.regobjvec_t.resize(self, *args) -> None -ida_typeinf.regobjvec_t.truncate (method) - truncate(self) +ida_typeinf.regobjvec_t.size(self) -> "size_t" -ida_typeinf.remove_abi_opts (function) - remove_abi_opts(abi_opts, user_level=False) -> bool - - @param abi_opts: char const * - @param user_level: bool +ida_typeinf.regobjvec_t.swap(self, r: "regobjvec_t") -> None -ida_typeinf.remove_pointer (function) - remove_pointer(tif) -> tinfo_t - - @param 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() +ida_typeinf.regobjvec_t.truncate(self) -> None -ida_typeinf.remove_tinfo_pointer (function) - remove_tinfo_pointer(tif, name, til) -> (bool, NoneType), (bool, str) +ida_typeinf.remove_abi_opts(abi_opts: str, user_level: bool = False) -> bool + +ida_typeinf.remove_pointer(tif: "tinfo_t") -> "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() + + +ida_typeinf.remove_tinfo_pointer(tif: tinfo_t, name: str, til: til_t) -> Tuple[bool, str] 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 name: char const * - @param til: (C++: const til_t *) til_t const * + @param tif the type info + @param name the name of the type to "unpointerify" + @param til the type library + @return a tuple (success, new-name) -ida_typeinf.replace_ordinal_typerefs (function) - 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: (C++: til_t *) type library to use. may be nullptr. - @param tif: (C++: tinfo_t *) type to modify (in/out) +ida_typeinf.replace_ordinal_typerefs(til: "til_t", tif: "tinfo_t") -> 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 nullptr. + @param tif: type to modify (in/out) @retval number: of replaced subtypes, -1 on failure -ida_typeinf.resolve_typedef (function) - resolve_typedef(til, type) -> type_t const * - - @param til: til_t const * - @param type: type_t const * +ida_typeinf.resolve_typedef(til: "til_t", type: "type_t const *") -> "type_t const *" -ida_typeinf.rrel_t (class) - Proxy of C++ rrel_t class. +ida_typeinf.rrel_t -ida_typeinf.rrel_t.__init__ (method) - __init__(self) -> rrel_t +ida_typeinf.rrel_t.__init__(self) -ida_typeinf.rrel_t.off (variable) +ida_typeinf.rrel_t.off displacement from the address pointed by the register -ida_typeinf.rrel_t.reg (variable) +ida_typeinf.rrel_t.reg register index (into ph.reg_names) -ida_typeinf.save_tinfo (function) - save_tinfo(tif, til, ord, name, ntf_flags) -> tinfo_code_t - - @param tif: tinfo_t * - @param til: til_t * - @param ord: size_t - @param name: char const * - @param ntf_flags: int +ida_typeinf.save_tinfo(tif: "tinfo_t", til: "til_t", ord: "size_t", name: str, ntf_flags: int) -> "tinfo_code_t" -ida_typeinf.scattered_aloc_t (class) - Proxy of C++ scattered_aloc_t class. +ida_typeinf.scattered_aloc_t -ida_typeinf.scattered_aloc_t.__init__ (method) - __init__(self) -> scattered_aloc_t +ida_typeinf.scattered_aloc_t.__init__(self) -ida_typeinf.score_tinfo (function) - score_tinfo(tif) -> uint32 - - @param tif: tinfo_t const * +ida_typeinf.score_tinfo(tif: "tinfo_t") -> int -ida_typeinf.serialize_tinfo (function) - serialize_tinfo(type, fields, fldcmts, tif, sudt_flags) -> bool - - @param type: qtype * - @param fields: qtype * - @param fldcmts: qtype * - @param tif: tinfo_t const * - @param sudt_flags: int +ida_typeinf.serialize_tinfo(type: "qtype *", fields: "qtype *", fldcmts: "qtype *", tif: "tinfo_t", sudt_flags: int) -> bool -ida_typeinf.set_abi_name (function) - set_abi_name(abiname, user_level=False) -> bool +ida_typeinf.set_abi_name(abiname: str, user_level: bool = False) -> bool Set abi name (see Compiler IDs) - - @param abiname: (C++: const char *) char const * - @param user_level: (C++: bool) -ida_typeinf.set_c_header_path (function) - set_c_header_path(incdir) +ida_typeinf.set_c_header_path(incdir: str) -> None Set include directory path the target compiler. - - @param incdir: (C++: const char *) char const * -ida_typeinf.set_c_macros (function) - set_c_macros(macros) +ida_typeinf.set_c_macros(macros: str) -> None Set predefined macros for the target compiler. - - @param macros: (C++: const char *) char const * -ida_typeinf.set_compiler (function) - set_compiler(cc, flags, abiname=None) -> bool - Change current compiler. - - @param cc: (C++: const compiler_info_t &) compiler to switch to - @param flags: (C++: int) Set compiler flags - @param abiname: (C++: const char *) ABI name - @return: success +ida_typeinf.set_compiler(cc: "compiler_info_t", flags: int, abiname: str = None) -> bool + Change current compiler. + + @param cc: compiler to switch to + @param flags: Set compiler flags + @param abiname: ABI name + @returns success -ida_typeinf.set_compiler_id (function) - set_compiler_id(id, abiname=None) -> bool +ida_typeinf.set_compiler_id(id: "comp_t", abiname: str = None) -> bool Set the compiler id (see Compiler IDs) - - @param id: (C++: comp_t) - @param abiname: (C++: const char *) char const * -ida_typeinf.set_compiler_string (function) - set_compiler_string(compstr, user_level) -> bool - - @param compstr: (C++: const char *) - compiler description in form <abbr>:<abiname> - @param user_level: (C++: bool) - initiated by user if TRUE - @return: success +ida_typeinf.set_compiler_string(compstr: str, user_level: bool) -> bool + @param compstr: - compiler description in form <abbr>:<abiname> + @param user_level: - initiated by user if TRUE + @returns success -ida_typeinf.set_numbered_type (function) - 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 nullptr for anonymous types. To replace - the existed type use NTF_REPLACE - - @param ti: (C++: til_t *) - @param ordinal: (C++: uint32) - @param ntf_flags: (C++: int) - @param name: (C++: const char *) char const * - @param type: (C++: const type_t *) type_t const * - @param fields: (C++: const p_list *) p_list const * - @param cmt: (C++: const char *) char const * - @param fldcmts: (C++: const p_list *) p_list const * - @param sclass: (C++: const sclass_t *) sclass_t const * +ida_typeinf.set_numbered_type(ti: "til_t", ordinal: int, ntf_flags: int, name: str, type: "type_t const *", fields: "p_list const *" = None, cmt: str = None, fldcmts: "p_list const *" = None, sclass: "sclass_t const *" = None) -> "tinfo_code_t" -ida_typeinf.set_tinfo_attr (function) - set_tinfo_attr(tif, ta, may_overwrite) -> bool - - @param tif: tinfo_t * - @param ta: type_attr_t const & - @param may_overwrite: bool +ida_typeinf.set_tinfo_attr(tif: "tinfo_t", ta: "type_attr_t", may_overwrite: bool) -> bool -ida_typeinf.set_tinfo_attrs (function) - set_tinfo_attrs(tif, ta) -> bool - - @param tif: tinfo_t * - @param ta: type_attrs_t * +ida_typeinf.set_tinfo_attrs(tif: "tinfo_t", ta: "type_attrs_t") -> bool -ida_typeinf.set_tinfo_property (function) - set_tinfo_property(tif, sta_prop, x) -> size_t - - @param tif: tinfo_t * - @param sta_prop: int - @param x: size_t +ida_typeinf.set_tinfo_property(tif: "tinfo_t", sta_prop: int, x: "size_t") -> "size_t" -ida_typeinf.set_tinfo_property4 (function) - set_tinfo_property4(tif, sta_prop, p1, p2, p3, p4) -> size_t - - @param tif: tinfo_t * - @param sta_prop: int - @param p1: size_t - @param p2: size_t - @param p3: size_t - @param p4: size_t +ida_typeinf.set_tinfo_property4(tif: "tinfo_t", sta_prop: int, p1: "size_t", p2: "size_t", p3: "size_t", p4: "size_t") -> "size_t" -ida_typeinf.set_type_alias (function) - 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 references to srctype - by dsttype. - - @param ti: (C++: til_t *) - @param src_ordinal: (C++: uint32) - @param dst_ordinal: (C++: uint32) +ida_typeinf.set_type_alias(ti: "til_t", src_ordinal: int, dst_ordinal: int) -> bool + Create a type alias. Redirects all references to source type to the destination type. This is equivalent to instantaneous replacement all references to srctype by dsttype. + -ida_typeinf.set_type_choosable (function) - set_type_choosable(ti, ordinal, value) - Enable/disable 'choosability' flag for a struct/union type - - @param ti: (C++: til_t *) type library - @param ordinal: (C++: uint32) ordinal number of a UDT type - @param value: (C++: bool) flag value +ida_typeinf.set_type_choosable(ti: "til_t", ordinal: int, value: bool) -> None + Enable/disable 'choosability' flag for a struct/union type + + @param ti: type library + @param ordinal: ordinal number of a UDT type + @param value: flag value -ida_typeinf.set_vftable_ea (function) - set_vftable_ea(ordinal, vftable_ea) -> bool - Set the address of a vftable instance for a vftable type. - - @param ordinal: (C++: uint32) ordinal number of the corresponding vftable type. - @param vftable_ea: (C++: ea_t) address of a virtual function table. - @return: success +ida_typeinf.set_vftable_ea(ordinal: int, vftable_ea: ida_idaapi.ea_t) -> bool + Set the address of a vftable instance for a vftable type. + + @param ordinal: ordinal number of the corresponding vftable type. + @param vftable_ea: address of a virtual function table. + @returns success -ida_typeinf.simd_info_t (class) - Proxy of C++ simd_info_t class. +ida_typeinf.simd_info_t -ida_typeinf.simd_info_t.__init__ (method) - __init__(self, nm=None, sz=0, memt=BTF_UNK) -> simd_info_t - - @param nm: char const * - @param sz: uint16 - @param memt: type_t +ida_typeinf.simd_info_t.__init__(self, *args) -ida_typeinf.simd_info_t.match_pattern (method) - match_pattern(self, pattern) -> bool - - @param pattern: simd_info_t const * +ida_typeinf.simd_info_t.match_pattern(self, pattern: "simd_info_t") -> bool -ida_typeinf.simd_info_t.memtype (variable) - member type BTF_INT8/16/32/64/128, BTF_UINT8/16/32/64/128 BTF_INT - integrals of - any size/sign BTF_FLOAT, BTF_DOUBLE BTF_TBYTE - floatings of any size BTF_UNION - - union of integral and floating types BTF_UNK - undefined +ida_typeinf.simd_info_t.memtype + member type BTF_INT8/16/32/64/128, BTF_UINT8/16/32/64/128 BTF_INT - integrals of any size/sign BTF_FLOAT, BTF_DOUBLE BTF_TBYTE - floatings of any size BTF_UNION - union of integral and floating types BTF_UNK - undefined + -ida_typeinf.simd_info_t.name (variable) +ida_typeinf.simd_info_t.name name of SIMD type (nullptr-undefined) -ida_typeinf.simd_info_t.size (variable) +ida_typeinf.simd_info_t.size SIMD type size in bytes (0-undefined) -ida_typeinf.simd_info_t.tif (variable) +ida_typeinf.simd_info_t.tif SIMD type (empty-undefined) -ida_typeinf.stkarg_area_info_t (class) - Proxy of C++ stkarg_area_info_t class. +ida_typeinf.stkarg_area_info_t -ida_typeinf.stkarg_area_info_t.__init__ (method) - __init__(self) -> stkarg_area_info_t +ida_typeinf.stkarg_area_info_t.__init__(self) -ida_typeinf.stkarg_area_info_t.linkage_area (variable) - Size of the linkage area. explanations at: \link{https://www.ibm.com/docs/en/xl- - fortran-aix/16.1.0?topic=conventions-linkage-area} examples: pc: 0, hppa: 0, ppc - aix: 0x18 (equal to stkarg_offset) +ida_typeinf.stkarg_area_info_t.linkage_area + Size of the linkage area. explanations at: [https://www.ibm.com/docs/en/xl-fortran-aix/16.1.0?topic=conventions-linkage-area](https://www.ibm.com/docs/en/xl-fortran-aix/16.1.0?topic=conventions-linkage-area) examples: pc: 0, hppa: 0, ppc aix: 0x18 (equal to stkarg_offset) + -ida_typeinf.stkarg_area_info_t.shadow_size (variable) - Size of the shadow area. explanations at: - \link{https://stackoverflow.com/questions/30190132/what-is-the-shadow-space- - in-x64-assembly} examples: x64 Visual Studio C++: 0x20, x64 gcc: 0, ppc aix: - 0x20 +ida_typeinf.stkarg_area_info_t.shadow_size + Size of the shadow area. explanations at: [https://stackoverflow.com/questions/30190132/what-is-the-shadow-space-in-x64-assembly](https://stackoverflow.com/questions/30190132/what-is-the-shadow-space-in-x64-assembly) examples: x64 Visual Studio C++: 0x20, x64 gcc: 0, ppc aix: 0x20 + -ida_typeinf.stkarg_area_info_t.stkarg_offset (variable) - Offset from the SP to the first stack argument (can include linkage area) - examples: pc: 0, hppa: -0x34, ppc aix: 0x18 +ida_typeinf.stkarg_area_info_t.stkarg_offset + Offset from the SP to the first stack argument (can include linkage area) examples: pc: 0, hppa: -0x34, ppc aix: 0x18 + -ida_typeinf.store_til (function) - 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: (C++: til_t *) type library to store - @param tildir: (C++: const char *) directory where to store the til. nullptr means current - directory. - @param name: (C++: const char *) filename of the til. If it's an absolute path, tildir is ignored. +ida_typeinf.store_til(ti: "til_t", tildir: str, name: str) -> 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 + @param tildir: directory where to store the til. nullptr means current directory. + @param name: filename of the til. If it's an absolute path, tildir is ignored. * NB: the file extension is forced to .til - @return: success + @returns success -ida_typeinf.switch_to_golang (function) - switch_to_golang() +ida_typeinf.stroff_as_size(plen: int, tif: "tinfo_t", value: "asize_t") -> bool + Should display a structure offset expression as the structure size? + +ida_typeinf.switch_to_golang() -> None switch to GOLANG calling convention (to be used as default CC) -ida_typeinf.text_sink_t (class) - Proxy of C++ text_sink_t class. +ida_typeinf.text_sink_t -ida_typeinf.text_sink_t.__disown__ (method) +ida_typeinf.text_sink_t.__disown__(self) -ida_typeinf.text_sink_t.__init__ (method) - __init__(self) -> text_sink_t - - @param self: PyObject * +ida_typeinf.text_sink_t.__init__(self) -ida_typeinf.text_sink_t._print (method) - _print(self, str) -> int - - Parameters - ---------- - str: char const * +ida_typeinf.text_sink_t._print(self, str: str) -> int -ida_typeinf.til_symbol_t (class) - Proxy of C++ til_symbol_t class. +ida_typeinf.til_symbol_t -ida_typeinf.til_symbol_t.__init__ (method) - __init__(self, n=None, t=None) -> til_symbol_t - - @param n: char const * - @param t: til_t const * +ida_typeinf.til_symbol_t.__init__(self, n: str = None, t: "til_t" = None) -ida_typeinf.til_symbol_t.name (variable) +ida_typeinf.til_symbol_t.name symbol name -ida_typeinf.til_symbol_t.til (variable) +ida_typeinf.til_symbol_t.til pointer to til -ida_typeinf.til_t (class) - Proxy of C++ til_t class. +ida_typeinf.til_t -ida_typeinf.til_t.__init__ (method) - __init__(self) -> til_t +ida_typeinf.til_t.__eq__(self, r: "til_t") -> bool -ida_typeinf.til_t.base (method) - base(self, n) -> til_t - tils that our til is based on - - @param n: int +ida_typeinf.til_t.__init__(self) -ida_typeinf.til_t.cc (variable) +ida_typeinf.til_t.__ne__(self, r: "til_t") -> bool + +ida_typeinf.til_t.base(self, n: int) -> "til_t *" + +ida_typeinf.til_t.cc information about the target compiler -ida_typeinf.til_t.desc (variable) +ida_typeinf.til_t.desc human readable til description -ida_typeinf.til_t.flags (variable) - Type info library property bits +ida_typeinf.til_t.find_base(self, n: str) -> "til_t *" + Find the base til with the provided name + + @param n: the base til name + @returns the found til_t, or nullptr -ida_typeinf.til_t.is_dirty (method) - is_dirty(self) -> bool +ida_typeinf.til_t.flags + Type info library property bits + + +ida_typeinf.til_t.get_named_type(self, name) + Retrieves a tinfo_t representing the named type in this type library. + + @param name a type name + @return a new tinfo_t object, or None if not found + +ida_typeinf.til_t.get_numbered_type(self, ordinal) + Retrieves a tinfo_t representing the numbered type in this type library. + + @param ordinal a type ordinal + @return a new tinfo_t object, or None if not found + +ida_typeinf.til_t.get_type_names(self) + +ida_typeinf.til_t.import_type(self, src) + Import a type (and all its dependencies) into this type info library. + + @param src The type to import + @return the imported copy, or None + +ida_typeinf.til_t.is_dirty(self) -> bool Has the til been modified? (TIL_MOD) -ida_typeinf.til_t.name (variable) +ida_typeinf.til_t.name short file name (without path and extension) -ida_typeinf.til_t.nbases (variable) +ida_typeinf.til_t.named_types(self) + Returns a generator over the named types contained in this + type library. + + Every iteration returns a fresh new tinfo_t object + + @return a tinfo_t-producing generator + +ida_typeinf.til_t.nbases number of base tils -ida_typeinf.til_t.nrefs (variable) +ida_typeinf.til_t.nrefs number of references to the til -ida_typeinf.til_t.nstreams (variable) +ida_typeinf.til_t.nstreams number of extra streams -ida_typeinf.til_t.set_dirty (method) - set_dirty(self) +ida_typeinf.til_t.numbered_types(self) + Returns a generator over the numbered types contained in this + type library. + + Every iteration returns a fresh new tinfo_t object + + @return a tinfo_t-producing generator + +ida_typeinf.til_t.set_dirty(self) -> None Mark the til as modified (TIL_MOD) -ida_typeinf.til_t.streams (variable) +ida_typeinf.til_t.streams symbol stream storage -ida_typeinf.tinfo_errstr (function) - tinfo_errstr(code) -> char const * - Helper function to convert an error code into a printable string. Additional - arguments are handled using the functions from err.h - - @param code: (C++: tinfo_code_t) enum tinfo_code_t +ida_typeinf.til_type_ref_t -ida_typeinf.tinfo_t (class) - Proxy of C++ tinfo_t class. +ida_typeinf.til_type_ref_t.__init__(self) -ida_typeinf.tinfo_t.ENUMBM_AUTO (variable) +ida_typeinf.til_type_ref_t.clear(self) -> None + +ida_typeinf.til_type_ref_t.edm + BTF_ENUM: the current enum member. + +ida_typeinf.til_type_ref_t.fa + BT_FUNC: the current argument, nullptr - ellipsis. + +ida_typeinf.til_type_ref_t.is_enum(self) -> bool + +ida_typeinf.til_type_ref_t.is_func(self) -> bool + +ida_typeinf.til_type_ref_t.is_struct(self) -> bool + +ida_typeinf.til_type_ref_t.is_typedef(self) -> bool + +ida_typeinf.til_type_ref_t.is_udt(self) -> bool + +ida_typeinf.til_type_ref_t.is_union(self) -> bool + +ida_typeinf.til_type_ref_t.on_member(self) -> bool + +ida_typeinf.til_type_ref_t.udm + BTF_STRUCT or BTF_UNION: the current member. + +ida_typeinf.tinfo_errstr(code: "tinfo_code_t") -> str + Helper function to convert an error code into a printable string. Additional arguments are handled using the functions from err.h + + +ida_typeinf.tinfo_t + +ida_typeinf.tinfo_t.ENUMBM_AUTO convert to bitmask if the outcome is nice and useful -ida_typeinf.tinfo_t.ENUMBM_OFF (variable) +ida_typeinf.tinfo_t.ENUMBM_OFF convert to ordinal enum -ida_typeinf.tinfo_t.ENUMBM_ON (variable) +ida_typeinf.tinfo_t.ENUMBM_ON convert to bitmask enum -ida_typeinf.tinfo_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: tinfo_t const & +ida_typeinf.tinfo_t.__eq__(self, r: "tinfo_t") -> bool -ida_typeinf.tinfo_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: tinfo_t const & +ida_typeinf.tinfo_t.__ge__(self, r: "tinfo_t") -> bool -ida_typeinf.tinfo_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: tinfo_t const & +ida_typeinf.tinfo_t.__gt__(self, r: "tinfo_t") -> bool -ida_typeinf.tinfo_t.__init__ (method) - __init__(self) -> tinfo_t - __init__(self, decl_type) -> tinfo_t +ida_typeinf.tinfo_t.__init__(self, *args, ordinal = None, name = None, tid = None, til = None) + Create a type object with the provided argumens. - @param decl_type: type_t + This constructor has the following signatures: - __init__(self, r) -> tinfo_t + 1. tinfo_t(decl_type: type_t) + 2. tinfo_t(decl: str, til: til_t = None, pt_flags: int = 0) - @param r: tinfo_t const & - -ida_typeinf.tinfo_t.__le__ (method) - __le__(self, r) -> bool + The latter form will create the type object by parsing the type declaration - @param r: tinfo_t const & - -ida_typeinf.tinfo_t.__lt__ (method) - __lt__(self, r) -> bool + Alternatively, you can use a form accepting the following keyword arguments: - @param r: tinfo_t const & - -ida_typeinf.tinfo_t.__ne__ (method) - __ne__(self, r) -> bool + * ordinal: int + * name: str + * tid: int + * til: til_t=None # `None` means `get_idati()` - @param r: tinfo_t const & - -ida_typeinf.tinfo_t.__str__ (method) - __str__(self) -> qstring - -ida_typeinf.tinfo_t._print (method) - _print(self, name=None, prtype_flags=0, indent=0, cmtindent=0, prefix=None, cmt=None) -> bool + E.g., - Parameters - ---------- - name: char const * - prtype_flags: int - indent: int - cmtindent: int - prefix: char const * - cmt: char const * - -ida_typeinf.tinfo_t.add_edm (method) - add_edm(self, edm, bmask=bmask64_t(-1), etf_flags=0, idx=-1) -> tinfo_code_t - Add a new enum member (a new symbolic constant) + * tinfo_t(ordinal=3) + * tinfo_t(ordinal=10, til=get_idati()) + * tinfo_t(name="mytype_t") + * tinfo_t(name="thattype_t", til=my_other_til) + * tinfo_t(tid=ida_nalt.get_strid(some_address)) - @param edm: (C++: const edm_t &) the constant name, value, and comment - @param bmask: (C++: bmask64_t) bmask of the group to add the constant to - @note: 1. For non-bitmask enum push back constant, BMASK is not used (set it ot - -1), never failed 2. For bitmask enum: - * if VAL and BMASK are not agreed, return TERR_BAD_MSKVAL - * if group with BMASK exists, push back constant to group - * otherwise use constant as bitmask for a new group - @note: ETF_NO_SAVE is ignored - -ida_typeinf.tinfo_t.add_udm (method) - add_udm(self, udm, etf_flags=0, times=1, idx=-1) -> tinfo_code_t - Add a structure/union member. + The constructor may raise an exception if data was invalid, or if parsing failed. - @param udm: (C++: const udm_t &) member to add - @param etf_flags: (C++: uint) edit_type() flags flags - @param times: (C++: size_t) how many times to add. if times > 1, the member name will be - appended a suffix like "_2" and so on - @param idx: (C++: ssize_t) the index in the udm array where the new udm should be placed. if - the specified index cannot be honored because it would spoil the udm - sorting order, it is silently ignored. - @note: ETF_NO_SAVE is ignored + @param decl_type A simple type + @param decl A valid C declaration + @param til A type library, or `None` to use the (`get_idati()`) default + @param ordinal An ordinal in the type library + @param name A valid type name + @param pt_flags Parsing flags -ida_typeinf.tinfo_t.append_covered (method) - append_covered(self, out, offset=0) -> bool - Calculate set of covered bytes for the type +ida_typeinf.tinfo_t.__le__(self, r: "tinfo_t") -> bool + +ida_typeinf.tinfo_t.__lt__(self, r: "tinfo_t") -> bool + +ida_typeinf.tinfo_t.__ne__(self, r: "tinfo_t") -> bool + +ida_typeinf.tinfo_t.__repr__(self) + +ida_typeinf.tinfo_t.__str__(self) -> str + +ida_typeinf.tinfo_t._print(self, name: str = None, prtype_flags: int = 0, indent: int = 0, cmtindent: int = 0, prefix: str = None, cmt: str = None) -> bool + +ida_typeinf.tinfo_t.add_edm(self, *args) + Add an enumerator to the current enumeration. - @param out: (C++: rangeset_t *) pointer to the output buffer. covered bytes will be appended to it. - @param offset: (C++: uint64) delta in bytes to add to all calculations. used internally during - recurion. - -ida_typeinf.tinfo_t.calc_gaps (method) - calc_gaps(self, out) -> bool - Calculate set of padding bytes for the type + When creating a new enumeration from scratch, you might + want to first call `create_enum()` - @param out: (C++: rangeset_t *) pointer to the output buffer; old buffer contents will be lost. + This method has the following signatures: + + 1. add_edm(edm: edm_t, bmask: int = -1, etf_flags: int = 0, idx: int = -1) + 2. add_edm(name: str, value: int, bmask: int = -1, etf_flags: int = 0, idx: int = -1) + + If an input argument is incorrect, the constructor may raise an exception + + @param edm The member, fully initialized (1st form) + @param name Enumerator name - must not be empty + @param value Enumerator value + @param bmask A bitmask to which the enumerator belongs + @param etf_flags an OR'ed combination of ETF_ flags + @param idx the index in the edm array where the new udm should be placed. + If the specified index cannot be honored because it would spoil + the edm sorting order, it is silently ignored. -ida_typeinf.tinfo_t.calc_purged_bytes (method) - calc_purged_bytes(self) -> int +ida_typeinf.tinfo_t.add_funcarg(self, farg: "funcarg_t", etf_flags: "uint" = 0, idx: "ssize_t" = -1) -> "tinfo_code_t" + Add a function argument. + + @param farg: argument to add + @param etf_flags: type changing flags flags + @param idx: the index in the funcarg array where the new funcarg should be placed. if the specified index cannot be honored because it would spoil the funcarg sorting order, it is silently ignored. -ida_typeinf.tinfo_t.calc_score (method) - calc_score(self) -> uint32 +ida_typeinf.tinfo_t.add_udm(self, *args) + Add a member to the current structure/union. + + When creating a new structure/union from scratch, you might + want to first call `create_udt()` + + This method has the following signatures: + + 1. add_udm(udm: udm_t, etf_flags: int = 0, times: int = 1, idx: int = -1) + 2. add_udm(name: str, type: type_t | tinfo_t | str, offset: int = 0, etf_flags: int = 0, times: int = 1, idx: int = -1) + + In the 2nd form, the 'type' descriptor, can be one of: + + * type_t: if the type is simple (integral/floating/bool). E.g., `BTF_INT` + * tinfo_t: can handle more complex types (structures, pointers, arrays, ...) + * str: a C type declaration + + If an input argument is incorrect, the constructor may raise an exception + + @param udm The member, fully initialized (1st form) + @param name Member name - must not be empty + @param type Member type + @param offset the member offset in bits. It is the caller's responsibility + to specify correct offsets. + @param etf_flags an OR'ed combination of ETF_ flags + @param times how many times to add the new member + @param idx the index in the udm array where the new udm should be placed. + If the specified index cannot be honored because it would spoil + the udm sorting order, it is silently ignored. + +ida_typeinf.tinfo_t.append_covered(self, out: "rangeset_t", offset: "uint64" = 0) -> bool + Calculate set of covered bytes for the type + + @param out: pointer to the output buffer. covered bytes will be appended to it. + @param offset: delta in bytes to add to all calculations. used internally during recurion. + +ida_typeinf.tinfo_t.calc_enum_mask(self) -> "uint64" + +ida_typeinf.tinfo_t.calc_gaps(self, out: "rangeset_t") -> bool + Calculate set of padding bytes for the type + + @param out: pointer to the output buffer; old buffer contents will be lost. + +ida_typeinf.tinfo_t.calc_purged_bytes(self) -> int + BT_FUNC: Calculate number of purged bytes + +ida_typeinf.tinfo_t.calc_score(self) -> int Calculate the type score (the higher - the nicer is the type) -ida_typeinf.tinfo_t.calc_udt_aligns (method) - calc_udt_aligns(self, sudt_flags=0x0004) -> bool - Calculate the udt alignments using the field offsets/sizes and the total udt - size This function does not work on typerefs - - @param sudt_flags: (C++: int) +ida_typeinf.tinfo_t.calc_udt_aligns(self, sudt_flags: int = 4) -> bool + Calculate the udt alignments using the field offsets/sizes and the total udt size This function does not work on typerefs + -ida_typeinf.tinfo_t.change_sign (method) - change_sign(self, sign) -> bool +ida_typeinf.tinfo_t.change_sign(self, sign: "type_sign_t") -> bool Change the type sign. Works only for the types that may have sign. - - @param sign: (C++: type_sign_t) -ida_typeinf.tinfo_t.clear (method) - clear(self) +ida_typeinf.tinfo_t.clear(self) -> None Clear contents of this tinfo, and remove from the type system. -ida_typeinf.tinfo_t.clr_const (method) - clr_const(self) -> bool +ida_typeinf.tinfo_t.clr_const(self) -> bool -ida_typeinf.tinfo_t.clr_const_volatile (method) - clr_const_volatile(self) -> bool +ida_typeinf.tinfo_t.clr_const_volatile(self) -> bool -ida_typeinf.tinfo_t.clr_decl_const_volatile (method) - clr_decl_const_volatile(self) +ida_typeinf.tinfo_t.clr_decl_const_volatile(self) -> None -ida_typeinf.tinfo_t.clr_volatile (method) - clr_volatile(self) -> bool +ida_typeinf.tinfo_t.clr_volatile(self) -> bool -ida_typeinf.tinfo_t.compare (method) - compare(self, r) -> int - - @param r: tinfo_t const & +ida_typeinf.tinfo_t.compare(self, r: "tinfo_t") -> int -ida_typeinf.tinfo_t.compare_with (method) - compare_with(self, r, tcflags=0) -> bool +ida_typeinf.tinfo_t.compare_with(self, r: "tinfo_t", tcflags: int = 0) -> bool Compare two types, based on given flags (see tinfo_t comparison flags) - - @param r: (C++: const tinfo_t &) tinfo_t const & - @param tcflags: (C++: int) -ida_typeinf.tinfo_t.convert_array_to_ptr (method) - convert_array_to_ptr(self) -> bool - Convert an array into a pointer. type[] => type * +ida_typeinf.tinfo_t.convert_array_to_ptr(self) -> bool + Convert an array into a pointer. type[] => type * + -ida_typeinf.tinfo_t.copy (method) - copy(self) -> tinfo_t +ida_typeinf.tinfo_t.copy(self) -> "tinfo_t" -ida_typeinf.tinfo_t.copy_type (method) - copy_type(self, til, name, ntf_flags=0x0001|0x1000) -> tinfo_code_t - - @param til: til_t * - @param name: char const * - @param ntf_flags: int +ida_typeinf.tinfo_t.copy_type(self, *args) -> "tinfo_code_t" -ida_typeinf.tinfo_t.create_array (method) - create_array(self, p, decl_type=BT_ARRAY) -> bool - - @param p: array_type_data_t const & - @param decl_type: type_t - - create_array(self, tif, nelems=0, base=0, decl_type=BT_ARRAY) -> bool - - @param tif: tinfo_t const & - @param nelems: uint32 - @param base: uint32 - @param decl_type: type_t +ida_typeinf.tinfo_t.create_array(self, *args) -> bool -ida_typeinf.tinfo_t.create_bitfield (method) - create_bitfield(self, p, decl_type=BT_BITFIELD) -> bool - - @param p: bitfield_type_data_t const & - @param decl_type: type_t - - create_bitfield(self, nbytes, width, is_unsigned=False, decl_type=BT_BITFIELD) -> bool - - @param nbytes: uchar - @param width: uchar - @param is_unsigned: bool - @param decl_type: type_t +ida_typeinf.tinfo_t.create_bitfield(self, *args) -> bool -ida_typeinf.tinfo_t.create_enum (method) - create_enum(self, p, decl_type=BTF_ENUM) -> bool - - @param p: enum_type_data_t & - @param decl_type: type_t +ida_typeinf.tinfo_t.create_enum(self, *args) -> bool + Create an empty enum. -ida_typeinf.tinfo_t.create_forward_decl (method) - create_forward_decl(self, til, decl_type, name, ntf_flags=0) -> tinfo_code_t - Create a forward declaration. decl_type: BTF_STRUCT, BTF_UNION, or BTF_ENUM - - @param til: (C++: til_t *) - @param decl_type: (C++: type_t) - @param name: (C++: const char *) char const * - @param ntf_flags: (C++: int) +ida_typeinf.tinfo_t.create_forward_decl(self, til: "til_t", decl_type: "type_t", name: str, ntf_flags: int = 0) -> "tinfo_code_t" + Create a forward declaration. decl_type: BTF_STRUCT, BTF_UNION, or BTF_ENUM + -ida_typeinf.tinfo_t.create_func (method) - create_func(self, p, decl_type=BT_FUNC) -> bool - - @param p: func_type_data_t & - @param decl_type: type_t +ida_typeinf.tinfo_t.create_func(self, *args) -> bool -ida_typeinf.tinfo_t.create_ptr (method) - create_ptr(self, p, decl_type=BT_PTR) -> bool - - @param p: ptr_type_data_t const & - @param decl_type: type_t - - create_ptr(self, tif, bps=0, decl_type=BT_PTR) -> bool - - @param tif: tinfo_t const & - @param bps: uchar - @param decl_type: type_t +ida_typeinf.tinfo_t.create_ptr(self, *args) -> bool -ida_typeinf.tinfo_t.create_simple_type (method) - create_simple_type(self, decl_type) -> bool - - @param decl_type: type_t +ida_typeinf.tinfo_t.create_simple_type(self, decl_type: "type_t") -> bool -ida_typeinf.tinfo_t.create_typedef (method) - create_typedef(self, p, decl_type=BTF_TYPEDEF, try_ordinal=True) -> bool - - @param p: typedef_type_data_t const & - @param decl_type: type_t - @param try_ordinal: bool - - create_typedef(self, til, name, decl_type=BTF_TYPEDEF, try_ordinal=True) - - @param til: til_t const * - @param name: char const * - @param decl_type: type_t - @param try_ordinal: bool - - create_typedef(self, til, ord, decl_type=BTF_TYPEDEF) - - @param til: til_t const * - @param ord: uint - @param decl_type: type_t +ida_typeinf.tinfo_t.create_typedef(self, *args) -> None -ida_typeinf.tinfo_t.create_udt (method) - create_udt(self, p) -> bool - - @param p: udt_type_data_t & - - create_udt(self, p, decl_type) -> bool - - @param p: udt_type_data_t & - @param decl_type: type_t +ida_typeinf.tinfo_t.create_udt(self, *args) -> bool + Create an empty structure/union. -ida_typeinf.tinfo_t.del_attr (method) - del_attr(self, key, make_copy=True) -> bool +ida_typeinf.tinfo_t.del_attr(self, key: str, make_copy: bool = True) -> bool Del a type attribute. typerefs cannot be modified by this function. - - @param key: (C++: const qstring &) qstring const & - @param make_copy: (C++: bool) -ida_typeinf.tinfo_t.del_attrs (method) - del_attrs(self) +ida_typeinf.tinfo_t.del_attrs(self) -> None Del all type attributes. typerefs cannot be modified by this function. -ida_typeinf.tinfo_t.del_edm (method) - del_edm(self, idx, etf_flags=0) -> tinfo_code_t +ida_typeinf.tinfo_t.del_edm(self, *args) + Delete an enumerator with the specified name + or the specified index, in the specified tinfo_t object. - @param idx: size_t - @param etf_flags: uint - -ida_typeinf.tinfo_t.del_edms (method) - del_edms(self, idx1, idx2, etf_flags=0) -> tinfo_code_t - Delete enum members + This method has the following signatures: - @param idx1: (C++: size_t) index in edmvec_t - @param idx2: (C++: size_t) index in edmvec_t or size_t(-1) - @param etf_flags: (C++: uint) etf_flag_t Delete enum members in [idx1, idx2) - @note: For bitmask enum, the first member of a non-trivial group (having 2 or - more members) is considered as a group mask. It is impossible to delete - the group mask of a non-trivial group, other members of the group must be - deleted first. Empty groups are automatically deleted. + 1. del_edm(name: str) -> int + 2. del_edm(index: int) -> int + + @param name an enumerator name (1st form) + @param index an enumerator index (2nd form) + @return TERR_OK in case of success, or another TERR_* value in case of error -ida_typeinf.tinfo_t.del_udm (method) - del_udm(self, index, etf_flags=0) -> tinfo_code_t +ida_typeinf.tinfo_t.del_edm_by_value(self, value: int, etf_flags: int = 0, bmask: int = DEFMASK64, serial: int = 0) + Delete an enumerator with the specified value, + in the specified tinfo_t object. + + @param value the enumerator value + @return TERR_OK in case of success, or another TERR_* value in case of error + +ida_typeinf.tinfo_t.del_edms(self, idx1: "size_t", idx2: "size_t", etf_flags: "uint" = 0) -> "tinfo_code_t" + Delete enum members + + @param idx1: index in edmvec_t + @param idx2: index in edmvec_t or size_t(-1) + @param etf_flags: etf_flag_t Delete enum members in [idx1, idx2) + +ida_typeinf.tinfo_t.del_funcarg(self, idx: "size_t", etf_flags: "uint" = 0) -> "tinfo_code_t" + +ida_typeinf.tinfo_t.del_funcargs(self, idx1: "size_t", idx2: "size_t", etf_flags: "uint" = 0) -> "tinfo_code_t" + Delete function arguments + + @param idx1: index in funcargvec_t + @param idx2: index in funcargvec_t or size_t(-1) + @param etf_flags: etf_flag_t Delete function arguments in [idx1, idx2) + +ida_typeinf.tinfo_t.del_udm(self, index: "size_t", etf_flags: "uint" = 0) -> "tinfo_code_t" Delete a structure/union member. - - @param index: (C++: size_t) - @param etf_flags: (C++: uint) -ida_typeinf.tinfo_t.del_udms (method) - del_udms(self, idx1, idx2, etf_flags=0) -> tinfo_code_t +ida_typeinf.tinfo_t.del_udms(self, idx1: "size_t", idx2: "size_t", etf_flags: "uint" = 0) -> "tinfo_code_t" Delete structure/union members in the range [idx1, idx2) - - @param idx1: (C++: size_t) - @param idx2: (C++: size_t) - @param etf_flags: (C++: uint) -ida_typeinf.tinfo_t.deserialize (method) - deserialize(self, til, ptype, pfields=None, pfldcmts=None, cmt=None) -> bool +ida_typeinf.tinfo_t.deserialize(self, *args) -> bool + This function has the following signatures: + + 0. deserialize(til: const til_t *, ptype: const type_t **, pfields: const p_list **=nullptr, pfldcmts: const p_list **=nullptr, cmt: str=nullptr) -> bool + 1. deserialize(til: const til_t *, ptype: const qtype *, pfields: const qtype *=nullptr, pfldcmts: const qtype *=nullptr, cmt: str=nullptr) -> bool + + # 0: deserialize(til: const til_t *, ptype: const type_t **, pfields: const p_list **=nullptr, pfldcmts: const p_list **=nullptr, cmt: str=nullptr) -> bool + Deserialize a type string into a tinfo_t object. - @param til: (C++: const til_t *) til_t const * - @param ptype: (C++: const qtype *) type_t const ** - @param pfields: (C++: const qtype *) p_list const ** - @param pfldcmts: (C++: const qtype *) p_list const ** - @param cmt: (C++: const char *) char const * - deserialize(self, til, type, fields, cmts=None) -> bool + # 1: deserialize(til: const til_t *, ptype: const qtype *, pfields: const qtype *=nullptr, pfldcmts: const qtype *=nullptr, cmt: str=nullptr) -> bool - @param til: til_t const * - @param type: type_t const * - @param fields: p_list const * - @param cmts: p_list const * + Deserialize a type string into a tinfo_t object. -ida_typeinf.tinfo_t.dstr (method) - dstr(self) -> char const * +ida_typeinf.tinfo_t.detach(self) -> bool + Detach tinfo_t from the underlying type. After calling this finction, tinfo_t will lose its link to the underlying named or numbered type (if any) and will become a reference to a unique type. After that, any modifications to tinfo_t will affect only its type. + + +ida_typeinf.tinfo_t.dstr(self) -> str Function to facilitate debugging. -ida_typeinf.tinfo_t.edit_array (method) - edit_array(self, editor, etf_flags=0) -> tinfo_code_t - - @param editor: std::function< tinfo_code_t (array_type_data_t *) > const & - @param etf_flags: uint +ida_typeinf.tinfo_t.edit_edm(self, *args) -> "tinfo_code_t" + Change constant value and/or bitmask + + @param idx: index in edmvec_t + @param value: old or new value + @param bmask: old or new bitmask + @param etf_flags: etf_flag_t -ida_typeinf.tinfo_t.edit_bitfield (method) - edit_bitfield(self, editor, etf_flags=0) -> tinfo_code_t - - @param editor: std::function< tinfo_code_t (bitfield_type_data_t *) > const & - @param etf_flags: uint - -ida_typeinf.tinfo_t.edit_edm (method) - edit_edm(self, idx, value, bmask=bmask64_t(-1), etf_flags=0) -> tinfo_code_t - Change constant value and/or bitmask - - @param idx: (C++: size_t) index in edmvec_t - @param value: (C++: uint64) old or new value - @param bmask: (C++: bmask64_t) old or new bitmask - @note: if new bitmask is specified the index of constant may be changed - -ida_typeinf.tinfo_t.edit_enum (method) - edit_enum(self, editor, etf_flags=0) -> tinfo_code_t - - @param editor: std::function< tinfo_code_t (enum_type_data_t *) > const & - @param etf_flags: uint - -ida_typeinf.tinfo_t.edit_func (method) - edit_func(self, editor, etf_flags=0) -> tinfo_code_t - - @param editor: std::function< tinfo_code_t (func_type_data_t *) > const & - @param etf_flags: uint - -ida_typeinf.tinfo_t.edit_ptr (method) - edit_ptr(self, editor, etf_flags=0) -> tinfo_code_t - - @param editor: std::function< tinfo_code_t (ptr_type_data_t *) > const & - @param etf_flags: uint - -ida_typeinf.tinfo_t.edit_udt (method) - edit_udt(self, editor, etf_flags=0) -> tinfo_code_t - Edit udt/enum/func/array/ptr/bitfield. These functions may be used if the - desired functionality is not provided by the STA_... based functions. - - @param editor: (C++: const std::function< tinfo_code_t(udt_type_data_t *)> &) callback to modify the type details; should return true on - success - @param etf_flags: (C++: uint) combination of etf_flag_t constants - -ida_typeinf.tinfo_t.empty (method) - empty(self) -> bool +ida_typeinf.tinfo_t.empty(self) -> bool Was tinfo_t initialized with some type info or not? -ida_typeinf.tinfo_t.equals_to (method) - equals_to(self, r) -> bool - - @param r: tinfo_t const & +ida_typeinf.tinfo_t.equals_to(self, r: "tinfo_t") -> bool -ida_typeinf.tinfo_t.expand_udt (method) - expand_udt(self, idx, delta, etf_flags=0) -> tinfo_code_t - Expand/shtrink a structure by adding/removing a gap before the specified member. +ida_typeinf.tinfo_t.expand_udt(self, idx: "size_t", delta: "adiff_t", etf_flags: "uint" = 0) -> "tinfo_code_t" + Expand/shrink a structure by adding/removing a gap before the specified member. + For regular structures, either the gap can be accommodated by aligning the next member with an alignment directive, or an explicit "gap" member will be inserted. Also note that it is impossible to add a gap at the end of a regular structure. + When it comes to fixed-layout structures, there is no need to either add new "gap" members or align existing members, since all members have a fixed offset. It is possible to add a gap at the end of a fixed-layout structure, by passing `-1` as index. - @param idx: (C++: size_t) index of the member - @param delta: (C++: adiff_t) number of bytes to add or remove - @param etf_flags: (C++: uint) etf_flag_t Please note that it is impossible to add a gap at - the very end of a structure. However, adding before a regular - member is possible. This function can be used to remove gaps - in the middle of a structure by specifying a negative delta - value. + @param idx: index of the member + @param delta: number of bytes to add or remove + @param etf_flags: etf_flag_t -ida_typeinf.tinfo_t.find_edm (method) - find_edm(self, edm, value, bmask=bmask64_t(-1), serial=0) -> tinfo_code_t - Find enum member - - @param edm: (C++: edm_t *) enum type member - @param value: uint64 - @param bmask: bmask64_t - find_edm(self, edm, name) -> tinfo_code_t - - @param edm: edm_t * - @param name: char const * +ida_typeinf.tinfo_t.find_edm(self, *args) -> "ssize_t" -ida_typeinf.tinfo_t.find_udm (method) - find_udm(self, udm, strmem_flags) -> int +ida_typeinf.tinfo_t.find_udm(self, *args) -> int + This function has the following signatures: + + 0. find_udm(udm: udm_t *, strmem_flags: int) -> int + 1. find_udm(offset: uint64, strmem_flags: int=0) -> int + 2. find_udm(name: str, strmem_flags: int=0) -> int + + # 0: find_udm(udm: udm_t *, strmem_flags: int) -> int + BTF_STRUCT,BTF_UNION: Find a udt member. * at the specified offset (STRMEM_OFFSET) * with the specified index (STRMEM_INDEX) * with the specified type (STRMEM_TYPE) * with the specified name (STRMEM_NAME) - @param udm: (C++: struct udm_t *) udm_t * - @param strmem_flags: (C++: int) - @return: the index of the found member or -1 - -ida_typeinf.tinfo_t.force_tid (method) - force_tid(self) -> tid_t - Get the type tid. Create if it does not exist yet. If the type comes from a base - til, the type will be copied to the local til and a new tid will be created for - it. (if the type comes from a base til, it does not have a tid yet). If the type - comes from the local til, this function is equivalent to get_tid() - @return: tid or BADADDR + + @returns the index of the found member or -1 + + # 1: find_udm(offset: uint64, strmem_flags: int=0) -> int + + BTF_STRUCT,BTF_UNION: Find an udt member at the specified offset + + @returns the index of the found member or -1 + + # 2: find_udm(name: str, strmem_flags: int=0) -> int + + BTF_STRUCT,BTF_UNION: Find an udt member by name + + @returns the index of the found member or -1 -ida_typeinf.tinfo_t.get_alias_target (method) - get_alias_target(self) -> uint32 - Get type alias If the type has no alias, return 0. +ida_typeinf.tinfo_t.force_tid(self) -> "tid_t" + Get the type tid. Create if it does not exist yet. If the type comes from a base til, the type will be copied to the local til and a new tid will be created for it. (if the type comes from a base til, it does not have a tid yet). If the type comes from the local til, this function is equivalent to get_tid() + + @returns tid or BADADDR -ida_typeinf.tinfo_t.get_array_details (method) - get_array_details(self, ai) -> bool +ida_typeinf.tinfo_t.get_alias_target(self) -> int + Get type alias If the type has no alias, return 0. + + +ida_typeinf.tinfo_t.get_alignment(self) -> int + Get type alignment This function returns the effective type alignment. Zero means error. + + +ida_typeinf.tinfo_t.get_array_details(self, ai: "array_type_data_t") -> bool Get the array specific info. - - @param ai: (C++: array_type_data_t *) -ida_typeinf.tinfo_t.get_array_element (method) - get_array_element(self) -> tinfo_t +ida_typeinf.tinfo_t.get_array_element(self) -> "tinfo_t" + BT_ARRAY: get type of array element. See also get_ptrarr_object() -ida_typeinf.tinfo_t.get_array_nelems (method) - get_array_nelems(self) -> int +ida_typeinf.tinfo_t.get_array_nelems(self) -> int + BT_ARRAY: get number of elements (-1 means error) -ida_typeinf.tinfo_t.get_attr (method) - get_attr(self, key, all_attrs=True) -> str or None +ida_typeinf.tinfo_t.get_attr(self, key: str, all_attrs: bool = True) -> "PyObject *" Get a type attribute. - - @param key: (C++: const qstring &) qstring const & - @param all_attrs: (C++: bool) -ida_typeinf.tinfo_t.get_attrs (method) - get_attrs(self, tav, all_attrs=False) -> bool +ida_typeinf.tinfo_t.get_attrs(self, tav: "type_attrs_t", all_attrs: bool = False) -> bool Get type attributes (all_attrs: include attributes of referenced types, if any) - - @param tav: (C++: type_attrs_t *) - @param all_attrs: (C++: bool) -ida_typeinf.tinfo_t.get_bit_buckets (method) - get_bit_buckets(self, buckets) -> bool - ::BT_STRUCT: get bit buckets Bit buckets are used to layout bitfields - - @param buckets: (C++: range64vec_t *) - @return: false if wrong type was passed +ida_typeinf.tinfo_t.get_bit_buckets(self, buckets: "range64vec_t") -> bool + ::BT_STRUCT: get bit buckets Bit buckets are used to layout bitfields + + @returns false if wrong type was passed -ida_typeinf.tinfo_t.get_bitfield_details (method) - get_bitfield_details(self, bi) -> bool +ida_typeinf.tinfo_t.get_bitfield_details(self, bi: "bitfield_type_data_t") -> bool Get the bitfield specific info. - - @param bi: (C++: bitfield_type_data_t *) -ida_typeinf.tinfo_t.get_declalign (method) - get_declalign(self) -> uchar +ida_typeinf.tinfo_t.get_by_edm_name(self, mname: str, til: "til_t" = None) -> "ssize_t" + Retrieve enum tinfo using enum member name + + @param mname: enum type member name + @param til: type library + @returns member index, otherwise returns -1. If the function fails, THIS object becomes empty. + +ida_typeinf.tinfo_t.get_declalign(self) -> "uchar" Get declared alignment of the type. -ida_typeinf.tinfo_t.get_decltype (method) - get_decltype(self) -> type_t - Get declared type (without resolving type references; they are returned as is). - Obviously this is a very fast function and should be used instead of - get_realtype() if possible. Please note that for typerefs this function will - return BTF_TYPEDEF. To determine if a typeref is a typedef, use is_typedef() +ida_typeinf.tinfo_t.get_decltype(self) -> "type_t" + Get declared type (without resolving type references; they are returned as is). Obviously this is a very fast function and should be used instead of get_realtype() if possible. Please note that for typerefs this function will return BTF_TYPEDEF. To determine if a typeref is a typedef, use is_typedef() + -ida_typeinf.tinfo_t.get_edm (method) - get_edm(self, edm, idx) -> tinfo_code_t - Get enum member +ida_typeinf.tinfo_t.get_edm(self, *args) -> Tuple[int, "edm_t"] + Retrieve an enumerator with either the specified name + or the specified index, in the specified tinfo_t object. - @param edm: (C++: edm_t *) enum type member - @param idx: (C++: size_t) enum member index - -ida_typeinf.tinfo_t.get_edm_by_tid (method) - get_edm_by_tid(self, edm, tid) -> ssize_t + This function has the following signatures: - @param edm: edm_t * - @param tid: tid_t + 1. get_edm(index: int) + 2. get_edm(name: str) + + @param index an enumerator index (1st form). + @param name an enumerator name (2nd form). + @return a tuple (int, edm_t), or (-1, None) if member not found -ida_typeinf.tinfo_t.get_enum_base_type (method) - get_enum_base_type(self) -> type_t - Get enum base type (convert enum to integer type) Returns BT_UNK if failed to - convert +ida_typeinf.tinfo_t.get_edm_by_tid(self, edm: "edm_t", tid: "tid_t") -> "ssize_t" -ida_typeinf.tinfo_t.get_enum_details (method) - get_enum_details(self, ei) -> bool +ida_typeinf.tinfo_t.get_edm_by_value(self, value: int, bmask: int = DEFMASK64, serial: int = 0) -> Tuple[int, "edm_t"] + Retrieve an enumerator with the specified value, + in the specified tinfo_t object. + + @param value the enumerator value + @return a tuple (int, edm_t), or (-1, None) if member not found + +ida_typeinf.tinfo_t.get_edm_tid(self, idx: "size_t") -> "tid_t" + Get enum member TID + + @param idx: enum member index + @returns tid or BADADDR The tid is used to collect xrefs to the member, it can be passed to xref-related functions instead of the address. + +ida_typeinf.tinfo_t.get_enum_base_type(self) -> "type_t" + Get enum base type (convert enum to integer type) Returns BT_UNK if failed to convert + + +ida_typeinf.tinfo_t.get_enum_details(self, ei: "enum_type_data_t") -> bool Get the enum specific info. - - @param ei: (C++: enum_type_data_t *) -ida_typeinf.tinfo_t.get_enum_radix (method) - get_enum_radix(self) -> int - Get enum constant radix - - @return: radix or 1 for BTE_CHAR enum_type_data_t::get_enum_radix() +ida_typeinf.tinfo_t.get_enum_nmembers(self) -> "size_t" + Get number of enum members. + + @returns BADSIZE if error -ida_typeinf.tinfo_t.get_final_element (method) - get_final_element(self) -> tinfo_t - repeat recursively: if an array, return the type of its element; else return the - type itself. +ida_typeinf.tinfo_t.get_enum_radix(self) -> int + Get enum constant radix + + @returns radix or 1 for BTE_CHAR enum_type_data_t::get_enum_radix() -ida_typeinf.tinfo_t.get_final_ordinal (method) - get_final_ordinal(self) -> uint32 +ida_typeinf.tinfo_t.get_enum_repr(self, repr: "value_repr_t") -> "tinfo_code_t" + Set the representation of enum members. + + @param repr: value_repr_t + +ida_typeinf.tinfo_t.get_enum_width(self) -> int + Get enum width + + @returns width of enum base type in bytes, 0 - unspecified, or -1 enum_type_data_t::calc_nbytes() + +ida_typeinf.tinfo_t.get_final_element(self) -> "tinfo_t" + repeat recursively: if an array, return the type of its element; else return the type itself. + +ida_typeinf.tinfo_t.get_final_ordinal(self) -> int Get final type ordinal (0 if none) -ida_typeinf.tinfo_t.get_final_type_name (method) - get_final_type_name(self) -> bool - Use in the case of typedef chain (TYPE1 -> TYPE2 -> TYPE3...TYPEn). - - @return: the name of the last type in the chain (TYPEn). if there is no chain, - returns TYPE1 +ida_typeinf.tinfo_t.get_final_type_name(self) -> bool + Use in the case of typedef chain (TYPE1 -> TYPE2 -> TYPE3...TYPEn). + + @returns the name of the last type in the chain (TYPEn). if there is no chain, returns TYPE1 -ida_typeinf.tinfo_t.get_forward_type (method) - get_forward_type(self) -> type_t - Get type of a forward declaration. For a forward declaration this function - returns its base type. In other cases it returns BT_UNK +ida_typeinf.tinfo_t.get_forward_type(self) -> "type_t" + Get type of a forward declaration. For a forward declaration this function returns its base type. In other cases it returns BT_UNK + -ida_typeinf.tinfo_t.get_func_details (method) - get_func_details(self, fi, gtd=GTD_CALC_ARGLOCS) -> bool +ida_typeinf.tinfo_t.get_frame_func(self) -> ida_idaapi.ea_t + Get function address for the frame. + +ida_typeinf.tinfo_t.get_func_details(self, fi: "func_type_data_t", gtd: "gtd_func_t" = GTD_CALC_ARGLOCS) -> bool Get only the function specific info for this tinfo_t. - - @param fi: (C++: func_type_data_t *) - @param gtd: (C++: gtd_func_t) enum gtd_func_t -ida_typeinf.tinfo_t.get_innermost_udm (method) - get_innermost_udm(self, bitoffset) -> tinfo_t - Get the innermost member at the given offset - - @param bitoffset: (C++: uint64) bit offset into the structure +ida_typeinf.tinfo_t.get_func_frame(self, pfn: "func_t const *") -> bool + Create a tinfo_t object for the function frame + + @param pfn: function + +ida_typeinf.tinfo_t.get_innermost_member_type(self, bitoffset: "uint64") -> "tinfo_t" + Get the innermost member type at the given offset + + @param bitoffset: bit offset into the structure + @retval the: innermost member type + +ida_typeinf.tinfo_t.get_innermost_udm(self, bitoffset: "uint64") -> "tinfo_t" + Get the innermost member at the given offset + + @param bitoffset: bit offset into the structure @retval udt: with the innermost member @retval empty: type if it is not a struct type or OFFSET could not be found -ida_typeinf.tinfo_t.get_methods (method) - get_methods(self, methods) -> bool +ida_typeinf.tinfo_t.get_methods(self, methods: "udtmembervec_t") -> bool + BT_COMPLEX: get a list of member functions declared in this udt. + + @returns false if no member functions exist + +ida_typeinf.tinfo_t.get_modifiers(self) -> "type_t" + +ida_typeinf.tinfo_t.get_named_type(self, *args) -> bool + This function has the following signatures: - @param BT_COMPLEX: get a list of member functions declared in this udt. - @return: false if no member functions exist - -ida_typeinf.tinfo_t.get_modifiers (method) - get_modifiers(self) -> type_t - -ida_typeinf.tinfo_t.get_named_type (method) - get_named_type(self, til, name, decl_type=BTF_TYPEDEF, resolve=True, try_ordinal=True) -> bool - Create a tinfo_t object for an existing named type. + 0. get_named_type(til: const til_t *, name: str, decl_type: type_t=BTF_TYPEDEF, resolve: bool=true, try_ordinal: bool=true) -> bool + 1. get_named_type(name: str, decl_type: type_t=BTF_TYPEDEF, resolve: bool=true, try_ordinal: bool=true) -> bool - @param til: (C++: const til_t *) type library to use - @param name: (C++: const char *) name of the type to link to - @param decl_type: (C++: type_t) if the reference was explicitly specified with the type tag - (BTF_STRUCT/BTF_UNION/BTF_ENUM) you may specify it. - the kernel will accept only the specified tag after resolving - the type. If the resolved type does not correspond to the - explicitly specified tag, the type will be considered as undefined - @param resolve: (C++: bool) true: immediately resolve the type and return success code. - @param try_ordinal: (C++: bool) true: try to replace name reference by an ordinal reference + # 0: get_named_type(til: const til_t *, name: str, decl_type: type_t=BTF_TYPEDEF, resolve: bool=true, try_ordinal: bool=true) -> bool + + Create a tinfo_t object for an existing named type. + + + # 1: get_named_type(name: str, decl_type: type_t=BTF_TYPEDEF, resolve: bool=true, try_ordinal: bool=true) -> bool -ida_typeinf.tinfo_t.get_nargs (method) - get_nargs(self) -> int +ida_typeinf.tinfo_t.get_nargs(self) -> int BT_FUNC or BT_PTR BT_FUNC: Calculate number of arguments (-1 - error) -ida_typeinf.tinfo_t.get_next_type_name (method) - get_next_type_name(self) -> bool - Use In the case of typedef chain (TYPE1 -> TYPE2 -> TYPE3...TYPEn). +ida_typeinf.tinfo_t.get_next_type_name(self) -> bool + Use In the case of typedef chain (TYPE1 -> TYPE2 -> TYPE3...TYPEn). + + @returns the name of the next type in the chain (TYPE2). if there is no chain, returns failure + +ida_typeinf.tinfo_t.get_nice_type_name(self) -> bool + Get the beautified type name. Get the referenced name and apply regular expressions from goodname.cfg to beautify the name + + +ida_typeinf.tinfo_t.get_nth_arg(self, n: int) -> "tinfo_t" + BT_FUNC or BT_PTR BT_FUNC: Get type of n-th arg (-1 means return type, see get_rettype()) + +ida_typeinf.tinfo_t.get_numbered_type(self, *args) -> bool + This function has the following signatures: - @return: the name of the next type in the chain (TYPE2). if there is no chain, - returns failure - -ida_typeinf.tinfo_t.get_nice_type_name (method) - get_nice_type_name(self) -> bool - Get the beautified type name. Get the referenced name and apply regular - expressions from goodname.cfg to beautify the name - -ida_typeinf.tinfo_t.get_nth_arg (method) - get_nth_arg(self, n) -> tinfo_t - BT_FUNC or BT_PTR BT_FUNC: Get type of n-th arg (-1 means return type, see - get_rettype()) + 0. get_numbered_type(til: const til_t *, ordinal: int, decl_type: type_t=BTF_TYPEDEF, resolve: bool=true) -> bool + 1. get_numbered_type(ordinal: int, decl_type: type_t=BTF_TYPEDEF, resolve: bool=true) -> bool - @param n: (C++: int) - -ida_typeinf.tinfo_t.get_numbered_type (method) - get_numbered_type(self, til, ordinal, decl_type=BTF_TYPEDEF, resolve=True) -> bool - Create a tinfo_t object for an existing ordinal type. + # 0: get_numbered_type(til: const til_t *, ordinal: int, decl_type: type_t=BTF_TYPEDEF, resolve: bool=true) -> bool - @param til: (C++: const til_t *) type library to use - @param ordinal: (C++: uint32) number of the type to link to - @param decl_type: (C++: type_t) if the reference was explicitly specified with the type tag - (BTF_STRUCT/BTF_UNION/BTF_ENUM) you may specify it. the kernel - will accept only the specified tag after resolving the type. - If the resolved type does not correspond to the explicitly - specified tag, the type will be considered as undefined - @param resolve: (C++: bool) true: immediately resolve the type and return success code + Create a tinfo_t object for an existing ordinal type. + + + # 1: get_numbered_type(ordinal: int, decl_type: type_t=BTF_TYPEDEF, resolve: bool=true) -> bool -ida_typeinf.tinfo_t.get_onemember_type (method) - get_onemember_type(self) -> tinfo_t +ida_typeinf.tinfo_t.get_onemember_type(self) -> "tinfo_t" For objects consisting of one member entirely: return type of the member. -ida_typeinf.tinfo_t.get_ordinal (method) - get_ordinal(self) -> uint32 +ida_typeinf.tinfo_t.get_ordinal(self) -> int Get type ordinal (only if the type was created as a numbered type, 0 if none) -ida_typeinf.tinfo_t.get_pointed_object (method) - get_pointed_object(self) -> tinfo_t +ida_typeinf.tinfo_t.get_pointed_object(self) -> "tinfo_t" + BT_PTR: get type of pointed object. If the current type is not a pointer, return empty type info. See also get_ptrarr_object() and remove_pointer() + -ida_typeinf.tinfo_t.get_ptr_details (method) - get_ptr_details(self, pi) -> bool +ida_typeinf.tinfo_t.get_ptr_details(self, pi: "ptr_type_data_t") -> bool Get the pointer info. - - @param pi: (C++: ptr_type_data_t *) -ida_typeinf.tinfo_t.get_ptrarr_object (method) - get_ptrarr_object(self) -> tinfo_t - BT_PTR & BT_ARRAY: get the pointed object or array element. If the current type - is not a pointer or array, return empty type info. +ida_typeinf.tinfo_t.get_ptrarr_object(self) -> "tinfo_t" + BT_PTR & BT_ARRAY: get the pointed object or array element. If the current type is not a pointer or array, return empty type info. + -ida_typeinf.tinfo_t.get_ptrarr_objsize (method) - get_ptrarr_objsize(self) -> int - BT_PTR & BT_ARRAY: get size of pointed object or array element. On error returns - -1 +ida_typeinf.tinfo_t.get_ptrarr_objsize(self) -> int + BT_PTR & BT_ARRAY: get size of pointed object or array element. On error returns -1 -ida_typeinf.tinfo_t.get_realtype (method) - get_realtype(self, full=False) -> type_t +ida_typeinf.tinfo_t.get_realtype(self, full: bool = False) -> "type_t" Get the resolved base type. Deserialization options: - * if full=true, the referenced type will be deserialized fully, this may not - always be desirable (slows down things) - * if full=false, we just return the base type, the referenced type will be - resolved again later if necessary (this may lead to multiple resolvings of the - same type) imho full=false is a better approach because it does not perform - unnecessary actions just in case. however, in some cases the caller knows that - it is very likely that full type info will be required. in those cases full=true - makes sense + * if full=true, the referenced type will be deserialized fully, this may not always be desirable (slows down things) + * if full=false, we just return the base type, the referenced type will be resolved again later if necessary (this may lead to multiple resolvings of the same type) imho full=false is a better approach because it does not perform unnecessary actions just in case. however, in some cases the caller knows that it is very likely that full type info will be required. in those cases full=true makes sense - @param full: (C++: bool) + + -ida_typeinf.tinfo_t.get_rettype (method) - get_rettype(self) -> tinfo_t +ida_typeinf.tinfo_t.get_rettype(self) -> "tinfo_t" BT_FUNC or BT_PTR BT_FUNC: Get the function's return type -ida_typeinf.tinfo_t.get_sign (method) - get_sign(self) -> type_sign_t +ida_typeinf.tinfo_t.get_sign(self) -> "type_sign_t" Get type sign. -ida_typeinf.tinfo_t.get_size (method) - get_size(self, p_effalign=None, gts_code=0) -> size_t - Get the type size in bytes. - - @param p_effalign: (C++: uint32 *) buffer for the alignment value - @param gts_code: (C++: int) combination of GTS_... constants - @return: BADSIZE in case of problems +ida_typeinf.tinfo_t.get_size(self, p_effalign: "uint32 *" = None, gts_code: int = 0) -> "size_t" + Get the type size in bytes. + + @param p_effalign: buffer for the alignment value + @param gts_code: combination of GTS_... constants + @returns BADSIZE in case of problems -ida_typeinf.tinfo_t.get_stock (method) - get_stock(id) -> tinfo_t - Get stock type information. This function can be used to get tinfo_t for some - common types. The same tinfo_t will be returned for the same id, thus saving - memory and increasing the speed Please note that retrieving the STI_SIZE_T or - STI_SSIZE_T stock type, will also have the side-effect of adding that type to - the 'idati' TIL, under the well-known name 'size_t' or 'ssize_t' (respectively). - The same is valid for STI_COMPLEX64 and STI_COMPLEX64 stock types with names - 'complex64_t' and 'complex128_t' (respectively). - - @param id: (C++: stock_type_id_t) enum stock_type_id_t +ida_typeinf.tinfo_t.get_stkvar(self, insn: "insn_t const &", x: "op_t const", v: int) -> "ssize_t" + Retrieve frame tinfo for a stack variable + + @param insn: the instruction + @param x: reference to instruction operand, may be nullptr + @param v: immediate value in the operand (usually x.addr) + @returns returns the member index, otherwise returns -1. if the function fails, THIS object becomes empty. -ida_typeinf.tinfo_t.get_tid (method) - get_tid(self) -> tid_t - Get the type tid Each type in the local type library has a so-called `tid` - associated with it. The tid is used to collect xrefs to the type. The tid is - created when the type is created in the local type library and does not change - afterwards. It can be passed to xref-related functions instead of the address. - - @return: tid or BADADDR - @note: types that do not come from a type library (that exist only in the - memory) can not have a tid. +ida_typeinf.tinfo_t.get_stock(id: "stock_type_id_t") -> "tinfo_t" + Get stock type information. This function can be used to get tinfo_t for some common types. The same tinfo_t will be returned for the same id, thus saving memory and increasing the speed Please note that retrieving the STI_SIZE_T or STI_SSIZE_T stock type, will also have the side-effect of adding that type to the 'idati' TIL, under the well-known name 'size_t' or 'ssize_t' (respectively). The same is valid for STI_COMPLEX64 and STI_COMPLEX64 stock types with names 'complex64_t' and 'complex128_t' (respectively). + -ida_typeinf.tinfo_t.get_til (method) - get_til(self) -> til_t +ida_typeinf.tinfo_t.get_tid(self) -> "tid_t" + Get the type tid Each type in the local type library has a so-called `tid` associated with it. The tid is used to collect xrefs to the type. The tid is created when the type is created in the local type library and does not change afterwards. It can be passed to xref-related functions instead of the address. + + @returns tid or BADADDR + +ida_typeinf.tinfo_t.get_til(self) -> "til_t *" Get the type library for tinfo_t. -ida_typeinf.tinfo_t.get_type_by_edm_name (method) - get_type_by_edm_name(self, mname, til=None) -> bool - Retrieve enum tinfo using enum member name - - @param mname: (C++: const char *) enum type member name - @param til: (C++: til_t *) type library - @return: success If the function fails, THIS object becomes empty. +ida_typeinf.tinfo_t.get_type_by_tid(self, tid: "tid_t") -> bool -ida_typeinf.tinfo_t.get_type_by_tid (method) - get_type_by_tid(self, tid) -> bool - - @param tid: tid_t +ida_typeinf.tinfo_t.get_type_cmt(self) -> int + Get type comment + + @returns 0-failed, 1-returned regular comment, 2-returned repeatable comment -ida_typeinf.tinfo_t.get_type_cmt (method) - get_type_cmt(self) -> int - Get type comment - - @return: 0-failed, 1-returned regular comment, 2-returned repeatable comment +ida_typeinf.tinfo_t.get_type_name(self) -> bool + Does a type refer to a name?. If yes, fill the provided buffer with the type name and return true. Names are returned for numbered types too: either a user-defined nice name or, if a user-provided name does not exist, an ordinal name (like #xx, see create_numbered_type_name()). + -ida_typeinf.tinfo_t.get_type_name (method) - get_type_name(self) -> bool - Does a type refer to a name?. If yes, fill the provided buffer with the type - name and return true. Names are returned for numbered types too: either a user- - defined nice name or, if a user-provided name does not exist, an ordinal name - (like #xx, see create_numbered_type_name()). - -ida_typeinf.tinfo_t.get_type_rptcmt (method) - get_type_rptcmt(self) -> bool +ida_typeinf.tinfo_t.get_type_rptcmt(self) -> bool Get type comment only if it is repeatable. -ida_typeinf.tinfo_t.get_udm_by_tid (method) - get_udm_by_tid(self, udm, tid) -> ssize_t - Retrive tinfo using type TID or struct/enum member MID +ida_typeinf.tinfo_t.get_udm(self, *args) -> Union[Tuple[int, "udm_t"], Tuple[None, None]] + Retrieve a structure/union member with either the specified name + or the specified index, in the specified tinfo_t object. - @param udm: (C++: udm_t *) [out]: place to save the found member to, may be nullptr - @param tid: (C++: tid_t) tid can denote a type tid or a member tid. - @return: if a member tid was specified, returns the member index, otherwise - returns -1. if the function fails, THIS object becomes empty. - -ida_typeinf.tinfo_t.get_udm_tid (method) - get_udm_tid(self, idx) -> tid_t - Get udt member TID + This function has the following signatures: - @param idx: (C++: size_t) the index of udt the member - @return: tid or BADADDR The tid is used to collect xrefs to the member, it can - be passed to xref-related functions instead of the address. + 1. get_udm(index: int) + 2. get_udm(name: str) + + @param index a member index (1st form) + @param name a member name (2nd form) + @return a tuple (int, udm_t), or (-1, None) if member not found -ida_typeinf.tinfo_t.get_udt_details (method) - get_udt_details(self, udt, gtd=GTD_CALC_LAYOUT) -> bool +ida_typeinf.tinfo_t.get_udm_by_offset(self, offset: int) + Retrieve a structure/union member with the specified offset, + in the specified tinfo_t object. + + @param offset the member offset + @return a tuple (int, udm_t), or (-1, None) if member not found + +ida_typeinf.tinfo_t.get_udm_by_tid(self, udm: "udm_t", tid: "tid_t") -> "ssize_t" + +ida_typeinf.tinfo_t.get_udm_tid(self, idx: "size_t") -> "tid_t" + Get udt member TID + + @param idx: the index of udt the member + @returns tid or BADADDR The tid is used to collect xrefs to the member, it can be passed to xref-related functions instead of the address. + +ida_typeinf.tinfo_t.get_udt_details(self, udt: "udt_type_data_t", gtd: "gtd_udt_t" = GTD_CALC_LAYOUT) -> bool Get the udt specific info. - - @param udt: (C++: udt_type_data_t *) - @param gtd: (C++: gtd_udt_t) enum gtd_udt_t -ida_typeinf.tinfo_t.get_udt_nmembers (method) - get_udt_nmembers(self) -> int +ida_typeinf.tinfo_t.get_udt_nmembers(self) -> int Get number of udt members. -1-error. -ida_typeinf.tinfo_t.get_unpadded_size (method) - get_unpadded_size(self) -> size_t - Get the type size in bytes without the final padding, in bytes. For some UDTs - get_unpadded_size() != get_size() +ida_typeinf.tinfo_t.get_unpadded_size(self) -> "size_t" + Get the type size in bytes without the final padding, in bytes. For some UDTs get_unpadded_size() != get_size() + -ida_typeinf.tinfo_t.has_details (method) - has_details(self) -> bool +ida_typeinf.tinfo_t.has_details(self) -> bool Does this type refer to a nontrivial type? -ida_typeinf.tinfo_t.has_union (method) - has_union(self) -> bool +ida_typeinf.tinfo_t.has_union(self) -> bool Has a member of type "union"? -ida_typeinf.tinfo_t.has_vftable (method) - has_vftable(self) -> bool +ida_typeinf.tinfo_t.has_vftable(self) -> bool Has a vftable? -ida_typeinf.tinfo_t.is_aliased (method) - is_aliased(self) -> bool +ida_typeinf.tinfo_t.is_aliased(self) -> bool -ida_typeinf.tinfo_t.is_anonymous_udt (method) - is_anonymous_udt(self) -> bool - Is an anonymous struct/union? We assume that types with names are anonymous if - the name starts with $ +ida_typeinf.tinfo_t.is_anonymous_udt(self) -> bool + Is an anonymous struct/union? We assume that types with names are anonymous if the name starts with $ + -ida_typeinf.tinfo_t.is_arithmetic (method) - is_arithmetic(self) -> bool +ida_typeinf.tinfo_t.is_arithmetic(self) -> bool is_type_arithmetic(get_realtype()) -ida_typeinf.tinfo_t.is_array (method) - is_array(self) -> bool +ida_typeinf.tinfo_t.is_array(self) -> bool is_type_array(get_realtype()) -ida_typeinf.tinfo_t.is_bitfield (method) - is_bitfield(self) -> bool +ida_typeinf.tinfo_t.is_bitfield(self) -> bool is_type_bitfld(get_realtype()) -ida_typeinf.tinfo_t.is_bitmask_enum (method) - is_bitmask_enum(self) -> bool - Is bitmask enum? - - @return: true for bitmask enum and false in other cases - enum_type_data_t::is_bf() +ida_typeinf.tinfo_t.is_bitmask_enum(self) -> bool + Is bitmask enum? + + @returns true for bitmask enum and false in other cases enum_type_data_t::is_bf() -ida_typeinf.tinfo_t.is_bool (method) - is_bool(self) -> bool +ida_typeinf.tinfo_t.is_bool(self) -> bool is_type_bool(get_realtype()) -ida_typeinf.tinfo_t.is_castable_to (method) - is_castable_to(self, target) -> bool - - @param target: tinfo_t const & +ida_typeinf.tinfo_t.is_castable_to(self, target: "tinfo_t") -> bool -ida_typeinf.tinfo_t.is_char (method) - is_char(self) -> bool +ida_typeinf.tinfo_t.is_char(self) -> bool is_type_char(get_realtype()) -ida_typeinf.tinfo_t.is_complex (method) - is_complex(self) -> bool +ida_typeinf.tinfo_t.is_complex(self) -> bool is_type_complex(get_realtype()) -ida_typeinf.tinfo_t.is_const (method) - is_const(self) -> bool +ida_typeinf.tinfo_t.is_const(self) -> bool is_type_const(get_realtype()) -ida_typeinf.tinfo_t.is_correct (method) - is_correct(self) -> bool - Is the type object correct?. It is possible to create incorrect types. For - example, we can define a function that returns an enum and then delete the enum - type. If this function returns false, the type should not be used in - disassembly. Please note that this function does not verify all involved types: - for example, pointers to undefined types are permitted. +ida_typeinf.tinfo_t.is_correct(self) -> bool + Is the type object correct?. It is possible to create incorrect types. For example, we can define a function that returns an enum and then delete the enum type. If this function returns false, the type should not be used in disassembly. Please note that this function does not verify all involved types: for example, pointers to undefined types are permitted. + -ida_typeinf.tinfo_t.is_decl_array (method) - is_decl_array(self) -> bool +ida_typeinf.tinfo_t.is_decl_array(self) -> bool is_type_array(get_decltype()) -ida_typeinf.tinfo_t.is_decl_bitfield (method) - is_decl_bitfield(self) -> bool +ida_typeinf.tinfo_t.is_decl_bitfield(self) -> bool is_type_bitfld(get_decltype()) -ida_typeinf.tinfo_t.is_decl_bool (method) - is_decl_bool(self) -> bool +ida_typeinf.tinfo_t.is_decl_bool(self) -> bool is_type_bool(get_decltype()) -ida_typeinf.tinfo_t.is_decl_char (method) - is_decl_char(self) -> bool +ida_typeinf.tinfo_t.is_decl_char(self) -> bool is_type_char(get_decltype()) -ida_typeinf.tinfo_t.is_decl_complex (method) - is_decl_complex(self) -> bool +ida_typeinf.tinfo_t.is_decl_complex(self) -> bool is_type_complex(get_decltype()) -ida_typeinf.tinfo_t.is_decl_const (method) - is_decl_const(self) -> bool +ida_typeinf.tinfo_t.is_decl_const(self) -> bool is_type_const(get_decltype()) -ida_typeinf.tinfo_t.is_decl_double (method) - is_decl_double(self) -> bool +ida_typeinf.tinfo_t.is_decl_double(self) -> bool is_type_double(get_decltype()) -ida_typeinf.tinfo_t.is_decl_enum (method) - is_decl_enum(self) -> bool +ida_typeinf.tinfo_t.is_decl_enum(self) -> bool is_type_enum(get_decltype()) -ida_typeinf.tinfo_t.is_decl_float (method) - is_decl_float(self) -> bool +ida_typeinf.tinfo_t.is_decl_float(self) -> bool is_type_float(get_decltype()) -ida_typeinf.tinfo_t.is_decl_floating (method) - is_decl_floating(self) -> bool +ida_typeinf.tinfo_t.is_decl_floating(self) -> bool is_type_floating(get_decltype()) -ida_typeinf.tinfo_t.is_decl_func (method) - is_decl_func(self) -> bool +ida_typeinf.tinfo_t.is_decl_func(self) -> bool is_type_func(get_decltype()) -ida_typeinf.tinfo_t.is_decl_int (method) - is_decl_int(self) -> bool +ida_typeinf.tinfo_t.is_decl_int(self) -> bool is_type_int(get_decltype()) -ida_typeinf.tinfo_t.is_decl_int128 (method) - is_decl_int128(self) -> bool +ida_typeinf.tinfo_t.is_decl_int128(self) -> bool is_type_int128(get_decltype()) -ida_typeinf.tinfo_t.is_decl_int16 (method) - is_decl_int16(self) -> bool +ida_typeinf.tinfo_t.is_decl_int16(self) -> bool is_type_int16(get_decltype()) -ida_typeinf.tinfo_t.is_decl_int32 (method) - is_decl_int32(self) -> bool +ida_typeinf.tinfo_t.is_decl_int32(self) -> bool is_type_int32(get_decltype()) -ida_typeinf.tinfo_t.is_decl_int64 (method) - is_decl_int64(self) -> bool +ida_typeinf.tinfo_t.is_decl_int64(self) -> bool is_type_int64(get_decltype()) -ida_typeinf.tinfo_t.is_decl_last (method) - is_decl_last(self) -> bool +ida_typeinf.tinfo_t.is_decl_last(self) -> bool is_typeid_last(get_decltype()) -ida_typeinf.tinfo_t.is_decl_ldouble (method) - is_decl_ldouble(self) -> bool +ida_typeinf.tinfo_t.is_decl_ldouble(self) -> bool is_type_ldouble(get_decltype()) -ida_typeinf.tinfo_t.is_decl_paf (method) - is_decl_paf(self) -> bool +ida_typeinf.tinfo_t.is_decl_paf(self) -> bool is_type_paf(get_decltype()) -ida_typeinf.tinfo_t.is_decl_partial (method) - is_decl_partial(self) -> bool +ida_typeinf.tinfo_t.is_decl_partial(self) -> bool is_type_partial(get_decltype()) -ida_typeinf.tinfo_t.is_decl_ptr (method) - is_decl_ptr(self) -> bool +ida_typeinf.tinfo_t.is_decl_ptr(self) -> bool is_type_ptr(get_decltype()) -ida_typeinf.tinfo_t.is_decl_struct (method) - is_decl_struct(self) -> bool +ida_typeinf.tinfo_t.is_decl_struct(self) -> bool is_type_struct(get_decltype()) -ida_typeinf.tinfo_t.is_decl_sue (method) - is_decl_sue(self) -> bool +ida_typeinf.tinfo_t.is_decl_sue(self) -> bool is_type_sue(get_decltype()) -ida_typeinf.tinfo_t.is_decl_tbyte (method) - is_decl_tbyte(self) -> bool +ida_typeinf.tinfo_t.is_decl_tbyte(self) -> bool is_type_tbyte(get_decltype()) -ida_typeinf.tinfo_t.is_decl_typedef (method) - is_decl_typedef(self) -> bool +ida_typeinf.tinfo_t.is_decl_typedef(self) -> bool is_type_typedef(get_decltype()) -ida_typeinf.tinfo_t.is_decl_uchar (method) - is_decl_uchar(self) -> bool +ida_typeinf.tinfo_t.is_decl_uchar(self) -> bool is_type_uchar(get_decltype()) -ida_typeinf.tinfo_t.is_decl_udt (method) - is_decl_udt(self) -> bool +ida_typeinf.tinfo_t.is_decl_udt(self) -> bool is_type_struni(get_decltype()) -ida_typeinf.tinfo_t.is_decl_uint (method) - is_decl_uint(self) -> bool +ida_typeinf.tinfo_t.is_decl_uint(self) -> bool is_type_uint(get_decltype()) -ida_typeinf.tinfo_t.is_decl_uint128 (method) - is_decl_uint128(self) -> bool +ida_typeinf.tinfo_t.is_decl_uint128(self) -> bool is_type_uint128(get_decltype()) -ida_typeinf.tinfo_t.is_decl_uint16 (method) - is_decl_uint16(self) -> bool +ida_typeinf.tinfo_t.is_decl_uint16(self) -> bool is_type_uint16(get_decltype()) -ida_typeinf.tinfo_t.is_decl_uint32 (method) - is_decl_uint32(self) -> bool +ida_typeinf.tinfo_t.is_decl_uint32(self) -> bool is_type_uint32(get_decltype()) -ida_typeinf.tinfo_t.is_decl_uint64 (method) - is_decl_uint64(self) -> bool +ida_typeinf.tinfo_t.is_decl_uint64(self) -> bool is_type_uint64(get_decltype()) -ida_typeinf.tinfo_t.is_decl_union (method) - is_decl_union(self) -> bool +ida_typeinf.tinfo_t.is_decl_union(self) -> bool is_type_union(get_decltype()) -ida_typeinf.tinfo_t.is_decl_unknown (method) - is_decl_unknown(self) -> bool +ida_typeinf.tinfo_t.is_decl_unknown(self) -> bool is_type_unknown(get_decltype()) -ida_typeinf.tinfo_t.is_decl_void (method) - is_decl_void(self) -> bool +ida_typeinf.tinfo_t.is_decl_void(self) -> bool is_type_void(get_decltype()) -ida_typeinf.tinfo_t.is_decl_volatile (method) - is_decl_volatile(self) -> bool +ida_typeinf.tinfo_t.is_decl_volatile(self) -> bool is_type_volatile(get_decltype()) -ida_typeinf.tinfo_t.is_double (method) - is_double(self) -> bool +ida_typeinf.tinfo_t.is_double(self) -> bool is_type_double(get_realtype()) -ida_typeinf.tinfo_t.is_empty_udt (method) - is_empty_udt(self) -> bool +ida_typeinf.tinfo_t.is_empty_enum(self) -> bool + Is an empty enum? (has no constants) + +ida_typeinf.tinfo_t.is_empty_udt(self) -> bool Is an empty struct/union? (has no fields) -ida_typeinf.tinfo_t.is_enum (method) - is_enum(self) -> bool +ida_typeinf.tinfo_t.is_enum(self) -> bool is_type_enum(get_realtype()) -ida_typeinf.tinfo_t.is_ext_arithmetic (method) - is_ext_arithmetic(self) -> bool - is_type_ext_arithmetic(get_realtype()) +ida_typeinf.tinfo_t.is_ext_arithmetic(self) -> bool + is_type_ext_arithmetic(get_realtype()) + -ida_typeinf.tinfo_t.is_ext_integral (method) - is_ext_integral(self) -> bool +ida_typeinf.tinfo_t.is_ext_integral(self) -> bool is_type_ext_integral(get_realtype()) -ida_typeinf.tinfo_t.is_float (method) - is_float(self) -> bool +ida_typeinf.tinfo_t.is_fixed_struct(self) -> bool + Is a structure with fixed offsets? + +ida_typeinf.tinfo_t.is_float(self) -> bool is_type_float(get_realtype()) -ida_typeinf.tinfo_t.is_floating (method) - is_floating(self) -> bool +ida_typeinf.tinfo_t.is_floating(self) -> bool is_type_floating(get_realtype()) -ida_typeinf.tinfo_t.is_forward_decl (method) - is_forward_decl(self) -> bool - Is this a forward declaration?. Forward declarations are placeholders: the type - definition does not exist +ida_typeinf.tinfo_t.is_forward_decl(self) -> bool + Is this a forward declaration?. Forward declarations are placeholders: the type definition does not exist + -ida_typeinf.tinfo_t.is_forward_enum (method) - is_forward_enum(self) -> bool +ida_typeinf.tinfo_t.is_forward_enum(self) -> bool -ida_typeinf.tinfo_t.is_forward_struct (method) - is_forward_struct(self) -> bool +ida_typeinf.tinfo_t.is_forward_struct(self) -> bool -ida_typeinf.tinfo_t.is_forward_union (method) - is_forward_union(self) -> bool +ida_typeinf.tinfo_t.is_forward_union(self) -> bool -ida_typeinf.tinfo_t.is_from_subtil (method) - is_from_subtil(self) -> bool - Was the named type found in some base type library (not the top level type - library)?. If yes, it usually means that the type comes from some loaded type - library, not the local type library for the database +ida_typeinf.tinfo_t.is_frame(self) -> bool + Is a function frame? -ida_typeinf.tinfo_t.is_func (method) - is_func(self) -> bool +ida_typeinf.tinfo_t.is_from_subtil(self) -> bool + Was the named type found in some base type library (not the top level type library)?. If yes, it usually means that the type comes from some loaded type library, not the local type library for the database + + +ida_typeinf.tinfo_t.is_func(self) -> bool is_type_func(get_realtype()) -ida_typeinf.tinfo_t.is_funcptr (method) - is_funcptr(self) -> bool +ida_typeinf.tinfo_t.is_funcptr(self) -> bool Is this pointer to a function? -ida_typeinf.tinfo_t.is_high_func (method) - is_high_func(self) -> bool +ida_typeinf.tinfo_t.is_high_func(self) -> bool + BT_FUNC: Is high level type? -ida_typeinf.tinfo_t.is_int (method) - is_int(self) -> bool +ida_typeinf.tinfo_t.is_int(self) -> bool is_type_int(get_realtype()) -ida_typeinf.tinfo_t.is_int128 (method) - is_int128(self) -> bool +ida_typeinf.tinfo_t.is_int128(self) -> bool is_type_int128(get_realtype()) -ida_typeinf.tinfo_t.is_int16 (method) - is_int16(self) -> bool +ida_typeinf.tinfo_t.is_int16(self) -> bool is_type_int16(get_realtype()) -ida_typeinf.tinfo_t.is_int32 (method) - is_int32(self) -> bool +ida_typeinf.tinfo_t.is_int32(self) -> bool is_type_int32(get_realtype()) -ida_typeinf.tinfo_t.is_int64 (method) - is_int64(self) -> bool +ida_typeinf.tinfo_t.is_int64(self) -> bool is_type_int64(get_realtype()) -ida_typeinf.tinfo_t.is_integral (method) - is_integral(self) -> bool +ida_typeinf.tinfo_t.is_integral(self) -> bool is_type_integral(get_realtype()) -ida_typeinf.tinfo_t.is_ldouble (method) - is_ldouble(self) -> bool +ida_typeinf.tinfo_t.is_ldouble(self) -> bool is_type_ldouble(get_realtype()) -ida_typeinf.tinfo_t.is_manually_castable_to (method) - is_manually_castable_to(self, target) -> bool - - @param target: tinfo_t const & +ida_typeinf.tinfo_t.is_manually_castable_to(self, target: "tinfo_t") -> bool -ida_typeinf.tinfo_t.is_one_fpval (method) - is_one_fpval(self) -> bool +ida_typeinf.tinfo_t.is_one_fpval(self) -> bool Floating value or an object consisting of one floating member entirely. -ida_typeinf.tinfo_t.is_paf (method) - is_paf(self) -> bool +ida_typeinf.tinfo_t.is_paf(self) -> bool is_type_paf(get_realtype()) -ida_typeinf.tinfo_t.is_partial (method) - is_partial(self) -> bool +ida_typeinf.tinfo_t.is_partial(self) -> bool is_type_partial(get_realtype()) -ida_typeinf.tinfo_t.is_ptr (method) - is_ptr(self) -> bool +ida_typeinf.tinfo_t.is_ptr(self) -> bool is_type_ptr(get_realtype()) -ida_typeinf.tinfo_t.is_ptr_or_array (method) - is_ptr_or_array(self) -> bool +ida_typeinf.tinfo_t.is_ptr_or_array(self) -> bool is_type_ptr_or_array(get_realtype()) -ida_typeinf.tinfo_t.is_purging_cc (method) - is_purging_cc(self) -> bool +ida_typeinf.tinfo_t.is_punknown(self) -> bool + Is "_UNKNOWN *"?. This function does not check the pointer attributes and type modifiers. + +ida_typeinf.tinfo_t.is_purging_cc(self) -> bool is_purging_cc(get_cc()) -ida_typeinf.tinfo_t.is_pvoid (method) - is_pvoid(self) -> bool - Is "void *"?. This function does not check the pointer attributes and type - modifiers. +ida_typeinf.tinfo_t.is_pvoid(self) -> bool + Is "void *"?. This function does not check the pointer attributes and type modifiers. -ida_typeinf.tinfo_t.is_scalar (method) - is_scalar(self) -> bool +ida_typeinf.tinfo_t.is_scalar(self) -> bool Does the type represent a single number? -ida_typeinf.tinfo_t.is_shifted_ptr (method) - is_shifted_ptr(self) -> bool +ida_typeinf.tinfo_t.is_shifted_ptr(self) -> bool Is a shifted pointer? -ida_typeinf.tinfo_t.is_signed (method) - is_signed(self) -> bool +ida_typeinf.tinfo_t.is_signed(self) -> bool Is this a signed type? -ida_typeinf.tinfo_t.is_small_udt (method) - is_small_udt(self) -> bool +ida_typeinf.tinfo_t.is_small_udt(self) -> bool Is a small udt? (can fit a register or a pair of registers) -ida_typeinf.tinfo_t.is_sse_type (method) - is_sse_type(self) -> bool +ida_typeinf.tinfo_t.is_sse_type(self) -> bool Is a SSE vector type? -ida_typeinf.tinfo_t.is_struct (method) - is_struct(self) -> bool +ida_typeinf.tinfo_t.is_struct(self) -> bool is_type_struct(get_realtype()) -ida_typeinf.tinfo_t.is_sue (method) - is_sue(self) -> bool +ida_typeinf.tinfo_t.is_sue(self) -> bool is_type_sue(get_realtype()) -ida_typeinf.tinfo_t.is_tbyte (method) - is_tbyte(self) -> bool +ida_typeinf.tinfo_t.is_tbyte(self) -> bool is_type_tbyte(get_realtype()) -ida_typeinf.tinfo_t.is_typedef (method) - is_typedef(self) -> bool - Is this a typedef?. This function will return true for a reference to a local - type that is declared as a typedef. +ida_typeinf.tinfo_t.is_typedef(self) -> bool + Is this a typedef?. This function will return true for a reference to a local type that is declared as a typedef. + -ida_typeinf.tinfo_t.is_typeref (method) - is_typeref(self) -> bool +ida_typeinf.tinfo_t.is_typeref(self) -> bool Is this type a type reference?. -ida_typeinf.tinfo_t.is_uchar (method) - is_uchar(self) -> bool +ida_typeinf.tinfo_t.is_uchar(self) -> bool is_type_uchar(get_realtype()) -ida_typeinf.tinfo_t.is_udt (method) - is_udt(self) -> bool +ida_typeinf.tinfo_t.is_udm_by_til(self, idx: "size_t") -> bool + Was the member created due to the type system + + @param idx: index of the member + +ida_typeinf.tinfo_t.is_udt(self) -> bool is_type_struni(get_realtype()) -ida_typeinf.tinfo_t.is_uint (method) - is_uint(self) -> bool +ida_typeinf.tinfo_t.is_uint(self) -> bool is_type_uint(get_realtype()) -ida_typeinf.tinfo_t.is_uint128 (method) - is_uint128(self) -> bool +ida_typeinf.tinfo_t.is_uint128(self) -> bool is_type_uint128(get_realtype()) -ida_typeinf.tinfo_t.is_uint16 (method) - is_uint16(self) -> bool +ida_typeinf.tinfo_t.is_uint16(self) -> bool is_type_uint16(get_realtype()) -ida_typeinf.tinfo_t.is_uint32 (method) - is_uint32(self) -> bool +ida_typeinf.tinfo_t.is_uint32(self) -> bool is_type_uint32(get_realtype()) -ida_typeinf.tinfo_t.is_uint64 (method) - is_uint64(self) -> bool +ida_typeinf.tinfo_t.is_uint64(self) -> bool is_type_uint64(get_realtype()) -ida_typeinf.tinfo_t.is_union (method) - is_union(self) -> bool +ida_typeinf.tinfo_t.is_union(self) -> bool is_type_union(get_realtype()) -ida_typeinf.tinfo_t.is_unknown (method) - is_unknown(self) -> bool +ida_typeinf.tinfo_t.is_unknown(self) -> bool is_type_unknown(get_realtype()) -ida_typeinf.tinfo_t.is_unsigned (method) - is_unsigned(self) -> bool +ida_typeinf.tinfo_t.is_unsigned(self) -> bool Is this an unsigned type? -ida_typeinf.tinfo_t.is_user_cc (method) - is_user_cc(self) -> bool +ida_typeinf.tinfo_t.is_user_cc(self) -> bool is_user_cc(get_cc()) -ida_typeinf.tinfo_t.is_vararg_cc (method) - is_vararg_cc(self) -> bool +ida_typeinf.tinfo_t.is_vararg_cc(self) -> bool is_vararg_cc(get_cc()) -ida_typeinf.tinfo_t.is_varmember (method) - is_varmember(self) -> bool - Can the type be of a variable struct member? This function checks for: - is_array() && array.nelems==0 Such a member can be only the very last member of - a structure +ida_typeinf.tinfo_t.is_varmember(self) -> bool + Can the type be of a variable struct member? This function checks for: is_array() && array.nelems==0 Such a member can be only the very last member of a structure + -ida_typeinf.tinfo_t.is_varstruct (method) - is_varstruct(self) -> bool +ida_typeinf.tinfo_t.is_varstruct(self) -> bool Is a variable-size structure? -ida_typeinf.tinfo_t.is_vftable (method) - is_vftable(self) -> bool +ida_typeinf.tinfo_t.is_vftable(self) -> bool Is a vftable type? -ida_typeinf.tinfo_t.is_void (method) - is_void(self) -> bool +ida_typeinf.tinfo_t.is_void(self) -> bool is_type_void(get_realtype()) -ida_typeinf.tinfo_t.is_volatile (method) - is_volatile(self) -> bool +ida_typeinf.tinfo_t.is_volatile(self) -> bool is_type_volatile(get_realtype()) -ida_typeinf.tinfo_t.is_well_defined (method) - is_well_defined(self) -> bool - !(empty()) && !(is_decl_partial()) +ida_typeinf.tinfo_t.is_well_defined(self) -> bool + !(empty()) && !(is_decl_partial()) && !(is_punknown()) -ida_typeinf.tinfo_t.parse (method) - parse(self, decl, til=None, pt_flags=0) -> bool - Convenience function to parse a string with a type declaration +ida_typeinf.tinfo_t.iter_enum(self) + Iterate on the members composing this enumeration. - @param decl: (C++: const char *) a type declaration - @param til: (C++: til_t *) type library to use - @param pt_flags: (C++: int) combination of Type parsing flags bits + Example: + + til = ida_typeinf.get_idati() + tif = til.get_named_type("my_enum") + for edm in tif.iter_enum(): + print(f"{edm.name} = {edm.value}") + + Will raise an exception if this type is not an enumeration + + @return a edm_t-producing generator -ida_typeinf.tinfo_t.present (method) - present(self) -> bool +ida_typeinf.tinfo_t.iter_func(self) + Iterate on the arguments contained in this function prototype + + Example: + + address = ... + func = ida_funcs.get_func(address) + func_type = func.prototype + for arg in func_type.iter_func(): + print(f"{arg.name}, of type {arg.type}") + + Will raise an exception if this type is not a function + + @return a funcarg_t-producing generator + +ida_typeinf.tinfo_t.iter_struct(self) + Iterate on the members composing this structure. + + Example: + + til = ida_typeinf.get_idati() + tif = til.get_named_type("my_struc") + for udm in tif.iter_struct(): + print(f"{udm.name} at bit offset {udm.offset}") + + Will raise an exception if this type is not a structure. + + @return a udm_t-producing generator + +ida_typeinf.tinfo_t.iter_udt(self) + Iterate on the members composing this structure, or union. + + Example: + + til = ida_typeinf.get_idati() + tif = til.get_named_type("my_type") + for udm in tif.iter_udt(): + print(f"{udm.name} at bit offset {udm.offset} with type {udm.type}") + + Will raise an exception if this type is not a structure, or union + + @return a udm_t-producing generator + +ida_typeinf.tinfo_t.iter_union(self) + Iterate on the members composing this union. + + Example: + + til = ida_typeinf.get_idati() + tif = til.get_named_type("my_union") + for udm in tif.iter_union(): + print(f"{udm.name}, with type {udm.type}") + + Will raise an exception if this type is not a union. + + @return a udm_t-producing generator + +ida_typeinf.tinfo_t.parse(self, decl: str, til: "til_t" = None, pt_flags: int = 0) -> bool + Convenience function to parse a string with a type declaration + + @param decl: a type declaration + @param til: type library to use + @param pt_flags: combination of Type parsing flags bits + +ida_typeinf.tinfo_t.present(self) -> bool Is the type really present? (not a reference to a missing type, for example) -ida_typeinf.tinfo_t.read_bitfield_value (method) - read_bitfield_value(self, v, bitoff) -> uint64 - - @param v: uint64 - @param bitoff: int +ida_typeinf.tinfo_t.read_bitfield_value(self, v: "uint64", bitoff: int) -> "uint64" -ida_typeinf.tinfo_t.remove_ptr_or_array (method) - remove_ptr_or_array(self) -> bool - Replace the current type with the ptr obj or array element. This function - performs one of the following conversions: +ida_typeinf.tinfo_t.remove_ptr_or_array(self) -> bool + Replace the current type with the ptr obj or array element. This function performs one of the following conversions: * type[] => type - * type* => type If the conversion is performed successfully, return true - -ida_typeinf.tinfo_t.rename_edm (method) - rename_edm(self, idx, name, etf_flags=0) -> tinfo_code_t - Rename a enum member + * type* => type If the conversion is performed successfully, return true - @param idx: (C++: size_t) index in edmvec_t - @param name: (C++: const char *) new name - @param etf_flags: (C++: uint) etf_flag_t ETF_FORCENAME may be used in case of - TERR_ALIEN_NAME - @note: ETF_NO_SAVE is ignored - -ida_typeinf.tinfo_t.rename_type (method) - rename_type(self, name, ntf_flags=0) -> tinfo_code_t - Rename a type - @param name: (C++: const char *) new type name - @param ntf_flags: (C++: int) Flags for named types - @note: The change is saved immediately + -ida_typeinf.tinfo_t.rename_udm (method) - rename_udm(self, index, name, etf_flags=0) -> tinfo_code_t - Rename a structure/union member. The new name must be unique. - @note: ETF_NO_SAVE is ignored - - @param index: (C++: size_t) - @param name: (C++: const char *) char const * - @param etf_flags: (C++: uint) +ida_typeinf.tinfo_t.rename_edm(self, idx: "size_t", name: str, etf_flags: "uint" = 0) -> "tinfo_code_t" + Rename a enum member + + @param idx: index in edmvec_t + @param name: new name + @param etf_flags: etf_flag_t ETF_FORCENAME may be used in case of TERR_ALIEN_NAME -ida_typeinf.tinfo_t.requires_qualifier (method) - requires_qualifier(self, name, offset) -> bool - Requires full qualifier? (name is not unique) - - @param name: (C++: const char *) field name - @param offset: (C++: uint64) field offset in bits - @return: if the name is not unique, returns true +ida_typeinf.tinfo_t.rename_funcarg(self, index: "size_t", name: str, etf_flags: "uint" = 0) -> "tinfo_code_t" + Rename a function argument. The new name must be unique. + + @param index: argument index in the function array + @param name: new name + @param etf_flags: etf_flag_t -ida_typeinf.tinfo_t.save_type (method) - save_type(self, ntf_flags=0x0001|0x0004) -> tinfo_code_t - - @param ntf_flags: int +ida_typeinf.tinfo_t.rename_type(self, name: str, ntf_flags: int = 0) -> "tinfo_code_t" + Rename a type + + @param name: new type name + @param ntf_flags: Flags for named types -ida_typeinf.tinfo_t.serialize (method) - serialize(self, sudt_flags=SUDT_FAST|SUDT_TRUNC) -> (bytes, NoneType, NoneType), (bytes, bytes, NoneType) +ida_typeinf.tinfo_t.rename_udm(self, index: "size_t", name: str, etf_flags: "uint" = 0) -> "tinfo_code_t" + Rename a structure/union member. The new name must be unique. + + +ida_typeinf.tinfo_t.requires_qualifier(self, name: str, offset: "uint64") -> bool + Requires full qualifier? (name is not unique) + + @param name: field name + @param offset: field offset in bits + @returns if the name is not unique, returns true + +ida_typeinf.tinfo_t.save_type(self, *args) -> "tinfo_code_t" + +ida_typeinf.tinfo_t.serialize(self, *args) -> "PyObject *" Serialize tinfo_t object into a type string. - - @param sudt_flags: (C++: int) -ida_typeinf.tinfo_t.set_attr (method) - set_attr(self, ta, may_overwrite=True) -> bool +ida_typeinf.tinfo_t.set_attr(self, ta: "type_attr_t", may_overwrite: bool = True) -> bool Set a type attribute. If necessary, a new typid will be created. - - @param ta: (C++: const type_attr_t &) type_attr_t const & - @param may_overwrite: (C++: bool) -ida_typeinf.tinfo_t.set_attrs (method) - set_attrs(self, tav) -> bool - Set type attributes. If necessary, a new typid will be created. this function - modifies tav! (returns old attributes, if any) - - @param tav: (C++: type_attrs_t *) - @return: false: bad attributes +ida_typeinf.tinfo_t.set_attrs(self, tav: "type_attrs_t") -> bool + Set type attributes. If necessary, a new typid will be created. this function modifies tav! (returns old attributes, if any) + + @returns false: bad attributes -ida_typeinf.tinfo_t.set_const (method) - set_const(self) +ida_typeinf.tinfo_t.set_const(self) -> None -ida_typeinf.tinfo_t.set_declalign (method) - set_declalign(self, declalign) -> bool - - @param declalign: uchar +ida_typeinf.tinfo_t.set_declalign(self, declalign: "uchar") -> bool -ida_typeinf.tinfo_t.set_edm_cmt (method) - set_edm_cmt(self, idx, cmt, etf_flags=0) -> tinfo_code_t - Set a comment for an enum member. Such comments are always considered as - repeatable. - - @param idx: (C++: size_t) index in edmvec_t - @param cmt: (C++: const char *) comment - @param etf_flags: (C++: uint) etf_flag_t +ida_typeinf.tinfo_t.set_edm_cmt(self, idx: "size_t", cmt: str, etf_flags: "uint" = 0) -> "tinfo_code_t" + Set a comment for an enum member. Such comments are always considered as repeatable. + + @param idx: index in edmvec_t + @param cmt: comment + @param etf_flags: etf_flag_t -ida_typeinf.tinfo_t.set_enum_is_bitmask (method) - set_enum_is_bitmask(self, stance=ENUMBM_ON, etf_flags=0) -> tinfo_code_t - - @param stance: enum tinfo_t::bitmask_cvt_stance_t - @param etf_flags: uint +ida_typeinf.tinfo_t.set_enum_is_bitmask(self, *args) -> "tinfo_code_t" -ida_typeinf.tinfo_t.set_enum_repr (method) - set_enum_repr(self, repr, etf_flags=0) -> tinfo_code_t - Set the representation of enum members. - - @param repr: (C++: const value_repr_t &) value_repr_t - @param etf_flags: (C++: uint) etf_flag_t +ida_typeinf.tinfo_t.set_enum_radix(self, radix: int, sign: bool, etf_flags: "uint" = 0) -> "tinfo_code_t" + Set enum radix to display constants + + @param radix: radix 2, 4, 8, 16, with the special case 1 to display as character + @param sign: display as signed or unsigned + @param etf_flags: etf_flag_t -ida_typeinf.tinfo_t.set_enum_sign (method) - set_enum_sign(self, sign, etf_flags=0) -> tinfo_code_t - Set enum sign - - @param sign: (C++: type_sign_t) - @param etf_flags: (C++: uint) etf_flag_t +ida_typeinf.tinfo_t.set_enum_repr(self, repr: "value_repr_t", etf_flags: "uint" = 0) -> "tinfo_code_t" + Set the representation of enum members. + + @param repr: value_repr_t + @param etf_flags: etf_flag_t -ida_typeinf.tinfo_t.set_enum_width (method) - set_enum_width(self, nbytes, etf_flags=0) -> tinfo_code_t - Set the width of enum base type - - @param nbytes: (C++: int) width of enum base type, allowed values: 0 - (unspecified),1,2,4,8,16,32,64 - @param etf_flags: (C++: uint) etf_flag_t +ida_typeinf.tinfo_t.set_enum_sign(self, sign: "type_sign_t", etf_flags: "uint" = 0) -> "tinfo_code_t" + Set enum sign + + @param sign: type_sign_t + @param etf_flags: etf_flag_t -ida_typeinf.tinfo_t.set_methods (method) - set_methods(self, methods) -> bool - - @param BT_COMPLEX: set the list of member functions. This function consumes 'methods' - (makes it empty). - @return: false if this type is not a udt, or if the given list is empty +ida_typeinf.tinfo_t.set_enum_width(self, nbytes: int, etf_flags: "uint" = 0) -> "tinfo_code_t" + Set the width of enum base type + + @param nbytes: width of enum base type, allowed values: 0 (unspecified),1,2,4,8,16,32,64 + @param etf_flags: etf_flag_t -ida_typeinf.tinfo_t.set_modifiers (method) - set_modifiers(self, mod) - - @param mod: type_t +ida_typeinf.tinfo_t.set_fixed_struct(self, on: bool = True) -> "tinfo_code_t" + Declare struct member offsets as fixed. For such structures, IDA will not recalculate the member offsets. If a member does not fit into its place anymore, it will be deleted. This function works only with structures (not unions). + -ida_typeinf.tinfo_t.set_named_type (method) - set_named_type(self, til, name, ntf_flags=0) -> tinfo_code_t - - @param til: til_t * - @param name: char const * - @param ntf_flags: int +ida_typeinf.tinfo_t.set_func_cc(self, cc: "cm_t", etf_flags: "uint" = 0) -> "tinfo_code_t" + Set function calling convention. -ida_typeinf.tinfo_t.set_numbered_type (method) - set_numbered_type(self, til, ord, ntf_flags=0, name=None) -> tinfo_code_t - - @param til: til_t * - @param ord: uint32 - @param ntf_flags: int - @param name: char const * +ida_typeinf.tinfo_t.set_func_retloc(self, argloc: "argloc_t", etf_flags: "uint" = 0) -> "tinfo_code_t" + Set location of function return value. + + @param argloc: new location for the return value + @param etf_flags: etf_flag_t + @returns tinfo_code_t -ida_typeinf.tinfo_t.set_symbol_type (method) - set_symbol_type(self, til, name, ntf_flags=0) -> tinfo_code_t - - @param til: til_t * - @param name: char const * - @param ntf_flags: int +ida_typeinf.tinfo_t.set_func_rettype(self, tif: "tinfo_t", etf_flags: "uint" = 0) -> "tinfo_code_t" + Set function return type . + + @param tif: new type for the return type + @param etf_flags: etf_flag_t + @returns tinfo_code_t -ida_typeinf.tinfo_t.set_type_alias (method) - set_type_alias(self, dest_ord) -> bool - Set type alias Redirects all references to source type to the destination type. - This is equivalent to instantaneous replacement all references to srctype by - dsttype. - - @param dest_ord: (C++: uint32) +ida_typeinf.tinfo_t.set_funcarg_loc(self, index: "size_t", argloc: "argloc_t", etf_flags: "uint" = 0) -> "tinfo_code_t" + Set location of a function argument. + + @param index: argument index in the function array + @param argloc: new location for the argument + @param etf_flags: etf_flag_t + @returns tinfo_code_t -ida_typeinf.tinfo_t.set_type_alignment (method) - set_type_alignment(self, declalign, etf_flags=0) -> tinfo_code_t +ida_typeinf.tinfo_t.set_funcarg_type(self, index: "size_t", tif: "tinfo_t", etf_flags: "uint" = 0) -> "tinfo_code_t" + Set type of a function argument. + + @param index: argument index in the function array + @param tif: new type for the argument + @param etf_flags: etf_flag_t + @returns tinfo_code_t + +ida_typeinf.tinfo_t.set_methods(self, methods: "udtmembervec_t") -> bool + BT_COMPLEX: set the list of member functions. This function consumes 'methods' (makes it empty). + + @returns false if this type is not a udt, or if the given list is empty + +ida_typeinf.tinfo_t.set_modifiers(self, mod: "type_t") -> None + +ida_typeinf.tinfo_t.set_named_type(self, til: "til_t", name: str, ntf_flags: int = 0) -> "tinfo_code_t" + +ida_typeinf.tinfo_t.set_numbered_type(self, til: "til_t", ord: int, ntf_flags: int = 0, name: str = None) -> "tinfo_code_t" + +ida_typeinf.tinfo_t.set_struct_size(self, new_size: "size_t") -> "tinfo_code_t" + Explicitly specify the struct size. This function works only with fixed structures. The new struct size can be equal or higher the unpadded struct size (IOW, all existing members should fit into the specified size). + + @param new_size: new structure size in bytes + +ida_typeinf.tinfo_t.set_symbol_type(self, til: "til_t", name: str, ntf_flags: int = 0) -> "tinfo_code_t" + +ida_typeinf.tinfo_t.set_type_alias(self, dest_ord: int) -> bool + Set type alias Redirects all references to source type to the destination type. This is equivalent to instantaneous replacement all references to srctype by dsttype. + + +ida_typeinf.tinfo_t.set_type_alignment(self, declalign: "uchar", etf_flags: "uint" = 0) -> "tinfo_code_t" Set type alignment. - - @param declalign: (C++: uchar) - @param etf_flags: (C++: uint) -ida_typeinf.tinfo_t.set_type_cmt (method) - set_type_cmt(self, cmt, is_regcmt=False, etf_flags=0) -> tinfo_code_t - Set type comment This function works only for non-trivial types - - @param cmt: (C++: const char *) char const * - @param is_regcmt: (C++: bool) - @param etf_flags: (C++: uint) +ida_typeinf.tinfo_t.set_type_cmt(self, cmt: str, is_regcmt: bool = False, etf_flags: "uint" = 0) -> "tinfo_code_t" + Set type comment This function works only for non-trivial types + -ida_typeinf.tinfo_t.set_udm_cmt (method) - set_udm_cmt(self, index, cmt, is_regcmt=False, etf_flags=0) -> tinfo_code_t - Set a comment for a structure/union member. A member may have just one comment, - and it is either repeatable or regular. - - @param index: (C++: size_t) - @param cmt: (C++: const char *) char const * - @param is_regcmt: (C++: bool) - @param etf_flags: (C++: uint) +ida_typeinf.tinfo_t.set_udm_by_til(self, idx: "size_t", on: bool = True, etf_flags: "uint" = 0) -> "tinfo_code_t" + The member is created due to the type system + + @param idx: index of the member + @param etf_flags: etf_flag_t -ida_typeinf.tinfo_t.set_udm_repr (method) - set_udm_repr(self, index, repr, etf_flags=0) -> tinfo_code_t +ida_typeinf.tinfo_t.set_udm_cmt(self, index: "size_t", cmt: str, is_regcmt: bool = False, etf_flags: "uint" = 0) -> "tinfo_code_t" + Set a comment for a structure/union member. A member may have just one comment, and it is either repeatable or regular. + + +ida_typeinf.tinfo_t.set_udm_repr(self, index: "size_t", repr: "value_repr_t", etf_flags: "uint" = 0) -> "tinfo_code_t" Set the representation of a structure/union member. - - @param index: (C++: size_t) - @param repr: (C++: const value_repr_t &) value_repr_t const & - @param etf_flags: (C++: uint) -ida_typeinf.tinfo_t.set_udm_type (method) - set_udm_type(self, index, tif, etf_flags=0, repr=None) -> tinfo_code_t - Set type of a structure/union member. - - @param index: (C++: size_t) member index in the udm array - @param tif: (C++: const tinfo_t &) new type for the member - @param etf_flags: (C++: uint) etf_flag_t - @param repr: (C++: const value_repr_t *) new representation for the member (optional) - @return: tinfo_code_t +ida_typeinf.tinfo_t.set_udm_type(self, index: "size_t", tif: "tinfo_t", etf_flags: "uint" = 0, repr: "value_repr_t" = None) -> "tinfo_code_t" + Set type of a structure/union member. + + @param index: member index in the udm array + @param tif: new type for the member + @param etf_flags: etf_flag_t + @param repr: new representation for the member (optional) + @returns tinfo_code_t -ida_typeinf.tinfo_t.set_udt_alignment (method) - set_udt_alignment(self, sda, etf_flags=0) -> tinfo_code_t - Set declared structure alignment (sda) This alignment supersedes the alignment - returned by get_declalign() and is really used when calculating the struct - layout. However, the effective structure alignment may differ from `sda` because - of packing. The type editing functions (they accept etf_flags) may overwrite - this attribute. - - @param sda: (C++: int) - @param etf_flags: (C++: uint) +ida_typeinf.tinfo_t.set_udt_alignment(self, sda: int, etf_flags: "uint" = 0) -> "tinfo_code_t" + Set declared structure alignment (sda) This alignment supersedes the alignment returned by get_declalign() and is really used when calculating the struct layout. However, the effective structure alignment may differ from `sda` because of packing. The type editing functions (they accept etf_flags) may overwrite this attribute. + -ida_typeinf.tinfo_t.set_udt_pack (method) - set_udt_pack(self, pack, etf_flags=0) -> tinfo_code_t - Set structure packing. The value controls how little a structure member - alignment can be. Example: if pack=1, then it is possible to align a double to a - byte. __attribute__((aligned(1))) double x; However, if pack=3, a double will be - aligned to 8 (2**3) even if requested to be aligned to a byte. pack==0 will have - the same effect. The type editing functions (they accept etf_flags) may - overwrite this attribute. - - @param pack: (C++: int) - @param etf_flags: (C++: uint) +ida_typeinf.tinfo_t.set_udt_pack(self, pack: int, etf_flags: "uint" = 0) -> "tinfo_code_t" + Set structure packing. The value controls how little a structure member alignment can be. Example: if pack=1, then it is possible to align a double to a byte. __attribute__((aligned(1))) double x; However, if pack=3, a double will be aligned to 8 (2**3) even if requested to be aligned to a byte. pack==0 will have the same effect. The type editing functions (they accept etf_flags) may overwrite this attribute. + -ida_typeinf.tinfo_t.set_volatile (method) - set_volatile(self) +ida_typeinf.tinfo_t.set_volatile(self) -> None -ida_typeinf.tinfo_t.swap (method) - swap(self, r) +ida_typeinf.tinfo_t.swap(self, r: "tinfo_t") -> None Assign this = r and r = this. - - @param r: (C++: tinfo_t &) -ida_typeinf.tinfo_t.write_bitfield_value (method) - write_bitfield_value(self, dst, v, bitoff) -> uint64 - - @param dst: uint64 - @param v: uint64 - @param bitoff: int +ida_typeinf.tinfo_t.write_bitfield_value(self, dst: "uint64", v: "uint64", bitoff: int) -> "uint64" -ida_typeinf.tinfo_t_get_stock (function) - tinfo_t_get_stock(id) -> tinfo_t - - @param id: enum stock_type_id_t +ida_typeinf.tinfo_visitor_t -ida_typeinf.tinfo_visitor_t (class) - Proxy of C++ tinfo_visitor_t class. +ida_typeinf.tinfo_visitor_t.__disown__(self) -ida_typeinf.tinfo_visitor_t.__disown__ (method) +ida_typeinf.tinfo_visitor_t.__init__(self, s: int = 0) -ida_typeinf.tinfo_visitor_t.__init__ (method) - __init__(self, s=0) -> tinfo_visitor_t - - @param s: int - -ida_typeinf.tinfo_visitor_t.apply_to (method) - apply_to(self, tif, out=None, name=None, cmt=None) -> int +ida_typeinf.tinfo_visitor_t.apply_to(self, tif: "tinfo_t", out: "type_mods_t" = None, name: str = None, cmt: str = None) -> int Call this function to initiate the traversal. - - @param tif: (C++: const tinfo_t &) tinfo_t const & - @param out: (C++: type_mods_t *) - @param name: (C++: const char *) char const * - @param cmt: (C++: const char *) char const * -ida_typeinf.tinfo_visitor_t.prune_now (method) - prune_now(self) +ida_typeinf.tinfo_visitor_t.prune_now(self) -> None To refuse to visit children of the current type, use this: -ida_typeinf.tinfo_visitor_t.state (variable) - tinfo visitor states +ida_typeinf.tinfo_visitor_t.state + tinfo visitor states + -ida_typeinf.tinfo_visitor_t.visit_type (method) - visit_type(self, out, tif, name, cmt) -> int - Visit a subtype. this function must be implemented in the derived class. it may - optionally fill out with the new type info. this can be used to modify types (in - this case the 'out' argument of apply_to() may not be nullptr) return 0 to - continue the traversal. return !=0 to stop the traversal. - - @param out: (C++: type_mods_t *) - @param tif: (C++: const tinfo_t &) tinfo_t const & - @param name: (C++: const char *) char const * - @param cmt: (C++: const char *) char const * +ida_typeinf.tinfo_visitor_t.visit_type(self, out: "type_mods_t", tif: "tinfo_t", name: str, cmt: str) -> int + Visit a subtype. this function must be implemented in the derived class. it may optionally fill out with the new type info. this can be used to modify types (in this case the 'out' argument of apply_to() may not be nullptr) return 0 to continue the traversal. return !=0 to stop the traversal. + -ida_typeinf.type_attr_t (class) - Proxy of C++ type_attr_t class. +ida_typeinf.type_attr_t -ida_typeinf.type_attr_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: type_attr_t const & +ida_typeinf.type_attr_t.__ge__(self, r: "type_attr_t") -> bool -ida_typeinf.type_attr_t.__init__ (method) - __init__(self) -> type_attr_t +ida_typeinf.type_attr_t.__init__(self) -ida_typeinf.type_attr_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: type_attr_t const & +ida_typeinf.type_attr_t.__lt__(self, r: "type_attr_t") -> bool -ida_typeinf.type_attr_t.key (variable) - one symbol keys are reserved to be used by the kernel the ones starting with an - underscore are reserved too +ida_typeinf.type_attr_t.key + one symbol keys are reserved to be used by the kernel the ones starting with an underscore are reserved too + -ida_typeinf.type_attr_t.value (variable) +ida_typeinf.type_attr_t.value attribute bytes -ida_typeinf.type_attrs_t (class) - Proxy of C++ qvector< type_attr_t > class. +ida_typeinf.type_attrs_t -ida_typeinf.type_attrs_t.__getitem__ (method) - __getitem__(self, i) -> type_attr_t - - @param i: size_t +ida_typeinf.type_attrs_t.__getitem__(self, i: "size_t") -> "type_attr_t const &" -ida_typeinf.type_attrs_t.__init__ (method) - __init__(self) -> type_attrs_t - __init__(self, x) -> type_attrs_t - - @param x: qvector< type_attr_t > const & +ida_typeinf.type_attrs_t.__init__(self, *args) -ida_typeinf.type_attrs_t.__len__ (method) - __len__(self) -> size_t +ida_typeinf.type_attrs_t.__len__(self) -> "size_t" -ida_typeinf.type_attrs_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: type_attr_t const & +ida_typeinf.type_attrs_t.__setitem__(self, i: "size_t", v: "type_attr_t") -> None -ida_typeinf.type_attrs_t.at (method) - at(self, _idx) -> type_attr_t - - @param _idx: size_t +ida_typeinf.type_attrs_t.append(self, x: "type_attr_t") -> None -ida_typeinf.type_attrs_t.begin (method) - begin(self) -> type_attr_t +ida_typeinf.type_attrs_t.at(self, _idx: "size_t") -> "type_attr_t const &" -ida_typeinf.type_attrs_t.capacity (method) - capacity(self) -> size_t +ida_typeinf.type_attrs_t.begin(self, *args) -> "qvector< type_attr_t >::const_iterator" -ida_typeinf.type_attrs_t.clear (method) - clear(self) +ida_typeinf.type_attrs_t.capacity(self) -> "size_t" -ida_typeinf.type_attrs_t.empty (method) - empty(self) -> bool +ida_typeinf.type_attrs_t.clear(self) -> None -ida_typeinf.type_attrs_t.end (method) - end(self) -> type_attr_t +ida_typeinf.type_attrs_t.empty(self) -> bool -ida_typeinf.type_attrs_t.erase (method) - erase(self, it) -> type_attr_t - - @param it: qvector< type_attr_t >::iterator - - erase(self, first, last) -> type_attr_t - - @param first: qvector< type_attr_t >::iterator - @param last: qvector< type_attr_t >::iterator +ida_typeinf.type_attrs_t.end(self, *args) -> "qvector< type_attr_t >::const_iterator" -ida_typeinf.type_attrs_t.extract (method) - extract(self) -> type_attr_t +ida_typeinf.type_attrs_t.erase(self, *args) -> "qvector< type_attr_t >::iterator" -ida_typeinf.type_attrs_t.grow (method) - grow(self, x=type_attr_t()) - - @param x: type_attr_t const & +ida_typeinf.type_attrs_t.extend(self, x: "type_attrs_t") -> None -ida_typeinf.type_attrs_t.inject (method) - inject(self, s, len) - - @param s: type_attr_t * - @param len: size_t +ida_typeinf.type_attrs_t.extract(self) -> "type_attr_t *" -ida_typeinf.type_attrs_t.insert (method) - insert(self, it, x) -> type_attr_t - - @param it: qvector< type_attr_t >::iterator - @param x: type_attr_t const & +ida_typeinf.type_attrs_t.grow(self, *args) -> None -ida_typeinf.type_attrs_t.pop_back (method) - pop_back(self) +ida_typeinf.type_attrs_t.inject(self, s: "type_attr_t", len: "size_t") -> None -ida_typeinf.type_attrs_t.push_back (method) - push_back(self, x) - - @param x: type_attr_t const & - - push_back(self) -> type_attr_t +ida_typeinf.type_attrs_t.insert(self, it: "type_attr_t", x: "type_attr_t") -> "qvector< type_attr_t >::iterator" -ida_typeinf.type_attrs_t.qclear (method) - qclear(self) +ida_typeinf.type_attrs_t.pop_back(self) -> None -ida_typeinf.type_attrs_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_typeinf.type_attrs_t.push_back(self, *args) -> "type_attr_t &" -ida_typeinf.type_attrs_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: type_attr_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_typeinf.type_attrs_t.qclear(self) -> None -ida_typeinf.type_attrs_t.size (method) - size(self) -> size_t +ida_typeinf.type_attrs_t.reserve(self, cnt: "size_t") -> None -ida_typeinf.type_attrs_t.swap (method) - swap(self, r) - - @param r: qvector< type_attr_t > & +ida_typeinf.type_attrs_t.resize(self, *args) -> None -ida_typeinf.type_attrs_t.truncate (method) - truncate(self) +ida_typeinf.type_attrs_t.size(self) -> "size_t" -ida_typeinf.type_mods_t (class) - Proxy of C++ type_mods_t class. +ida_typeinf.type_attrs_t.swap(self, r: "type_attrs_t") -> None -ida_typeinf.type_mods_t.__init__ (method) - __init__(self) -> type_mods_t +ida_typeinf.type_attrs_t.truncate(self) -> None -ida_typeinf.type_mods_t.clear (method) - clear(self) +ida_typeinf.type_mods_t -ida_typeinf.type_mods_t.cmt (variable) +ida_typeinf.type_mods_t.__init__(self) + +ida_typeinf.type_mods_t.clear(self) -> None + +ida_typeinf.type_mods_t.cmt comment for current type -ida_typeinf.type_mods_t.flags (variable) - Type modification bits +ida_typeinf.type_mods_t.flags + Type modification bits + -ida_typeinf.type_mods_t.has_cmt (method) - has_cmt(self) -> bool +ida_typeinf.type_mods_t.has_cmt(self) -> bool -ida_typeinf.type_mods_t.has_info (method) - has_info(self) -> bool +ida_typeinf.type_mods_t.has_info(self) -> bool -ida_typeinf.type_mods_t.has_name (method) - has_name(self) -> bool +ida_typeinf.type_mods_t.has_name(self) -> bool -ida_typeinf.type_mods_t.has_type (method) - has_type(self) -> bool +ida_typeinf.type_mods_t.has_type(self) -> bool -ida_typeinf.type_mods_t.is_rptcmt (method) - is_rptcmt(self) -> bool +ida_typeinf.type_mods_t.is_rptcmt(self) -> bool -ida_typeinf.type_mods_t.name (variable) +ida_typeinf.type_mods_t.name current type name -ida_typeinf.type_mods_t.set_new_cmt (method) - set_new_cmt(self, c, rptcmt) - - @param c: qstring const & - @param rptcmt: bool +ida_typeinf.type_mods_t.set_new_cmt(self, c: str, rptcmt: bool) -> None -ida_typeinf.type_mods_t.set_new_name (method) - set_new_name(self, n) - - @param n: qstring const & +ida_typeinf.type_mods_t.set_new_name(self, n: str) -> None -ida_typeinf.type_mods_t.set_new_type (method) - set_new_type(self, t) - The visit_type() function may optionally save the modified type info. Use the - following functions for that. The new name and comment will be applied only if - the current tinfo element has storage for them. - - @param t: (C++: const tinfo_t &) tinfo_t const & +ida_typeinf.type_mods_t.set_new_type(self, t: "tinfo_t") -> None + The visit_type() function may optionally save the modified type info. Use the following functions for that. The new name and comment will be applied only if the current tinfo element has storage for them. + -ida_typeinf.type_mods_t.type (variable) +ida_typeinf.type_mods_t.type current type -ida_typeinf.type_signed (variable) +ida_typeinf.type_signed signed type -ida_typeinf.type_unsigned (variable) +ida_typeinf.type_unsigned unsigned type -ida_typeinf.typedef_type_data_t (class) - Proxy of C++ typedef_type_data_t class. +ida_typeinf.typedef_type_data_t -ida_typeinf.typedef_type_data_t.__init__ (method) - __init__(self, _til, _name, _resolve=False) -> typedef_type_data_t - - @param _til: til_t const * - @param _name: char const * - @param _resolve: bool - - __init__(self, _til, ord, _resolve=False) -> typedef_type_data_t - - @param _til: til_t const * - @param ord: uint32 - @param _resolve: bool +ida_typeinf.typedef_type_data_t.__init__(self, *args) -ida_typeinf.typedef_type_data_t.is_ordref (variable) +ida_typeinf.typedef_type_data_t.is_ordref is reference by ordinal? -ida_typeinf.typedef_type_data_t.name (variable) +ida_typeinf.typedef_type_data_t.name is_ordref=false: target type name. we do not own this pointer! -ida_typeinf.typedef_type_data_t.ordinal (variable) +ida_typeinf.typedef_type_data_t.ordinal is_ordref=true: type ordinal number -ida_typeinf.typedef_type_data_t.resolve (variable) +ida_typeinf.typedef_type_data_t.resolve should resolve immediately? -ida_typeinf.typedef_type_data_t.swap (method) - swap(self, r) - - @param r: typedef_type_data_t & +ida_typeinf.typedef_type_data_t.swap(self, r: "typedef_type_data_t") -> None -ida_typeinf.typedef_type_data_t.til (variable) +ida_typeinf.typedef_type_data_t.til type library to use when resolving -ida_typeinf.udm_t (class) - Proxy of C++ udm_t class. +ida_typeinf.udm_t -ida_typeinf.udm_t.__eq__ (method) - __eq__(self, r) -> bool +ida_typeinf.udm_t.__eq__(self, r: "udm_t") -> bool + +ida_typeinf.udm_t.__init__(self, *args) + Create a structure/union member, with the specified name and type. - @param r: udm_t const & - -ida_typeinf.udm_t.__init__ (method) - __init__(self) -> udm_t - -ida_typeinf.udm_t.__lt__ (method) - __lt__(self, r) -> bool + This constructor has the following signatures: - @param r: udm_t const & - -ida_typeinf.udm_t.__ne__ (method) - __ne__(self, r) -> bool + 1. udm_t(udm: udm_t) + 2. udm_t(name: str, type, offset: int) - @param r: udm_t const & + The 'type' descriptor, can be one of: + + * type_t: if the type is simple (integral/floating/bool). E.g., `BTF_INT` + * tinfo_t: can handle more complex types (structures, pointers, arrays, ...) + * str: a C type declaration + + If an input argument is incorrect, the constructor may raise an exception + The size will be computed automatically. + + @param udm a source udm_t + @param name a valid member name. Must not be empty. + @param type the member type + @param offset the member offset in bits. It is the caller's responsibility + to specify correct offsets. -ida_typeinf.udm_t.begin (method) - begin(self) -> uint64 +ida_typeinf.udm_t.__lt__(self, r: "udm_t") -> bool -ida_typeinf.udm_t.can_be_dtor (method) - can_be_dtor(self) -> bool +ida_typeinf.udm_t.__ne__(self, r: "udm_t") -> bool -ida_typeinf.udm_t.can_rename (method) - can_rename(self) -> bool +ida_typeinf.udm_t.begin(self) -> "uint64" -ida_typeinf.udm_t.clr_baseclass (method) - clr_baseclass(self) +ida_typeinf.udm_t.can_be_dtor(self) -> bool -ida_typeinf.udm_t.clr_method (method) - clr_method(self) +ida_typeinf.udm_t.can_rename(self) -> bool -ida_typeinf.udm_t.clr_unaligned (method) - clr_unaligned(self) +ida_typeinf.udm_t.clr_baseclass(self) -> None -ida_typeinf.udm_t.clr_vftable (method) - clr_vftable(self) +ida_typeinf.udm_t.clr_method(self) -> None -ida_typeinf.udm_t.clr_virtbase (method) - clr_virtbase(self) +ida_typeinf.udm_t.clr_unaligned(self) -> None -ida_typeinf.udm_t.cmt (variable) +ida_typeinf.udm_t.clr_vftable(self) -> None + +ida_typeinf.udm_t.clr_virtbase(self) -> None + +ida_typeinf.udm_t.cmt member comment -ida_typeinf.udm_t.effalign (variable) +ida_typeinf.udm_t.effalign effective field alignment (in bytes) -ida_typeinf.udm_t.end (method) - end(self) -> uint64 +ida_typeinf.udm_t.empty(self) -> bool -ida_typeinf.udm_t.fda (variable) +ida_typeinf.udm_t.end(self) -> "uint64" + +ida_typeinf.udm_t.fda field alignment (shift amount) -ida_typeinf.udm_t.is_anonymous_udm (method) - is_anonymous_udm(self) -> bool +ida_typeinf.udm_t.is_anonymous_udm(self) -> bool -ida_typeinf.udm_t.is_baseclass (method) - is_baseclass(self) -> bool +ida_typeinf.udm_t.is_baseclass(self) -> bool -ida_typeinf.udm_t.is_bitfield (method) - is_bitfield(self) -> bool +ida_typeinf.udm_t.is_bitfield(self) -> bool -ida_typeinf.udm_t.is_gap (method) - is_gap(self) -> bool +ida_typeinf.udm_t.is_by_til(self) -> bool -ida_typeinf.udm_t.is_method (method) - is_method(self) -> bool +ida_typeinf.udm_t.is_gap(self) -> bool -ida_typeinf.udm_t.is_regcmt (method) - is_regcmt(self) -> bool +ida_typeinf.udm_t.is_method(self) -> bool -ida_typeinf.udm_t.is_unaligned (method) - is_unaligned(self) -> bool +ida_typeinf.udm_t.is_regcmt(self) -> bool -ida_typeinf.udm_t.is_vftable (method) - is_vftable(self) -> bool +ida_typeinf.udm_t.is_retaddr(self) -> bool -ida_typeinf.udm_t.is_virtbase (method) - is_virtbase(self) -> bool +ida_typeinf.udm_t.is_savregs(self) -> bool -ida_typeinf.udm_t.is_zero_bitfield (method) - is_zero_bitfield(self) -> bool +ida_typeinf.udm_t.is_special_member(self) -> bool -ida_typeinf.udm_t.make_gap (method) - make_gap(self, byteoff, nbytes) -> bool - - @param byteoff: uval_t - @param nbytes: uval_t +ida_typeinf.udm_t.is_unaligned(self) -> bool -ida_typeinf.udm_t.name (variable) +ida_typeinf.udm_t.is_vftable(self) -> bool + +ida_typeinf.udm_t.is_virtbase(self) -> bool + +ida_typeinf.udm_t.is_zero_bitfield(self) -> bool + +ida_typeinf.udm_t.name member name -ida_typeinf.udm_t.offset (variable) +ida_typeinf.udm_t.offset member offset in bits -ida_typeinf.udm_t.repr (variable) +ida_typeinf.udm_t.repr radix, refinfo, strpath, custom_id, strtype -ida_typeinf.udm_t.set_baseclass (method) - set_baseclass(self, on=True) - - @param on: bool +ida_typeinf.udm_t.set_baseclass(self, on: bool = True) -> None -ida_typeinf.udm_t.set_method (method) - set_method(self, on=True) - - @param on: bool +ida_typeinf.udm_t.set_by_til(self, on: bool = True) -> None -ida_typeinf.udm_t.set_regcmt (method) - set_regcmt(self, on=True) - - @param on: bool +ida_typeinf.udm_t.set_method(self, on: bool = True) -> None -ida_typeinf.udm_t.set_unaligned (method) - set_unaligned(self, on=True) - - @param on: bool +ida_typeinf.udm_t.set_regcmt(self, on: bool = True) -> None -ida_typeinf.udm_t.set_value_repr (method) - set_value_repr(self, r) - - @param r: value_repr_t const & +ida_typeinf.udm_t.set_retaddr(self, on: bool = True) -> None -ida_typeinf.udm_t.set_vftable (method) - set_vftable(self, on=True) - - @param on: bool +ida_typeinf.udm_t.set_savregs(self, on: bool = True) -> None -ida_typeinf.udm_t.set_virtbase (method) - set_virtbase(self, on=True) - - @param on: bool +ida_typeinf.udm_t.set_unaligned(self, on: bool = True) -> None -ida_typeinf.udm_t.size (variable) +ida_typeinf.udm_t.set_value_repr(self, r: "value_repr_t") -> None + +ida_typeinf.udm_t.set_vftable(self, on: bool = True) -> None + +ida_typeinf.udm_t.set_virtbase(self, on: bool = True) -> None + +ida_typeinf.udm_t.size size in bits -ida_typeinf.udm_t.swap (method) - swap(self, r) - - @param r: udm_t & +ida_typeinf.udm_t.swap(self, r: "udm_t") -> None -ida_typeinf.udm_t.tafld_bits (variable) +ida_typeinf.udm_t.tafld_bits TAH bits. -ida_typeinf.udm_t.type (variable) +ida_typeinf.udm_t.type member type -ida_typeinf.udm_t__make_gap (function) - udm_t__make_gap(_this, byteoff, nbytes) -> bool +ida_typeinf.udm_visitor_t + +ida_typeinf.udm_visitor_t.__disown__(self) + +ida_typeinf.udm_visitor_t.__init__(self) + +ida_typeinf.udm_visitor_t.visit_udm(self, tid: "tid_t", tif: "tinfo_t", udt: "udt_type_data_t", idx: "ssize_t") -> int + @param tid: udt tid + @param tif: udt type info (may be nullptr for corrupted idbs) + @param udt: udt type data (may be nullptr for corrupted idbs) + @param idx: the index of udt the member (may be -1 if udm was not found) + +ida_typeinf.udt_type_data_t + +ida_typeinf.udt_type_data_t.__init__(self) + +ida_typeinf.udt_type_data_t.add_member(self, _name: str, _type: "tinfo_t", _offset: "uint64" = 0) -> "udm_t &" + Add a new member to a structure or union. This function just pushes a new member to the back of the structure/union member vector. - @param _this: udm_t * - @param byteoff: uval_t - @param nbytes: uval_t + @param _name: Member name. Must not be nullptr. + @param _type: Member type. Must not be empty. + @param _offset: Member offset in bits. It is the caller's responsibility to specify correct offsets. + @returns { Reference to the newly added member } -ida_typeinf.udt_type_data_t (class) - Proxy of C++ udt_type_data_t class. - -ida_typeinf.udt_type_data_t.__init__ (method) - __init__(self) -> udt_type_data_t - -ida_typeinf.udt_type_data_t.effalign (variable) +ida_typeinf.udt_type_data_t.effalign effective structure alignment (in bytes) -ida_typeinf.udt_type_data_t.find_member (method) - find_member(self, pattern_udm, strmem_flags) -> ssize_t +ida_typeinf.udt_type_data_t.find_member(self, *args) -> "ssize_t" + This function has the following signatures: - @param pattern_udm: udm_t * - @param strmem_flags: int + 0. find_member(pattern_udm: udm_t *, strmem_flags: int) -> ssize_t + 1. find_member(name: str) -> ssize_t + 2. find_member(bit_offset: uint64) -> ssize_t - find_member(self, name) -> ssize_t + # 0: find_member(pattern_udm: udm_t *, strmem_flags: int) -> ssize_t - @param name: char const * + tinfo_t::find_udm + + @returns the index of the found member or -1 - find_member(self, bit_offset) -> ssize_t + # 1: find_member(name: str) -> ssize_t - @param bit_offset: uint64 + + # 2: find_member(bit_offset: uint64) -> ssize_t -ida_typeinf.udt_type_data_t.get_best_fit_member (method) - get_best_fit_member(self, disp) -> ssize_t - Get member that is most likely referenced by the specified offset. Useful for - offsets > sizeof(struct). +ida_typeinf.udt_type_data_t.get_best_fit_member(self, disp) + Get the member that is most likely referenced by the specified offset. - @param disp: (C++: asize_t) + @param disp the byte offset + @return a tuple (int, udm_t), or (-1, None) if member not found -ida_typeinf.udt_type_data_t.is_cppobj (method) - is_cppobj(self) -> bool +ida_typeinf.udt_type_data_t.is_cppobj(self) -> bool -ida_typeinf.udt_type_data_t.is_last_baseclass (method) - is_last_baseclass(self, idx) -> bool - - @param idx: size_t +ida_typeinf.udt_type_data_t.is_fixed(self) -> bool -ida_typeinf.udt_type_data_t.is_msstruct (method) - is_msstruct(self) -> bool +ida_typeinf.udt_type_data_t.is_last_baseclass(self, idx: "size_t") -> bool -ida_typeinf.udt_type_data_t.is_unaligned (method) - is_unaligned(self) -> bool +ida_typeinf.udt_type_data_t.is_msstruct(self) -> bool -ida_typeinf.udt_type_data_t.is_union (variable) +ida_typeinf.udt_type_data_t.is_unaligned(self) -> bool + +ida_typeinf.udt_type_data_t.is_union is union or struct? -ida_typeinf.udt_type_data_t.is_vftable (method) - is_vftable(self) -> bool +ida_typeinf.udt_type_data_t.is_vftable(self) -> bool -ida_typeinf.udt_type_data_t.pack (variable) +ida_typeinf.udt_type_data_t.pack #pragma pack() alignment (shift amount) -ida_typeinf.udt_type_data_t.sda (variable) +ida_typeinf.udt_type_data_t.sda declared structure alignment (shift amount+1). 0 - unspecified -ida_typeinf.udt_type_data_t.set_vftable (method) - set_vftable(self, on=True) - - @param on: bool +ida_typeinf.udt_type_data_t.set_fixed(self, on: bool = True) -> None -ida_typeinf.udt_type_data_t.swap (method) - swap(self, r) - - @param r: udt_type_data_t & +ida_typeinf.udt_type_data_t.set_vftable(self, on: bool = True) -> None -ida_typeinf.udt_type_data_t.taudt_bits (variable) +ida_typeinf.udt_type_data_t.swap(self, r: "udt_type_data_t") -> None + +ida_typeinf.udt_type_data_t.taudt_bits TA... and TAUDT... bits. -ida_typeinf.udt_type_data_t.total_size (variable) +ida_typeinf.udt_type_data_t.total_size total structure size in bytes -ida_typeinf.udt_type_data_t.unpadded_size (variable) +ida_typeinf.udt_type_data_t.unpadded_size unpadded structure size in bytes -ida_typeinf.udt_type_data_t.version (variable) +ida_typeinf.udt_type_data_t.version version of udt_type_data_t -ida_typeinf.udt_type_data_t__find_member (function) - udt_type_data_t__find_member(_this, udm, strmem_flags) -> ssize_t - - @param _this: udt_type_data_t const * - @param udm: udm_t * - @param strmem_flags: int +ida_typeinf.udt_type_data_t__find_member(_this: "udt_type_data_t", udm: "udm_t", strmem_flags: int) -> "ssize_t" -ida_typeinf.udt_type_data_t__get_best_fit_member (function) - udt_type_data_t__get_best_fit_member(_this, disp) -> ssize_t - - @param _this: udt_type_data_t const * - @param disp: asize_t +ida_typeinf.udt_type_data_t__get_best_fit_member(_this: "udt_type_data_t", disp: "asize_t") -> "ssize_t" -ida_typeinf.udtmembervec_t (class) - Proxy of C++ udtmembervec_t class. +ida_typeinf.udtmembervec_t -ida_typeinf.udtmembervec_t.__init__ (method) - __init__(self) -> udtmembervec_t +ida_typeinf.udtmembervec_t.__init__(self) -ida_typeinf.udtmembervec_template_t (class) - Proxy of C++ qvector< udm_t > class. +ida_typeinf.udtmembervec_template_t -ida_typeinf.udtmembervec_template_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< udm_t > const & +ida_typeinf.udtmembervec_template_t.__eq__(self, r: "udtmembervec_template_t") -> bool -ida_typeinf.udtmembervec_template_t.__getitem__ (method) - __getitem__(self, i) -> udm_t - - @param i: size_t +ida_typeinf.udtmembervec_template_t.__getitem__(self, i: "size_t") -> "udm_t const &" -ida_typeinf.udtmembervec_template_t.__init__ (method) - __init__(self) -> udtmembervec_template_t - __init__(self, x) -> udtmembervec_template_t - - @param x: qvector< udm_t > const & +ida_typeinf.udtmembervec_template_t.__init__(self, *args) -ida_typeinf.udtmembervec_template_t.__len__ (method) - __len__(self) -> size_t +ida_typeinf.udtmembervec_template_t.__len__(self) -> "size_t" -ida_typeinf.udtmembervec_template_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< udm_t > const & +ida_typeinf.udtmembervec_template_t.__ne__(self, r: "udtmembervec_template_t") -> bool -ida_typeinf.udtmembervec_template_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: udm_t const & +ida_typeinf.udtmembervec_template_t.__setitem__(self, i: "size_t", v: "udm_t") -> None -ida_typeinf.udtmembervec_template_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: udm_t const & +ida_typeinf.udtmembervec_template_t._del(self, x: "udm_t") -> bool -ida_typeinf.udtmembervec_template_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: udm_t const & +ida_typeinf.udtmembervec_template_t.add_unique(self, x: "udm_t") -> bool -ida_typeinf.udtmembervec_template_t.at (method) - at(self, _idx) -> udm_t - - @param _idx: size_t +ida_typeinf.udtmembervec_template_t.append(self, x: "udm_t") -> None -ida_typeinf.udtmembervec_template_t.begin (method) - begin(self) -> udm_t +ida_typeinf.udtmembervec_template_t.at(self, _idx: "size_t") -> "udm_t const &" -ida_typeinf.udtmembervec_template_t.capacity (method) - capacity(self) -> size_t +ida_typeinf.udtmembervec_template_t.begin(self, *args) -> "qvector< udm_t >::const_iterator" -ida_typeinf.udtmembervec_template_t.clear (method) - clear(self) +ida_typeinf.udtmembervec_template_t.capacity(self) -> "size_t" -ida_typeinf.udtmembervec_template_t.empty (method) - empty(self) -> bool +ida_typeinf.udtmembervec_template_t.clear(self) -> None -ida_typeinf.udtmembervec_template_t.end (method) - end(self) -> udm_t +ida_typeinf.udtmembervec_template_t.empty(self) -> bool -ida_typeinf.udtmembervec_template_t.erase (method) - erase(self, it) -> udm_t - - @param it: qvector< udm_t >::iterator - - erase(self, first, last) -> udm_t - - @param first: qvector< udm_t >::iterator - @param last: qvector< udm_t >::iterator +ida_typeinf.udtmembervec_template_t.end(self, *args) -> "qvector< udm_t >::const_iterator" -ida_typeinf.udtmembervec_template_t.extract (method) - extract(self) -> udm_t +ida_typeinf.udtmembervec_template_t.erase(self, *args) -> "qvector< udm_t >::iterator" -ida_typeinf.udtmembervec_template_t.find (method) - find(self, x) -> udm_t - - @param x: udm_t const & +ida_typeinf.udtmembervec_template_t.extend(self, x: "udtmembervec_template_t") -> None -ida_typeinf.udtmembervec_template_t.grow (method) - grow(self, x=udm_t()) - - @param x: udm_t const & +ida_typeinf.udtmembervec_template_t.extract(self) -> "udm_t *" -ida_typeinf.udtmembervec_template_t.has (method) - has(self, x) -> bool - - @param x: udm_t const & +ida_typeinf.udtmembervec_template_t.find(self, *args) -> "qvector< udm_t >::const_iterator" -ida_typeinf.udtmembervec_template_t.inject (method) - inject(self, s, len) - - @param s: udm_t * - @param len: size_t +ida_typeinf.udtmembervec_template_t.grow(self, *args) -> None -ida_typeinf.udtmembervec_template_t.insert (method) - insert(self, it, x) -> udm_t - - @param it: qvector< udm_t >::iterator - @param x: udm_t const & +ida_typeinf.udtmembervec_template_t.has(self, x: "udm_t") -> bool -ida_typeinf.udtmembervec_template_t.pop_back (method) - pop_back(self) +ida_typeinf.udtmembervec_template_t.inject(self, s: "udm_t", len: "size_t") -> None -ida_typeinf.udtmembervec_template_t.push_back (method) - push_back(self, x) - - @param x: udm_t const & - - push_back(self) -> udm_t +ida_typeinf.udtmembervec_template_t.insert(self, it: "udm_t", x: "udm_t") -> "qvector< udm_t >::iterator" -ida_typeinf.udtmembervec_template_t.qclear (method) - qclear(self) +ida_typeinf.udtmembervec_template_t.pop_back(self) -> None -ida_typeinf.udtmembervec_template_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_typeinf.udtmembervec_template_t.push_back(self, *args) -> "udm_t &" -ida_typeinf.udtmembervec_template_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: udm_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_typeinf.udtmembervec_template_t.qclear(self) -> None -ida_typeinf.udtmembervec_template_t.size (method) - size(self) -> size_t +ida_typeinf.udtmembervec_template_t.reserve(self, cnt: "size_t") -> None -ida_typeinf.udtmembervec_template_t.swap (method) - swap(self, r) - - @param r: qvector< udm_t > & +ida_typeinf.udtmembervec_template_t.resize(self, *args) -> None -ida_typeinf.udtmembervec_template_t.truncate (method) - truncate(self) +ida_typeinf.udtmembervec_template_t.size(self) -> "size_t" -ida_typeinf.unpack_idcobj_from_bv (function) - unpack_idcobj_from_bv(obj, tif, bytes, pio_flags=0) -> error_t +ida_typeinf.udtmembervec_template_t.swap(self, r: "udtmembervec_template_t") -> None + +ida_typeinf.udtmembervec_template_t.truncate(self) -> None + +ida_typeinf.unpack_idcobj_from_bv(obj: "idc_value_t *", tif: "tinfo_t", bytes: "bytevec_t const &", pio_flags: int = 0) -> "error_t" Read a typed idc object from the byte vector. - - @param obj: (C++: idc_value_t *) - @param tif: (C++: const tinfo_t &) tinfo_t const & - @param bytes: (C++: const bytevec_t &) bytevec_t const & - @param pio_flags: (C++: int) -ida_typeinf.unpack_idcobj_from_idb (function) - unpack_idcobj_from_idb(obj, tif, ea, off0, pio_flags=0) -> error_t +ida_typeinf.unpack_idcobj_from_idb(obj: "idc_value_t *", tif: "tinfo_t", ea: ida_idaapi.ea_t, off0: "bytevec_t const *", pio_flags: int = 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 &) tinfo_t const & - @param ea: (C++: ea_t) - @param off0: (C++: const bytevec_t *) bytevec_t const * - @param pio_flags: (C++: int) + Read a typed idc object from the database + -ida_typeinf.unpack_object_from_bv (function) - unpack_object_from_bv(ti, type, fields, bytes, pio_flags=0) -> PyObject * +ida_typeinf.unpack_object_from_bv(til: til_t, type: bytes, fields: bytes, bytes, pio_flags: int = 0) 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 type: type_t const * + @param til: Type library. 'None' can be passed. + @param type: 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 + @return: + - tuple(0, err) on failure - tuple(1, obj) on success -ida_typeinf.unpack_object_from_idb (function) - unpack_object_from_idb(ti, type, fields, ea, pio_flags=0) -> PyObject * - - @param ti: til_t * - @param type: type_t const * - @param fields: p_list const * - @param ea: ea_t - @param pio_flags: int +ida_typeinf.unpack_object_from_idb(til: til_t, type: bytes, fields: bytes, ea: ida_idaapi.ea_t, pio_flags: int = 0) + Unpacks from the database at 'ea' to an object. + Please refer to unpack_object_from_bv() -ida_typeinf.use_golang_cc (function) - use_golang_cc() -> bool +ida_typeinf.use_golang_cc() -> bool is GOLANG calling convention used by default? -ida_typeinf.valstr_t (class) - Proxy of C++ valstr_t class. +ida_typeinf.valstr_t -ida_typeinf.valstr_t.__init__ (method) - __init__(self) -> valstr_t +ida_typeinf.valstr_t.__init__(self) -ida_typeinf.valstr_t.info (variable) +ida_typeinf.valstr_t.info additional info -ida_typeinf.valstr_t.length (variable) +ida_typeinf.valstr_t.length length if printed on one line -ida_typeinf.valstr_t.members (variable) +ida_typeinf.valstr_t.members strings for members, each member separately -ida_typeinf.valstr_t.oneline (variable) +ida_typeinf.valstr_t.oneline result if printed on one line in UTF-8 encoding -ida_typeinf.valstr_t.props (variable) +ida_typeinf.valstr_t.props temporary properties, used internally -ida_typeinf.valstrs_t (class) - Proxy of C++ valstrs_t class. +ida_typeinf.valstrs_t -ida_typeinf.valstrs_t.__init__ (method) - __init__(self) -> valstrs_t +ida_typeinf.valstrs_t.__init__(self) -ida_typeinf.valstrvec_t (class) - Proxy of C++ qvector< valstr_t > class. +ida_typeinf.valstrvec_t -ida_typeinf.valstrvec_t.__getitem__ (method) - __getitem__(self, i) -> valstr_t - - @param i: size_t +ida_typeinf.valstrvec_t.__getitem__(self, i: "size_t") -> "valstr_t const &" -ida_typeinf.valstrvec_t.__init__ (method) - __init__(self) -> valstrvec_t - __init__(self, x) -> valstrvec_t - - @param x: qvector< valstr_t > const & +ida_typeinf.valstrvec_t.__init__(self, *args) -ida_typeinf.valstrvec_t.__len__ (method) - __len__(self) -> size_t +ida_typeinf.valstrvec_t.__len__(self) -> "size_t" -ida_typeinf.valstrvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: valstr_t const & +ida_typeinf.valstrvec_t.__setitem__(self, i: "size_t", v: "valstr_t") -> None -ida_typeinf.valstrvec_t.at (method) - at(self, _idx) -> valstr_t - - @param _idx: size_t +ida_typeinf.valstrvec_t.append(self, x: "valstr_t") -> None -ida_typeinf.valstrvec_t.begin (method) - begin(self) -> valstr_t +ida_typeinf.valstrvec_t.at(self, _idx: "size_t") -> "valstr_t const &" -ida_typeinf.valstrvec_t.capacity (method) - capacity(self) -> size_t +ida_typeinf.valstrvec_t.begin(self, *args) -> "qvector< valstr_t >::const_iterator" -ida_typeinf.valstrvec_t.clear (method) - clear(self) +ida_typeinf.valstrvec_t.capacity(self) -> "size_t" -ida_typeinf.valstrvec_t.empty (method) - empty(self) -> bool +ida_typeinf.valstrvec_t.clear(self) -> None -ida_typeinf.valstrvec_t.end (method) - end(self) -> valstr_t +ida_typeinf.valstrvec_t.empty(self) -> bool -ida_typeinf.valstrvec_t.erase (method) - erase(self, it) -> valstr_t - - @param it: qvector< valstr_t >::iterator - - erase(self, first, last) -> valstr_t - - @param first: qvector< valstr_t >::iterator - @param last: qvector< valstr_t >::iterator +ida_typeinf.valstrvec_t.end(self, *args) -> "qvector< valstr_t >::const_iterator" -ida_typeinf.valstrvec_t.extract (method) - extract(self) -> valstr_t +ida_typeinf.valstrvec_t.erase(self, *args) -> "qvector< valstr_t >::iterator" -ida_typeinf.valstrvec_t.grow (method) - grow(self, x=valstr_t()) - - @param x: valstr_t const & +ida_typeinf.valstrvec_t.extend(self, x: "valstrvec_t") -> None -ida_typeinf.valstrvec_t.inject (method) - inject(self, s, len) - - @param s: valstr_t * - @param len: size_t +ida_typeinf.valstrvec_t.extract(self) -> "valstr_t *" -ida_typeinf.valstrvec_t.insert (method) - insert(self, it, x) -> valstr_t - - @param it: qvector< valstr_t >::iterator - @param x: valstr_t const & +ida_typeinf.valstrvec_t.grow(self, *args) -> None -ida_typeinf.valstrvec_t.pop_back (method) - pop_back(self) +ida_typeinf.valstrvec_t.inject(self, s: "valstr_t", len: "size_t") -> None -ida_typeinf.valstrvec_t.push_back (method) - push_back(self, x) - - @param x: valstr_t const & - - push_back(self) -> valstr_t +ida_typeinf.valstrvec_t.insert(self, it: "valstr_t", x: "valstr_t") -> "qvector< valstr_t >::iterator" -ida_typeinf.valstrvec_t.qclear (method) - qclear(self) +ida_typeinf.valstrvec_t.pop_back(self) -> None -ida_typeinf.valstrvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_typeinf.valstrvec_t.push_back(self, *args) -> "valstr_t &" -ida_typeinf.valstrvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: valstr_t const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_typeinf.valstrvec_t.qclear(self) -> None -ida_typeinf.valstrvec_t.size (method) - size(self) -> size_t +ida_typeinf.valstrvec_t.reserve(self, cnt: "size_t") -> None -ida_typeinf.valstrvec_t.swap (method) - swap(self, r) - - @param r: qvector< valstr_t > & +ida_typeinf.valstrvec_t.resize(self, *args) -> None -ida_typeinf.valstrvec_t.truncate (method) - truncate(self) +ida_typeinf.valstrvec_t.size(self) -> "size_t" -ida_typeinf.value_repr_t (class) - Proxy of C++ value_repr_t class. +ida_typeinf.valstrvec_t.swap(self, r: "valstrvec_t") -> None -ida_typeinf.value_repr_t.__init__ (method) - __init__(self) -> value_repr_t +ida_typeinf.valstrvec_t.truncate(self) -> None -ida_typeinf.value_repr_t.__str__ (method) - __str__(self) -> qstring +ida_typeinf.value_repr_t -ida_typeinf.value_repr_t._print (method) - _print(self, colored=False) -> size_t - - Parameters - ---------- - colored: bool +ida_typeinf.value_repr_t.__init__(self) -ida_typeinf.value_repr_t.ap (variable) - FRB_TABFORM, AP_SIGNED is ignored, use FRB_SIGNED instead +ida_typeinf.value_repr_t.__str__(self) -> str -ida_typeinf.value_repr_t.cd (variable) +ida_typeinf.value_repr_t._print(self, colored: bool = False) -> "size_t" + +ida_typeinf.value_repr_t.ap + FRB_TABFORM, AP_SIGNED is ignored, use FRB_SIGNED instead + + +ida_typeinf.value_repr_t.cd FRB_CUSTOM. -ida_typeinf.value_repr_t.clear (method) - clear(self) +ida_typeinf.value_repr_t.clear(self) -> None -ida_typeinf.value_repr_t.delta (variable) +ida_typeinf.value_repr_t.delta FRB_STROFF. -ida_typeinf.value_repr_t.empty (method) - empty(self) -> bool +ida_typeinf.value_repr_t.empty(self) -> bool -ida_typeinf.value_repr_t.from_opinfo (method) - from_opinfo(self, flags, afl, opinfo, _ap) -> bool - - @param flags: flags64_t - @param afl: aflags_t - @param opinfo: opinfo_t const * - @param _ap: array_parameters_t const * +ida_typeinf.value_repr_t.from_opinfo(self, flags: "flags64_t", afl: "aflags_t", opinfo: "opinfo_t", _ap: "array_parameters_t") -> bool -ida_typeinf.value_repr_t.get_vtype (method) - get_vtype(self) -> uint64 +ida_typeinf.value_repr_t.get_vtype(self) -> "uint64" -ida_typeinf.value_repr_t.has_lzeroes (method) - has_lzeroes(self) -> bool +ida_typeinf.value_repr_t.has_lzeroes(self) -> bool -ida_typeinf.value_repr_t.has_tabform (method) - has_tabform(self) -> bool +ida_typeinf.value_repr_t.has_tabform(self) -> bool -ida_typeinf.value_repr_t.init_ap (method) - init_ap(self, _ap) - - @param _ap: array_parameters_t * +ida_typeinf.value_repr_t.init_ap(self, _ap: "array_parameters_t") -> None -ida_typeinf.value_repr_t.is_custom (method) - is_custom(self) -> bool +ida_typeinf.value_repr_t.is_custom(self) -> bool -ida_typeinf.value_repr_t.is_enum (method) - is_enum(self) -> bool +ida_typeinf.value_repr_t.is_enum(self) -> bool -ida_typeinf.value_repr_t.is_offset (method) - is_offset(self) -> bool +ida_typeinf.value_repr_t.is_offset(self) -> bool -ida_typeinf.value_repr_t.is_signed (method) - is_signed(self) -> bool +ida_typeinf.value_repr_t.is_signed(self) -> bool -ida_typeinf.value_repr_t.is_strlit (method) - is_strlit(self) -> bool +ida_typeinf.value_repr_t.is_strlit(self) -> bool -ida_typeinf.value_repr_t.is_stroff (method) - is_stroff(self) -> bool +ida_typeinf.value_repr_t.is_stroff(self) -> bool -ida_typeinf.value_repr_t.is_typref (method) - is_typref(self) -> bool +ida_typeinf.value_repr_t.is_typref(self) -> bool -ida_typeinf.value_repr_t.parse_value_repr (method) - parse_value_repr(self, attr, target_type=BTF_STRUCT) -> bool - - @param attr: qstring const & - @param target_type: type_t +ida_typeinf.value_repr_t.parse_value_repr(self, *args) -> bool -ida_typeinf.value_repr_t.ri (variable) +ida_typeinf.value_repr_t.ri FRB_OFFSET. -ida_typeinf.value_repr_t.set_ap (method) - set_ap(self, _ap) - - @param _ap: array_parameters_t const & +ida_typeinf.value_repr_t.set_ap(self, _ap: "array_parameters_t") -> None -ida_typeinf.value_repr_t.set_lzeroes (method) - set_lzeroes(self, on) - - @param on: bool +ida_typeinf.value_repr_t.set_lzeroes(self, on: bool) -> None -ida_typeinf.value_repr_t.set_signed (method) - set_signed(self, on) - - @param on: bool +ida_typeinf.value_repr_t.set_signed(self, on: bool) -> None -ida_typeinf.value_repr_t.set_tabform (method) - set_tabform(self, on) - - @param on: bool +ida_typeinf.value_repr_t.set_tabform(self, on: bool) -> None -ida_typeinf.value_repr_t.set_vtype (method) - set_vtype(self, vt) - - @param vt: uint64 +ida_typeinf.value_repr_t.set_vtype(self, vt: "uint64") -> None -ida_typeinf.value_repr_t.strtype (variable) +ida_typeinf.value_repr_t.strtype FRB_STRLIT. -ida_typeinf.value_repr_t.swap (method) - swap(self, r) - - @param r: value_repr_t & +ida_typeinf.value_repr_t.swap(self, r: "value_repr_t") -> None -ida_typeinf.value_repr_t.type_ordinal (variable) +ida_typeinf.value_repr_t.type_ordinal FRB_STROFF, FRB_ENUM. -ida_typeinf.value_repr_t__from_opinfo (function) - value_repr_t__from_opinfo(_this, flags, afl, opinfo, ap) -> bool - - @param _this: value_repr_t * - @param flags: flags64_t - @param afl: aflags_t - @param opinfo: opinfo_t const * - @param ap: array_parameters_t const * +ida_typeinf.value_repr_t__from_opinfo(_this: "value_repr_t", flags: "flags64_t", afl: "aflags_t", opinfo: "opinfo_t", ap: "array_parameters_t") -> bool -ida_typeinf.value_repr_t__print_ (function) - value_repr_t__print_(_this, colored) -> str - - @param _this: value_repr_t const * - @param colored: bool +ida_typeinf.value_repr_t__print_(_this: "value_repr_t", colored: bool) -> str -ida_typeinf.verify_argloc (function) - verify_argloc(vloc, size, gaps) -> int - Verify argloc_t. - - @param vloc: (C++: const argloc_t &) argloc to verify - @param size: (C++: int) total size of the variable - @param gaps: (C++: const rangeset_t *) if not nullptr, specifies gaps in structure definition. these gaps - should not map to any argloc, but everything else must be covered - @return: 0 if ok, otherwise an interr code. +ida_typeinf.verify_argloc(vloc: "argloc_t", size: int, gaps: "rangeset_t") -> int + Verify argloc_t. + + @param vloc: argloc to verify + @param size: total size of the variable + @param gaps: if not nullptr, specifies gaps in structure definition. these gaps should not map to any argloc, but everything else must be covered + @returns 0 if ok, otherwise an interr code. -ida_typeinf.verify_tinfo (function) - verify_tinfo(typid) -> int - - @param typid: uint32 +ida_typeinf.verify_tinfo(typid: "typid_t") -> int -ida_typeinf.visit_subtypes (function) - visit_subtypes(visitor, out, tif, name, cmt) -> int - - @param visitor: tinfo_visitor_t * - @param out: type_mods_t * - @param tif: tinfo_t const & - @param name: char const * - @param cmt: char const * +ida_typeinf.visit_stroff_udms(sfv: "udm_visitor_t", path: "tid_t const *", disp: "adiff_t *", appzero: bool) -> "adiff_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 + @param path: struct path (path[0] contains the initial struct id) + @param disp: offset into structure + @param appzero: should visit field at offset zero? + @returns visitor result -ida_typeinf.write_tinfo_bitfield_value (function) - write_tinfo_bitfield_value(typid, dst, v, bitoff) -> uint64 - - @param typid: uint32 - @param dst: uint64 - @param v: uint64 - @param bitoff: int +ida_typeinf.visit_subtypes(visitor: "tinfo_visitor_t", out: "type_mods_t", tif: "tinfo_t", name: str, cmt: str) -> int -ida_ua (module) +ida_typeinf.write_tinfo_bitfield_value(typid: "typid_t", dst: "uint64", v: "uint64", bitoff: int) -> "uint64" + +ida_ua Functions that deal with the disassembling of program instructions. There are 2 kinds of functions: - * functions that are called from the kernel to disassemble an instruction. These - functions call IDP module for it. - * functions that are called from IDP module to disassemble an instruction. We - will call them 'helper functions'. + * functions that are called from the kernel to disassemble an instruction. These functions call IDP module for it. + * functions that are called from IDP module to disassemble an instruction. We will call them 'helper functions'. + Disassembly of an instruction is made in three steps: - 1. analysis: ana.cpp - 2. emulation: emu.cpp - 3. conversion to text: out.cpp + 0. analysis: ana.cpp + 1. emulation: emu.cpp + 2. conversion to text: out.cpp - The kernel calls the IDP module to perform these steps. At first, the kernel - always calls the analysis. The analyzer must decode the instruction and fill the - insn_t instance that it receives through its callback. It must not change - anything in the database. - The second step, the emulation, is called for each instruction. This step must - make necessary changes to the database, plan analysis of subsequent - instructions, track register values, memory contents, etc. Please keep in mind - that the kernel may call the emulation step for any address in the program - - there is no ordering of addresses. Usually, the emulation is called for - consecutive addresses but this is not guaranteed. - - The last step, conversion to text, is called each time an instruction is - displayed on the screen. The kernel will always call the analysis step before - calling the text conversion step. The emulation and the text conversion steps - should use the information stored in the insn_t instance they receive. They - should not access the bytes of the instruction and decode it again - this should - only be done in the analysis step. + The kernel calls the IDP module to perform these steps. At first, the kernel always calls the analysis. The analyzer must decode the instruction and fill the insn_t instance that it receives through its callback. It must not change anything in the database. + The second step, the emulation, is called for each instruction. This step must make necessary changes to the database, plan analysis of subsequent instructions, track register values, memory contents, etc. Please keep in mind that the kernel may call the emulation step for any address in the program - there is no ordering of addresses. Usually, the emulation is called for consecutive addresses but this is not guaranteed. + The last step, conversion to text, is called each time an instruction is displayed on the screen. The kernel will always call the analysis step before calling the text conversion step. The emulation and the text conversion steps should use the information stored in the insn_t instance they receive. They should not access the bytes of the instruction and decode it again - this should only be done in the analysis step. + -ida_ua.FCBF_CONT (variable) +ida_ua.BINOPSTATE_DONE + have been generated + +ida_ua.BINOPSTATE_GO + being generated + +ida_ua.BINOPSTATE_NONE + not generated yet + +ida_ua.COMMSTATE_DONE + have been generated + +ida_ua.COMMSTATE_GO + being generated + +ida_ua.COMMSTATE_NONE + not generated yet + +ida_ua.CTXF_BINOP_STATE + opcode bytes state: + +ida_ua.CTXF_BIT_PREFIX + generate a line prefix with a bit offset, e.g.: 12345678.3 + +ida_ua.CTXF_CMT_STATE + comment state: + +ida_ua.CTXF_CODE + display as code regardless of the database flags + +ida_ua.CTXF_DBLIND_OPND + an operand was printed with double indirection (e.g. =var in arm) + +ida_ua.CTXF_DEMANGLED_LABEL + generate only demangled label as comment + +ida_ua.CTXF_DEMANGLED_OK + the label has been demangled successfully + +ida_ua.CTXF_GEN_CMT + generate the comment along with the next line + +ida_ua.CTXF_GEN_XREFS + generate the xrefs along with the next line + +ida_ua.CTXF_HIDDEN_ADDR + To generate an hidden addr tag at the beginning of the line. + +ida_ua.CTXF_LABEL_OK + the label have been generated + +ida_ua.CTXF_MAIN + produce only the essential line(s) + +ida_ua.CTXF_MULTI + enable multi-line essential lines + +ida_ua.CTXF_NORMAL_LABEL + generate plain label (+demangled label as cmt) + +ida_ua.CTXF_OUTCTX_T + instance is, in fact, a outctx_t + +ida_ua.CTXF_OVSTORE_PRNT + out_value should store modified values + +ida_ua.CTXF_STACK + stack view (display undefined items as 2/4/8 bytes) + +ida_ua.CTXF_VOIDS + display void marks + +ida_ua.CTXF_XREF_STATE + xref state: + +ida_ua.FCBF_CONT don't stop on decoding, or any other kind of error -ida_ua.FCBF_DELIM (variable) - 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_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 (variable) - in case of an error, use a CP_REPLCHAR instead of a hex representation of the - problematic byte +ida_ua.FCBF_ERR_REPL + in case of an error, use a CP_REPLCHAR instead of a hex representation of the problematic byte + -ida_ua.FCBF_FF_LIT (variable) - 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.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 (variable) +ida_ua.GH_BYTESEX_HAS_HIGHBYTE + describe inf.is_wide_high_byte_first() + +ida_ua.GH_PRINT_ASM + selected assembler + +ida_ua.GH_PRINT_BYTESEX + byte sex + +ida_ua.GH_PRINT_HEADER + lines from ash.header + +ida_ua.GH_PRINT_PROC + processor name + +ida_ua.INSN_64BIT belongs to 64bit segment? -ida_ua.INSN_MACRO (variable) +ida_ua.INSN_MACRO macro instruction -ida_ua.INSN_MODMAC (variable) +ida_ua.INSN_MODMAC may modify the database to make room for the macro insn -ida_ua.OF_NO_BASE_DISP (variable) - base displacement doesn't exist. meaningful only for o_displ type. if set, base - displacement (op_t::addr) doesn't exist. +ida_ua.MAKELINE_BINPREF + allow display of binary prefix -ida_ua.OF_NUMBER (variable) +ida_ua.MAKELINE_STACK + allow display of sp trace prefix + +ida_ua.MAKELINE_VOID + allow display of '<suspicious>' marks + +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 (variable) - outer displacement exists. meaningful only for o_displ type. if set, outer - displacement (op_t::value) exists. +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 (variable) +ida_ua.OF_SHOW should the operand be displayed? -ida_ua.OOFS_IFSIGN (variable) +ida_ua.OOFS_IFSIGN output sign if needed -ida_ua.OOFS_NEEDSIGN (variable) +ida_ua.OOFS_NEEDSIGN always out sign (+-) -ida_ua.OOFS_NOSIGN (variable) +ida_ua.OOFS_NOSIGN don't output sign, forbid the user to change the sign -ida_ua.OOFW_16 (variable) +ida_ua.OOFW_16 16 bit width -ida_ua.OOFW_24 (variable) +ida_ua.OOFW_24 24 bit width -ida_ua.OOFW_32 (variable) +ida_ua.OOFW_32 32 bit width -ida_ua.OOFW_64 (variable) +ida_ua.OOFW_64 64 bit width -ida_ua.OOFW_8 (variable) +ida_ua.OOFW_8 8 bit width -ida_ua.OOFW_IMM (variable) +ida_ua.OOFW_IMM take from x.dtype -ida_ua.OOF_ADDR (variable) +ida_ua.OOF_ADDR output x.addr, otherwise x.value -ida_ua.OOF_ANYSERIAL (variable) +ida_ua.OOF_ANYSERIAL if enum: select first available serial -ida_ua.OOF_LZEROES (variable) +ida_ua.OOF_LZEROES print leading zeroes -ida_ua.OOF_NOBNOT (variable) +ida_ua.OOF_NOBNOT prohibit use of binary not -ida_ua.OOF_NO_LZEROES (variable) - do not print leading zeroes; if none of OOF_LZEROES and OOF_NO_LZEROES was - specified, is_lzero() is used +ida_ua.OOF_NO_LZEROES + do not print leading zeroes; if none of OOF_LZEROES and OOF_NO_LZEROES was specified, is_lzero() is used + -ida_ua.OOF_NUMBER (variable) +ida_ua.OOF_NUMBER always as a number -ida_ua.OOF_OUTER (variable) +ida_ua.OOF_OUTER output outer operand -ida_ua.OOF_SIGNED (variable) +ida_ua.OOF_SIGNED output as signed if < 0 -ida_ua.OOF_SIGNMASK (variable) +ida_ua.OOF_SIGNMASK sign symbol (+/-) output -ida_ua.OOF_SPACES (variable) - do not suppress leading spaces; currently works only for floating point numbers +ida_ua.OOF_SPACES + do not suppress leading spaces; currently works only for floating point numbers + -ida_ua.OOF_WIDTHMASK (variable) +ida_ua.OOF_WIDTHMASK width of value in bits -ida_ua.OOF_ZSTROFF (variable) - meaningful only if is_stroff(F); append a struct field name if the field offset - is zero? if AFL_ZSTROFF is set, then this flag is ignored. +ida_ua.OOF_ZSTROFF + meaningful only if is_stroff(F); 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 (variable) - packed factor defined. (!o_reg + dt_packreal) +ida_ua.PACK_FORM_DEF + packed factor defined. (!o_reg + dt_packreal) + -ida_ua.STKVAR_VALID_SIZE (variable) - x.dtype 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_ua.STKVAR_VALID_SIZE + x.dtype 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_ua.calc_dataseg (function) - 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 &) an ida_ua.insn_t, or an address (C++: const insn_t &) - @param n: (C++: int) - @param rgnum: (C++: int) +ida_ua.XREFSTATE_DONE + have been generated -ida_ua.can_decode (function) - can_decode(ea) -> bool - Can the bytes at address 'ea' be decoded as instruction? - - @param ea: (C++: ea_t) linear address - @return: whether or not the contents at that address could be a valid - instruction +ida_ua.XREFSTATE_GO + being generated -ida_ua.construct_macro (function) - construct_macro(insn, enable, build_macro) -> bool +ida_ua.XREFSTATE_NONE + not generated yet + +ida_ua.calc_dataseg(insn: "insn_t", n: int = -1, rgnum: int = -1) -> ida_idaapi.ea_t + +ida_ua.can_decode(ea: ida_idaapi.ea_t) -> bool + Can the bytes at address 'ea' be decoded as instruction? + + @param ea: linear address + @returns whether or not the contents at that address could be a valid instruction + +ida_ua.construct_macro(*args) See ua.hpp's construct_macro(). - @param insn: insn_t & - @param enable: bool - @param build_macro: PyObject * - -ida_ua.construct_macro2 (function) - construct_macro2(_this, insn, enable) -> bool + This function has the following signatures - @param _this: macro_constructor_t * - @param insn: insn_t * - @param enable: bool - -ida_ua.create_insn (function) - 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. + 1. construct_macro(insn: insn_t, enable: bool, build_macro: callable) -> bool + 2. construct_macro(constuctor: macro_constructor_t, insn: insn_t, enable: bool) -> bool - @param ea: (C++: ea_t) linear address - @param out: (C++: insn_t *) the resulting instruction - @return: the length of the instruction or 0 + @param insn: the instruction to build the macro for + @param enable: enable macro generation + @param build_macro: a callable with 2 arguments: an insn_t, and + whether it is ok to consider the next instruction + for the macro + @param constructor: a macro_constructor_t implementation + @return: success -ida_ua.create_outctx (function) - 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++: flags64_t) - @param suspop: (C++: int) +ida_ua.create_insn(ea: ida_idaapi.ea_t, out: "insn_t" = 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 + @param out: the resulting instruction + @returns the length of the instruction or 0 -ida_ua.decode_insn (function) - 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: (C++: insn_t *) the resulting instruction - @param ea: (C++: ea_t) linear address - @return: the length of the (possible) instruction or 0 +ida_ua.create_outctx(ea: ida_idaapi.ea_t, F: "flags64_t" = 0, suspop: int = 0) -> "outctx_base_t *" + Create a new output context. To delete it, just use "delete pctx" + -ida_ua.decode_preceding_insn (function) - decode_preceding_insn(out, ea) -> (int, int) - Decodes the preceding instruction. Please check ua.hpp / decode_preceding_insn() +ida_ua.decode_insn(out: "insn_t", ea: ida_idaapi.ea_t) -> 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 + @param ea: linear address + @returns the length of the (possible) instruction or 0 + +ida_ua.decode_preceding_insn(out: insn_t, ea: ida_idaapi.ea_t) -> Tuple[ida_idaapi.ea_t, bool] + Decodes the preceding instruction. @param out: instruction storage @param ea: current ea @return: tuple(preceeding_ea or BADADDR, farref = Boolean) -ida_ua.decode_prev_insn (function) - decode_prev_insn(out, ea) -> ea_t - Decode previous instruction if it exists, fill 'out'. - - @param out: (C++: insn_t *) the resulting instruction - @param ea: (C++: ea_t) the address to decode the previous instruction from - @return: the previous instruction address (BADADDR-no such insn) +ida_ua.decode_prev_insn(out: "insn_t", ea: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Decode previous instruction if it exists, fill 'out'. + + @param out: the resulting instruction + @param ea: the address to decode the previous instruction from + @returns the previous instruction address (BADADDR-no such insn) -ida_ua.dt_bitfild (variable) +ida_ua.dt_bitfild bit field (mc680x0) -ida_ua.dt_byte (variable) +ida_ua.dt_byte 8 bit integer -ida_ua.dt_byte16 (variable) +ida_ua.dt_byte16 128 bit integer -ida_ua.dt_byte32 (variable) +ida_ua.dt_byte32 256 bit integer -ida_ua.dt_byte64 (variable) +ida_ua.dt_byte64 512 bit integer -ida_ua.dt_code (variable) +ida_ua.dt_code ptr to code (not used?) -ida_ua.dt_double (variable) +ida_ua.dt_double 8 byte floating point -ida_ua.dt_dword (variable) +ida_ua.dt_dword 32 bit integer -ida_ua.dt_float (variable) +ida_ua.dt_float 4 byte floating point -ida_ua.dt_fword (variable) +ida_ua.dt_fword 48 bit -ida_ua.dt_half (variable) +ida_ua.dt_half 2-byte floating point -ida_ua.dt_ldbl (variable) +ida_ua.dt_ldbl long double (which may be different from tbyte) -ida_ua.dt_packreal (variable) +ida_ua.dt_packreal packed real format for mc68040 -ida_ua.dt_qword (variable) +ida_ua.dt_qword 64 bit integer -ida_ua.dt_string (variable) +ida_ua.dt_string pointer to asciiz string -ida_ua.dt_tbyte (variable) +ida_ua.dt_tbyte variable size ( processor_t::tbyte_size) floating point -ida_ua.dt_unicode (variable) +ida_ua.dt_unicode pointer to unicode string -ida_ua.dt_void (variable) +ida_ua.dt_void none -ida_ua.dt_word (variable) +ida_ua.dt_word 16 bit integer -ida_ua.get_dtype_by_size (function) - get_dtype_by_size(size) -> int +ida_ua.get_dtype_by_size(size: "asize_t") -> int Get op_t::dtype from size. - - @param size: (C++: asize_t) -ida_ua.get_dtype_flag (function) - get_dtype_flag(dtype) -> flags64_t +ida_ua.get_dtype_flag(dtype: "op_dtype_t") -> "flags64_t" Get flags for op_t::dtype field. - - @param dtype: (C++: op_dtype_t) -ida_ua.get_dtype_size (function) - get_dtype_size(dtype) -> size_t +ida_ua.get_dtype_size(dtype: "op_dtype_t") -> "size_t" Get size of opt_::dtype field. - - @param dtype: (C++: op_dtype_t) -ida_ua.get_immvals (function) - get_immvals(ea, n, F=0) -> [int, ...] - 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: (C++: ea_t) address to analyze - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all the operands - @param F: (C++: flags64_t) flags for the specified address - @return: number of immediate values (0..2*UA_MAXOP) +ida_ua.get_immvals(ea: ida_idaapi.ea_t, n: int, F: "flags64_t" = 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 + @param n: 0..UA_MAXOP-1 operand number, OPND_ALL all the operands + @param F: flags for the specified address + @returns number of immediate values (0..2*UA_MAXOP) -ida_ua.get_lookback (function) - 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 = <number>. IDP may use it as - you like it. (TMS module uses it) +ida_ua.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 = <number>. IDP may use it as you like it. (TMS module uses it) + -ida_ua.get_printable_immvals (function) - get_printable_immvals(ea, n, F=0) -> PyObject * - Get immediate ready-to-print values at the specified address - - @param ea: (C++: ea_t) address to analyze - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all the operands - @param F: (C++: flags64_t) flags for the specified address - @return: number of immediate values (0..2*UA_MAXOP) +ida_ua.get_printable_immvals(ea: ida_idaapi.ea_t, n: int, F: "flags64_t" = 0) -> "PyObject *" + Get immediate ready-to-print values at the specified address + + @param ea: address to analyze + @param n: 0..UA_MAXOP-1 operand number, OPND_ALL all the operands + @param F: flags for the specified address + @returns number of immediate values (0..2*UA_MAXOP) -ida_ua.insn_add_cref (function) - insn_add_cref(insn, to, opoff, type) - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param to: ea_t - @param opoff: int - @param type: enum cref_t +ida_ua.insn_add_cref(insn: "insn_t", to: ida_idaapi.ea_t, opoff: int, type: "cref_t") -> None -ida_ua.insn_add_dref (function) - insn_add_dref(insn, to, opoff, type) - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param to: ea_t - @param opoff: int - @param type: enum dref_t +ida_ua.insn_add_dref(insn: "insn_t", to: ida_idaapi.ea_t, opoff: int, type: "dref_t") -> None -ida_ua.insn_add_off_drefs (function) - insn_add_off_drefs(insn, x, type, outf) -> ea_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param x: op_t const & - @param type: enum dref_t - @param outf: int +ida_ua.insn_add_off_drefs(insn: "insn_t", x: "op_t", type: "dref_t", outf: int) -> ida_idaapi.ea_t -ida_ua.insn_create_stkvar (function) - insn_create_stkvar(insn, x, v, flags) -> bool - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param x: op_t const & - @param v: adiff_t - @param flags: int +ida_ua.insn_create_stkvar(insn: "insn_t", x: "op_t", v: "adiff_t", flags: int) -> bool -ida_ua.insn_t (class) - Proxy of C++ insn_t class. +ida_ua.insn_t -ida_ua.insn_t.__get_auxpref__ (method) - __get_auxpref__(self) -> uint32 +ida_ua.insn_t.__get_auxpref__(self) -> int -ida_ua.insn_t.__get_operand__ (method) - __get_operand__(self, n) -> op_t - - @param n: int +ida_ua.insn_t.__get_operand__(self, n: int) -> "op_t *" -ida_ua.insn_t.__get_ops__ (method) - __get_ops__(self) -> operands_array +ida_ua.insn_t.__get_ops__(self) -> "wrapped_array_t< op_t,8 >" -ida_ua.insn_t.__getitem__ (method) +ida_ua.insn_t.__getitem__(self, idx) Operands can be accessed directly as indexes - @return: op_t: Returns an operand of type op_t + @return op_t: Returns an operand of type op_t -ida_ua.insn_t.__init__ (method) - __init__(self) -> insn_t +ida_ua.insn_t.__init__(self) -ida_ua.insn_t.__iter__ (method) +ida_ua.insn_t.__iter__(self) -ida_ua.insn_t.__set_auxpref__ (method) - __set_auxpref__(self, v) - - @param v: uint32 +ida_ua.insn_t.__set_auxpref__(self, v: int) -> None -ida_ua.insn_t.add_cref (method) - add_cref(self, to, opoff, type) - Add a code cross-reference from the instruction. - - @param to: (C++: ea_t) target linear address - @param opoff: (C++: int) offset of the operand from the start of instruction. if the offset - is unknown, then 0. - @param type: (C++: cref_t) type of xref +ida_ua.insn_t.add_cref(self, to: ida_idaapi.ea_t, opoff: int, type: "cref_t") -> None + Add a code cross-reference from the instruction. + + @param to: target linear address + @param opoff: offset of the operand from the start of instruction. if the offset is unknown, then 0. + @param type: type of xref -ida_ua.insn_t.add_dref (method) - add_dref(self, to, opoff, type) - Add a data cross-reference from the instruction. See add_off_drefs() - usually - it can be used in most cases. - - @param to: (C++: ea_t) target linear address - @param opoff: (C++: int) offset of the operand from the start of instruction if the offset - is unknown, then 0 - @param type: (C++: dref_t) type of xref +ida_ua.insn_t.add_dref(self, to: ida_idaapi.ea_t, opoff: int, type: "dref_t") -> None + Add a data cross-reference from the instruction. See add_off_drefs() - usually it can be used in most cases. + + @param to: target linear address + @param opoff: offset of the operand from the start of instruction if the offset is unknown, then 0 + @param type: type of xref -ida_ua.insn_t.add_off_drefs (method) - add_off_drefs(self, x, type, outf) -> ea_t - Add xrefs for an operand of the instruction. This function creates all cross - references for 'enum', 'offset' and 'structure offset' operands. Use - add_off_drefs() in the presence of negative offsets. - - @param x: (C++: const op_t &) reference to operand - @param type: (C++: dref_t) type of xref - @param outf: (C++: int) out_value() flags. These flags should match the flags used to - output the operand - @return: if is_off(): the reference target address (the same as - calc_reference_data). if is_stroff(): BADADDR because for stroffs the - target address is unknown else: BADADDR because enums do not represent - addresses +ida_ua.insn_t.add_off_drefs(self, x: "op_t", type: "dref_t", outf: int) -> ida_idaapi.ea_t + Add xrefs for an operand of the instruction. This function creates all cross references for 'enum', 'offset' and 'structure offset' operands. Use add_off_drefs() in the presence of negative offsets. + + @param x: reference to operand + @param type: type of xref + @param outf: out_value() flags. These flags should match the flags used to output the operand + @retval if: is_off(): the reference target address (the same as calc_reference_data). + @retval if: is_stroff(): BADADDR because for stroffs the target address is unknown + @retval otherwise: BADADDR because enums do not represent addresses -ida_ua.insn_t.assign (method) - assign(self, other) - - @param other: an ida_ua.insn_t, or an address (C++: const insn_t &) +ida_ua.insn_t.assign(self, other: "insn_t") -> None -ida_ua.insn_t.auxpref (variable) +ida_ua.insn_t.auxpref processor dependent field -ida_ua.insn_t.create_op_data (method) - create_op_data(self, ea_, opoff, dtype) -> bool - Convenient alias. - - @param ea_: (C++: ea_t) - @param opoff: int - @param dtype: op_dtype_t - - create_op_data(self, ea_, op) -> bool - - @param ea_: ea_t - @param op: op_t const & +ida_ua.insn_t.auxpref + processor dependent field -ida_ua.insn_t.create_stkvar (method) - create_stkvar(self, x, v, flags_) -> bool - Create or modify a stack variable in the function frame. The emulator could use - this function to create stack variables in the function frame before converting - the operand to a stack variable. Please check with may_create_stkvars() before - calling this function. - - @param x: (C++: const op_t &) operand (used to determine the addressing type) - @param v: (C++: adiff_t) a displacement in the operand - @param flags_: (C++: int) Stack variable flags - @retval 1: ok, a stack variable exists now - @retval 0: no, couldn't create stack variable +ida_ua.insn_t.create_op_data(self, *args) -> bool -ida_ua.insn_t.cs (variable) +ida_ua.insn_t.create_stkvar(self, x: "op_t", v: "adiff_t", flags_: int) -> bool + +ida_ua.insn_t.cs Current segment base paragraph. Initialized by the kernel. -ida_ua.insn_t.ea (variable) - Linear address of the instruction. Initialized by the kernel. +ida_ua.insn_t.ea + Linear address of the instruction. Initialized by the kernel. + -ida_ua.insn_t.flags (variable) +ida_ua.insn_t.flags Instruction flags -ida_ua.insn_t.get_canon_feature (method) - get_canon_feature(self, ph) -> uint32 +ida_ua.insn_t.get_canon_feature(self, *args) -> int see instruc_t::feature - - @param ph: (C++: const processor_t &) processor_t const & - - get_canon_feature(self) -> uint32 -ida_ua.insn_t.get_canon_mnem (method) - get_canon_mnem(self, ph) -> char const +ida_ua.insn_t.get_canon_mnem(self, *args) -> str see instruc_t::name - - @param ph: (C++: const processor_t &) processor_t const & - - get_canon_mnem(self) -> char const * -ida_ua.insn_t.get_next_byte (method) - get_next_byte(self) -> uint8 +ida_ua.insn_t.get_next_byte(self) -> "uint8" -ida_ua.insn_t.get_next_dword (method) - get_next_dword(self) -> uint32 +ida_ua.insn_t.get_next_dword(self) -> int -ida_ua.insn_t.get_next_qword (method) - get_next_qword(self) -> uint64 +ida_ua.insn_t.get_next_qword(self) -> "uint64" -ida_ua.insn_t.get_next_word (method) - get_next_word(self) -> uint16 +ida_ua.insn_t.get_next_word(self) -> "uint16" -ida_ua.insn_t.insnpref (variable) +ida_ua.insn_t.insnpref processor dependent field -ida_ua.insn_t.ip (variable) - Virtual address of the instruction (address within the segment). Initialized by - the kernel. +ida_ua.insn_t.ip + Virtual address of the instruction (address within the segment). Initialized by the kernel. + -ida_ua.insn_t.is_64bit (method) - is_64bit(self) -> bool +ida_ua.insn_t.is_64bit(self) -> bool Belongs to a 64bit segment? -ida_ua.insn_t.is_canon_insn (method) - is_canon_insn(self, ph) -> bool +ida_ua.insn_t.is_canon_insn(self, *args) -> bool see processor_t::is_canon_insn() - - @param ph: (C++: const processor_t &) processor_t const & - - is_canon_insn(self) -> bool -ida_ua.insn_t.is_macro (method) - is_macro(self) -> bool +ida_ua.insn_t.is_macro(self) -> bool Is a macro instruction? -ida_ua.insn_t.itype (variable) - Internal code of instruction (only for canonical insns - not user defined!). IDP - should define its own instruction codes. These codes are usually defined in - ins.hpp. The array of instruction names and features (ins.cpp) is accessed using - this code. +ida_ua.insn_t.itype + Internal code of instruction (only for canonical insns - not user defined!). IDP should define its own instruction codes. These codes are usually defined in ins.hpp. The array of instruction names and features (ins.cpp) is accessed using this code. + -ida_ua.insn_t.ops (variable) +ida_ua.insn_t.ops array of operands -ida_ua.insn_t.segpref (variable) +ida_ua.insn_t.ops + array of operands + +ida_ua.insn_t.segpref processor dependent field -ida_ua.insn_t.size (variable) - Size of instruction in bytes. The analyzer should put here the actual size of - the instruction. +ida_ua.insn_t.size + Size of instruction in bytes. The analyzer should put here the actual size of the instruction. + -ida_ua.insn_t__from_ptrval__ (function) - insn_t__from_ptrval__(ptrval) -> insn_t - - @param ptrval: size_t +ida_ua.insn_t__from_ptrval__(ptrval: "size_t") -> "insn_t *" -ida_ua.is_floating_dtype (function) - is_floating_dtype(dtype) -> bool +ida_ua.is_floating_dtype(dtype: "op_dtype_t") -> bool Is a floating type operand? - - @param dtype: (C++: op_dtype_t) -ida_ua.macro_constructor_t (class) - Proxy of C++ macro_constructor_t class. +ida_ua.macro_constructor_t -ida_ua.macro_constructor_t.__disown__ (method) +ida_ua.macro_constructor_t.__disown__(self) -ida_ua.macro_constructor_t.__init__ (method) - __init__(self) -> macro_constructor_t - - @param self: PyObject * +ida_ua.macro_constructor_t.__init__(self) -ida_ua.macro_constructor_t.build_macro (method) - build_macro(self, insn, may_go_forward) -> bool +ida_ua.macro_constructor_t.build_macro(self, insn: "insn_t", may_go_forward: bool) -> bool Try to extend the instruction. + This function may modify 'insn' and return false; these changes will be accepted by the kernel but the instruction will not be considered as a macro. - @param insn: (C++: insn_t *) Instruction to modify, usually the first instruction of the macro - @param may_go_forward: (C++: bool) Is it ok to consider the next instruction for the macro? - This argument may be false, for example, if there is a - cross reference to the end of INSN. In this case creating - a macro is not desired. However, it may still be useful - to perform minor tweaks to the instruction using the - information about the surrounding instructions. - @return: true if created an macro instruction. This function may modify 'insn' - and return false; these changes will be accepted by the kernel but the - instruction will not be considered as a macro. + @param insn: Instruction to modify, usually the first instruction of the macro + @param may_go_forward: Is it ok to consider the next instruction for the macro? This argument may be false, for example, if there is a cross reference to the end of INSN. In this case creating a macro is not desired. However, it may still be useful to perform minor tweaks to the instruction using the information about the surrounding instructions. + @returns true if created an macro instruction. -ida_ua.map_code_ea (function) - map_code_ea(insn, addr, opnum) -> ea_t +ida_ua.macro_constructor_t.construct_macro(self, insn: "insn_t", enable: bool) -> bool + Construct a macro instruction. This function may be called from ana() to generate a macro instruction. + The real work is done by the 'build_macro()' virtual function. It must be defined by the processor module. + construct_macro() modifies the database using the info provided by build_macro(). It verifies if the instruction can really be created (for example, that other items do not hinder), may plan to reanalyze the macro, etc. If the macro instructions are disabled by the user, construct_macro() will destroy the macro instruction. Note: if INSN_MODMAC is not set in insn.flags, the database will not be modified. - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param addr: ea_t - @param opnum: int - - map_code_ea(insn, op) -> ea_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param op: op_t const & + @param insn: the instruction to modify into a macro + @param enable: enable macro generation + @retval true: the macro instruction is generated in 'insn' + @retval false: did not create a macro -ida_ua.map_data_ea (function) - map_data_ea(insn, addr, opnum=-1) -> ea_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param addr: ea_t - @param opnum: int - - map_data_ea(insn, op) -> ea_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param op: op_t const & +ida_ua.map_code_ea(*args) -> ida_idaapi.ea_t -ida_ua.map_ea (function) - map_ea(insn, op, iscode) -> ea_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param op: op_t const & - @param iscode: bool - - map_ea(insn, addr, opnum, iscode) -> ea_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param addr: ea_t - @param opnum: int - @param iscode: bool +ida_ua.map_data_ea(*args) -> ida_idaapi.ea_t -ida_ua.o_displ (variable) +ida_ua.map_ea(*args) -> ida_idaapi.ea_t + +ida_ua.o_displ Memory Ref [Base Reg + Index Reg + Displacement]. - A memory reference using register contents with displacement. The displacement - should be stored in the op_t::addr field. The rest of information is stored the - same way as in o_phrase. + A memory reference using register contents with displacement. The displacement should be stored in the op_t::addr field. The rest of information is stored the same way as in o_phrase. + -ida_ua.o_far (variable) +ida_ua.o_far Immediate Far Address (CODE). - If the current processor has a special addressing mode for inter-segment - references, then this operand type should be used instead of o_near. If you - want, you may use PR_CHK_XREF in processor_t::flag to disable inter-segment - calls if o_near operand type is used. Currently only IBM PC uses this flag. + If the current processor has a special addressing mode for inter-segment references, then this operand type should be used instead of o_near. If you want, you may use PR_CHK_XREF in processor_t::flag to disable inter-segment calls if o_near operand type is used. Currently only IBM PC uses this flag. + -ida_ua.o_idpspec0 (variable) +ida_ua.o_idpspec0 processor specific type. -ida_ua.o_idpspec1 (variable) +ida_ua.o_idpspec1 processor specific type. -ida_ua.o_idpspec2 (variable) +ida_ua.o_idpspec2 processor specific type. -ida_ua.o_idpspec3 (variable) +ida_ua.o_idpspec3 processor specific type. -ida_ua.o_idpspec4 (variable) +ida_ua.o_idpspec4 processor specific type. -ida_ua.o_idpspec5 (variable) - processor specific type. (there can be more processor specific types) +ida_ua.o_idpspec5 + processor specific type. (there can be more processor specific types) + -ida_ua.o_imm (variable) +ida_ua.o_imm Immediate Value. - Any operand consisting of only a number is represented by this operand type. The - value should be stored in op_t::value. You may sign extend short (1-2 byte) - values. In any case don't forget to specify op_t::dtype (should be set for all - operand types). + Any operand consisting of only a number is represented by this operand type. The value should be stored in op_t::value. You may sign extend short (1-2 byte) values. In any case don't forget to specify op_t::dtype (should be set for all operand types). + -ida_ua.o_mem (variable) +ida_ua.o_mem Direct Memory Reference (DATA). - A direct memory data reference whose target address is known at compilation - time. The target virtual address is stored in op_t::addr and the full address is - calculated as to_ea( insn_t::cs, op_t::addr ). For the processors with complex - memory organization the final address can be calculated using other segment - registers. For flat memories, op_t::addr is the final address and insn_t::cs is - usually equal to zero. In any case, the address within the segment should be - stored in op_t::addr. + A direct memory data reference whose target address is known at compilation time. The target virtual address is stored in op_t::addr and the full address is calculated as to_ea( insn_t::cs, op_t::addr ). For the processors with complex memory organization the final address can be calculated using other segment registers. For flat memories, op_t::addr is the final address and insn_t::cs is usually equal to zero. In any case, the address within the segment should be stored in op_t::addr. + -ida_ua.o_near (variable) +ida_ua.o_near Immediate Near Address (CODE). - A direct memory code reference whose target address is known at the compilation - time. The target virtual address is stored in op_t::addr and the final address - is always to_ea( insn_t::cs, op_t::addr). Usually this operand type is used for - the branches and calls whose target address is known. If the current processor - has 2 different types of references for inter-segment and intra-segment - references, then this should be used only for intra-segment references. - - If the above operand types do not cover all possible addressing modes, then use - o_idpspec... operand types. + A direct memory code reference whose target address is known at the compilation time. The target virtual address is stored in op_t::addr and the final address is always to_ea( insn_t::cs, op_t::addr). Usually this operand type is used for the branches and calls whose target address is known. If the current processor has 2 different types of references for inter-segment and intra-segment references, then this should be used only for intra-segment references. + If the above operand types do not cover all possible addressing modes, then use o_idpspec... operand types. + -ida_ua.o_phrase (variable) +ida_ua.o_phrase Memory Ref [Base Reg + Index Reg]. - A memory reference using register contents. Indexed, register based, and other - addressing modes can be represented with the operand type. This addressing mode - cannot contain immediate values (use o_displ instead). The phrase number should - be stored in op_t::phrase. To denote the pre-increment and similar features - please use additional operand fields like op_t::specflag... Usually op_t::phrase - contains the register number and additional information is stored in - op_t::specflags... Please note that this operand type cannot contain immediate - values (except the scaling coefficients). + A memory reference using register contents. Indexed, register based, and other addressing modes can be represented with the operand type. This addressing mode cannot contain immediate values (use o_displ instead). The phrase number should be stored in op_t::phrase. To denote the pre-increment and similar features please use additional operand fields like op_t::specflag... Usually op_t::phrase contains the register number and additional information is stored in op_t::specflags... Please note that this operand type cannot contain immediate values (except the scaling coefficients). + -ida_ua.o_reg (variable) +ida_ua.o_reg General Register (al,ax,es,ds...). - The register number should be stored in op_t::reg. All processor registers, - including special registers, can be represented by this operand type. + The register number should be stored in op_t::reg. All processor registers, including special registers, can be represented by this operand type. + -ida_ua.o_void (variable) +ida_ua.o_void No Operand. -ida_ua.op_t (class) - Proxy of C++ op_t class. +ida_ua.op_t -ida_ua.op_t.__get_addr__ (method) - __get_addr__(self) -> ea_t +ida_ua.op_t.__get_addr__(self) -> ida_idaapi.ea_t -ida_ua.op_t.__get_reg_phrase__ (method) - __get_reg_phrase__(self) -> uint16 +ida_ua.op_t.__get_reg_phrase__(self) -> "uint16" -ida_ua.op_t.__get_specval__ (method) - __get_specval__(self) -> ea_t +ida_ua.op_t.__get_specval__(self) -> ida_idaapi.ea_t -ida_ua.op_t.__get_value64__ (method) - __get_value64__(self) -> uint64 +ida_ua.op_t.__get_value64__(self) -> "uint64" -ida_ua.op_t.__get_value__ (method) - __get_value__(self) -> ea_t +ida_ua.op_t.__get_value__(self) -> ida_idaapi.ea_t -ida_ua.op_t.__init__ (method) - __init__(self) -> op_t +ida_ua.op_t.__init__(self) -ida_ua.op_t.__set_addr__ (method) - __set_addr__(self, v) - - @param v: ea_t +ida_ua.op_t.__set_addr__(self, v: ida_idaapi.ea_t) -> None -ida_ua.op_t.__set_reg_phrase__ (method) - __set_reg_phrase__(self, r) - - @param r: uint16 +ida_ua.op_t.__set_reg_phrase__(self, r: "uint16") -> None -ida_ua.op_t.__set_specval__ (method) - __set_specval__(self, v) - - @param v: ea_t +ida_ua.op_t.__set_specval__(self, v: ida_idaapi.ea_t) -> None -ida_ua.op_t.__set_value64__ (method) - __set_value64__(self, v) - - @param v: uint64 +ida_ua.op_t.__set_value64__(self, v: "uint64") -> None -ida_ua.op_t.__set_value__ (method) - __set_value__(self, v) - - @param v: ea_t +ida_ua.op_t.__set_value__(self, v: ida_idaapi.ea_t) -> None -ida_ua.op_t.addr (variable) - virtual address pointed or used by the operand. (o_mem,o_displ,o_far,o_near) +ida_ua.op_t.addr + virtual address pointed or used by the operand. (o_mem,o_displ,o_far,o_near) + -ida_ua.op_t.assign (method) - assign(self, other) - - @param other: op_t const & +ida_ua.op_t.addr + virtual address pointed or used by the operand. (o_mem,o_displ,o_far,o_near) + -ida_ua.op_t.clr_shown (method) - clr_shown(self) +ida_ua.op_t.assign(self, other: "op_t") -> None + +ida_ua.op_t.clr_shown(self) -> None Set operand to hidden. -ida_ua.op_t.dtype (variable) - Type of operand value (see Operand value types). Usually first 9 types are used. - This is the type of the operand itself, not the size of the addressing mode. for - example, byte ptr [epb+32_bit_offset] will have dt_byte type. +ida_ua.op_t.dtype + Type of operand value (see Operand value types). Usually first 9 types are used. This is the type of the operand itself, not the size of the addressing mode. for example, byte ptr [epb+32_bit_offset] will have dt_byte type. + -ida_ua.op_t.flags (variable) - Operand flags +ida_ua.op_t.flags + Operand flags + -ida_ua.op_t.has_reg (method) +ida_ua.op_t.has_reg(self, r) Checks if the operand accesses the given processor register -ida_ua.op_t.is_imm (method) - is_imm(self, v) -> bool +ida_ua.op_t.is_imm(self, v: int) -> bool Is immediate operand? - - @param v: (C++: uval_t) -ida_ua.op_t.is_reg (method) - is_reg(self, r) -> bool +ida_ua.op_t.is_reg(self, r: int) -> bool Is register operand? - - @param r: (C++: int) -ida_ua.op_t.n (variable) - Number of operand (0,1,2). Initialized once at the start of work. You have no - right to change its value. +ida_ua.op_t.n + Number of operand (0,1,2). Initialized once at the start of work. You have no right to change its value. + -ida_ua.op_t.offb (variable) - Offset of operand value from the instruction start (0 means unknown). Of course - this field is meaningful only for certain types of operands. Leave it equal to - zero if the operand has no offset. This offset should point to the 'interesting' - part of operand. For example, it may point to the address of a function in - call func or it may point to bytes holding '5' in - mov ax, [bx+5] Usually bytes pointed to this offset are relocated (have fixup - information). +ida_ua.op_t.offb + Offset of operand value from the instruction start (0 means unknown). Of course this field is meaningful only for certain types of operands. Leave it equal to zero if the operand has no offset. This offset should point to the 'interesting' part of operand. For example, it may point to the address of a function in `call func ` or it may point to bytes holding '5' in `mov ax, [bx+5] ` Usually bytes pointed to this offset are relocated (have fixup information). + -ida_ua.op_t.offo (variable) - Same as offb (some operands have 2 numeric values used to form an operand). This - field is used for the second part of operand if it exists. Currently this field - is used only for outer offsets of Motorola processors. Leave it equal to zero if - the operand has no offset. +ida_ua.op_t.offo + Same as offb (some operands have 2 numeric values used to form an operand). This field is used for the second part of operand if it exists. Currently this field is used only for outer offsets of Motorola processors. Leave it equal to zero if the operand has no offset. + -ida_ua.op_t.phrase (variable) - number of register phrase (o_phrase,o_displ). you yourself define numbers of - phrases as you like +ida_ua.op_t.phrase + number of register phrase (o_phrase,o_displ). you yourself define numbers of phrases as you like + -ida_ua.op_t.reg (variable) +ida_ua.op_t.phrase + number of register phrase (o_phrase,o_displ). you yourself define numbers of phrases as you like + + +ida_ua.op_t.reg number of register (o_reg) -ida_ua.op_t.set_shown (method) - set_shown(self) +ida_ua.op_t.reg + number of register (o_reg) + +ida_ua.op_t.set_shown(self) -> None Set operand to be shown. -ida_ua.op_t.shown (method) - shown(self) -> bool +ida_ua.op_t.shown(self) -> bool Is operand set to be shown? -ida_ua.op_t.specval (variable) - This field may be used as you want. +ida_ua.op_t.specval + This field may be used as you want. + -ida_ua.op_t.type (variable) +ida_ua.op_t.specval + This field may be used as you want. + + +ida_ua.op_t.type Type of operand (see Operand types) -ida_ua.op_t.value (variable) - operand value (o_imm) or outer displacement (o_displ+OF_OUTER_DISP). integer - values should be in IDA's (little-endian) order. when using ieee_realcvt(), - floating point values should be in the processor's native byte order. dt_double - and dt_qword values take up 8 bytes (value and addr fields for 32-bit modules). - NB: in case a dt_dword/dt_qword immediate is forced to float by user, the kernel - converts it to processor's native order before calling FP conversion routines. +ida_ua.op_t.value + operand value (o_imm) or outer displacement (o_displ+OF_OUTER_DISP). integer values should be in IDA's (little-endian) order. when using ieee_realcvt(), floating point values should be in the processor's native byte order. dt_double and dt_qword values take up 8 bytes (value and addr fields for 32-bit modules). NB: in case a dt_dword/dt_qword immediate is forced to float by user, the kernel converts it to processor's native order before calling FP conversion routines. + -ida_ua.op_t__from_ptrval__ (function) - op_t__from_ptrval__(ptrval) -> op_t - - @param ptrval: size_t +ida_ua.op_t.value + operand value (o_imm) or outer displacement (o_displ+OF_OUTER_DISP). integer values should be in IDA's (little-endian) order. when using ieee_realcvt(), floating point values should be in the processor's native byte order. dt_double and dt_qword values take up 8 bytes (value and addr fields for 32-bit modules). NB: in case a dt_dword/dt_qword immediate is forced to float by user, the kernel converts it to processor's native order before calling FP conversion routines. + -ida_ua.operands_array (class) - Proxy of C++ wrapped_array_t< op_t,8 > class. +ida_ua.op_t__from_ptrval__(ptrval: "size_t") -> "op_t *" -ida_ua.operands_array.__getitem__ (method) - __getitem__(self, i) -> op_t - - @param i: size_t +ida_ua.operands_array -ida_ua.operands_array.__init__ (method) - __init__(self, data) -> operands_array - - @param data: op_t (&)[8] +ida_ua.operands_array.__getitem__(self, i: "size_t") -> "op_t const &" -ida_ua.operands_array.__len__ (method) - __len__(self) -> size_t +ida_ua.operands_array.__init__(self, data: "op_t (&)[8]") -ida_ua.operands_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: op_t const & +ida_ua.operands_array.__len__(self) -> "size_t" -ida_ua.operands_array._get_bytes (method) - _get_bytes(self) -> bytevec_t +ida_ua.operands_array.__setitem__(self, i: "size_t", v: "op_t") -> None -ida_ua.operands_array._set_bytes (method) - _set_bytes(self, bts) - - Parameters - ---------- - bts: bytevec_t const & +ida_ua.operands_array._get_bytes(self) -> "bytevec_t" -ida_ua.outctx_base_t (class) - Proxy of C++ outctx_base_t class. +ida_ua.operands_array._set_bytes(self, bts: "bytevec_t const &") -> None -ida_ua.outctx_base_t.__init__ (method) +ida_ua.outctx_base_t -ida_ua.outctx_base_t.close_comment (method) - close_comment(self) +ida_ua.outctx_base_t.F32 + please use outctx_t::F instead -ida_ua.outctx_base_t.clr_gen_label (method) - clr_gen_label(self) +ida_ua.outctx_base_t.__init__(self, *args, **kwargs) -ida_ua.outctx_base_t.display_voids (method) - display_voids(self) -> bool +ida_ua.outctx_base_t.close_comment(self) -> None -ida_ua.outctx_base_t.flush_buf (method) - flush_buf(self, buf, indent=-1) -> bool - Append contents of 'buf' to the line array. Behaves like flush_outbuf but - accepts an arbitrary buffer - - @param buf: (C++: const char *) char const * - @param indent: (C++: int) +ida_ua.outctx_base_t.clr_gen_label(self) -> None -ida_ua.outctx_base_t.flush_outbuf (method) - flush_outbuf(self, indent=-1) -> bool - Functions to populate the output line array (lnar) Move the contents of the - output buffer to the line array (outbuf->lnar) The kernel augments the outbuf - contents with additional text like the line prefix, user-defined comments, - xrefs, etc at this call. - - @param indent: (C++: int) +ida_ua.outctx_base_t.default_lnnum + index of the most important line in lnar -ida_ua.outctx_base_t.forbid_annotations (method) - forbid_annotations(self) -> int +ida_ua.outctx_base_t.display_voids(self) -> bool -ida_ua.outctx_base_t.force_code (method) - force_code(self) -> bool +ida_ua.outctx_base_t.flush_buf(self, buf: str, indent: int = -1) -> bool + Append contents of 'buf' to the line array. Behaves like flush_outbuf but accepts an arbitrary buffer + -ida_ua.outctx_base_t.gen_block_cmt (method) - gen_block_cmt(self, cmt, color) -> bool - Generate big non-indented comment lines. - - @param cmt: (C++: const char *) comment text. may contain \n characters to denote new lines. should - not contain comment character (;) - @param color: (C++: color_t) color of comment text (one of Color tags) - @return: overflow, lnar_maxsize has been reached +ida_ua.outctx_base_t.flush_outbuf(self, indent: int = -1) -> bool + ------------------------------------------------------------------------- Functions to populate the output line array (lnar) Move the contents of the output buffer to the line array (outbuf->lnar) The kernel augments the outbuf contents with additional text like the line prefix, user-defined comments, xrefs, etc at this call. + -ida_ua.outctx_base_t.gen_border_line (method) - gen_border_line(self, solid=False) -> bool - Generate thin border line. This function does nothing if generation of border - lines is disabled. - - @param solid: (C++: bool) generate solid border line (with =), otherwise with - - @return: overflow, lnar_maxsize has been reached +ida_ua.outctx_base_t.forbid_annotations(self) -> int -ida_ua.outctx_base_t.gen_cmt_line (method) - gen_cmt_line(self, format) -> bool - Generate one non-indented comment line, colored with COLOR_AUTOCMT. - - @param format: (C++: const char *) printf() style format line. The resulting comment line should not - include comment character (;) - @return: overflow, lnar_maxsize has been reached +ida_ua.outctx_base_t.force_code(self) -> bool -ida_ua.outctx_base_t.gen_collapsed_line (method) - gen_collapsed_line(self, format) -> bool - Generate one non-indented comment line, colored with COLOR_COLLAPSED. - - @param format: (C++: const char *) printf() style format line. The resulting comment line should not - include comment character (;) - @return: overflow, lnar_maxsize has been reached +ida_ua.outctx_base_t.gen_block_cmt(self, cmt: str, color: "color_t") -> bool + Generate big non-indented comment lines. + + @param cmt: comment text. may contain \n characters to denote new lines. should not contain comment character (;) + @param color: color of comment text (one of Color tags) + @returns overflow, lnar_maxsize has been reached -ida_ua.outctx_base_t.gen_empty_line (method) - gen_empty_line(self) -> bool - Generate empty line. This function does nothing if generation of empty lines is - disabled. - - @return: overflow, lnar_maxsize has been reached +ida_ua.outctx_base_t.gen_border_line(self, solid: bool = False) -> bool + Generate thin border line. This function does nothing if generation of border lines is disabled. + + @param solid: generate solid border line (with =), otherwise with - + @returns overflow, lnar_maxsize has been reached -ida_ua.outctx_base_t.gen_empty_line_without_annotations (method) - gen_empty_line_without_annotations(self) +ida_ua.outctx_base_t.gen_cmt_line(self, format: str) -> bool + Generate one non-indented comment line, colored with COLOR_AUTOCMT. + + @param format: printf() style format line. The resulting comment line should not include comment character (;) + @returns overflow, lnar_maxsize has been reached -ida_ua.outctx_base_t.gen_printf (method) - gen_printf(self, indent, format) -> bool - printf-like function to add lines to the line array. - - @param indent: (C++: int) indention of the line. if indent == -1, the kernel will indent - the line at idainfo::indent. if indent < 0, -indent will be used - for indention. The first line printed with indent < 0 is - considered as the most important line at the current address. - Usually it is the line with the instruction itself. This line - will be displayed in the cross-reference lists and other places. - If you need to output an additional line before the main line - then pass DEFAULT_INDENT instead of -1. The kernel will know that - your line is not the most important one. - @param format: (C++: const char *) printf style colored line to generate - @return: overflow, lnar_maxsize has been reached +ida_ua.outctx_base_t.gen_collapsed_line(self, format: str) -> bool + Generate one non-indented comment line, colored with COLOR_COLLAPSED. + + @param format: printf() style format line. The resulting comment line should not include comment character (;) + @returns overflow, lnar_maxsize has been reached -ida_ua.outctx_base_t.gen_xref_lines (method) - gen_xref_lines(self) -> bool +ida_ua.outctx_base_t.gen_empty_line(self) -> bool + Generate empty line. This function does nothing if generation of empty lines is disabled. + + @returns overflow, lnar_maxsize has been reached -ida_ua.outctx_base_t.getF (method) - getF(self) -> flags64_t +ida_ua.outctx_base_t.gen_empty_line_without_annotations(self) -> None -ida_ua.outctx_base_t.get_stkvar (method) - get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * - - @param arg2: op_t const & - @param arg3: uval_t - @param arg4: sval_t * - @param arg5: int * +ida_ua.outctx_base_t.gen_printf(self, indent: int, format: str) -> bool + printf-like function to add lines to the line array. + + @param indent: indention of the line. if indent == -1, the kernel will indent the line at idainfo::indent. if indent < 0, -indent will be used for indention. The first line printed with indent < 0 is considered as the most important line at the current address. Usually it is the line with the instruction itself. This line will be displayed in the cross-reference lists and other places. If you need to output an additional line before the main line then pass DEFAULT_INDENT instead of -1. The kernel will know that your line is not the most important one. + @param format: printf style colored line to generate + @returns overflow, lnar_maxsize has been reached -ida_ua.outctx_base_t.init_lines_array (method) - init_lines_array(self, answers, maxsize) - - @param answers: qstrvec_t * - @param maxsize: int +ida_ua.outctx_base_t.gen_xref_lines(self) -> bool -ida_ua.outctx_base_t.multiline (method) - multiline(self) -> bool +ida_ua.outctx_base_t.getF(self) -> "flags64_t" -ida_ua.outctx_base_t.only_main_line (method) - only_main_line(self) -> bool +ida_ua.outctx_base_t.get_stkvar(self, x: "op_t", v: int, vv: "sval_t *", is_sp_based: "int *", _frame: "tinfo_t") -> "ssize_t" -ida_ua.outctx_base_t.out_addr_tag (method) - out_addr_tag(self, ea) +ida_ua.outctx_base_t.init_lines_array(self, answers: "qstrvec_t *", maxsize: int) -> None + +ida_ua.outctx_base_t.multiline(self) -> bool + +ida_ua.outctx_base_t.only_main_line(self) -> bool + +ida_ua.outctx_base_t.out_addr_tag(self, ea: ida_idaapi.ea_t) -> None Output "address" escape sequence. - - @param ea: (C++: ea_t) -ida_ua.outctx_base_t.out_btoa (method) - out_btoa(self, Word, radix=0) - Output a number with the specified base (binary, octal, decimal, hex) The number - is output without color codes. see also out_long() - - @param Word: (C++: uval_t) - @param radix: (C++: char) +ida_ua.outctx_base_t.out_btoa(self, Word: int, radix: "char" = 0) -> None + Output a number with the specified base (binary, octal, decimal, hex) The number is output without color codes. see also out_long() + -ida_ua.outctx_base_t.out_char (method) - out_char(self, c) - Output one character. The character is output without color codes. see also - out_symbol() - - @param c: (C++: char) +ida_ua.outctx_base_t.out_char(self, c: "char") -> None + Output one character. The character is output without color codes. see also out_symbol() + -ida_ua.outctx_base_t.out_chars (method) - out_chars(self, c, n) +ida_ua.outctx_base_t.out_chars(self, c: "char", n: int) -> None Append a character multiple times. - - @param c: (C++: char) - @param n: (C++: int) -ida_ua.outctx_base_t.out_colored_register_line (method) - out_colored_register_line(self, str) - Output a colored line with register names in it. The register names will be - substituted by user-defined names (regvar_t) Please note that out_tagoff tries - to make substitutions too (when called with COLOR_REG) - - @param str: (C++: const char *) char const * +ida_ua.outctx_base_t.out_colored_register_line(self, str: str) -> None + Output a colored line with register names in it. The register names will be substituted by user-defined names (regvar_t) Please note that out_tagoff tries to make substitutions too (when called with COLOR_REG) + -ida_ua.outctx_base_t.out_keyword (method) - out_keyword(self, str) +ida_ua.outctx_base_t.out_keyword(self, str: str) -> None Output a string with COLOR_KEYWORD color. - - @param str: (C++: const char *) char const * -ida_ua.outctx_base_t.out_line (method) - out_line(self, str, color=0) +ida_ua.outctx_base_t.out_line(self, str: str, color: "color_t" = 0) -> None Output a string with the specified color. - - @param str: (C++: const char *) char const * - @param color: (C++: color_t) -ida_ua.outctx_base_t.out_long (method) - out_long(self, v, radix) - Output a number with appropriate color. Low level function. Use out_value() if - you can. if 'suspop' is set then this function uses COLOR_VOIDOP instead of - COLOR_NUMBER. 'suspop' is initialized: +ida_ua.outctx_base_t.out_long(self, v: int, radix: "char") -> None + Output a number with appropriate color. Low level function. Use out_value() if you can. if 'suspop' is set then this function uses COLOR_VOIDOP instead of COLOR_NUMBER. 'suspop' is initialized: * in out_one_operand() * in ..\ida\gl.cpp (before calling processor_t::d_out()) - @param v: (C++: sval_t) value to output - @param radix: (C++: char) base (2,8,10,16) - -ida_ua.outctx_base_t.out_name_expr (method) - out_name_expr(self, x, ea, off=BADADDR) -> bool - Output a name expression. - @param x: (C++: const op_t &) instruction operand referencing the name expression - @param ea: (C++: ea_t) address to convert to name expression - @param off: (C++: adiff_t) the value of name expression. this parameter is used only to check - that the name expression will have the wanted value. You may pass - BADADDR for this parameter but I discourage it because it prohibits - checks. - @return: true if the name expression has been produced - -ida_ua.outctx_base_t.out_printf (method) - out_printf(self, format) -> size_t - Functions to append text to the current output buffer (outbuf) Append a - formatted string to the output string. - @param format: (C++: const char *) char const * - @return: the number of characters appended + @param v: value to output + @param radix: base (2,8,10,16) -ida_ua.outctx_base_t.out_register (method) - out_register(self, str) +ida_ua.outctx_base_t.out_lvar(self, name: str, width: int = -1) -> None + Output local variable name with COLOR_LOCNAME color. + +ida_ua.outctx_base_t.out_name_expr(self, *args) -> bool + Output a name expression. + + @param x: instruction operand referencing the name expression + @param ea: address to convert to name expression + @param off: the value of name expression. this parameter is used only to check that the name expression will have the wanted value. You may pass BADADDR for this parameter but I discourage it because it prohibits checks. + @returns true if the name expression has been produced + +ida_ua.outctx_base_t.out_printf(self, format: str) -> "size_t" + ------------------------------------------------------------------------- Functions to append text to the current output buffer (outbuf) Append a formatted string to the output string. + + @returns the number of characters appended + +ida_ua.outctx_base_t.out_register(self, str: str) -> None Output a character with COLOR_REG color. - - @param str: (C++: const char *) char const * -ida_ua.outctx_base_t.out_spaces (method) - out_spaces(self, len) +ida_ua.outctx_base_t.out_spaces(self, len: "ssize_t") -> None Appends spaces to outbuf until its tag_strlen becomes 'len'. - - @param len: (C++: ssize_t) -ida_ua.outctx_base_t.out_symbol (method) - out_symbol(self, c) +ida_ua.outctx_base_t.out_symbol(self, c: "char") -> None Output a character with COLOR_SYMBOL color. - - @param c: (C++: char) -ida_ua.outctx_base_t.out_tagoff (method) - out_tagoff(self, tag) +ida_ua.outctx_base_t.out_tagoff(self, tag: "color_t") -> None Output "turn color off" escape sequence. - - @param tag: (C++: color_t) -ida_ua.outctx_base_t.out_tagon (method) - out_tagon(self, tag) +ida_ua.outctx_base_t.out_tagon(self, tag: "color_t") -> None Output "turn color on" escape sequence. - - @param tag: (C++: color_t) -ida_ua.outctx_base_t.out_value (method) - out_value(self, x, outf=0) -> flags64_t - Output immediate value. Try to use this function to output all constants of - instruction operands. This function outputs a number from x.addr or x.value in - the form determined by F. It outputs colored text. - - @param x: (C++: const op_t &) value to output - @param outf: (C++: int) Output value flags - @return: flags of the output value, otherwise: -1 if printed a number with - COLOR_ERROR 0 if printed a nice number or character or segment or enum +ida_ua.outctx_base_t.out_value(self, x: "op_t", outf: int = 0) -> "flags64_t" + Output immediate value. Try to use this function to output all constants of instruction operands. This function outputs a number from x.addr or x.value in the form determined by F. It outputs colored text. + + @param x: value to output + @param outf: Output value flags + @returns flags of the output value, otherwise: + @retval -1: if printed a number with COLOR_ERROR + @retval 0: if printed a nice number or character or segment or enum -ida_ua.outctx_base_t.print_label_now (method) - print_label_now(self) -> bool +ida_ua.outctx_base_t.outbuf + buffer for the current output line once ready, it is moved to lnar + -ida_ua.outctx_base_t.restore_ctxflags (method) - restore_ctxflags(self, saved_flags) - - @param saved_flags: int +ida_ua.outctx_base_t.print_label_now(self) -> bool -ida_ua.outctx_base_t.retrieve_cmt (method) - retrieve_cmt(self) -> ssize_t +ida_ua.outctx_base_t.restore_ctxflags(self, saved_flags: int) -> None -ida_ua.outctx_base_t.retrieve_name (method) - retrieve_name(self, arg2, arg3) -> ssize_t - - @param arg2: qstring * - @param arg3: color_t * +ida_ua.outctx_base_t.retrieve_cmt(self) -> "ssize_t" -ida_ua.outctx_base_t.set_comment_addr (method) - set_comment_addr(self, ea) - - @param ea: ea_t +ida_ua.outctx_base_t.retrieve_name(self, arg2: str, arg3: "color_t *") -> "ssize_t" -ida_ua.outctx_base_t.set_dlbind_opnd (method) - set_dlbind_opnd(self) +ida_ua.outctx_base_t.set_comment_addr(self, ea: ida_idaapi.ea_t) -> None -ida_ua.outctx_base_t.set_gen_cmt (method) - set_gen_cmt(self, on=True) - - @param on: bool +ida_ua.outctx_base_t.set_dlbind_opnd(self) -> None -ida_ua.outctx_base_t.set_gen_demangled_label (method) - set_gen_demangled_label(self) +ida_ua.outctx_base_t.set_gen_cmt(self, on: bool = True) -> None -ida_ua.outctx_base_t.set_gen_label (method) - set_gen_label(self) +ida_ua.outctx_base_t.set_gen_demangled_label(self) -> None -ida_ua.outctx_base_t.set_gen_xrefs (method) - set_gen_xrefs(self, on=True) - - @param on: bool +ida_ua.outctx_base_t.set_gen_label(self) -> None -ida_ua.outctx_base_t.setup_outctx (method) - setup_outctx(self, prefix, makeline_flags) +ida_ua.outctx_base_t.set_gen_xrefs(self, on: bool = True) -> None + +ida_ua.outctx_base_t.setup_outctx(self, prefix: str, makeline_flags: int) -> None Initialization; normally used only by the kernel. - - @param prefix: (C++: const char *) char const * - @param makeline_flags: (C++: int) -ida_ua.outctx_base_t.stack_view (method) - stack_view(self) -> bool +ida_ua.outctx_base_t.stack_view(self) -> bool -ida_ua.outctx_base_t.term_outctx (method) - term_outctx(self, prefix=None) -> int - Finalize the output context. - - @param prefix: (C++: const char *) char const * - @return: the number of generated lines. +ida_ua.outctx_base_t.term_outctx(self, prefix: str = None) -> int + Finalize the output context. + + @returns the number of generated lines. -ida_ua.outctx_base_t__from_ptrval__ (function) - outctx_base_t__from_ptrval__(ptrval) -> outctx_base_t - - @param ptrval: size_t +ida_ua.outctx_base_t__from_ptrval__(ptrval: "size_t") -> "outctx_base_t *" -ida_ua.outctx_t (class) - Proxy of C++ outctx_t class. +ida_ua.outctx_t -ida_ua.outctx_t.__init__ (method) +ida_ua.outctx_t.__init__(self, *args, **kwargs) -ida_ua.outctx_t.gen_func_footer (method) - gen_func_footer(self, pfn) - - @param pfn: func_t const * +ida_ua.outctx_t.gen_func_footer(self, pfn: "func_t const *") -> None -ida_ua.outctx_t.gen_func_header (method) - gen_func_header(self, pfn) - - @param pfn: func_t * +ida_ua.outctx_t.gen_func_header(self, pfn: "func_t *") -> None -ida_ua.outctx_t.gen_header (method) - gen_header(self, flags=((1 << 0)|(1 << 1)), proc_name=None, proc_flavour=None) - - @param flags: int - @param proc_name: char const * - @param proc_flavour: char const * +ida_ua.outctx_t.gen_header(self, *args) -> None -ida_ua.outctx_t.gen_header_extra (method) - gen_header_extra(self) +ida_ua.outctx_t.gen_header_extra(self) -> None -ida_ua.outctx_t.gen_xref_lines (method) - gen_xref_lines(self) -> bool +ida_ua.outctx_t.gen_xref_lines(self) -> bool -ida_ua.outctx_t.out_btoa (method) - out_btoa(self, Word, radix=0) - Output a number with the specified base (binary, octal, decimal, hex) The number - is output without color codes. see also out_long() - - @param Word: (C++: uval_t) - @param radix: (C++: char) +ida_ua.outctx_t.out_btoa(self, Word: int, radix: "char" = 0) -> None + Output a number with the specified base (binary, octal, decimal, hex) The number is output without color codes. see also out_long() + -ida_ua.outctx_t.out_custom_mnem (method) - out_custom_mnem(self, mnem, width=8, postfix=None) - Output custom mnemonic for 'insn'. E.g. if it should differ from the one in - 'ph.instruc'. This function outputs colored text. See out_mnem - - @param mnem: (C++: const char *) custom mnemonic - @param width: (C++: int) width of field with mnemonic. if < 0, then 'postfix' will be - output before the mnemonic, i.e. as a prefix - @param postfix: (C++: const char *) optional postfix added to 'mnem' +ida_ua.outctx_t.out_custom_mnem(self, mnem: str, width: int = 8, postfix: str = None) -> None + Output custom mnemonic for 'insn'. E.g. if it should differ from the one in 'ph.instruc'. This function outputs colored text. See out_mnem + + @param mnem: custom mnemonic + @param width: width of field with mnemonic. if < 0, then 'postfix' will be output before the mnemonic, i.e. as a prefix + @param postfix: optional postfix added to 'mnem' -ida_ua.outctx_t.out_data (method) - out_data(self, analyze_only) - - @param analyze_only: bool +ida_ua.outctx_t.out_data(self, analyze_only: bool) -> None -ida_ua.outctx_t.out_fcref_names (method) - out_fcref_names(self) - Print addresses referenced *from* the specified address as commented symbolic - names. This function is used to show, for example, multiple callees of an - indirect call. This function outputs colored text. +ida_ua.outctx_t.out_fcref_names(self) -> None + Print addresses referenced *from* the specified address as commented symbolic names. This function is used to show, for example, multiple callees of an indirect call. This function outputs colored text. + -ida_ua.outctx_t.out_immchar_cmts (method) - out_immchar_cmts(self) - Print all operand values as commented character constants. This function is used - to comment void operands with their representation in the form of character - constants. This function outputs colored text. +ida_ua.outctx_t.out_immchar_cmts(self) -> None + Print all operand values as commented character constants. This function is used to comment void operands with their representation in the form of character constants. This function outputs colored text. + -ida_ua.outctx_t.out_mnem (method) - out_mnem(self, width=8, postfix=None) - Output instruction mnemonic for 'insn' using information in 'ph.instruc' array. - This function outputs colored text. It should be called from - processor_t::ev_out_insn() or processor_t::ev_out_mnem() handler. It will output - at least one space after the instruction. mnemonic even if the specified 'width' - is not enough. - - @param width: (C++: int) width of field with mnemonic. if < 0, then 'postfix' will be - output before the mnemonic, i.e. as a prefix - @param postfix: (C++: const char *) optional postfix added to the instruction mnemonic +ida_ua.outctx_t.out_mnem(self, width: int = 8, postfix: str = None) -> None + Output instruction mnemonic for 'insn' using information in 'ph.instruc' array. This function outputs colored text. It should be called from processor_t::ev_out_insn() or processor_t::ev_out_mnem() handler. It will output at least one space after the instruction. mnemonic even if the specified 'width' is not enough. + + @param width: width of field with mnemonic. if < 0, then 'postfix' will be output before the mnemonic, i.e. as a prefix + @param postfix: optional postfix added to the instruction mnemonic -ida_ua.outctx_t.out_mnemonic (method) - out_mnemonic(self) - Output instruction mnemonic using information in 'insn'. It should be called - from processor_t::ev_out_insn() and it will call processor_t::ev_out_mnem() or - out_mnem. This function outputs colored text. +ida_ua.outctx_t.out_mnemonic(self) -> None + Output instruction mnemonic using information in 'insn'. It should be called from processor_t::ev_out_insn() and it will call processor_t::ev_out_mnem() or out_mnem. This function outputs colored text. + -ida_ua.outctx_t.out_one_operand (method) - out_one_operand(self, n) -> bool - Use this function to output an operand of an instruction. This function checks - for the existence of a manually defined operand and will output it if it exists. - It should be called from processor_t::ev_out_insn() and it will call - processor_t::ev_out_operand(). This function outputs colored text. - - @param n: (C++: int) 0..UA_MAXOP-1 operand number +ida_ua.outctx_t.out_one_operand(self, n: int) -> bool + Use this function to output an operand of an instruction. This function checks for the existence of a manually defined operand and will output it if it exists. It should be called from processor_t::ev_out_insn() and it will call processor_t::ev_out_operand(). This function outputs colored text. + + @param n: 0..UA_MAXOP-1 operand number @retval 1: operand is displayed @retval 0: operand is hidden -ida_ua.outctx_t.out_specea (method) - out_specea(self, segtype) -> bool - - @param segtype: uchar +ida_ua.outctx_t.out_specea(self, segtype: "uchar") -> bool -ida_ua.outctx_t.retrieve_cmt (method) - retrieve_cmt(self) -> ssize_t +ida_ua.outctx_t.retrieve_cmt(self) -> "ssize_t" -ida_ua.outctx_t.retrieve_name (method) - retrieve_name(self, arg2, arg3) -> ssize_t - - @param arg2: qstring * - @param arg3: color_t * +ida_ua.outctx_t.retrieve_name(self, arg2: str, arg3: "color_t *") -> "ssize_t" -ida_ua.outctx_t.set_bin_state (method) - set_bin_state(self, value) - - @param value: int +ida_ua.outctx_t.set_bin_state(self, value: int) -> None -ida_ua.outctx_t.setup_outctx (method) - setup_outctx(self, prefix, flags) +ida_ua.outctx_t.setup_outctx(self, prefix: str, flags: int) -> None Initialization; normally used only by the kernel. - - @param prefix: (C++: const char *) char const * - @param flags: int -ida_ua.outctx_t.term_outctx (method) - term_outctx(self, prefix=None) -> int - Finalize the output context. - - @param prefix: (C++: const char *) char const * - @return: the number of generated lines. +ida_ua.outctx_t.term_outctx(self, prefix: str = None) -> int + Finalize the output context. + + @returns the number of generated lines. -ida_ua.outctx_t__from_ptrval__ (function) - outctx_t__from_ptrval__(ptrval) -> outctx_t - - @param ptrval: size_t +ida_ua.outctx_t__from_ptrval__(ptrval: "size_t") -> "outctx_t *" -ida_ua.print_insn_mnem (function) - print_insn_mnem(ea) -> str - Print instruction mnemonics. - - @param ea: (C++: ea_t) linear address of the instruction - @return: success +ida_ua.print_insn_mnem(ea: ida_idaapi.ea_t) -> str + Print instruction mnemonics. + + @param ea: linear address of the instruction + @returns success -ida_ua.print_operand (function) - 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: (C++: ea_t) the item address (instruction or data) - @param n: (C++: int) 0..UA_MAXOP-1 operand number, meaningful only for instructions - @param getn_flags: (C++: int) Name expression flags Currently only GETN_NODUMMY is - accepted. - @param newtype: (C++: struct printop_t *) if specified, print the operand using the specified type - @return: success +ida_ua.print_operand(ea: ida_idaapi.ea_t, n: int, getn_flags: int = 0, newtype: "printop_t" = 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) + @param n: 0..UA_MAXOP-1 operand number, meaningful only for instructions + @param getn_flags: Name expression flags Currently only GETN_NODUMMY is accepted. + @param newtype: if specified, print the operand using the specified type + @returns success -ida_xref (module) +ida_xref Functions that deal with cross-references. - There are 2 types of xrefs: CODE and DATA references. All xrefs are kept in the - bTree except ordinary execution flow to the next instruction. Ordinary execution - flow to the next instruction is kept in flags (see bytes.hpp) - - The source address of a cross-reference must be an item head (is_head) or a - structure member id. - - Cross-references are automatically sorted. + There are 2 types of xrefs: CODE and DATA references. All xrefs are kept in the bTree except ordinary execution flow to the next instruction. Ordinary execution flow to the next instruction is kept in flags (see bytes.hpp) + The source address of a cross-reference must be an item head (is_head) or a structure member id. + Cross-references are automatically sorted. + -ida_xref.XREF_ALL (variable) - return all references - -ida_xref.XREF_BASE (variable) +ida_xref.XREF_BASE Reference to the base part of an offset. -ida_xref.XREF_DATA (variable) - return data references only +ida_xref.XREF_CODE + return only code references (fl_...) -ida_xref.XREF_FAR (variable) - don't return ordinary flow xrefs +ida_xref.XREF_DATA + return only data references (dr_...) -ida_xref.XREF_MASK (variable) +ida_xref.XREF_EA + return only program addresses + +ida_xref.XREF_FLOW + return all references, including ordinary flow xrefs + +ida_xref.XREF_MASK Mask to get xref type. -ida_xref.XREF_PASTEND (variable) - 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_NOFLOW + skip ordinary flow xrefs (code xrefs to the next insn) + -ida_xref.XREF_TAIL (variable) +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 (variable) - 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.XREF_TID + return only type ids. XREF_EA and XREF_TID are exclusive, only one of them can be specified + -ida_xref.add_cref (function) - add_cref(frm, to, type) -> bool - Create a code cross-reference. - - @param from: (C++: ea_t) linear address of referencing instruction - @param to: (C++: ea_t) linear address of referenced instruction - @param type: (C++: cref_t) cross-reference type - @return: success +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.add_dref (function) - add_dref(frm, to, type) -> bool - Create a data cross-reference. - - @param from: (C++: ea_t) linear address of referencing instruction or data - @param to: (C++: ea_t) linear address of referenced data - @param type: (C++: dref_t) cross-reference type - @return: success (may fail if user-defined xref exists from->to) +ida_xref.add_cref(frm: ida_idaapi.ea_t, to: ida_idaapi.ea_t, type: "cref_t") -> bool + Create a code cross-reference. + + @param to: linear address of referenced instruction + @param type: cross-reference type + @returns success -ida_xref.calc_switch_cases (function) - calc_switch_cases(ea, si) -> cases_and_targets_t +ida_xref.add_dref(frm: ida_idaapi.ea_t, to: ida_idaapi.ea_t, type: "dref_t") -> bool + Create a data cross-reference. + + @param to: linear address of referenced data + @param type: cross-reference type + @returns success (may fail if user-defined xref exists from->to) + +ida_xref.calc_switch_cases(ea, si) Get information about a switch's cases. The returned information can be used as follows: @@ -67703,164 +46401,75 @@ ida_xref.calc_switch_cases (function) @return: a structure with 2 members: 'cases', and 'targets'. -ida_xref.cases_and_targets_t (class) - Proxy of C++ cases_and_targets_t class. +ida_xref.cases_and_targets_t -ida_xref.cases_and_targets_t.__init__ (method) - __init__(self) -> cases_and_targets_t +ida_xref.cases_and_targets_t.__init__(self) -ida_xref.casevec_t (class) - Proxy of C++ qvector< qvector< sval_t > > class. +ida_xref.casevec_t -ida_xref.casevec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< qvector< signed-ea-like-numeric-type > > const & +ida_xref.casevec_t.__eq__(self, r: "casevec_t") -> bool -ida_xref.casevec_t.__getitem__ (method) - __getitem__(self, i) -> qvector< signed-ea-like-numeric-type > const & - - @param i: size_t +ida_xref.casevec_t.__getitem__(self, i: "size_t") -> "qvector< long long > const &" -ida_xref.casevec_t.__init__ (method) - __init__(self) -> casevec_t - __init__(self, x) -> casevec_t - - @param x: qvector< qvector< signed-ea-like-numeric-type > > const & +ida_xref.casevec_t.__init__(self, *args) -ida_xref.casevec_t.__len__ (method) - __len__(self) -> size_t +ida_xref.casevec_t.__len__(self) -> "size_t" -ida_xref.casevec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< qvector< signed-ea-like-numeric-type > > const & +ida_xref.casevec_t.__ne__(self, r: "casevec_t") -> bool -ida_xref.casevec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: qvector< signed-ea-like-numeric-type > const & +ida_xref.casevec_t.__setitem__(self, i: "size_t", v: "qvector< long long > const &") -> None -ida_xref.casevec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: qvector< signed-ea-like-numeric-type > const & +ida_xref.casevec_t._del(self, x: "qvector< long long > const &") -> bool -ida_xref.casevec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: qvector< signed-ea-like-numeric-type > const & +ida_xref.casevec_t.add_unique(self, x: "qvector< long long > const &") -> bool -ida_xref.casevec_t.at (method) - at(self, _idx) -> qvector< signed-ea-like-numeric-type > const & - - @param _idx: size_t +ida_xref.casevec_t.append(self, x: "qvector< long long > const &") -> None -ida_xref.casevec_t.begin (method) - 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.at(self, _idx: "size_t") -> "qvector< long long > const &" -ida_xref.casevec_t.capacity (method) - capacity(self) -> size_t +ida_xref.casevec_t.begin(self, *args) -> "qvector< qvector< long long > >::const_iterator" -ida_xref.casevec_t.clear (method) - clear(self) +ida_xref.casevec_t.capacity(self) -> "size_t" -ida_xref.casevec_t.empty (method) - empty(self) -> bool +ida_xref.casevec_t.clear(self) -> None -ida_xref.casevec_t.end (method) - 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.empty(self) -> bool -ida_xref.casevec_t.erase (method) - erase(self, it) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - - @param it: qvector< qvector< signed-ea-like-numeric-type > >::iterator - - erase(self, first, last) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - - @param first: qvector< qvector< signed-ea-like-numeric-type > >::iterator - @param last: qvector< qvector< signed-ea-like-numeric-type > >::iterator +ida_xref.casevec_t.end(self, *args) -> "qvector< qvector< long long > >::const_iterator" -ida_xref.casevec_t.extract (method) - extract(self) -> qvector< signed-ea-like-numeric-type > * +ida_xref.casevec_t.erase(self, *args) -> "qvector< qvector< long long > >::iterator" -ida_xref.casevec_t.find (method) - find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - - @param x: qvector< signed-ea-like-numeric-type > const & - - find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator - - @param x: qvector< signed-ea-like-numeric-type > const & +ida_xref.casevec_t.extend(self, x: "casevec_t") -> None -ida_xref.casevec_t.grow (method) - grow(self, x=qvector< signed-ea-like-numeric-type >()) - - @param x: qvector< signed-ea-like-numeric-type > const & +ida_xref.casevec_t.extract(self) -> "qvector< long long > *" -ida_xref.casevec_t.has (method) - has(self, x) -> bool - - @param x: qvector< signed-ea-like-numeric-type > const & +ida_xref.casevec_t.find(self, *args) -> "qvector< qvector< long long > >::const_iterator" -ida_xref.casevec_t.inject (method) - inject(self, s, len) - - @param s: qvector< signed-ea-like-numeric-type > * - @param len: size_t +ida_xref.casevec_t.grow(self, *args) -> None -ida_xref.casevec_t.insert (method) - insert(self, it, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - - @param it: qvector< qvector< signed-ea-like-numeric-type > >::iterator - @param x: qvector< signed-ea-like-numeric-type > const & +ida_xref.casevec_t.has(self, x: "qvector< long long > const &") -> bool -ida_xref.casevec_t.pop_back (method) - pop_back(self) +ida_xref.casevec_t.inject(self, s: "qvector< long long > *", len: "size_t") -> None -ida_xref.casevec_t.push_back (method) - push_back(self, x) - - @param x: qvector< signed-ea-like-numeric-type > const & - - push_back(self) -> qvector< signed-ea-like-numeric-type > & +ida_xref.casevec_t.insert(self, it: "qvector< qvector< long long > >::iterator", x: "qvector< long long > const &") -> "qvector< qvector< long long > >::iterator" -ida_xref.casevec_t.qclear (method) - qclear(self) +ida_xref.casevec_t.pop_back(self) -> None -ida_xref.casevec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t +ida_xref.casevec_t.push_back(self, *args) -> "qvector< long long > &" -ida_xref.casevec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: qvector< signed-ea-like-numeric-type > const & - - resize(self, _newsize) - - @param _newsize: size_t +ida_xref.casevec_t.qclear(self) -> None -ida_xref.casevec_t.size (method) - size(self) -> size_t +ida_xref.casevec_t.reserve(self, cnt: "size_t") -> None -ida_xref.casevec_t.swap (method) - swap(self, r) - - @param r: qvector< qvector< signed-ea-like-numeric-type > > & +ida_xref.casevec_t.resize(self, *args) -> None -ida_xref.casevec_t.truncate (method) - truncate(self) +ida_xref.casevec_t.size(self) -> "size_t" -ida_xref.create_switch_table (function) - create_switch_table(ea, si) -> bool +ida_xref.casevec_t.swap(self, r: "casevec_t") -> None + +ida_xref.casevec_t.truncate(self) -> None + +ida_xref.create_switch_table(ea, si) Create switch table from the switch information @param ea: address of the 'indirect jump' instruction @@ -67868,8 +46477,7 @@ ida_xref.create_switch_table (function) @return: Boolean -ida_xref.create_switch_xrefs (function) - create_switch_xrefs(ea, si) -> bool +ida_xref.create_switch_xrefs(ea, si) This function creates xrefs from the indirect jump. Usually there is no need to call this function directly because the kernel @@ -67882,375 +46490,244 @@ ida_xref.create_switch_xrefs (function) @return: Boolean -ida_xref.del_cref (function) - del_cref(frm, to, expand) -> bool - Delete a code cross-reference. - - @param from: (C++: ea_t) linear address of referencing instruction - @param to: (C++: ea_t) linear address of referenced instruction - @param expand: (C++: bool) policy to delete the referenced instruction +ida_xref.del_cref(frm: ida_idaapi.ea_t, to: ida_idaapi.ea_t, expand: bool) -> bool + Delete a code cross-reference. + + @param to: linear address of referenced instruction + @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 + * 0: don't delete the referenced instruction even if no more cross-references point to it @retval true: if the referenced instruction will be deleted -ida_xref.del_dref (function) - del_dref(frm, to) - Delete a data cross-reference. - - @param from: (C++: ea_t) linear address of referencing instruction or data - @param to: (C++: ea_t) linear address of referenced data +ida_xref.del_dref(frm: ida_idaapi.ea_t, to: ida_idaapi.ea_t) -> None + Delete a data cross-reference. + + @param to: linear address of referenced data -ida_xref.delete_switch_table (function) - delete_switch_table(jump_ea, si) - - @param jump_ea: ea_t - @param si: switch_info_t const & +ida_xref.delete_switch_table(jump_ea: ida_idaapi.ea_t, si: "switch_info_t") -> None -ida_xref.dr_I (variable) - Informational (a derived java class references its base class informationally) +ida_xref.dr_I + Informational (a derived java class references its base class informationally) + -ida_xref.dr_O (variable) - Offset The reference uses 'offset' of data rather than its value OR The - reference appeared because the "OFFSET" flag of instruction is set. The meaning - of this type is IDP dependent. +ida_xref.dr_O + Offset The reference uses 'offset' of data rather than its value OR The reference appeared because the "OFFSET" flag of instruction is set. The meaning of this type is IDP dependent. + -ida_xref.dr_R (variable) +ida_xref.dr_R Read access. -ida_xref.dr_S (variable) +ida_xref.dr_S Reference to enum member (symbolic constant) -ida_xref.dr_T (variable) - Text (for forced operands only) Name of data is used in manual operand +ida_xref.dr_T + Text (for forced operands only) Name of data is used in manual operand + -ida_xref.dr_U (variable) - Unknown - for compatibility with old versions. Should not be used anymore. +ida_xref.dr_U + Unknown - for compatibility with old versions. Should not be used anymore. + -ida_xref.dr_W (variable) +ida_xref.dr_W Write access. -ida_xref.fl_CF (variable) - Call Far This xref creates a function at the referenced location +ida_xref.fl_CF + Call Far This xref creates a function at the referenced location + -ida_xref.fl_CN (variable) - Call Near This xref creates a function at the referenced location +ida_xref.fl_CN + Call Near This xref creates a function at the referenced location + -ida_xref.fl_F (variable) - Ordinary flow: used to specify execution flow to the next instruction. +ida_xref.fl_F + Ordinary flow: used to specify execution flow to the next instruction. + -ida_xref.fl_JF (variable) +ida_xref.fl_JF Jump Far. -ida_xref.fl_JN (variable) +ida_xref.fl_JN Jump Near. -ida_xref.fl_U (variable) - unknown - for compatibility with old versions. Should not be used anymore. +ida_xref.fl_U + unknown - for compatibility with old versions. Should not be used anymore. + -ida_xref.fl_USobsolete (variable) +ida_xref.fl_USobsolete User specified (obsolete) -ida_xref.get_first_cref_from (function) - 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!). - - @param from: (C++: ea_t) linear address of referencing instruction - @return: first referenced address. If the specified instruction doesn't - reference to other instructions then returns BADADDR. +ida_xref.get_first_cref_from(frm: ida_idaapi.ea_t) -> ida_idaapi.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!). + + @returns first referenced address. If the specified instruction doesn't reference to other instructions then returns BADADDR. -ida_xref.get_first_cref_to (function) - 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: (C++: ea_t) linear address of referenced instruction - @return: linear address of the first referencing instruction or BADADDR. +ida_xref.get_first_cref_to(to: ida_idaapi.ea_t) -> ida_idaapi.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 + @returns linear address of the first referencing instruction or BADADDR. -ida_xref.get_first_dref_from (function) - get_first_dref_from(frm) -> ea_t - Get first data referenced from the specified address. - - @param from: (C++: ea_t) linear address of referencing instruction or data - @return: linear address of first (lowest) data referenced from the specified - address. Return BADADDR if the specified instruction/data doesn't - reference to anything. +ida_xref.get_first_dref_from(frm: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get first data referenced from the specified address. + + @returns linear address of first (lowest) data referenced from the specified address. Return BADADDR if the specified instruction/data doesn't reference to anything. -ida_xref.get_first_dref_to (function) - get_first_dref_to(to) -> ea_t - Get address of instruction/data referencing to the specified data. - - @param to: (C++: ea_t) linear address of referencing instruction or data - @return: BADADDR if nobody refers to the specified data. +ida_xref.get_first_dref_to(to: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get address of instruction/data referencing to the specified data. + + @param to: linear address of referencing instruction or data + @returns BADADDR if nobody refers to the specified data. -ida_xref.get_first_fcref_from (function) - get_first_fcref_from(frm) -> ea_t - - @param from: ea_t +ida_xref.get_first_fcref_from(frm: ida_idaapi.ea_t) -> ida_idaapi.ea_t -ida_xref.get_first_fcref_to (function) - get_first_fcref_to(to) -> ea_t - - @param to: ea_t +ida_xref.get_first_fcref_to(to: ida_idaapi.ea_t) -> ida_idaapi.ea_t -ida_xref.get_next_cref_from (function) - get_next_cref_from(frm, current) -> ea_t - Get next instruction referenced from the specified instruction. - - @param from: (C++: ea_t) linear address of referencing instruction - @param current: (C++: ea_t) linear address of current referenced instruction This value is - returned by get_first_cref_from() or previous call to - get_next_cref_from() functions. - @return: next referenced address or BADADDR. +ida_xref.get_next_cref_from(frm: ida_idaapi.ea_t, current: ida_idaapi.ea_t) -> ida_idaapi.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. + @returns next referenced address or BADADDR. -ida_xref.get_next_cref_to (function) - get_next_cref_to(to, current) -> ea_t - Get next instruction referencing to the specified instruction. - - @param to: (C++: ea_t) linear address of referenced instruction - @param current: (C++: ea_t) linear address of current referenced instruction This value is - returned by get_first_cref_to() or previous call to - get_next_cref_to() functions. - @return: linear address of the next referencing instruction or BADADDR. +ida_xref.get_next_cref_to(to: ida_idaapi.ea_t, current: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get next instruction referencing to the specified instruction. + + @param to: linear address of referenced instruction + @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. + @returns linear address of the next referencing instruction or BADADDR. -ida_xref.get_next_dref_from (function) - get_next_dref_from(frm, current) -> ea_t - Get next data referenced from the specified address. - - @param from: (C++: ea_t) linear address of referencing instruction or data - @param current: (C++: ea_t) linear address of current referenced data. This value is - returned by get_first_dref_from() or previous call to - get_next_dref_from() functions. - @return: linear address of next data or BADADDR. +ida_xref.get_next_dref_from(frm: ida_idaapi.ea_t, current: ida_idaapi.ea_t) -> ida_idaapi.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. + @returns linear address of next data or BADADDR. -ida_xref.get_next_dref_to (function) - get_next_dref_to(to, current) -> ea_t - Get address of instruction/data referencing to the specified data - - @param to: (C++: ea_t) linear address of referencing instruction or data - @param current: (C++: ea_t) current linear address. This value is returned by - get_first_dref_to() or previous call to get_next_dref_to() - functions. - @return: BADADDR if nobody refers to the specified data. +ida_xref.get_next_dref_to(to: ida_idaapi.ea_t, current: ida_idaapi.ea_t) -> ida_idaapi.ea_t + Get address of instruction/data referencing to the specified data + + @param to: linear address of referencing instruction or data + @param current: current linear address. This value is returned by get_first_dref_to() or previous call to get_next_dref_to() functions. + @returns BADADDR if nobody refers to the specified data. -ida_xref.get_next_fcref_from (function) - get_next_fcref_from(frm, current) -> ea_t - - @param from: ea_t - @param current: ea_t +ida_xref.get_next_fcref_from(frm: ida_idaapi.ea_t, current: ida_idaapi.ea_t) -> ida_idaapi.ea_t -ida_xref.get_next_fcref_to (function) - get_next_fcref_to(to, current) -> ea_t - - @param to: ea_t - @param current: ea_t +ida_xref.get_next_fcref_to(to: ida_idaapi.ea_t, current: ida_idaapi.ea_t) -> ida_idaapi.ea_t -ida_xref.has_external_refs (function) - has_external_refs(pfn, ea) -> bool +ida_xref.has_external_refs(pfn: "func_t *", ea: ida_idaapi.ea_t) -> bool Does 'ea' have references from outside of 'pfn'? - - @param pfn: (C++: func_t *) - @param ea: (C++: ea_t) -ida_xref.xrefblk_t (class) - Proxy of C++ xrefblk_t class. +ida_xref.has_jump_or_flow_xref(ea: ida_idaapi.ea_t) -> bool + Are there jump or flow references to EA? -ida_xref.xrefblk_t.__init__ (method) - __init__(self) -> xrefblk_t +ida_xref.xrefblk_t -ida_xref.xrefblk_t.crefs_from (method) +ida_xref.xrefblk_t.__init__(self) + +ida_xref.xrefblk_t.crefs_from(self, ea) Provide an iterator on code references from ea including flow references -ida_xref.xrefblk_t.crefs_to (method) +ida_xref.xrefblk_t.crefs_to(self, ea) Provide an iterator on code references to ea including flow references -ida_xref.xrefblk_t.drefs_from (method) +ida_xref.xrefblk_t.drefs_from(self, ea) Provide an iterator on data references from ea -ida_xref.xrefblk_t.drefs_to (method) +ida_xref.xrefblk_t.drefs_to(self, ea) Provide an iterator on data references to ea -ida_xref.xrefblk_t.fcrefs_from (method) +ida_xref.xrefblk_t.fcrefs_from(self, ea) Provide an iterator on code references from ea -ida_xref.xrefblk_t.fcrefs_to (method) +ida_xref.xrefblk_t.fcrefs_to(self, ea) Provide an iterator on code references to ea -ida_xref.xrefblk_t.first_from (method) - first_from(self, _from, flags) -> bool - Get first xref from the given address (store in to) - - @param _from: (C++: ea_t) - @param flags: (C++: int) +ida_xref.xrefblk_t.first_from(self, _from: ida_idaapi.ea_t, flags: int = 0) -> bool -ida_xref.xrefblk_t.first_to (method) - first_to(self, _to, flags) -> bool - Get xref to given address (store in from) - - @param _to: (C++: ea_t) - @param flags: (C++: int) +ida_xref.xrefblk_t.first_to(self, _to: ida_idaapi.ea_t, flags: int = 0) -> bool -ida_xref.xrefblk_t.iscode (variable) - 1-is code reference; 0-is data reference +ida_xref.xrefblk_t.iscode + is code reference (cref_t)? otherwise it is a data reference (dref_t) + -ida_xref.xrefblk_t.next_from (method) - next_from(self) -> bool - Get xref from '_from' that comes after '_to'. - next_from(self, _from, _to, flags) -> bool - - @param _from: ea_t - @param _to: ea_t - @param flags: int +ida_xref.xrefblk_t.next_from(self, *args) -> bool -ida_xref.xrefblk_t.next_to (method) - next_to(self) -> bool - Get xref to '_to' that comes after '_from'. - next_to(self, _from, _to, flags) -> bool - - @param _from: ea_t - @param _to: ea_t - @param flags: int +ida_xref.xrefblk_t.next_to(self, *args) -> bool -ida_xref.xrefblk_t.refs_from (method) +ida_xref.xrefblk_t.refs_from(self, ea, flag) Provide an iterator on from reference represented by flag -ida_xref.xrefblk_t.refs_from._copy_xref (function) +ida_xref.xrefblk_t.refs_from._copy_xref() Make a private copy of the xref class to preserve its contents -ida_xref.xrefblk_t.refs_to (method) +ida_xref.xrefblk_t.refs_to(self, ea, flag) Provide an iterator on to reference represented by flag -ida_xref.xrefblk_t.refs_to._copy_xref (function) +ida_xref.xrefblk_t.refs_to._copy_xref() Make a private copy of the xref class to preserve its contents -ida_xref.xrefblk_t.to (variable) +ida_xref.xrefblk_t.to the referenced address - filled by first_from(), next_from() -ida_xref.xrefblk_t.type (variable) +ida_xref.xrefblk_t.type type of the last returned reference (cref_t & dref_t) -ida_xref.xrefblk_t.user (variable) - 1-is user defined xref, 0-defined by ida +ida_xref.xrefblk_t.user + is user defined xref? otherwise defined by ida -ida_xref.xrefchar (function) - xrefchar(xrtype) -> char - Get character describing the xref type. - - @param xrtype: (C++: char) combination of Cross-Reference type flags and a cref_t of dref_t - value +ida_xref.xrefchar(xrtype: "char") -> "char" + Get character describing the xref type. + + @param xrtype: combination of Cross-Reference type flags and a cref_t of dref_t value -ida_mergemod (module) +ida_mergemod Merge functionality for modules. NOTE: this functionality is available in IDA Teams (not IDA Pro) - - This file contains helper classes and convenience functions for module (plugin - or processor module) merging. - - Each module is responsible for merging the data it owns (the module data). At - the very beginning, the merging engine generates the ev_create_merge_handlers - event. Modules should hook to this event to create merge handlers (mergers) that - are responsible for the module data. - + This file contains helper classes and convenience functions for module (plugin or processor module) merging. + Each module is responsible for merging the data it owns (the module data). At the very beginning, the merging engine generates the ev_create_merge_handlers event. Modules should hook to this event to create merge handlers (mergers) that are responsible for the module data. We assume that each module may have: - * its data structure, derived from plugmod_t or procmod_t. we call this - structure moddata. + * its data structure, derived from plugmod_t or procmod_t. we call this structure moddata. * a dedicated netnode (module node), modnode for short. - Moddata is registered with the IDA kernel using the set_module_data() function, - which returns an integer, moddata_id. moddata_id is used to access the module - data structure during merging, so it is mandatory for all modules that support - merging. + Moddata is registered with the IDA kernel using the set_module_data() function, which returns an integer, moddata_id. moddata_id is used to access the module data structure during merging, so it is mandatory for all modules that support merging. The following sources of mergeable data are supported: - - 1. Data fields inside moddata 2. Values (scalar or binary, including blobs) - stored in the module node 3. Values (scalar or binary, including blobs) stored - in arbitrary netnodes 4. Data fields inside an auxiliary structure (provided by - a special helper) 5. Indexed arrays of data stored in netnodes - - Usually the sources #1-4 are handled by a single merger, which can be - parameterized using the folowing information: + 1. Data fields inside moddata 2. Values (scalar or binary, including blobs) stored in the module node 3. Values (scalar or binary, including blobs) stored in arbitrary netnodes 4. Data fields inside an auxiliary structure (provided by a special helper) 5. Indexed arrays of data stored in netnodes + Usually the sources #1-4 are handled by a single merger, which can be parameterized using the folowing information: * moddata_id * module name * module node name * array of field descriptors (idbattr_info_t idpopts_info[], see ida.hpp) + See plugins/mex1 for an example of such a merger. - - These parameters are stored in a helper class (moddata_diff_helper_t or - derived). The helper class can override the following virtual methods: - - merge_starting - prepare module data for merging (e.g. load data from idb) - merge_ending - opposite to merge_starting (e.g. save merged data to idb) - get_struc_ptr - get pointer to the auxiliary structure (to handle source #4); - this method will be called only if the fields with the IDI_HLPSTRUC bit are - present in the idpopts_info[] array - - For most plugins, the default implementation of moddata_diff_helper_t or the - std_moddata_diff_helper_t helper (presented below) is sufficient. You can find - examples of non-standard helpers in plugins/mex2 and plugins/callgraph. - - The source #5 is handled by a different set of mergers described by an array of - merge_node_info_t entries: a merger per entry. A non-trivial example can be - found in plugins/mex3 and plugins/ex_merge_ldrdata. - - A module can use the create_std_modmerge_handlers() function to create necessary - merge handlers. Please pay attention to the following arguments: - - helper - a helper class responsible for access to the internal module data for - the sources #1-4. It can be used to prepare a pointer to the internal module - structure and load/save data before/after merging (example: plugins/mex2). Im - most cases the default helper class moddata_diff_helper_t can be used. - merge_node_info - array of descriptions for the source #5. Note that the same - module node is used for all array elements. If you need this kind of mergers for - other netnodes, you should add them manually using the - create_nodeval_merge_handler() function (example: plugins/mex3) - + These parameters are stored in a helper class (moddata_diff_helper_t or derived). The helper class can override the following virtual methods: + merge_starting - prepare module data for merging (e.g. load data from idb) merge_ending - opposite to merge_starting (e.g. save merged data to idb) get_struc_ptr - get pointer to the auxiliary structure (to handle source #4); this method will be called only if the fields with the IDI_HLPSTRUC bit are present in the idpopts_info[] array + For most plugins, the default implementation of moddata_diff_helper_t or the std_moddata_diff_helper_t helper (presented below) is sufficient. You can find examples of non-standard helpers in plugins/mex2 and plugins/callgraph. + The source #5 is handled by a different set of mergers described by an array of merge_node_info_t entries: a merger per entry. A non-trivial example can be found in plugins/mex3 and plugins/ex_merge_ldrdata. + A module can use the create_std_modmerge_handlers() function to create necessary merge handlers. Please pay attention to the following arguments: + helper - a helper class responsible for access to the internal module data for the sources #1-4. It can be used to prepare a pointer to the internal module structure and load/save data before/after merging (example: plugins/mex2). Im most cases the default helper class moddata_diff_helper_t can be used. merge_node_info - array of descriptions for the source #5. Note that the same module node is used for all array elements. If you need this kind of mergers for other netnodes, you should add them manually using the create_nodeval_merge_handler() function (example: plugins/mex3) See also module/mergecmn.cpp for procmod-specific functions and macros. - Glossary: - - modmerger = module merger moddata = module data moddata_id = module data id + modmerger = module merger moddata = module data moddata_id = module data id + -ida_mergemod.create_std_modmerge_handlers (function) - create_std_modmerge_handlers(mhp, helper, merge_node_info=None) +ida_mergemod.create_std_modmerge_handlers(mhp: "merge_handler_params_t &", helper: "moddata_diff_helper_t &", merge_node_info: "merge_node_info2_t const *" = None) -> None convinience function to create merge handlers for modules/plugins - - @param mhp: (C++: merge_handler_params_t &) - @param helper: (C++: moddata_diff_helper_t &) - @param merge_node_info: (C++: const merge_node_info_t *) merge_node_info2_t const * -ida_merge (module) +ida_merge Merge functionality. NOTE: this functionality is available in IDA Teams (not IDA Pro) - There are 3 databases involved in merging: base_idb, local_db, and remote_idb. - * base_idb: the common base ancestor of 'local_db' and 'remote_db'. in the UI - this database is located in the middle. - * local_idb: local database that will contain the result of the merging. in the - UI this database is located on the left. - * remote_idb: remote database that will merge into local_idb. It may reside - locally on the current computer, despite its name. in the UI this database is - located on the right. base_idb and remote_idb are opened for reading only. - base_idb may be absent, in this case a 2-way merging is performed. + * base_idb: the common base ancestor of 'local_db' and 'remote_db'. in the UI this database is located in the middle. + * local_idb: local database that will contain the result of the merging. in the UI this database is located on the left. + * remote_idb: remote database that will merge into local_idb. It may reside locally on the current computer, despite its name. in the UI this database is located on the right. base_idb and remote_idb are opened for reading only. base_idb may be absent, in this case a 2-way merging is performed. - Conflicts can be resolved automatically or interactively. The automatic - resolving scores the conflicting blocks and takes the better one. The - interactive resolving displays the full rendered contents side by side, and - expects the user to select the better side for each conflict. - Since IDB files contain various kinds of information, there are many merging - phases. The entire list can be found in merge.cpp. Below are just some selected - examples: + Conflicts can be resolved automatically or interactively. The automatic resolving scores the conflicting blocks and takes the better one. The interactive resolving displays the full rendered contents side by side, and expects the user to select the better side for each conflict. + Since IDB files contain various kinds of information, there are many merging phases. The entire list can be found in merge.cpp. Below are just some selected examples: * merge global database settings (inf and other global vars) * merge segmentation and changes to the database bytes * merge various lists: exports, imports, loaded tils, etc @@ -68258,735 +46735,609 @@ ida_merge (module) * merge debugger settings, breakpoints * merge struct/enum views * merge local type libraries - * merge the disassembly items (i.e. the segment contents) this includes operand - types, code/data separation, etc + * merge the disassembly items (i.e. the segment contents) this includes operand types, code/data separation, etc * merge plugin specific info like decompiler types, dwarf mappings, etc + To unify UI elements of each merge phase, we use merger views: - * A view that consists of 2 or 3 panes: left (local_idb) and right (remote_idb). - The common base is in the middle, if present. - * Rendering of the panes depends on the phase, different phases show different - contents. - * The conflicts are highlighted by a colored background. Also, the detail pane - can be consulted for additional info. - * The user can select a conflict (or a bunch of conflicts) and say "use this - block". - * The user can browse the panes as he wishes. He will not be forced to handle - conflicts in any particular order. However, once he finishes working with a - merge handler and proceeds to the next one, he cannot go back. - * Scrolling the left pane will synchronously scroll the right pane and vice - versa. + * A view that consists of 2 or 3 panes: left (local_idb) and right (remote_idb). The common base is in the middle, if present. + * Rendering of the panes depends on the phase, different phases show different contents. + * The conflicts are highlighted by a colored background. Also, the detail pane can be consulted for additional info. + * The user can select a conflict (or a bunch of conflicts) and say "use this block". + * The user can browse the panes as he wishes. He will not be forced to handle conflicts in any particular order. However, once he finishes working with a merge handler and proceeds to the next one, he cannot go back. + * Scrolling the left pane will synchronously scroll the right pane and vice versa. * There are the navigation commands like "go to the prev/next conflict" - * The number of remaining conflicts to resolve is printed in the "Progress" - chooser. - * The user may manually modify local database inside the merger view. For that - he may use the regular hotkeys. However, editing the database may lead to new - conflicts, so we better restrict the available actions to some reasonable - minimum. Currently, this is not implemented. + * The number of remaining conflicts to resolve is printed in the "Progress" chooser. + * The user may manually modify local database inside the merger view. For that he may use the regular hotkeys. However, editing the database may lead to new conflicts, so we better restrict the available actions to some reasonable minimum. Currently, this is not implemented. - IDA works in a new "merge" mode during merging. In this mode most events are not - generated. We forbid them to reduce the risk that a rogue third-party plugin - that is not aware of the "merge" mode would spoil something. - For example, normally renaming a function causes a cascade of events and may - lead to other database modifications. Some of them may be desired, some - not. - Since there are some undesired events, it is better to stop generating them. - However, some events are required to render the disassembly listing. For - example, ev_ana_insn, av_out_insn. This is why some events are still generated - in the "merge" mode. - - To let processor modules and plugins merge their data, we introduce a new event: - ev_create_merge_handlers. It is generated immediately after opening all three - idbs. The interested modules should react to this event by creating new merge - handlers, if they need them. - - While the kernel can create arbitrary merge handlers, modules can create only - the standard ones returned by: - - create_nodeval_merge_handler() create_nodeval_merge_handlers() - create_std_modmerge_handlers() - - We do not document merge_handler_t because once a merge handler is created, it - is used exclusively by the kernel. - - See mergemod.hpp for more information about the merge mode for modules. + IDA works in a new "merge" mode during merging. In this mode most events are not generated. We forbid them to reduce the risk that a rogue third-party plugin that is not aware of the "merge" mode would spoil something. + For example, normally renaming a function causes a cascade of events and may lead to other database modifications. Some of them may be desired, some - not. Since there are some undesired events, it is better to stop generating them. However, some events are required to render the disassembly listing. For example, ev_ana_insn, av_out_insn. This is why some events are still generated in the "merge" mode. + To let processor modules and plugins merge their data, we introduce a new event: ev_create_merge_handlers. It is generated immediately after opening all three idbs. The interested modules should react to this event by creating new merge handlers, if they need them. + While the kernel can create arbitrary merge handlers, modules can create only the standard ones returned by: + create_nodeval_merge_handler() create_nodeval_merge_handlers() create_std_modmerge_handlers() + We do not document merge_handler_t because once a merge handler is created, it is used exclusively by the kernel. + See mergemod.hpp for more information about the merge mode for modules. + -ida_merge.MERGE_KIND_AFLAGS_EA (variable) +ida_merge.MERGE_KIND_AFLAGS_EA merge aflags for mapped EA -ida_merge.MERGE_KIND_AUTOQ (variable) +ida_merge.MERGE_KIND_AUTOQ auto queues -ida_merge.MERGE_KIND_BOOKMARKS (variable) +ida_merge.MERGE_KIND_BOOKMARKS merge bookmarks -ida_merge.MERGE_KIND_BPTS (variable) +ida_merge.MERGE_KIND_BPTS merge breakpoints -ida_merge.MERGE_KIND_BYTEVAL (variable) +ida_merge.MERGE_KIND_BYTEVAL merge byte values -ida_merge.MERGE_KIND_CREFS (variable) +ida_merge.MERGE_KIND_CREFS merge crefs -ida_merge.MERGE_KIND_CUSTDATA (variable) +ida_merge.MERGE_KIND_CUSTDATA merge custom data type and formats -ida_merge.MERGE_KIND_DBG_MEMREGS (variable) +ida_merge.MERGE_KIND_DBG_MEMREGS manual memory regions (debugger) -ida_merge.MERGE_KIND_DEBUGGER (variable) +ida_merge.MERGE_KIND_DEBUGGER debugger data -ida_merge.MERGE_KIND_DEKSTOPS (variable) +ida_merge.MERGE_KIND_DEKSTOPS dekstops -ida_merge.MERGE_KIND_DIRTREE (variable) +ida_merge.MERGE_KIND_DIRTREE merge std dirtrees -ida_merge.MERGE_KIND_DREFS (variable) +ida_merge.MERGE_KIND_DREFS merge drefs -ida_merge.MERGE_KIND_ENCODINGS (variable) +ida_merge.MERGE_KIND_ENCODINGS merge encodings -ida_merge.MERGE_KIND_ENCODINGS2 (variable) +ida_merge.MERGE_KIND_ENCODINGS2 merge default encodings -ida_merge.MERGE_KIND_END (variable) - insert to the end of handler list, valid for - merge_handler_params_t::insert_after +ida_merge.MERGE_KIND_END + insert to the end of handler list, valid for merge_handler_params_t::insert_after + -ida_merge.MERGE_KIND_ENUMS (variable) +ida_merge.MERGE_KIND_ENUMS merge enums -ida_merge.MERGE_KIND_EXPORTS (variable) +ida_merge.MERGE_KIND_EXPORTS merge exports -ida_merge.MERGE_KIND_EXTRACMT (variable) +ida_merge.MERGE_KIND_EXTRACMT merge extra next or prev lines -ida_merge.MERGE_KIND_FILEREGIONS (variable) +ida_merge.MERGE_KIND_FILEREGIONS merge fileregions -ida_merge.MERGE_KIND_FIXUPS (variable) +ida_merge.MERGE_KIND_FIXUPS merge fixups -ida_merge.MERGE_KIND_FLAGS (variable) +ida_merge.MERGE_KIND_FLAGS merge flags64_t -ida_merge.MERGE_KIND_FLOWS (variable) +ida_merge.MERGE_KIND_FLOWS merge flows -ida_merge.MERGE_KIND_FRAME (variable) +ida_merge.MERGE_KIND_FRAME merge function frame info (frame members) -ida_merge.MERGE_KIND_FRAMEMGR (variable) +ida_merge.MERGE_KIND_FRAMEMGR merge frames (globally: add/delete frames entirely) -ida_merge.MERGE_KIND_FUNC (variable) +ida_merge.MERGE_KIND_FUNC merge func info -ida_merge.MERGE_KIND_GHSTRCMT (variable) +ida_merge.MERGE_KIND_GHSTRCMT merge ghost structure comment -ida_merge.MERGE_KIND_HIDDENRANGES (variable) +ida_merge.MERGE_KIND_HIDDENRANGES merge hidden ranges -ida_merge.MERGE_KIND_IGNOREMICRO (variable) +ida_merge.MERGE_KIND_IGNOREMICRO IM ("$ ignore micro") flags. -ida_merge.MERGE_KIND_IMPORTS (variable) +ida_merge.MERGE_KIND_IMPORTS merge imports -ida_merge.MERGE_KIND_INF (variable) +ida_merge.MERGE_KIND_INF merge the inf variable (global settings) -ida_merge.MERGE_KIND_LAST (variable) - last predefined merge handler type. please note that there can be more merge - handler types, registered by plugins and processor modules. +ida_merge.MERGE_KIND_LAST + last predefined merge handler type. please note that there can be more merge handler types, registered by plugins and processor modules. + -ida_merge.MERGE_KIND_LOADER (variable) +ida_merge.MERGE_KIND_LOADER loader data -ida_merge.MERGE_KIND_LUMINA (variable) +ida_merge.MERGE_KIND_LUMINA lumina function metadata -ida_merge.MERGE_KIND_MAPPING (variable) +ida_merge.MERGE_KIND_MAPPING merge manual memory mapping -ida_merge.MERGE_KIND_NETNODE (variable) +ida_merge.MERGE_KIND_NETNODE netnode (no merging, to be used in idbunits) -ida_merge.MERGE_KIND_NOTEPAD (variable) +ida_merge.MERGE_KIND_NOTEPAD notepad -ida_merge.MERGE_KIND_ORPHANS (variable) +ida_merge.MERGE_KIND_ORPHANS merge orphan bytes -ida_merge.MERGE_KIND_PATCHES (variable) +ida_merge.MERGE_KIND_PATCHES merge patched bytes -ida_merge.MERGE_KIND_PROBLEMS (variable) +ida_merge.MERGE_KIND_PROBLEMS problems -ida_merge.MERGE_KIND_SCRIPTS (variable) +ida_merge.MERGE_KIND_SCRIPTS merge scripts -ida_merge.MERGE_KIND_SCRIPTS2 (variable) +ida_merge.MERGE_KIND_SCRIPTS2 merge scripts common info -ida_merge.MERGE_KIND_SEGGRPS (variable) +ida_merge.MERGE_KIND_SEGGRPS merge segment groups -ida_merge.MERGE_KIND_SEGMENTS (variable) +ida_merge.MERGE_KIND_SEGMENTS merge segments -ida_merge.MERGE_KIND_SEGREGS (variable) +ida_merge.MERGE_KIND_SEGREGS merge segment registers -ida_merge.MERGE_KIND_SELECTORS (variable) +ida_merge.MERGE_KIND_SELECTORS merge selectors -ida_merge.MERGE_KIND_SIGNATURES (variable) +ida_merge.MERGE_KIND_SIGNATURES signatures -ida_merge.MERGE_KIND_SOURCEFILES (variable) +ida_merge.MERGE_KIND_SOURCEFILES merge source files ranges -ida_merge.MERGE_KIND_STKPNTS (variable) +ida_merge.MERGE_KIND_STKPNTS merge SP change points -ida_merge.MERGE_KIND_STRMEM (variable) +ida_merge.MERGE_KIND_STRMEM merge struct members -ida_merge.MERGE_KIND_STRMEMCMT (variable) +ida_merge.MERGE_KIND_STRMEMCMT merge member comments for ghost struc -ida_merge.MERGE_KIND_STRUCTS (variable) +ida_merge.MERGE_KIND_STRUCTS merge structs (globally: add/delete structs entirely) -ida_merge.MERGE_KIND_STT (variable) +ida_merge.MERGE_KIND_STT merge flag storage types -ida_merge.MERGE_KIND_TILS (variable) +ida_merge.MERGE_KIND_TILS merge type libraries -ida_merge.MERGE_KIND_TINFO (variable) +ida_merge.MERGE_KIND_TINFO merge tinfo -ida_merge.MERGE_KIND_TRYBLKS (variable) +ida_merge.MERGE_KIND_TRYBLKS merge try blocks -ida_merge.MERGE_KIND_UDTMEM (variable) +ida_merge.MERGE_KIND_UDTMEM merge UDT members (local types) -ida_merge.MERGE_KIND_UI (variable) +ida_merge.MERGE_KIND_UI UI. -ida_merge.MERGE_KIND_VFTABLES (variable) +ida_merge.MERGE_KIND_VFTABLES merge vftables -ida_merge.MERGE_KIND_WATCHPOINTS (variable) +ida_merge.MERGE_KIND_WATCHPOINTS merge watchpoints -ida_merge.MH_LISTEN (variable) +ida_merge.MH_LISTEN merge handler will receive merge events -ida_merge.MH_TERSE (variable) +ida_merge.MH_TERSE do not display equal lines in the merge results table -ida_merge.MH_UI_CHAR_MASK (variable) +ida_merge.MH_UI_CHAR_MASK 7-bit ASCII split character -ida_merge.MH_UI_COLONNAME (variable) +ida_merge.MH_UI_COLONNAME ida will split the diffpos name by ':' to create chooser columns -ida_merge.MH_UI_COMMANAME (variable) +ida_merge.MH_UI_COMMANAME ida will split the diffpos name by ',' to create chooser columns -ida_merge.MH_UI_COMPLEX (variable) +ida_merge.MH_UI_COMPLEX diffpos details won't be displayed in the diffpos chooser -ida_merge.MH_UI_DP_NOLINEDIFF (variable) +ida_merge.MH_UI_DP_NOLINEDIFF Detail pane: do not show differences inside the line. -ida_merge.MH_UI_DP_SHORTNAME (variable) +ida_merge.MH_UI_DP_SHORTNAME Detail pane: use the first part of a complex diffpos name as the tree node name. -ida_merge.MH_UI_INDENT (variable) +ida_merge.MH_UI_INDENT preserve indent for diffpos name in diffpos chooser -ida_merge.MH_UI_NODETAILS (variable) +ida_merge.MH_UI_NODETAILS ida will not show the diffpos details -ida_merge.MH_UI_SPLITNAME (variable) - ida will split the diffpos name by 7-bit ASCII char to create chooser columns +ida_merge.MH_UI_SPLITNAME + ida will split the diffpos name by 7-bit ASCII char to create chooser columns + -ida_merge.NDS_BLOB (variable) +ida_merge.NDS_BLOB stored as netnode blobs -ida_merge.NDS_EV_FUNC (variable) +ida_merge.NDS_EV_FUNC enable default handling of mev_added_func/mev_deleting_func -ida_merge.NDS_EV_RANGE (variable) +ida_merge.NDS_EV_RANGE enable default handling of mev_modified_ranges, mev_deleting_segm -ida_merge.NDS_INC (variable) +ida_merge.NDS_INC stored value is incremented (scalars only) -ida_merge.NDS_IS_BOOL (variable) +ida_merge.NDS_IS_BOOL boolean value -ida_merge.NDS_IS_EA (variable) +ida_merge.NDS_IS_EA EA value. -ida_merge.NDS_IS_RELATIVE (variable) +ida_merge.NDS_IS_RELATIVE value is relative to index (stored as delta) -ida_merge.NDS_IS_STR (variable) +ida_merge.NDS_IS_STR string value -ida_merge.NDS_MAP_IDX (variable) +ida_merge.NDS_MAP_IDX apply ea2node() to index (==NETMAP_IDX) -ida_merge.NDS_MAP_VAL (variable) - apply ea2node() to value. Along with NDS_INC it gives effect of NETMAP_VAL, - examples: altval_ea : NDS_MAP_IDX charval : NDS_VAL8 charval_ea: - NDS_MAP_IDX|NDS_VAL8 eaget : NDS_MAP_IDX|NDS_MAP_VAL|NDS_INC +ida_merge.NDS_MAP_VAL + apply ea2node() to value. Along with NDS_INC it gives effect of NETMAP_VAL, examples: altval_ea : NDS_MAP_IDX charval : NDS_VAL8 charval_ea: NDS_MAP_IDX|NDS_VAL8 eaget : NDS_MAP_IDX|NDS_MAP_VAL|NDS_INC + -ida_merge.NDS_SUPVAL (variable) +ida_merge.NDS_SUPVAL stored as netnode supvals (not scalar) -ida_merge.NDS_VAL8 (variable) +ida_merge.NDS_UI_ND + UI: no need to show diffpos detail pane, MH_UI_NODETAILS, make sense if merge_node_helper_t is used + + +ida_merge.NDS_VAL8 use 8-bit values (==NETMAP_V8) -ida_merge.create_nodeval_merge_handler (function) - create_nodeval_merge_handler(mhp, label, nodename, tag, nds_flags, node_helper=None, skip_empty_nodes=True) -> merge_handler_t * - Create a merge handler for netnode scalar/string values - - @param mhp: (C++: const merge_handler_params_t &) merging parameters - @param label: (C++: const char *) handler short name (to be be appended to mhp.label) - @param nodename: (C++: const char *) netnode name - @param tag: (C++: uchar) a tag used to access values in the netnode - @param nds_flags: (C++: uint32) netnode value attributes (a combination of nds_flags_t) - @param node_helper: merge_node_helper_t * - @param skip_empty_nodes: (C++: bool) do not create handler in case of empty netnode - @return: diff source object (normally should be attahced to a merge handler) +ida_merge.create_nodeval_merge_handler(mhp: "merge_handler_params_t", label: str, nodename: str, tag: "uchar", nds_flags: int, node_helper: "merge_node_helper_t" = None, skip_empty_nodes: bool = True) -> "merge_handler_t *" + Create a merge handler for netnode scalar/string values + + @param mhp: merging parameters + @param label: handler short name (to be be appended to mhp.label) + @param nodename: netnode name + @param tag: a tag used to access values in the netnode + @param nds_flags: netnode value attributes (a combination of nds_flags_t) + @param skip_empty_nodes: do not create handler in case of empty netnode + @returns diff source object (normally should be attahced to a merge handler) -ida_merge.create_nodeval_merge_handlers (function) - create_nodeval_merge_handlers(out, mhp, nodename, valdesc, skip_empty_nodes=True) - Create a serie of merge handlers for netnode scalar/string values (call - create_nodeval_merge_handler() for each member of VALDESC) - - @param out: (C++: merge_handlers_t *) [out] created handlers will be placed here - @param mhp: (C++: const merge_handler_params_t &) merging parameters - @param nodename: (C++: const char *) netnode name - @param valdesc: (C++: const merge_node_info_t *) array of handler descriptions - @param skip_empty_nodes: (C++: bool) do not create handlers for empty netnodes - @return: diff source object (normally should be attahced to a merge handler) +ida_merge.create_nodeval_merge_handlers(out: "merge_handlers_t *", mhp: "merge_handler_params_t", nodename: str, valdesc: "merge_node_info_t", skip_empty_nodes: bool = True) -> None + Create a serie of merge handlers for netnode scalar/string values (call create_nodeval_merge_handler() for each member of VALDESC) + + @param out: [out] created handlers will be placed here + @param mhp: merging parameters + @param nodename: netnode name + @param valdesc: array of handler descriptions + @param skip_empty_nodes: do not create handlers for empty netnodes + @returns diff source object (normally should be attahced to a merge handler) -ida_merge.destroy_moddata_merge_handlers (function) - destroy_moddata_merge_handlers(data_id) - - @param data_id: int +ida_merge.destroy_moddata_merge_handlers(data_id: int) -> None -ida_merge.get_ea_diffpos_name (function) - get_ea_diffpos_name(ea) -> str - Get nice name for EA diffpos - - @param ea: (C++: ea_t) diffpos - @note - @see: get_nice_colored_name +ida_merge.get_ea_diffpos_name(ea: ida_idaapi.ea_t) -> str + Get nice name for EA diffpos + + @param ea: diffpos -ida_merge.is_diff_merge_mode (function) - is_diff_merge_mode() -> bool - Return TRUE if IDA is running in diff mode - (MERGE_POLICY_MDIFF/MERGE_POLICY_VDIFF) +ida_merge.is_diff_merge_mode() -> bool + Return TRUE if IDA is running in diff mode (MERGE_POLICY_MDIFF/MERGE_POLICY_VDIFF) -ida_merge.item_block_locator_t (class) - Proxy of C++ merge_data_t::item_block_locator_t class. +ida_merge.item_block_locator_t -ida_merge.item_block_locator_t.__disown__ (method) +ida_merge.item_block_locator_t.__disown__(self) -ida_merge.item_block_locator_t.__init__ (method) - __init__(self) -> item_block_locator_t - - @param self: PyObject * +ida_merge.item_block_locator_t.__init__(self) -ida_merge.item_block_locator_t.get_block_head (method) - get_block_head(self, md, idx, item_head) -> ea_t - - @param md: merge_data_t & - @param idx: diff_source_idx_t - @param item_head: ea_t +ida_merge.item_block_locator_t.get_block_head(self, md: "merge_data_t", idx: "diff_source_idx_t", item_head: ida_idaapi.ea_t) -> ida_idaapi.ea_t -ida_merge.item_block_locator_t.setup_blocks (method) - setup_blocks(self, md, _from, to, region) -> bool - - @param md: merge_data_t & - @param from: diff_source_idx_t - @param to: diff_source_idx_t - @param region: diff_range_t const & +ida_merge.item_block_locator_t.setup_blocks(self, md: "merge_data_t", _from: "diff_source_idx_t", to: "diff_source_idx_t", region: "diff_range_t const &") -> bool -ida_merge.merge_data_t (class) - Proxy of C++ merge_data_t class. +ida_merge.merge_data_t -ida_merge.merge_data_t.__init__ (method) +ida_merge.merge_data_t.__init__(self, *args, **kwargs) -ida_merge.merge_data_t.add_event_handler (method) - add_event_handler(self, handler) - - @param handler: merge_handler_t * +ida_merge.merge_data_t.add_event_handler(self, handler: "merge_handler_t *") -> None -ida_merge.merge_data_t.base_id (method) - base_id(self) -> int +ida_merge.merge_data_t.base_id(self) -> int -ida_merge.merge_data_t.compare_merging_tifs (method) - compare_merging_tifs(self, tif1, diffidx1, tif2, diffidx2) -> int - compare types from two databases - - @param tif1: (C++: const tinfo_t &) type - @param diffidx1: (C++: diff_source_idx_t) database index, diff_source_idx_t - @param tif2: (C++: const tinfo_t &) type - @param diffidx2: (C++: diff_source_idx_t) database index, diff_source_idx_t - @return: -1, 0, 1 +ida_merge.merge_data_t.compare_merging_tifs(self, tif1: "tinfo_t", diffidx1: "diff_source_idx_t", tif2: "tinfo_t", diffidx2: "diff_source_idx_t") -> int + compare types from two databases + + @param tif1: type + @param diffidx1: database index, diff_source_idx_t + @param tif2: type + @param diffidx2: database index, diff_source_idx_t + @returns -1, 0, 1 -ida_merge.merge_data_t.dbctx_ids (variable) +ida_merge.merge_data_t.dbctx_ids local, remote, base ids -ida_merge.merge_data_t.ev_handlers (variable) +ida_merge.merge_data_t.ev_handlers event handlers -ida_merge.merge_data_t.get_block_head (method) - get_block_head(self, idx, item_head) -> ea_t - - @param idx: diff_source_idx_t - @param item_head: ea_t +ida_merge.merge_data_t.get_block_head(self, idx: "diff_source_idx_t", item_head: ida_idaapi.ea_t) -> ida_idaapi.ea_t -ida_merge.merge_data_t.has_existing_node (method) - has_existing_node(self, nodename) -> bool +ida_merge.merge_data_t.has_existing_node(self, nodename: str) -> bool check that node exists in any of databases - - @param nodename: (C++: const char *) char const * -ida_merge.merge_data_t.local_id (method) - local_id(self) -> int +ida_merge.merge_data_t.local_id(self) -> int -ida_merge.merge_data_t.map_privrange_id (method) - map_privrange_id(self, tid, ea, _from, to, strict=True) -> bool - map IDs of structures, enumerations and their members - - @param tid: (C++: tid_t *) item ID in TO database - @param ea: (C++: ea_t) item ID to find counterpart - @param from: (C++: diff_source_idx_t) source database index, diff_source_idx_t - @param to: (C++: diff_source_idx_t) destination database index, diff_source_idx_t - @param strict: (C++: bool) raise interr if could not map - @return: success +ida_merge.merge_data_t.map_privrange_id(self, tid: "tid_t *", ea: ida_idaapi.ea_t, _from: "diff_source_idx_t", to: "diff_source_idx_t", strict: bool = True) -> bool + map IDs of structures, enumerations and their members + + @param tid: item ID in TO database + @param ea: item ID to find counterpart + @param to: destination database index, diff_source_idx_t + @param strict: raise interr if could not map + @returns success -ida_merge.merge_data_t.map_tinfo (method) - map_tinfo(self, tif, _from, to, strict=True) -> bool - migrate type, replaces type references into FROM database to references into TO - database - - @param tif: (C++: tinfo_t *) type to migrate, will be cleared in case of fail - @param from: (C++: diff_source_idx_t) source database index, diff_source_idx_t - @param to: (C++: diff_source_idx_t) destination database index, diff_source_idx_t - @param strict: (C++: bool) raise interr if could not map - @return: success +ida_merge.merge_data_t.map_tinfo(self, tif: "tinfo_t", _from: "diff_source_idx_t", to: "diff_source_idx_t", strict: bool = True) -> bool + migrate type, replaces type references into FROM database to references into TO database + + @param tif: type to migrate, will be cleared in case of fail + @param to: destination database index, diff_source_idx_t + @param strict: raise interr if could not map + @returns success -ida_merge.merge_data_t.nbases (variable) - number of database participating in merge process, maybe 2 or 3 +ida_merge.merge_data_t.nbases + number of database participating in merge process, maybe 2 or 3 + -ida_merge.merge_data_t.remote_id (method) - remote_id(self) -> int +ida_merge.merge_data_t.remote_id(self) -> int -ida_merge.merge_data_t.remove_event_handler (method) - remove_event_handler(self, handler) - - @param handler: merge_handler_t * +ida_merge.merge_data_t.remove_event_handler(self, handler: "merge_handler_t *") -> None -ida_merge.merge_data_t.set_dbctx_ids (method) - set_dbctx_ids(self, local, remote, base) - - @param local: int - @param remote: int - @param base: int +ida_merge.merge_data_t.set_dbctx_ids(self, local: int, remote: int, base: int) -> None -ida_merge.merge_data_t.setup_blocks (method) - setup_blocks(self, dst_idx, src_idx, region) -> bool - - @param dst_idx: diff_source_idx_t - @param src_idx: diff_source_idx_t - @param region: diff_range_t const & +ida_merge.merge_data_t.setup_blocks(self, dst_idx: "diff_source_idx_t", src_idx: "diff_source_idx_t", region: "diff_range_t const &") -> bool -ida_merge.merge_handler_params_t (class) - Proxy of C++ merge_handler_params_t class. +ida_merge.merge_handler_params_t -ida_merge.merge_handler_params_t.__init__ (method) - __init__(self, _md, _label, _kind, _insert_after, _mh_flags) -> merge_handler_params_t - - @param _md: merge_data_t & - @param _label: qstring const & - @param _kind: enum merge_kind_t - @param _insert_after: enum merge_kind_t - @param _mh_flags: uint32 +ida_merge.merge_handler_params_t.__init__(self, _md: "merge_data_t", _label: str, _kind: "merge_kind_t", _insert_after: "merge_kind_t", _mh_flags: int) -ida_merge.merge_handler_params_t.insert_after (variable) +ida_merge.merge_handler_params_t.insert_after desired position inside 'handlers' merge_kind_t -ida_merge.merge_handler_params_t.kind (variable) +ida_merge.merge_handler_params_t.kind merge handler kind merge_kind_t -ida_merge.merge_handler_params_t.ui_complex_details (method) - ui_complex_details(self, _mh_flags) -> bool - Do not display the diffpos details in the chooser. For example, the - MERGE_KIND_SCRIPTS handler puts the script body as the diffpos detail. It would - not be great to show them as part of the chooser. +ida_merge.merge_handler_params_t.ui_complex_details(self, *args) -> bool + This function has the following signatures: - @param _mh_flags: (C++: uint32) + 0. ui_complex_details() -> bool + 1. ui_complex_details(_mh_flags: int) -> bool - ui_complex_details(self) -> bool + # 0: ui_complex_details() -> bool + + + # 1: ui_complex_details(_mh_flags: int) -> bool + + Do not display the diffpos details in the chooser. For example, the MERGE_KIND_SCRIPTS handler puts the script body as the diffpos detail. It would not be great to show them as part of the chooser. + -ida_merge.merge_handler_params_t.ui_complex_name (method) - ui_complex_name(self, _mh_flags) -> bool - It customary to create long diffpos names having many components that are - separated by any 7-bit ASCII character (besides of '\0'). In this case it is - possible to instruct IDA to use this separator to create a multi-column chooser. - For example the MERGE_KIND_ENUMS handler has the following diffpos name: - enum_1,enum_2 If MH_UI_COMMANAME is specified, IDA will create 2 columns for - these names. +ida_merge.merge_handler_params_t.ui_complex_name(self, *args) -> bool + This function has the following signatures: - @param _mh_flags: (C++: uint32) + 0. ui_complex_name() -> bool + 1. ui_complex_name(_mh_flags: int) -> bool - ui_complex_name(self) -> bool + # 0: ui_complex_name() -> bool + + + # 1: ui_complex_name(_mh_flags: int) -> bool + + It customary to create long diffpos names having many components that are separated by any 7-bit ASCII character (besides of '\0'). In this case it is possible to instruct IDA to use this separator to create a multi-column chooser. For example the MERGE_KIND_ENUMS handler has the following diffpos name: enum_1,enum_2 If MH_UI_COMMANAME is specified, IDA will create 2 columns for these names. + -ida_merge.merge_handler_params_t.ui_dp_shortname (method) - ui_dp_shortname(self, _mh_flags) -> bool - The detail pane shows the diffpos details for the current diffpos range as a - tree-like view. In this pane the diffpos names are used as tree node names and - the diffpos details as their children. Sometimes, for complex diffpos names, the - first part of the name looks better than the entire name. For example, the - MERGE_KIND_SEGMENTS handler has the following diffpos name: - <range>,<segm1>,<segm2>,<segm3> if MH_UI_DP_SHORTNAME is specified, IDA will use - <range> as a tree node name +ida_merge.merge_handler_params_t.ui_dp_shortname(self, *args) -> bool + This function has the following signatures: - @param _mh_flags: (C++: uint32) + 0. ui_dp_shortname() -> bool + 1. ui_dp_shortname(_mh_flags: int) -> bool - ui_dp_shortname(self) -> bool + # 0: ui_dp_shortname() -> bool + + + # 1: ui_dp_shortname(_mh_flags: int) -> bool + + The detail pane shows the diffpos details for the current diffpos range as a tree-like view. In this pane the diffpos names are used as tree node names and the diffpos details as their children. Sometimes, for complex diffpos names, the first part of the name looks better than the entire name. For example, the MERGE_KIND_SEGMENTS handler has the following diffpos name: <range>,<segm1>,<segm2>,<segm3> if MH_UI_DP_SHORTNAME is specified, IDA will use <range> as a tree node name + -ida_merge.merge_handler_params_t.ui_has_details (method) - ui_has_details(self, _mh_flags) -> bool +ida_merge.merge_handler_params_t.ui_has_details(self, *args) -> bool + This function has the following signatures: + + 0. ui_has_details() -> bool + 1. ui_has_details(_mh_flags: int) -> bool + + # 0: ui_has_details() -> bool + + + # 1: ui_has_details(_mh_flags: int) -> bool + Should IDA display the diffpos detail pane? - - @param _mh_flags: (C++: uint32) - - ui_has_details(self) -> bool -ida_merge.merge_handler_params_t.ui_indent (method) - ui_indent(self, _mh_flags) -> bool - In the ordinary situation the spaces from the both sides of diffpos name are - trimmed. Use this UI hint to preserve the leading spaces. +ida_merge.merge_handler_params_t.ui_indent(self, *args) -> bool + This function has the following signatures: - @param _mh_flags: (C++: uint32) + 0. ui_indent() -> bool + 1. ui_indent(_mh_flags: int) -> bool - ui_indent(self) -> bool + # 0: ui_indent() -> bool + + + # 1: ui_indent(_mh_flags: int) -> bool + + In the ordinary situation the spaces from the both sides of diffpos name are trimmed. Use this UI hint to preserve the leading spaces. + -ida_merge.merge_handler_params_t.ui_linediff (method) - ui_linediff(self, _mh_flags) -> bool - In detail pane IDA shows difference between diffpos details. IDA marks added or - deleted detail by color. In the modified detail the changes are marked. Use this - UI hint if you do not want to show the differences inside detail. +ida_merge.merge_handler_params_t.ui_linediff(self, *args) -> bool + This function has the following signatures: - @param _mh_flags: (C++: uint32) + 0. ui_linediff() -> bool + 1. ui_linediff(_mh_flags: int) -> bool - ui_linediff(self) -> bool + # 0: ui_linediff() -> bool + + + # 1: ui_linediff(_mh_flags: int) -> bool + + In detail pane IDA shows difference between diffpos details. IDA marks added or deleted detail by color. In the modified detail the changes are marked. Use this UI hint if you do not want to show the differences inside detail. + -ida_merge.merge_handler_params_t.ui_split_char (method) - ui_split_char(self, _mh_flags) -> char +ida_merge.merge_handler_params_t.ui_split_char(self, *args) -> "char" + This function has the following signatures: - @param _mh_flags: uint32 + 0. ui_split_char() -> char + 1. ui_split_char(_mh_flags: int) -> char - ui_split_char(self) -> char - -ida_merge.merge_handler_params_t.ui_split_str (method) - ui_split_str(self, _mh_flags) -> qstring + # 0: ui_split_char() -> char - @param _mh_flags: uint32 - ui_split_str(self) -> qstring + # 1: ui_split_char(_mh_flags: int) -> char -ida_merge.merge_node_helper_t (class) - Proxy of C++ merge_node_helper_t class. - -ida_merge.merge_node_helper_t.__disown__ (method) - -ida_merge.merge_node_helper_t.__init__ (method) - __init__(self) -> merge_node_helper_t +ida_merge.merge_handler_params_t.ui_split_str(self, *args) -> str + This function has the following signatures: - @param self: PyObject * + 0. ui_split_str() -> str + 1. ui_split_str(_mh_flags: int) -> str + + # 0: ui_split_str() -> str + + + # 1: ui_split_str(_mh_flags: int) -> str -ida_merge.merge_node_helper_t.append_eavec (method) - append_eavec(s, prefix, eas) +ida_merge.merge_node_helper_t + +ida_merge.merge_node_helper_t.__disown__(self) + +ida_merge.merge_node_helper_t.__init__(self) + +ida_merge.merge_node_helper_t.append_eavec(s: str, prefix: str, eas: "eavec_t const &") -> None can be used by derived classes - - @param s: (C++: qstring *) - @param prefix: (C++: const char *) char const * - @param eas: (C++: const eavec_t &) eavec_t const & -ida_merge.merge_node_helper_t.get_column_headers (method) - get_column_headers(self, arg0, arg1, arg2) - get column headers for chooser (to be used in - linear_diff_source_t::get_column_headers) - - @param arg0: qstrvec_t * - @param arg1: uchar - @param arg2: void * +ida_merge.merge_node_helper_t.get_column_headers(self, arg0: "qstrvec_t *", arg1: "uchar", arg2: "void *") -> None + get column headers for chooser (to be used in linear_diff_source_t::get_column_headers) + -ida_merge.merge_node_helper_t.get_netnode (method) - get_netnode(self) -> netnode - return netnode to be used as source. If this function returns BADNODE netnode - will be created using netnode name passed to create_nodeval_diff_source +ida_merge.merge_node_helper_t.get_netnode(self) -> "netnode" + return netnode to be used as source. If this function returns BADNODE netnode will be created using netnode name passed to create_nodeval_diff_source + -ida_merge.merge_node_helper_t.is_mergeable (method) - is_mergeable(self, arg0, arg1) -> bool - - @param filter: check if we should perform merging for given record - @param arg1: nodeidx_t +ida_merge.merge_node_helper_t.is_mergeable(self, arg0: "uchar", arg1: "nodeidx_t") -> bool + filter: check if we should perform merging for given record -ida_merge.merge_node_helper_t.map_scalar (method) - map_scalar(self, arg0, arg1, arg2, arg3) +ida_merge.merge_node_helper_t.map_scalar(self, arg0: "nodeidx_t *", arg1: "void *", arg2: "diff_source_idx_t", arg3: "diff_source_idx_t") -> None map scalar/string/buffered value - - @param arg0: nodeidx_t * - @param arg1: void * - @param arg2: diff_source_idx_t - @param arg3: diff_source_idx_t -ida_merge.merge_node_helper_t.map_string (method) - map_string(self, arg0, arg1, arg2, arg3) - - @param arg0: qstring * - @param arg1: void * - @param arg2: diff_source_idx_t - @param arg3: diff_source_idx_t +ida_merge.merge_node_helper_t.map_string(self, arg0: str, arg1: "void *", arg2: "diff_source_idx_t", arg3: "diff_source_idx_t") -> None -ida_merge.merge_node_helper_t.print_entry_details (method) - print_entry_details(self, arg0, arg1, arg2, arg3) - print the details of the specified entry usually contains multiple lines, one - for each attribute or detail. (to be used in print_diffpos_details) - - @param arg0: qstrvec_t * - @param arg1: uchar - @param arg2: nodeidx_t - @param arg3: void * +ida_merge.merge_node_helper_t.print_entry_details(self, arg0: "qstrvec_t *", arg1: "uchar", arg2: "nodeidx_t", arg3: "void *") -> None + print the details of the specified entry usually contains multiple lines, one for each attribute or detail. (to be used in print_diffpos_details) + -ida_merge.merge_node_helper_t.print_entry_name (method) - print_entry_name(self, arg0, arg1, arg2) -> qstring - print the name of the specified entry (to be used in print_diffpos_name) - - @param arg0: uchar - @param arg1: nodeidx_t - @param arg2: void * +ida_merge.merge_node_helper_t.print_entry_name(self, arg0: "uchar", arg1: "nodeidx_t", arg2: "void *") -> str + print the name of the specified entry (to be used in print_diffpos_name) + -ida_merge.merge_node_helper_t.refresh (method) - refresh(self, arg0, arg1) - notify helper that some data was changed in the database and internal structures - (e.g. caches) should be refreshed - - @param arg0: uchar - @param arg1: void * +ida_merge.merge_node_helper_t.refresh(self, arg0: "uchar", arg1: "void *") -> None + notify helper that some data was changed in the database and internal structures (e.g. caches) should be refreshed + -ida_merge.merge_node_helper_t_append_eavec (function) - merge_node_helper_t_append_eavec(s, prefix, eas) - - @param s: qstring * - @param prefix: char const * - @param eas: eavec_t const & +ida_merge.merge_node_info_t -ida_merge.merge_node_info_t (class) - Proxy of C++ merge_node_info2_t class. +ida_merge.merge_node_info_t.__init__(self, name: str, tag: "uchar", nds_flags: int, node_helper: "merge_node_helper_t" = None) -ida_merge.merge_node_info_t.__init__ (method) - __init__(self, name, tag, nds_flags, node_helper=None) -> merge_node_info_t - - @param name: char const * - @param tag: uchar - @param nds_flags: uint32 - @param node_helper: merge_node_helper_t * - -ida_merge.merge_node_info_t.name (variable) +ida_merge.merge_node_info_t.name name of the array (label) -ida_merge.merge_node_info_t.nds_flags (variable) +ida_merge.merge_node_info_t.nds_flags node value attributes (a combination of nds_flags_t) -ida_merge.merge_node_info_t.tag (variable) +ida_merge.merge_node_info_t.tag a tag used to access values in the netnode -ida_merge.moddata_diff_helper_t (class) - Proxy of C++ moddata_diff_helper_t class. +ida_merge.moddata_diff_helper_t -ida_merge.moddata_diff_helper_t.__disown__ (method) +ida_merge.moddata_diff_helper_t.__disown__(self) -ida_merge.moddata_diff_helper_t.__init__ (method) - __init__(self, _module_name, _netnode_name, _fields) -> moddata_diff_helper_t - - @param _module_name: char const * - @param _netnode_name: char const * - @param _fields: idbattr_info_t const * +ida_merge.moddata_diff_helper_t.__init__(self, _module_name: str, _netnode_name: str, _fields: "idbattr_info_t") -ida_merge.moddata_diff_helper_t.additional_mh_flags (variable) +ida_merge.moddata_diff_helper_t.additional_mh_flags additional merge handler flags -ida_merge.moddata_diff_helper_t.fields (variable) +ida_merge.moddata_diff_helper_t.fields module data attribute descriptions -ida_merge.moddata_diff_helper_t.get_struc_ptr (method) - get_struc_ptr(self, arg0, arg1, arg2) -> void * - - @param arg0: merge_data_t & - @param arg1: diff_source_idx_t - @param arg2: idbattr_info_t const & +ida_merge.moddata_diff_helper_t.get_struc_ptr(self, arg0: "merge_data_t", arg1: "diff_source_idx_t", arg2: "idbattr_info_t") -> "void *" -ida_merge.moddata_diff_helper_t.merge_ending (method) - merge_ending(self, arg0, arg1) - - @param arg0: diff_source_idx_t - @param arg1: void * +ida_merge.moddata_diff_helper_t.merge_ending(self, arg0: "diff_source_idx_t", arg1: "void *") -> None -ida_merge.moddata_diff_helper_t.merge_starting (method) - merge_starting(self, arg0, arg1) - - @param arg0: diff_source_idx_t - @param arg1: void * +ida_merge.moddata_diff_helper_t.merge_starting(self, arg0: "diff_source_idx_t", arg1: "void *") -> None -ida_merge.moddata_diff_helper_t.module_name (variable) +ida_merge.moddata_diff_helper_t.module_name will be used as a prefix for field desc -ida_merge.moddata_diff_helper_t.netnode_name (variable) +ida_merge.moddata_diff_helper_t.netnode_name name of netnode with module data attributes -ida_merge.moddata_diff_helper_t.nfields (variable) +ida_merge.moddata_diff_helper_t.nfields number of descriptions -ida_merge.moddata_diff_helper_t.print_diffpos_details (method) - print_diffpos_details(self, arg0, arg1) - - @param arg0: qstrvec_t * - @param arg1: idbattr_info_t const & +ida_merge.moddata_diff_helper_t.print_diffpos_details(self, arg0: "qstrvec_t *", arg1: "idbattr_info_t") -> None -ida_merge.moddata_diff_helper_t.str2val (method) - str2val(self, arg0, arg1, arg2) -> bool - - @param arg0: uint64 * - @param arg1: idbattr_info_t const & - @param arg2: char const * +ida_merge.moddata_diff_helper_t.str2val(self, arg0: "uint64 *", arg1: "idbattr_info_t", arg2: str) -> bool -ida_merge.moddata_diff_helper_t.val2str (method) - val2str(self, arg0, arg1, arg2) -> bool - - @param arg0: qstring * - @param arg1: idbattr_info_t const & - @param arg2: uint64 +ida_merge.moddata_diff_helper_t.val2str(self, arg0: str, arg1: "idbattr_info_t", arg2: "uint64") -> bool + +ida_undo + +ida_undo.create_undo_point(*args) -> bool + Create a new restore point. The user can undo to this point in the future. + + @param bytes: body of the record for UNDO_ACTION_START + @param size: size of the record for UNDO_ACTION_START + @returns success; fails if undo is disabled + +ida_undo.get_redo_action_label() -> str + Get the label of the action that will be redone. This function returns the text that can be displayed in the redo menu + + @returns success + +ida_undo.get_undo_action_label() -> str + Get the label of the action that will be undone. This function returns the text that can be displayed in the undo menu + + @returns success + +ida_undo.perform_redo() -> bool + Perform redo. + + @returns success + +ida_undo.perform_undo() -> bool + Perform undo. + + @returns success diff --git a/api_contents_pro.brief b/api_contents_pro.brief deleted file mode 100644 index c96f68e..0000000 --- a/api_contents_pro.brief +++ /dev/null @@ -1,14228 +0,0 @@ -ida_hexrays (module) -ida_hexrays.ACFL_BLKOPT (variable) -ida_hexrays.ACFL_GLBDEL (variable) -ida_hexrays.ACFL_GLBPROP (variable) -ida_hexrays.ACFL_GUESS (variable) -ida_hexrays.ACFL_LOCOPT (variable) -ida_hexrays.ALLOW_UNUSED_LABELS (variable) -ida_hexrays.ANCHOR_BLKCMT (variable) -ida_hexrays.ANCHOR_CITEM (variable) -ida_hexrays.ANCHOR_ITP (variable) -ida_hexrays.ANCHOR_LVAR (variable) -ida_hexrays.ANY_FPSIZE (variable) -ida_hexrays.ANY_REGSIZE (variable) -ida_hexrays.BLT_0WAY (variable) -ida_hexrays.BLT_1WAY (variable) -ida_hexrays.BLT_2WAY (variable) -ida_hexrays.BLT_NONE (variable) -ida_hexrays.BLT_NWAY (variable) -ida_hexrays.BLT_STOP (variable) -ida_hexrays.BLT_XTRN (variable) -ida_hexrays.CALC_CURLY_BRACES (variable) -ida_hexrays.CFL_FINAL (variable) -ida_hexrays.CFL_HELPER (variable) -ida_hexrays.CFL_NORET (variable) -ida_hexrays.CFS_BOUNDS (variable) -ida_hexrays.CFS_LOCKED (variable) -ida_hexrays.CFS_LVARS_HIDDEN (variable) -ida_hexrays.CFS_TEXT (variable) -ida_hexrays.CHF_FAKE (variable) -ida_hexrays.CHF_INITED (variable) -ida_hexrays.CHF_OVER (variable) -ida_hexrays.CHF_PASSTHRU (variable) -ida_hexrays.CHF_REPLACED (variable) -ida_hexrays.CHF_TERM (variable) -ida_hexrays.CIT_COLLAPSED (variable) -ida_hexrays.CMAT_BUILT (variable) -ida_hexrays.CMAT_CASTED (variable) -ida_hexrays.CMAT_CPA (variable) -ida_hexrays.CMAT_FINAL (variable) -ida_hexrays.CMAT_NICE (variable) -ida_hexrays.CMAT_TRANS1 (variable) -ida_hexrays.CMAT_TRANS2 (variable) -ida_hexrays.CMAT_TRANS3 (variable) -ida_hexrays.CMAT_ZERO (variable) -ida_hexrays.CMT_ALL (variable) -ida_hexrays.CMT_BLOCK1 (variable) -ida_hexrays.CMT_BLOCK2 (variable) -ida_hexrays.CMT_FUNC (variable) -ida_hexrays.CMT_LVAR (variable) -ida_hexrays.CMT_NONE (variable) -ida_hexrays.CMT_TAIL (variable) -ida_hexrays.CPBLK_FAST (variable) -ida_hexrays.CPBLK_MINREF (variable) -ida_hexrays.CPBLK_OPTJMP (variable) -ida_hexrays.CV_FAST (variable) -ida_hexrays.CV_INSNS (variable) -ida_hexrays.CV_PARENTS (variable) -ida_hexrays.CV_POST (variable) -ida_hexrays.CV_PRUNE (variable) -ida_hexrays.CV_RESTART (variable) -ida_hexrays.DECOMP_ALL_BLKS (variable) -ida_hexrays.DECOMP_GXREFS_DEFLT (variable) -ida_hexrays.DECOMP_GXREFS_FORCE (variable) -ida_hexrays.DECOMP_GXREFS_NOUPD (variable) -ida_hexrays.DECOMP_NO_CACHE (variable) -ida_hexrays.DECOMP_NO_FRAME (variable) -ida_hexrays.DECOMP_NO_HIDE (variable) -ida_hexrays.DECOMP_NO_WAIT (variable) -ida_hexrays.DECOMP_NO_XREFS (variable) -ida_hexrays.DECOMP_VOID_MBA (variable) -ida_hexrays.DECOMP_WARNINGS (variable) -ida_hexrays.DecompilationFailure (class) -ida_hexrays.EQ_CMPDEST (variable) -ida_hexrays.EQ_IGNCODE (variable) -ida_hexrays.EQ_IGNSIZE (variable) -ida_hexrays.EQ_OPTINSN (variable) -ida_hexrays.EXFL_ALL (variable) -ida_hexrays.EXFL_ALONE (variable) -ida_hexrays.EXFL_CPADONE (variable) -ida_hexrays.EXFL_CSTR (variable) -ida_hexrays.EXFL_FPOP (variable) -ida_hexrays.EXFL_JUMPOUT (variable) -ida_hexrays.EXFL_LVALUE (variable) -ida_hexrays.EXFL_PARTIAL (variable) -ida_hexrays.EXFL_UNDEF (variable) -ida_hexrays.EXFL_VFTABLE (variable) -ida_hexrays.FCI_DEAD (variable) -ida_hexrays.FCI_EXPLOCS (variable) -ida_hexrays.FCI_FINAL (variable) -ida_hexrays.FCI_HASCALL (variable) -ida_hexrays.FCI_HASFMT (variable) -ida_hexrays.FCI_NORET (variable) -ida_hexrays.FCI_NOSIDE (variable) -ida_hexrays.FCI_PROP (variable) -ida_hexrays.FCI_PURE (variable) -ida_hexrays.FCI_SPLOK (variable) -ida_hexrays.FD_BACKWARD (variable) -ida_hexrays.FD_DEF (variable) -ida_hexrays.FD_DIRTY (variable) -ida_hexrays.FD_FORWARD (variable) -ida_hexrays.FD_USE (variable) -ida_hexrays.FORBID_UNUSED_LABELS (variable) -ida_hexrays.GCA_ALLOC (variable) -ida_hexrays.GCA_EMPTY (variable) -ida_hexrays.GCA_NALLOC (variable) -ida_hexrays.GCA_OFIRST (variable) -ida_hexrays.GCA_OLAST (variable) -ida_hexrays.GCA_SPEC (variable) -ida_hexrays.GCO_DEF (variable) -ida_hexrays.GCO_REG (variable) -ida_hexrays.GCO_STK (variable) -ida_hexrays.GCO_USE (variable) -ida_hexrays.GC_ASR (variable) -ida_hexrays.GC_DIRTY_ALL (variable) -ida_hexrays.GC_END (variable) -ida_hexrays.GC_REGS_AND_STKVARS (variable) -ida_hexrays.GC_XDSU (variable) -ida_hexrays.GLN_ALL (variable) -ida_hexrays.GLN_CURRENT (variable) -ida_hexrays.GLN_GOTO_TARGET (variable) -ida_hexrays.Hexrays_Hooks (class) -ida_hexrays.Hexrays_Hooks.__disown__ (method) -ida_hexrays.Hexrays_Hooks.__init__ (method) -ida_hexrays.Hexrays_Hooks.build_callinfo (method) -ida_hexrays.Hexrays_Hooks.callinfo_built (method) -ida_hexrays.Hexrays_Hooks.calls_done (method) -ida_hexrays.Hexrays_Hooks.close_pseudocode (method) -ida_hexrays.Hexrays_Hooks.cmt_changed (method) -ida_hexrays.Hexrays_Hooks.combine (method) -ida_hexrays.Hexrays_Hooks.create_hint (method) -ida_hexrays.Hexrays_Hooks.curpos (method) -ida_hexrays.Hexrays_Hooks.double_click (method) -ida_hexrays.Hexrays_Hooks.flowchart (method) -ida_hexrays.Hexrays_Hooks.func_printed (method) -ida_hexrays.Hexrays_Hooks.glbopt (method) -ida_hexrays.Hexrays_Hooks.hook (method) -ida_hexrays.Hexrays_Hooks.interr (method) -ida_hexrays.Hexrays_Hooks.keyboard (method) -ida_hexrays.Hexrays_Hooks.locopt (method) -ida_hexrays.Hexrays_Hooks.lvar_cmt_changed (method) -ida_hexrays.Hexrays_Hooks.lvar_mapping_changed (method) -ida_hexrays.Hexrays_Hooks.lvar_name_changed (method) -ida_hexrays.Hexrays_Hooks.lvar_type_changed (method) -ida_hexrays.Hexrays_Hooks.maturity (method) -ida_hexrays.Hexrays_Hooks.microcode (method) -ida_hexrays.Hexrays_Hooks.open_pseudocode (method) -ida_hexrays.Hexrays_Hooks.populating_popup (method) -ida_hexrays.Hexrays_Hooks.prealloc (method) -ida_hexrays.Hexrays_Hooks.preoptimized (method) -ida_hexrays.Hexrays_Hooks.print_func (method) -ida_hexrays.Hexrays_Hooks.prolog (method) -ida_hexrays.Hexrays_Hooks.refresh_pseudocode (method) -ida_hexrays.Hexrays_Hooks.resolve_stkaddrs (method) -ida_hexrays.Hexrays_Hooks.right_click (method) -ida_hexrays.Hexrays_Hooks.stkpnts (method) -ida_hexrays.Hexrays_Hooks.structural (method) -ida_hexrays.Hexrays_Hooks.switch_pseudocode (method) -ida_hexrays.Hexrays_Hooks.text_ready (method) -ida_hexrays.Hexrays_Hooks.unhook (method) -ida_hexrays.IPROP_CLNPOP (variable) -ida_hexrays.IPROP_COMBINED (variable) -ida_hexrays.IPROP_DONT_COMB (variable) -ida_hexrays.IPROP_DONT_PROP (variable) -ida_hexrays.IPROP_EXTSTX (variable) -ida_hexrays.IPROP_FARCALL (variable) -ida_hexrays.IPROP_FPINSN (variable) -ida_hexrays.IPROP_IGNLOWSRC (variable) -ida_hexrays.IPROP_INV_JX (variable) -ida_hexrays.IPROP_MBARRIER (variable) -ida_hexrays.IPROP_MULTI_MOV (variable) -ida_hexrays.IPROP_OPTIONAL (variable) -ida_hexrays.IPROP_PERSIST (variable) -ida_hexrays.IPROP_SPLIT (variable) -ida_hexrays.IPROP_SPLIT1 (variable) -ida_hexrays.IPROP_SPLIT2 (variable) -ida_hexrays.IPROP_SPLIT4 (variable) -ida_hexrays.IPROP_SPLIT8 (variable) -ida_hexrays.IPROP_TAILCALL (variable) -ida_hexrays.IPROP_UNMERGED (variable) -ida_hexrays.IPROP_WAS_NORET (variable) -ida_hexrays.IPROP_WILDMATCH (variable) -ida_hexrays.ITP_ARG1 (variable) -ida_hexrays.ITP_ASM (variable) -ida_hexrays.ITP_BLOCK1 (variable) -ida_hexrays.ITP_BLOCK2 (variable) -ida_hexrays.ITP_BRACE2 (variable) -ida_hexrays.ITP_CASE (variable) -ida_hexrays.ITP_COLON (variable) -ida_hexrays.ITP_CURLY1 (variable) -ida_hexrays.ITP_CURLY2 (variable) -ida_hexrays.ITP_DO (variable) -ida_hexrays.ITP_ELSE (variable) -ida_hexrays.ITP_EMPTY (variable) -ida_hexrays.ITP_SEMI (variable) -ida_hexrays.ITP_SIGN (variable) -ida_hexrays.LOCOPT_ALL (variable) -ida_hexrays.LOCOPT_REFINE (variable) -ida_hexrays.LOCOPT_REFINE2 (variable) -ida_hexrays.LVINF_KEEP (variable) -ida_hexrays.LVINF_NOMAP (variable) -ida_hexrays.LVINF_NOPTR (variable) -ida_hexrays.LVINF_SPLIT (variable) -ida_hexrays.LVINF_UNUSED (variable) -ida_hexrays.MBA2_ARGIDX_OK (variable) -ida_hexrays.MBA2_ARGIDX_SORTED (variable) -ida_hexrays.MBA2_CODE16_BIT (variable) -ida_hexrays.MBA2_DONT_VERIFY (variable) -ida_hexrays.MBA2_HAS_OUTLINES (variable) -ida_hexrays.MBA2_IS_CTR (variable) -ida_hexrays.MBA2_IS_DTR (variable) -ida_hexrays.MBA2_LVARNAMES_OK (variable) -ida_hexrays.MBA2_LVARS_RENAMED (variable) -ida_hexrays.MBA2_NO_DUP_CALLS (variable) -ida_hexrays.MBA2_NO_DUP_LVARS (variable) -ida_hexrays.MBA2_NO_FRAME (variable) -ida_hexrays.MBA2_OVER_CHAINS (variable) -ida_hexrays.MBA2_PROP_COMPLEX (variable) -ida_hexrays.MBA2_STACK_RETVAL (variable) -ida_hexrays.MBA2_UNDEF_RETVAR (variable) -ida_hexrays.MBA2_VALRNG_DONE (variable) -ida_hexrays.MBA_ASRPROP (variable) -ida_hexrays.MBA_ASRTOK (variable) -ida_hexrays.MBA_CALLS (variable) -ida_hexrays.MBA_CHVARS (variable) -ida_hexrays.MBA_CMBBLK (variable) -ida_hexrays.MBA_CMNSTK (variable) -ida_hexrays.MBA_COLGDL (variable) -ida_hexrays.MBA_DELPAIRS (variable) -ida_hexrays.MBA_GLBOPT (variable) -ida_hexrays.MBA_INSGDL (variable) -ida_hexrays.MBA_LOADED (variable) -ida_hexrays.MBA_LVARS0 (variable) -ida_hexrays.MBA_LVARS1 (variable) -ida_hexrays.MBA_NICE (variable) -ida_hexrays.MBA_NOFUNC (variable) -ida_hexrays.MBA_NUMADDR (variable) -ida_hexrays.MBA_PASSREGS (variable) -ida_hexrays.MBA_PATTERN (variable) -ida_hexrays.MBA_PRCDEFS (variable) -ida_hexrays.MBA_PREOPT (variable) -ida_hexrays.MBA_REFINE (variable) -ida_hexrays.MBA_RETFP (variable) -ida_hexrays.MBA_RETREF (variable) -ida_hexrays.MBA_SAVRST (variable) -ida_hexrays.MBA_SHORT (variable) -ida_hexrays.MBA_SPLINFO (variable) -ida_hexrays.MBA_THUNK (variable) -ida_hexrays.MBA_VALNUM (variable) -ida_hexrays.MBA_WINGR32 (variable) -ida_hexrays.MBL_BACKPROP (variable) -ida_hexrays.MBL_CALL (variable) -ida_hexrays.MBL_COMB (variable) -ida_hexrays.MBL_DEAD (variable) -ida_hexrays.MBL_DMT64 (variable) -ida_hexrays.MBL_DSLOT (variable) -ida_hexrays.MBL_FAKE (variable) -ida_hexrays.MBL_GOTO (variable) -ida_hexrays.MBL_INCONST (variable) -ida_hexrays.MBL_KEEP (variable) -ida_hexrays.MBL_LIST (variable) -ida_hexrays.MBL_NONFAKE (variable) -ida_hexrays.MBL_NORET (variable) -ida_hexrays.MBL_PRIV (variable) -ida_hexrays.MBL_PROP (variable) -ida_hexrays.MBL_PUSH (variable) -ida_hexrays.MBL_TCAL (variable) -ida_hexrays.MBL_VALRANGES (variable) -ida_hexrays.MERR_BADARCH (variable) -ida_hexrays.MERR_BADBLK (variable) -ida_hexrays.MERR_BADCALL (variable) -ida_hexrays.MERR_BADFRAME (variable) -ida_hexrays.MERR_BADIDB (variable) -ida_hexrays.MERR_BADRANGES (variable) -ida_hexrays.MERR_BADSP (variable) -ida_hexrays.MERR_BITNESS (variable) -ida_hexrays.MERR_BLOCK (variable) -ida_hexrays.MERR_BUSY (variable) -ida_hexrays.MERR_CANCELED (variable) -ida_hexrays.MERR_COMPLEX (variable) -ida_hexrays.MERR_DSLOT (variable) -ida_hexrays.MERR_EXCEPTION (variable) -ida_hexrays.MERR_EXTERN (variable) -ida_hexrays.MERR_FARPTR (variable) -ida_hexrays.MERR_FUNCSIZE (variable) -ida_hexrays.MERR_HUGESTACK (variable) -ida_hexrays.MERR_INSN (variable) -ida_hexrays.MERR_INTERR (variable) -ida_hexrays.MERR_LICENSE (variable) -ida_hexrays.MERR_LOOP (variable) -ida_hexrays.MERR_LVARS (variable) -ida_hexrays.MERR_MEM (variable) -ida_hexrays.MERR_OK (variable) -ida_hexrays.MERR_ONLY32 (variable) -ida_hexrays.MERR_ONLY64 (variable) -ida_hexrays.MERR_OVERLAP (variable) -ida_hexrays.MERR_PARTINIT (variable) -ida_hexrays.MERR_PROLOG (variable) -ida_hexrays.MERR_RECDEPTH (variable) -ida_hexrays.MERR_REDO (variable) -ida_hexrays.MERR_SIZEOF (variable) -ida_hexrays.MERR_STOP (variable) -ida_hexrays.MERR_SWITCH (variable) -ida_hexrays.MERR_UNKTYPE (variable) -ida_hexrays.MLI_CLR_FLAGS (variable) -ida_hexrays.MLI_CMT (variable) -ida_hexrays.MLI_NAME (variable) -ida_hexrays.MLI_SET_FLAGS (variable) -ida_hexrays.MLI_TYPE (variable) -ida_hexrays.MMAT_CALLS (variable) -ida_hexrays.MMAT_GENERATED (variable) -ida_hexrays.MMAT_GLBOPT1 (variable) -ida_hexrays.MMAT_GLBOPT2 (variable) -ida_hexrays.MMAT_GLBOPT3 (variable) -ida_hexrays.MMAT_LOCOPT (variable) -ida_hexrays.MMAT_LVARS (variable) -ida_hexrays.MMAT_PREOPTIMIZED (variable) -ida_hexrays.MMAT_ZERO (variable) -ida_hexrays.MMIDX_GLBHIGH (variable) -ida_hexrays.MMIDX_GLBLOW (variable) -ida_hexrays.NALT_VD (variable) -ida_hexrays.NF_BINVDONE (variable) -ida_hexrays.NF_BITNOT (variable) -ida_hexrays.NF_FIXED (variable) -ida_hexrays.NF_NEGATE (variable) -ida_hexrays.NF_NEGDONE (variable) -ida_hexrays.NF_VALID (variable) -ida_hexrays.NOSIZE (variable) -ida_hexrays.NO_CURLY_BRACES (variable) -ida_hexrays.NO_SIDEFF (variable) -ida_hexrays.ONLY_SIDEFF (variable) -ida_hexrays.OPF_NEW_WINDOW (variable) -ida_hexrays.OPF_NO_WAIT (variable) -ida_hexrays.OPF_REUSE (variable) -ida_hexrays.OPF_REUSE_ACTIVE (variable) -ida_hexrays.OPROP_FLOAT (variable) -ida_hexrays.OPROP_IMPDONE (variable) -ida_hexrays.OPROP_LOWADDR (variable) -ida_hexrays.OPROP_UDEFVAL (variable) -ida_hexrays.OPROP_UDT (variable) -ida_hexrays.OPTI_ADDREXPRS (variable) -ida_hexrays.OPTI_COMBINSNS (variable) -ida_hexrays.OPTI_MINSTKREF (variable) -ida_hexrays.OPTI_NO_LDXOPT (variable) -ida_hexrays.RETRIEVE_ALWAYS (variable) -ida_hexrays.RETRIEVE_ONCE (variable) -ida_hexrays.ROLE_3WAYCMP0 (variable) -ida_hexrays.ROLE_3WAYCMP1 (variable) -ida_hexrays.ROLE_ABS (variable) -ida_hexrays.ROLE_ALLOCA (variable) -ida_hexrays.ROLE_BITTEST (variable) -ida_hexrays.ROLE_BITTESTANDCOMPLEMENT (variable) -ida_hexrays.ROLE_BITTESTANDRESET (variable) -ida_hexrays.ROLE_BITTESTANDSET (variable) -ida_hexrays.ROLE_BSWAP (variable) -ida_hexrays.ROLE_BUG (variable) -ida_hexrays.ROLE_CFSUB3 (variable) -ida_hexrays.ROLE_CONTAINING_RECORD (variable) -ida_hexrays.ROLE_EMPTY (variable) -ida_hexrays.ROLE_FASTFAIL (variable) -ida_hexrays.ROLE_IS_MUL_OK (variable) -ida_hexrays.ROLE_MEMCPY (variable) -ida_hexrays.ROLE_MEMSET (variable) -ida_hexrays.ROLE_MEMSET32 (variable) -ida_hexrays.ROLE_MEMSET64 (variable) -ida_hexrays.ROLE_OFSUB3 (variable) -ida_hexrays.ROLE_PRESENT (variable) -ida_hexrays.ROLE_READFLAGS (variable) -ida_hexrays.ROLE_ROL (variable) -ida_hexrays.ROLE_ROR (variable) -ida_hexrays.ROLE_SATURATED_MUL (variable) -ida_hexrays.ROLE_SSE_CMP4 (variable) -ida_hexrays.ROLE_SSE_CMP8 (variable) -ida_hexrays.ROLE_STRCAT (variable) -ida_hexrays.ROLE_STRCPY (variable) -ida_hexrays.ROLE_STRLEN (variable) -ida_hexrays.ROLE_TAIL (variable) -ida_hexrays.ROLE_UNK (variable) -ida_hexrays.ROLE_VA_ARG (variable) -ida_hexrays.ROLE_VA_COPY (variable) -ida_hexrays.ROLE_VA_END (variable) -ida_hexrays.ROLE_VA_START (variable) -ida_hexrays.ROLE_WCSCAT (variable) -ida_hexrays.ROLE_WCSCPY (variable) -ida_hexrays.ROLE_WCSLEN (variable) -ida_hexrays.ROLE_WMEMCPY (variable) -ida_hexrays.ROLE_WMEMSET (variable) -ida_hexrays.SHINS_LDXEA (variable) -ida_hexrays.SHINS_NUMADDR (variable) -ida_hexrays.SHINS_SHORT (variable) -ida_hexrays.SHINS_VALNUM (variable) -ida_hexrays.ULV_PRECISE_DEFEA (variable) -ida_hexrays.USE_CURLY_BRACES (variable) -ida_hexrays.USE_KEYBOARD (variable) -ida_hexrays.USE_MOUSE (variable) -ida_hexrays.VDI_EXPR (variable) -ida_hexrays.VDI_FUNC (variable) -ida_hexrays.VDI_LVAR (variable) -ida_hexrays.VDI_NONE (variable) -ida_hexrays.VDI_TAIL (variable) -ida_hexrays.VDRUN_APPEND (variable) -ida_hexrays.VDRUN_CMDLINE (variable) -ida_hexrays.VDRUN_LUMINA (variable) -ida_hexrays.VDRUN_MAYSTOP (variable) -ida_hexrays.VDRUN_NEWFILE (variable) -ida_hexrays.VDRUN_ONLYNEW (variable) -ida_hexrays.VDRUN_SENDIDB (variable) -ida_hexrays.VDRUN_SILENT (variable) -ida_hexrays.VDRUN_STATS (variable) -ida_hexrays.VDUI_VALID (variable) -ida_hexrays.VDUI_VISIBLE (variable) -ida_hexrays.VR_AT_END (variable) -ida_hexrays.VR_AT_START (variable) -ida_hexrays.VR_EXACT (variable) -ida_hexrays.WARN_ADDR_OUTARGS (variable) -ida_hexrays.WARN_ARRAY_INARG (variable) -ida_hexrays.WARN_BAD_CALL_SP (variable) -ida_hexrays.WARN_BAD_FIELD_TYPE (variable) -ida_hexrays.WARN_BAD_INSN (variable) -ida_hexrays.WARN_BAD_MAPDST (variable) -ida_hexrays.WARN_BAD_PURGED (variable) -ida_hexrays.WARN_BAD_RETVAR (variable) -ida_hexrays.WARN_BAD_SHADOW (variable) -ida_hexrays.WARN_BAD_SP (variable) -ida_hexrays.WARN_BAD_STD_TYPE (variable) -ida_hexrays.WARN_BAD_STKPNT (variable) -ida_hexrays.WARN_BAD_STROFF (variable) -ida_hexrays.WARN_BAD_VALRNG (variable) -ida_hexrays.WARN_BAD_VARSIZE (variable) -ida_hexrays.WARN_CBUILD_LOOPS (variable) -ida_hexrays.WARN_CR_BADOFF (variable) -ida_hexrays.WARN_CR_NOFIELD (variable) -ida_hexrays.WARN_DEP_UNK_CALLS (variable) -ida_hexrays.WARN_EXP_LINVAR (variable) -ida_hexrays.WARN_FIXED_MACRO (variable) -ida_hexrays.WARN_FRAG_LVAR (variable) -ida_hexrays.WARN_GUESSED_TYPE (variable) -ida_hexrays.WARN_HUGE_STKOFF (variable) -ida_hexrays.WARN_ILL_ELLIPSIS (variable) -ida_hexrays.WARN_ILL_FPU_STACK (variable) -ida_hexrays.WARN_ILL_FUNCTYPE (variable) -ida_hexrays.WARN_ILL_PURGED (variable) -ida_hexrays.WARN_JUMPOUT (variable) -ida_hexrays.WARN_MAX (variable) -ida_hexrays.WARN_MAX_ARGS (variable) -ida_hexrays.WARN_MISSED_SWITCH (variable) -ida_hexrays.WARN_MUST_RET_FP (variable) -ida_hexrays.WARN_NO_SAVE_REST (variable) -ida_hexrays.WARN_ODD_ABI (variable) -ida_hexrays.WARN_ODD_ADDR_USE (variable) -ida_hexrays.WARN_ODD_INPUT_REG (variable) -ida_hexrays.WARN_OPT_USELESS_JCND (variable) -ida_hexrays.WARN_OPT_VALRNG (variable) -ida_hexrays.WARN_OPT_VALRNG2 (variable) -ida_hexrays.WARN_OPT_VALRNG3 (variable) -ida_hexrays.WARN_RET_LOCREF (variable) -ida_hexrays.WARN_SELFREF_PROP (variable) -ida_hexrays.WARN_UNALIGNED_ARG (variable) -ida_hexrays.WARN_UNBALANCED_STACK (variable) -ida_hexrays.WARN_UNDEF_LVAR (variable) -ida_hexrays.WARN_UNINITED_REG (variable) -ida_hexrays.WARN_UNSUPP_REG (variable) -ida_hexrays.WARN_VARARG_MANY (variable) -ida_hexrays.WARN_VARARG_NOSTK (variable) -ida_hexrays.WARN_VARARG_REGS (variable) -ida_hexrays.WARN_VARARG_TCAL (variable) -ida_hexrays.WARN_WIDEN_CHAINS (variable) -ida_hexrays.WARN_WOULD_OVERLAP (variable) -ida_hexrays.WARN_WRITE_CONST (variable) -ida_hexrays.WARN_WRONG_VA_OFF (variable) -ida_hexrays.WITH_SIDEFF (variable) -ida_hexrays.__cbhooks_t (class) -ida_hexrays.__cbhooks_t.__init__ (method) -ida_hexrays.__cbhooks_t.close_pseudocode (method) -ida_hexrays.__cbhooks_t.create_hint (method) -ida_hexrays.__cbhooks_t.curpos (method) -ida_hexrays.__cbhooks_t.double_click (method) -ida_hexrays.__cbhooks_t.func_printed (method) -ida_hexrays.__cbhooks_t.interr (method) -ida_hexrays.__cbhooks_t.keyboard (method) -ida_hexrays.__cbhooks_t.maturity (method) -ida_hexrays.__cbhooks_t.open_pseudocode (method) -ida_hexrays.__cbhooks_t.populating_popup (method) -ida_hexrays.__cbhooks_t.print_func (method) -ida_hexrays.__cbhooks_t.refresh_pseudocode (method) -ida_hexrays.__cbhooks_t.right_click (method) -ida_hexrays.__cbhooks_t.switch_pseudocode (method) -ida_hexrays.__cbhooks_t.text_ready (method) -ida_hexrays._call_with_transferrable_ownership (function) -ida_hexrays._kludge_force_declare_TPopupMenu (function) -ida_hexrays._ll_call_helper (function) -ida_hexrays._ll_create_helper (function) -ida_hexrays._ll_dereference (function) -ida_hexrays._ll_lnot (function) -ida_hexrays._ll_make_num (function) -ida_hexrays._ll_make_ref (function) -ida_hexrays._ll_new_block (function) -ida_hexrays._map_as_dict (function) -ida_hexrays._map_as_dict._map___contains__ (function) -ida_hexrays._map_as_dict._map___delitem__ (function) -ida_hexrays._map_as_dict._map___getitem__ (function) -ida_hexrays._map_as_dict._map___iter__ (function) -ida_hexrays._map_as_dict._map___setitem__ (function) -ida_hexrays._map_as_dict._map_clear (function) -ida_hexrays._map_as_dict._map_copy (function) -ida_hexrays._map_as_dict._map_get (function) -ida_hexrays._map_as_dict._map_has_key (function) -ida_hexrays._map_as_dict._map_items (function) -ida_hexrays._map_as_dict._map_iteritems (function) -ida_hexrays._map_as_dict._map_iterkeys (function) -ida_hexrays._map_as_dict._map_itervalues (function) -ida_hexrays._map_as_dict._map_keys (function) -ida_hexrays._map_as_dict._map_pop (function) -ida_hexrays._map_as_dict._map_popitem (function) -ida_hexrays._map_as_dict._map_setdefault (function) -ida_hexrays._map_as_dict._map_values (function) -ida_hexrays.accepts_small_udts (function) -ida_hexrays.accepts_udts (function) -ida_hexrays.arglocs_overlap (function) -ida_hexrays.array_of_bitsets (class) -ida_hexrays.array_of_bitsets.__eq__ (method) -ida_hexrays.array_of_bitsets.__getitem__ (method) -ida_hexrays.array_of_bitsets.__init__ (method) -ida_hexrays.array_of_bitsets.__len__ (method) -ida_hexrays.array_of_bitsets.__ne__ (method) -ida_hexrays.array_of_bitsets.__setitem__ (method) -ida_hexrays.array_of_bitsets._del (method) -ida_hexrays.array_of_bitsets.add_unique (method) -ida_hexrays.array_of_bitsets.at (method) -ida_hexrays.array_of_bitsets.begin (method) -ida_hexrays.array_of_bitsets.capacity (method) -ida_hexrays.array_of_bitsets.clear (method) -ida_hexrays.array_of_bitsets.empty (method) -ida_hexrays.array_of_bitsets.end (method) -ida_hexrays.array_of_bitsets.erase (method) -ida_hexrays.array_of_bitsets.extract (method) -ida_hexrays.array_of_bitsets.find (method) -ida_hexrays.array_of_bitsets.grow (method) -ida_hexrays.array_of_bitsets.has (method) -ida_hexrays.array_of_bitsets.inject (method) -ida_hexrays.array_of_bitsets.insert (method) -ida_hexrays.array_of_bitsets.pop_back (method) -ida_hexrays.array_of_bitsets.push_back (method) -ida_hexrays.array_of_bitsets.qclear (method) -ida_hexrays.array_of_bitsets.reserve (method) -ida_hexrays.array_of_bitsets.resize (method) -ida_hexrays.array_of_bitsets.size (method) -ida_hexrays.array_of_bitsets.swap (method) -ida_hexrays.array_of_bitsets.truncate (method) -ida_hexrays.array_of_ivlsets (class) -ida_hexrays.array_of_ivlsets.__eq__ (method) -ida_hexrays.array_of_ivlsets.__getitem__ (method) -ida_hexrays.array_of_ivlsets.__init__ (method) -ida_hexrays.array_of_ivlsets.__len__ (method) -ida_hexrays.array_of_ivlsets.__ne__ (method) -ida_hexrays.array_of_ivlsets.__setitem__ (method) -ida_hexrays.array_of_ivlsets._del (method) -ida_hexrays.array_of_ivlsets.add_unique (method) -ida_hexrays.array_of_ivlsets.at (method) -ida_hexrays.array_of_ivlsets.begin (method) -ida_hexrays.array_of_ivlsets.capacity (method) -ida_hexrays.array_of_ivlsets.clear (method) -ida_hexrays.array_of_ivlsets.empty (method) -ida_hexrays.array_of_ivlsets.end (method) -ida_hexrays.array_of_ivlsets.erase (method) -ida_hexrays.array_of_ivlsets.extract (method) -ida_hexrays.array_of_ivlsets.find (method) -ida_hexrays.array_of_ivlsets.grow (method) -ida_hexrays.array_of_ivlsets.has (method) -ida_hexrays.array_of_ivlsets.inject (method) -ida_hexrays.array_of_ivlsets.insert (method) -ida_hexrays.array_of_ivlsets.pop_back (method) -ida_hexrays.array_of_ivlsets.push_back (method) -ida_hexrays.array_of_ivlsets.qclear (method) -ida_hexrays.array_of_ivlsets.reserve (method) -ida_hexrays.array_of_ivlsets.resize (method) -ida_hexrays.array_of_ivlsets.size (method) -ida_hexrays.array_of_ivlsets.swap (method) -ida_hexrays.array_of_ivlsets.truncate (method) -ida_hexrays.asgop (function) -ida_hexrays.asgop_revert (function) -ida_hexrays.bit_bound_t (class) -ida_hexrays.bit_bound_t.__init__ (method) -ida_hexrays.bitset_t (class) -ida_hexrays.bitset_t.__eq__ (method) -ida_hexrays.bitset_t.__ge__ (method) -ida_hexrays.bitset_t.__gt__ (method) -ida_hexrays.bitset_t.__init__ (method) -ida_hexrays.bitset_t.__iter__ (method) -ida_hexrays.bitset_t.__le__ (method) -ida_hexrays.bitset_t.__lt__ (method) -ida_hexrays.bitset_t.__ne__ (method) -ida_hexrays.bitset_t.add (method) -ida_hexrays.bitset_t.back (method) -ida_hexrays.bitset_t.begin (method) -ida_hexrays.bitset_t.clear (method) -ida_hexrays.bitset_t.compare (method) -ida_hexrays.bitset_t.copy (method) -ida_hexrays.bitset_t.count (method) -ida_hexrays.bitset_t.cut_at (method) -ida_hexrays.bitset_t.dstr (method) -ida_hexrays.bitset_t.empty (method) -ida_hexrays.bitset_t.end (method) -ida_hexrays.bitset_t.fill_with_ones (method) -ida_hexrays.bitset_t.front (method) -ida_hexrays.bitset_t.has (method) -ida_hexrays.bitset_t.has_all (method) -ida_hexrays.bitset_t.has_any (method) -ida_hexrays.bitset_t.has_common (method) -ida_hexrays.bitset_t.inc (method) -ida_hexrays.bitset_t.includes (method) -ida_hexrays.bitset_t.intersect (method) -ida_hexrays.bitset_t.is_subset_of (method) -ida_hexrays.bitset_t.itat (method) -ida_hexrays.bitset_t.itv (method) -ida_hexrays.bitset_t.last (method) -ida_hexrays.bitset_t.shift_down (method) -ida_hexrays.bitset_t.sub (method) -ida_hexrays.bitset_t.swap (method) -ida_hexrays.block_chains_begin (function) -ida_hexrays.block_chains_clear (function) -ida_hexrays.block_chains_end (function) -ida_hexrays.block_chains_erase (function) -ida_hexrays.block_chains_find (function) -ida_hexrays.block_chains_free (function) -ida_hexrays.block_chains_get (function) -ida_hexrays.block_chains_insert (function) -ida_hexrays.block_chains_iterator_t (class) -ida_hexrays.block_chains_iterator_t.__eq__ (method) -ida_hexrays.block_chains_iterator_t.__init__ (method) -ida_hexrays.block_chains_iterator_t.__ne__ (method) -ida_hexrays.block_chains_new (function) -ida_hexrays.block_chains_next (function) -ida_hexrays.block_chains_prev (function) -ida_hexrays.block_chains_size (function) -ida_hexrays.block_chains_t (class) -ida_hexrays.block_chains_t.__init__ (method) -ida_hexrays.block_chains_t._print (method) -ida_hexrays.block_chains_t.dstr (method) -ida_hexrays.block_chains_t.get_chain (method) -ida_hexrays.block_chains_t.get_reg_chain (method) -ida_hexrays.block_chains_t.get_stk_chain (method) -ida_hexrays.block_chains_vec_t (class) -ida_hexrays.block_chains_vec_t.__getitem__ (method) -ida_hexrays.block_chains_vec_t.__init__ (method) -ida_hexrays.block_chains_vec_t.__len__ (method) -ida_hexrays.block_chains_vec_t.__setitem__ (method) -ida_hexrays.block_chains_vec_t.at (method) -ida_hexrays.block_chains_vec_t.begin (method) -ida_hexrays.block_chains_vec_t.capacity (method) -ida_hexrays.block_chains_vec_t.clear (method) -ida_hexrays.block_chains_vec_t.empty (method) -ida_hexrays.block_chains_vec_t.end (method) -ida_hexrays.block_chains_vec_t.erase (method) -ida_hexrays.block_chains_vec_t.extract (method) -ida_hexrays.block_chains_vec_t.grow (method) -ida_hexrays.block_chains_vec_t.inject (method) -ida_hexrays.block_chains_vec_t.insert (method) -ida_hexrays.block_chains_vec_t.pop_back (method) -ida_hexrays.block_chains_vec_t.push_back (method) -ida_hexrays.block_chains_vec_t.qclear (method) -ida_hexrays.block_chains_vec_t.reserve (method) -ida_hexrays.block_chains_vec_t.resize (method) -ida_hexrays.block_chains_vec_t.size (method) -ida_hexrays.block_chains_vec_t.swap (method) -ida_hexrays.block_chains_vec_t.truncate (method) -ida_hexrays.boundaries_begin (function) -ida_hexrays.boundaries_clear (function) -ida_hexrays.boundaries_end (function) -ida_hexrays.boundaries_erase (function) -ida_hexrays.boundaries_find (function) -ida_hexrays.boundaries_first (function) -ida_hexrays.boundaries_free (function) -ida_hexrays.boundaries_insert (function) -ida_hexrays.boundaries_iterator_t (class) -ida_hexrays.boundaries_iterator_t.__eq__ (method) -ida_hexrays.boundaries_iterator_t.__init__ (method) -ida_hexrays.boundaries_iterator_t.__ne__ (method) -ida_hexrays.boundaries_new (function) -ida_hexrays.boundaries_next (function) -ida_hexrays.boundaries_prev (function) -ida_hexrays.boundaries_second (function) -ida_hexrays.boundaries_size (function) -ida_hexrays.boundaries_t (class) -ida_hexrays.boundaries_t.__init__ (method) -ida_hexrays.boundaries_t.at (method) -ida_hexrays.boundaries_t.size (method) -ida_hexrays.call_helper (function) -ida_hexrays.carg_t (class) -ida_hexrays.carg_t.__eq__ (method) -ida_hexrays.carg_t.__ge__ (method) -ida_hexrays.carg_t.__gt__ (method) -ida_hexrays.carg_t.__init__ (method) -ida_hexrays.carg_t.__le__ (method) -ida_hexrays.carg_t.__lt__ (method) -ida_hexrays.carg_t.__ne__ (method) -ida_hexrays.carg_t.compare (method) -ida_hexrays.carg_t.consume_cexpr (method) -ida_hexrays.carg_t.formal_type (variable) -ida_hexrays.carg_t.is_vararg (variable) -ida_hexrays.carglist_t (class) -ida_hexrays.carglist_t.__eq__ (method) -ida_hexrays.carglist_t.__ge__ (method) -ida_hexrays.carglist_t.__gt__ (method) -ida_hexrays.carglist_t.__init__ (method) -ida_hexrays.carglist_t.__le__ (method) -ida_hexrays.carglist_t.__lt__ (method) -ida_hexrays.carglist_t.__ne__ (method) -ida_hexrays.carglist_t.compare (method) -ida_hexrays.carglist_t.flags (variable) -ida_hexrays.carglist_t.functype (variable) -ida_hexrays.casm_t (class) -ida_hexrays.casm_t.__eq__ (method) -ida_hexrays.casm_t.__ge__ (method) -ida_hexrays.casm_t.__gt__ (method) -ida_hexrays.casm_t.__init__ (method) -ida_hexrays.casm_t.__le__ (method) -ida_hexrays.casm_t.__lt__ (method) -ida_hexrays.casm_t.__ne__ (method) -ida_hexrays.casm_t.compare (method) -ida_hexrays.casm_t.one_insn (method) -ida_hexrays.cblock_t (class) -ida_hexrays.cblock_t.__eq__ (method) -ida_hexrays.cblock_t.__ge__ (method) -ida_hexrays.cblock_t.__gt__ (method) -ida_hexrays.cblock_t.__init__ (method) -ida_hexrays.cblock_t.__le__ (method) -ida_hexrays.cblock_t.__lt__ (method) -ida_hexrays.cblock_t.__ne__ (method) -ida_hexrays.cblock_t._deregister (method) -ida_hexrays.cblock_t.compare (method) -ida_hexrays.ccase_t (class) -ida_hexrays.ccase_t.__eq__ (method) -ida_hexrays.ccase_t.__ge__ (method) -ida_hexrays.ccase_t.__gt__ (method) -ida_hexrays.ccase_t.__init__ (method) -ida_hexrays.ccase_t.__le__ (method) -ida_hexrays.ccase_t.__lt__ (method) -ida_hexrays.ccase_t.__ne__ (method) -ida_hexrays.ccase_t.compare (method) -ida_hexrays.ccase_t.size (method) -ida_hexrays.ccase_t.value (method) -ida_hexrays.ccase_t.values (variable) -ida_hexrays.ccases_t (class) -ida_hexrays.ccases_t.__eq__ (method) -ida_hexrays.ccases_t.__ge__ (method) -ida_hexrays.ccases_t.__gt__ (method) -ida_hexrays.ccases_t.__init__ (method) -ida_hexrays.ccases_t.__le__ (method) -ida_hexrays.ccases_t.__lt__ (method) -ida_hexrays.ccases_t.__ne__ (method) -ida_hexrays.ccases_t.compare (method) -ida_hexrays.cdg_insn_iterator_t (class) -ida_hexrays.cdg_insn_iterator_t.__init__ (method) -ida_hexrays.cdg_insn_iterator_t.dslot_with_xrefs (method) -ida_hexrays.cdg_insn_iterator_t.has_dslot (method) -ida_hexrays.cdg_insn_iterator_t.is_severed_dslot (method) -ida_hexrays.cdg_insn_iterator_t.next (method) -ida_hexrays.cdg_insn_iterator_t.ok (method) -ida_hexrays.cdg_insn_iterator_t.start (method) -ida_hexrays.cdo_t (class) -ida_hexrays.cdo_t.__eq__ (method) -ida_hexrays.cdo_t.__ge__ (method) -ida_hexrays.cdo_t.__gt__ (method) -ida_hexrays.cdo_t.__init__ (method) -ida_hexrays.cdo_t.__le__ (method) -ida_hexrays.cdo_t.__lt__ (method) -ida_hexrays.cdo_t.__ne__ (method) -ida_hexrays.cdo_t.compare (method) -ida_hexrays.ceinsn_t (class) -ida_hexrays.ceinsn_t.__init__ (method) -ida_hexrays.ceinsn_t.expr (variable) -ida_hexrays.cexpr_operands (function) -ida_hexrays.cexpr_t (class) -ida_hexrays.cexpr_t.__eq__ (method) -ida_hexrays.cexpr_t.__ge__ (method) -ida_hexrays.cexpr_t.__gt__ (method) -ida_hexrays.cexpr_t.__init__ (method) -ida_hexrays.cexpr_t.__le__ (method) -ida_hexrays.cexpr_t.__lt__ (method) -ida_hexrays.cexpr_t.__ne__ (method) -ida_hexrays.cexpr_t._deregister (method) -ida_hexrays.cexpr_t._get_a (method) -ida_hexrays.cexpr_t._get_fpc (method) -ida_hexrays.cexpr_t._get_helper (method) -ida_hexrays.cexpr_t._get_insn (method) -ida_hexrays.cexpr_t._get_m (method) -ida_hexrays.cexpr_t._get_n (method) -ida_hexrays.cexpr_t._get_obj_ea (method) -ida_hexrays.cexpr_t._get_ptrsize (method) -ida_hexrays.cexpr_t._get_refwidth (method) -ida_hexrays.cexpr_t._get_string (method) -ida_hexrays.cexpr_t._get_x (method) -ida_hexrays.cexpr_t._get_y (method) -ida_hexrays.cexpr_t._get_z (method) -ida_hexrays.cexpr_t._register (method) -ida_hexrays.cexpr_t._replace_by (method) -ida_hexrays.cexpr_t._set_a (method) -ida_hexrays.cexpr_t._set_fpc (method) -ida_hexrays.cexpr_t._set_helper (method) -ida_hexrays.cexpr_t._set_insn (method) -ida_hexrays.cexpr_t._set_m (method) -ida_hexrays.cexpr_t._set_n (method) -ida_hexrays.cexpr_t._set_obj_ea (method) -ida_hexrays.cexpr_t._set_ptrsize (method) -ida_hexrays.cexpr_t._set_refwidth (method) -ida_hexrays.cexpr_t._set_string (method) -ida_hexrays.cexpr_t._set_x (method) -ida_hexrays.cexpr_t._set_y (method) -ida_hexrays.cexpr_t._set_z (method) -ida_hexrays.cexpr_t.a (variable) -ida_hexrays.cexpr_t.assign (method) -ida_hexrays.cexpr_t.calc_type (method) -ida_hexrays.cexpr_t.cleanup (method) -ida_hexrays.cexpr_t.compare (method) -ida_hexrays.cexpr_t.contains_comma (method) -ida_hexrays.cexpr_t.contains_comma_or_insn_or_label (method) -ida_hexrays.cexpr_t.contains_insn (method) -ida_hexrays.cexpr_t.contains_insn_or_label (method) -ida_hexrays.cexpr_t.contains_operator (method) -ida_hexrays.cexpr_t.cpadone (method) -ida_hexrays.cexpr_t.dstr (method) -ida_hexrays.cexpr_t.equal_effect (method) -ida_hexrays.cexpr_t.exflags (variable) -ida_hexrays.cexpr_t.find_num_op (method) -ida_hexrays.cexpr_t.find_op (method) -ida_hexrays.cexpr_t.fpc (variable) -ida_hexrays.cexpr_t.get_1num_op (method) -ida_hexrays.cexpr_t.get_const_value (method) -ida_hexrays.cexpr_t.get_high_nbit_bound (method) -ida_hexrays.cexpr_t.get_low_nbit_bound (method) -ida_hexrays.cexpr_t.get_ptr_or_array (method) -ida_hexrays.cexpr_t.get_type_sign (method) -ida_hexrays.cexpr_t.get_v (method) -ida_hexrays.cexpr_t.has_side_effects (method) -ida_hexrays.cexpr_t.helper (variable) -ida_hexrays.cexpr_t.insn (variable) -ida_hexrays.cexpr_t.is_call_arg_of (method) -ida_hexrays.cexpr_t.is_call_object_of (method) -ida_hexrays.cexpr_t.is_child_of (method) -ida_hexrays.cexpr_t.is_const_value (method) -ida_hexrays.cexpr_t.is_cstr (method) -ida_hexrays.cexpr_t.is_fpop (method) -ida_hexrays.cexpr_t.is_jumpout (method) -ida_hexrays.cexpr_t.is_negative_const (method) -ida_hexrays.cexpr_t.is_nice_cond (method) -ida_hexrays.cexpr_t.is_nice_expr (method) -ida_hexrays.cexpr_t.is_non_negative_const (method) -ida_hexrays.cexpr_t.is_non_zero_const (method) -ida_hexrays.cexpr_t.is_odd_lvalue (method) -ida_hexrays.cexpr_t.is_type_signed (method) -ida_hexrays.cexpr_t.is_type_unsigned (method) -ida_hexrays.cexpr_t.is_undef_val (method) -ida_hexrays.cexpr_t.is_vftable (method) -ida_hexrays.cexpr_t.is_zero_const (method) -ida_hexrays.cexpr_t.m (variable) -ida_hexrays.cexpr_t.maybe_ptr (method) -ida_hexrays.cexpr_t.n (variable) -ida_hexrays.cexpr_t.numval (method) -ida_hexrays.cexpr_t.obj_ea (variable) -ida_hexrays.cexpr_t.print1 (method) -ida_hexrays.cexpr_t.ptrsize (variable) -ida_hexrays.cexpr_t.put_number (method) -ida_hexrays.cexpr_t.refwidth (variable) -ida_hexrays.cexpr_t.requires_lvalue (method) -ida_hexrays.cexpr_t.set_cpadone (method) -ida_hexrays.cexpr_t.set_v (method) -ida_hexrays.cexpr_t.set_vftable (method) -ida_hexrays.cexpr_t.string (variable) -ida_hexrays.cexpr_t.swap (method) -ida_hexrays.cexpr_t.theother (method) -ida_hexrays.cexpr_t.type (variable) -ida_hexrays.cexpr_t.v (variable) -ida_hexrays.cexpr_t.x (variable) -ida_hexrays.cexpr_t.y (variable) -ida_hexrays.cexpr_t.z (variable) -ida_hexrays.cfor_t (class) -ida_hexrays.cfor_t.__eq__ (method) -ida_hexrays.cfor_t.__ge__ (method) -ida_hexrays.cfor_t.__gt__ (method) -ida_hexrays.cfor_t.__init__ (method) -ida_hexrays.cfor_t.__le__ (method) -ida_hexrays.cfor_t.__lt__ (method) -ida_hexrays.cfor_t.__ne__ (method) -ida_hexrays.cfor_t.compare (method) -ida_hexrays.cfor_t.init (variable) -ida_hexrays.cfor_t.step (variable) -ida_hexrays.cfunc_parentee_t (class) -ida_hexrays.cfunc_parentee_t.__disown__ (method) -ida_hexrays.cfunc_parentee_t.__init__ (method) -ida_hexrays.cfunc_parentee_t.calc_rvalue_type (method) -ida_hexrays.cfunc_parentee_t.func (variable) -ida_hexrays.cfunc_t (class) -ida_hexrays.cfunc_t.__init__ (method) -ida_hexrays.cfunc_t.__str__ (method) -ida_hexrays.cfunc_t.argidx (variable) -ida_hexrays.cfunc_t.body (variable) -ida_hexrays.cfunc_t.build_c_tree (method) -ida_hexrays.cfunc_t.del_orphan_cmts (method) -ida_hexrays.cfunc_t.entry_ea (variable) -ida_hexrays.cfunc_t.find_item_coords (method) -ida_hexrays.cfunc_t.find_label (method) -ida_hexrays.cfunc_t.gather_derefs (method) -ida_hexrays.cfunc_t.get_boundaries (method) -ida_hexrays.cfunc_t.get_eamap (method) -ida_hexrays.cfunc_t.get_func_type (method) -ida_hexrays.cfunc_t.get_line_item (method) -ida_hexrays.cfunc_t.get_lvars (method) -ida_hexrays.cfunc_t.get_pseudocode (method) -ida_hexrays.cfunc_t.get_stkoff_delta (method) -ida_hexrays.cfunc_t.get_user_cmt (method) -ida_hexrays.cfunc_t.get_user_iflags (method) -ida_hexrays.cfunc_t.get_user_union_selection (method) -ida_hexrays.cfunc_t.get_warnings (method) -ida_hexrays.cfunc_t.has_orphan_cmts (method) -ida_hexrays.cfunc_t.hdrlines (variable) -ida_hexrays.cfunc_t.locked (method) -ida_hexrays.cfunc_t.maturity (variable) -ida_hexrays.cfunc_t.mba (variable) -ida_hexrays.cfunc_t.numforms (variable) -ida_hexrays.cfunc_t.print_dcl (method) -ida_hexrays.cfunc_t.print_func (method) -ida_hexrays.cfunc_t.refcnt (variable) -ida_hexrays.cfunc_t.refresh_func_ctext (method) -ida_hexrays.cfunc_t.release (method) -ida_hexrays.cfunc_t.remove_unused_labels (method) -ida_hexrays.cfunc_t.save_user_cmts (method) -ida_hexrays.cfunc_t.save_user_iflags (method) -ida_hexrays.cfunc_t.save_user_labels (method) -ida_hexrays.cfunc_t.save_user_numforms (method) -ida_hexrays.cfunc_t.save_user_unions (method) -ida_hexrays.cfunc_t.set_user_cmt (method) -ida_hexrays.cfunc_t.set_user_iflags (method) -ida_hexrays.cfunc_t.set_user_union_selection (method) -ida_hexrays.cfunc_t.statebits (variable) -ida_hexrays.cfunc_t.treeitems (variable) -ida_hexrays.cfunc_t.user_cmts (variable) -ida_hexrays.cfunc_t.user_iflags (variable) -ida_hexrays.cfunc_t.user_labels (variable) -ida_hexrays.cfunc_t.user_unions (variable) -ida_hexrays.cfunc_t.verify (method) -ida_hexrays.cfunc_type (function) -ida_hexrays.cfuncptr_t (class) -ida_hexrays.cfuncptr_t.__deref__ (method) -ida_hexrays.cfuncptr_t.__init__ (method) -ida_hexrays.cfuncptr_t.__ptrval__ (method) -ida_hexrays.cfuncptr_t.__ref__ (method) -ida_hexrays.cfuncptr_t.__str__ (method) -ida_hexrays.cfuncptr_t.build_c_tree (method) -ida_hexrays.cfuncptr_t.del_orphan_cmts (method) -ida_hexrays.cfuncptr_t.find_item_coords (method) -ida_hexrays.cfuncptr_t.find_label (method) -ida_hexrays.cfuncptr_t.gather_derefs (method) -ida_hexrays.cfuncptr_t.get_boundaries (method) -ida_hexrays.cfuncptr_t.get_eamap (method) -ida_hexrays.cfuncptr_t.get_func_type (method) -ida_hexrays.cfuncptr_t.get_line_item (method) -ida_hexrays.cfuncptr_t.get_lvars (method) -ida_hexrays.cfuncptr_t.get_pseudocode (method) -ida_hexrays.cfuncptr_t.get_stkoff_delta (method) -ida_hexrays.cfuncptr_t.get_user_cmt (method) -ida_hexrays.cfuncptr_t.get_user_iflags (method) -ida_hexrays.cfuncptr_t.get_user_union_selection (method) -ida_hexrays.cfuncptr_t.get_warnings (method) -ida_hexrays.cfuncptr_t.has_orphan_cmts (method) -ida_hexrays.cfuncptr_t.locked (method) -ida_hexrays.cfuncptr_t.print_dcl (method) -ida_hexrays.cfuncptr_t.print_func (method) -ida_hexrays.cfuncptr_t.refresh_func_ctext (method) -ida_hexrays.cfuncptr_t.release (method) -ida_hexrays.cfuncptr_t.remove_unused_labels (method) -ida_hexrays.cfuncptr_t.reset (method) -ida_hexrays.cfuncptr_t.save_user_cmts (method) -ida_hexrays.cfuncptr_t.save_user_iflags (method) -ida_hexrays.cfuncptr_t.save_user_labels (method) -ida_hexrays.cfuncptr_t.save_user_numforms (method) -ida_hexrays.cfuncptr_t.save_user_unions (method) -ida_hexrays.cfuncptr_t.set_user_cmt (method) -ida_hexrays.cfuncptr_t.set_user_iflags (method) -ida_hexrays.cfuncptr_t.set_user_union_selection (method) -ida_hexrays.cfuncptr_t.verify (method) -ida_hexrays.cgoto_t (class) -ida_hexrays.cgoto_t.__eq__ (method) -ida_hexrays.cgoto_t.__ge__ (method) -ida_hexrays.cgoto_t.__gt__ (method) -ida_hexrays.cgoto_t.__init__ (method) -ida_hexrays.cgoto_t.__le__ (method) -ida_hexrays.cgoto_t.__lt__ (method) -ida_hexrays.cgoto_t.__ne__ (method) -ida_hexrays.cgoto_t.compare (method) -ida_hexrays.cgoto_t.label_num (variable) -ida_hexrays.chain_keeper_t (class) -ida_hexrays.chain_keeper_t.__init__ (method) -ida_hexrays.chain_keeper_t.back (method) -ida_hexrays.chain_keeper_t.for_all_chains (method) -ida_hexrays.chain_keeper_t.front (method) -ida_hexrays.chain_t (class) -ida_hexrays.chain_t.__init__ (method) -ida_hexrays.chain_t.__lt__ (method) -ida_hexrays.chain_t._print (method) -ida_hexrays.chain_t.append_list (method) -ida_hexrays.chain_t.clear_varnum (method) -ida_hexrays.chain_t.dstr (method) -ida_hexrays.chain_t.endoff (method) -ida_hexrays.chain_t.flags (variable) -ida_hexrays.chain_t.get_reg (method) -ida_hexrays.chain_t.get_stkoff (method) -ida_hexrays.chain_t.includes (method) -ida_hexrays.chain_t.is_fake (method) -ida_hexrays.chain_t.is_inited (method) -ida_hexrays.chain_t.is_overlapped (method) -ida_hexrays.chain_t.is_passreg (method) -ida_hexrays.chain_t.is_reg (method) -ida_hexrays.chain_t.is_replaced (method) -ida_hexrays.chain_t.is_stkoff (method) -ida_hexrays.chain_t.is_term (method) -ida_hexrays.chain_t.key (method) -ida_hexrays.chain_t.overlap (method) -ida_hexrays.chain_t.set_inited (method) -ida_hexrays.chain_t.set_overlapped (method) -ida_hexrays.chain_t.set_replaced (method) -ida_hexrays.chain_t.set_term (method) -ida_hexrays.chain_t.set_value (method) -ida_hexrays.chain_t.varnum (variable) -ida_hexrays.chain_t.width (variable) -ida_hexrays.chain_visitor_t (class) -ida_hexrays.chain_visitor_t.__disown__ (method) -ida_hexrays.chain_visitor_t.__init__ (method) -ida_hexrays.chain_visitor_t.parent (variable) -ida_hexrays.chain_visitor_t.visit_chain (method) -ida_hexrays.change_hexrays_config (function) -ida_hexrays.checkout_hexrays_license (function) -ida_hexrays.cif_t (class) -ida_hexrays.cif_t.__eq__ (method) -ida_hexrays.cif_t.__ge__ (method) -ida_hexrays.cif_t.__gt__ (method) -ida_hexrays.cif_t.__init__ (method) -ida_hexrays.cif_t.__le__ (method) -ida_hexrays.cif_t.__lt__ (method) -ida_hexrays.cif_t.__ne__ (method) -ida_hexrays.cif_t.assign (method) -ida_hexrays.cif_t.cleanup (method) -ida_hexrays.cif_t.compare (method) -ida_hexrays.cif_t.ielse (variable) -ida_hexrays.cif_t.ithen (variable) -ida_hexrays.cinsn_details (function) -ida_hexrays.cinsn_list_t (class) -ida_hexrays.cinsn_list_t.__eq__ (method) -ida_hexrays.cinsn_list_t.__getitem__ (method) -ida_hexrays.cinsn_list_t.__init__ (method) -ida_hexrays.cinsn_list_t.__len__ (method) -ida_hexrays.cinsn_list_t.__ne__ (method) -ida_hexrays.cinsn_list_t.__setitem__ (method) -ida_hexrays.cinsn_list_t.at (method) -ida_hexrays.cinsn_list_t.back (method) -ida_hexrays.cinsn_list_t.begin (method) -ida_hexrays.cinsn_list_t.clear (method) -ida_hexrays.cinsn_list_t.empty (method) -ida_hexrays.cinsn_list_t.end (method) -ida_hexrays.cinsn_list_t.erase (method) -ida_hexrays.cinsn_list_t.find (method) -ida_hexrays.cinsn_list_t.front (method) -ida_hexrays.cinsn_list_t.index (method) -ida_hexrays.cinsn_list_t.insert (method) -ida_hexrays.cinsn_list_t.pop_back (method) -ida_hexrays.cinsn_list_t.pop_front (method) -ida_hexrays.cinsn_list_t.push_back (method) -ida_hexrays.cinsn_list_t.push_front (method) -ida_hexrays.cinsn_list_t.rbegin (method) -ida_hexrays.cinsn_list_t.remove (method) -ida_hexrays.cinsn_list_t.rend (method) -ida_hexrays.cinsn_list_t.size (method) -ida_hexrays.cinsn_list_t.swap (method) -ida_hexrays.cinsn_list_t_iterator (class) -ida_hexrays.cinsn_list_t_iterator.__eq__ (method) -ida_hexrays.cinsn_list_t_iterator.__init__ (method) -ida_hexrays.cinsn_list_t_iterator.__ne__ (method) -ida_hexrays.cinsn_list_t_iterator.__next__ (method) -ida_hexrays.cinsn_t (class) -ida_hexrays.cinsn_t.__eq__ (method) -ida_hexrays.cinsn_t.__ge__ (method) -ida_hexrays.cinsn_t.__gt__ (method) -ida_hexrays.cinsn_t.__init__ (method) -ida_hexrays.cinsn_t.__le__ (method) -ida_hexrays.cinsn_t.__lt__ (method) -ida_hexrays.cinsn_t.__ne__ (method) -ida_hexrays.cinsn_t._deregister (method) -ida_hexrays.cinsn_t._get_casm (method) -ida_hexrays.cinsn_t._get_cblock (method) -ida_hexrays.cinsn_t._get_cdo (method) -ida_hexrays.cinsn_t._get_cexpr (method) -ida_hexrays.cinsn_t._get_cfor (method) -ida_hexrays.cinsn_t._get_cgoto (method) -ida_hexrays.cinsn_t._get_cif (method) -ida_hexrays.cinsn_t._get_creturn (method) -ida_hexrays.cinsn_t._get_cswitch (method) -ida_hexrays.cinsn_t._get_cwhile (method) -ida_hexrays.cinsn_t._print (method) -ida_hexrays.cinsn_t._register (method) -ida_hexrays.cinsn_t._replace_by (method) -ida_hexrays.cinsn_t._set_casm (method) -ida_hexrays.cinsn_t._set_cblock (method) -ida_hexrays.cinsn_t._set_cdo (method) -ida_hexrays.cinsn_t._set_cexpr (method) -ida_hexrays.cinsn_t._set_cfor (method) -ida_hexrays.cinsn_t._set_cgoto (method) -ida_hexrays.cinsn_t._set_cif (method) -ida_hexrays.cinsn_t._set_creturn (method) -ida_hexrays.cinsn_t._set_cswitch (method) -ida_hexrays.cinsn_t._set_cwhile (method) -ida_hexrays.cinsn_t.assign (method) -ida_hexrays.cinsn_t.casm (variable) -ida_hexrays.cinsn_t.cblock (variable) -ida_hexrays.cinsn_t.cdo (variable) -ida_hexrays.cinsn_t.cexpr (variable) -ida_hexrays.cinsn_t.cfor (variable) -ida_hexrays.cinsn_t.cgoto (variable) -ida_hexrays.cinsn_t.cif (variable) -ida_hexrays.cinsn_t.cleanup (method) -ida_hexrays.cinsn_t.collect_free_breaks (method) -ida_hexrays.cinsn_t.collect_free_continues (method) -ida_hexrays.cinsn_t.compare (method) -ida_hexrays.cinsn_t.contains_free_break (method) -ida_hexrays.cinsn_t.contains_free_continue (method) -ida_hexrays.cinsn_t.contains_insn (method) -ida_hexrays.cinsn_t.create_if (method) -ida_hexrays.cinsn_t.creturn (variable) -ida_hexrays.cinsn_t.cswitch (variable) -ida_hexrays.cinsn_t.cwhile (variable) -ida_hexrays.cinsn_t.dstr (method) -ida_hexrays.cinsn_t.insn_is_epilog (method) -ida_hexrays.cinsn_t.is_epilog (method) -ida_hexrays.cinsn_t.is_ordinary_flow (method) -ida_hexrays.cinsn_t.new_insn (method) -ida_hexrays.cinsn_t.print1 (method) -ida_hexrays.cinsn_t.swap (method) -ida_hexrays.cinsn_t.zero (method) -ida_hexrays.cinsn_t_insn_is_epilog (function) -ida_hexrays.cinsnptrvec_t (class) -ida_hexrays.cinsnptrvec_t.__eq__ (method) -ida_hexrays.cinsnptrvec_t.__getitem__ (method) -ida_hexrays.cinsnptrvec_t.__init__ (method) -ida_hexrays.cinsnptrvec_t.__len__ (method) -ida_hexrays.cinsnptrvec_t.__ne__ (method) -ida_hexrays.cinsnptrvec_t.__setitem__ (method) -ida_hexrays.cinsnptrvec_t._del (method) -ida_hexrays.cinsnptrvec_t.add_unique (method) -ida_hexrays.cinsnptrvec_t.at (method) -ida_hexrays.cinsnptrvec_t.begin (method) -ida_hexrays.cinsnptrvec_t.capacity (method) -ida_hexrays.cinsnptrvec_t.clear (method) -ida_hexrays.cinsnptrvec_t.empty (method) -ida_hexrays.cinsnptrvec_t.end (method) -ida_hexrays.cinsnptrvec_t.erase (method) -ida_hexrays.cinsnptrvec_t.extract (method) -ida_hexrays.cinsnptrvec_t.find (method) -ida_hexrays.cinsnptrvec_t.has (method) -ida_hexrays.cinsnptrvec_t.inject (method) -ida_hexrays.cinsnptrvec_t.insert (method) -ida_hexrays.cinsnptrvec_t.pop_back (method) -ida_hexrays.cinsnptrvec_t.push_back (method) -ida_hexrays.cinsnptrvec_t.qclear (method) -ida_hexrays.cinsnptrvec_t.reserve (method) -ida_hexrays.cinsnptrvec_t.resize (method) -ida_hexrays.cinsnptrvec_t.size (method) -ida_hexrays.cinsnptrvec_t.swap (method) -ida_hexrays.cinsnptrvec_t.truncate (method) -ida_hexrays.cit_asm (variable) -ida_hexrays.cit_block (variable) -ida_hexrays.cit_break (variable) -ida_hexrays.cit_continue (variable) -ida_hexrays.cit_do (variable) -ida_hexrays.cit_empty (variable) -ida_hexrays.cit_expr (variable) -ida_hexrays.cit_for (variable) -ida_hexrays.cit_goto (variable) -ida_hexrays.cit_if (variable) -ida_hexrays.cit_return (variable) -ida_hexrays.cit_switch (variable) -ida_hexrays.cit_while (variable) -ida_hexrays.citem_cmt_t (class) -ida_hexrays.citem_cmt_t.__init__ (method) -ida_hexrays.citem_cmt_t.__str__ (method) -ida_hexrays.citem_cmt_t.c_str (method) -ida_hexrays.citem_cmt_t.used (variable) -ida_hexrays.citem_locator_t (class) -ida_hexrays.citem_locator_t.__eq__ (method) -ida_hexrays.citem_locator_t.__ge__ (method) -ida_hexrays.citem_locator_t.__gt__ (method) -ida_hexrays.citem_locator_t.__init__ (method) -ida_hexrays.citem_locator_t.__le__ (method) -ida_hexrays.citem_locator_t.__lt__ (method) -ida_hexrays.citem_locator_t.__ne__ (method) -ida_hexrays.citem_locator_t.compare (method) -ida_hexrays.citem_locator_t.ea (variable) -ida_hexrays.citem_locator_t.op (variable) -ida_hexrays.citem_t (class) -ida_hexrays.citem_t.__dbg_get_meminfo (method) -ida_hexrays.citem_t.__dbg_get_registered_kind (method) -ida_hexrays.citem_t.__init__ (method) -ida_hexrays.citem_t._acquire_ownership (method) -ida_hexrays.citem_t._ensure_cond (method) -ida_hexrays.citem_t._ensure_no_obj (method) -ida_hexrays.citem_t._ensure_no_op (method) -ida_hexrays.citem_t._ensure_ownership_transferrable (method) -ida_hexrays.citem_t._get_op (method) -ida_hexrays.citem_t._maybe_disown_and_deregister (method) -ida_hexrays.citem_t._meminfo (method) -ida_hexrays.citem_t._obj_id (method) -ida_hexrays.citem_t._own_and_register (method) -ida_hexrays.citem_t._set_op (method) -ida_hexrays.citem_t.contains_expr (method) -ida_hexrays.citem_t.contains_label (method) -ida_hexrays.citem_t.ea (variable) -ida_hexrays.citem_t.find_closest_addr (method) -ida_hexrays.citem_t.find_parent_of (method) -ida_hexrays.citem_t.index (variable) -ida_hexrays.citem_t.is_expr (method) -ida_hexrays.citem_t.label_num (variable) -ida_hexrays.citem_t.op (variable) -ida_hexrays.citem_t.print1 (method) -ida_hexrays.citem_t.replace_by (method) -ida_hexrays.citem_t.swap (method) -ida_hexrays.citem_to_specific_type (function) -ida_hexrays.clear_cached_cfuncs (function) -ida_hexrays.cloop_t (class) -ida_hexrays.cloop_t.__init__ (method) -ida_hexrays.cloop_t.assign (method) -ida_hexrays.cloop_t.cleanup (method) -ida_hexrays.close_hexrays_waitbox (function) -ida_hexrays.close_pseudocode (function) -ida_hexrays.cnumber_t (class) -ida_hexrays.cnumber_t.__eq__ (method) -ida_hexrays.cnumber_t.__ge__ (method) -ida_hexrays.cnumber_t.__gt__ (method) -ida_hexrays.cnumber_t.__init__ (method) -ida_hexrays.cnumber_t.__le__ (method) -ida_hexrays.cnumber_t.__lt__ (method) -ida_hexrays.cnumber_t.__ne__ (method) -ida_hexrays.cnumber_t._print (method) -ida_hexrays.cnumber_t._value (variable) -ida_hexrays.cnumber_t.assign (method) -ida_hexrays.cnumber_t.compare (method) -ida_hexrays.cnumber_t.nf (variable) -ida_hexrays.cnumber_t.value (method) -ida_hexrays.codegen_t (class) -ida_hexrays.codegen_t.__init__ (method) -ida_hexrays.codegen_t.analyze_prolog (method) -ida_hexrays.codegen_t.emit (method) -ida_hexrays.codegen_t.emit_micro_mvm (method) -ida_hexrays.codegen_t.gen_micro (method) -ida_hexrays.codegen_t.load_effective_address (method) -ida_hexrays.codegen_t.load_operand (method) -ida_hexrays.codegen_t.microgen_completed (method) -ida_hexrays.codegen_t.prepare_gen_micro (method) -ida_hexrays.codegen_t.store_operand (method) -ida_hexrays.convert_to_user_call (function) -ida_hexrays.cot_add (variable) -ida_hexrays.cot_asg (variable) -ida_hexrays.cot_asgadd (variable) -ida_hexrays.cot_asgband (variable) -ida_hexrays.cot_asgbor (variable) -ida_hexrays.cot_asgmul (variable) -ida_hexrays.cot_asgsdiv (variable) -ida_hexrays.cot_asgshl (variable) -ida_hexrays.cot_asgsmod (variable) -ida_hexrays.cot_asgsshr (variable) -ida_hexrays.cot_asgsub (variable) -ida_hexrays.cot_asgudiv (variable) -ida_hexrays.cot_asgumod (variable) -ida_hexrays.cot_asgushr (variable) -ida_hexrays.cot_asgxor (variable) -ida_hexrays.cot_band (variable) -ida_hexrays.cot_bnot (variable) -ida_hexrays.cot_bor (variable) -ida_hexrays.cot_call (variable) -ida_hexrays.cot_cast (variable) -ida_hexrays.cot_comma (variable) -ida_hexrays.cot_eq (variable) -ida_hexrays.cot_fadd (variable) -ida_hexrays.cot_fdiv (variable) -ida_hexrays.cot_fmul (variable) -ida_hexrays.cot_fneg (variable) -ida_hexrays.cot_fnum (variable) -ida_hexrays.cot_fsub (variable) -ida_hexrays.cot_helper (variable) -ida_hexrays.cot_idx (variable) -ida_hexrays.cot_insn (variable) -ida_hexrays.cot_land (variable) -ida_hexrays.cot_lnot (variable) -ida_hexrays.cot_lor (variable) -ida_hexrays.cot_memptr (variable) -ida_hexrays.cot_memref (variable) -ida_hexrays.cot_mul (variable) -ida_hexrays.cot_ne (variable) -ida_hexrays.cot_neg (variable) -ida_hexrays.cot_num (variable) -ida_hexrays.cot_obj (variable) -ida_hexrays.cot_postdec (variable) -ida_hexrays.cot_postinc (variable) -ida_hexrays.cot_predec (variable) -ida_hexrays.cot_preinc (variable) -ida_hexrays.cot_ptr (variable) -ida_hexrays.cot_ref (variable) -ida_hexrays.cot_sdiv (variable) -ida_hexrays.cot_sge (variable) -ida_hexrays.cot_sgt (variable) -ida_hexrays.cot_shl (variable) -ida_hexrays.cot_sizeof (variable) -ida_hexrays.cot_sle (variable) -ida_hexrays.cot_slt (variable) -ida_hexrays.cot_smod (variable) -ida_hexrays.cot_sshr (variable) -ida_hexrays.cot_str (variable) -ida_hexrays.cot_sub (variable) -ida_hexrays.cot_tern (variable) -ida_hexrays.cot_type (variable) -ida_hexrays.cot_udiv (variable) -ida_hexrays.cot_uge (variable) -ida_hexrays.cot_ugt (variable) -ida_hexrays.cot_ule (variable) -ida_hexrays.cot_ult (variable) -ida_hexrays.cot_umod (variable) -ida_hexrays.cot_ushr (variable) -ida_hexrays.cot_var (variable) -ida_hexrays.cot_xor (variable) -ida_hexrays.create_cfunc (function) -ida_hexrays.create_empty_mba (function) -ida_hexrays.create_field_name (function) -ida_hexrays.create_helper (function) -ida_hexrays.create_typedef (function) -ida_hexrays.creturn_t (class) -ida_hexrays.creturn_t.__eq__ (method) -ida_hexrays.creturn_t.__ge__ (method) -ida_hexrays.creturn_t.__gt__ (method) -ida_hexrays.creturn_t.__init__ (method) -ida_hexrays.creturn_t.__le__ (method) -ida_hexrays.creturn_t.__lt__ (method) -ida_hexrays.creturn_t.__ne__ (method) -ida_hexrays.creturn_t.compare (method) -ida_hexrays.cswitch_t (class) -ida_hexrays.cswitch_t.__eq__ (method) -ida_hexrays.cswitch_t.__ge__ (method) -ida_hexrays.cswitch_t.__gt__ (method) -ida_hexrays.cswitch_t.__init__ (method) -ida_hexrays.cswitch_t.__le__ (method) -ida_hexrays.cswitch_t.__lt__ (method) -ida_hexrays.cswitch_t.__ne__ (method) -ida_hexrays.cswitch_t.cases (variable) -ida_hexrays.cswitch_t.compare (method) -ida_hexrays.cswitch_t.mvnf (variable) -ida_hexrays.ctext_position_t (class) -ida_hexrays.ctext_position_t.__eq__ (method) -ida_hexrays.ctext_position_t.__ge__ (method) -ida_hexrays.ctext_position_t.__gt__ (method) -ida_hexrays.ctext_position_t.__init__ (method) -ida_hexrays.ctext_position_t.__le__ (method) -ida_hexrays.ctext_position_t.__lt__ (method) -ida_hexrays.ctext_position_t.__ne__ (method) -ida_hexrays.ctext_position_t.compare (method) -ida_hexrays.ctext_position_t.in_ctree (method) -ida_hexrays.ctext_position_t.lnnum (variable) -ida_hexrays.ctext_position_t.x (variable) -ida_hexrays.ctext_position_t.y (variable) -ida_hexrays.ctree_anchor_t (class) -ida_hexrays.ctree_anchor_t.__init__ (method) -ida_hexrays.ctree_anchor_t.get_index (method) -ida_hexrays.ctree_anchor_t.get_itp (method) -ida_hexrays.ctree_anchor_t.is_blkcmt_anchor (method) -ida_hexrays.ctree_anchor_t.is_citem_anchor (method) -ida_hexrays.ctree_anchor_t.is_itp_anchor (method) -ida_hexrays.ctree_anchor_t.is_lvar_anchor (method) -ida_hexrays.ctree_anchor_t.is_valid_anchor (method) -ida_hexrays.ctree_item_t (class) -ida_hexrays.ctree_item_t.__init__ (method) -ida_hexrays.ctree_item_t._get_e (method) -ida_hexrays.ctree_item_t._get_f (method) -ida_hexrays.ctree_item_t._get_i (method) -ida_hexrays.ctree_item_t._get_it (method) -ida_hexrays.ctree_item_t._get_l (method) -ida_hexrays.ctree_item_t._print (method) -ida_hexrays.ctree_item_t.citype (variable) -ida_hexrays.ctree_item_t.dstr (method) -ida_hexrays.ctree_item_t.get_ea (method) -ida_hexrays.ctree_item_t.get_label_num (method) -ida_hexrays.ctree_item_t.get_lvar (method) -ida_hexrays.ctree_item_t.get_memptr (method) -ida_hexrays.ctree_item_t.is_citem (method) -ida_hexrays.ctree_items_t (class) -ida_hexrays.ctree_items_t.__eq__ (method) -ida_hexrays.ctree_items_t.__getitem__ (method) -ida_hexrays.ctree_items_t.__init__ (method) -ida_hexrays.ctree_items_t.__len__ (method) -ida_hexrays.ctree_items_t.__ne__ (method) -ida_hexrays.ctree_items_t.__setitem__ (method) -ida_hexrays.ctree_items_t._del (method) -ida_hexrays.ctree_items_t.add_unique (method) -ida_hexrays.ctree_items_t.at (method) -ida_hexrays.ctree_items_t.begin (method) -ida_hexrays.ctree_items_t.capacity (method) -ida_hexrays.ctree_items_t.clear (method) -ida_hexrays.ctree_items_t.empty (method) -ida_hexrays.ctree_items_t.end (method) -ida_hexrays.ctree_items_t.erase (method) -ida_hexrays.ctree_items_t.extract (method) -ida_hexrays.ctree_items_t.find (method) -ida_hexrays.ctree_items_t.has (method) -ida_hexrays.ctree_items_t.inject (method) -ida_hexrays.ctree_items_t.insert (method) -ida_hexrays.ctree_items_t.pop_back (method) -ida_hexrays.ctree_items_t.push_back (method) -ida_hexrays.ctree_items_t.qclear (method) -ida_hexrays.ctree_items_t.reserve (method) -ida_hexrays.ctree_items_t.resize (method) -ida_hexrays.ctree_items_t.size (method) -ida_hexrays.ctree_items_t.swap (method) -ida_hexrays.ctree_items_t.truncate (method) -ida_hexrays.ctree_parentee_t (class) -ida_hexrays.ctree_parentee_t.__disown__ (method) -ida_hexrays.ctree_parentee_t.__init__ (method) -ida_hexrays.ctree_parentee_t.get_block (method) -ida_hexrays.ctree_parentee_t.recalc_parent_types (method) -ida_hexrays.ctree_visitor_t (class) -ida_hexrays.ctree_visitor_t.__disown__ (method) -ida_hexrays.ctree_visitor_t.__init__ (method) -ida_hexrays.ctree_visitor_t.apply_to (method) -ida_hexrays.ctree_visitor_t.apply_to_exprs (method) -ida_hexrays.ctree_visitor_t.clr_prune (method) -ida_hexrays.ctree_visitor_t.clr_restart (method) -ida_hexrays.ctree_visitor_t.cv_flags (variable) -ida_hexrays.ctree_visitor_t.is_postorder (method) -ida_hexrays.ctree_visitor_t.leave_expr (method) -ida_hexrays.ctree_visitor_t.leave_insn (method) -ida_hexrays.ctree_visitor_t.maintain_parents (method) -ida_hexrays.ctree_visitor_t.must_prune (method) -ida_hexrays.ctree_visitor_t.must_restart (method) -ida_hexrays.ctree_visitor_t.only_insns (method) -ida_hexrays.ctree_visitor_t.parent_expr (method) -ida_hexrays.ctree_visitor_t.parent_insn (method) -ida_hexrays.ctree_visitor_t.parents (variable) -ida_hexrays.ctree_visitor_t.prune_now (method) -ida_hexrays.ctree_visitor_t.set_restart (method) -ida_hexrays.ctree_visitor_t.visit_expr (method) -ida_hexrays.ctree_visitor_t.visit_insn (method) -ida_hexrays.cwhile_t (class) -ida_hexrays.cwhile_t.__eq__ (method) -ida_hexrays.cwhile_t.__ge__ (method) -ida_hexrays.cwhile_t.__gt__ (method) -ida_hexrays.cwhile_t.__init__ (method) -ida_hexrays.cwhile_t.__le__ (method) -ida_hexrays.cwhile_t.__lt__ (method) -ida_hexrays.cwhile_t.__ne__ (method) -ida_hexrays.cwhile_t.compare (method) -ida_hexrays.debug_hexrays_ctree (function) -ida_hexrays.decompile (function) -ida_hexrays.decompile (function) -ida_hexrays.decompile_func (function) -ida_hexrays.decompile_many (function) -ida_hexrays.dereference (function) -ida_hexrays.dstr (function) -ida_hexrays.dummy_ptrtype (function) -ida_hexrays.eamap_begin (function) -ida_hexrays.eamap_clear (function) -ida_hexrays.eamap_end (function) -ida_hexrays.eamap_erase (function) -ida_hexrays.eamap_find (function) -ida_hexrays.eamap_first (function) -ida_hexrays.eamap_free (function) -ida_hexrays.eamap_insert (function) -ida_hexrays.eamap_iterator_t (class) -ida_hexrays.eamap_iterator_t.__eq__ (method) -ida_hexrays.eamap_iterator_t.__init__ (method) -ida_hexrays.eamap_iterator_t.__ne__ (method) -ida_hexrays.eamap_new (function) -ida_hexrays.eamap_next (function) -ida_hexrays.eamap_prev (function) -ida_hexrays.eamap_second (function) -ida_hexrays.eamap_size (function) -ida_hexrays.eamap_t (class) -ida_hexrays.eamap_t.__init__ (method) -ida_hexrays.eamap_t.at (method) -ida_hexrays.eamap_t.size (method) -ida_hexrays.fnumber_t (class) -ida_hexrays.fnumber_t.__eq__ (method) -ida_hexrays.fnumber_t.__ge__ (method) -ida_hexrays.fnumber_t.__gt__ (method) -ida_hexrays.fnumber_t.__init__ (method) -ida_hexrays.fnumber_t.__le__ (method) -ida_hexrays.fnumber_t.__lt__ (method) -ida_hexrays.fnumber_t.__ne__ (method) -ida_hexrays.fnumber_t._print (method) -ida_hexrays.fnumber_t.compare (method) -ida_hexrays.fnumber_t.dereference_const_uint16 (method) -ida_hexrays.fnumber_t.dereference_uint16 (method) -ida_hexrays.fnumber_t.fnum (variable) -ida_hexrays.fnumber_t.nbytes (variable) -ida_hexrays.gco_info_t (class) -ida_hexrays.gco_info_t.__init__ (method) -ida_hexrays.gco_info_t.append_to_list (method) -ida_hexrays.gco_info_t.cvt_to_ivl (method) -ida_hexrays.gco_info_t.is_def (method) -ida_hexrays.gco_info_t.is_reg (method) -ida_hexrays.gco_info_t.is_use (method) -ida_hexrays.gco_info_t.name (variable) -ida_hexrays.gco_info_t.regnum (variable) -ida_hexrays.gco_info_t.size (variable) -ida_hexrays.gco_info_t.stkoff (variable) -ida_hexrays.gen_microcode (function) -ida_hexrays.get_ctype_name (function) -ida_hexrays.get_current_operand (function) -ida_hexrays.get_float_type (function) -ida_hexrays.get_hexrays_version (function) -ida_hexrays.get_int_type_by_width_and_sign (function) -ida_hexrays.get_member_type (function) -ida_hexrays.get_merror_desc (function) -ida_hexrays.get_mreg_name (function) -ida_hexrays.get_op_signness (function) -ida_hexrays.get_signed_mcode (function) -ida_hexrays.get_temp_regs (function) -ida_hexrays.get_type (function) -ida_hexrays.get_unk_type (function) -ida_hexrays.get_unsigned_mcode (function) -ida_hexrays.get_widget_vdui (function) -ida_hexrays.getb_reginsn (function) -ida_hexrays.getf_reginsn (function) -ida_hexrays.graph_chains_t (class) -ida_hexrays.graph_chains_t.__init__ (method) -ida_hexrays.graph_chains_t.acquire (method) -ida_hexrays.graph_chains_t.for_all_chains (method) -ida_hexrays.graph_chains_t.is_locked (method) -ida_hexrays.graph_chains_t.release (method) -ida_hexrays.graph_chains_t.swap (method) -ida_hexrays.has_cached_cfunc (function) -ida_hexrays.has_mcode_seloff (function) -ida_hexrays.hexrays_alloc (function) -ida_hexrays.hexrays_failure_t (class) -ida_hexrays.hexrays_failure_t.__init__ (method) -ida_hexrays.hexrays_failure_t.code (variable) -ida_hexrays.hexrays_failure_t.desc (method) -ida_hexrays.hexrays_failure_t.errea (variable) -ida_hexrays.hexrays_failure_t.str (variable) -ida_hexrays.hexrays_free (function) -ida_hexrays.hexwarn_t (class) -ida_hexrays.hexwarn_t.__eq__ (method) -ida_hexrays.hexwarn_t.__ge__ (method) -ida_hexrays.hexwarn_t.__gt__ (method) -ida_hexrays.hexwarn_t.__init__ (method) -ida_hexrays.hexwarn_t.__le__ (method) -ida_hexrays.hexwarn_t.__lt__ (method) -ida_hexrays.hexwarn_t.__ne__ (method) -ida_hexrays.hexwarn_t.compare (method) -ida_hexrays.hexwarn_t.ea (variable) -ida_hexrays.hexwarn_t.id (variable) -ida_hexrays.hexwarn_t.text (variable) -ida_hexrays.hexwarns_t (class) -ida_hexrays.hexwarns_t.__eq__ (method) -ida_hexrays.hexwarns_t.__getitem__ (method) -ida_hexrays.hexwarns_t.__init__ (method) -ida_hexrays.hexwarns_t.__len__ (method) -ida_hexrays.hexwarns_t.__ne__ (method) -ida_hexrays.hexwarns_t.__setitem__ (method) -ida_hexrays.hexwarns_t._del (method) -ida_hexrays.hexwarns_t.add_unique (method) -ida_hexrays.hexwarns_t.at (method) -ida_hexrays.hexwarns_t.begin (method) -ida_hexrays.hexwarns_t.capacity (method) -ida_hexrays.hexwarns_t.clear (method) -ida_hexrays.hexwarns_t.empty (method) -ida_hexrays.hexwarns_t.end (method) -ida_hexrays.hexwarns_t.erase (method) -ida_hexrays.hexwarns_t.extract (method) -ida_hexrays.hexwarns_t.find (method) -ida_hexrays.hexwarns_t.grow (method) -ida_hexrays.hexwarns_t.has (method) -ida_hexrays.hexwarns_t.inject (method) -ida_hexrays.hexwarns_t.insert (method) -ida_hexrays.hexwarns_t.pop_back (method) -ida_hexrays.hexwarns_t.push_back (method) -ida_hexrays.hexwarns_t.qclear (method) -ida_hexrays.hexwarns_t.reserve (method) -ida_hexrays.hexwarns_t.resize (method) -ida_hexrays.hexwarns_t.size (method) -ida_hexrays.hexwarns_t.swap (method) -ida_hexrays.hexwarns_t.truncate (method) -ida_hexrays.history_item_t (class) -ida_hexrays.history_item_t.__init__ (method) -ida_hexrays.history_item_t.ea (variable) -ida_hexrays.history_item_t.end (variable) -ida_hexrays.history_t (class) -ida_hexrays.history_t.__init__ (method) -ida_hexrays.history_t.pop (method) -ida_hexrays.history_t.push (method) -ida_hexrays.history_t.top (method) -ida_hexrays.hxe_build_callinfo (variable) -ida_hexrays.hxe_callinfo_built (variable) -ida_hexrays.hxe_calls_done (variable) -ida_hexrays.hxe_close_pseudocode (variable) -ida_hexrays.hxe_cmt_changed (variable) -ida_hexrays.hxe_combine (variable) -ida_hexrays.hxe_create_hint (variable) -ida_hexrays.hxe_curpos (variable) -ida_hexrays.hxe_double_click (variable) -ida_hexrays.hxe_flowchart (variable) -ida_hexrays.hxe_func_printed (variable) -ida_hexrays.hxe_glbopt (variable) -ida_hexrays.hxe_interr (variable) -ida_hexrays.hxe_keyboard (variable) -ida_hexrays.hxe_locopt (variable) -ida_hexrays.hxe_maturity (variable) -ida_hexrays.hxe_microcode (variable) -ida_hexrays.hxe_open_pseudocode (variable) -ida_hexrays.hxe_populating_popup (variable) -ida_hexrays.hxe_prealloc (variable) -ida_hexrays.hxe_preoptimized (variable) -ida_hexrays.hxe_print_func (variable) -ida_hexrays.hxe_prolog (variable) -ida_hexrays.hxe_refresh_pseudocode (variable) -ida_hexrays.hxe_resolve_stkaddrs (variable) -ida_hexrays.hxe_right_click (variable) -ida_hexrays.hxe_stkpnts (variable) -ida_hexrays.hxe_structural (variable) -ida_hexrays.hxe_switch_pseudocode (variable) -ida_hexrays.hxe_text_ready (variable) -ida_hexrays.init_hexrays_plugin (function) -ida_hexrays.install_hexrays_callback (function) -ida_hexrays.install_microcode_filter (function) -ida_hexrays.is_additive (function) -ida_hexrays.is_assignment (function) -ida_hexrays.is_binary (function) -ida_hexrays.is_bitop (function) -ida_hexrays.is_bool_type (function) -ida_hexrays.is_break_consumer (function) -ida_hexrays.is_commutative (function) -ida_hexrays.is_inplace_def (function) -ida_hexrays.is_kreg (function) -ida_hexrays.is_logical (function) -ida_hexrays.is_loop (function) -ida_hexrays.is_lvalue (function) -ida_hexrays.is_may_access (function) -ida_hexrays.is_mcode_addsub (function) -ida_hexrays.is_mcode_call (function) -ida_hexrays.is_mcode_commutative (function) -ida_hexrays.is_mcode_convertible_to_jmp (function) -ida_hexrays.is_mcode_convertible_to_set (function) -ida_hexrays.is_mcode_divmod (function) -ida_hexrays.is_mcode_fpu (function) -ida_hexrays.is_mcode_j1 (function) -ida_hexrays.is_mcode_jcond (function) -ida_hexrays.is_mcode_propagatable (function) -ida_hexrays.is_mcode_set (function) -ida_hexrays.is_mcode_set1 (function) -ida_hexrays.is_mcode_shift (function) -ida_hexrays.is_mcode_xdsu (function) -ida_hexrays.is_multiplicative (function) -ida_hexrays.is_nonbool_type (function) -ida_hexrays.is_paf (function) -ida_hexrays.is_prepost (function) -ida_hexrays.is_ptr_or_array (function) -ida_hexrays.is_relational (function) -ida_hexrays.is_signed_mcode (function) -ida_hexrays.is_small_udt (function) -ida_hexrays.is_type_correct (function) -ida_hexrays.is_unary (function) -ida_hexrays.is_unsigned_mcode (function) -ida_hexrays.iterator (class) -ida_hexrays.iterator.__eq__ (method) -ida_hexrays.iterator.__init__ (method) -ida_hexrays.iterator.__ne__ (method) -ida_hexrays.iterator.__ref__ (method) -ida_hexrays.ivl_t (class) -ida_hexrays.ivl_t.__eq__ (method) -ida_hexrays.ivl_t.__ge__ (method) -ida_hexrays.ivl_t.__gt__ (method) -ida_hexrays.ivl_t.__init__ (method) -ida_hexrays.ivl_t.__le__ (method) -ida_hexrays.ivl_t.__lt__ (method) -ida_hexrays.ivl_t.__ne__ (method) -ida_hexrays.ivl_t.clear (method) -ida_hexrays.ivl_t.compare (method) -ida_hexrays.ivl_t.contains (method) -ida_hexrays.ivl_t.dstr (method) -ida_hexrays.ivl_t.empty (method) -ida_hexrays.ivl_t.extend_to_cover (method) -ida_hexrays.ivl_t.includes (method) -ida_hexrays.ivl_t.intersect (method) -ida_hexrays.ivl_t.overlap (method) -ida_hexrays.ivl_with_name_t (class) -ida_hexrays.ivl_with_name_t.__init__ (method) -ida_hexrays.ivlset_t (class) -ida_hexrays.ivlset_t.__eq__ (method) -ida_hexrays.ivlset_t.__ge__ (method) -ida_hexrays.ivlset_t.__gt__ (method) -ida_hexrays.ivlset_t.__init__ (method) -ida_hexrays.ivlset_t.__le__ (method) -ida_hexrays.ivlset_t.__lt__ (method) -ida_hexrays.ivlset_t.__ne__ (method) -ida_hexrays.ivlset_t._print (method) -ida_hexrays.ivlset_t.add (method) -ida_hexrays.ivlset_t.addmasked (method) -ida_hexrays.ivlset_t.compare (method) -ida_hexrays.ivlset_t.contains (method) -ida_hexrays.ivlset_t.count (method) -ida_hexrays.ivlset_t.dstr (method) -ida_hexrays.ivlset_t.has_common (method) -ida_hexrays.ivlset_t.includes (method) -ida_hexrays.ivlset_t.intersect (method) -ida_hexrays.ivlset_t.sub (method) -ida_hexrays.jcnd2set (function) -ida_hexrays.lexcompare (function) -ida_hexrays.lnot (function) -ida_hexrays.locate_lvar (function) -ida_hexrays.lvar_locator_t (class) -ida_hexrays.lvar_locator_t.__eq__ (method) -ida_hexrays.lvar_locator_t.__ge__ (method) -ida_hexrays.lvar_locator_t.__gt__ (method) -ida_hexrays.lvar_locator_t.__init__ (method) -ida_hexrays.lvar_locator_t.__le__ (method) -ida_hexrays.lvar_locator_t.__lt__ (method) -ida_hexrays.lvar_locator_t.__ne__ (method) -ida_hexrays.lvar_locator_t.compare (method) -ida_hexrays.lvar_locator_t.defea (variable) -ida_hexrays.lvar_locator_t.get_reg1 (method) -ida_hexrays.lvar_locator_t.get_reg2 (method) -ida_hexrays.lvar_locator_t.get_scattered (method) -ida_hexrays.lvar_locator_t.get_stkoff (method) -ida_hexrays.lvar_locator_t.is_reg1 (method) -ida_hexrays.lvar_locator_t.is_reg2 (method) -ida_hexrays.lvar_locator_t.is_reg_var (method) -ida_hexrays.lvar_locator_t.is_scattered (method) -ida_hexrays.lvar_locator_t.is_stk_var (method) -ida_hexrays.lvar_locator_t.location (variable) -ida_hexrays.lvar_mapping_begin (function) -ida_hexrays.lvar_mapping_clear (function) -ida_hexrays.lvar_mapping_end (function) -ida_hexrays.lvar_mapping_erase (function) -ida_hexrays.lvar_mapping_find (function) -ida_hexrays.lvar_mapping_first (function) -ida_hexrays.lvar_mapping_free (function) -ida_hexrays.lvar_mapping_insert (function) -ida_hexrays.lvar_mapping_iterator_t (class) -ida_hexrays.lvar_mapping_iterator_t.__eq__ (method) -ida_hexrays.lvar_mapping_iterator_t.__init__ (method) -ida_hexrays.lvar_mapping_iterator_t.__ne__ (method) -ida_hexrays.lvar_mapping_new (function) -ida_hexrays.lvar_mapping_next (function) -ida_hexrays.lvar_mapping_prev (function) -ida_hexrays.lvar_mapping_second (function) -ida_hexrays.lvar_mapping_size (function) -ida_hexrays.lvar_mapping_t (class) -ida_hexrays.lvar_mapping_t.__init__ (method) -ida_hexrays.lvar_mapping_t.at (method) -ida_hexrays.lvar_mapping_t.size (method) -ida_hexrays.lvar_ref_t (class) -ida_hexrays.lvar_ref_t.__eq__ (method) -ida_hexrays.lvar_ref_t.__ge__ (method) -ida_hexrays.lvar_ref_t.__gt__ (method) -ida_hexrays.lvar_ref_t.__init__ (method) -ida_hexrays.lvar_ref_t.__le__ (method) -ida_hexrays.lvar_ref_t.__lt__ (method) -ida_hexrays.lvar_ref_t.__ne__ (method) -ida_hexrays.lvar_ref_t.compare (method) -ida_hexrays.lvar_ref_t.idx (variable) -ida_hexrays.lvar_ref_t.mba (variable) -ida_hexrays.lvar_ref_t.off (variable) -ida_hexrays.lvar_ref_t.swap (method) -ida_hexrays.lvar_ref_t.var (method) -ida_hexrays.lvar_saved_info_t (class) -ida_hexrays.lvar_saved_info_t.__eq__ (method) -ida_hexrays.lvar_saved_info_t.__init__ (method) -ida_hexrays.lvar_saved_info_t.__ne__ (method) -ida_hexrays.lvar_saved_info_t.clear_keep (method) -ida_hexrays.lvar_saved_info_t.clr_nomap_lvar (method) -ida_hexrays.lvar_saved_info_t.clr_noptr_lvar (method) -ida_hexrays.lvar_saved_info_t.clr_split_lvar (method) -ida_hexrays.lvar_saved_info_t.clr_unused_lvar (method) -ida_hexrays.lvar_saved_info_t.cmt (variable) -ida_hexrays.lvar_saved_info_t.flags (variable) -ida_hexrays.lvar_saved_info_t.has_info (method) -ida_hexrays.lvar_saved_info_t.is_kept (method) -ida_hexrays.lvar_saved_info_t.is_nomap_lvar (method) -ida_hexrays.lvar_saved_info_t.is_noptr_lvar (method) -ida_hexrays.lvar_saved_info_t.is_split_lvar (method) -ida_hexrays.lvar_saved_info_t.is_unused_lvar (method) -ida_hexrays.lvar_saved_info_t.ll (variable) -ida_hexrays.lvar_saved_info_t.name (variable) -ida_hexrays.lvar_saved_info_t.set_keep (method) -ida_hexrays.lvar_saved_info_t.set_nomap_lvar (method) -ida_hexrays.lvar_saved_info_t.set_noptr_lvar (method) -ida_hexrays.lvar_saved_info_t.set_split_lvar (method) -ida_hexrays.lvar_saved_info_t.set_unused_lvar (method) -ida_hexrays.lvar_saved_info_t.size (variable) -ida_hexrays.lvar_saved_info_t.type (variable) -ida_hexrays.lvar_saved_infos_t (class) -ida_hexrays.lvar_saved_infos_t.__eq__ (method) -ida_hexrays.lvar_saved_infos_t.__getitem__ (method) -ida_hexrays.lvar_saved_infos_t.__init__ (method) -ida_hexrays.lvar_saved_infos_t.__len__ (method) -ida_hexrays.lvar_saved_infos_t.__ne__ (method) -ida_hexrays.lvar_saved_infos_t.__setitem__ (method) -ida_hexrays.lvar_saved_infos_t._del (method) -ida_hexrays.lvar_saved_infos_t.add_unique (method) -ida_hexrays.lvar_saved_infos_t.at (method) -ida_hexrays.lvar_saved_infos_t.begin (method) -ida_hexrays.lvar_saved_infos_t.capacity (method) -ida_hexrays.lvar_saved_infos_t.clear (method) -ida_hexrays.lvar_saved_infos_t.empty (method) -ida_hexrays.lvar_saved_infos_t.end (method) -ida_hexrays.lvar_saved_infos_t.erase (method) -ida_hexrays.lvar_saved_infos_t.extract (method) -ida_hexrays.lvar_saved_infos_t.find (method) -ida_hexrays.lvar_saved_infos_t.grow (method) -ida_hexrays.lvar_saved_infos_t.has (method) -ida_hexrays.lvar_saved_infos_t.inject (method) -ida_hexrays.lvar_saved_infos_t.insert (method) -ida_hexrays.lvar_saved_infos_t.pop_back (method) -ida_hexrays.lvar_saved_infos_t.push_back (method) -ida_hexrays.lvar_saved_infos_t.qclear (method) -ida_hexrays.lvar_saved_infos_t.reserve (method) -ida_hexrays.lvar_saved_infos_t.resize (method) -ida_hexrays.lvar_saved_infos_t.size (method) -ida_hexrays.lvar_saved_infos_t.swap (method) -ida_hexrays.lvar_saved_infos_t.truncate (method) -ida_hexrays.lvar_t (class) -ida_hexrays.lvar_t.__init__ (method) -ida_hexrays.lvar_t.accepts_type (method) -ida_hexrays.lvar_t.append_list (method) -ida_hexrays.lvar_t.clear_used (method) -ida_hexrays.lvar_t.clr_arg_var (method) -ida_hexrays.lvar_t.clr_automapped (method) -ida_hexrays.lvar_t.clr_decl_unused (method) -ida_hexrays.lvar_t.clr_dummy_arg (method) -ida_hexrays.lvar_t.clr_fake_var (method) -ida_hexrays.lvar_t.clr_floating_var (method) -ida_hexrays.lvar_t.clr_mapdst_var (method) -ida_hexrays.lvar_t.clr_mreg_done (method) -ida_hexrays.lvar_t.clr_noptr_var (method) -ida_hexrays.lvar_t.clr_notarg (method) -ida_hexrays.lvar_t.clr_overlapped_var (method) -ida_hexrays.lvar_t.clr_shared (method) -ida_hexrays.lvar_t.clr_split_var (method) -ida_hexrays.lvar_t.clr_spoiled_var (method) -ida_hexrays.lvar_t.clr_thisarg (method) -ida_hexrays.lvar_t.clr_unknown_width (method) -ida_hexrays.lvar_t.clr_used_byref (method) -ida_hexrays.lvar_t.clr_user_info (method) -ida_hexrays.lvar_t.clr_user_name (method) -ida_hexrays.lvar_t.clr_user_type (method) -ida_hexrays.lvar_t.cmt (variable) -ida_hexrays.lvar_t.defblk (variable) -ida_hexrays.lvar_t.divisor (variable) -ida_hexrays.lvar_t.has_common (method) -ida_hexrays.lvar_t.has_common_bit (method) -ida_hexrays.lvar_t.has_nice_name (method) -ida_hexrays.lvar_t.has_regname (method) -ida_hexrays.lvar_t.has_user_info (method) -ida_hexrays.lvar_t.has_user_name (method) -ida_hexrays.lvar_t.has_user_type (method) -ida_hexrays.lvar_t.in_asm (method) -ida_hexrays.lvar_t.is_aliasable (method) -ida_hexrays.lvar_t.is_arg_var (method) -ida_hexrays.lvar_t.is_automapped (method) -ida_hexrays.lvar_t.is_decl_unused (method) -ida_hexrays.lvar_t.is_dummy_arg (method) -ida_hexrays.lvar_t.is_fake_var (method) -ida_hexrays.lvar_t.is_floating_var (method) -ida_hexrays.lvar_t.is_mapdst_var (method) -ida_hexrays.lvar_t.is_noptr_var (method) -ida_hexrays.lvar_t.is_notarg (method) -ida_hexrays.lvar_t.is_overlapped_var (method) -ida_hexrays.lvar_t.is_result_var (method) -ida_hexrays.lvar_t.is_shared (method) -ida_hexrays.lvar_t.is_split_var (method) -ida_hexrays.lvar_t.is_spoiled_var (method) -ida_hexrays.lvar_t.is_thisarg (method) -ida_hexrays.lvar_t.is_unknown_width (method) -ida_hexrays.lvar_t.is_used_byref (method) -ida_hexrays.lvar_t.mreg_done (method) -ida_hexrays.lvar_t.name (variable) -ida_hexrays.lvar_t.set_arg_var (method) -ida_hexrays.lvar_t.set_automapped (method) -ida_hexrays.lvar_t.set_decl_unused (method) -ida_hexrays.lvar_t.set_dummy_arg (method) -ida_hexrays.lvar_t.set_fake_var (method) -ida_hexrays.lvar_t.set_final_lvar_type (method) -ida_hexrays.lvar_t.set_floating_var (method) -ida_hexrays.lvar_t.set_lvar_type (method) -ida_hexrays.lvar_t.set_mapdst_var (method) -ida_hexrays.lvar_t.set_mreg_done (method) -ida_hexrays.lvar_t.set_non_typed (method) -ida_hexrays.lvar_t.set_noptr_var (method) -ida_hexrays.lvar_t.set_notarg (method) -ida_hexrays.lvar_t.set_overlapped_var (method) -ida_hexrays.lvar_t.set_shared (method) -ida_hexrays.lvar_t.set_split_var (method) -ida_hexrays.lvar_t.set_spoiled_var (method) -ida_hexrays.lvar_t.set_thisarg (method) -ida_hexrays.lvar_t.set_typed (method) -ida_hexrays.lvar_t.set_unknown_width (method) -ida_hexrays.lvar_t.set_used (method) -ida_hexrays.lvar_t.set_used_byref (method) -ida_hexrays.lvar_t.set_user_name (method) -ida_hexrays.lvar_t.set_user_type (method) -ida_hexrays.lvar_t.set_width (method) -ida_hexrays.lvar_t.tif (variable) -ida_hexrays.lvar_t.type (method) -ida_hexrays.lvar_t.typed (method) -ida_hexrays.lvar_t.used (method) -ida_hexrays.lvar_t.width (variable) -ida_hexrays.lvar_uservec_t (class) -ida_hexrays.lvar_uservec_t.__init__ (method) -ida_hexrays.lvar_uservec_t.clear (method) -ida_hexrays.lvar_uservec_t.empty (method) -ida_hexrays.lvar_uservec_t.find_info (method) -ida_hexrays.lvar_uservec_t.keep_info (method) -ida_hexrays.lvar_uservec_t.lmaps (variable) -ida_hexrays.lvar_uservec_t.lvvec (variable) -ida_hexrays.lvar_uservec_t.stkoff_delta (variable) -ida_hexrays.lvar_uservec_t.swap (method) -ida_hexrays.lvar_uservec_t.ulv_flags (variable) -ida_hexrays.lvars_t (class) -ida_hexrays.lvars_t.__init__ (method) -ida_hexrays.lvars_t.find (method) -ida_hexrays.lvars_t.find_input_lvar (method) -ida_hexrays.lvars_t.find_lvar (method) -ida_hexrays.lvars_t.find_stkvar (method) -ida_hexrays.lxe_lvar_cmt_changed (variable) -ida_hexrays.lxe_lvar_mapping_changed (variable) -ida_hexrays.lxe_lvar_name_changed (variable) -ida_hexrays.lxe_lvar_type_changed (variable) -ida_hexrays.make_num (function) -ida_hexrays.make_pointer (function) -ida_hexrays.make_ref (function) -ida_hexrays.mark_cfunc_dirty (function) -ida_hexrays.mba_range_iterator_t (class) -ida_hexrays.mba_range_iterator_t.__init__ (method) -ida_hexrays.mba_range_iterator_t.chunk (method) -ida_hexrays.mba_range_iterator_t.is_snippet (method) -ida_hexrays.mba_range_iterator_t.next (method) -ida_hexrays.mba_range_iterator_t.set (method) -ida_hexrays.mba_ranges_t (class) -ida_hexrays.mba_ranges_t.__init__ (method) -ida_hexrays.mba_ranges_t.clear (method) -ida_hexrays.mba_ranges_t.empty (method) -ida_hexrays.mba_ranges_t.is_fragmented (method) -ida_hexrays.mba_ranges_t.is_snippet (method) -ida_hexrays.mba_ranges_t.pfn (variable) -ida_hexrays.mba_ranges_t.ranges (variable) -ida_hexrays.mba_ranges_t.start (method) -ida_hexrays.mba_t (class) -ida_hexrays.mba_t.__init__ (method) -ida_hexrays.mba_t._deregister (method) -ida_hexrays.mba_t._print (method) -ida_hexrays.mba_t._register (method) -ida_hexrays.mba_t.aliased_args (variable) -ida_hexrays.mba_t.aliased_memory (variable) -ida_hexrays.mba_t.aliased_vars (variable) -ida_hexrays.mba_t.alloc_fict_ea (method) -ida_hexrays.mba_t.alloc_kreg (method) -ida_hexrays.mba_t.alloc_lvars (method) -ida_hexrays.mba_t.analyze_calls (method) -ida_hexrays.mba_t.arg (method) -ida_hexrays.mba_t.argbase (method) -ida_hexrays.mba_t.argidx (variable) -ida_hexrays.mba_t.argidx_ok (method) -ida_hexrays.mba_t.argidx_sorted (method) -ida_hexrays.mba_t.bad_call_sp_detected (method) -ida_hexrays.mba_t.blocks (variable) -ida_hexrays.mba_t.build_graph (method) -ida_hexrays.mba_t.calc_shins_flags (method) -ida_hexrays.mba_t.callinfo_built (method) -ida_hexrays.mba_t.cc (variable) -ida_hexrays.mba_t.chain_varnums_ok (method) -ida_hexrays.mba_t.clr_cdtr (method) -ida_hexrays.mba_t.clr_mba_flags (method) -ida_hexrays.mba_t.clr_mba_flags2 (method) -ida_hexrays.mba_t.code16_bit_removed (method) -ida_hexrays.mba_t.combine_blocks (method) -ida_hexrays.mba_t.common_stkvars_stkargs (method) -ida_hexrays.mba_t.consumed_argregs (variable) -ida_hexrays.mba_t.copy_block (method) -ida_hexrays.mba_t.create_helper_call (method) -ida_hexrays.mba_t.deleted_pairs (method) -ida_hexrays.mba_t.deprecated_idb_node (variable) -ida_hexrays.mba_t.deserialize (method) -ida_hexrays.mba_t.display_numaddrs (method) -ida_hexrays.mba_t.display_valnums (method) -ida_hexrays.mba_t.dump (method) -ida_hexrays.mba_t.dump_mba (method) -ida_hexrays.mba_t.error_ea (variable) -ida_hexrays.mba_t.final_type (variable) -ida_hexrays.mba_t.find_mop (method) -ida_hexrays.mba_t.for_all_insns (method) -ida_hexrays.mba_t.for_all_ops (method) -ida_hexrays.mba_t.for_all_topinsns (method) -ida_hexrays.mba_t.fpd (variable) -ida_hexrays.mba_t.free_kreg (method) -ida_hexrays.mba_t.frregs (variable) -ida_hexrays.mba_t.frsize (variable) -ida_hexrays.mba_t.fti_flags (variable) -ida_hexrays.mba_t.fullsize (variable) -ida_hexrays.mba_t.generated_asserts (method) -ida_hexrays.mba_t.get_args_region (method) -ida_hexrays.mba_t.get_curfunc (method) -ida_hexrays.mba_t.get_func_output_lists (method) -ida_hexrays.mba_t.get_graph (method) -ida_hexrays.mba_t.get_ida_argloc (method) -ida_hexrays.mba_t.get_lvars_region (method) -ida_hexrays.mba_t.get_mba_flags (method) -ida_hexrays.mba_t.get_mba_flags2 (method) -ida_hexrays.mba_t.get_mblock (method) -ida_hexrays.mba_t.get_shadow_region (method) -ida_hexrays.mba_t.get_stack_region (method) -ida_hexrays.mba_t.get_std_region (method) -ida_hexrays.mba_t.gotoff_stkvars (variable) -ida_hexrays.mba_t.graph_insns (method) -ida_hexrays.mba_t.has_bad_sp (method) -ida_hexrays.mba_t.has_outlines (method) -ida_hexrays.mba_t.has_over_chains (method) -ida_hexrays.mba_t.has_passregs (method) -ida_hexrays.mba_t.has_stack_retval (method) -ida_hexrays.mba_t.idaloc2vd (method) -ida_hexrays.mba_t.idb_spoiled (variable) -ida_hexrays.mba_t.idb_type (variable) -ida_hexrays.mba_t.inargoff (variable) -ida_hexrays.mba_t.insert_block (method) -ida_hexrays.mba_t.is_cdtr (method) -ida_hexrays.mba_t.is_ctr (method) -ida_hexrays.mba_t.is_dtr (method) -ida_hexrays.mba_t.is_pattern (method) -ida_hexrays.mba_t.is_snippet (method) -ida_hexrays.mba_t.is_stkarg (method) -ida_hexrays.mba_t.is_thunk (method) -ida_hexrays.mba_t.label (variable) -ida_hexrays.mba_t.loaded_gdl (method) -ida_hexrays.mba_t.lvar_names_ok (method) -ida_hexrays.mba_t.lvars_allocated (method) -ida_hexrays.mba_t.lvars_renamed (method) -ida_hexrays.mba_t.map_fict_ea (method) -ida_hexrays.mba_t.mark_chains_dirty (method) -ida_hexrays.mba_t.maturity (variable) -ida_hexrays.mba_t.may_refine_rettype (method) -ida_hexrays.mba_t.minargref (variable) -ida_hexrays.mba_t.minstkref (variable) -ida_hexrays.mba_t.minstkref_ea (variable) -ida_hexrays.mba_t.natural (variable) -ida_hexrays.mba_t.nodel_memory (variable) -ida_hexrays.mba_t.npurged (variable) -ida_hexrays.mba_t.optimize_global (method) -ida_hexrays.mba_t.optimize_local (method) -ida_hexrays.mba_t.optimized (method) -ida_hexrays.mba_t.pfn_flags (variable) -ida_hexrays.mba_t.precise_defeas (method) -ida_hexrays.mba_t.prop_complex (method) -ida_hexrays.mba_t.propagated_asserts (method) -ida_hexrays.mba_t.qty (variable) -ida_hexrays.mba_t.really_alloc (method) -ida_hexrays.mba_t.regargs_is_not_aligned (method) -ida_hexrays.mba_t.remove_block (method) -ida_hexrays.mba_t.remove_empty_and_unreachable_blocks (method) -ida_hexrays.mba_t.reqmat (variable) -ida_hexrays.mba_t.retsize (variable) -ida_hexrays.mba_t.returns_fpval (method) -ida_hexrays.mba_t.retvaridx (variable) -ida_hexrays.mba_t.rtype_refined (method) -ida_hexrays.mba_t.save_snapshot (method) -ida_hexrays.mba_t.saverest_done (method) -ida_hexrays.mba_t.serialize (method) -ida_hexrays.mba_t.set_lvar_name (method) -ida_hexrays.mba_t.set_maturity (method) -ida_hexrays.mba_t.set_mba_flags (method) -ida_hexrays.mba_t.set_mba_flags2 (method) -ida_hexrays.mba_t.set_nice_lvar_name (method) -ida_hexrays.mba_t.set_user_lvar_name (method) -ida_hexrays.mba_t.shadow_args (variable) -ida_hexrays.mba_t.short_display (method) -ida_hexrays.mba_t.should_beautify (method) -ida_hexrays.mba_t.show_reduction (method) -ida_hexrays.mba_t.spd_adjust (variable) -ida_hexrays.mba_t.spoiled_list (variable) -ida_hexrays.mba_t.stacksize (variable) -ida_hexrays.mba_t.std_ivls (variable) -ida_hexrays.mba_t.stkoff_ida2vd (method) -ida_hexrays.mba_t.stkoff_vd2ida (method) -ida_hexrays.mba_t.term (method) -ida_hexrays.mba_t.tmpstk_size (variable) -ida_hexrays.mba_t.use_frame (method) -ida_hexrays.mba_t.use_wingraph32 (method) -ida_hexrays.mba_t.valranges_done (method) -ida_hexrays.mba_t.vars (variable) -ida_hexrays.mba_t.vd2idaloc (method) -ida_hexrays.mba_t.verify (method) -ida_hexrays.mba_t.write_to_const_detected (method) -ida_hexrays.mba_t_deserialize (function) -ida_hexrays.mbl_graph_t (class) -ida_hexrays.mbl_graph_t.__init__ (method) -ida_hexrays.mbl_graph_t.get_chain_stamp (method) -ida_hexrays.mbl_graph_t.get_du (method) -ida_hexrays.mbl_graph_t.get_mblock (method) -ida_hexrays.mbl_graph_t.get_ud (method) -ida_hexrays.mbl_graph_t.is_du_chain_dirty (method) -ida_hexrays.mbl_graph_t.is_redefined_globally (method) -ida_hexrays.mbl_graph_t.is_ud_chain_dirty (method) -ida_hexrays.mbl_graph_t.is_used_globally (method) -ida_hexrays.mblock_t (class) -ida_hexrays.mblock_t.__init__ (method) -ida_hexrays.mblock_t._print (method) -ida_hexrays.mblock_t.append_def_list (method) -ida_hexrays.mblock_t.append_use_list (method) -ida_hexrays.mblock_t.build_def_list (method) -ida_hexrays.mblock_t.build_lists (method) -ida_hexrays.mblock_t.build_use_list (method) -ida_hexrays.mblock_t.dead_at_start (variable) -ida_hexrays.mblock_t.dnu (variable) -ida_hexrays.mblock_t.dump (method) -ida_hexrays.mblock_t.dump_block (method) -ida_hexrays.mblock_t.empty (method) -ida_hexrays.mblock_t.end (variable) -ida_hexrays.mblock_t.find_access (method) -ida_hexrays.mblock_t.find_def (method) -ida_hexrays.mblock_t.find_first_use (method) -ida_hexrays.mblock_t.find_redefinition (method) -ida_hexrays.mblock_t.find_use (method) -ida_hexrays.mblock_t.flags (variable) -ida_hexrays.mblock_t.for_all_insns (method) -ida_hexrays.mblock_t.for_all_ops (method) -ida_hexrays.mblock_t.for_all_uses (method) -ida_hexrays.mblock_t.get_reginsn_qty (method) -ida_hexrays.mblock_t.get_valranges (method) -ida_hexrays.mblock_t.head (variable) -ida_hexrays.mblock_t.insert_into_block (method) -ida_hexrays.mblock_t.is_branch (method) -ida_hexrays.mblock_t.is_call_block (method) -ida_hexrays.mblock_t.is_nway (method) -ida_hexrays.mblock_t.is_redefined (method) -ida_hexrays.mblock_t.is_rhs_redefined (method) -ida_hexrays.mblock_t.is_simple_goto_block (method) -ida_hexrays.mblock_t.is_simple_jcnd_block (method) -ida_hexrays.mblock_t.is_unknown_call (method) -ida_hexrays.mblock_t.is_used (method) -ida_hexrays.mblock_t.lists_dirty (method) -ida_hexrays.mblock_t.lists_ready (method) -ida_hexrays.mblock_t.make_lists_ready (method) -ida_hexrays.mblock_t.make_nop (method) -ida_hexrays.mblock_t.mark_lists_dirty (method) -ida_hexrays.mblock_t.maxbsp (variable) -ida_hexrays.mblock_t.maybdef (variable) -ida_hexrays.mblock_t.maybuse (variable) -ida_hexrays.mblock_t.mba (variable) -ida_hexrays.mblock_t.minbargref (variable) -ida_hexrays.mblock_t.minbstkref (variable) -ida_hexrays.mblock_t.mustbdef (variable) -ida_hexrays.mblock_t.mustbuse (variable) -ida_hexrays.mblock_t.needs_propagation (method) -ida_hexrays.mblock_t.nextb (variable) -ida_hexrays.mblock_t.npred (method) -ida_hexrays.mblock_t.nsucc (method) -ida_hexrays.mblock_t.optimize_block (method) -ida_hexrays.mblock_t.optimize_insn (method) -ida_hexrays.mblock_t.optimize_useless_jump (method) -ida_hexrays.mblock_t.pred (method) -ida_hexrays.mblock_t.preds (method) -ida_hexrays.mblock_t.predset (variable) -ida_hexrays.mblock_t.prevb (variable) -ida_hexrays.mblock_t.remove_from_block (method) -ida_hexrays.mblock_t.request_demote64 (method) -ida_hexrays.mblock_t.request_propagation (method) -ida_hexrays.mblock_t.serial (variable) -ida_hexrays.mblock_t.start (variable) -ida_hexrays.mblock_t.succ (method) -ida_hexrays.mblock_t.succs (method) -ida_hexrays.mblock_t.succset (variable) -ida_hexrays.mblock_t.tail (variable) -ida_hexrays.mblock_t.type (variable) -ida_hexrays.mcallarg_t (class) -ida_hexrays.mcallarg_t.__init__ (method) -ida_hexrays.mcallarg_t._print (method) -ida_hexrays.mcallarg_t.argloc (variable) -ida_hexrays.mcallarg_t.copy_mop (method) -ida_hexrays.mcallarg_t.dstr (method) -ida_hexrays.mcallarg_t.ea (variable) -ida_hexrays.mcallarg_t.flags (variable) -ida_hexrays.mcallarg_t.make_int (method) -ida_hexrays.mcallarg_t.make_uint (method) -ida_hexrays.mcallarg_t.name (variable) -ida_hexrays.mcallarg_t.set_regarg (method) -ida_hexrays.mcallarg_t.type (variable) -ida_hexrays.mcallargs_t (class) -ida_hexrays.mcallargs_t.__eq__ (method) -ida_hexrays.mcallargs_t.__getitem__ (method) -ida_hexrays.mcallargs_t.__init__ (method) -ida_hexrays.mcallargs_t.__len__ (method) -ida_hexrays.mcallargs_t.__ne__ (method) -ida_hexrays.mcallargs_t.__setitem__ (method) -ida_hexrays.mcallargs_t._del (method) -ida_hexrays.mcallargs_t.add_unique (method) -ida_hexrays.mcallargs_t.at (method) -ida_hexrays.mcallargs_t.begin (method) -ida_hexrays.mcallargs_t.capacity (method) -ida_hexrays.mcallargs_t.clear (method) -ida_hexrays.mcallargs_t.empty (method) -ida_hexrays.mcallargs_t.end (method) -ida_hexrays.mcallargs_t.erase (method) -ida_hexrays.mcallargs_t.extract (method) -ida_hexrays.mcallargs_t.find (method) -ida_hexrays.mcallargs_t.grow (method) -ida_hexrays.mcallargs_t.has (method) -ida_hexrays.mcallargs_t.inject (method) -ida_hexrays.mcallargs_t.insert (method) -ida_hexrays.mcallargs_t.pop_back (method) -ida_hexrays.mcallargs_t.push_back (method) -ida_hexrays.mcallargs_t.qclear (method) -ida_hexrays.mcallargs_t.reserve (method) -ida_hexrays.mcallargs_t.resize (method) -ida_hexrays.mcallargs_t.size (method) -ida_hexrays.mcallargs_t.swap (method) -ida_hexrays.mcallargs_t.truncate (method) -ida_hexrays.mcallinfo_t (class) -ida_hexrays.mcallinfo_t.__init__ (method) -ida_hexrays.mcallinfo_t._print (method) -ida_hexrays.mcallinfo_t.args (variable) -ida_hexrays.mcallinfo_t.call_spd (variable) -ida_hexrays.mcallinfo_t.callee (variable) -ida_hexrays.mcallinfo_t.cc (variable) -ida_hexrays.mcallinfo_t.dead_regs (variable) -ida_hexrays.mcallinfo_t.dstr (method) -ida_hexrays.mcallinfo_t.flags (variable) -ida_hexrays.mcallinfo_t.fti_attrs (variable) -ida_hexrays.mcallinfo_t.get_type (method) -ida_hexrays.mcallinfo_t.is_vararg (method) -ida_hexrays.mcallinfo_t.lexcompare (method) -ida_hexrays.mcallinfo_t.pass_regs (variable) -ida_hexrays.mcallinfo_t.retregs (variable) -ida_hexrays.mcallinfo_t.return_argloc (variable) -ida_hexrays.mcallinfo_t.return_regs (variable) -ida_hexrays.mcallinfo_t.return_type (variable) -ida_hexrays.mcallinfo_t.role (variable) -ida_hexrays.mcallinfo_t.set_type (method) -ida_hexrays.mcallinfo_t.solid_args (variable) -ida_hexrays.mcallinfo_t.spoiled (variable) -ida_hexrays.mcallinfo_t.stkargs_top (variable) -ida_hexrays.mcallinfo_t.visible_memory (variable) -ida_hexrays.mcases_t (class) -ida_hexrays.mcases_t.__eq__ (method) -ida_hexrays.mcases_t.__ge__ (method) -ida_hexrays.mcases_t.__gt__ (method) -ida_hexrays.mcases_t.__init__ (method) -ida_hexrays.mcases_t.__le__ (method) -ida_hexrays.mcases_t.__lt__ (method) -ida_hexrays.mcases_t.__ne__ (method) -ida_hexrays.mcases_t._print (method) -ida_hexrays.mcases_t.compare (method) -ida_hexrays.mcases_t.dstr (method) -ida_hexrays.mcases_t.empty (method) -ida_hexrays.mcases_t.resize (method) -ida_hexrays.mcases_t.size (method) -ida_hexrays.mcases_t.swap (method) -ida_hexrays.mcases_t.targets (variable) -ida_hexrays.mcases_t.values (variable) -ida_hexrays.mcode_modifies_d (function) -ida_hexrays.microcode_filter_t (class) -ida_hexrays.microcode_filter_t.__disown__ (method) -ida_hexrays.microcode_filter_t.__init__ (method) -ida_hexrays.microcode_filter_t.apply (method) -ida_hexrays.microcode_filter_t.match (method) -ida_hexrays.minsn_t (class) -ida_hexrays.minsn_t.__dbg_get_meminfo (method) -ida_hexrays.minsn_t.__dbg_get_registered_kind (method) -ida_hexrays.minsn_t.__init__ (method) -ida_hexrays.minsn_t.__lt__ (method) -ida_hexrays.minsn_t._acquire_ownership (method) -ida_hexrays.minsn_t._deregister (method) -ida_hexrays.minsn_t._ensure_cond (method) -ida_hexrays.minsn_t._ensure_no_obj (method) -ida_hexrays.minsn_t._ensure_ownership_transferrable (method) -ida_hexrays.minsn_t._make_nop (method) -ida_hexrays.minsn_t._maybe_disown_and_deregister (method) -ida_hexrays.minsn_t._meminfo (method) -ida_hexrays.minsn_t._obj_id (method) -ida_hexrays.minsn_t._own_and_register (method) -ida_hexrays.minsn_t._print (method) -ida_hexrays.minsn_t._register (method) -ida_hexrays.minsn_t.clr_assert (method) -ida_hexrays.minsn_t.clr_combinable (method) -ida_hexrays.minsn_t.clr_combined (method) -ida_hexrays.minsn_t.clr_fpinsn (method) -ida_hexrays.minsn_t.clr_ignlowsrc (method) -ida_hexrays.minsn_t.clr_multimov (method) -ida_hexrays.minsn_t.clr_noret_icall (method) -ida_hexrays.minsn_t.clr_propagatable (method) -ida_hexrays.minsn_t.clr_tailcall (method) -ida_hexrays.minsn_t.contains_call (method) -ida_hexrays.minsn_t.contains_opcode (method) -ida_hexrays.minsn_t.d (variable) -ida_hexrays.minsn_t.deserialize (method) -ida_hexrays.minsn_t.dstr (method) -ida_hexrays.minsn_t.ea (variable) -ida_hexrays.minsn_t.equal_insns (method) -ida_hexrays.minsn_t.find_call (method) -ida_hexrays.minsn_t.find_ins_op (method) -ida_hexrays.minsn_t.find_num_op (method) -ida_hexrays.minsn_t.find_opcode (method) -ida_hexrays.minsn_t.for_all_insns (method) -ida_hexrays.minsn_t.for_all_ops (method) -ida_hexrays.minsn_t.get_role (method) -ida_hexrays.minsn_t.get_split_size (method) -ida_hexrays.minsn_t.has_side_effects (method) -ida_hexrays.minsn_t.iprops (variable) -ida_hexrays.minsn_t.is_after (method) -ida_hexrays.minsn_t.is_alloca (method) -ida_hexrays.minsn_t.is_assert (method) -ida_hexrays.minsn_t.is_between (method) -ida_hexrays.minsn_t.is_bswap (method) -ida_hexrays.minsn_t.is_cleaning_pop (method) -ida_hexrays.minsn_t.is_combinable (method) -ida_hexrays.minsn_t.is_combined (method) -ida_hexrays.minsn_t.is_extstx (method) -ida_hexrays.minsn_t.is_farcall (method) -ida_hexrays.minsn_t.is_fpinsn (method) -ida_hexrays.minsn_t.is_helper (method) -ida_hexrays.minsn_t.is_ignlowsrc (method) -ida_hexrays.minsn_t.is_inverted_jx (method) -ida_hexrays.minsn_t.is_like_move (method) -ida_hexrays.minsn_t.is_mbarrier (method) -ida_hexrays.minsn_t.is_memcpy (method) -ida_hexrays.minsn_t.is_memset (method) -ida_hexrays.minsn_t.is_mov (method) -ida_hexrays.minsn_t.is_multimov (method) -ida_hexrays.minsn_t.is_noret_call (method) -ida_hexrays.minsn_t.is_optional (method) -ida_hexrays.minsn_t.is_persistent (method) -ida_hexrays.minsn_t.is_propagatable (method) -ida_hexrays.minsn_t.is_readflags (method) -ida_hexrays.minsn_t.is_tailcall (method) -ida_hexrays.minsn_t.is_unknown_call (method) -ida_hexrays.minsn_t.is_wild_match (method) -ida_hexrays.minsn_t.l (variable) -ida_hexrays.minsn_t.lexcompare (method) -ida_hexrays.minsn_t.may_use_aliased_memory (method) -ida_hexrays.minsn_t.modifies_d (method) -ida_hexrays.minsn_t.modifies_pair_mop (method) -ida_hexrays.minsn_t.next (variable) -ida_hexrays.minsn_t.opcode (variable) -ida_hexrays.minsn_t.optimize_solo (method) -ida_hexrays.minsn_t.optimize_subtree (method) -ida_hexrays.minsn_t.prev (variable) -ida_hexrays.minsn_t.r (variable) -ida_hexrays.minsn_t.replace_by (method) -ida_hexrays.minsn_t.serialize (method) -ida_hexrays.minsn_t.set_assert (method) -ida_hexrays.minsn_t.set_cleaning_pop (method) -ida_hexrays.minsn_t.set_combinable (method) -ida_hexrays.minsn_t.set_extstx (method) -ida_hexrays.minsn_t.set_farcall (method) -ida_hexrays.minsn_t.set_fpinsn (method) -ida_hexrays.minsn_t.set_ignlowsrc (method) -ida_hexrays.minsn_t.set_inverted_jx (method) -ida_hexrays.minsn_t.set_mbarrier (method) -ida_hexrays.minsn_t.set_multimov (method) -ida_hexrays.minsn_t.set_noret_icall (method) -ida_hexrays.minsn_t.set_optional (method) -ida_hexrays.minsn_t.set_persistent (method) -ida_hexrays.minsn_t.set_split_size (method) -ida_hexrays.minsn_t.set_tailcall (method) -ida_hexrays.minsn_t.set_unmerged (method) -ida_hexrays.minsn_t.set_wild_match (method) -ida_hexrays.minsn_t.setaddr (method) -ida_hexrays.minsn_t.swap (method) -ida_hexrays.minsn_t.was_noret_icall (method) -ida_hexrays.minsn_t.was_split (method) -ida_hexrays.minsn_t.was_unmerged (method) -ida_hexrays.minsn_visitor_t (class) -ida_hexrays.minsn_visitor_t.__disown__ (method) -ida_hexrays.minsn_visitor_t.__init__ (method) -ida_hexrays.minsn_visitor_t.visit_minsn (method) -ida_hexrays.mlist_mop_visitor_t (class) -ida_hexrays.mlist_mop_visitor_t.__disown__ (method) -ida_hexrays.mlist_mop_visitor_t.__init__ (method) -ida_hexrays.mlist_mop_visitor_t.visit_mop (method) -ida_hexrays.mlist_t (class) -ida_hexrays.mlist_t.__eq__ (method) -ida_hexrays.mlist_t.__ge__ (method) -ida_hexrays.mlist_t.__gt__ (method) -ida_hexrays.mlist_t.__init__ (method) -ida_hexrays.mlist_t.__le__ (method) -ida_hexrays.mlist_t.__lt__ (method) -ida_hexrays.mlist_t.__ne__ (method) -ida_hexrays.mlist_t._print (method) -ida_hexrays.mlist_t.add (method) -ida_hexrays.mlist_t.addmem (method) -ida_hexrays.mlist_t.clear (method) -ida_hexrays.mlist_t.compare (method) -ida_hexrays.mlist_t.count (method) -ida_hexrays.mlist_t.dstr (method) -ida_hexrays.mlist_t.empty (method) -ida_hexrays.mlist_t.has (method) -ida_hexrays.mlist_t.has_all (method) -ida_hexrays.mlist_t.has_any (method) -ida_hexrays.mlist_t.has_common (method) -ida_hexrays.mlist_t.has_memory (method) -ida_hexrays.mlist_t.includes (method) -ida_hexrays.mlist_t.intersect (method) -ida_hexrays.mlist_t.is_subset_of (method) -ida_hexrays.mlist_t.sub (method) -ida_hexrays.mlist_t.swap (method) -ida_hexrays.mnumber_t (class) -ida_hexrays.mnumber_t.__eq__ (method) -ida_hexrays.mnumber_t.__ge__ (method) -ida_hexrays.mnumber_t.__gt__ (method) -ida_hexrays.mnumber_t.__init__ (method) -ida_hexrays.mnumber_t.__le__ (method) -ida_hexrays.mnumber_t.__lt__ (method) -ida_hexrays.mnumber_t.__ne__ (method) -ida_hexrays.mnumber_t.compare (method) -ida_hexrays.mnumber_t.update_value (method) -ida_hexrays.modify_user_lvar_info (function) -ida_hexrays.modify_user_lvars (function) -ida_hexrays.mop_S (variable) -ida_hexrays.mop_addr_t (class) -ida_hexrays.mop_addr_t.__init__ (method) -ida_hexrays.mop_addr_t.lexcompare (method) -ida_hexrays.mop_b (variable) -ida_hexrays.mop_c (variable) -ida_hexrays.mop_d (variable) -ida_hexrays.mop_f (variable) -ida_hexrays.mop_fn (variable) -ida_hexrays.mop_h (variable) -ida_hexrays.mop_l (variable) -ida_hexrays.mop_n (variable) -ida_hexrays.mop_p (variable) -ida_hexrays.mop_pair_t (class) -ida_hexrays.mop_pair_t.__init__ (method) -ida_hexrays.mop_pair_t.hop (variable) -ida_hexrays.mop_pair_t.lop (variable) -ida_hexrays.mop_r (variable) -ida_hexrays.mop_sc (variable) -ida_hexrays.mop_str (variable) -ida_hexrays.mop_t (class) -ida_hexrays.mop_t.__dbg_get_meminfo (method) -ida_hexrays.mop_t.__dbg_get_registered_kind (method) -ida_hexrays.mop_t.__eq__ (method) -ida_hexrays.mop_t.__init__ (method) -ida_hexrays.mop_t.__lt__ (method) -ida_hexrays.mop_t.__ne__ (method) -ida_hexrays.mop_t._acquire_ownership (method) -ida_hexrays.mop_t._deregister (method) -ida_hexrays.mop_t._ensure_cond (method) -ida_hexrays.mop_t._ensure_no_obj (method) -ida_hexrays.mop_t._ensure_no_t (method) -ida_hexrays.mop_t._ensure_ownership_transferrable (method) -ida_hexrays.mop_t._get_a (method) -ida_hexrays.mop_t._get_b (method) -ida_hexrays.mop_t._get_c (method) -ida_hexrays.mop_t._get_cstr (method) -ida_hexrays.mop_t._get_d (method) -ida_hexrays.mop_t._get_f (method) -ida_hexrays.mop_t._get_fpc (method) -ida_hexrays.mop_t._get_g (method) -ida_hexrays.mop_t._get_helper (method) -ida_hexrays.mop_t._get_l (method) -ida_hexrays.mop_t._get_nnn (method) -ida_hexrays.mop_t._get_pair (method) -ida_hexrays.mop_t._get_r (method) -ida_hexrays.mop_t._get_s (method) -ida_hexrays.mop_t._get_scif (method) -ida_hexrays.mop_t._get_t (method) -ida_hexrays.mop_t._make_blkref (method) -ida_hexrays.mop_t._make_callinfo (method) -ida_hexrays.mop_t._make_cases (method) -ida_hexrays.mop_t._make_gvar (method) -ida_hexrays.mop_t._make_insn (method) -ida_hexrays.mop_t._make_lvar (method) -ida_hexrays.mop_t._make_pair (method) -ida_hexrays.mop_t._make_reg (method) -ida_hexrays.mop_t._make_stkvar (method) -ida_hexrays.mop_t._make_strlit (method) -ida_hexrays.mop_t._maybe_disown_and_deregister (method) -ida_hexrays.mop_t._meminfo (method) -ida_hexrays.mop_t._obj_id (method) -ida_hexrays.mop_t._own_and_register (method) -ida_hexrays.mop_t._print (method) -ida_hexrays.mop_t._register (method) -ida_hexrays.mop_t._set_a (method) -ida_hexrays.mop_t._set_b (method) -ida_hexrays.mop_t._set_c (method) -ida_hexrays.mop_t._set_cstr (method) -ida_hexrays.mop_t._set_d (method) -ida_hexrays.mop_t._set_f (method) -ida_hexrays.mop_t._set_fpc (method) -ida_hexrays.mop_t._set_g (method) -ida_hexrays.mop_t._set_helper (method) -ida_hexrays.mop_t._set_l (method) -ida_hexrays.mop_t._set_nnn (method) -ida_hexrays.mop_t._set_pair (method) -ida_hexrays.mop_t._set_r (method) -ida_hexrays.mop_t._set_s (method) -ida_hexrays.mop_t._set_scif (method) -ida_hexrays.mop_t._set_t (method) -ida_hexrays.mop_t.apply_ld_mcode (method) -ida_hexrays.mop_t.apply_xds (method) -ida_hexrays.mop_t.apply_xdu (method) -ida_hexrays.mop_t.assign (method) -ida_hexrays.mop_t.change_size (method) -ida_hexrays.mop_t.create_from_insn (method) -ida_hexrays.mop_t.create_from_ivlset (method) -ida_hexrays.mop_t.create_from_mlist (method) -ida_hexrays.mop_t.create_from_scattered_vdloc (method) -ida_hexrays.mop_t.create_from_vdloc (method) -ida_hexrays.mop_t.double_size (method) -ida_hexrays.mop_t.dstr (method) -ida_hexrays.mop_t.empty (method) -ida_hexrays.mop_t.equal_mops (method) -ida_hexrays.mop_t.erase (method) -ida_hexrays.mop_t.erase_but_keep_size (method) -ida_hexrays.mop_t.for_all_ops (method) -ida_hexrays.mop_t.for_all_scattered_submops (method) -ida_hexrays.mop_t.get_insn (method) -ida_hexrays.mop_t.get_stkoff (method) -ida_hexrays.mop_t.get_stkvar (method) -ida_hexrays.mop_t.has_side_effects (method) -ida_hexrays.mop_t.is01 (method) -ida_hexrays.mop_t.is_arglist (method) -ida_hexrays.mop_t.is_bit_reg (method) -ida_hexrays.mop_t.is_cc (method) -ida_hexrays.mop_t.is_ccflags (method) -ida_hexrays.mop_t.is_constant (method) -ida_hexrays.mop_t.is_equal_to (method) -ida_hexrays.mop_t.is_extended_from (method) -ida_hexrays.mop_t.is_glbaddr (method) -ida_hexrays.mop_t.is_glbaddr_from_fixup (method) -ida_hexrays.mop_t.is_impptr_done (method) -ida_hexrays.mop_t.is_insn (method) -ida_hexrays.mop_t.is_kreg (method) -ida_hexrays.mop_t.is_lowaddr (method) -ida_hexrays.mop_t.is_mob (method) -ida_hexrays.mop_t.is_negative_constant (method) -ida_hexrays.mop_t.is_one (method) -ida_hexrays.mop_t.is_pcval (method) -ida_hexrays.mop_t.is_positive_constant (method) -ida_hexrays.mop_t.is_reg (method) -ida_hexrays.mop_t.is_scattered (method) -ida_hexrays.mop_t.is_sign_extended_from (method) -ida_hexrays.mop_t.is_stkaddr (method) -ida_hexrays.mop_t.is_udt (method) -ida_hexrays.mop_t.is_undef_val (method) -ida_hexrays.mop_t.is_zero (method) -ida_hexrays.mop_t.is_zero_extended_from (method) -ida_hexrays.mop_t.lexcompare (method) -ida_hexrays.mop_t.make_blkref (method) -ida_hexrays.mop_t.make_first_half (method) -ida_hexrays.mop_t.make_fpnum (method) -ida_hexrays.mop_t.make_gvar (method) -ida_hexrays.mop_t.make_helper (method) -ida_hexrays.mop_t.make_high_half (method) -ida_hexrays.mop_t.make_insn (method) -ida_hexrays.mop_t.make_low_half (method) -ida_hexrays.mop_t.make_number (method) -ida_hexrays.mop_t.make_reg (method) -ida_hexrays.mop_t.make_reg_pair (method) -ida_hexrays.mop_t.make_second_half (method) -ida_hexrays.mop_t.make_stkvar (method) -ida_hexrays.mop_t.may_use_aliased_memory (method) -ida_hexrays.mop_t.oprops (variable) -ida_hexrays.mop_t.preserve_side_effects (method) -ida_hexrays.mop_t.probably_floating (method) -ida_hexrays.mop_t.replace_by (method) -ida_hexrays.mop_t.set_impptr_done (method) -ida_hexrays.mop_t.set_lowaddr (method) -ida_hexrays.mop_t.set_udt (method) -ida_hexrays.mop_t.set_undef_val (method) -ida_hexrays.mop_t.shift_mop (method) -ida_hexrays.mop_t.signed_value (method) -ida_hexrays.mop_t.size (variable) -ida_hexrays.mop_t.swap (method) -ida_hexrays.mop_t.t (variable) -ida_hexrays.mop_t.unsigned_value (method) -ida_hexrays.mop_t.update_numop_value (method) -ida_hexrays.mop_t.valnum (variable) -ida_hexrays.mop_t.value (method) -ida_hexrays.mop_t.zero (method) -ida_hexrays.mop_v (variable) -ida_hexrays.mop_visitor_t (class) -ida_hexrays.mop_visitor_t.__disown__ (method) -ida_hexrays.mop_visitor_t.__init__ (method) -ida_hexrays.mop_visitor_t.prune (variable) -ida_hexrays.mop_visitor_t.visit_mop (method) -ida_hexrays.mop_z (variable) -ida_hexrays.mopvec_t (class) -ida_hexrays.mopvec_t.__eq__ (method) -ida_hexrays.mopvec_t.__getitem__ (method) -ida_hexrays.mopvec_t.__init__ (method) -ida_hexrays.mopvec_t.__len__ (method) -ida_hexrays.mopvec_t.__ne__ (method) -ida_hexrays.mopvec_t.__setitem__ (method) -ida_hexrays.mopvec_t._del (method) -ida_hexrays.mopvec_t.add_unique (method) -ida_hexrays.mopvec_t.at (method) -ida_hexrays.mopvec_t.begin (method) -ida_hexrays.mopvec_t.capacity (method) -ida_hexrays.mopvec_t.clear (method) -ida_hexrays.mopvec_t.empty (method) -ida_hexrays.mopvec_t.end (method) -ida_hexrays.mopvec_t.erase (method) -ida_hexrays.mopvec_t.extract (method) -ida_hexrays.mopvec_t.find (method) -ida_hexrays.mopvec_t.grow (method) -ida_hexrays.mopvec_t.has (method) -ida_hexrays.mopvec_t.inject (method) -ida_hexrays.mopvec_t.insert (method) -ida_hexrays.mopvec_t.pop_back (method) -ida_hexrays.mopvec_t.push_back (method) -ida_hexrays.mopvec_t.qclear (method) -ida_hexrays.mopvec_t.reserve (method) -ida_hexrays.mopvec_t.resize (method) -ida_hexrays.mopvec_t.size (method) -ida_hexrays.mopvec_t.swap (method) -ida_hexrays.mopvec_t.truncate (method) -ida_hexrays.mreg2reg (function) -ida_hexrays.must_mcode_close_block (function) -ida_hexrays.negate_mcode_relation (function) -ida_hexrays.negated_relation (function) -ida_hexrays.new_block (function) -ida_hexrays.number_format_t (class) -ida_hexrays.number_format_t.__init__ (method) -ida_hexrays.number_format_t.flags (variable) -ida_hexrays.number_format_t.flags32 (variable) -ida_hexrays.number_format_t.get_radix (method) -ida_hexrays.number_format_t.has_unmutable_type (method) -ida_hexrays.number_format_t.is_char (method) -ida_hexrays.number_format_t.is_dec (method) -ida_hexrays.number_format_t.is_enum (method) -ida_hexrays.number_format_t.is_fixed (method) -ida_hexrays.number_format_t.is_hex (method) -ida_hexrays.number_format_t.is_numop (method) -ida_hexrays.number_format_t.is_oct (method) -ida_hexrays.number_format_t.is_stroff (method) -ida_hexrays.number_format_t.needs_to_be_inverted (method) -ida_hexrays.number_format_t.opnum (variable) -ida_hexrays.number_format_t.org_nbytes (variable) -ida_hexrays.number_format_t.serial (variable) -ida_hexrays.number_format_t.type_name (variable) -ida_hexrays.op_parent_info_t (class) -ida_hexrays.op_parent_info_t.__init__ (method) -ida_hexrays.op_uses_x (function) -ida_hexrays.op_uses_y (function) -ida_hexrays.op_uses_z (function) -ida_hexrays.open_pseudocode (function) -ida_hexrays.operand_locator_t (class) -ida_hexrays.operand_locator_t.__eq__ (method) -ida_hexrays.operand_locator_t.__ge__ (method) -ida_hexrays.operand_locator_t.__gt__ (method) -ida_hexrays.operand_locator_t.__init__ (method) -ida_hexrays.operand_locator_t.__le__ (method) -ida_hexrays.operand_locator_t.__lt__ (method) -ida_hexrays.operand_locator_t.__ne__ (method) -ida_hexrays.operand_locator_t.compare (method) -ida_hexrays.operand_locator_t.ea (variable) -ida_hexrays.operand_locator_t.opnum (variable) -ida_hexrays.optblock_t (class) -ida_hexrays.optblock_t.__disown__ (method) -ida_hexrays.optblock_t.__init__ (method) -ida_hexrays.optblock_t.func (method) -ida_hexrays.optblock_t.install (method) -ida_hexrays.optblock_t.remove (method) -ida_hexrays.optinsn_t (class) -ida_hexrays.optinsn_t.__disown__ (method) -ida_hexrays.optinsn_t.__init__ (method) -ida_hexrays.optinsn_t.func (method) -ida_hexrays.optinsn_t.install (method) -ida_hexrays.optinsn_t.remove (method) -ida_hexrays.parse_user_call (function) -ida_hexrays.partial_type_num (function) -ida_hexrays.print_vdloc (function) -ida_hexrays.property_op_to_typename (function) -ida_hexrays.qstring_printer_t (class) -ida_hexrays.qstring_printer_t.__init__ (method) -ida_hexrays.qstring_printer_t._print (method) -ida_hexrays.qstring_printer_t.get_s (method) -ida_hexrays.qstring_printer_t.s (variable) -ida_hexrays.qstring_printer_t.with_tags (variable) -ida_hexrays.qswap (function) -ida_hexrays.qvector_carg_t (class) -ida_hexrays.qvector_carg_t.__eq__ (method) -ida_hexrays.qvector_carg_t.__getitem__ (method) -ida_hexrays.qvector_carg_t.__init__ (method) -ida_hexrays.qvector_carg_t.__len__ (method) -ida_hexrays.qvector_carg_t.__ne__ (method) -ida_hexrays.qvector_carg_t.__setitem__ (method) -ida_hexrays.qvector_carg_t._del (method) -ida_hexrays.qvector_carg_t.add_unique (method) -ida_hexrays.qvector_carg_t.at (method) -ida_hexrays.qvector_carg_t.begin (method) -ida_hexrays.qvector_carg_t.capacity (method) -ida_hexrays.qvector_carg_t.clear (method) -ida_hexrays.qvector_carg_t.empty (method) -ida_hexrays.qvector_carg_t.end (method) -ida_hexrays.qvector_carg_t.erase (method) -ida_hexrays.qvector_carg_t.extract (method) -ida_hexrays.qvector_carg_t.find (method) -ida_hexrays.qvector_carg_t.grow (method) -ida_hexrays.qvector_carg_t.has (method) -ida_hexrays.qvector_carg_t.inject (method) -ida_hexrays.qvector_carg_t.insert (method) -ida_hexrays.qvector_carg_t.pop_back (method) -ida_hexrays.qvector_carg_t.push_back (method) -ida_hexrays.qvector_carg_t.qclear (method) -ida_hexrays.qvector_carg_t.reserve (method) -ida_hexrays.qvector_carg_t.resize (method) -ida_hexrays.qvector_carg_t.size (method) -ida_hexrays.qvector_carg_t.swap (method) -ida_hexrays.qvector_carg_t.truncate (method) -ida_hexrays.qvector_ccase_t (class) -ida_hexrays.qvector_ccase_t.__eq__ (method) -ida_hexrays.qvector_ccase_t.__getitem__ (method) -ida_hexrays.qvector_ccase_t.__init__ (method) -ida_hexrays.qvector_ccase_t.__len__ (method) -ida_hexrays.qvector_ccase_t.__ne__ (method) -ida_hexrays.qvector_ccase_t.__setitem__ (method) -ida_hexrays.qvector_ccase_t._del (method) -ida_hexrays.qvector_ccase_t.add_unique (method) -ida_hexrays.qvector_ccase_t.at (method) -ida_hexrays.qvector_ccase_t.begin (method) -ida_hexrays.qvector_ccase_t.capacity (method) -ida_hexrays.qvector_ccase_t.clear (method) -ida_hexrays.qvector_ccase_t.empty (method) -ida_hexrays.qvector_ccase_t.end (method) -ida_hexrays.qvector_ccase_t.erase (method) -ida_hexrays.qvector_ccase_t.extract (method) -ida_hexrays.qvector_ccase_t.find (method) -ida_hexrays.qvector_ccase_t.grow (method) -ida_hexrays.qvector_ccase_t.has (method) -ida_hexrays.qvector_ccase_t.inject (method) -ida_hexrays.qvector_ccase_t.insert (method) -ida_hexrays.qvector_ccase_t.pop_back (method) -ida_hexrays.qvector_ccase_t.push_back (method) -ida_hexrays.qvector_ccase_t.qclear (method) -ida_hexrays.qvector_ccase_t.reserve (method) -ida_hexrays.qvector_ccase_t.resize (method) -ida_hexrays.qvector_ccase_t.size (method) -ida_hexrays.qvector_ccase_t.swap (method) -ida_hexrays.qvector_ccase_t.truncate (method) -ida_hexrays.qvector_history_t (class) -ida_hexrays.qvector_history_t.__eq__ (method) -ida_hexrays.qvector_history_t.__getitem__ (method) -ida_hexrays.qvector_history_t.__init__ (method) -ida_hexrays.qvector_history_t.__len__ (method) -ida_hexrays.qvector_history_t.__ne__ (method) -ida_hexrays.qvector_history_t.__setitem__ (method) -ida_hexrays.qvector_history_t._del (method) -ida_hexrays.qvector_history_t.add_unique (method) -ida_hexrays.qvector_history_t.at (method) -ida_hexrays.qvector_history_t.begin (method) -ida_hexrays.qvector_history_t.capacity (method) -ida_hexrays.qvector_history_t.clear (method) -ida_hexrays.qvector_history_t.empty (method) -ida_hexrays.qvector_history_t.end (method) -ida_hexrays.qvector_history_t.erase (method) -ida_hexrays.qvector_history_t.extract (method) -ida_hexrays.qvector_history_t.find (method) -ida_hexrays.qvector_history_t.grow (method) -ida_hexrays.qvector_history_t.has (method) -ida_hexrays.qvector_history_t.inject (method) -ida_hexrays.qvector_history_t.insert (method) -ida_hexrays.qvector_history_t.pop_back (method) -ida_hexrays.qvector_history_t.push_back (method) -ida_hexrays.qvector_history_t.qclear (method) -ida_hexrays.qvector_history_t.reserve (method) -ida_hexrays.qvector_history_t.resize (method) -ida_hexrays.qvector_history_t.size (method) -ida_hexrays.qvector_history_t.swap (method) -ida_hexrays.qvector_history_t.truncate (method) -ida_hexrays.qvector_lvar_t (class) -ida_hexrays.qvector_lvar_t.__eq__ (method) -ida_hexrays.qvector_lvar_t.__getitem__ (method) -ida_hexrays.qvector_lvar_t.__init__ (method) -ida_hexrays.qvector_lvar_t.__len__ (method) -ida_hexrays.qvector_lvar_t.__ne__ (method) -ida_hexrays.qvector_lvar_t.__setitem__ (method) -ida_hexrays.qvector_lvar_t._del (method) -ida_hexrays.qvector_lvar_t.add_unique (method) -ida_hexrays.qvector_lvar_t.at (method) -ida_hexrays.qvector_lvar_t.begin (method) -ida_hexrays.qvector_lvar_t.capacity (method) -ida_hexrays.qvector_lvar_t.clear (method) -ida_hexrays.qvector_lvar_t.empty (method) -ida_hexrays.qvector_lvar_t.end (method) -ida_hexrays.qvector_lvar_t.erase (method) -ida_hexrays.qvector_lvar_t.extract (method) -ida_hexrays.qvector_lvar_t.find (method) -ida_hexrays.qvector_lvar_t.grow (method) -ida_hexrays.qvector_lvar_t.has (method) -ida_hexrays.qvector_lvar_t.inject (method) -ida_hexrays.qvector_lvar_t.insert (method) -ida_hexrays.qvector_lvar_t.pop_back (method) -ida_hexrays.qvector_lvar_t.push_back (method) -ida_hexrays.qvector_lvar_t.qclear (method) -ida_hexrays.qvector_lvar_t.reserve (method) -ida_hexrays.qvector_lvar_t.resize (method) -ida_hexrays.qvector_lvar_t.size (method) -ida_hexrays.qvector_lvar_t.swap (method) -ida_hexrays.qvector_lvar_t.truncate (method) -ida_hexrays.reg2mreg (function) -ida_hexrays.remitem (function) -ida_hexrays.remove_hexrays_callback (function) -ida_hexrays.rename_lvar (function) -ida_hexrays.restore_user_cmts (function) -ida_hexrays.restore_user_defined_calls (function) -ida_hexrays.restore_user_iflags (function) -ida_hexrays.restore_user_labels (function) -ida_hexrays.restore_user_labels2 (function) -ida_hexrays.restore_user_lvar_settings (function) -ida_hexrays.restore_user_numforms (function) -ida_hexrays.restore_user_unions (function) -ida_hexrays.rlist_t (class) -ida_hexrays.rlist_t.__init__ (method) -ida_hexrays.rlist_t.dstr (method) -ida_hexrays.save_user_cmts (function) -ida_hexrays.save_user_defined_calls (function) -ida_hexrays.save_user_iflags (function) -ida_hexrays.save_user_labels (function) -ida_hexrays.save_user_labels2 (function) -ida_hexrays.save_user_lvar_settings (function) -ida_hexrays.save_user_numforms (function) -ida_hexrays.save_user_unions (function) -ida_hexrays.scif_t (class) -ida_hexrays.scif_t.__init__ (method) -ida_hexrays.scif_t.mba (variable) -ida_hexrays.scif_t.name (variable) -ida_hexrays.scif_t.type (variable) -ida_hexrays.scif_visitor_t (class) -ida_hexrays.scif_visitor_t.__disown__ (method) -ida_hexrays.scif_visitor_t.__init__ (method) -ida_hexrays.scif_visitor_t.visit_scif_mop (method) -ida_hexrays.select_udt_by_offset (function) -ida_hexrays.send_database (function) -ida_hexrays.set2jcnd (function) -ida_hexrays.set_type (function) -ida_hexrays.simple_graph_t (class) -ida_hexrays.simple_graph_t.__init__ (method) -ida_hexrays.stkvar_ref_t (class) -ida_hexrays.stkvar_ref_t.__eq__ (method) -ida_hexrays.stkvar_ref_t.__ge__ (method) -ida_hexrays.stkvar_ref_t.__gt__ (method) -ida_hexrays.stkvar_ref_t.__init__ (method) -ida_hexrays.stkvar_ref_t.__le__ (method) -ida_hexrays.stkvar_ref_t.__lt__ (method) -ida_hexrays.stkvar_ref_t.__ne__ (method) -ida_hexrays.stkvar_ref_t.compare (method) -ida_hexrays.stkvar_ref_t.get_stkvar (method) -ida_hexrays.stkvar_ref_t.mba (variable) -ida_hexrays.stkvar_ref_t.off (variable) -ida_hexrays.stkvar_ref_t.swap (method) -ida_hexrays.swap_mcode_relation (function) -ida_hexrays.swapped_relation (function) -ida_hexrays.term_hexrays_plugin (function) -ida_hexrays.treeloc_t (class) -ida_hexrays.treeloc_t.__eq__ (method) -ida_hexrays.treeloc_t.__init__ (method) -ida_hexrays.treeloc_t.__lt__ (method) -ida_hexrays.udc_filter_t (class) -ida_hexrays.udc_filter_t.__disown__ (method) -ida_hexrays.udc_filter_t.__init__ (method) -ida_hexrays.udc_filter_t.apply (method) -ida_hexrays.udc_filter_t.cleanup (method) -ida_hexrays.udc_filter_t.empty (method) -ida_hexrays.udc_filter_t.init (method) -ida_hexrays.udc_filter_t.install (method) -ida_hexrays.udc_filter_t.match (method) -ida_hexrays.udc_filter_t.remove (method) -ida_hexrays.udcall_map_begin (function) -ida_hexrays.udcall_map_clear (function) -ida_hexrays.udcall_map_end (function) -ida_hexrays.udcall_map_erase (function) -ida_hexrays.udcall_map_find (function) -ida_hexrays.udcall_map_first (function) -ida_hexrays.udcall_map_free (function) -ida_hexrays.udcall_map_insert (function) -ida_hexrays.udcall_map_iterator_t (class) -ida_hexrays.udcall_map_iterator_t.__eq__ (method) -ida_hexrays.udcall_map_iterator_t.__init__ (method) -ida_hexrays.udcall_map_iterator_t.__ne__ (method) -ida_hexrays.udcall_map_new (function) -ida_hexrays.udcall_map_next (function) -ida_hexrays.udcall_map_prev (function) -ida_hexrays.udcall_map_second (function) -ida_hexrays.udcall_map_size (function) -ida_hexrays.udcall_t (class) -ida_hexrays.udcall_t.__eq__ (method) -ida_hexrays.udcall_t.__ge__ (method) -ida_hexrays.udcall_t.__gt__ (method) -ida_hexrays.udcall_t.__init__ (method) -ida_hexrays.udcall_t.__le__ (method) -ida_hexrays.udcall_t.__lt__ (method) -ida_hexrays.udcall_t.__ne__ (method) -ida_hexrays.udcall_t.compare (method) -ida_hexrays.udcall_t.empty (method) -ida_hexrays.ui_stroff_applicator_t (class) -ida_hexrays.ui_stroff_applicator_t.__disown__ (method) -ida_hexrays.ui_stroff_applicator_t.__init__ (method) -ida_hexrays.ui_stroff_applicator_t.apply (method) -ida_hexrays.ui_stroff_op_t (class) -ida_hexrays.ui_stroff_op_t.__eq__ (method) -ida_hexrays.ui_stroff_op_t.__init__ (method) -ida_hexrays.ui_stroff_op_t.__ne__ (method) -ida_hexrays.ui_stroff_op_t.offset (variable) -ida_hexrays.ui_stroff_op_t.text (variable) -ida_hexrays.ui_stroff_ops_t (class) -ida_hexrays.ui_stroff_ops_t.__eq__ (method) -ida_hexrays.ui_stroff_ops_t.__getitem__ (method) -ida_hexrays.ui_stroff_ops_t.__init__ (method) -ida_hexrays.ui_stroff_ops_t.__len__ (method) -ida_hexrays.ui_stroff_ops_t.__ne__ (method) -ida_hexrays.ui_stroff_ops_t.__setitem__ (method) -ida_hexrays.ui_stroff_ops_t._del (method) -ida_hexrays.ui_stroff_ops_t.add_unique (method) -ida_hexrays.ui_stroff_ops_t.at (method) -ida_hexrays.ui_stroff_ops_t.begin (method) -ida_hexrays.ui_stroff_ops_t.capacity (method) -ida_hexrays.ui_stroff_ops_t.clear (method) -ida_hexrays.ui_stroff_ops_t.empty (method) -ida_hexrays.ui_stroff_ops_t.end (method) -ida_hexrays.ui_stroff_ops_t.erase (method) -ida_hexrays.ui_stroff_ops_t.extract (method) -ida_hexrays.ui_stroff_ops_t.find (method) -ida_hexrays.ui_stroff_ops_t.grow (method) -ida_hexrays.ui_stroff_ops_t.has (method) -ida_hexrays.ui_stroff_ops_t.inject (method) -ida_hexrays.ui_stroff_ops_t.insert (method) -ida_hexrays.ui_stroff_ops_t.pop_back (method) -ida_hexrays.ui_stroff_ops_t.push_back (method) -ida_hexrays.ui_stroff_ops_t.qclear (method) -ida_hexrays.ui_stroff_ops_t.reserve (method) -ida_hexrays.ui_stroff_ops_t.resize (method) -ida_hexrays.ui_stroff_ops_t.size (method) -ida_hexrays.ui_stroff_ops_t.swap (method) -ida_hexrays.ui_stroff_ops_t.truncate (method) -ida_hexrays.user_cmts_begin (function) -ida_hexrays.user_cmts_clear (function) -ida_hexrays.user_cmts_end (function) -ida_hexrays.user_cmts_erase (function) -ida_hexrays.user_cmts_find (function) -ida_hexrays.user_cmts_first (function) -ida_hexrays.user_cmts_free (function) -ida_hexrays.user_cmts_insert (function) -ida_hexrays.user_cmts_iterator_t (class) -ida_hexrays.user_cmts_iterator_t.__eq__ (method) -ida_hexrays.user_cmts_iterator_t.__init__ (method) -ida_hexrays.user_cmts_iterator_t.__ne__ (method) -ida_hexrays.user_cmts_new (function) -ida_hexrays.user_cmts_next (function) -ida_hexrays.user_cmts_prev (function) -ida_hexrays.user_cmts_second (function) -ida_hexrays.user_cmts_size (function) -ida_hexrays.user_cmts_t (class) -ida_hexrays.user_cmts_t.__init__ (method) -ida_hexrays.user_cmts_t.at (method) -ida_hexrays.user_cmts_t.size (method) -ida_hexrays.user_iflags_begin (function) -ida_hexrays.user_iflags_clear (function) -ida_hexrays.user_iflags_end (function) -ida_hexrays.user_iflags_erase (function) -ida_hexrays.user_iflags_find (function) -ida_hexrays.user_iflags_first (function) -ida_hexrays.user_iflags_free (function) -ida_hexrays.user_iflags_insert (function) -ida_hexrays.user_iflags_iterator_t (class) -ida_hexrays.user_iflags_iterator_t.__eq__ (method) -ida_hexrays.user_iflags_iterator_t.__init__ (method) -ida_hexrays.user_iflags_iterator_t.__ne__ (method) -ida_hexrays.user_iflags_new (function) -ida_hexrays.user_iflags_next (function) -ida_hexrays.user_iflags_prev (function) -ida_hexrays.user_iflags_second (function) -ida_hexrays.user_iflags_size (function) -ida_hexrays.user_iflags_t (class) -ida_hexrays.user_iflags_t.__init__ (method) -ida_hexrays.user_iflags_t.at (method) -ida_hexrays.user_iflags_t.size (method) -ida_hexrays.user_labels_begin (function) -ida_hexrays.user_labels_clear (function) -ida_hexrays.user_labels_end (function) -ida_hexrays.user_labels_erase (function) -ida_hexrays.user_labels_find (function) -ida_hexrays.user_labels_first (function) -ida_hexrays.user_labels_free (function) -ida_hexrays.user_labels_insert (function) -ida_hexrays.user_labels_iterator_t (class) -ida_hexrays.user_labels_iterator_t.__eq__ (method) -ida_hexrays.user_labels_iterator_t.__init__ (method) -ida_hexrays.user_labels_iterator_t.__ne__ (method) -ida_hexrays.user_labels_new (function) -ida_hexrays.user_labels_next (function) -ida_hexrays.user_labels_prev (function) -ida_hexrays.user_labels_second (function) -ida_hexrays.user_labels_size (function) -ida_hexrays.user_labels_t (class) -ida_hexrays.user_labels_t.__init__ (method) -ida_hexrays.user_labels_t.at (method) -ida_hexrays.user_labels_t.size (method) -ida_hexrays.user_lvar_modifier_t (class) -ida_hexrays.user_lvar_modifier_t.__disown__ (method) -ida_hexrays.user_lvar_modifier_t.__init__ (method) -ida_hexrays.user_lvar_modifier_t.modify_lvars (method) -ida_hexrays.user_numforms_begin (function) -ida_hexrays.user_numforms_clear (function) -ida_hexrays.user_numforms_end (function) -ida_hexrays.user_numforms_erase (function) -ida_hexrays.user_numforms_find (function) -ida_hexrays.user_numforms_first (function) -ida_hexrays.user_numforms_free (function) -ida_hexrays.user_numforms_insert (function) -ida_hexrays.user_numforms_iterator_t (class) -ida_hexrays.user_numforms_iterator_t.__eq__ (method) -ida_hexrays.user_numforms_iterator_t.__init__ (method) -ida_hexrays.user_numforms_iterator_t.__ne__ (method) -ida_hexrays.user_numforms_new (function) -ida_hexrays.user_numforms_next (function) -ida_hexrays.user_numforms_prev (function) -ida_hexrays.user_numforms_second (function) -ida_hexrays.user_numforms_size (function) -ida_hexrays.user_numforms_t (class) -ida_hexrays.user_numforms_t.__init__ (method) -ida_hexrays.user_numforms_t.at (method) -ida_hexrays.user_numforms_t.size (method) -ida_hexrays.user_unions_begin (function) -ida_hexrays.user_unions_clear (function) -ida_hexrays.user_unions_end (function) -ida_hexrays.user_unions_erase (function) -ida_hexrays.user_unions_find (function) -ida_hexrays.user_unions_first (function) -ida_hexrays.user_unions_free (function) -ida_hexrays.user_unions_insert (function) -ida_hexrays.user_unions_iterator_t (class) -ida_hexrays.user_unions_iterator_t.__eq__ (method) -ida_hexrays.user_unions_iterator_t.__init__ (method) -ida_hexrays.user_unions_iterator_t.__ne__ (method) -ida_hexrays.user_unions_new (function) -ida_hexrays.user_unions_next (function) -ida_hexrays.user_unions_prev (function) -ida_hexrays.user_unions_second (function) -ida_hexrays.user_unions_size (function) -ida_hexrays.user_unions_t (class) -ida_hexrays.user_unions_t.__init__ (method) -ida_hexrays.user_unions_t.at (method) -ida_hexrays.user_unions_t.size (method) -ida_hexrays.uval_ivl_ivlset_t (class) -ida_hexrays.uval_ivl_ivlset_t.__eq__ (method) -ida_hexrays.uval_ivl_ivlset_t.__init__ (method) -ida_hexrays.uval_ivl_ivlset_t.__ne__ (method) -ida_hexrays.uval_ivl_ivlset_t.all_values (method) -ida_hexrays.uval_ivl_ivlset_t.begin (method) -ida_hexrays.uval_ivl_ivlset_t.clear (method) -ida_hexrays.uval_ivl_ivlset_t.empty (method) -ida_hexrays.uval_ivl_ivlset_t.end (method) -ida_hexrays.uval_ivl_ivlset_t.getivl (method) -ida_hexrays.uval_ivl_ivlset_t.lastivl (method) -ida_hexrays.uval_ivl_ivlset_t.nivls (method) -ida_hexrays.uval_ivl_ivlset_t.qclear (method) -ida_hexrays.uval_ivl_ivlset_t.set_all_values (method) -ida_hexrays.uval_ivl_ivlset_t.single_value (method) -ida_hexrays.uval_ivl_ivlset_t.swap (method) -ida_hexrays.uval_ivl_t (class) -ida_hexrays.uval_ivl_t.__init__ (method) -ida_hexrays.uval_ivl_t.end (method) -ida_hexrays.uval_ivl_t.last (method) -ida_hexrays.uval_ivl_t.valid (method) -ida_hexrays.valrng_t (class) -ida_hexrays.valrng_t.__eq__ (method) -ida_hexrays.valrng_t.__ge__ (method) -ida_hexrays.valrng_t.__gt__ (method) -ida_hexrays.valrng_t.__init__ (method) -ida_hexrays.valrng_t.__le__ (method) -ida_hexrays.valrng_t.__lt__ (method) -ida_hexrays.valrng_t.__ne__ (method) -ida_hexrays.valrng_t._deregister (method) -ida_hexrays.valrng_t._print (method) -ida_hexrays.valrng_t._register (method) -ida_hexrays.valrng_t.all_values (method) -ida_hexrays.valrng_t.compare (method) -ida_hexrays.valrng_t.cvt_to_cmp (method) -ida_hexrays.valrng_t.cvt_to_single_value (method) -ida_hexrays.valrng_t.dstr (method) -ida_hexrays.valrng_t.empty (method) -ida_hexrays.valrng_t.get_size (method) -ida_hexrays.valrng_t.has (method) -ida_hexrays.valrng_t.intersect_with (method) -ida_hexrays.valrng_t.inverse (method) -ida_hexrays.valrng_t.is_unknown (method) -ida_hexrays.valrng_t.max_svalue (method) -ida_hexrays.valrng_t.max_value (method) -ida_hexrays.valrng_t.min_svalue (method) -ida_hexrays.valrng_t.reduce_size (method) -ida_hexrays.valrng_t.set_all (method) -ida_hexrays.valrng_t.set_cmp (method) -ida_hexrays.valrng_t.set_eq (method) -ida_hexrays.valrng_t.set_none (method) -ida_hexrays.valrng_t.set_unk (method) -ida_hexrays.valrng_t.swap (method) -ida_hexrays.valrng_t.unite_with (method) -ida_hexrays.var_ref_t (class) -ida_hexrays.var_ref_t.__eq__ (method) -ida_hexrays.var_ref_t.__ge__ (method) -ida_hexrays.var_ref_t.__gt__ (method) -ida_hexrays.var_ref_t.__init__ (method) -ida_hexrays.var_ref_t.__le__ (method) -ida_hexrays.var_ref_t.__lt__ (method) -ida_hexrays.var_ref_t.__ne__ (method) -ida_hexrays.var_ref_t.compare (method) -ida_hexrays.var_ref_t.getv (method) -ida_hexrays.var_ref_t.idx (variable) -ida_hexrays.var_ref_t.mba (variable) -ida_hexrays.vc_printer_t (class) -ida_hexrays.vc_printer_t.__disown__ (method) -ida_hexrays.vc_printer_t.__init__ (method) -ida_hexrays.vc_printer_t.func (variable) -ida_hexrays.vc_printer_t.oneliner (method) -ida_hexrays.vd_failure_t (class) -ida_hexrays.vd_failure_t.__init__ (method) -ida_hexrays.vd_failure_t.desc (method) -ida_hexrays.vd_interr_t (class) -ida_hexrays.vd_interr_t.__init__ (method) -ida_hexrays.vd_printer_t (class) -ida_hexrays.vd_printer_t.__disown__ (method) -ida_hexrays.vd_printer_t.__init__ (method) -ida_hexrays.vd_printer_t._print (method) -ida_hexrays.vd_printer_t.hdrlines (variable) -ida_hexrays.vdloc_t (class) -ida_hexrays.vdloc_t.__eq__ (method) -ida_hexrays.vdloc_t.__ge__ (method) -ida_hexrays.vdloc_t.__gt__ (method) -ida_hexrays.vdloc_t.__init__ (method) -ida_hexrays.vdloc_t.__le__ (method) -ida_hexrays.vdloc_t.__lt__ (method) -ida_hexrays.vdloc_t.__ne__ (method) -ida_hexrays.vdloc_t._set_reg1 (method) -ida_hexrays.vdloc_t.compare (method) -ida_hexrays.vdloc_t.is_aliasable (method) -ida_hexrays.vdloc_t.reg1 (method) -ida_hexrays.vdloc_t.set_reg1 (method) -ida_hexrays.vdui_t (class) -ida_hexrays.vdui_t.__init__ (method) -ida_hexrays.vdui_t.calc_cmt_type (method) -ida_hexrays.vdui_t.cfunc (variable) -ida_hexrays.vdui_t.clear (method) -ida_hexrays.vdui_t.collapse_item (method) -ida_hexrays.vdui_t.collapse_lvars (method) -ida_hexrays.vdui_t.cpos (variable) -ida_hexrays.vdui_t.ct (variable) -ida_hexrays.vdui_t.ctree_to_disasm (method) -ida_hexrays.vdui_t.del_orphan_cmts (method) -ida_hexrays.vdui_t.edit_cmt (method) -ida_hexrays.vdui_t.edit_func_cmt (method) -ida_hexrays.vdui_t.flags (variable) -ida_hexrays.vdui_t.get_current_item (method) -ida_hexrays.vdui_t.get_current_label (method) -ida_hexrays.vdui_t.get_number (method) -ida_hexrays.vdui_t.head (variable) -ida_hexrays.vdui_t.in_ctree (method) -ida_hexrays.vdui_t.invert_bits (method) -ida_hexrays.vdui_t.invert_sign (method) -ida_hexrays.vdui_t.item (variable) -ida_hexrays.vdui_t.jump_enter (method) -ida_hexrays.vdui_t.last_code (variable) -ida_hexrays.vdui_t.locked (method) -ida_hexrays.vdui_t.map_lvar (method) -ida_hexrays.vdui_t.mba (variable) -ida_hexrays.vdui_t.refresh_cpos (method) -ida_hexrays.vdui_t.refresh_ctext (method) -ida_hexrays.vdui_t.refresh_view (method) -ida_hexrays.vdui_t.rename_global (method) -ida_hexrays.vdui_t.rename_label (method) -ida_hexrays.vdui_t.rename_lvar (method) -ida_hexrays.vdui_t.rename_strmem (method) -ida_hexrays.vdui_t.set_global_type (method) -ida_hexrays.vdui_t.set_locked (method) -ida_hexrays.vdui_t.set_lvar_cmt (method) -ida_hexrays.vdui_t.set_lvar_type (method) -ida_hexrays.vdui_t.set_noptr_lvar (method) -ida_hexrays.vdui_t.set_num_enum (method) -ida_hexrays.vdui_t.set_num_radix (method) -ida_hexrays.vdui_t.set_num_stroff (method) -ida_hexrays.vdui_t.set_strmem_type (method) -ida_hexrays.vdui_t.set_valid (method) -ida_hexrays.vdui_t.set_visible (method) -ida_hexrays.vdui_t.split_item (method) -ida_hexrays.vdui_t.switch_to (method) -ida_hexrays.vdui_t.tail (variable) -ida_hexrays.vdui_t.ui_edit_lvar_cmt (method) -ida_hexrays.vdui_t.ui_map_lvar (method) -ida_hexrays.vdui_t.ui_rename_lvar (method) -ida_hexrays.vdui_t.ui_set_call_type (method) -ida_hexrays.vdui_t.ui_set_lvar_type (method) -ida_hexrays.vdui_t.ui_unmap_lvar (method) -ida_hexrays.vdui_t.valid (method) -ida_hexrays.vdui_t.view_idx (variable) -ida_hexrays.vdui_t.visible (method) -ida_hexrays.vivl_t (class) -ida_hexrays.vivl_t.__eq__ (method) -ida_hexrays.vivl_t.__ge__ (method) -ida_hexrays.vivl_t.__gt__ (method) -ida_hexrays.vivl_t.__init__ (method) -ida_hexrays.vivl_t.__le__ (method) -ida_hexrays.vivl_t.__lt__ (method) -ida_hexrays.vivl_t.__ne__ (method) -ida_hexrays.vivl_t._print (method) -ida_hexrays.vivl_t.compare (method) -ida_hexrays.vivl_t.contains (method) -ida_hexrays.vivl_t.dstr (method) -ida_hexrays.vivl_t.extend_to_cover (method) -ida_hexrays.vivl_t.includes (method) -ida_hexrays.vivl_t.intersect (method) -ida_hexrays.vivl_t.overlap (method) -ida_hexrays.vivl_t.set (method) -ida_hexrays.vivl_t.set_reg (method) -ida_hexrays.vivl_t.set_stkoff (method) -ida_hexrays.vivl_t.size (variable) -ida_hexrays.voff_t (class) -ida_hexrays.voff_t.__eq__ (method) -ida_hexrays.voff_t.__ge__ (method) -ida_hexrays.voff_t.__gt__ (method) -ida_hexrays.voff_t.__init__ (method) -ida_hexrays.voff_t.__le__ (method) -ida_hexrays.voff_t.__lt__ (method) -ida_hexrays.voff_t.__ne__ (method) -ida_hexrays.voff_t.add (method) -ida_hexrays.voff_t.compare (method) -ida_hexrays.voff_t.defined (method) -ida_hexrays.voff_t.diff (method) -ida_hexrays.voff_t.get_reg (method) -ida_hexrays.voff_t.get_stkoff (method) -ida_hexrays.voff_t.inc (method) -ida_hexrays.voff_t.is_reg (method) -ida_hexrays.voff_t.is_stkoff (method) -ida_hexrays.voff_t.off (variable) -ida_hexrays.voff_t.set (method) -ida_hexrays.voff_t.set_reg (method) -ida_hexrays.voff_t.set_stkoff (method) -ida_hexrays.voff_t.type (variable) -ida_hexrays.voff_t.undef (method) -ida_allins (module) -ida_auto (module) -ida_auto.AU_CHLB (variable) -ida_auto.AU_CODE (variable) -ida_auto.AU_FCHUNK (variable) -ida_auto.AU_FINAL (variable) -ida_auto.AU_LBF2 (variable) -ida_auto.AU_LBF3 (variable) -ida_auto.AU_LIBF (variable) -ida_auto.AU_NONE (variable) -ida_auto.AU_PROC (variable) -ida_auto.AU_TAIL (variable) -ida_auto.AU_TYPE (variable) -ida_auto.AU_UNK (variable) -ida_auto.AU_USED (variable) -ida_auto.AU_WEAK (variable) -ida_auto.auto_apply_tail (function) -ida_auto.auto_apply_type (function) -ida_auto.auto_cancel (function) -ida_auto.auto_display_t (class) -ida_auto.auto_display_t.__init__ (method) -ida_auto.auto_get (function) -ida_auto.auto_is_ok (function) -ida_auto.auto_make_code (function) -ida_auto.auto_make_proc (function) -ida_auto.auto_make_step (function) -ida_auto.auto_mark (function) -ida_auto.auto_mark_range (function) -ida_auto.auto_recreate_insn (function) -ida_auto.auto_unmark (function) -ida_auto.auto_wait (function) -ida_auto.auto_wait_range (function) -ida_auto.enable_auto (function) -ida_auto.get_auto_display (function) -ida_auto.get_auto_state (function) -ida_auto.is_auto_enabled (function) -ida_auto.may_create_stkvars (function) -ida_auto.may_trace_sp (function) -ida_auto.peek_auto_queue (function) -ida_auto.plan_and_wait (function) -ida_auto.plan_ea (function) -ida_auto.plan_range (function) -ida_auto.reanalyze_callers (function) -ida_auto.revert_ida_decisions (function) -ida_auto.set_auto_state (function) -ida_auto.set_ida_state (function) -ida_auto.show_addr (function) -ida_auto.show_auto (function) -ida_bitrange (module) -ida_bitrange.bitrange_t (class) -ida_bitrange.bitrange_t.__eq__ (method) -ida_bitrange.bitrange_t.__ge__ (method) -ida_bitrange.bitrange_t.__gt__ (method) -ida_bitrange.bitrange_t.__init__ (method) -ida_bitrange.bitrange_t.__le__ (method) -ida_bitrange.bitrange_t.__lt__ (method) -ida_bitrange.bitrange_t.__ne__ (method) -ida_bitrange.bitrange_t.__str__ (method) -ida_bitrange.bitrange_t.apply_mask (method) -ida_bitrange.bitrange_t.bitoff (method) -ida_bitrange.bitrange_t.bitsize (method) -ida_bitrange.bitrange_t.bytesize (method) -ida_bitrange.bitrange_t.compare (method) -ida_bitrange.bitrange_t.create_union (method) -ida_bitrange.bitrange_t.empty (method) -ida_bitrange.bitrange_t.extract (method) -ida_bitrange.bitrange_t.has_common (method) -ida_bitrange.bitrange_t.init (method) -ida_bitrange.bitrange_t.inject (method) -ida_bitrange.bitrange_t.intersect (method) -ida_bitrange.bitrange_t.mask64 (method) -ida_bitrange.bitrange_t.reset (method) -ida_bitrange.bitrange_t.shift_down (method) -ida_bitrange.bitrange_t.shift_up (method) -ida_bitrange.bitrange_t.sub (method) -ida_bytes (module) -ida_bytes.ALOPT_IGNCLT (variable) -ida_bytes.ALOPT_IGNHEADS (variable) -ida_bytes.ALOPT_IGNPRINT (variable) -ida_bytes.ALOPT_MAX4K (variable) -ida_bytes.ALOPT_ONLYTERM (variable) -ida_bytes.BIN_SEARCH_BACKWARD (variable) -ida_bytes.BIN_SEARCH_BITMASK (variable) -ida_bytes.BIN_SEARCH_CASE (variable) -ida_bytes.BIN_SEARCH_FORWARD (variable) -ida_bytes.BIN_SEARCH_INITED (variable) -ida_bytes.BIN_SEARCH_NOBREAK (variable) -ida_bytes.BIN_SEARCH_NOCASE (variable) -ida_bytes.BIN_SEARCH_NOSHOW (variable) -ida_bytes.DELIT_DELNAMES (variable) -ida_bytes.DELIT_EXPAND (variable) -ida_bytes.DELIT_KEEPFUNC (variable) -ida_bytes.DELIT_NOCMT (variable) -ida_bytes.DELIT_NOTRUNC (variable) -ida_bytes.DELIT_NOUNAME (variable) -ida_bytes.DELIT_SIMPLE (variable) -ida_bytes.DTP_NODUP (variable) -ida_bytes.DT_TYPE (variable) -ida_bytes.FF_ALIGN (variable) -ida_bytes.FF_BNOT (variable) -ida_bytes.FF_BYTE (variable) -ida_bytes.FF_CODE (variable) -ida_bytes.FF_COMM (variable) -ida_bytes.FF_CUSTOM (variable) -ida_bytes.FF_DATA (variable) -ida_bytes.FF_DOUBLE (variable) -ida_bytes.FF_DWORD (variable) -ida_bytes.FF_FLOAT (variable) -ida_bytes.FF_FLOW (variable) -ida_bytes.FF_FUNC (variable) -ida_bytes.FF_IMMD (variable) -ida_bytes.FF_IVL (variable) -ida_bytes.FF_JUMP (variable) -ida_bytes.FF_LABL (variable) -ida_bytes.FF_LINE (variable) -ida_bytes.FF_NAME (variable) -ida_bytes.FF_N_CHAR (variable) -ida_bytes.FF_N_CUST (variable) -ida_bytes.FF_N_ENUM (variable) -ida_bytes.FF_N_FLT (variable) -ida_bytes.FF_N_FOP (variable) -ida_bytes.FF_N_NUMB (variable) -ida_bytes.FF_N_NUMD (variable) -ida_bytes.FF_N_NUMH (variable) -ida_bytes.FF_N_NUMO (variable) -ida_bytes.FF_N_OFF (variable) -ida_bytes.FF_N_SEG (variable) -ida_bytes.FF_N_STK (variable) -ida_bytes.FF_N_STRO (variable) -ida_bytes.FF_N_VOID (variable) -ida_bytes.FF_OWORD (variable) -ida_bytes.FF_PACKREAL (variable) -ida_bytes.FF_QWORD (variable) -ida_bytes.FF_REF (variable) -ida_bytes.FF_SIGN (variable) -ida_bytes.FF_STRLIT (variable) -ida_bytes.FF_STRUCT (variable) -ida_bytes.FF_TAIL (variable) -ida_bytes.FF_TBYTE (variable) -ida_bytes.FF_UNK (variable) -ida_bytes.FF_UNUSED (variable) -ida_bytes.FF_WORD (variable) -ida_bytes.FF_YWORD (variable) -ida_bytes.FF_ZWORD (variable) -ida_bytes.GFE_IDB_VALUE (variable) -ida_bytes.GFE_VALUE (variable) -ida_bytes.GMB_READALL (variable) -ida_bytes.GMB_WAITBOX (variable) -ida_bytes.ITEM_END_CANCEL (variable) -ida_bytes.ITEM_END_FIXUP (variable) -ida_bytes.ITEM_END_INITED (variable) -ida_bytes.ITEM_END_NAME (variable) -ida_bytes.ITEM_END_XREF (variable) -ida_bytes.MS_CLS (variable) -ida_bytes.MS_CODE (variable) -ida_bytes.MS_COMM (variable) -ida_bytes.MS_N_TYPE (variable) -ida_bytes.MS_VAL (variable) -ida_bytes.OPND_ALL (variable) -ida_bytes.OPND_MASK (variable) -ida_bytes.OPND_OUTER (variable) -ida_bytes.PSTF_ATTRIB (variable) -ida_bytes.PSTF_ENC (variable) -ida_bytes.PSTF_HOTKEY (variable) -ida_bytes.PSTF_ONLY_ENC (variable) -ida_bytes.PSTF_TBRIEF (variable) -ida_bytes.PSTF_TINLIN (variable) -ida_bytes.PSTF_TMASK (variable) -ida_bytes.PSTF_TNORM (variable) -ida_bytes.STRCONV_ESCAPE (variable) -ida_bytes.STRCONV_INCLLEN (variable) -ida_bytes.STRCONV_REPLCHAR (variable) -ida_bytes.__walk_types_and_formats (function) -ida_bytes.add_byte (function) -ida_bytes.add_dword (function) -ida_bytes.add_hidden_range (function) -ida_bytes.add_mapping (function) -ida_bytes.add_qword (function) -ida_bytes.add_word (function) -ida_bytes.align_flag (function) -ida_bytes.append_cmt (function) -ida_bytes.attach_custom_data_format (function) -ida_bytes.bin_flag (function) -ida_bytes.bin_search (function) -ida_bytes.bin_search3 (function) -ida_bytes.byte_flag (function) -ida_bytes.bytesize (function) -ida_bytes.calc_def_align (function) -ida_bytes.calc_dflags (function) -ida_bytes.calc_max_align (function) -ida_bytes.calc_max_item_end (function) -ida_bytes.calc_min_align (function) -ida_bytes.can_define_item (function) -ida_bytes.change_storage_type (function) -ida_bytes.char_flag (function) -ida_bytes.chunk_size (function) -ida_bytes.chunk_start (function) -ida_bytes.clr_lzero (function) -ida_bytes.clr_op_type (function) -ida_bytes.code_flag (function) -ida_bytes.combine_flags (function) -ida_bytes.compiled_binpat_t (class) -ida_bytes.compiled_binpat_t.__eq__ (method) -ida_bytes.compiled_binpat_t.__init__ (method) -ida_bytes.compiled_binpat_t.__ne__ (method) -ida_bytes.compiled_binpat_t.all_bytes_defined (method) -ida_bytes.compiled_binpat_t.qclear (method) -ida_bytes.compiled_binpat_vec_t (class) -ida_bytes.compiled_binpat_vec_t.__eq__ (method) -ida_bytes.compiled_binpat_vec_t.__getitem__ (method) -ida_bytes.compiled_binpat_vec_t.__init__ (method) -ida_bytes.compiled_binpat_vec_t.__len__ (method) -ida_bytes.compiled_binpat_vec_t.__ne__ (method) -ida_bytes.compiled_binpat_vec_t.__setitem__ (method) -ida_bytes.compiled_binpat_vec_t._del (method) -ida_bytes.compiled_binpat_vec_t.add_unique (method) -ida_bytes.compiled_binpat_vec_t.at (method) -ida_bytes.compiled_binpat_vec_t.begin (method) -ida_bytes.compiled_binpat_vec_t.capacity (method) -ida_bytes.compiled_binpat_vec_t.clear (method) -ida_bytes.compiled_binpat_vec_t.empty (method) -ida_bytes.compiled_binpat_vec_t.end (method) -ida_bytes.compiled_binpat_vec_t.erase (method) -ida_bytes.compiled_binpat_vec_t.extract (method) -ida_bytes.compiled_binpat_vec_t.find (method) -ida_bytes.compiled_binpat_vec_t.grow (method) -ida_bytes.compiled_binpat_vec_t.has (method) -ida_bytes.compiled_binpat_vec_t.inject (method) -ida_bytes.compiled_binpat_vec_t.insert (method) -ida_bytes.compiled_binpat_vec_t.pop_back (method) -ida_bytes.compiled_binpat_vec_t.push_back (method) -ida_bytes.compiled_binpat_vec_t.qclear (method) -ida_bytes.compiled_binpat_vec_t.reserve (method) -ida_bytes.compiled_binpat_vec_t.resize (method) -ida_bytes.compiled_binpat_vec_t.size (method) -ida_bytes.compiled_binpat_vec_t.swap (method) -ida_bytes.compiled_binpat_vec_t.truncate (method) -ida_bytes.create_16bit_data (function) -ida_bytes.create_32bit_data (function) -ida_bytes.create_align (function) -ida_bytes.create_byte (function) -ida_bytes.create_custdata (function) -ida_bytes.create_data (function) -ida_bytes.create_double (function) -ida_bytes.create_dword (function) -ida_bytes.create_float (function) -ida_bytes.create_oword (function) -ida_bytes.create_packed_real (function) -ida_bytes.create_qword (function) -ida_bytes.create_strlit (function) -ida_bytes.create_struct (function) -ida_bytes.create_tbyte (function) -ida_bytes.create_word (function) -ida_bytes.create_yword (function) -ida_bytes.create_zword (function) -ida_bytes.cust_flag (function) -ida_bytes.custfmt_flag (function) -ida_bytes.data_format_t (class) -ida_bytes.data_format_t.__get_id (method) -ida_bytes.data_format_t.__init__ (method) -ida_bytes.data_format_t.__init__ (method) -ida_bytes.data_format_t.hotkey (variable) -ida_bytes.data_format_t.is_present_in_menus (method) -ida_bytes.data_format_t.menu_name (variable) -ida_bytes.data_format_t.name (variable) -ida_bytes.data_format_t.props (variable) -ida_bytes.data_format_t.text_width (variable) -ida_bytes.data_format_t.value_size (variable) -ida_bytes.data_type_t (class) -ida_bytes.data_type_t.__get_id (method) -ida_bytes.data_type_t.__init__ (method) -ida_bytes.data_type_t.__init__ (method) -ida_bytes.data_type_t.asm_keyword (variable) -ida_bytes.data_type_t.hotkey (variable) -ida_bytes.data_type_t.is_present_in_menus (method) -ida_bytes.data_type_t.menu_name (variable) -ida_bytes.data_type_t.name (variable) -ida_bytes.data_type_t.props (variable) -ida_bytes.data_type_t.value_size (variable) -ida_bytes.dec_flag (function) -ida_bytes.del_hidden_range (function) -ida_bytes.del_items (function) -ida_bytes.del_mapping (function) -ida_bytes.del_value (function) -ida_bytes.detach_custom_data_format (function) -ida_bytes.disable_flags (function) -ida_bytes.double_flag (function) -ida_bytes.dword_flag (function) -ida_bytes.enable_flags (function) -ida_bytes.enum_flag (function) -ida_bytes.equal_bytes (function) -ida_bytes.f_has_cmt (function) -ida_bytes.f_has_dummy_name (function) -ida_bytes.f_has_extra_cmts (function) -ida_bytes.f_has_name (function) -ida_bytes.f_has_user_name (function) -ida_bytes.f_has_xref (function) -ida_bytes.f_is_align (function) -ida_bytes.f_is_byte (function) -ida_bytes.f_is_code (function) -ida_bytes.f_is_custom (function) -ida_bytes.f_is_data (function) -ida_bytes.f_is_double (function) -ida_bytes.f_is_dword (function) -ida_bytes.f_is_float (function) -ida_bytes.f_is_head (function) -ida_bytes.f_is_not_tail (function) -ida_bytes.f_is_oword (function) -ida_bytes.f_is_pack_real (function) -ida_bytes.f_is_qword (function) -ida_bytes.f_is_strlit (function) -ida_bytes.f_is_struct (function) -ida_bytes.f_is_tail (function) -ida_bytes.f_is_tbyte (function) -ida_bytes.f_is_word (function) -ida_bytes.f_is_yword (function) -ida_bytes.find_byte (function) -ida_bytes.find_byter (function) -ida_bytes.find_custom_data_format (function) -ida_bytes.find_custom_data_type (function) -ida_bytes.find_free_chunk (function) -ida_bytes.float_flag (function) -ida_bytes.flt_flag (function) -ida_bytes.free_chunk (function) -ida_bytes.get_16bit (function) -ida_bytes.get_32bit (function) -ida_bytes.get_64bit (function) -ida_bytes.get_8bit (function) -ida_bytes.get_byte (function) -ida_bytes.get_bytes (function) -ida_bytes.get_bytes_and_mask (function) -ida_bytes.get_cmt (function) -ida_bytes.get_custom_data_format (function) -ida_bytes.get_custom_data_formats (function) -ida_bytes.get_custom_data_type (function) -ida_bytes.get_custom_data_types (function) -ida_bytes.get_data_elsize (function) -ida_bytes.get_data_value (function) -ida_bytes.get_db_byte (function) -ida_bytes.get_default_radix (function) -ida_bytes.get_dword (function) -ida_bytes.get_enum_id (function) -ida_bytes.get_first_hidden_range (function) -ida_bytes.get_flags (function) -ida_bytes.get_flags_by_size (function) -ida_bytes.get_flags_ex (function) -ida_bytes.get_forced_operand (function) -ida_bytes.get_full_data_elsize (function) -ida_bytes.get_full_flags (function) -ida_bytes.get_hidden_range (function) -ida_bytes.get_hidden_range_num (function) -ida_bytes.get_hidden_range_qty (function) -ida_bytes.get_item_end (function) -ida_bytes.get_item_flag (function) -ida_bytes.get_item_head (function) -ida_bytes.get_item_refinfo (function) -ida_bytes.get_item_size (function) -ida_bytes.get_last_hidden_range (function) -ida_bytes.get_manual_insn (function) -ida_bytes.get_mapping (function) -ida_bytes.get_mappings_qty (function) -ida_bytes.get_max_strlit_length (function) -ida_bytes.get_next_hidden_range (function) -ida_bytes.get_octet (function) -ida_bytes.get_octet2 (function) -ida_bytes.get_operand_flag (function) -ida_bytes.get_operand_type_shift (function) -ida_bytes.get_opinfo (function) -ida_bytes.get_optype_flags0 (function) -ida_bytes.get_optype_flags1 (function) -ida_bytes.get_original_byte (function) -ida_bytes.get_original_dword (function) -ida_bytes.get_original_qword (function) -ida_bytes.get_original_word (function) -ida_bytes.get_predef_insn_cmt (function) -ida_bytes.get_prev_hidden_range (function) -ida_bytes.get_qword (function) -ida_bytes.get_radix (function) -ida_bytes.get_strlit_contents (function) -ida_bytes.get_stroff_path (function) -ida_bytes.get_wide_byte (function) -ida_bytes.get_wide_dword (function) -ida_bytes.get_wide_word (function) -ida_bytes.get_word (function) -ida_bytes.get_zero_ranges (function) -ida_bytes.getn_hidden_range (function) -ida_bytes.has_any_name (function) -ida_bytes.has_auto_name (function) -ida_bytes.has_cmt (function) -ida_bytes.has_dummy_name (function) -ida_bytes.has_extra_cmts (function) -ida_bytes.has_immd (function) -ida_bytes.has_name (function) -ida_bytes.has_user_name (function) -ida_bytes.has_value (function) -ida_bytes.has_xref (function) -ida_bytes.hex_flag (function) -ida_bytes.hidden_range_t (class) -ida_bytes.hidden_range_t.__init__ (method) -ida_bytes.hidden_range_t.color (variable) -ida_bytes.hidden_range_t.description (variable) -ida_bytes.hidden_range_t.footer (variable) -ida_bytes.hidden_range_t.header (variable) -ida_bytes.hidden_range_t.visible (variable) -ida_bytes.is_align (function) -ida_bytes.is_attached_custom_data_format (function) -ida_bytes.is_bnot (function) -ida_bytes.is_byte (function) -ida_bytes.is_char (function) -ida_bytes.is_char0 (function) -ida_bytes.is_char1 (function) -ida_bytes.is_code (function) -ida_bytes.is_custfmt (function) -ida_bytes.is_custfmt0 (function) -ida_bytes.is_custfmt1 (function) -ida_bytes.is_custom (function) -ida_bytes.is_data (function) -ida_bytes.is_defarg (function) -ida_bytes.is_defarg0 (function) -ida_bytes.is_defarg1 (function) -ida_bytes.is_double (function) -ida_bytes.is_dword (function) -ida_bytes.is_enum (function) -ida_bytes.is_enum0 (function) -ida_bytes.is_enum1 (function) -ida_bytes.is_flag_for_operand (function) -ida_bytes.is_float (function) -ida_bytes.is_float0 (function) -ida_bytes.is_float1 (function) -ida_bytes.is_flow (function) -ida_bytes.is_fltnum (function) -ida_bytes.is_forced_operand (function) -ida_bytes.is_func (function) -ida_bytes.is_head (function) -ida_bytes.is_invsign (function) -ida_bytes.is_loaded (function) -ida_bytes.is_lzero (function) -ida_bytes.is_manual (function) -ida_bytes.is_manual_insn (function) -ida_bytes.is_mapped (function) -ida_bytes.is_not_tail (function) -ida_bytes.is_numop (function) -ida_bytes.is_numop0 (function) -ida_bytes.is_numop1 (function) -ida_bytes.is_off (function) -ida_bytes.is_off0 (function) -ida_bytes.is_off1 (function) -ida_bytes.is_oword (function) -ida_bytes.is_pack_real (function) -ida_bytes.is_qword (function) -ida_bytes.is_same_data_type (function) -ida_bytes.is_seg (function) -ida_bytes.is_seg0 (function) -ida_bytes.is_seg1 (function) -ida_bytes.is_stkvar (function) -ida_bytes.is_stkvar0 (function) -ida_bytes.is_stkvar1 (function) -ida_bytes.is_strlit (function) -ida_bytes.is_stroff (function) -ida_bytes.is_stroff0 (function) -ida_bytes.is_stroff1 (function) -ida_bytes.is_struct (function) -ida_bytes.is_suspop (function) -ida_bytes.is_tail (function) -ida_bytes.is_tbyte (function) -ida_bytes.is_unknown (function) -ida_bytes.is_varsize_item (function) -ida_bytes.is_word (function) -ida_bytes.is_yword (function) -ida_bytes.is_zword (function) -ida_bytes.leading_zero_important (function) -ida_bytes.nbits (function) -ida_bytes.next_addr (function) -ida_bytes.next_chunk (function) -ida_bytes.next_head (function) -ida_bytes.next_inited (function) -ida_bytes.next_not_tail (function) -ida_bytes.next_that (function) -ida_bytes.next_unknown (function) -ida_bytes.next_visea (function) -ida_bytes.num_flag (function) -ida_bytes.oct_flag (function) -ida_bytes.octet_generator_t (class) -ida_bytes.octet_generator_t.__init__ (method) -ida_bytes.octet_generator_t.invert_byte_order (method) -ida_bytes.off_flag (function) -ida_bytes.op_adds_xrefs (function) -ida_bytes.op_based_stroff (function) -ida_bytes.op_bin (function) -ida_bytes.op_chr (function) -ida_bytes.op_custfmt (function) -ida_bytes.op_dec (function) -ida_bytes.op_enum (function) -ida_bytes.op_flt (function) -ida_bytes.op_hex (function) -ida_bytes.op_num (function) -ida_bytes.op_oct (function) -ida_bytes.op_seg (function) -ida_bytes.op_stkvar (function) -ida_bytes.op_stroff (function) -ida_bytes.oword_flag (function) -ida_bytes.packreal_flag (function) -ida_bytes.parse_binpat_str (function) -ida_bytes.patch_byte (function) -ida_bytes.patch_bytes (function) -ida_bytes.patch_dword (function) -ida_bytes.patch_qword (function) -ida_bytes.patch_word (function) -ida_bytes.prev_addr (function) -ida_bytes.prev_chunk (function) -ida_bytes.prev_head (function) -ida_bytes.prev_inited (function) -ida_bytes.prev_not_tail (function) -ida_bytes.prev_that (function) -ida_bytes.prev_unknown (function) -ida_bytes.prev_visea (function) -ida_bytes.print_strlit_type (function) -ida_bytes.put_byte (function) -ida_bytes.put_bytes (function) -ida_bytes.put_dword (function) -ida_bytes.put_qword (function) -ida_bytes.put_word (function) -ida_bytes.qword_flag (function) -ida_bytes.register_custom_data_format (function) -ida_bytes.register_custom_data_type (function) -ida_bytes.register_data_types_and_formats (function) -ida_bytes.register_data_types_and_formats.__reg_format (function) -ida_bytes.register_data_types_and_formats.__reg_type (function) -ida_bytes.revert_byte (function) -ida_bytes.seg_flag (function) -ida_bytes.set_cmt (function) -ida_bytes.set_forced_operand (function) -ida_bytes.set_immd (function) -ida_bytes.set_lzero (function) -ida_bytes.set_manual_insn (function) -ida_bytes.set_op_type (function) -ida_bytes.set_opinfo (function) -ida_bytes.stkvar_flag (function) -ida_bytes.strlit_flag (function) -ida_bytes.stroff_flag (function) -ida_bytes.stru_flag (function) -ida_bytes.tbyte_flag (function) -ida_bytes.toggle_bnot (function) -ida_bytes.toggle_lzero (function) -ida_bytes.toggle_sign (function) -ida_bytes.unregister_custom_data_format (function) -ida_bytes.unregister_custom_data_type (function) -ida_bytes.unregister_data_types_and_formats (function) -ida_bytes.unregister_data_types_and_formats.__unreg_format (function) -ida_bytes.unregister_data_types_and_formats.__unreg_type (function) -ida_bytes.update_hidden_range (function) -ida_bytes.use_mapping (function) -ida_bytes.visit_patched_bytes (function) -ida_bytes.word_flag (function) -ida_bytes.yword_flag (function) -ida_bytes.zword_flag (function) -ida_dbg (module) -ida_dbg.BKPT_ACTIVE (variable) -ida_dbg.BKPT_BADBPT (variable) -ida_dbg.BKPT_CNDREADY (variable) -ida_dbg.BKPT_FAKEPEND (variable) -ida_dbg.BKPT_LISTBPT (variable) -ida_dbg.BKPT_PAGE (variable) -ida_dbg.BKPT_PARTIAL (variable) -ida_dbg.BKPT_TRACE (variable) -ida_dbg.BPLT_ABS (variable) -ida_dbg.BPLT_REL (variable) -ida_dbg.BPLT_SRC (variable) -ida_dbg.BPTCK_ACT (variable) -ida_dbg.BPTCK_NO (variable) -ida_dbg.BPTCK_NONE (variable) -ida_dbg.BPTCK_YES (variable) -ida_dbg.BPTEV_ADDED (variable) -ida_dbg.BPTEV_CHANGED (variable) -ida_dbg.BPTEV_REMOVED (variable) -ida_dbg.BPT_BRK (variable) -ida_dbg.BPT_ELANG_SHIFT (variable) -ida_dbg.BPT_ENABLED (variable) -ida_dbg.BPT_LOWCND (variable) -ida_dbg.BPT_TRACE (variable) -ida_dbg.BPT_TRACEON (variable) -ida_dbg.BPT_TRACE_BBLK (variable) -ida_dbg.BPT_TRACE_FUNC (variable) -ida_dbg.BPT_TRACE_INSN (variable) -ida_dbg.BPT_TRACE_TYPES (variable) -ida_dbg.BPT_UPDMEM (variable) -ida_dbg.BT_LOG_INSTS (variable) -ida_dbg.DBGINV_ALL (variable) -ida_dbg.DBGINV_MEMCFG (variable) -ida_dbg.DBGINV_MEMORY (variable) -ida_dbg.DBGINV_NONE (variable) -ida_dbg.DBGINV_REDRAW (variable) -ida_dbg.DBGINV_REGS (variable) -ida_dbg.DBG_Hooks (class) -ida_dbg.DBG_Hooks.__disown__ (method) -ida_dbg.DBG_Hooks.__init__ (method) -ida_dbg.DBG_Hooks.dbg_bpt (method) -ida_dbg.DBG_Hooks.dbg_bpt_changed (method) -ida_dbg.DBG_Hooks.dbg_exception (method) -ida_dbg.DBG_Hooks.dbg_finished_loading_bpts (method) -ida_dbg.DBG_Hooks.dbg_information (method) -ida_dbg.DBG_Hooks.dbg_library_load (method) -ida_dbg.DBG_Hooks.dbg_library_unload (method) -ida_dbg.DBG_Hooks.dbg_process_attach (method) -ida_dbg.DBG_Hooks.dbg_process_detach (method) -ida_dbg.DBG_Hooks.dbg_process_exit (method) -ida_dbg.DBG_Hooks.dbg_process_start (method) -ida_dbg.DBG_Hooks.dbg_request_error (method) -ida_dbg.DBG_Hooks.dbg_run_to (method) -ida_dbg.DBG_Hooks.dbg_started_loading_bpts (method) -ida_dbg.DBG_Hooks.dbg_step_into (method) -ida_dbg.DBG_Hooks.dbg_step_over (method) -ida_dbg.DBG_Hooks.dbg_step_until_ret (method) -ida_dbg.DBG_Hooks.dbg_suspend_process (method) -ida_dbg.DBG_Hooks.dbg_thread_exit (method) -ida_dbg.DBG_Hooks.dbg_thread_start (method) -ida_dbg.DBG_Hooks.dbg_trace (method) -ida_dbg.DBG_Hooks.hook (method) -ida_dbg.DBG_Hooks.unhook (method) -ida_dbg.DEC_ERROR (variable) -ida_dbg.DEC_NOTASK (variable) -ida_dbg.DEC_TIMEOUT (variable) -ida_dbg.DOPT_BPT_MSGS (variable) -ida_dbg.DOPT_DISABLE_ASLR (variable) -ida_dbg.DOPT_END_BPT (variable) -ida_dbg.DOPT_ENTRY_BPT (variable) -ida_dbg.DOPT_EXCDLG (variable) -ida_dbg.DOPT_FAST_STEP (variable) -ida_dbg.DOPT_INFO_BPT (variable) -ida_dbg.DOPT_INFO_MSGS (variable) -ida_dbg.DOPT_LIB_BPT (variable) -ida_dbg.DOPT_LIB_MSGS (variable) -ida_dbg.DOPT_LOAD_DINFO (variable) -ida_dbg.DOPT_REAL_MEMORY (variable) -ida_dbg.DOPT_REDO_STACK (variable) -ida_dbg.DOPT_SEGM_MSGS (variable) -ida_dbg.DOPT_START_BPT (variable) -ida_dbg.DOPT_TEMP_HWBPT (variable) -ida_dbg.DOPT_THREAD_BPT (variable) -ida_dbg.DOPT_THREAD_MSGS (variable) -ida_dbg.DSTATE_NOTASK (variable) -ida_dbg.DSTATE_RUN (variable) -ida_dbg.DSTATE_SUSP (variable) -ida_dbg.EXCDLG_ALWAYS (variable) -ida_dbg.EXCDLG_NEVER (variable) -ida_dbg.EXCDLG_UNKNOWN (variable) -ida_dbg.FT_LOG_RET (variable) -ida_dbg.IT_LOG_SAME_IP (variable) -ida_dbg.SRCIT_EXPR (variable) -ida_dbg.SRCIT_FUNC (variable) -ida_dbg.SRCIT_LOCVAR (variable) -ida_dbg.SRCIT_MODULE (variable) -ida_dbg.SRCIT_NONE (variable) -ida_dbg.SRCIT_STMT (variable) -ida_dbg.SRCIT_STTVAR (variable) -ida_dbg.ST_ALREADY_LOGGED (variable) -ida_dbg.ST_OPTIONS_MASK (variable) -ida_dbg.ST_OVER_DEBUG_SEG (variable) -ida_dbg.ST_OVER_LIB_FUNC (variable) -ida_dbg.ST_SKIP_LOOPS (variable) -ida_dbg.WFNE_ANY (variable) -ida_dbg.WFNE_CONT (variable) -ida_dbg.WFNE_NOWAIT (variable) -ida_dbg.WFNE_SILENT (variable) -ida_dbg.WFNE_SUSP (variable) -ida_dbg.WFNE_USEC (variable) -ida_dbg.add_bpt (function) -ida_dbg.add_path_mapping (function) -ida_dbg.add_virt_module (function) -ida_dbg.attach_process (function) -ida_dbg.bpt_location_t (class) -ida_dbg.bpt_location_t.__eq__ (method) -ida_dbg.bpt_location_t.__ge__ (method) -ida_dbg.bpt_location_t.__gt__ (method) -ida_dbg.bpt_location_t.__init__ (method) -ida_dbg.bpt_location_t.__le__ (method) -ida_dbg.bpt_location_t.__lt__ (method) -ida_dbg.bpt_location_t.__ne__ (method) -ida_dbg.bpt_location_t.compare (method) -ida_dbg.bpt_location_t.ea (method) -ida_dbg.bpt_location_t.is_empty_path (method) -ida_dbg.bpt_location_t.lineno (method) -ida_dbg.bpt_location_t.offset (method) -ida_dbg.bpt_location_t.path (method) -ida_dbg.bpt_location_t.set_abs_bpt (method) -ida_dbg.bpt_location_t.set_rel_bpt (method) -ida_dbg.bpt_location_t.set_src_bpt (method) -ida_dbg.bpt_location_t.set_sym_bpt (method) -ida_dbg.bpt_location_t.symbol (method) -ida_dbg.bpt_location_t.type (method) -ida_dbg.bpt_t (class) -ida_dbg.bpt_t.__init__ (method) -ida_dbg.bpt_t.badbpt (method) -ida_dbg.bpt_t.bptid (variable) -ida_dbg.bpt_t.cb (variable) -ida_dbg.bpt_t.cndidx (variable) -ida_dbg.bpt_t.ea (variable) -ida_dbg.bpt_t.enabled (method) -ida_dbg.bpt_t.flags (variable) -ida_dbg.bpt_t.get_cnd_elang_idx (method) -ida_dbg.bpt_t.get_size (method) -ida_dbg.bpt_t.is_absbpt (method) -ida_dbg.bpt_t.is_active (method) -ida_dbg.bpt_t.is_compiled (method) -ida_dbg.bpt_t.is_hwbpt (method) -ida_dbg.bpt_t.is_inactive (method) -ida_dbg.bpt_t.is_low_level (method) -ida_dbg.bpt_t.is_page_bpt (method) -ida_dbg.bpt_t.is_partially_active (method) -ida_dbg.bpt_t.is_relbpt (method) -ida_dbg.bpt_t.is_srcbpt (method) -ida_dbg.bpt_t.is_symbpt (method) -ida_dbg.bpt_t.is_tracemodebpt (method) -ida_dbg.bpt_t.is_traceoffbpt (method) -ida_dbg.bpt_t.is_traceonbpt (method) -ida_dbg.bpt_t.listbpt (method) -ida_dbg.bpt_t.loc (variable) -ida_dbg.bpt_t.pass_count (variable) -ida_dbg.bpt_t.pid (variable) -ida_dbg.bpt_t.props (variable) -ida_dbg.bpt_t.set_abs_bpt (method) -ida_dbg.bpt_t.set_rel_bpt (method) -ida_dbg.bpt_t.set_src_bpt (method) -ida_dbg.bpt_t.set_sym_bpt (method) -ida_dbg.bpt_t.set_trace_action (method) -ida_dbg.bpt_t.size (variable) -ida_dbg.bpt_t.tid (variable) -ida_dbg.bpt_t.type (variable) -ida_dbg.bpt_vec_t (class) -ida_dbg.bpt_vec_t.__getitem__ (method) -ida_dbg.bpt_vec_t.__init__ (method) -ida_dbg.bpt_vec_t.__len__ (method) -ida_dbg.bpt_vec_t.__setitem__ (method) -ida_dbg.bpt_vec_t.at (method) -ida_dbg.bpt_vec_t.begin (method) -ida_dbg.bpt_vec_t.capacity (method) -ida_dbg.bpt_vec_t.clear (method) -ida_dbg.bpt_vec_t.empty (method) -ida_dbg.bpt_vec_t.end (method) -ida_dbg.bpt_vec_t.erase (method) -ida_dbg.bpt_vec_t.extract (method) -ida_dbg.bpt_vec_t.grow (method) -ida_dbg.bpt_vec_t.inject (method) -ida_dbg.bpt_vec_t.insert (method) -ida_dbg.bpt_vec_t.pop_back (method) -ida_dbg.bpt_vec_t.push_back (method) -ida_dbg.bpt_vec_t.qclear (method) -ida_dbg.bpt_vec_t.reserve (method) -ida_dbg.bpt_vec_t.resize (method) -ida_dbg.bpt_vec_t.size (method) -ida_dbg.bpt_vec_t.swap (method) -ida_dbg.bpt_vec_t.truncate (method) -ida_dbg.bptaddrs_t (class) -ida_dbg.bptaddrs_t.__init__ (method) -ida_dbg.bring_debugger_to_front (function) -ida_dbg.check_bpt (function) -ida_dbg.choose_trace_file (function) -ida_dbg.clear_requests_queue (function) -ida_dbg.clear_trace (function) -ida_dbg.collect_stack_trace (function) -ida_dbg.continue_process (function) -ida_dbg.create_source_viewer (function) -ida_dbg.dbg_add_bpt_tev (function) -ida_dbg.dbg_add_call_tev (function) -ida_dbg.dbg_add_debug_event (function) -ida_dbg.dbg_add_insn_tev (function) -ida_dbg.dbg_add_many_tevs (function) -ida_dbg.dbg_add_ret_tev (function) -ida_dbg.dbg_add_tev (function) -ida_dbg.dbg_add_thread (function) -ida_dbg.dbg_bin_search (function) -ida_dbg.dbg_bpt (variable) -ida_dbg.dbg_bpt_changed (variable) -ida_dbg.dbg_can_query (function) -ida_dbg.dbg_del_thread (function) -ida_dbg.dbg_finished_loading_bpts (variable) -ida_dbg.dbg_is_loaded (function) -ida_dbg.dbg_last (variable) -ida_dbg.dbg_process_attach (variable) -ida_dbg.dbg_process_detach (variable) -ida_dbg.dbg_process_exit (variable) -ida_dbg.dbg_process_start (variable) -ida_dbg.dbg_request_error (variable) -ida_dbg.dbg_started_loading_bpts (variable) -ida_dbg.dbg_suspend_process (variable) -ida_dbg.dbg_trace (variable) -ida_dbg.define_exception (function) -ida_dbg.del_bpt (function) -ida_dbg.del_bptgrp (function) -ida_dbg.del_virt_module (function) -ida_dbg.detach_process (function) -ida_dbg.diff_trace_file (function) -ida_dbg.disable_bblk_trace (function) -ida_dbg.disable_bpt (function) -ida_dbg.disable_func_trace (function) -ida_dbg.disable_insn_trace (function) -ida_dbg.disable_step_trace (function) -ida_dbg.edit_manual_regions (function) -ida_dbg.enable_bblk_trace (function) -ida_dbg.enable_bpt (function) -ida_dbg.enable_bptgrp (function) -ida_dbg.enable_func_trace (function) -ida_dbg.enable_insn_trace (function) -ida_dbg.enable_manual_regions (function) -ida_dbg.enable_step_trace (function) -ida_dbg.eval_ctx_t (class) -ida_dbg.eval_ctx_t.__init__ (method) -ida_dbg.exist_bpt (function) -ida_dbg.exit_process (function) -ida_dbg.find_bpt (function) -ida_dbg.get_bblk_trace_options (function) -ida_dbg.get_bpt (function) -ida_dbg.get_bpt_group (function) -ida_dbg.get_bpt_qty (function) -ida_dbg.get_bpt_tev_ea (function) -ida_dbg.get_bptloc_string (function) -ida_dbg.get_call_tev_callee (function) -ida_dbg.get_current_source_file (function) -ida_dbg.get_current_source_line (function) -ida_dbg.get_current_thread (function) -ida_dbg.get_dbg_byte (function) -ida_dbg.get_dbg_memory_info (function) -ida_dbg.get_dbg_reg_info (function) -ida_dbg.get_debug_event (function) -ida_dbg.get_debugger_event_cond (function) -ida_dbg.get_first_module (function) -ida_dbg.get_func_trace_options (function) -ida_dbg.get_global_var (function) -ida_dbg.get_grp_bpts (function) -ida_dbg.get_insn_tev_reg_mem (function) -ida_dbg.get_insn_tev_reg_result (function) -ida_dbg.get_insn_tev_reg_val (function) -ida_dbg.get_insn_trace_options (function) -ida_dbg.get_ip_val (function) -ida_dbg.get_local_var (function) -ida_dbg.get_local_vars (function) -ida_dbg.get_manual_regions (function) -ida_dbg.get_module_info (function) -ida_dbg.get_next_module (function) -ida_dbg.get_process_options (function) -ida_dbg.get_process_state (function) -ida_dbg.get_processes (function) -ida_dbg.get_reg_val (function) -ida_dbg.get_reg_vals (function) -ida_dbg.get_ret_tev_return (function) -ida_dbg.get_running_notification (function) -ida_dbg.get_running_request (function) -ida_dbg.get_sp_val (function) -ida_dbg.get_srcinfo_provider (function) -ida_dbg.get_step_trace_options (function) -ida_dbg.get_tev_ea (function) -ida_dbg.get_tev_event (function) -ida_dbg.get_tev_info (function) -ida_dbg.get_tev_memory_info (function) -ida_dbg.get_tev_qty (function) -ida_dbg.get_tev_reg_mem (function) -ida_dbg.get_tev_reg_mem_ea (function) -ida_dbg.get_tev_reg_mem_qty (function) -ida_dbg.get_tev_reg_val (function) -ida_dbg.get_tev_tid (function) -ida_dbg.get_tev_type (function) -ida_dbg.get_thread_qty (function) -ida_dbg.get_trace_base_address (function) -ida_dbg.get_trace_dynamic_register_set (function) -ida_dbg.get_trace_file_desc (function) -ida_dbg.get_trace_platform (function) -ida_dbg.getn_bpt (function) -ida_dbg.getn_thread (function) -ida_dbg.getn_thread_name (function) -ida_dbg.graph_trace (function) -ida_dbg.handle_debug_event (function) -ida_dbg.hide_all_bpts (function) -ida_dbg.internal_get_sreg_base (function) -ida_dbg.internal_ioctl (function) -ida_dbg.invalidate_dbg_state (function) -ida_dbg.invalidate_dbgmem_config (function) -ida_dbg.invalidate_dbgmem_contents (function) -ida_dbg.is_bblk_trace_enabled (function) -ida_dbg.is_debugger_busy (function) -ida_dbg.is_debugger_memory (function) -ida_dbg.is_debugger_on (function) -ida_dbg.is_func_trace_enabled (function) -ida_dbg.is_insn_trace_enabled (function) -ida_dbg.is_reg_custom (function) -ida_dbg.is_reg_float (function) -ida_dbg.is_reg_integer (function) -ida_dbg.is_request_running (function) -ida_dbg.is_step_trace_enabled (function) -ida_dbg.is_valid_dstate (function) -ida_dbg.is_valid_trace_file (function) -ida_dbg.list_bptgrps (function) -ida_dbg.load_debugger (function) -ida_dbg.load_trace_file (function) -ida_dbg.memreg_info_t (class) -ida_dbg.memreg_info_t.__init__ (method) -ida_dbg.memreg_info_t.get_bytes (method) -ida_dbg.memreg_infos_t (class) -ida_dbg.memreg_infos_t.__getitem__ (method) -ida_dbg.memreg_infos_t.__init__ (method) -ida_dbg.memreg_infos_t.__len__ (method) -ida_dbg.memreg_infos_t.__setitem__ (method) -ida_dbg.memreg_infos_t.at (method) -ida_dbg.memreg_infos_t.begin (method) -ida_dbg.memreg_infos_t.capacity (method) -ida_dbg.memreg_infos_t.clear (method) -ida_dbg.memreg_infos_t.empty (method) -ida_dbg.memreg_infos_t.end (method) -ida_dbg.memreg_infos_t.erase (method) -ida_dbg.memreg_infos_t.extract (method) -ida_dbg.memreg_infos_t.grow (method) -ida_dbg.memreg_infos_t.inject (method) -ida_dbg.memreg_infos_t.insert (method) -ida_dbg.memreg_infos_t.pop_back (method) -ida_dbg.memreg_infos_t.push_back (method) -ida_dbg.memreg_infos_t.qclear (method) -ida_dbg.memreg_infos_t.reserve (method) -ida_dbg.memreg_infos_t.resize (method) -ida_dbg.memreg_infos_t.size (method) -ida_dbg.memreg_infos_t.swap (method) -ida_dbg.memreg_infos_t.truncate (method) -ida_dbg.put_dbg_byte (function) -ida_dbg.read_dbg_memory (function) -ida_dbg.refresh_debugger_memory (function) -ida_dbg.rename_bptgrp (function) -ida_dbg.request_add_bpt (function) -ida_dbg.request_attach_process (function) -ida_dbg.request_clear_trace (function) -ida_dbg.request_continue_process (function) -ida_dbg.request_del_bpt (function) -ida_dbg.request_detach_process (function) -ida_dbg.request_disable_bblk_trace (function) -ida_dbg.request_disable_bpt (function) -ida_dbg.request_disable_func_trace (function) -ida_dbg.request_disable_insn_trace (function) -ida_dbg.request_disable_step_trace (function) -ida_dbg.request_enable_bblk_trace (function) -ida_dbg.request_enable_bpt (function) -ida_dbg.request_enable_func_trace (function) -ida_dbg.request_enable_insn_trace (function) -ida_dbg.request_enable_step_trace (function) -ida_dbg.request_exit_process (function) -ida_dbg.request_resume_thread (function) -ida_dbg.request_run_to (function) -ida_dbg.request_select_thread (function) -ida_dbg.request_set_bblk_trace_options (function) -ida_dbg.request_set_func_trace_options (function) -ida_dbg.request_set_insn_trace_options (function) -ida_dbg.request_set_reg_val (function) -ida_dbg.request_set_resume_mode (function) -ida_dbg.request_set_step_trace_options (function) -ida_dbg.request_start_process (function) -ida_dbg.request_step_into (function) -ida_dbg.request_step_over (function) -ida_dbg.request_step_until_ret (function) -ida_dbg.request_suspend_process (function) -ida_dbg.request_suspend_thread (function) -ida_dbg.resume_thread (function) -ida_dbg.retrieve_exceptions (function) -ida_dbg.run_requests (function) -ida_dbg.run_to (function) -ida_dbg.save_trace_file (function) -ida_dbg.select_thread (function) -ida_dbg.send_dbg_command (function) -ida_dbg.set_bblk_trace_options (function) -ida_dbg.set_bpt_group (function) -ida_dbg.set_bptloc_group (function) -ida_dbg.set_bptloc_string (function) -ida_dbg.set_debugger_event_cond (function) -ida_dbg.set_debugger_options (function) -ida_dbg.set_func_trace_options (function) -ida_dbg.set_highlight_trace_options (function) -ida_dbg.set_insn_trace_options (function) -ida_dbg.set_manual_regions (function) -ida_dbg.set_process_options (function) -ida_dbg.set_process_state (function) -ida_dbg.set_reg_val (function) -ida_dbg.set_remote_debugger (function) -ida_dbg.set_resume_mode (function) -ida_dbg.set_step_trace_options (function) -ida_dbg.set_trace_base_address (function) -ida_dbg.set_trace_dynamic_register_set (function) -ida_dbg.set_trace_file_desc (function) -ida_dbg.set_trace_platform (function) -ida_dbg.set_trace_size (function) -ida_dbg.srcdbg_request_step_into (function) -ida_dbg.srcdbg_request_step_over (function) -ida_dbg.srcdbg_request_step_until_ret (function) -ida_dbg.srcdbg_step_into (function) -ida_dbg.srcdbg_step_over (function) -ida_dbg.srcdbg_step_until_ret (function) -ida_dbg.start_process (function) -ida_dbg.step_into (function) -ida_dbg.step_over (function) -ida_dbg.step_until_ret (function) -ida_dbg.store_exceptions (function) -ida_dbg.suspend_process (function) -ida_dbg.suspend_thread (function) -ida_dbg.tev_bpt (variable) -ida_dbg.tev_call (variable) -ida_dbg.tev_event (variable) -ida_dbg.tev_info_reg_t (class) -ida_dbg.tev_info_reg_t.__init__ (method) -ida_dbg.tev_info_t (class) -ida_dbg.tev_info_t.__init__ (method) -ida_dbg.tev_info_t.ea (variable) -ida_dbg.tev_info_t.tid (variable) -ida_dbg.tev_info_t.type (variable) -ida_dbg.tev_insn (variable) -ida_dbg.tev_max (variable) -ida_dbg.tev_mem (variable) -ida_dbg.tev_none (variable) -ida_dbg.tev_reg_value_t (class) -ida_dbg.tev_reg_value_t.__init__ (method) -ida_dbg.tev_reg_values_t (class) -ida_dbg.tev_reg_values_t.__getitem__ (method) -ida_dbg.tev_reg_values_t.__init__ (method) -ida_dbg.tev_reg_values_t.__len__ (method) -ida_dbg.tev_reg_values_t.__setitem__ (method) -ida_dbg.tev_reg_values_t.at (method) -ida_dbg.tev_reg_values_t.begin (method) -ida_dbg.tev_reg_values_t.capacity (method) -ida_dbg.tev_reg_values_t.clear (method) -ida_dbg.tev_reg_values_t.empty (method) -ida_dbg.tev_reg_values_t.end (method) -ida_dbg.tev_reg_values_t.erase (method) -ida_dbg.tev_reg_values_t.extract (method) -ida_dbg.tev_reg_values_t.grow (method) -ida_dbg.tev_reg_values_t.inject (method) -ida_dbg.tev_reg_values_t.insert (method) -ida_dbg.tev_reg_values_t.pop_back (method) -ida_dbg.tev_reg_values_t.push_back (method) -ida_dbg.tev_reg_values_t.qclear (method) -ida_dbg.tev_reg_values_t.reserve (method) -ida_dbg.tev_reg_values_t.resize (method) -ida_dbg.tev_reg_values_t.size (method) -ida_dbg.tev_reg_values_t.swap (method) -ida_dbg.tev_reg_values_t.truncate (method) -ida_dbg.tev_ret (variable) -ida_dbg.tevinforeg_vec_t (class) -ida_dbg.tevinforeg_vec_t.__getitem__ (method) -ida_dbg.tevinforeg_vec_t.__init__ (method) -ida_dbg.tevinforeg_vec_t.__len__ (method) -ida_dbg.tevinforeg_vec_t.__setitem__ (method) -ida_dbg.tevinforeg_vec_t.at (method) -ida_dbg.tevinforeg_vec_t.begin (method) -ida_dbg.tevinforeg_vec_t.capacity (method) -ida_dbg.tevinforeg_vec_t.clear (method) -ida_dbg.tevinforeg_vec_t.empty (method) -ida_dbg.tevinforeg_vec_t.end (method) -ida_dbg.tevinforeg_vec_t.erase (method) -ida_dbg.tevinforeg_vec_t.extract (method) -ida_dbg.tevinforeg_vec_t.grow (method) -ida_dbg.tevinforeg_vec_t.inject (method) -ida_dbg.tevinforeg_vec_t.insert (method) -ida_dbg.tevinforeg_vec_t.pop_back (method) -ida_dbg.tevinforeg_vec_t.push_back (method) -ida_dbg.tevinforeg_vec_t.qclear (method) -ida_dbg.tevinforeg_vec_t.reserve (method) -ida_dbg.tevinforeg_vec_t.resize (method) -ida_dbg.tevinforeg_vec_t.size (method) -ida_dbg.tevinforeg_vec_t.swap (method) -ida_dbg.tevinforeg_vec_t.truncate (method) -ida_dbg.update_bpt (function) -ida_dbg.wait_for_next_event (function) -ida_dbg.write_dbg_memory (function) -ida_diskio (module) -ida_diskio.IDA_SUBDIR_IDADIR_FIRST (variable) -ida_diskio.IDA_SUBDIR_IDP (variable) -ida_diskio.IDA_SUBDIR_ONLY_EXISTING (variable) -ida_diskio.LINPUT_GENERIC (variable) -ida_diskio.LINPUT_LOCAL (variable) -ida_diskio.LINPUT_NONE (variable) -ida_diskio.LINPUT_PROCMEM (variable) -ida_diskio.LINPUT_RFILE (variable) -ida_diskio.choose_ioport_device2 (function) -ida_diskio.choose_ioport_parser_t (class) -ida_diskio.choose_ioport_parser_t.__disown__ (method) -ida_diskio.choose_ioport_parser_t.__init__ (method) -ida_diskio.choose_ioport_parser_t.parse (method) -ida_diskio.close_linput (function) -ida_diskio.create_bytearray_linput (function) -ida_diskio.create_generic_linput (function) -ida_diskio.create_memory_linput (function) -ida_diskio.eclose (function) -ida_diskio.enumerate_files (function) -ida_diskio.enumerate_files2 (function) -ida_diskio.file_enumerator_t (class) -ida_diskio.file_enumerator_t.__disown__ (method) -ida_diskio.file_enumerator_t.__init__ (method) -ida_diskio.file_enumerator_t.visit_file (method) -ida_diskio.fopenA (function) -ida_diskio.fopenM (function) -ida_diskio.fopenRB (function) -ida_diskio.fopenRT (function) -ida_diskio.fopenWB (function) -ida_diskio.fopenWT (function) -ida_diskio.generic_linput_t (class) -ida_diskio.generic_linput_t.__init__ (method) -ida_diskio.generic_linput_t.blocksize (variable) -ida_diskio.generic_linput_t.filesize (variable) -ida_diskio.generic_linput_t.read (method) -ida_diskio.get_ida_subdirs (function) -ida_diskio.get_linput_type (function) -ida_diskio.get_special_folder (function) -ida_diskio.get_user_idadir (function) -ida_diskio.getsysfile (function) -ida_diskio.idadir (function) -ida_diskio.ioports_fallback_t (class) -ida_diskio.ioports_fallback_t.__disown__ (method) -ida_diskio.ioports_fallback_t.__init__ (method) -ida_diskio.ioports_fallback_t.handle (method) -ida_diskio.open_linput (function) -ida_diskio.qlgetz (function) -ida_diskio.read_ioports2 (function) -ida_dirtree (module) -ida_dirtree.DTN_DISPLAY_NAME (variable) -ida_dirtree.DTN_FULL_NAME (variable) -ida_dirtree.direntry_t (class) -ida_dirtree.direntry_t.__eq__ (method) -ida_dirtree.direntry_t.__init__ (method) -ida_dirtree.direntry_t.__lt__ (method) -ida_dirtree.direntry_t.__ne__ (method) -ida_dirtree.direntry_t.idx (variable) -ida_dirtree.direntry_t.isdir (variable) -ida_dirtree.direntry_t.valid (method) -ida_dirtree.direntry_vec_t (class) -ida_dirtree.direntry_vec_t.__eq__ (method) -ida_dirtree.direntry_vec_t.__getitem__ (method) -ida_dirtree.direntry_vec_t.__init__ (method) -ida_dirtree.direntry_vec_t.__len__ (method) -ida_dirtree.direntry_vec_t.__ne__ (method) -ida_dirtree.direntry_vec_t.__setitem__ (method) -ida_dirtree.direntry_vec_t._del (method) -ida_dirtree.direntry_vec_t.add_unique (method) -ida_dirtree.direntry_vec_t.at (method) -ida_dirtree.direntry_vec_t.begin (method) -ida_dirtree.direntry_vec_t.capacity (method) -ida_dirtree.direntry_vec_t.clear (method) -ida_dirtree.direntry_vec_t.empty (method) -ida_dirtree.direntry_vec_t.end (method) -ida_dirtree.direntry_vec_t.erase (method) -ida_dirtree.direntry_vec_t.extract (method) -ida_dirtree.direntry_vec_t.find (method) -ida_dirtree.direntry_vec_t.grow (method) -ida_dirtree.direntry_vec_t.has (method) -ida_dirtree.direntry_vec_t.inject (method) -ida_dirtree.direntry_vec_t.insert (method) -ida_dirtree.direntry_vec_t.pop_back (method) -ida_dirtree.direntry_vec_t.push_back (method) -ida_dirtree.direntry_vec_t.qclear (method) -ida_dirtree.direntry_vec_t.reserve (method) -ida_dirtree.direntry_vec_t.resize (method) -ida_dirtree.direntry_vec_t.size (method) -ida_dirtree.direntry_vec_t.swap (method) -ida_dirtree.direntry_vec_t.truncate (method) -ida_dirtree.dirspec_t (class) -ida_dirtree.dirspec_t.__disown__ (method) -ida_dirtree.dirspec_t.__init__ (method) -ida_dirtree.dirspec_t.get_attrs (method) -ida_dirtree.dirspec_t.get_inode (method) -ida_dirtree.dirspec_t.get_name (method) -ida_dirtree.dirspec_t.is_orderable (method) -ida_dirtree.dirspec_t.rename_inode (method) -ida_dirtree.dirspec_t.unlink_inode (method) -ida_dirtree.dirtree_cursor_t (class) -ida_dirtree.dirtree_cursor_t.__eq__ (method) -ida_dirtree.dirtree_cursor_t.__ge__ (method) -ida_dirtree.dirtree_cursor_t.__gt__ (method) -ida_dirtree.dirtree_cursor_t.__init__ (method) -ida_dirtree.dirtree_cursor_t.__le__ (method) -ida_dirtree.dirtree_cursor_t.__lt__ (method) -ida_dirtree.dirtree_cursor_t.__ne__ (method) -ida_dirtree.dirtree_cursor_t.compare (method) -ida_dirtree.dirtree_cursor_t.is_root_cursor (method) -ida_dirtree.dirtree_cursor_t.parent (variable) -ida_dirtree.dirtree_cursor_t.rank (variable) -ida_dirtree.dirtree_cursor_t.root_cursor (method) -ida_dirtree.dirtree_cursor_t.set_root_cursor (method) -ida_dirtree.dirtree_cursor_t.valid (method) -ida_dirtree.dirtree_cursor_t_root_cursor (function) -ida_dirtree.dirtree_cursor_vec_t (class) -ida_dirtree.dirtree_cursor_vec_t.__eq__ (method) -ida_dirtree.dirtree_cursor_vec_t.__getitem__ (method) -ida_dirtree.dirtree_cursor_vec_t.__init__ (method) -ida_dirtree.dirtree_cursor_vec_t.__len__ (method) -ida_dirtree.dirtree_cursor_vec_t.__ne__ (method) -ida_dirtree.dirtree_cursor_vec_t.__setitem__ (method) -ida_dirtree.dirtree_cursor_vec_t._del (method) -ida_dirtree.dirtree_cursor_vec_t.add_unique (method) -ida_dirtree.dirtree_cursor_vec_t.at (method) -ida_dirtree.dirtree_cursor_vec_t.begin (method) -ida_dirtree.dirtree_cursor_vec_t.capacity (method) -ida_dirtree.dirtree_cursor_vec_t.clear (method) -ida_dirtree.dirtree_cursor_vec_t.empty (method) -ida_dirtree.dirtree_cursor_vec_t.end (method) -ida_dirtree.dirtree_cursor_vec_t.erase (method) -ida_dirtree.dirtree_cursor_vec_t.extract (method) -ida_dirtree.dirtree_cursor_vec_t.find (method) -ida_dirtree.dirtree_cursor_vec_t.grow (method) -ida_dirtree.dirtree_cursor_vec_t.has (method) -ida_dirtree.dirtree_cursor_vec_t.inject (method) -ida_dirtree.dirtree_cursor_vec_t.insert (method) -ida_dirtree.dirtree_cursor_vec_t.pop_back (method) -ida_dirtree.dirtree_cursor_vec_t.push_back (method) -ida_dirtree.dirtree_cursor_vec_t.qclear (method) -ida_dirtree.dirtree_cursor_vec_t.reserve (method) -ida_dirtree.dirtree_cursor_vec_t.resize (method) -ida_dirtree.dirtree_cursor_vec_t.size (method) -ida_dirtree.dirtree_cursor_vec_t.swap (method) -ida_dirtree.dirtree_cursor_vec_t.truncate (method) -ida_dirtree.dirtree_iterator_t (class) -ida_dirtree.dirtree_iterator_t.__init__ (method) -ida_dirtree.dirtree_selection_t (class) -ida_dirtree.dirtree_selection_t.__init__ (method) -ida_dirtree.dirtree_t (class) -ida_dirtree.dirtree_t.__init__ (method) -ida_dirtree.dirtree_t.change_rank (method) -ida_dirtree.dirtree_t.chdir (method) -ida_dirtree.dirtree_t.errstr (method) -ida_dirtree.dirtree_t.find_entry (method) -ida_dirtree.dirtree_t.findfirst (method) -ida_dirtree.dirtree_t.findnext (method) -ida_dirtree.dirtree_t.get_abspath (method) -ida_dirtree.dirtree_t.get_dir_size (method) -ida_dirtree.dirtree_t.get_entry_attrs (method) -ida_dirtree.dirtree_t.get_entry_name (method) -ida_dirtree.dirtree_t.get_id (method) -ida_dirtree.dirtree_t.get_parent_cursor (method) -ida_dirtree.dirtree_t.get_rank (method) -ida_dirtree.dirtree_t.getcwd (method) -ida_dirtree.dirtree_t.is_dir_ordered (method) -ida_dirtree.dirtree_t.is_orderable (method) -ida_dirtree.dirtree_t.isdir (method) -ida_dirtree.dirtree_t.isfile (method) -ida_dirtree.dirtree_t.link (method) -ida_dirtree.dirtree_t.load (method) -ida_dirtree.dirtree_t.mkdir (method) -ida_dirtree.dirtree_t.notify_dirtree (method) -ida_dirtree.dirtree_t.rename (method) -ida_dirtree.dirtree_t.resolve_cursor (method) -ida_dirtree.dirtree_t.resolve_path (method) -ida_dirtree.dirtree_t.rmdir (method) -ida_dirtree.dirtree_t.save (method) -ida_dirtree.dirtree_t.set_id (method) -ida_dirtree.dirtree_t.set_natural_order (method) -ida_dirtree.dirtree_t.traverse (method) -ida_dirtree.dirtree_t.unlink (method) -ida_dirtree.dirtree_t_errstr (function) -ida_dirtree.dirtree_visitor_t (class) -ida_dirtree.dirtree_visitor_t.__disown__ (method) -ida_dirtree.dirtree_visitor_t.__init__ (method) -ida_dirtree.dirtree_visitor_t.visit (method) -ida_dirtree.get_std_dirtree (function) -ida_entry (module) -ida_entry.AEF_IDBENC (variable) -ida_entry.AEF_NODUMMY (variable) -ida_entry.AEF_UTF8 (variable) -ida_entry.add_entry (function) -ida_entry.get_entry (function) -ida_entry.get_entry_forwarder (function) -ida_entry.get_entry_name (function) -ida_entry.get_entry_ordinal (function) -ida_entry.get_entry_qty (function) -ida_entry.rename_entry (function) -ida_entry.set_entry_forwarder (function) -ida_enum (module) -ida_enum.DEFMASK (variable) -ida_enum.ENFL_REGEX (variable) -ida_enum.ENUM_MEMBER_ERROR_ENUM (variable) -ida_enum.ENUM_MEMBER_ERROR_ILLV (variable) -ida_enum.ENUM_MEMBER_ERROR_MASK (variable) -ida_enum.ENUM_MEMBER_ERROR_NAME (variable) -ida_enum.ENUM_MEMBER_ERROR_VALUE (variable) -ida_enum.MAX_ENUM_SERIAL (variable) -ida_enum.add_enum (function) -ida_enum.add_enum_member (function) -ida_enum.del_enum (function) -ida_enum.del_enum_member (function) -ida_enum.enum_member_visitor_t (class) -ida_enum.enum_member_visitor_t.__disown__ (method) -ida_enum.enum_member_visitor_t.__init__ (method) -ida_enum.enum_member_visitor_t.visit_enum_member (method) -ida_enum.for_all_enum_members (function) -ida_enum.get_bmask_cmt (function) -ida_enum.get_bmask_name (function) -ida_enum.get_enum (function) -ida_enum.get_enum_cmt (function) -ida_enum.get_enum_flag (function) -ida_enum.get_enum_idx (function) -ida_enum.get_enum_member (function) -ida_enum.get_enum_member_bmask (function) -ida_enum.get_enum_member_by_name (function) -ida_enum.get_enum_member_cmt (function) -ida_enum.get_enum_member_enum (function) -ida_enum.get_enum_member_name (function) -ida_enum.get_enum_member_serial (function) -ida_enum.get_enum_member_value (function) -ida_enum.get_enum_name (function) -ida_enum.get_enum_name2 (function) -ida_enum.get_enum_qty (function) -ida_enum.get_enum_size (function) -ida_enum.get_enum_type_ordinal (function) -ida_enum.get_enum_width (function) -ida_enum.get_first_bmask (function) -ida_enum.get_first_enum_member (function) -ida_enum.get_first_serial_enum_member (function) -ida_enum.get_last_bmask (function) -ida_enum.get_last_enum_member (function) -ida_enum.get_last_serial_enum_member (function) -ida_enum.get_next_bmask (function) -ida_enum.get_next_enum_member (function) -ida_enum.get_next_serial_enum_member (function) -ida_enum.get_prev_bmask (function) -ida_enum.get_prev_enum_member (function) -ida_enum.get_prev_serial_enum_member (function) -ida_enum.getn_enum (function) -ida_enum.is_bf (function) -ida_enum.is_enum_fromtil (function) -ida_enum.is_enum_hidden (function) -ida_enum.is_ghost_enum (function) -ida_enum.is_one_bit_mask (function) -ida_enum.set_bmask_cmt (function) -ida_enum.set_bmask_name (function) -ida_enum.set_enum_bf (function) -ida_enum.set_enum_cmt (function) -ida_enum.set_enum_flag (function) -ida_enum.set_enum_fromtil (function) -ida_enum.set_enum_ghost (function) -ida_enum.set_enum_hidden (function) -ida_enum.set_enum_idx (function) -ida_enum.set_enum_member_cmt (function) -ida_enum.set_enum_member_name (function) -ida_enum.set_enum_name (function) -ida_enum.set_enum_type_ordinal (function) -ida_enum.set_enum_width (function) -ida_expr (module) -ida_expr.CPL_DEL_MACROS (variable) -ida_expr.CPL_ONLY_SAFE (variable) -ida_expr.CPL_USE_LABELS (variable) -ida_expr.EXTFUN_BASE (variable) -ida_expr.EXTFUN_NORET (variable) -ida_expr.EXTFUN_SAFE (variable) -ida_expr.IDC_LANG_EXT (variable) -ida_expr.VARSLICE_SINGLE (variable) -ida_expr.VREF_COPY (variable) -ida_expr.VREF_LOOP (variable) -ida_expr.VREF_ONCE (variable) -ida_expr.VT_FLOAT (variable) -ida_expr.VT_FUNC (variable) -ida_expr.VT_INT64 (variable) -ida_expr.VT_LONG (variable) -ida_expr.VT_OBJ (variable) -ida_expr.VT_PVOID (variable) -ida_expr.VT_REF (variable) -ida_expr.VT_STR (variable) -ida_expr.VT_WILD (variable) -ida_expr._IdcFunction (class) -ida_expr._IdcFunction.__call__ (method) -ida_expr._IdcFunction.__init__ (method) -ida_expr.add_idc_class (function) -ida_expr.add_idc_func (function) -ida_expr.add_idc_gvar (function) -ida_expr.call_idc_func__ (function) -ida_expr.compile_idc_file (function) -ida_expr.compile_idc_snippet (function) -ida_expr.compile_idc_text (function) -ida_expr.copy_idcv (function) -ida_expr.create_idcv_ref (function) -ida_expr.deep_copy_idcv (function) -ida_expr.del_idc_func (function) -ida_expr.del_idcv_attr (function) -ida_expr.deref_idcv (function) -ida_expr.eExecThrow (variable) -ida_expr.eval_expr (function) -ida_expr.eval_idc_expr (function) -ida_expr.exec_idc_script (function) -ida_expr.exec_system_script (function) -ida_expr.find_idc_class (function) -ida_expr.find_idc_func (function) -ida_expr.find_idc_gvar (function) -ida_expr.first_idcv_attr (function) -ida_expr.free_idcv (function) -ida_expr.get_idc_filename (function) -ida_expr.get_idcv_attr (function) -ida_expr.get_idcv_class_name (function) -ida_expr.get_idcv_slice (function) -ida_expr.highlighter_cbs_t (class) -ida_expr.highlighter_cbs_t.__disown__ (method) -ida_expr.highlighter_cbs_t.__init__ (method) -ida_expr.highlighter_cbs_t.cur_block_state (method) -ida_expr.highlighter_cbs_t.prev_block_state (method) -ida_expr.highlighter_cbs_t.set_block_state (method) -ida_expr.highlighter_cbs_t.set_style (method) -ida_expr.idc_global_t (class) -ida_expr.idc_global_t.__init__ (method) -ida_expr.idc_value_t (class) -ida_expr.idc_value_t.__init__ (method) -ida_expr.idc_value_t._create_empty_string (method) -ida_expr.idc_value_t.c_str (method) -ida_expr.idc_value_t.clear (method) -ida_expr.idc_value_t.create_empty_string (method) -ida_expr.idc_value_t.e (variable) -ida_expr.idc_value_t.funcidx (variable) -ida_expr.idc_value_t.i64 (variable) -ida_expr.idc_value_t.is_convertible (method) -ida_expr.idc_value_t.is_integral (method) -ida_expr.idc_value_t.is_zero (method) -ida_expr.idc_value_t.num (variable) -ida_expr.idc_value_t.pvoid (variable) -ida_expr.idc_value_t.qstr (method) -ida_expr.idc_value_t.reserve (variable) -ida_expr.idc_value_t.set_float (method) -ida_expr.idc_value_t.set_int64 (method) -ida_expr.idc_value_t.set_long (method) -ida_expr.idc_value_t.set_pvoid (method) -ida_expr.idc_value_t.set_string (method) -ida_expr.idc_value_t.swap (method) -ida_expr.idc_value_t.u_str (method) -ida_expr.idc_value_t.vtype (variable) -ida_expr.idc_values_t (class) -ida_expr.idc_values_t.__getitem__ (method) -ida_expr.idc_values_t.__init__ (method) -ida_expr.idc_values_t.__len__ (method) -ida_expr.idc_values_t.__setitem__ (method) -ida_expr.idc_values_t.at (method) -ida_expr.idc_values_t.begin (method) -ida_expr.idc_values_t.capacity (method) -ida_expr.idc_values_t.clear (method) -ida_expr.idc_values_t.empty (method) -ida_expr.idc_values_t.end (method) -ida_expr.idc_values_t.erase (method) -ida_expr.idc_values_t.extract (method) -ida_expr.idc_values_t.grow (method) -ida_expr.idc_values_t.inject (method) -ida_expr.idc_values_t.insert (method) -ida_expr.idc_values_t.pop_back (method) -ida_expr.idc_values_t.push_back (method) -ida_expr.idc_values_t.qclear (method) -ida_expr.idc_values_t.reserve (method) -ida_expr.idc_values_t.resize (method) -ida_expr.idc_values_t.size (method) -ida_expr.idc_values_t.swap (method) -ida_expr.idc_values_t.truncate (method) -ida_expr.idcv_float (function) -ida_expr.idcv_int64 (function) -ida_expr.idcv_long (function) -ida_expr.idcv_num (function) -ida_expr.idcv_object (function) -ida_expr.idcv_string (function) -ida_expr.last_idcv_attr (function) -ida_expr.move_idcv (function) -ida_expr.next_idcv_attr (function) -ida_expr.prev_idcv_attr (function) -ida_expr.print_idcv (function) -ida_expr.py_add_idc_func (function) -ida_expr.py_get_call_idc_func (function) -ida_expr.pyw_convert_defvals (function) -ida_expr.pyw_register_idc_func (function) -ida_expr.pyw_unregister_idc_func (function) -ida_expr.set_header_path (function) -ida_expr.set_idcv_attr (function) -ida_expr.set_idcv_slice (function) -ida_expr.swap_idcvs (function) -ida_expr.throw_idc_exception (function) -ida_fixup (module) -ida_fixup.FIXUPF_CREATED (variable) -ida_fixup.FIXUPF_EXTDEF (variable) -ida_fixup.FIXUPF_LOADER_MASK (variable) -ida_fixup.FIXUPF_REL (variable) -ida_fixup.FIXUPF_UNUSED (variable) -ida_fixup.FIXUP_CUSTOM (variable) -ida_fixup.FIXUP_HI16 (variable) -ida_fixup.FIXUP_HI8 (variable) -ida_fixup.FIXUP_LOW16 (variable) -ida_fixup.FIXUP_LOW8 (variable) -ida_fixup.FIXUP_OFF16 (variable) -ida_fixup.FIXUP_OFF16S (variable) -ida_fixup.FIXUP_OFF32 (variable) -ida_fixup.FIXUP_OFF32S (variable) -ida_fixup.FIXUP_OFF64 (variable) -ida_fixup.FIXUP_OFF8 (variable) -ida_fixup.FIXUP_OFF8S (variable) -ida_fixup.FIXUP_PTR16 (variable) -ida_fixup.FIXUP_PTR32 (variable) -ida_fixup.FIXUP_SEG16 (variable) -ida_fixup.V695_FIXUP_VHIGH (variable) -ida_fixup.V695_FIXUP_VLOW (variable) -ida_fixup.calc_fixup_size (function) -ida_fixup.contains_fixups (function) -ida_fixup.del_fixup (function) -ida_fixup.exists_fixup (function) -ida_fixup.find_custom_fixup (function) -ida_fixup.fixup_data_t (class) -ida_fixup.fixup_data_t.__init__ (method) -ida_fixup.fixup_data_t.calc_size (method) -ida_fixup.fixup_data_t.clr_extdef (method) -ida_fixup.fixup_data_t.clr_unused (method) -ida_fixup.fixup_data_t.displacement (variable) -ida_fixup.fixup_data_t.get (method) -ida_fixup.fixup_data_t.get_base (method) -ida_fixup.fixup_data_t.get_desc (method) -ida_fixup.fixup_data_t.get_flags (method) -ida_fixup.fixup_data_t.get_handler (method) -ida_fixup.fixup_data_t.get_type (method) -ida_fixup.fixup_data_t.get_value (method) -ida_fixup.fixup_data_t.has_base (method) -ida_fixup.fixup_data_t.is_custom (method) -ida_fixup.fixup_data_t.is_extdef (method) -ida_fixup.fixup_data_t.is_unused (method) -ida_fixup.fixup_data_t.off (variable) -ida_fixup.fixup_data_t.patch_value (method) -ida_fixup.fixup_data_t.sel (variable) -ida_fixup.fixup_data_t.set (method) -ida_fixup.fixup_data_t.set_base (method) -ida_fixup.fixup_data_t.set_extdef (method) -ida_fixup.fixup_data_t.set_sel (method) -ida_fixup.fixup_data_t.set_target_sel (method) -ida_fixup.fixup_data_t.set_type (method) -ida_fixup.fixup_data_t.set_type_and_flags (method) -ida_fixup.fixup_data_t.set_unused (method) -ida_fixup.fixup_data_t.was_created (method) -ida_fixup.fixup_info_t (class) -ida_fixup.fixup_info_t.__init__ (method) -ida_fixup.gen_fix_fixups (function) -ida_fixup.get_first_fixup_ea (function) -ida_fixup.get_fixup (function) -ida_fixup.get_fixup_desc (function) -ida_fixup.get_fixup_handler (function) -ida_fixup.get_fixup_value (function) -ida_fixup.get_fixups (function) -ida_fixup.get_next_fixup_ea (function) -ida_fixup.get_prev_fixup_ea (function) -ida_fixup.handle_fixups_in_macro (function) -ida_fixup.is_fixup_custom (function) -ida_fixup.patch_fixup_value (function) -ida_fixup.set_fixup (function) -ida_fpro (module) -ida_fpro.qfile_t (class) -ida_fpro.qfile_t.__init__ (method) -ida_fpro.qfile_t.close (method) -ida_fpro.qfile_t.filename (method) -ida_fpro.qfile_t.flush (method) -ida_fpro.qfile_t.from_capsule (method) -ida_fpro.qfile_t.from_fp (method) -ida_fpro.qfile_t.get_byte (method) -ida_fpro.qfile_t.get_fp (method) -ida_fpro.qfile_t.gets (method) -ida_fpro.qfile_t.open (method) -ida_fpro.qfile_t.opened (method) -ida_fpro.qfile_t.put_byte (method) -ida_fpro.qfile_t.puts (method) -ida_fpro.qfile_t.read (method) -ida_fpro.qfile_t.readbytes (method) -ida_fpro.qfile_t.seek (method) -ida_fpro.qfile_t.size (method) -ida_fpro.qfile_t.tell (method) -ida_fpro.qfile_t.tmpfile (method) -ida_fpro.qfile_t.write (method) -ida_fpro.qfile_t.writebytes (method) -ida_fpro.qfile_t_from_capsule (function) -ida_fpro.qfile_t_from_fp (function) -ida_fpro.qfile_t_tmpfile (function) -ida_frame (module) -ida_frame.REGVAR_ERROR_ARG (variable) -ida_frame.REGVAR_ERROR_NAME (variable) -ida_frame.REGVAR_ERROR_OK (variable) -ida_frame.REGVAR_ERROR_RANGE (variable) -ida_frame.STKVAR_VALID_SIZE (variable) -ida_frame.add_auto_stkpnt (function) -ida_frame.add_frame (function) -ida_frame.add_regvar (function) -ida_frame.add_user_stkpnt (function) -ida_frame.build_stkvar_name (function) -ida_frame.build_stkvar_xrefs (function) -ida_frame.calc_stkvar_struc_offset (function) -ida_frame.define_stkvar (function) -ida_frame.del_frame (function) -ida_frame.del_regvar (function) -ida_frame.del_stkpnt (function) -ida_frame.delete_unreferenced_stkvars (function) -ida_frame.delete_wrong_stkvar_ops (function) -ida_frame.find_regvar (function) -ida_frame.frame_off_args (function) -ida_frame.frame_off_lvars (function) -ida_frame.frame_off_retaddr (function) -ida_frame.frame_off_savregs (function) -ida_frame.free_regvar (function) -ida_frame.get_effective_spd (function) -ida_frame.get_frame (function) -ida_frame.get_frame_part (function) -ida_frame.get_frame_retsize (function) -ida_frame.get_frame_size (function) -ida_frame.get_func_by_frame (function) -ida_frame.get_min_spd_ea (function) -ida_frame.get_sp_delta (function) -ida_frame.get_spd (function) -ida_frame.get_stkvar (function) -ida_frame.has_regvar (function) -ida_frame.is_funcarg_off (function) -ida_frame.lvar_off (function) -ida_frame.recalc_spd (function) -ida_frame.recalc_spd_for_basic_block (function) -ida_frame.regvar_t (class) -ida_frame.regvar_t.__init__ (method) -ida_frame.regvar_t.canon (variable) -ida_frame.regvar_t.cmt (variable) -ida_frame.regvar_t.swap (method) -ida_frame.regvar_t.user (variable) -ida_frame.rename_regvar (function) -ida_frame.set_auto_spd (function) -ida_frame.set_frame_size (function) -ida_frame.set_purged (function) -ida_frame.set_regvar_cmt (function) -ida_frame.soff_to_fpoff (function) -ida_frame.stkpnt_t (class) -ida_frame.stkpnt_t.__eq__ (method) -ida_frame.stkpnt_t.__ge__ (method) -ida_frame.stkpnt_t.__gt__ (method) -ida_frame.stkpnt_t.__init__ (method) -ida_frame.stkpnt_t.__le__ (method) -ida_frame.stkpnt_t.__lt__ (method) -ida_frame.stkpnt_t.__ne__ (method) -ida_frame.stkpnt_t.compare (method) -ida_frame.stkpnts_t (class) -ida_frame.stkpnts_t.__eq__ (method) -ida_frame.stkpnts_t.__ge__ (method) -ida_frame.stkpnts_t.__gt__ (method) -ida_frame.stkpnts_t.__init__ (method) -ida_frame.stkpnts_t.__le__ (method) -ida_frame.stkpnts_t.__lt__ (method) -ida_frame.stkpnts_t.__ne__ (method) -ida_frame.stkpnts_t.compare (method) -ida_frame.update_fpd (function) -ida_frame.xreflist_entry_t (class) -ida_frame.xreflist_entry_t.__eq__ (method) -ida_frame.xreflist_entry_t.__ge__ (method) -ida_frame.xreflist_entry_t.__gt__ (method) -ida_frame.xreflist_entry_t.__init__ (method) -ida_frame.xreflist_entry_t.__le__ (method) -ida_frame.xreflist_entry_t.__lt__ (method) -ida_frame.xreflist_entry_t.__ne__ (method) -ida_frame.xreflist_entry_t.compare (method) -ida_frame.xreflist_entry_t.ea (variable) -ida_frame.xreflist_entry_t.opnum (variable) -ida_frame.xreflist_entry_t.type (variable) -ida_frame.xreflist_t (class) -ida_frame.xreflist_t.__eq__ (method) -ida_frame.xreflist_t.__getitem__ (method) -ida_frame.xreflist_t.__init__ (method) -ida_frame.xreflist_t.__len__ (method) -ida_frame.xreflist_t.__ne__ (method) -ida_frame.xreflist_t.__setitem__ (method) -ida_frame.xreflist_t._del (method) -ida_frame.xreflist_t.add_unique (method) -ida_frame.xreflist_t.at (method) -ida_frame.xreflist_t.begin (method) -ida_frame.xreflist_t.capacity (method) -ida_frame.xreflist_t.clear (method) -ida_frame.xreflist_t.empty (method) -ida_frame.xreflist_t.end (method) -ida_frame.xreflist_t.erase (method) -ida_frame.xreflist_t.extract (method) -ida_frame.xreflist_t.find (method) -ida_frame.xreflist_t.grow (method) -ida_frame.xreflist_t.has (method) -ida_frame.xreflist_t.inject (method) -ida_frame.xreflist_t.insert (method) -ida_frame.xreflist_t.pop_back (method) -ida_frame.xreflist_t.push_back (method) -ida_frame.xreflist_t.qclear (method) -ida_frame.xreflist_t.reserve (method) -ida_frame.xreflist_t.resize (method) -ida_frame.xreflist_t.size (method) -ida_frame.xreflist_t.swap (method) -ida_frame.xreflist_t.truncate (method) -ida_funcs (module) -ida_funcs.FIND_FUNC_DEFINE (variable) -ida_funcs.FIND_FUNC_EXIST (variable) -ida_funcs.FIND_FUNC_IGNOREFN (variable) -ida_funcs.FIND_FUNC_KEEPBD (variable) -ida_funcs.FIND_FUNC_NORMAL (variable) -ida_funcs.FIND_FUNC_OK (variable) -ida_funcs.FIND_FUNC_UNDEF (variable) -ida_funcs.FUNC_BOTTOMBP (variable) -ida_funcs.FUNC_FAR (variable) -ida_funcs.FUNC_FRAME (variable) -ida_funcs.FUNC_FUZZY_SP (variable) -ida_funcs.FUNC_HIDDEN (variable) -ida_funcs.FUNC_LIB (variable) -ida_funcs.FUNC_LUMINA (variable) -ida_funcs.FUNC_NORET (variable) -ida_funcs.FUNC_NORET_PENDING (variable) -ida_funcs.FUNC_OUTLINE (variable) -ida_funcs.FUNC_PROLOG_OK (variable) -ida_funcs.FUNC_PURGED_OK (variable) -ida_funcs.FUNC_REANALYZE (variable) -ida_funcs.FUNC_SP_READY (variable) -ida_funcs.FUNC_STATICDEF (variable) -ida_funcs.FUNC_TAIL (variable) -ida_funcs.FUNC_THUNK (variable) -ida_funcs.FUNC_USERFAR (variable) -ida_funcs.IDASGN_APPLIED (variable) -ida_funcs.IDASGN_BADARG (variable) -ida_funcs.IDASGN_CURRENT (variable) -ida_funcs.IDASGN_OK (variable) -ida_funcs.IDASGN_PLANNED (variable) -ida_funcs.LIBFUNC_DELAY (variable) -ida_funcs.LIBFUNC_FOUND (variable) -ida_funcs.LIBFUNC_NONE (variable) -ida_funcs.MOVE_FUNC_BADSTART (variable) -ida_funcs.MOVE_FUNC_NOCODE (variable) -ida_funcs.MOVE_FUNC_NOFUNC (variable) -ida_funcs.MOVE_FUNC_OK (variable) -ida_funcs.MOVE_FUNC_REFUSED (variable) -ida_funcs.add_func (function) -ida_funcs.add_func_ex (function) -ida_funcs.add_regarg (function) -ida_funcs.append_func_tail (function) -ida_funcs.apply_idasgn_to (function) -ida_funcs.apply_startup_sig (function) -ida_funcs.calc_func_size (function) -ida_funcs.calc_idasgn_state (function) -ida_funcs.calc_thunk_func_target (function) -ida_funcs.calc_thunk_func_target (function) -ida_funcs.del_func (function) -ida_funcs.del_idasgn (function) -ida_funcs.dyn_ea_array (class) -ida_funcs.dyn_ea_array.__getitem__ (method) -ida_funcs.dyn_ea_array.__init__ (method) -ida_funcs.dyn_ea_array.__len__ (method) -ida_funcs.dyn_ea_array.__setitem__ (method) -ida_funcs.dyn_range_array (class) -ida_funcs.dyn_range_array.__getitem__ (method) -ida_funcs.dyn_range_array.__init__ (method) -ida_funcs.dyn_range_array.__len__ (method) -ida_funcs.dyn_range_array.__setitem__ (method) -ida_funcs.dyn_regarg_array (class) -ida_funcs.dyn_regarg_array.__getitem__ (method) -ida_funcs.dyn_regarg_array.__init__ (method) -ida_funcs.dyn_regarg_array.__len__ (method) -ida_funcs.dyn_regarg_array.__setitem__ (method) -ida_funcs.dyn_regvar_array (class) -ida_funcs.dyn_regvar_array.__getitem__ (method) -ida_funcs.dyn_regvar_array.__init__ (method) -ida_funcs.dyn_regvar_array.__len__ (method) -ida_funcs.dyn_regvar_array.__setitem__ (method) -ida_funcs.dyn_stkpnt_array (class) -ida_funcs.dyn_stkpnt_array.__getitem__ (method) -ida_funcs.dyn_stkpnt_array.__init__ (method) -ida_funcs.dyn_stkpnt_array.__len__ (method) -ida_funcs.dyn_stkpnt_array.__setitem__ (method) -ida_funcs.f_any (function) -ida_funcs.find_func_bounds (function) -ida_funcs.free_regarg (function) -ida_funcs.func_contains (function) -ida_funcs.func_does_return (function) -ida_funcs.func_item_iterator_t (class) -ida_funcs.func_item_iterator_t.__init__ (method) -ida_funcs.func_item_iterator_t.__iter__ (method) -ida_funcs.func_item_iterator_t.__next__ (method) -ida_funcs.func_item_iterator_t.addresses (method) -ida_funcs.func_item_iterator_t.chunk (method) -ida_funcs.func_item_iterator_t.code_items (method) -ida_funcs.func_item_iterator_t.current (method) -ida_funcs.func_item_iterator_t.data_items (method) -ida_funcs.func_item_iterator_t.decode_preceding_insn (method) -ida_funcs.func_item_iterator_t.decode_prev_insn (method) -ida_funcs.func_item_iterator_t.first (method) -ida_funcs.func_item_iterator_t.head_items (method) -ida_funcs.func_item_iterator_t.last (method) -ida_funcs.func_item_iterator_t.next_addr (method) -ida_funcs.func_item_iterator_t.next_code (method) -ida_funcs.func_item_iterator_t.next_data (method) -ida_funcs.func_item_iterator_t.next_head (method) -ida_funcs.func_item_iterator_t.next_not_tail (method) -ida_funcs.func_item_iterator_t.not_tails (method) -ida_funcs.func_item_iterator_t.prev (method) -ida_funcs.func_item_iterator_t.prev_addr (method) -ida_funcs.func_item_iterator_t.prev_code (method) -ida_funcs.func_item_iterator_t.prev_data (method) -ida_funcs.func_item_iterator_t.prev_head (method) -ida_funcs.func_item_iterator_t.prev_not_tail (method) -ida_funcs.func_item_iterator_t.set (method) -ida_funcs.func_item_iterator_t.set_range (method) -ida_funcs.func_item_iterator_t.succ (method) -ida_funcs.func_item_iterator_t.succ_code (method) -ida_funcs.func_parent_iterator_set (function) -ida_funcs.func_parent_iterator_t (class) -ida_funcs.func_parent_iterator_t.__init__ (method) -ida_funcs.func_parent_iterator_t.__iter__ (method) -ida_funcs.func_parent_iterator_t.__next__ (method) -ida_funcs.func_parent_iterator_t.first (method) -ida_funcs.func_parent_iterator_t.last (method) -ida_funcs.func_parent_iterator_t.parent (method) -ida_funcs.func_parent_iterator_t.prev (method) -ida_funcs.func_parent_iterator_t.reset_fnt (method) -ida_funcs.func_parent_iterator_t.set (method) -ida_funcs.func_t (class) -ida_funcs.func_t.__get_points__ (method) -ida_funcs.func_t.__get_referers__ (method) -ida_funcs.func_t.__get_regargs__ (method) -ida_funcs.func_t.__get_regvars__ (method) -ida_funcs.func_t.__get_tails__ (method) -ida_funcs.func_t.__init__ (method) -ida_funcs.func_t.__iter__ (method) -ida_funcs.func_t.addresses (method) -ida_funcs.func_t.analyzed_sp (method) -ida_funcs.func_t.argsize (variable) -ida_funcs.func_t.code_items (method) -ida_funcs.func_t.color (variable) -ida_funcs.func_t.data_items (method) -ida_funcs.func_t.does_return (method) -ida_funcs.func_t.flags (variable) -ida_funcs.func_t.fpd (variable) -ida_funcs.func_t.frame (variable) -ida_funcs.func_t.frregs (variable) -ida_funcs.func_t.frsize (variable) -ida_funcs.func_t.head_items (method) -ida_funcs.func_t.is_far (method) -ida_funcs.func_t.need_prolog_analysis (method) -ida_funcs.func_t.not_tails (method) -ida_funcs.func_t.owner (variable) -ida_funcs.func_t.pntqty (variable) -ida_funcs.func_t.points (variable) -ida_funcs.func_t.referers (variable) -ida_funcs.func_t.refqty (variable) -ida_funcs.func_t.regargqty (variable) -ida_funcs.func_t.regargs (variable) -ida_funcs.func_t.regvarqty (variable) -ida_funcs.func_t.regvars (variable) -ida_funcs.func_t.tailqty (variable) -ida_funcs.func_t.tails (variable) -ida_funcs.func_t__from_ptrval__ (function) -ida_funcs.func_tail_iterator_set (function) -ida_funcs.func_tail_iterator_set_ea (function) -ida_funcs.func_tail_iterator_t (class) -ida_funcs.func_tail_iterator_t.__init__ (method) -ida_funcs.func_tail_iterator_t.__iter__ (method) -ida_funcs.func_tail_iterator_t.__next__ (method) -ida_funcs.func_tail_iterator_t.chunk (method) -ida_funcs.func_tail_iterator_t.first (method) -ida_funcs.func_tail_iterator_t.last (method) -ida_funcs.func_tail_iterator_t.main (method) -ida_funcs.func_tail_iterator_t.prev (method) -ida_funcs.func_tail_iterator_t.set (method) -ida_funcs.func_tail_iterator_t.set_ea (method) -ida_funcs.func_tail_iterator_t.set_range (method) -ida_funcs.get_current_idasgn (function) -ida_funcs.get_fchunk (function) -ida_funcs.get_fchunk_num (function) -ida_funcs.get_fchunk_qty (function) -ida_funcs.get_fchunk_referer (function) -ida_funcs.get_func (function) -ida_funcs.get_func_bitness (function) -ida_funcs.get_func_bits (function) -ida_funcs.get_func_bytes (function) -ida_funcs.get_func_chunknum (function) -ida_funcs.get_func_cmt (function) -ida_funcs.get_func_name (function) -ida_funcs.get_func_num (function) -ida_funcs.get_func_qty (function) -ida_funcs.get_func_ranges (function) -ida_funcs.get_idasgn_desc (function) -ida_funcs.get_idasgn_desc_with_matches (function) -ida_funcs.get_idasgn_qty (function) -ida_funcs.get_idasgn_title (function) -ida_funcs.get_next_fchunk (function) -ida_funcs.get_next_func (function) -ida_funcs.get_next_func_addr (function) -ida_funcs.get_prev_fchunk (function) -ida_funcs.get_prev_func (function) -ida_funcs.get_prev_func_addr (function) -ida_funcs.getn_fchunk (function) -ida_funcs.getn_func (function) -ida_funcs.is_finally_visible_func (function) -ida_funcs.is_func_entry (function) -ida_funcs.is_func_locked (function) -ida_funcs.is_func_tail (function) -ida_funcs.is_same_func (function) -ida_funcs.is_visible_func (function) -ida_funcs.lock_func (class) -ida_funcs.lock_func.__init__ (method) -ida_funcs.lock_func_range (function) -ida_funcs.lock_func_with_tails_t (class) -ida_funcs.lock_func_with_tails_t.__init__ (method) -ida_funcs.plan_to_apply_idasgn (function) -ida_funcs.read_regargs (function) -ida_funcs.reanalyze_function (function) -ida_funcs.reanalyze_noret_flag (function) -ida_funcs.regarg_t (class) -ida_funcs.regarg_t.__init__ (method) -ida_funcs.regarg_t.swap (method) -ida_funcs.remove_func_tail (function) -ida_funcs.set_func_cmt (function) -ida_funcs.set_func_end (function) -ida_funcs.set_func_name_if_jumpfunc (function) -ida_funcs.set_func_start (function) -ida_funcs.set_noret_insn (function) -ida_funcs.set_tail_owner (function) -ida_funcs.set_visible_func (function) -ida_funcs.try_to_add_libfunc (function) -ida_funcs.update_func (function) -ida_gdl (module) -ida_gdl.BasicBlock (class) -ida_gdl.BasicBlock.__init__ (method) -ida_gdl.BasicBlock.preds (method) -ida_gdl.BasicBlock.succs (method) -ida_gdl.CHART_FOLLOW_DIRECTION (variable) -ida_gdl.CHART_GEN_DOT (variable) -ida_gdl.CHART_GEN_GDL (variable) -ida_gdl.CHART_IGNORE_LIB_FROM (variable) -ida_gdl.CHART_IGNORE_LIB_TO (variable) -ida_gdl.CHART_NOLIBFUNCS (variable) -ida_gdl.CHART_PRINT_DOTS (variable) -ida_gdl.CHART_PRINT_NAMES (variable) -ida_gdl.CHART_RECURSIVE (variable) -ida_gdl.CHART_REFERENCED (variable) -ida_gdl.CHART_REFERENCING (variable) -ida_gdl.CHART_WINGRAPH (variable) -ida_gdl.FC_APPND (variable) -ida_gdl.FC_CALL_ENDS (variable) -ida_gdl.FC_CHKBREAK (variable) -ida_gdl.FC_NOEXT (variable) -ida_gdl.FC_NOPREDS (variable) -ida_gdl.FC_OUTLINES (variable) -ida_gdl.FC_PRINT (variable) -ida_gdl.FlowChart (class) -ida_gdl.FlowChart.__getitem__ (method) -ida_gdl.FlowChart.__init__ (method) -ida_gdl.FlowChart.__iter__ (method) -ida_gdl.FlowChart._getitem (method) -ida_gdl.FlowChart.refresh (method) -ida_gdl.FlowChart.size (variable) -ida_gdl.cancellable_graph_t (class) -ida_gdl.cancellable_graph_t.__disown__ (method) -ida_gdl.cancellable_graph_t.__init__ (method) -ida_gdl.display_gdl (function) -ida_gdl.fcb_cndret (variable) -ida_gdl.fcb_enoret (variable) -ida_gdl.fcb_error (variable) -ida_gdl.fcb_extern (variable) -ida_gdl.fcb_indjump (variable) -ida_gdl.fcb_noret (variable) -ida_gdl.fcb_normal (variable) -ida_gdl.fcb_ret (variable) -ida_gdl.gdl_graph_t (class) -ida_gdl.gdl_graph_t.__disown__ (method) -ida_gdl.gdl_graph_t.__init__ (method) -ida_gdl.gdl_graph_t.begin (method) -ida_gdl.gdl_graph_t.edge (method) -ida_gdl.gdl_graph_t.empty (method) -ida_gdl.gdl_graph_t.end (method) -ida_gdl.gdl_graph_t.entry (method) -ida_gdl.gdl_graph_t.exists (method) -ida_gdl.gdl_graph_t.exit (method) -ida_gdl.gdl_graph_t.front (method) -ida_gdl.gdl_graph_t.get_edge_color (method) -ida_gdl.gdl_graph_t.get_node_color (method) -ida_gdl.gdl_graph_t.get_node_label (method) -ida_gdl.gdl_graph_t.nedge (method) -ida_gdl.gdl_graph_t.node_qty (method) -ida_gdl.gdl_graph_t.npred (method) -ida_gdl.gdl_graph_t.nsucc (method) -ida_gdl.gdl_graph_t.pred (method) -ida_gdl.gdl_graph_t.print_edge (method) -ida_gdl.gdl_graph_t.print_graph_attributes (method) -ida_gdl.gdl_graph_t.print_node (method) -ida_gdl.gdl_graph_t.print_node_attributes (method) -ida_gdl.gdl_graph_t.size (method) -ida_gdl.gdl_graph_t.succ (method) -ida_gdl.gen_complex_call_chart (function) -ida_gdl.gen_flow_graph (function) -ida_gdl.gen_gdl (function) -ida_gdl.gen_simple_call_chart (function) -ida_gdl.is_noret_block (function) -ida_gdl.is_ret_block (function) -ida_gdl.node_iterator (class) -ida_gdl.node_iterator.__eq__ (method) -ida_gdl.node_iterator.__init__ (method) -ida_gdl.node_iterator.__ne__ (method) -ida_gdl.node_iterator.__ref__ (method) -ida_gdl.qbasic_block_t (class) -ida_gdl.qbasic_block_t.__init__ (method) -ida_gdl.qflow_chart_t (class) -ida_gdl.qflow_chart_t.__getitem__ (method) -ida_gdl.qflow_chart_t.__init__ (method) -ida_gdl.qflow_chart_t.append_to_flowchart (method) -ida_gdl.qflow_chart_t.bounds (variable) -ida_gdl.qflow_chart_t.calc_block_type (method) -ida_gdl.qflow_chart_t.create (method) -ida_gdl.qflow_chart_t.flags (variable) -ida_gdl.qflow_chart_t.get_node_label (method) -ida_gdl.qflow_chart_t.is_noret_block (method) -ida_gdl.qflow_chart_t.is_ret_block (method) -ida_gdl.qflow_chart_t.npred (method) -ida_gdl.qflow_chart_t.nproper (variable) -ida_gdl.qflow_chart_t.nsucc (method) -ida_gdl.qflow_chart_t.pfn (variable) -ida_gdl.qflow_chart_t.pred (method) -ida_gdl.qflow_chart_t.print_names (method) -ida_gdl.qflow_chart_t.print_node_attributes (method) -ida_gdl.qflow_chart_t.refresh (method) -ida_gdl.qflow_chart_t.size (method) -ida_gdl.qflow_chart_t.succ (method) -ida_graph (module) -ida_graph.GLICTL_CENTER (variable) -ida_graph.GraphViewer (class) -ida_graph.GraphViewer.AddCommand (method) -ida_graph.GraphViewer.AddEdge (method) -ida_graph.GraphViewer.AddNode (method) -ida_graph.GraphViewer.Clear (method) -ida_graph.GraphViewer.Close (method) -ida_graph.GraphViewer.Count (method) -ida_graph.GraphViewer.OnCommand (method) -ida_graph.GraphViewer.OnPopup (method) -ida_graph.GraphViewer.OnRefresh (method) -ida_graph.GraphViewer.Select (method) -ida_graph.GraphViewer.Show (method) -ida_graph.GraphViewer.UI_Hooks_Trampoline (class) -ida_graph.GraphViewer.UI_Hooks_Trampoline.__init__ (method) -ida_graph.GraphViewer.UI_Hooks_Trampoline.populating_widget_popup (method) -ida_graph.GraphViewer._OnBind (method) -ida_graph.GraphViewer.__getitem__ (method) -ida_graph.GraphViewer.__init__ (method) -ida_graph.GraphViewer.__init__._qccb (function) -ida_graph.GraphViewer.__iter__ (method) -ida_graph.MTG_DOT_NODE (variable) -ida_graph.MTG_GROUP_NODE (variable) -ida_graph.MTG_NON_DISPLAYABLE_NODE (variable) -ida_graph.NIF_BG_COLOR (variable) -ida_graph.NIF_EA (variable) -ida_graph.NIF_FLAGS (variable) -ida_graph.NIF_FRAME_COLOR (variable) -ida_graph.NIF_TEXT (variable) -ida_graph.TPointDouble (class) -ida_graph.TPointDouble.__eq__ (method) -ida_graph.TPointDouble.__init__ (method) -ida_graph.TPointDouble.__ne__ (method) -ida_graph.TPointDouble.add (method) -ida_graph.TPointDouble.negate (method) -ida_graph.TPointDouble.sub (method) -ida_graph.abstract_graph_t (class) -ida_graph.abstract_graph_t.__disown__ (method) -ida_graph.abstract_graph_t.__init__ (method) -ida_graph.abstract_graph_t.callback_ud (variable) -ida_graph.abstract_graph_t.circle_center (variable) -ida_graph.abstract_graph_t.circle_radius (variable) -ida_graph.abstract_graph_t.create_circle_layout (method) -ida_graph.abstract_graph_t.create_tree_layout (method) -ida_graph.abstract_graph_t.current_layout (variable) -ida_graph.abstract_graph_t.get_edge (method) -ida_graph.abstract_graph_t.grcall (method) -ida_graph.abstract_graph_t.nrect (method) -ida_graph.abstract_graph_t.rect_edges_made (variable) -ida_graph.abstract_graph_t.set_callback (method) -ida_graph.abstract_graph_t.title (variable) -ida_graph.calc_dist (function) -ida_graph.clr_node_info (function) -ida_graph.create_disasm_graph (function) -ida_graph.create_graph_viewer (function) -ida_graph.create_mutable_graph (function) -ida_graph.create_user_graph_place (function) -ida_graph.del_node_info (function) -ida_graph.delete_mutable_graph (function) -ida_graph.edge_info_t (class) -ida_graph.edge_info_t.__init__ (method) -ida_graph.edge_info_t.color (variable) -ida_graph.edge_info_t.layout (variable) -ida_graph.edge_info_t.reverse_layout (method) -ida_graph.edge_info_t.width (variable) -ida_graph.edge_infos_wrapper_t (class) -ida_graph.edge_infos_wrapper_t.__init__ (method) -ida_graph.edge_infos_wrapper_t.clear (method) -ida_graph.edge_layout_point_t (class) -ida_graph.edge_layout_point_t.__eq__ (method) -ida_graph.edge_layout_point_t.__init__ (method) -ida_graph.edge_layout_point_t.__ne__ (method) -ida_graph.edge_layout_point_t.compare (method) -ida_graph.edge_layout_point_t.e (variable) -ida_graph.edge_layout_point_t.pidx (variable) -ida_graph.edge_segment_t (class) -ida_graph.edge_segment_t.__init__ (method) -ida_graph.edge_segment_t.__lt__ (method) -ida_graph.edge_segment_t.length (method) -ida_graph.edge_segment_t.toright (method) -ida_graph.edge_t (class) -ida_graph.edge_t.__eq__ (method) -ida_graph.edge_t.__init__ (method) -ida_graph.edge_t.__lt__ (method) -ida_graph.edge_t.__ne__ (method) -ida_graph.edge_t.dst (variable) -ida_graph.edge_t.src (variable) -ida_graph.get_graph_viewer (function) -ida_graph.get_node_info (function) -ida_graph.get_viewer_graph (function) -ida_graph.git_edge (variable) -ida_graph.git_elp (variable) -ida_graph.git_node (variable) -ida_graph.git_none (variable) -ida_graph.git_text (variable) -ida_graph.git_tool (variable) -ida_graph.graph_item_t (class) -ida_graph.graph_item_t.__init__ (method) -ida_graph.graph_item_t.b (variable) -ida_graph.graph_item_t.e (variable) -ida_graph.graph_item_t.elp (variable) -ida_graph.graph_item_t.is_edge (method) -ida_graph.graph_item_t.is_node (method) -ida_graph.graph_item_t.n (variable) -ida_graph.graph_item_t.p (variable) -ida_graph.graph_item_t.type (variable) -ida_graph.graph_node_visitor_t (class) -ida_graph.graph_node_visitor_t.__disown__ (method) -ida_graph.graph_node_visitor_t.__init__ (method) -ida_graph.graph_node_visitor_t.is_forbidden_edge (method) -ida_graph.graph_node_visitor_t.is_visited (method) -ida_graph.graph_node_visitor_t.reinit (method) -ida_graph.graph_node_visitor_t.set_visited (method) -ida_graph.graph_node_visitor_t.visit_node (method) -ida_graph.graph_path_visitor_t (class) -ida_graph.graph_path_visitor_t.__disown__ (method) -ida_graph.graph_path_visitor_t.__init__ (method) -ida_graph.graph_path_visitor_t.path (variable) -ida_graph.graph_path_visitor_t.prune (variable) -ida_graph.graph_path_visitor_t.walk_backward (method) -ida_graph.graph_path_visitor_t.walk_forward (method) -ida_graph.graph_visitor_t (class) -ida_graph.graph_visitor_t.__disown__ (method) -ida_graph.graph_visitor_t.__init__ (method) -ida_graph.graph_visitor_t.visit_edge (method) -ida_graph.graph_visitor_t.visit_node (method) -ida_graph.grcode_calculating_layout (variable) -ida_graph.grcode_center_on (variable) -ida_graph.grcode_change_group_visibility (variable) -ida_graph.grcode_changed_graph (variable) -ida_graph.grcode_clear (variable) -ida_graph.grcode_clicked (variable) -ida_graph.grcode_create_circle_layout (variable) -ida_graph.grcode_create_digraph_layout (variable) -ida_graph.grcode_create_disasm_graph1 (variable) -ida_graph.grcode_create_disasm_graph2 (variable) -ida_graph.grcode_create_graph_viewer (variable) -ida_graph.grcode_create_group (variable) -ida_graph.grcode_create_mutable_graph (variable) -ida_graph.grcode_create_tree_layout (variable) -ida_graph.grcode_create_user_graph_place (variable) -ida_graph.grcode_creating_group (variable) -ida_graph.grcode_dblclicked (variable) -ida_graph.grcode_del_custom_layout (variable) -ida_graph.grcode_del_node_info (variable) -ida_graph.grcode_delete_group (variable) -ida_graph.grcode_delete_mutable_graph (variable) -ida_graph.grcode_deleting_group (variable) -ida_graph.grcode_destroyed (variable) -ida_graph.grcode_edge_infos_wrapper_clear (variable) -ida_graph.grcode_edge_infos_wrapper_copy (variable) -ida_graph.grcode_empty (variable) -ida_graph.grcode_find_subgraph_node (variable) -ida_graph.grcode_fit_window (variable) -ida_graph.grcode_get_curnode (variable) -ida_graph.grcode_get_custom_layout (variable) -ida_graph.grcode_get_gli (variable) -ida_graph.grcode_get_graph_groups (variable) -ida_graph.grcode_get_graph_viewer (variable) -ida_graph.grcode_get_node_info (variable) -ida_graph.grcode_get_node_representative (variable) -ida_graph.grcode_get_selection (variable) -ida_graph.grcode_get_viewer_graph (variable) -ida_graph.grcode_gotfocus (variable) -ida_graph.grcode_group_visibility (variable) -ida_graph.grcode_is_visible_node (variable) -ida_graph.grcode_layout_calculated (variable) -ida_graph.grcode_lostfocus (variable) -ida_graph.grcode_node_qty (variable) -ida_graph.grcode_nrect (variable) -ida_graph.grcode_refresh_viewer (variable) -ida_graph.grcode_set_custom_layout (variable) -ida_graph.grcode_set_edge (variable) -ida_graph.grcode_set_gli (variable) -ida_graph.grcode_set_graph_groups (variable) -ida_graph.grcode_set_node_info (variable) -ida_graph.grcode_set_titlebar_height (variable) -ida_graph.grcode_set_viewer_graph (variable) -ida_graph.grcode_user_draw (variable) -ida_graph.grcode_user_hint (variable) -ida_graph.grcode_user_refresh (variable) -ida_graph.grcode_user_size (variable) -ida_graph.grcode_user_text (variable) -ida_graph.grcode_user_title (variable) -ida_graph.grcode_viewer_create_groups_vec (variable) -ida_graph.grcode_viewer_delete_groups_vec (variable) -ida_graph.grcode_viewer_groups_visibility_vec (variable) -ida_graph.group_crinfo_t (class) -ida_graph.group_crinfo_t.__init__ (method) -ida_graph.interval_t (class) -ida_graph.interval_t.__eq__ (method) -ida_graph.interval_t.__init__ (method) -ida_graph.interval_t.__ne__ (method) -ida_graph.interval_t.contains (method) -ida_graph.interval_t.empty (method) -ida_graph.interval_t.intersect (method) -ida_graph.interval_t.length (method) -ida_graph.interval_t.make_union (method) -ida_graph.interval_t.move_by (method) -ida_graph.mutable_graph_t (class) -ida_graph.mutable_graph_t.__init__ (method) -ida_graph.mutable_graph_t.add_edge (method) -ida_graph.mutable_graph_t.add_node (method) -ida_graph.mutable_graph_t.belongs (variable) -ida_graph.mutable_graph_t.calc_group_ea (method) -ida_graph.mutable_graph_t.change_group_visibility (method) -ida_graph.mutable_graph_t.create_digraph_layout (method) -ida_graph.mutable_graph_t.create_group (method) -ida_graph.mutable_graph_t.del_custom_layout (method) -ida_graph.mutable_graph_t.del_edge (method) -ida_graph.mutable_graph_t.del_node (method) -ida_graph.mutable_graph_t.delete_group (method) -ida_graph.mutable_graph_t.empty (method) -ida_graph.mutable_graph_t.exists (method) -ida_graph.mutable_graph_t.get_custom_layout (method) -ida_graph.mutable_graph_t.get_first_subgraph_node (method) -ida_graph.mutable_graph_t.get_graph_groups (method) -ida_graph.mutable_graph_t.get_next_subgraph_node (method) -ida_graph.mutable_graph_t.get_node_group (method) -ida_graph.mutable_graph_t.get_node_representative (method) -ida_graph.mutable_graph_t.gid (variable) -ida_graph.mutable_graph_t.is_collapsed_node (method) -ida_graph.mutable_graph_t.is_deleted_node (method) -ida_graph.mutable_graph_t.is_displayable_node (method) -ida_graph.mutable_graph_t.is_dot_node (method) -ida_graph.mutable_graph_t.is_group_node (method) -ida_graph.mutable_graph_t.is_simple_node (method) -ida_graph.mutable_graph_t.is_subgraph_node (method) -ida_graph.mutable_graph_t.is_uncollapsed_node (method) -ida_graph.mutable_graph_t.is_user_graph (method) -ida_graph.mutable_graph_t.is_visible_node (method) -ida_graph.mutable_graph_t.node_flags (variable) -ida_graph.mutable_graph_t.node_qty (method) -ida_graph.mutable_graph_t.npred (method) -ida_graph.mutable_graph_t.nsucc (method) -ida_graph.mutable_graph_t.pred (method) -ida_graph.mutable_graph_t.predset (method) -ida_graph.mutable_graph_t.redo_layout (method) -ida_graph.mutable_graph_t.refresh (method) -ida_graph.mutable_graph_t.replace_edge (method) -ida_graph.mutable_graph_t.reset (method) -ida_graph.mutable_graph_t.resize (method) -ida_graph.mutable_graph_t.set_custom_layout (method) -ida_graph.mutable_graph_t.set_deleted_node (method) -ida_graph.mutable_graph_t.set_edge (method) -ida_graph.mutable_graph_t.set_graph_groups (method) -ida_graph.mutable_graph_t.set_node_group (method) -ida_graph.mutable_graph_t.set_nrect (method) -ida_graph.mutable_graph_t.size (method) -ida_graph.mutable_graph_t.succ (method) -ida_graph.mutable_graph_t.succset (method) -ida_graph.node_info_t (class) -ida_graph.node_info_t.__init__ (method) -ida_graph.node_info_t.bg_color (variable) -ida_graph.node_info_t.ea (variable) -ida_graph.node_info_t.flags (variable) -ida_graph.node_info_t.frame_color (variable) -ida_graph.node_info_t.get_flags_for_valid (method) -ida_graph.node_info_t.text (variable) -ida_graph.node_info_t.valid_bg_color (method) -ida_graph.node_info_t.valid_ea (method) -ida_graph.node_info_t.valid_flags (method) -ida_graph.node_info_t.valid_frame_color (method) -ida_graph.node_info_t.valid_text (method) -ida_graph.node_layout_t (class) -ida_graph.node_layout_t.__eq__ (method) -ida_graph.node_layout_t.__getitem__ (method) -ida_graph.node_layout_t.__init__ (method) -ida_graph.node_layout_t.__len__ (method) -ida_graph.node_layout_t.__ne__ (method) -ida_graph.node_layout_t.__setitem__ (method) -ida_graph.node_layout_t._del (method) -ida_graph.node_layout_t.add_unique (method) -ida_graph.node_layout_t.at (method) -ida_graph.node_layout_t.begin (method) -ida_graph.node_layout_t.capacity (method) -ida_graph.node_layout_t.clear (method) -ida_graph.node_layout_t.empty (method) -ida_graph.node_layout_t.end (method) -ida_graph.node_layout_t.erase (method) -ida_graph.node_layout_t.extract (method) -ida_graph.node_layout_t.find (method) -ida_graph.node_layout_t.grow (method) -ida_graph.node_layout_t.has (method) -ida_graph.node_layout_t.inject (method) -ida_graph.node_layout_t.insert (method) -ida_graph.node_layout_t.pop_back (method) -ida_graph.node_layout_t.push_back (method) -ida_graph.node_layout_t.qclear (method) -ida_graph.node_layout_t.reserve (method) -ida_graph.node_layout_t.resize (method) -ida_graph.node_layout_t.size (method) -ida_graph.node_layout_t.swap (method) -ida_graph.node_layout_t.truncate (method) -ida_graph.node_ordering_t (class) -ida_graph.node_ordering_t.__init__ (method) -ida_graph.node_ordering_t.clear (method) -ida_graph.node_ordering_t.clr (method) -ida_graph.node_ordering_t.node (method) -ida_graph.node_ordering_t.order (method) -ida_graph.node_ordering_t.resize (method) -ida_graph.node_ordering_t.set (method) -ida_graph.node_ordering_t.size (method) -ida_graph.point_t (class) -ida_graph.point_t.__eq__ (method) -ida_graph.point_t.__init__ (method) -ida_graph.point_t.__ne__ (method) -ida_graph.point_t.add (method) -ida_graph.point_t.negate (method) -ida_graph.point_t.sub (method) -ida_graph.pointseq_t (class) -ida_graph.pointseq_t.__init__ (method) -ida_graph.pointvec_t (class) -ida_graph.pointvec_t.__eq__ (method) -ida_graph.pointvec_t.__getitem__ (method) -ida_graph.pointvec_t.__init__ (method) -ida_graph.pointvec_t.__len__ (method) -ida_graph.pointvec_t.__ne__ (method) -ida_graph.pointvec_t.__setitem__ (method) -ida_graph.pointvec_t._del (method) -ida_graph.pointvec_t.add_unique (method) -ida_graph.pointvec_t.at (method) -ida_graph.pointvec_t.begin (method) -ida_graph.pointvec_t.capacity (method) -ida_graph.pointvec_t.clear (method) -ida_graph.pointvec_t.empty (method) -ida_graph.pointvec_t.end (method) -ida_graph.pointvec_t.erase (method) -ida_graph.pointvec_t.extract (method) -ida_graph.pointvec_t.find (method) -ida_graph.pointvec_t.grow (method) -ida_graph.pointvec_t.has (method) -ida_graph.pointvec_t.inject (method) -ida_graph.pointvec_t.insert (method) -ida_graph.pointvec_t.pop_back (method) -ida_graph.pointvec_t.push_back (method) -ida_graph.pointvec_t.qclear (method) -ida_graph.pointvec_t.reserve (method) -ida_graph.pointvec_t.resize (method) -ida_graph.pointvec_t.size (method) -ida_graph.pointvec_t.swap (method) -ida_graph.pointvec_t.truncate (method) -ida_graph.pyg_close (function) -ida_graph.pyg_select_node (function) -ida_graph.pyg_show (function) -ida_graph.rect_t (class) -ida_graph.rect_t.__eq__ (method) -ida_graph.rect_t.__init__ (method) -ida_graph.rect_t.__ne__ (method) -ida_graph.rect_t.area (method) -ida_graph.rect_t.bottomright (method) -ida_graph.rect_t.center (method) -ida_graph.rect_t.contains (method) -ida_graph.rect_t.empty (method) -ida_graph.rect_t.grow (method) -ida_graph.rect_t.height (method) -ida_graph.rect_t.intersect (method) -ida_graph.rect_t.is_intersection_empty (method) -ida_graph.rect_t.make_union (method) -ida_graph.rect_t.move_by (method) -ida_graph.rect_t.move_to (method) -ida_graph.rect_t.topleft (method) -ida_graph.rect_t.width (method) -ida_graph.refresh_viewer (function) -ida_graph.row_info_t (class) -ida_graph.row_info_t.__init__ (method) -ida_graph.row_info_t.bottom (variable) -ida_graph.row_info_t.height (method) -ida_graph.row_info_t.nodes (variable) -ida_graph.row_info_t.top (variable) -ida_graph.screen_graph_selection_base_t (class) -ida_graph.screen_graph_selection_base_t.__eq__ (method) -ida_graph.screen_graph_selection_base_t.__getitem__ (method) -ida_graph.screen_graph_selection_base_t.__init__ (method) -ida_graph.screen_graph_selection_base_t.__len__ (method) -ida_graph.screen_graph_selection_base_t.__ne__ (method) -ida_graph.screen_graph_selection_base_t.__setitem__ (method) -ida_graph.screen_graph_selection_base_t._del (method) -ida_graph.screen_graph_selection_base_t.add_unique (method) -ida_graph.screen_graph_selection_base_t.at (method) -ida_graph.screen_graph_selection_base_t.begin (method) -ida_graph.screen_graph_selection_base_t.capacity (method) -ida_graph.screen_graph_selection_base_t.clear (method) -ida_graph.screen_graph_selection_base_t.empty (method) -ida_graph.screen_graph_selection_base_t.end (method) -ida_graph.screen_graph_selection_base_t.erase (method) -ida_graph.screen_graph_selection_base_t.extract (method) -ida_graph.screen_graph_selection_base_t.find (method) -ida_graph.screen_graph_selection_base_t.grow (method) -ida_graph.screen_graph_selection_base_t.has (method) -ida_graph.screen_graph_selection_base_t.inject (method) -ida_graph.screen_graph_selection_base_t.insert (method) -ida_graph.screen_graph_selection_base_t.pop_back (method) -ida_graph.screen_graph_selection_base_t.push_back (method) -ida_graph.screen_graph_selection_base_t.qclear (method) -ida_graph.screen_graph_selection_base_t.reserve (method) -ida_graph.screen_graph_selection_base_t.resize (method) -ida_graph.screen_graph_selection_base_t.size (method) -ida_graph.screen_graph_selection_base_t.swap (method) -ida_graph.screen_graph_selection_base_t.truncate (method) -ida_graph.screen_graph_selection_t (class) -ida_graph.screen_graph_selection_t.__init__ (method) -ida_graph.screen_graph_selection_t.add (method) -ida_graph.screen_graph_selection_t.add_node (method) -ida_graph.screen_graph_selection_t.add_point (method) -ida_graph.screen_graph_selection_t.del_node (method) -ida_graph.screen_graph_selection_t.del_point (method) -ida_graph.screen_graph_selection_t.has (method) -ida_graph.screen_graph_selection_t.items_count (method) -ida_graph.screen_graph_selection_t.nodes_count (method) -ida_graph.screen_graph_selection_t.points_count (method) -ida_graph.screen_graph_selection_t.sub (method) -ida_graph.selection_item_t (class) -ida_graph.selection_item_t.__eq__ (method) -ida_graph.selection_item_t.__init__ (method) -ida_graph.selection_item_t.__lt__ (method) -ida_graph.selection_item_t.__ne__ (method) -ida_graph.selection_item_t.compare (method) -ida_graph.selection_item_t.elp (variable) -ida_graph.selection_item_t.is_node (variable) -ida_graph.selection_item_t.node (variable) -ida_graph.set_node_info (function) -ida_graph.set_viewer_graph (function) -ida_graph.user_graph_place_t (class) -ida_graph.user_graph_place_t.__init__ (method) -ida_graph.viewer_attach_menu_item (function) -ida_graph.viewer_center_on (function) -ida_graph.viewer_create_groups (function) -ida_graph.viewer_del_node_info (function) -ida_graph.viewer_delete_groups (function) -ida_graph.viewer_fit_window (function) -ida_graph.viewer_get_curnode (function) -ida_graph.viewer_get_gli (function) -ida_graph.viewer_get_node_info (function) -ida_graph.viewer_get_selection (function) -ida_graph.viewer_set_gli (function) -ida_graph.viewer_set_groups_visibility (function) -ida_graph.viewer_set_node_info (function) -ida_graph.viewer_set_titlebar_height (function) -ida_ida (module) -ida_ida.ABI_8ALIGN4 (variable) -ida_ida.ABI_BIGARG_ALIGN (variable) -ida_ida.ABI_GCC_LAYOUT (variable) -ida_ida.ABI_HARD_FLOAT (variable) -ida_ida.ABI_HUGEARG_ALIGN (variable) -ida_ida.ABI_MAP_STKARGS (variable) -ida_ida.ABI_PACK_STKARGS (variable) -ida_ida.ABI_SET_BY_USER (variable) -ida_ida.ABI_STACK_LDBL (variable) -ida_ida.ABI_STACK_VARARGS (variable) -ida_ida.AF2_DOEH (variable) -ida_ida.AF2_DORTTI (variable) -ida_ida.AF2_MACRO (variable) -ida_ida.AF_ANORET (variable) -ida_ida.AF_CHKUNI (variable) -ida_ida.AF_CODE (variable) -ida_ida.AF_DATOFF (variable) -ida_ida.AF_DOCODE (variable) -ida_ida.AF_DODATA (variable) -ida_ida.AF_DREFOFF (variable) -ida_ida.AF_FINAL (variable) -ida_ida.AF_FIXUP (variable) -ida_ida.AF_FLIRT (variable) -ida_ida.AF_FTAIL (variable) -ida_ida.AF_HFLIRT (variable) -ida_ida.AF_IMMOFF (variable) -ida_ida.AF_JFUNC (variable) -ida_ida.AF_JUMPTBL (variable) -ida_ida.AF_LVAR (variable) -ida_ida.AF_MARKCODE (variable) -ida_ida.AF_MEMFUNC (variable) -ida_ida.AF_NULLSUB (variable) -ida_ida.AF_PROC (variable) -ida_ida.AF_PROCPTR (variable) -ida_ida.AF_PURDAT (variable) -ida_ida.AF_REGARG (variable) -ida_ida.AF_SIGCMT (variable) -ida_ida.AF_SIGMLT (variable) -ida_ida.AF_STKARG (variable) -ida_ida.AF_STRLIT (variable) -ida_ida.AF_TRACE (variable) -ida_ida.AF_TRFUNC (variable) -ida_ida.AF_UNK (variable) -ida_ida.AF_USED (variable) -ida_ida.AF_VERSP (variable) -ida_ida.DEMNAM_CMNT (variable) -ida_ida.DEMNAM_FIRST (variable) -ida_ida.DEMNAM_GCC3 (variable) -ida_ida.DEMNAM_MASK (variable) -ida_ida.DEMNAM_NAME (variable) -ida_ida.DEMNAM_NONE (variable) -ida_ida.IDAINFO_TAG_SIZE (variable) -ida_ida.IDB_COMPRESSED (variable) -ida_ida.IDB_PACKED (variable) -ida_ida.IDB_UNPACKED (variable) -ida_ida.INFFL_ALLASM (variable) -ida_ida.INFFL_AUTO (variable) -ida_ida.INFFL_CHKOPS (variable) -ida_ida.INFFL_GRAPH_VIEW (variable) -ida_ida.INFFL_LOADIDC (variable) -ida_ida.INFFL_NMOPS (variable) -ida_ida.INFFL_NOUSER (variable) -ida_ida.INFFL_READONLY (variable) -ida_ida.INF_ABINAME (variable) -ida_ida.INF_ARCHIVE_PATH (variable) -ida_ida.INF_CRC32 (variable) -ida_ida.INF_CTIME (variable) -ida_ida.INF_C_MACROS (variable) -ida_ida.INF_DBG_BINPATHS (variable) -ida_ida.INF_DUALOP_GRAPH (variable) -ida_ida.INF_DUALOP_TEXT (variable) -ida_ida.INF_ELAPSED (variable) -ida_ida.INF_FILE_FORMAT_NAME (variable) -ida_ida.INF_FSIZE (variable) -ida_ida.INF_GROUPS (variable) -ida_ida.INF_H_PATH (variable) -ida_ida.INF_IDA_VERSION (variable) -ida_ida.INF_IDSNODE (variable) -ida_ida.INF_IMAGEBASE (variable) -ida_ida.INF_INCLUDE (variable) -ida_ida.INF_INITIAL_VERSION (variable) -ida_ida.INF_MD5 (variable) -ida_ida.INF_NOPENS (variable) -ida_ida.INF_NOTEPAD (variable) -ida_ida.INF_OUTFILEENC (variable) -ida_ida.INF_PROBLEMS (variable) -ida_ida.INF_SELECTORS (variable) -ida_ida.INF_SHA256 (variable) -ida_ida.INF_SRCDBG_PATHS (variable) -ida_ida.INF_SRCDBG_UNDESIRED (variable) -ida_ida.INF_STR_ENCODINGS (variable) -ida_ida.LFLG_64BIT (variable) -ida_ida.LFLG_COMPRESS (variable) -ida_ida.LFLG_DBG_NOPATH (variable) -ida_ida.LFLG_FLAT_OFF32 (variable) -ida_ida.LFLG_IS_DLL (variable) -ida_ida.LFLG_KERNMODE (variable) -ida_ida.LFLG_MSF (variable) -ida_ida.LFLG_PACK (variable) -ida_ida.LFLG_PC_FLAT (variable) -ida_ida.LFLG_PC_FPP (variable) -ida_ida.LFLG_SNAPSHOT (variable) -ida_ida.LFLG_WIDE_HBF (variable) -ida_ida.LMT_EMPTY (variable) -ida_ida.LMT_THICK (variable) -ida_ida.LMT_THIN (variable) -ida_ida.LN_AUTO (variable) -ida_ida.LN_NORMAL (variable) -ida_ida.LN_PUBLIC (variable) -ida_ida.LN_WEAK (variable) -ida_ida.OFLG_GEN_ASSUME (variable) -ida_ida.OFLG_GEN_NULL (variable) -ida_ida.OFLG_GEN_ORG (variable) -ida_ida.OFLG_GEN_TRYBLKS (variable) -ida_ida.OFLG_LZERO (variable) -ida_ida.OFLG_PREF_SEG (variable) -ida_ida.OFLG_SHOW_AUTO (variable) -ida_ida.OFLG_SHOW_PREF (variable) -ida_ida.OFLG_SHOW_VOID (variable) -ida_ida.PREF_FNCOFF (variable) -ida_ida.PREF_PFXTRUNC (variable) -ida_ida.PREF_SEGADR (variable) -ida_ida.PREF_STACK (variable) -ida_ida.SCF_ALLCMT (variable) -ida_ida.SCF_LINNUM (variable) -ida_ida.SCF_NOCMT (variable) -ida_ida.SCF_RPTCMT (variable) -ida_ida.SCF_SHHID_FUNC (variable) -ida_ida.SCF_SHHID_ITEM (variable) -ida_ida.SCF_SHHID_SEGM (variable) -ida_ida.SCF_TESTMODE (variable) -ida_ida.STRF_AUTO (variable) -ida_ida.STRF_COMMENT (variable) -ida_ida.STRF_GEN (variable) -ida_ida.STRF_SAVECASE (variable) -ida_ida.STRF_SERIAL (variable) -ida_ida.STRF_UNICODE (variable) -ida_ida.STT_CUR (variable) -ida_ida.STT_DBG (variable) -ida_ida.STT_MM (variable) -ida_ida.STT_VA (variable) -ida_ida.SW_SEGXRF (variable) -ida_ida.SW_XRFFNC (variable) -ida_ida.SW_XRFMRK (variable) -ida_ida.SW_XRFVAL (variable) -ida_ida.UA_MAXOP (variable) -ida_ida.VLD_AUTO_REPAIR (variable) -ida_ida.VLD_DIALOG (variable) -ida_ida.VLD_SILENT (variable) -ida_ida.__make_idainfo_accessors (function) -ida_ida.__make_idainfo_bound (function) -ida_ida.__make_idainfo_bound.__func (function) -ida_ida.__make_idainfo_getter (function) -ida_ida.__set_module_dynattrs (function) -ida_ida.__wrap_hooks_callback (function) -ida_ida.__wrap_hooks_callback.__wrapper (function) -ida_ida.calc_default_idaplace_flags (function) -ida_ida.compiler_info_t (class) -ida_ida.compiler_info_t.__init__ (method) -ida_ida.compiler_info_t.cm (variable) -ida_ida.compiler_info_t.defalign (variable) -ida_ida.compiler_info_t.id (variable) -ida_ida.compiler_info_t.size_b (variable) -ida_ida.compiler_info_t.size_e (variable) -ida_ida.compiler_info_t.size_i (variable) -ida_ida.compiler_info_t.size_l (variable) -ida_ida.compiler_info_t.size_ldbl (variable) -ida_ida.compiler_info_t.size_ll (variable) -ida_ida.compiler_info_t.size_s (variable) -ida_ida.delinf (function) -ida_ida.f_AIXAR (variable) -ida_ida.f_AOUT (variable) -ida_ida.f_AR (variable) -ida_ida.f_BIN (variable) -ida_ida.f_COFF (variable) -ida_ida.f_COM (variable) -ida_ida.f_COM_old (variable) -ida_ida.f_DRV (variable) -ida_ida.f_ELF (variable) -ida_ida.f_EXE (variable) -ida_ida.f_EXE_old (variable) -ida_ida.f_HEX (variable) -ida_ida.f_LE (variable) -ida_ida.f_LOADER (variable) -ida_ida.f_LX (variable) -ida_ida.f_MACHO (variable) -ida_ida.f_MEX (variable) -ida_ida.f_NLM (variable) -ida_ida.f_OMF (variable) -ida_ida.f_OMFLIB (variable) -ida_ida.f_PE (variable) -ida_ida.f_PRC (variable) -ida_ida.f_PSXOBJ (variable) -ida_ida.f_SREC (variable) -ida_ida.f_W32RUN (variable) -ida_ida.f_WIN (variable) -ida_ida.f_ZIP (variable) -ida_ida.get_dbctx_id (function) -ida_ida.get_dbctx_qty (function) -ida_ida.getinf_str (function) -ida_ida.idainfo (class) -ida_ida.idainfo.__init__ (method) -ida_ida.idainfo._get_lflags (method) -ida_ida.idainfo._set_lflags (method) -ida_ida.idainfo.abibits (variable) -ida_ida.idainfo.af (variable) -ida_ida.idainfo.af2 (variable) -ida_ida.idainfo.appcall_options (variable) -ida_ida.idainfo.apptype (variable) -ida_ida.idainfo.asmtype (variable) -ida_ida.idainfo.baseaddr (variable) -ida_ida.idainfo.bin_prefix_size (variable) -ida_ida.idainfo.cc (variable) -ida_ida.idainfo.cmt_indent (variable) -ida_ida.idainfo.database_change_count (variable) -ida_ida.idainfo.datatypes (variable) -ida_ida.idainfo.demnames (variable) -ida_ida.idainfo.filetype (variable) -ida_ida.idainfo.get_abiname (method) -ida_ida.idainfo.highoff (variable) -ida_ida.idainfo.indent (variable) -ida_ida.idainfo.lenxref (variable) -ida_ida.idainfo.lflags (variable) -ida_ida.idainfo.listnames (variable) -ida_ida.idainfo.long_demnames (variable) -ida_ida.idainfo.lowoff (variable) -ida_ida.idainfo.main (variable) -ida_ida.idainfo.margin (variable) -ida_ida.idainfo.max_autoname_len (variable) -ida_ida.idainfo.max_ea (variable) -ida_ida.idainfo.maxref (variable) -ida_ida.idainfo.min_ea (variable) -ida_ida.idainfo.nametype (variable) -ida_ida.idainfo.omax_ea (variable) -ida_ida.idainfo.omin_ea (variable) -ida_ida.idainfo.ostype (variable) -ida_ida.idainfo.outflags (variable) -ida_ida.idainfo.procname (variable) -ida_ida.idainfo.refcmtnum (variable) -ida_ida.idainfo.s_cmtflg (variable) -ida_ida.idainfo.s_genflags (variable) -ida_ida.idainfo.s_limiter (variable) -ida_ida.idainfo.s_prefflag (variable) -ida_ida.idainfo.s_xrefflag (variable) -ida_ida.idainfo.short_demnames (variable) -ida_ida.idainfo.specsegs (variable) -ida_ida.idainfo.start_cs (variable) -ida_ida.idainfo.start_ea (variable) -ida_ida.idainfo.start_ip (variable) -ida_ida.idainfo.start_sp (variable) -ida_ida.idainfo.start_ss (variable) -ida_ida.idainfo.strlit_break (variable) -ida_ida.idainfo.strlit_flags (variable) -ida_ida.idainfo.strlit_pref (variable) -ida_ida.idainfo.strlit_sernum (variable) -ida_ida.idainfo.strlit_zeroes (variable) -ida_ida.idainfo.strtype (variable) -ida_ida.idainfo.tag (variable) -ida_ida.idainfo.type_xrefnum (variable) -ida_ida.idainfo.version (variable) -ida_ida.idainfo.xrefnum (variable) -ida_ida.idainfo_is_32bit (function) -ida_ida.inf_abi_set_by_user (function) -ida_ida.inf_allow_non_matched_ops (function) -ida_ida.inf_allow_sigmulti (function) -ida_ida.inf_append_sigcmt (function) -ida_ida.inf_big_arg_align (function) -ida_ida.inf_check_manual_ops (function) -ida_ida.inf_check_unicode_strlits (function) -ida_ida.inf_coagulate_code (function) -ida_ida.inf_coagulate_data (function) -ida_ida.inf_compress_idb (function) -ida_ida.inf_create_all_xrefs (function) -ida_ida.inf_create_func_from_call (function) -ida_ida.inf_create_func_from_ptr (function) -ida_ida.inf_create_func_tails (function) -ida_ida.inf_create_jump_tables (function) -ida_ida.inf_create_off_on_dref (function) -ida_ida.inf_create_off_using_fixup (function) -ida_ida.inf_create_strlit_on_xref (function) -ida_ida.inf_data_offset (function) -ida_ida.inf_dbg_no_store_path (function) -ida_ida.inf_decode_fpp (function) -ida_ida.inf_del_no_xref_insns (function) -ida_ida.inf_final_pass (function) -ida_ida.inf_full_sp_ana (function) -ida_ida.inf_gen_assume (function) -ida_ida.inf_gen_lzero (function) -ida_ida.inf_gen_null (function) -ida_ida.inf_gen_org (function) -ida_ida.inf_gen_tryblks (function) -ida_ida.inf_get_abibits (function) -ida_ida.inf_get_af (function) -ida_ida.inf_get_af2 (function) -ida_ida.inf_get_af2_low (function) -ida_ida.inf_get_af_high (function) -ida_ida.inf_get_af_low (function) -ida_ida.inf_get_app_bitness (function) -ida_ida.inf_get_appcall_options (function) -ida_ida.inf_get_apptype (function) -ida_ida.inf_get_asmtype (function) -ida_ida.inf_get_baseaddr (function) -ida_ida.inf_get_bin_prefix_size (function) -ida_ida.inf_get_cc (function) -ida_ida.inf_get_cc_cm (function) -ida_ida.inf_get_cc_defalign (function) -ida_ida.inf_get_cc_id (function) -ida_ida.inf_get_cc_size_b (function) -ida_ida.inf_get_cc_size_e (function) -ida_ida.inf_get_cc_size_i (function) -ida_ida.inf_get_cc_size_l (function) -ida_ida.inf_get_cc_size_ldbl (function) -ida_ida.inf_get_cc_size_ll (function) -ida_ida.inf_get_cc_size_s (function) -ida_ida.inf_get_cmt_indent (function) -ida_ida.inf_get_cmtflg (function) -ida_ida.inf_get_database_change_count (function) -ida_ida.inf_get_datatypes (function) -ida_ida.inf_get_demname_form (function) -ida_ida.inf_get_demnames (function) -ida_ida.inf_get_filetype (function) -ida_ida.inf_get_genflags (function) -ida_ida.inf_get_highoff (function) -ida_ida.inf_get_indent (function) -ida_ida.inf_get_lenxref (function) -ida_ida.inf_get_lflags (function) -ida_ida.inf_get_limiter (function) -ida_ida.inf_get_listnames (function) -ida_ida.inf_get_long_demnames (function) -ida_ida.inf_get_lowoff (function) -ida_ida.inf_get_main (function) -ida_ida.inf_get_margin (function) -ida_ida.inf_get_max_autoname_len (function) -ida_ida.inf_get_max_ea (function) -ida_ida.inf_get_maxref (function) -ida_ida.inf_get_min_ea (function) -ida_ida.inf_get_nametype (function) -ida_ida.inf_get_netdelta (function) -ida_ida.inf_get_omax_ea (function) -ida_ida.inf_get_omin_ea (function) -ida_ida.inf_get_ostype (function) -ida_ida.inf_get_outflags (function) -ida_ida.inf_get_pack_mode (function) -ida_ida.inf_get_prefflag (function) -ida_ida.inf_get_privrange (function) -ida_ida.inf_get_privrange_end_ea (function) -ida_ida.inf_get_privrange_start_ea (function) -ida_ida.inf_get_procname (function) -ida_ida.inf_get_refcmtnum (function) -ida_ida.inf_get_short_demnames (function) -ida_ida.inf_get_specsegs (function) -ida_ida.inf_get_start_cs (function) -ida_ida.inf_get_start_ea (function) -ida_ida.inf_get_start_ip (function) -ida_ida.inf_get_start_sp (function) -ida_ida.inf_get_start_ss (function) -ida_ida.inf_get_strlit_break (function) -ida_ida.inf_get_strlit_flags (function) -ida_ida.inf_get_strlit_pref (function) -ida_ida.inf_get_strlit_sernum (function) -ida_ida.inf_get_strlit_zeroes (function) -ida_ida.inf_get_strtype (function) -ida_ida.inf_get_type_xrefnum (function) -ida_ida.inf_get_version (function) -ida_ida.inf_get_xrefflag (function) -ida_ida.inf_get_xrefnum (function) -ida_ida.inf_guess_func_type (function) -ida_ida.inf_handle_eh (function) -ida_ida.inf_handle_rtti (function) -ida_ida.inf_hide_comments (function) -ida_ida.inf_hide_libfuncs (function) -ida_ida.inf_huge_arg_align (function) -ida_ida.inf_inc_database_change_count (function) -ida_ida.inf_is_16bit (function) -ida_ida.inf_is_32bit_exactly (function) -ida_ida.inf_is_32bit_or_higher (function) -ida_ida.inf_is_64bit (function) -ida_ida.inf_is_auto_enabled (function) -ida_ida.inf_is_be (function) -ida_ida.inf_is_dll (function) -ida_ida.inf_is_flat_off32 (function) -ida_ida.inf_is_graph_view (function) -ida_ida.inf_is_hard_float (function) -ida_ida.inf_is_kernel_mode (function) -ida_ida.inf_is_limiter_empty (function) -ida_ida.inf_is_limiter_thick (function) -ida_ida.inf_is_limiter_thin (function) -ida_ida.inf_is_mem_aligned4 (function) -ida_ida.inf_is_snapshot (function) -ida_ida.inf_is_wide_high_byte_first (function) -ida_ida.inf_like_binary (function) -ida_ida.inf_line_pref_with_seg (function) -ida_ida.inf_loading_idc (function) -ida_ida.inf_macros_enabled (function) -ida_ida.inf_map_stkargs (function) -ida_ida.inf_mark_code (function) -ida_ida.inf_no_store_user_info (function) -ida_ida.inf_noflow_to_data (function) -ida_ida.inf_noret_ana (function) -ida_ida.inf_op_offset (function) -ida_ida.inf_pack_idb (function) -ida_ida.inf_pack_stkargs (function) -ida_ida.inf_postinc_strlit_sernum (function) -ida_ida.inf_prefix_show_funcoff (function) -ida_ida.inf_prefix_show_segaddr (function) -ida_ida.inf_prefix_show_stack (function) -ida_ida.inf_prefix_truncate_opcode_bytes (function) -ida_ida.inf_propagate_regargs (function) -ida_ida.inf_propagate_stkargs (function) -ida_ida.inf_readonly_idb (function) -ida_ida.inf_rename_jumpfunc (function) -ida_ida.inf_rename_nullsub (function) -ida_ida.inf_set_32bit (function) -ida_ida.inf_set_64bit (function) -ida_ida.inf_set_abi_set_by_user (function) -ida_ida.inf_set_abibits (function) -ida_ida.inf_set_af (function) -ida_ida.inf_set_af2 (function) -ida_ida.inf_set_af2_low (function) -ida_ida.inf_set_af_high (function) -ida_ida.inf_set_af_low (function) -ida_ida.inf_set_allow_non_matched_ops (function) -ida_ida.inf_set_allow_sigmulti (function) -ida_ida.inf_set_app_bitness (function) -ida_ida.inf_set_appcall_options (function) -ida_ida.inf_set_append_sigcmt (function) -ida_ida.inf_set_apptype (function) -ida_ida.inf_set_asmtype (function) -ida_ida.inf_set_auto_enabled (function) -ida_ida.inf_set_baseaddr (function) -ida_ida.inf_set_be (function) -ida_ida.inf_set_big_arg_align (function) -ida_ida.inf_set_bin_prefix_size (function) -ida_ida.inf_set_cc (function) -ida_ida.inf_set_cc_cm (function) -ida_ida.inf_set_cc_defalign (function) -ida_ida.inf_set_cc_id (function) -ida_ida.inf_set_cc_size_b (function) -ida_ida.inf_set_cc_size_e (function) -ida_ida.inf_set_cc_size_i (function) -ida_ida.inf_set_cc_size_l (function) -ida_ida.inf_set_cc_size_ldbl (function) -ida_ida.inf_set_cc_size_ll (function) -ida_ida.inf_set_cc_size_s (function) -ida_ida.inf_set_check_manual_ops (function) -ida_ida.inf_set_check_unicode_strlits (function) -ida_ida.inf_set_cmt_indent (function) -ida_ida.inf_set_cmtflg (function) -ida_ida.inf_set_coagulate_code (function) -ida_ida.inf_set_coagulate_data (function) -ida_ida.inf_set_compress_idb (function) -ida_ida.inf_set_create_all_xrefs (function) -ida_ida.inf_set_create_func_from_call (function) -ida_ida.inf_set_create_func_from_ptr (function) -ida_ida.inf_set_create_func_tails (function) -ida_ida.inf_set_create_jump_tables (function) -ida_ida.inf_set_create_off_on_dref (function) -ida_ida.inf_set_create_off_using_fixup (function) -ida_ida.inf_set_create_strlit_on_xref (function) -ida_ida.inf_set_data_offset (function) -ida_ida.inf_set_database_change_count (function) -ida_ida.inf_set_datatypes (function) -ida_ida.inf_set_dbg_no_store_path (function) -ida_ida.inf_set_decode_fpp (function) -ida_ida.inf_set_del_no_xref_insns (function) -ida_ida.inf_set_demnames (function) -ida_ida.inf_set_dll (function) -ida_ida.inf_set_filetype (function) -ida_ida.inf_set_final_pass (function) -ida_ida.inf_set_flat_off32 (function) -ida_ida.inf_set_full_sp_ana (function) -ida_ida.inf_set_gen_assume (function) -ida_ida.inf_set_gen_lzero (function) -ida_ida.inf_set_gen_null (function) -ida_ida.inf_set_gen_org (function) -ida_ida.inf_set_gen_tryblks (function) -ida_ida.inf_set_genflags (function) -ida_ida.inf_set_graph_view (function) -ida_ida.inf_set_guess_func_type (function) -ida_ida.inf_set_handle_eh (function) -ida_ida.inf_set_handle_rtti (function) -ida_ida.inf_set_hard_float (function) -ida_ida.inf_set_hide_comments (function) -ida_ida.inf_set_hide_libfuncs (function) -ida_ida.inf_set_highoff (function) -ida_ida.inf_set_huge_arg_align (function) -ida_ida.inf_set_indent (function) -ida_ida.inf_set_kernel_mode (function) -ida_ida.inf_set_lenxref (function) -ida_ida.inf_set_lflags (function) -ida_ida.inf_set_limiter (function) -ida_ida.inf_set_limiter_empty (function) -ida_ida.inf_set_limiter_thick (function) -ida_ida.inf_set_limiter_thin (function) -ida_ida.inf_set_line_pref_with_seg (function) -ida_ida.inf_set_listnames (function) -ida_ida.inf_set_loading_idc (function) -ida_ida.inf_set_long_demnames (function) -ida_ida.inf_set_lowoff (function) -ida_ida.inf_set_macros_enabled (function) -ida_ida.inf_set_main (function) -ida_ida.inf_set_map_stkargs (function) -ida_ida.inf_set_margin (function) -ida_ida.inf_set_mark_code (function) -ida_ida.inf_set_max_autoname_len (function) -ida_ida.inf_set_max_ea (function) -ida_ida.inf_set_maxref (function) -ida_ida.inf_set_mem_aligned4 (function) -ida_ida.inf_set_min_ea (function) -ida_ida.inf_set_nametype (function) -ida_ida.inf_set_netdelta (function) -ida_ida.inf_set_no_store_user_info (function) -ida_ida.inf_set_noflow_to_data (function) -ida_ida.inf_set_noret_ana (function) -ida_ida.inf_set_omax_ea (function) -ida_ida.inf_set_omin_ea (function) -ida_ida.inf_set_op_offset (function) -ida_ida.inf_set_ostype (function) -ida_ida.inf_set_outflags (function) -ida_ida.inf_set_pack_idb (function) -ida_ida.inf_set_pack_mode (function) -ida_ida.inf_set_pack_stkargs (function) -ida_ida.inf_set_prefflag (function) -ida_ida.inf_set_prefix_show_funcoff (function) -ida_ida.inf_set_prefix_show_segaddr (function) -ida_ida.inf_set_prefix_show_stack (function) -ida_ida.inf_set_prefix_truncate_opcode_bytes (function) -ida_ida.inf_set_privrange (function) -ida_ida.inf_set_privrange_end_ea (function) -ida_ida.inf_set_privrange_start_ea (function) -ida_ida.inf_set_procname (function) -ida_ida.inf_set_propagate_regargs (function) -ida_ida.inf_set_propagate_stkargs (function) -ida_ida.inf_set_readonly_idb (function) -ida_ida.inf_set_refcmtnum (function) -ida_ida.inf_set_rename_jumpfunc (function) -ida_ida.inf_set_rename_nullsub (function) -ida_ida.inf_set_short_demnames (function) -ida_ida.inf_set_should_create_stkvars (function) -ida_ida.inf_set_should_trace_sp (function) -ida_ida.inf_set_show_all_comments (function) -ida_ida.inf_set_show_auto (function) -ida_ida.inf_set_show_hidden_funcs (function) -ida_ida.inf_set_show_hidden_insns (function) -ida_ida.inf_set_show_hidden_segms (function) -ida_ida.inf_set_show_line_pref (function) -ida_ida.inf_set_show_repeatables (function) -ida_ida.inf_set_show_src_linnum (function) -ida_ida.inf_set_show_void (function) -ida_ida.inf_set_show_xref_fncoff (function) -ida_ida.inf_set_show_xref_seg (function) -ida_ida.inf_set_show_xref_tmarks (function) -ida_ida.inf_set_show_xref_val (function) -ida_ida.inf_set_snapshot (function) -ida_ida.inf_set_specsegs (function) -ida_ida.inf_set_stack_ldbl (function) -ida_ida.inf_set_stack_varargs (function) -ida_ida.inf_set_start_cs (function) -ida_ida.inf_set_start_ea (function) -ida_ida.inf_set_start_ip (function) -ida_ida.inf_set_start_sp (function) -ida_ida.inf_set_start_ss (function) -ida_ida.inf_set_strlit_autocmt (function) -ida_ida.inf_set_strlit_break (function) -ida_ida.inf_set_strlit_flags (function) -ida_ida.inf_set_strlit_name_bit (function) -ida_ida.inf_set_strlit_names (function) -ida_ida.inf_set_strlit_pref (function) -ida_ida.inf_set_strlit_savecase (function) -ida_ida.inf_set_strlit_serial_names (function) -ida_ida.inf_set_strlit_sernum (function) -ida_ida.inf_set_strlit_zeroes (function) -ida_ida.inf_set_strtype (function) -ida_ida.inf_set_trace_flow (function) -ida_ida.inf_set_truncate_on_del (function) -ida_ida.inf_set_type_xrefnum (function) -ida_ida.inf_set_unicode_strlits (function) -ida_ida.inf_set_use_allasm (function) -ida_ida.inf_set_use_flirt (function) -ida_ida.inf_set_use_gcc_layout (function) -ida_ida.inf_set_version (function) -ida_ida.inf_set_wide_high_byte_first (function) -ida_ida.inf_set_xrefflag (function) -ida_ida.inf_set_xrefnum (function) -ida_ida.inf_should_create_stkvars (function) -ida_ida.inf_should_trace_sp (function) -ida_ida.inf_show_all_comments (function) -ida_ida.inf_show_auto (function) -ida_ida.inf_show_hidden_funcs (function) -ida_ida.inf_show_hidden_insns (function) -ida_ida.inf_show_hidden_segms (function) -ida_ida.inf_show_line_pref (function) -ida_ida.inf_show_repeatables (function) -ida_ida.inf_show_src_linnum (function) -ida_ida.inf_show_void (function) -ida_ida.inf_show_xref_fncoff (function) -ida_ida.inf_show_xref_seg (function) -ida_ida.inf_show_xref_tmarks (function) -ida_ida.inf_show_xref_val (function) -ida_ida.inf_stack_ldbl (function) -ida_ida.inf_stack_varargs (function) -ida_ida.inf_strlit_autocmt (function) -ida_ida.inf_strlit_name_bit (function) -ida_ida.inf_strlit_names (function) -ida_ida.inf_strlit_savecase (function) -ida_ida.inf_strlit_serial_names (function) -ida_ida.inf_test_mode (function) -ida_ida.inf_trace_flow (function) -ida_ida.inf_truncate_on_del (function) -ida_ida.inf_unicode_strlits (function) -ida_ida.inf_use_allasm (function) -ida_ida.inf_use_flirt (function) -ida_ida.inf_use_gcc_layout (function) -ida_ida.is_database_busy (function) -ida_ida.is_filetype_like_binary (function) -ida_ida.move_privrange (function) -ida_ida.switch_dbctx (function) -ida_ida.to_ea (function) -ida_ida.validate_idb (function) -ida_idaapi (module) -ida_idaapi.IDAPython_ExecScript (function) -ida_idaapi.IDAPython_ExecSystem (function) -ida_idaapi.IDAPython_FormatExc (function) -ida_idaapi.IDAPython_LoadProcMod (function) -ida_idaapi.IDAPython_UnLoadProcMod (function) -ida_idaapi.IDAPython_displayhook (class) -ida_idaapi.IDAPython_displayhook.__init__ (method) -ida_idaapi.IDAPython_displayhook._print_hex (method) -ida_idaapi.IDAPython_displayhook.displayhook (method) -ida_idaapi.IDAPython_displayhook.format_item (method) -ida_idaapi.IDAPython_displayhook.format_seq (method) -ida_idaapi.NW_CLOSEIDB (variable) -ida_idaapi.NW_INITIDA (variable) -ida_idaapi.NW_OPENIDB (variable) -ida_idaapi.NW_REMOVE (variable) -ida_idaapi.NW_TERMIDA (variable) -ida_idaapi.PY_ICID_BYREF (variable) -ida_idaapi.PY_ICID_INT64 (variable) -ida_idaapi.PY_ICID_OPAQUE (variable) -ida_idaapi.PyIdc_cvt_int64__ (class) -ida_idaapi.PyIdc_cvt_int64__.__add__ (method) -ida_idaapi.PyIdc_cvt_int64__.__div__ (method) -ida_idaapi.PyIdc_cvt_int64__.__init__ (method) -ida_idaapi.PyIdc_cvt_int64__.__mul__ (method) -ida_idaapi.PyIdc_cvt_int64__.__op (method) -ida_idaapi.PyIdc_cvt_int64__.__radd__ (method) -ida_idaapi.PyIdc_cvt_int64__.__rdiv__ (method) -ida_idaapi.PyIdc_cvt_int64__.__rmul__ (method) -ida_idaapi.PyIdc_cvt_int64__.__rsub__ (method) -ida_idaapi.PyIdc_cvt_int64__.__sub__ (method) -ida_idaapi.PyIdc_cvt_refclass__ (class) -ida_idaapi.PyIdc_cvt_refclass__.__init__ (method) -ida_idaapi.PyIdc_cvt_refclass__.cstr (method) -ida_idaapi.ST_OVER_DEBUG_SEG (variable) -ida_idaapi.ST_OVER_LIB_FUNC (variable) -ida_idaapi.TRUNC (function) -ida_idaapi.__IDAPython_Completion_Util (class) -ida_idaapi.__IDAPython_Completion_Util.__call__ (method) -ida_idaapi.__IDAPython_Completion_Util.__init__ (method) -ida_idaapi.__IDAPython_Completion_Util.debug (method) -ida_idaapi.__IDAPython_Completion_Util.dir_namespace (method) -ida_idaapi.__IDAPython_Completion_Util.get_candidates (method) -ida_idaapi.__IDAPython_Completion_Util.maybe_extend_syntactically (method) -ida_idaapi.__install_excepthook (function) -ida_idaapi._bounded_getitem_iterator (function) -ida_idaapi._listify_types (function) -ida_idaapi._make_missed_695bwcompat_property (function) -ida_idaapi._make_missed_695bwcompat_property._getter (function) -ida_idaapi._make_missed_695bwcompat_property._setter (function) -ida_idaapi._make_one_time_warning_message (function) -ida_idaapi._make_one_time_warning_message.f (function) -ida_idaapi._qvector_back (function) -ida_idaapi._qvector_front (function) -ida_idaapi._replace_module_function (function) -ida_idaapi.as_UTF16 (function) -ida_idaapi.as_cstr (function) -ida_idaapi.as_int32 (function) -ida_idaapi.as_signed (function) -ida_idaapi.as_uint32 (function) -ida_idaapi.copy_bits (function) -ida_idaapi.disable_script_timeout (function) -ida_idaapi.enable_extlang_python (function) -ida_idaapi.enable_python_cli (function) -ida_idaapi.format_basestring (function) -ida_idaapi.get_inf_structure (function) -ida_idaapi.loader_input_t (class) -ida_idaapi.loader_input_t.__init__ (method) -ida_idaapi.loader_input_t.close (method) -ida_idaapi.loader_input_t.file2base (method) -ida_idaapi.loader_input_t.filename (method) -ida_idaapi.loader_input_t.from_capsule (method) -ida_idaapi.loader_input_t.from_fp (method) -ida_idaapi.loader_input_t.from_linput (method) -ida_idaapi.loader_input_t.get_byte (method) -ida_idaapi.loader_input_t.get_linput (method) -ida_idaapi.loader_input_t.gets (method) -ida_idaapi.loader_input_t.getz (method) -ida_idaapi.loader_input_t.open (method) -ida_idaapi.loader_input_t.open_memory (method) -ida_idaapi.loader_input_t.opened (method) -ida_idaapi.loader_input_t.read (method) -ida_idaapi.loader_input_t.readbytes (method) -ida_idaapi.loader_input_t.seek (method) -ida_idaapi.loader_input_t.set_linput (method) -ida_idaapi.loader_input_t.size (method) -ida_idaapi.loader_input_t.tell (method) -ida_idaapi.loader_input_t_from_capsule (function) -ida_idaapi.loader_input_t_from_fp (function) -ida_idaapi.loader_input_t_from_linput (function) -ida_idaapi.notify_when (function) -ida_idaapi.object_t (class) -ida_idaapi.object_t.__getitem__ (method) -ida_idaapi.object_t.__init__ (method) -ida_idaapi.parse_command_line3 (function) -ida_idaapi.plugin_t (class) -ida_idaapi.plugin_t.run (method) -ida_idaapi.plugin_t.term (method) -ida_idaapi.plugmod_t (class) -ida_idaapi.py_clinked_object_t (class) -ida_idaapi.py_clinked_object_t.__del__ (method) -ida_idaapi.py_clinked_object_t.__init__ (method) -ida_idaapi.py_clinked_object_t._create_clink (method) -ida_idaapi.py_clinked_object_t._del_clink (method) -ida_idaapi.py_clinked_object_t._free (method) -ida_idaapi.py_clinked_object_t._get_clink_ptr (method) -ida_idaapi.py_clinked_object_t.assign (method) -ida_idaapi.py_clinked_object_t.clink (variable) -ida_idaapi.py_clinked_object_t.clink_ptr (variable) -ida_idaapi.py_clinked_object_t.copy (method) -ida_idaapi.pycim_get_widget (function) -ida_idaapi.pycim_view_close (function) -ida_idaapi.pygc_create_groups (function) -ida_idaapi.pygc_delete_groups (function) -ida_idaapi.pygc_refresh (function) -ida_idaapi.pygc_set_groups_visibility (function) -ida_idaapi.pyidc_cvt_helper__ (class) -ida_idaapi.pyidc_cvt_helper__.__get_value (method) -ida_idaapi.pyidc_cvt_helper__.__init__ (method) -ida_idaapi.pyidc_cvt_helper__.__set_value (method) -ida_idaapi.pyidc_opaque_object_t (class) -ida_idaapi.replfun (function) -ida_idaapi.require (function) -ida_idaapi.set_script_timeout (function) -ida_idaapi.struct_unpack (function) -ida_idc (module) -ida_idc.get_mark_comment (function) -ida_idc.get_marked_pos (function) -ida_idc.mark_position (function) -ida_idd (module) -ida_idd.APPCALL_DEBEV (variable) -ida_idd.APPCALL_MANUAL (variable) -ida_idd.APPCALL_TIMEOUT (variable) -ida_idd.Appcall__ (class) -ida_idd.Appcall__.APPCALL_DEBEV (variable) -ida_idd.Appcall__.APPCALL_MANUAL (variable) -ida_idd.Appcall__.APPCALL_TIMEOUT (variable) -ida_idd.Appcall__.Consts (variable) -ida_idd.Appcall__.UTF16 (method) -ida_idd.Appcall__.__get_consts (method) -ida_idd.Appcall__.__getattr__ (method) -ida_idd.Appcall__.__getitem__ (method) -ida_idd.Appcall__.__init__ (method) -ida_idd.Appcall__.__name_or_ea (method) -ida_idd.Appcall__.__typedecl_or_tinfo (method) -ida_idd.Appcall__.array (method) -ida_idd.Appcall__.buffer (method) -ida_idd.Appcall__.byref (method) -ida_idd.Appcall__.cleanup_appcall (method) -ida_idd.Appcall__.cstr (method) -ida_idd.Appcall__.get_appcall_options (method) -ida_idd.Appcall__.int64 (method) -ida_idd.Appcall__.obj (method) -ida_idd.Appcall__.proto (method) -ida_idd.Appcall__.set_appcall_options (method) -ida_idd.Appcall__.typedobj (method) -ida_idd.Appcall__.valueof (method) -ida_idd.Appcall_array__ (class) -ida_idd.Appcall_array__.__init__ (method) -ida_idd.Appcall_array__.pack (method) -ida_idd.Appcall_array__.try_to_convert_to_list (method) -ida_idd.Appcall_array__.unpack (method) -ida_idd.Appcall_callable__ (class) -ida_idd.Appcall_callable__.__call__ (method) -ida_idd.Appcall_callable__.__get_ea (method) -ida_idd.Appcall_callable__.__get_fields (method) -ida_idd.Appcall_callable__.__get_options (method) -ida_idd.Appcall_callable__.__get_size (method) -ida_idd.Appcall_callable__.__get_tif (method) -ida_idd.Appcall_callable__.__get_timeout (method) -ida_idd.Appcall_callable__.__get_type (method) -ida_idd.Appcall_callable__.__init__ (method) -ida_idd.Appcall_callable__.__set_ea (method) -ida_idd.Appcall_callable__.__set_options (method) -ida_idd.Appcall_callable__.__set_timeout (method) -ida_idd.Appcall_callable__.ea (variable) -ida_idd.Appcall_callable__.fields (variable) -ida_idd.Appcall_callable__.options (variable) -ida_idd.Appcall_callable__.retrieve (method) -ida_idd.Appcall_callable__.size (variable) -ida_idd.Appcall_callable__.store (method) -ida_idd.Appcall_callable__.tif (variable) -ida_idd.Appcall_callable__.timeout (variable) -ida_idd.Appcall_callable__.type (variable) -ida_idd.Appcall_consts__ (class) -ida_idd.Appcall_consts__.__getattr__ (method) -ida_idd.Appcall_consts__.__init__ (method) -ida_idd.BPT_BAD_ADDR (variable) -ida_idd.BPT_BAD_ALIGN (variable) -ida_idd.BPT_BAD_LEN (variable) -ida_idd.BPT_BAD_TYPE (variable) -ida_idd.BPT_DEFAULT (variable) -ida_idd.BPT_EXEC (variable) -ida_idd.BPT_INTERNAL_ERR (variable) -ida_idd.BPT_OK (variable) -ida_idd.BPT_PAGE_OK (variable) -ida_idd.BPT_RDWR (variable) -ida_idd.BPT_READ (variable) -ida_idd.BPT_READ_ERROR (variable) -ida_idd.BPT_SKIP (variable) -ida_idd.BPT_SOFT (variable) -ida_idd.BPT_TOO_MANY (variable) -ida_idd.BPT_WRITE (variable) -ida_idd.BPT_WRITE_ERROR (variable) -ida_idd.BREAKPOINT (variable) -ida_idd.DBG_FLAG_ADD_ENVS (variable) -ida_idd.DBG_FLAG_ANYSIZE_HWBPT (variable) -ida_idd.DBG_FLAG_CAN_CONT_BPT (variable) -ida_idd.DBG_FLAG_CLEAN_EXIT (variable) -ida_idd.DBG_FLAG_CONNSTRING (variable) -ida_idd.DBG_FLAG_DEBTHREAD (variable) -ida_idd.DBG_FLAG_DEBUG_DLL (variable) -ida_idd.DBG_FLAG_DONT_DISTURB (variable) -ida_idd.DBG_FLAG_EXITSHOTOK (variable) -ida_idd.DBG_FLAG_FAKE_ATTACH (variable) -ida_idd.DBG_FLAG_FAKE_MEMORY (variable) -ida_idd.DBG_FLAG_FAST_STEP (variable) -ida_idd.DBG_FLAG_HWDATBPT_ONE (variable) -ida_idd.DBG_FLAG_LAZY_WATCHPTS (variable) -ida_idd.DBG_FLAG_LOWCNDS (variable) -ida_idd.DBG_FLAG_MANMEMINFO (variable) -ida_idd.DBG_FLAG_MERGE_ENVS (variable) -ida_idd.DBG_FLAG_NEEDPORT (variable) -ida_idd.DBG_FLAG_NOHOST (variable) -ida_idd.DBG_FLAG_NOPARAMETERS (variable) -ida_idd.DBG_FLAG_NOPASSWORD (variable) -ida_idd.DBG_FLAG_NOSTARTDIR (variable) -ida_idd.DBG_FLAG_PREFER_SWBPTS (variable) -ida_idd.DBG_FLAG_REMOTE (variable) -ida_idd.DBG_FLAG_SAFE (variable) -ida_idd.DBG_FLAG_SMALLBLKS (variable) -ida_idd.DBG_FLAG_TRACER_MODULE (variable) -ida_idd.DBG_FLAG_USE_SREGS (variable) -ida_idd.DBG_FLAG_VIRTHREADS (variable) -ida_idd.DBG_HAS_APPCALL (variable) -ida_idd.DBG_HAS_ATTACH_PROCESS (variable) -ida_idd.DBG_HAS_CHECK_BPT (variable) -ida_idd.DBG_HAS_DETACH_PROCESS (variable) -ida_idd.DBG_HAS_GET_PROCESSES (variable) -ida_idd.DBG_HAS_MAP_ADDRESS (variable) -ida_idd.DBG_HAS_OPEN_FILE (variable) -ida_idd.DBG_HAS_REQUEST_PAUSE (variable) -ida_idd.DBG_HAS_REXEC (variable) -ida_idd.DBG_HAS_SET_EXCEPTION_INFO (variable) -ida_idd.DBG_HAS_SET_RESUME_MODE (variable) -ida_idd.DBG_HAS_THREAD_CONTINUE (variable) -ida_idd.DBG_HAS_THREAD_GET_SREG_BASE (variable) -ida_idd.DBG_HAS_THREAD_SUSPEND (variable) -ida_idd.DBG_HAS_UPDATE_CALL_STACK (variable) -ida_idd.DBG_HIDE_WINDOW (variable) -ida_idd.DBG_NO_ASLR (variable) -ida_idd.DBG_NO_TRACE (variable) -ida_idd.DBG_PROC_32BIT (variable) -ida_idd.DBG_PROC_64BIT (variable) -ida_idd.DBG_PROC_IS_DLL (variable) -ida_idd.DBG_PROC_IS_GUI (variable) -ida_idd.DBG_RESMOD_STEP_HANDLE (variable) -ida_idd.DBG_RESMOD_STEP_INTO (variable) -ida_idd.DBG_RESMOD_STEP_OUT (variable) -ida_idd.DBG_RESMOD_STEP_OVER (variable) -ida_idd.DBG_RESMOD_STEP_SRCINTO (variable) -ida_idd.DBG_RESMOD_STEP_SRCOUT (variable) -ida_idd.DBG_RESMOD_STEP_SRCOVER (variable) -ida_idd.DBG_RESMOD_STEP_USER (variable) -ida_idd.DBG_SUSPENDED (variable) -ida_idd.DEBUGGER_ID_6811_EMULATOR (variable) -ida_idd.DEBUGGER_ID_ARM_IPHONE_USER (variable) -ida_idd.DEBUGGER_ID_ARM_LINUX_USER (variable) -ida_idd.DEBUGGER_ID_ARM_MACOS_USER (variable) -ida_idd.DEBUGGER_ID_DALVIK_USER (variable) -ida_idd.DEBUGGER_ID_GDB_USER (variable) -ida_idd.DEBUGGER_ID_TRACE_REPLAYER (variable) -ida_idd.DEBUGGER_ID_WINDBG (variable) -ida_idd.DEBUGGER_ID_X86_DOSBOX_EMULATOR (variable) -ida_idd.DEBUGGER_ID_X86_IA32_BOCHS (variable) -ida_idd.DEBUGGER_ID_X86_IA32_LINUX_USER (variable) -ida_idd.DEBUGGER_ID_X86_IA32_MACOSX_USER (variable) -ida_idd.DEBUGGER_ID_X86_IA32_WIN32_USER (variable) -ida_idd.DEBUGGER_ID_X86_PIN_TRACER (variable) -ida_idd.DEBUGGER_ID_XNU_USER (variable) -ida_idd.DRC_CRC (variable) -ida_idd.DRC_ERROR (variable) -ida_idd.DRC_EVENTS (variable) -ida_idd.DRC_FAILED (variable) -ida_idd.DRC_IDBSEG (variable) -ida_idd.DRC_NETERR (variable) -ida_idd.DRC_NOCHG (variable) -ida_idd.DRC_NOFILE (variable) -ida_idd.DRC_NONE (variable) -ida_idd.DRC_NOPROC (variable) -ida_idd.DRC_OK (variable) -ida_idd.EXCEPTION (variable) -ida_idd.EXC_BREAK (variable) -ida_idd.EXC_HANDLE (variable) -ida_idd.EXC_MSG (variable) -ida_idd.EXC_SILENT (variable) -ida_idd.IDD_INTERFACE_VERSION (variable) -ida_idd.INFORMATION (variable) -ida_idd.LIB_LOADED (variable) -ida_idd.LIB_UNLOADED (variable) -ida_idd.NO_EVENT (variable) -ida_idd.NO_PROCESS (variable) -ida_idd.NO_THREAD (variable) -ida_idd.PROCESS_ATTACHED (variable) -ida_idd.PROCESS_DETACHED (variable) -ida_idd.PROCESS_EXITED (variable) -ida_idd.PROCESS_STARTED (variable) -ida_idd.PROCESS_SUSPENDED (variable) -ida_idd.REGISTER_ADDRESS (variable) -ida_idd.REGISTER_CS (variable) -ida_idd.REGISTER_CUSTFMT (variable) -ida_idd.REGISTER_FP (variable) -ida_idd.REGISTER_IP (variable) -ida_idd.REGISTER_NOLF (variable) -ida_idd.REGISTER_READONLY (variable) -ida_idd.REGISTER_SP (variable) -ida_idd.REGISTER_SS (variable) -ida_idd.RESMOD_HANDLE (variable) -ida_idd.RESMOD_INTO (variable) -ida_idd.RESMOD_NONE (variable) -ida_idd.RESMOD_OUT (variable) -ida_idd.RESMOD_OVER (variable) -ida_idd.RESMOD_SRCINTO (variable) -ida_idd.RESMOD_SRCOUT (variable) -ida_idd.RESMOD_SRCOVER (variable) -ida_idd.RESMOD_USER (variable) -ida_idd.RVT_FLOAT (variable) -ida_idd.RVT_INT (variable) -ida_idd.RVT_UNAVAILABLE (variable) -ida_idd.STEP (variable) -ida_idd.THREAD_EXITED (variable) -ida_idd.THREAD_STARTED (variable) -ida_idd.TRACE_FULL (variable) -ida_idd.appcall (function) -ida_idd.bptaddr_t (class) -ida_idd.bptaddr_t.__init__ (method) -ida_idd.bptaddr_t.hea (variable) -ida_idd.bptaddr_t.kea (variable) -ida_idd.call_stack_info_t (class) -ida_idd.call_stack_info_t.__eq__ (method) -ida_idd.call_stack_info_t.__init__ (method) -ida_idd.call_stack_info_t.__ne__ (method) -ida_idd.call_stack_info_t.callea (variable) -ida_idd.call_stack_info_t.fp (variable) -ida_idd.call_stack_info_t.funcea (variable) -ida_idd.call_stack_info_t.funcok (variable) -ida_idd.call_stack_info_vec_t (class) -ida_idd.call_stack_info_vec_t.__eq__ (method) -ida_idd.call_stack_info_vec_t.__getitem__ (method) -ida_idd.call_stack_info_vec_t.__init__ (method) -ida_idd.call_stack_info_vec_t.__len__ (method) -ida_idd.call_stack_info_vec_t.__ne__ (method) -ida_idd.call_stack_info_vec_t.__setitem__ (method) -ida_idd.call_stack_info_vec_t._del (method) -ida_idd.call_stack_info_vec_t.add_unique (method) -ida_idd.call_stack_info_vec_t.at (method) -ida_idd.call_stack_info_vec_t.begin (method) -ida_idd.call_stack_info_vec_t.capacity (method) -ida_idd.call_stack_info_vec_t.clear (method) -ida_idd.call_stack_info_vec_t.empty (method) -ida_idd.call_stack_info_vec_t.end (method) -ida_idd.call_stack_info_vec_t.erase (method) -ida_idd.call_stack_info_vec_t.extract (method) -ida_idd.call_stack_info_vec_t.find (method) -ida_idd.call_stack_info_vec_t.grow (method) -ida_idd.call_stack_info_vec_t.has (method) -ida_idd.call_stack_info_vec_t.inject (method) -ida_idd.call_stack_info_vec_t.insert (method) -ida_idd.call_stack_info_vec_t.pop_back (method) -ida_idd.call_stack_info_vec_t.push_back (method) -ida_idd.call_stack_info_vec_t.qclear (method) -ida_idd.call_stack_info_vec_t.reserve (method) -ida_idd.call_stack_info_vec_t.resize (method) -ida_idd.call_stack_info_vec_t.size (method) -ida_idd.call_stack_info_vec_t.swap (method) -ida_idd.call_stack_info_vec_t.truncate (method) -ida_idd.call_stack_t (class) -ida_idd.call_stack_t.__init__ (method) -ida_idd.can_exc_continue (function) -ida_idd.cleanup_appcall (function) -ida_idd.dbg_appcall (function) -ida_idd.dbg_get_memory_info (function) -ida_idd.dbg_get_name (function) -ida_idd.dbg_get_registers (function) -ida_idd.dbg_get_thread_sreg_base (function) -ida_idd.dbg_read_memory (function) -ida_idd.dbg_write_memory (function) -ida_idd.debapp_attrs_t (class) -ida_idd.debapp_attrs_t.__init__ (method) -ida_idd.debapp_attrs_t.addrsize (variable) -ida_idd.debapp_attrs_t.cbsize (variable) -ida_idd.debapp_attrs_t.platform (variable) -ida_idd.debug_event_t (class) -ida_idd.debug_event_t.__init__ (method) -ida_idd.debug_event_t.bpt (method) -ida_idd.debug_event_t.bpt_ea (method) -ida_idd.debug_event_t.clear (method) -ida_idd.debug_event_t.clear_all (method) -ida_idd.debug_event_t.copy (method) -ida_idd.debug_event_t.ea (variable) -ida_idd.debug_event_t.eid (method) -ida_idd.debug_event_t.exc (method) -ida_idd.debug_event_t.exit_code (method) -ida_idd.debug_event_t.handled (variable) -ida_idd.debug_event_t.info (method) -ida_idd.debug_event_t.modinfo (method) -ida_idd.debug_event_t.pid (variable) -ida_idd.debug_event_t.set_bpt (method) -ida_idd.debug_event_t.set_eid (method) -ida_idd.debug_event_t.set_exception (method) -ida_idd.debug_event_t.set_exit_code (method) -ida_idd.debug_event_t.set_info (method) -ida_idd.debug_event_t.set_modinfo (method) -ida_idd.debug_event_t.tid (variable) -ida_idd.debugger_t (class) -ida_idd.debugger_t.__get_bpt_bytes (method) -ida_idd.debugger_t.__get_nregs (method) -ida_idd.debugger_t.__get_regclasses (method) -ida_idd.debugger_t.__get_registers (method) -ida_idd.debugger_t.__init__ (method) -ida_idd.debugger_t.attach_process (method) -ida_idd.debugger_t.bin_search (method) -ida_idd.debugger_t.bpt_bytes (variable) -ida_idd.debugger_t.bpt_size (variable) -ida_idd.debugger_t.cache_block_size (method) -ida_idd.debugger_t.can_continue_from_bpt (method) -ida_idd.debugger_t.can_debug_standalone_dlls (method) -ida_idd.debugger_t.check_bpt (method) -ida_idd.debugger_t.cleanup_appcall (method) -ida_idd.debugger_t.close_file (method) -ida_idd.debugger_t.dbg_enable_trace (method) -ida_idd.debugger_t.default_regclasses (variable) -ida_idd.debugger_t.detach_process (method) -ida_idd.debugger_t.ev_appcall (variable) -ida_idd.debugger_t.ev_attach_process (variable) -ida_idd.debugger_t.ev_bin_search (variable) -ida_idd.debugger_t.ev_check_bpt (variable) -ida_idd.debugger_t.ev_cleanup_appcall (variable) -ida_idd.debugger_t.ev_close_file (variable) -ida_idd.debugger_t.ev_dbg_enable_trace (variable) -ida_idd.debugger_t.ev_detach_process (variable) -ida_idd.debugger_t.ev_eval_lowcnd (variable) -ida_idd.debugger_t.ev_exit_process (variable) -ida_idd.debugger_t.ev_get_debapp_attrs (variable) -ida_idd.debugger_t.ev_get_debmod_extensions (variable) -ida_idd.debugger_t.ev_get_debug_event (variable) -ida_idd.debugger_t.ev_get_memory_info (variable) -ida_idd.debugger_t.ev_get_processes (variable) -ida_idd.debugger_t.ev_get_srcinfo_path (variable) -ida_idd.debugger_t.ev_init_debugger (variable) -ida_idd.debugger_t.ev_is_tracing_enabled (variable) -ida_idd.debugger_t.ev_map_address (variable) -ida_idd.debugger_t.ev_open_file (variable) -ida_idd.debugger_t.ev_read_file (variable) -ida_idd.debugger_t.ev_read_memory (variable) -ida_idd.debugger_t.ev_read_registers (variable) -ida_idd.debugger_t.ev_rebase_if_required_to (variable) -ida_idd.debugger_t.ev_request_pause (variable) -ida_idd.debugger_t.ev_resume (variable) -ida_idd.debugger_t.ev_rexec (variable) -ida_idd.debugger_t.ev_send_ioctl (variable) -ida_idd.debugger_t.ev_set_exception_info (variable) -ida_idd.debugger_t.ev_set_resume_mode (variable) -ida_idd.debugger_t.ev_start_process (variable) -ida_idd.debugger_t.ev_suspended (variable) -ida_idd.debugger_t.ev_term_debugger (variable) -ida_idd.debugger_t.ev_thread_continue (variable) -ida_idd.debugger_t.ev_thread_get_sreg_base (variable) -ida_idd.debugger_t.ev_thread_suspend (variable) -ida_idd.debugger_t.ev_update_bpts (variable) -ida_idd.debugger_t.ev_update_call_stack (variable) -ida_idd.debugger_t.ev_update_lowcnds (variable) -ida_idd.debugger_t.ev_write_file (variable) -ida_idd.debugger_t.ev_write_memory (variable) -ida_idd.debugger_t.ev_write_register (variable) -ida_idd.debugger_t.eval_lowcnd (method) -ida_idd.debugger_t.exit_process (method) -ida_idd.debugger_t.fake_memory (method) -ida_idd.debugger_t.filetype (variable) -ida_idd.debugger_t.flags2 (variable) -ida_idd.debugger_t.get_debapp_attrs (method) -ida_idd.debugger_t.get_debmod_extensions (method) -ida_idd.debugger_t.get_debug_event (method) -ida_idd.debugger_t.get_memory_info (method) -ida_idd.debugger_t.get_processes (method) -ida_idd.debugger_t.get_srcinfo_path (method) -ida_idd.debugger_t.has_appcall (method) -ida_idd.debugger_t.has_attach_process (method) -ida_idd.debugger_t.has_check_bpt (method) -ida_idd.debugger_t.has_detach_process (method) -ida_idd.debugger_t.has_get_processes (method) -ida_idd.debugger_t.has_map_address (method) -ida_idd.debugger_t.has_open_file (method) -ida_idd.debugger_t.has_request_pause (method) -ida_idd.debugger_t.has_rexec (method) -ida_idd.debugger_t.has_set_exception_info (method) -ida_idd.debugger_t.has_set_resume_mode (method) -ida_idd.debugger_t.has_soft_bpt (method) -ida_idd.debugger_t.has_thread_continue (method) -ida_idd.debugger_t.has_thread_get_sreg_base (method) -ida_idd.debugger_t.has_thread_suspend (method) -ida_idd.debugger_t.has_update_call_stack (method) -ida_idd.debugger_t.id (variable) -ida_idd.debugger_t.init_debugger (method) -ida_idd.debugger_t.is_remote (method) -ida_idd.debugger_t.is_resmod_avail (method) -ida_idd.debugger_t.is_safe (method) -ida_idd.debugger_t.is_tracing_enabled (method) -ida_idd.debugger_t.map_address (method) -ida_idd.debugger_t.may_disturb (method) -ida_idd.debugger_t.may_take_exit_snapshot (method) -ida_idd.debugger_t.memory_page_size (variable) -ida_idd.debugger_t.must_have_hostname (method) -ida_idd.debugger_t.name (variable) -ida_idd.debugger_t.nregs (variable) -ida_idd.debugger_t.open_file (method) -ida_idd.debugger_t.processor (variable) -ida_idd.debugger_t.read_file (method) -ida_idd.debugger_t.read_memory (method) -ida_idd.debugger_t.read_registers (method) -ida_idd.debugger_t.rebase_if_required_to (method) -ida_idd.debugger_t.regclasses (variable) -ida_idd.debugger_t.registers (variable) -ida_idd.debugger_t.regs (method) -ida_idd.debugger_t.request_pause (method) -ida_idd.debugger_t.resume (method) -ida_idd.debugger_t.resume_modes (variable) -ida_idd.debugger_t.rexec (method) -ida_idd.debugger_t.send_ioctl (method) -ida_idd.debugger_t.set_exception_info (method) -ida_idd.debugger_t.set_resume_mode (method) -ida_idd.debugger_t.start_process (method) -ida_idd.debugger_t.supports_debthread (method) -ida_idd.debugger_t.supports_lowcnds (method) -ida_idd.debugger_t.suspended (method) -ida_idd.debugger_t.term_debugger (method) -ida_idd.debugger_t.thread_continue (method) -ida_idd.debugger_t.thread_get_sreg_base (method) -ida_idd.debugger_t.thread_suspend (method) -ida_idd.debugger_t.update_bpts (method) -ida_idd.debugger_t.update_call_stack (method) -ida_idd.debugger_t.update_lowcnds (method) -ida_idd.debugger_t.use_memregs (method) -ida_idd.debugger_t.use_sregs (method) -ida_idd.debugger_t.version (variable) -ida_idd.debugger_t.virtual_threads (method) -ida_idd.debugger_t.write_file (method) -ida_idd.debugger_t.write_memory (method) -ida_idd.debugger_t.write_register (method) -ida_idd.dyn_register_info_array (class) -ida_idd.dyn_register_info_array.__getitem__ (method) -ida_idd.dyn_register_info_array.__init__ (method) -ida_idd.dyn_register_info_array.__len__ (method) -ida_idd.dyn_register_info_array.__setitem__ (method) -ida_idd.exception_info_t (class) -ida_idd.exception_info_t.__init__ (method) -ida_idd.exception_info_t.break_on (method) -ida_idd.exception_info_t.code (variable) -ida_idd.exception_info_t.desc (variable) -ida_idd.exception_info_t.flags (variable) -ida_idd.exception_info_t.handle (method) -ida_idd.exception_info_t.name (variable) -ida_idd.excinfo_t (class) -ida_idd.excinfo_t.__init__ (method) -ida_idd.excinfo_t.can_cont (variable) -ida_idd.excinfo_t.code (variable) -ida_idd.excinfo_t.ea (variable) -ida_idd.excinfo_t.info (variable) -ida_idd.excvec_t (class) -ida_idd.excvec_t.__getitem__ (method) -ida_idd.excvec_t.__init__ (method) -ida_idd.excvec_t.__len__ (method) -ida_idd.excvec_t.__setitem__ (method) -ida_idd.excvec_t.at (method) -ida_idd.excvec_t.begin (method) -ida_idd.excvec_t.capacity (method) -ida_idd.excvec_t.clear (method) -ida_idd.excvec_t.empty (method) -ida_idd.excvec_t.end (method) -ida_idd.excvec_t.erase (method) -ida_idd.excvec_t.extract (method) -ida_idd.excvec_t.grow (method) -ida_idd.excvec_t.inject (method) -ida_idd.excvec_t.insert (method) -ida_idd.excvec_t.pop_back (method) -ida_idd.excvec_t.push_back (method) -ida_idd.excvec_t.qclear (method) -ida_idd.excvec_t.reserve (method) -ida_idd.excvec_t.resize (method) -ida_idd.excvec_t.size (method) -ida_idd.excvec_t.swap (method) -ida_idd.excvec_t.truncate (method) -ida_idd.get_dbg (function) -ida_idd.get_event_bpt_hea (function) -ida_idd.get_event_exc_code (function) -ida_idd.get_event_exc_ea (function) -ida_idd.get_event_exc_info (function) -ida_idd.get_event_info (function) -ida_idd.get_event_module_base (function) -ida_idd.get_event_module_name (function) -ida_idd.get_event_module_size (function) -ida_idd.launch_env_t (class) -ida_idd.launch_env_t.__init__ (method) -ida_idd.meminfo_vec_t (class) -ida_idd.meminfo_vec_t.__init__ (method) -ida_idd.meminfo_vec_template_t (class) -ida_idd.meminfo_vec_template_t.__eq__ (method) -ida_idd.meminfo_vec_template_t.__getitem__ (method) -ida_idd.meminfo_vec_template_t.__init__ (method) -ida_idd.meminfo_vec_template_t.__len__ (method) -ida_idd.meminfo_vec_template_t.__ne__ (method) -ida_idd.meminfo_vec_template_t.__setitem__ (method) -ida_idd.meminfo_vec_template_t._del (method) -ida_idd.meminfo_vec_template_t.add_unique (method) -ida_idd.meminfo_vec_template_t.at (method) -ida_idd.meminfo_vec_template_t.begin (method) -ida_idd.meminfo_vec_template_t.capacity (method) -ida_idd.meminfo_vec_template_t.clear (method) -ida_idd.meminfo_vec_template_t.empty (method) -ida_idd.meminfo_vec_template_t.end (method) -ida_idd.meminfo_vec_template_t.erase (method) -ida_idd.meminfo_vec_template_t.extract (method) -ida_idd.meminfo_vec_template_t.find (method) -ida_idd.meminfo_vec_template_t.grow (method) -ida_idd.meminfo_vec_template_t.has (method) -ida_idd.meminfo_vec_template_t.inject (method) -ida_idd.meminfo_vec_template_t.insert (method) -ida_idd.meminfo_vec_template_t.pop_back (method) -ida_idd.meminfo_vec_template_t.push_back (method) -ida_idd.meminfo_vec_template_t.qclear (method) -ida_idd.meminfo_vec_template_t.reserve (method) -ida_idd.meminfo_vec_template_t.resize (method) -ida_idd.meminfo_vec_template_t.size (method) -ida_idd.meminfo_vec_template_t.swap (method) -ida_idd.meminfo_vec_template_t.truncate (method) -ida_idd.memory_info_t (class) -ida_idd.memory_info_t.__eq__ (method) -ida_idd.memory_info_t.__init__ (method) -ida_idd.memory_info_t.__ne__ (method) -ida_idd.memory_info_t.bitness (variable) -ida_idd.memory_info_t.name (variable) -ida_idd.memory_info_t.perm (variable) -ida_idd.memory_info_t.sbase (variable) -ida_idd.memory_info_t.sclass (variable) -ida_idd.modinfo_t (class) -ida_idd.modinfo_t.__init__ (method) -ida_idd.modinfo_t.base (variable) -ida_idd.modinfo_t.name (variable) -ida_idd.modinfo_t.rebase_to (variable) -ida_idd.modinfo_t.size (variable) -ida_idd.process_info_t (class) -ida_idd.process_info_t.__init__ (method) -ida_idd.process_info_t.name (variable) -ida_idd.process_info_t.pid (variable) -ida_idd.procinfo_vec_t (class) -ida_idd.procinfo_vec_t.__getitem__ (method) -ida_idd.procinfo_vec_t.__init__ (method) -ida_idd.procinfo_vec_t.__len__ (method) -ida_idd.procinfo_vec_t.__setitem__ (method) -ida_idd.procinfo_vec_t.at (method) -ida_idd.procinfo_vec_t.begin (method) -ida_idd.procinfo_vec_t.capacity (method) -ida_idd.procinfo_vec_t.clear (method) -ida_idd.procinfo_vec_t.empty (method) -ida_idd.procinfo_vec_t.end (method) -ida_idd.procinfo_vec_t.erase (method) -ida_idd.procinfo_vec_t.extract (method) -ida_idd.procinfo_vec_t.grow (method) -ida_idd.procinfo_vec_t.inject (method) -ida_idd.procinfo_vec_t.insert (method) -ida_idd.procinfo_vec_t.pop_back (method) -ida_idd.procinfo_vec_t.push_back (method) -ida_idd.procinfo_vec_t.qclear (method) -ida_idd.procinfo_vec_t.reserve (method) -ida_idd.procinfo_vec_t.resize (method) -ida_idd.procinfo_vec_t.size (method) -ida_idd.procinfo_vec_t.swap (method) -ida_idd.procinfo_vec_t.truncate (method) -ida_idd.register_info_t (class) -ida_idd.register_info_t.__get_bit_strings (method) -ida_idd.register_info_t.__init__ (method) -ida_idd.register_info_t.bit_strings (variable) -ida_idd.register_info_t.default_bit_strings_mask (variable) -ida_idd.register_info_t.dtype (variable) -ida_idd.register_info_t.flags (variable) -ida_idd.register_info_t.name (variable) -ida_idd.register_info_t.register_class (variable) -ida_idd.regval_t (class) -ida_idd.regval_t.__eq__ (method) -ida_idd.regval_t.__init__ (method) -ida_idd.regval_t.__ne__ (method) -ida_idd.regval_t.bytes (method) -ida_idd.regval_t.clear (method) -ida_idd.regval_t.fval (variable) -ida_idd.regval_t.get_data (method) -ida_idd.regval_t.get_data_size (method) -ida_idd.regval_t.ival (variable) -ida_idd.regval_t.pyval (method) -ida_idd.regval_t.rvtype (variable) -ida_idd.regval_t.set_bytes (method) -ida_idd.regval_t.set_float (method) -ida_idd.regval_t.set_int (method) -ida_idd.regval_t.set_pyval (method) -ida_idd.regval_t.set_unavailable (method) -ida_idd.regval_t.swap (method) -ida_idd.regvals_t (class) -ida_idd.regvals_t.__eq__ (method) -ida_idd.regvals_t.__getitem__ (method) -ida_idd.regvals_t.__init__ (method) -ida_idd.regvals_t.__len__ (method) -ida_idd.regvals_t.__ne__ (method) -ida_idd.regvals_t.__setitem__ (method) -ida_idd.regvals_t._del (method) -ida_idd.regvals_t.add_unique (method) -ida_idd.regvals_t.at (method) -ida_idd.regvals_t.begin (method) -ida_idd.regvals_t.capacity (method) -ida_idd.regvals_t.clear (method) -ida_idd.regvals_t.empty (method) -ida_idd.regvals_t.end (method) -ida_idd.regvals_t.erase (method) -ida_idd.regvals_t.extract (method) -ida_idd.regvals_t.find (method) -ida_idd.regvals_t.grow (method) -ida_idd.regvals_t.has (method) -ida_idd.regvals_t.inject (method) -ida_idd.regvals_t.insert (method) -ida_idd.regvals_t.pop_back (method) -ida_idd.regvals_t.push_back (method) -ida_idd.regvals_t.qclear (method) -ida_idd.regvals_t.reserve (method) -ida_idd.regvals_t.resize (method) -ida_idd.regvals_t.size (method) -ida_idd.regvals_t.swap (method) -ida_idd.regvals_t.truncate (method) -ida_idd.scattered_segm_t (class) -ida_idd.scattered_segm_t.__init__ (method) -ida_idd.scattered_segm_t.name (variable) -ida_idd.set_debug_event_code (function) -ida_idd.thread_name_t (class) -ida_idd.thread_name_t.__init__ (method) -ida_idd.thread_name_t.name (variable) -ida_idd.thread_name_t.tid (variable) -ida_idp (module) -ida_idp.AS2_BRACE (variable) -ida_idp.AS2_BYTE1CHAR (variable) -ida_idp.AS2_COLONSUF (variable) -ida_idp.AS2_IDEALDSCR (variable) -ida_idp.AS2_STRINV (variable) -ida_idp.AS2_TERSESTR (variable) -ida_idp.AS2_YWORD (variable) -ida_idp.AS2_ZWORD (variable) -ida_idp.ASB_BINF0 (variable) -ida_idp.ASB_BINF1 (variable) -ida_idp.ASB_BINF2 (variable) -ida_idp.ASB_BINF3 (variable) -ida_idp.ASB_BINF4 (variable) -ida_idp.ASB_BINF5 (variable) -ida_idp.ASD_DECF0 (variable) -ida_idp.ASD_DECF1 (variable) -ida_idp.ASD_DECF2 (variable) -ida_idp.ASD_DECF3 (variable) -ida_idp.ASH_HEXF0 (variable) -ida_idp.ASH_HEXF1 (variable) -ida_idp.ASH_HEXF2 (variable) -ida_idp.ASH_HEXF3 (variable) -ida_idp.ASH_HEXF4 (variable) -ida_idp.ASH_HEXF5 (variable) -ida_idp.ASO_OCTF0 (variable) -ida_idp.ASO_OCTF1 (variable) -ida_idp.ASO_OCTF2 (variable) -ida_idp.ASO_OCTF3 (variable) -ida_idp.ASO_OCTF4 (variable) -ida_idp.ASO_OCTF5 (variable) -ida_idp.ASO_OCTF6 (variable) -ida_idp.ASO_OCTF7 (variable) -ida_idp.AS_1TEXT (variable) -ida_idp.AS_2CHRE (variable) -ida_idp.AS_ALIGN2 (variable) -ida_idp.AS_ASCIIC (variable) -ida_idp.AS_ASCIIZ (variable) -ida_idp.AS_BINFM (variable) -ida_idp.AS_COLON (variable) -ida_idp.AS_DECFM (variable) -ida_idp.AS_HEXFM (variable) -ida_idp.AS_LALIGN (variable) -ida_idp.AS_N2CHR (variable) -ida_idp.AS_NCHRE (variable) -ida_idp.AS_NCMAS (variable) -ida_idp.AS_NHIAS (variable) -ida_idp.AS_NOCODECLN (variable) -ida_idp.AS_NOSPACE (variable) -ida_idp.AS_NOXRF (variable) -ida_idp.AS_OCTFM (variable) -ida_idp.AS_OFFST (variable) -ida_idp.AS_ONEDUP (variable) -ida_idp.AS_RELSUP (variable) -ida_idp.AS_UDATA (variable) -ida_idp.AS_UNEQU (variable) -ida_idp.AS_XTRNTYPE (variable) -ida_idp.AssembleLine (function) -ida_idp.CF_CALL (variable) -ida_idp.CF_CHG1 (variable) -ida_idp.CF_CHG2 (variable) -ida_idp.CF_CHG3 (variable) -ida_idp.CF_CHG4 (variable) -ida_idp.CF_CHG5 (variable) -ida_idp.CF_CHG6 (variable) -ida_idp.CF_CHG7 (variable) -ida_idp.CF_CHG8 (variable) -ida_idp.CF_HLL (variable) -ida_idp.CF_JUMP (variable) -ida_idp.CF_SHFT (variable) -ida_idp.CF_STOP (variable) -ida_idp.CF_USE1 (variable) -ida_idp.CF_USE2 (variable) -ida_idp.CF_USE3 (variable) -ida_idp.CF_USE4 (variable) -ida_idp.CF_USE5 (variable) -ida_idp.CF_USE6 (variable) -ida_idp.CF_USE7 (variable) -ida_idp.CF_USE8 (variable) -ida_idp.CUSTOM_INSN_ITYPE (variable) -ida_idp.HKCB_GLOBAL (variable) -ida_idp.IDB_Hooks (class) -ida_idp.IDB_Hooks.__disown__ (method) -ida_idp.IDB_Hooks.__init__ (method) -ida_idp.IDB_Hooks.adding_segm (method) -ida_idp.IDB_Hooks.allsegs_moved (method) -ida_idp.IDB_Hooks.auto_empty (method) -ida_idp.IDB_Hooks.auto_empty_finally (method) -ida_idp.IDB_Hooks.bookmark_changed (method) -ida_idp.IDB_Hooks.byte_patched (method) -ida_idp.IDB_Hooks.callee_addr_changed (method) -ida_idp.IDB_Hooks.changing_cmt (method) -ida_idp.IDB_Hooks.changing_enum_bf (method) -ida_idp.IDB_Hooks.changing_enum_cmt (method) -ida_idp.IDB_Hooks.changing_op_ti (method) -ida_idp.IDB_Hooks.changing_op_type (method) -ida_idp.IDB_Hooks.changing_range_cmt (method) -ida_idp.IDB_Hooks.changing_segm_class (method) -ida_idp.IDB_Hooks.changing_segm_end (method) -ida_idp.IDB_Hooks.changing_segm_name (method) -ida_idp.IDB_Hooks.changing_segm_start (method) -ida_idp.IDB_Hooks.changing_struc_align (method) -ida_idp.IDB_Hooks.changing_struc_cmt (method) -ida_idp.IDB_Hooks.changing_struc_member (method) -ida_idp.IDB_Hooks.changing_ti (method) -ida_idp.IDB_Hooks.closebase (method) -ida_idp.IDB_Hooks.cmt_changed (method) -ida_idp.IDB_Hooks.compiler_changed (method) -ida_idp.IDB_Hooks.deleting_enum (method) -ida_idp.IDB_Hooks.deleting_enum_member (method) -ida_idp.IDB_Hooks.deleting_func (method) -ida_idp.IDB_Hooks.deleting_func_tail (method) -ida_idp.IDB_Hooks.deleting_segm (method) -ida_idp.IDB_Hooks.deleting_struc (method) -ida_idp.IDB_Hooks.deleting_struc_member (method) -ida_idp.IDB_Hooks.deleting_tryblks (method) -ida_idp.IDB_Hooks.destroyed_items (method) -ida_idp.IDB_Hooks.determined_main (method) -ida_idp.IDB_Hooks.dirtree_link (method) -ida_idp.IDB_Hooks.dirtree_mkdir (method) -ida_idp.IDB_Hooks.dirtree_move (method) -ida_idp.IDB_Hooks.dirtree_rank (method) -ida_idp.IDB_Hooks.dirtree_rmdir (method) -ida_idp.IDB_Hooks.dirtree_rminode (method) -ida_idp.IDB_Hooks.dirtree_segm_moved (method) -ida_idp.IDB_Hooks.enum_bf_changed (method) -ida_idp.IDB_Hooks.enum_cmt_changed (method) -ida_idp.IDB_Hooks.enum_created (method) -ida_idp.IDB_Hooks.enum_deleted (method) -ida_idp.IDB_Hooks.enum_flag_changed (method) -ida_idp.IDB_Hooks.enum_member_created (method) -ida_idp.IDB_Hooks.enum_member_deleted (method) -ida_idp.IDB_Hooks.enum_ordinal_changed (method) -ida_idp.IDB_Hooks.enum_renamed (method) -ida_idp.IDB_Hooks.enum_width_changed (method) -ida_idp.IDB_Hooks.expanding_struc (method) -ida_idp.IDB_Hooks.extlang_changed (method) -ida_idp.IDB_Hooks.extra_cmt_changed (method) -ida_idp.IDB_Hooks.flow_chart_created (method) -ida_idp.IDB_Hooks.frame_deleted (method) -ida_idp.IDB_Hooks.func_added (method) -ida_idp.IDB_Hooks.func_deleted (method) -ida_idp.IDB_Hooks.func_noret_changed (method) -ida_idp.IDB_Hooks.func_tail_appended (method) -ida_idp.IDB_Hooks.func_tail_deleted (method) -ida_idp.IDB_Hooks.func_updated (method) -ida_idp.IDB_Hooks.hook (method) -ida_idp.IDB_Hooks.idasgn_loaded (method) -ida_idp.IDB_Hooks.item_color_changed (method) -ida_idp.IDB_Hooks.kernel_config_loaded (method) -ida_idp.IDB_Hooks.loader_finished (method) -ida_idp.IDB_Hooks.local_types_changed (method) -ida_idp.IDB_Hooks.make_code (method) -ida_idp.IDB_Hooks.make_data (method) -ida_idp.IDB_Hooks.op_ti_changed (method) -ida_idp.IDB_Hooks.op_type_changed (method) -ida_idp.IDB_Hooks.range_cmt_changed (method) -ida_idp.IDB_Hooks.renamed (method) -ida_idp.IDB_Hooks.renaming_enum (method) -ida_idp.IDB_Hooks.renaming_struc (method) -ida_idp.IDB_Hooks.renaming_struc_member (method) -ida_idp.IDB_Hooks.savebase (method) -ida_idp.IDB_Hooks.segm_added (method) -ida_idp.IDB_Hooks.segm_attrs_updated (method) -ida_idp.IDB_Hooks.segm_class_changed (method) -ida_idp.IDB_Hooks.segm_deleted (method) -ida_idp.IDB_Hooks.segm_end_changed (method) -ida_idp.IDB_Hooks.segm_moved (method) -ida_idp.IDB_Hooks.segm_name_changed (method) -ida_idp.IDB_Hooks.segm_start_changed (method) -ida_idp.IDB_Hooks.set_func_end (method) -ida_idp.IDB_Hooks.set_func_start (method) -ida_idp.IDB_Hooks.sgr_changed (method) -ida_idp.IDB_Hooks.sgr_deleted (method) -ida_idp.IDB_Hooks.stkpnts_changed (method) -ida_idp.IDB_Hooks.struc_align_changed (method) -ida_idp.IDB_Hooks.struc_cmt_changed (method) -ida_idp.IDB_Hooks.struc_created (method) -ida_idp.IDB_Hooks.struc_deleted (method) -ida_idp.IDB_Hooks.struc_expanded (method) -ida_idp.IDB_Hooks.struc_member_changed (method) -ida_idp.IDB_Hooks.struc_member_created (method) -ida_idp.IDB_Hooks.struc_member_deleted (method) -ida_idp.IDB_Hooks.struc_member_renamed (method) -ida_idp.IDB_Hooks.struc_renamed (method) -ida_idp.IDB_Hooks.tail_owner_changed (method) -ida_idp.IDB_Hooks.thunk_func_created (method) -ida_idp.IDB_Hooks.ti_changed (method) -ida_idp.IDB_Hooks.tryblks_updated (method) -ida_idp.IDB_Hooks.unhook (method) -ida_idp.IDB_Hooks.updating_tryblks (method) -ida_idp.IDB_Hooks.upgraded (method) -ida_idp.IDP_Hooks (class) -ida_idp.IDP_Hooks.__disown__ (method) -ida_idp.IDP_Hooks.__init__ (method) -ida_idp.IDP_Hooks.ev_add_cref (method) -ida_idp.IDP_Hooks.ev_add_dref (method) -ida_idp.IDP_Hooks.ev_adjust_argloc (method) -ida_idp.IDP_Hooks.ev_adjust_libfunc_ea (method) -ida_idp.IDP_Hooks.ev_adjust_refinfo (method) -ida_idp.IDP_Hooks.ev_ana_insn (method) -ida_idp.IDP_Hooks.ev_analyze_prolog (method) -ida_idp.IDP_Hooks.ev_arch_changed (method) -ida_idp.IDP_Hooks.ev_arg_addrs_ready (method) -ida_idp.IDP_Hooks.ev_asm_installed (method) -ida_idp.IDP_Hooks.ev_assemble (method) -ida_idp.IDP_Hooks.ev_auto_queue_empty (method) -ida_idp.IDP_Hooks.ev_calc_arglocs (method) -ida_idp.IDP_Hooks.ev_calc_cdecl_purged_bytes (method) -ida_idp.IDP_Hooks.ev_calc_next_eas (method) -ida_idp.IDP_Hooks.ev_calc_purged_bytes (method) -ida_idp.IDP_Hooks.ev_calc_retloc (method) -ida_idp.IDP_Hooks.ev_calc_spdelta (method) -ida_idp.IDP_Hooks.ev_calc_step_over (method) -ida_idp.IDP_Hooks.ev_calc_switch_cases (method) -ida_idp.IDP_Hooks.ev_calc_varglocs (method) -ida_idp.IDP_Hooks.ev_calcrel (method) -ida_idp.IDP_Hooks.ev_can_have_type (method) -ida_idp.IDP_Hooks.ev_clean_tbit (method) -ida_idp.IDP_Hooks.ev_cmp_operands (method) -ida_idp.IDP_Hooks.ev_coagulate (method) -ida_idp.IDP_Hooks.ev_coagulate_dref (method) -ida_idp.IDP_Hooks.ev_create_flat_group (method) -ida_idp.IDP_Hooks.ev_create_func_frame (method) -ida_idp.IDP_Hooks.ev_create_merge_handlers (method) -ida_idp.IDP_Hooks.ev_create_switch_xrefs (method) -ida_idp.IDP_Hooks.ev_creating_segm (method) -ida_idp.IDP_Hooks.ev_cvt64_hashval (method) -ida_idp.IDP_Hooks.ev_cvt64_supval (method) -ida_idp.IDP_Hooks.ev_decorate_name (method) -ida_idp.IDP_Hooks.ev_del_cref (method) -ida_idp.IDP_Hooks.ev_del_dref (method) -ida_idp.IDP_Hooks.ev_delay_slot_insn (method) -ida_idp.IDP_Hooks.ev_demangle_name (method) -ida_idp.IDP_Hooks.ev_emu_insn (method) -ida_idp.IDP_Hooks.ev_endbinary (method) -ida_idp.IDP_Hooks.ev_ending_undo (method) -ida_idp.IDP_Hooks.ev_equal_reglocs (method) -ida_idp.IDP_Hooks.ev_extract_address (method) -ida_idp.IDP_Hooks.ev_find_op_value (method) -ida_idp.IDP_Hooks.ev_find_reg_value (method) -ida_idp.IDP_Hooks.ev_func_bounds (method) -ida_idp.IDP_Hooks.ev_gen_asm_or_lst (method) -ida_idp.IDP_Hooks.ev_gen_map_file (method) -ida_idp.IDP_Hooks.ev_gen_regvar_def (method) -ida_idp.IDP_Hooks.ev_gen_src_file_lnnum (method) -ida_idp.IDP_Hooks.ev_gen_stkvar_def (method) -ida_idp.IDP_Hooks.ev_get_abi_info (method) -ida_idp.IDP_Hooks.ev_get_autocmt (method) -ida_idp.IDP_Hooks.ev_get_bg_color (method) -ida_idp.IDP_Hooks.ev_get_cc_regs (method) -ida_idp.IDP_Hooks.ev_get_code16_mode (method) -ida_idp.IDP_Hooks.ev_get_dbr_opnum (method) -ida_idp.IDP_Hooks.ev_get_default_enum_size (method) -ida_idp.IDP_Hooks.ev_get_frame_retsize (method) -ida_idp.IDP_Hooks.ev_get_macro_insn_head (method) -ida_idp.IDP_Hooks.ev_get_operand_string (method) -ida_idp.IDP_Hooks.ev_get_procmod (method) -ida_idp.IDP_Hooks.ev_get_reg_accesses (method) -ida_idp.IDP_Hooks.ev_get_reg_info (method) -ida_idp.IDP_Hooks.ev_get_reg_name (method) -ida_idp.IDP_Hooks.ev_get_simd_types (method) -ida_idp.IDP_Hooks.ev_get_stkarg_area_info (method) -ida_idp.IDP_Hooks.ev_get_stkvar_scale_factor (method) -ida_idp.IDP_Hooks.ev_getreg (method) -ida_idp.IDP_Hooks.ev_init (method) -ida_idp.IDP_Hooks.ev_insn_reads_tbit (method) -ida_idp.IDP_Hooks.ev_is_align_insn (method) -ida_idp.IDP_Hooks.ev_is_alloca_probe (method) -ida_idp.IDP_Hooks.ev_is_basic_block_end (method) -ida_idp.IDP_Hooks.ev_is_call_insn (method) -ida_idp.IDP_Hooks.ev_is_cond_insn (method) -ida_idp.IDP_Hooks.ev_is_control_flow_guard (method) -ida_idp.IDP_Hooks.ev_is_far_jump (method) -ida_idp.IDP_Hooks.ev_is_indirect_jump (method) -ida_idp.IDP_Hooks.ev_is_insn_table_jump (method) -ida_idp.IDP_Hooks.ev_is_jump_func (method) -ida_idp.IDP_Hooks.ev_is_ret_insn (method) -ida_idp.IDP_Hooks.ev_is_sane_insn (method) -ida_idp.IDP_Hooks.ev_is_sp_based (method) -ida_idp.IDP_Hooks.ev_is_switch (method) -ida_idp.IDP_Hooks.ev_last_cb_before_loader (method) -ida_idp.IDP_Hooks.ev_loader (method) -ida_idp.IDP_Hooks.ev_lower_func_type (method) -ida_idp.IDP_Hooks.ev_max_ptr_size (method) -ida_idp.IDP_Hooks.ev_may_be_func (method) -ida_idp.IDP_Hooks.ev_may_show_sreg (method) -ida_idp.IDP_Hooks.ev_moving_segm (method) -ida_idp.IDP_Hooks.ev_newasm (method) -ida_idp.IDP_Hooks.ev_newbinary (method) -ida_idp.IDP_Hooks.ev_newfile (method) -ida_idp.IDP_Hooks.ev_newprc (method) -ida_idp.IDP_Hooks.ev_next_exec_insn (method) -ida_idp.IDP_Hooks.ev_oldfile (method) -ida_idp.IDP_Hooks.ev_out_assumes (method) -ida_idp.IDP_Hooks.ev_out_data (method) -ida_idp.IDP_Hooks.ev_out_footer (method) -ida_idp.IDP_Hooks.ev_out_header (method) -ida_idp.IDP_Hooks.ev_out_insn (method) -ida_idp.IDP_Hooks.ev_out_label (method) -ida_idp.IDP_Hooks.ev_out_mnem (method) -ida_idp.IDP_Hooks.ev_out_operand (method) -ida_idp.IDP_Hooks.ev_out_segend (method) -ida_idp.IDP_Hooks.ev_out_segstart (method) -ida_idp.IDP_Hooks.ev_out_special_item (method) -ida_idp.IDP_Hooks.ev_privrange_changed (method) -ida_idp.IDP_Hooks.ev_realcvt (method) -ida_idp.IDP_Hooks.ev_rename (method) -ida_idp.IDP_Hooks.ev_replaying_undo (method) -ida_idp.IDP_Hooks.ev_set_code16_mode (method) -ida_idp.IDP_Hooks.ev_set_idp_options (method) -ida_idp.IDP_Hooks.ev_set_proc_options (method) -ida_idp.IDP_Hooks.ev_setup_til (method) -ida_idp.IDP_Hooks.ev_str2reg (method) -ida_idp.IDP_Hooks.ev_term (method) -ida_idp.IDP_Hooks.ev_treat_hindering_item (method) -ida_idp.IDP_Hooks.ev_undefine (method) -ida_idp.IDP_Hooks.ev_update_call_stack (method) -ida_idp.IDP_Hooks.ev_use_arg_types (method) -ida_idp.IDP_Hooks.ev_use_regarg_type (method) -ida_idp.IDP_Hooks.ev_use_stkarg_type (method) -ida_idp.IDP_Hooks.ev_validate_flirt_func (method) -ida_idp.IDP_Hooks.ev_verify_noreturn (method) -ida_idp.IDP_Hooks.ev_verify_sp (method) -ida_idp.IDP_Hooks.hook (method) -ida_idp.IDP_Hooks.unhook (method) -ida_idp.IDP_INTERFACE_VERSION (variable) -ida_idp.OP_FP_BASED (variable) -ida_idp.OP_SP_ADD (variable) -ida_idp.OP_SP_BASED (variable) -ida_idp.OP_SP_SUB (variable) -ida_idp.PLFM_386 (variable) -ida_idp.PLFM_6502 (variable) -ida_idp.PLFM_65C816 (variable) -ida_idp.PLFM_6800 (variable) -ida_idp.PLFM_68K (variable) -ida_idp.PLFM_80196 (variable) -ida_idp.PLFM_8051 (variable) -ida_idp.PLFM_AD2106X (variable) -ida_idp.PLFM_AD218X (variable) -ida_idp.PLFM_ALPHA (variable) -ida_idp.PLFM_ARC (variable) -ida_idp.PLFM_ARM (variable) -ida_idp.PLFM_AVR (variable) -ida_idp.PLFM_C166 (variable) -ida_idp.PLFM_C39 (variable) -ida_idp.PLFM_CR16 (variable) -ida_idp.PLFM_DALVIK (variable) -ida_idp.PLFM_DSP56K (variable) -ida_idp.PLFM_DSP96K (variable) -ida_idp.PLFM_EBC (variable) -ida_idp.PLFM_F2MC (variable) -ida_idp.PLFM_FR (variable) -ida_idp.PLFM_H8 (variable) -ida_idp.PLFM_H8500 (variable) -ida_idp.PLFM_HPPA (variable) -ida_idp.PLFM_I860 (variable) -ida_idp.PLFM_I960 (variable) -ida_idp.PLFM_IA64 (variable) -ida_idp.PLFM_JAVA (variable) -ida_idp.PLFM_KR1878 (variable) -ida_idp.PLFM_M16C (variable) -ida_idp.PLFM_M32R (variable) -ida_idp.PLFM_M740 (variable) -ida_idp.PLFM_M7700 (variable) -ida_idp.PLFM_M7900 (variable) -ida_idp.PLFM_MC6812 (variable) -ida_idp.PLFM_MC6816 (variable) -ida_idp.PLFM_MIPS (variable) -ida_idp.PLFM_MN102L00 (variable) -ida_idp.PLFM_MSP430 (variable) -ida_idp.PLFM_NEC_78K0 (variable) -ida_idp.PLFM_NEC_78K0S (variable) -ida_idp.PLFM_NEC_V850X (variable) -ida_idp.PLFM_NET (variable) -ida_idp.PLFM_OAKDSP (variable) -ida_idp.PLFM_PDP (variable) -ida_idp.PLFM_PIC (variable) -ida_idp.PLFM_PIC16 (variable) -ida_idp.PLFM_PPC (variable) -ida_idp.PLFM_RISCV (variable) -ida_idp.PLFM_RL78 (variable) -ida_idp.PLFM_RX (variable) -ida_idp.PLFM_S390 (variable) -ida_idp.PLFM_SCR_ADPT (variable) -ida_idp.PLFM_SH (variable) -ida_idp.PLFM_SPARC (variable) -ida_idp.PLFM_SPC700 (variable) -ida_idp.PLFM_SPU (variable) -ida_idp.PLFM_ST20 (variable) -ida_idp.PLFM_ST7 (variable) -ida_idp.PLFM_ST9 (variable) -ida_idp.PLFM_TLCS900 (variable) -ida_idp.PLFM_TMS (variable) -ida_idp.PLFM_TMS320C1X (variable) -ida_idp.PLFM_TMS320C28 (variable) -ida_idp.PLFM_TMS320C3 (variable) -ida_idp.PLFM_TMS320C54 (variable) -ida_idp.PLFM_TMS320C55 (variable) -ida_idp.PLFM_TMSC6 (variable) -ida_idp.PLFM_TRICORE (variable) -ida_idp.PLFM_TRIMEDIA (variable) -ida_idp.PLFM_UNSP (variable) -ida_idp.PLFM_XTENSA (variable) -ida_idp.PLFM_Z8 (variable) -ida_idp.PLFM_Z80 (variable) -ida_idp.PR2_CODE16_BIT (variable) -ida_idp.PR2_FORCE_16BIT (variable) -ida_idp.PR2_IDP_OPTS (variable) -ida_idp.PR2_MACRO (variable) -ida_idp.PR2_MAPPINGS (variable) -ida_idp.PR2_REALCVT (variable) -ida_idp.PR2_REL_BITS (variable) -ida_idp.PR2_USE_CALCREL (variable) -ida_idp.PRN_BIN (variable) -ida_idp.PRN_DEC (variable) -ida_idp.PRN_HEX (variable) -ida_idp.PRN_OCT (variable) -ida_idp.PR_ADJSEGS (variable) -ida_idp.PR_ALIGN (variable) -ida_idp.PR_ALIGN_INSN (variable) -ida_idp.PR_ASSEMBLE (variable) -ida_idp.PR_BINMEM (variable) -ida_idp.PR_CHK_XREF (variable) -ida_idp.PR_CNDINSNS (variable) -ida_idp.PR_DEFNUM (variable) -ida_idp.PR_DEFSEG32 (variable) -ida_idp.PR_DEFSEG64 (variable) -ida_idp.PR_DELAYED (variable) -ida_idp.PR_NOCHANGE (variable) -ida_idp.PR_NO_SEGMOVE (variable) -ida_idp.PR_OUTER (variable) -ida_idp.PR_PURGING (variable) -ida_idp.PR_RNAMESOK (variable) -ida_idp.PR_SCALE_STKVARS (variable) -ida_idp.PR_SEGS (variable) -ida_idp.PR_SEGTRANS (variable) -ida_idp.PR_SGROTHER (variable) -ida_idp.PR_STACK_UP (variable) -ida_idp.PR_TYPEINFO (variable) -ida_idp.PR_USE32 (variable) -ida_idp.PR_USE64 (variable) -ida_idp.PR_USE_ARG_TYPES (variable) -ida_idp.PR_USE_TBYTE (variable) -ida_idp.PR_WORD_INS (variable) -ida_idp.REG_SPOIL (variable) -ida_idp.SETPROC_IDB (variable) -ida_idp.SETPROC_LOADER (variable) -ida_idp.SETPROC_LOADER_NON_FATAL (variable) -ida_idp.SETPROC_USER (variable) -ida_idp.__ph (class) -ida_idp._idp_cvar_t (class) -ida_idp._notify_when_dispatcher_t (class) -ida_idp._notify_when_dispatcher_t._IDB_Hooks (class) -ida_idp._notify_when_dispatcher_t._IDB_Hooks.__init__ (method) -ida_idp._notify_when_dispatcher_t._IDB_Hooks.closebase (method) -ida_idp._notify_when_dispatcher_t._IDP_Hooks (class) -ida_idp._notify_when_dispatcher_t._IDP_Hooks.__init__ (method) -ida_idp._notify_when_dispatcher_t._IDP_Hooks.ev_newfile (method) -ida_idp._notify_when_dispatcher_t._IDP_Hooks.ev_oldfile (method) -ida_idp._notify_when_dispatcher_t.__init__ (method) -ida_idp._notify_when_dispatcher_t._callback_t (class) -ida_idp._notify_when_dispatcher_t._callback_t.__init__ (method) -ida_idp._notify_when_dispatcher_t._find (method) -ida_idp._notify_when_dispatcher_t.dispatch (method) -ida_idp._notify_when_dispatcher_t.notify_when (method) -ida_idp._processor_t (class) -ida_idp._processor_t.__init__ (method) -ida_idp._processor_t.add_cref (method) -ida_idp._processor_t.add_dref (method) -ida_idp._processor_t.adjust_argloc (method) -ida_idp._processor_t.adjust_libfunc_ea (method) -ida_idp._processor_t.adjust_refinfo (method) -ida_idp._processor_t.ana_insn (method) -ida_idp._processor_t.analyze_prolog (method) -ida_idp._processor_t.arch_changed (method) -ida_idp._processor_t.arg_addrs_ready (method) -ida_idp._processor_t.asm_installed (method) -ida_idp._processor_t.assemble (method) -ida_idp._processor_t.auto_queue_empty (method) -ida_idp._processor_t.calc_arglocs (method) -ida_idp._processor_t.calc_cdecl_purged_bytes (method) -ida_idp._processor_t.calc_next_eas (method) -ida_idp._processor_t.calc_purged_bytes (method) -ida_idp._processor_t.calc_retloc (method) -ida_idp._processor_t.calc_spdelta (method) -ida_idp._processor_t.calc_step_over (method) -ida_idp._processor_t.calc_switch_cases (method) -ida_idp._processor_t.calc_varglocs (method) -ida_idp._processor_t.calcrel (method) -ida_idp._processor_t.calcrel_in_bits (method) -ida_idp._processor_t.can_have_type (method) -ida_idp._processor_t.cbsize (method) -ida_idp._processor_t.clean_tbit (method) -ida_idp._processor_t.cmp_operands (method) -ida_idp._processor_t.coagulate (method) -ida_idp._processor_t.coagulate_dref (method) -ida_idp._processor_t.create_flat_group (method) -ida_idp._processor_t.create_func_frame (method) -ida_idp._processor_t.create_merge_handlers (method) -ida_idp._processor_t.create_switch_xrefs (method) -ida_idp._processor_t.creating_segm (method) -ida_idp._processor_t.cvt64_hashval (method) -ida_idp._processor_t.cvt64_supval (method) -ida_idp._processor_t.dbsize (method) -ida_idp._processor_t.decorate_name (method) -ida_idp._processor_t.del_cref (method) -ida_idp._processor_t.del_dref (method) -ida_idp._processor_t.delay_slot_insn (method) -ida_idp._processor_t.demangle_name (method) -ida_idp._processor_t.emu_insn (method) -ida_idp._processor_t.endbinary (method) -ida_idp._processor_t.equal_reglocs (method) -ida_idp._processor_t.extract_address (method) -ida_idp._processor_t.find_op_value (method) -ida_idp._processor_t.find_reg_value (method) -ida_idp._processor_t.func_bounds (method) -ida_idp._processor_t.gen_asm_or_lst (method) -ida_idp._processor_t.gen_map_file (method) -ida_idp._processor_t.gen_regvar_def (method) -ida_idp._processor_t.gen_src_file_lnnum (method) -ida_idp._processor_t.gen_stkvar_def (method) -ida_idp._processor_t.get_abi_info (method) -ida_idp._processor_t.get_autocmt (method) -ida_idp._processor_t.get_bg_color (method) -ida_idp._processor_t.get_canon_feature (method) -ida_idp._processor_t.get_canon_mnem (method) -ida_idp._processor_t.get_cc_regs (method) -ida_idp._processor_t.get_code16_mode (method) -ida_idp._processor_t.get_dbr_opnum (method) -ida_idp._processor_t.get_default_segm_bitness (method) -ida_idp._processor_t.get_frame_retsize (method) -ida_idp._processor_t.get_idd_opinfo (method) -ida_idp._processor_t.get_macro_insn_head (method) -ida_idp._processor_t.get_operand_string (method) -ida_idp._processor_t.get_proc_index (method) -ida_idp._processor_t.get_reg_accesses (method) -ida_idp._processor_t.get_reg_info (method) -ida_idp._processor_t.get_reg_name (method) -ida_idp._processor_t.get_simd_types (method) -ida_idp._processor_t.get_stkarg_area_info (method) -ida_idp._processor_t.get_stkvar_scale (method) -ida_idp._processor_t.get_stkvar_scale_factor (method) -ida_idp._processor_t.getreg (method) -ida_idp._processor_t.has_code16_bit (method) -ida_idp._processor_t.has_idp_opts (method) -ida_idp._processor_t.has_realcvt (method) -ida_idp._processor_t.has_segregs (method) -ida_idp._processor_t.init (method) -ida_idp._processor_t.insn_reads_tbit (method) -ida_idp._processor_t.is_align_insn (method) -ida_idp._processor_t.is_alloca_probe (method) -ida_idp._processor_t.is_basic_block_end (method) -ida_idp._processor_t.is_call_insn (method) -ida_idp._processor_t.is_cond_insn (method) -ida_idp._processor_t.is_control_flow_guard (method) -ida_idp._processor_t.is_far_jump (method) -ida_idp._processor_t.is_indirect_jump (method) -ida_idp._processor_t.is_jump_func (method) -ida_idp._processor_t.is_ret_insn (method) -ida_idp._processor_t.is_sane_insn (method) -ida_idp._processor_t.is_sp_based (method) -ida_idp._processor_t.is_switch (method) -ida_idp._processor_t.loader_elf_machine (method) -ida_idp._processor_t.lower_func_type (method) -ida_idp._processor_t.max_ptr_size (method) -ida_idp._processor_t.may_be_func (method) -ida_idp._processor_t.may_show_sreg (method) -ida_idp._processor_t.moving_segm (method) -ida_idp._processor_t.newasm (method) -ida_idp._processor_t.newbinary (method) -ida_idp._processor_t.newfile (method) -ida_idp._processor_t.newprc (method) -ida_idp._processor_t.next_exec_insn (method) -ida_idp._processor_t.notify (method) -ida_idp._processor_t.oldfile (method) -ida_idp._processor_t.out_assumes (method) -ida_idp._processor_t.out_data (method) -ida_idp._processor_t.out_footer (method) -ida_idp._processor_t.out_header (method) -ida_idp._processor_t.out_insn (method) -ida_idp._processor_t.out_label (method) -ida_idp._processor_t.out_mnem (method) -ida_idp._processor_t.out_operand (method) -ida_idp._processor_t.out_segend (method) -ida_idp._processor_t.out_segstart (method) -ida_idp._processor_t.out_special_item (method) -ida_idp._processor_t.privrange_changed (method) -ida_idp._processor_t.realcvt (method) -ida_idp._processor_t.rename (method) -ida_idp._processor_t.set_code16_mode (method) -ida_idp._processor_t.set_idp_options (method) -ida_idp._processor_t.set_proc_options (method) -ida_idp._processor_t.setup_til (method) -ida_idp._processor_t.sizeof_ldbl (method) -ida_idp._processor_t.stkup (method) -ida_idp._processor_t.str2reg (method) -ida_idp._processor_t.supports_calcrel (method) -ida_idp._processor_t.supports_macros (method) -ida_idp._processor_t.term (method) -ida_idp._processor_t.ti (method) -ida_idp._processor_t.treat_hindering_item (method) -ida_idp._processor_t.undefine (method) -ida_idp._processor_t.update_call_stack (method) -ida_idp._processor_t.use32 (method) -ida_idp._processor_t.use64 (method) -ida_idp._processor_t.use_arg_types (method) -ida_idp._processor_t.use_mappings (method) -ida_idp._processor_t.use_regarg_type (method) -ida_idp._processor_t.use_stkarg_type (method) -ida_idp._processor_t.use_tbyte (method) -ida_idp._processor_t.validate_flirt_func (method) -ida_idp._processor_t.verify_noreturn (method) -ida_idp._processor_t.verify_sp (method) -ida_idp._processor_t_Trampoline_IDB_Hooks (class) -ida_idp._processor_t_Trampoline_IDB_Hooks.__dummy (method) -ida_idp._processor_t_Trampoline_IDB_Hooks.__init__ (method) -ida_idp._processor_t_Trampoline_IDB_Hooks.__make_parent_caller (method) -ida_idp._processor_t_Trampoline_IDB_Hooks.__make_parent_caller.call_parent (function) -ida_idp._processor_t_add_cref (function) -ida_idp._processor_t_add_dref (function) -ida_idp._processor_t_adjust_argloc (function) -ida_idp._processor_t_adjust_libfunc_ea (function) -ida_idp._processor_t_adjust_refinfo (function) -ida_idp._processor_t_ana_insn (function) -ida_idp._processor_t_analyze_prolog (function) -ida_idp._processor_t_arch_changed (function) -ida_idp._processor_t_arg_addrs_ready (function) -ida_idp._processor_t_asm_installed (function) -ida_idp._processor_t_assemble (function) -ida_idp._processor_t_auto_queue_empty (function) -ida_idp._processor_t_calc_arglocs (function) -ida_idp._processor_t_calc_cdecl_purged_bytes (function) -ida_idp._processor_t_calc_next_eas (function) -ida_idp._processor_t_calc_purged_bytes (function) -ida_idp._processor_t_calc_retloc (function) -ida_idp._processor_t_calc_spdelta (function) -ida_idp._processor_t_calc_step_over (function) -ida_idp._processor_t_calc_switch_cases (function) -ida_idp._processor_t_calc_varglocs (function) -ida_idp._processor_t_calcrel (function) -ida_idp._processor_t_can_have_type (function) -ida_idp._processor_t_clean_tbit (function) -ida_idp._processor_t_cmp_operands (function) -ida_idp._processor_t_coagulate (function) -ida_idp._processor_t_coagulate_dref (function) -ida_idp._processor_t_create_flat_group (function) -ida_idp._processor_t_create_func_frame (function) -ida_idp._processor_t_create_merge_handlers (function) -ida_idp._processor_t_create_switch_xrefs (function) -ida_idp._processor_t_creating_segm (function) -ida_idp._processor_t_decorate_name (function) -ida_idp._processor_t_del_cref (function) -ida_idp._processor_t_del_dref (function) -ida_idp._processor_t_demangle_name (function) -ida_idp._processor_t_emu_insn (function) -ida_idp._processor_t_endbinary (function) -ida_idp._processor_t_equal_reglocs (function) -ida_idp._processor_t_extract_address (function) -ida_idp._processor_t_find_op_value (function) -ida_idp._processor_t_find_reg_value (function) -ida_idp._processor_t_func_bounds (function) -ida_idp._processor_t_gen_asm_or_lst (function) -ida_idp._processor_t_gen_map_file (function) -ida_idp._processor_t_gen_regvar_def (function) -ida_idp._processor_t_gen_src_file_lnnum (function) -ida_idp._processor_t_gen_stkvar_def (function) -ida_idp._processor_t_get_abi_info (function) -ida_idp._processor_t_get_autocmt (function) -ida_idp._processor_t_get_bg_color (function) -ida_idp._processor_t_get_cc_regs (function) -ida_idp._processor_t_get_code16_mode (function) -ida_idp._processor_t_get_dbr_opnum (function) -ida_idp._processor_t_get_frame_retsize (function) -ida_idp._processor_t_get_idd_opinfo (function) -ida_idp._processor_t_get_macro_insn_head (function) -ida_idp._processor_t_get_operand_string (function) -ida_idp._processor_t_get_reg_accesses (function) -ida_idp._processor_t_get_reg_info (function) -ida_idp._processor_t_get_reg_name (function) -ida_idp._processor_t_get_simd_types (function) -ida_idp._processor_t_get_stkarg_area_info (function) -ida_idp._processor_t_get_stkvar_scale_factor (function) -ida_idp._processor_t_getreg (function) -ida_idp._processor_t_init (function) -ida_idp._processor_t_insn_reads_tbit (function) -ida_idp._processor_t_is_align_insn (function) -ida_idp._processor_t_is_alloca_probe (function) -ida_idp._processor_t_is_basic_block_end (function) -ida_idp._processor_t_is_call_insn (function) -ida_idp._processor_t_is_cond_insn (function) -ida_idp._processor_t_is_control_flow_guard (function) -ida_idp._processor_t_is_far_jump (function) -ida_idp._processor_t_is_indirect_jump (function) -ida_idp._processor_t_is_jump_func (function) -ida_idp._processor_t_is_ret_insn (function) -ida_idp._processor_t_is_sane_insn (function) -ida_idp._processor_t_is_sp_based (function) -ida_idp._processor_t_is_switch (function) -ida_idp._processor_t_loader_elf_machine (function) -ida_idp._processor_t_lower_func_type (function) -ida_idp._processor_t_max_ptr_size (function) -ida_idp._processor_t_may_be_func (function) -ida_idp._processor_t_may_show_sreg (function) -ida_idp._processor_t_moving_segm (function) -ida_idp._processor_t_newasm (function) -ida_idp._processor_t_newbinary (function) -ida_idp._processor_t_newfile (function) -ida_idp._processor_t_newprc (function) -ida_idp._processor_t_next_exec_insn (function) -ida_idp._processor_t_notify (function) -ida_idp._processor_t_oldfile (function) -ida_idp._processor_t_out_assumes (function) -ida_idp._processor_t_out_data (function) -ida_idp._processor_t_out_footer (function) -ida_idp._processor_t_out_header (function) -ida_idp._processor_t_out_insn (function) -ida_idp._processor_t_out_label (function) -ida_idp._processor_t_out_mnem (function) -ida_idp._processor_t_out_operand (function) -ida_idp._processor_t_out_segend (function) -ida_idp._processor_t_out_segstart (function) -ida_idp._processor_t_out_special_item (function) -ida_idp._processor_t_realcvt (function) -ida_idp._processor_t_rename (function) -ida_idp._processor_t_set_code16_mode (function) -ida_idp._processor_t_set_idp_options (function) -ida_idp._processor_t_set_proc_options (function) -ida_idp._processor_t_setup_til (function) -ida_idp._processor_t_str2reg (function) -ida_idp._processor_t_term (function) -ida_idp._processor_t_treat_hindering_item (function) -ida_idp._processor_t_undefine (function) -ida_idp._processor_t_update_call_stack (function) -ida_idp._processor_t_use_arg_types (function) -ida_idp._processor_t_use_regarg_type (function) -ida_idp._processor_t_use_stkarg_type (function) -ida_idp._processor_t_validate_flirt_func (function) -ida_idp._processor_t_verify_noreturn (function) -ida_idp._processor_t_verify_sp (function) -ida_idp.asm_t (class) -ida_idp.asm_t.__init__ (method) -ida_idp.asm_t.a_align (variable) -ida_idp.asm_t.a_ascii (variable) -ida_idp.asm_t.a_band (variable) -ida_idp.asm_t.a_bnot (variable) -ida_idp.asm_t.a_bor (variable) -ida_idp.asm_t.a_bss (variable) -ida_idp.asm_t.a_byte (variable) -ida_idp.asm_t.a_comdef (variable) -ida_idp.asm_t.a_curip (variable) -ida_idp.asm_t.a_double (variable) -ida_idp.asm_t.a_dups (variable) -ida_idp.asm_t.a_dword (variable) -ida_idp.asm_t.a_equ (variable) -ida_idp.asm_t.a_extrn (variable) -ida_idp.asm_t.a_float (variable) -ida_idp.asm_t.a_include_fmt (variable) -ida_idp.asm_t.a_mod (variable) -ida_idp.asm_t.a_oword (variable) -ida_idp.asm_t.a_packreal (variable) -ida_idp.asm_t.a_public (variable) -ida_idp.asm_t.a_qword (variable) -ida_idp.asm_t.a_rva (variable) -ida_idp.asm_t.a_seg (variable) -ida_idp.asm_t.a_shl (variable) -ida_idp.asm_t.a_shr (variable) -ida_idp.asm_t.a_sizeof_fmt (variable) -ida_idp.asm_t.a_tbyte (variable) -ida_idp.asm_t.a_vstruc_fmt (variable) -ida_idp.asm_t.a_weak (variable) -ida_idp.asm_t.a_word (variable) -ida_idp.asm_t.a_xor (variable) -ida_idp.asm_t.a_yword (variable) -ida_idp.asm_t.a_zword (variable) -ida_idp.asm_t.accsep (variable) -ida_idp.asm_t.ascsep (variable) -ida_idp.asm_t.cmnt (variable) -ida_idp.asm_t.cmnt2 (variable) -ida_idp.asm_t.end (variable) -ida_idp.asm_t.esccodes (variable) -ida_idp.asm_t.flag (variable) -ida_idp.asm_t.flag2 (variable) -ida_idp.asm_t.header (variable) -ida_idp.asm_t.help (variable) -ida_idp.asm_t.high16 (variable) -ida_idp.asm_t.high8 (variable) -ida_idp.asm_t.lbrace (variable) -ida_idp.asm_t.low16 (variable) -ida_idp.asm_t.low8 (variable) -ida_idp.asm_t.name (variable) -ida_idp.asm_t.origin (variable) -ida_idp.asm_t.rbrace (variable) -ida_idp.asm_t.uflag (variable) -ida_idp.assemble (function) -ida_idp.cfg_get_cc_header_path (function) -ida_idp.cfg_get_cc_parm (function) -ida_idp.cfg_get_cc_predefined_macros (function) -ida_idp.delay_slot_insn (function) -ida_idp.gen_idb_event (function) -ida_idp.get_ash (function) -ida_idp.get_config_value (function) -ida_idp.get_idb_notifier_addr (function) -ida_idp.get_idb_notifier_ud_addr (function) -ida_idp.get_idp_name (function) -ida_idp.get_idp_notifier_addr (function) -ida_idp.get_idp_notifier_ud_addr (function) -ida_idp.get_ph (function) -ida_idp.get_reg_info (function) -ida_idp.get_reg_name (function) -ida_idp.has_cf_chg (function) -ida_idp.has_cf_use (function) -ida_idp.has_insn_feature (function) -ida_idp.is_align_insn (function) -ida_idp.is_basic_block_end (function) -ida_idp.is_call_insn (function) -ida_idp.is_indirect_jump_insn (function) -ida_idp.is_ret_insn (function) -ida_idp.num_range_t (class) -ida_idp.num_range_t.__init__ (method) -ida_idp.params_t (class) -ida_idp.params_t.__init__ (method) -ida_idp.parse_reg_name (function) -ida_idp.ph_calcrel (function) -ida_idp.ph_find_op_value (function) -ida_idp.ph_find_reg_value (function) -ida_idp.ph_get_cnbits (function) -ida_idp.ph_get_dnbits (function) -ida_idp.ph_get_flag (function) -ida_idp.ph_get_icode_return (function) -ida_idp.ph_get_id (function) -ida_idp.ph_get_instruc (function) -ida_idp.ph_get_instruc_end (function) -ida_idp.ph_get_instruc_start (function) -ida_idp.ph_get_operand_info (function) -ida_idp.ph_get_reg_accesses (function) -ida_idp.ph_get_reg_code_sreg (function) -ida_idp.ph_get_reg_data_sreg (function) -ida_idp.ph_get_reg_first_sreg (function) -ida_idp.ph_get_reg_last_sreg (function) -ida_idp.ph_get_regnames (function) -ida_idp.ph_get_segreg_size (function) -ida_idp.ph_get_tbyte_size (function) -ida_idp.ph_get_version (function) -ida_idp.process_config_directive (function) -ida_idp.processor_t (class) -ida_idp.processor_t.__init__ (method) -ida_idp.processor_t._get_idb_notifier_addr (method) -ida_idp.processor_t._get_idb_notifier_ud_addr (method) -ida_idp.processor_t._get_idp_notifier_addr (method) -ida_idp.processor_t._get_idp_notifier_ud_addr (method) -ida_idp.processor_t._get_notify (method) -ida_idp.processor_t._make_forced_value_wrapper (method) -ida_idp.processor_t._make_forced_value_wrapper.f (function) -ida_idp.processor_t._make_int_returning_wrapper (method) -ida_idp.processor_t._make_int_returning_wrapper.f (function) -ida_idp.processor_t.auto_empty (method) -ida_idp.processor_t.auto_empty_finally (method) -ida_idp.processor_t.closebase (method) -ida_idp.processor_t.compiler_changed (method) -ida_idp.processor_t.deleting_func (method) -ida_idp.processor_t.determined_main (method) -ida_idp.processor_t.ev_ana_insn (method) -ida_idp.processor_t.ev_assemble (method) -ida_idp.processor_t.ev_auto_queue_empty (method) -ida_idp.processor_t.ev_calc_step_over (method) -ida_idp.processor_t.ev_can_have_type (method) -ida_idp.processor_t.ev_cmp_operands (method) -ida_idp.processor_t.ev_coagulate (method) -ida_idp.processor_t.ev_coagulate_dref (method) -ida_idp.processor_t.ev_create_func_frame (method) -ida_idp.processor_t.ev_create_switch_xrefs (method) -ida_idp.processor_t.ev_creating_segm (method) -ida_idp.processor_t.ev_emu_insn (method) -ida_idp.processor_t.ev_endbinary (method) -ida_idp.processor_t.ev_func_bounds (method) -ida_idp.processor_t.ev_gen_map_file (method) -ida_idp.processor_t.ev_gen_regvar_def (method) -ida_idp.processor_t.ev_gen_src_file_lnnum (method) -ida_idp.processor_t.ev_get_autocmt (method) -ida_idp.processor_t.ev_get_frame_retsize (method) -ida_idp.processor_t.ev_get_operand_string (method) -ida_idp.processor_t.ev_is_align_insn (method) -ida_idp.processor_t.ev_is_alloca_probe (method) -ida_idp.processor_t.ev_is_basic_block_end (method) -ida_idp.processor_t.ev_is_call_insn (method) -ida_idp.processor_t.ev_is_far_jump (method) -ida_idp.processor_t.ev_is_indirect_jump (method) -ida_idp.processor_t.ev_is_insn_table_jump (method) -ida_idp.processor_t.ev_is_ret_insn (method) -ida_idp.processor_t.ev_is_sane_insn (method) -ida_idp.processor_t.ev_is_sp_based (method) -ida_idp.processor_t.ev_is_switch (method) -ida_idp.processor_t.ev_may_be_func (method) -ida_idp.processor_t.ev_may_show_sreg (method) -ida_idp.processor_t.ev_moving_segm (method) -ida_idp.processor_t.ev_newbinary (method) -ida_idp.processor_t.ev_newfile (method) -ida_idp.processor_t.ev_newprc (method) -ida_idp.processor_t.ev_oldfile (method) -ida_idp.processor_t.ev_out_assumes (method) -ida_idp.processor_t.ev_out_data (method) -ida_idp.processor_t.ev_out_footer (method) -ida_idp.processor_t.ev_out_header (method) -ida_idp.processor_t.ev_out_insn (method) -ida_idp.processor_t.ev_out_label (method) -ida_idp.processor_t.ev_out_mnem (method) -ida_idp.processor_t.ev_out_operand (method) -ida_idp.processor_t.ev_out_segend (method) -ida_idp.processor_t.ev_out_segstart (method) -ida_idp.processor_t.ev_out_special_item (method) -ida_idp.processor_t.ev_rename (method) -ida_idp.processor_t.ev_set_idp_options (method) -ida_idp.processor_t.ev_set_proc_options (method) -ida_idp.processor_t.ev_str2reg (method) -ida_idp.processor_t.ev_treat_hindering_item (method) -ida_idp.processor_t.ev_undefine (method) -ida_idp.processor_t.ev_validate_flirt_func (method) -ida_idp.processor_t.ev_verify_noreturn (method) -ida_idp.processor_t.ev_verify_sp (method) -ida_idp.processor_t.func_added (method) -ida_idp.processor_t.get_auxpref (method) -ida_idp.processor_t.get_idpdesc (method) -ida_idp.processor_t.get_uFlag (method) -ida_idp.processor_t.idasgn_loaded (method) -ida_idp.processor_t.kernel_config_loaded (method) -ida_idp.processor_t.make_code (method) -ida_idp.processor_t.make_data (method) -ida_idp.processor_t.renamed (method) -ida_idp.processor_t.savebase (method) -ida_idp.processor_t.segm_moved (method) -ida_idp.processor_t.set_func_end (method) -ida_idp.processor_t.set_func_start (method) -ida_idp.processor_t.sgr_changed (method) -ida_idp.reg_access_t (class) -ida_idp.reg_access_t.__eq__ (method) -ida_idp.reg_access_t.__init__ (method) -ida_idp.reg_access_t.__ne__ (method) -ida_idp.reg_access_t.have_common_bits (method) -ida_idp.reg_access_t.opnum (variable) -ida_idp.reg_access_t.range (variable) -ida_idp.reg_access_t.regnum (variable) -ida_idp.reg_access_vec_t (class) -ida_idp.reg_access_vec_t.__eq__ (method) -ida_idp.reg_access_vec_t.__getitem__ (method) -ida_idp.reg_access_vec_t.__init__ (method) -ida_idp.reg_access_vec_t.__len__ (method) -ida_idp.reg_access_vec_t.__ne__ (method) -ida_idp.reg_access_vec_t.__setitem__ (method) -ida_idp.reg_access_vec_t._del (method) -ida_idp.reg_access_vec_t.add_unique (method) -ida_idp.reg_access_vec_t.at (method) -ida_idp.reg_access_vec_t.begin (method) -ida_idp.reg_access_vec_t.capacity (method) -ida_idp.reg_access_vec_t.clear (method) -ida_idp.reg_access_vec_t.empty (method) -ida_idp.reg_access_vec_t.end (method) -ida_idp.reg_access_vec_t.erase (method) -ida_idp.reg_access_vec_t.extract (method) -ida_idp.reg_access_vec_t.find (method) -ida_idp.reg_access_vec_t.grow (method) -ida_idp.reg_access_vec_t.has (method) -ida_idp.reg_access_vec_t.inject (method) -ida_idp.reg_access_vec_t.insert (method) -ida_idp.reg_access_vec_t.pop_back (method) -ida_idp.reg_access_vec_t.push_back (method) -ida_idp.reg_access_vec_t.qclear (method) -ida_idp.reg_access_vec_t.reserve (method) -ida_idp.reg_access_vec_t.resize (method) -ida_idp.reg_access_vec_t.size (method) -ida_idp.reg_access_vec_t.swap (method) -ida_idp.reg_access_vec_t.truncate (method) -ida_idp.reg_accesses_t (class) -ida_idp.reg_accesses_t.__init__ (method) -ida_idp.reg_info_t (class) -ida_idp.reg_info_t.__eq__ (method) -ida_idp.reg_info_t.__ge__ (method) -ida_idp.reg_info_t.__gt__ (method) -ida_idp.reg_info_t.__init__ (method) -ida_idp.reg_info_t.__le__ (method) -ida_idp.reg_info_t.__lt__ (method) -ida_idp.reg_info_t.__ne__ (method) -ida_idp.reg_info_t.compare (method) -ida_idp.reg_info_t.reg (variable) -ida_idp.reg_info_t.size (variable) -ida_idp.register_cfgopts (function) -ida_idp.set_processor_type (function) -ida_idp.set_target_assembler (function) -ida_idp.sizeof_ldbl (function) -ida_idp.str2reg (function) -ida_ieee (module) -ida_ieee.E_SPECIAL_EXP (variable) -ida_ieee.FPV_BADARG (variable) -ida_ieee.FPV_NAN (variable) -ida_ieee.FPV_NINF (variable) -ida_ieee.FPV_NORM (variable) -ida_ieee.FPV_PINF (variable) -ida_ieee.IEEE_EXONE (variable) -ida_ieee.REAL_ERROR_FPOVER (variable) -ida_ieee.REAL_ERROR_INTOVER (variable) -ida_ieee.REAL_ERROR_OK (variable) -ida_ieee.ecleaz (function) -ida_ieee.fpvalue_shorts_array_t (class) -ida_ieee.fpvalue_shorts_array_t.__getitem__ (method) -ida_ieee.fpvalue_shorts_array_t.__init__ (method) -ida_ieee.fpvalue_shorts_array_t.__len__ (method) -ida_ieee.fpvalue_shorts_array_t.__setitem__ (method) -ida_ieee.fpvalue_shorts_array_t._get_bytes (method) -ida_ieee.fpvalue_shorts_array_t._set_bytes (method) -ida_ieee.fpvalue_t (class) -ida_ieee.fpvalue_t.__add__ (method) -ida_ieee.fpvalue_t.__eq__ (method) -ida_ieee.fpvalue_t.__ge__ (method) -ida_ieee.fpvalue_t.__getitem__ (method) -ida_ieee.fpvalue_t.__gt__ (method) -ida_ieee.fpvalue_t.__init__ (method) -ida_ieee.fpvalue_t.__iter__ (method) -ida_ieee.fpvalue_t.__le__ (method) -ida_ieee.fpvalue_t.__lt__ (method) -ida_ieee.fpvalue_t.__mul__ (method) -ida_ieee.fpvalue_t.__ne__ (method) -ida_ieee.fpvalue_t.__setitem__ (method) -ida_ieee.fpvalue_t.__str__ (method) -ida_ieee.fpvalue_t.__sub__ (method) -ida_ieee.fpvalue_t.__truediv__ (method) -ida_ieee.fpvalue_t._get_10bytes (method) -ida_ieee.fpvalue_t._get_bytes (method) -ida_ieee.fpvalue_t._get_float (method) -ida_ieee.fpvalue_t._get_shorts (method) -ida_ieee.fpvalue_t._set_10bytes (method) -ida_ieee.fpvalue_t._set_bytes (method) -ida_ieee.fpvalue_t._set_float (method) -ida_ieee.fpvalue_t.assign (method) -ida_ieee.fpvalue_t.clear (method) -ida_ieee.fpvalue_t.compare (method) -ida_ieee.fpvalue_t.eabs (method) -ida_ieee.fpvalue_t.fadd (method) -ida_ieee.fpvalue_t.fdiv (method) -ida_ieee.fpvalue_t.fmul (method) -ida_ieee.fpvalue_t.from_10bytes (method) -ida_ieee.fpvalue_t.from_12bytes (method) -ida_ieee.fpvalue_t.from_int64 (method) -ida_ieee.fpvalue_t.from_str (method) -ida_ieee.fpvalue_t.from_sval (method) -ida_ieee.fpvalue_t.from_uint64 (method) -ida_ieee.fpvalue_t.fsub (method) -ida_ieee.fpvalue_t.get_kind (method) -ida_ieee.fpvalue_t.is_negative (method) -ida_ieee.fpvalue_t.mul_pow2 (method) -ida_ieee.fpvalue_t.negate (method) -ida_ieee.fpvalue_t.to_10bytes (method) -ida_ieee.fpvalue_t.to_12bytes (method) -ida_ieee.fpvalue_t.to_int64 (method) -ida_ieee.fpvalue_t.to_str (method) -ida_ieee.fpvalue_t.to_sval (method) -ida_ieee.fpvalue_t.to_uint64 (method) -ida_kernwin (module) -ida_kernwin.AA_CHECKABLE (variable) -ida_kernwin.AA_CHECKED (variable) -ida_kernwin.AA_ICON (variable) -ida_kernwin.AA_LABEL (variable) -ida_kernwin.AA_NONE (variable) -ida_kernwin.AA_SHORTCUT (variable) -ida_kernwin.AA_STATE (variable) -ida_kernwin.AA_TOOLTIP (variable) -ida_kernwin.AA_VISIBILITY (variable) -ida_kernwin.ACF_HAS_FIELD_DIRTREE_SELECTION (variable) -ida_kernwin.ACF_HAS_SELECTION (variable) -ida_kernwin.ACF_HAS_SOURCE (variable) -ida_kernwin.ACF_HAS_TYPE_REF (variable) -ida_kernwin.ACF_XTRN_EA (variable) -ida_kernwin.ADF_CHECKABLE (variable) -ida_kernwin.ADF_CHECKED (variable) -ida_kernwin.ADF_GLOBAL (variable) -ida_kernwin.ADF_NO_HIGHLIGHT (variable) -ida_kernwin.ADF_NO_UNDO (variable) -ida_kernwin.ADF_OT_MASK (variable) -ida_kernwin.ADF_OT_PLUGIN (variable) -ida_kernwin.ADF_OT_PLUGMOD (variable) -ida_kernwin.ADF_OT_PROCMOD (variable) -ida_kernwin.ADF_OWN_HANDLER (variable) -ida_kernwin.AHF_VERSION (variable) -ida_kernwin.AHF_VERSION_MASK (variable) -ida_kernwin.ASKBTN_BTN1 (variable) -ida_kernwin.ASKBTN_BTN2 (variable) -ida_kernwin.ASKBTN_BTN3 (variable) -ida_kernwin.ASKBTN_CANCEL (variable) -ida_kernwin.ASKBTN_NO (variable) -ida_kernwin.ASKBTN_YES (variable) -ida_kernwin.AST_DISABLE (variable) -ida_kernwin.AST_DISABLE_ALWAYS (variable) -ida_kernwin.AST_DISABLE_FOR_IDB (variable) -ida_kernwin.AST_DISABLE_FOR_WIDGET (variable) -ida_kernwin.AST_ENABLE (variable) -ida_kernwin.AST_ENABLE_ALWAYS (variable) -ida_kernwin.AST_ENABLE_FOR_IDB (variable) -ida_kernwin.AST_ENABLE_FOR_WIDGET (variable) -ida_kernwin.BWN_ADDRWATCH (variable) -ida_kernwin.BWN_BOOKMARKS (variable) -ida_kernwin.BWN_BPTS (variable) -ida_kernwin.BWN_CALLS (variable) -ida_kernwin.BWN_CALLS_CALLEES (variable) -ida_kernwin.BWN_CALLS_CALLERS (variable) -ida_kernwin.BWN_CALL_STACK (variable) -ida_kernwin.BWN_CHOOSER (variable) -ida_kernwin.BWN_CLI (variable) -ida_kernwin.BWN_CMDPALCSR (variable) -ida_kernwin.BWN_CMDPALWIN (variable) -ida_kernwin.BWN_CPUREGS (variable) -ida_kernwin.BWN_CUSTVIEW (variable) -ida_kernwin.BWN_CV_LINE_INFOS (variable) -ida_kernwin.BWN_DISASM (variable) -ida_kernwin.BWN_DISASMS (variable) -ida_kernwin.BWN_DISASM_ARROWS (variable) -ida_kernwin.BWN_DUMP (variable) -ida_kernwin.BWN_DUMPS (variable) -ida_kernwin.BWN_ENUMS (variable) -ida_kernwin.BWN_EXPORTS (variable) -ida_kernwin.BWN_FRAME (variable) -ida_kernwin.BWN_FUNCS (variable) -ida_kernwin.BWN_IMPORTS (variable) -ida_kernwin.BWN_LOCALS (variable) -ida_kernwin.BWN_LOCTYPS (variable) -ida_kernwin.BWN_MDVIEWCSR (variable) -ida_kernwin.BWN_MODULES (variable) -ida_kernwin.BWN_NAMES (variable) -ida_kernwin.BWN_NAVBAND (variable) -ida_kernwin.BWN_NOTEPAD (variable) -ida_kernwin.BWN_OUTPUT (variable) -ida_kernwin.BWN_PROBS (variable) -ida_kernwin.BWN_PSEUDOCODE (variable) -ida_kernwin.BWN_SCRIPTS_CSR (variable) -ida_kernwin.BWN_SEARCH (variable) -ida_kernwin.BWN_SEARCHS (variable) -ida_kernwin.BWN_SEGREGS (variable) -ida_kernwin.BWN_SEGS (variable) -ida_kernwin.BWN_SELS (variable) -ida_kernwin.BWN_SHORTCUTCSR (variable) -ida_kernwin.BWN_SHORTCUTWIN (variable) -ida_kernwin.BWN_SIGNS (variable) -ida_kernwin.BWN_SNIPPETS (variable) -ida_kernwin.BWN_SNIPPETS_CSR (variable) -ida_kernwin.BWN_SO_OFFSETS (variable) -ida_kernwin.BWN_SO_STRUCTS (variable) -ida_kernwin.BWN_SRCPTHMAP_CSR (variable) -ida_kernwin.BWN_SRCPTHUND_CSR (variable) -ida_kernwin.BWN_STACK (variable) -ida_kernwin.BWN_STKVIEW (variable) -ida_kernwin.BWN_STRINGS (variable) -ida_kernwin.BWN_STRUCTS (variable) -ida_kernwin.BWN_THREADS (variable) -ida_kernwin.BWN_TILIST (variable) -ida_kernwin.BWN_TILS (variable) -ida_kernwin.BWN_TRACE (variable) -ida_kernwin.BWN_UNDOHIST (variable) -ida_kernwin.BWN_UNKNOWN (variable) -ida_kernwin.BWN_WATCH (variable) -ida_kernwin.BWN_XREFS (variable) -ida_kernwin.CDVF_LINEICONS (variable) -ida_kernwin.CDVF_NOLINES (variable) -ida_kernwin.CDVF_STATUSBAR (variable) -ida_kernwin.CDVH_LINES_ALIGNMENT (variable) -ida_kernwin.CDVH_LINES_CLICK (variable) -ida_kernwin.CDVH_LINES_DBLCLICK (variable) -ida_kernwin.CDVH_LINES_DRAWICON (variable) -ida_kernwin.CDVH_LINES_ICONMARGIN (variable) -ida_kernwin.CDVH_LINES_LINENUM (variable) -ida_kernwin.CDVH_LINES_POPUP (variable) -ida_kernwin.CDVH_LINES_RADIX (variable) -ida_kernwin.CDVH_SRCVIEW (variable) -ida_kernwin.CDVH_USERDATA (variable) -ida_kernwin.CH2_LAZY_LOADED (variable) -ida_kernwin.CHCOL_DEC (variable) -ida_kernwin.CHCOL_DEFHIDDEN (variable) -ida_kernwin.CHCOL_DRAGHINT (variable) -ida_kernwin.CHCOL_EA (variable) -ida_kernwin.CHCOL_FNAME (variable) -ida_kernwin.CHCOL_FORMAT (variable) -ida_kernwin.CHCOL_HEX (variable) -ida_kernwin.CHCOL_INODENAME (variable) -ida_kernwin.CHCOL_PATH (variable) -ida_kernwin.CHCOL_PLAIN (variable) -ida_kernwin.CHITEM_BOLD (variable) -ida_kernwin.CHITEM_GRAY (variable) -ida_kernwin.CHITEM_ITALIC (variable) -ida_kernwin.CHITEM_STRIKE (variable) -ida_kernwin.CHITEM_UNDER (variable) -ida_kernwin.CHOOSER_NOMAINMENU (variable) -ida_kernwin.CHOOSER_NOSTATUSBAR (variable) -ida_kernwin.CH_ATTRS (variable) -ida_kernwin.CH_BUILTIN_MASK (variable) -ida_kernwin.CH_CAN_DEL (variable) -ida_kernwin.CH_CAN_EDIT (variable) -ida_kernwin.CH_CAN_INS (variable) -ida_kernwin.CH_CAN_REFRESH (variable) -ida_kernwin.CH_FORCE_DEFAULT (variable) -ida_kernwin.CH_HAS_DIFF (variable) -ida_kernwin.CH_HAS_DIRTREE (variable) -ida_kernwin.CH_KEEP (variable) -ida_kernwin.CH_MODAL (variable) -ida_kernwin.CH_MULTI (variable) -ida_kernwin.CH_MULTI_EDIT (variable) -ida_kernwin.CH_NOBTNS (variable) -ida_kernwin.CH_NON_PERSISTED_TREE (variable) -ida_kernwin.CH_NO_FILTER (variable) -ida_kernwin.CH_NO_SORT (variable) -ida_kernwin.CH_NO_STATUS_BAR (variable) -ida_kernwin.CH_QFLT (variable) -ida_kernwin.CH_QFTYP_DEFAULT (variable) -ida_kernwin.CH_QFTYP_FUZZY (variable) -ida_kernwin.CH_QFTYP_NORMAL (variable) -ida_kernwin.CH_QFTYP_REGEX (variable) -ida_kernwin.CH_QFTYP_WHOLE_WORDS (variable) -ida_kernwin.CH_RENAME_IS_EDIT (variable) -ida_kernwin.CH_RESTORE (variable) -ida_kernwin.CH_TM_FOLDERS_ONLY (variable) -ida_kernwin.CH_TM_FULL_TREE (variable) -ida_kernwin.CH_TM_NO_TREE (variable) -ida_kernwin.CK_EXTRA1 (variable) -ida_kernwin.CK_EXTRA10 (variable) -ida_kernwin.CK_EXTRA11 (variable) -ida_kernwin.CK_EXTRA12 (variable) -ida_kernwin.CK_EXTRA13 (variable) -ida_kernwin.CK_EXTRA14 (variable) -ida_kernwin.CK_EXTRA15 (variable) -ida_kernwin.CK_EXTRA16 (variable) -ida_kernwin.CK_EXTRA2 (variable) -ida_kernwin.CK_EXTRA3 (variable) -ida_kernwin.CK_EXTRA4 (variable) -ida_kernwin.CK_EXTRA5 (variable) -ida_kernwin.CK_EXTRA6 (variable) -ida_kernwin.CK_EXTRA7 (variable) -ida_kernwin.CK_EXTRA8 (variable) -ida_kernwin.CK_EXTRA9 (variable) -ida_kernwin.CK_TRACE (variable) -ida_kernwin.CK_TRACE_OVL (variable) -ida_kernwin.CLNL_FINDCMT (variable) -ida_kernwin.CLNL_LTRIM (variable) -ida_kernwin.CLNL_RTRIM (variable) -ida_kernwin.CREATETB_ADV (variable) -ida_kernwin.CVH_CLICK (variable) -ida_kernwin.CVH_CLOSE (variable) -ida_kernwin.CVH_CURPOS (variable) -ida_kernwin.CVH_DBLCLICK (variable) -ida_kernwin.CVH_HELP (variable) -ida_kernwin.CVH_KEYDOWN (variable) -ida_kernwin.CVH_MOUSEMOVE (variable) -ida_kernwin.CVH_POPUP (variable) -ida_kernwin.CVH_QT_AWARE (variable) -ida_kernwin.CVLF_USE_MOUSE (variable) -ida_kernwin.CVNF_ACT (variable) -ida_kernwin.CVNF_JUMP (variable) -ida_kernwin.CVNF_LAZY (variable) -ida_kernwin.Choose (class) -ida_kernwin.Choose.ALREADY_EXISTS (variable) -ida_kernwin.Choose.Activate (method) -ida_kernwin.Choose.AddCommand (method) -ida_kernwin.Choose.CH_CAN_DEL (variable) -ida_kernwin.Choose.CH_CAN_EDIT (variable) -ida_kernwin.Choose.CH_CAN_INS (variable) -ida_kernwin.Choose.CH_CAN_REFRESH (variable) -ida_kernwin.Choose.CH_FORCE_DEFAULT (variable) -ida_kernwin.Choose.CH_MODAL (variable) -ida_kernwin.Choose.CH_MULTI (variable) -ida_kernwin.Choose.CH_NOIDB (variable) -ida_kernwin.Choose.CH_NO_STATUS_BAR (variable) -ida_kernwin.Choose.CH_QFLT (variable) -ida_kernwin.Choose.CH_RENAME_IS_EDIT (variable) -ida_kernwin.Choose.CH_RESTORE (variable) -ida_kernwin.Choose.Close (method) -ida_kernwin.Choose.EMPTY_CHOOSER (variable) -ida_kernwin.Choose.Embedded (method) -ida_kernwin.Choose.GetEmbSelection (method) -ida_kernwin.Choose.GetWidget (method) -ida_kernwin.Choose.NO_ATTR (variable) -ida_kernwin.Choose.NO_SELECTION (variable) -ida_kernwin.Choose.OnClose (method) -ida_kernwin.Choose.OnDeleteLine (method) -ida_kernwin.Choose.OnEditLine (method) -ida_kernwin.Choose.OnGetDirTree (method) -ida_kernwin.Choose.OnGetEA (method) -ida_kernwin.Choose.OnGetIcon (method) -ida_kernwin.Choose.OnGetLine (method) -ida_kernwin.Choose.OnGetLineAttr (method) -ida_kernwin.Choose.OnGetSize (method) -ida_kernwin.Choose.OnIndexToDiffpos (method) -ida_kernwin.Choose.OnIndexToInode (method) -ida_kernwin.Choose.OnInit (method) -ida_kernwin.Choose.OnInsertLine (method) -ida_kernwin.Choose.OnLazyLoadDir (method) -ida_kernwin.Choose.OnPopup (method) -ida_kernwin.Choose.OnRefresh (method) -ida_kernwin.Choose.OnSelectLine (method) -ida_kernwin.Choose.OnSelectionChange (method) -ida_kernwin.Choose.Refresh (method) -ida_kernwin.Choose.Show (method) -ida_kernwin.Choose.UI_Hooks_Trampoline (class) -ida_kernwin.Choose.UI_Hooks_Trampoline.__init__ (method) -ida_kernwin.Choose.UI_Hooks_Trampoline.populating_widget_popup (method) -ida_kernwin.Choose.__init__ (method) -ida_kernwin.Choose.__init__._qccb (function) -ida_kernwin.Choose.adjust_last_item (method) -ida_kernwin.CustomIDAMemo (class) -ida_kernwin.CustomIDAMemo.CreateGroups (method) -ida_kernwin.CustomIDAMemo.DelNodesInfos (method) -ida_kernwin.CustomIDAMemo.DeleteGroups (method) -ida_kernwin.CustomIDAMemo.GetCurrentRendererType (method) -ida_kernwin.CustomIDAMemo.GetNodeInfo (method) -ida_kernwin.CustomIDAMemo.GetWidget (method) -ida_kernwin.CustomIDAMemo.GetWidgetAsGraphViewer (method) -ida_kernwin.CustomIDAMemo.Refresh (method) -ida_kernwin.CustomIDAMemo.SetCurrentRendererType (method) -ida_kernwin.CustomIDAMemo.SetGroupsVisibility (method) -ida_kernwin.CustomIDAMemo.SetNodeInfo (method) -ida_kernwin.CustomIDAMemo.SetNodesInfos (method) -ida_kernwin.CustomIDAMemo._OnBind (method) -ida_kernwin.CustomIDAMemo.__init__ (method) -ida_kernwin.CustomIDAMemo._dummy_cb (method) -ida_kernwin.CustomIDAMemo._get_cb (method) -ida_kernwin.CustomIDAMemo._get_cb_arity (method) -ida_kernwin.CustomIDAMemo._graph_item_tuple (method) -ida_kernwin.CustomIDAMemo.view_activated (method) -ida_kernwin.CustomIDAMemo.view_click (method) -ida_kernwin.CustomIDAMemo.view_close (method) -ida_kernwin.CustomIDAMemo.view_curpos (method) -ida_kernwin.CustomIDAMemo.view_dblclick (method) -ida_kernwin.CustomIDAMemo.view_deactivated (method) -ida_kernwin.CustomIDAMemo.view_keydown (method) -ida_kernwin.CustomIDAMemo.view_loc_changed (method) -ida_kernwin.CustomIDAMemo.view_mouse_moved (method) -ida_kernwin.CustomIDAMemo.view_mouse_over (method) -ida_kernwin.CustomIDAMemo.view_switched (method) -ida_kernwin.DP_BEFORE (variable) -ida_kernwin.DP_BOTTOM (variable) -ida_kernwin.DP_FLOATING (variable) -ida_kernwin.DP_INSIDE (variable) -ida_kernwin.DP_LEFT (variable) -ida_kernwin.DP_RIGHT (variable) -ida_kernwin.DP_SZHINT (variable) -ida_kernwin.DP_TAB (variable) -ida_kernwin.DP_TOP (variable) -ida_kernwin.Form (class) -ida_kernwin.Form.Add (method) -ida_kernwin.Form.AddControls (method) -ida_kernwin.Form.ButtonInput (class) -ida_kernwin.Form.ButtonInput.__init__ (method) -ida_kernwin.Form.ButtonInput.helper_cb (method) -ida_kernwin.Form.ButtonInput.is_input_field (method) -ida_kernwin.Form.ChkGroupControl (class) -ida_kernwin.Form.ChkGroupControl.ItemClass (variable) -ida_kernwin.Form.ChkGroupControl.__init__ (method) -ida_kernwin.Form.ChkGroupItemControl (class) -ida_kernwin.Form.ChkGroupItemControl.__get_value (method) -ida_kernwin.Form.ChkGroupItemControl.__init__ (method) -ida_kernwin.Form.ChkGroupItemControl.__set_value (method) -ida_kernwin.Form.ChkGroupItemControl.checked (variable) -ida_kernwin.Form.Close (method) -ida_kernwin.Form.ColorInput (class) -ida_kernwin.Form.ColorInput.__init__ (method) -ida_kernwin.Form.Compile (method) -ida_kernwin.Form.CompileEx (method) -ida_kernwin.Form.CompileEx.next_control (function) -ida_kernwin.Form.Compiled (method) -ida_kernwin.Form.Control (class) -ida_kernwin.Form.Control.__init__ (method) -ida_kernwin.Form.Control.free (method) -ida_kernwin.Form.Control.get_arg (method) -ida_kernwin.Form.Control.get_tag (method) -ida_kernwin.Form.Control.is_input_field (method) -ida_kernwin.Form.ControlToFieldTypeIdAndSize (method) -ida_kernwin.Form.DirInput (class) -ida_kernwin.Form.DirInput.__init__ (method) -ida_kernwin.Form.DropdownListControl (class) -ida_kernwin.Form.DropdownListControl.__get_selval (method) -ida_kernwin.Form.DropdownListControl.__init__ (method) -ida_kernwin.Form.DropdownListControl.__set_selval (method) -ida_kernwin.Form.DropdownListControl.free (method) -ida_kernwin.Form.DropdownListControl.selval (variable) -ida_kernwin.Form.DropdownListControl.set_items (method) -ida_kernwin.Form.EmbeddedChooserControl (class) -ida_kernwin.Form.EmbeddedChooserControl.__get_selection__ (method) -ida_kernwin.Form.EmbeddedChooserControl.__init__ (method) -ida_kernwin.Form.EmbeddedChooserControl.free (method) -ida_kernwin.Form.EmbeddedChooserControl.selection (variable) -ida_kernwin.Form.EmbeddedChooserControl.value (variable) -ida_kernwin.Form.EnableField (method) -ida_kernwin.Form.Execute (method) -ida_kernwin.Form.FT_ADDR (variable) -ida_kernwin.Form.FT_ASCII (variable) -ida_kernwin.Form.FT_BIN (variable) -ida_kernwin.Form.FT_BUTTON (variable) -ida_kernwin.Form.FT_CHAR (variable) -ida_kernwin.Form.FT_COLOR (variable) -ida_kernwin.Form.FT_DEC (variable) -ida_kernwin.Form.FT_DIR (variable) -ida_kernwin.Form.FT_DROPDOWN_LIST (variable) -ida_kernwin.Form.FT_ECHOOSER (variable) -ida_kernwin.Form.FT_FILE (variable) -ida_kernwin.Form.FT_FORMCHG (variable) -ida_kernwin.Form.FT_HEX (variable) -ida_kernwin.Form.FT_HTML_LABEL (variable) -ida_kernwin.Form.FT_IDENT (variable) -ida_kernwin.Form.FT_INT64 (variable) -ida_kernwin.Form.FT_MULTI_LINE_TEXT (variable) -ida_kernwin.Form.FT_OCT (variable) -ida_kernwin.Form.FT_RAWHEX (variable) -ida_kernwin.Form.FT_SEG (variable) -ida_kernwin.Form.FT_SHEX (variable) -ida_kernwin.Form.FT_TYPE (variable) -ida_kernwin.Form.FT_UINT64 (variable) -ida_kernwin.Form.FileInput (class) -ida_kernwin.Form.FileInput.__init__ (method) -ida_kernwin.Form.FindControlById (method) -ida_kernwin.Form.FormChangeCb (class) -ida_kernwin.Form.FormChangeCb.__init__ (method) -ida_kernwin.Form.FormChangeCb.free (method) -ida_kernwin.Form.FormChangeCb.get_tag (method) -ida_kernwin.Form.FormChangeCb.helper_cb (method) -ida_kernwin.Form.Free (method) -ida_kernwin.Form.GetControlValue (method) -ida_kernwin.Form.GetFocusedField (method) -ida_kernwin.Form.GroupControl (class) -ida_kernwin.Form.GroupControl.__init__ (method) -ida_kernwin.Form.GroupControl._reset (method) -ida_kernwin.Form.GroupControl.get_tag (method) -ida_kernwin.Form.GroupControl.next_child_pos (method) -ida_kernwin.Form.GroupItemControl (class) -ida_kernwin.Form.GroupItemControl.__init__ (method) -ida_kernwin.Form.GroupItemControl.assign_pos (method) -ida_kernwin.Form.GroupItemControl.get_tag (method) -ida_kernwin.Form.GroupItemControl.is_input_field (method) -ida_kernwin.Form.InputControl (class) -ida_kernwin.Form.InputControl.__init__ (method) -ida_kernwin.Form.InputControl.get_tag (method) -ida_kernwin.Form.InputControl.is_input_field (method) -ida_kernwin.Form.LabelControl (class) -ida_kernwin.Form.LabelControl.__init__ (method) -ida_kernwin.Form.LabelControl.get_tag (method) -ida_kernwin.Form.MoveField (method) -ida_kernwin.Form.MultiLineTextControl (class) -ida_kernwin.Form.MultiLineTextControl.__init__ (method) -ida_kernwin.Form.MultiLineTextControl.free (method) -ida_kernwin.Form.NumericArgument (class) -ida_kernwin.Form.NumericArgument.__init__ (method) -ida_kernwin.Form.NumericArgument.__set_value (method) -ida_kernwin.Form.NumericInput (class) -ida_kernwin.Form.NumericInput.__init__ (method) -ida_kernwin.Form.NumericLabel (class) -ida_kernwin.Form.NumericLabel.__init__ (method) -ida_kernwin.Form.Open (method) -ida_kernwin.Form.RadGroupControl (class) -ida_kernwin.Form.RadGroupControl.__init__ (method) -ida_kernwin.Form.RadGroupItemControl (class) -ida_kernwin.Form.RadGroupItemControl.__get_value (method) -ida_kernwin.Form.RadGroupItemControl.__init__ (method) -ida_kernwin.Form.RadGroupItemControl.__set_value (method) -ida_kernwin.Form.RadGroupItemControl.selected (variable) -ida_kernwin.Form.RefreshField (method) -ida_kernwin.Form.SetControlValue (method) -ida_kernwin.Form.SetFocusedField (method) -ida_kernwin.Form.ShowField (method) -ida_kernwin.Form.StringArgument (class) -ida_kernwin.Form.StringArgument.__get_value (method) -ida_kernwin.Form.StringArgument.__init__ (method) -ida_kernwin.Form.StringArgument.__set_value (method) -ida_kernwin.Form.StringInput (class) -ida_kernwin.Form.StringInput.__init__ (method) -ida_kernwin.Form.StringLabel (class) -ida_kernwin.Form.StringLabel.__init__ (method) -ida_kernwin.Form._AddGroup (method) -ida_kernwin.Form._ChkCompiled (method) -ida_kernwin.Form._FT_USHORT (variable) -ida_kernwin.Form._ParseFormTitle (method) -ida_kernwin.Form.__getitem__ (method) -ida_kernwin.Form.__init__ (method) -ida_kernwin.Form._reset (method) -ida_kernwin.Form.create_string_buffer (method) -ida_kernwin.Form.fieldtype_to_ctype (method) -ida_kernwin.GCRF_ALL (variable) -ida_kernwin.GCRF_CURRENT (variable) -ida_kernwin.GCRF_HEADER (variable) -ida_kernwin.GCRF_SELECTION (variable) -ida_kernwin.HIF_IDENTIFIER (variable) -ida_kernwin.HIF_LOCKED (variable) -ida_kernwin.HIF_NOCASE (variable) -ida_kernwin.HIF_REGISTER (variable) -ida_kernwin.HIF_SLOT_0 (variable) -ida_kernwin.HIF_SLOT_1 (variable) -ida_kernwin.HIF_SLOT_2 (variable) -ida_kernwin.HIF_SLOT_3 (variable) -ida_kernwin.HIF_SLOT_4 (variable) -ida_kernwin.HIF_SLOT_5 (variable) -ida_kernwin.HIF_SLOT_6 (variable) -ida_kernwin.HIF_SLOT_7 (variable) -ida_kernwin.HIF_SLOT_SHIFT (variable) -ida_kernwin.HIF_USE_SLOT (variable) -ida_kernwin.HIST_CMD (variable) -ida_kernwin.HIST_CMT (variable) -ida_kernwin.HIST_DIR (variable) -ida_kernwin.HIST_FILE (variable) -ida_kernwin.HIST_IDENT (variable) -ida_kernwin.HIST_SEG (variable) -ida_kernwin.HIST_SRCH (variable) -ida_kernwin.HIST_TYPE (variable) -ida_kernwin.IDAViewWrapper (class) -ida_kernwin.IDAViewWrapper.Bind (method) -ida_kernwin.IDAViewWrapper.Unbind (method) -ida_kernwin.IDAViewWrapper.__init__ (method) -ida_kernwin.IDA_DEBUG_ACCESSIBILITY (variable) -ida_kernwin.IDA_DEBUG_ALREADY (variable) -ida_kernwin.IDA_DEBUG_ALWAYS (variable) -ida_kernwin.IDA_DEBUG_APPCALL (variable) -ida_kernwin.IDA_DEBUG_CHECKMEM (variable) -ida_kernwin.IDA_DEBUG_CONFIG (variable) -ida_kernwin.IDA_DEBUG_DBGINFO (variable) -ida_kernwin.IDA_DEBUG_DEBUGGER (variable) -ida_kernwin.IDA_DEBUG_DEMANGLE (variable) -ida_kernwin.IDA_DEBUG_DREFS (variable) -ida_kernwin.IDA_DEBUG_FLIRT (variable) -ida_kernwin.IDA_DEBUG_IDP (variable) -ida_kernwin.IDA_DEBUG_IDS (variable) -ida_kernwin.IDA_DEBUG_INTERNET (variable) -ida_kernwin.IDA_DEBUG_LDR (variable) -ida_kernwin.IDA_DEBUG_LICENSE (variable) -ida_kernwin.IDA_DEBUG_LUMINA (variable) -ida_kernwin.IDA_DEBUG_NETWORK (variable) -ida_kernwin.IDA_DEBUG_NOTIFY (variable) -ida_kernwin.IDA_DEBUG_OFFSET (variable) -ida_kernwin.IDA_DEBUG_PLUGIN (variable) -ida_kernwin.IDA_DEBUG_QUEUE (variable) -ida_kernwin.IDA_DEBUG_REGEX (variable) -ida_kernwin.IDA_DEBUG_ROLLBACK (variable) -ida_kernwin.IDA_DEBUG_SIMPLEX (variable) -ida_kernwin.IDA_DEBUG_SRCDBG (variable) -ida_kernwin.IDA_DEBUG_SUBPROC (variable) -ida_kernwin.IDA_DEBUG_THEMES (variable) -ida_kernwin.IDA_DEBUG_TIL (variable) -ida_kernwin.IDCHK_ARG (variable) -ida_kernwin.IDCHK_KEY (variable) -ida_kernwin.IDCHK_MAX (variable) -ida_kernwin.IDCHK_OK (variable) -ida_kernwin.IWID_ADDRWATCH (variable) -ida_kernwin.IWID_ALL (variable) -ida_kernwin.IWID_BOOKMARKS (variable) -ida_kernwin.IWID_BPTS (variable) -ida_kernwin.IWID_CALLS (variable) -ida_kernwin.IWID_CALLS_CALLEES (variable) -ida_kernwin.IWID_CALLS_CALLERS (variable) -ida_kernwin.IWID_CALL_STACK (variable) -ida_kernwin.IWID_CHOOSER (variable) -ida_kernwin.IWID_CLI (variable) -ida_kernwin.IWID_CMDPALCSR (variable) -ida_kernwin.IWID_CMDPALWIN (variable) -ida_kernwin.IWID_CPUREGS (variable) -ida_kernwin.IWID_CUSTVIEW (variable) -ida_kernwin.IWID_CV_LINE_INFOS (variable) -ida_kernwin.IWID_DISASM (variable) -ida_kernwin.IWID_DISASM_ARROWS (variable) -ida_kernwin.IWID_DUMP (variable) -ida_kernwin.IWID_ENUMS (variable) -ida_kernwin.IWID_EXPORTS (variable) -ida_kernwin.IWID_FRAME (variable) -ida_kernwin.IWID_FUNCS (variable) -ida_kernwin.IWID_IMPORTS (variable) -ida_kernwin.IWID_LOCALS (variable) -ida_kernwin.IWID_LOCTYPS (variable) -ida_kernwin.IWID_MDVIEWCSR (variable) -ida_kernwin.IWID_MODULES (variable) -ida_kernwin.IWID_NAMES (variable) -ida_kernwin.IWID_NAVBAND (variable) -ida_kernwin.IWID_NOTEPAD (variable) -ida_kernwin.IWID_OUTPUT (variable) -ida_kernwin.IWID_PROBS (variable) -ida_kernwin.IWID_PSEUDOCODE (variable) -ida_kernwin.IWID_SCRIPTS_CSR (variable) -ida_kernwin.IWID_SEARCH (variable) -ida_kernwin.IWID_SEGREGS (variable) -ida_kernwin.IWID_SEGS (variable) -ida_kernwin.IWID_SELS (variable) -ida_kernwin.IWID_SHORTCUTCSR (variable) -ida_kernwin.IWID_SHORTCUTWIN (variable) -ida_kernwin.IWID_SIGNS (variable) -ida_kernwin.IWID_SNIPPETS (variable) -ida_kernwin.IWID_SNIPPETS_CSR (variable) -ida_kernwin.IWID_SO_OFFSETS (variable) -ida_kernwin.IWID_SO_STRUCTS (variable) -ida_kernwin.IWID_SRCPTHMAP_CSR (variable) -ida_kernwin.IWID_SRCPTHUND_CSR (variable) -ida_kernwin.IWID_STACK (variable) -ida_kernwin.IWID_STKVIEW (variable) -ida_kernwin.IWID_STRINGS (variable) -ida_kernwin.IWID_STRUCTS (variable) -ida_kernwin.IWID_THREADS (variable) -ida_kernwin.IWID_TILIST (variable) -ida_kernwin.IWID_TILS (variable) -ida_kernwin.IWID_TRACE (variable) -ida_kernwin.IWID_UNDOHIST (variable) -ida_kernwin.IWID_WATCH (variable) -ida_kernwin.IWID_XREFS (variable) -ida_kernwin.LROEF_CPS_RANGE (variable) -ida_kernwin.LROEF_FULL_LINE (variable) -ida_kernwin.MFF_FAST (variable) -ida_kernwin.MFF_NOWAIT (variable) -ida_kernwin.MFF_READ (variable) -ida_kernwin.MFF_WRITE (variable) -ida_kernwin.PCF_EA_CAPABLE (variable) -ida_kernwin.PCF_MAKEPLACE_ALLOCATES (variable) -ida_kernwin.PluginForm (class) -ida_kernwin.PluginForm.Close (method) -ida_kernwin.PluginForm.GetWidget (method) -ida_kernwin.PluginForm.OnClose (method) -ida_kernwin.PluginForm.OnCreate (method) -ida_kernwin.PluginForm.QtWidgetToTWidget (method) -ida_kernwin.PluginForm.Show (method) -ida_kernwin.PluginForm.TWidgetToPyQtWidget (method) -ida_kernwin.PluginForm.TWidgetToPySideWidget (method) -ida_kernwin.PluginForm.WCLS_DELETE_LATER (variable) -ida_kernwin.PluginForm.WCLS_DONT_SAVE_SIZE (variable) -ida_kernwin.PluginForm.WCLS_NO_CONTEXT (variable) -ida_kernwin.PluginForm.WCLS_SAVE (variable) -ida_kernwin.PluginForm.WOPN_DP_BEFORE (variable) -ida_kernwin.PluginForm.WOPN_DP_BOTTOM (variable) -ida_kernwin.PluginForm.WOPN_DP_FLOATING (variable) -ida_kernwin.PluginForm.WOPN_DP_INSIDE (variable) -ida_kernwin.PluginForm.WOPN_DP_LEFT (variable) -ida_kernwin.PluginForm.WOPN_DP_RIGHT (variable) -ida_kernwin.PluginForm.WOPN_DP_SZHINT (variable) -ida_kernwin.PluginForm.WOPN_DP_TAB (variable) -ida_kernwin.PluginForm.WOPN_DP_TOP (variable) -ida_kernwin.PluginForm.WOPN_PERSIST (variable) -ida_kernwin.PluginForm.WOPN_RESTORE (variable) -ida_kernwin.PluginForm.__init__ (method) -ida_kernwin.PluginForm._ensure_widget_deps (method) -ida_kernwin.RENADDR_HR (variable) -ida_kernwin.RENADDR_IDA (variable) -ida_kernwin.S2EAOPT_NOCALC (variable) -ida_kernwin.SETMENU_APP (variable) -ida_kernwin.SETMENU_ENSURE_SEP (variable) -ida_kernwin.SETMENU_FIRST (variable) -ida_kernwin.SETMENU_INS (variable) -ida_kernwin.SVF_COPY_LINES (variable) -ida_kernwin.SVF_LINES_BYPTR (variable) -ida_kernwin.TCCPT_ENUMPLACE (variable) -ida_kernwin.TCCPT_IDAPLACE (variable) -ida_kernwin.TCCPT_INVALID (variable) -ida_kernwin.TCCPT_PLACE (variable) -ida_kernwin.TCCPT_SIMPLELINE_PLACE (variable) -ida_kernwin.TCCPT_STRUCTPLACE (variable) -ida_kernwin.TCCPT_TIPLACE (variable) -ida_kernwin.TCCRT_FLAT (variable) -ida_kernwin.TCCRT_GRAPH (variable) -ida_kernwin.TCCRT_INVALID (variable) -ida_kernwin.TCCRT_PROXIMITY (variable) -ida_kernwin.TWidget__from_ptrval__ (function) -ida_kernwin.UIJMP_ACTIVATE (variable) -ida_kernwin.UIJMP_ANYVIEW (variable) -ida_kernwin.UIJMP_DONTPUSH (variable) -ida_kernwin.UIJMP_IDAVIEW (variable) -ida_kernwin.UIJMP_IDAVIEW_NEW (variable) -ida_kernwin.UI_Hooks (class) -ida_kernwin.UI_Hooks.__disown__ (method) -ida_kernwin.UI_Hooks.__init__ (method) -ida_kernwin.UI_Hooks.create_desktop_widget (method) -ida_kernwin.UI_Hooks.current_widget_changed (method) -ida_kernwin.UI_Hooks.database_closed (method) -ida_kernwin.UI_Hooks.database_inited (method) -ida_kernwin.UI_Hooks.debugger_menu_change (method) -ida_kernwin.UI_Hooks.desktop_applied (method) -ida_kernwin.UI_Hooks.destroying_plugmod (method) -ida_kernwin.UI_Hooks.destroying_procmod (method) -ida_kernwin.UI_Hooks.finish_populating_widget_popup (method) -ida_kernwin.UI_Hooks.get_chooser_item_attrs (method) -ida_kernwin.UI_Hooks.get_custom_viewer_hint (method) -ida_kernwin.UI_Hooks.get_ea_hint (method) -ida_kernwin.UI_Hooks.get_item_hint (method) -ida_kernwin.UI_Hooks.get_lines_rendering_info (method) -ida_kernwin.UI_Hooks.get_widget_config (method) -ida_kernwin.UI_Hooks.hook (method) -ida_kernwin.UI_Hooks.idcstart (method) -ida_kernwin.UI_Hooks.idcstop (method) -ida_kernwin.UI_Hooks.initing_database (method) -ida_kernwin.UI_Hooks.plugin_loaded (method) -ida_kernwin.UI_Hooks.plugin_unloading (method) -ida_kernwin.UI_Hooks.populating_widget_popup (method) -ida_kernwin.UI_Hooks.postprocess_action (method) -ida_kernwin.UI_Hooks.preprocess_action (method) -ida_kernwin.UI_Hooks.range (method) -ida_kernwin.UI_Hooks.ready_to_run (method) -ida_kernwin.UI_Hooks.resume (method) -ida_kernwin.UI_Hooks.saved (method) -ida_kernwin.UI_Hooks.saving (method) -ida_kernwin.UI_Hooks.screen_ea_changed (method) -ida_kernwin.UI_Hooks.set_widget_config (method) -ida_kernwin.UI_Hooks.suspend (method) -ida_kernwin.UI_Hooks.unhook (method) -ida_kernwin.UI_Hooks.updated_actions (method) -ida_kernwin.UI_Hooks.updating_actions (method) -ida_kernwin.UI_Hooks.widget_closing (method) -ida_kernwin.UI_Hooks.widget_invisible (method) -ida_kernwin.UI_Hooks.widget_visible (method) -ida_kernwin.VES_SHIFT (variable) -ida_kernwin.VME_LEFT_BUTTON (variable) -ida_kernwin.VME_MID_BUTTON (variable) -ida_kernwin.VME_RIGHT_BUTTON (variable) -ida_kernwin.VME_UNKNOWN (variable) -ida_kernwin.View_Hooks (class) -ida_kernwin.View_Hooks.__disown__ (method) -ida_kernwin.View_Hooks.__init__ (method) -ida_kernwin.View_Hooks.hook (method) -ida_kernwin.View_Hooks.unhook (method) -ida_kernwin.View_Hooks.view_activated (method) -ida_kernwin.View_Hooks.view_click (method) -ida_kernwin.View_Hooks.view_close (method) -ida_kernwin.View_Hooks.view_created (method) -ida_kernwin.View_Hooks.view_curpos (method) -ida_kernwin.View_Hooks.view_dblclick (method) -ida_kernwin.View_Hooks.view_deactivated (method) -ida_kernwin.View_Hooks.view_keydown (method) -ida_kernwin.View_Hooks.view_loc_changed (method) -ida_kernwin.View_Hooks.view_mouse_moved (method) -ida_kernwin.View_Hooks.view_mouse_over (method) -ida_kernwin.View_Hooks.view_switched (method) -ida_kernwin.WCLS_DELETE_LATER (variable) -ida_kernwin.WCLS_DONT_SAVE_SIZE (variable) -ida_kernwin.WCLS_NO_CONTEXT (variable) -ida_kernwin.WCLS_SAVE (variable) -ida_kernwin.WOPN_CLOSED_BY_ESC (variable) -ida_kernwin.WOPN_DP_BEFORE (variable) -ida_kernwin.WOPN_DP_BOTTOM (variable) -ida_kernwin.WOPN_DP_FLOATING (variable) -ida_kernwin.WOPN_DP_INSIDE (variable) -ida_kernwin.WOPN_DP_LEFT (variable) -ida_kernwin.WOPN_DP_RIGHT (variable) -ida_kernwin.WOPN_DP_SZHINT (variable) -ida_kernwin.WOPN_DP_TAB (variable) -ida_kernwin.WOPN_DP_TOP (variable) -ida_kernwin.WOPN_NOT_CLOSED_BY_ESC (variable) -ida_kernwin.WOPN_PERSIST (variable) -ida_kernwin.WOPN_RESTORE (variable) -ida_kernwin.__qtimer_t (class) -ida_kernwin.__qtimer_t.__init__ (method) -ida_kernwin._ask_addr (function) -ida_kernwin._ask_long (function) -ida_kernwin._ask_seg (function) -ida_kernwin._kludge_force_declare_dirspec_t (function) -ida_kernwin._kludge_force_declare_dirtree_t (function) -ida_kernwin.action_ctx_base_cur_sel_t (class) -ida_kernwin.action_ctx_base_cur_sel_t.__init__ (method) -ida_kernwin.action_ctx_base_cur_sel_t.reset (method) -ida_kernwin.action_ctx_base_cur_sel_t.to (variable) -ida_kernwin.action_ctx_base_source_t (class) -ida_kernwin.action_ctx_base_source_t.__init__ (method) -ida_kernwin.action_ctx_base_source_t.reset (method) -ida_kernwin.action_ctx_base_t (class) -ida_kernwin.action_ctx_base_t.__init__ (method) -ida_kernwin.action_ctx_base_t.action (variable) -ida_kernwin.action_ctx_base_t.chooser_selection (variable) -ida_kernwin.action_ctx_base_t.cur_ea (variable) -ida_kernwin.action_ctx_base_t.cur_enum (variable) -ida_kernwin.action_ctx_base_t.cur_fchunk (variable) -ida_kernwin.action_ctx_base_t.cur_flags (variable) -ida_kernwin.action_ctx_base_t.cur_func (variable) -ida_kernwin.action_ctx_base_t.cur_seg (variable) -ida_kernwin.action_ctx_base_t.cur_sel (variable) -ida_kernwin.action_ctx_base_t.cur_strmem (variable) -ida_kernwin.action_ctx_base_t.cur_struc (variable) -ida_kernwin.action_ctx_base_t.cur_value (variable) -ida_kernwin.action_ctx_base_t.dirtree_selection (variable) -ida_kernwin.action_ctx_base_t.focus (variable) -ida_kernwin.action_ctx_base_t.graph_selection (variable) -ida_kernwin.action_ctx_base_t.has_flag (method) -ida_kernwin.action_ctx_base_t.regname (variable) -ida_kernwin.action_ctx_base_t.reset (method) -ida_kernwin.action_ctx_base_t.source (variable) -ida_kernwin.action_ctx_base_t.type_ref (variable) -ida_kernwin.action_ctx_base_t.widget_title (variable) -ida_kernwin.action_ctx_base_t.widget_type (variable) -ida_kernwin.action_desc_t (class) -ida_kernwin.action_desc_t.__init__ (method) -ida_kernwin.action_desc_t.cb (variable) -ida_kernwin.action_desc_t.flags (variable) -ida_kernwin.action_desc_t.icon (variable) -ida_kernwin.action_desc_t.label (variable) -ida_kernwin.action_desc_t.name (variable) -ida_kernwin.action_desc_t.owner (variable) -ida_kernwin.action_desc_t.shortcut (variable) -ida_kernwin.action_desc_t.tooltip (variable) -ida_kernwin.action_handler_t (class) -ida_kernwin.action_handler_t.__init__ (method) -ida_kernwin.action_handler_t.activate (method) -ida_kernwin.action_handler_t.update (method) -ida_kernwin.activate_widget (function) -ida_kernwin.add_hotkey (function) -ida_kernwin.add_idc_hotkey (function) -ida_kernwin.add_spaces (function) -ida_kernwin.addon_count (function) -ida_kernwin.addon_info_t (class) -ida_kernwin.addon_info_t.__init__ (method) -ida_kernwin.analyzer_options (function) -ida_kernwin.ask_addr (function) -ida_kernwin.ask_buttons (function) -ida_kernwin.ask_file (function) -ida_kernwin.ask_for_feedback (function) -ida_kernwin.ask_form (function) -ida_kernwin.ask_ident (function) -ida_kernwin.ask_long (function) -ida_kernwin.ask_seg (function) -ida_kernwin.ask_str (function) -ida_kernwin.ask_text (function) -ida_kernwin.ask_yn (function) -ida_kernwin.atoea (function) -ida_kernwin.attach_action_to_menu (function) -ida_kernwin.attach_action_to_popup (function) -ida_kernwin.attach_action_to_toolbar (function) -ida_kernwin.attach_dynamic_action_to_popup (function) -ida_kernwin.banner (function) -ida_kernwin.beep (function) -ida_kernwin.call_nav_colorizer (function) -ida_kernwin.cancel_exec_request (function) -ida_kernwin.cancel_thread_exec_requests (function) -ida_kernwin.choose_activate (function) -ida_kernwin.choose_choose (function) -ida_kernwin.choose_close (function) -ida_kernwin.choose_create_embedded_chobj (function) -ida_kernwin.choose_entry (function) -ida_kernwin.choose_enum (function) -ida_kernwin.choose_enum_by_value (function) -ida_kernwin.choose_find (function) -ida_kernwin.choose_func (function) -ida_kernwin.choose_get_widget (function) -ida_kernwin.choose_idasgn (function) -ida_kernwin.choose_name (function) -ida_kernwin.choose_refresh (function) -ida_kernwin.choose_segm (function) -ida_kernwin.choose_srcp (function) -ida_kernwin.choose_stkvar_xref (function) -ida_kernwin.choose_struc (function) -ida_kernwin.choose_til (function) -ida_kernwin.choose_xref (function) -ida_kernwin.chooser_base_t (class) -ida_kernwin.chooser_base_t.__init__ (method) -ida_kernwin.chooser_base_t.ask_item_attrs (method) -ida_kernwin.chooser_base_t.can_del (method) -ida_kernwin.chooser_base_t.can_edit (method) -ida_kernwin.chooser_base_t.can_filter (method) -ida_kernwin.chooser_base_t.can_ins (method) -ida_kernwin.chooser_base_t.can_refresh (method) -ida_kernwin.chooser_base_t.can_sort (method) -ida_kernwin.chooser_base_t.columns (variable) -ida_kernwin.chooser_base_t.deflt_col (variable) -ida_kernwin.chooser_base_t.get_builtin_number (method) -ida_kernwin.chooser_base_t.get_count (method) -ida_kernwin.chooser_base_t.get_ea (method) -ida_kernwin.chooser_base_t.get_quick_filter_initial_mode (method) -ida_kernwin.chooser_base_t.get_row (method) -ida_kernwin.chooser_base_t.has_diff_capability (method) -ida_kernwin.chooser_base_t.has_dirtree (method) -ida_kernwin.chooser_base_t.header (variable) -ida_kernwin.chooser_base_t.height (variable) -ida_kernwin.chooser_base_t.icon (variable) -ida_kernwin.chooser_base_t.is_dirtree_persisted (method) -ida_kernwin.chooser_base_t.is_force_default (method) -ida_kernwin.chooser_base_t.is_lazy_loaded (method) -ida_kernwin.chooser_base_t.is_modal (method) -ida_kernwin.chooser_base_t.is_multi (method) -ida_kernwin.chooser_base_t.is_quick_filter_visible_initially (method) -ida_kernwin.chooser_base_t.is_same (method) -ida_kernwin.chooser_base_t.is_status_bar_hidden (method) -ida_kernwin.chooser_base_t.popup_allowed (method) -ida_kernwin.chooser_base_t.popup_names (variable) -ida_kernwin.chooser_base_t.should_rename_trigger_edit (method) -ida_kernwin.chooser_base_t.should_restore_geometry (method) -ida_kernwin.chooser_base_t.title (variable) -ida_kernwin.chooser_base_t.width (variable) -ida_kernwin.chooser_base_t.widths (variable) -ida_kernwin.chooser_base_t.x0 (variable) -ida_kernwin.chooser_item_attrs_t (class) -ida_kernwin.chooser_item_attrs_t.__eq__ (method) -ida_kernwin.chooser_item_attrs_t.__init__ (method) -ida_kernwin.chooser_item_attrs_t.color (variable) -ida_kernwin.chooser_item_attrs_t.flags (variable) -ida_kernwin.chooser_item_attrs_t.reset (method) -ida_kernwin.chooser_row_info_t (class) -ida_kernwin.chooser_row_info_t.__eq__ (method) -ida_kernwin.chooser_row_info_t.__init__ (method) -ida_kernwin.chooser_row_info_t.__ne__ (method) -ida_kernwin.chooser_row_info_t.attrs (variable) -ida_kernwin.chooser_row_info_t.icon (variable) -ida_kernwin.chooser_row_info_t.texts (variable) -ida_kernwin.chooser_row_info_vec_t (class) -ida_kernwin.chooser_row_info_vec_t.__eq__ (method) -ida_kernwin.chooser_row_info_vec_t.__getitem__ (method) -ida_kernwin.chooser_row_info_vec_t.__init__ (method) -ida_kernwin.chooser_row_info_vec_t.__len__ (method) -ida_kernwin.chooser_row_info_vec_t.__ne__ (method) -ida_kernwin.chooser_row_info_vec_t.__setitem__ (method) -ida_kernwin.chooser_row_info_vec_t._del (method) -ida_kernwin.chooser_row_info_vec_t.add_unique (method) -ida_kernwin.chooser_row_info_vec_t.at (method) -ida_kernwin.chooser_row_info_vec_t.begin (method) -ida_kernwin.chooser_row_info_vec_t.capacity (method) -ida_kernwin.chooser_row_info_vec_t.clear (method) -ida_kernwin.chooser_row_info_vec_t.empty (method) -ida_kernwin.chooser_row_info_vec_t.end (method) -ida_kernwin.chooser_row_info_vec_t.erase (method) -ida_kernwin.chooser_row_info_vec_t.extract (method) -ida_kernwin.chooser_row_info_vec_t.find (method) -ida_kernwin.chooser_row_info_vec_t.grow (method) -ida_kernwin.chooser_row_info_vec_t.has (method) -ida_kernwin.chooser_row_info_vec_t.inject (method) -ida_kernwin.chooser_row_info_vec_t.insert (method) -ida_kernwin.chooser_row_info_vec_t.pop_back (method) -ida_kernwin.chooser_row_info_vec_t.push_back (method) -ida_kernwin.chooser_row_info_vec_t.qclear (method) -ida_kernwin.chooser_row_info_vec_t.reserve (method) -ida_kernwin.chooser_row_info_vec_t.resize (method) -ida_kernwin.chooser_row_info_vec_t.size (method) -ida_kernwin.chooser_row_info_vec_t.swap (method) -ida_kernwin.chooser_row_info_vec_t.truncate (method) -ida_kernwin.chooser_stdact_desc_t (class) -ida_kernwin.chooser_stdact_desc_t.__disown__ (method) -ida_kernwin.chooser_stdact_desc_t.__init__ (method) -ida_kernwin.chooser_stdact_desc_t.label (variable) -ida_kernwin.chooser_stdact_desc_t.ucb (method) -ida_kernwin.chooser_stdact_desc_t.version (variable) -ida_kernwin.chtype_entry (variable) -ida_kernwin.chtype_enum (variable) -ida_kernwin.chtype_enum_by_value (variable) -ida_kernwin.chtype_enum_by_value_and_size (variable) -ida_kernwin.chtype_func (variable) -ida_kernwin.chtype_generic (variable) -ida_kernwin.chtype_idasgn (variable) -ida_kernwin.chtype_idatil (variable) -ida_kernwin.chtype_name (variable) -ida_kernwin.chtype_segm (variable) -ida_kernwin.chtype_srcp (variable) -ida_kernwin.chtype_stkvar_xref (variable) -ida_kernwin.chtype_strpath (variable) -ida_kernwin.chtype_struc (variable) -ida_kernwin.chtype_xref (variable) -ida_kernwin.clear_refresh_request (function) -ida_kernwin.cli_t (class) -ida_kernwin.cli_t.OnCompleteLine (method) -ida_kernwin.cli_t.OnExecuteLine (method) -ida_kernwin.cli_t.OnKeydown (method) -ida_kernwin.cli_t.__del__ (method) -ida_kernwin.cli_t.__init__ (method) -ida_kernwin.cli_t.register (method) -ida_kernwin.cli_t.unregister (method) -ida_kernwin.close_chooser (function) -ida_kernwin.close_widget (function) -ida_kernwin.clr_cancelled (function) -ida_kernwin.create_code_viewer (function) -ida_kernwin.create_empty_widget (function) -ida_kernwin.create_menu (function) -ida_kernwin.create_toolbar (function) -ida_kernwin.custom_viewer_jump (function) -ida_kernwin.del_hotkey (function) -ida_kernwin.del_idc_hotkey (function) -ida_kernwin.delete_menu (function) -ida_kernwin.delete_toolbar (function) -ida_kernwin.detach_action_from_menu (function) -ida_kernwin.detach_action_from_popup (function) -ida_kernwin.detach_action_from_toolbar (function) -ida_kernwin.disabled_script_timeout_t (class) -ida_kernwin.disabled_script_timeout_t.__enter__ (method) -ida_kernwin.disabled_script_timeout_t.__exit__ (method) -ida_kernwin.disasm_line_t (class) -ida_kernwin.disasm_line_t.__init__ (method) -ida_kernwin.disasm_text_t (class) -ida_kernwin.disasm_text_t.__getitem__ (method) -ida_kernwin.disasm_text_t.__init__ (method) -ida_kernwin.disasm_text_t.__len__ (method) -ida_kernwin.disasm_text_t.__setitem__ (method) -ida_kernwin.disasm_text_t.at (method) -ida_kernwin.disasm_text_t.begin (method) -ida_kernwin.disasm_text_t.capacity (method) -ida_kernwin.disasm_text_t.clear (method) -ida_kernwin.disasm_text_t.empty (method) -ida_kernwin.disasm_text_t.end (method) -ida_kernwin.disasm_text_t.erase (method) -ida_kernwin.disasm_text_t.extract (method) -ida_kernwin.disasm_text_t.grow (method) -ida_kernwin.disasm_text_t.inject (method) -ida_kernwin.disasm_text_t.insert (method) -ida_kernwin.disasm_text_t.pop_back (method) -ida_kernwin.disasm_text_t.push_back (method) -ida_kernwin.disasm_text_t.qclear (method) -ida_kernwin.disasm_text_t.reserve (method) -ida_kernwin.disasm_text_t.resize (method) -ida_kernwin.disasm_text_t.size (method) -ida_kernwin.disasm_text_t.swap (method) -ida_kernwin.disasm_text_t.truncate (method) -ida_kernwin.display_copyright_warning (function) -ida_kernwin.display_widget (function) -ida_kernwin.ea2str (function) -ida_kernwin.ea_viewer_history_push_and_jump (function) -ida_kernwin.enable_chooser_item_attrs (function) -ida_kernwin.enumplace_t (class) -ida_kernwin.enumplace_t.__init__ (method) -ida_kernwin.enumplace_t.bmask (variable) -ida_kernwin.enumplace_t.idx (variable) -ida_kernwin.enumplace_t.serial (variable) -ida_kernwin.enumplace_t.value (variable) -ida_kernwin.error (function) -ida_kernwin.execute_sync (function) -ida_kernwin.execute_ui_requests (function) -ida_kernwin.find_widget (function) -ida_kernwin.formchgcbfa_close (function) -ida_kernwin.formchgcbfa_enable_field (function) -ida_kernwin.formchgcbfa_get_field_value (function) -ida_kernwin.formchgcbfa_get_focused_field (function) -ida_kernwin.formchgcbfa_move_field (function) -ida_kernwin.formchgcbfa_refresh_field (function) -ida_kernwin.formchgcbfa_set_field_value (function) -ida_kernwin.formchgcbfa_set_focused_field (function) -ida_kernwin.formchgcbfa_show_field (function) -ida_kernwin.free_custom_icon (function) -ida_kernwin.gen_disasm_text (function) -ida_kernwin.get_action_checkable (function) -ida_kernwin.get_action_checked (function) -ida_kernwin.get_action_icon (function) -ida_kernwin.get_action_label (function) -ida_kernwin.get_action_shortcut (function) -ida_kernwin.get_action_state (function) -ida_kernwin.get_action_tooltip (function) -ida_kernwin.get_action_visibility (function) -ida_kernwin.get_active_modal_widget (function) -ida_kernwin.get_addon_info (function) -ida_kernwin.get_addon_info_idx (function) -ida_kernwin.get_chooser_data (function) -ida_kernwin.get_chooser_obj (function) -ida_kernwin.get_chooser_rows (function) -ida_kernwin.get_curline (function) -ida_kernwin.get_current_viewer (function) -ida_kernwin.get_current_widget (function) -ida_kernwin.get_cursor (function) -ida_kernwin.get_custom_viewer_curline (function) -ida_kernwin.get_custom_viewer_location (function) -ida_kernwin.get_custom_viewer_place (function) -ida_kernwin.get_custom_viewer_place_xcoord (function) -ida_kernwin.get_ea_viewer_history_info (function) -ida_kernwin.get_hexdump_ea (function) -ida_kernwin.get_highlight (function) -ida_kernwin.get_icon_id_by_name (function) -ida_kernwin.get_kernel_version (function) -ida_kernwin.get_key_code (function) -ida_kernwin.get_navband_ea (function) -ida_kernwin.get_navband_pixel (function) -ida_kernwin.get_opnum (function) -ida_kernwin.get_output_curline (function) -ida_kernwin.get_output_cursor (function) -ida_kernwin.get_output_selected_text (function) -ida_kernwin.get_place_class (function) -ida_kernwin.get_place_class_id (function) -ida_kernwin.get_place_class_template (function) -ida_kernwin.get_registered_actions (function) -ida_kernwin.get_screen_ea (function) -ida_kernwin.get_synced_group (function) -ida_kernwin.get_tab_size (function) -ida_kernwin.get_user_input_event (function) -ida_kernwin.get_user_strlist_options (function) -ida_kernwin.get_view_renderer_type (function) -ida_kernwin.get_viewer_place_type (function) -ida_kernwin.get_viewer_user_data (function) -ida_kernwin.get_widget_title (function) -ida_kernwin.get_widget_type (function) -ida_kernwin.get_window_id (function) -ida_kernwin.hide_wait_box (function) -ida_kernwin.idaplace_t (class) -ida_kernwin.idaplace_t.__init__ (method) -ida_kernwin.idaplace_t.ea (variable) -ida_kernwin.info (function) -ida_kernwin.input_event_keyboard_data_t (class) -ida_kernwin.input_event_keyboard_data_t.__init__ (method) -ida_kernwin.input_event_mouse_data_t (class) -ida_kernwin.input_event_mouse_data_t.__init__ (method) -ida_kernwin.input_event_shortcut_data_t (class) -ida_kernwin.input_event_shortcut_data_t.__init__ (method) -ida_kernwin.input_event_t (class) -ida_kernwin.input_event_t.__init__ (method) -ida_kernwin.input_event_t._source_as_size (method) -ida_kernwin.input_event_t._target_as_size (method) -ida_kernwin.input_event_t.cb (variable) -ida_kernwin.input_event_t.get_source_QEvent (method) -ida_kernwin.input_event_t.get_target_QWidget (method) -ida_kernwin.input_event_t.kind (variable) -ida_kernwin.input_event_t.modifiers (variable) -ida_kernwin.input_event_t.source (variable) -ida_kernwin.input_event_t.target (variable) -ida_kernwin.install_command_interpreter (function) -ida_kernwin.internal_register_place_class (function) -ida_kernwin.is_action_enabled (function) -ida_kernwin.is_chooser_widget (function) -ida_kernwin.is_idaq (function) -ida_kernwin.is_idaview (function) -ida_kernwin.is_msg_inited (function) -ida_kernwin.is_place_class_ea_capable (function) -ida_kernwin.is_refresh_requested (function) -ida_kernwin.jobj_wrapper_t (class) -ida_kernwin.jobj_wrapper_t.__init__ (method) -ida_kernwin.jobj_wrapper_t.get_dict (method) -ida_kernwin.jumpto (function) -ida_kernwin.l_compare2 (function) -ida_kernwin.line_rendering_output_entries_refs_t (class) -ida_kernwin.line_rendering_output_entries_refs_t.__eq__ (method) -ida_kernwin.line_rendering_output_entries_refs_t.__getitem__ (method) -ida_kernwin.line_rendering_output_entries_refs_t.__init__ (method) -ida_kernwin.line_rendering_output_entries_refs_t.__len__ (method) -ida_kernwin.line_rendering_output_entries_refs_t.__ne__ (method) -ida_kernwin.line_rendering_output_entries_refs_t.__setitem__ (method) -ida_kernwin.line_rendering_output_entries_refs_t._del (method) -ida_kernwin.line_rendering_output_entries_refs_t._internal_push_back (method) -ida_kernwin.line_rendering_output_entries_refs_t.add_unique (method) -ida_kernwin.line_rendering_output_entries_refs_t.at (method) -ida_kernwin.line_rendering_output_entries_refs_t.begin (method) -ida_kernwin.line_rendering_output_entries_refs_t.capacity (method) -ida_kernwin.line_rendering_output_entries_refs_t.clear (method) -ida_kernwin.line_rendering_output_entries_refs_t.empty (method) -ida_kernwin.line_rendering_output_entries_refs_t.end (method) -ida_kernwin.line_rendering_output_entries_refs_t.erase (method) -ida_kernwin.line_rendering_output_entries_refs_t.extract (method) -ida_kernwin.line_rendering_output_entries_refs_t.find (method) -ida_kernwin.line_rendering_output_entries_refs_t.has (method) -ida_kernwin.line_rendering_output_entries_refs_t.inject (method) -ida_kernwin.line_rendering_output_entries_refs_t.insert (method) -ida_kernwin.line_rendering_output_entries_refs_t.pop_back (method) -ida_kernwin.line_rendering_output_entries_refs_t.push_back (method) -ida_kernwin.line_rendering_output_entries_refs_t.push_back (method) -ida_kernwin.line_rendering_output_entries_refs_t.qclear (method) -ida_kernwin.line_rendering_output_entries_refs_t.reserve (method) -ida_kernwin.line_rendering_output_entries_refs_t.resize (method) -ida_kernwin.line_rendering_output_entries_refs_t.size (method) -ida_kernwin.line_rendering_output_entries_refs_t.swap (method) -ida_kernwin.line_rendering_output_entries_refs_t.truncate (method) -ida_kernwin.line_rendering_output_entry_t (class) -ida_kernwin.line_rendering_output_entry_t.__eq__ (method) -ida_kernwin.line_rendering_output_entry_t.__init__ (method) -ida_kernwin.line_rendering_output_entry_t.__ne__ (method) -ida_kernwin.line_rendering_output_entry_t.cpx (variable) -ida_kernwin.line_rendering_output_entry_t.flags (variable) -ida_kernwin.line_rendering_output_entry_t.is_bg_color_direct (method) -ida_kernwin.line_rendering_output_entry_t.is_bg_color_empty (method) -ida_kernwin.line_rendering_output_entry_t.is_bg_color_key (method) -ida_kernwin.line_rendering_output_entry_t.nchars (variable) -ida_kernwin.line_section_t (class) -ida_kernwin.line_section_t.__init__ (method) -ida_kernwin.line_section_t.contains (method) -ida_kernwin.line_section_t.is_closed (method) -ida_kernwin.line_section_t.is_open (method) -ida_kernwin.line_section_t.valid (method) -ida_kernwin.linearray_t (class) -ida_kernwin.linearray_t.__init__ (method) -ida_kernwin.linearray_t.beginning (method) -ida_kernwin.linearray_t.down (method) -ida_kernwin.linearray_t.ending (method) -ida_kernwin.linearray_t.get_bg_color (method) -ida_kernwin.linearray_t.get_dlnnum (method) -ida_kernwin.linearray_t.get_linecnt (method) -ida_kernwin.linearray_t.get_pfx_color (method) -ida_kernwin.linearray_t.get_place (method) -ida_kernwin.linearray_t.set_place (method) -ida_kernwin.linearray_t.set_userdata (method) -ida_kernwin.linearray_t.up (method) -ida_kernwin.linearray_t.userdata (method) -ida_kernwin.lines_rendering_input_t (class) -ida_kernwin.lines_rendering_input_t.__init__ (method) -ida_kernwin.lines_rendering_input_t.sections_lines (variable) -ida_kernwin.lines_rendering_input_t.sync_group (variable) -ida_kernwin.lines_rendering_output_t (class) -ida_kernwin.lines_rendering_output_t.__eq__ (method) -ida_kernwin.lines_rendering_output_t.__init__ (method) -ida_kernwin.lines_rendering_output_t.__ne__ (method) -ida_kernwin.lines_rendering_output_t.clear (method) -ida_kernwin.lines_rendering_output_t.swap (method) -ida_kernwin.listing_location_t (class) -ida_kernwin.listing_location_t.__init__ (method) -ida_kernwin.load_custom_icon (function) -ida_kernwin.load_dbg_dbginfo (function) -ida_kernwin.lookup_key_code (function) -ida_kernwin.mbox_internal (variable) -ida_kernwin.msg (function) -ida_kernwin.msg_activated (variable) -ida_kernwin.msg_clear (function) -ida_kernwin.msg_click (variable) -ida_kernwin.msg_closed (variable) -ida_kernwin.msg_dblclick (variable) -ida_kernwin.msg_deactivated (variable) -ida_kernwin.msg_get_lines (function) -ida_kernwin.msg_keydown (variable) -ida_kernwin.msg_save (function) -ida_kernwin.nomem (function) -ida_kernwin.open_bookmarks_window (function) -ida_kernwin.open_bpts_window (function) -ida_kernwin.open_calls_window (function) -ida_kernwin.open_disasm_window (function) -ida_kernwin.open_enums_window (function) -ida_kernwin.open_exports_window (function) -ida_kernwin.open_form (function) -ida_kernwin.open_frame_window (function) -ida_kernwin.open_funcs_window (function) -ida_kernwin.open_hexdump_window (function) -ida_kernwin.open_imports_window (function) -ida_kernwin.open_loctypes_window (function) -ida_kernwin.open_modules_window (function) -ida_kernwin.open_names_window (function) -ida_kernwin.open_navband_window (function) -ida_kernwin.open_notepad_window (function) -ida_kernwin.open_problems_window (function) -ida_kernwin.open_segments_window (function) -ida_kernwin.open_segregs_window (function) -ida_kernwin.open_selectors_window (function) -ida_kernwin.open_signatures_window (function) -ida_kernwin.open_stack_window (function) -ida_kernwin.open_strings_window (function) -ida_kernwin.open_structs_window (function) -ida_kernwin.open_threads_window (function) -ida_kernwin.open_tils_window (function) -ida_kernwin.open_trace_window (function) -ida_kernwin.open_url (function) -ida_kernwin.open_xrefs_window (function) -ida_kernwin.place_t (class) -ida_kernwin.place_t.__init__ (method) -ida_kernwin.place_t._print (method) -ida_kernwin.place_t.adjust (method) -ida_kernwin.place_t.as_enumplace_t (method) -ida_kernwin.place_t.as_idaplace_t (method) -ida_kernwin.place_t.as_simpleline_place_t (method) -ida_kernwin.place_t.as_structplace_t (method) -ida_kernwin.place_t.as_tiplace_t (method) -ida_kernwin.place_t.beginning (method) -ida_kernwin.place_t.clone (method) -ida_kernwin.place_t.compare (method) -ida_kernwin.place_t.compare2 (method) -ida_kernwin.place_t.copyfrom (method) -ida_kernwin.place_t.deserialize (method) -ida_kernwin.place_t.ending (method) -ida_kernwin.place_t.enter (method) -ida_kernwin.place_t.generate (method) -ida_kernwin.place_t.id (method) -ida_kernwin.place_t.leave (method) -ida_kernwin.place_t.lnnum (variable) -ida_kernwin.place_t.makeplace (method) -ida_kernwin.place_t.name (method) -ida_kernwin.place_t.next (method) -ida_kernwin.place_t.prev (method) -ida_kernwin.place_t.rebase (method) -ida_kernwin.place_t.serialize (method) -ida_kernwin.place_t.toea (method) -ida_kernwin.place_t.touval (method) -ida_kernwin.place_t_as_enumplace_t (function) -ida_kernwin.place_t_as_idaplace_t (function) -ida_kernwin.place_t_as_simpleline_place_t (function) -ida_kernwin.place_t_as_structplace_t (function) -ida_kernwin.place_t_as_tiplace_t (function) -ida_kernwin.plgform_close (function) -ida_kernwin.plgform_get_widget (function) -ida_kernwin.plgform_new (function) -ida_kernwin.plgform_show (function) -ida_kernwin.process_ui_action (function) -ida_kernwin.py_chooser_base_t_get_row (function) -ida_kernwin.py_get_ask_form (function) -ida_kernwin.py_get_open_form (function) -ida_kernwin.py_load_custom_icon_data (function) -ida_kernwin.py_load_custom_icon_fn (function) -ida_kernwin.py_register_compiled_form (function) -ida_kernwin.py_unregister_compiled_form (function) -ida_kernwin.pyidag_bind (function) -ida_kernwin.pyidag_unbind (function) -ida_kernwin.pyscv_add_line (function) -ida_kernwin.pyscv_clear_lines (function) -ida_kernwin.pyscv_close (function) -ida_kernwin.pyscv_count (function) -ida_kernwin.pyscv_del_line (function) -ida_kernwin.pyscv_edit_line (function) -ida_kernwin.pyscv_get_current_line (function) -ida_kernwin.pyscv_get_current_word (function) -ida_kernwin.pyscv_get_line (function) -ida_kernwin.pyscv_get_pos (function) -ida_kernwin.pyscv_get_selection (function) -ida_kernwin.pyscv_get_widget (function) -ida_kernwin.pyscv_init (function) -ida_kernwin.pyscv_insert_line (function) -ida_kernwin.pyscv_is_focused (function) -ida_kernwin.pyscv_jumpto (function) -ida_kernwin.pyscv_patch_line (function) -ida_kernwin.pyscv_refresh (function) -ida_kernwin.pyscv_show (function) -ida_kernwin.qcleanline (function) -ida_kernwin.quick_widget_commands_t (class) -ida_kernwin.quick_widget_commands_t.__init__ (method) -ida_kernwin.quick_widget_commands_t._ah_t (class) -ida_kernwin.quick_widget_commands_t._ah_t.__init__ (method) -ida_kernwin.quick_widget_commands_t._ah_t.activate (method) -ida_kernwin.quick_widget_commands_t._ah_t.update (method) -ida_kernwin.quick_widget_commands_t._cmd_t (class) -ida_kernwin.quick_widget_commands_t._cmd_t.__init__ (method) -ida_kernwin.quick_widget_commands_t.add (method) -ida_kernwin.quick_widget_commands_t.populate_popup (method) -ida_kernwin.read_range_selection (function) -ida_kernwin.read_selection (function) -ida_kernwin.refresh_chooser (function) -ida_kernwin.refresh_choosers (function) -ida_kernwin.refresh_custom_viewer (function) -ida_kernwin.refresh_idaview (function) -ida_kernwin.refresh_idaview_anyway (function) -ida_kernwin.refresh_navband (function) -ida_kernwin.register_action (function) -ida_kernwin.register_addon (function) -ida_kernwin.register_and_attach_to_menu (function) -ida_kernwin.register_timer (function) -ida_kernwin.remove_command_interpreter (function) -ida_kernwin.renderer_pos_info_t (class) -ida_kernwin.renderer_pos_info_t.__eq__ (method) -ida_kernwin.renderer_pos_info_t.__init__ (method) -ida_kernwin.renderer_pos_info_t.__ne__ (method) -ida_kernwin.renderer_pos_info_t.cx (variable) -ida_kernwin.renderer_pos_info_t.cy (variable) -ida_kernwin.renderer_pos_info_t.node (variable) -ida_kernwin.renderer_pos_info_t.sx (variable) -ida_kernwin.repaint_custom_viewer (function) -ida_kernwin.replace_wait_box (function) -ida_kernwin.request_refresh (function) -ida_kernwin.restore_database_snapshot (function) -ida_kernwin.section_lines_refs_t (class) -ida_kernwin.section_lines_refs_t.__eq__ (method) -ida_kernwin.section_lines_refs_t.__getitem__ (method) -ida_kernwin.section_lines_refs_t.__init__ (method) -ida_kernwin.section_lines_refs_t.__len__ (method) -ida_kernwin.section_lines_refs_t.__ne__ (method) -ida_kernwin.section_lines_refs_t.__setitem__ (method) -ida_kernwin.section_lines_refs_t._del (method) -ida_kernwin.section_lines_refs_t.add_unique (method) -ida_kernwin.section_lines_refs_t.at (method) -ida_kernwin.section_lines_refs_t.begin (method) -ida_kernwin.section_lines_refs_t.capacity (method) -ida_kernwin.section_lines_refs_t.clear (method) -ida_kernwin.section_lines_refs_t.empty (method) -ida_kernwin.section_lines_refs_t.end (method) -ida_kernwin.section_lines_refs_t.erase (method) -ida_kernwin.section_lines_refs_t.extract (method) -ida_kernwin.section_lines_refs_t.find (method) -ida_kernwin.section_lines_refs_t.has (method) -ida_kernwin.section_lines_refs_t.inject (method) -ida_kernwin.section_lines_refs_t.insert (method) -ida_kernwin.section_lines_refs_t.pop_back (method) -ida_kernwin.section_lines_refs_t.push_back (method) -ida_kernwin.section_lines_refs_t.qclear (method) -ida_kernwin.section_lines_refs_t.reserve (method) -ida_kernwin.section_lines_refs_t.resize (method) -ida_kernwin.section_lines_refs_t.size (method) -ida_kernwin.section_lines_refs_t.swap (method) -ida_kernwin.section_lines_refs_t.truncate (method) -ida_kernwin.sections_lines_refs_t (class) -ida_kernwin.sections_lines_refs_t.__eq__ (method) -ida_kernwin.sections_lines_refs_t.__getitem__ (method) -ida_kernwin.sections_lines_refs_t.__init__ (method) -ida_kernwin.sections_lines_refs_t.__len__ (method) -ida_kernwin.sections_lines_refs_t.__ne__ (method) -ida_kernwin.sections_lines_refs_t.__setitem__ (method) -ida_kernwin.sections_lines_refs_t._del (method) -ida_kernwin.sections_lines_refs_t.add_unique (method) -ida_kernwin.sections_lines_refs_t.at (method) -ida_kernwin.sections_lines_refs_t.begin (method) -ida_kernwin.sections_lines_refs_t.capacity (method) -ida_kernwin.sections_lines_refs_t.clear (method) -ida_kernwin.sections_lines_refs_t.empty (method) -ida_kernwin.sections_lines_refs_t.end (method) -ida_kernwin.sections_lines_refs_t.erase (method) -ida_kernwin.sections_lines_refs_t.extract (method) -ida_kernwin.sections_lines_refs_t.find (method) -ida_kernwin.sections_lines_refs_t.grow (method) -ida_kernwin.sections_lines_refs_t.has (method) -ida_kernwin.sections_lines_refs_t.inject (method) -ida_kernwin.sections_lines_refs_t.insert (method) -ida_kernwin.sections_lines_refs_t.pop_back (method) -ida_kernwin.sections_lines_refs_t.push_back (method) -ida_kernwin.sections_lines_refs_t.qclear (method) -ida_kernwin.sections_lines_refs_t.reserve (method) -ida_kernwin.sections_lines_refs_t.resize (method) -ida_kernwin.sections_lines_refs_t.size (method) -ida_kernwin.sections_lines_refs_t.swap (method) -ida_kernwin.sections_lines_refs_t.truncate (method) -ida_kernwin.set_cancelled (function) -ida_kernwin.set_code_viewer_handler (function) -ida_kernwin.set_code_viewer_is_source (function) -ida_kernwin.set_code_viewer_line_handlers (function) -ida_kernwin.set_code_viewer_lines_alignment (function) -ida_kernwin.set_code_viewer_lines_icon_margin (function) -ida_kernwin.set_code_viewer_lines_radix (function) -ida_kernwin.set_code_viewer_user_data (function) -ida_kernwin.set_custom_viewer_qt_aware (function) -ida_kernwin.set_dock_pos (function) -ida_kernwin.set_highlight (function) -ida_kernwin.set_nav_colorizer (function) -ida_kernwin.set_view_renderer_type (function) -ida_kernwin.show_wait_box (function) -ida_kernwin.simplecustviewer_t (class) -ida_kernwin.simplecustviewer_t.AddLine (method) -ida_kernwin.simplecustviewer_t.ClearLines (method) -ida_kernwin.simplecustviewer_t.Close (method) -ida_kernwin.simplecustviewer_t.Count (method) -ida_kernwin.simplecustviewer_t.Create (method) -ida_kernwin.simplecustviewer_t.DelLine (method) -ida_kernwin.simplecustviewer_t.EditLine (method) -ida_kernwin.simplecustviewer_t.GetCurrentLine (method) -ida_kernwin.simplecustviewer_t.GetCurrentWord (method) -ida_kernwin.simplecustviewer_t.GetLine (method) -ida_kernwin.simplecustviewer_t.GetLineNo (method) -ida_kernwin.simplecustviewer_t.GetPos (method) -ida_kernwin.simplecustviewer_t.GetSelection (method) -ida_kernwin.simplecustviewer_t.GetWidget (method) -ida_kernwin.simplecustviewer_t.InsertLine (method) -ida_kernwin.simplecustviewer_t.IsFocused (method) -ida_kernwin.simplecustviewer_t.Jump (method) -ida_kernwin.simplecustviewer_t.OnPopup (method) -ida_kernwin.simplecustviewer_t.PatchLine (method) -ida_kernwin.simplecustviewer_t.Refresh (method) -ida_kernwin.simplecustviewer_t.RefreshCurrent (method) -ida_kernwin.simplecustviewer_t.Show (method) -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline (class) -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.__init__ (method) -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.populating_widget_popup (method) -ida_kernwin.simplecustviewer_t.__init__ (method) -ida_kernwin.simplecustviewer_t.__make_sl_arg (method) -ida_kernwin.simpleline_place_t (class) -ida_kernwin.simpleline_place_t.__init__ (method) -ida_kernwin.simpleline_place_t.n (variable) -ida_kernwin.simpleline_t (class) -ida_kernwin.simpleline_t.__init__ (method) -ida_kernwin.simpleline_t.bgcolor (variable) -ida_kernwin.simpleline_t.color (variable) -ida_kernwin.simpleline_t.line (variable) -ida_kernwin.str2ea (function) -ida_kernwin.str2ea_ex (function) -ida_kernwin.strarray (function) -ida_kernwin.strarray_t (class) -ida_kernwin.strarray_t.__init__ (method) -ida_kernwin.structplace_t (class) -ida_kernwin.structplace_t.__init__ (method) -ida_kernwin.structplace_t.idx (variable) -ida_kernwin.structplace_t.offset (variable) -ida_kernwin.sync_source_t (class) -ida_kernwin.sync_source_t.__eq__ (method) -ida_kernwin.sync_source_t.__init__ (method) -ida_kernwin.sync_source_t.__ne__ (method) -ida_kernwin.sync_source_t.get_register (method) -ida_kernwin.sync_source_t.get_widget (method) -ida_kernwin.sync_source_t.is_register (method) -ida_kernwin.sync_source_t.is_widget (method) -ida_kernwin.sync_source_vec_t (class) -ida_kernwin.sync_source_vec_t.__eq__ (method) -ida_kernwin.sync_source_vec_t.__getitem__ (method) -ida_kernwin.sync_source_vec_t.__init__ (method) -ida_kernwin.sync_source_vec_t.__len__ (method) -ida_kernwin.sync_source_vec_t.__ne__ (method) -ida_kernwin.sync_source_vec_t.__setitem__ (method) -ida_kernwin.sync_source_vec_t._del (method) -ida_kernwin.sync_source_vec_t.add_unique (method) -ida_kernwin.sync_source_vec_t.at (method) -ida_kernwin.sync_source_vec_t.begin (method) -ida_kernwin.sync_source_vec_t.capacity (method) -ida_kernwin.sync_source_vec_t.clear (method) -ida_kernwin.sync_source_vec_t.empty (method) -ida_kernwin.sync_source_vec_t.end (method) -ida_kernwin.sync_source_vec_t.erase (method) -ida_kernwin.sync_source_vec_t.extract (method) -ida_kernwin.sync_source_vec_t.find (method) -ida_kernwin.sync_source_vec_t.has (method) -ida_kernwin.sync_source_vec_t.inject (method) -ida_kernwin.sync_source_vec_t.insert (method) -ida_kernwin.sync_source_vec_t.pop_back (method) -ida_kernwin.sync_source_vec_t.push_back (method) -ida_kernwin.sync_source_vec_t.qclear (method) -ida_kernwin.sync_source_vec_t.reserve (method) -ida_kernwin.sync_source_vec_t.size (method) -ida_kernwin.sync_source_vec_t.swap (method) -ida_kernwin.sync_source_vec_t.truncate (method) -ida_kernwin.sync_sources (function) -ida_kernwin.synced_group_t (class) -ida_kernwin.synced_group_t.__init__ (method) -ida_kernwin.synced_group_t.has (method) -ida_kernwin.synced_group_t.has_register (method) -ida_kernwin.synced_group_t.has_widget (method) -ida_kernwin.tagged_line_section_t (class) -ida_kernwin.tagged_line_section_t.__init__ (method) -ida_kernwin.tagged_line_section_t.substr (method) -ida_kernwin.tagged_line_section_t.valid (method) -ida_kernwin.tagged_line_sections_t (class) -ida_kernwin.tagged_line_sections_t.__init__ (method) -ida_kernwin.tagged_line_sections_t.nearest_at (method) -ida_kernwin.tagged_line_sections_t.sections_at (method) -ida_kernwin.take_database_snapshot (function) -ida_kernwin.text_t (class) -ida_kernwin.text_t.__getitem__ (method) -ida_kernwin.text_t.__init__ (method) -ida_kernwin.text_t.__len__ (method) -ida_kernwin.text_t.__setitem__ (method) -ida_kernwin.text_t.at (method) -ida_kernwin.text_t.begin (method) -ida_kernwin.text_t.capacity (method) -ida_kernwin.text_t.clear (method) -ida_kernwin.text_t.empty (method) -ida_kernwin.text_t.end (method) -ida_kernwin.text_t.erase (method) -ida_kernwin.text_t.extract (method) -ida_kernwin.text_t.grow (method) -ida_kernwin.text_t.inject (method) -ida_kernwin.text_t.insert (method) -ida_kernwin.text_t.pop_back (method) -ida_kernwin.text_t.push_back (method) -ida_kernwin.text_t.qclear (method) -ida_kernwin.text_t.reserve (method) -ida_kernwin.text_t.resize (method) -ida_kernwin.text_t.size (method) -ida_kernwin.text_t.swap (method) -ida_kernwin.text_t.truncate (method) -ida_kernwin.textctrl_info_t (class) -ida_kernwin.textctrl_info_t.TXTF_ACCEPTTABS (variable) -ida_kernwin.textctrl_info_t.TXTF_AUTOINDENT (variable) -ida_kernwin.textctrl_info_t.TXTF_FIXEDFONT (variable) -ida_kernwin.textctrl_info_t.TXTF_MODIFIED (variable) -ida_kernwin.textctrl_info_t.TXTF_READONLY (variable) -ida_kernwin.textctrl_info_t.TXTF_SELECTED (variable) -ida_kernwin.textctrl_info_t.__get_flags__ (method) -ida_kernwin.textctrl_info_t.__get_tabsize__ (method) -ida_kernwin.textctrl_info_t.__get_text (method) -ida_kernwin.textctrl_info_t.__init__ (method) -ida_kernwin.textctrl_info_t.__set_flags__ (method) -ida_kernwin.textctrl_info_t.__set_tabsize__ (method) -ida_kernwin.textctrl_info_t.__set_text (method) -ida_kernwin.textctrl_info_t._create_clink (method) -ida_kernwin.textctrl_info_t._del_clink (method) -ida_kernwin.textctrl_info_t._get_clink_ptr (method) -ida_kernwin.textctrl_info_t.assign (method) -ida_kernwin.textctrl_info_t.flags (variable) -ida_kernwin.textctrl_info_t.tabsize (variable) -ida_kernwin.textctrl_info_t.text (variable) -ida_kernwin.textctrl_info_t.value (variable) -ida_kernwin.textctrl_info_t_assign (function) -ida_kernwin.textctrl_info_t_create (function) -ida_kernwin.textctrl_info_t_destroy (function) -ida_kernwin.textctrl_info_t_get_clink (function) -ida_kernwin.textctrl_info_t_get_clink_ptr (function) -ida_kernwin.textctrl_info_t_get_flags (function) -ida_kernwin.textctrl_info_t_get_tabsize (function) -ida_kernwin.textctrl_info_t_get_text (function) -ida_kernwin.textctrl_info_t_set_flags (function) -ida_kernwin.textctrl_info_t_set_tabsize (function) -ida_kernwin.textctrl_info_t_set_text (function) -ida_kernwin.tif_path_t (class) -ida_kernwin.tif_path_t.__init__ (method) -ida_kernwin.tif_path_t.get_index (method) -ida_kernwin.tif_path_t.get_path (method) -ida_kernwin.tif_path_t.is_footer (method) -ida_kernwin.tif_path_t.is_header (method) -ida_kernwin.tif_path_t.is_index (method) -ida_kernwin.tif_path_t.reset (method) -ida_kernwin.tif_path_t.set_footer (method) -ida_kernwin.tif_path_t.set_header (method) -ida_kernwin.tif_path_t.set_index (method) -ida_kernwin.tif_path_t.set_path (method) -ida_kernwin.til_type_ref_t (class) -ida_kernwin.til_type_ref_t.__init__ (method) -ida_kernwin.til_type_ref_t.reset (method) -ida_kernwin.tiplace_t (class) -ida_kernwin.tiplace_t.__init__ (method) -ida_kernwin.tiplace_t.calc_udm_index (method) -ida_kernwin.tiplace_t.calc_udm_offset (method) -ida_kernwin.tiplace_t.get_index (method) -ida_kernwin.tiplace_t.get_path (method) -ida_kernwin.tiplace_t.is_footer (method) -ida_kernwin.tiplace_t.is_header (method) -ida_kernwin.tiplace_t.is_index (method) -ida_kernwin.tiplace_t.reset (method) -ida_kernwin.tiplace_t.set_footer (method) -ida_kernwin.tiplace_t.set_header (method) -ida_kernwin.tiplace_t.set_index (method) -ida_kernwin.tiplace_t.set_path (method) -ida_kernwin.tiplace_t.valid_ord (method) -ida_kernwin.twinline_t (class) -ida_kernwin.twinline_t.__init__ (method) -ida_kernwin.twinline_t.at (variable) -ida_kernwin.twinline_t.bg_color (variable) -ida_kernwin.twinline_t.is_default (variable) -ida_kernwin.twinline_t.line (variable) -ida_kernwin.twinline_t.prefix_color (variable) -ida_kernwin.twinpos_t (class) -ida_kernwin.twinpos_t.__init__ (method) -ida_kernwin.twinpos_t.at (variable) -ida_kernwin.twinpos_t.place (method) -ida_kernwin.twinpos_t.place_as_enumplace_t (method) -ida_kernwin.twinpos_t.place_as_idaplace_t (method) -ida_kernwin.twinpos_t.place_as_simpleline_place_t (method) -ida_kernwin.twinpos_t.place_as_structplace_t (method) -ida_kernwin.twinpos_t.place_as_tiplace_t (method) -ida_kernwin.twinpos_t.x (variable) -ida_kernwin.ui_load_new_file (function) -ida_kernwin.ui_requests_t (class) -ida_kernwin.ui_requests_t.__init__ (method) -ida_kernwin.ui_run_debugger (function) -ida_kernwin.unmark_selection (function) -ida_kernwin.unregister_action (function) -ida_kernwin.unregister_timer (function) -ida_kernwin.update_action_checkable (function) -ida_kernwin.update_action_checked (function) -ida_kernwin.update_action_icon (function) -ida_kernwin.update_action_label (function) -ida_kernwin.update_action_shortcut (function) -ida_kernwin.update_action_state (function) -ida_kernwin.update_action_tooltip (function) -ida_kernwin.update_action_visibility (function) -ida_kernwin.user_cancelled (function) -ida_kernwin.view_activated (variable) -ida_kernwin.view_click (variable) -ida_kernwin.view_close (variable) -ida_kernwin.view_created (variable) -ida_kernwin.view_curpos (variable) -ida_kernwin.view_dblclick (variable) -ida_kernwin.view_deactivated (variable) -ida_kernwin.view_keydown (variable) -ida_kernwin.view_loc_changed (variable) -ida_kernwin.view_mouse_event_location_t (class) -ida_kernwin.view_mouse_event_location_t.__init__ (method) -ida_kernwin.view_mouse_event_location_t.ea (variable) -ida_kernwin.view_mouse_event_location_t.item (variable) -ida_kernwin.view_mouse_event_t (class) -ida_kernwin.view_mouse_event_t.__init__ (method) -ida_kernwin.view_mouse_event_t.button (variable) -ida_kernwin.view_mouse_event_t.location (variable) -ida_kernwin.view_mouse_event_t.renderer_pos (variable) -ida_kernwin.view_mouse_event_t.rtype (variable) -ida_kernwin.view_mouse_event_t.state (variable) -ida_kernwin.view_mouse_event_t.x (variable) -ida_kernwin.view_mouse_event_t.y (variable) -ida_kernwin.view_mouse_moved (variable) -ida_kernwin.view_mouse_over (variable) -ida_kernwin.view_switched (variable) -ida_kernwin.warning (function) -ida_lines (module) -ida_lines.COLOR_ADDR (variable) -ida_lines.COLOR_ADDR_SIZE (variable) -ida_lines.COLOR_ALTOP (variable) -ida_lines.COLOR_ASMDIR (variable) -ida_lines.COLOR_AUTOCMT (variable) -ida_lines.COLOR_BG_MAX (variable) -ida_lines.COLOR_BINPREF (variable) -ida_lines.COLOR_CHAR (variable) -ida_lines.COLOR_CNAME (variable) -ida_lines.COLOR_CODE (variable) -ida_lines.COLOR_CODNAME (variable) -ida_lines.COLOR_COLLAPSED (variable) -ida_lines.COLOR_CREF (variable) -ida_lines.COLOR_CREFTAIL (variable) -ida_lines.COLOR_CURITEM (variable) -ida_lines.COLOR_CURLINE (variable) -ida_lines.COLOR_DATA (variable) -ida_lines.COLOR_DATNAME (variable) -ida_lines.COLOR_DCHAR (variable) -ida_lines.COLOR_DEFAULT (variable) -ida_lines.COLOR_DEMNAME (variable) -ida_lines.COLOR_DNAME (variable) -ida_lines.COLOR_DNUM (variable) -ida_lines.COLOR_DREF (variable) -ida_lines.COLOR_DREFTAIL (variable) -ida_lines.COLOR_DSTR (variable) -ida_lines.COLOR_ERROR (variable) -ida_lines.COLOR_ESC (variable) -ida_lines.COLOR_EXTERN (variable) -ida_lines.COLOR_EXTRA (variable) -ida_lines.COLOR_FG_MAX (variable) -ida_lines.COLOR_HIDLINE (variable) -ida_lines.COLOR_HIDNAME (variable) -ida_lines.COLOR_IMPNAME (variable) -ida_lines.COLOR_INSN (variable) -ida_lines.COLOR_INV (variable) -ida_lines.COLOR_KEYWORD (variable) -ida_lines.COLOR_LIBFUNC (variable) -ida_lines.COLOR_LIBNAME (variable) -ida_lines.COLOR_LOCNAME (variable) -ida_lines.COLOR_LUMFUNC (variable) -ida_lines.COLOR_LUMINA (variable) -ida_lines.COLOR_MACRO (variable) -ida_lines.COLOR_NUMBER (variable) -ida_lines.COLOR_OFF (variable) -ida_lines.COLOR_ON (variable) -ida_lines.COLOR_OPND1 (variable) -ida_lines.COLOR_OPND2 (variable) -ida_lines.COLOR_OPND3 (variable) -ida_lines.COLOR_OPND4 (variable) -ida_lines.COLOR_OPND5 (variable) -ida_lines.COLOR_OPND6 (variable) -ida_lines.COLOR_OPND7 (variable) -ida_lines.COLOR_OPND8 (variable) -ida_lines.COLOR_PREFIX (variable) -ida_lines.COLOR_REG (variable) -ida_lines.COLOR_REGCMT (variable) -ida_lines.COLOR_REGFUNC (variable) -ida_lines.COLOR_RESERVED1 (variable) -ida_lines.COLOR_RPTCMT (variable) -ida_lines.COLOR_SEGNAME (variable) -ida_lines.COLOR_SELECTED (variable) -ida_lines.COLOR_STRING (variable) -ida_lines.COLOR_SYMBOL (variable) -ida_lines.COLOR_UNAME (variable) -ida_lines.COLOR_UNKNAME (variable) -ida_lines.COLOR_UNKNOWN (variable) -ida_lines.COLOR_VOIDOP (variable) -ida_lines.COLSTR (function) -ida_lines.SCOLOR_ADDR (variable) -ida_lines.SCOLOR_ALTOP (variable) -ida_lines.SCOLOR_ASMDIR (variable) -ida_lines.SCOLOR_AUTOCMT (variable) -ida_lines.SCOLOR_BINPREF (variable) -ida_lines.SCOLOR_CHAR (variable) -ida_lines.SCOLOR_CNAME (variable) -ida_lines.SCOLOR_CODNAME (variable) -ida_lines.SCOLOR_COLLAPSED (variable) -ida_lines.SCOLOR_CREF (variable) -ida_lines.SCOLOR_CREFTAIL (variable) -ida_lines.SCOLOR_DATNAME (variable) -ida_lines.SCOLOR_DCHAR (variable) -ida_lines.SCOLOR_DEFAULT (variable) -ida_lines.SCOLOR_DEMNAME (variable) -ida_lines.SCOLOR_DNAME (variable) -ida_lines.SCOLOR_DNUM (variable) -ida_lines.SCOLOR_DREF (variable) -ida_lines.SCOLOR_DREFTAIL (variable) -ida_lines.SCOLOR_DSTR (variable) -ida_lines.SCOLOR_ERROR (variable) -ida_lines.SCOLOR_ESC (variable) -ida_lines.SCOLOR_EXTRA (variable) -ida_lines.SCOLOR_HIDNAME (variable) -ida_lines.SCOLOR_IMPNAME (variable) -ida_lines.SCOLOR_INSN (variable) -ida_lines.SCOLOR_INV (variable) -ida_lines.SCOLOR_KEYWORD (variable) -ida_lines.SCOLOR_LIBNAME (variable) -ida_lines.SCOLOR_LOCNAME (variable) -ida_lines.SCOLOR_MACRO (variable) -ida_lines.SCOLOR_NUMBER (variable) -ida_lines.SCOLOR_OFF (variable) -ida_lines.SCOLOR_ON (variable) -ida_lines.SCOLOR_PREFIX (variable) -ida_lines.SCOLOR_REG (variable) -ida_lines.SCOLOR_REGCMT (variable) -ida_lines.SCOLOR_RPTCMT (variable) -ida_lines.SCOLOR_SEGNAME (variable) -ida_lines.SCOLOR_STRING (variable) -ida_lines.SCOLOR_SYMBOL (variable) -ida_lines.SCOLOR_UNAME (variable) -ida_lines.SCOLOR_UNKNAME (variable) -ida_lines.SCOLOR_VOIDOP (variable) -ida_lines.add_extra_cmt (function) -ida_lines.add_extra_line (function) -ida_lines.add_pgm_cmt (function) -ida_lines.add_sourcefile (function) -ida_lines.calc_bg_color (function) -ida_lines.calc_prefix_color (function) -ida_lines.create_encoding_helper (function) -ida_lines.del_extra_cmt (function) -ida_lines.del_sourcefile (function) -ida_lines.delete_extra_cmts (function) -ida_lines.generate_disasm_line (function) -ida_lines.generate_disassembly (function) -ida_lines.get_extra_cmt (function) -ida_lines.get_first_free_extra_cmtidx (function) -ida_lines.get_sourcefile (function) -ida_lines.install_user_defined_prefix (function) -ida_lines.requires_color_esc (function) -ida_lines.set_user_defined_prefix (function) -ida_lines.tag_addr (function) -ida_lines.tag_advance (function) -ida_lines.tag_remove (function) -ida_lines.tag_skipcode (function) -ida_lines.tag_skipcodes (function) -ida_lines.tag_strlen (function) -ida_lines.update_extra_cmt (function) -ida_lines.user_defined_prefix_t (class) -ida_lines.user_defined_prefix_t.__disown__ (method) -ida_lines.user_defined_prefix_t.__init__ (method) -ida_lines.user_defined_prefix_t.get_user_defined_prefix (method) -ida_loader (module) -ida_loader.ACCEPT_ARCHIVE (variable) -ida_loader.ACCEPT_CONTINUE (variable) -ida_loader.ACCEPT_FIRST (variable) -ida_loader.DBFL_BAK (variable) -ida_loader.DBFL_COMP (variable) -ida_loader.DBFL_KILL (variable) -ida_loader.DBFL_TEMP (variable) -ida_loader.FILEREG_NOTPATCHABLE (variable) -ida_loader.FILEREG_PATCHABLE (variable) -ida_loader.GENFLG_ASMINC (variable) -ida_loader.GENFLG_ASMTYPE (variable) -ida_loader.GENFLG_GENHTML (variable) -ida_loader.LDRF_RELOAD (variable) -ida_loader.LDRF_REQ_PROC (variable) -ida_loader.MAX_DATABASE_DESCRIPTION (variable) -ida_loader.NEF_CODE (variable) -ida_loader.NEF_FILL (variable) -ida_loader.NEF_FIRST (variable) -ida_loader.NEF_FLAT (variable) -ida_loader.NEF_IMPS (variable) -ida_loader.NEF_LALL (variable) -ida_loader.NEF_LOPT (variable) -ida_loader.NEF_MAN (variable) -ida_loader.NEF_MINI (variable) -ida_loader.NEF_NAME (variable) -ida_loader.NEF_RELOAD (variable) -ida_loader.NEF_RSCS (variable) -ida_loader.NEF_SEGS (variable) -ida_loader.OFILE_ASM (variable) -ida_loader.OFILE_DIF (variable) -ida_loader.OFILE_EXE (variable) -ida_loader.OFILE_IDC (variable) -ida_loader.OFILE_LST (variable) -ida_loader.OFILE_MAP (variable) -ida_loader.PATH_TYPE_CMD (variable) -ida_loader.PATH_TYPE_ID0 (variable) -ida_loader.PATH_TYPE_IDB (variable) -ida_loader.PLUGIN_DLL (variable) -ida_loader.SSF_AUTOMATIC (variable) -ida_loader.SSUF_DESC (variable) -ida_loader.SSUF_FLAGS (variable) -ida_loader.SSUF_PATH (variable) -ida_loader.base2file (function) -ida_loader.build_snapshot_tree (function) -ida_loader.clr_database_flag (function) -ida_loader.extract_module_from_archive (function) -ida_loader.file2base (function) -ida_loader.find_plugin (function) -ida_loader.flush_buffers (function) -ida_loader.gen_exe_file (function) -ida_loader.gen_file (function) -ida_loader.get_basic_file_type (function) -ida_loader.get_elf_debug_file_directory (function) -ida_loader.get_file_type_name (function) -ida_loader.get_fileregion_ea (function) -ida_loader.get_fileregion_offset (function) -ida_loader.get_path (function) -ida_loader.get_plugin_options (function) -ida_loader.idp_desc_t (class) -ida_loader.idp_desc_t.__init__ (method) -ida_loader.idp_desc_t.checked (variable) -ida_loader.idp_desc_t.family (variable) -ida_loader.idp_desc_t.is_script (variable) -ida_loader.idp_desc_t.mtime (variable) -ida_loader.idp_desc_t.names (variable) -ida_loader.idp_desc_t.path (variable) -ida_loader.idp_name_t (class) -ida_loader.idp_name_t.__init__ (method) -ida_loader.idp_name_t.hidden (variable) -ida_loader.idp_name_t.lname (variable) -ida_loader.idp_name_t.sname (variable) -ida_loader.is_database_flag (function) -ida_loader.is_trusted_idb (function) -ida_loader.load_and_run_plugin (function) -ida_loader.load_binary_file (function) -ida_loader.load_ids_module (function) -ida_loader.load_plugin (function) -ida_loader.loader_t (class) -ida_loader.loader_t.__init__ (method) -ida_loader.loader_t.flags (variable) -ida_loader.loader_t.version (variable) -ida_loader.mem2base (function) -ida_loader.plugin_info_t (class) -ida_loader.plugin_info_t.__init__ (method) -ida_loader.plugin_info_t.arg (variable) -ida_loader.plugin_info_t.comment (variable) -ida_loader.plugin_info_t.entry (variable) -ida_loader.plugin_info_t.flags (variable) -ida_loader.plugin_info_t.hotkey (variable) -ida_loader.plugin_info_t.name (variable) -ida_loader.plugin_info_t.next (variable) -ida_loader.plugin_info_t.org_hotkey (variable) -ida_loader.plugin_info_t.org_name (variable) -ida_loader.plugin_info_t.path (variable) -ida_loader.process_archive (function) -ida_loader.qvector_snapshotvec_t (class) -ida_loader.qvector_snapshotvec_t.__eq__ (method) -ida_loader.qvector_snapshotvec_t.__getitem__ (method) -ida_loader.qvector_snapshotvec_t.__init__ (method) -ida_loader.qvector_snapshotvec_t.__len__ (method) -ida_loader.qvector_snapshotvec_t.__ne__ (method) -ida_loader.qvector_snapshotvec_t.__setitem__ (method) -ida_loader.qvector_snapshotvec_t._del (method) -ida_loader.qvector_snapshotvec_t.add_unique (method) -ida_loader.qvector_snapshotvec_t.at (method) -ida_loader.qvector_snapshotvec_t.begin (method) -ida_loader.qvector_snapshotvec_t.capacity (method) -ida_loader.qvector_snapshotvec_t.clear (method) -ida_loader.qvector_snapshotvec_t.empty (method) -ida_loader.qvector_snapshotvec_t.end (method) -ida_loader.qvector_snapshotvec_t.erase (method) -ida_loader.qvector_snapshotvec_t.extract (method) -ida_loader.qvector_snapshotvec_t.find (method) -ida_loader.qvector_snapshotvec_t.has (method) -ida_loader.qvector_snapshotvec_t.inject (method) -ida_loader.qvector_snapshotvec_t.insert (method) -ida_loader.qvector_snapshotvec_t.pop_back (method) -ida_loader.qvector_snapshotvec_t.push_back (method) -ida_loader.qvector_snapshotvec_t.qclear (method) -ida_loader.qvector_snapshotvec_t.reserve (method) -ida_loader.qvector_snapshotvec_t.resize (method) -ida_loader.qvector_snapshotvec_t.size (method) -ida_loader.qvector_snapshotvec_t.swap (method) -ida_loader.qvector_snapshotvec_t.truncate (method) -ida_loader.reload_file (function) -ida_loader.run_plugin (function) -ida_loader.save_database (function) -ida_loader.set_database_flag (function) -ida_loader.set_import_name (function) -ida_loader.set_import_ordinal (function) -ida_loader.set_path (function) -ida_loader.snapshot_t (class) -ida_loader.snapshot_t.__eq__ (method) -ida_loader.snapshot_t.__ge__ (method) -ida_loader.snapshot_t.__gt__ (method) -ida_loader.snapshot_t.__init__ (method) -ida_loader.snapshot_t.__le__ (method) -ida_loader.snapshot_t.__lt__ (method) -ida_loader.snapshot_t.__ne__ (method) -ida_loader.snapshot_t.children (variable) -ida_loader.snapshot_t.clear (method) -ida_loader.snapshot_t.desc (variable) -ida_loader.snapshot_t.filename (variable) -ida_loader.snapshot_t.flags (variable) -ida_loader.snapshot_t.id (variable) -ida_lumina (module) -ida_lumina.AMDF_FORCE (variable) -ida_lumina.AMDF_UPGRADE (variable) -ida_lumina.apply_metadata (function) -ida_lumina.backup_metadata (function) -ida_lumina.calc_func_metadata (function) -ida_lumina.diff_metadata (function) -ida_lumina.extra_cmt_t (class) -ida_lumina.extra_cmt_t.__init__ (method) -ida_lumina.extra_cmts_t (class) -ida_lumina.extra_cmts_t.__getitem__ (method) -ida_lumina.extra_cmts_t.__init__ (method) -ida_lumina.extra_cmts_t.__len__ (method) -ida_lumina.extra_cmts_t.__setitem__ (method) -ida_lumina.extra_cmts_t.at (method) -ida_lumina.extra_cmts_t.begin (method) -ida_lumina.extra_cmts_t.capacity (method) -ida_lumina.extra_cmts_t.clear (method) -ida_lumina.extra_cmts_t.empty (method) -ida_lumina.extra_cmts_t.end (method) -ida_lumina.extra_cmts_t.erase (method) -ida_lumina.extra_cmts_t.extract (method) -ida_lumina.extra_cmts_t.grow (method) -ida_lumina.extra_cmts_t.inject (method) -ida_lumina.extra_cmts_t.insert (method) -ida_lumina.extra_cmts_t.pop_back (method) -ida_lumina.extra_cmts_t.push_back (method) -ida_lumina.extra_cmts_t.qclear (method) -ida_lumina.extra_cmts_t.reserve (method) -ida_lumina.extra_cmts_t.resize (method) -ida_lumina.extra_cmts_t.size (method) -ida_lumina.extra_cmts_t.swap (method) -ida_lumina.extra_cmts_t.truncate (method) -ida_lumina.extract_extra_cmts_from_metadata (function) -ida_lumina.extract_frame_desc_from_metadata (function) -ida_lumina.extract_insn_cmts_from_metadata (function) -ida_lumina.extract_insn_opreprs_from_metadata (function) -ida_lumina.extract_insn_opreprs_from_metadata_ex (function) -ida_lumina.extract_type_from_metadata (function) -ida_lumina.extract_user_stkpnts_from_metadata (function) -ida_lumina.frame_desc_t (class) -ida_lumina.frame_desc_t.__init__ (method) -ida_lumina.frame_mem_t (class) -ida_lumina.frame_mem_t.__init__ (method) -ida_lumina.frame_mems_t (class) -ida_lumina.frame_mems_t.__getitem__ (method) -ida_lumina.frame_mems_t.__init__ (method) -ida_lumina.frame_mems_t.__len__ (method) -ida_lumina.frame_mems_t.__setitem__ (method) -ida_lumina.frame_mems_t.at (method) -ida_lumina.frame_mems_t.begin (method) -ida_lumina.frame_mems_t.capacity (method) -ida_lumina.frame_mems_t.clear (method) -ida_lumina.frame_mems_t.empty (method) -ida_lumina.frame_mems_t.end (method) -ida_lumina.frame_mems_t.erase (method) -ida_lumina.frame_mems_t.extract (method) -ida_lumina.frame_mems_t.grow (method) -ida_lumina.frame_mems_t.inject (method) -ida_lumina.frame_mems_t.insert (method) -ida_lumina.frame_mems_t.pop_back (method) -ida_lumina.frame_mems_t.push_back (method) -ida_lumina.frame_mems_t.qclear (method) -ida_lumina.frame_mems_t.reserve (method) -ida_lumina.frame_mems_t.resize (method) -ida_lumina.frame_mems_t.size (method) -ida_lumina.frame_mems_t.swap (method) -ida_lumina.frame_mems_t.truncate (method) -ida_lumina.func_info_and_frequency_t (class) -ida_lumina.func_info_and_frequency_t.__init__ (method) -ida_lumina.func_info_and_frequency_vec_t (class) -ida_lumina.func_info_and_frequency_vec_t.__getitem__ (method) -ida_lumina.func_info_and_frequency_vec_t.__init__ (method) -ida_lumina.func_info_and_frequency_vec_t.__len__ (method) -ida_lumina.func_info_and_frequency_vec_t.__setitem__ (method) -ida_lumina.func_info_and_frequency_vec_t.at (method) -ida_lumina.func_info_and_frequency_vec_t.begin (method) -ida_lumina.func_info_and_frequency_vec_t.capacity (method) -ida_lumina.func_info_and_frequency_vec_t.clear (method) -ida_lumina.func_info_and_frequency_vec_t.empty (method) -ida_lumina.func_info_and_frequency_vec_t.end (method) -ida_lumina.func_info_and_frequency_vec_t.erase (method) -ida_lumina.func_info_and_frequency_vec_t.extract (method) -ida_lumina.func_info_and_frequency_vec_t.grow (method) -ida_lumina.func_info_and_frequency_vec_t.inject (method) -ida_lumina.func_info_and_frequency_vec_t.insert (method) -ida_lumina.func_info_and_frequency_vec_t.pop_back (method) -ida_lumina.func_info_and_frequency_vec_t.push_back (method) -ida_lumina.func_info_and_frequency_vec_t.qclear (method) -ida_lumina.func_info_and_frequency_vec_t.reserve (method) -ida_lumina.func_info_and_frequency_vec_t.resize (method) -ida_lumina.func_info_and_frequency_vec_t.size (method) -ida_lumina.func_info_and_frequency_vec_t.swap (method) -ida_lumina.func_info_and_frequency_vec_t.truncate (method) -ida_lumina.func_info_and_pattern_t (class) -ida_lumina.func_info_and_pattern_t.__init__ (method) -ida_lumina.func_info_and_pattern_vec_t (class) -ida_lumina.func_info_and_pattern_vec_t.__getitem__ (method) -ida_lumina.func_info_and_pattern_vec_t.__init__ (method) -ida_lumina.func_info_and_pattern_vec_t.__len__ (method) -ida_lumina.func_info_and_pattern_vec_t.__setitem__ (method) -ida_lumina.func_info_and_pattern_vec_t.at (method) -ida_lumina.func_info_and_pattern_vec_t.begin (method) -ida_lumina.func_info_and_pattern_vec_t.capacity (method) -ida_lumina.func_info_and_pattern_vec_t.clear (method) -ida_lumina.func_info_and_pattern_vec_t.empty (method) -ida_lumina.func_info_and_pattern_vec_t.end (method) -ida_lumina.func_info_and_pattern_vec_t.erase (method) -ida_lumina.func_info_and_pattern_vec_t.extract (method) -ida_lumina.func_info_and_pattern_vec_t.grow (method) -ida_lumina.func_info_and_pattern_vec_t.inject (method) -ida_lumina.func_info_and_pattern_vec_t.insert (method) -ida_lumina.func_info_and_pattern_vec_t.pop_back (method) -ida_lumina.func_info_and_pattern_vec_t.push_back (method) -ida_lumina.func_info_and_pattern_vec_t.qclear (method) -ida_lumina.func_info_and_pattern_vec_t.reserve (method) -ida_lumina.func_info_and_pattern_vec_t.resize (method) -ida_lumina.func_info_and_pattern_vec_t.size (method) -ida_lumina.func_info_and_pattern_vec_t.swap (method) -ida_lumina.func_info_and_pattern_vec_t.truncate (method) -ida_lumina.func_info_base_t (class) -ida_lumina.func_info_base_t.__init__ (method) -ida_lumina.func_info_pattern_and_frequency_t (class) -ida_lumina.func_info_pattern_and_frequency_t.__init__ (method) -ida_lumina.func_info_pattern_and_frequency_vec_t (class) -ida_lumina.func_info_pattern_and_frequency_vec_t.__getitem__ (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.__init__ (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.__len__ (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.__setitem__ (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.at (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.begin (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.capacity (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.clear (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.empty (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.end (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.erase (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.extract (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.grow (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.inject (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.insert (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.pop_back (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.push_back (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.qclear (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.reserve (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.resize (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.size (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.swap (method) -ida_lumina.func_info_pattern_and_frequency_vec_t.truncate (method) -ida_lumina.func_info_t (class) -ida_lumina.func_info_t.__init__ (method) -ida_lumina.func_info_vec_t (class) -ida_lumina.func_info_vec_t.__getitem__ (method) -ida_lumina.func_info_vec_t.__init__ (method) -ida_lumina.func_info_vec_t.__len__ (method) -ida_lumina.func_info_vec_t.__setitem__ (method) -ida_lumina.func_info_vec_t.at (method) -ida_lumina.func_info_vec_t.begin (method) -ida_lumina.func_info_vec_t.capacity (method) -ida_lumina.func_info_vec_t.clear (method) -ida_lumina.func_info_vec_t.empty (method) -ida_lumina.func_info_vec_t.end (method) -ida_lumina.func_info_vec_t.erase (method) -ida_lumina.func_info_vec_t.extract (method) -ida_lumina.func_info_vec_t.grow (method) -ida_lumina.func_info_vec_t.inject (method) -ida_lumina.func_info_vec_t.insert (method) -ida_lumina.func_info_vec_t.pop_back (method) -ida_lumina.func_info_vec_t.push_back (method) -ida_lumina.func_info_vec_t.qclear (method) -ida_lumina.func_info_vec_t.reserve (method) -ida_lumina.func_info_vec_t.resize (method) -ida_lumina.func_info_vec_t.size (method) -ida_lumina.func_info_vec_t.swap (method) -ida_lumina.func_info_vec_t.truncate (method) -ida_lumina.func_md_diff_handler_t (class) -ida_lumina.func_md_diff_handler_t.__disown__ (method) -ida_lumina.func_md_diff_handler_t.__init__ (method) -ida_lumina.func_md_diff_handler_t.on_comment_changed (method) -ida_lumina.func_md_diff_handler_t.on_extra_comment_changed (method) -ida_lumina.func_md_diff_handler_t.on_frame_member_changed (method) -ida_lumina.func_md_diff_handler_t.on_function_comment_changed (method) -ida_lumina.func_md_diff_handler_t.on_insn_ops_repr_changed (method) -ida_lumina.func_md_diff_handler_t.on_name_changed (method) -ida_lumina.func_md_diff_handler_t.on_proto_changed (method) -ida_lumina.func_md_diff_handler_t.on_score_changed (method) -ida_lumina.func_md_diff_handler_t.on_user_stkpnt_changed (method) -ida_lumina.get_lumina_rpc_packet_t_index_from_base (function) -ida_lumina.get_server_connection (function) -ida_lumina.get_server_connection2 (function) -ida_lumina.has_backup_metadata (function) -ida_lumina.input_file_t (class) -ida_lumina.input_file_t.__init__ (method) -ida_lumina.insn_cmt_t (class) -ida_lumina.insn_cmt_t.__init__ (method) -ida_lumina.insn_cmts_t (class) -ida_lumina.insn_cmts_t.__getitem__ (method) -ida_lumina.insn_cmts_t.__init__ (method) -ida_lumina.insn_cmts_t.__len__ (method) -ida_lumina.insn_cmts_t.__setitem__ (method) -ida_lumina.insn_cmts_t.at (method) -ida_lumina.insn_cmts_t.begin (method) -ida_lumina.insn_cmts_t.capacity (method) -ida_lumina.insn_cmts_t.clear (method) -ida_lumina.insn_cmts_t.empty (method) -ida_lumina.insn_cmts_t.end (method) -ida_lumina.insn_cmts_t.erase (method) -ida_lumina.insn_cmts_t.extract (method) -ida_lumina.insn_cmts_t.grow (method) -ida_lumina.insn_cmts_t.inject (method) -ida_lumina.insn_cmts_t.insert (method) -ida_lumina.insn_cmts_t.pop_back (method) -ida_lumina.insn_cmts_t.push_back (method) -ida_lumina.insn_cmts_t.qclear (method) -ida_lumina.insn_cmts_t.reserve (method) -ida_lumina.insn_cmts_t.resize (method) -ida_lumina.insn_cmts_t.size (method) -ida_lumina.insn_cmts_t.swap (method) -ida_lumina.insn_cmts_t.truncate (method) -ida_lumina.insn_ops_repr_t (class) -ida_lumina.insn_ops_repr_t.__init__ (method) -ida_lumina.insn_ops_reprs_t (class) -ida_lumina.insn_ops_reprs_t.__getitem__ (method) -ida_lumina.insn_ops_reprs_t.__init__ (method) -ida_lumina.insn_ops_reprs_t.__len__ (method) -ida_lumina.insn_ops_reprs_t.__setitem__ (method) -ida_lumina.insn_ops_reprs_t.at (method) -ida_lumina.insn_ops_reprs_t.begin (method) -ida_lumina.insn_ops_reprs_t.capacity (method) -ida_lumina.insn_ops_reprs_t.clear (method) -ida_lumina.insn_ops_reprs_t.empty (method) -ida_lumina.insn_ops_reprs_t.end (method) -ida_lumina.insn_ops_reprs_t.erase (method) -ida_lumina.insn_ops_reprs_t.extract (method) -ida_lumina.insn_ops_reprs_t.grow (method) -ida_lumina.insn_ops_reprs_t.inject (method) -ida_lumina.insn_ops_reprs_t.insert (method) -ida_lumina.insn_ops_reprs_t.pop_back (method) -ida_lumina.insn_ops_reprs_t.push_back (method) -ida_lumina.insn_ops_reprs_t.qclear (method) -ida_lumina.insn_ops_reprs_t.reserve (method) -ida_lumina.insn_ops_reprs_t.resize (method) -ida_lumina.insn_ops_reprs_t.size (method) -ida_lumina.insn_ops_reprs_t.swap (method) -ida_lumina.insn_ops_reprs_t.truncate (method) -ida_lumina.insn_site_t (class) -ida_lumina.insn_site_t.__init__ (method) -ida_lumina.insn_site_t.toea (method) -ida_lumina.lumina_client_t (class) -ida_lumina.lumina_client_t.__init__ (method) -ida_lumina.lumina_client_t.del_history (method) -ida_lumina.lumina_client_t.get_pop (method) -ida_lumina.lumina_client_t.is_pattern_id (method) -ida_lumina.lumina_client_t.pull_md (method) -ida_lumina.lumina_client_t.push_md (method) -ida_lumina.lumina_client_t.set_pattern_id_md5 (method) -ida_lumina.lumina_info_t (class) -ida_lumina.lumina_info_t.__init__ (method) -ida_lumina.lumina_op_res_vec_t (class) -ida_lumina.lumina_op_res_vec_t.__eq__ (method) -ida_lumina.lumina_op_res_vec_t.__getitem__ (method) -ida_lumina.lumina_op_res_vec_t.__init__ (method) -ida_lumina.lumina_op_res_vec_t.__len__ (method) -ida_lumina.lumina_op_res_vec_t.__ne__ (method) -ida_lumina.lumina_op_res_vec_t.__setitem__ (method) -ida_lumina.lumina_op_res_vec_t._del (method) -ida_lumina.lumina_op_res_vec_t.add_unique (method) -ida_lumina.lumina_op_res_vec_t.at (method) -ida_lumina.lumina_op_res_vec_t.begin (method) -ida_lumina.lumina_op_res_vec_t.capacity (method) -ida_lumina.lumina_op_res_vec_t.clear (method) -ida_lumina.lumina_op_res_vec_t.empty (method) -ida_lumina.lumina_op_res_vec_t.end (method) -ida_lumina.lumina_op_res_vec_t.erase (method) -ida_lumina.lumina_op_res_vec_t.extract (method) -ida_lumina.lumina_op_res_vec_t.find (method) -ida_lumina.lumina_op_res_vec_t.grow (method) -ida_lumina.lumina_op_res_vec_t.has (method) -ida_lumina.lumina_op_res_vec_t.inject (method) -ida_lumina.lumina_op_res_vec_t.insert (method) -ida_lumina.lumina_op_res_vec_t.pop_back (method) -ida_lumina.lumina_op_res_vec_t.push_back (method) -ida_lumina.lumina_op_res_vec_t.qclear (method) -ida_lumina.lumina_op_res_vec_t.reserve (method) -ida_lumina.lumina_op_res_vec_t.resize (method) -ida_lumina.lumina_op_res_vec_t.size (method) -ida_lumina.lumina_op_res_vec_t.swap (method) -ida_lumina.lumina_op_res_vec_t.truncate (method) -ida_lumina.lumina_server_info_t (class) -ida_lumina.lumina_server_info_t.__init__ (method) -ida_lumina.lumina_user_t (class) -ida_lumina.lumina_user_t.__init__ (method) -ida_lumina.lumina_user_t.can_del_history (method) -ida_lumina.lumina_user_t.is_admin (method) -ida_lumina.lumina_user_t.set_can_del_history (method) -ida_lumina.lumina_user_t.set_is_admin (method) -ida_lumina.md_type_parts_t (class) -ida_lumina.md_type_parts_t.__eq__ (method) -ida_lumina.md_type_parts_t.__init__ (method) -ida_lumina.md_type_parts_t.__ne__ (method) -ida_lumina.metadata_iterator_t (class) -ida_lumina.metadata_iterator_t.__init__ (method) -ida_lumina.metadata_iterator_t.data_end (method) -ida_lumina.metadata_iterator_t.next (method) -ida_lumina.new_packet (function) -ida_lumina.oprepr_t (class) -ida_lumina.oprepr_t.__init__ (method) -ida_lumina.pattern_id_t (class) -ida_lumina.pattern_id_t.__init__ (method) -ida_lumina.peer_conn_t (class) -ida_lumina.peer_conn_t.__init__ (method) -ida_lumina.pkt_get_lumina_info_result_t (class) -ida_lumina.pkt_get_lumina_info_result_t.__init__ (method) -ida_lumina.pkt_get_lumina_info_t (class) -ida_lumina.pkt_get_lumina_info_t.__init__ (method) -ida_lumina.pkt_get_pop_result_t (class) -ida_lumina.pkt_get_pop_result_t.__init__ (method) -ida_lumina.pkt_get_pop_t (class) -ida_lumina.pkt_get_pop_t.__init__ (method) -ida_lumina.pkt_helo_result_t (class) -ida_lumina.pkt_helo_result_t.__init__ (method) -ida_lumina.pkt_helo_t (class) -ida_lumina.pkt_helo_t.__init__ (method) -ida_lumina.pkt_pull_md_result_t (class) -ida_lumina.pkt_pull_md_result_t.__init__ (method) -ida_lumina.pkt_pull_md_t (class) -ida_lumina.pkt_pull_md_t.__init__ (method) -ida_lumina.pkt_push_md_result_t (class) -ida_lumina.pkt_push_md_result_t.__init__ (method) -ida_lumina.pkt_push_md_t (class) -ida_lumina.pkt_push_md_t.__init__ (method) -ida_lumina.pkt_rpc_fail_t (class) -ida_lumina.pkt_rpc_fail_t.__init__ (method) -ida_lumina.pkt_rpc_notify_t (class) -ida_lumina.pkt_rpc_notify_t.__init__ (method) -ida_lumina.pkt_rpc_ok_t (class) -ida_lumina.pkt_rpc_ok_t.__init__ (method) -ida_lumina.pop_fun_t (class) -ida_lumina.pop_fun_t.__init__ (method) -ida_lumina.push_md_opts_t (class) -ida_lumina.push_md_opts_t.__init__ (method) -ida_lumina.push_md_result_t (class) -ida_lumina.push_md_result_t.__init__ (method) -ida_lumina.revert_metadata (function) -ida_lumina.score_metadata (function) -ida_lumina.serialized_tinfo (class) -ida_lumina.serialized_tinfo.__init__ (method) -ida_lumina.simple_idb_diff_handler_t (class) -ida_lumina.simple_idb_diff_handler_t.__init__ (method) -ida_lumina.simple_idb_diff_handler_t.ensure_header_generated (method) -ida_lumina.simple_idb_diff_handler_t.format_extra_cmt (method) -ida_lumina.simple_idb_diff_handler_t.format_frame_member (method) -ida_lumina.simple_idb_diff_handler_t.format_insn_ops (method) -ida_lumina.simple_idb_diff_handler_t.format_stkpnt (method) -ida_lumina.simple_idb_diff_handler_t.format_type (method) -ida_lumina.simple_idb_diff_handler_t.indenter_t (class) -ida_lumina.simple_idb_diff_handler_t.indenter_t.__del__ (method) -ida_lumina.simple_idb_diff_handler_t.indenter_t.__init__ (method) -ida_lumina.simple_idb_diff_handler_t.on_comment_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_extra_comment_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_frame_member_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_function_comment_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_insn_ops_repr_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_name_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_proto_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_score_changed (method) -ida_lumina.simple_idb_diff_handler_t.on_user_stkpnt_changed (method) -ida_lumina.simple_idb_diff_handler_t.put (method) -ida_lumina.simple_idb_diff_handler_t.put2 (method) -ida_lumina.simple_idb_diff_handler_t.where (method) -ida_lumina.skipped_func_t (class) -ida_lumina.skipped_func_t.__init__ (method) -ida_lumina.skipped_funcs_t (class) -ida_lumina.skipped_funcs_t.__getitem__ (method) -ida_lumina.skipped_funcs_t.__init__ (method) -ida_lumina.skipped_funcs_t.__len__ (method) -ida_lumina.skipped_funcs_t.__setitem__ (method) -ida_lumina.skipped_funcs_t.at (method) -ida_lumina.skipped_funcs_t.begin (method) -ida_lumina.skipped_funcs_t.capacity (method) -ida_lumina.skipped_funcs_t.clear (method) -ida_lumina.skipped_funcs_t.empty (method) -ida_lumina.skipped_funcs_t.end (method) -ida_lumina.skipped_funcs_t.erase (method) -ida_lumina.skipped_funcs_t.extract (method) -ida_lumina.skipped_funcs_t.grow (method) -ida_lumina.skipped_funcs_t.inject (method) -ida_lumina.skipped_funcs_t.insert (method) -ida_lumina.skipped_funcs_t.pop_back (method) -ida_lumina.skipped_funcs_t.push_back (method) -ida_lumina.skipped_funcs_t.qclear (method) -ida_lumina.skipped_funcs_t.reserve (method) -ida_lumina.skipped_funcs_t.resize (method) -ida_lumina.skipped_funcs_t.size (method) -ida_lumina.skipped_funcs_t.swap (method) -ida_lumina.skipped_funcs_t.truncate (method) -ida_lumina.split_metadata (function) -ida_lumina.user_license_info_t (class) -ida_lumina.user_license_info_t.__init__ (method) -ida_lumina.user_stkpnt_t (class) -ida_lumina.user_stkpnt_t.__init__ (method) -ida_lumina.user_stkpnts_t (class) -ida_lumina.user_stkpnts_t.__getitem__ (method) -ida_lumina.user_stkpnts_t.__init__ (method) -ida_lumina.user_stkpnts_t.__len__ (method) -ida_lumina.user_stkpnts_t.__setitem__ (method) -ida_lumina.user_stkpnts_t.at (method) -ida_lumina.user_stkpnts_t.begin (method) -ida_lumina.user_stkpnts_t.capacity (method) -ida_lumina.user_stkpnts_t.clear (method) -ida_lumina.user_stkpnts_t.empty (method) -ida_lumina.user_stkpnts_t.end (method) -ida_lumina.user_stkpnts_t.erase (method) -ida_lumina.user_stkpnts_t.extract (method) -ida_lumina.user_stkpnts_t.grow (method) -ida_lumina.user_stkpnts_t.inject (method) -ida_lumina.user_stkpnts_t.insert (method) -ida_lumina.user_stkpnts_t.pop_back (method) -ida_lumina.user_stkpnts_t.push_back (method) -ida_lumina.user_stkpnts_t.qclear (method) -ida_lumina.user_stkpnts_t.reserve (method) -ida_lumina.user_stkpnts_t.resize (method) -ida_lumina.user_stkpnts_t.size (method) -ida_lumina.user_stkpnts_t.swap (method) -ida_lumina.user_stkpnts_t.truncate (method) -ida_moves (module) -ida_moves.bookmarks_t (class) -ida_moves.bookmarks_t.__getitem__ (method) -ida_moves.bookmarks_t.__init__ (method) -ida_moves.bookmarks_t.__init__ (method) -ida_moves.bookmarks_t.__iter__ (method) -ida_moves.bookmarks_t.__len__ (method) -ida_moves.bookmarks_t.erase (method) -ida_moves.bookmarks_t.find_index (method) -ida_moves.bookmarks_t.get (method) -ida_moves.bookmarks_t.get_desc (method) -ida_moves.bookmarks_t.get_dirtree_id (method) -ida_moves.bookmarks_t.mark (method) -ida_moves.bookmarks_t.size (method) -ida_moves.bookmarks_t_erase (function) -ida_moves.bookmarks_t_find_index (function) -ida_moves.bookmarks_t_get (function) -ida_moves.bookmarks_t_get_desc (function) -ida_moves.bookmarks_t_get_dirtree_id (function) -ida_moves.bookmarks_t_mark (function) -ida_moves.bookmarks_t_size (function) -ida_moves.graph_location_info_t (class) -ida_moves.graph_location_info_t.__eq__ (method) -ida_moves.graph_location_info_t.__init__ (method) -ida_moves.graph_location_info_t.__ne__ (method) -ida_moves.lochist_entry_t (class) -ida_moves.lochist_entry_t.__init__ (method) -ida_moves.lochist_entry_t.acquire_place (method) -ida_moves.lochist_entry_t.is_valid (method) -ida_moves.lochist_entry_t.place (method) -ida_moves.lochist_entry_t.renderer_info (method) -ida_moves.lochist_entry_t.set_place (method) -ida_moves.lochist_t (class) -ida_moves.lochist_t.__init__ (method) -ida_moves.lochist_t.back (method) -ida_moves.lochist_t.clear (method) -ida_moves.lochist_t.current_index (method) -ida_moves.lochist_t.fwd (method) -ida_moves.lochist_t.get (method) -ida_moves.lochist_t.get_current (method) -ida_moves.lochist_t.get_place_id (method) -ida_moves.lochist_t.get_template_place (method) -ida_moves.lochist_t.init (method) -ida_moves.lochist_t.is_history_enabled (method) -ida_moves.lochist_t.jump (method) -ida_moves.lochist_t.netcode (method) -ida_moves.lochist_t.save (method) -ida_moves.lochist_t.seek (method) -ida_moves.lochist_t.set (method) -ida_moves.lochist_t.set_current (method) -ida_moves.lochist_t.size (method) -ida_moves.renderer_info_pos_t (class) -ida_moves.renderer_info_pos_t.__eq__ (method) -ida_moves.renderer_info_pos_t.__init__ (method) -ida_moves.renderer_info_pos_t.__ne__ (method) -ida_moves.renderer_info_t (class) -ida_moves.renderer_info_t.__eq__ (method) -ida_moves.renderer_info_t.__init__ (method) -ida_moves.renderer_info_t.__ne__ (method) -ida_moves.segm_move_info_t (class) -ida_moves.segm_move_info_t.__eq__ (method) -ida_moves.segm_move_info_t.__init__ (method) -ida_moves.segm_move_info_t.__ne__ (method) -ida_moves.segm_move_info_vec_t (class) -ida_moves.segm_move_info_vec_t.__eq__ (method) -ida_moves.segm_move_info_vec_t.__getitem__ (method) -ida_moves.segm_move_info_vec_t.__init__ (method) -ida_moves.segm_move_info_vec_t.__len__ (method) -ida_moves.segm_move_info_vec_t.__ne__ (method) -ida_moves.segm_move_info_vec_t.__setitem__ (method) -ida_moves.segm_move_info_vec_t._del (method) -ida_moves.segm_move_info_vec_t.add_unique (method) -ida_moves.segm_move_info_vec_t.at (method) -ida_moves.segm_move_info_vec_t.begin (method) -ida_moves.segm_move_info_vec_t.capacity (method) -ida_moves.segm_move_info_vec_t.clear (method) -ida_moves.segm_move_info_vec_t.empty (method) -ida_moves.segm_move_info_vec_t.end (method) -ida_moves.segm_move_info_vec_t.erase (method) -ida_moves.segm_move_info_vec_t.extract (method) -ida_moves.segm_move_info_vec_t.find (method) -ida_moves.segm_move_info_vec_t.grow (method) -ida_moves.segm_move_info_vec_t.has (method) -ida_moves.segm_move_info_vec_t.inject (method) -ida_moves.segm_move_info_vec_t.insert (method) -ida_moves.segm_move_info_vec_t.pop_back (method) -ida_moves.segm_move_info_vec_t.push_back (method) -ida_moves.segm_move_info_vec_t.qclear (method) -ida_moves.segm_move_info_vec_t.reserve (method) -ida_moves.segm_move_info_vec_t.resize (method) -ida_moves.segm_move_info_vec_t.size (method) -ida_moves.segm_move_info_vec_t.swap (method) -ida_moves.segm_move_info_vec_t.truncate (method) -ida_moves.segm_move_infos_t (class) -ida_moves.segm_move_infos_t.__init__ (method) -ida_moves.segm_move_infos_t.find (method) -ida_nalt (module) -ida_nalt.AFL_ALIGNFLOW (variable) -ida_nalt.AFL_BNOT0 (variable) -ida_nalt.AFL_BNOT1 (variable) -ida_nalt.AFL_COLORED (variable) -ida_nalt.AFL_FIXEDSPD (variable) -ida_nalt.AFL_HIDDEN (variable) -ida_nalt.AFL_HR_DETERMINED (variable) -ida_nalt.AFL_HR_GUESSED_DATA (variable) -ida_nalt.AFL_HR_GUESSED_FUNC (variable) -ida_nalt.AFL_IDA_GUESSED (variable) -ida_nalt.AFL_LIB (variable) -ida_nalt.AFL_LINNUM (variable) -ida_nalt.AFL_LNAME (variable) -ida_nalt.AFL_LZERO0 (variable) -ida_nalt.AFL_LZERO1 (variable) -ida_nalt.AFL_MANUAL (variable) -ida_nalt.AFL_NOBRD (variable) -ida_nalt.AFL_NORET (variable) -ida_nalt.AFL_NOTCODE (variable) -ida_nalt.AFL_NOTPROC (variable) -ida_nalt.AFL_PUBNAM (variable) -ida_nalt.AFL_RETFP (variable) -ida_nalt.AFL_TERSESTR (variable) -ida_nalt.AFL_TI (variable) -ida_nalt.AFL_TI0 (variable) -ida_nalt.AFL_TI1 (variable) -ida_nalt.AFL_TILCMT (variable) -ida_nalt.AFL_TYPE_GUESSED (variable) -ida_nalt.AFL_USEMODSP (variable) -ida_nalt.AFL_USERSP (variable) -ida_nalt.AFL_USERTI (variable) -ida_nalt.AFL_WEAKNAM (variable) -ida_nalt.AFL_ZSTROFF (variable) -ida_nalt.AP_ALLOWDUPS (variable) -ida_nalt.AP_ARRAY (variable) -ida_nalt.AP_IDXBASEMASK (variable) -ida_nalt.AP_IDXBIN (variable) -ida_nalt.AP_IDXDEC (variable) -ida_nalt.AP_IDXHEX (variable) -ida_nalt.AP_IDXOCT (variable) -ida_nalt.AP_INDEX (variable) -ida_nalt.AP_SIGNED (variable) -ida_nalt.IDB_DESKTOPS_NODE_NAME (variable) -ida_nalt.IDB_DESKTOPS_TAG (variable) -ida_nalt.MAXSTRUCPATH (variable) -ida_nalt.NALT_ABSBASE (variable) -ida_nalt.NALT_AFLAGS (variable) -ida_nalt.NALT_ALIGN (variable) -ida_nalt.NALT_COLOR (variable) -ida_nalt.NALT_CREF_FROM (variable) -ida_nalt.NALT_CREF_TO (variable) -ida_nalt.NALT_DREF_FROM (variable) -ida_nalt.NALT_DREF_TO (variable) -ida_nalt.NALT_ENUM0 (variable) -ida_nalt.NALT_ENUM1 (variable) -ida_nalt.NALT_GR_LAYX (variable) -ida_nalt.NALT_LINNUM (variable) -ida_nalt.NALT_PURGE (variable) -ida_nalt.NALT_STRTYPE (variable) -ida_nalt.NALT_STRUCT (variable) -ida_nalt.NALT_SWITCH (variable) -ida_nalt.NSUP_ARGEAS (variable) -ida_nalt.NSUP_ARRAY (variable) -ida_nalt.NSUP_CMT (variable) -ida_nalt.NSUP_CUSTDT (variable) -ida_nalt.NSUP_EX_FLAGS (variable) -ida_nalt.NSUP_FOP1 (variable) -ida_nalt.NSUP_FOP2 (variable) -ida_nalt.NSUP_FOP3 (variable) -ida_nalt.NSUP_FOP4 (variable) -ida_nalt.NSUP_FOP5 (variable) -ida_nalt.NSUP_FOP6 (variable) -ida_nalt.NSUP_FOP7 (variable) -ida_nalt.NSUP_FOP8 (variable) -ida_nalt.NSUP_FTAILS (variable) -ida_nalt.NSUP_GROUP (variable) -ida_nalt.NSUP_GR_INFO (variable) -ida_nalt.NSUP_GR_LAYT (variable) -ida_nalt.NSUP_JINFO (variable) -ida_nalt.NSUP_LLABEL (variable) -ida_nalt.NSUP_MANUAL (variable) -ida_nalt.NSUP_OPTYPES (variable) -ida_nalt.NSUP_OREF0 (variable) -ida_nalt.NSUP_OREF1 (variable) -ida_nalt.NSUP_OREF2 (variable) -ida_nalt.NSUP_OREF3 (variable) -ida_nalt.NSUP_OREF4 (variable) -ida_nalt.NSUP_OREF5 (variable) -ida_nalt.NSUP_OREF6 (variable) -ida_nalt.NSUP_OREF7 (variable) -ida_nalt.NSUP_ORIGFMD (variable) -ida_nalt.NSUP_POINTS (variable) -ida_nalt.NSUP_REF0 (variable) -ida_nalt.NSUP_REF1 (variable) -ida_nalt.NSUP_REF2 (variable) -ida_nalt.NSUP_REF3 (variable) -ida_nalt.NSUP_REF4 (variable) -ida_nalt.NSUP_REF5 (variable) -ida_nalt.NSUP_REF6 (variable) -ida_nalt.NSUP_REF7 (variable) -ida_nalt.NSUP_REGARG (variable) -ida_nalt.NSUP_REGVAR (variable) -ida_nalt.NSUP_REPCMT (variable) -ida_nalt.NSUP_SEGTRANS (variable) -ida_nalt.NSUP_SWITCH (variable) -ida_nalt.NSUP_TYPEINFO (variable) -ida_nalt.NSUP_XREFPOS (variable) -ida_nalt.PATCH_TAG (variable) -ida_nalt.REFINFO_CUSTOM (variable) -ida_nalt.REFINFO_NOBASE (variable) -ida_nalt.REFINFO_NO_ONES (variable) -ida_nalt.REFINFO_NO_ZEROS (variable) -ida_nalt.REFINFO_PASTEND (variable) -ida_nalt.REFINFO_RVAOFF (variable) -ida_nalt.REFINFO_SELFREF (variable) -ida_nalt.REFINFO_SIGNEDOP (variable) -ida_nalt.REFINFO_SUBTRACT (variable) -ida_nalt.REFINFO_TYPE (variable) -ida_nalt.REF_HIGH16 (variable) -ida_nalt.REF_HIGH8 (variable) -ida_nalt.REF_LOW16 (variable) -ida_nalt.REF_LOW8 (variable) -ida_nalt.REF_OFF16 (variable) -ida_nalt.REF_OFF32 (variable) -ida_nalt.REF_OFF64 (variable) -ida_nalt.REF_OFF8 (variable) -ida_nalt.RIDX_ABINAME (variable) -ida_nalt.RIDX_ARCHIVE_PATH (variable) -ida_nalt.RIDX_C_MACROS (variable) -ida_nalt.RIDX_DBG_BINPATHS (variable) -ida_nalt.RIDX_DUALOP_GRAPH (variable) -ida_nalt.RIDX_DUALOP_TEXT (variable) -ida_nalt.RIDX_FILE_FORMAT_NAME (variable) -ida_nalt.RIDX_GROUPS (variable) -ida_nalt.RIDX_H_PATH (variable) -ida_nalt.RIDX_IDA_VERSION (variable) -ida_nalt.RIDX_INCLUDE (variable) -ida_nalt.RIDX_MD5 (variable) -ida_nalt.RIDX_NOTEPAD (variable) -ida_nalt.RIDX_PROBLEMS (variable) -ida_nalt.RIDX_SELECTORS (variable) -ida_nalt.RIDX_SHA256 (variable) -ida_nalt.RIDX_SMALL_IDC (variable) -ida_nalt.RIDX_SMALL_IDC_OLD (variable) -ida_nalt.RIDX_SRCDBG_PATHS (variable) -ida_nalt.RIDX_SRCDBG_UNDESIRED (variable) -ida_nalt.RIDX_STR_ENCODINGS (variable) -ida_nalt.STRENC_DEFAULT (variable) -ida_nalt.STRENC_NONE (variable) -ida_nalt.STRTYPE_C (variable) -ida_nalt.STRTYPE_C_16 (variable) -ida_nalt.STRTYPE_C_32 (variable) -ida_nalt.STRTYPE_LEN2 (variable) -ida_nalt.STRTYPE_LEN2_16 (variable) -ida_nalt.STRTYPE_LEN4 (variable) -ida_nalt.STRTYPE_PASCAL (variable) -ida_nalt.STRTYPE_PASCAL_16 (variable) -ida_nalt.STRTYPE_TERMCHR (variable) -ida_nalt.SWI_CUSTOM (variable) -ida_nalt.SWI_DEFRET (variable) -ida_nalt.SWI_DEF_IN_TBL (variable) -ida_nalt.SWI_ELBASE (variable) -ida_nalt.SWI_HXNOLOWCASE (variable) -ida_nalt.SWI_INDIRECT (variable) -ida_nalt.SWI_J32 (variable) -ida_nalt.SWI_JMPINSN (variable) -ida_nalt.SWI_JMP_INV (variable) -ida_nalt.SWI_JSIZE (variable) -ida_nalt.SWI_SELFREL (variable) -ida_nalt.SWI_SEPARATE (variable) -ida_nalt.SWI_SHIFT_MASK (variable) -ida_nalt.SWI_SIGNED (variable) -ida_nalt.SWI_SPARSE (variable) -ida_nalt.SWI_STDTBL (variable) -ida_nalt.SWI_SUBTRACT (variable) -ida_nalt.SWI_USER (variable) -ida_nalt.SWI_V32 (variable) -ida_nalt.SWI_VERSION (variable) -ida_nalt.SWI_VSIZE (variable) -ida_nalt.SWI_VSPLIT (variable) -ida_nalt.V695_REF_OFF8 (variable) -ida_nalt.V695_REF_VHIGH (variable) -ida_nalt.V695_REF_VLOW (variable) -ida_nalt.add_encoding (function) -ida_nalt.array_parameters_t (class) -ida_nalt.array_parameters_t.__init__ (method) -ida_nalt.array_parameters_t.alignment (variable) -ida_nalt.array_parameters_t.lineitems (variable) -ida_nalt.clr__bnot0 (function) -ida_nalt.clr__bnot1 (function) -ida_nalt.clr__invsign0 (function) -ida_nalt.clr__invsign1 (function) -ida_nalt.clr_abits (function) -ida_nalt.clr_align_flow (function) -ida_nalt.clr_colored_item (function) -ida_nalt.clr_fixed_spd (function) -ida_nalt.clr_has_lname (function) -ida_nalt.clr_has_ti (function) -ida_nalt.clr_has_ti0 (function) -ida_nalt.clr_has_ti1 (function) -ida_nalt.clr_libitem (function) -ida_nalt.clr_lzero0 (function) -ida_nalt.clr_lzero1 (function) -ida_nalt.clr_noret (function) -ida_nalt.clr_notcode (function) -ida_nalt.clr_notproc (function) -ida_nalt.clr_retfp (function) -ida_nalt.clr_terse_struc (function) -ida_nalt.clr_tilcmt (function) -ida_nalt.clr_usemodsp (function) -ida_nalt.clr_usersp (function) -ida_nalt.clr_userti (function) -ida_nalt.clr_zstroff (function) -ida_nalt.custom_data_type_ids_fids_array (class) -ida_nalt.custom_data_type_ids_fids_array.__getitem__ (method) -ida_nalt.custom_data_type_ids_fids_array.__init__ (method) -ida_nalt.custom_data_type_ids_fids_array.__len__ (method) -ida_nalt.custom_data_type_ids_fids_array.__setitem__ (method) -ida_nalt.custom_data_type_ids_fids_array._get_bytes (method) -ida_nalt.custom_data_type_ids_fids_array._set_bytes (method) -ida_nalt.custom_data_type_ids_t (class) -ida_nalt.custom_data_type_ids_t.__getFids (method) -ida_nalt.custom_data_type_ids_t.__init__ (method) -ida_nalt.custom_data_type_ids_t.dtid (variable) -ida_nalt.custom_data_type_ids_t.fids (variable) -ida_nalt.custom_data_type_ids_t.get_dtid (method) -ida_nalt.custom_data_type_ids_t.set (method) -ida_nalt.dbg_get_input_path (function) -ida_nalt.del_absbase (function) -ida_nalt.del_aflags (function) -ida_nalt.del_alignment (function) -ida_nalt.del_array_parameters (function) -ida_nalt.del_custom_data_type_ids (function) -ida_nalt.del_encoding (function) -ida_nalt.del_ind_purged (function) -ida_nalt.del_item_color (function) -ida_nalt.del_op_tinfo (function) -ida_nalt.del_refinfo (function) -ida_nalt.del_source_linnum (function) -ida_nalt.del_str_type (function) -ida_nalt.del_switch_info (function) -ida_nalt.del_switch_parent (function) -ida_nalt.del_tinfo (function) -ida_nalt.delete_imports (function) -ida_nalt.ea2node (function) -ida_nalt.encoding_from_strtype (function) -ida_nalt.enum_const_t (class) -ida_nalt.enum_const_t.__init__ (method) -ida_nalt.enum_import_names (function) -ida_nalt.find_custom_refinfo (function) -ida_nalt.get_abi_name (function) -ida_nalt.get_absbase (function) -ida_nalt.get_aflags (function) -ida_nalt.get_alignment (function) -ida_nalt.get_archive_path (function) -ida_nalt.get_array_parameters (function) -ida_nalt.get_asm_inc_file (function) -ida_nalt.get_custom_data_type_ids (function) -ida_nalt.get_custom_refinfo (function) -ida_nalt.get_default_encoding_idx (function) -ida_nalt.get_elapsed_secs (function) -ida_nalt.get_encoding_bpu (function) -ida_nalt.get_encoding_bpu_by_name (function) -ida_nalt.get_encoding_name (function) -ida_nalt.get_encoding_qty (function) -ida_nalt.get_gotea (function) -ida_nalt.get_ida_notepad_text (function) -ida_nalt.get_idb_ctime (function) -ida_nalt.get_idb_nopens (function) -ida_nalt.get_ids_modnode (function) -ida_nalt.get_imagebase (function) -ida_nalt.get_import_module_name (function) -ida_nalt.get_import_module_qty (function) -ida_nalt.get_ind_purged (function) -ida_nalt.get_initial_ida_version (function) -ida_nalt.get_initial_idb_version (function) -ida_nalt.get_input_file_path (function) -ida_nalt.get_item_color (function) -ida_nalt.get_loader_format_name (function) -ida_nalt.get_op_tinfo (function) -ida_nalt.get_outfile_encoding_idx (function) -ida_nalt.get_refinfo (function) -ida_nalt.get_reftype_by_size (function) -ida_nalt.get_root_filename (function) -ida_nalt.get_source_linnum (function) -ida_nalt.get_srcdbg_paths (function) -ida_nalt.get_srcdbg_undesired_paths (function) -ida_nalt.get_str_encoding_idx (function) -ida_nalt.get_str_term1 (function) -ida_nalt.get_str_term2 (function) -ida_nalt.get_str_type (function) -ida_nalt.get_str_type_code (function) -ida_nalt.get_str_type_prefix_length (function) -ida_nalt.get_strid (function) -ida_nalt.get_strtype_bpu (function) -ida_nalt.get_switch_info (function) -ida_nalt.get_switch_info (function) -ida_nalt.get_switch_parent (function) -ida_nalt.get_tinfo (function) -ida_nalt.getnode (function) -ida_nalt.has_aflag_linnum (function) -ida_nalt.has_aflag_lname (function) -ida_nalt.has_aflag_ti (function) -ida_nalt.has_aflag_ti0 (function) -ida_nalt.has_aflag_ti1 (function) -ida_nalt.has_lname (function) -ida_nalt.has_ti (function) -ida_nalt.has_ti0 (function) -ida_nalt.has_ti1 (function) -ida_nalt.hide_border (function) -ida_nalt.hide_item (function) -ida_nalt.is__bnot0 (function) -ida_nalt.is__bnot1 (function) -ida_nalt.is__invsign0 (function) -ida_nalt.is__invsign1 (function) -ida_nalt.is_aflag__bnot0 (function) -ida_nalt.is_aflag__bnot1 (function) -ida_nalt.is_aflag__invsign0 (function) -ida_nalt.is_aflag__invsign1 (function) -ida_nalt.is_aflag_align_flow (function) -ida_nalt.is_aflag_colored_item (function) -ida_nalt.is_aflag_data_guessed_by_hexrays (function) -ida_nalt.is_aflag_fixed_spd (function) -ida_nalt.is_aflag_func_guessed_by_hexrays (function) -ida_nalt.is_aflag_hidden_border (function) -ida_nalt.is_aflag_hidden_item (function) -ida_nalt.is_aflag_libitem (function) -ida_nalt.is_aflag_lzero0 (function) -ida_nalt.is_aflag_lzero1 (function) -ida_nalt.is_aflag_manual_insn (function) -ida_nalt.is_aflag_noret (function) -ida_nalt.is_aflag_notcode (function) -ida_nalt.is_aflag_notproc (function) -ida_nalt.is_aflag_public_name (function) -ida_nalt.is_aflag_retfp (function) -ida_nalt.is_aflag_terse_struc (function) -ida_nalt.is_aflag_tilcmt (function) -ida_nalt.is_aflag_type_determined_by_hexrays (function) -ida_nalt.is_aflag_type_guessed_by_hexrays (function) -ida_nalt.is_aflag_type_guessed_by_ida (function) -ida_nalt.is_aflag_usersp (function) -ida_nalt.is_aflag_userti (function) -ida_nalt.is_aflag_weak_name (function) -ida_nalt.is_aflag_zstroff (function) -ida_nalt.is_align_flow (function) -ida_nalt.is_colored_item (function) -ida_nalt.is_data_guessed_by_hexrays (function) -ida_nalt.is_finally_visible_item (function) -ida_nalt.is_fixed_spd (function) -ida_nalt.is_func_guessed_by_hexrays (function) -ida_nalt.is_hidden_border (function) -ida_nalt.is_hidden_item (function) -ida_nalt.is_libitem (function) -ida_nalt.is_lzero0 (function) -ida_nalt.is_lzero1 (function) -ida_nalt.is_noret (function) -ida_nalt.is_notcode (function) -ida_nalt.is_notproc (function) -ida_nalt.is_pascal (function) -ida_nalt.is_reftype_target_optional (function) -ida_nalt.is_retfp (function) -ida_nalt.is_terse_struc (function) -ida_nalt.is_tilcmt (function) -ida_nalt.is_type_determined_by_hexrays (function) -ida_nalt.is_type_guessed_by_hexrays (function) -ida_nalt.is_type_guessed_by_ida (function) -ida_nalt.is_usersp (function) -ida_nalt.is_userti (function) -ida_nalt.is_visible_item (function) -ida_nalt.is_zstroff (function) -ida_nalt.make_str_type (function) -ida_nalt.node2ea (function) -ida_nalt.opinfo_t (class) -ida_nalt.opinfo_t.__init__ (method) -ida_nalt.opinfo_t.cd (variable) -ida_nalt.opinfo_t.ec (variable) -ida_nalt.opinfo_t.path (variable) -ida_nalt.opinfo_t.ri (variable) -ida_nalt.opinfo_t.strtype (variable) -ida_nalt.opinfo_t.tid (variable) -ida_nalt.printop_t (class) -ida_nalt.printop_t.__init__ (method) -ida_nalt.printop_t.get_ti (method) -ida_nalt.printop_t.is_aflags_initialized (method) -ida_nalt.printop_t.is_f64 (method) -ida_nalt.printop_t.is_ti_initialized (method) -ida_nalt.printop_t.set_aflags_initialized (method) -ida_nalt.printop_t.set_ti_initialized (method) -ida_nalt.refinfo_t (class) -ida_nalt.refinfo_t.__init__ (method) -ida_nalt.refinfo_t.base (variable) -ida_nalt.refinfo_t.flags (variable) -ida_nalt.refinfo_t.init (method) -ida_nalt.refinfo_t.is_custom (method) -ida_nalt.refinfo_t.is_no_ones (method) -ida_nalt.refinfo_t.is_no_zeros (method) -ida_nalt.refinfo_t.is_pastend (method) -ida_nalt.refinfo_t.is_rvaoff (method) -ida_nalt.refinfo_t.is_selfref (method) -ida_nalt.refinfo_t.is_signed (method) -ida_nalt.refinfo_t.is_subtract (method) -ida_nalt.refinfo_t.is_target_optional (method) -ida_nalt.refinfo_t.no_base_xref (method) -ida_nalt.refinfo_t.set_type (method) -ida_nalt.refinfo_t.target (variable) -ida_nalt.refinfo_t.tdelta (variable) -ida_nalt.refinfo_t.type (method) -ida_nalt.rename_encoding (function) -ida_nalt.retrieve_input_file_crc32 (function) -ida_nalt.retrieve_input_file_md5 (function) -ida_nalt.retrieve_input_file_sha256 (function) -ida_nalt.retrieve_input_file_size (function) -ida_nalt.set__bnot0 (function) -ida_nalt.set__bnot1 (function) -ida_nalt.set__invsign0 (function) -ida_nalt.set__invsign1 (function) -ida_nalt.set_abits (function) -ida_nalt.set_absbase (function) -ida_nalt.set_aflags (function) -ida_nalt.set_align_flow (function) -ida_nalt.set_alignment (function) -ida_nalt.set_archive_path (function) -ida_nalt.set_array_parameters (function) -ida_nalt.set_asm_inc_file (function) -ida_nalt.set_colored_item (function) -ida_nalt.set_custom_data_type_ids (function) -ida_nalt.set_data_guessed_by_hexrays (function) -ida_nalt.set_default_encoding_idx (function) -ida_nalt.set_fixed_spd (function) -ida_nalt.set_func_guessed_by_hexrays (function) -ida_nalt.set_gotea (function) -ida_nalt.set_has_lname (function) -ida_nalt.set_has_ti (function) -ida_nalt.set_has_ti0 (function) -ida_nalt.set_has_ti1 (function) -ida_nalt.set_ida_notepad_text (function) -ida_nalt.set_ids_modnode (function) -ida_nalt.set_imagebase (function) -ida_nalt.set_item_color (function) -ida_nalt.set_libitem (function) -ida_nalt.set_loader_format_name (function) -ida_nalt.set_lzero0 (function) -ida_nalt.set_lzero1 (function) -ida_nalt.set_noret (function) -ida_nalt.set_notcode (function) -ida_nalt.set_notproc (function) -ida_nalt.set_op_tinfo (function) -ida_nalt.set_outfile_encoding_idx (function) -ida_nalt.set_refinfo (function) -ida_nalt.set_refinfo_ex (function) -ida_nalt.set_retfp (function) -ida_nalt.set_root_filename (function) -ida_nalt.set_source_linnum (function) -ida_nalt.set_srcdbg_paths (function) -ida_nalt.set_srcdbg_undesired_paths (function) -ida_nalt.set_str_encoding_idx (function) -ida_nalt.set_str_type (function) -ida_nalt.set_switch_info (function) -ida_nalt.set_switch_parent (function) -ida_nalt.set_terse_struc (function) -ida_nalt.set_tilcmt (function) -ida_nalt.set_tinfo (function) -ida_nalt.set_type_determined_by_hexrays (function) -ida_nalt.set_type_guessed_by_ida (function) -ida_nalt.set_usemodsp (function) -ida_nalt.set_usersp (function) -ida_nalt.set_userti (function) -ida_nalt.set_visible_item (function) -ida_nalt.set_zstroff (function) -ida_nalt.strpath_ids_array (class) -ida_nalt.strpath_ids_array.__getitem__ (method) -ida_nalt.strpath_ids_array.__init__ (method) -ida_nalt.strpath_ids_array.__len__ (method) -ida_nalt.strpath_ids_array.__setitem__ (method) -ida_nalt.strpath_ids_array._get_bytes (method) -ida_nalt.strpath_ids_array._set_bytes (method) -ida_nalt.strpath_t (class) -ida_nalt.strpath_t.__getIds (method) -ida_nalt.strpath_t.__init__ (method) -ida_nalt.switch_info_t (class) -ida_nalt.switch_info_t.__init__ (method) -ida_nalt.switch_info_t._get_values_lowcase (method) -ida_nalt.switch_info_t._set_values_lowcase (method) -ida_nalt.switch_info_t.assign (method) -ida_nalt.switch_info_t.clear (method) -ida_nalt.switch_info_t.custom (variable) -ida_nalt.switch_info_t.defjump (variable) -ida_nalt.switch_info_t.elbase (variable) -ida_nalt.switch_info_t.expr_ea (variable) -ida_nalt.switch_info_t.flags (variable) -ida_nalt.switch_info_t.get_jrange_vrange (method) -ida_nalt.switch_info_t.get_jtable_element_size (method) -ida_nalt.switch_info_t.get_jtable_size (method) -ida_nalt.switch_info_t.get_lowcase (method) -ida_nalt.switch_info_t.get_shift (method) -ida_nalt.switch_info_t.get_version (method) -ida_nalt.switch_info_t.get_vtable_element_size (method) -ida_nalt.switch_info_t.has_default (method) -ida_nalt.switch_info_t.has_elbase (method) -ida_nalt.switch_info_t.is_custom (method) -ida_nalt.switch_info_t.is_indirect (method) -ida_nalt.switch_info_t.is_nolowcase (method) -ida_nalt.switch_info_t.is_sparse (method) -ida_nalt.switch_info_t.is_subtract (method) -ida_nalt.switch_info_t.is_user_defined (method) -ida_nalt.switch_info_t.jcases (variable) -ida_nalt.switch_info_t.jumps (variable) -ida_nalt.switch_info_t.lowcase (variable) -ida_nalt.switch_info_t.marks (variable) -ida_nalt.switch_info_t.ncases (variable) -ida_nalt.switch_info_t.regdtype (variable) -ida_nalt.switch_info_t.regnum (variable) -ida_nalt.switch_info_t.set_elbase (method) -ida_nalt.switch_info_t.set_expr (method) -ida_nalt.switch_info_t.set_jtable_element_size (method) -ida_nalt.switch_info_t.set_jtable_size (method) -ida_nalt.switch_info_t.set_shift (method) -ida_nalt.switch_info_t.set_vtable_element_size (method) -ida_nalt.switch_info_t.startea (variable) -ida_nalt.switch_info_t.use_std_table (method) -ida_nalt.switch_info_t.values (variable) -ida_nalt.switch_info_t__from_ptrval__ (function) -ida_nalt.unhide_border (function) -ida_nalt.unhide_item (function) -ida_nalt.upd_abits (function) -ida_nalt.uses_aflag_modsp (function) -ida_nalt.uses_modsp (function) -ida_nalt.validate_idb_names (function) -ida_name (module) -ida_name.DEBNAME_EXACT (variable) -ida_name.DEBNAME_LOWER (variable) -ida_name.DEBNAME_NICE (variable) -ida_name.DEBNAME_UPPER (variable) -ida_name.FUNC_IMPORT_PREFIX (variable) -ida_name.GETN_APPZERO (variable) -ida_name.GETN_NODUMMY (variable) -ida_name.GETN_NOFIXUP (variable) -ida_name.GNCN_NOCOLOR (variable) -ida_name.GNCN_NODBGNM (variable) -ida_name.GNCN_NOFUNC (variable) -ida_name.GNCN_NOLABEL (variable) -ida_name.GNCN_NOSEG (variable) -ida_name.GNCN_PREFDBG (variable) -ida_name.GNCN_REQFUNC (variable) -ida_name.GNCN_REQNAME (variable) -ida_name.GNCN_SEGNUM (variable) -ida_name.GNCN_SEG_FUNC (variable) -ida_name.GN_COLORED (variable) -ida_name.GN_DEMANGLED (variable) -ida_name.GN_ISRET (variable) -ida_name.GN_LOCAL (variable) -ida_name.GN_LONG (variable) -ida_name.GN_NOT_DUMMY (variable) -ida_name.GN_NOT_ISRET (variable) -ida_name.GN_SHORT (variable) -ida_name.GN_STRICT (variable) -ida_name.GN_VISIBLE (variable) -ida_name.MAXNAMELEN (variable) -ida_name.NT_ABS (variable) -ida_name.NT_BMASK (variable) -ida_name.NT_BYTE (variable) -ida_name.NT_ENUM (variable) -ida_name.NT_LOCAL (variable) -ida_name.NT_NONE (variable) -ida_name.NT_REGVAR (variable) -ida_name.NT_SEG (variable) -ida_name.NT_STKVAR (variable) -ida_name.NT_STROFF (variable) -ida_name.NearestName (class) -ida_name.NearestName.__getitem__ (method) -ida_name.NearestName.__init__ (method) -ida_name.NearestName.__iter__ (method) -ida_name.NearestName._get_item (method) -ida_name.NearestName.find (method) -ida_name.NearestName.update (method) -ida_name.SN_AUTO (variable) -ida_name.SN_CHECK (variable) -ida_name.SN_DELTAIL (variable) -ida_name.SN_FORCE (variable) -ida_name.SN_IDBENC (variable) -ida_name.SN_LOCAL (variable) -ida_name.SN_NOCHECK (variable) -ida_name.SN_NODUMMY (variable) -ida_name.SN_NOLIST (variable) -ida_name.SN_NON_AUTO (variable) -ida_name.SN_NON_PUBLIC (variable) -ida_name.SN_NON_WEAK (variable) -ida_name.SN_NOWARN (variable) -ida_name.SN_PUBLIC (variable) -ida_name.SN_WEAK (variable) -ida_name.append_struct_fields (function) -ida_name.calc_gtn_flags (function) -ida_name.cleanup_name (function) -ida_name.del_debug_names (function) -ida_name.del_global_name (function) -ida_name.del_local_name (function) -ida_name.demangle_name (function) -ida_name.ea_name_t (class) -ida_name.ea_name_t.__init__ (method) -ida_name.ea_name_vec_t (class) -ida_name.ea_name_vec_t.__getitem__ (method) -ida_name.ea_name_vec_t.__init__ (method) -ida_name.ea_name_vec_t.__len__ (method) -ida_name.ea_name_vec_t.__setitem__ (method) -ida_name.ea_name_vec_t.at (method) -ida_name.ea_name_vec_t.begin (method) -ida_name.ea_name_vec_t.capacity (method) -ida_name.ea_name_vec_t.clear (method) -ida_name.ea_name_vec_t.empty (method) -ida_name.ea_name_vec_t.end (method) -ida_name.ea_name_vec_t.erase (method) -ida_name.ea_name_vec_t.extract (method) -ida_name.ea_name_vec_t.grow (method) -ida_name.ea_name_vec_t.inject (method) -ida_name.ea_name_vec_t.insert (method) -ida_name.ea_name_vec_t.pop_back (method) -ida_name.ea_name_vec_t.push_back (method) -ida_name.ea_name_vec_t.qclear (method) -ida_name.ea_name_vec_t.reserve (method) -ida_name.ea_name_vec_t.resize (method) -ida_name.ea_name_vec_t.size (method) -ida_name.ea_name_vec_t.swap (method) -ida_name.ea_name_vec_t.truncate (method) -ida_name.extract_name (function) -ida_name.force_name (function) -ida_name.get_colored_demangled_name (function) -ida_name.get_colored_long_name (function) -ida_name.get_colored_name (function) -ida_name.get_colored_short_name (function) -ida_name.get_cp_validity (function) -ida_name.get_debug_name (function) -ida_name.get_debug_name_ea (function) -ida_name.get_debug_names (function) -ida_name.get_demangled_name (function) -ida_name.get_ea_name (function) -ida_name.get_long_name (function) -ida_name.get_mangled_name_type (function) -ida_name.get_name (function) -ida_name.get_name_base_ea (function) -ida_name.get_name_color (function) -ida_name.get_name_ea (function) -ida_name.get_name_expr (function) -ida_name.get_name_value (function) -ida_name.get_nice_colored_name (function) -ida_name.get_nlist_ea (function) -ida_name.get_nlist_idx (function) -ida_name.get_nlist_name (function) -ida_name.get_nlist_size (function) -ida_name.get_short_name (function) -ida_name.get_visible_name (function) -ida_name.hide_name (function) -ida_name.is_ident (function) -ida_name.is_ident_cp (function) -ida_name.is_in_nlist (function) -ida_name.is_name_defined_locally (function) -ida_name.is_public_name (function) -ida_name.is_strlit_cp (function) -ida_name.is_uname (function) -ida_name.is_valid_cp (function) -ida_name.is_valid_typename (function) -ida_name.is_visible_cp (function) -ida_name.is_weak_name (function) -ida_name.make_name_auto (function) -ida_name.make_name_non_public (function) -ida_name.make_name_non_weak (function) -ida_name.make_name_public (function) -ida_name.make_name_user (function) -ida_name.make_name_weak (function) -ida_name.rebuild_nlist (function) -ida_name.reorder_dummy_names (function) -ida_name.set_cp_validity (function) -ida_name.set_debug_name (function) -ida_name.set_dummy_name (function) -ida_name.set_name (function) -ida_name.show_name (function) -ida_name.validate_name (function) -ida_netnode (module) -ida_netnode.BADNODE (variable) -ida_netnode.MAXNAMESIZE (variable) -ida_netnode.MAXSPECSIZE (variable) -ida_netnode.MAX_NODENAME_SIZE (variable) -ida_netnode.atag (variable) -ida_netnode.exist (function) -ida_netnode.htag (variable) -ida_netnode.ltag (variable) -ida_netnode.netnode (class) -ida_netnode.netnode.__eq__ (method) -ida_netnode.netnode.__init__ (method) -ida_netnode.netnode.__ne__ (method) -ida_netnode.netnode.altdel (method) -ida_netnode.netnode.altdel_all (method) -ida_netnode.netnode.altdel_ea (method) -ida_netnode.netnode.altdel_idx8 (method) -ida_netnode.netnode.altfirst (method) -ida_netnode.netnode.altfirst_idx8 (method) -ida_netnode.netnode.altlast (method) -ida_netnode.netnode.altlast_idx8 (method) -ida_netnode.netnode.altnext (method) -ida_netnode.netnode.altnext_idx8 (method) -ida_netnode.netnode.altprev (method) -ida_netnode.netnode.altprev_idx8 (method) -ida_netnode.netnode.altset (method) -ida_netnode.netnode.altset_ea (method) -ida_netnode.netnode.altset_idx8 (method) -ida_netnode.netnode.altshift (method) -ida_netnode.netnode.altval (method) -ida_netnode.netnode.altval_ea (method) -ida_netnode.netnode.altval_idx8 (method) -ida_netnode.netnode.blobshift (method) -ida_netnode.netnode.blobsize (method) -ida_netnode.netnode.blobsize_ea (method) -ida_netnode.netnode.chardel (method) -ida_netnode.netnode.chardel_ea (method) -ida_netnode.netnode.chardel_idx8 (method) -ida_netnode.netnode.charfirst (method) -ida_netnode.netnode.charfirst_idx8 (method) -ida_netnode.netnode.charlast (method) -ida_netnode.netnode.charlast_idx8 (method) -ida_netnode.netnode.charnext (method) -ida_netnode.netnode.charnext_idx8 (method) -ida_netnode.netnode.charprev (method) -ida_netnode.netnode.charprev_idx8 (method) -ida_netnode.netnode.charset (method) -ida_netnode.netnode.charset_ea (method) -ida_netnode.netnode.charset_idx8 (method) -ida_netnode.netnode.charshift (method) -ida_netnode.netnode.charval (method) -ida_netnode.netnode.charval_ea (method) -ida_netnode.netnode.charval_idx8 (method) -ida_netnode.netnode.copyto (method) -ida_netnode.netnode.create (method) -ida_netnode.netnode.delblob (method) -ida_netnode.netnode.delblob_ea (method) -ida_netnode.netnode.delvalue (method) -ida_netnode.netnode.eadel (method) -ida_netnode.netnode.eadel_idx8 (method) -ida_netnode.netnode.eaget (method) -ida_netnode.netnode.eaget_idx (method) -ida_netnode.netnode.eaget_idx8 (method) -ida_netnode.netnode.easet (method) -ida_netnode.netnode.easet_idx (method) -ida_netnode.netnode.easet_idx8 (method) -ida_netnode.netnode.end (method) -ida_netnode.netnode.exist (method) -ida_netnode.netnode.get_name (method) -ida_netnode.netnode.getblob (method) -ida_netnode.netnode.getblob_ea (method) -ida_netnode.netnode.getclob (method) -ida_netnode.netnode.hashdel (method) -ida_netnode.netnode.hashdel_all (method) -ida_netnode.netnode.hashfirst (method) -ida_netnode.netnode.hashlast (method) -ida_netnode.netnode.hashnext (method) -ida_netnode.netnode.hashprev (method) -ida_netnode.netnode.hashset (method) -ida_netnode.netnode.hashset_buf (method) -ida_netnode.netnode.hashset_idx (method) -ida_netnode.netnode.hashstr (method) -ida_netnode.netnode.hashstr_buf (method) -ida_netnode.netnode.hashval (method) -ida_netnode.netnode.hashval_long (method) -ida_netnode.netnode.index (method) -ida_netnode.netnode.kill (method) -ida_netnode.netnode.long_value (method) -ida_netnode.netnode.lower_bound (method) -ida_netnode.netnode.lower_bound_ea (method) -ida_netnode.netnode.lower_bound_idx8 (method) -ida_netnode.netnode.moveto (method) -ida_netnode.netnode.next (method) -ida_netnode.netnode.prev (method) -ida_netnode.netnode.rename (method) -ida_netnode.netnode.set (method) -ida_netnode.netnode.set_long (method) -ida_netnode.netnode.setblob (method) -ida_netnode.netnode.setblob_ea (method) -ida_netnode.netnode.start (method) -ida_netnode.netnode.supdel (method) -ida_netnode.netnode.supdel_all (method) -ida_netnode.netnode.supdel_ea (method) -ida_netnode.netnode.supdel_idx8 (method) -ida_netnode.netnode.supdel_range (method) -ida_netnode.netnode.supdel_range_idx8 (method) -ida_netnode.netnode.supfirst (method) -ida_netnode.netnode.supfirst_idx8 (method) -ida_netnode.netnode.suplast (method) -ida_netnode.netnode.suplast_idx8 (method) -ida_netnode.netnode.supnext (method) -ida_netnode.netnode.supnext_idx8 (method) -ida_netnode.netnode.supprev (method) -ida_netnode.netnode.supprev_idx8 (method) -ida_netnode.netnode.supset (method) -ida_netnode.netnode.supset_ea (method) -ida_netnode.netnode.supset_idx8 (method) -ida_netnode.netnode.supshift (method) -ida_netnode.netnode.supstr (method) -ida_netnode.netnode.supstr_ea (method) -ida_netnode.netnode.supstr_idx8 (method) -ida_netnode.netnode.supval (method) -ida_netnode.netnode.supval_ea (method) -ida_netnode.netnode.supval_idx8 (method) -ida_netnode.netnode.valobj (method) -ida_netnode.netnode.valstr (method) -ida_netnode.netnode.value_exists (method) -ida_netnode.netnode_exist (function) -ida_netnode.ntag (variable) -ida_netnode.stag (variable) -ida_netnode.vtag (variable) -ida_offset (module) -ida_offset.add_refinfo_dref (function) -ida_offset.calc_basevalue (function) -ida_offset.calc_offset_base (function) -ida_offset.calc_probable_base_by_value (function) -ida_offset.calc_reference_data (function) -ida_offset.calc_target (function) -ida_offset.can_be_off32 (function) -ida_offset.get_default_reftype (function) -ida_offset.get_offbase (function) -ida_offset.get_offset_expr (function) -ida_offset.get_offset_expression (function) -ida_offset.op_offset (function) -ida_offset.op_offset_ex (function) -ida_offset.op_plain_offset (function) -ida_pro (module) -ida_pro.CP_UTF16 (variable) -ida_pro.IDA_SDK_VERSION (variable) -ida_pro.IDBDEC_ESCAPE (variable) -ida_pro.IOREDIR_APPEND (variable) -ida_pro.IOREDIR_INPUT (variable) -ida_pro.IOREDIR_OUTPUT (variable) -ida_pro.IOREDIR_QUOTED (variable) -ida_pro.MAXSTR (variable) -ida_pro.SUBSTCHAR (variable) -ida_pro.__MF__ (variable) -ida_pro.__qmutex_t (class) -ida_pro.__qmutex_t.__init__ (method) -ida_pro.__qsemaphore_t (class) -ida_pro.__qsemaphore_t.__init__ (method) -ida_pro.__qthread_t (class) -ida_pro.__qthread_t.__init__ (method) -ida_pro._qstrvec_t (class) -ida_pro._qstrvec_t.__get_size (method) -ida_pro._qstrvec_t.__getitem__ (method) -ida_pro._qstrvec_t.__init__ (method) -ida_pro._qstrvec_t.__setitem__ (method) -ida_pro._qstrvec_t._create_clink (method) -ida_pro._qstrvec_t._del_clink (method) -ida_pro._qstrvec_t._get_clink_ptr (method) -ida_pro._qstrvec_t.add (method) -ida_pro._qstrvec_t.addressof (method) -ida_pro._qstrvec_t.assign (method) -ida_pro._qstrvec_t.clear (method) -ida_pro._qstrvec_t.from_list (method) -ida_pro._qstrvec_t.insert (method) -ida_pro._qstrvec_t.remove (method) -ida_pro._qstrvec_t.size (variable) -ida_pro.boolvec_t (class) -ida_pro.boolvec_t.__eq__ (method) -ida_pro.boolvec_t.__getitem__ (method) -ida_pro.boolvec_t.__init__ (method) -ida_pro.boolvec_t.__len__ (method) -ida_pro.boolvec_t.__ne__ (method) -ida_pro.boolvec_t.__setitem__ (method) -ida_pro.boolvec_t._del (method) -ida_pro.boolvec_t.add_unique (method) -ida_pro.boolvec_t.at (method) -ida_pro.boolvec_t.begin (method) -ida_pro.boolvec_t.capacity (method) -ida_pro.boolvec_t.clear (method) -ida_pro.boolvec_t.empty (method) -ida_pro.boolvec_t.end (method) -ida_pro.boolvec_t.erase (method) -ida_pro.boolvec_t.extract (method) -ida_pro.boolvec_t.find (method) -ida_pro.boolvec_t.grow (method) -ida_pro.boolvec_t.has (method) -ida_pro.boolvec_t.inject (method) -ida_pro.boolvec_t.insert (method) -ida_pro.boolvec_t.pop_back (method) -ida_pro.boolvec_t.push_back (method) -ida_pro.boolvec_t.qclear (method) -ida_pro.boolvec_t.reserve (method) -ida_pro.boolvec_t.resize (method) -ida_pro.boolvec_t.size (method) -ida_pro.boolvec_t.swap (method) -ida_pro.boolvec_t.truncate (method) -ida_pro.channel_redir_t (class) -ida_pro.channel_redir_t.__init__ (method) -ida_pro.channel_redir_t.fd (variable) -ida_pro.channel_redir_t.file (variable) -ida_pro.channel_redir_t.flags (variable) -ida_pro.channel_redir_t.is_append (method) -ida_pro.channel_redir_t.is_input (method) -ida_pro.channel_redir_t.is_output (method) -ida_pro.channel_redir_t.is_quoted (method) -ida_pro.channel_redir_t.length (variable) -ida_pro.channel_redir_t.start (variable) -ida_pro.check_process_exit (function) -ida_pro.ea_array (class) -ida_pro.ea_array.__getitem__ (method) -ida_pro.ea_array.__init__ (method) -ida_pro.ea_array.__setitem__ (method) -ida_pro.ea_array.cast (method) -ida_pro.ea_array.frompointer (method) -ida_pro.ea_array_frompointer (function) -ida_pro.ea_pointer (class) -ida_pro.ea_pointer.__init__ (method) -ida_pro.ea_pointer.assign (method) -ida_pro.ea_pointer.cast (method) -ida_pro.ea_pointer.frompointer (method) -ida_pro.ea_pointer.value (method) -ida_pro.ea_pointer_frompointer (function) -ida_pro.extend_sign (function) -ida_pro.instant_dbgopts_t (class) -ida_pro.instant_dbgopts_t.__init__ (method) -ida_pro.instant_dbgopts_t.attach (variable) -ida_pro.instant_dbgopts_t.debmod (variable) -ida_pro.instant_dbgopts_t.env (variable) -ida_pro.instant_dbgopts_t.event_id (variable) -ida_pro.instant_dbgopts_t.host (variable) -ida_pro.instant_dbgopts_t.pid (variable) -ida_pro.instant_dbgopts_t.port (variable) -ida_pro.int64vec_t (class) -ida_pro.int64vec_t.__eq__ (method) -ida_pro.int64vec_t.__getitem__ (method) -ida_pro.int64vec_t.__init__ (method) -ida_pro.int64vec_t.__len__ (method) -ida_pro.int64vec_t.__ne__ (method) -ida_pro.int64vec_t.__setitem__ (method) -ida_pro.int64vec_t._del (method) -ida_pro.int64vec_t.add_unique (method) -ida_pro.int64vec_t.at (method) -ida_pro.int64vec_t.begin (method) -ida_pro.int64vec_t.capacity (method) -ida_pro.int64vec_t.clear (method) -ida_pro.int64vec_t.empty (method) -ida_pro.int64vec_t.end (method) -ida_pro.int64vec_t.erase (method) -ida_pro.int64vec_t.extract (method) -ida_pro.int64vec_t.find (method) -ida_pro.int64vec_t.has (method) -ida_pro.int64vec_t.inject (method) -ida_pro.int64vec_t.insert (method) -ida_pro.int64vec_t.pop_back (method) -ida_pro.int64vec_t.push_back (method) -ida_pro.int64vec_t.qclear (method) -ida_pro.int64vec_t.reserve (method) -ida_pro.int64vec_t.resize (method) -ida_pro.int64vec_t.size (method) -ida_pro.int64vec_t.swap (method) -ida_pro.int64vec_t.truncate (method) -ida_pro.int_pointer (class) -ida_pro.int_pointer.__init__ (method) -ida_pro.int_pointer.assign (method) -ida_pro.int_pointer.cast (method) -ida_pro.int_pointer.frompointer (method) -ida_pro.int_pointer.value (method) -ida_pro.int_pointer_frompointer (function) -ida_pro.intvec_t (class) -ida_pro.intvec_t.__eq__ (method) -ida_pro.intvec_t.__getitem__ (method) -ida_pro.intvec_t.__init__ (method) -ida_pro.intvec_t.__len__ (method) -ida_pro.intvec_t.__ne__ (method) -ida_pro.intvec_t.__setitem__ (method) -ida_pro.intvec_t._del (method) -ida_pro.intvec_t.add_unique (method) -ida_pro.intvec_t.at (method) -ida_pro.intvec_t.begin (method) -ida_pro.intvec_t.capacity (method) -ida_pro.intvec_t.clear (method) -ida_pro.intvec_t.empty (method) -ida_pro.intvec_t.end (method) -ida_pro.intvec_t.erase (method) -ida_pro.intvec_t.extract (method) -ida_pro.intvec_t.find (method) -ida_pro.intvec_t.has (method) -ida_pro.intvec_t.inject (method) -ida_pro.intvec_t.insert (method) -ida_pro.intvec_t.pop_back (method) -ida_pro.intvec_t.push_back (method) -ida_pro.intvec_t.qclear (method) -ida_pro.intvec_t.reserve (method) -ida_pro.intvec_t.resize (method) -ida_pro.intvec_t.size (method) -ida_pro.intvec_t.swap (method) -ida_pro.intvec_t.truncate (method) -ida_pro.is_control_tty (function) -ida_pro.is_cvt64 (function) -ida_pro.is_main_thread (function) -ida_pro.log2ceil (function) -ida_pro.log2floor (function) -ida_pro.parse_dbgopts (function) -ida_pro.qatoll (function) -ida_pro.qcontrol_tty (function) -ida_pro.qdetach_tty (function) -ida_pro.qexit (function) -ida_pro.qmutex_locker_t (class) -ida_pro.qmutex_locker_t.__init__ (method) -ida_pro.qrefcnt_obj_t (class) -ida_pro.qrefcnt_obj_t.__init__ (method) -ida_pro.qrefcnt_obj_t.refcnt (variable) -ida_pro.qrefcnt_obj_t.release (method) -ida_pro.qstrvec_t_add (function) -ida_pro.qstrvec_t_addressof (function) -ida_pro.qstrvec_t_assign (function) -ida_pro.qstrvec_t_clear (function) -ida_pro.qstrvec_t_create (function) -ida_pro.qstrvec_t_destroy (function) -ida_pro.qstrvec_t_from_list (function) -ida_pro.qstrvec_t_get (function) -ida_pro.qstrvec_t_get_clink (function) -ida_pro.qstrvec_t_get_clink_ptr (function) -ida_pro.qstrvec_t_insert (function) -ida_pro.qstrvec_t_remove (function) -ida_pro.qstrvec_t_set (function) -ida_pro.qstrvec_t_size (function) -ida_pro.qthread_equal (function) -ida_pro.quote_cmdline_arg (function) -ida_pro.qvector_reserve (function) -ida_pro.readbytes (function) -ida_pro.reloc_value (function) -ida_pro.relocate_relobj (function) -ida_pro.sel_array (class) -ida_pro.sel_array.__getitem__ (method) -ida_pro.sel_array.__init__ (method) -ida_pro.sel_array.__setitem__ (method) -ida_pro.sel_array.cast (method) -ida_pro.sel_array.frompointer (method) -ida_pro.sel_array_frompointer (function) -ida_pro.sel_pointer (class) -ida_pro.sel_pointer.__init__ (method) -ida_pro.sel_pointer.assign (method) -ida_pro.sel_pointer.cast (method) -ida_pro.sel_pointer.frompointer (method) -ida_pro.sel_pointer.value (method) -ida_pro.sel_pointer_frompointer (function) -ida_pro.sizevec_t (class) -ida_pro.sizevec_t.__eq__ (method) -ida_pro.sizevec_t.__getitem__ (method) -ida_pro.sizevec_t.__init__ (method) -ida_pro.sizevec_t.__len__ (method) -ida_pro.sizevec_t.__ne__ (method) -ida_pro.sizevec_t.__setitem__ (method) -ida_pro.sizevec_t._del (method) -ida_pro.sizevec_t.add_unique (method) -ida_pro.sizevec_t.at (method) -ida_pro.sizevec_t.begin (method) -ida_pro.sizevec_t.capacity (method) -ida_pro.sizevec_t.clear (method) -ida_pro.sizevec_t.empty (method) -ida_pro.sizevec_t.end (method) -ida_pro.sizevec_t.erase (method) -ida_pro.sizevec_t.extract (method) -ida_pro.sizevec_t.find (method) -ida_pro.sizevec_t.grow (method) -ida_pro.sizevec_t.has (method) -ida_pro.sizevec_t.inject (method) -ida_pro.sizevec_t.insert (method) -ida_pro.sizevec_t.pop_back (method) -ida_pro.sizevec_t.push_back (method) -ida_pro.sizevec_t.qclear (method) -ida_pro.sizevec_t.reserve (method) -ida_pro.sizevec_t.resize (method) -ida_pro.sizevec_t.size (method) -ida_pro.sizevec_t.swap (method) -ida_pro.sizevec_t.truncate (method) -ida_pro.str2user (function) -ida_pro.strvec_t (class) -ida_pro.strvec_t.__getitem__ (method) -ida_pro.strvec_t.__init__ (method) -ida_pro.strvec_t.__len__ (method) -ida_pro.strvec_t.__setitem__ (method) -ida_pro.strvec_t.at (method) -ida_pro.strvec_t.begin (method) -ida_pro.strvec_t.capacity (method) -ida_pro.strvec_t.clear (method) -ida_pro.strvec_t.empty (method) -ida_pro.strvec_t.end (method) -ida_pro.strvec_t.erase (method) -ida_pro.strvec_t.extract (method) -ida_pro.strvec_t.grow (method) -ida_pro.strvec_t.inject (method) -ida_pro.strvec_t.insert (method) -ida_pro.strvec_t.pop_back (method) -ida_pro.strvec_t.push_back (method) -ida_pro.strvec_t.qclear (method) -ida_pro.strvec_t.reserve (method) -ida_pro.strvec_t.resize (method) -ida_pro.strvec_t.size (method) -ida_pro.strvec_t.swap (method) -ida_pro.strvec_t.truncate (method) -ida_pro.sval_pointer (class) -ida_pro.sval_pointer.__init__ (method) -ida_pro.sval_pointer.assign (method) -ida_pro.sval_pointer.cast (method) -ida_pro.sval_pointer.frompointer (method) -ida_pro.sval_pointer.value (method) -ida_pro.sval_pointer_frompointer (function) -ida_pro.tid_array (class) -ida_pro.tid_array.__getitem__ (method) -ida_pro.tid_array.__init__ (method) -ida_pro.tid_array.__setitem__ (method) -ida_pro.tid_array.cast (method) -ida_pro.tid_array.frompointer (method) -ida_pro.tid_array_frompointer (function) -ida_pro.uchar_array (class) -ida_pro.uchar_array.__getitem__ (method) -ida_pro.uchar_array.__init__ (method) -ida_pro.uchar_array.__setitem__ (method) -ida_pro.uchar_array.cast (method) -ida_pro.uchar_array.frompointer (method) -ida_pro.uchar_array_frompointer (function) -ida_pro.uint64vec_t (class) -ida_pro.uint64vec_t.__eq__ (method) -ida_pro.uint64vec_t.__getitem__ (method) -ida_pro.uint64vec_t.__init__ (method) -ida_pro.uint64vec_t.__len__ (method) -ida_pro.uint64vec_t.__ne__ (method) -ida_pro.uint64vec_t.__setitem__ (method) -ida_pro.uint64vec_t._del (method) -ida_pro.uint64vec_t.add_unique (method) -ida_pro.uint64vec_t.at (method) -ida_pro.uint64vec_t.begin (method) -ida_pro.uint64vec_t.capacity (method) -ida_pro.uint64vec_t.clear (method) -ida_pro.uint64vec_t.empty (method) -ida_pro.uint64vec_t.end (method) -ida_pro.uint64vec_t.erase (method) -ida_pro.uint64vec_t.extract (method) -ida_pro.uint64vec_t.find (method) -ida_pro.uint64vec_t.has (method) -ida_pro.uint64vec_t.inject (method) -ida_pro.uint64vec_t.insert (method) -ida_pro.uint64vec_t.pop_back (method) -ida_pro.uint64vec_t.push_back (method) -ida_pro.uint64vec_t.qclear (method) -ida_pro.uint64vec_t.reserve (method) -ida_pro.uint64vec_t.resize (method) -ida_pro.uint64vec_t.size (method) -ida_pro.uint64vec_t.swap (method) -ida_pro.uint64vec_t.truncate (method) -ida_pro.uintvec_t (class) -ida_pro.uintvec_t.__eq__ (method) -ida_pro.uintvec_t.__getitem__ (method) -ida_pro.uintvec_t.__init__ (method) -ida_pro.uintvec_t.__len__ (method) -ida_pro.uintvec_t.__ne__ (method) -ida_pro.uintvec_t.__setitem__ (method) -ida_pro.uintvec_t._del (method) -ida_pro.uintvec_t.add_unique (method) -ida_pro.uintvec_t.at (method) -ida_pro.uintvec_t.begin (method) -ida_pro.uintvec_t.capacity (method) -ida_pro.uintvec_t.clear (method) -ida_pro.uintvec_t.empty (method) -ida_pro.uintvec_t.end (method) -ida_pro.uintvec_t.erase (method) -ida_pro.uintvec_t.extract (method) -ida_pro.uintvec_t.find (method) -ida_pro.uintvec_t.has (method) -ida_pro.uintvec_t.inject (method) -ida_pro.uintvec_t.insert (method) -ida_pro.uintvec_t.pop_back (method) -ida_pro.uintvec_t.push_back (method) -ida_pro.uintvec_t.qclear (method) -ida_pro.uintvec_t.reserve (method) -ida_pro.uintvec_t.resize (method) -ida_pro.uintvec_t.size (method) -ida_pro.uintvec_t.swap (method) -ida_pro.uintvec_t.truncate (method) -ida_pro.uval_array (class) -ida_pro.uval_array.__getitem__ (method) -ida_pro.uval_array.__init__ (method) -ida_pro.uval_array.__setitem__ (method) -ida_pro.uval_array.cast (method) -ida_pro.uval_array.frompointer (method) -ida_pro.uval_array_frompointer (function) -ida_pro.writebytes (function) -ida_problems (module) -ida_problems.PR_ATTN (variable) -ida_problems.PR_BADSTACK (variable) -ida_problems.PR_COLLISION (variable) -ida_problems.PR_DECIMP (variable) -ida_problems.PR_DISASM (variable) -ida_problems.PR_END (variable) -ida_problems.PR_FINAL (variable) -ida_problems.PR_HEAD (variable) -ida_problems.PR_ILLADDR (variable) -ida_problems.PR_JUMP (variable) -ida_problems.PR_MANYLINES (variable) -ida_problems.PR_NOBASE (variable) -ida_problems.PR_NOCMT (variable) -ida_problems.PR_NOFOP (variable) -ida_problems.PR_NONAME (variable) -ida_problems.PR_NOXREFS (variable) -ida_problems.PR_ROLLED (variable) -ida_problems.forget_problem (function) -ida_problems.get_problem (function) -ida_problems.get_problem_desc (function) -ida_problems.get_problem_name (function) -ida_problems.is_problem_present (function) -ida_problems.remember_problem (function) -ida_problems.was_ida_decision (function) -ida_range (module) -ida_range.RANGE_KIND_FUNC (variable) -ida_range.RANGE_KIND_HIDDEN_RANGE (variable) -ida_range.RANGE_KIND_SEGMENT (variable) -ida_range.array_of_rangesets (class) -ida_range.array_of_rangesets.__eq__ (method) -ida_range.array_of_rangesets.__getitem__ (method) -ida_range.array_of_rangesets.__init__ (method) -ida_range.array_of_rangesets.__len__ (method) -ida_range.array_of_rangesets.__ne__ (method) -ida_range.array_of_rangesets.__setitem__ (method) -ida_range.array_of_rangesets._del (method) -ida_range.array_of_rangesets.add_unique (method) -ida_range.array_of_rangesets.at (method) -ida_range.array_of_rangesets.begin (method) -ida_range.array_of_rangesets.capacity (method) -ida_range.array_of_rangesets.clear (method) -ida_range.array_of_rangesets.empty (method) -ida_range.array_of_rangesets.end (method) -ida_range.array_of_rangesets.erase (method) -ida_range.array_of_rangesets.extract (method) -ida_range.array_of_rangesets.find (method) -ida_range.array_of_rangesets.grow (method) -ida_range.array_of_rangesets.has (method) -ida_range.array_of_rangesets.inject (method) -ida_range.array_of_rangesets.insert (method) -ida_range.array_of_rangesets.pop_back (method) -ida_range.array_of_rangesets.push_back (method) -ida_range.array_of_rangesets.qclear (method) -ida_range.array_of_rangesets.reserve (method) -ida_range.array_of_rangesets.resize (method) -ida_range.array_of_rangesets.size (method) -ida_range.array_of_rangesets.swap (method) -ida_range.array_of_rangesets.truncate (method) -ida_range.range_t (class) -ida_range.range_t.__eq__ (method) -ida_range.range_t.__gt__ (method) -ida_range.range_t.__init__ (method) -ida_range.range_t.__lt__ (method) -ida_range.range_t.__ne__ (method) -ida_range.range_t._print (method) -ida_range.range_t.clear (method) -ida_range.range_t.compare (method) -ida_range.range_t.contains (method) -ida_range.range_t.empty (method) -ida_range.range_t.end_ea (variable) -ida_range.range_t.extend (method) -ida_range.range_t.intersect (method) -ida_range.range_t.overlaps (method) -ida_range.range_t.size (method) -ida_range.range_t.start_ea (variable) -ida_range.range_t_print (function) -ida_range.rangeset_t (class) -ida_range.rangeset_t.__eq__ (method) -ida_range.rangeset_t.__getitem__ (method) -ida_range.rangeset_t.__init__ (method) -ida_range.rangeset_t.__ne__ (method) -ida_range.rangeset_t._print (method) -ida_range.rangeset_t.add (method) -ida_range.rangeset_t.begin (method) -ida_range.rangeset_t.cached_range (method) -ida_range.rangeset_t.clear (method) -ida_range.rangeset_t.contains (method) -ida_range.rangeset_t.empty (method) -ida_range.rangeset_t.end (method) -ida_range.rangeset_t.find_range (method) -ida_range.rangeset_t.getrange (method) -ida_range.rangeset_t.has_common (method) -ida_range.rangeset_t.includes (method) -ida_range.rangeset_t.intersect (method) -ida_range.rangeset_t.is_equal (method) -ida_range.rangeset_t.is_subset_of (method) -ida_range.rangeset_t.lastrange (method) -ida_range.rangeset_t.next_addr (method) -ida_range.rangeset_t.next_range (method) -ida_range.rangeset_t.nranges (method) -ida_range.rangeset_t.prev_addr (method) -ida_range.rangeset_t.prev_range (method) -ida_range.rangeset_t.sub (method) -ida_range.rangeset_t.swap (method) -ida_range.rangevec_base_t (class) -ida_range.rangevec_base_t.__eq__ (method) -ida_range.rangevec_base_t.__getitem__ (method) -ida_range.rangevec_base_t.__init__ (method) -ida_range.rangevec_base_t.__len__ (method) -ida_range.rangevec_base_t.__ne__ (method) -ida_range.rangevec_base_t.__setitem__ (method) -ida_range.rangevec_base_t._del (method) -ida_range.rangevec_base_t.add_unique (method) -ida_range.rangevec_base_t.at (method) -ida_range.rangevec_base_t.begin (method) -ida_range.rangevec_base_t.capacity (method) -ida_range.rangevec_base_t.clear (method) -ida_range.rangevec_base_t.empty (method) -ida_range.rangevec_base_t.end (method) -ida_range.rangevec_base_t.erase (method) -ida_range.rangevec_base_t.extract (method) -ida_range.rangevec_base_t.find (method) -ida_range.rangevec_base_t.grow (method) -ida_range.rangevec_base_t.has (method) -ida_range.rangevec_base_t.inject (method) -ida_range.rangevec_base_t.insert (method) -ida_range.rangevec_base_t.pop_back (method) -ida_range.rangevec_base_t.push_back (method) -ida_range.rangevec_base_t.qclear (method) -ida_range.rangevec_base_t.reserve (method) -ida_range.rangevec_base_t.resize (method) -ida_range.rangevec_base_t.size (method) -ida_range.rangevec_base_t.swap (method) -ida_range.rangevec_base_t.truncate (method) -ida_range.rangevec_t (class) -ida_range.rangevec_t.__init__ (method) -ida_registry (module) -ida_registry.ROOT_KEY_NAME (variable) -ida_registry.reg_binary (variable) -ida_registry.reg_data_type (function) -ida_registry.reg_delete (function) -ida_registry.reg_delete_subkey (function) -ida_registry.reg_delete_tree (function) -ida_registry.reg_dword (variable) -ida_registry.reg_exists (function) -ida_registry.reg_flush (function) -ida_registry.reg_load (function) -ida_registry.reg_read_binary (function) -ida_registry.reg_read_bool (function) -ida_registry.reg_read_int (function) -ida_registry.reg_read_string (function) -ida_registry.reg_read_strlist (function) -ida_registry.reg_subkey_exists (function) -ida_registry.reg_subkey_subkeys (function) -ida_registry.reg_subkey_values (function) -ida_registry.reg_sz (variable) -ida_registry.reg_unknown (variable) -ida_registry.reg_update_filestrlist (function) -ida_registry.reg_update_strlist (function) -ida_registry.reg_write_binary (function) -ida_registry.reg_write_bool (function) -ida_registry.reg_write_int (function) -ida_registry.reg_write_string (function) -ida_registry.set_registry_root (function) -ida_regfinder (module) -ida_regfinder.find_nearest_rvi (function) -ida_regfinder.find_reg_value (function) -ida_regfinder.find_reg_value_info (function) -ida_regfinder.find_sp_value (function) -ida_regfinder.invalidate_regfinder_cache (function) -ida_regfinder.reg_value_def_t (class) -ida_regfinder.reg_value_def_t.LIKE_GOT (variable) -ida_regfinder.reg_value_def_t.NOVAL (variable) -ida_regfinder.reg_value_def_t.PC_BASED (variable) -ida_regfinder.reg_value_def_t.SHORT_INSN (variable) -ida_regfinder.reg_value_def_t.SPVAL (variable) -ida_regfinder.reg_value_def_t.UVAL (variable) -ida_regfinder.reg_value_def_t.__eq__ (method) -ida_regfinder.reg_value_def_t.__init__ (method) -ida_regfinder.reg_value_def_t.__lt__ (method) -ida_regfinder.reg_value_def_t.def_ea (variable) -ida_regfinder.reg_value_def_t.def_itype (variable) -ida_regfinder.reg_value_def_t.dstr (method) -ida_regfinder.reg_value_def_t.flags (variable) -ida_regfinder.reg_value_def_t.is_like_got (method) -ida_regfinder.reg_value_def_t.is_pc_based (method) -ida_regfinder.reg_value_def_t.is_short_insn (method) -ida_regfinder.reg_value_def_t.val (variable) -ida_regfinder.reg_value_info_t (class) -ida_regfinder.reg_value_info_t.CONTAINED (variable) -ida_regfinder.reg_value_info_t.CONTAINS (variable) -ida_regfinder.reg_value_info_t.EQUAL (variable) -ida_regfinder.reg_value_info_t.NOT_COMPARABLE (variable) -ida_regfinder.reg_value_info_t.__getitem__ (method) -ida_regfinder.reg_value_info_t.__init__ (method) -ida_regfinder.reg_value_info_t.__len__ (method) -ida_regfinder.reg_value_info_t.__str__ (method) -ida_regfinder.reg_value_info_t.aborted (method) -ida_regfinder.reg_value_info_t.add (method) -ida_regfinder.reg_value_info_t.add_num (method) -ida_regfinder.reg_value_info_t.band (method) -ida_regfinder.reg_value_info_t.bandnot (method) -ida_regfinder.reg_value_info_t.bnot (method) -ida_regfinder.reg_value_info_t.bor (method) -ida_regfinder.reg_value_info_t.bxor (method) -ida_regfinder.reg_value_info_t.clear (method) -ida_regfinder.reg_value_info_t.empty (method) -ida_regfinder.reg_value_info_t.extend (method) -ida_regfinder.reg_value_info_t.get_def_ea (method) -ida_regfinder.reg_value_info_t.get_def_itype (method) -ida_regfinder.reg_value_info_t.get_num (method) -ida_regfinder.reg_value_info_t.get_spd (method) -ida_regfinder.reg_value_info_t.have_all_vals_flag (method) -ida_regfinder.reg_value_info_t.is_all_vals_like_got (method) -ida_regfinder.reg_value_info_t.is_all_vals_pc_based (method) -ida_regfinder.reg_value_info_t.is_badinsn (method) -ida_regfinder.reg_value_info_t.is_dead_end (method) -ida_regfinder.reg_value_info_t.is_known (method) -ida_regfinder.reg_value_info_t.is_num (method) -ida_regfinder.reg_value_info_t.is_spd (method) -ida_regfinder.reg_value_info_t.is_special (method) -ida_regfinder.reg_value_info_t.is_unkfunc (method) -ida_regfinder.reg_value_info_t.is_unkinsn (method) -ida_regfinder.reg_value_info_t.is_unkloop (method) -ida_regfinder.reg_value_info_t.is_unkmult (method) -ida_regfinder.reg_value_info_t.is_unknown (method) -ida_regfinder.reg_value_info_t.is_value_unique (method) -ida_regfinder.reg_value_info_t.make_aborted (method) -ida_regfinder.reg_value_info_t.make_badinsn (method) -ida_regfinder.reg_value_info_t.make_dead_end (method) -ida_regfinder.reg_value_info_t.make_initial_sp (method) -ida_regfinder.reg_value_info_t.make_num (method) -ida_regfinder.reg_value_info_t.make_unkfunc (method) -ida_regfinder.reg_value_info_t.make_unkinsn (method) -ida_regfinder.reg_value_info_t.make_unkloop (method) -ida_regfinder.reg_value_info_t.make_unkmult (method) -ida_regfinder.reg_value_info_t.neg (method) -ida_regfinder.reg_value_info_t.set_aborted (method) -ida_regfinder.reg_value_info_t.set_badinsn (method) -ida_regfinder.reg_value_info_t.set_dead_end (method) -ida_regfinder.reg_value_info_t.set_num (method) -ida_regfinder.reg_value_info_t.set_unkfunc (method) -ida_regfinder.reg_value_info_t.set_unkinsn (method) -ida_regfinder.reg_value_info_t.set_unkloop (method) -ida_regfinder.reg_value_info_t.set_unkmult (method) -ida_regfinder.reg_value_info_t.shift_left (method) -ida_regfinder.reg_value_info_t.shift_right (method) -ida_regfinder.reg_value_info_t.sll (method) -ida_regfinder.reg_value_info_t.slr (method) -ida_regfinder.reg_value_info_t.sub (method) -ida_regfinder.reg_value_info_t.vals_union (method) -ida_regfinder.reg_value_info_t_make_aborted (function) -ida_regfinder.reg_value_info_t_make_badinsn (function) -ida_regfinder.reg_value_info_t_make_dead_end (function) -ida_regfinder.reg_value_info_t_make_initial_sp (function) -ida_regfinder.reg_value_info_t_make_num (function) -ida_regfinder.reg_value_info_t_make_unkfunc (function) -ida_regfinder.reg_value_info_t_make_unkinsn (function) -ida_regfinder.reg_value_info_t_make_unkloop (function) -ida_regfinder.reg_value_info_t_make_unkmult (function) -ida_search (module) -ida_search.SEARCH_BRK (variable) -ida_search.SEARCH_CASE (variable) -ida_search.SEARCH_DOWN (variable) -ida_search.SEARCH_IDENT (variable) -ida_search.SEARCH_NEXT (variable) -ida_search.SEARCH_NOBRK (variable) -ida_search.SEARCH_NOSHOW (variable) -ida_search.SEARCH_REGEX (variable) -ida_search.SEARCH_UP (variable) -ida_search.SEARCH_USESEL (variable) -ida_search.find_binary (function) -ida_search.find_code (function) -ida_search.find_data (function) -ida_search.find_defined (function) -ida_search.find_error (function) -ida_search.find_imm (function) -ida_search.find_not_func (function) -ida_search.find_notype (function) -ida_search.find_reg_access (function) -ida_search.find_suspop (function) -ida_search.find_text (function) -ida_search.find_unknown (function) -ida_search.search_down (function) -ida_segment (module) -ida_segment.ADDSEG_FILLGAP (variable) -ida_segment.ADDSEG_IDBENC (variable) -ida_segment.ADDSEG_NOAA (variable) -ida_segment.ADDSEG_NOSREG (variable) -ida_segment.ADDSEG_NOTRUNC (variable) -ida_segment.ADDSEG_OR_DIE (variable) -ida_segment.ADDSEG_QUIET (variable) -ida_segment.ADDSEG_SPARSE (variable) -ida_segment.CSS_BREAK (variable) -ida_segment.CSS_NODBG (variable) -ida_segment.CSS_NOMEM (variable) -ida_segment.CSS_NORANGE (variable) -ida_segment.CSS_OK (variable) -ida_segment.MAX_GROUPS (variable) -ida_segment.MAX_SEGM_TRANSLATIONS (variable) -ida_segment.MOVE_SEGM_CHUNK (variable) -ida_segment.MOVE_SEGM_DEBUG (variable) -ida_segment.MOVE_SEGM_IDP (variable) -ida_segment.MOVE_SEGM_INVAL (variable) -ida_segment.MOVE_SEGM_LOADER (variable) -ida_segment.MOVE_SEGM_MAPPING (variable) -ida_segment.MOVE_SEGM_ODD (variable) -ida_segment.MOVE_SEGM_OK (variable) -ida_segment.MOVE_SEGM_ORPHAN (variable) -ida_segment.MOVE_SEGM_PARAM (variable) -ida_segment.MOVE_SEGM_ROOM (variable) -ida_segment.MOVE_SEGM_SOURCEFILES (variable) -ida_segment.MSF_FIXONCE (variable) -ida_segment.MSF_LDKEEP (variable) -ida_segment.MSF_NETNODES (variable) -ida_segment.MSF_NOFIX (variable) -ida_segment.MSF_PRIORITY (variable) -ida_segment.MSF_SILENT (variable) -ida_segment.SEGMOD_KEEP (variable) -ida_segment.SEGMOD_KEEP0 (variable) -ida_segment.SEGMOD_KEEPSEL (variable) -ida_segment.SEGMOD_KILL (variable) -ida_segment.SEGMOD_NOMOVE (variable) -ida_segment.SEGMOD_SILENT (variable) -ida_segment.SEGMOD_SPARSE (variable) -ida_segment.SEGPERM_EXEC (variable) -ida_segment.SEGPERM_READ (variable) -ida_segment.SEGPERM_WRITE (variable) -ida_segment.SEG_ABSSYM (variable) -ida_segment.SEG_BSS (variable) -ida_segment.SEG_CODE (variable) -ida_segment.SEG_COMM (variable) -ida_segment.SEG_DATA (variable) -ida_segment.SEG_GRP (variable) -ida_segment.SEG_IMEM (variable) -ida_segment.SEG_NORM (variable) -ida_segment.SEG_NULL (variable) -ida_segment.SEG_UNDF (variable) -ida_segment.SEG_XTRN (variable) -ida_segment.SFL_COMORG (variable) -ida_segment.SFL_DEBUG (variable) -ida_segment.SFL_HEADER (variable) -ida_segment.SFL_HIDDEN (variable) -ida_segment.SFL_HIDETYPE (variable) -ida_segment.SFL_LOADER (variable) -ida_segment.SFL_OBOK (variable) -ida_segment.SNAP_ALL_SEG (variable) -ida_segment.SNAP_CUR_SEG (variable) -ida_segment.SNAP_LOAD_SEG (variable) -ida_segment.SREG_NUM (variable) -ida_segment.add_segm (function) -ida_segment.add_segm_ex (function) -ida_segment.add_segment_translation (function) -ida_segment.allocate_selector (function) -ida_segment.change_segment_status (function) -ida_segment.del_segm (function) -ida_segment.del_segment_translations (function) -ida_segment.del_selector (function) -ida_segment.find_free_selector (function) -ida_segment.find_selector (function) -ida_segment.get_defsr (function) -ida_segment.get_first_seg (function) -ida_segment.get_group_selector (function) -ida_segment.get_last_seg (function) -ida_segment.get_next_seg (function) -ida_segment.get_prev_seg (function) -ida_segment.get_segm_base (function) -ida_segment.get_segm_by_name (function) -ida_segment.get_segm_by_sel (function) -ida_segment.get_segm_class (function) -ida_segment.get_segm_name (function) -ida_segment.get_segm_num (function) -ida_segment.get_segm_para (function) -ida_segment.get_segm_qty (function) -ida_segment.get_segment_alignment (function) -ida_segment.get_segment_cmt (function) -ida_segment.get_segment_combination (function) -ida_segment.get_segment_translations (function) -ida_segment.get_selector_qty (function) -ida_segment.get_visible_segm_name (function) -ida_segment.getn_selector (function) -ida_segment.getnseg (function) -ida_segment.getseg (function) -ida_segment.is_finally_visible_segm (function) -ida_segment.is_miniidb (function) -ida_segment.is_segm_locked (function) -ida_segment.is_spec_ea (function) -ida_segment.is_spec_segm (function) -ida_segment.is_visible_segm (function) -ida_segment.lock_segm (function) -ida_segment.lock_segment (class) -ida_segment.lock_segment.__init__ (method) -ida_segment.move_segm (function) -ida_segment.move_segm_start (function) -ida_segment.move_segm_strerror (function) -ida_segment.rebase_program (function) -ida_segment.saAbs (variable) -ida_segment.saGroup (variable) -ida_segment.saRel1024Bytes (variable) -ida_segment.saRel128Bytes (variable) -ida_segment.saRel2048Bytes (variable) -ida_segment.saRel32Bytes (variable) -ida_segment.saRel4K (variable) -ida_segment.saRel512Bytes (variable) -ida_segment.saRel64Bytes (variable) -ida_segment.saRelByte (variable) -ida_segment.saRelDble (variable) -ida_segment.saRelPage (variable) -ida_segment.saRelPara (variable) -ida_segment.saRelQword (variable) -ida_segment.saRelWord (variable) -ida_segment.scCommon (variable) -ida_segment.scGroup (variable) -ida_segment.scPriv (variable) -ida_segment.scPub (variable) -ida_segment.scPub2 (variable) -ida_segment.scPub3 (variable) -ida_segment.scStack (variable) -ida_segment.segm_adjust_diff (function) -ida_segment.segm_adjust_ea (function) -ida_segment.segment_defsr_array (class) -ida_segment.segment_defsr_array.__getitem__ (method) -ida_segment.segment_defsr_array.__init__ (method) -ida_segment.segment_defsr_array.__len__ (method) -ida_segment.segment_defsr_array.__setitem__ (method) -ida_segment.segment_defsr_array._get_bytes (method) -ida_segment.segment_defsr_array._set_bytes (method) -ida_segment.segment_t (class) -ida_segment.segment_t.__getDefsr (method) -ida_segment.segment_t.__init__ (method) -ida_segment.segment_t.abits (method) -ida_segment.segment_t.abytes (method) -ida_segment.segment_t.align (variable) -ida_segment.segment_t.bitness (variable) -ida_segment.segment_t.clr_comorg (method) -ida_segment.segment_t.clr_ob_ok (method) -ida_segment.segment_t.color (variable) -ida_segment.segment_t.comb (variable) -ida_segment.segment_t.comorg (method) -ida_segment.segment_t.defsr (variable) -ida_segment.segment_t.flags (variable) -ida_segment.segment_t.is_16bit (method) -ida_segment.segment_t.is_32bit (method) -ida_segment.segment_t.is_64bit (method) -ida_segment.segment_t.is_header_segm (method) -ida_segment.segment_t.is_hidden_segtype (method) -ida_segment.segment_t.is_loader_segm (method) -ida_segment.segment_t.is_visible_segm (method) -ida_segment.segment_t.name (variable) -ida_segment.segment_t.ob_ok (method) -ida_segment.segment_t.orgbase (variable) -ida_segment.segment_t.perm (variable) -ida_segment.segment_t.sclass (variable) -ida_segment.segment_t.sel (variable) -ida_segment.segment_t.set_comorg (method) -ida_segment.segment_t.set_debugger_segm (method) -ida_segment.segment_t.set_header_segm (method) -ida_segment.segment_t.set_hidden_segtype (method) -ida_segment.segment_t.set_loader_segm (method) -ida_segment.segment_t.set_ob_ok (method) -ida_segment.segment_t.set_visible_segm (method) -ida_segment.segment_t.type (variable) -ida_segment.segment_t.update (method) -ida_segment.segtype (function) -ida_segment.sel2ea (function) -ida_segment.sel2para (function) -ida_segment.set_defsr (function) -ida_segment.set_group_selector (function) -ida_segment.set_segm_addressing (function) -ida_segment.set_segm_base (function) -ida_segment.set_segm_class (function) -ida_segment.set_segm_end (function) -ida_segment.set_segm_name (function) -ida_segment.set_segm_start (function) -ida_segment.set_segment_cmt (function) -ida_segment.set_segment_translations (function) -ida_segment.set_selector (function) -ida_segment.set_visible_segm (function) -ida_segment.setup_selector (function) -ida_segment.std_out_segm_footer (function) -ida_segment.take_memory_snapshot (function) -ida_segment.update_segm (function) -ida_segregs (module) -ida_segregs.SR_auto (variable) -ida_segregs.SR_autostart (variable) -ida_segregs.SR_inherit (variable) -ida_segregs.SR_user (variable) -ida_segregs.copy_sreg_ranges (function) -ida_segregs.del_sreg_range (function) -ida_segregs.get_prev_sreg_range (function) -ida_segregs.get_sreg (function) -ida_segregs.get_sreg_range (function) -ida_segregs.get_sreg_range_num (function) -ida_segregs.get_sreg_ranges_qty (function) -ida_segregs.getn_sreg_range (function) -ida_segregs.set_default_dataseg (function) -ida_segregs.set_default_sreg_value (function) -ida_segregs.set_sreg_at_next_code (function) -ida_segregs.split_sreg_range (function) -ida_segregs.sreg_range_t (class) -ida_segregs.sreg_range_t.__init__ (method) -ida_segregs.sreg_range_t.tag (variable) -ida_segregs.sreg_range_t.val (variable) -ida_srclang (module) -ida_srclang.SRCLANG_C (variable) -ida_srclang.SRCLANG_CPP (variable) -ida_srclang.SRCLANG_GO (variable) -ida_srclang.SRCLANG_OBJC (variable) -ida_srclang.SRCLANG_SWIFT (variable) -ida_srclang.parse_decls_for_srclang (function) -ida_srclang.parse_decls_with_parser (function) -ida_srclang.select_parser_by_name (function) -ida_srclang.select_parser_by_srclang (function) -ida_srclang.set_parser_argv (function) -ida_strlist (module) -ida_strlist.build_strlist (function) -ida_strlist.clear_strlist (function) -ida_strlist.get_strlist_item (function) -ida_strlist.get_strlist_options (function) -ida_strlist.get_strlist_qty (function) -ida_strlist.string_info_t (class) -ida_strlist.string_info_t.__init__ (method) -ida_strlist.string_info_t.__lt__ (method) -ida_strlist.strwinsetup_t (class) -ida_strlist.strwinsetup_t.__init__ (method) -ida_strlist.strwinsetup_t._get_strtypes (method) -ida_strlist.strwinsetup_t._set_strtypes (method) -ida_struct (module) -ida_struct.MF_BASECLASS (variable) -ida_struct.MF_BYTIL (variable) -ida_struct.MF_DTOR (variable) -ida_struct.MF_DUPNAME (variable) -ida_struct.MF_HASTI (variable) -ida_struct.MF_HASUNI (variable) -ida_struct.MF_OK (variable) -ida_struct.MF_UNIMEM (variable) -ida_struct.SET_MEMTI_BYTIL (variable) -ida_struct.SET_MEMTI_COMPATIBLE (variable) -ida_struct.SET_MEMTI_FUNCARG (variable) -ida_struct.SET_MEMTI_MAY_DESTROY (variable) -ida_struct.SET_MEMTI_USERTI (variable) -ida_struct.SF_ALIGN (variable) -ida_struct.SF_FRAME (variable) -ida_struct.SF_GHOST (variable) -ida_struct.SF_HASUNI (variable) -ida_struct.SF_HIDDEN (variable) -ida_struct.SF_NOLIST (variable) -ida_struct.SF_TYPLIB (variable) -ida_struct.SF_UNION (variable) -ida_struct.SF_VAR (variable) -ida_struct.SMT_ARRAY (variable) -ida_struct.SMT_BADARG (variable) -ida_struct.SMT_FAILED (variable) -ida_struct.SMT_KEEP (variable) -ida_struct.SMT_NOCOMPAT (variable) -ida_struct.SMT_OVERLAP (variable) -ida_struct.SMT_SIZE (variable) -ida_struct.SMT_WORSE (variable) -ida_struct.STRNFL_REGEX (variable) -ida_struct.STRUC_ERROR_MEMBER_LTUDT (variable) -ida_struct.STRUC_ERROR_MEMBER_NAME (variable) -ida_struct.STRUC_ERROR_MEMBER_NESTED (variable) -ida_struct.STRUC_ERROR_MEMBER_OFFSET (variable) -ida_struct.STRUC_ERROR_MEMBER_OK (variable) -ida_struct.STRUC_ERROR_MEMBER_SIZE (variable) -ida_struct.STRUC_ERROR_MEMBER_STRUCT (variable) -ida_struct.STRUC_ERROR_MEMBER_TINFO (variable) -ida_struct.STRUC_ERROR_MEMBER_UNIVAR (variable) -ida_struct.STRUC_ERROR_MEMBER_VARLAST (variable) -ida_struct.STRUC_SEPARATOR (variable) -ida_struct.add_struc (function) -ida_struct.add_struc_member (function) -ida_struct.del_member_tinfo (function) -ida_struct.del_struc (function) -ida_struct.del_struc_member (function) -ida_struct.del_struc_members (function) -ida_struct.dyn_member_ref_array (class) -ida_struct.dyn_member_ref_array.__getitem__ (method) -ida_struct.dyn_member_ref_array.__init__ (method) -ida_struct.dyn_member_ref_array.__len__ (method) -ida_struct.dyn_member_ref_array.__setitem__ (method) -ida_struct.expand_struc (function) -ida_struct.get_best_fit_member (function) -ida_struct.get_first_struc_idx (function) -ida_struct.get_innermost_member (function) -ida_struct.get_last_struc_idx (function) -ida_struct.get_max_offset (function) -ida_struct.get_member (function) -ida_struct.get_member_by_fullname (function) -ida_struct.get_member_by_id (function) -ida_struct.get_member_by_name (function) -ida_struct.get_member_cmt (function) -ida_struct.get_member_fullname (function) -ida_struct.get_member_id (function) -ida_struct.get_member_name (function) -ida_struct.get_member_size (function) -ida_struct.get_member_struc (function) -ida_struct.get_member_tinfo (function) -ida_struct.get_next_member_idx (function) -ida_struct.get_next_struc_idx (function) -ida_struct.get_or_guess_member_tinfo (function) -ida_struct.get_prev_member_idx (function) -ida_struct.get_prev_struc_idx (function) -ida_struct.get_sptr (function) -ida_struct.get_struc (function) -ida_struct.get_struc_by_idx (function) -ida_struct.get_struc_cmt (function) -ida_struct.get_struc_first_offset (function) -ida_struct.get_struc_id (function) -ida_struct.get_struc_idx (function) -ida_struct.get_struc_last_offset (function) -ida_struct.get_struc_name (function) -ida_struct.get_struc_next_offset (function) -ida_struct.get_struc_prev_offset (function) -ida_struct.get_struc_qty (function) -ida_struct.get_struc_size (function) -ida_struct.is_anonymous_member_name (function) -ida_struct.is_dummy_member_name (function) -ida_struct.is_member_id (function) -ida_struct.is_special_member (function) -ida_struct.is_union (function) -ida_struct.is_varmember (function) -ida_struct.is_varstr (function) -ida_struct.member_t (class) -ida_struct.member_t.__init__ (method) -ida_struct.member_t.by_til (method) -ida_struct.member_t.eoff (variable) -ida_struct.member_t.flag (variable) -ida_struct.member_t.get_size (method) -ida_struct.member_t.get_soff (method) -ida_struct.member_t.has_ti (method) -ida_struct.member_t.has_union (method) -ida_struct.member_t.id (variable) -ida_struct.member_t.is_baseclass (method) -ida_struct.member_t.is_destructor (method) -ida_struct.member_t.is_dupname (method) -ida_struct.member_t.props (variable) -ida_struct.member_t.soff (variable) -ida_struct.member_t.unimem (method) -ida_struct.retrieve_member_info (function) -ida_struct.save_struc (function) -ida_struct.set_member_cmt (function) -ida_struct.set_member_name (function) -ida_struct.set_member_tinfo (function) -ida_struct.set_member_type (function) -ida_struct.set_struc_align (function) -ida_struct.set_struc_cmt (function) -ida_struct.set_struc_hidden (function) -ida_struct.set_struc_idx (function) -ida_struct.set_struc_listed (function) -ida_struct.set_struc_name (function) -ida_struct.stroff_as_size (function) -ida_struct.struc_t (class) -ida_struct.struc_t.__get_members__ (method) -ida_struct.struc_t.__init__ (method) -ida_struct.struc_t.age (variable) -ida_struct.struc_t.from_til (method) -ida_struct.struc_t.get_alignment (method) -ida_struct.struc_t.get_last_member (method) -ida_struct.struc_t.get_member (method) -ida_struct.struc_t.has_union (method) -ida_struct.struc_t.id (variable) -ida_struct.struc_t.is_choosable (method) -ida_struct.struc_t.is_copyof (method) -ida_struct.struc_t.is_frame (method) -ida_struct.struc_t.is_ghost (method) -ida_struct.struc_t.is_hidden (method) -ida_struct.struc_t.is_mappedto (method) -ida_struct.struc_t.is_synced (method) -ida_struct.struc_t.is_union (method) -ida_struct.struc_t.is_varstr (method) -ida_struct.struc_t.like_union (method) -ida_struct.struc_t.members (variable) -ida_struct.struc_t.memqty (variable) -ida_struct.struc_t.ordinal (variable) -ida_struct.struc_t.props (variable) -ida_struct.struc_t.set_alignment (method) -ida_struct.struc_t.set_ghost (method) -ida_struct.struc_t.unsync (method) -ida_struct.struct_field_visitor_t (class) -ida_struct.struct_field_visitor_t.__disown__ (method) -ida_struct.struct_field_visitor_t.__init__ (method) -ida_struct.struct_field_visitor_t.visit_field (method) -ida_struct.udt_member_visitor_t (class) -ida_struct.udt_member_visitor_t.__disown__ (method) -ida_struct.udt_member_visitor_t.__init__ (method) -ida_struct.udt_member_visitor_t.visit_member (method) -ida_struct.visit_stroff_fields (function) -ida_struct.visit_stroff_members (function) -ida_tryblks (module) -ida_tryblks.TBERR_EMPTY (variable) -ida_tryblks.TBERR_END (variable) -ida_tryblks.TBERR_INTERSECT (variable) -ida_tryblks.TBERR_KIND (variable) -ida_tryblks.TBERR_NO_CATCHES (variable) -ida_tryblks.TBERR_OK (variable) -ida_tryblks.TBERR_ORDER (variable) -ida_tryblks.TBERR_START (variable) -ida_tryblks.add_tryblk (function) -ida_tryblks.catch_t (class) -ida_tryblks.catch_t.__init__ (method) -ida_tryblks.catchvec_t (class) -ida_tryblks.catchvec_t.__eq__ (method) -ida_tryblks.catchvec_t.__getitem__ (method) -ida_tryblks.catchvec_t.__init__ (method) -ida_tryblks.catchvec_t.__len__ (method) -ida_tryblks.catchvec_t.__ne__ (method) -ida_tryblks.catchvec_t.__setitem__ (method) -ida_tryblks.catchvec_t._del (method) -ida_tryblks.catchvec_t.add_unique (method) -ida_tryblks.catchvec_t.at (method) -ida_tryblks.catchvec_t.begin (method) -ida_tryblks.catchvec_t.capacity (method) -ida_tryblks.catchvec_t.clear (method) -ida_tryblks.catchvec_t.empty (method) -ida_tryblks.catchvec_t.end (method) -ida_tryblks.catchvec_t.erase (method) -ida_tryblks.catchvec_t.extract (method) -ida_tryblks.catchvec_t.find (method) -ida_tryblks.catchvec_t.grow (method) -ida_tryblks.catchvec_t.has (method) -ida_tryblks.catchvec_t.inject (method) -ida_tryblks.catchvec_t.insert (method) -ida_tryblks.catchvec_t.pop_back (method) -ida_tryblks.catchvec_t.push_back (method) -ida_tryblks.catchvec_t.qclear (method) -ida_tryblks.catchvec_t.reserve (method) -ida_tryblks.catchvec_t.resize (method) -ida_tryblks.catchvec_t.size (method) -ida_tryblks.catchvec_t.swap (method) -ida_tryblks.catchvec_t.truncate (method) -ida_tryblks.del_tryblks (function) -ida_tryblks.find_syseh (function) -ida_tryblks.get_tryblks (function) -ida_tryblks.is_ea_tryblks (function) -ida_tryblks.seh_t (class) -ida_tryblks.seh_t.__init__ (method) -ida_tryblks.seh_t.clear (method) -ida_tryblks.try_handler_t (class) -ida_tryblks.try_handler_t.__init__ (method) -ida_tryblks.try_handler_t.clear (method) -ida_tryblks.tryblk_t (class) -ida_tryblks.tryblk_t.__init__ (method) -ida_tryblks.tryblk_t.clear (method) -ida_tryblks.tryblk_t.cpp (method) -ida_tryblks.tryblk_t.empty (method) -ida_tryblks.tryblk_t.get_kind (method) -ida_tryblks.tryblk_t.is_cpp (method) -ida_tryblks.tryblk_t.is_seh (method) -ida_tryblks.tryblk_t.seh (method) -ida_tryblks.tryblk_t.set_cpp (method) -ida_tryblks.tryblk_t.set_seh (method) -ida_tryblks.tryblks_t (class) -ida_tryblks.tryblks_t.__eq__ (method) -ida_tryblks.tryblks_t.__getitem__ (method) -ida_tryblks.tryblks_t.__init__ (method) -ida_tryblks.tryblks_t.__len__ (method) -ida_tryblks.tryblks_t.__ne__ (method) -ida_tryblks.tryblks_t.__setitem__ (method) -ida_tryblks.tryblks_t._del (method) -ida_tryblks.tryblks_t.add_unique (method) -ida_tryblks.tryblks_t.at (method) -ida_tryblks.tryblks_t.begin (method) -ida_tryblks.tryblks_t.capacity (method) -ida_tryblks.tryblks_t.clear (method) -ida_tryblks.tryblks_t.empty (method) -ida_tryblks.tryblks_t.end (method) -ida_tryblks.tryblks_t.erase (method) -ida_tryblks.tryblks_t.extract (method) -ida_tryblks.tryblks_t.find (method) -ida_tryblks.tryblks_t.grow (method) -ida_tryblks.tryblks_t.has (method) -ida_tryblks.tryblks_t.inject (method) -ida_tryblks.tryblks_t.insert (method) -ida_tryblks.tryblks_t.pop_back (method) -ida_tryblks.tryblks_t.push_back (method) -ida_tryblks.tryblks_t.qclear (method) -ida_tryblks.tryblks_t.reserve (method) -ida_tryblks.tryblks_t.resize (method) -ida_tryblks.tryblks_t.size (method) -ida_tryblks.tryblks_t.swap (method) -ida_tryblks.tryblks_t.truncate (method) -ida_typeinf (module) -ida_typeinf.ADDTIL_ABORTED (variable) -ida_typeinf.ADDTIL_COMP (variable) -ida_typeinf.ADDTIL_DEFAULT (variable) -ida_typeinf.ADDTIL_FAILED (variable) -ida_typeinf.ADDTIL_INCOMP (variable) -ida_typeinf.ADDTIL_OK (variable) -ida_typeinf.ADDTIL_SILENT (variable) -ida_typeinf.ALOC_CUSTOM (variable) -ida_typeinf.ALOC_DIST (variable) -ida_typeinf.ALOC_NONE (variable) -ida_typeinf.ALOC_REG1 (variable) -ida_typeinf.ALOC_REG2 (variable) -ida_typeinf.ALOC_RREL (variable) -ida_typeinf.ALOC_STACK (variable) -ida_typeinf.ALOC_STATIC (variable) -ida_typeinf.ARGREGS_BY_SLOTS (variable) -ida_typeinf.ARGREGS_FP_CONSUME_GP (variable) -ida_typeinf.ARGREGS_GP_ONLY (variable) -ida_typeinf.ARGREGS_INDEPENDENT (variable) -ida_typeinf.ARGREGS_MIPS_O32 (variable) -ida_typeinf.BADORD (variable) -ida_typeinf.BADSIZE (variable) -ida_typeinf.BFA_FUNC_EXT_FORMAT (variable) -ida_typeinf.BFA_FUNC_MARKER (variable) -ida_typeinf.BFA_HIGH (variable) -ida_typeinf.BFA_NORET (variable) -ida_typeinf.BFA_PURE (variable) -ida_typeinf.BFA_STATIC (variable) -ida_typeinf.BFA_VIRTUAL (variable) -ida_typeinf.BTE_ALWAYS (variable) -ida_typeinf.BTE_BITFIELD (variable) -ida_typeinf.BTE_CHAR (variable) -ida_typeinf.BTE_HEX (variable) -ida_typeinf.BTE_OUT_MASK (variable) -ida_typeinf.BTE_RESERVED (variable) -ida_typeinf.BTE_SDEC (variable) -ida_typeinf.BTE_SIZE_MASK (variable) -ida_typeinf.BTE_UDEC (variable) -ida_typeinf.BTF_BOOL (variable) -ida_typeinf.BTF_BYTE (variable) -ida_typeinf.BTF_CHAR (variable) -ida_typeinf.BTF_DOUBLE (variable) -ida_typeinf.BTF_ENUM (variable) -ida_typeinf.BTF_FLOAT (variable) -ida_typeinf.BTF_INT (variable) -ida_typeinf.BTF_INT128 (variable) -ida_typeinf.BTF_INT16 (variable) -ida_typeinf.BTF_INT32 (variable) -ida_typeinf.BTF_INT64 (variable) -ida_typeinf.BTF_INT8 (variable) -ida_typeinf.BTF_LDOUBLE (variable) -ida_typeinf.BTF_SINT (variable) -ida_typeinf.BTF_STRUCT (variable) -ida_typeinf.BTF_TBYTE (variable) -ida_typeinf.BTF_TYPEDEF (variable) -ida_typeinf.BTF_UCHAR (variable) -ida_typeinf.BTF_UINT (variable) -ida_typeinf.BTF_UINT128 (variable) -ida_typeinf.BTF_UINT16 (variable) -ida_typeinf.BTF_UINT32 (variable) -ida_typeinf.BTF_UINT64 (variable) -ida_typeinf.BTF_UINT8 (variable) -ida_typeinf.BTF_UNION (variable) -ida_typeinf.BTF_UNK (variable) -ida_typeinf.BTF_VOID (variable) -ida_typeinf.BTMT_ARRESERV (variable) -ida_typeinf.BTMT_BFLDI16 (variable) -ida_typeinf.BTMT_BFLDI32 (variable) -ida_typeinf.BTMT_BFLDI64 (variable) -ida_typeinf.BTMT_BFLDI8 (variable) -ida_typeinf.BTMT_BOOL1 (variable) -ida_typeinf.BTMT_BOOL2 (variable) -ida_typeinf.BTMT_BOOL4 (variable) -ida_typeinf.BTMT_BOOL8 (variable) -ida_typeinf.BTMT_CHAR (variable) -ida_typeinf.BTMT_CLOSURE (variable) -ida_typeinf.BTMT_DEFBOOL (variable) -ida_typeinf.BTMT_DEFCALL (variable) -ida_typeinf.BTMT_DEFPTR (variable) -ida_typeinf.BTMT_DOUBLE (variable) -ida_typeinf.BTMT_FAR (variable) -ida_typeinf.BTMT_FARCALL (variable) -ida_typeinf.BTMT_FLOAT (variable) -ida_typeinf.BTMT_INTCALL (variable) -ida_typeinf.BTMT_LNGDBL (variable) -ida_typeinf.BTMT_NEAR (variable) -ida_typeinf.BTMT_NEARCALL (variable) -ida_typeinf.BTMT_NONBASED (variable) -ida_typeinf.BTMT_SIGNED (variable) -ida_typeinf.BTMT_SIZE0 (variable) -ida_typeinf.BTMT_SIZE12 (variable) -ida_typeinf.BTMT_SIZE128 (variable) -ida_typeinf.BTMT_SIZE48 (variable) -ida_typeinf.BTMT_SPECFLT (variable) -ida_typeinf.BTMT_TYPEDEF (variable) -ida_typeinf.BTMT_UNKSIGN (variable) -ida_typeinf.BTMT_USIGNED (variable) -ida_typeinf.BTM_CONST (variable) -ida_typeinf.BTM_VOLATILE (variable) -ida_typeinf.BT_ARRAY (variable) -ida_typeinf.BT_BITFIELD (variable) -ida_typeinf.BT_BOOL (variable) -ida_typeinf.BT_COMPLEX (variable) -ida_typeinf.BT_FLOAT (variable) -ida_typeinf.BT_FUNC (variable) -ida_typeinf.BT_INT (variable) -ida_typeinf.BT_INT128 (variable) -ida_typeinf.BT_INT16 (variable) -ida_typeinf.BT_INT32 (variable) -ida_typeinf.BT_INT64 (variable) -ida_typeinf.BT_INT8 (variable) -ida_typeinf.BT_PTR (variable) -ida_typeinf.BT_RESERVED (variable) -ida_typeinf.BT_SEGREG (variable) -ida_typeinf.BT_UNK (variable) -ida_typeinf.BT_UNKNOWN (variable) -ida_typeinf.BT_UNK_BYTE (variable) -ida_typeinf.BT_UNK_DWORD (variable) -ida_typeinf.BT_UNK_OWORD (variable) -ida_typeinf.BT_UNK_QWORD (variable) -ida_typeinf.BT_UNK_WORD (variable) -ida_typeinf.BT_VOID (variable) -ida_typeinf.CC_ALLOW_ARGPERM (variable) -ida_typeinf.CC_ALLOW_REGHOLES (variable) -ida_typeinf.CC_CDECL_OK (variable) -ida_typeinf.CC_GOLANG_OK (variable) -ida_typeinf.CC_HAS_ELLIPSIS (variable) -ida_typeinf.CM_CC_CDECL (variable) -ida_typeinf.CM_CC_ELLIPSIS (variable) -ida_typeinf.CM_CC_FASTCALL (variable) -ida_typeinf.CM_CC_GOLANG (variable) -ida_typeinf.CM_CC_INVALID (variable) -ida_typeinf.CM_CC_PASCAL (variable) -ida_typeinf.CM_CC_SPECIALE (variable) -ida_typeinf.CM_CC_SPECIALP (variable) -ida_typeinf.CM_CC_SPOILED (variable) -ida_typeinf.CM_CC_STDCALL (variable) -ida_typeinf.CM_CC_SWIFT (variable) -ida_typeinf.CM_CC_THISCALL (variable) -ida_typeinf.CM_CC_UNKNOWN (variable) -ida_typeinf.CM_CC_VOIDARG (variable) -ida_typeinf.CM_N16_F32 (variable) -ida_typeinf.CM_N32_F48 (variable) -ida_typeinf.CM_N64 (variable) -ida_typeinf.CM_N8_F16 (variable) -ida_typeinf.CM_UNKNOWN (variable) -ida_typeinf.COMP_BC (variable) -ida_typeinf.COMP_BP (variable) -ida_typeinf.COMP_GNU (variable) -ida_typeinf.COMP_MS (variable) -ida_typeinf.COMP_UNK (variable) -ida_typeinf.COMP_UNSURE (variable) -ida_typeinf.COMP_VISAGE (variable) -ida_typeinf.COMP_WATCOM (variable) -ida_typeinf.FAH_BYTE (variable) -ida_typeinf.FAI_ARRAY (variable) -ida_typeinf.FAI_HIDDEN (variable) -ida_typeinf.FAI_RETPTR (variable) -ida_typeinf.FAI_STRUCT (variable) -ida_typeinf.FAI_UNUSED (variable) -ida_typeinf.FIRST_NONTRIVIAL_TYPID (variable) -ida_typeinf.FRB_CHAR (variable) -ida_typeinf.FRB_CUSTOM (variable) -ida_typeinf.FRB_ENUM (variable) -ida_typeinf.FRB_FLOAT (variable) -ida_typeinf.FRB_INVBITS (variable) -ida_typeinf.FRB_INVSIGN (variable) -ida_typeinf.FRB_LZERO (variable) -ida_typeinf.FRB_MASK (variable) -ida_typeinf.FRB_NUMB (variable) -ida_typeinf.FRB_NUMD (variable) -ida_typeinf.FRB_NUMH (variable) -ida_typeinf.FRB_NUMO (variable) -ida_typeinf.FRB_OFFSET (variable) -ida_typeinf.FRB_SEG (variable) -ida_typeinf.FRB_SIGNED (variable) -ida_typeinf.FRB_STRLIT (variable) -ida_typeinf.FRB_STROFF (variable) -ida_typeinf.FRB_UNK (variable) -ida_typeinf.FTI_ALL (variable) -ida_typeinf.FTI_ARGLOCS (variable) -ida_typeinf.FTI_CALLTYPE (variable) -ida_typeinf.FTI_CONST (variable) -ida_typeinf.FTI_CTOR (variable) -ida_typeinf.FTI_DEFCALL (variable) -ida_typeinf.FTI_DTOR (variable) -ida_typeinf.FTI_EXPLOCS (variable) -ida_typeinf.FTI_FARCALL (variable) -ida_typeinf.FTI_HIGH (variable) -ida_typeinf.FTI_INTCALL (variable) -ida_typeinf.FTI_NEARCALL (variable) -ida_typeinf.FTI_NORET (variable) -ida_typeinf.FTI_PURE (variable) -ida_typeinf.FTI_SPOILED (variable) -ida_typeinf.FTI_STATIC (variable) -ida_typeinf.FTI_VIRTUAL (variable) -ida_typeinf.GTD_CALC_ARGLOCS (variable) -ida_typeinf.GTD_CALC_LAYOUT (variable) -ida_typeinf.GTD_DEL_BITFLDS (variable) -ida_typeinf.GTD_NO_ARGLOCS (variable) -ida_typeinf.GTD_NO_LAYOUT (variable) -ida_typeinf.GTE_IDBSYNC (variable) -ida_typeinf.GTE_SAVE (variable) -ida_typeinf.GTS_BASECLASS (variable) -ida_typeinf.GTS_NESTED (variable) -ida_typeinf.GUESS_FUNC_FAILED (variable) -ida_typeinf.GUESS_FUNC_OK (variable) -ida_typeinf.GUESS_FUNC_TRIVIAL (variable) -ida_typeinf.HTI_CPP (variable) -ida_typeinf.HTI_DCL (variable) -ida_typeinf.HTI_FIL (variable) -ida_typeinf.HTI_HIGH (variable) -ida_typeinf.HTI_LOWER (variable) -ida_typeinf.HTI_MAC (variable) -ida_typeinf.HTI_NDC (variable) -ida_typeinf.HTI_NER (variable) -ida_typeinf.HTI_NWR (variable) -ida_typeinf.HTI_PAK (variable) -ida_typeinf.HTI_PAK1 (variable) -ida_typeinf.HTI_PAK16 (variable) -ida_typeinf.HTI_PAK2 (variable) -ida_typeinf.HTI_PAK4 (variable) -ida_typeinf.HTI_PAK8 (variable) -ida_typeinf.HTI_PAKDEF (variable) -ida_typeinf.HTI_PAK_SHIFT (variable) -ida_typeinf.HTI_RAWARGS (variable) -ida_typeinf.HTI_TST (variable) -ida_typeinf.IMPTYPE_LOCAL (variable) -ida_typeinf.IMPTYPE_OVERRIDE (variable) -ida_typeinf.IMPTYPE_VERBOSE (variable) -ida_typeinf.MAX_FUNC_ARGS (variable) -ida_typeinf.NTF_64BIT (variable) -ida_typeinf.NTF_CHKSYNC (variable) -ida_typeinf.NTF_FIXNAME (variable) -ida_typeinf.NTF_IDBENC (variable) -ida_typeinf.NTF_NOBASE (variable) -ida_typeinf.NTF_NOCUR (variable) -ida_typeinf.NTF_NO_NAMECHK (variable) -ida_typeinf.NTF_REPLACE (variable) -ida_typeinf.NTF_SYMM (variable) -ida_typeinf.NTF_SYMU (variable) -ida_typeinf.NTF_TYPE (variable) -ida_typeinf.NTF_UMANGLED (variable) -ida_typeinf.PDF_DEF_BASE (variable) -ida_typeinf.PDF_DEF_FWD (variable) -ida_typeinf.PDF_HEADER_CMT (variable) -ida_typeinf.PDF_INCL_DEPS (variable) -ida_typeinf.PIO_IGNORE_PTRS (variable) -ida_typeinf.PIO_NOATTR_FAIL (variable) -ida_typeinf.PRALOC_STKOFF (variable) -ida_typeinf.PRALOC_VERIFY (variable) -ida_typeinf.PRTYPE_1LINCMT (variable) -ida_typeinf.PRTYPE_1LINE (variable) -ida_typeinf.PRTYPE_COLORED (variable) -ida_typeinf.PRTYPE_CPP (variable) -ida_typeinf.PRTYPE_HEADER (variable) -ida_typeinf.PRTYPE_MULTI (variable) -ida_typeinf.PRTYPE_NOREGEX (variable) -ida_typeinf.PRTYPE_PRAGMA (variable) -ida_typeinf.PRTYPE_SEMI (variable) -ida_typeinf.PRTYPE_TYPE (variable) -ida_typeinf.PT_HIGH (variable) -ida_typeinf.PT_LOWER (variable) -ida_typeinf.PT_NDC (variable) -ida_typeinf.PT_PACKMASK (variable) -ida_typeinf.PT_RAWARGS (variable) -ida_typeinf.PT_REPLACE (variable) -ida_typeinf.PT_SIL (variable) -ida_typeinf.PT_TYP (variable) -ida_typeinf.PT_VAR (variable) -ida_typeinf.RESERVED_BYTE (variable) -ida_typeinf.SC_AUTO (variable) -ida_typeinf.SC_EXT (variable) -ida_typeinf.SC_FRIEND (variable) -ida_typeinf.SC_REG (variable) -ida_typeinf.SC_STAT (variable) -ida_typeinf.SC_TYPE (variable) -ida_typeinf.SC_UNK (variable) -ida_typeinf.SC_VIRT (variable) -ida_typeinf.SETCOMP_BY_USER (variable) -ida_typeinf.SETCOMP_ONLY_ABI (variable) -ida_typeinf.SETCOMP_ONLY_ID (variable) -ida_typeinf.SETCOMP_OVERRIDE (variable) -ida_typeinf.STI_ACCHAR (variable) -ida_typeinf.STI_ACHAR (variable) -ida_typeinf.STI_ACUCHAR (variable) -ida_typeinf.STI_AEABI_LCMP (variable) -ida_typeinf.STI_AEABI_MEMCLR (variable) -ida_typeinf.STI_AEABI_MEMCPY (variable) -ida_typeinf.STI_AEABI_MEMSET (variable) -ida_typeinf.STI_AEABI_ULCMP (variable) -ida_typeinf.STI_AUCHAR (variable) -ida_typeinf.STI_COMPLEX128 (variable) -ida_typeinf.STI_COMPLEX64 (variable) -ida_typeinf.STI_DONT_USE (variable) -ida_typeinf.STI_FDELOP (variable) -ida_typeinf.STI_FPURGING (variable) -ida_typeinf.STI_MSGSEND (variable) -ida_typeinf.STI_PBYTE (variable) -ida_typeinf.STI_PCCHAR (variable) -ida_typeinf.STI_PCHAR (variable) -ida_typeinf.STI_PCUCHAR (variable) -ida_typeinf.STI_PCVOID (variable) -ida_typeinf.STI_PINT (variable) -ida_typeinf.STI_PPVOID (variable) -ida_typeinf.STI_PUCHAR (variable) -ida_typeinf.STI_PUINT (variable) -ida_typeinf.STI_PVOID (variable) -ida_typeinf.STI_RTC_CHECK_2 (variable) -ida_typeinf.STI_RTC_CHECK_4 (variable) -ida_typeinf.STI_RTC_CHECK_8 (variable) -ida_typeinf.STI_SIZE_T (variable) -ida_typeinf.STI_SSIZE_T (variable) -ida_typeinf.STRMEM_ANON (variable) -ida_typeinf.STRMEM_AUTO (variable) -ida_typeinf.STRMEM_CASTABLE_TO (variable) -ida_typeinf.STRMEM_INDEX (variable) -ida_typeinf.STRMEM_MAXS (variable) -ida_typeinf.STRMEM_MINS (variable) -ida_typeinf.STRMEM_NAME (variable) -ida_typeinf.STRMEM_OFFSET (variable) -ida_typeinf.STRMEM_SIZE (variable) -ida_typeinf.STRMEM_SKIP_EMPTY (variable) -ida_typeinf.STRMEM_TYPE (variable) -ida_typeinf.STRMEM_VFTABLE (variable) -ida_typeinf.SUDT_ALIGN (variable) -ida_typeinf.SUDT_CONST (variable) -ida_typeinf.SUDT_FAST (variable) -ida_typeinf.SUDT_GAPS (variable) -ida_typeinf.SUDT_SORT (variable) -ida_typeinf.SUDT_UNEX (variable) -ida_typeinf.SUDT_VOLATILE (variable) -ida_typeinf.TAFLD_METHOD (variable) -ida_typeinf.TAH_ALL (variable) -ida_typeinf.TAH_BYTE (variable) -ida_typeinf.TAH_HASATTRS (variable) -ida_typeinf.TA_FORMAT (variable) -ida_typeinf.TA_ORG_ARRDIM (variable) -ida_typeinf.TA_ORG_TYPEDEF (variable) -ida_typeinf.TCMP_ANYBASE (variable) -ida_typeinf.TCMP_AUTOCAST (variable) -ida_typeinf.TCMP_CALL (variable) -ida_typeinf.TCMP_DECL (variable) -ida_typeinf.TCMP_DELPTR (variable) -ida_typeinf.TCMP_EQUAL (variable) -ida_typeinf.TCMP_IGNMODS (variable) -ida_typeinf.TCMP_MANCAST (variable) -ida_typeinf.TCMP_SKIPTHIS (variable) -ida_typeinf.TERR_BADSYNC (variable) -ida_typeinf.TERR_OK (variable) -ida_typeinf.TERR_SAVE (variable) -ida_typeinf.TERR_SERIALIZE (variable) -ida_typeinf.TERR_WRONGNAME (variable) -ida_typeinf.TIL_ADD_ALREADY (variable) -ida_typeinf.TIL_ADD_FAILED (variable) -ida_typeinf.TIL_ADD_OK (variable) -ida_typeinf.TIL_ALI (variable) -ida_typeinf.TIL_ESI (variable) -ida_typeinf.TIL_MAC (variable) -ida_typeinf.TIL_MOD (variable) -ida_typeinf.TIL_ORD (variable) -ida_typeinf.TIL_SLD (variable) -ida_typeinf.TIL_STM (variable) -ida_typeinf.TIL_UNI (variable) -ida_typeinf.TIL_ZIP (variable) -ida_typeinf.TINFO_DEFINITE (variable) -ida_typeinf.TINFO_DELAYFUNC (variable) -ida_typeinf.TINFO_GUESSED (variable) -ida_typeinf.TINFO_STRICT (variable) -ida_typeinf.TVIS_CMT (variable) -ida_typeinf.TVIS_NAME (variable) -ida_typeinf.TVIS_TYPE (variable) -ida_typeinf.TVST_DEF (variable) -ida_typeinf.TVST_PRUNE (variable) -ida_typeinf.TYPE_BASE_MASK (variable) -ida_typeinf.TYPE_FLAGS_MASK (variable) -ida_typeinf.TYPE_FULL_MASK (variable) -ida_typeinf.TYPE_MODIF_MASK (variable) -ida_typeinf.TYPID_ISREF (variable) -ida_typeinf.TYPID_SHIFT (variable) -ida_typeinf.VALSTR_OPEN (variable) -ida_typeinf._BT_LAST_BASIC (variable) -ida_typeinf._wrap_cvar (class) -ida_typeinf._wrap_cvar.__getattr__ (method) -ida_typeinf._wrap_cvar.__setattr__ (method) -ida_typeinf.add_til (function) -ida_typeinf.alloc_type_ordinal (function) -ida_typeinf.alloc_type_ordinals (function) -ida_typeinf.aloc_visitor_t (class) -ida_typeinf.aloc_visitor_t.__disown__ (method) -ida_typeinf.aloc_visitor_t.__init__ (method) -ida_typeinf.aloc_visitor_t.visit_location (method) -ida_typeinf.append_abi_opts (function) -ida_typeinf.append_argloc (function) -ida_typeinf.append_tinfo_covered (function) -ida_typeinf.apply_callee_tinfo (function) -ida_typeinf.apply_cdecl (function) -ida_typeinf.apply_named_type (function) -ida_typeinf.apply_once_tinfo_and_name (function) -ida_typeinf.apply_tinfo (function) -ida_typeinf.apply_tinfo_to_stkarg (function) -ida_typeinf.apply_type (function) -ida_typeinf.argloc_t (class) -ida_typeinf.argloc_t.__eq__ (method) -ida_typeinf.argloc_t.__ge__ (method) -ida_typeinf.argloc_t.__gt__ (method) -ida_typeinf.argloc_t.__init__ (method) -ida_typeinf.argloc_t.__le__ (method) -ida_typeinf.argloc_t.__lt__ (method) -ida_typeinf.argloc_t.__ne__ (method) -ida_typeinf.argloc_t._consume_rrel (method) -ida_typeinf.argloc_t._consume_scattered (method) -ida_typeinf.argloc_t._set_badloc (method) -ida_typeinf.argloc_t._set_biggest (method) -ida_typeinf.argloc_t._set_custom (method) -ida_typeinf.argloc_t._set_ea (method) -ida_typeinf.argloc_t._set_reg1 (method) -ida_typeinf.argloc_t._set_reg2 (method) -ida_typeinf.argloc_t._set_stkoff (method) -ida_typeinf.argloc_t.advance (method) -ida_typeinf.argloc_t.align_reg_high (method) -ida_typeinf.argloc_t.align_stkoff_high (method) -ida_typeinf.argloc_t.atype (method) -ida_typeinf.argloc_t.calc_offset (method) -ida_typeinf.argloc_t.compare (method) -ida_typeinf.argloc_t.consume_rrel (method) -ida_typeinf.argloc_t.consume_scattered (method) -ida_typeinf.argloc_t.get_biggest (method) -ida_typeinf.argloc_t.get_custom (method) -ida_typeinf.argloc_t.get_ea (method) -ida_typeinf.argloc_t.get_reginfo (method) -ida_typeinf.argloc_t.get_rrel (method) -ida_typeinf.argloc_t.has_reg (method) -ida_typeinf.argloc_t.has_stkoff (method) -ida_typeinf.argloc_t.in_stack (method) -ida_typeinf.argloc_t.is_badloc (method) -ida_typeinf.argloc_t.is_custom (method) -ida_typeinf.argloc_t.is_ea (method) -ida_typeinf.argloc_t.is_fragmented (method) -ida_typeinf.argloc_t.is_mixed_scattered (method) -ida_typeinf.argloc_t.is_reg (method) -ida_typeinf.argloc_t.is_reg1 (method) -ida_typeinf.argloc_t.is_reg2 (method) -ida_typeinf.argloc_t.is_rrel (method) -ida_typeinf.argloc_t.is_scattered (method) -ida_typeinf.argloc_t.is_stkoff (method) -ida_typeinf.argloc_t.reg1 (method) -ida_typeinf.argloc_t.reg2 (method) -ida_typeinf.argloc_t.regoff (method) -ida_typeinf.argloc_t.scattered (method) -ida_typeinf.argloc_t.set_badloc (method) -ida_typeinf.argloc_t.set_ea (method) -ida_typeinf.argloc_t.set_reg1 (method) -ida_typeinf.argloc_t.set_reg2 (method) -ida_typeinf.argloc_t.set_stkoff (method) -ida_typeinf.argloc_t.stkoff (method) -ida_typeinf.argloc_t.swap (method) -ida_typeinf.argpart_t (class) -ida_typeinf.argpart_t.__init__ (method) -ida_typeinf.argpart_t.__lt__ (method) -ida_typeinf.argpart_t.bad_offset (method) -ida_typeinf.argpart_t.bad_size (method) -ida_typeinf.argpart_t.off (variable) -ida_typeinf.argpart_t.size (variable) -ida_typeinf.argpart_t.swap (method) -ida_typeinf.argpartvec_t (class) -ida_typeinf.argpartvec_t.__eq__ (method) -ida_typeinf.argpartvec_t.__getitem__ (method) -ida_typeinf.argpartvec_t.__init__ (method) -ida_typeinf.argpartvec_t.__len__ (method) -ida_typeinf.argpartvec_t.__ne__ (method) -ida_typeinf.argpartvec_t.__setitem__ (method) -ida_typeinf.argpartvec_t._del (method) -ida_typeinf.argpartvec_t.add_unique (method) -ida_typeinf.argpartvec_t.at (method) -ida_typeinf.argpartvec_t.begin (method) -ida_typeinf.argpartvec_t.capacity (method) -ida_typeinf.argpartvec_t.clear (method) -ida_typeinf.argpartvec_t.empty (method) -ida_typeinf.argpartvec_t.end (method) -ida_typeinf.argpartvec_t.erase (method) -ida_typeinf.argpartvec_t.extract (method) -ida_typeinf.argpartvec_t.find (method) -ida_typeinf.argpartvec_t.grow (method) -ida_typeinf.argpartvec_t.has (method) -ida_typeinf.argpartvec_t.inject (method) -ida_typeinf.argpartvec_t.insert (method) -ida_typeinf.argpartvec_t.pop_back (method) -ida_typeinf.argpartvec_t.push_back (method) -ida_typeinf.argpartvec_t.qclear (method) -ida_typeinf.argpartvec_t.reserve (method) -ida_typeinf.argpartvec_t.resize (method) -ida_typeinf.argpartvec_t.size (method) -ida_typeinf.argpartvec_t.swap (method) -ida_typeinf.argpartvec_t.truncate (method) -ida_typeinf.argtinfo_helper_t (class) -ida_typeinf.argtinfo_helper_t.__disown__ (method) -ida_typeinf.argtinfo_helper_t.__init__ (method) -ida_typeinf.argtinfo_helper_t.has_delay_slot (method) -ida_typeinf.argtinfo_helper_t.is_stkarg_load (method) -ida_typeinf.argtinfo_helper_t.set_op_tinfo (method) -ida_typeinf.argtinfo_helper_t.use_arg_tinfos (method) -ida_typeinf.array_type_data_t (class) -ida_typeinf.array_type_data_t.__init__ (method) -ida_typeinf.array_type_data_t.base (variable) -ida_typeinf.array_type_data_t.elem_type (variable) -ida_typeinf.array_type_data_t.nelems (variable) -ida_typeinf.array_type_data_t.swap (method) -ida_typeinf.begin_type_updating (function) -ida_typeinf.bitfield_type_data_t (class) -ida_typeinf.bitfield_type_data_t.__eq__ (method) -ida_typeinf.bitfield_type_data_t.__ge__ (method) -ida_typeinf.bitfield_type_data_t.__gt__ (method) -ida_typeinf.bitfield_type_data_t.__init__ (method) -ida_typeinf.bitfield_type_data_t.__le__ (method) -ida_typeinf.bitfield_type_data_t.__lt__ (method) -ida_typeinf.bitfield_type_data_t.__ne__ (method) -ida_typeinf.bitfield_type_data_t.compare (method) -ida_typeinf.bitfield_type_data_t.is_unsigned (variable) -ida_typeinf.bitfield_type_data_t.nbytes (variable) -ida_typeinf.bitfield_type_data_t.swap (method) -ida_typeinf.bitfield_type_data_t.width (variable) -ida_typeinf.calc_c_cpp_name (function) -ida_typeinf.calc_number_of_children (function) -ida_typeinf.calc_tinfo_gaps (function) -ida_typeinf.calc_type_size (function) -ida_typeinf.callregs_t (class) -ida_typeinf.callregs_t.__init__ (method) -ida_typeinf.callregs_t.by_slots (method) -ida_typeinf.callregs_t.fpregs (variable) -ida_typeinf.callregs_t.gpregs (variable) -ida_typeinf.callregs_t.init_regs (method) -ida_typeinf.callregs_t.nregs (variable) -ida_typeinf.callregs_t.policy (variable) -ida_typeinf.callregs_t.regcount (method) -ida_typeinf.callregs_t.reginds (method) -ida_typeinf.callregs_t.reset (method) -ida_typeinf.callregs_t.set (method) -ida_typeinf.callregs_t.swap (method) -ida_typeinf.callregs_t_regcount (function) -ida_typeinf.choose_local_tinfo (function) -ida_typeinf.choose_local_tinfo_and_delta (function) -ida_typeinf.choose_named_type (function) -ida_typeinf.clear_tinfo_t (function) -ida_typeinf.compact_til (function) -ida_typeinf.compare_tinfo (function) -ida_typeinf.const_aloc_visitor_t (class) -ida_typeinf.const_aloc_visitor_t.__disown__ (method) -ida_typeinf.const_aloc_visitor_t.__init__ (method) -ida_typeinf.const_aloc_visitor_t.visit_location (method) -ida_typeinf.convert_pt_flags_to_hti (function) -ida_typeinf.copy_named_type (function) -ida_typeinf.copy_tinfo_t (function) -ida_typeinf.create_enum_type (function) -ida_typeinf.create_numbered_type_name (function) -ida_typeinf.create_tinfo (function) -ida_typeinf.create_tinfo2 (function) -ida_typeinf.custom_data_type_info_t (class) -ida_typeinf.custom_data_type_info_t.__init__ (method) -ida_typeinf.custom_data_type_info_t.dtid (variable) -ida_typeinf.custom_data_type_info_t.fid (variable) -ida_typeinf.default_compiler (function) -ida_typeinf.del_named_type (function) -ida_typeinf.del_numbered_type (function) -ida_typeinf.del_til (function) -ida_typeinf.del_tinfo_attr (function) -ida_typeinf.del_vftable_ea (function) -ida_typeinf.deref_ptr (function) -ida_typeinf.deserialize_tinfo (function) -ida_typeinf.dstr_tinfo (function) -ida_typeinf.dump_func_type_data (function) -ida_typeinf.end_type_updating (function) -ida_typeinf.enum_member_t (class) -ida_typeinf.enum_member_t.__eq__ (method) -ida_typeinf.enum_member_t.__init__ (method) -ida_typeinf.enum_member_t.__ne__ (method) -ida_typeinf.enum_member_t.swap (method) -ida_typeinf.enum_member_vec_t (class) -ida_typeinf.enum_member_vec_t.__eq__ (method) -ida_typeinf.enum_member_vec_t.__getitem__ (method) -ida_typeinf.enum_member_vec_t.__init__ (method) -ida_typeinf.enum_member_vec_t.__len__ (method) -ida_typeinf.enum_member_vec_t.__ne__ (method) -ida_typeinf.enum_member_vec_t.__setitem__ (method) -ida_typeinf.enum_member_vec_t._del (method) -ida_typeinf.enum_member_vec_t.add_unique (method) -ida_typeinf.enum_member_vec_t.at (method) -ida_typeinf.enum_member_vec_t.begin (method) -ida_typeinf.enum_member_vec_t.capacity (method) -ida_typeinf.enum_member_vec_t.clear (method) -ida_typeinf.enum_member_vec_t.empty (method) -ida_typeinf.enum_member_vec_t.end (method) -ida_typeinf.enum_member_vec_t.erase (method) -ida_typeinf.enum_member_vec_t.extract (method) -ida_typeinf.enum_member_vec_t.find (method) -ida_typeinf.enum_member_vec_t.grow (method) -ida_typeinf.enum_member_vec_t.has (method) -ida_typeinf.enum_member_vec_t.inject (method) -ida_typeinf.enum_member_vec_t.insert (method) -ida_typeinf.enum_member_vec_t.pop_back (method) -ida_typeinf.enum_member_vec_t.push_back (method) -ida_typeinf.enum_member_vec_t.qclear (method) -ida_typeinf.enum_member_vec_t.reserve (method) -ida_typeinf.enum_member_vec_t.resize (method) -ida_typeinf.enum_member_vec_t.size (method) -ida_typeinf.enum_member_vec_t.swap (method) -ida_typeinf.enum_member_vec_t.truncate (method) -ida_typeinf.enum_type_data_t (class) -ida_typeinf.enum_type_data_t.__init__ (method) -ida_typeinf.enum_type_data_t.add_constant (method) -ida_typeinf.enum_type_data_t.bte (variable) -ida_typeinf.enum_type_data_t.calc_mask (method) -ida_typeinf.enum_type_data_t.calc_nbytes (method) -ida_typeinf.enum_type_data_t.del_constant (method) -ida_typeinf.enum_type_data_t.find_member (method) -ida_typeinf.enum_type_data_t.get_enum_radix (method) -ida_typeinf.enum_type_data_t.group_sizes (variable) -ida_typeinf.enum_type_data_t.has_lzero (method) -ida_typeinf.enum_type_data_t.is_bf (method) -ida_typeinf.enum_type_data_t.is_bin (method) -ida_typeinf.enum_type_data_t.is_char (method) -ida_typeinf.enum_type_data_t.is_dec (method) -ida_typeinf.enum_type_data_t.is_group_mask_at (method) -ida_typeinf.enum_type_data_t.is_hex (method) -ida_typeinf.enum_type_data_t.is_number_signed (method) -ida_typeinf.enum_type_data_t.is_oct (method) -ida_typeinf.enum_type_data_t.is_sbin (method) -ida_typeinf.enum_type_data_t.is_shex (method) -ida_typeinf.enum_type_data_t.is_soct (method) -ida_typeinf.enum_type_data_t.is_udec (method) -ida_typeinf.enum_type_data_t.is_valid_group_sizes (method) -ida_typeinf.enum_type_data_t.npos (variable) -ida_typeinf.enum_type_data_t.set_bf (method) -ida_typeinf.enum_type_data_t.set_enum_radix (method) -ida_typeinf.enum_type_data_t.set_lzero (method) -ida_typeinf.enum_type_data_t.set_nbytes (method) -ida_typeinf.enum_type_data_t.store_64bit_values (method) -ida_typeinf.enum_type_data_t.swap (method) -ida_typeinf.enum_type_data_t.taenum_bits (variable) -ida_typeinf.enum_type_data_t.validate (method) -ida_typeinf.enum_type_data_t__add_constant (function) -ida_typeinf.enum_type_data_t__del_constant (function) -ida_typeinf.enum_type_data_t__set_bf (function) -ida_typeinf.enum_type_data_t__validate (function) -ida_typeinf.extract_argloc (function) -ida_typeinf.field_repr_t (class) -ida_typeinf.field_repr_t.__init__ (method) -ida_typeinf.field_repr_t.__str__ (method) -ida_typeinf.field_repr_t._print (method) -ida_typeinf.field_repr_t.cd (variable) -ida_typeinf.field_repr_t.clear (method) -ida_typeinf.field_repr_t.deserialize (method) -ida_typeinf.field_repr_t.empty (method) -ida_typeinf.field_repr_t.from_opinfo (method) -ida_typeinf.field_repr_t.get_flags (method) -ida_typeinf.field_repr_t.get_tinfo (method) -ida_typeinf.field_repr_t.is_custom (method) -ida_typeinf.field_repr_t.is_enum (method) -ida_typeinf.field_repr_t.is_offset (method) -ida_typeinf.field_repr_t.is_signed (method) -ida_typeinf.field_repr_t.is_strlit (method) -ida_typeinf.field_repr_t.is_stroff (method) -ida_typeinf.field_repr_t.is_typref (method) -ida_typeinf.field_repr_t.ri (variable) -ida_typeinf.field_repr_t.serialize (method) -ida_typeinf.field_repr_t.strtype (variable) -ida_typeinf.field_repr_t.swap (method) -ida_typeinf.field_repr_t.to_opinfo (method) -ida_typeinf.field_repr_t.type_ordinal (variable) -ida_typeinf.field_repr_t__deserialize (function) -ida_typeinf.field_repr_t__from_opinfo (function) -ida_typeinf.field_repr_t__get_flags (function) -ida_typeinf.field_repr_t__print_ (function) -ida_typeinf.field_repr_t__serialize (function) -ida_typeinf.field_repr_t__to_opinfo (function) -ida_typeinf.find_tinfo_udt_member (function) -ida_typeinf.first_named_type (function) -ida_typeinf.for_all_arglocs (function) -ida_typeinf.for_all_const_arglocs (function) -ida_typeinf.free_til (function) -ida_typeinf.func_has_stkframe_hole (function) -ida_typeinf.func_type_data_t (class) -ida_typeinf.func_type_data_t.__init__ (method) -ida_typeinf.func_type_data_t.cc (variable) -ida_typeinf.func_type_data_t.dump (method) -ida_typeinf.func_type_data_t.flags (variable) -ida_typeinf.func_type_data_t.get_call_method (method) -ida_typeinf.func_type_data_t.guess_cc (method) -ida_typeinf.func_type_data_t.is_const (method) -ida_typeinf.func_type_data_t.is_ctor (method) -ida_typeinf.func_type_data_t.is_dtor (method) -ida_typeinf.func_type_data_t.is_golang_cc (method) -ida_typeinf.func_type_data_t.is_high (method) -ida_typeinf.func_type_data_t.is_noret (method) -ida_typeinf.func_type_data_t.is_pure (method) -ida_typeinf.func_type_data_t.is_static (method) -ida_typeinf.func_type_data_t.is_swift_cc (method) -ida_typeinf.func_type_data_t.is_vararg_cc (method) -ida_typeinf.func_type_data_t.is_virtual (method) -ida_typeinf.func_type_data_t.retloc (variable) -ida_typeinf.func_type_data_t.rettype (variable) -ida_typeinf.func_type_data_t.spoiled (variable) -ida_typeinf.func_type_data_t.stkargs (variable) -ida_typeinf.func_type_data_t.swap (method) -ida_typeinf.funcarg_t (class) -ida_typeinf.funcarg_t.__eq__ (method) -ida_typeinf.funcarg_t.__init__ (method) -ida_typeinf.funcarg_t.__ne__ (method) -ida_typeinf.funcarg_t.argloc (variable) -ida_typeinf.funcarg_t.cmt (variable) -ida_typeinf.funcarg_t.flags (variable) -ida_typeinf.funcarg_t.name (variable) -ida_typeinf.funcarg_t.type (variable) -ida_typeinf.funcargvec_t (class) -ida_typeinf.funcargvec_t.__eq__ (method) -ida_typeinf.funcargvec_t.__getitem__ (method) -ida_typeinf.funcargvec_t.__init__ (method) -ida_typeinf.funcargvec_t.__len__ (method) -ida_typeinf.funcargvec_t.__ne__ (method) -ida_typeinf.funcargvec_t.__setitem__ (method) -ida_typeinf.funcargvec_t._del (method) -ida_typeinf.funcargvec_t.add_unique (method) -ida_typeinf.funcargvec_t.at (method) -ida_typeinf.funcargvec_t.begin (method) -ida_typeinf.funcargvec_t.capacity (method) -ida_typeinf.funcargvec_t.clear (method) -ida_typeinf.funcargvec_t.empty (method) -ida_typeinf.funcargvec_t.end (method) -ida_typeinf.funcargvec_t.erase (method) -ida_typeinf.funcargvec_t.extract (method) -ida_typeinf.funcargvec_t.find (method) -ida_typeinf.funcargvec_t.grow (method) -ida_typeinf.funcargvec_t.has (method) -ida_typeinf.funcargvec_t.inject (method) -ida_typeinf.funcargvec_t.insert (method) -ida_typeinf.funcargvec_t.pop_back (method) -ida_typeinf.funcargvec_t.push_back (method) -ida_typeinf.funcargvec_t.qclear (method) -ida_typeinf.funcargvec_t.reserve (method) -ida_typeinf.funcargvec_t.resize (method) -ida_typeinf.funcargvec_t.size (method) -ida_typeinf.funcargvec_t.swap (method) -ida_typeinf.funcargvec_t.truncate (method) -ida_typeinf.gcc_layout (function) -ida_typeinf.gen_decorate_name (function) -ida_typeinf.gen_use_arg_tinfos (function) -ida_typeinf.gen_use_arg_tinfos2 (function) -ida_typeinf.get_abi_name (function) -ida_typeinf.get_alias_target (function) -ida_typeinf.get_arg_addrs (function) -ida_typeinf.get_base_type (function) -ida_typeinf.get_c_header_path (function) -ida_typeinf.get_c_macros (function) -ida_typeinf.get_comp (function) -ida_typeinf.get_compiler_abbr (function) -ida_typeinf.get_compiler_name (function) -ida_typeinf.get_compilers (function) -ida_typeinf.get_enum_details_by_name (function) -ida_typeinf.get_enum_details_by_tid (function) -ida_typeinf.get_enum_member_expr (function) -ida_typeinf.get_full_type (function) -ida_typeinf.get_idainfo64_by_type (function) -ida_typeinf.get_idainfo_by_type (function) -ida_typeinf.get_idati (function) -ida_typeinf.get_named_type (function) -ida_typeinf.get_named_type64 (function) -ida_typeinf.get_named_type_tid (function) -ida_typeinf.get_numbered_type (function) -ida_typeinf.get_numbered_type_name (function) -ida_typeinf.get_numbered_type_tid (function) -ida_typeinf.get_ordinal_from_idb_type (function) -ida_typeinf.get_ordinal_qty (function) -ida_typeinf.get_scalar_bt (function) -ida_typeinf.get_stock_tinfo (function) -ida_typeinf.get_tid_from_tinfo (function) -ida_typeinf.get_tid_name (function) -ida_typeinf.get_tid_ordinal (function) -ida_typeinf.get_tinfo_attr (function) -ida_typeinf.get_tinfo_attrs (function) -ida_typeinf.get_tinfo_by_tid (function) -ida_typeinf.get_tinfo_details (function) -ida_typeinf.get_tinfo_details2 (function) -ida_typeinf.get_tinfo_pdata (function) -ida_typeinf.get_tinfo_property (function) -ida_typeinf.get_tinfo_size (function) -ida_typeinf.get_type_flags (function) -ida_typeinf.get_type_ordinal (function) -ida_typeinf.get_udm_tid (function) -ida_typeinf.get_udt_member_tid (function) -ida_typeinf.get_vftable_ea (function) -ida_typeinf.get_vftable_ordinal (function) -ida_typeinf.guess_func_cc (function) -ida_typeinf.guess_tinfo (function) -ida_typeinf.ida_lowertype_helper_t (class) -ida_typeinf.ida_lowertype_helper_t.__init__ (method) -ida_typeinf.ida_lowertype_helper_t.func_has_stkframe_hole (method) -ida_typeinf.ida_lowertype_helper_t.get_func_purged_bytes (method) -ida_typeinf.idc_get_local_type (function) -ida_typeinf.idc_get_local_type_name (function) -ida_typeinf.idc_get_local_type_raw (function) -ida_typeinf.idc_get_type (function) -ida_typeinf.idc_get_type_raw (function) -ida_typeinf.idc_guess_type (function) -ida_typeinf.idc_parse_decl (function) -ida_typeinf.idc_parse_types (function) -ida_typeinf.idc_print_type (function) -ida_typeinf.idc_set_local_type (function) -ida_typeinf.import_type (function) -ida_typeinf.inf_big_arg_align (function) -ida_typeinf.inf_huge_arg_align (function) -ida_typeinf.inf_pack_stkargs (function) -ida_typeinf.is_autosync (function) -ida_typeinf.is_code_far (function) -ida_typeinf.is_comp_unsure (function) -ida_typeinf.is_data_far (function) -ida_typeinf.is_gcc (function) -ida_typeinf.is_gcc32 (function) -ida_typeinf.is_gcc64 (function) -ida_typeinf.is_golang_cc (function) -ida_typeinf.is_ordinal_name (function) -ida_typeinf.is_purging_cc (function) -ida_typeinf.is_restype_enum (function) -ida_typeinf.is_restype_struct (function) -ida_typeinf.is_restype_struni (function) -ida_typeinf.is_restype_void (function) -ida_typeinf.is_sdacl_byte (function) -ida_typeinf.is_swift_cc (function) -ida_typeinf.is_tah_byte (function) -ida_typeinf.is_type_arithmetic (function) -ida_typeinf.is_type_array (function) -ida_typeinf.is_type_bitfld (function) -ida_typeinf.is_type_bool (function) -ida_typeinf.is_type_char (function) -ida_typeinf.is_type_complex (function) -ida_typeinf.is_type_const (function) -ida_typeinf.is_type_double (function) -ida_typeinf.is_type_enum (function) -ida_typeinf.is_type_ext_arithmetic (function) -ida_typeinf.is_type_ext_integral (function) -ida_typeinf.is_type_float (function) -ida_typeinf.is_type_floating (function) -ida_typeinf.is_type_func (function) -ida_typeinf.is_type_int (function) -ida_typeinf.is_type_int128 (function) -ida_typeinf.is_type_int16 (function) -ida_typeinf.is_type_int32 (function) -ida_typeinf.is_type_int64 (function) -ida_typeinf.is_type_integral (function) -ida_typeinf.is_type_ldouble (function) -ida_typeinf.is_type_paf (function) -ida_typeinf.is_type_partial (function) -ida_typeinf.is_type_ptr (function) -ida_typeinf.is_type_ptr_or_array (function) -ida_typeinf.is_type_struct (function) -ida_typeinf.is_type_struni (function) -ida_typeinf.is_type_sue (function) -ida_typeinf.is_type_tbyte (function) -ida_typeinf.is_type_typedef (function) -ida_typeinf.is_type_uchar (function) -ida_typeinf.is_type_uint (function) -ida_typeinf.is_type_uint128 (function) -ida_typeinf.is_type_uint16 (function) -ida_typeinf.is_type_uint32 (function) -ida_typeinf.is_type_uint64 (function) -ida_typeinf.is_type_union (function) -ida_typeinf.is_type_unknown (function) -ida_typeinf.is_type_void (function) -ida_typeinf.is_type_volatile (function) -ida_typeinf.is_typeid_last (function) -ida_typeinf.is_user_cc (function) -ida_typeinf.is_vararg_cc (function) -ida_typeinf.lexcompare_tinfo (function) -ida_typeinf.load_til (function) -ida_typeinf.load_til_header (function) -ida_typeinf.lower_type (function) -ida_typeinf.lowertype_helper_t (class) -ida_typeinf.lowertype_helper_t.__init__ (method) -ida_typeinf.lowertype_helper_t.func_has_stkframe_hole (method) -ida_typeinf.lowertype_helper_t.get_func_purged_bytes (method) -ida_typeinf.new_til (function) -ida_typeinf.next_named_type (function) -ida_typeinf.no_sign (variable) -ida_typeinf.optimize_argloc (function) -ida_typeinf.pack_idcobj_to_bv (function) -ida_typeinf.pack_idcobj_to_idb (function) -ida_typeinf.pack_object_to_bv (function) -ida_typeinf.pack_object_to_idb (function) -ida_typeinf.parse_decl (function) -ida_typeinf.parse_decls (function) -ida_typeinf.predicate_t (class) -ida_typeinf.predicate_t.__disown__ (method) -ida_typeinf.predicate_t.__init__ (method) -ida_typeinf.predicate_t.should_display (method) -ida_typeinf.print_argloc (function) -ida_typeinf.print_decls (function) -ida_typeinf.print_tinfo (function) -ida_typeinf.print_type (function) -ida_typeinf.ptr_type_data_t (class) -ida_typeinf.ptr_type_data_t.__eq__ (method) -ida_typeinf.ptr_type_data_t.__init__ (method) -ida_typeinf.ptr_type_data_t.__ne__ (method) -ida_typeinf.ptr_type_data_t.closure (variable) -ida_typeinf.ptr_type_data_t.delta (variable) -ida_typeinf.ptr_type_data_t.is_code_ptr (method) -ida_typeinf.ptr_type_data_t.is_shifted (method) -ida_typeinf.ptr_type_data_t.obj_type (variable) -ida_typeinf.ptr_type_data_t.parent (variable) -ida_typeinf.ptr_type_data_t.swap (method) -ida_typeinf.ptr_type_data_t.taptr_bits (variable) -ida_typeinf.read_tinfo_bitfield_value (function) -ida_typeinf.reginfovec_t (class) -ida_typeinf.reginfovec_t.__eq__ (method) -ida_typeinf.reginfovec_t.__getitem__ (method) -ida_typeinf.reginfovec_t.__init__ (method) -ida_typeinf.reginfovec_t.__len__ (method) -ida_typeinf.reginfovec_t.__ne__ (method) -ida_typeinf.reginfovec_t.__setitem__ (method) -ida_typeinf.reginfovec_t._del (method) -ida_typeinf.reginfovec_t.add_unique (method) -ida_typeinf.reginfovec_t.at (method) -ida_typeinf.reginfovec_t.begin (method) -ida_typeinf.reginfovec_t.capacity (method) -ida_typeinf.reginfovec_t.clear (method) -ida_typeinf.reginfovec_t.empty (method) -ida_typeinf.reginfovec_t.end (method) -ida_typeinf.reginfovec_t.erase (method) -ida_typeinf.reginfovec_t.extract (method) -ida_typeinf.reginfovec_t.find (method) -ida_typeinf.reginfovec_t.grow (method) -ida_typeinf.reginfovec_t.has (method) -ida_typeinf.reginfovec_t.inject (method) -ida_typeinf.reginfovec_t.insert (method) -ida_typeinf.reginfovec_t.pop_back (method) -ida_typeinf.reginfovec_t.push_back (method) -ida_typeinf.reginfovec_t.qclear (method) -ida_typeinf.reginfovec_t.reserve (method) -ida_typeinf.reginfovec_t.resize (method) -ida_typeinf.reginfovec_t.size (method) -ida_typeinf.reginfovec_t.swap (method) -ida_typeinf.reginfovec_t.truncate (method) -ida_typeinf.regobj_t (class) -ida_typeinf.regobj_t.__init__ (method) -ida_typeinf.regobj_t.regidx (variable) -ida_typeinf.regobj_t.relocate (variable) -ida_typeinf.regobj_t.size (method) -ida_typeinf.regobjs_t (class) -ida_typeinf.regobjs_t.__init__ (method) -ida_typeinf.regobjvec_t (class) -ida_typeinf.regobjvec_t.__getitem__ (method) -ida_typeinf.regobjvec_t.__init__ (method) -ida_typeinf.regobjvec_t.__len__ (method) -ida_typeinf.regobjvec_t.__setitem__ (method) -ida_typeinf.regobjvec_t.at (method) -ida_typeinf.regobjvec_t.begin (method) -ida_typeinf.regobjvec_t.capacity (method) -ida_typeinf.regobjvec_t.clear (method) -ida_typeinf.regobjvec_t.empty (method) -ida_typeinf.regobjvec_t.end (method) -ida_typeinf.regobjvec_t.erase (method) -ida_typeinf.regobjvec_t.extract (method) -ida_typeinf.regobjvec_t.grow (method) -ida_typeinf.regobjvec_t.inject (method) -ida_typeinf.regobjvec_t.insert (method) -ida_typeinf.regobjvec_t.pop_back (method) -ida_typeinf.regobjvec_t.push_back (method) -ida_typeinf.regobjvec_t.qclear (method) -ida_typeinf.regobjvec_t.reserve (method) -ida_typeinf.regobjvec_t.resize (method) -ida_typeinf.regobjvec_t.size (method) -ida_typeinf.regobjvec_t.swap (method) -ida_typeinf.regobjvec_t.truncate (method) -ida_typeinf.remove_abi_opts (function) -ida_typeinf.remove_pointer (function) -ida_typeinf.remove_tinfo_pointer (function) -ida_typeinf.replace_ordinal_typerefs (function) -ida_typeinf.resolve_typedef (function) -ida_typeinf.rrel_t (class) -ida_typeinf.rrel_t.__init__ (method) -ida_typeinf.rrel_t.off (variable) -ida_typeinf.rrel_t.reg (variable) -ida_typeinf.save_tinfo (function) -ida_typeinf.scattered_aloc_t (class) -ida_typeinf.scattered_aloc_t.__init__ (method) -ida_typeinf.score_tinfo (function) -ida_typeinf.serialize_tinfo (function) -ida_typeinf.set_abi_name (function) -ida_typeinf.set_c_header_path (function) -ida_typeinf.set_c_macros (function) -ida_typeinf.set_compiler (function) -ida_typeinf.set_compiler_id (function) -ida_typeinf.set_compiler_string (function) -ida_typeinf.set_numbered_type (function) -ida_typeinf.set_tinfo_attr (function) -ida_typeinf.set_tinfo_attrs (function) -ida_typeinf.set_tinfo_property (function) -ida_typeinf.set_tinfo_property3 (function) -ida_typeinf.set_type_alias (function) -ida_typeinf.set_vftable_ea (function) -ida_typeinf.simd_info_t (class) -ida_typeinf.simd_info_t.__init__ (method) -ida_typeinf.simd_info_t.match_pattern (method) -ida_typeinf.simd_info_t.memtype (variable) -ida_typeinf.simd_info_t.name (variable) -ida_typeinf.simd_info_t.size (variable) -ida_typeinf.simd_info_t.tif (variable) -ida_typeinf.stkarg_area_info_t (class) -ida_typeinf.stkarg_area_info_t.__init__ (method) -ida_typeinf.stkarg_area_info_t.linkage_area (variable) -ida_typeinf.stkarg_area_info_t.shadow_size (variable) -ida_typeinf.stkarg_area_info_t.stkarg_offset (variable) -ida_typeinf.store_til (function) -ida_typeinf.switch_to_golang (function) -ida_typeinf.text_sink_t (class) -ida_typeinf.text_sink_t.__disown__ (method) -ida_typeinf.text_sink_t.__init__ (method) -ida_typeinf.text_sink_t._print (method) -ida_typeinf.til_symbol_t (class) -ida_typeinf.til_symbol_t.__init__ (method) -ida_typeinf.til_symbol_t.name (variable) -ida_typeinf.til_symbol_t.til (variable) -ida_typeinf.til_t (class) -ida_typeinf.til_t.__init__ (method) -ida_typeinf.til_t.base (method) -ida_typeinf.til_t.cc (variable) -ida_typeinf.til_t.desc (variable) -ida_typeinf.til_t.flags (variable) -ida_typeinf.til_t.is_dirty (method) -ida_typeinf.til_t.name (variable) -ida_typeinf.til_t.nbases (variable) -ida_typeinf.til_t.nrefs (variable) -ida_typeinf.til_t.nstreams (variable) -ida_typeinf.til_t.set_dirty (method) -ida_typeinf.til_t.streams (variable) -ida_typeinf.tinfo_t (class) -ida_typeinf.tinfo_t.__eq__ (method) -ida_typeinf.tinfo_t.__ge__ (method) -ida_typeinf.tinfo_t.__gt__ (method) -ida_typeinf.tinfo_t.__init__ (method) -ida_typeinf.tinfo_t.__le__ (method) -ida_typeinf.tinfo_t.__lt__ (method) -ida_typeinf.tinfo_t.__ne__ (method) -ida_typeinf.tinfo_t.__str__ (method) -ida_typeinf.tinfo_t._print (method) -ida_typeinf.tinfo_t.append_covered (method) -ida_typeinf.tinfo_t.calc_gaps (method) -ida_typeinf.tinfo_t.calc_purged_bytes (method) -ida_typeinf.tinfo_t.calc_score (method) -ida_typeinf.tinfo_t.calc_udt_aligns (method) -ida_typeinf.tinfo_t.change_sign (method) -ida_typeinf.tinfo_t.clear (method) -ida_typeinf.tinfo_t.clr_const (method) -ida_typeinf.tinfo_t.clr_const_volatile (method) -ida_typeinf.tinfo_t.clr_decl_const_volatile (method) -ida_typeinf.tinfo_t.clr_volatile (method) -ida_typeinf.tinfo_t.compare (method) -ida_typeinf.tinfo_t.compare_with (method) -ida_typeinf.tinfo_t.convert_array_to_ptr (method) -ida_typeinf.tinfo_t.copy (method) -ida_typeinf.tinfo_t.create_array (method) -ida_typeinf.tinfo_t.create_bitfield (method) -ida_typeinf.tinfo_t.create_enum (method) -ida_typeinf.tinfo_t.create_forward_decl (method) -ida_typeinf.tinfo_t.create_func (method) -ida_typeinf.tinfo_t.create_ptr (method) -ida_typeinf.tinfo_t.create_simple_type (method) -ida_typeinf.tinfo_t.create_typedef (method) -ida_typeinf.tinfo_t.create_udt (method) -ida_typeinf.tinfo_t.del_attr (method) -ida_typeinf.tinfo_t.del_attrs (method) -ida_typeinf.tinfo_t.deserialize (method) -ida_typeinf.tinfo_t.dstr (method) -ida_typeinf.tinfo_t.edit_array (method) -ida_typeinf.tinfo_t.edit_bitfield (method) -ida_typeinf.tinfo_t.edit_enum (method) -ida_typeinf.tinfo_t.edit_func (method) -ida_typeinf.tinfo_t.edit_ptr (method) -ida_typeinf.tinfo_t.edit_udt (method) -ida_typeinf.tinfo_t.empty (method) -ida_typeinf.tinfo_t.equals_to (method) -ida_typeinf.tinfo_t.find_udt_member (method) -ida_typeinf.tinfo_t.get_array_details (method) -ida_typeinf.tinfo_t.get_array_element (method) -ida_typeinf.tinfo_t.get_array_nelems (method) -ida_typeinf.tinfo_t.get_attr (method) -ida_typeinf.tinfo_t.get_attrs (method) -ida_typeinf.tinfo_t.get_bitfield_details (method) -ida_typeinf.tinfo_t.get_declalign (method) -ida_typeinf.tinfo_t.get_decltype (method) -ida_typeinf.tinfo_t.get_enum_base_type (method) -ida_typeinf.tinfo_t.get_enum_details (method) -ida_typeinf.tinfo_t.get_final_ordinal (method) -ida_typeinf.tinfo_t.get_final_type_name (method) -ida_typeinf.tinfo_t.get_func_details (method) -ida_typeinf.tinfo_t.get_methods (method) -ida_typeinf.tinfo_t.get_modifiers (method) -ida_typeinf.tinfo_t.get_named_type (method) -ida_typeinf.tinfo_t.get_nargs (method) -ida_typeinf.tinfo_t.get_next_type_name (method) -ida_typeinf.tinfo_t.get_nth_arg (method) -ida_typeinf.tinfo_t.get_numbered_type (method) -ida_typeinf.tinfo_t.get_onemember_type (method) -ida_typeinf.tinfo_t.get_ordinal (method) -ida_typeinf.tinfo_t.get_pointed_object (method) -ida_typeinf.tinfo_t.get_ptr_details (method) -ida_typeinf.tinfo_t.get_ptrarr_object (method) -ida_typeinf.tinfo_t.get_ptrarr_objsize (method) -ida_typeinf.tinfo_t.get_realtype (method) -ida_typeinf.tinfo_t.get_rettype (method) -ida_typeinf.tinfo_t.get_sign (method) -ida_typeinf.tinfo_t.get_size (method) -ida_typeinf.tinfo_t.get_stock (method) -ida_typeinf.tinfo_t.get_til (method) -ida_typeinf.tinfo_t.get_type_cmt (method) -ida_typeinf.tinfo_t.get_type_name (method) -ida_typeinf.tinfo_t.get_type_rptcmt (method) -ida_typeinf.tinfo_t.get_udt_details (method) -ida_typeinf.tinfo_t.get_udt_nmembers (method) -ida_typeinf.tinfo_t.get_unpadded_size (method) -ida_typeinf.tinfo_t.has_details (method) -ida_typeinf.tinfo_t.has_vftable (method) -ida_typeinf.tinfo_t.is_anonymous_udt (method) -ida_typeinf.tinfo_t.is_arithmetic (method) -ida_typeinf.tinfo_t.is_array (method) -ida_typeinf.tinfo_t.is_bitfield (method) -ida_typeinf.tinfo_t.is_bool (method) -ida_typeinf.tinfo_t.is_castable_to (method) -ida_typeinf.tinfo_t.is_char (method) -ida_typeinf.tinfo_t.is_complex (method) -ida_typeinf.tinfo_t.is_const (method) -ida_typeinf.tinfo_t.is_correct (method) -ida_typeinf.tinfo_t.is_decl_array (method) -ida_typeinf.tinfo_t.is_decl_bitfield (method) -ida_typeinf.tinfo_t.is_decl_bool (method) -ida_typeinf.tinfo_t.is_decl_char (method) -ida_typeinf.tinfo_t.is_decl_complex (method) -ida_typeinf.tinfo_t.is_decl_const (method) -ida_typeinf.tinfo_t.is_decl_double (method) -ida_typeinf.tinfo_t.is_decl_enum (method) -ida_typeinf.tinfo_t.is_decl_float (method) -ida_typeinf.tinfo_t.is_decl_floating (method) -ida_typeinf.tinfo_t.is_decl_func (method) -ida_typeinf.tinfo_t.is_decl_int (method) -ida_typeinf.tinfo_t.is_decl_int128 (method) -ida_typeinf.tinfo_t.is_decl_int16 (method) -ida_typeinf.tinfo_t.is_decl_int32 (method) -ida_typeinf.tinfo_t.is_decl_int64 (method) -ida_typeinf.tinfo_t.is_decl_last (method) -ida_typeinf.tinfo_t.is_decl_ldouble (method) -ida_typeinf.tinfo_t.is_decl_paf (method) -ida_typeinf.tinfo_t.is_decl_partial (method) -ida_typeinf.tinfo_t.is_decl_ptr (method) -ida_typeinf.tinfo_t.is_decl_struct (method) -ida_typeinf.tinfo_t.is_decl_sue (method) -ida_typeinf.tinfo_t.is_decl_tbyte (method) -ida_typeinf.tinfo_t.is_decl_typedef (method) -ida_typeinf.tinfo_t.is_decl_uchar (method) -ida_typeinf.tinfo_t.is_decl_udt (method) -ida_typeinf.tinfo_t.is_decl_uint (method) -ida_typeinf.tinfo_t.is_decl_uint128 (method) -ida_typeinf.tinfo_t.is_decl_uint16 (method) -ida_typeinf.tinfo_t.is_decl_uint32 (method) -ida_typeinf.tinfo_t.is_decl_uint64 (method) -ida_typeinf.tinfo_t.is_decl_union (method) -ida_typeinf.tinfo_t.is_decl_unknown (method) -ida_typeinf.tinfo_t.is_decl_void (method) -ida_typeinf.tinfo_t.is_decl_volatile (method) -ida_typeinf.tinfo_t.is_double (method) -ida_typeinf.tinfo_t.is_empty_udt (method) -ida_typeinf.tinfo_t.is_enum (method) -ida_typeinf.tinfo_t.is_ext_arithmetic (method) -ida_typeinf.tinfo_t.is_ext_integral (method) -ida_typeinf.tinfo_t.is_float (method) -ida_typeinf.tinfo_t.is_floating (method) -ida_typeinf.tinfo_t.is_forward_decl (method) -ida_typeinf.tinfo_t.is_from_subtil (method) -ida_typeinf.tinfo_t.is_func (method) -ida_typeinf.tinfo_t.is_funcptr (method) -ida_typeinf.tinfo_t.is_high_func (method) -ida_typeinf.tinfo_t.is_int (method) -ida_typeinf.tinfo_t.is_int128 (method) -ida_typeinf.tinfo_t.is_int16 (method) -ida_typeinf.tinfo_t.is_int32 (method) -ida_typeinf.tinfo_t.is_int64 (method) -ida_typeinf.tinfo_t.is_integral (method) -ida_typeinf.tinfo_t.is_ldouble (method) -ida_typeinf.tinfo_t.is_manually_castable_to (method) -ida_typeinf.tinfo_t.is_one_fpval (method) -ida_typeinf.tinfo_t.is_paf (method) -ida_typeinf.tinfo_t.is_partial (method) -ida_typeinf.tinfo_t.is_ptr (method) -ida_typeinf.tinfo_t.is_ptr_or_array (method) -ida_typeinf.tinfo_t.is_purging_cc (method) -ida_typeinf.tinfo_t.is_pvoid (method) -ida_typeinf.tinfo_t.is_scalar (method) -ida_typeinf.tinfo_t.is_shifted_ptr (method) -ida_typeinf.tinfo_t.is_signed (method) -ida_typeinf.tinfo_t.is_small_udt (method) -ida_typeinf.tinfo_t.is_sse_type (method) -ida_typeinf.tinfo_t.is_struct (method) -ida_typeinf.tinfo_t.is_sue (method) -ida_typeinf.tinfo_t.is_tbyte (method) -ida_typeinf.tinfo_t.is_typedef (method) -ida_typeinf.tinfo_t.is_typeref (method) -ida_typeinf.tinfo_t.is_uchar (method) -ida_typeinf.tinfo_t.is_udt (method) -ida_typeinf.tinfo_t.is_uint (method) -ida_typeinf.tinfo_t.is_uint128 (method) -ida_typeinf.tinfo_t.is_uint16 (method) -ida_typeinf.tinfo_t.is_uint32 (method) -ida_typeinf.tinfo_t.is_uint64 (method) -ida_typeinf.tinfo_t.is_union (method) -ida_typeinf.tinfo_t.is_unknown (method) -ida_typeinf.tinfo_t.is_unsigned (method) -ida_typeinf.tinfo_t.is_user_cc (method) -ida_typeinf.tinfo_t.is_vararg_cc (method) -ida_typeinf.tinfo_t.is_varstruct (method) -ida_typeinf.tinfo_t.is_vftable (method) -ida_typeinf.tinfo_t.is_void (method) -ida_typeinf.tinfo_t.is_volatile (method) -ida_typeinf.tinfo_t.is_well_defined (method) -ida_typeinf.tinfo_t.present (method) -ida_typeinf.tinfo_t.read_bitfield_value (method) -ida_typeinf.tinfo_t.remove_ptr_or_array (method) -ida_typeinf.tinfo_t.requires_qualifier (method) -ida_typeinf.tinfo_t.serialize (method) -ida_typeinf.tinfo_t.set_attr (method) -ida_typeinf.tinfo_t.set_attrs (method) -ida_typeinf.tinfo_t.set_const (method) -ida_typeinf.tinfo_t.set_declalign (method) -ida_typeinf.tinfo_t.set_methods (method) -ida_typeinf.tinfo_t.set_modifiers (method) -ida_typeinf.tinfo_t.set_named_type (method) -ida_typeinf.tinfo_t.set_numbered_type (method) -ida_typeinf.tinfo_t.set_symbol_type (method) -ida_typeinf.tinfo_t.set_type_cmt (method) -ida_typeinf.tinfo_t.set_volatile (method) -ida_typeinf.tinfo_t.swap (method) -ida_typeinf.tinfo_t.write_bitfield_value (method) -ida_typeinf.tinfo_t_get_stock (function) -ida_typeinf.tinfo_visitor_t (class) -ida_typeinf.tinfo_visitor_t.__disown__ (method) -ida_typeinf.tinfo_visitor_t.__init__ (method) -ida_typeinf.tinfo_visitor_t.apply_to (method) -ida_typeinf.tinfo_visitor_t.prune_now (method) -ida_typeinf.tinfo_visitor_t.state (variable) -ida_typeinf.tinfo_visitor_t.visit_type (method) -ida_typeinf.type_attr_t (class) -ida_typeinf.type_attr_t.__ge__ (method) -ida_typeinf.type_attr_t.__init__ (method) -ida_typeinf.type_attr_t.__lt__ (method) -ida_typeinf.type_attr_t.key (variable) -ida_typeinf.type_attr_t.value (variable) -ida_typeinf.type_attrs_t (class) -ida_typeinf.type_attrs_t.__getitem__ (method) -ida_typeinf.type_attrs_t.__init__ (method) -ida_typeinf.type_attrs_t.__len__ (method) -ida_typeinf.type_attrs_t.__setitem__ (method) -ida_typeinf.type_attrs_t.at (method) -ida_typeinf.type_attrs_t.begin (method) -ida_typeinf.type_attrs_t.capacity (method) -ida_typeinf.type_attrs_t.clear (method) -ida_typeinf.type_attrs_t.empty (method) -ida_typeinf.type_attrs_t.end (method) -ida_typeinf.type_attrs_t.erase (method) -ida_typeinf.type_attrs_t.extract (method) -ida_typeinf.type_attrs_t.grow (method) -ida_typeinf.type_attrs_t.inject (method) -ida_typeinf.type_attrs_t.insert (method) -ida_typeinf.type_attrs_t.pop_back (method) -ida_typeinf.type_attrs_t.push_back (method) -ida_typeinf.type_attrs_t.qclear (method) -ida_typeinf.type_attrs_t.reserve (method) -ida_typeinf.type_attrs_t.resize (method) -ida_typeinf.type_attrs_t.size (method) -ida_typeinf.type_attrs_t.swap (method) -ida_typeinf.type_attrs_t.truncate (method) -ida_typeinf.type_mods_t (class) -ida_typeinf.type_mods_t.__init__ (method) -ida_typeinf.type_mods_t.clear (method) -ida_typeinf.type_mods_t.cmt (variable) -ida_typeinf.type_mods_t.flags (variable) -ida_typeinf.type_mods_t.has_cmt (method) -ida_typeinf.type_mods_t.has_info (method) -ida_typeinf.type_mods_t.has_name (method) -ida_typeinf.type_mods_t.has_type (method) -ida_typeinf.type_mods_t.name (variable) -ida_typeinf.type_mods_t.set_new_cmt (method) -ida_typeinf.type_mods_t.set_new_name (method) -ida_typeinf.type_mods_t.set_new_type (method) -ida_typeinf.type_mods_t.type (variable) -ida_typeinf.type_signed (variable) -ida_typeinf.type_unsigned (variable) -ida_typeinf.typedef_type_data_t (class) -ida_typeinf.typedef_type_data_t.__init__ (method) -ida_typeinf.typedef_type_data_t.is_ordref (variable) -ida_typeinf.typedef_type_data_t.name (variable) -ida_typeinf.typedef_type_data_t.ordinal (variable) -ida_typeinf.typedef_type_data_t.resolve (variable) -ida_typeinf.typedef_type_data_t.swap (method) -ida_typeinf.typedef_type_data_t.til (variable) -ida_typeinf.udt_member_t (class) -ida_typeinf.udt_member_t.__eq__ (method) -ida_typeinf.udt_member_t.__init__ (method) -ida_typeinf.udt_member_t.__lt__ (method) -ida_typeinf.udt_member_t.__ne__ (method) -ida_typeinf.udt_member_t.begin (method) -ida_typeinf.udt_member_t.clr_baseclass (method) -ida_typeinf.udt_member_t.clr_method (method) -ida_typeinf.udt_member_t.clr_unaligned (method) -ida_typeinf.udt_member_t.clr_vftable (method) -ida_typeinf.udt_member_t.clr_virtbase (method) -ida_typeinf.udt_member_t.cmt (variable) -ida_typeinf.udt_member_t.effalign (variable) -ida_typeinf.udt_member_t.end (method) -ida_typeinf.udt_member_t.fda (variable) -ida_typeinf.udt_member_t.is_anonymous_udm (method) -ida_typeinf.udt_member_t.is_baseclass (method) -ida_typeinf.udt_member_t.is_bitfield (method) -ida_typeinf.udt_member_t.is_gap (method) -ida_typeinf.udt_member_t.is_method (method) -ida_typeinf.udt_member_t.is_rptcmt (method) -ida_typeinf.udt_member_t.is_unaligned (method) -ida_typeinf.udt_member_t.is_vftable (method) -ida_typeinf.udt_member_t.is_virtbase (method) -ida_typeinf.udt_member_t.is_zero_bitfield (method) -ida_typeinf.udt_member_t.make_gap (method) -ida_typeinf.udt_member_t.name (variable) -ida_typeinf.udt_member_t.offset (variable) -ida_typeinf.udt_member_t.repr (variable) -ida_typeinf.udt_member_t.set_baseclass (method) -ida_typeinf.udt_member_t.set_method (method) -ida_typeinf.udt_member_t.set_unaligned (method) -ida_typeinf.udt_member_t.set_vftable (method) -ida_typeinf.udt_member_t.set_virtbase (method) -ida_typeinf.udt_member_t.size (variable) -ida_typeinf.udt_member_t.swap (method) -ida_typeinf.udt_member_t.tafld_bits (variable) -ida_typeinf.udt_member_t.type (variable) -ida_typeinf.udt_member_t__make_gap (function) -ida_typeinf.udt_type_data_t (class) -ida_typeinf.udt_type_data_t.__init__ (method) -ida_typeinf.udt_type_data_t.effalign (variable) -ida_typeinf.udt_type_data_t.find_member (method) -ida_typeinf.udt_type_data_t.get_best_fit_member (method) -ida_typeinf.udt_type_data_t.is_cppobj (method) -ida_typeinf.udt_type_data_t.is_last_baseclass (method) -ida_typeinf.udt_type_data_t.is_msstruct (method) -ida_typeinf.udt_type_data_t.is_unaligned (method) -ida_typeinf.udt_type_data_t.is_union (variable) -ida_typeinf.udt_type_data_t.is_vftable (method) -ida_typeinf.udt_type_data_t.npos (variable) -ida_typeinf.udt_type_data_t.pack (variable) -ida_typeinf.udt_type_data_t.sda (variable) -ida_typeinf.udt_type_data_t.set_vftable (method) -ida_typeinf.udt_type_data_t.swap (method) -ida_typeinf.udt_type_data_t.taudt_bits (variable) -ida_typeinf.udt_type_data_t.total_size (variable) -ida_typeinf.udt_type_data_t.unpadded_size (variable) -ida_typeinf.udt_type_data_t.version (variable) -ida_typeinf.udt_type_data_t__find_member (function) -ida_typeinf.udt_type_data_t__get_best_fit_member (function) -ida_typeinf.udtmembervec_t (class) -ida_typeinf.udtmembervec_t.__init__ (method) -ida_typeinf.udtmembervec_template_t (class) -ida_typeinf.udtmembervec_template_t.__eq__ (method) -ida_typeinf.udtmembervec_template_t.__getitem__ (method) -ida_typeinf.udtmembervec_template_t.__init__ (method) -ida_typeinf.udtmembervec_template_t.__len__ (method) -ida_typeinf.udtmembervec_template_t.__ne__ (method) -ida_typeinf.udtmembervec_template_t.__setitem__ (method) -ida_typeinf.udtmembervec_template_t._del (method) -ida_typeinf.udtmembervec_template_t.add_unique (method) -ida_typeinf.udtmembervec_template_t.at (method) -ida_typeinf.udtmembervec_template_t.begin (method) -ida_typeinf.udtmembervec_template_t.capacity (method) -ida_typeinf.udtmembervec_template_t.clear (method) -ida_typeinf.udtmembervec_template_t.empty (method) -ida_typeinf.udtmembervec_template_t.end (method) -ida_typeinf.udtmembervec_template_t.erase (method) -ida_typeinf.udtmembervec_template_t.extract (method) -ida_typeinf.udtmembervec_template_t.find (method) -ida_typeinf.udtmembervec_template_t.grow (method) -ida_typeinf.udtmembervec_template_t.has (method) -ida_typeinf.udtmembervec_template_t.inject (method) -ida_typeinf.udtmembervec_template_t.insert (method) -ida_typeinf.udtmembervec_template_t.pop_back (method) -ida_typeinf.udtmembervec_template_t.push_back (method) -ida_typeinf.udtmembervec_template_t.qclear (method) -ida_typeinf.udtmembervec_template_t.reserve (method) -ida_typeinf.udtmembervec_template_t.resize (method) -ida_typeinf.udtmembervec_template_t.size (method) -ida_typeinf.udtmembervec_template_t.swap (method) -ida_typeinf.udtmembervec_template_t.truncate (method) -ida_typeinf.unpack_idcobj_from_bv (function) -ida_typeinf.unpack_idcobj_from_idb (function) -ida_typeinf.unpack_object_from_bv (function) -ida_typeinf.unpack_object_from_idb (function) -ida_typeinf.use_golang_cc (function) -ida_typeinf.valstr_t (class) -ida_typeinf.valstr_t.__init__ (method) -ida_typeinf.valstr_t.info (variable) -ida_typeinf.valstr_t.length (variable) -ida_typeinf.valstr_t.members (variable) -ida_typeinf.valstr_t.oneline (variable) -ida_typeinf.valstr_t.props (variable) -ida_typeinf.valstrs_t (class) -ida_typeinf.valstrs_t.__init__ (method) -ida_typeinf.valstrvec_t (class) -ida_typeinf.valstrvec_t.__getitem__ (method) -ida_typeinf.valstrvec_t.__init__ (method) -ida_typeinf.valstrvec_t.__len__ (method) -ida_typeinf.valstrvec_t.__setitem__ (method) -ida_typeinf.valstrvec_t.at (method) -ida_typeinf.valstrvec_t.begin (method) -ida_typeinf.valstrvec_t.capacity (method) -ida_typeinf.valstrvec_t.clear (method) -ida_typeinf.valstrvec_t.empty (method) -ida_typeinf.valstrvec_t.end (method) -ida_typeinf.valstrvec_t.erase (method) -ida_typeinf.valstrvec_t.extract (method) -ida_typeinf.valstrvec_t.grow (method) -ida_typeinf.valstrvec_t.inject (method) -ida_typeinf.valstrvec_t.insert (method) -ida_typeinf.valstrvec_t.pop_back (method) -ida_typeinf.valstrvec_t.push_back (method) -ida_typeinf.valstrvec_t.qclear (method) -ida_typeinf.valstrvec_t.reserve (method) -ida_typeinf.valstrvec_t.resize (method) -ida_typeinf.valstrvec_t.size (method) -ida_typeinf.valstrvec_t.swap (method) -ida_typeinf.valstrvec_t.truncate (method) -ida_typeinf.verify_argloc (function) -ida_typeinf.verify_tinfo (function) -ida_typeinf.visit_subtypes (function) -ida_typeinf.write_tinfo_bitfield_value (function) -ida_ua (module) -ida_ua.FCBF_CONT (variable) -ida_ua.FCBF_DELIM (variable) -ida_ua.FCBF_ERR_REPL (variable) -ida_ua.FCBF_FF_LIT (variable) -ida_ua.INSN_64BIT (variable) -ida_ua.INSN_MACRO (variable) -ida_ua.INSN_MODMAC (variable) -ida_ua.OF_NO_BASE_DISP (variable) -ida_ua.OF_NUMBER (variable) -ida_ua.OF_OUTER_DISP (variable) -ida_ua.OF_SHOW (variable) -ida_ua.OOFS_IFSIGN (variable) -ida_ua.OOFS_NEEDSIGN (variable) -ida_ua.OOFS_NOSIGN (variable) -ida_ua.OOFW_16 (variable) -ida_ua.OOFW_24 (variable) -ida_ua.OOFW_32 (variable) -ida_ua.OOFW_64 (variable) -ida_ua.OOFW_8 (variable) -ida_ua.OOFW_IMM (variable) -ida_ua.OOF_ADDR (variable) -ida_ua.OOF_ANYSERIAL (variable) -ida_ua.OOF_NOBNOT (variable) -ida_ua.OOF_NUMBER (variable) -ida_ua.OOF_OUTER (variable) -ida_ua.OOF_SIGNED (variable) -ida_ua.OOF_SIGNMASK (variable) -ida_ua.OOF_SPACES (variable) -ida_ua.OOF_WIDTHMASK (variable) -ida_ua.OOF_ZSTROFF (variable) -ida_ua.PACK_FORM_DEF (variable) -ida_ua.STKVAR_VALID_SIZE (variable) -ida_ua.calc_dataseg (function) -ida_ua.can_decode (function) -ida_ua.construct_macro (function) -ida_ua.construct_macro2 (function) -ida_ua.create_insn (function) -ida_ua.create_outctx (function) -ida_ua.decode_insn (function) -ida_ua.decode_preceding_insn (function) -ida_ua.decode_prev_insn (function) -ida_ua.dt_bitfild (variable) -ida_ua.dt_byte (variable) -ida_ua.dt_byte16 (variable) -ida_ua.dt_byte32 (variable) -ida_ua.dt_byte64 (variable) -ida_ua.dt_code (variable) -ida_ua.dt_double (variable) -ida_ua.dt_dword (variable) -ida_ua.dt_float (variable) -ida_ua.dt_fword (variable) -ida_ua.dt_half (variable) -ida_ua.dt_ldbl (variable) -ida_ua.dt_packreal (variable) -ida_ua.dt_qword (variable) -ida_ua.dt_string (variable) -ida_ua.dt_tbyte (variable) -ida_ua.dt_unicode (variable) -ida_ua.dt_void (variable) -ida_ua.dt_word (variable) -ida_ua.get_dtype_by_size (function) -ida_ua.get_dtype_flag (function) -ida_ua.get_dtype_size (function) -ida_ua.get_immvals (function) -ida_ua.get_lookback (function) -ida_ua.get_printable_immvals (function) -ida_ua.insn_add_cref (function) -ida_ua.insn_add_dref (function) -ida_ua.insn_add_off_drefs (function) -ida_ua.insn_create_stkvar (function) -ida_ua.insn_t (class) -ida_ua.insn_t.__get_auxpref__ (method) -ida_ua.insn_t.__get_operand__ (method) -ida_ua.insn_t.__get_ops__ (method) -ida_ua.insn_t.__getitem__ (method) -ida_ua.insn_t.__init__ (method) -ida_ua.insn_t.__iter__ (method) -ida_ua.insn_t.__set_auxpref__ (method) -ida_ua.insn_t.add_cref (method) -ida_ua.insn_t.add_dref (method) -ida_ua.insn_t.add_off_drefs (method) -ida_ua.insn_t.assign (method) -ida_ua.insn_t.auxpref (variable) -ida_ua.insn_t.create_op_data (method) -ida_ua.insn_t.create_stkvar (method) -ida_ua.insn_t.cs (variable) -ida_ua.insn_t.ea (variable) -ida_ua.insn_t.flags (variable) -ida_ua.insn_t.get_canon_feature (method) -ida_ua.insn_t.get_canon_mnem (method) -ida_ua.insn_t.get_next_byte (method) -ida_ua.insn_t.get_next_dword (method) -ida_ua.insn_t.get_next_qword (method) -ida_ua.insn_t.get_next_word (method) -ida_ua.insn_t.insnpref (variable) -ida_ua.insn_t.ip (variable) -ida_ua.insn_t.is_64bit (method) -ida_ua.insn_t.is_canon_insn (method) -ida_ua.insn_t.is_macro (method) -ida_ua.insn_t.itype (variable) -ida_ua.insn_t.ops (variable) -ida_ua.insn_t.segpref (variable) -ida_ua.insn_t.size (variable) -ida_ua.insn_t__from_ptrval__ (function) -ida_ua.is_floating_dtype (function) -ida_ua.macro_constructor_t (class) -ida_ua.macro_constructor_t.__disown__ (method) -ida_ua.macro_constructor_t.__init__ (method) -ida_ua.macro_constructor_t.build_macro (method) -ida_ua.map_code_ea (function) -ida_ua.map_data_ea (function) -ida_ua.map_ea (function) -ida_ua.o_displ (variable) -ida_ua.o_far (variable) -ida_ua.o_idpspec0 (variable) -ida_ua.o_idpspec1 (variable) -ida_ua.o_idpspec2 (variable) -ida_ua.o_idpspec3 (variable) -ida_ua.o_idpspec4 (variable) -ida_ua.o_idpspec5 (variable) -ida_ua.o_imm (variable) -ida_ua.o_mem (variable) -ida_ua.o_near (variable) -ida_ua.o_phrase (variable) -ida_ua.o_reg (variable) -ida_ua.o_void (variable) -ida_ua.op_t (class) -ida_ua.op_t.__get_addr__ (method) -ida_ua.op_t.__get_reg_phrase__ (method) -ida_ua.op_t.__get_specval__ (method) -ida_ua.op_t.__get_value64__ (method) -ida_ua.op_t.__get_value__ (method) -ida_ua.op_t.__init__ (method) -ida_ua.op_t.__set_addr__ (method) -ida_ua.op_t.__set_reg_phrase__ (method) -ida_ua.op_t.__set_specval__ (method) -ida_ua.op_t.__set_value64__ (method) -ida_ua.op_t.__set_value__ (method) -ida_ua.op_t.addr (variable) -ida_ua.op_t.assign (method) -ida_ua.op_t.clr_shown (method) -ida_ua.op_t.dtype (variable) -ida_ua.op_t.flags (variable) -ida_ua.op_t.has_reg (method) -ida_ua.op_t.is_imm (method) -ida_ua.op_t.is_reg (method) -ida_ua.op_t.n (variable) -ida_ua.op_t.offb (variable) -ida_ua.op_t.offo (variable) -ida_ua.op_t.phrase (variable) -ida_ua.op_t.reg (variable) -ida_ua.op_t.set_shown (method) -ida_ua.op_t.shown (method) -ida_ua.op_t.specval (variable) -ida_ua.op_t.type (variable) -ida_ua.op_t.value (variable) -ida_ua.op_t__from_ptrval__ (function) -ida_ua.operands_array (class) -ida_ua.operands_array.__getitem__ (method) -ida_ua.operands_array.__init__ (method) -ida_ua.operands_array.__len__ (method) -ida_ua.operands_array.__setitem__ (method) -ida_ua.operands_array._get_bytes (method) -ida_ua.operands_array._set_bytes (method) -ida_ua.outctx_base_t (class) -ida_ua.outctx_base_t.__init__ (method) -ida_ua.outctx_base_t.close_comment (method) -ida_ua.outctx_base_t.clr_gen_label (method) -ida_ua.outctx_base_t.display_voids (method) -ida_ua.outctx_base_t.flush_buf (method) -ida_ua.outctx_base_t.flush_outbuf (method) -ida_ua.outctx_base_t.forbid_annotations (method) -ida_ua.outctx_base_t.force_code (method) -ida_ua.outctx_base_t.gen_block_cmt (method) -ida_ua.outctx_base_t.gen_border_line (method) -ida_ua.outctx_base_t.gen_cmt_line (method) -ida_ua.outctx_base_t.gen_collapsed_line (method) -ida_ua.outctx_base_t.gen_empty_line (method) -ida_ua.outctx_base_t.gen_empty_line_without_annotations (method) -ida_ua.outctx_base_t.gen_printf (method) -ida_ua.outctx_base_t.gen_xref_lines (method) -ida_ua.outctx_base_t.getF (method) -ida_ua.outctx_base_t.get_stkvar (method) -ida_ua.outctx_base_t.init_lines_array (method) -ida_ua.outctx_base_t.multiline (method) -ida_ua.outctx_base_t.only_main_line (method) -ida_ua.outctx_base_t.out_addr_tag (method) -ida_ua.outctx_base_t.out_btoa (method) -ida_ua.outctx_base_t.out_char (method) -ida_ua.outctx_base_t.out_chars (method) -ida_ua.outctx_base_t.out_colored_register_line (method) -ida_ua.outctx_base_t.out_keyword (method) -ida_ua.outctx_base_t.out_line (method) -ida_ua.outctx_base_t.out_long (method) -ida_ua.outctx_base_t.out_name_expr (method) -ida_ua.outctx_base_t.out_printf (method) -ida_ua.outctx_base_t.out_register (method) -ida_ua.outctx_base_t.out_spaces (method) -ida_ua.outctx_base_t.out_symbol (method) -ida_ua.outctx_base_t.out_tagoff (method) -ida_ua.outctx_base_t.out_tagon (method) -ida_ua.outctx_base_t.out_value (method) -ida_ua.outctx_base_t.print_label_now (method) -ida_ua.outctx_base_t.restore_ctxflags (method) -ida_ua.outctx_base_t.retrieve_cmt (method) -ida_ua.outctx_base_t.retrieve_name (method) -ida_ua.outctx_base_t.set_comment_addr (method) -ida_ua.outctx_base_t.set_dlbind_opnd (method) -ida_ua.outctx_base_t.set_gen_cmt (method) -ida_ua.outctx_base_t.set_gen_demangled_label (method) -ida_ua.outctx_base_t.set_gen_label (method) -ida_ua.outctx_base_t.set_gen_xrefs (method) -ida_ua.outctx_base_t.setup_outctx (method) -ida_ua.outctx_base_t.stack_view (method) -ida_ua.outctx_base_t.term_outctx (method) -ida_ua.outctx_base_t__from_ptrval__ (function) -ida_ua.outctx_t (class) -ida_ua.outctx_t.__init__ (method) -ida_ua.outctx_t.gen_func_footer (method) -ida_ua.outctx_t.gen_func_header (method) -ida_ua.outctx_t.gen_header (method) -ida_ua.outctx_t.gen_header_extra (method) -ida_ua.outctx_t.gen_xref_lines (method) -ida_ua.outctx_t.out_btoa (method) -ida_ua.outctx_t.out_custom_mnem (method) -ida_ua.outctx_t.out_data (method) -ida_ua.outctx_t.out_fcref_names (method) -ida_ua.outctx_t.out_immchar_cmts (method) -ida_ua.outctx_t.out_mnem (method) -ida_ua.outctx_t.out_mnemonic (method) -ida_ua.outctx_t.out_one_operand (method) -ida_ua.outctx_t.out_specea (method) -ida_ua.outctx_t.retrieve_cmt (method) -ida_ua.outctx_t.retrieve_name (method) -ida_ua.outctx_t.set_bin_state (method) -ida_ua.outctx_t.setup_outctx (method) -ida_ua.outctx_t.term_outctx (method) -ida_ua.outctx_t__from_ptrval__ (function) -ida_ua.print_insn_mnem (function) -ida_ua.print_operand (function) -ida_xref (module) -ida_xref.XREF_ALL (variable) -ida_xref.XREF_BASE (variable) -ida_xref.XREF_DATA (variable) -ida_xref.XREF_FAR (variable) -ida_xref.XREF_MASK (variable) -ida_xref.XREF_PASTEND (variable) -ida_xref.XREF_TAIL (variable) -ida_xref.XREF_USER (variable) -ida_xref.add_cref (function) -ida_xref.add_dref (function) -ida_xref.calc_switch_cases (function) -ida_xref.cases_and_targets_t (class) -ida_xref.cases_and_targets_t.__init__ (method) -ida_xref.casevec_t (class) -ida_xref.casevec_t.__eq__ (method) -ida_xref.casevec_t.__getitem__ (method) -ida_xref.casevec_t.__init__ (method) -ida_xref.casevec_t.__len__ (method) -ida_xref.casevec_t.__ne__ (method) -ida_xref.casevec_t.__setitem__ (method) -ida_xref.casevec_t._del (method) -ida_xref.casevec_t.add_unique (method) -ida_xref.casevec_t.at (method) -ida_xref.casevec_t.begin (method) -ida_xref.casevec_t.capacity (method) -ida_xref.casevec_t.clear (method) -ida_xref.casevec_t.empty (method) -ida_xref.casevec_t.end (method) -ida_xref.casevec_t.erase (method) -ida_xref.casevec_t.extract (method) -ida_xref.casevec_t.find (method) -ida_xref.casevec_t.grow (method) -ida_xref.casevec_t.has (method) -ida_xref.casevec_t.inject (method) -ida_xref.casevec_t.insert (method) -ida_xref.casevec_t.pop_back (method) -ida_xref.casevec_t.push_back (method) -ida_xref.casevec_t.qclear (method) -ida_xref.casevec_t.reserve (method) -ida_xref.casevec_t.resize (method) -ida_xref.casevec_t.size (method) -ida_xref.casevec_t.swap (method) -ida_xref.casevec_t.truncate (method) -ida_xref.create_switch_table (function) -ida_xref.create_switch_xrefs (function) -ida_xref.del_cref (function) -ida_xref.del_dref (function) -ida_xref.delete_switch_table (function) -ida_xref.dr_I (variable) -ida_xref.dr_O (variable) -ida_xref.dr_R (variable) -ida_xref.dr_S (variable) -ida_xref.dr_T (variable) -ida_xref.dr_U (variable) -ida_xref.dr_W (variable) -ida_xref.fl_CF (variable) -ida_xref.fl_CN (variable) -ida_xref.fl_F (variable) -ida_xref.fl_JF (variable) -ida_xref.fl_JN (variable) -ida_xref.fl_U (variable) -ida_xref.fl_USobsolete (variable) -ida_xref.get_first_cref_from (function) -ida_xref.get_first_cref_to (function) -ida_xref.get_first_dref_from (function) -ida_xref.get_first_dref_to (function) -ida_xref.get_first_fcref_from (function) -ida_xref.get_first_fcref_to (function) -ida_xref.get_next_cref_from (function) -ida_xref.get_next_cref_to (function) -ida_xref.get_next_dref_from (function) -ida_xref.get_next_dref_to (function) -ida_xref.get_next_fcref_from (function) -ida_xref.get_next_fcref_to (function) -ida_xref.has_external_refs (function) -ida_xref.xrefblk_t (class) -ida_xref.xrefblk_t.__init__ (method) -ida_xref.xrefblk_t.crefs_from (method) -ida_xref.xrefblk_t.crefs_to (method) -ida_xref.xrefblk_t.drefs_from (method) -ida_xref.xrefblk_t.drefs_to (method) -ida_xref.xrefblk_t.fcrefs_from (method) -ida_xref.xrefblk_t.fcrefs_to (method) -ida_xref.xrefblk_t.first_from (method) -ida_xref.xrefblk_t.first_to (method) -ida_xref.xrefblk_t.iscode (variable) -ida_xref.xrefblk_t.next_from (method) -ida_xref.xrefblk_t.next_to (method) -ida_xref.xrefblk_t.refs_from (method) -ida_xref.xrefblk_t.refs_from._copy_xref (function) -ida_xref.xrefblk_t.refs_to (method) -ida_xref.xrefblk_t.refs_to._copy_xref (function) -ida_xref.xrefblk_t.to (variable) -ida_xref.xrefblk_t.type (variable) -ida_xref.xrefblk_t.user (variable) -ida_xref.xrefchar (function) diff --git a/api_contents_pro.full b/api_contents_pro.full deleted file mode 100644 index 00e5545..0000000 --- a/api_contents_pro.full +++ /dev/null @@ -1,67968 +0,0 @@ -ida_hexrays (module) - array used for translating cexpr_t->op type to their names. - -ida_hexrays.ACFL_BLKOPT (variable) - perform interblock transformations - -ida_hexrays.ACFL_GLBDEL (variable) - perform dead code eliminition - -ida_hexrays.ACFL_GLBPROP (variable) - perform global propagation - -ida_hexrays.ACFL_GUESS (variable) - may guess calling conventions - -ida_hexrays.ACFL_LOCOPT (variable) - perform local propagation (requires ACFL_BLKOPT) - -ida_hexrays.ALLOW_UNUSED_LABELS (variable) - Unused labels are permitted. - -ida_hexrays.ANCHOR_BLKCMT (variable) - block comment (for ctree items) - -ida_hexrays.ANCHOR_CITEM (variable) - c-tree item - -ida_hexrays.ANCHOR_ITP (variable) - item type preciser - -ida_hexrays.ANCHOR_LVAR (variable) - declaration of local variable - -ida_hexrays.ANY_FPSIZE (variable) - any size of floating operand is permitted - -ida_hexrays.ANY_REGSIZE (variable) - any register size is permitted - -ida_hexrays.BLT_0WAY (variable) - does not have successors (tail is a noret function) - -ida_hexrays.BLT_1WAY (variable) - passes execution to one block (regular or goto block) - -ida_hexrays.BLT_2WAY (variable) - passes execution to two blocks (conditional jump) - -ida_hexrays.BLT_NONE (variable) - unknown block type - -ida_hexrays.BLT_NWAY (variable) - passes execution to many blocks (switch idiom) - -ida_hexrays.BLT_STOP (variable) - stops execution regularly (must be the last block) - -ida_hexrays.BLT_XTRN (variable) - external block (out of function address) - -ida_hexrays.CALC_CURLY_BRACES (variable) - print curly braces if necessary - -ida_hexrays.CFL_FINAL (variable) - call type is final, should not be changed - -ida_hexrays.CFL_HELPER (variable) - created from a decompiler helper function - -ida_hexrays.CFL_NORET (variable) - call does not return - -ida_hexrays.CFS_BOUNDS (variable) - 'eamap' and 'boundaries' are ready - -ida_hexrays.CFS_LOCKED (variable) - cfunc is temporarily locked - -ida_hexrays.CFS_LVARS_HIDDEN (variable) - local variable definitions are collapsed - -ida_hexrays.CFS_TEXT (variable) - 'sv' is ready (and hdrlines) - -ida_hexrays.CHF_FAKE (variable) - fake chain created by widen_chains() - -ida_hexrays.CHF_INITED (variable) - is chain initialized? (valid only after lvar allocation) - -ida_hexrays.CHF_OVER (variable) - overlapped chain - -ida_hexrays.CHF_PASSTHRU (variable) - pass-thru chain, must use the input variable to the block - -ida_hexrays.CHF_REPLACED (variable) - chain operands have been replaced? - -ida_hexrays.CHF_TERM (variable) - terminating chain; the variable does not survive across the block - -ida_hexrays.CIT_COLLAPSED (variable) - display ctree item in collapsed form - -ida_hexrays.CMAT_BUILT (variable) - just generated - -ida_hexrays.CMAT_CASTED (variable) - added necessary casts - -ida_hexrays.CMAT_CPA (variable) - corrected pointer arithmetic - -ida_hexrays.CMAT_FINAL (variable) - ready-to-use - -ida_hexrays.CMAT_NICE (variable) - nicefied expressions - -ida_hexrays.CMAT_TRANS1 (variable) - applied first wave of transformations - -ida_hexrays.CMAT_TRANS2 (variable) - applied second wave of transformations - -ida_hexrays.CMAT_TRANS3 (variable) - applied third wave of transformations - -ida_hexrays.CMAT_ZERO (variable) - does not exist - -ida_hexrays.CMT_ALL (variable) - All comments. - -ida_hexrays.CMT_BLOCK1 (variable) - Anterioir block comment. - -ida_hexrays.CMT_BLOCK2 (variable) - Posterior block comment. - -ida_hexrays.CMT_FUNC (variable) - Function comment. - -ida_hexrays.CMT_LVAR (variable) - Local variable comment. - -ida_hexrays.CMT_NONE (variable) - No comment is possible. - -ida_hexrays.CMT_TAIL (variable) - Indented comment. - -ida_hexrays.CPBLK_FAST (variable) - do not update minbstkref and minbargref - -ida_hexrays.CPBLK_MINREF (variable) - update minbstkref and minbargref - -ida_hexrays.CPBLK_OPTJMP (variable) - del the jump insn at the end of the block if it becomes useless - -ida_hexrays.CV_FAST (variable) - do not maintain parent information - -ida_hexrays.CV_INSNS (variable) - 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 (variable) - maintain parent information - -ida_hexrays.CV_POST (variable) - call the leave...() functions - -ida_hexrays.CV_PRUNE (variable) - this bit is set by visit...() to prune the walk - -ida_hexrays.CV_RESTART (variable) - restart enumeration at the top expr (apply_to_exprs) - -ida_hexrays.DECOMP_ALL_BLKS (variable) - generate microcode for unreachable blocks - -ida_hexrays.DECOMP_GXREFS_DEFLT (variable) - the default behavior: do not update the global xrefs cache upon decompile() - call, but when the pseudocode text is generated (e.g., through - cfunc_t.get_pseudocode()) - -ida_hexrays.DECOMP_GXREFS_FORCE (variable) - update the global xrefs cache immediately - -ida_hexrays.DECOMP_GXREFS_NOUPD (variable) - do not update the global xrefs cache - -ida_hexrays.DECOMP_NO_CACHE (variable) - do not use decompilation cache (snippets are never cached) - -ida_hexrays.DECOMP_NO_FRAME (variable) - do not use function frame info (only snippet mode) - -ida_hexrays.DECOMP_NO_HIDE (variable) - do not close display waitbox. see close_hexrays_waitboxes() - -ida_hexrays.DECOMP_NO_WAIT (variable) - do not display waitbox - -ida_hexrays.DECOMP_NO_XREFS (variable) - Obsolete. Use DECOMP_GXREFS_NOUPD. - -ida_hexrays.DECOMP_VOID_MBA (variable) - return empty mba object (to be used with gen_microcode) - -ida_hexrays.DECOMP_WARNINGS (variable) - display warnings in the output window - -ida_hexrays.DecompilationFailure (class) - -ida_hexrays.EQ_CMPDEST (variable) - compare instruction destinations - -ida_hexrays.EQ_IGNCODE (variable) - ignore instruction opcodes - -ida_hexrays.EQ_IGNSIZE (variable) - ignore source operand sizes - -ida_hexrays.EQ_OPTINSN (variable) - optimize mop_d operands - -ida_hexrays.EXFL_ALL (variable) - all currently defined bits - -ida_hexrays.EXFL_ALONE (variable) - standalone helper - -ida_hexrays.EXFL_CPADONE (variable) - pointer arithmetic correction done - -ida_hexrays.EXFL_CSTR (variable) - string literal - -ida_hexrays.EXFL_FPOP (variable) - floating point operation - -ida_hexrays.EXFL_JUMPOUT (variable) - jump out-of-function - -ida_hexrays.EXFL_LVALUE (variable) - expression is lvalue even if it doesn't look like it - -ida_hexrays.EXFL_PARTIAL (variable) - type of the expression is considered partial - -ida_hexrays.EXFL_UNDEF (variable) - expression uses undefined value - -ida_hexrays.EXFL_VFTABLE (variable) - is ptr to vftable (used for cot_memptr, cot_memref) - -ida_hexrays.FCI_DEAD (variable) - some return registers were determined dead - -ida_hexrays.FCI_EXPLOCS (variable) - all arglocs are specified explicitly - -ida_hexrays.FCI_FINAL (variable) - call type is final, should not be changed - -ida_hexrays.FCI_HASCALL (variable) - 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 (variable) - A variadic function with recognized printf- or scanf-style format string - -ida_hexrays.FCI_NORET (variable) - call does not return - -ida_hexrays.FCI_NOSIDE (variable) - call does not have side effects - -ida_hexrays.FCI_PROP (variable) - call has been propagated - -ida_hexrays.FCI_PURE (variable) - pure function - -ida_hexrays.FCI_SPLOK (variable) - 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 (variable) - search direction - -ida_hexrays.FD_DEF (variable) - look for definition - -ida_hexrays.FD_DIRTY (variable) - ignore possible implicit definitions by function calls and indirect memory - access - -ida_hexrays.FD_FORWARD (variable) - search direction - -ida_hexrays.FD_USE (variable) - look for use - -ida_hexrays.FORBID_UNUSED_LABELS (variable) - Unused labels cause interr. - -ida_hexrays.GCA_ALLOC (variable) - enumerate only allocated chains - -ida_hexrays.GCA_EMPTY (variable) - include empty chains - -ida_hexrays.GCA_NALLOC (variable) - enumerate only non-allocated chains - -ida_hexrays.GCA_OFIRST (variable) - consider only chains of the first block - -ida_hexrays.GCA_OLAST (variable) - consider only chains of the last block - -ida_hexrays.GCA_SPEC (variable) - include chains for special registers - -ida_hexrays.GCO_DEF (variable) - is destination operand? - -ida_hexrays.GCO_REG (variable) - is register? otherwise a stack variable - -ida_hexrays.GCO_STK (variable) - a stack variable - -ida_hexrays.GCO_USE (variable) - is source operand? - -ida_hexrays.GC_ASR (variable) - all the above and assertions - -ida_hexrays.GC_DIRTY_ALL (variable) - bitmask to represent all chains - -ida_hexrays.GC_END (variable) - number of chain types - -ida_hexrays.GC_REGS_AND_STKVARS (variable) - registers and stkvars (restricted memory only) - -ida_hexrays.GC_XDSU (variable) - only registers calculated with FULL_XDSU - -ida_hexrays.GLN_ALL (variable) - get both - -ida_hexrays.GLN_CURRENT (variable) - get label of the current item - -ida_hexrays.GLN_GOTO_TARGET (variable) - get goto target - -ida_hexrays.Hexrays_Hooks (class) - Proxy of C++ Hexrays_Hooks class. - -ida_hexrays.Hexrays_Hooks.__disown__ (method) - -ida_hexrays.Hexrays_Hooks.__init__ (method) - __init__(self, _flags=0, _hkcb_flags=0x0001) -> Hexrays_Hooks - - @param _flags: uint32 - @param _hkcb_flags: uint32 - -ida_hexrays.Hexrays_Hooks.build_callinfo (method) - build_callinfo(self, blk, type) -> PyObject * - Analyzing a call instruction. - - @param blk: (mblock_t *) blk->tail is the call. - @param type: (tinfo_t *) buffer for the output type. - -ida_hexrays.Hexrays_Hooks.callinfo_built (method) - callinfo_built(self, blk) -> int - A call instruction has been anallyzed. - - @param blk: (mblock_t *) blk->tail is the call. - -ida_hexrays.Hexrays_Hooks.calls_done (method) - calls_done(self, mba) -> int - All calls have been analyzed. - - @param mba: (mba_t *) This event is generated immediately after analyzing all - calls, before any optimizitions, call unmerging and block merging. - -ida_hexrays.Hexrays_Hooks.close_pseudocode (method) - close_pseudocode(self, vu) -> int - Pseudocode view is being closed. - - @param vu: (vdui_t *) - -ida_hexrays.Hexrays_Hooks.cmt_changed (method) - cmt_changed(self, cfunc, loc, cmt) -> int - Comment got changed. - - @param cfunc: (cfunc_t *) - @param loc: (const treeloc_t *) - @param cmt: (const char *) - -ida_hexrays.Hexrays_Hooks.combine (method) - combine(self, blk, insn) -> int - Trying to combine instructions of basic block. - - @param blk: (mblock_t *) - @param insn: (minsn_t *) Should return: 1 if combined the current instruction - with a preceding one -1 if the instruction should not be combined 0 - else - -ida_hexrays.Hexrays_Hooks.create_hint (method) - create_hint(self, vu) -> PyObject * - Create a hint for the current item. - @see: ui_get_custom_viewer_hint - - @param vu: (vdui_t *) - @retval 0: continue collecting hints with other subscribers - @retval 1: stop collecting hints - -ida_hexrays.Hexrays_Hooks.curpos (method) - curpos(self, vu) -> int - Current cursor position has been changed. (for example, by left-clicking or - using keyboard) - - @param vu: (vdui_t *) - -ida_hexrays.Hexrays_Hooks.double_click (method) - double_click(self, vu, shift_state) -> int - Mouse double click. - - @param vu: (vdui_t *) - @param shift_state: (int) Should return: 1 if the event has been handled - -ida_hexrays.Hexrays_Hooks.flowchart (method) - flowchart(self, fc) -> int - Flowchart has been generated. - - @param fc: (qflow_chart_t *) - -ida_hexrays.Hexrays_Hooks.func_printed (method) - func_printed(self, cfunc) -> int - Function text has been generated. Plugins may modify the text in cfunc_t::sv. - The text uses regular color codes (see lines.hpp) COLOR_ADDR is used to store - pointers to ctree items. - - @param cfunc: (cfunc_t *) - -ida_hexrays.Hexrays_Hooks.glbopt (method) - glbopt(self, mba) -> int - Global optimization has been finished. If microcode is modified, MERR_LOOP must - be returned. It will cause a complete restart of the optimization. - - @param mba: (mba_t *) return Microcode error codes code - -ida_hexrays.Hexrays_Hooks.hook (method) - hook(self) -> bool - -ida_hexrays.Hexrays_Hooks.interr (method) - interr(self, errcode) -> int - Internal error has occurred. - - @param errcode: (int ) - -ida_hexrays.Hexrays_Hooks.keyboard (method) - keyboard(self, vu, key_code, shift_state) -> int - Keyboard has been hit. - - @param vu: (vdui_t *) - @param key_code: (int) VK_... - @param shift_state: (int) Should return: 1 if the event has been handled - -ida_hexrays.Hexrays_Hooks.locopt (method) - locopt(self, mba) -> int - Basic block level optimization has been finished. - - @param mba: (mba_t *) return Microcode error codes code - -ida_hexrays.Hexrays_Hooks.lvar_cmt_changed (method) - lvar_cmt_changed(self, vu, v, cmt) -> int - Local variable comment got changed. - - @param vu: (vdui_t *) - @param v: (lvar_t *) - @param cmt: (const char *) Please note that it is possible to read/write user - settings for lvars directly from the idb. - -ida_hexrays.Hexrays_Hooks.lvar_mapping_changed (method) - lvar_mapping_changed(self, vu, frm, to) -> int - Local variable mapping got changed. - - @param vu: (vdui_t *) - @param from: lvar_t * - @param to: (lvar_t *) Please note that it is possible to read/write user - settings for lvars directly from the idb. - -ida_hexrays.Hexrays_Hooks.lvar_name_changed (method) - lvar_name_changed(self, vu, v, name, is_user_name) -> int - Local variable got renamed. - - @param vu: (vdui_t *) - @param v: (lvar_t *) - @param name: (const char *) - @param is_user_name: (bool) Please note that it is possible to read/write user - settings for lvars directly from the idb. - -ida_hexrays.Hexrays_Hooks.lvar_type_changed (method) - lvar_type_changed(self, vu, v, tinfo) -> int - Local variable type got changed. - - @param vu: (vdui_t *) - @param v: (lvar_t *) - @param tinfo: (const tinfo_t *) Please note that it is possible to read/write - user settings for lvars directly from the idb. - -ida_hexrays.Hexrays_Hooks.maturity (method) - maturity(self, cfunc, new_maturity) -> int - Ctree maturity level is being changed. - - @param cfunc: (cfunc_t *) - @param new_maturity: (ctree_maturity_t) - -ida_hexrays.Hexrays_Hooks.microcode (method) - microcode(self, mba) -> int - Microcode has been generated. - - @param mba: (mba_t *) return Microcode error codes code - -ida_hexrays.Hexrays_Hooks.open_pseudocode (method) - open_pseudocode(self, vu) -> int - New pseudocode view has been opened. - - @param vu: (vdui_t *) - -ida_hexrays.Hexrays_Hooks.populating_popup (method) - populating_popup(self, widget, popup_handle, vu) -> int - Populating popup menu. We can add menu items now. - - @param widget: (TWidget *) - @param popup_handle: (TPopupMenu *) - @param vu: (vdui_t *) - -ida_hexrays.Hexrays_Hooks.prealloc (method) - prealloc(self, mba) -> int - Local variables: preallocation step begins. - - @param mba: (mba_t *) This event may occur several times. Should return: 1 if - modified microcode Negative values are Microcode error codes error - codes - -ida_hexrays.Hexrays_Hooks.preoptimized (method) - preoptimized(self, mba) -> int - Microcode has been preoptimized. - - @param mba: (mba_t *) return Microcode error codes code - -ida_hexrays.Hexrays_Hooks.print_func (method) - print_func(self, cfunc, vp) -> int - Printing ctree and generating text. - - @param cfunc: (cfunc_t *) - @param vp: (vc_printer_t *) Returns: 1 if text has been generated by the plugin - It is forbidden to modify ctree at this event. - -ida_hexrays.Hexrays_Hooks.prolog (method) - prolog(self, mba, fc, reachable_blocks, decomp_flags) -> int - Prolog analysis has been finished. - - @param mba: (mba_t *) - @param fc: (qflow_chart_t *) - @param reachable_blocks: (bitset_t *) - @param decomp_flags: (int) return Microcode error codes code - -ida_hexrays.Hexrays_Hooks.refresh_pseudocode (method) - refresh_pseudocode(self, vu) -> int - Existing pseudocode text has been refreshed. Adding/removing pseudocode lines is - forbidden in this event. - - @param vu: (vdui_t *) See also hxe_text_ready, which happens earlier - -ida_hexrays.Hexrays_Hooks.resolve_stkaddrs (method) - resolve_stkaddrs(self, mba) -> int - The optimizer is about to resolve stack addresses. - - @param mba: (mba_t *) - -ida_hexrays.Hexrays_Hooks.right_click (method) - right_click(self, vu) -> int - Mouse right click. Use hxe_populating_popup instead, in case you want to add - items in the popup menu. - - @param vu: (vdui_t *) - -ida_hexrays.Hexrays_Hooks.stkpnts (method) - stkpnts(self, mba, _sps) -> int - SP change points have been calculated. - - @param mba: (mba_t *) - @param stkpnts: (stkpnts_t *) return Microcode error codes code - -ida_hexrays.Hexrays_Hooks.structural (method) - structural(self, ct) -> int - Structural analysis has been finished. - - @param ct: (control_graph_t *) - -ida_hexrays.Hexrays_Hooks.switch_pseudocode (method) - switch_pseudocode(self, vu) -> int - Existing pseudocode view has been reloaded with a new function. Its text has not - been refreshed yet, only cfunc and mba pointers are ready. - - @param vu: (vdui_t *) - -ida_hexrays.Hexrays_Hooks.text_ready (method) - text_ready(self, vu) -> int - Decompiled text is ready. - - @param vu: (vdui_t *) This event can be used to modify the output text (sv). - Obsolete. Please use hxe_func_printed instead. - -ida_hexrays.Hexrays_Hooks.unhook (method) - unhook(self) -> bool - -ida_hexrays.IPROP_CLNPOP (variable) - the purpose of the instruction is to clean stack (e.g. "pop ecx" is often used - for that) - -ida_hexrays.IPROP_COMBINED (variable) - insn has been modified because of a partial reference - -ida_hexrays.IPROP_DONT_COMB (variable) - may not combine this instruction with others - -ida_hexrays.IPROP_DONT_PROP (variable) - may not propagate - -ida_hexrays.IPROP_EXTSTX (variable) - this is m_ext propagated into m_stx - -ida_hexrays.IPROP_FARCALL (variable) - call of a far function using push cs/call sequence - -ida_hexrays.IPROP_FPINSN (variable) - floating point insn - -ida_hexrays.IPROP_IGNLOWSRC (variable) - 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 (variable) - inverted conditional jump - -ida_hexrays.IPROP_MBARRIER (variable) - this instruction acts as a memory barrier (instructions accessing memory may not - be reordered past it) - -ida_hexrays.IPROP_MULTI_MOV (variable) - bits that can be set by plugins: - - the minsn was generated as part of insn that moves multiple registers (example: - STM on ARM may transfer multiple registers) - -ida_hexrays.IPROP_OPTIONAL (variable) - optional instruction - -ida_hexrays.IPROP_PERSIST (variable) - persistent insn; they are not destroyed - -ida_hexrays.IPROP_SPLIT (variable) - the instruction has been split: - -ida_hexrays.IPROP_SPLIT1 (variable) - into 1 byte - -ida_hexrays.IPROP_SPLIT2 (variable) - into 2 bytes - -ida_hexrays.IPROP_SPLIT4 (variable) - into 4 bytes - -ida_hexrays.IPROP_SPLIT8 (variable) - into 8 bytes - -ida_hexrays.IPROP_TAILCALL (variable) - tail call - -ida_hexrays.IPROP_UNMERGED (variable) - 'goto' instruction was transformed info 'call' - -ida_hexrays.IPROP_WAS_NORET (variable) - was noret icall - -ida_hexrays.IPROP_WILDMATCH (variable) - match multiple insns - -ida_hexrays.ITP_ARG1 (variable) - , (64 entries are reserved for 64 call arguments) - -ida_hexrays.ITP_ASM (variable) - __asm-line - -ida_hexrays.ITP_BLOCK1 (variable) - opening block comment. this comment is printed before the item (other comments - are indented and printed after the item) - -ida_hexrays.ITP_BLOCK2 (variable) - closing block comment. - -ida_hexrays.ITP_BRACE2 (variable) - ) - -ida_hexrays.ITP_CASE (variable) - bit for switch cases - -ida_hexrays.ITP_COLON (variable) - : (label) - -ida_hexrays.ITP_CURLY1 (variable) - { - -ida_hexrays.ITP_CURLY2 (variable) - } - -ida_hexrays.ITP_DO (variable) - do-line - -ida_hexrays.ITP_ELSE (variable) - else-line - -ida_hexrays.ITP_EMPTY (variable) - nothing - -ida_hexrays.ITP_SEMI (variable) - semicolon - -ida_hexrays.ITP_SIGN (variable) - if this bit is set too, then we have a negative case value - -ida_hexrays.LOCOPT_ALL (variable) - redo optimization for all blocks. if this bit is not set, only dirty blocks will - be optimized - -ida_hexrays.LOCOPT_REFINE (variable) - refine return type, ok to fail - -ida_hexrays.LOCOPT_REFINE2 (variable) - refine return type, try harder - -ida_hexrays.LVINF_KEEP (variable) - 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 (variable) - forbid automatic mapping of the variable - -ida_hexrays.LVINF_NOPTR (variable) - variable type should not be a pointer - -ida_hexrays.LVINF_SPLIT (variable) - split allocation of a new variable. forces the decompiler to create a new - variable at ll.defea - -ida_hexrays.LVINF_UNUSED (variable) - unused argument, corresponds to CVAR_UNUSED - -ida_hexrays.MBA2_ARGIDX_OK (variable) - may verify input argument list? - -ida_hexrays.MBA2_ARGIDX_SORTED (variable) - args finally sorted according to ABI (e.g. reverse stkarg order in Borland) - -ida_hexrays.MBA2_CODE16_BIT (variable) - the code16 bit removed - -ida_hexrays.MBA2_DONT_VERIFY (variable) - Do not verify microcode. This flag is recomended to be set only when debugging - decompiler plugins - -ida_hexrays.MBA2_HAS_OUTLINES (variable) - calls to outlined code have been inlined - -ida_hexrays.MBA2_IS_CTR (variable) - is constructor? - -ida_hexrays.MBA2_IS_DTR (variable) - is destructor? - -ida_hexrays.MBA2_LVARNAMES_OK (variable) - may verify lvar_names? - -ida_hexrays.MBA2_LVARS_RENAMED (variable) - accept empty names now? - -ida_hexrays.MBA2_NO_DUP_CALLS (variable) - forbid multiple calls with the same ea - -ida_hexrays.MBA2_NO_DUP_LVARS (variable) - forbid multiple lvars with the same ea - -ida_hexrays.MBA2_NO_FRAME (variable) - do not use function frame info (only snippet mode) - -ida_hexrays.MBA2_OVER_CHAINS (variable) - has overlapped chains? - -ida_hexrays.MBA2_PROP_COMPLEX (variable) - allow propagation of more complex variable definitions - -ida_hexrays.MBA2_STACK_RETVAL (variable) - the return value is on the stack - -ida_hexrays.MBA2_UNDEF_RETVAR (variable) - return value is undefined - -ida_hexrays.MBA2_VALRNG_DONE (variable) - calculated valranges? - -ida_hexrays.MBA_ASRPROP (variable) - assertion have been propagated - -ida_hexrays.MBA_ASRTOK (variable) - assertions have been generated - -ida_hexrays.MBA_CALLS (variable) - callinfo has been built - -ida_hexrays.MBA_CHVARS (variable) - can verify chain varnums - -ida_hexrays.MBA_CMBBLK (variable) - request to combine blocks - -ida_hexrays.MBA_CMNSTK (variable) - stkvars+stkargs should be considered as one area - -ida_hexrays.MBA_COLGDL (variable) - display graph after each reduction - -ida_hexrays.MBA_DELPAIRS (variable) - pairs have been deleted once - -ida_hexrays.MBA_GLBOPT (variable) - microcode has been optimized globally - -ida_hexrays.MBA_INSGDL (variable) - display instruction in graphs - -ida_hexrays.MBA_LOADED (variable) - loaded gdl, no instructions (debugging) - -ida_hexrays.MBA_LVARS0 (variable) - lvar pre-allocation has been performed - -ida_hexrays.MBA_LVARS1 (variable) - lvar real allocation has been performed - -ida_hexrays.MBA_NICE (variable) - apply transformations to c code - -ida_hexrays.MBA_NOFUNC (variable) - function is not present, addresses might be wrong - -ida_hexrays.MBA_NUMADDR (variable) - display definition addresses for numbers - -ida_hexrays.MBA_PASSREGS (variable) - has mcallinfo_t::pass_regs - -ida_hexrays.MBA_PATTERN (variable) - microcode pattern, callinfo is present - -ida_hexrays.MBA_PRCDEFS (variable) - use precise defeas for chain-allocated lvars - -ida_hexrays.MBA_PREOPT (variable) - preoptimization stage complete - -ida_hexrays.MBA_REFINE (variable) - may refine return value size - -ida_hexrays.MBA_RETFP (variable) - function returns floating point value - -ida_hexrays.MBA_RETREF (variable) - return type has been refined - -ida_hexrays.MBA_SAVRST (variable) - save-restore analysis has been performed - -ida_hexrays.MBA_SHORT (variable) - use short display - -ida_hexrays.MBA_SPLINFO (variable) - (final_type ? idb_spoiled : spoiled_regs) is valid - -ida_hexrays.MBA_THUNK (variable) - thunk function - -ida_hexrays.MBA_VALNUM (variable) - display value numbers - -ida_hexrays.MBA_WINGR32 (variable) - use wingraph32 - -ida_hexrays.MBL_BACKPROP (variable) - performed backprop_cc - -ida_hexrays.MBL_CALL (variable) - call information has been built - -ida_hexrays.MBL_COMB (variable) - needs "combine" pass - -ida_hexrays.MBL_DEAD (variable) - needs "eliminate deads" pass - -ida_hexrays.MBL_DMT64 (variable) - needs "demote 64bits" - -ida_hexrays.MBL_DSLOT (variable) - block for delay slot - -ida_hexrays.MBL_FAKE (variable) - fake block - -ida_hexrays.MBL_GOTO (variable) - this block is a goto target - -ida_hexrays.MBL_INCONST (variable) - inconsistent lists: we are building them - -ida_hexrays.MBL_KEEP (variable) - do not remove even if unreachable - -ida_hexrays.MBL_LIST (variable) - use/def lists are ready (not dirty) - -ida_hexrays.MBL_NONFAKE (variable) - regular block - -ida_hexrays.MBL_NORET (variable) - dead end block: doesn't return execution control - -ida_hexrays.MBL_PRIV (variable) - private block - no instructions except the specified are accepted (used in - patterns) - -ida_hexrays.MBL_PROP (variable) - needs 'propagation' pass - -ida_hexrays.MBL_PUSH (variable) - needs "convert push/pop instructions" - -ida_hexrays.MBL_TCAL (variable) - aritifical call block for tail calls - -ida_hexrays.MBL_VALRANGES (variable) - should optimize using value ranges - -ida_hexrays.MERR_BADARCH (variable) - current architecture is not supported - -ida_hexrays.MERR_BADBLK (variable) - bad block found - -ida_hexrays.MERR_BADCALL (variable) - could not determine call arguments - -ida_hexrays.MERR_BADFRAME (variable) - function frame is wrong - -ida_hexrays.MERR_BADIDB (variable) - inconsistent database information - -ida_hexrays.MERR_BADRANGES (variable) - bad input ranges - -ida_hexrays.MERR_BADSP (variable) - positive sp value has been found - -ida_hexrays.MERR_BITNESS (variable) - 16-bit functions cannot be decompiled - -ida_hexrays.MERR_BLOCK (variable) - no error, switch to new block - -ida_hexrays.MERR_BUSY (variable) - already decompiling a function - -ida_hexrays.MERR_CANCELED (variable) - decompilation has been cancelled - -ida_hexrays.MERR_COMPLEX (variable) - too complex function - -ida_hexrays.MERR_DSLOT (variable) - bad instruction in the delay slot - -ida_hexrays.MERR_EXCEPTION (variable) - exception analysis failed - -ida_hexrays.MERR_EXTERN (variable) - special segments cannot be decompiled - -ida_hexrays.MERR_FARPTR (variable) - far memory model is supported only for pc - -ida_hexrays.MERR_FUNCSIZE (variable) - too big function - -ida_hexrays.MERR_HUGESTACK (variable) - stack frame is too big - -ida_hexrays.MERR_INSN (variable) - cannot convert to microcode - -ida_hexrays.MERR_INTERR (variable) - internal error - -ida_hexrays.MERR_LICENSE (variable) - no license available - -ida_hexrays.MERR_LOOP (variable) - internal code: redo last loop (never reported) - -ida_hexrays.MERR_LVARS (variable) - local variable allocation failed - -ida_hexrays.MERR_MEM (variable) - not enough memory - -ida_hexrays.MERR_OK (variable) - ok - -ida_hexrays.MERR_ONLY32 (variable) - only 32-bit functions can be decompiled for the current database - -ida_hexrays.MERR_ONLY64 (variable) - only 64-bit functions can be decompiled for the current database - -ida_hexrays.MERR_OVERLAP (variable) - variables would overlap: s - -ida_hexrays.MERR_PARTINIT (variable) - partially initialized variable s - -ida_hexrays.MERR_PROLOG (variable) - prolog analysis failed - -ida_hexrays.MERR_RECDEPTH (variable) - max recursion depth reached during lvar allocation - -ida_hexrays.MERR_REDO (variable) - redecompilation has been requested - -ida_hexrays.MERR_SIZEOF (variable) - wrong basic type sizes in compiler settings - -ida_hexrays.MERR_STOP (variable) - no error, stop the analysis - -ida_hexrays.MERR_SWITCH (variable) - wrong switch idiom - -ida_hexrays.MERR_UNKTYPE (variable) - undefined type s (currently unused error code) - -ida_hexrays.MLI_CLR_FLAGS (variable) - clear LVINF_... bits - -ida_hexrays.MLI_CMT (variable) - apply lvar comment - -ida_hexrays.MLI_NAME (variable) - apply lvar name - -ida_hexrays.MLI_SET_FLAGS (variable) - set LVINF_... bits - -ida_hexrays.MLI_TYPE (variable) - apply lvar type - -ida_hexrays.MMAT_CALLS (variable) - detected call arguments. see also hxe_calls_done - -ida_hexrays.MMAT_GENERATED (variable) - generated microcode - -ida_hexrays.MMAT_GLBOPT1 (variable) - performed the first pass of global optimization - -ida_hexrays.MMAT_GLBOPT2 (variable) - most global optimization passes are done - -ida_hexrays.MMAT_GLBOPT3 (variable) - completed all global optimization. microcode is fixed now. - -ida_hexrays.MMAT_LOCOPT (variable) - local optimization of each basic block is complete. control flow graph is ready - too. - -ida_hexrays.MMAT_LVARS (variable) - allocated local variables - -ida_hexrays.MMAT_PREOPTIMIZED (variable) - preoptimized pass is complete - -ida_hexrays.MMAT_ZERO (variable) - microcode does not exist - -ida_hexrays.MMIDX_GLBHIGH (variable) - global memory: high part - -ida_hexrays.MMIDX_GLBLOW (variable) - global memory: low part - -ida_hexrays.NALT_VD (variable) - this index is not used by ida - -ida_hexrays.NF_BINVDONE (variable) - temporary internal bit: inverting bits is done - -ida_hexrays.NF_BITNOT (variable) - The user asked to invert bits of the constant. - -ida_hexrays.NF_FIXED (variable) - number format has been defined by the user - -ida_hexrays.NF_NEGATE (variable) - The user asked to negate the constant. - -ida_hexrays.NF_NEGDONE (variable) - temporary internal bit: negation has been performed - -ida_hexrays.NF_VALID (variable) - internal bit: stroff or enum is valid for enums: this bit is set immediately for - stroffs: this bit is set at the end of decompilation - -ida_hexrays.NOSIZE (variable) - wrong or unexisting operand size - -ida_hexrays.NO_CURLY_BRACES (variable) - don't print curly braces - -ida_hexrays.NO_SIDEFF (variable) - change operand size but ignore side effects if you decide to keep the changed - operand, handle_new_size() must be called - -ida_hexrays.ONLY_SIDEFF (variable) - only handle side effects - -ida_hexrays.OPF_NEW_WINDOW (variable) - open new window - -ida_hexrays.OPF_NO_WAIT (variable) - do not display waitbox if decompilation happens - -ida_hexrays.OPF_REUSE (variable) - reuse existing window - -ida_hexrays.OPF_REUSE_ACTIVE (variable) - reuse existing window, only if the currently active widget is a pseudocode view - -ida_hexrays.OPROP_FLOAT (variable) - possibly floating value - -ida_hexrays.OPROP_IMPDONE (variable) - imported operand (a pointer) has been dereferenced - -ida_hexrays.OPROP_LOWADDR (variable) - a low address offset - -ida_hexrays.OPROP_UDEFVAL (variable) - uses undefined value - -ida_hexrays.OPROP_UDT (variable) - a struct or union - -ida_hexrays.OPTI_ADDREXPRS (variable) - optimize all address expressions (&x+N; &x-&y) - -ida_hexrays.OPTI_COMBINSNS (variable) - may combine insns (only for optimize_insn) - -ida_hexrays.OPTI_MINSTKREF (variable) - may update minstkref - -ida_hexrays.OPTI_NO_LDXOPT (variable) - the function is called after the propagation attempt, we do not optimize - low/high(ldx) in this case - -ida_hexrays.RETRIEVE_ALWAYS (variable) - Retrieve comment even if it has been used. - -ida_hexrays.RETRIEVE_ONCE (variable) - Retrieve comment if it has not been used yet. - -ida_hexrays.ROLE_3WAYCMP0 (variable) - 3-way compare helper, returns -1/0/1 - -ida_hexrays.ROLE_3WAYCMP1 (variable) - 3-way compare helper, returns 0/1/2 - -ida_hexrays.ROLE_ABS (variable) - integer absolute value - -ida_hexrays.ROLE_ALLOCA (variable) - alloca() function - -ida_hexrays.ROLE_BITTEST (variable) - [lock] bt - -ida_hexrays.ROLE_BITTESTANDCOMPLEMENT (variable) - [lock] btc - -ida_hexrays.ROLE_BITTESTANDRESET (variable) - [lock] btr - -ida_hexrays.ROLE_BITTESTANDSET (variable) - [lock] bts - -ida_hexrays.ROLE_BSWAP (variable) - bswap() function (any size) - -ida_hexrays.ROLE_BUG (variable) - BUG() helper macro: never returns, causes exception. - -ida_hexrays.ROLE_CFSUB3 (variable) - carry flag after subtract with carry - -ida_hexrays.ROLE_CONTAINING_RECORD (variable) - CONTAINING_RECORD() macro. - -ida_hexrays.ROLE_EMPTY (variable) - empty, does not do anything (maybe spoils regs) - -ida_hexrays.ROLE_FASTFAIL (variable) - __fastfail() - -ida_hexrays.ROLE_IS_MUL_OK (variable) - is_mul_ok - -ida_hexrays.ROLE_MEMCPY (variable) - memcpy(void *dst, const void *src, size_t count); - -ida_hexrays.ROLE_MEMSET (variable) - memset(void *dst, uchar value, size_t count); - -ida_hexrays.ROLE_MEMSET32 (variable) - memset32(void *dst, uint32 value, size_t count); - -ida_hexrays.ROLE_MEMSET64 (variable) - memset64(void *dst, uint64 value, size_t count); - -ida_hexrays.ROLE_OFSUB3 (variable) - overflow flag after subtract with carry - -ida_hexrays.ROLE_PRESENT (variable) - present() function (used in patterns) - -ida_hexrays.ROLE_READFLAGS (variable) - __readeflags, __readcallersflags - -ida_hexrays.ROLE_ROL (variable) - rotate left - -ida_hexrays.ROLE_ROR (variable) - rotate right - -ida_hexrays.ROLE_SATURATED_MUL (variable) - saturated_mul - -ida_hexrays.ROLE_SSE_CMP4 (variable) - e.g. _mm_cmpgt_ss - -ida_hexrays.ROLE_SSE_CMP8 (variable) - e.g. _mm_cmpgt_sd - -ida_hexrays.ROLE_STRCAT (variable) - strcat(char *dst, const char *src); - -ida_hexrays.ROLE_STRCPY (variable) - strcpy(char *dst, const char *src); - -ida_hexrays.ROLE_STRLEN (variable) - strlen(const char *src); - -ida_hexrays.ROLE_TAIL (variable) - char *tail(const char *str); - -ida_hexrays.ROLE_UNK (variable) - unknown function role - -ida_hexrays.ROLE_VA_ARG (variable) - va_arg() macro - -ida_hexrays.ROLE_VA_COPY (variable) - va_copy() function - -ida_hexrays.ROLE_VA_END (variable) - va_end() function - -ida_hexrays.ROLE_VA_START (variable) - va_start() function - -ida_hexrays.ROLE_WCSCAT (variable) - wchar_t *wcscat(wchar_t *dst, const wchar_t *src) - -ida_hexrays.ROLE_WCSCPY (variable) - wchar_t *wcscpy(wchar_t *dst, const wchar_t *src); - -ida_hexrays.ROLE_WCSLEN (variable) - size_t wcslen(const wchar_t *s) - -ida_hexrays.ROLE_WMEMCPY (variable) - wchar_t *wmemcpy(wchar_t *dst, const wchar_t *src, size_t n) - -ida_hexrays.ROLE_WMEMSET (variable) - wchar_t *wmemset(wchar_t *dst, wchar_t wc, size_t n) - -ida_hexrays.SHINS_LDXEA (variable) - display address of ldx expressions (not used) - -ida_hexrays.SHINS_NUMADDR (variable) - display definition addresses for numbers - -ida_hexrays.SHINS_SHORT (variable) - do not display use-def chains and other attrs - -ida_hexrays.SHINS_VALNUM (variable) - display value numbers - -ida_hexrays.ULV_PRECISE_DEFEA (variable) - Use precise defea's for lvar locations. - -ida_hexrays.USE_CURLY_BRACES (variable) - print curly braces without any checks - -ida_hexrays.USE_KEYBOARD (variable) - Keyboard. - -ida_hexrays.USE_MOUSE (variable) - Mouse. - -ida_hexrays.VDI_EXPR (variable) - c-tree item - -ida_hexrays.VDI_FUNC (variable) - the function itself (the very first line with the function prototype) - -ida_hexrays.VDI_LVAR (variable) - declaration of local variable - -ida_hexrays.VDI_NONE (variable) - undefined - -ida_hexrays.VDI_TAIL (variable) - cursor is at (beyond) the line end (commentable line) - -ida_hexrays.VDRUN_APPEND (variable) - Create a new file or append to existing file. - -ida_hexrays.VDRUN_CMDLINE (variable) - Called from ida's command line. - -ida_hexrays.VDRUN_LUMINA (variable) - Use lumina server. - -ida_hexrays.VDRUN_MAYSTOP (variable) - The user can cancel decompilation. - -ida_hexrays.VDRUN_NEWFILE (variable) - Create a new file or overwrite existing file. - -ida_hexrays.VDRUN_ONLYNEW (variable) - Fail if output file already exists. - -ida_hexrays.VDRUN_SENDIDB (variable) - Send problematic databases to hex-rays.com. - -ida_hexrays.VDRUN_SILENT (variable) - Silent decompilation. - -ida_hexrays.VDRUN_STATS (variable) - Print statistics into vd_stats.txt. - -ida_hexrays.VDUI_VALID (variable) - is valid? - -ida_hexrays.VDUI_VISIBLE (variable) - is visible? - -ida_hexrays.VR_AT_END (variable) - get value ranges after the instruction or at the block end, just after the last - instruction (if M is nullptr) - -ida_hexrays.VR_AT_START (variable) - get value ranges before the instruction or at the block start (if M is nullptr) - -ida_hexrays.VR_EXACT (variable) - find exact match. if not set, the returned valrng size will be >= vivl.size - -ida_hexrays.WARN_ADDR_OUTARGS (variable) - 6 cannot handle address arithmetics in outgoing argument area of stack frame - - unused - -ida_hexrays.WARN_ARRAY_INARG (variable) - 21 array has been used for an input argument - -ida_hexrays.WARN_BAD_CALL_SP (variable) - 38 bad sp value at call - -ida_hexrays.WARN_BAD_FIELD_TYPE (variable) - 23 incorrect structure member type for s::s, ignored - -ida_hexrays.WARN_BAD_INSN (variable) - 49 bad instruction - -ida_hexrays.WARN_BAD_MAPDST (variable) - 48 too short map destination 's' for variable 's' - -ida_hexrays.WARN_BAD_PURGED (variable) - 12 inconsistent function type and number of purged bytes - -ida_hexrays.WARN_BAD_RETVAR (variable) - 25 wrong return variable - -ida_hexrays.WARN_BAD_SHADOW (variable) - 45 ignored the value written to the shadow area of the succeeding call - -ida_hexrays.WARN_BAD_SP (variable) - 40 positive sp value a has been found - -ida_hexrays.WARN_BAD_STD_TYPE (variable) - 37 corrupted or unexisting local type 's' - -ida_hexrays.WARN_BAD_STKPNT (variable) - 41 wrong sp change point - -ida_hexrays.WARN_BAD_STROFF (variable) - 33 user specified stroff has not been processed: s - -ida_hexrays.WARN_BAD_VALRNG (variable) - 44 values range analysis failed - -ida_hexrays.WARN_BAD_VARSIZE (variable) - 34 inconsistent variable size for 's' - -ida_hexrays.WARN_CBUILD_LOOPS (variable) - 13 too many cbuild loops - -ida_hexrays.WARN_CR_BADOFF (variable) - 32 CONTAINING_RECORD: too small offset d for struct 's' - -ida_hexrays.WARN_CR_NOFIELD (variable) - 31 CONTAINING_RECORD: no field 's' in struct 's' at d - -ida_hexrays.WARN_DEP_UNK_CALLS (variable) - 7 found interdependent unknown calls - -ida_hexrays.WARN_EXP_LINVAR (variable) - 10 failed to expand a linear variable - -ida_hexrays.WARN_FIXED_MACRO (variable) - 29 fixed broken macro-insn - -ida_hexrays.WARN_FRAG_LVAR (variable) - 26 fragmented variable at s may be wrong - -ida_hexrays.WARN_GUESSED_TYPE (variable) - 9 using guessed type s; - -ida_hexrays.WARN_HUGE_STKOFF (variable) - 27 exceedingly huge offset into the stack frame - -ida_hexrays.WARN_ILL_ELLIPSIS (variable) - 8 erroneously detected ellipsis type has been ignored - -ida_hexrays.WARN_ILL_FPU_STACK (variable) - 18 inconsistent fpu stack - -ida_hexrays.WARN_ILL_FUNCTYPE (variable) - 2 invalid function type 's' has been ignored - -ida_hexrays.WARN_ILL_PURGED (variable) - 1 odd caller purged bytes d, correcting - -ida_hexrays.WARN_JUMPOUT (variable) - 43 control flows out of bounds - -ida_hexrays.WARN_MAX (variable) - may be used in notes as a placeholder when the warning id is not available - -ida_hexrays.WARN_MAX_ARGS (variable) - 22 too many input arguments, some ignored - -ida_hexrays.WARN_MISSED_SWITCH (variable) - 39 wrong markup of switch jump, skipped it - -ida_hexrays.WARN_MUST_RET_FP (variable) - 17 function return type is incorrect (must be floating point) - -ida_hexrays.WARN_NO_SAVE_REST (variable) - 14 could not find valid save-restore pair for s - -ida_hexrays.WARN_ODD_ABI (variable) - 50 encountered odd instruction for the current ABI - -ida_hexrays.WARN_ODD_ADDR_USE (variable) - 16 odd use of a variable address - -ida_hexrays.WARN_ODD_INPUT_REG (variable) - 15 odd input register s - -ida_hexrays.WARN_OPT_USELESS_JCND (variable) - 54 simplified comparisons for 's': s became s - -ida_hexrays.WARN_OPT_VALRNG (variable) - 46 conditional instruction was optimized away because s - -ida_hexrays.WARN_OPT_VALRNG2 (variable) - 52 mask 0xX is shortened because s <= 0xX" - -ida_hexrays.WARN_OPT_VALRNG3 (variable) - 53 masking with 0XX was optimized away because s <= 0xX - -ida_hexrays.WARN_RET_LOCREF (variable) - 47 returning address of temporary local variable 's' - -ida_hexrays.WARN_SELFREF_PROP (variable) - 19 self-referencing variable has been detected - -ida_hexrays.WARN_UNALIGNED_ARG (variable) - 36 unaligned function argument 's' - -ida_hexrays.WARN_UNBALANCED_STACK (variable) - 51 unbalanced stack, ignored a potential tail call - -ida_hexrays.WARN_UNDEF_LVAR (variable) - 42 variable 's' is possibly undefined - -ida_hexrays.WARN_UNINITED_REG (variable) - 28 reference to an uninitialized register has been removed: s - -ida_hexrays.WARN_UNSUPP_REG (variable) - 35 unsupported processor register 's' - -ida_hexrays.WARN_VARARG_MANY (variable) - 5 too many varargs, some ignored - -ida_hexrays.WARN_VARARG_NOSTK (variable) - 4 call vararg without local stack - -ida_hexrays.WARN_VARARG_REGS (variable) - 0 cannot handle register arguments in vararg function, discarded them - -ida_hexrays.WARN_VARARG_TCAL (variable) - 3 cannot handle tail call to vararg - -ida_hexrays.WARN_WIDEN_CHAINS (variable) - 11 failed to widen chains - -ida_hexrays.WARN_WOULD_OVERLAP (variable) - 20 variables would overlap: s - -ida_hexrays.WARN_WRITE_CONST (variable) - 24 write access to const memory at a has been detected - -ida_hexrays.WARN_WRONG_VA_OFF (variable) - 30 wrong offset of va_list variable - -ida_hexrays.WITH_SIDEFF (variable) - change operand size and handle side effects - -ida_hexrays.__cbhooks_t (class) - -ida_hexrays.__cbhooks_t.__init__ (method) - -ida_hexrays.__cbhooks_t.close_pseudocode (method) - -ida_hexrays.__cbhooks_t.create_hint (method) - -ida_hexrays.__cbhooks_t.curpos (method) - -ida_hexrays.__cbhooks_t.double_click (method) - -ida_hexrays.__cbhooks_t.func_printed (method) - -ida_hexrays.__cbhooks_t.interr (method) - -ida_hexrays.__cbhooks_t.keyboard (method) - -ida_hexrays.__cbhooks_t.maturity (method) - -ida_hexrays.__cbhooks_t.open_pseudocode (method) - -ida_hexrays.__cbhooks_t.populating_popup (method) - -ida_hexrays.__cbhooks_t.print_func (method) - -ida_hexrays.__cbhooks_t.refresh_pseudocode (method) - -ida_hexrays.__cbhooks_t.right_click (method) - -ida_hexrays.__cbhooks_t.switch_pseudocode (method) - -ida_hexrays.__cbhooks_t.text_ready (method) - -ida_hexrays._call_with_transferrable_ownership (function) - -ida_hexrays._kludge_force_declare_TPopupMenu (function) - _kludge_force_declare_TPopupMenu(arg1) - - Parameters - ---------- - arg1: TPopupMenu const * - -ida_hexrays._ll_call_helper (function) - _ll_call_helper(rettype, args, format) -> cexpr_t - - Parameters - ---------- - rettype: tinfo_t const & - args: carglist_t * - format: char const * - -ida_hexrays._ll_create_helper (function) - _ll_create_helper(standalone, type, format) -> cexpr_t - - Parameters - ---------- - standalone: bool - type: tinfo_t const & - format: char const * - -ida_hexrays._ll_dereference (function) - _ll_dereference(e, ptrsize, is_flt=False) -> cexpr_t - - Parameters - ---------- - e: cexpr_t * - ptrsize: int - is_flt: bool - -ida_hexrays._ll_lnot (function) - _ll_lnot(e) -> cexpr_t - - Parameters - ---------- - e: cexpr_t * - -ida_hexrays._ll_make_num (function) - _ll_make_num(n, func=None, ea=BADADDR, opnum=0, sign=no_sign, size=0) -> cexpr_t - - Parameters - ---------- - n: uint64 - func: cfunc_t * - ea: ea_t - opnum: int - sign: type_sign_t - size: int - -ida_hexrays._ll_make_ref (function) - _ll_make_ref(e) -> cexpr_t - - Parameters - ---------- - e: cexpr_t * - -ida_hexrays._ll_new_block (function) - _ll_new_block() -> cinsn_t - -ida_hexrays._map_as_dict (function) - -ida_hexrays._map_as_dict._map___contains__ (function) - Returns true if the specified key exists in the . - -ida_hexrays._map_as_dict._map___delitem__ (function) - Removes the value associated with the provided key. - -ida_hexrays._map_as_dict._map___getitem__ (function) - Returns the value associated with the provided key. - -ida_hexrays._map_as_dict._map___iter__ (function) - Iterate over dictionary keys. - -ida_hexrays._map_as_dict._map___setitem__ (function) - Returns the value associated with the provided key. - -ida_hexrays._map_as_dict._map_clear (function) - -ida_hexrays._map_as_dict._map_copy (function) - -ida_hexrays._map_as_dict._map_get (function) - -ida_hexrays._map_as_dict._map_has_key (function) - -ida_hexrays._map_as_dict._map_items (function) - -ida_hexrays._map_as_dict._map_iteritems (function) - -ida_hexrays._map_as_dict._map_iterkeys (function) - -ida_hexrays._map_as_dict._map_itervalues (function) - -ida_hexrays._map_as_dict._map_keys (function) - -ida_hexrays._map_as_dict._map_pop (function) - Sets the value associated with the provided key. - -ida_hexrays._map_as_dict._map_popitem (function) - Sets the value associated with the provided key. - -ida_hexrays._map_as_dict._map_setdefault (function) - Sets the value associated with the provided key. - -ida_hexrays._map_as_dict._map_values (function) - -ida_hexrays.accepts_small_udts (function) - accepts_small_udts(op) -> bool - Is the operator allowed on small structure or union? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.accepts_udts (function) - accepts_udts(op) -> bool - - @param op: enum ctype_t - -ida_hexrays.arglocs_overlap (function) - arglocs_overlap(loc1, w1, loc2, w2) -> bool - Do two arglocs overlap? - - @param loc1: (C++: const vdloc_t &) vdloc_t const & - @param w1: (C++: size_t) - @param loc2: (C++: const vdloc_t &) vdloc_t const & - @param w2: (C++: size_t) - -ida_hexrays.array_of_bitsets (class) - Proxy of C++ qvector< bitset_t > class. - -ida_hexrays.array_of_bitsets.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< bitset_t > const & - -ida_hexrays.array_of_bitsets.__getitem__ (method) - __getitem__(self, i) -> bitset_t - - @param i: size_t - -ida_hexrays.array_of_bitsets.__init__ (method) - __init__(self) -> array_of_bitsets - __init__(self, x) -> array_of_bitsets - - @param x: qvector< bitset_t > const & - -ida_hexrays.array_of_bitsets.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.array_of_bitsets.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< bitset_t > const & - -ida_hexrays.array_of_bitsets.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: bitset_t const & - -ida_hexrays.array_of_bitsets._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: bitset_t const & - -ida_hexrays.array_of_bitsets.add_unique (method) - add_unique(self, x) -> bool - - @param x: bitset_t const & - -ida_hexrays.array_of_bitsets.at (method) - at(self, _idx) -> bitset_t - - @param _idx: size_t - -ida_hexrays.array_of_bitsets.begin (method) - begin(self) -> bitset_t - -ida_hexrays.array_of_bitsets.capacity (method) - capacity(self) -> size_t - -ida_hexrays.array_of_bitsets.clear (method) - clear(self) - -ida_hexrays.array_of_bitsets.empty (method) - empty(self) -> bool - -ida_hexrays.array_of_bitsets.end (method) - end(self) -> bitset_t - -ida_hexrays.array_of_bitsets.erase (method) - erase(self, it) -> bitset_t - - @param it: qvector< bitset_t >::iterator - - erase(self, first, last) -> bitset_t - - @param first: qvector< bitset_t >::iterator - @param last: qvector< bitset_t >::iterator - -ida_hexrays.array_of_bitsets.extract (method) - extract(self) -> bitset_t - -ida_hexrays.array_of_bitsets.find (method) - find(self, x) -> bitset_t - - @param x: bitset_t const & - -ida_hexrays.array_of_bitsets.grow (method) - grow(self, x=bitset_t()) - - @param x: bitset_t const & - -ida_hexrays.array_of_bitsets.has (method) - has(self, x) -> bool - - @param x: bitset_t const & - -ida_hexrays.array_of_bitsets.inject (method) - inject(self, s, len) - - @param s: bitset_t * - @param len: size_t - -ida_hexrays.array_of_bitsets.insert (method) - insert(self, it, x) -> bitset_t - - @param it: qvector< bitset_t >::iterator - @param x: bitset_t const & - -ida_hexrays.array_of_bitsets.pop_back (method) - pop_back(self) - -ida_hexrays.array_of_bitsets.push_back (method) - push_back(self, x) - - @param x: bitset_t const & - - push_back(self) -> bitset_t - -ida_hexrays.array_of_bitsets.qclear (method) - qclear(self) - -ida_hexrays.array_of_bitsets.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.array_of_bitsets.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: bitset_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.array_of_bitsets.size (method) - size(self) -> size_t - -ida_hexrays.array_of_bitsets.swap (method) - swap(self, r) - - @param r: qvector< bitset_t > & - -ida_hexrays.array_of_bitsets.truncate (method) - truncate(self) - -ida_hexrays.array_of_ivlsets (class) - Proxy of C++ qvector< ivlset_t > class. - -ida_hexrays.array_of_ivlsets.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< ivlset_t > const & - -ida_hexrays.array_of_ivlsets.__getitem__ (method) - __getitem__(self, i) -> ivlset_t - - @param i: size_t - -ida_hexrays.array_of_ivlsets.__init__ (method) - __init__(self) -> array_of_ivlsets - __init__(self, x) -> array_of_ivlsets - - @param x: qvector< ivlset_t > const & - -ida_hexrays.array_of_ivlsets.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.array_of_ivlsets.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< ivlset_t > const & - -ida_hexrays.array_of_ivlsets.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: ivlset_t const & - -ida_hexrays.array_of_ivlsets._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: ivlset_t const & - -ida_hexrays.array_of_ivlsets.add_unique (method) - add_unique(self, x) -> bool - - @param x: ivlset_t const & - -ida_hexrays.array_of_ivlsets.at (method) - at(self, _idx) -> ivlset_t - - @param _idx: size_t - -ida_hexrays.array_of_ivlsets.begin (method) - begin(self) -> ivlset_t - -ida_hexrays.array_of_ivlsets.capacity (method) - capacity(self) -> size_t - -ida_hexrays.array_of_ivlsets.clear (method) - clear(self) - -ida_hexrays.array_of_ivlsets.empty (method) - empty(self) -> bool - -ida_hexrays.array_of_ivlsets.end (method) - end(self) -> ivlset_t - -ida_hexrays.array_of_ivlsets.erase (method) - erase(self, it) -> ivlset_t - - @param it: qvector< ivlset_t >::iterator - - erase(self, first, last) -> ivlset_t - - @param first: qvector< ivlset_t >::iterator - @param last: qvector< ivlset_t >::iterator - -ida_hexrays.array_of_ivlsets.extract (method) - extract(self) -> ivlset_t - -ida_hexrays.array_of_ivlsets.find (method) - find(self, x) -> ivlset_t - - @param x: ivlset_t const & - -ida_hexrays.array_of_ivlsets.grow (method) - grow(self, x=ivlset_t()) - - @param x: ivlset_t const & - -ida_hexrays.array_of_ivlsets.has (method) - has(self, x) -> bool - - @param x: ivlset_t const & - -ida_hexrays.array_of_ivlsets.inject (method) - inject(self, s, len) - - @param s: ivlset_t * - @param len: size_t - -ida_hexrays.array_of_ivlsets.insert (method) - insert(self, it, x) -> ivlset_t - - @param it: qvector< ivlset_t >::iterator - @param x: ivlset_t const & - -ida_hexrays.array_of_ivlsets.pop_back (method) - pop_back(self) - -ida_hexrays.array_of_ivlsets.push_back (method) - push_back(self, x) - - @param x: ivlset_t const & - - push_back(self) -> ivlset_t - -ida_hexrays.array_of_ivlsets.qclear (method) - qclear(self) - -ida_hexrays.array_of_ivlsets.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.array_of_ivlsets.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: ivlset_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.array_of_ivlsets.size (method) - size(self) -> size_t - -ida_hexrays.array_of_ivlsets.swap (method) - swap(self, r) - - @param r: qvector< ivlset_t > & - -ida_hexrays.array_of_ivlsets.truncate (method) - truncate(self) - -ida_hexrays.asgop (function) - asgop(cop) -> ctype_t - Convert plain operator into assignment operator. For example, cot_add returns - cot_asgadd. - - @param cop: (C++: ctype_t) enum ctype_t - -ida_hexrays.asgop_revert (function) - asgop_revert(cop) -> ctype_t - Convert assignment operator into plain operator. For example, cot_asgadd returns - cot_add - - @param cop: (C++: ctype_t) enum ctype_t - @return: cot_empty is the input operator is not an assignment operator. - -ida_hexrays.bit_bound_t (class) - Proxy of C++ bit_bound_t class. - -ida_hexrays.bit_bound_t.__init__ (method) - __init__(self, n=0, s=0) -> bit_bound_t - - @param n: int - @param s: int - -ida_hexrays.bitset_t (class) - Proxy of C++ bitset_t class. - -ida_hexrays.bitset_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: bitset_t const & - -ida_hexrays.bitset_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: bitset_t const & - -ida_hexrays.bitset_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: bitset_t const & - -ida_hexrays.bitset_t.__init__ (method) - __init__(self) -> bitset_t - __init__(self, m) -> bitset_t - - @param m: bitset_t const & - -ida_hexrays.bitset_t.__iter__ (method) - -ida_hexrays.bitset_t.__le__ (method) - __le__(self, r) -> bool - - @param r: bitset_t const & - -ida_hexrays.bitset_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: bitset_t const & - -ida_hexrays.bitset_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: bitset_t const & - -ida_hexrays.bitset_t.add (method) - add(self, bit) -> bool - - @param bit: int - - add(self, bit, width) -> bool - - @param bit: int - @param width: int - - add(self, ml) -> bool - - @param ml: bitset_t const & - -ida_hexrays.bitset_t.back (method) - back(self) -> int - -ida_hexrays.bitset_t.begin (method) - begin(self) -> iterator - -ida_hexrays.bitset_t.clear (method) - clear(self) - -ida_hexrays.bitset_t.compare (method) - compare(self, r) -> int - - @param r: bitset_t const & - -ida_hexrays.bitset_t.copy (method) - copy(self, m) -> bitset_t - - @param m: bitset_t const & - -ida_hexrays.bitset_t.count (method) - count(self) -> int - count(self, bit) -> int - - @param bit: int - -ida_hexrays.bitset_t.cut_at (method) - cut_at(self, maxbit) -> bool - - @param maxbit: int - -ida_hexrays.bitset_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.bitset_t.empty (method) - empty(self) -> bool - -ida_hexrays.bitset_t.end (method) - end(self) -> iterator - -ida_hexrays.bitset_t.fill_with_ones (method) - fill_with_ones(self, maxbit) - - @param maxbit: int - -ida_hexrays.bitset_t.front (method) - front(self) -> int - -ida_hexrays.bitset_t.has (method) - has(self, bit) -> bool - - @param bit: int - -ida_hexrays.bitset_t.has_all (method) - has_all(self, bit, width) -> bool - - @param bit: int - @param width: int - -ida_hexrays.bitset_t.has_any (method) - has_any(self, bit, width) -> bool - - @param bit: int - @param width: int - -ida_hexrays.bitset_t.has_common (method) - has_common(self, ml) -> bool - - @param ml: bitset_t const & - -ida_hexrays.bitset_t.inc (method) - inc(self, p, n=1) - - @param p: bitset_t::iterator & - @param n: int - -ida_hexrays.bitset_t.includes (method) - includes(self, ml) -> bool - - @param ml: bitset_t const & - -ida_hexrays.bitset_t.intersect (method) - intersect(self, ml) -> bool - - @param ml: bitset_t const & - -ida_hexrays.bitset_t.is_subset_of (method) - is_subset_of(self, ml) -> bool - - @param ml: bitset_t const & - -ida_hexrays.bitset_t.itat (method) - itat(self, n) -> iterator - - @param n: int - -ida_hexrays.bitset_t.itv (method) - itv(self, it) -> int - - @param it: bitset_t::const_iterator - -ida_hexrays.bitset_t.last (method) - last(self) -> int - -ida_hexrays.bitset_t.shift_down (method) - shift_down(self, shift) - - @param shift: int - -ida_hexrays.bitset_t.sub (method) - sub(self, bit) -> bool - - @param bit: int - - sub(self, bit, width) -> bool - - @param bit: int - @param width: int - - sub(self, ml) -> bool - - @param ml: bitset_t const & - -ida_hexrays.bitset_t.swap (method) - swap(self, r) - - @param r: bitset_t & - -ida_hexrays.block_chains_begin (function) - 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 *) block_chains_t const * - -ida_hexrays.block_chains_clear (function) - block_chains_clear(set) - Clear block_chains_t. - - @param set: (C++: block_chains_t *) - -ida_hexrays.block_chains_end (function) - 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 *) block_chains_t const * - -ida_hexrays.block_chains_erase (function) - 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 (function) - 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 *) block_chains_t const * - @param val: (C++: const chain_t &) chain_t const & - -ida_hexrays.block_chains_free (function) - block_chains_free(set) - Delete block_chains_t instance. - - @param set: (C++: block_chains_t *) - -ida_hexrays.block_chains_get (function) - 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 (function) - 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 &) chain_t const & - -ida_hexrays.block_chains_iterator_t (class) - Proxy of C++ block_chains_iterator_t class. - -ida_hexrays.block_chains_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: block_chains_iterator_t const & - -ida_hexrays.block_chains_iterator_t.__init__ (method) - __init__(self) -> block_chains_iterator_t - -ida_hexrays.block_chains_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: block_chains_iterator_t const & - -ida_hexrays.block_chains_new (function) - block_chains_new() -> block_chains_t - Create a new block_chains_t instance. - -ida_hexrays.block_chains_next (function) - 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 (function) - 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 (function) - block_chains_size(set) -> size_t - Get size of block_chains_t. - - @param set: (C++: block_chains_t *) - -ida_hexrays.block_chains_t (class) - Proxy of C++ block_chains_t class. - -ida_hexrays.block_chains_t.__init__ (method) - __init__(self) -> block_chains_t - -ida_hexrays.block_chains_t._print (method) - _print(self) - -ida_hexrays.block_chains_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.block_chains_t.get_chain (method) - get_chain(self, k, width=1) -> chain_t - - @param k: voff_t const & - @param width: int - - get_chain(self, ch) -> chain_t - - @param ch: chain_t const & - -ida_hexrays.block_chains_t.get_reg_chain (method) - get_reg_chain(self, reg, width=1) -> chain_t - - @param reg: mreg_t - @param width: int - -ida_hexrays.block_chains_t.get_stk_chain (method) - get_stk_chain(self, off, width=1) -> chain_t - - @param off: sval_t - @param width: int - -ida_hexrays.block_chains_vec_t (class) - Proxy of C++ qvector< block_chains_t > class. - -ida_hexrays.block_chains_vec_t.__getitem__ (method) - __getitem__(self, i) -> block_chains_t - - @param i: size_t - -ida_hexrays.block_chains_vec_t.__init__ (method) - __init__(self) -> block_chains_vec_t - __init__(self, x) -> block_chains_vec_t - - @param x: qvector< block_chains_t > const & - -ida_hexrays.block_chains_vec_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.block_chains_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: block_chains_t const & - -ida_hexrays.block_chains_vec_t.at (method) - at(self, _idx) -> block_chains_t - - @param _idx: size_t - -ida_hexrays.block_chains_vec_t.begin (method) - begin(self) -> block_chains_t - -ida_hexrays.block_chains_vec_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.block_chains_vec_t.clear (method) - clear(self) - -ida_hexrays.block_chains_vec_t.empty (method) - empty(self) -> bool - -ida_hexrays.block_chains_vec_t.end (method) - end(self) -> block_chains_t - -ida_hexrays.block_chains_vec_t.erase (method) - erase(self, it) -> block_chains_t - - @param it: qvector< block_chains_t >::iterator - - erase(self, first, last) -> block_chains_t - - @param first: qvector< block_chains_t >::iterator - @param last: qvector< block_chains_t >::iterator - -ida_hexrays.block_chains_vec_t.extract (method) - extract(self) -> block_chains_t - -ida_hexrays.block_chains_vec_t.grow (method) - grow(self, x=block_chains_t()) - - @param x: block_chains_t const & - -ida_hexrays.block_chains_vec_t.inject (method) - inject(self, s, len) - - @param s: block_chains_t * - @param len: size_t - -ida_hexrays.block_chains_vec_t.insert (method) - insert(self, it, x) -> block_chains_t - - @param it: qvector< block_chains_t >::iterator - @param x: block_chains_t const & - -ida_hexrays.block_chains_vec_t.pop_back (method) - pop_back(self) - -ida_hexrays.block_chains_vec_t.push_back (method) - push_back(self, x) - - @param x: block_chains_t const & - - push_back(self) -> block_chains_t - -ida_hexrays.block_chains_vec_t.qclear (method) - qclear(self) - -ida_hexrays.block_chains_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.block_chains_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: block_chains_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.block_chains_vec_t.size (method) - size(self) -> size_t - -ida_hexrays.block_chains_vec_t.swap (method) - swap(self, r) - - @param r: qvector< block_chains_t > & - -ida_hexrays.block_chains_vec_t.truncate (method) - truncate(self) - -ida_hexrays.boundaries_begin (function) - boundaries_begin(map) -> boundaries_iterator_t - Get iterator pointing to the beginning of boundaries_t. - - @param map: (C++: const boundaries_t *) boundaries_t const * - -ida_hexrays.boundaries_clear (function) - boundaries_clear(map) - Clear boundaries_t. - - @param map: (C++: boundaries_t *) - -ida_hexrays.boundaries_end (function) - boundaries_end(map) -> boundaries_iterator_t - Get iterator pointing to the end of boundaries_t. - - @param map: (C++: const boundaries_t *) boundaries_t const * - -ida_hexrays.boundaries_erase (function) - 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 (function) - boundaries_find(map, key) -> boundaries_iterator_t - Find the specified key in boundaries_t. - - @param map: (C++: const boundaries_t *) boundaries_t const * - @param key: (C++: const cinsn_t *&) cinsn_t const * - -ida_hexrays.boundaries_first (function) - boundaries_first(p) -> cinsn_t - Get reference to the current map key. - - @param p: (C++: boundaries_iterator_t) - -ida_hexrays.boundaries_free (function) - boundaries_free(map) - Delete boundaries_t instance. - - @param map: (C++: boundaries_t *) - -ida_hexrays.boundaries_insert (function) - 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 *&) cinsn_t const * - @param val: (C++: const rangeset_t &) rangeset_t const & - -ida_hexrays.boundaries_iterator_t (class) - Proxy of C++ boundaries_iterator_t class. - -ida_hexrays.boundaries_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: boundaries_iterator_t const & - -ida_hexrays.boundaries_iterator_t.__init__ (method) - __init__(self) -> boundaries_iterator_t - -ida_hexrays.boundaries_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: boundaries_iterator_t const & - -ida_hexrays.boundaries_new (function) - boundaries_new() -> boundaries_t - Create a new boundaries_t instance. - -ida_hexrays.boundaries_next (function) - boundaries_next(p) -> boundaries_iterator_t - Move to the next element. - - @param p: (C++: boundaries_iterator_t) - -ida_hexrays.boundaries_prev (function) - boundaries_prev(p) -> boundaries_iterator_t - Move to the previous element. - - @param p: (C++: boundaries_iterator_t) - -ida_hexrays.boundaries_second (function) - boundaries_second(p) -> rangeset_t - Get reference to the current map value. - - @param p: (C++: boundaries_iterator_t) - -ida_hexrays.boundaries_size (function) - boundaries_size(map) -> size_t - Get size of boundaries_t. - - @param map: (C++: boundaries_t *) - -ida_hexrays.boundaries_t (class) - Proxy of C++ std::map< cinsn_t *,rangeset_t > class. - -ida_hexrays.boundaries_t.__init__ (method) - __init__(self) -> boundaries_t - -ida_hexrays.boundaries_t.at (method) - at(self, _Keyval) -> rangeset_t - - @param _Keyval: cinsn_t *const & - -ida_hexrays.boundaries_t.size (method) - size(self) -> size_t - -ida_hexrays.call_helper (function) - Create a helper call. - -ida_hexrays.carg_t (class) - Proxy of C++ carg_t class. - -ida_hexrays.carg_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: carg_t const & - -ida_hexrays.carg_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: carg_t const & - -ida_hexrays.carg_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: carg_t const & - -ida_hexrays.carg_t.__init__ (method) - __init__(self) -> carg_t - -ida_hexrays.carg_t.__le__ (method) - __le__(self, r) -> bool - - @param r: carg_t const & - -ida_hexrays.carg_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: carg_t const & - -ida_hexrays.carg_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: carg_t const & - -ida_hexrays.carg_t.compare (method) - compare(self, r) -> int - - @param r: carg_t const & - -ida_hexrays.carg_t.consume_cexpr (method) - consume_cexpr(self, e) - - @param e: cexpr_t * - -ida_hexrays.carg_t.formal_type (variable) - formal parameter type (if known) - -ida_hexrays.carg_t.is_vararg (variable) - is a vararg (matches ...) - -ida_hexrays.carglist_t (class) - Proxy of C++ carglist_t class. - -ida_hexrays.carglist_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: carglist_t const & - -ida_hexrays.carglist_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: carglist_t const & - -ida_hexrays.carglist_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: carglist_t const & - -ida_hexrays.carglist_t.__init__ (method) - __init__(self) -> carglist_t - __init__(self, ftype, fl=0) -> carglist_t - - @param ftype: tinfo_t const & - @param fl: int - -ida_hexrays.carglist_t.__le__ (method) - __le__(self, r) -> bool - - @param r: carglist_t const & - -ida_hexrays.carglist_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: carglist_t const & - -ida_hexrays.carglist_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: carglist_t const & - -ida_hexrays.carglist_t.compare (method) - compare(self, r) -> int - - @param r: carglist_t const & - -ida_hexrays.carglist_t.flags (variable) - call flags - -ida_hexrays.carglist_t.functype (variable) - function object type - -ida_hexrays.casm_t (class) - Proxy of C++ casm_t class. - -ida_hexrays.casm_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: casm_t const & - -ida_hexrays.casm_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: casm_t const & - -ida_hexrays.casm_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: casm_t const & - -ida_hexrays.casm_t.__init__ (method) - __init__(self, ea) -> casm_t - - @param ea: ea_t - - __init__(self, r) -> casm_t - - @param r: casm_t const & - -ida_hexrays.casm_t.__le__ (method) - __le__(self, r) -> bool - - @param r: casm_t const & - -ida_hexrays.casm_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: casm_t const & - -ida_hexrays.casm_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: casm_t const & - -ida_hexrays.casm_t.compare (method) - compare(self, r) -> int - - @param r: casm_t const & - -ida_hexrays.casm_t.one_insn (method) - one_insn(self) -> bool - -ida_hexrays.cblock_t (class) - Proxy of C++ cblock_t class. - -ida_hexrays.cblock_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cblock_t const & - -ida_hexrays.cblock_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cblock_t const & - -ida_hexrays.cblock_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cblock_t const & - -ida_hexrays.cblock_t.__init__ (method) - __init__(self) -> cblock_t - -ida_hexrays.cblock_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cblock_t const & - -ida_hexrays.cblock_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cblock_t const & - -ida_hexrays.cblock_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cblock_t const & - -ida_hexrays.cblock_t._deregister (method) - _deregister(self) - -ida_hexrays.cblock_t.compare (method) - compare(self, r) -> int - - @param r: cblock_t const & - -ida_hexrays.ccase_t (class) - Proxy of C++ ccase_t class. - -ida_hexrays.ccase_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: ccase_t const & - -ida_hexrays.ccase_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: ccase_t const & - -ida_hexrays.ccase_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: ccase_t const & - -ida_hexrays.ccase_t.__init__ (method) - __init__(self) -> ccase_t - -ida_hexrays.ccase_t.__le__ (method) - __le__(self, r) -> bool - - @param r: ccase_t const & - -ida_hexrays.ccase_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: ccase_t const & - -ida_hexrays.ccase_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: ccase_t const & - -ida_hexrays.ccase_t.compare (method) - compare(self, r) -> int - - @param r: ccase_t const & - -ida_hexrays.ccase_t.size (method) - size(self) -> size_t - -ida_hexrays.ccase_t.value (method) - value(self, i) -> uint64 const & - - @param i: int - -ida_hexrays.ccase_t.values (variable) - List of case values. if empty, then 'default' case - -ida_hexrays.ccases_t (class) - Proxy of C++ ccases_t class. - -ida_hexrays.ccases_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: ccases_t const & - -ida_hexrays.ccases_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: ccases_t const & - -ida_hexrays.ccases_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: ccases_t const & - -ida_hexrays.ccases_t.__init__ (method) - __init__(self) -> ccases_t - -ida_hexrays.ccases_t.__le__ (method) - __le__(self, r) -> bool - - @param r: ccases_t const & - -ida_hexrays.ccases_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: ccases_t const & - -ida_hexrays.ccases_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: ccases_t const & - -ida_hexrays.ccases_t.compare (method) - compare(self, r) -> int - - @param r: ccases_t const & - -ida_hexrays.cdg_insn_iterator_t (class) - Proxy of C++ cdg_insn_iterator_t class. - -ida_hexrays.cdg_insn_iterator_t.__init__ (method) - __init__(self, mba_) -> cdg_insn_iterator_t - - @param mba_: mba_t const * - - __init__(self, r) -> cdg_insn_iterator_t - - @param r: cdg_insn_iterator_t const & - -ida_hexrays.cdg_insn_iterator_t.dslot_with_xrefs (method) - dslot_with_xrefs(self) -> bool - -ida_hexrays.cdg_insn_iterator_t.has_dslot (method) - has_dslot(self) -> bool - -ida_hexrays.cdg_insn_iterator_t.is_severed_dslot (method) - is_severed_dslot(self) -> bool - -ida_hexrays.cdg_insn_iterator_t.next (method) - next(self, ins) -> merror_t - - @param ins: insn_t * - -ida_hexrays.cdg_insn_iterator_t.ok (method) - ok(self) -> bool - -ida_hexrays.cdg_insn_iterator_t.start (method) - start(self, rng) - - @param rng: range_t const & - -ida_hexrays.cdo_t (class) - Proxy of C++ cdo_t class. - -ida_hexrays.cdo_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cdo_t const & - -ida_hexrays.cdo_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cdo_t const & - -ida_hexrays.cdo_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cdo_t const & - -ida_hexrays.cdo_t.__init__ (method) - __init__(self) -> cdo_t - -ida_hexrays.cdo_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cdo_t const & - -ida_hexrays.cdo_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cdo_t const & - -ida_hexrays.cdo_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cdo_t const & - -ida_hexrays.cdo_t.compare (method) - compare(self, r) -> int - - @param r: cdo_t const & - -ida_hexrays.ceinsn_t (class) - Proxy of C++ ceinsn_t class. - -ida_hexrays.ceinsn_t.__init__ (method) - __init__(self) -> ceinsn_t - -ida_hexrays.ceinsn_t.expr (variable) - Expression of the statement. - -ida_hexrays.cexpr_operands (function) - return a dictionary with the operands of a cexpr_t. - -ida_hexrays.cexpr_t (class) - Proxy of C++ cexpr_t class. - -ida_hexrays.cexpr_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cexpr_t const & - -ida_hexrays.cexpr_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cexpr_t const & - -ida_hexrays.cexpr_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cexpr_t const & - -ida_hexrays.cexpr_t.__init__ (method) - __init__(self) -> cexpr_t - __init__(self, cexpr_op, _x, _y=None, _z=None) -> cexpr_t - - @param cexpr_op: enum ctype_t - @param _x: cexpr_t * - @param _y: cexpr_t * - @param _z: cexpr_t * - - __init__(self, r) -> cexpr_t - - @param r: cexpr_t const & - -ida_hexrays.cexpr_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cexpr_t const & - -ida_hexrays.cexpr_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cexpr_t const & - -ida_hexrays.cexpr_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cexpr_t const & - -ida_hexrays.cexpr_t._deregister (method) - _deregister(self) - -ida_hexrays.cexpr_t._get_a (method) - _get_a(self) -> carglist_t - -ida_hexrays.cexpr_t._get_fpc (method) - _get_fpc(self) -> fnumber_t - -ida_hexrays.cexpr_t._get_helper (method) - _get_helper(self) -> char const * - -ida_hexrays.cexpr_t._get_insn (method) - _get_insn(self) -> cinsn_t - -ida_hexrays.cexpr_t._get_m (method) - _get_m(self) -> int - -ida_hexrays.cexpr_t._get_n (method) - _get_n(self) -> cnumber_t - -ida_hexrays.cexpr_t._get_obj_ea (method) - _get_obj_ea(self) -> ea_t - -ida_hexrays.cexpr_t._get_ptrsize (method) - _get_ptrsize(self) -> int - -ida_hexrays.cexpr_t._get_refwidth (method) - _get_refwidth(self) -> int - -ida_hexrays.cexpr_t._get_string (method) - _get_string(self) -> char const * - -ida_hexrays.cexpr_t._get_x (method) - _get_x(self) -> cexpr_t - -ida_hexrays.cexpr_t._get_y (method) - _get_y(self) -> cexpr_t - -ida_hexrays.cexpr_t._get_z (method) - _get_z(self) -> cexpr_t - -ida_hexrays.cexpr_t._register (method) - _register(self) - -ida_hexrays.cexpr_t._replace_by (method) - _replace_by(self, r) - - Parameters - ---------- - r: cexpr_t * - -ida_hexrays.cexpr_t._set_a (method) - _set_a(self, _v) - - Parameters - ---------- - _v: carglist_t * - -ida_hexrays.cexpr_t._set_fpc (method) - _set_fpc(self, _v) - - Parameters - ---------- - _v: fnumber_t * - -ida_hexrays.cexpr_t._set_helper (method) - _set_helper(self, _v) - - Parameters - ---------- - _v: char const * - -ida_hexrays.cexpr_t._set_insn (method) - _set_insn(self, _v) - - Parameters - ---------- - _v: cinsn_t * - -ida_hexrays.cexpr_t._set_m (method) - _set_m(self, _v) - - Parameters - ---------- - _v: int - -ida_hexrays.cexpr_t._set_n (method) - _set_n(self, _v) - - Parameters - ---------- - _v: cnumber_t * - -ida_hexrays.cexpr_t._set_obj_ea (method) - _set_obj_ea(self, _v) - - Parameters - ---------- - _v: ea_t - -ida_hexrays.cexpr_t._set_ptrsize (method) - _set_ptrsize(self, _v) - - Parameters - ---------- - _v: int - -ida_hexrays.cexpr_t._set_refwidth (method) - _set_refwidth(self, _v) - - Parameters - ---------- - _v: int - -ida_hexrays.cexpr_t._set_string (method) - _set_string(self, _v) - - Parameters - ---------- - _v: char const * - -ida_hexrays.cexpr_t._set_x (method) - _set_x(self, _v) - - Parameters - ---------- - _v: cexpr_t * - -ida_hexrays.cexpr_t._set_y (method) - _set_y(self, _v) - - Parameters - ---------- - _v: cexpr_t * - -ida_hexrays.cexpr_t._set_z (method) - _set_z(self, _v) - - Parameters - ---------- - _v: cexpr_t * - -ida_hexrays.cexpr_t.a (variable) - argument list (used for cot_call) - -ida_hexrays.cexpr_t.assign (method) - assign(self, r) -> cexpr_t - - @param r: cexpr_t const & - -ida_hexrays.cexpr_t.calc_type (method) - calc_type(self, recursive) - Calculate the type of the expression. Use this function to calculate the - expression type when a new expression is built - - @param recursive: (C++: bool) if true, types of all children expression will be calculated - before calculating our type - -ida_hexrays.cexpr_t.cleanup (method) - cleanup(self) - Cleanup the expression. This function properly deletes all children and sets the - item type to cot_empty. - -ida_hexrays.cexpr_t.compare (method) - compare(self, r) -> int - - @param r: cexpr_t const & - -ida_hexrays.cexpr_t.contains_comma (method) - contains_comma(self, times=1) -> bool - Does the expression contain a comma operator? - - @param times: (C++: int) - -ida_hexrays.cexpr_t.contains_comma_or_insn_or_label (method) - contains_comma_or_insn_or_label(self, maxcommas=1) -> bool - Does the expression contain a comma operator or an embedded statement operator - or a label? - - @param maxcommas: (C++: int) - -ida_hexrays.cexpr_t.contains_insn (method) - contains_insn(self, times=1) -> bool - Does the expression contain an embedded statement operator? - - @param times: (C++: int) - -ida_hexrays.cexpr_t.contains_insn_or_label (method) - contains_insn_or_label(self) -> bool - Does the expression contain an embedded statement operator or a label? - -ida_hexrays.cexpr_t.contains_operator (method) - contains_operator(self, needed_op, times=1) -> bool - Check if the expression contains the specified operator. - - @param needed_op: (C++: ctype_t) operator code to search for - @param times: (C++: int) how many times the operator code should be present - @return: true if the expression has at least TIMES children with NEEDED_OP - -ida_hexrays.cexpr_t.cpadone (method) - cpadone(self) -> bool - Pointer arithmetic correction done for this expression? - -ida_hexrays.cexpr_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.cexpr_t.equal_effect (method) - equal_effect(self, r) -> bool - Compare two expressions. This function tries to compare two expressions in an - 'intelligent' manner. For example, it knows about commutitive operators and can - ignore useless casts. - - @param r: (C++: const cexpr_t &) the expression to compare against the current expression - @return: true expressions can be considered equal - -ida_hexrays.cexpr_t.exflags (variable) - Expression attributes - -ida_hexrays.cexpr_t.find_num_op (method) - find_num_op(self) -> cexpr_t - -ida_hexrays.cexpr_t.find_op (method) - find_op(self, _op) -> cexpr_t - - @param _op: enum ctype_t - -ida_hexrays.cexpr_t.fpc (variable) - used for cot_fnum - -ida_hexrays.cexpr_t.get_1num_op (method) - get_1num_op(self, o1, o2) -> bool - - @param o1: cexpr_t ** - @param o2: cexpr_t ** - -ida_hexrays.cexpr_t.get_const_value (method) - get_const_value(self) -> bool - Get expression value. - - @return: true if the expression is a number. - -ida_hexrays.cexpr_t.get_high_nbit_bound (method) - get_high_nbit_bound(self) -> bit_bound_t - Get max number of bits that can really be used by the expression. For example, x - % 16 can yield only 4 non-zero bits, higher bits are zero - -ida_hexrays.cexpr_t.get_low_nbit_bound (method) - get_low_nbit_bound(self) -> int - Get min number of bits that are certainly required to represent the expression. - For example, constant 16 always uses 5 bits: 10000. - -ida_hexrays.cexpr_t.get_ptr_or_array (method) - get_ptr_or_array(self) -> cexpr_t - Find pointer or array child. - -ida_hexrays.cexpr_t.get_type_sign (method) - get_type_sign(self) -> type_sign_t - Get expression sign. - -ida_hexrays.cexpr_t.get_v (method) - get_v(self) -> var_ref_t - -ida_hexrays.cexpr_t.has_side_effects (method) - has_side_effects(self) -> bool - Check if the expression has side effects. Calls, pre/post inc/dec, and - assignments have side effects. - -ida_hexrays.cexpr_t.helper (variable) - helper name (used for cot_helper) - -ida_hexrays.cexpr_t.insn (variable) - an embedded statement, they are prohibited at the final maturity stage - (CMAT_FINAL) - -ida_hexrays.cexpr_t.is_call_arg_of (method) - is_call_arg_of(self, parent) -> bool - Is call argument? - - @param parent: (C++: const citem_t *) citem_t const * - @return: true if our expression is a call argument of the specified parent - expression. - -ida_hexrays.cexpr_t.is_call_object_of (method) - is_call_object_of(self, parent) -> bool - Is call object? - - @param parent: (C++: const citem_t *) citem_t const * - @return: true if our expression is the call object of the specified parent - expression. - -ida_hexrays.cexpr_t.is_child_of (method) - is_child_of(self, parent) -> bool - Verify if the specified item is our parent. - - @param parent: (C++: const citem_t *) possible parent item - @return: true if the specified item is our parent - -ida_hexrays.cexpr_t.is_const_value (method) - is_const_value(self, _v) -> bool - Check if the expression is a number with the specified value. - - @param _v: (C++: uint64) - -ida_hexrays.cexpr_t.is_cstr (method) - is_cstr(self) -> bool - -ida_hexrays.cexpr_t.is_fpop (method) - is_fpop(self) -> bool - -ida_hexrays.cexpr_t.is_jumpout (method) - is_jumpout(self) -> bool - -ida_hexrays.cexpr_t.is_negative_const (method) - is_negative_const(self) -> bool - Check if the expression is a negative number. - -ida_hexrays.cexpr_t.is_nice_cond (method) - is_nice_cond(self) -> bool - Is nice condition?. Nice condition is a nice expression of the boolean type. - -ida_hexrays.cexpr_t.is_nice_expr (method) - is_nice_expr(self) -> bool - Is nice expression? Nice expressions do not contain comma operators, embedded - statements, or labels. - -ida_hexrays.cexpr_t.is_non_negative_const (method) - is_non_negative_const(self) -> bool - Check if the expression is a non-negative number. - -ida_hexrays.cexpr_t.is_non_zero_const (method) - is_non_zero_const(self) -> bool - Check if the expression is a non-zero number. - -ida_hexrays.cexpr_t.is_odd_lvalue (method) - is_odd_lvalue(self) -> bool - -ida_hexrays.cexpr_t.is_type_signed (method) - is_type_signed(self) -> bool - Is expression signed? - -ida_hexrays.cexpr_t.is_type_unsigned (method) - is_type_unsigned(self) -> bool - Is expression unsigned? - -ida_hexrays.cexpr_t.is_undef_val (method) - is_undef_val(self) -> bool - -ida_hexrays.cexpr_t.is_vftable (method) - is_vftable(self) -> bool - -ida_hexrays.cexpr_t.is_zero_const (method) - is_zero_const(self) -> bool - Check if the expression is a zero. - -ida_hexrays.cexpr_t.m (variable) - member offset (used for cot_memptr, cot_memref) for unions, the member number - -ida_hexrays.cexpr_t.maybe_ptr (method) - maybe_ptr(self) -> bool - May the expression be a pointer? - -ida_hexrays.cexpr_t.n (variable) - used for cot_num - -ida_hexrays.cexpr_t.numval (method) - numval(self) -> uint64 - Get numeric value of the expression. This function can be called only on cot_num - expressions! - -ida_hexrays.cexpr_t.obj_ea (variable) - used for cot_obj - -ida_hexrays.cexpr_t.print1 (method) - print1(self, func) - Print expression into one line. - - @param func: (C++: const cfunc_t *) parent function. This argument is used to find out the referenced - variable names. - -ida_hexrays.cexpr_t.ptrsize (variable) - memory access size (used for cot_ptr, cot_memptr) - -ida_hexrays.cexpr_t.put_number (method) - put_number(self, func, value, nbytes, sign=no_sign) - Assign a number to the expression. - - @param func: (C++: cfunc_t *) current function - @param value: (C++: uint64) number value - @param nbytes: (C++: int) size of the number in bytes - @param sign: (C++: type_sign_t) number sign - -ida_hexrays.cexpr_t.refwidth (variable) - how many bytes are accessed? (-1: none) - -ida_hexrays.cexpr_t.requires_lvalue (method) - requires_lvalue(self, child) -> bool - Check if the expression requires an lvalue. - - @param child: (C++: const cexpr_t *) The function will check if this child of our expression must be an - lvalue. - @return: true if child must be an lvalue. - -ida_hexrays.cexpr_t.set_cpadone (method) - set_cpadone(self) - -ida_hexrays.cexpr_t.set_v (method) - set_v(self, v) - - @param v: var_ref_t const * - -ida_hexrays.cexpr_t.set_vftable (method) - set_vftable(self) - -ida_hexrays.cexpr_t.string (variable) - utf8 string constant, user representation (used for cot_str) - -ida_hexrays.cexpr_t.swap (method) - swap(self, r) - - @param r: cexpr_t & - -ida_hexrays.cexpr_t.theother (method) - theother(self, what) -> cexpr_t - - @param what: cexpr_t const * - -ida_hexrays.cexpr_t.type (variable) - expression type. must be carefully maintained - -ida_hexrays.cexpr_t.v (variable) - used for cot_var - -ida_hexrays.cexpr_t.x (variable) - the first operand of the expression - -ida_hexrays.cexpr_t.y (variable) - the second operand of the expression - -ida_hexrays.cexpr_t.z (variable) - the third operand of the expression - -ida_hexrays.cfor_t (class) - Proxy of C++ cfor_t class. - -ida_hexrays.cfor_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cfor_t const & - -ida_hexrays.cfor_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cfor_t const & - -ida_hexrays.cfor_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cfor_t const & - -ida_hexrays.cfor_t.__init__ (method) - __init__(self) -> cfor_t - -ida_hexrays.cfor_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cfor_t const & - -ida_hexrays.cfor_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cfor_t const & - -ida_hexrays.cfor_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cfor_t const & - -ida_hexrays.cfor_t.compare (method) - compare(self, r) -> int - - @param r: cfor_t const & - -ida_hexrays.cfor_t.init (variable) - Initialization expression. - -ida_hexrays.cfor_t.step (variable) - Step expression. - -ida_hexrays.cfunc_parentee_t (class) - Proxy of C++ cfunc_parentee_t class. - -ida_hexrays.cfunc_parentee_t.__disown__ (method) - -ida_hexrays.cfunc_parentee_t.__init__ (method) - __init__(self, f, post=False) -> cfunc_parentee_t - - @param f: cfunc_t * - @param post: bool - -ida_hexrays.cfunc_parentee_t.calc_rvalue_type (method) - calc_rvalue_type(self, target, e) -> bool - Calculate rvalue type. This function tries to determine the type of the - specified item based on its context. For example, if the current expression is - the right side of an assignment operator, the type of its left side will be - returned. This function can be used to determine the 'best' type of the - specified expression. - - @param target: (C++: tinfo_t *) 'best' type of the expression will be returned here - @param e: (C++: const cexpr_t *) expression to determine the desired type - @return: false if failed - -ida_hexrays.cfunc_parentee_t.func (variable) - Pointer to current function. - -ida_hexrays.cfunc_t (class) - Proxy of C++ cfunc_t class. - -ida_hexrays.cfunc_t.__init__ (method) - -ida_hexrays.cfunc_t.__str__ (method) - __str__(self) -> qstring - -ida_hexrays.cfunc_t.argidx (variable) - list of arguments (indexes into vars) - -ida_hexrays.cfunc_t.body (variable) - function body, must be a block - -ida_hexrays.cfunc_t.build_c_tree (method) - build_c_tree(self) - Generate the function body. This function (re)generates the function body from - the underlying microcode. - -ida_hexrays.cfunc_t.del_orphan_cmts (method) - del_orphan_cmts(self) -> int - Delete all orphan comments. The save_user_cmts() function must be called after - this call. - -ida_hexrays.cfunc_t.entry_ea (variable) - function entry address - -ida_hexrays.cfunc_t.find_item_coords (method) - find_item_coords(self, item, px, py) -> bool - - @param item: citem_t const * - @param px: int * - @param py: int * - - find_item_coords(self, item) -> PyObject * - - @param item: citem_t const * - -ida_hexrays.cfunc_t.find_label (method) - find_label(self, label) -> citem_t - Find the label. - - @param label: (C++: int) - @return: pointer to the ctree item with the specified label number. - -ida_hexrays.cfunc_t.gather_derefs (method) - gather_derefs(self, ci, udm=None) -> bool - - @param ci: ctree_item_t const & - @param udm: udt_type_data_t * - -ida_hexrays.cfunc_t.get_boundaries (method) - get_boundaries(self) -> boundaries_t - Get pointer to map of instruction boundaries. This function initializes the - boundary map if not done yet. - -ida_hexrays.cfunc_t.get_eamap (method) - get_eamap(self) -> eamap_t - Get pointer to ea->insn map. This function initializes eamap if not done yet. - -ida_hexrays.cfunc_t.get_func_type (method) - get_func_type(self, type) -> bool - Get the function type. - - @param type: (C++: tinfo_t *) variable where the function type is returned - @return: false if failure - -ida_hexrays.cfunc_t.get_line_item (method) - get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool - Get ctree item for the specified cursor position. - - @param line: (C++: const char *) line of decompilation text (element of sv) - @param x: (C++: int) x cursor coordinate in the line - @param is_ctree_line: (C++: bool) does the line belong to statement area? (if not, it is - assumed to belong to the declaration area) - @param phead: (C++: ctree_item_t *) ptr to the first item on the line (used to attach block comments). - May be nullptr - @param pitem: (C++: ctree_item_t *) ptr to the current item. May be nullptr - @param ptail: (C++: ctree_item_t *) ptr to the last item on the line (used to attach indented - comments). May be nullptr - @see: vdui_t::get_current_item() - @return: false if failed to get the current item - -ida_hexrays.cfunc_t.get_lvars (method) - get_lvars(self) -> lvars_t - Get vector of local variables. - - @return: pointer to the vector of local variables. If you modify this vector, - the ctree must be regenerated in order to have correct cast operators. - Use build_c_tree() for that. Removing lvars should be done carefully: - all references in ctree and microcode must be corrected after that. - -ida_hexrays.cfunc_t.get_pseudocode (method) - get_pseudocode(self) -> strvec_t - Get pointer to decompilation output: the pseudocode. This function generates - pseudocode if not done yet. - -ida_hexrays.cfunc_t.get_stkoff_delta (method) - get_stkoff_delta(self) -> sval_t - Get stack offset delta. The local variable stack offsets retrieved by - v.location.stkoff() should be adjusted before being used as stack frame offsets - in IDA. - - @return: the delta to apply. example: ida_stkoff = v.location.stkoff() - - f->get_stkoff_delta() - -ida_hexrays.cfunc_t.get_user_cmt (method) - get_user_cmt(self, loc, rt) -> char const * - Retrieve a user defined comment. - - @param loc: (C++: const treeloc_t &) ctree location - @param rt: (C++: cmt_retrieval_type_t) should already retrieved comments retrieved again? - @return: pointer to the comment string or nullptr - -ida_hexrays.cfunc_t.get_user_iflags (method) - get_user_iflags(self, loc) -> int32 - Retrieve citem iflags. - - @param loc: (C++: const citem_locator_t &) citem locator - @return: ctree item iflags bits or 0 - -ida_hexrays.cfunc_t.get_user_union_selection (method) - get_user_union_selection(self, ea, path) -> bool - Retrieve a user defined union field selection. - - @param ea: (C++: ea_t) address - @param path: (C++: intvec_t *) out: path describing the union selection. - @return: pointer to the path or nullptr - -ida_hexrays.cfunc_t.get_warnings (method) - get_warnings(self) -> hexwarns_t - Get information about decompilation warnings. - - @return: reference to the vector of warnings - -ida_hexrays.cfunc_t.has_orphan_cmts (method) - has_orphan_cmts(self) -> bool - Check if there are orphan comments. - -ida_hexrays.cfunc_t.hdrlines (variable) - number of lines in the declaration area - -ida_hexrays.cfunc_t.locked (method) - locked(self) -> bool - -ida_hexrays.cfunc_t.maturity (variable) - maturity level - -ida_hexrays.cfunc_t.mba (variable) - underlying microcode - -ida_hexrays.cfunc_t.numforms (variable) - user-defined number formats. - -ida_hexrays.cfunc_t.print_dcl (method) - print_dcl(self) - Print function prototype. - -ida_hexrays.cfunc_t.print_func (method) - print_func(self, vp) - Print function text. - - @param vp: (C++: vc_printer_t &) printer helper class to receive the generated text. - -ida_hexrays.cfunc_t.refcnt (variable) - reference count to this object. use cfuncptr_t - -ida_hexrays.cfunc_t.refresh_func_ctext (method) - refresh_func_ctext(self) - Refresh ctext after a ctree modification. This function informs the decompiler - that ctree (body) have been modified and ctext (sv) does not correspond to it - anymore. It also refreshes the pseudocode windows if there is any. - -ida_hexrays.cfunc_t.release (method) - release(self) - -ida_hexrays.cfunc_t.remove_unused_labels (method) - remove_unused_labels(self) - Remove unused labels. This function checks what labels are really used by the - function and removes the unused ones. You must call it after deleting a goto - statement. - -ida_hexrays.cfunc_t.save_user_cmts (method) - save_user_cmts(self) - Save user-defined comments into the database. - -ida_hexrays.cfunc_t.save_user_iflags (method) - save_user_iflags(self) - Save user-defined iflags into the database. - -ida_hexrays.cfunc_t.save_user_labels (method) - save_user_labels(self) - Save user-defined labels into the database. - -ida_hexrays.cfunc_t.save_user_numforms (method) - save_user_numforms(self) - Save user-defined number formats into the database. - -ida_hexrays.cfunc_t.save_user_unions (method) - save_user_unions(self) - Save user-defined union field selections into the database. - -ida_hexrays.cfunc_t.set_user_cmt (method) - set_user_cmt(self, loc, cmt) - Set a user defined comment. This function stores the specified comment in the - cfunc_t structure. The save_user_cmts() function must be called after it. - - @param loc: (C++: const treeloc_t &) ctree location - @param cmt: (C++: const char *) new comment. if empty or nullptr, then an existing comment is - deleted. - -ida_hexrays.cfunc_t.set_user_iflags (method) - set_user_iflags(self, loc, iflags) - Set citem iflags. - - @param loc: (C++: const citem_locator_t &) citem locator - @param iflags: (C++: int32) new iflags - -ida_hexrays.cfunc_t.set_user_union_selection (method) - set_user_union_selection(self, ea, path) - Set a union field selection. The save_user_unions() function must be called - after calling this function. - - @param ea: (C++: ea_t) address - @param path: (C++: const intvec_t &) in: path describing the union selection. - -ida_hexrays.cfunc_t.statebits (variable) - current cfunc_t state. see cfunc state bits - -ida_hexrays.cfunc_t.treeitems (variable) - vector of ctree items - -ida_hexrays.cfunc_t.user_cmts (variable) - user-defined comments. - -ida_hexrays.cfunc_t.user_iflags (variable) - user-defined item flags ctree item iflags bits - -ida_hexrays.cfunc_t.user_labels (variable) - user-defined labels. - -ida_hexrays.cfunc_t.user_unions (variable) - user-defined union field selections. - -ida_hexrays.cfunc_t.verify (method) - verify(self, aul, even_without_debugger) - Verify the ctree. This function verifies the ctree. If the ctree is malformed, - an internal error is generated. Use it to verify the ctree after your - modifications. - - @param aul: (C++: allow_unused_labels_t) Are unused labels acceptable? - @param even_without_debugger: (C++: bool) if false and there is no debugger, the - verification will be skipped - -ida_hexrays.cfunc_type (function) - Get the function's return type tinfo_t object. - -ida_hexrays.cfuncptr_t (class) - Proxy of C++ qrefcnt_t< cfunc_t > class. - -ida_hexrays.cfuncptr_t.__deref__ (method) - __deref__(self) -> cfunc_t - -ida_hexrays.cfuncptr_t.__init__ (method) - __init__(self, p) -> cfuncptr_t - - @param p: cfunc_t * - - __init__(self, r) -> cfuncptr_t - - @param r: qrefcnt_t< cfunc_t > const & - -ida_hexrays.cfuncptr_t.__ptrval__ (method) - __ptrval__(self) -> size_t - -ida_hexrays.cfuncptr_t.__ref__ (method) - __ref__(self) -> cfunc_t - -ida_hexrays.cfuncptr_t.__str__ (method) - __str__(self) -> qstring - -ida_hexrays.cfuncptr_t.build_c_tree (method) - build_c_tree(self) - -ida_hexrays.cfuncptr_t.del_orphan_cmts (method) - del_orphan_cmts(self) -> int - -ida_hexrays.cfuncptr_t.find_item_coords (method) - find_item_coords(self, item, px, py) -> bool - - @param item: citem_t const * - @param px: int * - @param py: int * - - find_item_coords(self, item) -> (int, int), bool - - @param item: citem_t const * - -ida_hexrays.cfuncptr_t.find_label (method) - find_label(self, label) -> citem_t - - @param label: int - -ida_hexrays.cfuncptr_t.gather_derefs (method) - gather_derefs(self, ci, udm=None) -> bool - - @param ci: ctree_item_t const & - @param udm: udt_type_data_t * - -ida_hexrays.cfuncptr_t.get_boundaries (method) - get_boundaries(self) -> boundaries_t - -ida_hexrays.cfuncptr_t.get_eamap (method) - get_eamap(self) -> eamap_t - -ida_hexrays.cfuncptr_t.get_func_type (method) - get_func_type(self, type) -> bool - - @param type: tinfo_t * - -ida_hexrays.cfuncptr_t.get_line_item (method) - get_line_item(self, line, x, is_ctree_line, phead, pitem, ptail) -> bool - - @param line: char const * - @param x: int - @param is_ctree_line: bool - @param phead: ctree_item_t * - @param pitem: ctree_item_t * - @param ptail: ctree_item_t * - -ida_hexrays.cfuncptr_t.get_lvars (method) - get_lvars(self) -> lvars_t - -ida_hexrays.cfuncptr_t.get_pseudocode (method) - get_pseudocode(self) -> strvec_t - -ida_hexrays.cfuncptr_t.get_stkoff_delta (method) - get_stkoff_delta(self) -> sval_t - -ida_hexrays.cfuncptr_t.get_user_cmt (method) - get_user_cmt(self, loc, rt) -> char const * - - @param loc: treeloc_t const & - @param rt: enum cmt_retrieval_type_t - -ida_hexrays.cfuncptr_t.get_user_iflags (method) - get_user_iflags(self, loc) -> int32 - - @param loc: citem_locator_t const & - -ida_hexrays.cfuncptr_t.get_user_union_selection (method) - get_user_union_selection(self, ea, path) -> bool - - @param ea: ea_t - @param path: intvec_t * - -ida_hexrays.cfuncptr_t.get_warnings (method) - get_warnings(self) -> hexwarns_t - -ida_hexrays.cfuncptr_t.has_orphan_cmts (method) - has_orphan_cmts(self) -> bool - -ida_hexrays.cfuncptr_t.locked (method) - locked(self) -> bool - -ida_hexrays.cfuncptr_t.print_dcl (method) - print_dcl(self) - -ida_hexrays.cfuncptr_t.print_func (method) - print_func(self, vp) - - @param vp: vc_printer_t & - -ida_hexrays.cfuncptr_t.refresh_func_ctext (method) - refresh_func_ctext(self) - -ida_hexrays.cfuncptr_t.release (method) - release(self) - -ida_hexrays.cfuncptr_t.remove_unused_labels (method) - remove_unused_labels(self) - -ida_hexrays.cfuncptr_t.reset (method) - reset(self) - -ida_hexrays.cfuncptr_t.save_user_cmts (method) - save_user_cmts(self) - -ida_hexrays.cfuncptr_t.save_user_iflags (method) - save_user_iflags(self) - -ida_hexrays.cfuncptr_t.save_user_labels (method) - save_user_labels(self) - -ida_hexrays.cfuncptr_t.save_user_numforms (method) - save_user_numforms(self) - -ida_hexrays.cfuncptr_t.save_user_unions (method) - save_user_unions(self) - -ida_hexrays.cfuncptr_t.set_user_cmt (method) - set_user_cmt(self, loc, cmt) - - @param loc: treeloc_t const & - @param cmt: char const * - -ida_hexrays.cfuncptr_t.set_user_iflags (method) - set_user_iflags(self, loc, iflags) - - @param loc: citem_locator_t const & - @param iflags: int32 - -ida_hexrays.cfuncptr_t.set_user_union_selection (method) - set_user_union_selection(self, ea, path) - - @param ea: ea_t - @param path: intvec_t const & - -ida_hexrays.cfuncptr_t.verify (method) - verify(self, aul, even_without_debugger) - - @param aul: enum allow_unused_labels_t - @param even_without_debugger: bool - -ida_hexrays.cgoto_t (class) - Proxy of C++ cgoto_t class. - -ida_hexrays.cgoto_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cgoto_t const & - -ida_hexrays.cgoto_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cgoto_t const & - -ida_hexrays.cgoto_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cgoto_t const & - -ida_hexrays.cgoto_t.__init__ (method) - __init__(self) -> cgoto_t - -ida_hexrays.cgoto_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cgoto_t const & - -ida_hexrays.cgoto_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cgoto_t const & - -ida_hexrays.cgoto_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cgoto_t const & - -ida_hexrays.cgoto_t.compare (method) - compare(self, r) -> int - - @param r: cgoto_t const & - -ida_hexrays.cgoto_t.label_num (variable) - Target label number. - -ida_hexrays.chain_keeper_t (class) - Proxy of C++ chain_keeper_t class. - -ida_hexrays.chain_keeper_t.__init__ (method) - __init__(self, _gc) -> chain_keeper_t - - @param _gc: graph_chains_t * - -ida_hexrays.chain_keeper_t.back (method) - back(self) -> block_chains_t - -ida_hexrays.chain_keeper_t.for_all_chains (method) - for_all_chains(self, cv, gca) -> int - - @param cv: chain_visitor_t & - @param gca: int - -ida_hexrays.chain_keeper_t.front (method) - front(self) -> block_chains_t - -ida_hexrays.chain_t (class) - Proxy of C++ chain_t class. - -ida_hexrays.chain_t.__init__ (method) - __init__(self) -> chain_t - __init__(self, t, off, w=1, v=-1) -> chain_t - - @param t: mopt_t - @param off: sval_t - @param w: int - @param v: int - - __init__(self, _k, w=1) -> chain_t - - @param _k: voff_t const & - @param w: int - -ida_hexrays.chain_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: chain_t const & - -ida_hexrays.chain_t._print (method) - _print(self) - -ida_hexrays.chain_t.append_list (method) - append_list(self, mba, list) - Append the contents of the chain to the specified list of locations. - - @param mba: (C++: const mba_t *) mba_t const * - @param list: (C++: mlist_t *) - -ida_hexrays.chain_t.clear_varnum (method) - clear_varnum(self) - -ida_hexrays.chain_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.chain_t.endoff (method) - endoff(self) -> voff_t - -ida_hexrays.chain_t.flags (variable) - combination Chain properties bits - -ida_hexrays.chain_t.get_reg (method) - get_reg(self) -> mreg_t - -ida_hexrays.chain_t.get_stkoff (method) - get_stkoff(self) -> sval_t - -ida_hexrays.chain_t.includes (method) - includes(self, r) -> bool - - @param r: chain_t const & - -ida_hexrays.chain_t.is_fake (method) - is_fake(self) -> bool - -ida_hexrays.chain_t.is_inited (method) - is_inited(self) -> bool - -ida_hexrays.chain_t.is_overlapped (method) - is_overlapped(self) -> bool - -ida_hexrays.chain_t.is_passreg (method) - is_passreg(self) -> bool - -ida_hexrays.chain_t.is_reg (method) - is_reg(self) -> bool - -ida_hexrays.chain_t.is_replaced (method) - is_replaced(self) -> bool - -ida_hexrays.chain_t.is_stkoff (method) - is_stkoff(self) -> bool - -ida_hexrays.chain_t.is_term (method) - is_term(self) -> bool - -ida_hexrays.chain_t.key (method) - key(self) -> voff_t - -ida_hexrays.chain_t.overlap (method) - overlap(self, r) -> bool - - @param r: chain_t const & - -ida_hexrays.chain_t.set_inited (method) - set_inited(self, b) - - @param b: bool - -ida_hexrays.chain_t.set_overlapped (method) - set_overlapped(self, b) - - @param b: bool - -ida_hexrays.chain_t.set_replaced (method) - set_replaced(self, b) - - @param b: bool - -ida_hexrays.chain_t.set_term (method) - set_term(self, b) - - @param b: bool - -ida_hexrays.chain_t.set_value (method) - set_value(self, r) - - @param r: chain_t const & - -ida_hexrays.chain_t.varnum (variable) - allocated variable index (-1 - not allocated yet) - -ida_hexrays.chain_t.width (variable) - size of the value in bytes - -ida_hexrays.chain_visitor_t (class) - Proxy of C++ chain_visitor_t class. - -ida_hexrays.chain_visitor_t.__disown__ (method) - -ida_hexrays.chain_visitor_t.__init__ (method) - __init__(self) -> chain_visitor_t - - @param self: PyObject * - -ida_hexrays.chain_visitor_t.parent (variable) - parent of the current chain - -ida_hexrays.chain_visitor_t.visit_chain (method) - visit_chain(self, nblock, ch) -> int - - @param nblock: int - @param ch: chain_t & - -ida_hexrays.change_hexrays_config (function) - change_hexrays_config(directive) -> bool - Parse DIRECTIVE and update the current configuration variables. For the syntax - see hexrays.cfg - - @param directive: (C++: const char *) char const * - -ida_hexrays.checkout_hexrays_license (function) - 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: (C++: bool) silently fail if the license cannot be checked out. - @return: false if failed - -ida_hexrays.cif_t (class) - Proxy of C++ cif_t class. - -ida_hexrays.cif_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cif_t const & - -ida_hexrays.cif_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cif_t const & - -ida_hexrays.cif_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cif_t const & - -ida_hexrays.cif_t.__init__ (method) - __init__(self) -> cif_t - __init__(self, r) -> cif_t - - @param r: cif_t const & - -ida_hexrays.cif_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cif_t const & - -ida_hexrays.cif_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cif_t const & - -ida_hexrays.cif_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cif_t const & - -ida_hexrays.cif_t.assign (method) - assign(self, r) -> cif_t - - @param r: cif_t const & - -ida_hexrays.cif_t.cleanup (method) - cleanup(self) - -ida_hexrays.cif_t.compare (method) - compare(self, r) -> int - - @param r: cif_t const & - -ida_hexrays.cif_t.ielse (variable) - Else-branch of the if-statement. May be nullptr. - -ida_hexrays.cif_t.ithen (variable) - Then-branch of the if-statement. - -ida_hexrays.cinsn_details (function) - 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_list_t (class) - Proxy of C++ qlist< cinsn_t > class. - -ida_hexrays.cinsn_list_t.__eq__ (method) - __eq__(self, x) -> bool - - @param x: qlist< cinsn_t > const & - -ida_hexrays.cinsn_list_t.__getitem__ (method) - __getitem__(self, i) -> cinsn_t - - @param i: size_t - -ida_hexrays.cinsn_list_t.__init__ (method) - __init__(self) -> cinsn_list_t - __init__(self, x) -> cinsn_list_t - - @param x: qlist< cinsn_t > const & - -ida_hexrays.cinsn_list_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.cinsn_list_t.__ne__ (method) - __ne__(self, x) -> bool - - @param x: qlist< cinsn_t > const & - -ida_hexrays.cinsn_list_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: cinsn_t const & - -ida_hexrays.cinsn_list_t.at (method) - -ida_hexrays.cinsn_list_t.back (method) - back(self) -> cinsn_t - -ida_hexrays.cinsn_list_t.begin (method) - begin(self) -> cinsn_list_t_iterator - -ida_hexrays.cinsn_list_t.clear (method) - clear(self) - -ida_hexrays.cinsn_list_t.empty (method) - empty(self) -> bool - -ida_hexrays.cinsn_list_t.end (method) - end(self) -> cinsn_list_t_iterator - -ida_hexrays.cinsn_list_t.erase (method) - erase(self, p) - - @param p: cinsn_list_t_iterator - -ida_hexrays.cinsn_list_t.find (method) - -ida_hexrays.cinsn_list_t.front (method) - front(self) -> cinsn_t - -ida_hexrays.cinsn_list_t.index (method) - -ida_hexrays.cinsn_list_t.insert (method) - insert(self, i, v) - - @param i: size_t - @param v: cinsn_t const & - - insert(self, p, x) -> cinsn_list_t_iterator - - @param p: cinsn_list_t_iterator - @param x: cinsn_t const & - -ida_hexrays.cinsn_list_t.pop_back (method) - pop_back(self) - -ida_hexrays.cinsn_list_t.pop_front (method) - pop_front(self) - -ida_hexrays.cinsn_list_t.push_back (method) - push_back(self, x) - - @param x: cinsn_t const & - - push_back(self) -> cinsn_t - -ida_hexrays.cinsn_list_t.push_front (method) - push_front(self, x) - - @param x: cinsn_t const & - -ida_hexrays.cinsn_list_t.rbegin (method) - rbegin(self) -> qlist< cinsn_t >::reverse_iterator - rbegin(self) -> qlist< cinsn_t >::const_reverse_iterator - -ida_hexrays.cinsn_list_t.remove (method) - remove(self, v) -> bool - - @param v: cinsn_t const & - -ida_hexrays.cinsn_list_t.rend (method) - rend(self) -> qlist< cinsn_t >::reverse_iterator - rend(self) -> qlist< cinsn_t >::const_reverse_iterator - -ida_hexrays.cinsn_list_t.size (method) - size(self) -> size_t - -ida_hexrays.cinsn_list_t.swap (method) - swap(self, x) - - @param x: qlist< cinsn_t > & - -ida_hexrays.cinsn_list_t_iterator (class) - Proxy of C++ cinsn_list_t_iterator class. - -ida_hexrays.cinsn_list_t_iterator.__eq__ (method) - __eq__(self, x) -> bool - - @param x: cinsn_list_t_iterator const * - -ida_hexrays.cinsn_list_t_iterator.__init__ (method) - __init__(self) -> cinsn_list_t_iterator - -ida_hexrays.cinsn_list_t_iterator.__ne__ (method) - __ne__(self, x) -> bool - - @param x: cinsn_list_t_iterator const * - -ida_hexrays.cinsn_list_t_iterator.__next__ (method) - __next__(self) - -ida_hexrays.cinsn_t (class) - Proxy of C++ cinsn_t class. - -ida_hexrays.cinsn_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t.__init__ (method) - __init__(self) -> cinsn_t - __init__(self, r) -> cinsn_t - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t._deregister (method) - _deregister(self) - -ida_hexrays.cinsn_t._get_casm (method) - _get_casm(self) -> casm_t - -ida_hexrays.cinsn_t._get_cblock (method) - _get_cblock(self) -> cblock_t - -ida_hexrays.cinsn_t._get_cdo (method) - _get_cdo(self) -> cdo_t - -ida_hexrays.cinsn_t._get_cexpr (method) - _get_cexpr(self) -> cexpr_t - -ida_hexrays.cinsn_t._get_cfor (method) - _get_cfor(self) -> cfor_t - -ida_hexrays.cinsn_t._get_cgoto (method) - _get_cgoto(self) -> cgoto_t - -ida_hexrays.cinsn_t._get_cif (method) - _get_cif(self) -> cif_t - -ida_hexrays.cinsn_t._get_creturn (method) - _get_creturn(self) -> creturn_t - -ida_hexrays.cinsn_t._get_cswitch (method) - _get_cswitch(self) -> cswitch_t - -ida_hexrays.cinsn_t._get_cwhile (method) - _get_cwhile(self) -> cwhile_t - -ida_hexrays.cinsn_t._print (method) - _print(self, indent, vp, use_curly=CALC_CURLY_BRACES) - - Parameters - ---------- - indent: int - vp: vc_printer_t & - use_curly: enum use_curly_t - -ida_hexrays.cinsn_t._register (method) - _register(self) - -ida_hexrays.cinsn_t._replace_by (method) - _replace_by(self, r) - - Parameters - ---------- - r: cinsn_t * - -ida_hexrays.cinsn_t._set_casm (method) - _set_casm(self, _v) - - Parameters - ---------- - _v: casm_t * - -ida_hexrays.cinsn_t._set_cblock (method) - _set_cblock(self, _v) - - Parameters - ---------- - _v: cblock_t * - -ida_hexrays.cinsn_t._set_cdo (method) - _set_cdo(self, _v) - - Parameters - ---------- - _v: cdo_t * - -ida_hexrays.cinsn_t._set_cexpr (method) - _set_cexpr(self, _v) - - Parameters - ---------- - _v: cexpr_t * - -ida_hexrays.cinsn_t._set_cfor (method) - _set_cfor(self, _v) - - Parameters - ---------- - _v: cfor_t * - -ida_hexrays.cinsn_t._set_cgoto (method) - _set_cgoto(self, _v) - - Parameters - ---------- - _v: cgoto_t * - -ida_hexrays.cinsn_t._set_cif (method) - _set_cif(self, _v) - - Parameters - ---------- - _v: cif_t * - -ida_hexrays.cinsn_t._set_creturn (method) - _set_creturn(self, _v) - - Parameters - ---------- - _v: creturn_t * - -ida_hexrays.cinsn_t._set_cswitch (method) - _set_cswitch(self, _v) - - Parameters - ---------- - _v: cswitch_t * - -ida_hexrays.cinsn_t._set_cwhile (method) - _set_cwhile(self, _v) - - Parameters - ---------- - _v: cwhile_t * - -ida_hexrays.cinsn_t.assign (method) - assign(self, r) -> cinsn_t - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t.casm (variable) - details of asm-statement - -ida_hexrays.cinsn_t.cblock (variable) - details of block-statement - -ida_hexrays.cinsn_t.cdo (variable) - details of do-statement - -ida_hexrays.cinsn_t.cexpr (variable) - details of expression-statement - -ida_hexrays.cinsn_t.cfor (variable) - details of for-statement - -ida_hexrays.cinsn_t.cgoto (variable) - details of goto-statement - -ida_hexrays.cinsn_t.cif (variable) - details of if-statement - -ida_hexrays.cinsn_t.cleanup (method) - cleanup(self) - Cleanup the statement. This function properly deletes all children and sets the - item type to cit_empty. - -ida_hexrays.cinsn_t.collect_free_breaks (method) - collect_free_breaks(self, breaks) -> bool - Collect free break statements. This function finds all free break statements - within the current statement. A break statement is free if it does not have a - loop or switch parent that that is also within the current statement. - - @param breaks: (C++: cinsnptrvec_t *) pointer to the variable where the vector of all found free break - statements is returned. This argument can be nullptr. - @return: true if some free break statements have been found - -ida_hexrays.cinsn_t.collect_free_continues (method) - collect_free_continues(self, continues) -> bool - Collect free continue statements. This function finds all free continue - statements within the current statement. A continue statement is free if it does - not have a loop parent that that is also within the current statement. - - @param continues: (C++: cinsnptrvec_t *) pointer to the variable where the vector of all found free - continue statements is returned. This argument can be nullptr. - @return: true if some free continue statements have been found - -ida_hexrays.cinsn_t.compare (method) - compare(self, r) -> int - - @param r: cinsn_t const & - -ida_hexrays.cinsn_t.contains_free_break (method) - contains_free_break(self) -> bool - Check if the statement has free break statements. - -ida_hexrays.cinsn_t.contains_free_continue (method) - contains_free_continue(self) -> bool - Check if the statement has free continue statements. - -ida_hexrays.cinsn_t.contains_insn (method) - contains_insn(self, type, times=1) -> bool - Check if the statement contains a statement of the specified type. - - @param type: (C++: ctype_t) statement opcode to look for - @param times: (C++: int) how many times TYPE should be present - @return: true if the statement has at least TIMES children with opcode == TYPE - -ida_hexrays.cinsn_t.create_if (method) - create_if(self, cnd) -> cif_t - Create a new if-statement. The current statement must be a block. The new - statement will be appended to it. - - @param cnd: (C++: cexpr_t *) if condition. It will be deleted after being copied. - -ida_hexrays.cinsn_t.creturn (variable) - details of return-statement - -ida_hexrays.cinsn_t.cswitch (variable) - details of switch-statement - -ida_hexrays.cinsn_t.cwhile (variable) - details of while-statement - -ida_hexrays.cinsn_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.cinsn_t.insn_is_epilog (method) - insn_is_epilog(insn) -> bool - - @param insn: cinsn_t const * - -ida_hexrays.cinsn_t.is_epilog (method) - -ida_hexrays.cinsn_t.is_ordinary_flow (method) - is_ordinary_flow(self) -> bool - Check if the statement passes execution to the next statement. - - @return: false if the statement breaks the control flow (like goto, return, etc) - -ida_hexrays.cinsn_t.new_insn (method) - new_insn(self, insn_ea) -> cinsn_t - Create a new statement. The current statement must be a block. The new statement - will be appended to it. - - @param insn_ea: (C++: ea_t) statement address - -ida_hexrays.cinsn_t.print1 (method) - print1(self, func) - Print the statement into one line. Currently this function is not available. - - @param func: (C++: const cfunc_t *) parent function. This argument is used to find out the referenced - variable names. - -ida_hexrays.cinsn_t.swap (method) - swap(self, r) - - @param r: cinsn_t & - -ida_hexrays.cinsn_t.zero (method) - zero(self) - Overwrite with zeroes without cleaning memory or deleting children. - -ida_hexrays.cinsn_t_insn_is_epilog (function) - cinsn_t_insn_is_epilog(insn) -> bool - - @param insn: cinsn_t const * - -ida_hexrays.cinsnptrvec_t (class) - Proxy of C++ qvector< cinsn_t * > class. - -ida_hexrays.cinsnptrvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< cinsn_t * > const & - -ida_hexrays.cinsnptrvec_t.__getitem__ (method) - __getitem__(self, i) -> cinsn_t - - @param i: size_t - -ida_hexrays.cinsnptrvec_t.__init__ (method) - __init__(self) -> cinsnptrvec_t - __init__(self, x) -> cinsnptrvec_t - - @param x: qvector< cinsn_t * > const & - -ida_hexrays.cinsnptrvec_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.cinsnptrvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< cinsn_t * > const & - -ida_hexrays.cinsnptrvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: cinsn_t *const & - -ida_hexrays.cinsnptrvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: cinsn_t *const & - -ida_hexrays.cinsnptrvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: cinsn_t *const & - -ida_hexrays.cinsnptrvec_t.at (method) - at(self, _idx) -> cinsn_t - - @param _idx: size_t - -ida_hexrays.cinsnptrvec_t.begin (method) - begin(self) -> qvector< cinsn_t * >::iterator - begin(self) -> qvector< cinsn_t * >::const_iterator - -ida_hexrays.cinsnptrvec_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.cinsnptrvec_t.clear (method) - clear(self) - -ida_hexrays.cinsnptrvec_t.empty (method) - empty(self) -> bool - -ida_hexrays.cinsnptrvec_t.end (method) - end(self) -> qvector< cinsn_t * >::iterator - end(self) -> qvector< cinsn_t * >::const_iterator - -ida_hexrays.cinsnptrvec_t.erase (method) - erase(self, it) -> qvector< cinsn_t * >::iterator - - @param it: qvector< cinsn_t * >::iterator - - erase(self, first, last) -> qvector< cinsn_t * >::iterator - - @param first: qvector< cinsn_t * >::iterator - @param last: qvector< cinsn_t * >::iterator - -ida_hexrays.cinsnptrvec_t.extract (method) - extract(self) -> cinsn_t ** - -ida_hexrays.cinsnptrvec_t.find (method) - find(self, x) -> qvector< cinsn_t * >::iterator - - @param x: cinsn_t *const & - - find(self, x) -> qvector< cinsn_t * >::const_iterator - - @param x: cinsn_t *const & - -ida_hexrays.cinsnptrvec_t.has (method) - has(self, x) -> bool - - @param x: cinsn_t *const & - -ida_hexrays.cinsnptrvec_t.inject (method) - inject(self, s, len) - - @param s: cinsn_t ** - @param len: size_t - -ida_hexrays.cinsnptrvec_t.insert (method) - insert(self, it, x) -> qvector< cinsn_t * >::iterator - - @param it: qvector< cinsn_t * >::iterator - @param x: cinsn_t *const & - -ida_hexrays.cinsnptrvec_t.pop_back (method) - pop_back(self) - -ida_hexrays.cinsnptrvec_t.push_back (method) - push_back(self, x) - - @param x: cinsn_t *const & - - push_back(self) -> cinsn_t *& - -ida_hexrays.cinsnptrvec_t.qclear (method) - qclear(self) - -ida_hexrays.cinsnptrvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.cinsnptrvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: cinsn_t *const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.cinsnptrvec_t.size (method) - size(self) -> size_t - -ida_hexrays.cinsnptrvec_t.swap (method) - swap(self, r) - - @param r: qvector< cinsn_t * > & - -ida_hexrays.cinsnptrvec_t.truncate (method) - truncate(self) - -ida_hexrays.cit_asm (variable) - asm-statement - -ida_hexrays.cit_block (variable) - block-statement: { ... } - -ida_hexrays.cit_break (variable) - break-statement - -ida_hexrays.cit_continue (variable) - continue-statement - -ida_hexrays.cit_do (variable) - do-statement - -ida_hexrays.cit_empty (variable) - instruction types start here - -ida_hexrays.cit_expr (variable) - expression-statement: expr; - -ida_hexrays.cit_for (variable) - for-statement - -ida_hexrays.cit_goto (variable) - goto-statement - -ida_hexrays.cit_if (variable) - if-statement - -ida_hexrays.cit_return (variable) - return-statement - -ida_hexrays.cit_switch (variable) - switch-statement - -ida_hexrays.cit_while (variable) - while-statement - -ida_hexrays.citem_cmt_t (class) - Proxy of C++ citem_cmt_t class. - -ida_hexrays.citem_cmt_t.__init__ (method) - __init__(self) -> citem_cmt_t - __init__(self, s) -> citem_cmt_t - - @param s: char const * - -ida_hexrays.citem_cmt_t.__str__ (method) - __str__(self) -> char const * - -ida_hexrays.citem_cmt_t.c_str (method) - c_str(self) -> char const * - -ida_hexrays.citem_cmt_t.used (variable) - the comment has been retrieved? - -ida_hexrays.citem_locator_t (class) - Proxy of C++ citem_locator_t class. - -ida_hexrays.citem_locator_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: citem_locator_t const & - -ida_hexrays.citem_locator_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: citem_locator_t const & - -ida_hexrays.citem_locator_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: citem_locator_t const & - -ida_hexrays.citem_locator_t.__init__ (method) - __init__(self, _ea, _op) -> citem_locator_t - - @param _ea: ea_t - @param _op: enum ctype_t - - __init__(self, i) -> citem_locator_t - - @param i: citem_t const * - -ida_hexrays.citem_locator_t.__le__ (method) - __le__(self, r) -> bool - - @param r: citem_locator_t const & - -ida_hexrays.citem_locator_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: citem_locator_t const & - -ida_hexrays.citem_locator_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: citem_locator_t const & - -ida_hexrays.citem_locator_t.compare (method) - compare(self, r) -> int - - @param r: citem_locator_t const & - -ida_hexrays.citem_locator_t.ea (variable) - citem address - -ida_hexrays.citem_locator_t.op (variable) - citem operation - -ida_hexrays.citem_t (class) - Proxy of C++ citem_t class. - -ida_hexrays.citem_t.__dbg_get_meminfo (method) - __dbg_get_meminfo(self) -> qstring - -ida_hexrays.citem_t.__dbg_get_registered_kind (method) - __dbg_get_registered_kind(self) -> int - -ida_hexrays.citem_t.__init__ (method) - __init__(self, o=cot_empty) -> citem_t - - @param o: enum ctype_t - -ida_hexrays.citem_t._acquire_ownership (method) - -ida_hexrays.citem_t._ensure_cond (method) - -ida_hexrays.citem_t._ensure_no_obj (method) - -ida_hexrays.citem_t._ensure_no_op (method) - -ida_hexrays.citem_t._ensure_ownership_transferrable (method) - -ida_hexrays.citem_t._get_op (method) - _get_op(self) -> ctype_t - -ida_hexrays.citem_t._maybe_disown_and_deregister (method) - -ida_hexrays.citem_t._meminfo (method) - -ida_hexrays.citem_t._obj_id (method) - _obj_id(self) -> PyObject * - -ida_hexrays.citem_t._own_and_register (method) - -ida_hexrays.citem_t._set_op (method) - _set_op(self, v) - - Parameters - ---------- - v: enum ctype_t - -ida_hexrays.citem_t.contains_expr (method) - contains_expr(self, e) -> bool - Does the item contain an expression? - - @param e: (C++: const cexpr_t *) cexpr_t const * - -ida_hexrays.citem_t.contains_label (method) - contains_label(self) -> bool - Does the item contain a label? - -ida_hexrays.citem_t.ea (variable) - address that corresponds to the item. may be BADADDR - -ida_hexrays.citem_t.find_closest_addr (method) - find_closest_addr(self, _ea) -> citem_t - - @param _ea: ea_t - -ida_hexrays.citem_t.find_parent_of (method) - find_parent_of(self, sitem) -> citem_t - - @param sitem: citem_t const * - - find_parent_of(self, item) -> citem_t - - @param item: citem_t const * - -ida_hexrays.citem_t.index (variable) - an index in cfunc_t::treeitems. meaningful only after print_func() - -ida_hexrays.citem_t.is_expr (method) - is_expr(self) -> bool - Is an expression? - -ida_hexrays.citem_t.label_num (variable) - label number. -1 means no label. items of the expression types (cot_...) should - not have labels at the final maturity level, but at the intermediate levels any - ctree item may have a label. Labels must be unique. Usually they correspond to - the basic block numbers. - -ida_hexrays.citem_t.op (variable) - item type - -ida_hexrays.citem_t.print1 (method) - print1(self, func) - Print item into one line. - - @param func: (C++: const cfunc_t *) parent function. This argument is used to find out the referenced - variable names. - @return: length of the generated text. - -ida_hexrays.citem_t.replace_by (method) - -ida_hexrays.citem_t.swap (method) - swap(self, r) - Swap two citem_t. - - @param r: (C++: citem_t &) - -ida_hexrays.citem_to_specific_type (function) - cast the citem_t object to its more specific type, either cexpr_t or cinsn_t. - -ida_hexrays.clear_cached_cfuncs (function) - clear_cached_cfuncs() - Flush all cached decompilation results. - -ida_hexrays.cloop_t (class) - Proxy of C++ cloop_t class. - -ida_hexrays.cloop_t.__init__ (method) - __init__(self, b=None) -> cloop_t - - @param b: cinsn_t * - - __init__(self, r) -> cloop_t - - @param r: cloop_t const & - -ida_hexrays.cloop_t.assign (method) - assign(self, r) -> cloop_t - - @param r: cloop_t const & - -ida_hexrays.cloop_t.cleanup (method) - cleanup(self) - -ida_hexrays.close_hexrays_waitbox (function) - close_hexrays_waitbox() - Close the waitbox displayed by the decompiler. Useful if DECOMP_NO_HIDE was used - during decompilation. - -ida_hexrays.close_pseudocode (function) - close_pseudocode(f) -> bool - Close pseudocode window. - - @param f: (C++: TWidget *) pointer to window - @return: false if failed - -ida_hexrays.cnumber_t (class) - Proxy of C++ cnumber_t class. - -ida_hexrays.cnumber_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cnumber_t const & - -ida_hexrays.cnumber_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cnumber_t const & - -ida_hexrays.cnumber_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cnumber_t const & - -ida_hexrays.cnumber_t.__init__ (method) - __init__(self, _opnum=0) -> cnumber_t - - @param _opnum: int - -ida_hexrays.cnumber_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cnumber_t const & - -ida_hexrays.cnumber_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cnumber_t const & - -ida_hexrays.cnumber_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cnumber_t const & - -ida_hexrays.cnumber_t._print (method) - _print(self, type, parent=None, nice_stroff=None) - - Parameters - ---------- - type: tinfo_t const & - parent: citem_t const * - nice_stroff: bool * - -ida_hexrays.cnumber_t._value (variable) - its value - -ida_hexrays.cnumber_t.assign (method) - assign(self, v, nbytes, sign) - Assign new value - - @param v: (C++: uint64) new value - @param nbytes: (C++: int) size of the new value in bytes - @param sign: (C++: type_sign_t) sign of the value - -ida_hexrays.cnumber_t.compare (method) - compare(self, r) -> int - - @param r: cnumber_t const & - -ida_hexrays.cnumber_t.nf (variable) - how to represent it - -ida_hexrays.cnumber_t.value (method) - value(self, type) -> uint64 - Get value. This function will properly extend the number sign to 64bits - depending on the type sign. - - @param type: (C++: const tinfo_t &) tinfo_t const & - -ida_hexrays.codegen_t (class) - Proxy of C++ codegen_t class. - -ida_hexrays.codegen_t.__init__ (method) - -ida_hexrays.codegen_t.analyze_prolog (method) - analyze_prolog(self, fc, reachable) -> merror_t - Analyze prolog/epilog of the function to decompile. If prolog is found, allocate - and fill 'mba->pi' structure. - - @param fc: (C++: const class qflow_chart_t &) flow chart - @param reachable: (C++: const class bitset_t &) bitmap of reachable blocks - @return: error code - -ida_hexrays.codegen_t.emit (method) - emit(self, code, width, l, r, d, offsize) -> minsn_t - Emit one microinstruction. This variant accepts pointers to operands. It is more - difficult to use but permits to create virtually any instruction. Operands may - be nullptr when it makes sense. - - @param code: (C++: mcode_t) enum mcode_t - @param width: int - @param l: (C++: const mop_t *) uval_t - @param r: (C++: const mop_t *) uval_t - @param d: (C++: const mop_t *) uval_t - @param offsize: int - - emit(self, code, l, r, d) -> minsn_t - - @param code: enum mcode_t - @param l: mop_t const * - @param r: mop_t const * - @param d: mop_t const * - -ida_hexrays.codegen_t.emit_micro_mvm (method) - emit_micro_mvm(self, code, dtype, l, r, d, offsize) -> minsn_t - Emit one microinstruction. This variant takes a data type not a size. - - @param code: (C++: mcode_t) enum mcode_t - @param dtype: (C++: op_dtype_t) - @param l: (C++: uval_t) - @param r: (C++: uval_t) - @param d: (C++: uval_t) - @param offsize: (C++: int) - -ida_hexrays.codegen_t.gen_micro (method) - gen_micro(self) -> merror_t - Generate microcode for one instruction. The instruction is in INSN - - @return: MERR_OK - all ok MERR_BLOCK - all ok, need to switch to new block - MERR_BADBLK - delete current block and continue other error codes are - fatal - -ida_hexrays.codegen_t.load_effective_address (method) - load_effective_address(self, n, flags=0) -> mreg_t - Generate microcode to calculate the address of a memory operand. - - @param n: (C++: int) - number of INSN operand - @param flags: (C++: int) - reserved for future use - @return: register containing the operand address. mr_none - failed (not a memory - operand) - -ida_hexrays.codegen_t.load_operand (method) - load_operand(self, opnum, flags=0) -> mreg_t - Generate microcode to load one operand. - - @param opnum: (C++: int) number of INSN operand - @param flags: (C++: int) reserved for future use - @return: register containing the operand. - -ida_hexrays.codegen_t.microgen_completed (method) - microgen_completed(self) - This method is called when the microcode generation is done. - -ida_hexrays.codegen_t.prepare_gen_micro (method) - prepare_gen_micro(self) -> merror_t - Setup internal data to handle new instruction. This method should be called - before calling gen_micro(). Usually gen_micro() is called by the decompiler. You - have to call this function explicitly only if you yourself call gen_micro(). The - instruction is in INSN - - @return: MERR_OK - all ok other error codes are fatal - -ida_hexrays.codegen_t.store_operand (method) - store_operand(self, n, mop, flags=0, outins=None) -> bool - Generate microcode to store an operand. In case of success an arbitrary number - of instructions can be generated (and even no instruction if the source and - target are the same) - - @param n: (C++: int) - number of target INSN operand - @param mop: (C++: const mop_t &) - operand to be stored - @param flags: (C++: int) - reserved for future use - @param outins: (C++: minsn_t **) - (OUT) the last generated instruction - @return: success - -ida_hexrays.convert_to_user_call (function) - convert_to_user_call(udc, cdg) -> merror_t - try to generate user-defined call for an instruction - - @param udc: (C++: const udcall_t &) udcall_t const & - @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.cot_add (variable) - x + y - -ida_hexrays.cot_asg (variable) - x = y - -ida_hexrays.cot_asgadd (variable) - x += y - -ida_hexrays.cot_asgband (variable) - x &= y - -ida_hexrays.cot_asgbor (variable) - x |= y - -ida_hexrays.cot_asgmul (variable) - x *= y - -ida_hexrays.cot_asgsdiv (variable) - x /= y signed - -ida_hexrays.cot_asgshl (variable) - x <<= y - -ida_hexrays.cot_asgsmod (variable) - x %= y signed - -ida_hexrays.cot_asgsshr (variable) - x >>= y signed - -ida_hexrays.cot_asgsub (variable) - x -= y - -ida_hexrays.cot_asgudiv (variable) - x /= y unsigned - -ida_hexrays.cot_asgumod (variable) - x %= y unsigned - -ida_hexrays.cot_asgushr (variable) - x >>= y unsigned - -ida_hexrays.cot_asgxor (variable) - x ^= y - -ida_hexrays.cot_band (variable) - x & y - -ida_hexrays.cot_bnot (variable) - ~x - -ida_hexrays.cot_bor (variable) - x | y - -ida_hexrays.cot_call (variable) - x(...) - -ida_hexrays.cot_cast (variable) - (type)x - -ida_hexrays.cot_comma (variable) - x, y - -ida_hexrays.cot_eq (variable) - x == y int or fpu (see EXFL_FPOP) - -ida_hexrays.cot_fadd (variable) - x + y fp - -ida_hexrays.cot_fdiv (variable) - x / y fp - -ida_hexrays.cot_fmul (variable) - x * y fp - -ida_hexrays.cot_fneg (variable) - -x fp - -ida_hexrays.cot_fnum (variable) - fpc - -ida_hexrays.cot_fsub (variable) - x - y fp - -ida_hexrays.cot_helper (variable) - arbitrary name - -ida_hexrays.cot_idx (variable) - x[y] - -ida_hexrays.cot_insn (variable) - instruction in expression, internal representation only - -ida_hexrays.cot_land (variable) - x && y - -ida_hexrays.cot_lnot (variable) - !x - -ida_hexrays.cot_lor (variable) - x || y - -ida_hexrays.cot_memptr (variable) - x->m, access size in 'ptrsize' - -ida_hexrays.cot_memref (variable) - x.m - -ida_hexrays.cot_mul (variable) - x * y - -ida_hexrays.cot_ne (variable) - x != y int or fpu (see EXFL_FPOP) - -ida_hexrays.cot_neg (variable) - -x - -ida_hexrays.cot_num (variable) - n - -ida_hexrays.cot_obj (variable) - obj_ea - -ida_hexrays.cot_postdec (variable) - x- - -ida_hexrays.cot_postinc (variable) - x++ - -ida_hexrays.cot_predec (variable) - -x - -ida_hexrays.cot_preinc (variable) - ++x - -ida_hexrays.cot_ptr (variable) - *x, access size in 'ptrsize' - -ida_hexrays.cot_ref (variable) - &x - -ida_hexrays.cot_sdiv (variable) - x / y signed - -ida_hexrays.cot_sge (variable) - x >= y signed or fpu (see EXFL_FPOP) - -ida_hexrays.cot_sgt (variable) - x > y signed or fpu (see EXFL_FPOP) - -ida_hexrays.cot_shl (variable) - x << y - -ida_hexrays.cot_sizeof (variable) - sizeof(x) - -ida_hexrays.cot_sle (variable) - x <= y signed or fpu (see EXFL_FPOP) - -ida_hexrays.cot_slt (variable) - x < y signed or fpu (see EXFL_FPOP) - -ida_hexrays.cot_smod (variable) - x % y signed - -ida_hexrays.cot_sshr (variable) - x >> y signed - -ida_hexrays.cot_str (variable) - string constant (user representation) - -ida_hexrays.cot_sub (variable) - x - y - -ida_hexrays.cot_tern (variable) - x ? y : z - -ida_hexrays.cot_type (variable) - arbitrary type - -ida_hexrays.cot_udiv (variable) - x / y unsigned - -ida_hexrays.cot_uge (variable) - x >= y unsigned - -ida_hexrays.cot_ugt (variable) - x > y unsigned - -ida_hexrays.cot_ule (variable) - x <= y unsigned - -ida_hexrays.cot_ult (variable) - x < y unsigned - -ida_hexrays.cot_umod (variable) - x % y unsigned - -ida_hexrays.cot_ushr (variable) - x >> y unsigned - -ida_hexrays.cot_var (variable) - v - -ida_hexrays.cot_xor (variable) - x ^ y - -ida_hexrays.create_cfunc (function) - create_cfunc(mba) -> cfuncptr_t - Create a new cfunc_t object. - - @param mba: (C++: mba_t *) microcode object. After creating the cfunc object it takes the - ownership of MBA. - -ida_hexrays.create_empty_mba (function) - create_empty_mba(mbr, hf=None) -> mba_t - Create an empty microcode object. - - @param mbr: (C++: const mba_ranges_t &) mba_ranges_t const & - @param hf: (C++: hexrays_failure_t *) - -ida_hexrays.create_field_name (function) - create_field_name(type, offset=BADADDR) -> qstring - - @param type: tinfo_t const & - @param offset: uval_t - -ida_hexrays.create_helper (function) - Create a helper object.. - -ida_hexrays.create_typedef (function) - create_typedef(name) -> tinfo_t - Create a reference to an ordinal type. - - @param name: char const * - - @return: type which refers to the specified ordinal. For example, if n is 1, the - type info which refers to ordinal type 1 is created. - create_typedef(n) -> tinfo_t - - @param n: int - -ida_hexrays.creturn_t (class) - Proxy of C++ creturn_t class. - -ida_hexrays.creturn_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: creturn_t const & - -ida_hexrays.creturn_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: creturn_t const & - -ida_hexrays.creturn_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: creturn_t const & - -ida_hexrays.creturn_t.__init__ (method) - __init__(self) -> creturn_t - -ida_hexrays.creturn_t.__le__ (method) - __le__(self, r) -> bool - - @param r: creturn_t const & - -ida_hexrays.creturn_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: creturn_t const & - -ida_hexrays.creturn_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: creturn_t const & - -ida_hexrays.creturn_t.compare (method) - compare(self, r) -> int - - @param r: creturn_t const & - -ida_hexrays.cswitch_t (class) - Proxy of C++ cswitch_t class. - -ida_hexrays.cswitch_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cswitch_t const & - -ida_hexrays.cswitch_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cswitch_t const & - -ida_hexrays.cswitch_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cswitch_t const & - -ida_hexrays.cswitch_t.__init__ (method) - __init__(self) -> cswitch_t - -ida_hexrays.cswitch_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cswitch_t const & - -ida_hexrays.cswitch_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cswitch_t const & - -ida_hexrays.cswitch_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cswitch_t const & - -ida_hexrays.cswitch_t.cases (variable) - Switch cases: values and instructions. - -ida_hexrays.cswitch_t.compare (method) - compare(self, r) -> int - - @param r: cswitch_t const & - -ida_hexrays.cswitch_t.mvnf (variable) - Maximal switch value and number format. - -ida_hexrays.ctext_position_t (class) - Proxy of C++ ctext_position_t class. - -ida_hexrays.ctext_position_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: ctext_position_t const & - -ida_hexrays.ctext_position_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: ctext_position_t const & - -ida_hexrays.ctext_position_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: ctext_position_t const & - -ida_hexrays.ctext_position_t.__init__ (method) - __init__(self, _lnnum=-1, _x=0, _y=0) -> ctext_position_t - - @param _lnnum: int - @param _x: int - @param _y: int - -ida_hexrays.ctext_position_t.__le__ (method) - __le__(self, r) -> bool - - @param r: ctext_position_t const & - -ida_hexrays.ctext_position_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: ctext_position_t const & - -ida_hexrays.ctext_position_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: ctext_position_t const & - -ida_hexrays.ctext_position_t.compare (method) - compare(self, r) -> int - - @param r: ctext_position_t const & - -ida_hexrays.ctext_position_t.in_ctree (method) - in_ctree(self, hdrlines) -> bool - Is the cursor in the variable/type declaration area? - - @param hdrlines: (C++: int) Number of lines of the declaration area - -ida_hexrays.ctext_position_t.lnnum (variable) - Line number. - -ida_hexrays.ctext_position_t.x (variable) - x coordinate of the cursor within the window - -ida_hexrays.ctext_position_t.y (variable) - y coordinate of the cursor within the window - -ida_hexrays.ctree_anchor_t (class) - Proxy of C++ ctree_anchor_t class. - -ida_hexrays.ctree_anchor_t.__init__ (method) - __init__(self) -> ctree_anchor_t - -ida_hexrays.ctree_anchor_t.get_index (method) - get_index(self) -> int - -ida_hexrays.ctree_anchor_t.get_itp (method) - get_itp(self) -> item_preciser_t - -ida_hexrays.ctree_anchor_t.is_blkcmt_anchor (method) - is_blkcmt_anchor(self) -> bool - -ida_hexrays.ctree_anchor_t.is_citem_anchor (method) - is_citem_anchor(self) -> bool - -ida_hexrays.ctree_anchor_t.is_itp_anchor (method) - is_itp_anchor(self) -> bool - -ida_hexrays.ctree_anchor_t.is_lvar_anchor (method) - is_lvar_anchor(self) -> bool - -ida_hexrays.ctree_anchor_t.is_valid_anchor (method) - is_valid_anchor(self) -> bool - -ida_hexrays.ctree_item_t (class) - Proxy of C++ ctree_item_t class. - -ida_hexrays.ctree_item_t.__init__ (method) - __init__(self) -> ctree_item_t - -ida_hexrays.ctree_item_t._get_e (method) - _get_e(self) -> cexpr_t - -ida_hexrays.ctree_item_t._get_f (method) - _get_f(self) -> cfunc_t - -ida_hexrays.ctree_item_t._get_i (method) - _get_i(self) -> cinsn_t - -ida_hexrays.ctree_item_t._get_it (method) - _get_it(self) -> citem_t - -ida_hexrays.ctree_item_t._get_l (method) - _get_l(self) -> lvar_t - -ida_hexrays.ctree_item_t._print (method) - _print(self) - -ida_hexrays.ctree_item_t.citype (variable) - Item type. - -ida_hexrays.ctree_item_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.ctree_item_t.get_ea (method) - get_ea(self) -> ea_t - Get address of the current item. Each ctree item has an address. - - @return: BADADDR if failed - -ida_hexrays.ctree_item_t.get_edm (method) - get_edm(self, parent) -> int - Get type of an enum member. If the current item is a symbolic constant, this - function will return information about it. - - @param parent: (C++: tinfo_t *) pointer to buffer for the enum type. - @return: member index or -1 if failed - -ida_hexrays.ctree_item_t.get_label_num (method) - get_label_num(self, gln_flags) -> int - Get label number of the current item. - - @param gln_flags: (C++: int) Combination of get_label_num control bits - @return: -1 if failed or no label - -ida_hexrays.ctree_item_t.get_lvar (method) - get_lvar(self) -> lvar_t - Get pointer to local variable. If the current item is a local variable, this - function will return pointer to its definition. - - @return: nullptr if failed - -ida_hexrays.ctree_item_t.get_memptr (method) - get_memptr(self, p_sptr=None) -> member_t * - Get pointer to structure member. If the current item is a structure field, this - function will return pointer to its definition. - - @param p_sptr: (C++: struc_t **) pointer to the variable where the pointer to the parent structure - is returned. This parameter can be nullptr. - @return: nullptr if failed OBSOLETE FUNCTION, do not use! - -ida_hexrays.ctree_item_t.get_udm (method) - get_udm(self, udm=None, parent=None, p_offset=None) -> int - Get type of a structure field. If the current item is a structure/union field, - this function will return information about it. - - @param udm: (C++: udm_t *) pointer to buffer for the udt member info. - @param parent: (C++: tinfo_t *) pointer to buffer for the struct/union type. - @param p_offset: (C++: uint64 *) pointer to the offset in bits inside udt. - @return: member index or -1 if failed Both output parameters can be nullptr. - -ida_hexrays.ctree_item_t.is_citem (method) - is_citem(self) -> bool - Is the current item is a ctree item? - -ida_hexrays.ctree_items_t (class) - Proxy of C++ qvector< citem_t * > class. - -ida_hexrays.ctree_items_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< citem_t * > const & - -ida_hexrays.ctree_items_t.__getitem__ (method) - __getitem__(self, i) -> citem_t - - @param i: size_t - -ida_hexrays.ctree_items_t.__init__ (method) - __init__(self) -> ctree_items_t - __init__(self, x) -> ctree_items_t - - @param x: qvector< citem_t * > const & - -ida_hexrays.ctree_items_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.ctree_items_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< citem_t * > const & - -ida_hexrays.ctree_items_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: citem_t *const & - -ida_hexrays.ctree_items_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: citem_t *const & - -ida_hexrays.ctree_items_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: citem_t *const & - -ida_hexrays.ctree_items_t.at (method) - at(self, _idx) -> citem_t - - @param _idx: size_t - -ida_hexrays.ctree_items_t.begin (method) - begin(self) -> qvector< citem_t * >::iterator - begin(self) -> qvector< citem_t * >::const_iterator - -ida_hexrays.ctree_items_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.ctree_items_t.clear (method) - clear(self) - -ida_hexrays.ctree_items_t.empty (method) - empty(self) -> bool - -ida_hexrays.ctree_items_t.end (method) - end(self) -> qvector< citem_t * >::iterator - end(self) -> qvector< citem_t * >::const_iterator - -ida_hexrays.ctree_items_t.erase (method) - erase(self, it) -> qvector< citem_t * >::iterator - - @param it: qvector< citem_t * >::iterator - - erase(self, first, last) -> qvector< citem_t * >::iterator - - @param first: qvector< citem_t * >::iterator - @param last: qvector< citem_t * >::iterator - -ida_hexrays.ctree_items_t.extract (method) - extract(self) -> citem_t ** - -ida_hexrays.ctree_items_t.find (method) - find(self, x) -> qvector< citem_t * >::iterator - - @param x: citem_t *const & - - find(self, x) -> qvector< citem_t * >::const_iterator - - @param x: citem_t *const & - -ida_hexrays.ctree_items_t.has (method) - has(self, x) -> bool - - @param x: citem_t *const & - -ida_hexrays.ctree_items_t.inject (method) - inject(self, s, len) - - @param s: citem_t ** - @param len: size_t - -ida_hexrays.ctree_items_t.insert (method) - insert(self, it, x) -> qvector< citem_t * >::iterator - - @param it: qvector< citem_t * >::iterator - @param x: citem_t *const & - -ida_hexrays.ctree_items_t.pop_back (method) - pop_back(self) - -ida_hexrays.ctree_items_t.push_back (method) - push_back(self, x) - - @param x: citem_t *const & - - push_back(self) -> citem_t *& - -ida_hexrays.ctree_items_t.qclear (method) - qclear(self) - -ida_hexrays.ctree_items_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.ctree_items_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: citem_t *const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.ctree_items_t.size (method) - size(self) -> size_t - -ida_hexrays.ctree_items_t.swap (method) - swap(self, r) - - @param r: qvector< citem_t * > & - -ida_hexrays.ctree_items_t.truncate (method) - truncate(self) - -ida_hexrays.ctree_parentee_t (class) - Proxy of C++ ctree_parentee_t class. - -ida_hexrays.ctree_parentee_t.__disown__ (method) - -ida_hexrays.ctree_parentee_t.__init__ (method) - __init__(self, post=False) -> ctree_parentee_t - - @param post: bool - -ida_hexrays.ctree_parentee_t.get_block (method) - get_block(self) -> cblock_t - Get pointer to the parent block of the currently visited item. This function - should be called only when the parent is a block. - -ida_hexrays.ctree_parentee_t.recalc_parent_types (method) - recalc_parent_types(self) -> bool - Recalculate type of parent nodes. If a node type has been changed, the visitor - must recalculate all parent types, otherwise the ctree becomes inconsistent. If - during this recalculation a parent node is added/deleted, this function returns - true. In this case the traversal must be stopped because the information about - parent nodes is stale. - - @return: false-ok to continue the traversal, true-must stop. - -ida_hexrays.ctree_visitor_t (class) - Proxy of C++ ctree_visitor_t class. - -ida_hexrays.ctree_visitor_t.__disown__ (method) - -ida_hexrays.ctree_visitor_t.__init__ (method) - __init__(self, _flags) -> ctree_visitor_t - - @param _flags: int - -ida_hexrays.ctree_visitor_t.apply_to (method) - apply_to(self, item, parent) -> int - Traverse ctree. The traversal will start at the specified item and continue - until of one the visit_...() functions return a non-zero value. - - @param item: (C++: citem_t *) root of the ctree to traverse - @param parent: (C++: citem_t *) parent of the specified item. can be specified as nullptr. - @return: 0 or a non-zero value returned by a visit_...() function - -ida_hexrays.ctree_visitor_t.apply_to_exprs (method) - apply_to_exprs(self, item, parent) -> int - Traverse only expressions. The traversal will start at the specified item and - continue until of one the visit_...() functions return a non-zero value. - - @param item: (C++: citem_t *) root of the ctree to traverse - @param parent: (C++: citem_t *) parent of the specified item. can be specified as nullptr. - @return: 0 or a non-zero value returned by a visit_...() function - -ida_hexrays.ctree_visitor_t.clr_prune (method) - clr_prune(self) - Do not prune children. This is an internal function, no need to call it. - -ida_hexrays.ctree_visitor_t.clr_restart (method) - clr_restart(self) - Do not restart. This is an internal function, no need to call it. - -ida_hexrays.ctree_visitor_t.cv_flags (variable) - Ctree visitor property bits - -ida_hexrays.ctree_visitor_t.is_postorder (method) - is_postorder(self) -> bool - Should the leave...() functions be called? - -ida_hexrays.ctree_visitor_t.leave_expr (method) - leave_expr(self, arg0) -> int - Visit an expression after having visited its children. This is a visitor - function which should be overridden by a derived class to do some useful work. - This visitor performs post-order traserval, i.e. an item is visited after its - children. - - @param arg0: cexpr_t * - @return: 0 to continue the traversal, nonzero to stop. - -ida_hexrays.ctree_visitor_t.leave_insn (method) - leave_insn(self, arg0) -> int - Visit a statement after having visited its children. This is a visitor function - which should be overridden by a derived class to do some useful work. This - visitor performs post-order traserval, i.e. an item is visited after its - children. - - @param arg0: cinsn_t * - @return: 0 to continue the traversal, nonzero to stop. - -ida_hexrays.ctree_visitor_t.maintain_parents (method) - maintain_parents(self) -> bool - Should the parent information by maintained? - -ida_hexrays.ctree_visitor_t.must_prune (method) - must_prune(self) -> bool - Should the traversal skip the children of the current item? - -ida_hexrays.ctree_visitor_t.must_restart (method) - must_restart(self) -> bool - Should the traversal restart? - -ida_hexrays.ctree_visitor_t.only_insns (method) - only_insns(self) -> bool - Should all expressions be automatically pruned? - -ida_hexrays.ctree_visitor_t.parent_expr (method) - parent_expr(self) -> cexpr_t - Get parent of the current item as an expression. - -ida_hexrays.ctree_visitor_t.parent_insn (method) - parent_insn(self) -> cinsn_t - Get parent of the current item as a statement. - -ida_hexrays.ctree_visitor_t.parents (variable) - Vector of parents of the current item. - -ida_hexrays.ctree_visitor_t.prune_now (method) - prune_now(self) - Prune children. This function may be called by a visitor() to skip all children - of the current item. - -ida_hexrays.ctree_visitor_t.set_restart (method) - set_restart(self) - Restart the travesal. Meaningful only in apply_to_exprs() - -ida_hexrays.ctree_visitor_t.visit_expr (method) - visit_expr(self, arg0) -> int - Visit an expression. This is a visitor function which should be overridden by a - derived class to do some useful work. This visitor performs pre-order traserval, - i.e. an item is visited before its children. - - @param arg0: cexpr_t * - @return: 0 to continue the traversal, nonzero to stop. - -ida_hexrays.ctree_visitor_t.visit_insn (method) - visit_insn(self, arg0) -> int - Visit a statement. This is a visitor function which should be overridden by a - derived class to do some useful work. This visitor performs pre-order traserval, - i.e. an item is visited before its children. - - @param arg0: cinsn_t * - @return: 0 to continue the traversal, nonzero to stop. - -ida_hexrays.cwhile_t (class) - Proxy of C++ cwhile_t class. - -ida_hexrays.cwhile_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: cwhile_t const & - -ida_hexrays.cwhile_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: cwhile_t const & - -ida_hexrays.cwhile_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: cwhile_t const & - -ida_hexrays.cwhile_t.__init__ (method) - __init__(self) -> cwhile_t - -ida_hexrays.cwhile_t.__le__ (method) - __le__(self, r) -> bool - - @param r: cwhile_t const & - -ida_hexrays.cwhile_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: cwhile_t const & - -ida_hexrays.cwhile_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: cwhile_t const & - -ida_hexrays.cwhile_t.compare (method) - compare(self, r) -> int - - @param r: cwhile_t const & - -ida_hexrays.debug_hexrays_ctree (function) - debug_hexrays_ctree(level, msg) - - @param level: int - @param msg: char const * - -ida_hexrays.decompile (function) - decompile(mbr, hf=None, decomp_flags=0) -> cfuncptr_t - Decompile a snippet or a function. - - @param mbr: (C++: const mba_ranges_t &) what to decompile - @param hf: (C++: hexrays_failure_t *) extended error information (if failed) - @param decomp_flags: (C++: int) bitwise combination of decompile() flags... bits - @return: pointer to the decompilation result (a reference counted pointer). - nullptr if failed. - -ida_hexrays.decompile (function) - Decompile a function. - - @param ea an address belonging to the function, or an ida_funcs.func_t object - @param hf extended error information (if failed) - @param flags decomp_flags bitwise combination of `DECOMP_...` bits - @return the decompilation result (a `ida_hexrays.cfunc_t` wrapper), or None - -ida_hexrays.decompile_func (function) - decompile_func(pfn, hf=None, decomp_flags=0) -> cfuncptr_t - Decompile a function. Multiple decompilations of the same function return the - same object. - - @param pfn: (C++: func_t *) pointer to function to decompile - @param hf: (C++: hexrays_failure_t *) extended error information (if failed) - @param decomp_flags: (C++: int) bitwise combination of decompile() flags... bits - @return: pointer to the decompilation result (a reference counted pointer). - nullptr if failed. - -ida_hexrays.decompile_many (function) - decompile_many(outfile, funcaddrs, flags) -> bool - Batch decompilation. Decompile all or the specified functions - - @param outfile: (C++: const char *) name of the output file - @param funcaddrs: (C++: const eavec_t *) list of functions to decompile. If nullptr or empty, then - decompile all nonlib functions - @param flags: (C++: int) Batch decompilation bits - @return: true if no internal error occurred and the user has not cancelled - decompilation - -ida_hexrays.dereference (function) - Dereference a pointer. This function dereferences a pointer expression. It - performs the following conversion: "ptr" => "*ptr" It can handle discrepancies - in the pointer type and the access size. - - @return: dereferenced expression - -ida_hexrays.dstr (function) - 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 *) tinfo_t const * - -ida_hexrays.dummy_ptrtype (function) - dummy_ptrtype(ptrsize, isfp) -> tinfo_t - Generate a dummy pointer type - - @param ptrsize: (C++: int) size of pointed object - @param isfp: (C++: bool) is floating point object? - -ida_hexrays.eamap_begin (function) - eamap_begin(map) -> eamap_iterator_t - Get iterator pointing to the beginning of eamap_t. - - @param map: (C++: const eamap_t *) eamap_t const * - -ida_hexrays.eamap_clear (function) - eamap_clear(map) - Clear eamap_t. - - @param map: (C++: eamap_t *) - -ida_hexrays.eamap_end (function) - eamap_end(map) -> eamap_iterator_t - Get iterator pointing to the end of eamap_t. - - @param map: (C++: const eamap_t *) eamap_t const * - -ida_hexrays.eamap_erase (function) - 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 (function) - eamap_find(map, key) -> eamap_iterator_t - Find the specified key in eamap_t. - - @param map: (C++: const eamap_t *) eamap_t const * - @param key: (C++: const ea_t &) ea_t const & - -ida_hexrays.eamap_first (function) - eamap_first(p) -> ea_t const & - Get reference to the current map key. - - @param p: (C++: eamap_iterator_t) - -ida_hexrays.eamap_free (function) - eamap_free(map) - Delete eamap_t instance. - - @param map: (C++: eamap_t *) - -ida_hexrays.eamap_insert (function) - 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 &) ea_t const & - @param val: (C++: const cinsnptrvec_t &) cinsnptrvec_t const & - -ida_hexrays.eamap_iterator_t (class) - Proxy of C++ eamap_iterator_t class. - -ida_hexrays.eamap_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: eamap_iterator_t const & - -ida_hexrays.eamap_iterator_t.__init__ (method) - __init__(self) -> eamap_iterator_t - -ida_hexrays.eamap_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: eamap_iterator_t const & - -ida_hexrays.eamap_new (function) - eamap_new() -> eamap_t - Create a new eamap_t instance. - -ida_hexrays.eamap_next (function) - eamap_next(p) -> eamap_iterator_t - Move to the next element. - - @param p: (C++: eamap_iterator_t) - -ida_hexrays.eamap_prev (function) - eamap_prev(p) -> eamap_iterator_t - Move to the previous element. - - @param p: (C++: eamap_iterator_t) - -ida_hexrays.eamap_second (function) - eamap_second(p) -> cinsnptrvec_t - Get reference to the current map value. - - @param p: (C++: eamap_iterator_t) - -ida_hexrays.eamap_size (function) - eamap_size(map) -> size_t - Get size of eamap_t. - - @param map: (C++: eamap_t *) - -ida_hexrays.eamap_t (class) - Proxy of C++ std::map< ea_t,cinsnptrvec_t > class. - -ida_hexrays.eamap_t.__init__ (method) - __init__(self) -> eamap_t - -ida_hexrays.eamap_t.at (method) - at(self, _Keyval) -> cinsnptrvec_t - - @param _Keyval: unsigned-ea-like-numeric-type const & - -ida_hexrays.eamap_t.size (method) - size(self) -> size_t - -ida_hexrays.fnumber_t (class) - Proxy of C++ fnumber_t class. - -ida_hexrays.fnumber_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: fnumber_t const & - -ida_hexrays.fnumber_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: fnumber_t const & - -ida_hexrays.fnumber_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: fnumber_t const & - -ida_hexrays.fnumber_t.__init__ (method) - __init__(self) -> fnumber_t - -ida_hexrays.fnumber_t.__le__ (method) - __le__(self, r) -> bool - - @param r: fnumber_t const & - -ida_hexrays.fnumber_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: fnumber_t const & - -ida_hexrays.fnumber_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: fnumber_t const & - -ida_hexrays.fnumber_t._print (method) - _print(self) - -ida_hexrays.fnumber_t.compare (method) - compare(self, r) -> int - - @param r: fnumber_t const & - -ida_hexrays.fnumber_t.dereference_const_uint16 (method) - dereference_const_uint16(self) -> uint16 const * - -ida_hexrays.fnumber_t.dereference_uint16 (method) - dereference_uint16(self) -> uint16 * - -ida_hexrays.fnumber_t.fnum (variable) - Internal representation of the number. - -ida_hexrays.fnumber_t.nbytes (variable) - Original size of the constant in bytes. - -ida_hexrays.gco_info_t (class) - Proxy of C++ gco_info_t class. - -ida_hexrays.gco_info_t.__init__ (method) - __init__(self) -> gco_info_t - -ida_hexrays.gco_info_t.append_to_list (method) - append_to_list(self, list, mba) -> bool - Append operand info to LIST. This function converts IDA register number or stack - offset to a decompiler list. - - @param list: (C++: mlist_t *) list to append to - @param mba: (C++: const mba_t *) microcode object - -ida_hexrays.gco_info_t.cvt_to_ivl (method) - cvt_to_ivl(self) -> vivl_t - Convert operand info to VIVL. The returned VIVL can be used, for example, in a - call of get_valranges(). - -ida_hexrays.gco_info_t.is_def (method) - is_def(self) -> bool - -ida_hexrays.gco_info_t.is_reg (method) - is_reg(self) -> bool - -ida_hexrays.gco_info_t.is_use (method) - is_use(self) -> bool - -ida_hexrays.gco_info_t.name (variable) - register or stkvar name - -ida_hexrays.gco_info_t.regnum (variable) - if register, the register id - -ida_hexrays.gco_info_t.size (variable) - operand size - -ida_hexrays.gco_info_t.stkoff (variable) - if stkvar, stack offset - -ida_hexrays.gen_microcode (function) - gen_microcode(mbr, hf=None, retlist=None, decomp_flags=0, reqmat=MMAT_GLBOPT3) -> mba_t - Generate microcode of an arbitrary code snippet - - @param mbr: (C++: const mba_ranges_t &) snippet ranges - @param hf: (C++: hexrays_failure_t *) extended error information (if failed) - @param retlist: (C++: const mlist_t *) list of registers the snippet returns - @param decomp_flags: (C++: int) bitwise combination of decompile() flags... bits - @param reqmat: (C++: mba_maturity_t) required microcode maturity - @return: pointer to the microcode, nullptr if failed. - -ida_hexrays.get_ctype_name (function) - get_ctype_name(op) -> char const * - - @param op: enum ctype_t - -ida_hexrays.get_current_operand (function) - 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 returns true. - - @param out: (C++: gco_info_t *) [out]: output buffer - -ida_hexrays.get_float_type (function) - get_float_type(width) -> tinfo_t - Get a type of a floating point value with the specified width - - @param width: (C++: int) width of the desired type - @return: type info object - -ida_hexrays.get_hexrays_version (function) - get_hexrays_version() -> char const * - Get decompiler version. The returned string is of the form - <major>.<minor>.<revision>.<build-date> - - @return: pointer to version string. For example: "2.0.0.140605" - -ida_hexrays.get_int_type_by_width_and_sign (function) - 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: (C++: int) size of the type in bytes - @param sign: (C++: type_sign_t) sign of the type - -ida_hexrays.get_member_type (function) - 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: (C++: const member_t *) structure field - @param type: (C++: tinfo_t *) pointer to the variable where the type is returned. This parameter - can be nullptr. - @return: false if failed - -ida_hexrays.get_merror_desc (function) - get_merror_desc(code, mba) -> str - Get textual description of an error code - - @param code: (C++: merror_t) Microcode error codes - @param mba: (C++: mba_t *) the microcode array - @return: the error address - -ida_hexrays.get_mreg_name (function) - get_mreg_name(reg, width, ud=None) -> str - Get the microregister name. - - @param reg: (C++: mreg_t) microregister number - @param width: (C++: int) size of microregister in bytes. may be bigger than the real - register size. - @param ud: (C++: void *) reserved, must be nullptr - @return: width of the printed register. this value may be less than the WIDTH - argument. - -ida_hexrays.get_op_signness (function) - get_op_signness(op) -> type_sign_t - Get operator sign. Meaningful for sign-dependent operators, like cot_sdiv. - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.get_signed_mcode (function) - get_signed_mcode(code) -> mcode_t - - @param code: enum mcode_t - -ida_hexrays.get_temp_regs (function) - 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 (function) - get_type(id, tif, guess) -> bool - Get a global type. Global types are types of addressable objects and - struct/union/enum types - - @param id: (C++: uval_t) address or id of the object - @param tif: (C++: tinfo_t *) buffer for the answer - @param guess: (C++: type_source_t) what kind of types to consider - @return: success - -ida_hexrays.get_unk_type (function) - 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: (C++: int) size of the type in bytes - -ida_hexrays.get_unsigned_mcode (function) - get_unsigned_mcode(code) -> mcode_t - - @param code: enum mcode_t - -ida_hexrays.get_widget_vdui (function) - get_widget_vdui(f) -> vdui_t - Get the vdui_t instance associated to the TWidget - - @param f: (C++: TWidget *) pointer to window - @return: a vdui_t *, or nullptr - -ida_hexrays.getb_reginsn (function) - getb_reginsn(ins) -> minsn_t - - @param ins: minsn_t * - -ida_hexrays.getf_reginsn (function) - getf_reginsn(ins) -> minsn_t - - @param ins: minsn_t * - -ida_hexrays.graph_chains_t (class) - Proxy of C++ graph_chains_t class. - -ida_hexrays.graph_chains_t.__init__ (method) - __init__(self) -> graph_chains_t - -ida_hexrays.graph_chains_t.acquire (method) - acquire(self) - Lock the chains. - -ida_hexrays.graph_chains_t.for_all_chains (method) - for_all_chains(self, cv, gca_flags) -> int - Visit all chains - - @param cv: (C++: chain_visitor_t &) chain visitor - @param gca_flags: (C++: int) combination of GCA_ bits - -ida_hexrays.graph_chains_t.is_locked (method) - is_locked(self) -> bool - Are the chains locked? It is a good idea to lock the chains before using them. - This ensures that they won't be recalculated and reallocated during the use. See - the chain_keeper_t class for that. - -ida_hexrays.graph_chains_t.release (method) - release(self) - Unlock the chains. - -ida_hexrays.graph_chains_t.swap (method) - swap(self, r) - - @param r: graph_chains_t & - -ida_hexrays.has_cached_cfunc (function) - has_cached_cfunc(ea) -> bool - Do we have a cached decompilation result for 'ea'? - - @param ea: (C++: ea_t) - -ida_hexrays.has_mcode_seloff (function) - has_mcode_seloff(op) -> bool - - @param op: enum mcode_t - -ida_hexrays.hexrays_alloc (function) - hexrays_alloc(size) -> void * - - @param size: size_t - -ida_hexrays.hexrays_failure_t (class) - Proxy of C++ hexrays_failure_t class. - -ida_hexrays.hexrays_failure_t.__init__ (method) - __init__(self) -> hexrays_failure_t - __init__(self, c, ea, buf=None) -> hexrays_failure_t - - @param c: enum merror_t - @param ea: ea_t - @param buf: char const * - - __init__(self, c, ea, buf) -> hexrays_failure_t - - @param c: enum merror_t - @param ea: ea_t - @param buf: qstring const & - -ida_hexrays.hexrays_failure_t.code (variable) - Microcode error codes - -ida_hexrays.hexrays_failure_t.desc (method) - desc(self) -> qstring - -ida_hexrays.hexrays_failure_t.errea (variable) - associated address - -ida_hexrays.hexrays_failure_t.str (variable) - string information - -ida_hexrays.hexrays_free (function) - hexrays_free(ptr) - - @param ptr: void * - -ida_hexrays.hexwarn_t (class) - Proxy of C++ hexwarn_t class. - -ida_hexrays.hexwarn_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: hexwarn_t const & - -ida_hexrays.hexwarn_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: hexwarn_t const & - -ida_hexrays.hexwarn_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: hexwarn_t const & - -ida_hexrays.hexwarn_t.__init__ (method) - __init__(self) -> hexwarn_t - -ida_hexrays.hexwarn_t.__le__ (method) - __le__(self, r) -> bool - - @param r: hexwarn_t const & - -ida_hexrays.hexwarn_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: hexwarn_t const & - -ida_hexrays.hexwarn_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: hexwarn_t const & - -ida_hexrays.hexwarn_t.compare (method) - compare(self, r) -> int - - @param r: hexwarn_t const & - -ida_hexrays.hexwarn_t.ea (variable) - Address where the warning occurred. - -ida_hexrays.hexwarn_t.id (variable) - Warning id. - -ida_hexrays.hexwarn_t.text (variable) - Fully formatted text of the warning. - -ida_hexrays.hexwarns_t (class) - Proxy of C++ qvector< hexwarn_t > class. - -ida_hexrays.hexwarns_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< hexwarn_t > const & - -ida_hexrays.hexwarns_t.__getitem__ (method) - __getitem__(self, i) -> hexwarn_t - - @param i: size_t - -ida_hexrays.hexwarns_t.__init__ (method) - __init__(self) -> hexwarns_t - __init__(self, x) -> hexwarns_t - - @param x: qvector< hexwarn_t > const & - -ida_hexrays.hexwarns_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.hexwarns_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< hexwarn_t > const & - -ida_hexrays.hexwarns_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: hexwarn_t const & - -ida_hexrays.hexwarns_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: hexwarn_t const & - -ida_hexrays.hexwarns_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: hexwarn_t const & - -ida_hexrays.hexwarns_t.at (method) - at(self, _idx) -> hexwarn_t - - @param _idx: size_t - -ida_hexrays.hexwarns_t.begin (method) - begin(self) -> hexwarn_t - -ida_hexrays.hexwarns_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.hexwarns_t.clear (method) - clear(self) - -ida_hexrays.hexwarns_t.empty (method) - empty(self) -> bool - -ida_hexrays.hexwarns_t.end (method) - end(self) -> hexwarn_t - -ida_hexrays.hexwarns_t.erase (method) - erase(self, it) -> hexwarn_t - - @param it: qvector< hexwarn_t >::iterator - - erase(self, first, last) -> hexwarn_t - - @param first: qvector< hexwarn_t >::iterator - @param last: qvector< hexwarn_t >::iterator - -ida_hexrays.hexwarns_t.extract (method) - extract(self) -> hexwarn_t - -ida_hexrays.hexwarns_t.find (method) - find(self, x) -> hexwarn_t - - @param x: hexwarn_t const & - -ida_hexrays.hexwarns_t.grow (method) - grow(self, x=hexwarn_t()) - - @param x: hexwarn_t const & - -ida_hexrays.hexwarns_t.has (method) - has(self, x) -> bool - - @param x: hexwarn_t const & - -ida_hexrays.hexwarns_t.inject (method) - inject(self, s, len) - - @param s: hexwarn_t * - @param len: size_t - -ida_hexrays.hexwarns_t.insert (method) - insert(self, it, x) -> hexwarn_t - - @param it: qvector< hexwarn_t >::iterator - @param x: hexwarn_t const & - -ida_hexrays.hexwarns_t.pop_back (method) - pop_back(self) - -ida_hexrays.hexwarns_t.push_back (method) - push_back(self, x) - - @param x: hexwarn_t const & - - push_back(self) -> hexwarn_t - -ida_hexrays.hexwarns_t.qclear (method) - qclear(self) - -ida_hexrays.hexwarns_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.hexwarns_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: hexwarn_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.hexwarns_t.size (method) - size(self) -> size_t - -ida_hexrays.hexwarns_t.swap (method) - swap(self, r) - - @param r: qvector< hexwarn_t > & - -ida_hexrays.hexwarns_t.truncate (method) - truncate(self) - -ida_hexrays.history_item_t (class) - Proxy of C++ history_item_t class. - -ida_hexrays.history_item_t.__init__ (method) - __init__(self, _ea=BADADDR, _lnnum=-1, _x=0, _y=0) -> history_item_t - - @param _ea: ea_t - @param _lnnum: int - @param _x: int - @param _y: int - - __init__(self, _ea, p) -> history_item_t - - @param _ea: ea_t - @param p: ctext_position_t const & - -ida_hexrays.history_item_t.ea (variable) - The entry address of the decompiled function. - -ida_hexrays.history_item_t.end (variable) - BADADDR-decompile function; otherwise end of the range. - -ida_hexrays.history_t (class) - Proxy of C++ qstack< history_item_t > class. - -ida_hexrays.history_t.__init__ (method) - __init__(self) -> history_t - -ida_hexrays.history_t.pop (method) - pop(self) -> history_item_t - -ida_hexrays.history_t.push (method) - push(self, v) - - @param v: history_item_t const & - -ida_hexrays.history_t.top (method) - top(self) -> history_item_t - -ida_hexrays.hxe_build_callinfo (variable) - Analyzing a call instruction. - -ida_hexrays.hxe_callinfo_built (variable) - A call instruction has been anallyzed. - -ida_hexrays.hxe_calls_done (variable) - All calls have been analyzed. - -ida_hexrays.hxe_close_pseudocode (variable) - Pseudocode view is being closed. - -ida_hexrays.hxe_cmt_changed (variable) - Comment got changed. - -ida_hexrays.hxe_combine (variable) - Trying to combine instructions of basic block. - -ida_hexrays.hxe_create_hint (variable) - Create a hint for the current item. - @see: ui_get_custom_viewer_hint - - @retval 0: continue collecting hints with other subscribers - @retval 1: stop collecting hints - -ida_hexrays.hxe_curpos (variable) - Current cursor position has been changed. (for example, by left-clicking or - using keyboard) - -ida_hexrays.hxe_double_click (variable) - Mouse double click. - -ida_hexrays.hxe_flowchart (variable) - Flowchart has been generated. - -ida_hexrays.hxe_func_printed (variable) - Function text has been generated. Plugins may modify the text in cfunc_t::sv. - The text uses regular color codes (see lines.hpp) COLOR_ADDR is used to store - pointers to ctree items. - -ida_hexrays.hxe_glbopt (variable) - Global optimization has been finished. If microcode is modified, MERR_LOOP must - be returned. It will cause a complete restart of the optimization. - -ida_hexrays.hxe_interr (variable) - Internal error has occurred. - -ida_hexrays.hxe_keyboard (variable) - Keyboard has been hit. - -ida_hexrays.hxe_locopt (variable) - Basic block level optimization has been finished. - -ida_hexrays.hxe_maturity (variable) - Ctree maturity level is being changed. - -ida_hexrays.hxe_microcode (variable) - Microcode has been generated. - -ida_hexrays.hxe_open_pseudocode (variable) - New pseudocode view has been opened. - -ida_hexrays.hxe_populating_popup (variable) - Populating popup menu. We can add menu items now. - -ida_hexrays.hxe_prealloc (variable) - Local variables: preallocation step begins. - -ida_hexrays.hxe_preoptimized (variable) - Microcode has been preoptimized. - -ida_hexrays.hxe_print_func (variable) - Printing ctree and generating text. - -ida_hexrays.hxe_prolog (variable) - Prolog analysis has been finished. - -ida_hexrays.hxe_refresh_pseudocode (variable) - Existing pseudocode text has been refreshed. Adding/removing pseudocode lines is - forbidden in this event. - -ida_hexrays.hxe_resolve_stkaddrs (variable) - The optimizer is about to resolve stack addresses. - -ida_hexrays.hxe_right_click (variable) - Mouse right click. Use hxe_populating_popup instead, in case you want to add - items in the popup menu. - -ida_hexrays.hxe_stkpnts (variable) - SP change points have been calculated. - -ida_hexrays.hxe_structural (variable) - Structural analysis has been finished. - -ida_hexrays.hxe_switch_pseudocode (variable) - Existing pseudocode view has been reloaded with a new function. Its text has not - been refreshed yet, only cfunc and mba pointers are ready. - -ida_hexrays.hxe_text_ready (variable) - Decompiled text is ready. - -ida_hexrays.init_hexrays_plugin (function) - init_hexrays_plugin(flags=0) -> bool - Check that your plugin is compatible with hex-rays decompiler. This function - must be called before calling any other decompiler function. - - @param flags: (C++: int) reserved, must be 0 - @return: true if the decompiler exists and is compatible with your plugin - -ida_hexrays.install_hexrays_callback (function) - Deprecated. Please use Hexrays_Hooks instead - Install handler for decompiler events. - - @return: false if failed - -ida_hexrays.install_microcode_filter (function) - install_microcode_filter(filter, install=True) -> bool - register/unregister non-standard microcode generator - - @param filter: (C++: microcode_filter_t *) - microcode generator object - @param install: (C++: bool) - TRUE - register the object, FALSE - unregister - @return: success - -ida_hexrays.is_additive (function) - is_additive(op) -> bool - Is additive operator? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.is_assignment (function) - is_assignment(op) -> bool - Is assignment operator? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.is_binary (function) - is_binary(op) -> bool - Is binary operator? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.is_bitop (function) - is_bitop(op) -> bool - Is bit related operator? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.is_bool_type (function) - is_bool_type(type) -> bool - Is a boolean type? - - @param type: (C++: const tinfo_t &) tinfo_t const & - @return: true if the type is a boolean type - -ida_hexrays.is_break_consumer (function) - is_break_consumer(op) -> bool - Does a break statement influence the specified statement code? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.is_commutative (function) - is_commutative(op) -> bool - Is commutative operator? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.is_inplace_def (function) - is_inplace_def(type) -> bool - Is struct/union/enum definition (not declaration)? - - @param type: (C++: const tinfo_t &) tinfo_t const & - -ida_hexrays.is_kreg (function) - is_kreg(r) -> bool - Is a kernel register? Kernel registers are temporary registers that can be used - freely. They may be used to store values that cross instruction or basic block - boundaries. Kernel registers do not map to regular processor registers. See also - mba_t::alloc_kreg() - - @param r: (C++: mreg_t) - -ida_hexrays.is_logical (function) - is_logical(op) -> bool - Is logical operator? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.is_loop (function) - is_loop(op) -> bool - Is loop statement code? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.is_lvalue (function) - is_lvalue(op) -> bool - Is Lvalue operator? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.is_may_access (function) - is_may_access(maymust) -> bool - - @param maymust: maymust_t - -ida_hexrays.is_mcode_addsub (function) - is_mcode_addsub(mcode) -> bool - - @param mcode: enum mcode_t - -ida_hexrays.is_mcode_call (function) - is_mcode_call(mcode) -> bool - - @param mcode: enum mcode_t - -ida_hexrays.is_mcode_commutative (function) - is_mcode_commutative(mcode) -> bool - - @param mcode: enum mcode_t - -ida_hexrays.is_mcode_convertible_to_jmp (function) - is_mcode_convertible_to_jmp(mcode) -> bool - - @param mcode: enum mcode_t - -ida_hexrays.is_mcode_convertible_to_set (function) - is_mcode_convertible_to_set(mcode) -> bool - - @param mcode: enum mcode_t - -ida_hexrays.is_mcode_divmod (function) - is_mcode_divmod(op) -> bool - - @param op: enum mcode_t - -ida_hexrays.is_mcode_fpu (function) - is_mcode_fpu(mcode) -> bool - - @param mcode: enum mcode_t - -ida_hexrays.is_mcode_j1 (function) - is_mcode_j1(mcode) -> bool - - @param mcode: enum mcode_t - -ida_hexrays.is_mcode_jcond (function) - is_mcode_jcond(mcode) -> bool - - @param mcode: enum mcode_t - -ida_hexrays.is_mcode_propagatable (function) - 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) enum mcode_t - -ida_hexrays.is_mcode_set (function) - is_mcode_set(mcode) -> bool - - @param mcode: enum mcode_t - -ida_hexrays.is_mcode_set1 (function) - is_mcode_set1(mcode) -> bool - - @param mcode: enum mcode_t - -ida_hexrays.is_mcode_shift (function) - is_mcode_shift(mcode) -> bool - - @param mcode: enum mcode_t - -ida_hexrays.is_mcode_xdsu (function) - is_mcode_xdsu(mcode) -> bool - - @param mcode: enum mcode_t - -ida_hexrays.is_multiplicative (function) - is_multiplicative(op) -> bool - Is multiplicative operator? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.is_nonbool_type (function) - is_nonbool_type(type) -> bool - Is definitely a non-boolean type? - - @param type: (C++: const tinfo_t &) tinfo_t const & - @return: true if the type is a non-boolean type (non bool and well defined) - -ida_hexrays.is_paf (function) - is_paf(t) -> bool - Is a pointer, array, or function type? - - @param t: (C++: type_t) - -ida_hexrays.is_prepost (function) - is_prepost(op) -> bool - Is pre/post increment/decrement operator? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.is_ptr_or_array (function) - is_ptr_or_array(t) -> bool - Is a pointer or array type? - - @param t: (C++: type_t) - -ida_hexrays.is_relational (function) - is_relational(op) -> bool - Is comparison operator? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.is_signed_mcode (function) - is_signed_mcode(code) -> bool - - @param code: enum mcode_t - -ida_hexrays.is_small_udt (function) - is_small_udt(tif) -> bool - Is a small structure or union? - - @param tif: (C++: const tinfo_t &) tinfo_t const & - @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 (function) - is_type_correct(ptr) -> bool - Verify a type string. - - @param ptr: (C++: const type_t *) type_t const * - @return: true if type string is correct - -ida_hexrays.is_unary (function) - is_unary(op) -> bool - Is unary operator? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.is_unsigned_mcode (function) - is_unsigned_mcode(code) -> bool - - @param code: enum mcode_t - -ida_hexrays.iterator (class) - Proxy of C++ bitset_t::iterator class. - -ida_hexrays.iterator.__eq__ (method) - __eq__(self, n) -> bool - - @param n: bitset_t::iterator const & - -ida_hexrays.iterator.__init__ (method) - __init__(self, n=-1) -> iterator - - @param n: int - -ida_hexrays.iterator.__ne__ (method) - __ne__(self, n) -> bool - - @param n: bitset_t::iterator const & - -ida_hexrays.iterator.__ref__ (method) - __ref__(self) -> int - -ida_hexrays.ivl_t (class) - Proxy of C++ ivl_t class. - -ida_hexrays.ivl_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: ivl_t const & - -ida_hexrays.ivl_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: ivl_t const & - -ida_hexrays.ivl_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: ivl_t const & - -ida_hexrays.ivl_t.__init__ (method) - __init__(self, _off=0, _size=0) -> ivl_t - - @param _off: uval_t - @param _size: uval_t - -ida_hexrays.ivl_t.__le__ (method) - __le__(self, r) -> bool - - @param r: ivl_t const & - -ida_hexrays.ivl_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: ivl_t const & - -ida_hexrays.ivl_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: ivl_t const & - -ida_hexrays.ivl_t.clear (method) - clear(self) - -ida_hexrays.ivl_t.compare (method) - compare(self, r) -> int - - @param r: ivl_t const & - -ida_hexrays.ivl_t.contains (method) - contains(self, off2) -> bool - - @param off2: uval_t - -ida_hexrays.ivl_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.ivl_t.empty (method) - empty(self) -> bool - -ida_hexrays.ivl_t.extend_to_cover (method) - extend_to_cover(self, r) -> bool - - @param r: ivl_t const & - -ida_hexrays.ivl_t.includes (method) - includes(self, ivl) -> bool - - @param ivl: ivl_t const & - -ida_hexrays.ivl_t.intersect (method) - intersect(self, r) - - @param r: ivl_t const & - -ida_hexrays.ivl_t.overlap (method) - overlap(self, ivl) -> bool - - @param ivl: ivl_t const & - -ida_hexrays.ivl_with_name_t (class) - Proxy of C++ ivl_with_name_t class. - -ida_hexrays.ivl_with_name_t.__init__ (method) - __init__(self) -> ivl_with_name_t - -ida_hexrays.ivlset_t (class) - Proxy of C++ ivlset_t class. - -ida_hexrays.ivlset_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: ivlset_t const & - -ida_hexrays.ivlset_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: ivlset_t const & - -ida_hexrays.ivlset_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: ivlset_t const & - -ida_hexrays.ivlset_t.__init__ (method) - __init__(self) -> ivlset_t - __init__(self, ivl) -> ivlset_t - - @param ivl: ivl_t const & - -ida_hexrays.ivlset_t.__le__ (method) - __le__(self, r) -> bool - - @param r: ivlset_t const & - -ida_hexrays.ivlset_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: ivlset_t const & - -ida_hexrays.ivlset_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: ivlset_t const & - -ida_hexrays.ivlset_t._print (method) - _print(self) - -ida_hexrays.ivlset_t.add (method) - add(self, ivl) -> bool - - @param ivl: ivl_t const & - - add(self, ea, size) -> bool - - @param ea: ea_t - @param size: asize_t - - add(self, ivs) -> bool - - @param ivs: ivlset_t const & - -ida_hexrays.ivlset_t.addmasked (method) - addmasked(self, ivs, mask) -> bool - - @param ivs: ivlset_t const & - @param mask: ivl_t const & - -ida_hexrays.ivlset_t.compare (method) - compare(self, r) -> int - - @param r: ivlset_t const & - -ida_hexrays.ivlset_t.contains (method) - contains(self, off) -> bool - - @param off: uval_t - -ida_hexrays.ivlset_t.count (method) - count(self) -> asize_t - -ida_hexrays.ivlset_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.ivlset_t.has_common (method) - has_common(self, ivl, strict=False) -> bool - - @param ivl: ivl_t const & - @param strict: bool - - has_common(self, ivs) -> bool - - @param ivs: ivlset_t const & - -ida_hexrays.ivlset_t.includes (method) - includes(self, ivs) -> bool - - @param ivs: ivlset_t const & - -ida_hexrays.ivlset_t.intersect (method) - intersect(self, ivs) -> bool - - @param ivs: ivlset_t const & - -ida_hexrays.ivlset_t.sub (method) - sub(self, ivl) -> bool - - @param ivl: ivl_t const & - - sub(self, ea, size) -> bool - - @param ea: ea_t - @param size: asize_t - - sub(self, ivs) -> bool - - @param ivs: ivlset_t const & - -ida_hexrays.jcnd2set (function) - jcnd2set(code) -> mcode_t - - @param code: enum mcode_t - -ida_hexrays.lexcompare (function) - lexcompare(a, b) -> int - - @param a: mop_t const & - @param b: mop_t const & - -ida_hexrays.lnot (function) - Logically negate the specified expression. The specified expression will be - logically negated. For example, "x == y" is converted into "x != y" by this - function. - - @return: logically negated expression. - -ida_hexrays.locate_lvar (function) - locate_lvar(out, func_ea, varname) -> bool - Find a variable by name. - - @param out: (C++: lvar_locator_t *) output buffer for the variable locator - @param func_ea: (C++: ea_t) function start address - @param varname: (C++: const char *) variable name - @return: success Since VARNAME is not always enough to find the variable, it may - decompile the function. - -ida_hexrays.lvar_locator_t (class) - Proxy of C++ lvar_locator_t class. - -ida_hexrays.lvar_locator_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: lvar_locator_t const & - -ida_hexrays.lvar_locator_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: lvar_locator_t const & - -ida_hexrays.lvar_locator_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: lvar_locator_t const & - -ida_hexrays.lvar_locator_t.__init__ (method) - __init__(self) -> lvar_locator_t - __init__(self, loc, ea) -> lvar_locator_t - - @param loc: vdloc_t const & - @param ea: ea_t - -ida_hexrays.lvar_locator_t.__le__ (method) - __le__(self, r) -> bool - - @param r: lvar_locator_t const & - -ida_hexrays.lvar_locator_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: lvar_locator_t const & - -ida_hexrays.lvar_locator_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: lvar_locator_t const & - -ida_hexrays.lvar_locator_t.compare (method) - compare(self, r) -> int - - @param r: lvar_locator_t const & - -ida_hexrays.lvar_locator_t.defea (variable) - Definition address. Usually, this is the address of the instruction that - initializes the variable. In some cases it can be a fictional address. - -ida_hexrays.lvar_locator_t.get_reg1 (method) - get_reg1(self) -> mreg_t - Get the register number of the variable. - -ida_hexrays.lvar_locator_t.get_reg2 (method) - get_reg2(self) -> mreg_t - Get the number of the second register (works only for ALOC_REG2 lvars) - -ida_hexrays.lvar_locator_t.get_scattered (method) - get_scattered(self) -> scattered_aloc_t - -ida_hexrays.lvar_locator_t.get_stkoff (method) - get_stkoff(self) -> sval_t - Get offset of the varialbe in the stack frame. - - @return: a non-negative value for stack variables. The value is an offset from - the bottom of the stack frame in terms of vd-offsets. negative values - mean error (not a stack variable) - -ida_hexrays.lvar_locator_t.is_reg1 (method) - is_reg1(self) -> bool - Is variable located on one register? - -ida_hexrays.lvar_locator_t.is_reg2 (method) - is_reg2(self) -> bool - Is variable located on two registers? - -ida_hexrays.lvar_locator_t.is_reg_var (method) - is_reg_var(self) -> bool - Is variable located on register(s)? - -ida_hexrays.lvar_locator_t.is_scattered (method) - is_scattered(self) -> bool - Is variable scattered? - -ida_hexrays.lvar_locator_t.is_stk_var (method) - is_stk_var(self) -> bool - Is variable located on the stack? - -ida_hexrays.lvar_locator_t.location (variable) - Variable location. - -ida_hexrays.lvar_mapping_begin (function) - 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 *) lvar_mapping_t const * - -ida_hexrays.lvar_mapping_clear (function) - lvar_mapping_clear(map) - Clear lvar_mapping_t. - - @param map: (C++: lvar_mapping_t *) - -ida_hexrays.lvar_mapping_end (function) - 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 *) lvar_mapping_t const * - -ida_hexrays.lvar_mapping_erase (function) - 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 (function) - lvar_mapping_find(map, key) -> lvar_mapping_iterator_t - Find the specified key in lvar_mapping_t. - - @param map: (C++: const lvar_mapping_t *) lvar_mapping_t const * - @param key: (C++: const lvar_locator_t &) lvar_locator_t const & - -ida_hexrays.lvar_mapping_first (function) - 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 (function) - lvar_mapping_free(map) - Delete lvar_mapping_t instance. - - @param map: (C++: lvar_mapping_t *) - -ida_hexrays.lvar_mapping_insert (function) - 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 &) lvar_locator_t const & - @param val: (C++: const lvar_locator_t &) lvar_locator_t const & - -ida_hexrays.lvar_mapping_iterator_t (class) - Proxy of C++ lvar_mapping_iterator_t class. - -ida_hexrays.lvar_mapping_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: lvar_mapping_iterator_t const & - -ida_hexrays.lvar_mapping_iterator_t.__init__ (method) - __init__(self) -> lvar_mapping_iterator_t - -ida_hexrays.lvar_mapping_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: lvar_mapping_iterator_t const & - -ida_hexrays.lvar_mapping_new (function) - lvar_mapping_new() -> lvar_mapping_t - Create a new lvar_mapping_t instance. - -ida_hexrays.lvar_mapping_next (function) - 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 (function) - 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 (function) - 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 (function) - lvar_mapping_size(map) -> size_t - Get size of lvar_mapping_t. - - @param map: (C++: lvar_mapping_t *) - -ida_hexrays.lvar_mapping_t (class) - Proxy of C++ std::map< lvar_locator_t,lvar_locator_t > class. - -ida_hexrays.lvar_mapping_t.__init__ (method) - __init__(self) -> lvar_mapping_t - -ida_hexrays.lvar_mapping_t.at (method) - at(self, _Keyval) -> lvar_locator_t - - @param _Keyval: lvar_locator_t const & - -ida_hexrays.lvar_mapping_t.size (method) - size(self) -> size_t - -ida_hexrays.lvar_ref_t (class) - Proxy of C++ lvar_ref_t class. - -ida_hexrays.lvar_ref_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: lvar_ref_t const & - -ida_hexrays.lvar_ref_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: lvar_ref_t const & - -ida_hexrays.lvar_ref_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: lvar_ref_t const & - -ida_hexrays.lvar_ref_t.__init__ (method) - __init__(self, m, i, o=0) -> lvar_ref_t - - @param m: mba_t * - @param i: int - @param o: sval_t - - __init__(self, r) -> lvar_ref_t - - @param r: lvar_ref_t const & - -ida_hexrays.lvar_ref_t.__le__ (method) - __le__(self, r) -> bool - - @param r: lvar_ref_t const & - -ida_hexrays.lvar_ref_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: lvar_ref_t const & - -ida_hexrays.lvar_ref_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: lvar_ref_t const & - -ida_hexrays.lvar_ref_t.compare (method) - compare(self, r) -> int - - @param r: lvar_ref_t const & - -ida_hexrays.lvar_ref_t.idx (variable) - index into mba->vars - -ida_hexrays.lvar_ref_t.mba (variable) - Pointer to the parent mba_t object. Since we need to access the 'mba->vars' - array in order to retrieve the referenced variable, we keep a pointer to mba_t - here. Note: this means this class and consequently mop_t, minsn_t, mblock_t are - specific to a mba_t object and cannot migrate between them. fortunately this is - not something we need to do. second, lvar_ref_t's appear only after MMAT_LVARS. - -ida_hexrays.lvar_ref_t.off (variable) - offset from the beginning of the variable - -ida_hexrays.lvar_ref_t.swap (method) - swap(self, r) - - @param r: lvar_ref_t & - -ida_hexrays.lvar_ref_t.var (method) - var(self) -> lvar_t - Retrieve the referenced variable. - -ida_hexrays.lvar_saved_info_t (class) - Proxy of C++ lvar_saved_info_t class. - -ida_hexrays.lvar_saved_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: lvar_saved_info_t const & - -ida_hexrays.lvar_saved_info_t.__init__ (method) - __init__(self) -> lvar_saved_info_t - -ida_hexrays.lvar_saved_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: lvar_saved_info_t const & - -ida_hexrays.lvar_saved_info_t.clear_keep (method) - clear_keep(self) - -ida_hexrays.lvar_saved_info_t.clr_nomap_lvar (method) - clr_nomap_lvar(self) - -ida_hexrays.lvar_saved_info_t.clr_noptr_lvar (method) - clr_noptr_lvar(self) - -ida_hexrays.lvar_saved_info_t.clr_split_lvar (method) - clr_split_lvar(self) - -ida_hexrays.lvar_saved_info_t.clr_unused_lvar (method) - clr_unused_lvar(self) - -ida_hexrays.lvar_saved_info_t.cmt (variable) - Comment. - -ida_hexrays.lvar_saved_info_t.flags (variable) - saved user lvar info property bits - -ida_hexrays.lvar_saved_info_t.has_info (method) - has_info(self) -> bool - -ida_hexrays.lvar_saved_info_t.is_kept (method) - is_kept(self) -> bool - -ida_hexrays.lvar_saved_info_t.is_nomap_lvar (method) - is_nomap_lvar(self) -> bool - -ida_hexrays.lvar_saved_info_t.is_noptr_lvar (method) - is_noptr_lvar(self) -> bool - -ida_hexrays.lvar_saved_info_t.is_split_lvar (method) - is_split_lvar(self) -> bool - -ida_hexrays.lvar_saved_info_t.is_unused_lvar (method) - is_unused_lvar(self) -> bool - -ida_hexrays.lvar_saved_info_t.ll (variable) - Variable locator. - -ida_hexrays.lvar_saved_info_t.name (variable) - Name. - -ida_hexrays.lvar_saved_info_t.set_keep (method) - set_keep(self) - -ida_hexrays.lvar_saved_info_t.set_nomap_lvar (method) - set_nomap_lvar(self) - -ida_hexrays.lvar_saved_info_t.set_noptr_lvar (method) - set_noptr_lvar(self) - -ida_hexrays.lvar_saved_info_t.set_split_lvar (method) - set_split_lvar(self) - -ida_hexrays.lvar_saved_info_t.set_unused_lvar (method) - set_unused_lvar(self) - -ida_hexrays.lvar_saved_info_t.size (variable) - Type size (if not initialized then -1) - -ida_hexrays.lvar_saved_info_t.type (variable) - Type. - -ida_hexrays.lvar_saved_infos_t (class) - Proxy of C++ qvector< lvar_saved_info_t > class. - -ida_hexrays.lvar_saved_infos_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< lvar_saved_info_t > const & - -ida_hexrays.lvar_saved_infos_t.__getitem__ (method) - __getitem__(self, i) -> lvar_saved_info_t - - @param i: size_t - -ida_hexrays.lvar_saved_infos_t.__init__ (method) - __init__(self) -> lvar_saved_infos_t - __init__(self, x) -> lvar_saved_infos_t - - @param x: qvector< lvar_saved_info_t > const & - -ida_hexrays.lvar_saved_infos_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.lvar_saved_infos_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< lvar_saved_info_t > const & - -ida_hexrays.lvar_saved_infos_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: lvar_saved_info_t const & - -ida_hexrays.lvar_saved_infos_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: lvar_saved_info_t const & - -ida_hexrays.lvar_saved_infos_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: lvar_saved_info_t const & - -ida_hexrays.lvar_saved_infos_t.at (method) - at(self, _idx) -> lvar_saved_info_t - - @param _idx: size_t - -ida_hexrays.lvar_saved_infos_t.begin (method) - begin(self) -> lvar_saved_info_t - -ida_hexrays.lvar_saved_infos_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.lvar_saved_infos_t.clear (method) - clear(self) - -ida_hexrays.lvar_saved_infos_t.empty (method) - empty(self) -> bool - -ida_hexrays.lvar_saved_infos_t.end (method) - end(self) -> lvar_saved_info_t - -ida_hexrays.lvar_saved_infos_t.erase (method) - erase(self, it) -> lvar_saved_info_t - - @param it: qvector< lvar_saved_info_t >::iterator - - erase(self, first, last) -> lvar_saved_info_t - - @param first: qvector< lvar_saved_info_t >::iterator - @param last: qvector< lvar_saved_info_t >::iterator - -ida_hexrays.lvar_saved_infos_t.extract (method) - extract(self) -> lvar_saved_info_t - -ida_hexrays.lvar_saved_infos_t.find (method) - find(self, x) -> lvar_saved_info_t - - @param x: lvar_saved_info_t const & - -ida_hexrays.lvar_saved_infos_t.grow (method) - grow(self, x=lvar_saved_info_t()) - - @param x: lvar_saved_info_t const & - -ida_hexrays.lvar_saved_infos_t.has (method) - has(self, x) -> bool - - @param x: lvar_saved_info_t const & - -ida_hexrays.lvar_saved_infos_t.inject (method) - inject(self, s, len) - - @param s: lvar_saved_info_t * - @param len: size_t - -ida_hexrays.lvar_saved_infos_t.insert (method) - insert(self, it, x) -> lvar_saved_info_t - - @param it: qvector< lvar_saved_info_t >::iterator - @param x: lvar_saved_info_t const & - -ida_hexrays.lvar_saved_infos_t.pop_back (method) - pop_back(self) - -ida_hexrays.lvar_saved_infos_t.push_back (method) - push_back(self, x) - - @param x: lvar_saved_info_t const & - - push_back(self) -> lvar_saved_info_t - -ida_hexrays.lvar_saved_infos_t.qclear (method) - qclear(self) - -ida_hexrays.lvar_saved_infos_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.lvar_saved_infos_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: lvar_saved_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.lvar_saved_infos_t.size (method) - size(self) -> size_t - -ida_hexrays.lvar_saved_infos_t.swap (method) - swap(self, r) - - @param r: qvector< lvar_saved_info_t > & - -ida_hexrays.lvar_saved_infos_t.truncate (method) - truncate(self) - -ida_hexrays.lvar_t (class) - Proxy of C++ lvar_t class. - -ida_hexrays.lvar_t.__init__ (method) - -ida_hexrays.lvar_t.accepts_type (method) - accepts_type(self, t, may_change_thisarg=False) -> bool - Check if the variable accept the specified type. Some types are forbidden (void, - function types, wrong arrays, etc) - - @param t: (C++: const tinfo_t &) tinfo_t const & - @param may_change_thisarg: (C++: bool) - -ida_hexrays.lvar_t.append_list (method) - append_list(self, mba, lst, pad_if_scattered=False) - Append local variable to mlist. - - @param mba: (C++: const mba_t *) ptr to the current mba_t - @param lst: (C++: mlist_t *) list to append to - @param pad_if_scattered: (C++: bool) if true, append padding bytes in case of scattered lvar - -ida_hexrays.lvar_t.clear_used (method) - clear_used(self) - -ida_hexrays.lvar_t.clr_arg_var (method) - clr_arg_var(self) - -ida_hexrays.lvar_t.clr_automapped (method) - clr_automapped(self) - -ida_hexrays.lvar_t.clr_decl_unused (method) - clr_decl_unused(self) - -ida_hexrays.lvar_t.clr_dummy_arg (method) - clr_dummy_arg(self) - -ida_hexrays.lvar_t.clr_fake_var (method) - clr_fake_var(self) - -ida_hexrays.lvar_t.clr_floating_var (method) - clr_floating_var(self) - -ida_hexrays.lvar_t.clr_mapdst_var (method) - clr_mapdst_var(self) - -ida_hexrays.lvar_t.clr_mreg_done (method) - clr_mreg_done(self) - -ida_hexrays.lvar_t.clr_noptr_var (method) - clr_noptr_var(self) - -ida_hexrays.lvar_t.clr_notarg (method) - clr_notarg(self) - -ida_hexrays.lvar_t.clr_overlapped_var (method) - clr_overlapped_var(self) - -ida_hexrays.lvar_t.clr_shared (method) - clr_shared(self) - -ida_hexrays.lvar_t.clr_split_var (method) - clr_split_var(self) - -ida_hexrays.lvar_t.clr_spoiled_var (method) - clr_spoiled_var(self) - -ida_hexrays.lvar_t.clr_thisarg (method) - clr_thisarg(self) - -ida_hexrays.lvar_t.clr_unknown_width (method) - clr_unknown_width(self) - -ida_hexrays.lvar_t.clr_used_byref (method) - clr_used_byref(self) - -ida_hexrays.lvar_t.clr_user_info (method) - clr_user_info(self) - -ida_hexrays.lvar_t.clr_user_name (method) - clr_user_name(self) - -ida_hexrays.lvar_t.clr_user_type (method) - clr_user_type(self) - -ida_hexrays.lvar_t.cmt (variable) - variable comment string - -ida_hexrays.lvar_t.defblk (variable) - first block defining the variable. 0 for args, -1 if unknown - -ida_hexrays.lvar_t.divisor (variable) - max known divisor of the variable - -ida_hexrays.lvar_t.has_common (method) - has_common(self, v) -> bool - Do variables overlap? - - @param v: (C++: const lvar_t &) lvar_t const & - -ida_hexrays.lvar_t.has_common_bit (method) - has_common_bit(self, loc, width2) -> bool - Does the variable overlap with the specified location? - - @param loc: (C++: const vdloc_t &) vdloc_t const & - @param width2: (C++: asize_t) - -ida_hexrays.lvar_t.has_nice_name (method) - has_nice_name(self) -> bool - Does the variable have a nice name? - -ida_hexrays.lvar_t.has_regname (method) - has_regname(self) -> bool - Has a register name? (like _RAX) - -ida_hexrays.lvar_t.has_user_info (method) - has_user_info(self) -> bool - Has any user-defined information? - -ida_hexrays.lvar_t.has_user_name (method) - has_user_name(self) -> bool - Has user-defined name? - -ida_hexrays.lvar_t.has_user_type (method) - has_user_type(self) -> bool - Has user-defined type? - -ida_hexrays.lvar_t.in_asm (method) - in_asm(self) -> bool - Is variable used in an instruction translated into __asm? - -ida_hexrays.lvar_t.is_aliasable (method) - is_aliasable(self, mba) -> bool - Is the variable aliasable? - - @param mba: (C++: const mba_t *) ptr to the current mba_t Aliasable variables may be modified - indirectly (through a pointer) - -ida_hexrays.lvar_t.is_arg_var (method) - is_arg_var(self) -> bool - Is the function argument? - -ida_hexrays.lvar_t.is_automapped (method) - is_automapped(self) -> bool - Was the variable automatically mapped to another variable? - -ida_hexrays.lvar_t.is_decl_unused (method) - is_decl_unused(self) -> bool - Was declared as __unused by the user? See CVAR_UNUSED. - -ida_hexrays.lvar_t.is_dummy_arg (method) - is_dummy_arg(self) -> bool - Is a dummy argument (added to fill a hole in the argument list) - -ida_hexrays.lvar_t.is_fake_var (method) - is_fake_var(self) -> bool - Is fake return variable? - -ida_hexrays.lvar_t.is_floating_var (method) - is_floating_var(self) -> bool - Used by a fpu insn? - -ida_hexrays.lvar_t.is_mapdst_var (method) - is_mapdst_var(self) -> bool - Other variable(s) map to this var? - -ida_hexrays.lvar_t.is_noptr_var (method) - is_noptr_var(self) -> bool - Variable type should not be a pointer. - -ida_hexrays.lvar_t.is_notarg (method) - is_notarg(self) -> bool - Is a local variable? (local variable cannot be an input argument) - -ida_hexrays.lvar_t.is_overlapped_var (method) - is_overlapped_var(self) -> bool - Is overlapped variable? - -ida_hexrays.lvar_t.is_result_var (method) - is_result_var(self) -> bool - Is the function result? - -ida_hexrays.lvar_t.is_shared (method) - is_shared(self) -> bool - Is lvar mapped to several chains. - -ida_hexrays.lvar_t.is_split_var (method) - is_split_var(self) -> bool - Is a split variable? - -ida_hexrays.lvar_t.is_spoiled_var (method) - is_spoiled_var(self) -> bool - Is spoiled var? (meaningful only during lvar allocation) - -ida_hexrays.lvar_t.is_thisarg (method) - is_thisarg(self) -> bool - Is 'this' argument of a C++ member function? - -ida_hexrays.lvar_t.is_unknown_width (method) - is_unknown_width(self) -> bool - Do we know the width of the variable? - -ida_hexrays.lvar_t.is_used_byref (method) - is_used_byref(self) -> bool - Was the address of the variable taken? - -ida_hexrays.lvar_t.mreg_done (method) - mreg_done(self) -> bool - Have corresponding microregs been replaced by references to this variable? - -ida_hexrays.lvar_t.name (variable) - variable name. use mba_t::set_nice_lvar_name() and mba_t::set_user_lvar_name() - to modify it - -ida_hexrays.lvar_t.set_arg_var (method) - set_arg_var(self) - -ida_hexrays.lvar_t.set_automapped (method) - set_automapped(self) - -ida_hexrays.lvar_t.set_decl_unused (method) - set_decl_unused(self) - -ida_hexrays.lvar_t.set_dummy_arg (method) - set_dummy_arg(self) - -ida_hexrays.lvar_t.set_fake_var (method) - set_fake_var(self) - -ida_hexrays.lvar_t.set_final_lvar_type (method) - set_final_lvar_type(self, t) - Set final variable type. - - @param t: (C++: const tinfo_t &) tinfo_t const & - -ida_hexrays.lvar_t.set_floating_var (method) - set_floating_var(self) - -ida_hexrays.lvar_t.set_lvar_type (method) - set_lvar_type(self, t, may_fail=False) -> bool - Set variable type Note: this function does not modify the idb, only the lvar - instance in the memory. For permanent changes see modify_user_lvars() Also, the - variable type is not considered as final by the decompiler and may be modified - later by the type derivation. In some cases set_final_var_type() may work - better, but it does not do persistent changes to the database neither. - - @param t: (C++: const tinfo_t &) new type - @param may_fail: (C++: bool) if false and type is bad, interr - @return: success - -ida_hexrays.lvar_t.set_mapdst_var (method) - set_mapdst_var(self) - -ida_hexrays.lvar_t.set_mreg_done (method) - set_mreg_done(self) - -ida_hexrays.lvar_t.set_non_typed (method) - set_non_typed(self) - -ida_hexrays.lvar_t.set_noptr_var (method) - set_noptr_var(self) - -ida_hexrays.lvar_t.set_notarg (method) - set_notarg(self) - -ida_hexrays.lvar_t.set_overlapped_var (method) - set_overlapped_var(self) - -ida_hexrays.lvar_t.set_shared (method) - set_shared(self) - -ida_hexrays.lvar_t.set_split_var (method) - set_split_var(self) - -ida_hexrays.lvar_t.set_spoiled_var (method) - set_spoiled_var(self) - -ida_hexrays.lvar_t.set_thisarg (method) - set_thisarg(self) - -ida_hexrays.lvar_t.set_typed (method) - set_typed(self) - -ida_hexrays.lvar_t.set_unknown_width (method) - set_unknown_width(self) - -ida_hexrays.lvar_t.set_used (method) - set_used(self) - -ida_hexrays.lvar_t.set_used_byref (method) - set_used_byref(self) - -ida_hexrays.lvar_t.set_user_name (method) - set_user_name(self) - -ida_hexrays.lvar_t.set_user_type (method) - set_user_type(self) - -ida_hexrays.lvar_t.set_width (method) - set_width(self, w, svw_flags=0) -> bool - Change the variable width. We call the variable size 'width', it is represents - the number of bytes. This function may change the variable type using - set_lvar_type(). - - @param w: (C++: int) new width - @param svw_flags: (C++: int) combination of SVW_... bits - @return: success - -ida_hexrays.lvar_t.tif (variable) - variable type - -ida_hexrays.lvar_t.type (method) - type(self) -> tinfo_t - -ida_hexrays.lvar_t.typed (method) - typed(self) -> bool - Has the variable a type? - -ida_hexrays.lvar_t.used (method) - used(self) -> bool - Is the variable used in the code? - -ida_hexrays.lvar_t.width (variable) - variable size in bytes - -ida_hexrays.lvar_uservec_t (class) - Proxy of C++ lvar_uservec_t class. - -ida_hexrays.lvar_uservec_t.__init__ (method) - __init__(self) -> lvar_uservec_t - -ida_hexrays.lvar_uservec_t.clear (method) - clear(self) - -ida_hexrays.lvar_uservec_t.empty (method) - empty(self) -> bool - -ida_hexrays.lvar_uservec_t.find_info (method) - find_info(self, vloc) -> lvar_saved_info_t - find saved user settings for given var - - @param vloc: (C++: const lvar_locator_t &) lvar_locator_t const & - -ida_hexrays.lvar_uservec_t.keep_info (method) - keep_info(self, v) - Preserve user settings for given var. - - @param v: (C++: const lvar_t &) lvar_t const & - -ida_hexrays.lvar_uservec_t.lmaps (variable) - Local variable mapping (used for merging variables) - -ida_hexrays.lvar_uservec_t.lvvec (variable) - User-specified names, types, comments for lvars. Variables without user- - specified info are not present in this vector. - -ida_hexrays.lvar_uservec_t.stkoff_delta (variable) - Delta to add to IDA stack offset to calculate Hex-Rays stack offsets. Should be - set by the caller before calling save_user_lvar_settings(); - -ida_hexrays.lvar_uservec_t.swap (method) - swap(self, r) - - @param r: lvar_uservec_t & - -ida_hexrays.lvar_uservec_t.ulv_flags (variable) - Various flags. Possible values are from lvar_uservec_t property bits. - -ida_hexrays.lvars_t (class) - Proxy of C++ lvars_t class. - -ida_hexrays.lvars_t.__init__ (method) - __init__(self) -> lvars_t - -ida_hexrays.lvars_t.find (method) - find(self, ll) -> lvar_t - Find variable at the specified location. - - @param ll: (C++: const lvar_locator_t &) variable location - @return: pointer to variable or nullptr - -ida_hexrays.lvars_t.find_input_lvar (method) - find_input_lvar(self, argloc, _size) -> int - Find input variable at the specified location. - - @param argloc: (C++: const vdloc_t &) variable location - @param _size: (C++: int) variable size - @return: -1 if failed, otherwise the index into the variables vector. - -ida_hexrays.lvars_t.find_lvar (method) - find_lvar(self, location, width, defblk=-1) -> int - Find variable at the specified location. - - @param location: (C++: const vdloc_t &) variable location - @param width: (C++: int) variable size - @param defblk: (C++: int) definition block of the lvar. -1 means any block - @return: -1 if failed, otherwise the index into the variables vector. - -ida_hexrays.lvars_t.find_stkvar (method) - find_stkvar(self, spoff, width) -> int - Find stack variable at the specified location. - - @param spoff: (C++: sval_t) offset from the minimal sp - @param width: (C++: int) variable size - @return: -1 if failed, otherwise the index into the variables vector. - -ida_hexrays.lxe_lvar_cmt_changed (variable) - Local variable comment got changed. - -ida_hexrays.lxe_lvar_mapping_changed (variable) - Local variable mapping got changed. - -ida_hexrays.lxe_lvar_name_changed (variable) - Local variable got renamed. - -ida_hexrays.lxe_lvar_type_changed (variable) - Local variable type got changed. - -ida_hexrays.make_num (function) - Create a number expression - -ida_hexrays.make_pointer (function) - make_pointer(type) -> tinfo_t - Create a pointer type. This function performs the following conversion: "type" - -> "type*" - - @param type: (C++: const tinfo_t &) object type. - @return: "type*". for example, if 'char' is passed as the argument, - -ida_hexrays.make_ref (function) - Create a reference. This function performs the following conversion: "obj" => - "&obj". It can handle casts, annihilate "&*", and process other special cases. - -ida_hexrays.mark_cfunc_dirty (function) - mark_cfunc_dirty(ea, close_views=False) -> bool - Flush the cached decompilation results. Erases a cache entry for the specified - function. - - @param ea: (C++: ea_t) function to erase from the cache - @param close_views: (C++: bool) close pseudocode windows that show the function - @return: if a cache entry existed. - -ida_hexrays.mba_range_iterator_t (class) - Proxy of C++ mba_range_iterator_t class. - -ida_hexrays.mba_range_iterator_t.__init__ (method) - __init__(self) -> mba_range_iterator_t - -ida_hexrays.mba_range_iterator_t.chunk (method) - chunk(self) -> range_t - -ida_hexrays.mba_range_iterator_t.is_snippet (method) - is_snippet(self) -> bool - -ida_hexrays.mba_range_iterator_t.next (method) - next(self) -> bool - -ida_hexrays.mba_range_iterator_t.set (method) - set(self, mbr) -> bool - - @param mbr: mba_ranges_t const & - -ida_hexrays.mba_ranges_t (class) - Proxy of C++ mba_ranges_t class. - -ida_hexrays.mba_ranges_t.__init__ (method) - __init__(self, _pfn=None) -> mba_ranges_t - - @param _pfn: func_t * - - __init__(self, r) -> mba_ranges_t - - @param r: rangevec_t const & - -ida_hexrays.mba_ranges_t.clear (method) - clear(self) - -ida_hexrays.mba_ranges_t.empty (method) - empty(self) -> bool - -ida_hexrays.mba_ranges_t.is_fragmented (method) - is_fragmented(self) -> bool - -ida_hexrays.mba_ranges_t.is_snippet (method) - is_snippet(self) -> bool - -ida_hexrays.mba_ranges_t.pfn (variable) - function to decompile. if not null, then function mode. - -ida_hexrays.mba_ranges_t.ranges (variable) - snippet mode: ranges to decompile. function mode: list of outlined ranges - -ida_hexrays.mba_ranges_t.start (method) - start(self) -> ea_t - -ida_hexrays.mba_t (class) - Deprecated. Please do not use. - -ida_hexrays.mba_t.__init__ (method) - -ida_hexrays.mba_t._deregister (method) - _deregister(self) - -ida_hexrays.mba_t._print (method) - _print(self, vp) - - Parameters - ---------- - vp: vd_printer_t & - -ida_hexrays.mba_t._register (method) - _register(self) - -ida_hexrays.mba_t.aliased_args (variable) - Aliased stkarg locations. - -ida_hexrays.mba_t.aliased_memory (variable) - aliased_memory+restricted_memory=ALLMEM - -ida_hexrays.mba_t.aliased_vars (variable) - Aliased stkvar locations. - -ida_hexrays.mba_t.alloc_fict_ea (method) - alloc_fict_ea(self, real_ea) -> ea_t - Allocate a fictional address. This function can be used to allocate a new unique - address for a new instruction, if re-using any existing address leads to - conflicts. For example, if the last instruction of the function modifies R0 and - falls through to the next function, it will be a tail call: LDM R0!, {R4,R7} end - of the function start of another function In this case R0 generates two - different lvars at the same address: - * one modified by LDM - * another that represents the return value from the tail call Another example: a - third-party plugin makes a copy of an instruction. This may lead to the - generation of two variables at the same address. Example 3: fictional addresses - can be used for new instructions created while modifying the microcode. This - function can be used to allocate a new unique address for a new instruction or a - variable. The fictional address is selected from an unallocated address range. - - @param real_ea: (C++: ea_t) real instruction address (BADADDR is ok too) - @return: a unique fictional address - -ida_hexrays.mba_t.alloc_kreg (method) - alloc_kreg(self, size, check_size=True) -> mreg_t - Allocate a kernel register. - - @param size: (C++: size_t) size of the register in bytes - @param check_size: (C++: bool) if true, only the sizes that correspond to a size of a basic - type will be accepted. - @return: allocated register. mr_none means failure. - -ida_hexrays.mba_t.alloc_lvars (method) - alloc_lvars(self) - Allocate local variables. Must be called only immediately after - optimize_global(), with no modifications to the microcode. Converts registers, - stack variables, and similar operands into mop_l. This call will not fail - because all necessary checks were performed in optimize_global(). After this - call the microcode reaches its final state. - -ida_hexrays.mba_t.analyze_calls (method) - analyze_calls(self, acflags) -> int - Analyze calls and determine calling conventions. - - @param acflags: (C++: int) permitted actions that are necessary for successful detection of - calling conventions. See Bits for analyze_calls() - @return: number of calls. -1 means error. - -ida_hexrays.mba_t.arg (method) - arg(self, n) -> lvar_t - - @param n: int - -ida_hexrays.mba_t.argbase (method) - argbase(self) -> sval_t - -ida_hexrays.mba_t.argidx (variable) - input arguments (indexes into 'vars') - -ida_hexrays.mba_t.argidx_ok (method) - argidx_ok(self) -> bool - -ida_hexrays.mba_t.argidx_sorted (method) - argidx_sorted(self) -> bool - -ida_hexrays.mba_t.bad_call_sp_detected (method) - bad_call_sp_detected(self) -> bool - -ida_hexrays.mba_t.blocks (variable) - double linked list of blocks - -ida_hexrays.mba_t.build_graph (method) - build_graph(self) -> merror_t - Build control flow graph. This function may be called only once. It calculates - the type of each basic block and the adjacency list. optimize_local() calls this - function if necessary. You need to call this function only before MMAT_LOCOPT. - - @return: error code - -ida_hexrays.mba_t.calc_shins_flags (method) - calc_shins_flags(self) -> int - -ida_hexrays.mba_t.callinfo_built (method) - callinfo_built(self) -> bool - -ida_hexrays.mba_t.cc (variable) - calling convention - -ida_hexrays.mba_t.chain_varnums_ok (method) - chain_varnums_ok(self) -> bool - -ida_hexrays.mba_t.clr_cdtr (method) - clr_cdtr(self) - -ida_hexrays.mba_t.clr_mba_flags (method) - clr_mba_flags(self, f) - - @param f: int - -ida_hexrays.mba_t.clr_mba_flags2 (method) - clr_mba_flags2(self, f) - - @param f: int - -ida_hexrays.mba_t.code16_bit_removed (method) - code16_bit_removed(self) -> bool - -ida_hexrays.mba_t.combine_blocks (method) - combine_blocks(self) -> bool - Combine blocks. This function merges blocks constituting linear flow. It calls - remove_empty_and_unreachable_blocks() as well. - - @return: true if changed any blocks - -ida_hexrays.mba_t.common_stkvars_stkargs (method) - common_stkvars_stkargs(self) -> bool - -ida_hexrays.mba_t.consumed_argregs (variable) - registers converted into stack arguments, should not be used as arguments - -ida_hexrays.mba_t.copy_block (method) - copy_block(self, blk, new_serial, cpblk_flags=3) -> mblock_t - Make a copy of a block. This function makes a simple copy of the block. It does - not fix the predecessor and successor lists, they must be fixed if necessary. - - @param blk: (C++: mblock_t *) block to copy - @param new_serial: (C++: int) position of the copied block - @param cpblk_flags: (C++: int) combination of Batch decompilation bits... bits - @return: pointer to the new copy - -ida_hexrays.mba_t.create_helper_call (method) - create_helper_call(self, ea, helper, rettype=None, callargs=None, out=None) -> minsn_t - Create a call of a helper function. - - @param ea: (C++: ea_t) The desired address of the instruction - @param helper: (C++: const char *) The helper name - @param rettype: (C++: const tinfo_t *) The return type (nullptr or empty type means 'void') - @param callargs: (C++: const mcallargs_t *) The helper arguments (nullptr-no arguments) - @param out: (C++: const mop_t *) The operand where the call result should be stored. If this argument - is not nullptr, "mov helper_call(), out" will be generated. - Otherwise "call helper()" will be generated. Note: the size of this - operand must be equal to the RETTYPE size - @return: pointer to the created instruction or nullptr if error - -ida_hexrays.mba_t.deleted_pairs (method) - deleted_pairs(self) -> bool - -ida_hexrays.mba_t.deprecated_idb_node (variable) - netnode with additional decompiler info. deprecated, do not use it anymore. it - may get stale after undo. - -ida_hexrays.mba_t.deserialize (method) - deserialize(bytes) -> mba_t - Deserialize a byte sequence into mbl array. - - @param bytes: (C++: const uchar *) pointer to the beginning of the byte sequence. - @return: new mbl array - -ida_hexrays.mba_t.display_numaddrs (method) - display_numaddrs(self) -> bool - -ida_hexrays.mba_t.display_valnums (method) - display_valnums(self) -> bool - -ida_hexrays.mba_t.dump (method) - dump(self) - Dump microcode to a file. The file will be created in the directory pointed by - IDA_DUMPDIR envvar. Dump will be created only if IDA is run under debugger. - -ida_hexrays.mba_t.dump_mba (method) - dump_mba(self, _verify, title) - - @param _verify: bool - @param title: char const * - -ida_hexrays.mba_t.error_ea (variable) - during microcode generation holds ins.ea - -ida_hexrays.mba_t.final_type (variable) - is the function type final? (specified by the user) - -ida_hexrays.mba_t.find_mop (method) - find_mop(self, ctx, ea, is_dest, list) -> mop_t - Find an operand in the microcode. This function tries to find the operand that - matches LIST. Any operand that overlaps with LIST is considered as a match. - - @param ctx: (C++: op_parent_info_t *) context information for the result - @param ea: (C++: ea_t) desired address of the operand. BADADDR means to accept any address. - @param is_dest: (C++: bool) search for destination operand? this argument may be ignored if - the exact match could not be found - @param list: (C++: const mlist_t &) list of locations the correspond to the operand - @return: pointer to the operand or nullptr. - -ida_hexrays.mba_t.for_all_insns (method) - for_all_insns(self, mv) -> int - Visit all instructions. This function visits all instruction and - subinstructions. - - @param mv: (C++: minsn_visitor_t &) instruction visitor - @return: non-zero value returned by mv.visit_mop() or zero - -ida_hexrays.mba_t.for_all_ops (method) - for_all_ops(self, mv) -> int - Visit all operands of all instructions. - - @param mv: (C++: mop_visitor_t &) operand visitor - @return: non-zero value returned by mv.visit_mop() or zero - -ida_hexrays.mba_t.for_all_topinsns (method) - for_all_topinsns(self, mv) -> int - Visit all top level instructions. - - @param mv: (C++: minsn_visitor_t &) instruction visitor - @return: non-zero value returned by mv.visit_mop() or zero - -ida_hexrays.mba_t.fpd (variable) - frame pointer delta - -ida_hexrays.mba_t.free_kreg (method) - free_kreg(self, reg, size) - Free a kernel register. If wrong arguments are passed, this function will - generate an internal error. - - @param reg: (C++: mreg_t) a previously allocated kernel register - @param size: (C++: size_t) size of the register in bytes - -ida_hexrays.mba_t.frregs (variable) - size of saved registers range in the stack frame - -ida_hexrays.mba_t.frsize (variable) - size of local stkvars range in the stack frame - -ida_hexrays.mba_t.fti_flags (variable) - FTI_... constants for the current function. - -ida_hexrays.mba_t.fullsize (variable) - Full stack size including incoming args. - -ida_hexrays.mba_t.generated_asserts (method) - generated_asserts(self) -> bool - -ida_hexrays.mba_t.get_args_region (method) - get_args_region(self) -> ivl_t - -ida_hexrays.mba_t.get_curfunc (method) - get_curfunc(self) -> func_t * - -ida_hexrays.mba_t.get_func_output_lists (method) - get_func_output_lists(self, return_regs, spoiled, type, call_ea=BADADDR, tail_call=False) - Prepare the lists of registers & memory that are defined/killed by a function - - @param return_regs: (C++: mlist_t *) defined regs to return (eax,edx) - @param spoiled: (C++: mlist_t *) spoiled regs (flags,ecx,mem) - @param type: (C++: const tinfo_t &) the function type - @param call_ea: (C++: ea_t) the call insn address (if known) - @param tail_call: (C++: bool) is it the tail call? - -ida_hexrays.mba_t.get_graph (method) - get_graph(self) -> mbl_graph_t - Get control graph. Call build_graph() if you need the graph before MMAT_LOCOPT. - -ida_hexrays.mba_t.get_ida_argloc (method) - get_ida_argloc(self, v) -> argloc_t - - @param v: lvar_t const & - -ida_hexrays.mba_t.get_lvars_region (method) - get_lvars_region(self) -> ivl_t - -ida_hexrays.mba_t.get_mba_flags (method) - get_mba_flags(self) -> int - -ida_hexrays.mba_t.get_mba_flags2 (method) - get_mba_flags2(self) -> int - -ida_hexrays.mba_t.get_mblock (method) - get_mblock(self, n) -> mblock_t - - @param n: int - -ida_hexrays.mba_t.get_shadow_region (method) - get_shadow_region(self) -> ivl_t - -ida_hexrays.mba_t.get_stack_region (method) - get_stack_region(self) -> ivl_t - -ida_hexrays.mba_t.get_std_region (method) - get_std_region(self, idx) -> ivl_t - Get information about various memory regions. We map the stack frame to the - global memory, to some unused range. - - @param idx: (C++: memreg_index_t) enum memreg_index_t - -ida_hexrays.mba_t.gotoff_stkvars (variable) - stkvars that hold .got offsets. considered to be unaliasable - -ida_hexrays.mba_t.graph_insns (method) - graph_insns(self) -> bool - -ida_hexrays.mba_t.has_bad_sp (method) - has_bad_sp(self) -> bool - -ida_hexrays.mba_t.has_outlines (method) - has_outlines(self) -> bool - -ida_hexrays.mba_t.has_over_chains (method) - has_over_chains(self) -> bool - -ida_hexrays.mba_t.has_passregs (method) - has_passregs(self) -> bool - -ida_hexrays.mba_t.has_stack_retval (method) - has_stack_retval(self) -> bool - -ida_hexrays.mba_t.idaloc2vd (method) - idaloc2vd(self, loc, width) -> vdloc_t - - @param loc: argloc_t const & - @param width: int - -ida_hexrays.mba_t.idb_spoiled (variable) - MBA_SPLINFO && final_type: info in ida format. - -ida_hexrays.mba_t.idb_type (variable) - function type as retrieved from the database - -ida_hexrays.mba_t.inargoff (variable) - offset of the first stack argument; after fix_scattered_movs() INARGOFF may be - less than STACKSIZE - -ida_hexrays.mba_t.insert_block (method) - insert_block(self, bblk) -> mblock_t - Insert a block in the middle of the mbl array. The very first block of microcode - must be empty, it is the entry block. The very last block of microcode must be - BLT_STOP, it is the exit block. Therefore inserting a new block before the entry - point or after the exit block is not a good idea. - - @param bblk: (C++: int) the new block will be inserted before BBLK - @return: ptr to the new block - -ida_hexrays.mba_t.is_cdtr (method) - is_cdtr(self) -> bool - -ida_hexrays.mba_t.is_ctr (method) - is_ctr(self) -> bool - -ida_hexrays.mba_t.is_dtr (method) - is_dtr(self) -> bool - -ida_hexrays.mba_t.is_pattern (method) - is_pattern(self) -> bool - -ida_hexrays.mba_t.is_snippet (method) - is_snippet(self) -> bool - -ida_hexrays.mba_t.is_stkarg (method) - is_stkarg(self, v) -> bool - - @param v: lvar_t const & - -ida_hexrays.mba_t.is_thunk (method) - is_thunk(self) -> bool - -ida_hexrays.mba_t.label (variable) - name of the function or pattern (colored) - -ida_hexrays.mba_t.loaded_gdl (method) - loaded_gdl(self) -> bool - -ida_hexrays.mba_t.lvar_names_ok (method) - lvar_names_ok(self) -> bool - -ida_hexrays.mba_t.lvars_allocated (method) - lvars_allocated(self) -> bool - -ida_hexrays.mba_t.lvars_renamed (method) - lvars_renamed(self) -> bool - -ida_hexrays.mba_t.map_fict_ea (method) - map_fict_ea(self, fict_ea) -> ea_t - Resolve a fictional address. This function provides a reverse of the mapping - made by alloc_fict_ea(). - - @param fict_ea: (C++: ea_t) fictional definition address - @return: the real instruction address - -ida_hexrays.mba_t.mark_chains_dirty (method) - mark_chains_dirty(self) - Mark the microcode use-def chains dirty. Call this function is any inter-block - data dependencies got changed because of your modifications to the microcode. - Failing to do so may cause an internal error. - -ida_hexrays.mba_t.maturity (variable) - current maturity level - -ida_hexrays.mba_t.may_refine_rettype (method) - may_refine_rettype(self) -> bool - -ida_hexrays.mba_t.minargref (variable) - The lowest stack argument location whose address was taken This location and - locations above it can be aliased It controls locations >= inargoff-shadow_args - -ida_hexrays.mba_t.minstkref (variable) - The lowest stack location whose address was taken. - -ida_hexrays.mba_t.minstkref_ea (variable) - address with lowest minstkref (for debugging) - -ida_hexrays.mba_t.natural (variable) - natural order of blocks - -ida_hexrays.mba_t.nodel_memory (variable) - global dead elimination may not delete references to this area - -ida_hexrays.mba_t.npurged (variable) - -1 - unknown - -ida_hexrays.mba_t.optimize_global (method) - optimize_global(self) -> merror_t - Optimize microcode globally. This function applies various optimization methods - until we reach the fixed point. After that it preallocates lvars unless reqmat - forbids it. - - @return: error code - -ida_hexrays.mba_t.optimize_local (method) - optimize_local(self, locopt_bits) -> int - Optimize each basic block locally - - @param locopt_bits: (C++: int) combination of Bits for optimize_local() bits - @return: number of changes. 0 means nothing changed This function is called by - the decompiler, usually there is no need to call it explicitly. - -ida_hexrays.mba_t.optimized (method) - optimized(self) -> bool - -ida_hexrays.mba_t.pfn_flags (variable) - copy of func_t::flags - -ida_hexrays.mba_t.precise_defeas (method) - precise_defeas(self) -> bool - -ida_hexrays.mba_t.prop_complex (method) - prop_complex(self) -> bool - -ida_hexrays.mba_t.propagated_asserts (method) - propagated_asserts(self) -> bool - -ida_hexrays.mba_t.qty (variable) - number of basic blocks - -ida_hexrays.mba_t.really_alloc (method) - really_alloc(self) -> bool - -ida_hexrays.mba_t.regargs_is_not_aligned (method) - regargs_is_not_aligned(self) -> bool - -ida_hexrays.mba_t.remove_block (method) - remove_block(self, blk) -> bool - Delete a block. - - @param blk: (C++: mblock_t *) block to delete - @return: true if at least one of the other blocks became empty or unreachable - -ida_hexrays.mba_t.remove_empty_and_unreachable_blocks (method) - remove_empty_and_unreachable_blocks(self) -> bool - Delete all empty and unreachable blocks. Blocks marked with MBL_KEEP won't be - deleted. - -ida_hexrays.mba_t.reqmat (variable) - required maturity level - -ida_hexrays.mba_t.retsize (variable) - size of return address in the stack frame - -ida_hexrays.mba_t.returns_fpval (method) - returns_fpval(self) -> bool - -ida_hexrays.mba_t.retvaridx (variable) - index of variable holding the return value -1 means none - -ida_hexrays.mba_t.rtype_refined (method) - rtype_refined(self) -> bool - -ida_hexrays.mba_t.save_snapshot (method) - save_snapshot(self, description) - Create and save microcode snapshot. - - @param description: (C++: const char *) char const * - -ida_hexrays.mba_t.saverest_done (method) - saverest_done(self) -> bool - -ida_hexrays.mba_t.serialize (method) - serialize(self) - Serialize mbl array into a sequence of bytes. - -ida_hexrays.mba_t.set_lvar_name (method) - set_lvar_name(self, v, name, flagbits) -> bool - - @param v: lvar_t & - @param name: char const * - @param flagbits: int - -ida_hexrays.mba_t.set_maturity (method) - set_maturity(self, mat) -> bool - Set maturity level. - - @param mat: (C++: mba_maturity_t) new maturity level - @return: true if it is time to stop analysis Plugins may use this function to - skip some parts of the analysis. The maturity level cannot be - decreased. - -ida_hexrays.mba_t.set_mba_flags (method) - set_mba_flags(self, f) - - @param f: int - -ida_hexrays.mba_t.set_mba_flags2 (method) - set_mba_flags2(self, f) - - @param f: int - -ida_hexrays.mba_t.set_nice_lvar_name (method) - set_nice_lvar_name(self, v, name) -> bool - - @param v: lvar_t & - @param name: char const * - -ida_hexrays.mba_t.set_user_lvar_name (method) - set_user_lvar_name(self, v, name) -> bool - - @param v: lvar_t & - @param name: char const * - -ida_hexrays.mba_t.shadow_args (variable) - size of shadow argument area - -ida_hexrays.mba_t.short_display (method) - short_display(self) -> bool - -ida_hexrays.mba_t.should_beautify (method) - should_beautify(self) -> bool - -ida_hexrays.mba_t.show_reduction (method) - show_reduction(self) -> bool - -ida_hexrays.mba_t.spd_adjust (variable) - If sp>0, the max positive sp value. - -ida_hexrays.mba_t.spoiled_list (variable) - MBA_SPLINFO && !final_type: info in vd format. - -ida_hexrays.mba_t.stacksize (variable) - The maximal size of the function stack including bytes allocated for outgoing - call arguments (up to retaddr) - -ida_hexrays.mba_t.std_ivls (variable) - we treat memory as consisting of 6 parts see memreg_index_t - -ida_hexrays.mba_t.stkoff_ida2vd (method) - stkoff_ida2vd(self, off) -> sval_t - - @param off: sval_t - -ida_hexrays.mba_t.stkoff_vd2ida (method) - stkoff_vd2ida(self, off) -> sval_t - - @param off: sval_t - -ida_hexrays.mba_t.term (method) - term(self) - -ida_hexrays.mba_t.tmpstk_size (variable) - size of the temporary stack part (which dynamically changes with push/pops) - -ida_hexrays.mba_t.use_frame (method) - use_frame(self) -> bool - -ida_hexrays.mba_t.use_wingraph32 (method) - use_wingraph32(self) -> bool - -ida_hexrays.mba_t.valranges_done (method) - valranges_done(self) -> bool - -ida_hexrays.mba_t.vars (variable) - local variables - -ida_hexrays.mba_t.vd2idaloc (method) - vd2idaloc(self, loc, width, spd) -> argloc_t - - @param loc: vdloc_t const & - @param width: int - @param spd: sval_t - - vd2idaloc(self, loc, width) -> argloc_t - - @param loc: vdloc_t const & - @param width: int - -ida_hexrays.mba_t.verify (method) - verify(self, always) - Verify microcode consistency. - - @param always: (C++: bool) if false, the check will be performed only if ida runs under - debugger If any inconsistency is discovered, an internal error - will be generated. We strongly recommend you to call this - function before returing control to the decompiler from your - callbacks, in the case if you modified the microcode. If the - microcode is inconsistent, this function will generate an - internal error. We provide the source code of this function in - the plugins/hexrays_sdk/verifier directory for your reference. - -ida_hexrays.mba_t.write_to_const_detected (method) - write_to_const_detected(self) -> bool - -ida_hexrays.mba_t_deserialize (function) - mba_t_deserialize(bytes) -> mba_t - - @param bytes: uchar const * - -ida_hexrays.mbl_graph_t (class) - Proxy of C++ mbl_graph_t class. - -ida_hexrays.mbl_graph_t.__init__ (method) - -ida_hexrays.mbl_graph_t.get_chain_stamp (method) - get_chain_stamp(self) -> int - -ida_hexrays.mbl_graph_t.get_du (method) - get_du(self, gctype) -> graph_chains_t - Get def-use chains. - - @param gctype: (C++: gctype_t) enum gctype_t - -ida_hexrays.mbl_graph_t.get_mblock (method) - get_mblock(self, n) -> mblock_t - - @param n: int - -ida_hexrays.mbl_graph_t.get_ud (method) - get_ud(self, gctype) -> graph_chains_t - Get use-def chains. - - @param gctype: (C++: gctype_t) enum gctype_t - -ida_hexrays.mbl_graph_t.is_du_chain_dirty (method) - is_du_chain_dirty(self, gctype) -> bool - Is the def-use chain of the specified kind dirty? - - @param gctype: (C++: gctype_t) enum gctype_t - -ida_hexrays.mbl_graph_t.is_redefined_globally (method) - is_redefined_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool - Is LIST redefined in the graph? - - @param list: (C++: const mlist_t &) mlist_t const & - @param b1: (C++: int) - @param b2: (C++: int) - @param m1: (C++: const minsn_t *) minsn_t const * - @param m2: (C++: const minsn_t *) minsn_t const * - @param maymust: (C++: maymust_t) - -ida_hexrays.mbl_graph_t.is_ud_chain_dirty (method) - is_ud_chain_dirty(self, gctype) -> bool - Is the use-def chain of the specified kind dirty? - - @param gctype: (C++: gctype_t) enum gctype_t - -ida_hexrays.mbl_graph_t.is_used_globally (method) - is_used_globally(self, list, b1, b2, m1, m2, maymust=MAY_ACCESS) -> bool - Is LIST used in the graph? - - @param list: (C++: const mlist_t &) mlist_t const & - @param b1: (C++: int) - @param b2: (C++: int) - @param m1: (C++: const minsn_t *) minsn_t const * - @param m2: (C++: const minsn_t *) minsn_t const * - @param maymust: (C++: maymust_t) - -ida_hexrays.mblock_t (class) - Proxy of C++ mblock_t class. - -ida_hexrays.mblock_t.__init__ (method) - -ida_hexrays.mblock_t._print (method) - _print(self, vp) - - Parameters - ---------- - vp: vd_printer_t & - -ida_hexrays.mblock_t.append_def_list (method) - append_def_list(self, list, op, maymust) - Append def-list of an operand. This function calculates list of locations that - may or must be modified by the operand and appends it to LIST. - - @param list: (C++: mlist_t *) ptr to the output buffer. we will append to it. - @param op: (C++: const mop_t &) operand to calculate the def list of - @param maymust: (C++: maymust_t) should we calculate 'may-def' or 'must-def' list? see maymust_t - for more details. - -ida_hexrays.mblock_t.append_use_list (method) - append_use_list(self, list, op, maymust, mask=bitrange_t(0, USHRT_MAX)) - Append use-list of an operand. This function calculates list of locations that - may or must be used by the operand and appends it to LIST. - - @param list: (C++: mlist_t *) ptr to the output buffer. we will append to it. - @param op: (C++: const mop_t &) operand to calculate the use list of - @param maymust: (C++: maymust_t) should we calculate 'may-use' or 'must-use' list? see maymust_t - for more details. - @param mask: (C++: bitrange_t) if only part of the operand should be considered, a bitmask can be - used to specify which part. example: op=AX,mask=0xFF means that we - will consider only AL. - -ida_hexrays.mblock_t.build_def_list (method) - build_def_list(self, ins, maymust) -> mlist_t - Build def-list of an instruction. This function calculates list of locations - that may or must be modified by the instruction. Examples: "stx ebx.4, ds.2, - eax.4", may-list: all aliasable memory "stx ebx.4, ds.2, eax.4", must-list: - empty Since STX uses EAX for indirect access, it may modify any aliasable - memory. On the other hand, we cannot tell for sure which memory cells will be - modified, this is why the must-list is empty. - - @param ins: (C++: const minsn_t &) instruction to calculate the def list of - @param maymust: (C++: maymust_t) should we calculate 'may-def' or 'must-def' list? see maymust_t - for more details. - @return: the calculated def-list - -ida_hexrays.mblock_t.build_lists (method) - build_lists(self, kill_deads) -> int - Build def-use lists and eliminate deads. - - @param kill_deads: (C++: bool) do delete dead instructions? - @return: the number of eliminated instructions Better mblock_t::call - make_lists_ready() rather than this function. - -ida_hexrays.mblock_t.build_use_list (method) - build_use_list(self, ins, maymust) -> mlist_t - Build use-list of an instruction. This function calculates list of locations - that may or must be used by the instruction. Examples: "ldx ds.2, eax.4, ebx.4", - may-list: all aliasable memory "ldx ds.2, eax.4, ebx.4", must-list: empty Since - LDX uses EAX for indirect access, it may access any aliasable memory. On the - other hand, we cannot tell for sure which memory cells will be accessed, this is - why the must-list is empty. - - @param ins: (C++: const minsn_t &) instruction to calculate the use list of - @param maymust: (C++: maymust_t) should we calculate 'may-use' or 'must-use' list? see maymust_t - for more details. - @return: the calculated use-list - -ida_hexrays.mblock_t.dead_at_start (variable) - data that is dead at the block entry - -ida_hexrays.mblock_t.dnu (variable) - data that is defined but not used in the block - -ida_hexrays.mblock_t.dump (method) - dump(self) - Dump block info. This function is useful for debugging, see mba_t::dump for info - -ida_hexrays.mblock_t.dump_block (method) - dump_block(self, title) - - @param title: char const * - -ida_hexrays.mblock_t.empty (method) - empty(self) -> bool - -ida_hexrays.mblock_t.end (variable) - end address note: we cannot rely on start/end addresses very much because - instructions are propagated between blocks - -ida_hexrays.mblock_t.find_access (method) - find_access(self, op, parent, mend, fdflags) -> minsn_t - Find the instruction that accesses the specified operand. This function search - inside one block. - - @param op: (C++: const mop_t &) operand to search for - @param parent: (C++: minsn_t **) ptr to ptr to a top level instruction. denotes the beginning of - the search range. - @param mend: (C++: const minsn_t *) end instruction of the range (must be a top level insn) mend is - excluded from the range. it can be specified as nullptr. parent and - mend must belong to the same block. - @param fdflags: (C++: int) combination of bits for mblock_t::find_access bits - @return: the instruction that accesses the operand. this instruction may be a - sub-instruction. to find out the top level instruction, check out - *p_i1. nullptr means 'not found'. - -ida_hexrays.mblock_t.find_def (method) - find_def(self, op, p_i1, i2, fdflags) -> minsn_t - - @param op: mop_t const & - @param p_i1: minsn_t ** - @param i2: minsn_t const * - @param fdflags: int - -ida_hexrays.mblock_t.find_first_use (method) - find_first_use(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t - - @param list: mlist_t * - @param i1: minsn_t * - @param i2: minsn_t const * - @param maymust: maymust_t - -ida_hexrays.mblock_t.find_redefinition (method) - find_redefinition(self, list, i1, i2, maymust=MAY_ACCESS) -> minsn_t - - @param list: mlist_t const & - @param i1: minsn_t * - @param i2: minsn_t const * - @param maymust: maymust_t - -ida_hexrays.mblock_t.find_use (method) - find_use(self, op, p_i1, i2, fdflags) -> minsn_t - - @param op: mop_t const & - @param p_i1: minsn_t ** - @param i2: minsn_t const * - @param fdflags: int - -ida_hexrays.mblock_t.flags (variable) - combination of Basic block properties bits - -ida_hexrays.mblock_t.for_all_insns (method) - for_all_insns(self, mv) -> int - Visit all instructions. This function visits subinstructions too. - - @param mv: (C++: minsn_visitor_t &) instruction visitor - @return: zero or the value returned by mv.visit_insn() See also - mba_t::for_all_topinsns() - -ida_hexrays.mblock_t.for_all_ops (method) - for_all_ops(self, mv) -> int - Visit all operands. This function visit subinstruction operands too. - - @param mv: (C++: mop_visitor_t &) operand visitor - @return: zero or the value returned by mv.visit_mop() - -ida_hexrays.mblock_t.for_all_uses (method) - for_all_uses(self, list, i1, i2, mmv) -> int - Visit all operands that use LIST. - - @param list: (C++: mlist_t *) ptr to the list of locations. it may be modified: parts that get - redefined by the instructions in [i1,i2) will be deleted. - @param i1: (C++: minsn_t *) starting instruction. must be a top level insn. - @param i2: (C++: minsn_t *) ending instruction (excluded). must be a top level insn. - @param mmv: (C++: mlist_mop_visitor_t &) operand visitor - @return: zero or the value returned by mmv.visit_mop() - -ida_hexrays.mblock_t.get_reginsn_qty (method) - get_reginsn_qty(self) -> size_t - Calculate number of regular instructions in the block. Assertions are skipped by - this function. - - @return: Number of non-assertion instructions in the block. - -ida_hexrays.mblock_t.get_valranges (method) - get_valranges(self, res, vivl, vrflags) -> bool - Find possible values for an instruction. - - @param res: (C++: valrng_t *) set of value ranges - @param vivl: (C++: const vivl_t &) what to search for - @param vrflags: (C++: int) combination of bits for get_valranges bits - get_valranges(self, res, vivl, m, vrflags) -> bool - - @param res: valrng_t * - @param vivl: vivl_t const & - @param m: minsn_t const * - @param vrflags: int - -ida_hexrays.mblock_t.head (variable) - pointer to the first instruction of the block - -ida_hexrays.mblock_t.insert_into_block (method) - insert_into_block(self, nm, om) -> minsn_t - Insert instruction into the doubly linked list - - @param nm: (C++: minsn_t *) new instruction - @param om: (C++: minsn_t *) existing instruction, part of the doubly linked list if nullptr, then - the instruction will be inserted at the beginning of the list NM will - be inserted immediately after OM - @return: pointer to NM - -ida_hexrays.mblock_t.is_branch (method) - is_branch(self) -> bool - -ida_hexrays.mblock_t.is_call_block (method) - is_call_block(self) -> bool - -ida_hexrays.mblock_t.is_nway (method) - is_nway(self) -> bool - -ida_hexrays.mblock_t.is_redefined (method) - is_redefined(self, list, i1, i2, maymust=MAY_ACCESS) -> bool - Is the list redefined by the specified instructions? - - @param list: (C++: const mlist_t &) list of locations to check. - @param i1: (C++: const minsn_t *) starting instruction of the range (must be a top level insn) - @param i2: (C++: const minsn_t *) end instruction of the range (must be a top level insn) i2 is - excluded from the range. it can be specified as nullptr. i1 and i2 - must belong to the same block. - @param maymust: (C++: maymust_t) should we search in 'may-access' or 'must-access' mode? - -ida_hexrays.mblock_t.is_rhs_redefined (method) - is_rhs_redefined(self, ins, i1, i2) -> bool - Is the right hand side of the instruction redefined the insn range? "right hand - side" corresponds to the source operands of the instruction. - - @param ins: (C++: const minsn_t *) instruction to consider - @param i1: (C++: const minsn_t *) starting instruction of the range (must be a top level insn) - @param i2: (C++: const minsn_t *) end instruction of the range (must be a top level insn) i2 is - excluded from the range. it can be specified as nullptr. i1 and i2 - must belong to the same block. - -ida_hexrays.mblock_t.is_simple_goto_block (method) - is_simple_goto_block(self) -> bool - -ida_hexrays.mblock_t.is_simple_jcnd_block (method) - is_simple_jcnd_block(self) -> bool - -ida_hexrays.mblock_t.is_unknown_call (method) - is_unknown_call(self) -> bool - -ida_hexrays.mblock_t.is_used (method) - is_used(self, list, i1, i2, maymust=MAY_ACCESS) -> bool - Is the list used by the specified instruction range? - - @param list: (C++: mlist_t *) list of locations. LIST may be modified by the function: redefined - locations will be removed from it. - @param i1: (C++: const minsn_t *) starting instruction of the range (must be a top level insn) - @param i2: (C++: const minsn_t *) end instruction of the range (must be a top level insn) i2 is - excluded from the range. it can be specified as nullptr. i1 and i2 - must belong to the same block. - @param maymust: (C++: maymust_t) should we search in 'may-access' or 'must-access' mode? - -ida_hexrays.mblock_t.lists_dirty (method) - lists_dirty(self) -> bool - -ida_hexrays.mblock_t.lists_ready (method) - lists_ready(self) -> bool - -ida_hexrays.mblock_t.make_lists_ready (method) - make_lists_ready(self) -> int - -ida_hexrays.mblock_t.make_nop (method) - make_nop(self, m) - Erase the instruction (convert it to nop) and mark the lists dirty. This is the - recommended function to use because it also marks the block use-def lists dirty. - - @param m: (C++: minsn_t *) - -ida_hexrays.mblock_t.mark_lists_dirty (method) - mark_lists_dirty(self) - -ida_hexrays.mblock_t.maxbsp (variable) - maximal sp value in the block (0...stacksize) - -ida_hexrays.mblock_t.maybdef (variable) - data that may be defined by the block - -ida_hexrays.mblock_t.maybuse (variable) - data that may be used by the block - -ida_hexrays.mblock_t.mba (variable) - the parent micro block array - -ida_hexrays.mblock_t.minbargref (variable) - the same for arguments - -ida_hexrays.mblock_t.minbstkref (variable) - lowest stack location accessible with indirect addressing (offset from the stack - bottom) initially it is 0 (not computed) - -ida_hexrays.mblock_t.mustbdef (variable) - data that must be defined by the block - -ida_hexrays.mblock_t.mustbuse (variable) - data that must be used by the block - -ida_hexrays.mblock_t.needs_propagation (method) - needs_propagation(self) -> bool - -ida_hexrays.mblock_t.nextb (variable) - next block in the doubly linked list - -ida_hexrays.mblock_t.npred (method) - npred(self) -> int - Get number of block predecessors. - -ida_hexrays.mblock_t.nsucc (method) - nsucc(self) -> int - Get number of block successors. - -ida_hexrays.mblock_t.optimize_block (method) - optimize_block(self) -> int - Optimize a basic block. Usually there is no need to call this function - explicitly because the decompiler will call it itself if optinsn_t::func or - optblock_t::func return non-zero. - - @return: number of changes made to the block - -ida_hexrays.mblock_t.optimize_insn (method) - optimize_insn(self, m, optflags=0x0002|0x0004) -> int - Optimize one instruction in the context of the block. - - @param m: (C++: minsn_t *) pointer to a top level instruction - @param optflags: (C++: int) combination of optimization flags bits - @return: number of changes made to the block This function may change other - instructions in the block too. However, it will not destroy top level - instructions (it may convert them to nop's). This function performs - only intrablock modifications. See also minsn_t::optimize_solo() - -ida_hexrays.mblock_t.optimize_useless_jump (method) - optimize_useless_jump(self) -> int - Remove a jump at the end of the block if it is useless. This function preserves - any side effects when removing a useless jump. Both conditional and - unconditional jumps are handled (and jtbl too). This function deletes useless - jumps, not only replaces them with a nop. (please note that \optimize_insn does - not handle useless jumps). - - @return: number of changes made to the block - -ida_hexrays.mblock_t.pred (method) - pred(self, n) -> int - - @param n: int - -ida_hexrays.mblock_t.preds (method) - Iterates the list of predecessor blocks - -ida_hexrays.mblock_t.predset (variable) - control flow graph: list of our predecessors use npred() and pred() to access it - -ida_hexrays.mblock_t.prevb (variable) - previous block in the doubly linked list - -ida_hexrays.mblock_t.remove_from_block (method) - remove_from_block(self, m) -> minsn_t - Remove instruction from the doubly linked list - - @param m: (C++: minsn_t *) instruction to remove The removed instruction is not deleted, the - caller gets its ownership - @return: pointer to the next instruction - -ida_hexrays.mblock_t.request_demote64 (method) - request_demote64(self) - -ida_hexrays.mblock_t.request_propagation (method) - request_propagation(self) - -ida_hexrays.mblock_t.serial (variable) - block number - -ida_hexrays.mblock_t.start (variable) - start address - -ida_hexrays.mblock_t.succ (method) - succ(self, n) -> int - - @param n: int - -ida_hexrays.mblock_t.succs (method) - Iterates the list of successor blocks - -ida_hexrays.mblock_t.succset (variable) - control flow graph: list of our successors use nsucc() and succ() to access it - -ida_hexrays.mblock_t.tail (variable) - pointer to the last instruction of the block - -ida_hexrays.mblock_t.type (variable) - block type (BLT_NONE - not computed yet) - -ida_hexrays.mcallarg_t (class) - Proxy of C++ mcallarg_t class. - -ida_hexrays.mcallarg_t.__init__ (method) - __init__(self) -> mcallarg_t - __init__(self, rarg) -> mcallarg_t - - @param rarg: mop_t const & - -ida_hexrays.mcallarg_t._print (method) - _print(self, shins_flags=0x04|0x02) - - Parameters - ---------- - shins_flags: int - -ida_hexrays.mcallarg_t.argloc (variable) - ida argloc - -ida_hexrays.mcallarg_t.copy_mop (method) - copy_mop(self, op) - - @param op: mop_t const & - -ida_hexrays.mcallarg_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.mcallarg_t.ea (variable) - address where the argument was initialized. BADADDR means unknown. - -ida_hexrays.mcallarg_t.flags (variable) - FAI_... - -ida_hexrays.mcallarg_t.make_int (method) - make_int(self, val, val_ea, opno=0) - - @param val: int - @param val_ea: ea_t - @param opno: int - -ida_hexrays.mcallarg_t.make_uint (method) - make_uint(self, val, val_ea, opno=0) - - @param val: int - @param val_ea: ea_t - @param opno: int - -ida_hexrays.mcallarg_t.name (variable) - formal argument name - -ida_hexrays.mcallarg_t.set_regarg (method) - set_regarg(self, mr, sz, tif) - - @param mr: mreg_t - @param sz: int - @param tif: tinfo_t const & - - set_regarg(self, mr, tif) - - @param mr: mreg_t - @param tif: tinfo_t const & - - set_regarg(self, mr, dt, sign=type_unsigned) - - @param mr: mreg_t - @param dt: char - @param sign: type_sign_t - -ida_hexrays.mcallarg_t.type (variable) - formal argument type - -ida_hexrays.mcallargs_t (class) - Proxy of C++ qvector< mcallarg_t > class. - -ida_hexrays.mcallargs_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< mcallarg_t > const & - -ida_hexrays.mcallargs_t.__getitem__ (method) - __getitem__(self, i) -> mcallarg_t - - @param i: size_t - -ida_hexrays.mcallargs_t.__init__ (method) - __init__(self) -> mcallargs_t - __init__(self, x) -> mcallargs_t - - @param x: qvector< mcallarg_t > const & - -ida_hexrays.mcallargs_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.mcallargs_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< mcallarg_t > const & - -ida_hexrays.mcallargs_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: mcallarg_t const & - -ida_hexrays.mcallargs_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: mcallarg_t const & - -ida_hexrays.mcallargs_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: mcallarg_t const & - -ida_hexrays.mcallargs_t.at (method) - at(self, _idx) -> mcallarg_t - - @param _idx: size_t - -ida_hexrays.mcallargs_t.begin (method) - begin(self) -> mcallarg_t - -ida_hexrays.mcallargs_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.mcallargs_t.clear (method) - clear(self) - -ida_hexrays.mcallargs_t.empty (method) - empty(self) -> bool - -ida_hexrays.mcallargs_t.end (method) - end(self) -> mcallarg_t - -ida_hexrays.mcallargs_t.erase (method) - erase(self, it) -> mcallarg_t - - @param it: qvector< mcallarg_t >::iterator - - erase(self, first, last) -> mcallarg_t - - @param first: qvector< mcallarg_t >::iterator - @param last: qvector< mcallarg_t >::iterator - -ida_hexrays.mcallargs_t.extract (method) - extract(self) -> mcallarg_t - -ida_hexrays.mcallargs_t.find (method) - find(self, x) -> mcallarg_t - - @param x: mcallarg_t const & - -ida_hexrays.mcallargs_t.grow (method) - grow(self, x=mcallarg_t()) - - @param x: mcallarg_t const & - -ida_hexrays.mcallargs_t.has (method) - has(self, x) -> bool - - @param x: mcallarg_t const & - -ida_hexrays.mcallargs_t.inject (method) - inject(self, s, len) - - @param s: mcallarg_t * - @param len: size_t - -ida_hexrays.mcallargs_t.insert (method) - insert(self, it, x) -> mcallarg_t - - @param it: qvector< mcallarg_t >::iterator - @param x: mcallarg_t const & - -ida_hexrays.mcallargs_t.pop_back (method) - pop_back(self) - -ida_hexrays.mcallargs_t.push_back (method) - push_back(self, x) - - @param x: mcallarg_t const & - - push_back(self) -> mcallarg_t - -ida_hexrays.mcallargs_t.qclear (method) - qclear(self) - -ida_hexrays.mcallargs_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.mcallargs_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: mcallarg_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.mcallargs_t.size (method) - size(self) -> size_t - -ida_hexrays.mcallargs_t.swap (method) - swap(self, r) - - @param r: qvector< mcallarg_t > & - -ida_hexrays.mcallargs_t.truncate (method) - truncate(self) - -ida_hexrays.mcallinfo_t (class) - Proxy of C++ mcallinfo_t class. - -ida_hexrays.mcallinfo_t.__init__ (method) - __init__(self, _callee=BADADDR, _sargs=0) -> mcallinfo_t - - @param _callee: ea_t - @param _sargs: int - -ida_hexrays.mcallinfo_t._print (method) - _print(self, size=-1, shins_flags=0x04|0x02) - - Parameters - ---------- - size: int - shins_flags: int - -ida_hexrays.mcallinfo_t.args (variable) - call arguments - -ida_hexrays.mcallinfo_t.call_spd (variable) - sp value at call insn - -ida_hexrays.mcallinfo_t.callee (variable) - address of the called function, if known - -ida_hexrays.mcallinfo_t.cc (variable) - calling convention - -ida_hexrays.mcallinfo_t.dead_regs (variable) - registers defined by the function but never used. upon propagation we do the - following: - * dead_regs += return_regs - * retregs.clear() since the call is propagated - -ida_hexrays.mcallinfo_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.mcallinfo_t.flags (variable) - combination of Call properties... bits - -ida_hexrays.mcallinfo_t.fti_attrs (variable) - extended function attributes - -ida_hexrays.mcallinfo_t.get_type (method) - get_type(self) -> tinfo_t - -ida_hexrays.mcallinfo_t.is_vararg (method) - is_vararg(self) -> bool - -ida_hexrays.mcallinfo_t.lexcompare (method) - lexcompare(self, f) -> int - - @param f: mcallinfo_t const & - -ida_hexrays.mcallinfo_t.pass_regs (variable) - passthrough registers: registers that depend on input values (subset of spoiled) - -ida_hexrays.mcallinfo_t.retregs (variable) - return register(s) (e.g., AX, AX:DX, etc.) this vector is built from return_regs - -ida_hexrays.mcallinfo_t.return_argloc (variable) - location of the returned value - -ida_hexrays.mcallinfo_t.return_regs (variable) - list of values returned by the function - -ida_hexrays.mcallinfo_t.return_type (variable) - type of the returned value - -ida_hexrays.mcallinfo_t.role (variable) - function role - -ida_hexrays.mcallinfo_t.set_type (method) - set_type(self, type) -> bool - - @param type: tinfo_t const & - -ida_hexrays.mcallinfo_t.solid_args (variable) - number of solid args. there may be variadic args in addtion - -ida_hexrays.mcallinfo_t.spoiled (variable) - list of spoiled locations (includes return_regs) - -ida_hexrays.mcallinfo_t.stkargs_top (variable) - first offset past stack arguments - -ida_hexrays.mcallinfo_t.visible_memory (variable) - what memory is visible to the call? - -ida_hexrays.mcases_t (class) - Proxy of C++ mcases_t class. - -ida_hexrays.mcases_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: mcases_t const & - -ida_hexrays.mcases_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: mcases_t const & - -ida_hexrays.mcases_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: mcases_t const & - -ida_hexrays.mcases_t.__init__ (method) - __init__(self) -> mcases_t - -ida_hexrays.mcases_t.__le__ (method) - __le__(self, r) -> bool - - @param r: mcases_t const & - -ida_hexrays.mcases_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: mcases_t const & - -ida_hexrays.mcases_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: mcases_t const & - -ida_hexrays.mcases_t._print (method) - _print(self) - -ida_hexrays.mcases_t.compare (method) - compare(self, r) -> int - - @param r: mcases_t const & - -ida_hexrays.mcases_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.mcases_t.empty (method) - empty(self) -> bool - -ida_hexrays.mcases_t.resize (method) - resize(self, s) - - @param s: int - -ida_hexrays.mcases_t.size (method) - size(self) -> size_t - -ida_hexrays.mcases_t.swap (method) - swap(self, r) - - @param r: mcases_t & - -ida_hexrays.mcases_t.targets (variable) - target block numbers - -ida_hexrays.mcases_t.values (variable) - expression values for each target - -ida_hexrays.mcode_modifies_d (function) - mcode_modifies_d(mcode) -> bool - - @param mcode: enum mcode_t - -ida_hexrays.microcode_filter_t (class) - Proxy of C++ microcode_filter_t class. - -ida_hexrays.microcode_filter_t.__disown__ (method) - -ida_hexrays.microcode_filter_t.__init__ (method) - __init__(self) -> microcode_filter_t - - @param self: PyObject * - -ida_hexrays.microcode_filter_t.apply (method) - apply(self, cdg) -> merror_t - generate microcode for an instruction - - @param cdg: (C++: codegen_t &) - @return: MERR_... code: MERR_OK - user-defined microcode generated, go to the - next instruction MERR_INSN - not generated - the caller should try the - standard way else - error - -ida_hexrays.microcode_filter_t.match (method) - match(self, cdg) -> bool - check if the filter object is to be applied - - @param cdg: (C++: codegen_t &) - @return: success - -ida_hexrays.minsn_t (class) - Proxy of C++ minsn_t class. - -ida_hexrays.minsn_t.__dbg_get_meminfo (method) - __dbg_get_meminfo(self) -> qstring - -ida_hexrays.minsn_t.__dbg_get_registered_kind (method) - __dbg_get_registered_kind(self) -> int - -ida_hexrays.minsn_t.__init__ (method) - __init__(self, _ea) -> minsn_t - - @param _ea: ea_t - - __init__(self, m) -> minsn_t - - @param m: minsn_t const & - -ida_hexrays.minsn_t.__lt__ (method) - __lt__(self, ri) -> bool - - @param ri: minsn_t const & - -ida_hexrays.minsn_t._acquire_ownership (method) - -ida_hexrays.minsn_t._deregister (method) - _deregister(self) - -ida_hexrays.minsn_t._ensure_cond (method) - -ida_hexrays.minsn_t._ensure_no_obj (method) - -ida_hexrays.minsn_t._ensure_ownership_transferrable (method) - -ida_hexrays.minsn_t._make_nop (method) - _make_nop(self) - -ida_hexrays.minsn_t._maybe_disown_and_deregister (method) - -ida_hexrays.minsn_t._meminfo (method) - -ida_hexrays.minsn_t._obj_id (method) - _obj_id(self) -> PyObject * - -ida_hexrays.minsn_t._own_and_register (method) - -ida_hexrays.minsn_t._print (method) - _print(self, shins_flags=0x04|0x02) - - Parameters - ---------- - shins_flags: int - -ida_hexrays.minsn_t._register (method) - _register(self) - -ida_hexrays.minsn_t.clr_assert (method) - clr_assert(self) - -ida_hexrays.minsn_t.clr_combinable (method) - clr_combinable(self) - -ida_hexrays.minsn_t.clr_combined (method) - clr_combined(self) - -ida_hexrays.minsn_t.clr_fpinsn (method) - clr_fpinsn(self) - -ida_hexrays.minsn_t.clr_ignlowsrc (method) - clr_ignlowsrc(self) - -ida_hexrays.minsn_t.clr_multimov (method) - clr_multimov(self) - -ida_hexrays.minsn_t.clr_noret_icall (method) - clr_noret_icall(self) - -ida_hexrays.minsn_t.clr_propagatable (method) - clr_propagatable(self) - -ida_hexrays.minsn_t.clr_tailcall (method) - clr_tailcall(self) - -ida_hexrays.minsn_t.contains_call (method) - contains_call(self, with_helpers=False) -> bool - Does the instruction contain a call? - - @param with_helpers: (C++: bool) - -ida_hexrays.minsn_t.contains_opcode (method) - contains_opcode(self, mcode) -> bool - Does the instruction have the specified opcode? This function searches - subinstructions as well. - - @param mcode: (C++: mcode_t) opcode to search for. - -ida_hexrays.minsn_t.d (variable) - destination operand - -ida_hexrays.minsn_t.deserialize (method) - deserialize(self, bytes, format_version) -> bool - Deserialize an instruction - - @param bytes: (C++: const uchar *) pointer to serialized data - @param format_version: (C++: int) serialization format version. this value is returned by - minsn_t::serialize() - @return: success - -ida_hexrays.minsn_t.dstr (method) - dstr(self) -> char const * - Get displayable text without tags in a static buffer. - -ida_hexrays.minsn_t.ea (variable) - instruction address - -ida_hexrays.minsn_t.equal_insns (method) - equal_insns(self, m, eqflags) -> bool - Compare instructions. This is the main comparison function for instructions. - - @param m: (C++: const minsn_t &) instruction to compare with - @param eqflags: (C++: int) combination of comparison bits bits - -ida_hexrays.minsn_t.find_call (method) - find_call(self, with_helpers=False) -> minsn_t - Find a call instruction. Check for the current instruction and its - subinstructions. - - @param with_helpers: (C++: bool) consider helper calls as well? - -ida_hexrays.minsn_t.find_ins_op (method) - find_ins_op(self, op=m_nop) -> minsn_t - - @param op: enum mcode_t - -ida_hexrays.minsn_t.find_num_op (method) - find_num_op(self) -> mop_t - -ida_hexrays.minsn_t.find_opcode (method) - find_opcode(self, mcode) -> minsn_t - - @param mcode: enum mcode_t - -ida_hexrays.minsn_t.for_all_insns (method) - for_all_insns(self, mv) -> int - Visit all instructions. This function visits the instruction itself and all its - subinstructions. - - @param mv: (C++: minsn_visitor_t &) instruction visitor - @return: non-zero value returned by mv.visit_mop() or zero - -ida_hexrays.minsn_t.for_all_ops (method) - for_all_ops(self, mv) -> int - Visit all instruction operands. This function visits subinstruction operands as - well. - - @param mv: (C++: mop_visitor_t &) operand visitor - @return: non-zero value returned by mv.visit_mop() or zero - -ida_hexrays.minsn_t.get_role (method) - get_role(self) -> funcrole_t - Get the function role of a call. - -ida_hexrays.minsn_t.get_split_size (method) - get_split_size(self) -> int - -ida_hexrays.minsn_t.has_side_effects (method) - has_side_effects(self, include_ldx_and_divs=False) -> bool - Does the instruction have a side effect? - - @param include_ldx_and_divs: (C++: bool) consider ldx/div/mod as having side effects? stx is - always considered as having side effects. Apart - from ldx/std only call may have side effects. - -ida_hexrays.minsn_t.iprops (variable) - combination of instruction property bits bits - -ida_hexrays.minsn_t.is_after (method) - is_after(self, m) -> bool - Is the instruction after the specified one? - - @param m: (C++: const minsn_t *) the instruction to compare against in the list - -ida_hexrays.minsn_t.is_alloca (method) - is_alloca(self) -> bool - -ida_hexrays.minsn_t.is_assert (method) - is_assert(self) -> bool - -ida_hexrays.minsn_t.is_between (method) - is_between(self, m1, m2) -> bool - Is the instruction in the specified range of instructions? - - @param m1: (C++: const minsn_t *) beginning of the range in the doubly linked list - @param m2: (C++: const minsn_t *) end of the range in the doubly linked list (excluded, may be nullptr) - This function assumes that m1 and m2 belong to the same basic block - and they are top level instructions. - -ida_hexrays.minsn_t.is_bswap (method) - is_bswap(self) -> bool - -ida_hexrays.minsn_t.is_cleaning_pop (method) - is_cleaning_pop(self) -> bool - -ida_hexrays.minsn_t.is_combinable (method) - is_combinable(self) -> bool - -ida_hexrays.minsn_t.is_combined (method) - is_combined(self) -> bool - -ida_hexrays.minsn_t.is_extstx (method) - is_extstx(self) -> bool - -ida_hexrays.minsn_t.is_farcall (method) - is_farcall(self) -> bool - -ida_hexrays.minsn_t.is_fpinsn (method) - is_fpinsn(self) -> bool - -ida_hexrays.minsn_t.is_helper (method) - is_helper(self, name) -> bool - Is a helper call with the specified name? Helper calls usually have well-known - function names (see Well known function names) but they may have any other name. - The decompiler does not assume any special meaning for non-well-known names. - - @param name: (C++: const char *) char const * - -ida_hexrays.minsn_t.is_ignlowsrc (method) - is_ignlowsrc(self) -> bool - -ida_hexrays.minsn_t.is_inverted_jx (method) - is_inverted_jx(self) -> bool - -ida_hexrays.minsn_t.is_like_move (method) - is_like_move(self) -> bool - -ida_hexrays.minsn_t.is_mbarrier (method) - is_mbarrier(self) -> bool - -ida_hexrays.minsn_t.is_memcpy (method) - is_memcpy(self) -> bool - -ida_hexrays.minsn_t.is_memset (method) - is_memset(self) -> bool - -ida_hexrays.minsn_t.is_mov (method) - is_mov(self) -> bool - -ida_hexrays.minsn_t.is_multimov (method) - is_multimov(self) -> bool - -ida_hexrays.minsn_t.is_noret_call (method) - is_noret_call(self, flags=0) -> bool - Is a non-returing call? - - @param flags: (C++: int) combination of NORET_... bits - -ida_hexrays.minsn_t.is_optional (method) - is_optional(self) -> bool - -ida_hexrays.minsn_t.is_persistent (method) - is_persistent(self) -> bool - -ida_hexrays.minsn_t.is_propagatable (method) - is_propagatable(self) -> bool - -ida_hexrays.minsn_t.is_readflags (method) - is_readflags(self) -> bool - -ida_hexrays.minsn_t.is_tailcall (method) - is_tailcall(self) -> bool - -ida_hexrays.minsn_t.is_unknown_call (method) - is_unknown_call(self) -> bool - Is an unknown call? Unknown calls are calls without the argument list - (mcallinfo_t). Usually the argument lists are determined by - mba_t::analyze_calls(). Unknown calls exist until the MMAT_CALLS maturity level. - See also mblock_t::is_call_block - -ida_hexrays.minsn_t.is_wild_match (method) - is_wild_match(self) -> bool - -ida_hexrays.minsn_t.l (variable) - left operand - -ida_hexrays.minsn_t.lexcompare (method) - lexcompare(self, ri) -> int - - @param ri: minsn_t const & - -ida_hexrays.minsn_t.may_use_aliased_memory (method) - may_use_aliased_memory(self) -> bool - Is it possible for the instruction to use aliased memory? - -ida_hexrays.minsn_t.modifies_d (method) - modifies_d(self) -> bool - Does the instruction modify its 'd' operand? Some instructions (e.g. m_stx) do - not modify the 'd' operand. - -ida_hexrays.minsn_t.modifies_pair_mop (method) - modifies_pair_mop(self) -> bool - -ida_hexrays.minsn_t.next (variable) - next insn in doubly linked list. check also nexti() - -ida_hexrays.minsn_t.opcode (variable) - instruction opcode - -ida_hexrays.minsn_t.optimize_solo (method) - optimize_solo(self, optflags=0) -> int - Optimize one instruction without context. This function does not have access to - the instruction context (the previous and next instructions in the list, the - block number, etc). It performs only basic optimizations that are available - without this info. - - @param optflags: (C++: int) combination of optimization flags bits - @return: number of changes, 0-unchanged See also mblock_t::optimize_insn() - -ida_hexrays.minsn_t.optimize_subtree (method) - optimize_subtree(self, blk, top, parent, converted_call, optflags=0x0002) -> int - Optimize instruction in its context. Do not use this function, use - mblock_t::optimize() - - @param blk: (C++: mblock_t *) - @param top: (C++: minsn_t *) - @param parent: (C++: minsn_t *) - @param converted_call: (C++: ea_t *) - @param optflags: (C++: int) - -ida_hexrays.minsn_t.prev (variable) - prev insn in doubly linked list. check also previ() - -ida_hexrays.minsn_t.r (variable) - right operand - -ida_hexrays.minsn_t.replace_by (method) - -ida_hexrays.minsn_t.serialize (method) - serialize(self, b) -> int - Serialize an instruction - - @param b: (C++: bytevec_t *) the output buffer - @return: the serialization format that was used to store info - -ida_hexrays.minsn_t.set_assert (method) - set_assert(self) - -ida_hexrays.minsn_t.set_cleaning_pop (method) - set_cleaning_pop(self) - -ida_hexrays.minsn_t.set_combinable (method) - set_combinable(self) - -ida_hexrays.minsn_t.set_extstx (method) - set_extstx(self) - -ida_hexrays.minsn_t.set_farcall (method) - set_farcall(self) - -ida_hexrays.minsn_t.set_fpinsn (method) - set_fpinsn(self) - -ida_hexrays.minsn_t.set_ignlowsrc (method) - set_ignlowsrc(self) - -ida_hexrays.minsn_t.set_inverted_jx (method) - set_inverted_jx(self) - -ida_hexrays.minsn_t.set_mbarrier (method) - set_mbarrier(self) - -ida_hexrays.minsn_t.set_multimov (method) - set_multimov(self) - -ida_hexrays.minsn_t.set_noret_icall (method) - set_noret_icall(self) - -ida_hexrays.minsn_t.set_optional (method) - set_optional(self) - -ida_hexrays.minsn_t.set_persistent (method) - set_persistent(self) - -ida_hexrays.minsn_t.set_split_size (method) - set_split_size(self, s) - - @param s: int - -ida_hexrays.minsn_t.set_tailcall (method) - set_tailcall(self) - -ida_hexrays.minsn_t.set_unmerged (method) - set_unmerged(self) - -ida_hexrays.minsn_t.set_wild_match (method) - set_wild_match(self) - -ida_hexrays.minsn_t.setaddr (method) - setaddr(self, new_ea) - Change the instruction address. This function modifies subinstructions as well. - - @param new_ea: (C++: ea_t) - -ida_hexrays.minsn_t.swap (method) - swap(self, m) - Swap two instructions. The prev/next fields are not modified by this function - because it would corrupt the doubly linked list. - - @param m: (C++: minsn_t &) - -ida_hexrays.minsn_t.was_noret_icall (method) - was_noret_icall(self) -> bool - -ida_hexrays.minsn_t.was_split (method) - was_split(self) -> bool - -ida_hexrays.minsn_t.was_unmerged (method) - was_unmerged(self) -> bool - -ida_hexrays.minsn_visitor_t (class) - Proxy of C++ minsn_visitor_t class. - -ida_hexrays.minsn_visitor_t.__disown__ (method) - -ida_hexrays.minsn_visitor_t.__init__ (method) - __init__(self, _mba=None, _blk=None, _topins=None) -> minsn_visitor_t - - @param _mba: mba_t * - @param _blk: mblock_t * - @param _topins: minsn_t * - -ida_hexrays.minsn_visitor_t.visit_minsn (method) - visit_minsn(self) -> int - -ida_hexrays.mlist_mop_visitor_t (class) - Proxy of C++ mlist_mop_visitor_t class. - -ida_hexrays.mlist_mop_visitor_t.__disown__ (method) - -ida_hexrays.mlist_mop_visitor_t.__init__ (method) - __init__(self) -> mlist_mop_visitor_t - - @param self: PyObject * - -ida_hexrays.mlist_mop_visitor_t.visit_mop (method) - visit_mop(self, op) -> int - - @param op: mop_t * - -ida_hexrays.mlist_t (class) - Proxy of C++ mlist_t class. - -ida_hexrays.mlist_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: mlist_t const & - -ida_hexrays.mlist_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: mlist_t const & - -ida_hexrays.mlist_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: mlist_t const & - -ida_hexrays.mlist_t.__init__ (method) - __init__(self) -> mlist_t - __init__(self, ivl) -> mlist_t - - @param ivl: ivl_t const & - - __init__(self, r, size) -> mlist_t - - @param r: mreg_t - @param size: int - -ida_hexrays.mlist_t.__le__ (method) - __le__(self, r) -> bool - - @param r: mlist_t const & - -ida_hexrays.mlist_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: mlist_t const & - -ida_hexrays.mlist_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: mlist_t const & - -ida_hexrays.mlist_t._print (method) - _print(self) - -ida_hexrays.mlist_t.add (method) - add(self, r, size) -> bool - - @param r: mreg_t - @param size: int - - add(self, r) -> bool - - @param r: rlist_t const & - - add(self, ivl) -> bool - - @param ivl: ivl_t const & - - add(self, lst) -> bool - - @param lst: mlist_t const & - -ida_hexrays.mlist_t.addmem (method) - addmem(self, ea, size) -> bool - - @param ea: ea_t - @param size: asize_t - -ida_hexrays.mlist_t.clear (method) - clear(self) - -ida_hexrays.mlist_t.compare (method) - compare(self, r) -> int - - @param r: mlist_t const & - -ida_hexrays.mlist_t.count (method) - count(self) -> asize_t - -ida_hexrays.mlist_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.mlist_t.empty (method) - empty(self) -> bool - -ida_hexrays.mlist_t.has (method) - has(self, r) -> bool - - @param r: mreg_t - -ida_hexrays.mlist_t.has_all (method) - has_all(self, r, size) -> bool - - @param r: mreg_t - @param size: int - -ida_hexrays.mlist_t.has_any (method) - has_any(self, r, size) -> bool - - @param r: mreg_t - @param size: int - -ida_hexrays.mlist_t.has_common (method) - has_common(self, lst) -> bool - - @param lst: mlist_t const & - -ida_hexrays.mlist_t.has_memory (method) - has_memory(self) -> bool - -ida_hexrays.mlist_t.includes (method) - includes(self, lst) -> bool - - @param lst: mlist_t const & - -ida_hexrays.mlist_t.intersect (method) - intersect(self, lst) -> bool - - @param lst: mlist_t const & - -ida_hexrays.mlist_t.is_subset_of (method) - is_subset_of(self, lst) -> bool - - @param lst: mlist_t const & - -ida_hexrays.mlist_t.sub (method) - sub(self, r, size) -> bool - - @param r: mreg_t - @param size: int - - sub(self, ivl) -> bool - - @param ivl: ivl_t const & - - sub(self, lst) -> bool - - @param lst: mlist_t const & - -ida_hexrays.mlist_t.swap (method) - swap(self, r) - - @param r: mlist_t & - -ida_hexrays.mnumber_t (class) - Proxy of C++ mnumber_t class. - -ida_hexrays.mnumber_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: mnumber_t const & - -ida_hexrays.mnumber_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: mnumber_t const & - -ida_hexrays.mnumber_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: mnumber_t const & - -ida_hexrays.mnumber_t.__init__ (method) - __init__(self, v, _ea=BADADDR, n=0) -> mnumber_t - - @param v: uint64 - @param _ea: ea_t - @param n: int - -ida_hexrays.mnumber_t.__le__ (method) - __le__(self, r) -> bool - - @param r: mnumber_t const & - -ida_hexrays.mnumber_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: mnumber_t const & - -ida_hexrays.mnumber_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: mnumber_t const & - -ida_hexrays.mnumber_t.compare (method) - compare(self, r) -> int - - @param r: mnumber_t const & - -ida_hexrays.mnumber_t.update_value (method) - update_value(self, val64) - - @param val64: uint64 - -ida_hexrays.modify_user_lvar_info (function) - modify_user_lvar_info(func_ea, mli_flags, info) -> bool - Modify saved local variable settings of one variable. - - @param func_ea: (C++: ea_t) function start address - @param mli_flags: (C++: uint) bits that specify which attrs defined by INFO are to be set - @param info: (C++: const lvar_saved_info_t &) local variable info attrs - @return: true if modified, false if invalid MLI_FLAGS passed - -ida_hexrays.modify_user_lvars (function) - modify_user_lvars(entry_ea, mlv) -> bool - Modify saved local variable settings. - - @param entry_ea: (C++: ea_t) function start address - @param mlv: (C++: user_lvar_modifier_t &) local variable modifier - @return: true if modified variables - -ida_hexrays.mop_S (variable) - local stack variable (they exist until MMAT_LVARS) - -ida_hexrays.mop_addr_t (class) - Proxy of C++ mop_addr_t class. - -ida_hexrays.mop_addr_t.__init__ (method) - __init__(self) -> mop_addr_t - __init__(self, ra) -> mop_addr_t - - @param ra: mop_addr_t const & - - __init__(self, ra, isz, osz) -> mop_addr_t - - @param ra: mop_t const & - @param isz: int - @param osz: int - -ida_hexrays.mop_addr_t.lexcompare (method) - lexcompare(self, ra) -> int - - @param ra: mop_addr_t const & - -ida_hexrays.mop_b (variable) - micro basic block (mblock_t) - -ida_hexrays.mop_c (variable) - mcases - -ida_hexrays.mop_d (variable) - result of another instruction - -ida_hexrays.mop_f (variable) - list of arguments - -ida_hexrays.mop_fn (variable) - floating point constant - -ida_hexrays.mop_h (variable) - helper function - -ida_hexrays.mop_l (variable) - local variable - -ida_hexrays.mop_n (variable) - immediate number constant - -ida_hexrays.mop_p (variable) - operand pair - -ida_hexrays.mop_pair_t (class) - Proxy of C++ mop_pair_t class. - -ida_hexrays.mop_pair_t.__init__ (method) - __init__(self) -> mop_pair_t - -ida_hexrays.mop_pair_t.hop (variable) - high operand - -ida_hexrays.mop_pair_t.lop (variable) - low operand - -ida_hexrays.mop_r (variable) - register (they exist until MMAT_LVARS) - -ida_hexrays.mop_sc (variable) - scattered - -ida_hexrays.mop_str (variable) - immediate string constant (user representation) - -ida_hexrays.mop_t (class) - Proxy of C++ mop_t class. - -ida_hexrays.mop_t.__dbg_get_meminfo (method) - __dbg_get_meminfo(self) -> qstring - -ida_hexrays.mop_t.__dbg_get_registered_kind (method) - __dbg_get_registered_kind(self) -> int - -ida_hexrays.mop_t.__eq__ (method) - __eq__(self, rop) -> bool - - @param rop: mop_t const & - -ida_hexrays.mop_t.__init__ (method) - __init__(self) -> mop_t - __init__(self, rop) -> mop_t - - @param rop: mop_t const & - - __init__(self, _r, _s) -> mop_t - - @param _r: mreg_t - @param _s: int - -ida_hexrays.mop_t.__lt__ (method) - __lt__(self, rop) -> bool - - @param rop: mop_t const & - -ida_hexrays.mop_t.__ne__ (method) - __ne__(self, rop) -> bool - - @param rop: mop_t const & - -ida_hexrays.mop_t._acquire_ownership (method) - -ida_hexrays.mop_t._deregister (method) - _deregister(self) - -ida_hexrays.mop_t._ensure_cond (method) - -ida_hexrays.mop_t._ensure_no_obj (method) - -ida_hexrays.mop_t._ensure_no_t (method) - -ida_hexrays.mop_t._ensure_ownership_transferrable (method) - -ida_hexrays.mop_t._get_a (method) - _get_a(self) -> mop_addr_t - -ida_hexrays.mop_t._get_b (method) - _get_b(self) -> int - -ida_hexrays.mop_t._get_c (method) - _get_c(self) -> mcases_t - -ida_hexrays.mop_t._get_cstr (method) - _get_cstr(self) -> char const * - -ida_hexrays.mop_t._get_d (method) - _get_d(self) -> minsn_t - -ida_hexrays.mop_t._get_f (method) - _get_f(self) -> mcallinfo_t - -ida_hexrays.mop_t._get_fpc (method) - _get_fpc(self) -> fnumber_t - -ida_hexrays.mop_t._get_g (method) - _get_g(self) -> ea_t - -ida_hexrays.mop_t._get_helper (method) - _get_helper(self) -> char const * - -ida_hexrays.mop_t._get_l (method) - _get_l(self) -> lvar_ref_t - -ida_hexrays.mop_t._get_nnn (method) - _get_nnn(self) -> mnumber_t - -ida_hexrays.mop_t._get_pair (method) - _get_pair(self) -> mop_pair_t - -ida_hexrays.mop_t._get_r (method) - _get_r(self) -> mreg_t - -ida_hexrays.mop_t._get_s (method) - _get_s(self) -> stkvar_ref_t - -ida_hexrays.mop_t._get_scif (method) - _get_scif(self) -> scif_t - -ida_hexrays.mop_t._get_t (method) - _get_t(self) -> mopt_t - -ida_hexrays.mop_t._make_blkref (method) - _make_blkref(self, blknum) - - Parameters - ---------- - blknum: int - -ida_hexrays.mop_t._make_callinfo (method) - _make_callinfo(self, fi) - - Parameters - ---------- - fi: mcallinfo_t * - -ida_hexrays.mop_t._make_cases (method) - _make_cases(self, _cases) - - Parameters - ---------- - _cases: mcases_t * - -ida_hexrays.mop_t._make_gvar (method) - _make_gvar(self, ea) - - Parameters - ---------- - ea: ea_t - -ida_hexrays.mop_t._make_insn (method) - _make_insn(self, ins) - - Parameters - ---------- - ins: minsn_t * - -ida_hexrays.mop_t._make_lvar (method) - _make_lvar(self, mba, idx, off=0) - - Parameters - ---------- - mba: mba_t * - idx: int - off: sval_t - -ida_hexrays.mop_t._make_pair (method) - _make_pair(self, _pair) - - Parameters - ---------- - _pair: mop_pair_t * - -ida_hexrays.mop_t._make_reg (method) - _make_reg(self, reg) - - Parameters - ---------- - reg: mreg_t - - _make_reg(self, reg, _size) - - Parameters - ---------- - reg: mreg_t - _size: int - -ida_hexrays.mop_t._make_stkvar (method) - _make_stkvar(self, mba, off) - - Parameters - ---------- - mba: mba_t * - off: sval_t - -ida_hexrays.mop_t._make_strlit (method) - _make_strlit(self, str) - - Parameters - ---------- - str: char const * - -ida_hexrays.mop_t._maybe_disown_and_deregister (method) - -ida_hexrays.mop_t._meminfo (method) - -ida_hexrays.mop_t._obj_id (method) - _obj_id(self) -> PyObject * - -ida_hexrays.mop_t._own_and_register (method) - -ida_hexrays.mop_t._print (method) - _print(self, shins_flags=0x04|0x02) - - Parameters - ---------- - shins_flags: int - -ida_hexrays.mop_t._register (method) - _register(self) - -ida_hexrays.mop_t._set_a (method) - _set_a(self, _v) - - Parameters - ---------- - _v: mop_addr_t * - -ida_hexrays.mop_t._set_b (method) - _set_b(self, _v) - - Parameters - ---------- - _v: int - -ida_hexrays.mop_t._set_c (method) - _set_c(self, _v) - - Parameters - ---------- - _v: mcases_t * - -ida_hexrays.mop_t._set_cstr (method) - _set_cstr(self, _v) - - Parameters - ---------- - _v: char const * - -ida_hexrays.mop_t._set_d (method) - _set_d(self, _v) - - Parameters - ---------- - _v: minsn_t * - -ida_hexrays.mop_t._set_f (method) - _set_f(self, _v) - - Parameters - ---------- - _v: mcallinfo_t * - -ida_hexrays.mop_t._set_fpc (method) - _set_fpc(self, _v) - - Parameters - ---------- - _v: fnumber_t * - -ida_hexrays.mop_t._set_g (method) - _set_g(self, _v) - - Parameters - ---------- - _v: ea_t - -ida_hexrays.mop_t._set_helper (method) - _set_helper(self, _v) - - Parameters - ---------- - _v: char const * - -ida_hexrays.mop_t._set_l (method) - _set_l(self, _v) - - Parameters - ---------- - _v: lvar_ref_t * - -ida_hexrays.mop_t._set_nnn (method) - _set_nnn(self, _v) - - Parameters - ---------- - _v: mnumber_t * - -ida_hexrays.mop_t._set_pair (method) - _set_pair(self, _v) - - Parameters - ---------- - _v: mop_pair_t * - -ida_hexrays.mop_t._set_r (method) - _set_r(self, _v) - - Parameters - ---------- - _v: mreg_t - -ida_hexrays.mop_t._set_s (method) - _set_s(self, _v) - - Parameters - ---------- - _v: stkvar_ref_t * - -ida_hexrays.mop_t._set_scif (method) - _set_scif(self, _v) - - Parameters - ---------- - _v: scif_t * - -ida_hexrays.mop_t._set_t (method) - _set_t(self, v) - - Parameters - ---------- - v: mopt_t - -ida_hexrays.mop_t.apply_ld_mcode (method) - apply_ld_mcode(self, mcode, ea, newsize) - Apply a unary opcode to the operand. - - @param mcode: (C++: mcode_t) opcode to apply. it must accept 'l' and 'd' operands but not 'r'. - @param ea: (C++: ea_t) value of minsn_t::ea for the newly created insruction - @param newsize: (C++: int) new operand size Example: apply_ld_mcode(m_low) will convert op - => low(op) - -ida_hexrays.mop_t.apply_xds (method) - apply_xds(self, ea, newsize) - - @param ea: ea_t - @param newsize: int - -ida_hexrays.mop_t.apply_xdu (method) - apply_xdu(self, ea, newsize) - - @param ea: ea_t - @param newsize: int - -ida_hexrays.mop_t.assign (method) - assign(self, rop) -> mop_t - - @param rop: mop_t const & - -ida_hexrays.mop_t.change_size (method) - change_size(self, nsize, sideff=WITH_SIDEFF) -> bool - Change the operand size. Examples: change_size(AL.1, 2) -> AX.2 - change_size(qword_00000008.8, 4) -> dword_00000008.4 change_size(xdu.8(op.4), 4) - -> op.4 change_size(#0x12345678.4, 1) -> #0x78.1 - - @param nsize: (C++: int) new operand size - @param sideff: (C++: side_effect_t) may modify the database because of the size change? - @return: success - -ida_hexrays.mop_t.create_from_insn (method) - create_from_insn(self, m) - Create operand from an instruction. This function creates a nested instruction - that can be used as an operand. Example: if m="add x,y,z", our operand will be - (t=mop_d,d=m). The destination operand of 'add' (z) is lost. - - @param m: (C++: const minsn_t *) instruction to embed into operand. may not be nullptr. - -ida_hexrays.mop_t.create_from_ivlset (method) - create_from_ivlset(self, mba, ivs, fullsize) -> bool - Create operand from ivlset_t. Example: if IVS contains [glbvar..glbvar+4), our - operand will be (t=mop_v, g=&glbvar, size=4) - - @param mba: (C++: mba_t *) pointer to microcode - @param ivs: (C++: const ivlset_t &) set of memory intervals - @param fullsize: (C++: sval_t) mba->fullsize - @return: success - -ida_hexrays.mop_t.create_from_mlist (method) - create_from_mlist(self, mba, lst, fullsize) -> bool - Create operand from mlist_t. Example: if LST contains 4 bits for R0.4, our - operand will be (t=mop_r, r=R0, size=4) - - @param mba: (C++: mba_t *) pointer to microcode - @param lst: (C++: const mlist_t &) list of locations - @param fullsize: (C++: sval_t) mba->fullsize - @return: success - -ida_hexrays.mop_t.create_from_scattered_vdloc (method) - create_from_scattered_vdloc(self, mba, name, type, loc) - Create operand from scattered vdloc_t. Example: if LOC is (ALOC_DIST, {EAX.4, - EDX.4}) and TYPE is _LARGE_INTEGER, our operand will be (t=mop_sc, scif={EAX.4, - EDX.4}) - - @param mba: (C++: mba_t *) pointer to microcode - @param name: (C++: const char *) name of the operand, if available - @param type: (C++: tinfo_t) type of the operand, must be present - @param loc: (C++: const vdloc_t &) a scattered location - @return: success - -ida_hexrays.mop_t.create_from_vdloc (method) - create_from_vdloc(self, mba, loc, _size) - Create operand from vdloc_t. Example: if LOC contains (type=ALOC_REG1, r=R0), - our operand will be (t=mop_r, r=R0, size=_SIZE) - - @param mba: (C++: mba_t *) pointer to microcode - @param loc: (C++: const vdloc_t &) location - @param _size: (C++: int) operand size Note: this function cannot handle scattered - locations. - @return: success - -ida_hexrays.mop_t.double_size (method) - double_size(self, sideff=WITH_SIDEFF) -> bool - - @param sideff: enum side_effect_t - -ida_hexrays.mop_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.mop_t.empty (method) - empty(self) -> bool - -ida_hexrays.mop_t.equal_mops (method) - equal_mops(self, rop, eqflags) -> bool - Compare operands. This is the main comparison function for operands. - - @param rop: (C++: const mop_t &) operand to compare with - @param eqflags: (C++: int) combination of comparison bits bits - -ida_hexrays.mop_t.erase (method) - erase(self) - -ida_hexrays.mop_t.erase_but_keep_size (method) - erase_but_keep_size(self) - -ida_hexrays.mop_t.for_all_ops (method) - for_all_ops(self, mv, type=None, is_target=False) -> int - Visit the operand and all its sub-operands. This function visits the current - operand as well. - - @param mv: (C++: mop_visitor_t &) visitor object - @param type: (C++: const tinfo_t *) operand type - @param is_target: (C++: bool) is a destination operand? - -ida_hexrays.mop_t.for_all_scattered_submops (method) - for_all_scattered_submops(self, sv) -> int - Visit all sub-operands of a scattered operand. This function does not visit the - current operand, only its sub-operands. All sub-operands are synthetic and are - destroyed after the visitor. This function works only with scattered operands. - - @param sv: (C++: scif_visitor_t &) visitor object - -ida_hexrays.mop_t.get_insn (method) - get_insn(self, code) -> minsn_t - - @param code: enum mcode_t - -ida_hexrays.mop_t.get_stkoff (method) - get_stkoff(self, p_off) -> bool - Get the referenced stack offset. This function can also handle mop_sc if it is - entirely mapped into a continuous stack region. - - @param p_off: (C++: sval_t *) the output buffer - @return: success - -ida_hexrays.mop_t.get_stkvar (method) - get_stkvar(self, p_off) -> member_t * - Retrieve the referenced stack variable. - - @param p_off: (C++: uval_t *) if specified, will hold IDA stkoff after the call. - @return: pointer to the stack variable - -ida_hexrays.mop_t.has_side_effects (method) - has_side_effects(self, include_ldx_and_divs=False) -> bool - Has any side effects? - - @param include_ldx_and_divs: (C++: bool) consider ldx/div/mod as having side effects? - -ida_hexrays.mop_t.is01 (method) - is01(self) -> bool - Are the possible values of the operand only 0 and 1? This function returns true - for 0/1 constants, bit registers, the result of 'set' insns, etc. - -ida_hexrays.mop_t.is_arglist (method) - is_arglist(self) -> bool - Is a list of arguments? - -ida_hexrays.mop_t.is_bit_reg (method) - is_bit_reg(self, reg) -> bool - Is a bit register? This includes condition codes and eventually other bit - registers - - @param reg: (C++: mreg_t) - - is_bit_reg(self) -> bool - -ida_hexrays.mop_t.is_cc (method) - is_cc(self) -> bool - Is a condition code? - -ida_hexrays.mop_t.is_ccflags (method) - is_ccflags(self) -> bool - -ida_hexrays.mop_t.is_constant (method) - is_constant(self, is_signed=True) -> bool - Retrieve value of a constant integer operand. - - @param is_signed: (C++: bool) should treat the value as signed - @return: true if the operand is mop_n - -ida_hexrays.mop_t.is_equal_to (method) - is_equal_to(self, n, is_signed=True) -> bool - - @param n: uint64 - @param is_signed: bool - -ida_hexrays.mop_t.is_extended_from (method) - is_extended_from(self, nbytes, is_signed) -> bool - Does the high part of the operand consist of zero or sign bytes? - - @param nbytes: (C++: int) - @param is_signed: (C++: bool) - -ida_hexrays.mop_t.is_glbaddr (method) - is_glbaddr(self) -> bool - Is address of the specified global memory cell? - is_glbaddr(self, ea) -> bool - - @param ea: ea_t - -ida_hexrays.mop_t.is_glbaddr_from_fixup (method) - is_glbaddr_from_fixup(self) -> bool - -ida_hexrays.mop_t.is_impptr_done (method) - is_impptr_done(self) -> bool - -ida_hexrays.mop_t.is_insn (method) - is_insn(self) -> bool - Is a sub-instruction with the specified opcode? - is_insn(self, code) -> bool - - @param code: enum mcode_t - -ida_hexrays.mop_t.is_kreg (method) - is_kreg(self) -> bool - Is a kernel register? - -ida_hexrays.mop_t.is_lowaddr (method) - is_lowaddr(self) -> bool - -ida_hexrays.mop_t.is_mob (method) - is_mob(self, serial) -> bool - Is a block reference to the specified block? - - @param serial: (C++: int) - -ida_hexrays.mop_t.is_negative_constant (method) - is_negative_constant(self) -> bool - -ida_hexrays.mop_t.is_one (method) - is_one(self) -> bool - -ida_hexrays.mop_t.is_pcval (method) - is_pcval(self) -> bool - -ida_hexrays.mop_t.is_positive_constant (method) - is_positive_constant(self) -> bool - -ida_hexrays.mop_t.is_reg (method) - is_reg(self) -> bool - Is the specified register of the specified size? - is_reg(self, _r) -> bool - - @param _r: mreg_t - - is_reg(self, _r, _size) -> bool - - @param _r: mreg_t - @param _size: int - -ida_hexrays.mop_t.is_scattered (method) - is_scattered(self) -> bool - Is a scattered operand? - -ida_hexrays.mop_t.is_sign_extended_from (method) - is_sign_extended_from(self, nbytes) -> bool - Does the high part of the operand consist of the sign bytes? - - @param nbytes: (C++: int) number of bytes that were sign extended. the remaining size- - nbytes high bytes must be sign bytes Example: - is_sign_extended_from(xds.4(op.1), 1) -> true because the high 3 - bytes are certainly sign bits - -ida_hexrays.mop_t.is_stkaddr (method) - is_stkaddr(self) -> bool - Is address of a stack variable? - -ida_hexrays.mop_t.is_udt (method) - is_udt(self) -> bool - -ida_hexrays.mop_t.is_undef_val (method) - is_undef_val(self) -> bool - -ida_hexrays.mop_t.is_zero (method) - is_zero(self) -> bool - -ida_hexrays.mop_t.is_zero_extended_from (method) - is_zero_extended_from(self, nbytes) -> bool - Does the high part of the operand consist of zero bytes? - - @param nbytes: (C++: int) number of bytes that were zero extended. the remaining size- - nbytes high bytes must be zero Example: - is_zero_extended_from(xdu.8(op.1), 2) -> true because the high 6 - bytes are certainly zero - -ida_hexrays.mop_t.lexcompare (method) - lexcompare(self, rop) -> int - - @param rop: mop_t const & - -ida_hexrays.mop_t.make_blkref (method) - make_blkref(self, blknum) - Create a global variable operand. - - @param blknum: (C++: int) - -ida_hexrays.mop_t.make_first_half (method) - make_first_half(self, width) -> bool - Make the first part of the operand. This function does not care about the memory - endianness - - @param width: (C++: int) the desired size of the operand part in bytes - @return: success - -ida_hexrays.mop_t.make_fpnum (method) - make_fpnum(self, bytes) -> bool - Create a floating point constant operand. - - @param bytes: (C++: const void *) pointer to the floating point value as used by the current - processor (e.g. for x86 it must be in IEEE 754) - @return: success - -ida_hexrays.mop_t.make_gvar (method) - make_gvar(self, ea) - Create a global variable operand. - - @param ea: (C++: ea_t) - -ida_hexrays.mop_t.make_helper (method) - make_helper(self, name) - Create a helper operand. A helper operand usually keeps a built-in function name - like "va_start" It is essentially just an arbitrary identifier without any - additional info. - - @param name: (C++: const char *) char const * - -ida_hexrays.mop_t.make_high_half (method) - make_high_half(self, width) -> bool - Make the high part of the operand. This function takes into account the memory - endianness (byte sex) - - @param width: (C++: int) the desired size of the operand part in bytes - @return: success - -ida_hexrays.mop_t.make_insn (method) - make_insn(self, ins) - Create a nested instruction. - - @param ins: (C++: minsn_t *) - -ida_hexrays.mop_t.make_low_half (method) - make_low_half(self, width) -> bool - Make the low part of the operand. This function takes into account the memory - endianness (byte sex) - - @param width: (C++: int) the desired size of the operand part in bytes - @return: success - -ida_hexrays.mop_t.make_number (method) - make_number(self, _value, _size, _ea=BADADDR, opnum=0) - Create an integer constant operand. - - @param _value: (C++: uint64) value to store in the operand - @param _size: (C++: int) size of the value in bytes (1,2,4,8) - @param _ea: (C++: ea_t) address of the processor instruction that made the value - @param opnum: (C++: int) operand number of the processor instruction - -ida_hexrays.mop_t.make_reg (method) - make_reg(self, reg) - - @param reg: mreg_t - - make_reg(self, reg, _size) - - @param reg: mreg_t - @param _size: int - -ida_hexrays.mop_t.make_reg_pair (method) - make_reg_pair(self, loreg, hireg, halfsize) - Create pair of registers. - - @param loreg: (C++: int) register holding the low part of the value - @param hireg: (C++: int) register holding the high part of the value - @param halfsize: (C++: int) the size of each of loreg/hireg - -ida_hexrays.mop_t.make_second_half (method) - make_second_half(self, width) -> bool - Make the second part of the operand. This function does not care about the - memory endianness - - @param width: (C++: int) the desired size of the operand part in bytes - @return: success - -ida_hexrays.mop_t.make_stkvar (method) - make_stkvar(self, mba, off) - - @param mba: mba_t * - @param off: sval_t - -ida_hexrays.mop_t.may_use_aliased_memory (method) - may_use_aliased_memory(self) -> bool - Is it possible for the operand to use aliased memory? - -ida_hexrays.mop_t.oprops (variable) - Operand properties. - -ida_hexrays.mop_t.preserve_side_effects (method) - preserve_side_effects(self, blk, top, moved_calls=None) -> bool - Move subinstructions with side effects out of the operand. If we decide to - delete an instruction operand, it is a good idea to call this function. - Alternatively we should skip such operands by calling mop_t::has_side_effects() - For example, if we transform: jnz x, x, @blk => goto @blk then we must call this - function before deleting the X operands. - - @param blk: (C++: mblock_t *) current block - @param top: (C++: minsn_t *) top level instruction that contains our operand - @param moved_calls: (C++: bool *) pointer to the boolean that will track if all side effects - get handled correctly. must be false initially. - @return: false failed to preserve a side effect, it is not safe to delete the - operand true no side effects or successfully preserved them - -ida_hexrays.mop_t.probably_floating (method) - probably_floating(self) -> bool - -ida_hexrays.mop_t.replace_by (method) - -ida_hexrays.mop_t.set_impptr_done (method) - set_impptr_done(self) - -ida_hexrays.mop_t.set_lowaddr (method) - set_lowaddr(self) - -ida_hexrays.mop_t.set_udt (method) - set_udt(self) - -ida_hexrays.mop_t.set_undef_val (method) - set_undef_val(self) - -ida_hexrays.mop_t.shift_mop (method) - shift_mop(self, offset) -> bool - Shift the operand. This function shifts only the beginning of the operand. The - operand size will be changed. Examples: shift_mop(AH.1, -1) -> AX.2 - shift_mop(qword_00000008.8, 4) -> dword_0000000C.4 shift_mop(xdu.8(op.4), 4) -> - #0.4 shift_mop(#0x12345678.4, 3) -> #12.1 - - @param offset: (C++: int) shift count (the number of bytes to shift) - @return: success - -ida_hexrays.mop_t.signed_value (method) - signed_value(self) -> int64 - -ida_hexrays.mop_t.size (variable) - Operand size. Usually it is 1,2,4,8 or NOSIZE but for UDTs other sizes are - permitted - -ida_hexrays.mop_t.swap (method) - swap(self, rop) - - @param rop: mop_t & - -ida_hexrays.mop_t.t (variable) - Operand type. - -ida_hexrays.mop_t.unsigned_value (method) - unsigned_value(self) -> uint64 - -ida_hexrays.mop_t.update_numop_value (method) - update_numop_value(self, val) - - @param val: uint64 - -ida_hexrays.mop_t.valnum (variable) - Value number. Zero means unknown. Operands with the same value number are equal. - -ida_hexrays.mop_t.value (method) - value(self, is_signed) -> uint64 - Retrieve value of a constant integer operand. These functions can be called only - for mop_n operands. See is_constant() that can be called on any operand. - - @param is_signed: (C++: bool) - -ida_hexrays.mop_t.zero (method) - zero(self) - -ida_hexrays.mop_v (variable) - global variable - -ida_hexrays.mop_visitor_t (class) - Proxy of C++ mop_visitor_t class. - -ida_hexrays.mop_visitor_t.__disown__ (method) - -ida_hexrays.mop_visitor_t.__init__ (method) - __init__(self, _mba=None, _blk=None, _topins=None) -> mop_visitor_t - - @param _mba: mba_t * - @param _blk: mblock_t * - @param _topins: minsn_t * - -ida_hexrays.mop_visitor_t.prune (variable) - Should skip sub-operands of the current operand? visit_mop() may set - 'prune=true' for that. - -ida_hexrays.mop_visitor_t.visit_mop (method) - visit_mop(self, op, type, is_target) -> int - - @param op: mop_t * - @param type: tinfo_t const * - @param is_target: bool - -ida_hexrays.mop_z (variable) - none - -ida_hexrays.mopvec_t (class) - Proxy of C++ qvector< mop_t > class. - -ida_hexrays.mopvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< mop_t > const & - -ida_hexrays.mopvec_t.__getitem__ (method) - __getitem__(self, i) -> mop_t - - @param i: size_t - -ida_hexrays.mopvec_t.__init__ (method) - __init__(self) -> mopvec_t - __init__(self, x) -> mopvec_t - - @param x: qvector< mop_t > const & - -ida_hexrays.mopvec_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.mopvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< mop_t > const & - -ida_hexrays.mopvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: mop_t const & - -ida_hexrays.mopvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: mop_t const & - -ida_hexrays.mopvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: mop_t const & - -ida_hexrays.mopvec_t.at (method) - at(self, _idx) -> mop_t - - @param _idx: size_t - -ida_hexrays.mopvec_t.begin (method) - begin(self) -> mop_t - -ida_hexrays.mopvec_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.mopvec_t.clear (method) - clear(self) - -ida_hexrays.mopvec_t.empty (method) - empty(self) -> bool - -ida_hexrays.mopvec_t.end (method) - end(self) -> mop_t - -ida_hexrays.mopvec_t.erase (method) - erase(self, it) -> mop_t - - @param it: qvector< mop_t >::iterator - - erase(self, first, last) -> mop_t - - @param first: qvector< mop_t >::iterator - @param last: qvector< mop_t >::iterator - -ida_hexrays.mopvec_t.extract (method) - extract(self) -> mop_t - -ida_hexrays.mopvec_t.find (method) - find(self, x) -> mop_t - - @param x: mop_t const & - -ida_hexrays.mopvec_t.grow (method) - grow(self, x=mop_t()) - - @param x: mop_t const & - -ida_hexrays.mopvec_t.has (method) - has(self, x) -> bool - - @param x: mop_t const & - -ida_hexrays.mopvec_t.inject (method) - inject(self, s, len) - - @param s: mop_t * - @param len: size_t - -ida_hexrays.mopvec_t.insert (method) - insert(self, it, x) -> mop_t - - @param it: qvector< mop_t >::iterator - @param x: mop_t const & - -ida_hexrays.mopvec_t.pop_back (method) - pop_back(self) - -ida_hexrays.mopvec_t.push_back (method) - push_back(self, x) - - @param x: mop_t const & - - push_back(self) -> mop_t - -ida_hexrays.mopvec_t.qclear (method) - qclear(self) - -ida_hexrays.mopvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.mopvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: mop_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.mopvec_t.size (method) - size(self) -> size_t - -ida_hexrays.mopvec_t.swap (method) - swap(self, r) - - @param r: qvector< mop_t > & - -ida_hexrays.mopvec_t.truncate (method) - truncate(self) - -ida_hexrays.mreg2reg (function) - mreg2reg(reg, width) -> int - Map a microregister to a processor register. - - @param reg: (C++: mreg_t) microregister number - @param width: (C++: int) size of microregister in bytes - @return: processor register id or -1 - -ida_hexrays.must_mcode_close_block (function) - 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: (C++: mcode_t) instruction opcode - @param including_calls: (C++: bool) 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: unknown calls (is_unknown_call) are - considered as closing opcodes. - -ida_hexrays.negate_mcode_relation (function) - negate_mcode_relation(code) -> mcode_t - - @param code: enum mcode_t - -ida_hexrays.negated_relation (function) - negated_relation(op) -> ctype_t - Negate a comparison operator. For example, cot_sge becomes cot_slt. - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.new_block (function) - Create a new block-statement. - -ida_hexrays.number_format_t (class) - Proxy of C++ number_format_t class. - -ida_hexrays.number_format_t.__init__ (method) - __init__(self, _opnum=0) -> number_format_t - - @param _opnum: int - -ida_hexrays.number_format_t.flags (variable) - ida flags, which describe number radix, enum, etc - -ida_hexrays.number_format_t.flags32 (variable) - low 32bit of flags (for compatibility) - -ida_hexrays.number_format_t.get_radix (method) - get_radix(self) -> int - Get number radix - - @return: 2,8,10, or 16 - -ida_hexrays.number_format_t.has_unmutable_type (method) - has_unmutable_type(self) -> bool - -ida_hexrays.number_format_t.is_char (method) - is_char(self) -> bool - Is a character constant? - -ida_hexrays.number_format_t.is_dec (method) - is_dec(self) -> bool - Is a decimal number? - -ida_hexrays.number_format_t.is_enum (method) - is_enum(self) -> bool - Is a symbolic constant? - -ida_hexrays.number_format_t.is_fixed (method) - is_fixed(self) -> bool - Is number representation fixed? Fixed representation cannot be modified by the - decompiler - -ida_hexrays.number_format_t.is_hex (method) - is_hex(self) -> bool - Is a hexadecimal number? - -ida_hexrays.number_format_t.is_numop (method) - is_numop(self) -> bool - Is a number? - -ida_hexrays.number_format_t.is_oct (method) - is_oct(self) -> bool - Is a octal number? - -ida_hexrays.number_format_t.is_stroff (method) - is_stroff(self) -> bool - Is a structure field offset? - -ida_hexrays.number_format_t.needs_to_be_inverted (method) - needs_to_be_inverted(self) -> bool - Does the number need to be negated or bitwise negated? Returns true if the user - requested a negation but it is not done yet - -ida_hexrays.number_format_t.opnum (variable) - operand number: 0..UA_MAXOP - -ida_hexrays.number_format_t.org_nbytes (variable) - original number size in bytes - -ida_hexrays.number_format_t.serial (variable) - for enums: constant serial number - -ida_hexrays.number_format_t.type_name (variable) - for stroffs: structure for offsetof() - for enums: enum name - -ida_hexrays.op_parent_info_t (class) - Proxy of C++ op_parent_info_t class. - -ida_hexrays.op_parent_info_t.__init__ (method) - __init__(self, _mba=None, _blk=None, _topins=None) -> op_parent_info_t - - @param _mba: mba_t * - @param _blk: mblock_t * - @param _topins: minsn_t * - -ida_hexrays.op_uses_x (function) - op_uses_x(op) -> bool - Does operator use the 'x' field of cexpr_t? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.op_uses_y (function) - op_uses_y(op) -> bool - Does operator use the 'y' field of cexpr_t? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.op_uses_z (function) - op_uses_z(op) -> bool - Does operator use the 'z' field of cexpr_t? - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.open_pseudocode (function) - open_pseudocode(ea, flags) -> vdui_t - Open pseudocode window. The specified function is decompiled and the pseudocode - window is opened. - - @param ea: (C++: ea_t) function to decompile - @param flags: (C++: int) a combination of OPF_ flags - @return: false if failed - -ida_hexrays.operand_locator_t (class) - Proxy of C++ operand_locator_t class. - -ida_hexrays.operand_locator_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: operand_locator_t const & - -ida_hexrays.operand_locator_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: operand_locator_t const & - -ida_hexrays.operand_locator_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: operand_locator_t const & - -ida_hexrays.operand_locator_t.__init__ (method) - __init__(self, _ea, _opnum) -> operand_locator_t - - @param _ea: ea_t - @param _opnum: int - -ida_hexrays.operand_locator_t.__le__ (method) - __le__(self, r) -> bool - - @param r: operand_locator_t const & - -ida_hexrays.operand_locator_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: operand_locator_t const & - -ida_hexrays.operand_locator_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: operand_locator_t const & - -ida_hexrays.operand_locator_t.compare (method) - compare(self, r) -> int - - @param r: operand_locator_t const & - -ida_hexrays.operand_locator_t.ea (variable) - address of the original processor instruction - -ida_hexrays.operand_locator_t.opnum (variable) - operand number in the instruction - -ida_hexrays.optblock_t (class) - Proxy of C++ optblock_t class. - -ida_hexrays.optblock_t.__disown__ (method) - -ida_hexrays.optblock_t.__init__ (method) - __init__(self) -> optblock_t - - @param self: PyObject * - -ida_hexrays.optblock_t.func (method) - func(self, blk) -> int - Optimize a block. This function usually performs the optimizations that require - analyzing the entire block and/or its neighbors. For example it can recognize - patterns and perform conversions like: b0: b0: ... ... jnz x, 0, @b2 => jnz x, - 0, @b2 b1: b1: add x, 0, y mov x, y ... ... - - @param blk: (C++: mblock_t *) Basic block to optimize as a whole. - @return: number of changes made to the block. See also mark_lists_dirty. - -ida_hexrays.optblock_t.install (method) - install(self) - -ida_hexrays.optblock_t.remove (method) - remove(self) -> bool - -ida_hexrays.optinsn_t (class) - Proxy of C++ optinsn_t class. - -ida_hexrays.optinsn_t.__disown__ (method) - -ida_hexrays.optinsn_t.__init__ (method) - __init__(self) -> optinsn_t - - @param self: PyObject * - -ida_hexrays.optinsn_t.func (method) - func(self, blk, ins, optflags) -> int - Optimize an instruction. - - @param blk: (C++: mblock_t *) current basic block. maybe nullptr, which means that the instruction - must be optimized without context - @param ins: (C++: minsn_t *) instruction to optimize; it is always a top-level instruction. the - callback may not delete the instruction but may convert it into nop - (see mblock_t::make_nop). to optimize sub-instructions, visit them - using minsn_visitor_t. sub-instructions may not be converted into - nop but can be converted to "mov x,x". for example: add x,0,x => mov - x,x this callback may change other instructions in the block, but - should do this with care, e.g. to no break the propagation algorithm - if called with OPTI_NO_LDXOPT. - @param optflags: (C++: int) combination of optimization flags bits - @return: number of changes made to the instruction. if after this call the - instruction's use/def lists have changed, you must mark the block level - lists as dirty (see mark_lists_dirty) - -ida_hexrays.optinsn_t.install (method) - install(self) - -ida_hexrays.optinsn_t.remove (method) - remove(self) -> bool - -ida_hexrays.parse_user_call (function) - parse_user_call(udc, decl, silent) -> bool - Convert function type declaration into internal structure - - @param udc: (C++: udcall_t *) - pointer to output structure - @param decl: (C++: const char *) - function type declaration - @param silent: (C++: bool) - if TRUE: do not show warning in case of incorrect type - @return: success - -ida_hexrays.partial_type_num (function) - partial_type_num(type) -> int - Calculate number of partial subtypes. - - @param type: (C++: const tinfo_t &) tinfo_t const & - @return: number of partial subtypes. The bigger is this number, the uglier is - the type. - -ida_hexrays.print_vdloc (function) - print_vdloc(loc, nbytes) -> str - Print vdloc. Since vdloc does not always carry the size info, we pass it as - NBYTES.. - - @param loc: (C++: const vdloc_t &) vdloc_t const & - @param nbytes: (C++: int) - -ida_hexrays.property_op_to_typename (function) - -ida_hexrays.qstring_printer_t (class) - Proxy of C++ qstring_printer_t class. - -ida_hexrays.qstring_printer_t.__init__ (method) - __init__(self, f, tags) -> qstring_printer_t - - @param f: cfunc_t const * - @param tags: bool - -ida_hexrays.qstring_printer_t._print (method) - _print(self, indent, format) -> int - - Parameters - ---------- - indent: int - format: char const * - -ida_hexrays.qstring_printer_t.get_s (method) - get_s(self) -> qstring - -ida_hexrays.qstring_printer_t.s (variable) - Reference to the output string - -ida_hexrays.qstring_printer_t.with_tags (variable) - Generate output with color tags. - -ida_hexrays.qswap (function) - qswap(a, b) - - @param a: cinsn_t & - @param b: cinsn_t & - -ida_hexrays.qvector_carg_t (class) - Proxy of C++ qvector< carg_t > class. - -ida_hexrays.qvector_carg_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< carg_t > const & - -ida_hexrays.qvector_carg_t.__getitem__ (method) - __getitem__(self, i) -> carg_t - - @param i: size_t - -ida_hexrays.qvector_carg_t.__init__ (method) - __init__(self) -> qvector_carg_t - __init__(self, x) -> qvector_carg_t - - @param x: qvector< carg_t > const & - -ida_hexrays.qvector_carg_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.qvector_carg_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< carg_t > const & - -ida_hexrays.qvector_carg_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: carg_t const & - -ida_hexrays.qvector_carg_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: carg_t const & - -ida_hexrays.qvector_carg_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: carg_t const & - -ida_hexrays.qvector_carg_t.at (method) - at(self, _idx) -> carg_t - - @param _idx: size_t - -ida_hexrays.qvector_carg_t.begin (method) - begin(self) -> carg_t - -ida_hexrays.qvector_carg_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.qvector_carg_t.clear (method) - clear(self) - -ida_hexrays.qvector_carg_t.empty (method) - empty(self) -> bool - -ida_hexrays.qvector_carg_t.end (method) - end(self) -> carg_t - -ida_hexrays.qvector_carg_t.erase (method) - erase(self, it) -> carg_t - - @param it: qvector< carg_t >::iterator - - erase(self, first, last) -> carg_t - - @param first: qvector< carg_t >::iterator - @param last: qvector< carg_t >::iterator - -ida_hexrays.qvector_carg_t.extract (method) - extract(self) -> carg_t - -ida_hexrays.qvector_carg_t.find (method) - find(self, x) -> carg_t - - @param x: carg_t const & - -ida_hexrays.qvector_carg_t.grow (method) - grow(self, x=carg_t()) - - @param x: carg_t const & - -ida_hexrays.qvector_carg_t.has (method) - has(self, x) -> bool - - @param x: carg_t const & - -ida_hexrays.qvector_carg_t.inject (method) - inject(self, s, len) - - @param s: carg_t * - @param len: size_t - -ida_hexrays.qvector_carg_t.insert (method) - insert(self, it, x) -> carg_t - - @param it: qvector< carg_t >::iterator - @param x: carg_t const & - -ida_hexrays.qvector_carg_t.pop_back (method) - pop_back(self) - -ida_hexrays.qvector_carg_t.push_back (method) - push_back(self, x) - - @param x: carg_t const & - - push_back(self) -> carg_t - -ida_hexrays.qvector_carg_t.qclear (method) - qclear(self) - -ida_hexrays.qvector_carg_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.qvector_carg_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: carg_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.qvector_carg_t.size (method) - size(self) -> size_t - -ida_hexrays.qvector_carg_t.swap (method) - swap(self, r) - - @param r: qvector< carg_t > & - -ida_hexrays.qvector_carg_t.truncate (method) - truncate(self) - -ida_hexrays.qvector_ccase_t (class) - Proxy of C++ qvector< ccase_t > class. - -ida_hexrays.qvector_ccase_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< ccase_t > const & - -ida_hexrays.qvector_ccase_t.__getitem__ (method) - __getitem__(self, i) -> ccase_t - - @param i: size_t - -ida_hexrays.qvector_ccase_t.__init__ (method) - __init__(self) -> qvector_ccase_t - __init__(self, x) -> qvector_ccase_t - - @param x: qvector< ccase_t > const & - -ida_hexrays.qvector_ccase_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.qvector_ccase_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< ccase_t > const & - -ida_hexrays.qvector_ccase_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: ccase_t const & - -ida_hexrays.qvector_ccase_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: ccase_t const & - -ida_hexrays.qvector_ccase_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: ccase_t const & - -ida_hexrays.qvector_ccase_t.at (method) - at(self, _idx) -> ccase_t - - @param _idx: size_t - -ida_hexrays.qvector_ccase_t.begin (method) - begin(self) -> ccase_t - -ida_hexrays.qvector_ccase_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.qvector_ccase_t.clear (method) - clear(self) - -ida_hexrays.qvector_ccase_t.empty (method) - empty(self) -> bool - -ida_hexrays.qvector_ccase_t.end (method) - end(self) -> ccase_t - -ida_hexrays.qvector_ccase_t.erase (method) - erase(self, it) -> ccase_t - - @param it: qvector< ccase_t >::iterator - - erase(self, first, last) -> ccase_t - - @param first: qvector< ccase_t >::iterator - @param last: qvector< ccase_t >::iterator - -ida_hexrays.qvector_ccase_t.extract (method) - extract(self) -> ccase_t - -ida_hexrays.qvector_ccase_t.find (method) - find(self, x) -> ccase_t - - @param x: ccase_t const & - -ida_hexrays.qvector_ccase_t.grow (method) - grow(self, x=ccase_t()) - - @param x: ccase_t const & - -ida_hexrays.qvector_ccase_t.has (method) - has(self, x) -> bool - - @param x: ccase_t const & - -ida_hexrays.qvector_ccase_t.inject (method) - inject(self, s, len) - - @param s: ccase_t * - @param len: size_t - -ida_hexrays.qvector_ccase_t.insert (method) - insert(self, it, x) -> ccase_t - - @param it: qvector< ccase_t >::iterator - @param x: ccase_t const & - -ida_hexrays.qvector_ccase_t.pop_back (method) - pop_back(self) - -ida_hexrays.qvector_ccase_t.push_back (method) - push_back(self, x) - - @param x: ccase_t const & - - push_back(self) -> ccase_t - -ida_hexrays.qvector_ccase_t.qclear (method) - qclear(self) - -ida_hexrays.qvector_ccase_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.qvector_ccase_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: ccase_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.qvector_ccase_t.size (method) - size(self) -> size_t - -ida_hexrays.qvector_ccase_t.swap (method) - swap(self, r) - - @param r: qvector< ccase_t > & - -ida_hexrays.qvector_ccase_t.truncate (method) - truncate(self) - -ida_hexrays.qvector_history_t (class) - Proxy of C++ qvector< history_item_t > class. - -ida_hexrays.qvector_history_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< history_item_t > const & - -ida_hexrays.qvector_history_t.__getitem__ (method) - __getitem__(self, i) -> history_item_t - - @param i: size_t - -ida_hexrays.qvector_history_t.__init__ (method) - __init__(self) -> qvector_history_t - __init__(self, x) -> qvector_history_t - - @param x: qvector< history_item_t > const & - -ida_hexrays.qvector_history_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.qvector_history_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< history_item_t > const & - -ida_hexrays.qvector_history_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: history_item_t const & - -ida_hexrays.qvector_history_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: history_item_t const & - -ida_hexrays.qvector_history_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: history_item_t const & - -ida_hexrays.qvector_history_t.at (method) - at(self, _idx) -> history_item_t - - @param _idx: size_t - -ida_hexrays.qvector_history_t.begin (method) - begin(self) -> history_item_t - -ida_hexrays.qvector_history_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.qvector_history_t.clear (method) - clear(self) - -ida_hexrays.qvector_history_t.empty (method) - empty(self) -> bool - -ida_hexrays.qvector_history_t.end (method) - end(self) -> history_item_t - -ida_hexrays.qvector_history_t.erase (method) - erase(self, it) -> history_item_t - - @param it: qvector< history_item_t >::iterator - - erase(self, first, last) -> history_item_t - - @param first: qvector< history_item_t >::iterator - @param last: qvector< history_item_t >::iterator - -ida_hexrays.qvector_history_t.extract (method) - extract(self) -> history_item_t - -ida_hexrays.qvector_history_t.find (method) - find(self, x) -> history_item_t - - @param x: history_item_t const & - -ida_hexrays.qvector_history_t.grow (method) - grow(self, x=history_item_t()) - - @param x: history_item_t const & - -ida_hexrays.qvector_history_t.has (method) - has(self, x) -> bool - - @param x: history_item_t const & - -ida_hexrays.qvector_history_t.inject (method) - inject(self, s, len) - - @param s: history_item_t * - @param len: size_t - -ida_hexrays.qvector_history_t.insert (method) - insert(self, it, x) -> history_item_t - - @param it: qvector< history_item_t >::iterator - @param x: history_item_t const & - -ida_hexrays.qvector_history_t.pop_back (method) - pop_back(self) - -ida_hexrays.qvector_history_t.push_back (method) - push_back(self, x) - - @param x: history_item_t const & - - push_back(self) -> history_item_t - -ida_hexrays.qvector_history_t.qclear (method) - qclear(self) - -ida_hexrays.qvector_history_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.qvector_history_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: history_item_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.qvector_history_t.size (method) - size(self) -> size_t - -ida_hexrays.qvector_history_t.swap (method) - swap(self, r) - - @param r: qvector< history_item_t > & - -ida_hexrays.qvector_history_t.truncate (method) - truncate(self) - -ida_hexrays.qvector_lvar_t (class) - Proxy of C++ qvector< lvar_t > class. - -ida_hexrays.qvector_lvar_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< lvar_t > const & - -ida_hexrays.qvector_lvar_t.__getitem__ (method) - __getitem__(self, i) -> lvar_t - - @param i: size_t - -ida_hexrays.qvector_lvar_t.__init__ (method) - __init__(self) -> qvector_lvar_t - __init__(self, x) -> qvector_lvar_t - - @param x: qvector< lvar_t > const & - -ida_hexrays.qvector_lvar_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.qvector_lvar_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< lvar_t > const & - -ida_hexrays.qvector_lvar_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: lvar_t const & - -ida_hexrays.qvector_lvar_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: lvar_t const & - -ida_hexrays.qvector_lvar_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: lvar_t const & - -ida_hexrays.qvector_lvar_t.at (method) - at(self, _idx) -> lvar_t - - @param _idx: size_t - -ida_hexrays.qvector_lvar_t.begin (method) - begin(self) -> lvar_t - -ida_hexrays.qvector_lvar_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.qvector_lvar_t.clear (method) - clear(self) - -ida_hexrays.qvector_lvar_t.empty (method) - empty(self) -> bool - -ida_hexrays.qvector_lvar_t.end (method) - end(self) -> lvar_t - -ida_hexrays.qvector_lvar_t.erase (method) - erase(self, it) -> lvar_t - - @param it: qvector< lvar_t >::iterator - - erase(self, first, last) -> lvar_t - - @param first: qvector< lvar_t >::iterator - @param last: qvector< lvar_t >::iterator - -ida_hexrays.qvector_lvar_t.extract (method) - extract(self) -> lvar_t - -ida_hexrays.qvector_lvar_t.find (method) - find(self, x) -> lvar_t - - @param x: lvar_t const & - -ida_hexrays.qvector_lvar_t.grow (method) - grow(self, x=lvar_t()) - - @param x: lvar_t const & - -ida_hexrays.qvector_lvar_t.has (method) - has(self, x) -> bool - - @param x: lvar_t const & - -ida_hexrays.qvector_lvar_t.inject (method) - inject(self, s, len) - - @param s: lvar_t * - @param len: size_t - -ida_hexrays.qvector_lvar_t.insert (method) - insert(self, it, x) -> lvar_t - - @param it: qvector< lvar_t >::iterator - @param x: lvar_t const & - -ida_hexrays.qvector_lvar_t.pop_back (method) - pop_back(self) - -ida_hexrays.qvector_lvar_t.push_back (method) - push_back(self, x) - - @param x: lvar_t const & - - push_back(self) -> lvar_t - -ida_hexrays.qvector_lvar_t.qclear (method) - qclear(self) - -ida_hexrays.qvector_lvar_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.qvector_lvar_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: lvar_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.qvector_lvar_t.size (method) - size(self) -> size_t - -ida_hexrays.qvector_lvar_t.swap (method) - swap(self, r) - - @param r: qvector< lvar_t > & - -ida_hexrays.qvector_lvar_t.truncate (method) - truncate(self) - -ida_hexrays.reg2mreg (function) - reg2mreg(reg) -> mreg_t - Map a processor register to a microregister. - - @param reg: (C++: int) processor register number - @return: microregister register id or mr_none - -ida_hexrays.remitem (function) - remitem(e) - - @param e: citem_t const * - -ida_hexrays.remove_hexrays_callback (function) - Deprecated. Please use Hexrays_Hooks instead - Uninstall handler for decompiler events. - - @return: number of uninstalled handlers. - -ida_hexrays.rename_lvar (function) - rename_lvar(func_ea, oldname, newname) -> bool - Rename a local variable. - - @param func_ea: (C++: ea_t) function start address - @param oldname: (C++: const char *) old name of the variable - @param newname: (C++: const char *) new name of the variable - @return: success This is a convenience function. For bulk renaming consider - using modify_user_lvars. - -ida_hexrays.restore_user_cmts (function) - restore_user_cmts(func_ea) -> user_cmts_t - Restore user defined comments from the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @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 (function) - restore_user_defined_calls(udcalls, func_ea) -> bool - Restore user defined function calls from the database. - - @param udcalls: (C++: udcall_map_t *) ptr to output buffer - @param func_ea: (C++: ea_t) entry address of the function - @return: success - -ida_hexrays.restore_user_iflags (function) - restore_user_iflags(func_ea) -> user_iflags_t - Restore user defined citem iflags from the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @return: collection of user defined iflags. The returned object must be deleted - by the caller using delete_user_iflags() - -ida_hexrays.restore_user_labels (function) - restore_user_labels(func_ea) -> user_labels_t - Restore user defined labels from the database. - - @param func_ea: (C++: ea_t) the entry address of the function, ignored if FUNC != nullptr - @return: collection of user defined labels. The returned object must be deleted - by the caller using delete_user_labels() - -ida_hexrays.restore_user_labels2 (function) - restore_user_labels2(func_ea, func=None) -> user_labels_t - - @param func_ea: ea_t - @param func: cfunc_t const * - -ida_hexrays.restore_user_lvar_settings (function) - restore_user_lvar_settings(lvinf, func_ea) -> bool - Restore user defined local variable settings in the database. - - @param lvinf: (C++: lvar_uservec_t *) ptr to output buffer - @param func_ea: (C++: ea_t) entry address of the function - @return: success - -ida_hexrays.restore_user_numforms (function) - restore_user_numforms(func_ea) -> user_numforms_t - Restore user defined number formats from the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @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 (function) - restore_user_unions(func_ea) -> user_unions_t - Restore user defined union field selections from the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @return: collection of union field selections The returned object must be - deleted by the caller using delete_user_unions() - -ida_hexrays.rlist_t (class) - Proxy of C++ rlist_t class. - -ida_hexrays.rlist_t.__init__ (method) - __init__(self) -> rlist_t - __init__(self, m) -> rlist_t - - @param m: rlist_t const & - - __init__(self, reg, width) -> rlist_t - - @param reg: mreg_t - @param width: int - -ida_hexrays.rlist_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.save_user_cmts (function) - save_user_cmts(func_ea, user_cmts) - Save user defined comments into the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @param user_cmts: (C++: const user_cmts_t *) collection of user defined comments - -ida_hexrays.save_user_defined_calls (function) - save_user_defined_calls(func_ea, udcalls) - Save user defined local function calls into the database. - - @param func_ea: (C++: ea_t) entry address of the function - @param udcalls: (C++: const udcall_map_t &) user-specified info about user defined function calls - -ida_hexrays.save_user_iflags (function) - save_user_iflags(func_ea, iflags) - Save user defined citem iflags into the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @param iflags: (C++: const user_iflags_t *) collection of user defined citem iflags - -ida_hexrays.save_user_labels (function) - save_user_labels(func_ea, user_labels) - Save user defined labels into the database. - - @param func_ea: (C++: ea_t) the entry address of the function, ignored if FUNC != nullptr - @param user_labels: (C++: const user_labels_t *) collection of user defined labels - -ida_hexrays.save_user_labels2 (function) - save_user_labels2(func_ea, user_labels, func=None) - - @param func_ea: ea_t - @param user_labels: user_labels_t const * - @param func: cfunc_t const * - -ida_hexrays.save_user_lvar_settings (function) - save_user_lvar_settings(func_ea, lvinf) - Save user defined local variable settings into the database. - - @param func_ea: (C++: ea_t) entry address of the function - @param lvinf: (C++: const lvar_uservec_t &) user-specified info about local variables - -ida_hexrays.save_user_numforms (function) - save_user_numforms(func_ea, numforms) - Save user defined number formats into the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @param numforms: (C++: const user_numforms_t *) collection of user defined comments - -ida_hexrays.save_user_unions (function) - save_user_unions(func_ea, unions) - Save user defined union field selections into the database. - - @param func_ea: (C++: ea_t) the entry address of the function - @param unions: (C++: const user_unions_t *) collection of union field selections - -ida_hexrays.scif_t (class) - Proxy of C++ scif_t class. - -ida_hexrays.scif_t.__init__ (method) - __init__(self, _mba, tif, n=None) -> scif_t - - @param _mba: mba_t * - @param tif: tinfo_t * - @param n: qstring * - -ida_hexrays.scif_t.mba (variable) - Pointer to the parent mba_t object. Some operations may convert a scattered - operand into something simpler, (a stack operand, for example). We will need to - create stkvar_ref_t at that moment, this is why we need this pointer. See notes - for lvar_ref_t::mba. - -ida_hexrays.scif_t.name (variable) - Usually scattered operands are created from a function prototype, which has the - name information. We preserve it and use it to name the corresponding local - variable. - -ida_hexrays.scif_t.type (variable) - Scattered operands always have type info assigned to them because without it we - won't be able to manipulte them. - -ida_hexrays.scif_visitor_t (class) - Proxy of C++ scif_visitor_t class. - -ida_hexrays.scif_visitor_t.__disown__ (method) - -ida_hexrays.scif_visitor_t.__init__ (method) - __init__(self) -> scif_visitor_t - - @param self: PyObject * - -ida_hexrays.scif_visitor_t.visit_scif_mop (method) - visit_scif_mop(self, r, off) -> int - - @param r: mop_t const & - @param off: int - -ida_hexrays.select_udt_by_offset (function) - select_udt_by_offset(udts, ops, applicator) -> int - Select UDT - - @param udts: (C++: const qvector< tinfo_t > *) list of UDT tinfo_t for the selection, if nullptr or empty then - UDTs from the "Local types" will be used - @param ops: (C++: const ui_stroff_ops_t &) operands - @param applicator: (C++: ui_stroff_applicator_t &) callback will be called to apply the selection for every - operand - -ida_hexrays.send_database (function) - 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: (C++: const hexrays_failure_t &) failure description object. Empty hexrays_failure_t object can be - used if error information is not available. - @param silent: (C++: bool) if false, a dialog box will be displayed before sending the - database. - -ida_hexrays.set2jcnd (function) - set2jcnd(code) -> mcode_t - - @param code: enum mcode_t - -ida_hexrays.set_type (function) - set_type(id, tif, source, force=False) -> bool - Set a global type. - - @param id: (C++: uval_t) address or id of the object - @param tif: (C++: const tinfo_t &) new type info - @param source: (C++: type_source_t) where the type comes from - @param force: (C++: bool) true means to set the type as is, false means to merge the new - type with the possibly existing old type info. - @return: success - -ida_hexrays.simple_graph_t (class) - Proxy of C++ simple_graph_t class. - -ida_hexrays.simple_graph_t.__init__ (method) - -ida_hexrays.stkvar_ref_t (class) - Proxy of C++ stkvar_ref_t class. - -ida_hexrays.stkvar_ref_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: stkvar_ref_t const & - -ida_hexrays.stkvar_ref_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: stkvar_ref_t const & - -ida_hexrays.stkvar_ref_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: stkvar_ref_t const & - -ida_hexrays.stkvar_ref_t.__init__ (method) - __init__(self, m, o) -> stkvar_ref_t - - @param m: mba_t * - @param o: sval_t - -ida_hexrays.stkvar_ref_t.__le__ (method) - __le__(self, r) -> bool - - @param r: stkvar_ref_t const & - -ida_hexrays.stkvar_ref_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: stkvar_ref_t const & - -ida_hexrays.stkvar_ref_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: stkvar_ref_t const & - -ida_hexrays.stkvar_ref_t.compare (method) - compare(self, r) -> int - - @param r: stkvar_ref_t const & - -ida_hexrays.stkvar_ref_t.get_stkvar (method) - get_stkvar(self, p_off=None) -> member_t * - Retrieve the referenced stack variable. - - @param p_off: (C++: uval_t *) if specified, will hold IDA stkoff after the call. - @return: pointer to the stack variable - -ida_hexrays.stkvar_ref_t.mba (variable) - Pointer to the parent mba_t object. We need it in order to retrieve the - referenced stack variable. See notes for lvar_ref_t::mba. - -ida_hexrays.stkvar_ref_t.off (variable) - Offset to the stack variable from the bottom of the stack frame. It is called - 'decompiler stkoff' and it is different from IDA stkoff. See a note and a - picture about 'decompiler stkoff' below. - -ida_hexrays.stkvar_ref_t.swap (method) - swap(self, r) - - @param r: stkvar_ref_t & - -ida_hexrays.swap_mcode_relation (function) - swap_mcode_relation(code) -> mcode_t - - @param code: enum mcode_t - -ida_hexrays.swapped_relation (function) - swapped_relation(op) -> ctype_t - Swap a comparison operator. For example, cot_sge becomes cot_sle. - - @param op: (C++: ctype_t) enum ctype_t - -ida_hexrays.term_hexrays_plugin (function) - term_hexrays_plugin() - Stop working with hex-rays decompiler. - -ida_hexrays.treeloc_t (class) - Proxy of C++ treeloc_t class. - -ida_hexrays.treeloc_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: treeloc_t const & - -ida_hexrays.treeloc_t.__init__ (method) - __init__(self) -> treeloc_t - -ida_hexrays.treeloc_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: treeloc_t const & - -ida_hexrays.udc_filter_t (class) - Proxy of C++ udc_filter_t class. - -ida_hexrays.udc_filter_t.__disown__ (method) - -ida_hexrays.udc_filter_t.__init__ (method) - __init__(self) -> udc_filter_t - - @param self: PyObject * - -ida_hexrays.udc_filter_t.apply (method) - apply(self, cdg) -> merror_t - generate microcode for an instruction - - @param cdg: (C++: codegen_t &) - @return: MERR_... code: MERR_OK - user-defined microcode generated, go to the - next instruction MERR_INSN - not generated - the caller should try the - standard way else - error - -ida_hexrays.udc_filter_t.cleanup (method) - cleanup(self) - Cleanup the filter This function properly clears type information associated to - this filter. - -ida_hexrays.udc_filter_t.empty (method) - empty(self) -> bool - -ida_hexrays.udc_filter_t.init (method) - init(self, decl) -> bool - - @param decl: char const * - -ida_hexrays.udc_filter_t.install (method) - install(self) - -ida_hexrays.udc_filter_t.match (method) - match(self, cdg) -> bool - return true if the filter object should be applied to given instruction - - @param cdg: (C++: codegen_t &) - -ida_hexrays.udc_filter_t.remove (method) - remove(self) -> bool - -ida_hexrays.udcall_map_begin (function) - 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 *) udcall_map_t const * - -ida_hexrays.udcall_map_clear (function) - udcall_map_clear(map) - Clear udcall_map_t. - - @param map: (C++: udcall_map_t *) - -ida_hexrays.udcall_map_end (function) - 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 *) udcall_map_t const * - -ida_hexrays.udcall_map_erase (function) - 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 (function) - udcall_map_find(map, key) -> udcall_map_iterator_t - Find the specified key in udcall_map_t. - - @param map: (C++: const udcall_map_t *) udcall_map_t const * - @param key: (C++: const ea_t &) ea_t const & - -ida_hexrays.udcall_map_first (function) - 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 (function) - udcall_map_free(map) - Delete udcall_map_t instance. - - @param map: (C++: udcall_map_t *) - -ida_hexrays.udcall_map_insert (function) - 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 &) ea_t const & - @param val: (C++: const udcall_t &) udcall_t const & - -ida_hexrays.udcall_map_iterator_t (class) - Proxy of C++ udcall_map_iterator_t class. - -ida_hexrays.udcall_map_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: udcall_map_iterator_t const & - -ida_hexrays.udcall_map_iterator_t.__init__ (method) - __init__(self) -> udcall_map_iterator_t - -ida_hexrays.udcall_map_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: udcall_map_iterator_t const & - -ida_hexrays.udcall_map_new (function) - udcall_map_new() -> udcall_map_t * - Create a new udcall_map_t instance. - -ida_hexrays.udcall_map_next (function) - 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 (function) - 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 (function) - 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 (function) - udcall_map_size(map) -> size_t - Get size of udcall_map_t. - - @param map: (C++: udcall_map_t *) - -ida_hexrays.udcall_t (class) - Proxy of C++ udcall_t class. - -ida_hexrays.udcall_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: udcall_t const & - -ida_hexrays.udcall_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: udcall_t const & - -ida_hexrays.udcall_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: udcall_t const & - -ida_hexrays.udcall_t.__init__ (method) - __init__(self) -> udcall_t - -ida_hexrays.udcall_t.__le__ (method) - __le__(self, r) -> bool - - @param r: udcall_t const & - -ida_hexrays.udcall_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: udcall_t const & - -ida_hexrays.udcall_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: udcall_t const & - -ida_hexrays.udcall_t.compare (method) - compare(self, r) -> int - - @param r: udcall_t const & - -ida_hexrays.udcall_t.empty (method) - empty(self) -> bool - -ida_hexrays.ui_stroff_applicator_t (class) - Proxy of C++ ui_stroff_applicator_t class. - -ida_hexrays.ui_stroff_applicator_t.__disown__ (method) - -ida_hexrays.ui_stroff_applicator_t.__init__ (method) - __init__(self) -> ui_stroff_applicator_t - - @param self: PyObject * - -ida_hexrays.ui_stroff_applicator_t.apply (method) - apply(self, opnum, path, top_tif, spath) -> bool - - @param opnum: (C++: size_t) operand ordinal number, see below - @param path: (C++: const intvec_t &) path describing the union selection, maybe empty - @param top_tif: (C++: const tinfo_t &) tinfo_t of the selected toplevel UDT - @param spath: (C++: const char *) selected path - -ida_hexrays.ui_stroff_op_t (class) - Proxy of C++ ui_stroff_op_t class. - -ida_hexrays.ui_stroff_op_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: ui_stroff_op_t const & - -ida_hexrays.ui_stroff_op_t.__init__ (method) - __init__(self) -> ui_stroff_op_t - -ida_hexrays.ui_stroff_op_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: ui_stroff_op_t const & - -ida_hexrays.ui_stroff_op_t.offset (variable) - operand offset, will be used when calculating the UDT path - -ida_hexrays.ui_stroff_op_t.text (variable) - any text for the column "Operand" of widget - -ida_hexrays.ui_stroff_ops_t (class) - Proxy of C++ qvector< ui_stroff_op_t > class. - -ida_hexrays.ui_stroff_ops_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< ui_stroff_op_t > const & - -ida_hexrays.ui_stroff_ops_t.__getitem__ (method) - __getitem__(self, i) -> ui_stroff_op_t - - @param i: size_t - -ida_hexrays.ui_stroff_ops_t.__init__ (method) - __init__(self) -> ui_stroff_ops_t - __init__(self, x) -> ui_stroff_ops_t - - @param x: qvector< ui_stroff_op_t > const & - -ida_hexrays.ui_stroff_ops_t.__len__ (method) - __len__(self) -> size_t - -ida_hexrays.ui_stroff_ops_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< ui_stroff_op_t > const & - -ida_hexrays.ui_stroff_ops_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: ui_stroff_op_t const & - -ida_hexrays.ui_stroff_ops_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: ui_stroff_op_t const & - -ida_hexrays.ui_stroff_ops_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: ui_stroff_op_t const & - -ida_hexrays.ui_stroff_ops_t.at (method) - at(self, _idx) -> ui_stroff_op_t - - @param _idx: size_t - -ida_hexrays.ui_stroff_ops_t.begin (method) - begin(self) -> ui_stroff_op_t - -ida_hexrays.ui_stroff_ops_t.capacity (method) - capacity(self) -> size_t - -ida_hexrays.ui_stroff_ops_t.clear (method) - clear(self) - -ida_hexrays.ui_stroff_ops_t.empty (method) - empty(self) -> bool - -ida_hexrays.ui_stroff_ops_t.end (method) - end(self) -> ui_stroff_op_t - -ida_hexrays.ui_stroff_ops_t.erase (method) - erase(self, it) -> ui_stroff_op_t - - @param it: qvector< ui_stroff_op_t >::iterator - - erase(self, first, last) -> ui_stroff_op_t - - @param first: qvector< ui_stroff_op_t >::iterator - @param last: qvector< ui_stroff_op_t >::iterator - -ida_hexrays.ui_stroff_ops_t.extract (method) - extract(self) -> ui_stroff_op_t - -ida_hexrays.ui_stroff_ops_t.find (method) - find(self, x) -> ui_stroff_op_t - - @param x: ui_stroff_op_t const & - -ida_hexrays.ui_stroff_ops_t.grow (method) - grow(self, x=ui_stroff_op_t()) - - @param x: ui_stroff_op_t const & - -ida_hexrays.ui_stroff_ops_t.has (method) - has(self, x) -> bool - - @param x: ui_stroff_op_t const & - -ida_hexrays.ui_stroff_ops_t.inject (method) - inject(self, s, len) - - @param s: ui_stroff_op_t * - @param len: size_t - -ida_hexrays.ui_stroff_ops_t.insert (method) - insert(self, it, x) -> ui_stroff_op_t - - @param it: qvector< ui_stroff_op_t >::iterator - @param x: ui_stroff_op_t const & - -ida_hexrays.ui_stroff_ops_t.pop_back (method) - pop_back(self) - -ida_hexrays.ui_stroff_ops_t.push_back (method) - push_back(self, x) - - @param x: ui_stroff_op_t const & - - push_back(self) -> ui_stroff_op_t - -ida_hexrays.ui_stroff_ops_t.qclear (method) - qclear(self) - -ida_hexrays.ui_stroff_ops_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_hexrays.ui_stroff_ops_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: ui_stroff_op_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_hexrays.ui_stroff_ops_t.size (method) - size(self) -> size_t - -ida_hexrays.ui_stroff_ops_t.swap (method) - swap(self, r) - - @param r: qvector< ui_stroff_op_t > & - -ida_hexrays.ui_stroff_ops_t.truncate (method) - truncate(self) - -ida_hexrays.user_cmts_begin (function) - 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 *) user_cmts_t const * - -ida_hexrays.user_cmts_clear (function) - user_cmts_clear(map) - Clear user_cmts_t. - - @param map: (C++: user_cmts_t *) - -ida_hexrays.user_cmts_end (function) - 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 *) user_cmts_t const * - -ida_hexrays.user_cmts_erase (function) - 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 (function) - user_cmts_find(map, key) -> user_cmts_iterator_t - Find the specified key in user_cmts_t. - - @param map: (C++: const user_cmts_t *) user_cmts_t const * - @param key: (C++: const treeloc_t &) treeloc_t const & - -ida_hexrays.user_cmts_first (function) - 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 (function) - user_cmts_free(map) - Delete user_cmts_t instance. - - @param map: (C++: user_cmts_t *) - -ida_hexrays.user_cmts_insert (function) - 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 &) treeloc_t const & - @param val: (C++: const citem_cmt_t &) citem_cmt_t const & - -ida_hexrays.user_cmts_iterator_t (class) - Proxy of C++ user_cmts_iterator_t class. - -ida_hexrays.user_cmts_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: user_cmts_iterator_t const & - -ida_hexrays.user_cmts_iterator_t.__init__ (method) - __init__(self) -> user_cmts_iterator_t - -ida_hexrays.user_cmts_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: user_cmts_iterator_t const & - -ida_hexrays.user_cmts_new (function) - user_cmts_new() -> user_cmts_t - Create a new user_cmts_t instance. - -ida_hexrays.user_cmts_next (function) - 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 (function) - 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 (function) - 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 (function) - user_cmts_size(map) -> size_t - Get size of user_cmts_t. - - @param map: (C++: user_cmts_t *) - -ida_hexrays.user_cmts_t (class) - Proxy of C++ std::map< treeloc_t,citem_cmt_t > class. - -ida_hexrays.user_cmts_t.__init__ (method) - __init__(self) -> user_cmts_t - -ida_hexrays.user_cmts_t.at (method) - at(self, _Keyval) -> citem_cmt_t - - @param _Keyval: treeloc_t const & - -ida_hexrays.user_cmts_t.size (method) - size(self) -> size_t - -ida_hexrays.user_iflags_begin (function) - 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 *) user_iflags_t const * - -ida_hexrays.user_iflags_clear (function) - user_iflags_clear(map) - Clear user_iflags_t. - - @param map: (C++: user_iflags_t *) - -ida_hexrays.user_iflags_end (function) - 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 *) user_iflags_t const * - -ida_hexrays.user_iflags_erase (function) - 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 (function) - user_iflags_find(map, key) -> user_iflags_iterator_t - Find the specified key in user_iflags_t. - - @param map: (C++: const user_iflags_t *) user_iflags_t const * - @param key: (C++: const citem_locator_t &) citem_locator_t const & - -ida_hexrays.user_iflags_first (function) - 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 (function) - user_iflags_free(map) - Delete user_iflags_t instance. - - @param map: (C++: user_iflags_t *) - -ida_hexrays.user_iflags_insert (function) - 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 &) citem_locator_t const & - @param val: (C++: const int32 &) int32 const & - -ida_hexrays.user_iflags_iterator_t (class) - Proxy of C++ user_iflags_iterator_t class. - -ida_hexrays.user_iflags_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: user_iflags_iterator_t const & - -ida_hexrays.user_iflags_iterator_t.__init__ (method) - __init__(self) -> user_iflags_iterator_t - -ida_hexrays.user_iflags_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: user_iflags_iterator_t const & - -ida_hexrays.user_iflags_new (function) - user_iflags_new() -> user_iflags_t - Create a new user_iflags_t instance. - -ida_hexrays.user_iflags_next (function) - 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 (function) - 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 (function) - 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 (function) - user_iflags_size(map) -> size_t - Get size of user_iflags_t. - - @param map: (C++: user_iflags_t *) - -ida_hexrays.user_iflags_t (class) - Proxy of C++ std::map< citem_locator_t,int32 > class. - -ida_hexrays.user_iflags_t.__init__ (method) - __init__(self) -> user_iflags_t - -ida_hexrays.user_iflags_t.at (method) - at(self, _Keyval) -> int & - - @param _Keyval: citem_locator_t const & - -ida_hexrays.user_iflags_t.size (method) - size(self) -> size_t - -ida_hexrays.user_labels_begin (function) - 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 *) user_labels_t const * - -ida_hexrays.user_labels_clear (function) - user_labels_clear(map) - Clear user_labels_t. - - @param map: (C++: user_labels_t *) - -ida_hexrays.user_labels_end (function) - 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 *) user_labels_t const * - -ida_hexrays.user_labels_erase (function) - 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 (function) - user_labels_find(map, key) -> user_labels_iterator_t - Find the specified key in user_labels_t. - - @param map: (C++: const user_labels_t *) user_labels_t const * - @param key: (C++: const int &) int const & - -ida_hexrays.user_labels_first (function) - 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 (function) - user_labels_free(map) - Delete user_labels_t instance. - - @param map: (C++: user_labels_t *) - -ida_hexrays.user_labels_insert (function) - 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 &) int const & - @param val: (C++: const qstring &) qstring const & - -ida_hexrays.user_labels_iterator_t (class) - Proxy of C++ user_labels_iterator_t class. - -ida_hexrays.user_labels_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: user_labels_iterator_t const & - -ida_hexrays.user_labels_iterator_t.__init__ (method) - __init__(self) -> user_labels_iterator_t - -ida_hexrays.user_labels_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: user_labels_iterator_t const & - -ida_hexrays.user_labels_new (function) - user_labels_new() -> user_labels_t - Create a new user_labels_t instance. - -ida_hexrays.user_labels_next (function) - 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 (function) - 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 (function) - user_labels_second(p) -> qstring & - Get reference to the current map value. - - @param p: (C++: user_labels_iterator_t) - -ida_hexrays.user_labels_size (function) - user_labels_size(map) -> size_t - Get size of user_labels_t. - - @param map: (C++: user_labels_t *) - -ida_hexrays.user_labels_t (class) - Proxy of C++ std::map< int,qstring > class. - -ida_hexrays.user_labels_t.__init__ (method) - __init__(self) -> user_labels_t - -ida_hexrays.user_labels_t.at (method) - at(self, _Keyval) -> _qstring< char > & - - @param _Keyval: int const & - -ida_hexrays.user_labels_t.size (method) - size(self) -> size_t - -ida_hexrays.user_lvar_modifier_t (class) - Proxy of C++ user_lvar_modifier_t class. - -ida_hexrays.user_lvar_modifier_t.__disown__ (method) - -ida_hexrays.user_lvar_modifier_t.__init__ (method) - __init__(self) -> user_lvar_modifier_t - - @param self: PyObject * - -ida_hexrays.user_lvar_modifier_t.modify_lvars (method) - modify_lvars(self, lvinf) -> bool - Modify lvar settings. Returns: true-modified - - @param lvinf: (C++: lvar_uservec_t *) - -ida_hexrays.user_numforms_begin (function) - 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 *) user_numforms_t const * - -ida_hexrays.user_numforms_clear (function) - user_numforms_clear(map) - Clear user_numforms_t. - - @param map: (C++: user_numforms_t *) - -ida_hexrays.user_numforms_end (function) - 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 *) user_numforms_t const * - -ida_hexrays.user_numforms_erase (function) - 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 (function) - user_numforms_find(map, key) -> user_numforms_iterator_t - Find the specified key in user_numforms_t. - - @param map: (C++: const user_numforms_t *) user_numforms_t const * - @param key: (C++: const operand_locator_t &) operand_locator_t const & - -ida_hexrays.user_numforms_first (function) - 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 (function) - user_numforms_free(map) - Delete user_numforms_t instance. - - @param map: (C++: user_numforms_t *) - -ida_hexrays.user_numforms_insert (function) - 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 &) operand_locator_t const & - @param val: (C++: const number_format_t &) number_format_t const & - -ida_hexrays.user_numforms_iterator_t (class) - Proxy of C++ user_numforms_iterator_t class. - -ida_hexrays.user_numforms_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: user_numforms_iterator_t const & - -ida_hexrays.user_numforms_iterator_t.__init__ (method) - __init__(self) -> user_numforms_iterator_t - -ida_hexrays.user_numforms_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: user_numforms_iterator_t const & - -ida_hexrays.user_numforms_new (function) - user_numforms_new() -> user_numforms_t - Create a new user_numforms_t instance. - -ida_hexrays.user_numforms_next (function) - 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 (function) - 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 (function) - 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 (function) - user_numforms_size(map) -> size_t - Get size of user_numforms_t. - - @param map: (C++: user_numforms_t *) - -ida_hexrays.user_numforms_t (class) - Proxy of C++ std::map< operand_locator_t,number_format_t > class. - -ida_hexrays.user_numforms_t.__init__ (method) - __init__(self) -> user_numforms_t - -ida_hexrays.user_numforms_t.at (method) - at(self, _Keyval) -> number_format_t - - @param _Keyval: operand_locator_t const & - -ida_hexrays.user_numforms_t.size (method) - size(self) -> size_t - -ida_hexrays.user_unions_begin (function) - 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 *) user_unions_t const * - -ida_hexrays.user_unions_clear (function) - user_unions_clear(map) - Clear user_unions_t. - - @param map: (C++: user_unions_t *) - -ida_hexrays.user_unions_end (function) - 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 *) user_unions_t const * - -ida_hexrays.user_unions_erase (function) - 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 (function) - user_unions_find(map, key) -> user_unions_iterator_t - Find the specified key in user_unions_t. - - @param map: (C++: const user_unions_t *) user_unions_t const * - @param key: (C++: const ea_t &) ea_t const & - -ida_hexrays.user_unions_first (function) - 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 (function) - user_unions_free(map) - Delete user_unions_t instance. - - @param map: (C++: user_unions_t *) - -ida_hexrays.user_unions_insert (function) - 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 &) ea_t const & - @param val: (C++: const intvec_t &) intvec_t const & - -ida_hexrays.user_unions_iterator_t (class) - Proxy of C++ user_unions_iterator_t class. - -ida_hexrays.user_unions_iterator_t.__eq__ (method) - __eq__(self, p) -> bool - - @param p: user_unions_iterator_t const & - -ida_hexrays.user_unions_iterator_t.__init__ (method) - __init__(self) -> user_unions_iterator_t - -ida_hexrays.user_unions_iterator_t.__ne__ (method) - __ne__(self, p) -> bool - - @param p: user_unions_iterator_t const & - -ida_hexrays.user_unions_new (function) - user_unions_new() -> user_unions_t - Create a new user_unions_t instance. - -ida_hexrays.user_unions_next (function) - 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 (function) - 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 (function) - 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 (function) - user_unions_size(map) -> size_t - Get size of user_unions_t. - - @param map: (C++: user_unions_t *) - -ida_hexrays.user_unions_t (class) - Proxy of C++ std::map< ea_t,intvec_t > class. - -ida_hexrays.user_unions_t.__init__ (method) - __init__(self) -> user_unions_t - -ida_hexrays.user_unions_t.at (method) - at(self, _Keyval) -> intvec_t - - @param _Keyval: unsigned-ea-like-numeric-type const & - -ida_hexrays.user_unions_t.size (method) - size(self) -> size_t - -ida_hexrays.uval_ivl_ivlset_t (class) - Proxy of C++ ivlset_tpl< ivl_t,uval_t > class. - -ida_hexrays.uval_ivl_ivlset_t.__eq__ (method) - __eq__(self, v) -> bool - - @param v: ivl_t const & - -ida_hexrays.uval_ivl_ivlset_t.__init__ (method) - __init__(self) -> uval_ivl_ivlset_t - __init__(self, ivl) -> uval_ivl_ivlset_t - - @param ivl: ivl_t const & - -ida_hexrays.uval_ivl_ivlset_t.__ne__ (method) - __ne__(self, v) -> bool - - @param v: ivl_t const & - -ida_hexrays.uval_ivl_ivlset_t.all_values (method) - all_values(self) -> bool - -ida_hexrays.uval_ivl_ivlset_t.begin (method) - 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 (method) - clear(self) - -ida_hexrays.uval_ivl_ivlset_t.empty (method) - empty(self) -> bool - -ida_hexrays.uval_ivl_ivlset_t.end (method) - 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 (method) - getivl(self, idx) -> ivl_t - - @param idx: int - -ida_hexrays.uval_ivl_ivlset_t.lastivl (method) - lastivl(self) -> ivl_t - -ida_hexrays.uval_ivl_ivlset_t.nivls (method) - nivls(self) -> size_t - -ida_hexrays.uval_ivl_ivlset_t.qclear (method) - qclear(self) - -ida_hexrays.uval_ivl_ivlset_t.set_all_values (method) - set_all_values(self) - -ida_hexrays.uval_ivl_ivlset_t.single_value (method) - single_value(self) -> bool - single_value(self, v) -> bool - - @param v: unsigned-ea-like-numeric-type - -ida_hexrays.uval_ivl_ivlset_t.swap (method) - swap(self, r) - - @param r: ivlset_tpl< ivl_t,uval_t > & - -ida_hexrays.uval_ivl_t (class) - Proxy of C++ ivl_tpl< uval_t > class. - -ida_hexrays.uval_ivl_t.__init__ (method) - __init__(self, _off, _size) -> uval_ivl_t - - @param _off: unsigned-ea-like-numeric-type - @param _size: unsigned-ea-like-numeric-type - -ida_hexrays.uval_ivl_t.end (method) - end(self) -> unsigned-ea-like-numeric-type - -ida_hexrays.uval_ivl_t.last (method) - last(self) -> unsigned-ea-like-numeric-type - -ida_hexrays.uval_ivl_t.valid (method) - valid(self) -> bool - -ida_hexrays.valrng_t (class) - Proxy of C++ valrng_t class. - -ida_hexrays.valrng_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.valrng_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.valrng_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.valrng_t.__init__ (method) - __init__(self, size_=MAX_VLR_SIZE) -> valrng_t - - @param size_: int - - __init__(self, r) -> valrng_t - - @param r: valrng_t const & - -ida_hexrays.valrng_t.__le__ (method) - __le__(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.valrng_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.valrng_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.valrng_t._deregister (method) - _deregister(self) - -ida_hexrays.valrng_t._print (method) - _print(self) - -ida_hexrays.valrng_t._register (method) - _register(self) - -ida_hexrays.valrng_t.all_values (method) - all_values(self) -> bool - -ida_hexrays.valrng_t.compare (method) - compare(self, r) -> int - - @param r: valrng_t const & - -ida_hexrays.valrng_t.cvt_to_cmp (method) - cvt_to_cmp(self, strict) -> bool - - @param strict: bool - -ida_hexrays.valrng_t.cvt_to_single_value (method) - cvt_to_single_value(self) -> bool - -ida_hexrays.valrng_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.valrng_t.empty (method) - empty(self) -> bool - -ida_hexrays.valrng_t.get_size (method) - get_size(self) -> int - -ida_hexrays.valrng_t.has (method) - has(self, v) -> bool - - @param v: uvlr_t - -ida_hexrays.valrng_t.intersect_with (method) - intersect_with(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.valrng_t.inverse (method) - inverse(self) - -ida_hexrays.valrng_t.is_unknown (method) - is_unknown(self) -> bool - -ida_hexrays.valrng_t.max_svalue (method) - max_svalue(self, size_) -> uvlr_t - - @param size_: int - - max_svalue(self) -> uvlr_t - -ida_hexrays.valrng_t.max_value (method) - max_value(self, size_) -> uvlr_t - - @param size_: int - - max_value(self) -> uvlr_t - -ida_hexrays.valrng_t.min_svalue (method) - min_svalue(self, size_) -> uvlr_t - - @param size_: int - - min_svalue(self) -> uvlr_t - -ida_hexrays.valrng_t.reduce_size (method) - reduce_size(self, new_size) -> bool - - @param new_size: int - -ida_hexrays.valrng_t.set_all (method) - set_all(self) - -ida_hexrays.valrng_t.set_cmp (method) - set_cmp(self, cmp, _value) - - @param cmp: enum cmpop_t - @param _value: uvlr_t - -ida_hexrays.valrng_t.set_eq (method) - set_eq(self, v) - - @param v: uvlr_t - -ida_hexrays.valrng_t.set_none (method) - set_none(self) - -ida_hexrays.valrng_t.set_unk (method) - set_unk(self) - -ida_hexrays.valrng_t.swap (method) - swap(self, r) - - @param r: valrng_t & - -ida_hexrays.valrng_t.unite_with (method) - unite_with(self, r) -> bool - - @param r: valrng_t const & - -ida_hexrays.var_ref_t (class) - Proxy of C++ var_ref_t class. - -ida_hexrays.var_ref_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: var_ref_t const & - -ida_hexrays.var_ref_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: var_ref_t const & - -ida_hexrays.var_ref_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: var_ref_t const & - -ida_hexrays.var_ref_t.__init__ (method) - __init__(self) -> var_ref_t - -ida_hexrays.var_ref_t.__le__ (method) - __le__(self, r) -> bool - - @param r: var_ref_t const & - -ida_hexrays.var_ref_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: var_ref_t const & - -ida_hexrays.var_ref_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: var_ref_t const & - -ida_hexrays.var_ref_t.compare (method) - compare(self, r) -> int - - @param r: var_ref_t const & - -ida_hexrays.var_ref_t.getv (method) - getv(self) -> lvar_t - -ida_hexrays.var_ref_t.idx (variable) - index into lvars_t - -ida_hexrays.var_ref_t.mba (variable) - pointer to the underlying micro array - -ida_hexrays.vc_printer_t (class) - Proxy of C++ vc_printer_t class. - -ida_hexrays.vc_printer_t.__disown__ (method) - -ida_hexrays.vc_printer_t.__init__ (method) - __init__(self, f) -> vc_printer_t - - @param f: cfunc_t const * - -ida_hexrays.vc_printer_t.func (variable) - cfunc_t to generate text for - -ida_hexrays.vc_printer_t.oneliner (method) - oneliner(self) -> bool - Are we generating one-line text representation? - - @return: true if the output will occupy one line without line breaks - -ida_hexrays.vd_failure_t (class) - Proxy of C++ vd_failure_t class. - -ida_hexrays.vd_failure_t.__init__ (method) - __init__(self) -> vd_failure_t - __init__(self, code, ea, buf=None) -> vd_failure_t - - @param code: enum merror_t - @param ea: ea_t - @param buf: char const * - - __init__(self, code, ea, buf) -> vd_failure_t - - @param code: enum merror_t - @param ea: ea_t - @param buf: qstring const & - - __init__(self, _hf) -> vd_failure_t - - @param _hf: hexrays_failure_t const & - -ida_hexrays.vd_failure_t.desc (method) - desc(self) -> qstring - -ida_hexrays.vd_interr_t (class) - Proxy of C++ vd_interr_t class. - -ida_hexrays.vd_interr_t.__init__ (method) - __init__(self, ea, buf) -> vd_interr_t - - @param ea: ea_t - @param buf: char const * - -ida_hexrays.vd_printer_t (class) - Proxy of C++ vd_printer_t class. - -ida_hexrays.vd_printer_t.__disown__ (method) - -ida_hexrays.vd_printer_t.__init__ (method) - __init__(self) -> vd_printer_t - - @param self: PyObject * - -ida_hexrays.vd_printer_t._print (method) - _print(self, indent, format) -> int - - Parameters - ---------- - indent: int - format: char const * - -ida_hexrays.vd_printer_t.hdrlines (variable) - number of header lines (prototype+typedef+lvars) valid at the end of print - process - -ida_hexrays.vdloc_t (class) - Proxy of C++ vdloc_t class. - -ida_hexrays.vdloc_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: vdloc_t const & - -ida_hexrays.vdloc_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: vdloc_t const & - -ida_hexrays.vdloc_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: vdloc_t const & - -ida_hexrays.vdloc_t.__init__ (method) - __init__(self) -> vdloc_t - -ida_hexrays.vdloc_t.__le__ (method) - __le__(self, r) -> bool - - @param r: vdloc_t const & - -ida_hexrays.vdloc_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: vdloc_t const & - -ida_hexrays.vdloc_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: vdloc_t const & - -ida_hexrays.vdloc_t._set_reg1 (method) - _set_reg1(self, r1) - - Parameters - ---------- - r1: int - -ida_hexrays.vdloc_t.compare (method) - compare(self, r) -> int - - @param r: vdloc_t const & - -ida_hexrays.vdloc_t.is_aliasable (method) - is_aliasable(self, mb, size) -> bool - - @param mb: mba_t const * - @param size: int - -ida_hexrays.vdloc_t.reg1 (method) - reg1(self) -> int - -ida_hexrays.vdloc_t.set_reg1 (method) - set_reg1(self, r1) - - @param r1: int - -ida_hexrays.vdui_t (class) - Proxy of C++ vdui_t class. - -ida_hexrays.vdui_t.__init__ (method) - -ida_hexrays.vdui_t.calc_cmt_type (method) - calc_cmt_type(self, lnnum, cmttype) -> cmt_type_t - Check if the specified line can have a comment. Due to the coordinate system for - comments: (\link{https://www.hex-rays.com/blog/coordinate-system-for-hex-rays}) - some function lines cannot have comments. This function checks if a comment can - be attached to the specified line. - - @param lnnum: (C++: size_t) line number (0 based) - @param cmttype: (C++: cmt_type_t) comment types to check - @return: possible comment types - -ida_hexrays.vdui_t.cfunc (variable) - pointer to function object - -ida_hexrays.vdui_t.clear (method) - clear(self) - Clear the pseudocode window. It deletes the current function and microcode. - -ida_hexrays.vdui_t.collapse_item (method) - collapse_item(self, hide) -> bool - Collapse/uncollapse item. This function collapses the current item. - - @param hide: (C++: bool) - @return: false if failed. - -ida_hexrays.vdui_t.collapse_lvars (method) - collapse_lvars(self, hide) -> bool - Collapse/uncollapse local variable declarations. - - @param hide: (C++: bool) - @return: false if failed. - -ida_hexrays.vdui_t.cpos (variable) - Current ctext position. - -ida_hexrays.vdui_t.ct (variable) - pseudocode view - -ida_hexrays.vdui_t.ctree_to_disasm (method) - ctree_to_disasm(self) -> bool - Jump to disassembly. This function jumps to the address in the disassembly - window which corresponds to the current item. The current item is determined - based on the current keyboard cursor position. - - @return: false if failed - -ida_hexrays.vdui_t.del_orphan_cmts (method) - del_orphan_cmts(self) -> bool - Delete all orphan comments. Delete all orphan comments and refresh the screen. - - @return: true - -ida_hexrays.vdui_t.edit_cmt (method) - edit_cmt(self, loc) -> bool - Edit an indented comment. This function displays a dialog box and allows the - user to edit the comment for the specified ctree location. - - @param loc: (C++: const treeloc_t &) comment location - @return: false if failed or cancelled - -ida_hexrays.vdui_t.edit_func_cmt (method) - edit_func_cmt(self) -> bool - Edit a function comment. This function displays a dialog box and allows the user - to edit the function comment. - - @return: false if failed or cancelled - -ida_hexrays.vdui_t.flags (variable) - Properties of pseudocode window - -ida_hexrays.vdui_t.get_current_item (method) - get_current_item(self, idv) -> bool - Get current item. This function refreshes the cpos, item, tail fields. - - @param idv: (C++: input_device_t) keyboard or mouse - @see: cfunc_t::get_line_item() - @return: false if failed - -ida_hexrays.vdui_t.get_current_label (method) - get_current_label(self) -> int - Get current label. If there is a label under the cursor, return its number. - - @return: -1 if there is no label under the cursor. prereq: get_current_item() - has been called - -ida_hexrays.vdui_t.get_number (method) - get_number(self) -> cnumber_t - Get current number. If the current item is a number, return pointer to it. - - @return: nullptr if the current item is not a number This function returns non- - null for the cases of a 'switch' statement Also, if the current item is - a casted number, then this function will succeed. - -ida_hexrays.vdui_t.head (variable) - First ctree item on the current line (for block comments) - -ida_hexrays.vdui_t.in_ctree (method) - in_ctree(self) -> bool - Is the current item a statement? - - @return: false if the cursor is in the local variable/type declaration area - true if the cursor is in the statement area - -ida_hexrays.vdui_t.invert_bits (method) - invert_bits(self) -> bool - Bitwise negate a number. This function inverts all bits of the current number. - - @return: false if failed. - -ida_hexrays.vdui_t.invert_sign (method) - invert_sign(self) -> bool - Negate a number. This function negates the current number. - - @return: false if failed. - -ida_hexrays.vdui_t.item (variable) - Current ctree item. - -ida_hexrays.vdui_t.jump_enter (method) - jump_enter(self, idv, omflags) -> bool - Process the Enter key. This function jumps to the definition of the item under - the cursor. If the current item is a function, it will be decompiled. If the - current item is a global data, its disassemly text will be displayed. - - @param idv: (C++: input_device_t) what cursor must be used, the keyboard or the mouse - @param omflags: (C++: int) OM_NEWWIN: new pseudocode window will open, 0: reuse the - existing window - @return: false if failed - -ida_hexrays.vdui_t.last_code (variable) - result of the last user action. See Microcode error codes - -ida_hexrays.vdui_t.locked (method) - locked(self) -> bool - Does the pseudocode window contain valid code? We lock windows before modifying - them, to avoid recursion due to the events generated by the IDA kernel. - @retval true: The window is locked and may have stale info - -ida_hexrays.vdui_t.map_lvar (method) - map_lvar(self, frm, to) -> bool - Map a local variable to another. This function permanently maps one lvar to - another. All occurrences of the mapped variable are replaced by the new variable - - @param from: (C++: lvar_t *) the variable being mapped - @param to: (C++: lvar_t *) the variable to map to. if nullptr, unmaps the variable - @return: false if failed - -ida_hexrays.vdui_t.mba (variable) - pointer to underlying microcode - -ida_hexrays.vdui_t.refresh_cpos (method) - refresh_cpos(self, idv) -> bool - Refresh the current position. This function refreshes the cpos field. - - @param idv: (C++: input_device_t) keyboard or mouse - @return: false if failed - -ida_hexrays.vdui_t.refresh_ctext (method) - refresh_ctext(self, activate=True) - Refresh pseudocode window. This function refreshes the pseudocode window by - regenerating its text from cfunc_t. Instead of this function use - refresh_func_ctext(), which refreshes all pseudocode windows for the function. - @see: refresh_view(), refresh_func_ctext() - - @param activate: (C++: bool) - -ida_hexrays.vdui_t.refresh_view (method) - refresh_view(self, redo_mba) - Refresh pseudocode window. This is the highest level refresh function. It causes - the most profound refresh possible and can lead to redecompilation of the - current function. Please consider using refresh_ctext() if you need a more - superficial refresh. - - @param redo_mba: (C++: bool) true means to redecompile the current function - false means to rebuild ctree without regenerating microcode - @see: refresh_ctext() - -ida_hexrays.vdui_t.rename_global (method) - rename_global(self, ea) -> bool - Rename global item. This function displays a dialog box and allows the user to - rename a global item (data or function). - - @param ea: (C++: ea_t) address of the global item - @return: false if failed or cancelled - -ida_hexrays.vdui_t.rename_label (method) - rename_label(self, label) -> bool - Rename a label. This function displays a dialog box and allows the user to - rename a statement label. - - @param label: (C++: int) label number - @return: false if failed or cancelled - -ida_hexrays.vdui_t.rename_lvar (method) - rename_lvar(self, v, name, is_user_name) -> bool - Rename local variable. This function permanently renames a local variable. - - @param v: (C++: lvar_t *) pointer to local variable - @param name: (C++: const char *) new variable name - @param is_user_name: (C++: bool) use true to save the new name into the database. use false - to delete the saved name. - @see: ::rename_lvar() - @return: false if failed - -ida_hexrays.vdui_t.rename_strmem (method) - rename_strmem(self, sptr, mptr) -> bool - Rename structure field. This function displays a dialog box and allows the user - to rename a structure field. - - @param sptr: (C++: struc_t *) pointer to structure - @param mptr: (C++: member_t *) pointer to structure member OBSOLETE FUNCTION, do not use! - @return: false if failed or cancelled - -ida_hexrays.vdui_t.rename_udm (method) - rename_udm(self, udt_type, udm_idx) -> bool - Rename structure field. This function displays a dialog box and allows the user - to rename a structure field. - - @param udt_type: (C++: tinfo_t &) structure/union type - @param udm_idx: (C++: int) index of the structure/union member - @return: false if failed or cancelled - -ida_hexrays.vdui_t.set_global_type (method) - set_global_type(self, ea) -> bool - Set global item type. This function displays a dialog box and allows the user to - change the type of a global item (data or function). - - @param ea: (C++: ea_t) address of the global item - @return: false if failed or cancelled - -ida_hexrays.vdui_t.set_locked (method) - set_locked(self, v) -> bool - - @param v: bool - -ida_hexrays.vdui_t.set_lvar_cmt (method) - set_lvar_cmt(self, v, cmt) -> bool - Set local variable comment. This function permanently sets a variable comment. - - @param v: (C++: lvar_t *) pointer to local variable - @param cmt: (C++: const char *) new comment - @return: false if failed - -ida_hexrays.vdui_t.set_lvar_type (method) - set_lvar_type(self, v, type) -> bool - Set local variable type. This function permanently sets a local variable type - and clears NOPTR flag if it was set before by function 'set_noptr_lvar' - - @param v: (C++: lvar_t *) pointer to local variable - @param type: (C++: const tinfo_t &) new variable type - @return: false if failed - -ida_hexrays.vdui_t.set_noptr_lvar (method) - set_noptr_lvar(self, v) -> bool - Inform that local variable should have a non-pointer type This function - permanently sets a corresponding variable flag (NOPTR) and removes type if it - was set before by function 'set_lvar_type' - - @param v: (C++: lvar_t *) pointer to local variable - @return: false if failed - -ida_hexrays.vdui_t.set_num_enum (method) - set_num_enum(self) -> bool - Convert number to symbolic constant. This function displays a dialog box and - allows the user to select a symbolic constant to represent the number. - - @return: false if failed or cancelled - -ida_hexrays.vdui_t.set_num_radix (method) - set_num_radix(self, base) -> bool - Change number base. This function changes the current number representation. - - @param base: (C++: int) number radix (10 or 16) - 0 means a character constant - @return: false if failed - -ida_hexrays.vdui_t.set_num_stroff (method) - set_num_stroff(self) -> bool - Convert number to structure field offset. Currently not implemented. - - @return: false if failed or cancelled - -ida_hexrays.vdui_t.set_strmem_type (method) - set_strmem_type(self, sptr, mptr) -> bool - Set structure field type. This function displays a dialog box and allows the - user to change the type of a structure field. - - @param sptr: (C++: struc_t *) pointer to structure - @param mptr: (C++: member_t *) pointer to structure member OBSOLETE FUNCTION, do not use! - @return: false if failed or cancelled - -ida_hexrays.vdui_t.set_udm_type (method) - set_udm_type(self, udt_type, udm_idx) -> bool - Set structure field type. This function displays a dialog box and allows the - user to change the type of a structure field. - - @param udt_type: (C++: tinfo_t &) structure/union type - @param udm_idx: (C++: int) index of the structure/union member - @return: false if failed or cancelled - -ida_hexrays.vdui_t.set_valid (method) - set_valid(self, v) - - @param v: bool - -ida_hexrays.vdui_t.set_visible (method) - set_visible(self, v) - - @param v: bool - -ida_hexrays.vdui_t.split_item (method) - split_item(self, split) -> bool - Split/unsplit item. This function splits the current assignment expression. - - @param split: (C++: bool) - @return: false if failed. - -ida_hexrays.vdui_t.switch_to (method) - switch_to(self, f, activate) - Display the specified pseudocode. This function replaces the pseudocode window - contents with the specified cfunc_t. - - @param f: (C++: cfuncptr_t) pointer to the function to display. - @param activate: (C++: bool) should the pseudocode window get focus? - -ida_hexrays.vdui_t.tail (variable) - Tail ctree item on the current line (for indented comments) - -ida_hexrays.vdui_t.ui_edit_lvar_cmt (method) - ui_edit_lvar_cmt(self, v) -> bool - Set local variable comment. This function displays a dialog box and allows the - user to edit the comment of a local variable. - - @param v: (C++: lvar_t *) pointer to local variable - @return: false if failed or cancelled - -ida_hexrays.vdui_t.ui_map_lvar (method) - ui_map_lvar(self, v) -> bool - Map a local variable to another. This function displays a variable list and - allows the user to select mapping. - - @param v: (C++: lvar_t *) pointer to local variable - @return: false if failed or cancelled - -ida_hexrays.vdui_t.ui_rename_lvar (method) - ui_rename_lvar(self, v) -> bool - Rename local variable. This function displays a dialog box and allows the user - to rename a local variable. - - @param v: (C++: lvar_t *) pointer to local variable - @return: false if failed or cancelled - -ida_hexrays.vdui_t.ui_set_call_type (method) - ui_set_call_type(self, e) -> bool - Set type of a function call This function displays a dialog box and allows the - user to change the type of a function call - - @param e: (C++: const cexpr_t *) pointer to call expression - @return: false if failed or cancelled - -ida_hexrays.vdui_t.ui_set_lvar_type (method) - ui_set_lvar_type(self, v) -> bool - Set local variable type. This function displays a dialog box and allows the user - to change the type of a local variable. - - @param v: (C++: lvar_t *) pointer to local variable - @return: false if failed or cancelled - -ida_hexrays.vdui_t.ui_unmap_lvar (method) - ui_unmap_lvar(self, v) -> bool - Unmap a local variable. This function displays list of variables mapped to the - specified variable and allows the user to select a variable to unmap. - - @param v: (C++: lvar_t *) pointer to local variable - @return: false if failed or cancelled - -ida_hexrays.vdui_t.valid (method) - valid(self) -> bool - Does the pseudocode window contain valid code? It can become invalid if the - function type gets changed in IDA. - -ida_hexrays.vdui_t.view_idx (variable) - pseudocode window index (0..) - -ida_hexrays.vdui_t.visible (method) - visible(self) -> bool - Is the pseudocode window visible? if not, it might be invisible or destroyed - -ida_hexrays.vivl_t (class) - Proxy of C++ vivl_t class. - -ida_hexrays.vivl_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: vivl_t const & - - __eq__(self, mop) -> bool - - @param mop: mop_t const & - -ida_hexrays.vivl_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: vivl_t const & - -ida_hexrays.vivl_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: vivl_t const & - -ida_hexrays.vivl_t.__init__ (method) - __init__(self, _type=mop_z, _off=-1, _size=0) -> vivl_t - - @param _type: mopt_t - @param _off: sval_t - @param _size: int - - __init__(self, ch) -> vivl_t - - @param ch: chain_t const & - - __init__(self, op) -> vivl_t - - @param op: mop_t const & - -ida_hexrays.vivl_t.__le__ (method) - __le__(self, r) -> bool - - @param r: vivl_t const & - -ida_hexrays.vivl_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: vivl_t const & - -ida_hexrays.vivl_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: vivl_t const & - -ida_hexrays.vivl_t._print (method) - _print(self) - -ida_hexrays.vivl_t.compare (method) - compare(self, r) -> int - - @param r: vivl_t const & - -ida_hexrays.vivl_t.contains (method) - contains(self, voff2) -> bool - Does our value interval contain the specified value offset? - - @param voff2: (C++: const voff_t &) voff_t const & - -ida_hexrays.vivl_t.dstr (method) - dstr(self) -> char const * - -ida_hexrays.vivl_t.extend_to_cover (method) - extend_to_cover(self, r) -> bool - Extend a value interval using another value interval of the same type - - @param r: (C++: const vivl_t &) vivl_t const & - @return: success - -ida_hexrays.vivl_t.includes (method) - includes(self, r) -> bool - Does our value interval include another? - - @param r: (C++: const vivl_t &) vivl_t const & - -ida_hexrays.vivl_t.intersect (method) - intersect(self, r) -> uval_t - Intersect value intervals the same type - - @param r: (C++: const vivl_t &) vivl_t const & - @return: size of the resulting intersection - -ida_hexrays.vivl_t.overlap (method) - overlap(self, r) -> bool - Do two value intervals overlap? - - @param r: (C++: const vivl_t &) vivl_t const & - -ida_hexrays.vivl_t.set (method) - set(self, _type, _off, _size=0) - - @param _type: mopt_t - @param _off: sval_t - @param _size: int - - set(self, voff, _size) - - @param voff: voff_t const & - @param _size: int - -ida_hexrays.vivl_t.set_reg (method) - set_reg(self, mreg, sz=0) - - @param mreg: mreg_t - @param sz: int - -ida_hexrays.vivl_t.set_stkoff (method) - set_stkoff(self, stkoff, sz=0) - - @param stkoff: sval_t - @param sz: int - -ida_hexrays.vivl_t.size (variable) - Interval size in bytes. - -ida_hexrays.voff_t (class) - Proxy of C++ voff_t class. - -ida_hexrays.voff_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: voff_t const & - -ida_hexrays.voff_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: voff_t const & - -ida_hexrays.voff_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: voff_t const & - -ida_hexrays.voff_t.__init__ (method) - __init__(self) -> voff_t - __init__(self, _type, _off) -> voff_t - - @param _type: mopt_t - @param _off: sval_t - - __init__(self, op) -> voff_t - - @param op: mop_t const & - -ida_hexrays.voff_t.__le__ (method) - __le__(self, r) -> bool - - @param r: voff_t const & - -ida_hexrays.voff_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: voff_t const & - -ida_hexrays.voff_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: voff_t const & - -ida_hexrays.voff_t.add (method) - add(self, width) -> voff_t - - @param width: int - -ida_hexrays.voff_t.compare (method) - compare(self, r) -> int - - @param r: voff_t const & - -ida_hexrays.voff_t.defined (method) - defined(self) -> bool - -ida_hexrays.voff_t.diff (method) - diff(self, r) -> sval_t - - @param r: voff_t const & - -ida_hexrays.voff_t.get_reg (method) - get_reg(self) -> mreg_t - -ida_hexrays.voff_t.get_stkoff (method) - get_stkoff(self) -> sval_t - -ida_hexrays.voff_t.inc (method) - inc(self, delta) - - @param delta: sval_t - -ida_hexrays.voff_t.is_reg (method) - is_reg(self) -> bool - -ida_hexrays.voff_t.is_stkoff (method) - is_stkoff(self) -> bool - -ida_hexrays.voff_t.off (variable) - register number or stack offset - -ida_hexrays.voff_t.set (method) - set(self, _type, _off) - - @param _type: mopt_t - @param _off: sval_t - -ida_hexrays.voff_t.set_reg (method) - set_reg(self, mreg) - - @param mreg: mreg_t - -ida_hexrays.voff_t.set_stkoff (method) - set_stkoff(self, stkoff) - - @param stkoff: sval_t - -ida_hexrays.voff_t.type (variable) - mop_r - register, mop_S - stack, mop_z - undefined - -ida_hexrays.voff_t.undef (method) - undef(self) - -ida_allins (module) - - -ida_auto (module) - Functions that work with the autoanalyzer queue. - - The autoanalyzer works when IDA is not busy processing the user keystrokes. It - has several queues, each queue having its own priority. The analyzer stops when - all queues are empty. - - A queue contains addresses or address ranges. The addresses are kept sorted by - their values. The analyzer will process all addresses from the first queue, then - switch to the second queue and so on. There are no limitations on the size of - the queues. - - This file also contains functions that deal with the IDA status indicator and - the autoanalysis indicator. You may use these functions to change the indicator - value. - -ida_auto.AU_CHLB (variable) - 12: load signature file (file name is kept separately) - -ida_auto.AU_CODE (variable) - 1: convert to instruction - -ida_auto.AU_FCHUNK (variable) - 5: find func chunks - -ida_auto.AU_FINAL (variable) - 13: final pass - -ida_auto.AU_LBF2 (variable) - 10: the same, second pass - -ida_auto.AU_LBF3 (variable) - 11: the same, third pass - -ida_auto.AU_LIBF (variable) - 9: apply signature to address - -ida_auto.AU_NONE (variable) - placeholder, not used - -ida_auto.AU_PROC (variable) - 3: convert to procedure start - -ida_auto.AU_TAIL (variable) - 4: add a procedure tail - -ida_auto.AU_TYPE (variable) - 8: apply type information - -ida_auto.AU_UNK (variable) - 0: convert to unexplored - -ida_auto.AU_USD2 (variable) - 7: reanalyze, second pass - -ida_auto.AU_USED (variable) - 6: reanalyze - -ida_auto.AU_WEAK (variable) - 2: convert to instruction (ida decision) - -ida_auto.auto_apply_tail (function) - auto_apply_tail(tail_ea, parent_ea) - Plan to apply the tail_ea chunk to the parent - - @param tail_ea: (C++: ea_t) linear address of start of tail - @param parent_ea: (C++: ea_t) linear address within parent. If BADADDR, automatically try to - find parent via xrefs. - -ida_auto.auto_apply_type (function) - 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 (function) - 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) - -ida_auto.auto_display_t (class) - Proxy of C++ auto_display_t class. - -ida_auto.auto_display_t.__init__ (method) - __init__(self) -> auto_display_t - -ida_auto.auto_get (function) - 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 (function) - auto_is_ok() -> bool - Are all queues empty? (i.e. has autoanalysis finished?). - -ida_auto.auto_make_code (function) - auto_make_code(ea) - Plan to make code. - - @param ea: (C++: ea_t) - -ida_auto.auto_make_proc (function) - auto_make_proc(ea) - Plan to make code&function. - - @param ea: (C++: ea_t) - -ida_auto.auto_make_step (function) - auto_make_step(ea1, ea2) -> bool - Analyze one address in the specified range and return true. - - @param ea1: (C++: ea_t) - @param ea2: (C++: ea_t) - @return: if processed anything. false means that there is nothing to process in - the specified range. - -ida_auto.auto_mark (function) - 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 (function) - 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_postpone_analysis (function) - auto_postpone_analysis(ea) -> bool - Plan to reanalyze on the second pass The typical usage of this function in - emu.cpp is: if ( !auto_postpone_analysis(ea) ) op_offset(ea, 0, ...); (we make - an offset only on the second pass) - - @param ea: (C++: ea_t) - -ida_auto.auto_recreate_insn (function) - auto_recreate_insn(ea) -> int - Try to create instruction - - @param ea: (C++: ea_t) linear address of callee - @return: the length of the instruction or 0 - -ida_auto.auto_unmark (function) - 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 (function) - 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 (function) - 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 (function) - 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 (function) - get_auto_display(auto_display) -> bool - Get structure which holds the autoanalysis indicator contents. - - @param auto_display: (C++: auto_display_t *) - -ida_auto.get_auto_state (function) - 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 (function) - is_auto_enabled() -> bool - Get autoanalyzer state. - -ida_auto.may_create_stkvars (function) - 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 (function) - 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 (function) - 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 (function) - 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. - @retval 1: ok - @retval 0: Ctrl-Break was pressed - - @param ea1: (C++: ea_t) - @param ea2: (C++: ea_t) - @param final_pass: (C++: bool) - -ida_auto.plan_ea (function) - plan_ea(ea) - Plan to perform reanalysis. - - @param ea: (C++: ea_t) - -ida_auto.plan_range (function) - plan_range(sEA, eEA) - Plan to perform reanalysis. - - @param sEA: (C++: ea_t) - @param eEA: (C++: ea_t) - -ida_auto.reanalyze_callers (function) - 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: (C++: ea_t) linear address of callee - @param noret: (C++: bool) !=0: the callee doesn't return, mark to undefine subsequent - instructions in the caller. 0: do nothing. - -ida_auto.revert_ida_decisions (function) - 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 (function) - set_auto_state(new_state) -> atype_t - Set current state of autoanalyzer. - - @param new_state: (C++: atype_t) new state of autoanalyzer - @return: previous state - -ida_auto.set_ida_state (function) - set_ida_state(st) -> idastate_t - Change IDA status indicator value - - @param st: (C++: idastate_t) - new indicator status - @return: old indicator status - -ida_auto.show_addr (function) - show_addr(ea) - Show an address on the autoanalysis indicator. The address is displayed in the - form " @:12345678". - - @param ea: (C++: ea_t) - linear address to display - -ida_auto.show_auto (function) - show_auto(ea, type=AU_NONE) - Change autoanalysis indicator value. - - @param ea: (C++: ea_t) linear address being analyzed - @param type: (C++: atype_t) autoanalysis type (see Autoanalysis queues) - -ida_bitrange (module) - Definition of the bitrange_t class. - -ida_bitrange.bitrange_t (class) - Proxy of C++ bitrange_t class. - -ida_bitrange.bitrange_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: bitrange_t const & - -ida_bitrange.bitrange_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: bitrange_t const & - -ida_bitrange.bitrange_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: bitrange_t const & - -ida_bitrange.bitrange_t.__init__ (method) - __init__(self, bit_ofs=0, size_in_bits=0) -> bitrange_t - - @param bit_ofs: uint16 - @param size_in_bits: uint16 - -ida_bitrange.bitrange_t.__le__ (method) - __le__(self, r) -> bool - - @param r: bitrange_t const & - -ida_bitrange.bitrange_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: bitrange_t const & - -ida_bitrange.bitrange_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: bitrange_t const & - -ida_bitrange.bitrange_t.__str__ (method) - __str__(self) -> qstring - -ida_bitrange.bitrange_t.apply_mask (method) - apply_mask(self, subrange) -> bool - Apply mask to a bitrange - - @param subrange: (C++: const bitrange_t &) range *inside* the main bitrange to keep After this operation - the main bitrange will be truncated to have only the bits that - are specified by subrange. Example: [off=8,nbits=4], - subrange[off=1,nbits=2] => [off=9,nbits=2] - @return: success - -ida_bitrange.bitrange_t.bitoff (method) - bitoff(self) -> uint - Get offset of 1st bit. - -ida_bitrange.bitrange_t.bitsize (method) - bitsize(self) -> uint - Get size of the value in bits. - -ida_bitrange.bitrange_t.bytesize (method) - bytesize(self) -> uint - Size of the value in bytes. - -ida_bitrange.bitrange_t.compare (method) - compare(self, r) -> int - - @param r: bitrange_t const & - -ida_bitrange.bitrange_t.create_union (method) - create_union(self, r) - Create union of 2 ranges including the hole between them. - - @param r: (C++: const bitrange_t &) bitrange_t const & - -ida_bitrange.bitrange_t.empty (method) - empty(self) -> bool - Is the bitrange empty? - -ida_bitrange.bitrange_t.extract (method) - extract(self, src, is_mf) -> bool - - @param src: void const * - @param is_mf: bool - -ida_bitrange.bitrange_t.has_common (method) - has_common(self, r) -> bool - Does have common bits with another bitrange? - - @param r: (C++: const bitrange_t &) bitrange_t const & - -ida_bitrange.bitrange_t.init (method) - init(self, bit_ofs, size_in_bits) - Initialize offset and size to given values. - - @param bit_ofs: (C++: uint16) - @param size_in_bits: (C++: uint16) - -ida_bitrange.bitrange_t.inject (method) - inject(self, dst, src, is_mf) -> bool - - @param dst: void * - @param src: bytevec_t const & - @param is_mf: bool - -ida_bitrange.bitrange_t.intersect (method) - intersect(self, r) - Intersect two ranges. - - @param r: (C++: const bitrange_t &) bitrange_t const & - -ida_bitrange.bitrange_t.mask64 (method) - mask64(self) -> uint64 - Convert to mask of 64 bits. - -ida_bitrange.bitrange_t.reset (method) - reset(self) - Make the bitrange empty. - -ida_bitrange.bitrange_t.shift_down (method) - shift_down(self, cnt) - Shift range down (left) - - @param cnt: (C++: uint) - -ida_bitrange.bitrange_t.shift_up (method) - shift_up(self, cnt) - Shift range up (right) - - @param cnt: (C++: uint) - -ida_bitrange.bitrange_t.sub (method) - sub(self, r) -> bool - Subtract a bitrange. - - @param r: (C++: const bitrange_t &) bitrange_t const & - -ida_bytes (module) - Contains functions that deal with individual byte characteristics. - - Each byte of the disassembled program is represented by a 32-bit value. We will - call this value 'flags'. The structure of the flags is here. - - You are not allowed to inspect individual bits of flags and modify them - directly. Use special functions to inspect and/or modify flags. - - Flags are kept in a virtual array file (*.id1). Addresses (ea) are all 32-bit - (or 64-bit) quantities. - -ida_bytes.ALOPT_APPEND (variable) - if an existing strlit is encountered, then append it to the string. - -ida_bytes.ALOPT_IGNCLT (variable) - 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 (variable) - 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 (variable) - 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 (variable) - if string length is more than 4K, return the accumulated length - -ida_bytes.ALOPT_ONLYTERM (variable) - only the termination characters can be at the string end. Without this option - illegal characters also terminate the string. - -ida_bytes.BIN_SEARCH_BACKWARD (variable) - search backward for bytes - -ida_bytes.BIN_SEARCH_BITMASK (variable) - searching using strict bit mask - -ida_bytes.BIN_SEARCH_CASE (variable) - case sensitive - -ida_bytes.BIN_SEARCH_FORWARD (variable) - search forward for bytes - -ida_bytes.BIN_SEARCH_INITED (variable) - find_byte, find_byter: any initilized value - -ida_bytes.BIN_SEARCH_NOBREAK (variable) - don't check for Ctrl-Break - -ida_bytes.BIN_SEARCH_NOCASE (variable) - case insensitive - -ida_bytes.BIN_SEARCH_NOSHOW (variable) - don't show search progress or update screen - -ida_bytes.DELIT_DELNAMES (variable) - delete any names at the specified address range (except for the starting - address). this bit is valid if nbytes > 1 - -ida_bytes.DELIT_EXPAND (variable) - 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 (variable) - do not undefine the function start. Just delete xrefs, ops e.t.c. - -ida_bytes.DELIT_NOCMT (variable) - 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 (variable) - don't truncate the current function even if AF_TRFUNC is set - -ida_bytes.DELIT_NOUNAME (variable) - 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 (variable) - simply undefine the specified item(s) - -ida_bytes.DTP_NODUP (variable) - do not use dup construct - -ida_bytes.DT_TYPE (variable) - Mask for DATA typing. - -ida_bytes.FF_ALIGN (variable) - alignment directive - -ida_bytes.FF_BNOT (variable) - Bitwise negation of operands. - -ida_bytes.FF_BYTE (variable) - byte - -ida_bytes.FF_CODE (variable) - Code ? - -ida_bytes.FF_COMM (variable) - Has comment ? - -ida_bytes.FF_CUSTOM (variable) - custom data type - -ida_bytes.FF_DATA (variable) - Data ? - -ida_bytes.FF_DOUBLE (variable) - double - -ida_bytes.FF_DWORD (variable) - double word - -ida_bytes.FF_FLOAT (variable) - float - -ida_bytes.FF_FLOW (variable) - Exec flow from prev instruction. - -ida_bytes.FF_FUNC (variable) - function start? - -ida_bytes.FF_IMMD (variable) - Has Immediate value ? - -ida_bytes.FF_IVL (variable) - Byte has value ? - -ida_bytes.FF_JUMP (variable) - Has jump table or switch_info? - -ida_bytes.FF_LABL (variable) - Has dummy name? - -ida_bytes.FF_LINE (variable) - Has next or prev lines ? - -ida_bytes.FF_NAME (variable) - Has name ? - -ida_bytes.FF_N_CHAR (variable) - Char ('x')? - -ida_bytes.FF_N_CUST (variable) - Custom representation? - -ida_bytes.FF_N_ENUM (variable) - Enumeration? - -ida_bytes.FF_N_FLT (variable) - Floating point number? - -ida_bytes.FF_N_FOP (variable) - Forced operand? - -ida_bytes.FF_N_NUMB (variable) - Binary number? - -ida_bytes.FF_N_NUMD (variable) - Decimal number? - -ida_bytes.FF_N_NUMH (variable) - Hexadecimal number? - -ida_bytes.FF_N_NUMO (variable) - Octal number? - -ida_bytes.FF_N_OFF (variable) - Offset? - -ida_bytes.FF_N_SEG (variable) - Segment? - -ida_bytes.FF_N_STK (variable) - Stack variable? - -ida_bytes.FF_N_STRO (variable) - Struct offset? - -ida_bytes.FF_N_VOID (variable) - Void (unknown)? - -ida_bytes.FF_OWORD (variable) - octaword/xmm word (16 bytes/128 bits) - -ida_bytes.FF_PACKREAL (variable) - packed decimal real - -ida_bytes.FF_QWORD (variable) - quadro word - -ida_bytes.FF_REF (variable) - has references - -ida_bytes.FF_SIGN (variable) - Inverted sign of operands. - -ida_bytes.FF_STRLIT (variable) - string literal - -ida_bytes.FF_STRUCT (variable) - struct variable - -ida_bytes.FF_TAIL (variable) - Tail ? - -ida_bytes.FF_TBYTE (variable) - tbyte - -ida_bytes.FF_UNK (variable) - Unknown ? - -ida_bytes.FF_UNUSED (variable) - unused bit (was used for variable bytes) - -ida_bytes.FF_WORD (variable) - word - -ida_bytes.FF_YWORD (variable) - ymm word (32 bytes/256 bits) - -ida_bytes.FF_ZWORD (variable) - zmm word (64 bytes/512 bits) - -ida_bytes.GFE_IDB_VALUE (variable) - get flags with FF_IVL & MS_VAL. but never use the debugger memory. - -ida_bytes.GFE_VALUE (variable) - 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 (variable) - try to read all bytes; if this bit is not set, fail at first uninited byte - -ida_bytes.GMB_WAITBOX (variable) - show wait box (may return -1 in this case) - -ida_bytes.ITEM_END_CANCEL (variable) - stop when operation cancelled, it is the responsibility of the caller to show - the wait dialog - -ida_bytes.ITEM_END_FIXUP (variable) - stop at the first fixup - -ida_bytes.ITEM_END_INITED (variable) - stop when initialization changes i.e. - * if is_loaded(ea): stop if uninitialized byte is encountered - * if !is_loaded(ea): stop if initialized byte is encountered - -ida_bytes.ITEM_END_NAME (variable) - stop at the first named location - -ida_bytes.ITEM_END_XREF (variable) - stop at the first referenced location - -ida_bytes.MS_CLS (variable) - Mask for typing. - -ida_bytes.MS_CODE (variable) - Mask for code bits. - -ida_bytes.MS_COMM (variable) - Mask of common bits. - -ida_bytes.MS_N_TYPE (variable) - Mask for nth arg (a 64-bit constant) - -ida_bytes.MS_VAL (variable) - Mask for byte value. - -ida_bytes.OPND_ALL (variable) - all operands - -ida_bytes.OPND_MASK (variable) - mask for operand number - -ida_bytes.OPND_OUTER (variable) - outer offset base (combined with operand number). used only in set, get, - del_offset() functions - -ida_bytes.PSTF_ATTRIB (variable) - generate for type attribute usage - -ida_bytes.PSTF_ENC (variable) - if encoding is specified, append it - -ida_bytes.PSTF_HOTKEY (variable) - have hotkey markers part of the name - -ida_bytes.PSTF_ONLY_ENC (variable) - generate only the encoding name - -ida_bytes.PSTF_TBRIEF (variable) - use brief name (e.g., in the 'Strings' window) - -ida_bytes.PSTF_TINLIN (variable) - use 'inline' name (e.g., in the structures comments) - -ida_bytes.PSTF_TMASK (variable) - type mask - -ida_bytes.PSTF_TNORM (variable) - use normal name - -ida_bytes.STRCONV_ESCAPE (variable) - convert non-printable characters to C escapes ( - , \xNN, \uNNNN) - -ida_bytes.STRCONV_INCLLEN (variable) - for Pascal-style strings, include the prefixing length byte(s) as C-escaped - sequence - -ida_bytes.STRCONV_REPLCHAR (variable) - convert non-printable characters to the Unicode replacement character (U+FFFD) - -ida_bytes.__walk_types_and_formats (function) - -ida_bytes.add_byte (function) - add_byte(ea, value) - Add a value to one byte of the program. This function works for wide byte - processors too. - - @param ea: (C++: ea_t) linear address - @param value: (C++: uint32) byte value - -ida_bytes.add_dword (function) - 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 - idainfo::is_be() - @note: this function works incorrectly if processor_t::nbits > 16 - - @param ea: (C++: ea_t) linear address - @param value: (C++: uint64) byte value - -ida_bytes.add_hidden_range (function) - add_hidden_range(ea1, ea2, description, header, footer, color=bgcolor_t(-1)) -> bool - Mark a range of addresses as hidden. The range will be created in the invisible - state with the default color - - @param ea1: (C++: ea_t) linear address of start of the address range - @param ea2: (C++: ea_t) linear address of end of the address range - @param description: (C++: const char *) ,header,footer: range parameters - @param header: (C++: const char *) char const * - @param footer: (C++: const char *) char const * - @param color: (C++: bgcolor_t) the range color - @return: success - -ida_bytes.add_mapping (function) - 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. - @note: You should set flag PR2_MAPPING in ph.flag2 to use memory mapping Add - memory mapping range. - - @param from: (C++: ea_t) start of the mapped range (nonexistent address) - @param to: (C++: ea_t) start of the mapping range (existent address) - @param size: (C++: asize_t) size of the range - @return: success - -ida_bytes.add_qword (function) - 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 - idainfo::is_be() - - @param ea: (C++: ea_t) linear address - @param value: (C++: uint64) byte value - -ida_bytes.add_word (function) - 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 - idainfo::is_be() - - @param ea: (C++: ea_t) linear address - @param value: (C++: uint64) byte value - -ida_bytes.align_flag (function) - align_flag() -> flags64_t - Get a flags64_t representing an alignment directive. - -ida_bytes.append_cmt (function) - 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: (C++: ea_t) linear address - @param str: (C++: const char *) comment string to append - @param rptble: (C++: bool) append to repeatable comment? - @return: success - -ida_bytes.attach_custom_data_format (function) - attach_custom_data_format(dtid, dfid) -> bool - Attach the data format to the data type. - - @param dtid: (C++: int) 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. - @param dfid: (C++: int) data format id - @retval true: ok - @retval false: no such `dtid', or no such `dfid', or the data format has already - been attached to the data type - -ida_bytes.bin_flag (function) - bin_flag() -> flags64_t - Get number flag of the base, regardless of current processor - better to use - num_flag() - -ida_bytes.bin_search (function) - bin_search(start_ea, end_ea, data, flags) -> ea_t - Search for a set of bytes in the program - - @param start_ea: linear address, start of range to search - @param end_ea: linear address, end of range to search (exclusive) - @param data: the prepared data to search for (see parse_binpat_str()) - @param flags: combination of BIN_SEARCH_* flags - @return: the address of a match, or ida_idaapi.BADADDR if not found - bin_search(start_ea, end_ea, image, imask, step, flags) -> ea_t - - @param start_ea: ea_t - @param end_ea: ea_t - @param image: bytevec_t const & - @param imask: bytevec_t const & - @param step: int - @param flags: int - -ida_bytes.bin_search3 (function) - bin_search3(start_ea, end_ea, data, flags) -> ea_t - Search for a patter in the program. - - @param start_ea: (C++: ea_t) linear address, start of range to search - @param end_ea: (C++: ea_t) linear address, end of range to search (exclusive) - @param data: (C++: const compiled_binpat_vec_t &) the prepared data to search for (see parse_binpat_str()) - @param flags: (C++: int) combination of Search flags - @return: BADADDR (if pressed Ctrl-Break or not found) or pattern address. - -ida_bytes.byte_flag (function) - byte_flag() -> flags64_t - Get a flags64_t representing a byte. - -ida_bytes.bytesize (function) - 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 (function) - calc_def_align(ea, mina, maxa) -> int - Calculate the default alignment exponent. - - @param ea: (C++: ea_t) linear address - @param mina: (C++: int) minimal possible alignment exponent. - @param maxa: (C++: int) minimal possible alignment exponent. - -ida_bytes.calc_dflags (function) - calc_dflags(f, force) -> flags64_t - - @param f: flags64_t - @param force: bool - -ida_bytes.calc_max_align (function) - calc_max_align(endea) -> int - Calculate the maximal possible alignment exponent. - - @param endea: (C++: ea_t) end address of the alignment item. - @return: a value in the 0..32 range - -ida_bytes.calc_max_item_end (function) - 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: (C++: ea_t) linear address - @param how: (C++: int) when to stop the search. A combination of Item end search flags - @return: end of new item. If it is not possible to create an item, it will - return 'ea'. If operation was cancelled by user, it will return 'ea' - -ida_bytes.calc_min_align (function) - calc_min_align(length) -> int - Calculate the minimal possible alignment exponent. - - @param length: (C++: asize_t) size of the item in bytes. - @return: a value in the 1..32 range - -ida_bytes.can_define_item (function) - can_define_item(ea, length, flags) -> bool - Can define item (instruction/data) of the specified 'length', starting at 'ea'? - @note: if there is an item starting at 'ea', this function ignores it - @note: this function converts to unexplored all encountered data items with - fixup information. Should be fixed in the future. - - @param ea: (C++: ea_t) start of the range for the new item - @param length: (C++: asize_t) length of the new item in bytes - @param flags: (C++: flags64_t) 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 - @return: 1-yes, 0-no - * a new item would cross segment boundaries - * a new item would overlap with existing items (except items specified by - 'flags') - -ida_bytes.change_storage_type (function) - change_storage_type(start_ea, end_ea, stt) -> error_t - Change flag storage type for address range. - - @param start_ea: (C++: ea_t) should be lower than end_ea. - @param end_ea: (C++: ea_t) does not belong to the range. - @param stt: (C++: storage_type_t) - @return: error code - -ida_bytes.char_flag (function) - char_flag() -> flags64_t - see FF_opbits - -ida_bytes.chunk_size (function) - 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 (function) - 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 (function) - clr_lzero(ea, n) -> bool - Clear toggle lzero bit. This function reset the display of leading zeroes for - the specified operand to the default. If the default is not to display leading - zeroes, leading zeroes will not be displayed, as vice versa. - - @param ea: (C++: ea_t) the item (insn/data) address - @param n: (C++: int) the operand number (0-first operand, 1-other operands) - @return: success - -ida_bytes.clr_op_type (function) - clr_op_type(ea, n) -> bool - Remove operand representation information. (set operand representation to be - 'undefined') - - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands - @return: success - -ida_bytes.code_flag (function) - code_flag() -> flags64_t - FF_CODE - -ida_bytes.combine_flags (function) - combine_flags(F) -> flags64_t - - @param F: flags64_t - -ida_bytes.compiled_binpat_t (class) - Proxy of C++ compiled_binpat_t class. - -ida_bytes.compiled_binpat_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: compiled_binpat_t const & - -ida_bytes.compiled_binpat_t.__init__ (method) - __init__(self) -> compiled_binpat_t - -ida_bytes.compiled_binpat_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: compiled_binpat_t const & - -ida_bytes.compiled_binpat_t.all_bytes_defined (method) - all_bytes_defined(self) -> bool - -ida_bytes.compiled_binpat_t.qclear (method) - qclear(self) - -ida_bytes.compiled_binpat_vec_t (class) - Proxy of C++ qvector< compiled_binpat_t > class. - -ida_bytes.compiled_binpat_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< compiled_binpat_t > const & - -ida_bytes.compiled_binpat_vec_t.__getitem__ (method) - __getitem__(self, i) -> compiled_binpat_t - - @param i: size_t - -ida_bytes.compiled_binpat_vec_t.__init__ (method) - __init__(self) -> compiled_binpat_vec_t - __init__(self, x) -> compiled_binpat_vec_t - - @param x: qvector< compiled_binpat_t > const & - -ida_bytes.compiled_binpat_vec_t.__len__ (method) - __len__(self) -> size_t - -ida_bytes.compiled_binpat_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< compiled_binpat_t > const & - -ida_bytes.compiled_binpat_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: compiled_binpat_t const & - -ida_bytes.compiled_binpat_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: compiled_binpat_t const & - -ida_bytes.compiled_binpat_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: compiled_binpat_t const & - -ida_bytes.compiled_binpat_vec_t.at (method) - at(self, _idx) -> compiled_binpat_t - - @param _idx: size_t - -ida_bytes.compiled_binpat_vec_t.begin (method) - begin(self) -> compiled_binpat_t - -ida_bytes.compiled_binpat_vec_t.capacity (method) - capacity(self) -> size_t - -ida_bytes.compiled_binpat_vec_t.clear (method) - clear(self) - -ida_bytes.compiled_binpat_vec_t.empty (method) - empty(self) -> bool - -ida_bytes.compiled_binpat_vec_t.end (method) - end(self) -> compiled_binpat_t - -ida_bytes.compiled_binpat_vec_t.erase (method) - erase(self, it) -> compiled_binpat_t - - @param it: qvector< compiled_binpat_t >::iterator - - erase(self, first, last) -> compiled_binpat_t - - @param first: qvector< compiled_binpat_t >::iterator - @param last: qvector< compiled_binpat_t >::iterator - -ida_bytes.compiled_binpat_vec_t.extract (method) - extract(self) -> compiled_binpat_t - -ida_bytes.compiled_binpat_vec_t.find (method) - find(self, x) -> compiled_binpat_t - - @param x: compiled_binpat_t const & - -ida_bytes.compiled_binpat_vec_t.grow (method) - grow(self, x=compiled_binpat_t()) - - @param x: compiled_binpat_t const & - -ida_bytes.compiled_binpat_vec_t.has (method) - has(self, x) -> bool - - @param x: compiled_binpat_t const & - -ida_bytes.compiled_binpat_vec_t.inject (method) - inject(self, s, len) - - @param s: compiled_binpat_t * - @param len: size_t - -ida_bytes.compiled_binpat_vec_t.insert (method) - insert(self, it, x) -> compiled_binpat_t - - @param it: qvector< compiled_binpat_t >::iterator - @param x: compiled_binpat_t const & - -ida_bytes.compiled_binpat_vec_t.pop_back (method) - pop_back(self) - -ida_bytes.compiled_binpat_vec_t.push_back (method) - push_back(self, x) - - @param x: compiled_binpat_t const & - - push_back(self) -> compiled_binpat_t - -ida_bytes.compiled_binpat_vec_t.qclear (method) - qclear(self) - -ida_bytes.compiled_binpat_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_bytes.compiled_binpat_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: compiled_binpat_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_bytes.compiled_binpat_vec_t.size (method) - size(self) -> size_t - -ida_bytes.compiled_binpat_vec_t.swap (method) - swap(self, r) - - @param r: qvector< compiled_binpat_t > & - -ida_bytes.compiled_binpat_vec_t.truncate (method) - truncate(self) - -ida_bytes.create_16bit_data (function) - create_16bit_data(ea, length) -> bool - Convert to 16-bit quantity (take the byte size into account) - - @param ea: (C++: ea_t) - @param length: (C++: asize_t) - -ida_bytes.create_32bit_data (function) - create_32bit_data(ea, length) -> bool - Convert to 32-bit quantity (take the byte size into account) - - @param ea: (C++: ea_t) - @param length: (C++: asize_t) - -ida_bytes.create_align (function) - create_align(ea, length, alignment) -> bool - Create an alignment item. - - @param ea: (C++: ea_t) linear address - @param length: (C++: asize_t) size of the item in bytes. 0 means to infer from ALIGNMENT - @param alignment: (C++: int) alignment exponent. Example: 3 means align to 8 bytes. 0 means - to infer from LENGTH It is forbidden to specify both LENGTH - and ALIGNMENT as 0. - @return: success - -ida_bytes.create_byte (function) - 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 (function) - 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 (function) - create_data(ea, dataflag, size, tid) -> bool - Convert to data (byte, word, dword, etc). This function may be used to create - arrays. - - @param ea: (C++: ea_t) linear address - @param dataflag: (C++: flags64_t) type of data. Value of function byte_flag(), word_flag(), etc. - @param size: (C++: asize_t) 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. - @param tid: (C++: tid_t) type id. If the specified type is a structure, then tid is structure - id. Otherwise should be BADNODE. - @return: success - -ida_bytes.create_double (function) - 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 (function) - 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 (function) - 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 (function) - 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 (function) - 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 (function) - 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 (function) - 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: (C++: ea_t) starting address - @param len: (C++: size_t) length of the string in bytes. if 0, then get_max_strlit_length() - will be used to determine the length - @param strtype: (C++: int32) string type. one of String type codes - @return: success - -ida_bytes.create_struct (function) - 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 (function) - 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 (function) - 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 (function) - 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 (function) - 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 (function) - cust_flag() -> flags64_t - Get a flags64_t representing custom type data. - -ida_bytes.custfmt_flag (function) - custfmt_flag() -> flags64_t - see FF_opbits - -ida_bytes.data_format_t (class) - Proxy of C++ data_format_t class. - -ida_bytes.data_format_t.__get_id (method) - __get_id(self) -> int - -ida_bytes.data_format_t.__init__ (method) - __init__(self, _self, name, value_size=0, menu_name=None, props=0, hotkey=None, text_width=0) -> data_format_t - - @param self: PyObject * - @param name: char const * - @param value_size: asize_t - @param menu_name: char const * - @param props: int - @param hotkey: char const * - @param text_width: int32 - -ida_bytes.data_format_t.__init__ (method) - -ida_bytes.data_format_t.hotkey (variable) - Hotkey for the corresponding menu item if nullptr, no hotkey will be associated - with the menu item - -ida_bytes.data_format_t.is_present_in_menus (method) - is_present_in_menus(self) -> bool - Should this format be shown in UI menus - - @return: success - -ida_bytes.data_format_t.menu_name (variable) - Visible format name to use in menus if nullptr, no menu item will be created - -ida_bytes.data_format_t.name (variable) - Format name, must be unique. - -ida_bytes.data_format_t.props (variable) - properties (currently 0) - -ida_bytes.data_format_t.text_width (variable) - Usual width of the text representation This value is used to calculate the width - of the control to display values of this type - -ida_bytes.data_format_t.value_size (variable) - size of the value in bytes 0 means any size is ok data formats that are - registered for standard types (dtid 0) may be called with any value_size - (instruction operands only) - -ida_bytes.data_type_t (class) - Proxy of C++ data_type_t class. - -ida_bytes.data_type_t.__get_id (method) - __get_id(self) -> int - -ida_bytes.data_type_t.__init__ (method) - __init__(self, _self, name, value_size=0, menu_name=None, hotkey=None, asm_keyword=None, props=0) -> data_type_t - - @param self: PyObject * - @param name: char const * - @param value_size: asize_t - @param menu_name: char const * - @param hotkey: char const * - @param asm_keyword: char const * - @param props: int - -ida_bytes.data_type_t.__init__ (method) - -ida_bytes.data_type_t.asm_keyword (variable) - keyword to use for this type in the assembly if nullptr, the data type cannot be - used in the listing it can still be used in cpuregs window - -ida_bytes.data_type_t.hotkey (variable) - Hotkey for the corresponding menu item if nullptr, no hotkey will be associated - with the menu item - -ida_bytes.data_type_t.is_present_in_menus (method) - is_present_in_menus(self) -> bool - Should this type be shown in UI menus - - @return: success - -ida_bytes.data_type_t.menu_name (variable) - Visible data type name to use in menus if nullptr, no menu item will be created - -ida_bytes.data_type_t.name (variable) - name of the data type. must be unique - -ida_bytes.data_type_t.props (variable) - properties - -ida_bytes.data_type_t.value_size (variable) - size of the value in bytes - -ida_bytes.dec_flag (function) - dec_flag() -> flags64_t - Get number flag of the base, regardless of current processor - better to use - num_flag() - -ida_bytes.del_hidden_range (function) - del_hidden_range(ea) -> bool - Delete hidden range. - - @param ea: (C++: ea_t) any address in the hidden range - @return: success - -ida_bytes.del_items (function) - 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: (C++: ea_t) any address within the first item to delete - @param flags: (C++: int) combination of Unexplored byte conversion flags - @param nbytes: (C++: asize_t) number of bytes in the range to be undefined - @param may_destroy: (C++: may_destroy_cb_t *) optional routine invoked before deleting a head item. If - callback returns false then item is not to be deleted and - operation fails - @return: true on sucessful operation, otherwise false - -ida_bytes.del_mapping (function) - del_mapping(ea) - Delete memory mapping range. - - @param ea: (C++: ea_t) any address in the mapped range - -ida_bytes.del_value (function) - del_value(ea) - Delete byte value from flags. The corresponding byte becomes uninitialized. - - @param ea: (C++: ea_t) - -ida_bytes.detach_custom_data_format (function) - 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: (C++: int) data type id to detach data format from - @param dfid: (C++: int) data format id to detach - @retval true: ok - @retval false: no such `dtid', or no such `dfid', or the data format was not - attached to the data type - -ida_bytes.disable_flags (function) - 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: (C++: ea_t) should be lower than end_ea. - @param end_ea: (C++: ea_t) does not belong to the range. - @return: 0 if ok, otherwise return error code - -ida_bytes.double_flag (function) - double_flag() -> flags64_t - Get a flags64_t representing a double. - -ida_bytes.dword_flag (function) - dword_flag() -> flags64_t - Get a flags64_t representing a double word. - -ida_bytes.enable_flags (function) - 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: (C++: ea_t) should be lower than end_ea. - @param end_ea: (C++: ea_t) does not belong to the range. - @param stt: (C++: storage_type_t) - @return: 0 if ok, otherwise an error code - -ida_bytes.enum_flag (function) - enum_flag() -> flags64_t - see FF_opbits - -ida_bytes.equal_bytes (function) - equal_bytes(ea, image, mask, len, bin_search_flags) -> bool - Compare 'len' bytes of the program starting from 'ea' with 'image'. - - @param ea: (C++: ea_t) linear address - @param image: (C++: const uchar *) bytes to compare with - @param mask: (C++: const uchar *) array of mask bytes, it's length is 'len'. if the flag - BIN_SEARCH_BITMASK is passsed, 'bitwise AND' is used to compare. if - not; 1 means to perform the comparison of the corresponding byte. 0 - means not to perform. if mask == nullptr, then all bytes of 'image' - will be compared. if mask == SKIP_FF_MASK then 0xFF bytes will be - skipped - @param len: (C++: size_t) length of block to compare in bytes. - @param bin_search_flags: (C++: int) combination of Search flags - @retval 1: equal - @retval 0: not equal - -ida_bytes.f_has_cmt (function) - f_has_cmt(f, arg2) -> bool - - @param f: flags64_t - @param arg2: void * - -ida_bytes.f_has_dummy_name (function) - f_has_dummy_name(f, arg2) -> bool - Does the current byte have dummy (auto-generated, with special prefix) name? - - @param f: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_has_extra_cmts (function) - f_has_extra_cmts(f, arg2) -> bool - - @param f: flags64_t - @param arg2: void * - -ida_bytes.f_has_name (function) - f_has_name(f, arg2) -> bool - Does the current byte have non-trivial (non-dummy) name? - - @param f: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_has_user_name (function) - f_has_user_name(F, arg2) -> bool - Does the current byte have user-specified name? - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_has_xref (function) - f_has_xref(f, arg2) -> bool - Does the current byte have cross-references to it? - - @param f: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_align (function) - f_is_align(F, arg2) -> bool - See is_align() - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_byte (function) - f_is_byte(F, arg2) -> bool - See is_byte() - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_code (function) - f_is_code(F, arg2) -> bool - Does flag denote start of an instruction? - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_custom (function) - f_is_custom(F, arg2) -> bool - See is_custom() - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_data (function) - f_is_data(F, arg2) -> bool - Does flag denote start of data? - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_double (function) - f_is_double(F, arg2) -> bool - See is_double() - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_dword (function) - f_is_dword(F, arg2) -> bool - See is_dword() - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_float (function) - f_is_float(F, arg2) -> bool - See is_float() - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_head (function) - f_is_head(F, arg2) -> bool - Does flag denote start of instruction OR data? - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_not_tail (function) - f_is_not_tail(F, arg2) -> bool - Does flag denote tail byte? - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_oword (function) - f_is_oword(F, arg2) -> bool - See is_oword() - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_pack_real (function) - f_is_pack_real(F, arg2) -> bool - See is_pack_real() - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_qword (function) - f_is_qword(F, arg2) -> bool - See is_qword() - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_strlit (function) - f_is_strlit(F, arg2) -> bool - See is_strlit() - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_struct (function) - f_is_struct(F, arg2) -> bool - See is_struct() - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_tail (function) - f_is_tail(F, arg2) -> bool - Does flag denote tail byte? - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_tbyte (function) - f_is_tbyte(F, arg2) -> bool - See is_tbyte() - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_word (function) - f_is_word(F, arg2) -> bool - See is_word() - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.f_is_yword (function) - f_is_yword(F, arg2) -> bool - See is_yword() - - @param F: (C++: flags64_t) - @param arg2: void * - -ida_bytes.find_byte (function) - 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: (C++: ea_t) linear address - @param size: (C++: asize_t) number of bytes to inspect - @param value: (C++: uchar) value to find - @param bin_search_flags: (C++: int) combination of Search flags - @return: address of byte or BADADDR - -ida_bytes.find_byter (function) - 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: (C++: ea_t) the lower address of the search range - @param size: (C++: asize_t) number of bytes to inspect - @param value: (C++: uchar) value to find - @param bin_search_flags: (C++: int) combination of Search flags - @return: address of byte or BADADDR - -ida_bytes.find_custom_data_format (function) - find_custom_data_format(name) -> int - Get id of a custom data format. - - @param name: (C++: const char *) name of the custom data format - @return: id or -1 - -ida_bytes.find_custom_data_type (function) - find_custom_data_type(name) -> int - Get id of a custom data type. - - @param name: (C++: const char *) name of the custom data type - @return: id or -1 - -ida_bytes.find_free_chunk (function) - find_free_chunk(start, size, alignment) -> ea_t - Search for a hole in the addressing space of the program. - - @param start: (C++: ea_t) Address to start searching from - @param size: (C++: asize_t) Size of the desired empty range - @param alignment: (C++: asize_t) Alignment bitmask, must be a pow2-1. (for example, 0xF would - align the returned range to 16 bytes). - @return: Start of the found empty range or BADADDR - -ida_bytes.float_flag (function) - float_flag() -> flags64_t - Get a flags64_t representing a float. - -ida_bytes.flt_flag (function) - flt_flag() -> flags64_t - see FF_opbits - -ida_bytes.free_chunk (function) - free_chunk(bottom, size, step) -> ea_t - - @param bottom: ea_t - @param size: asize_t - @param step: int32 - -ida_bytes.get_16bit (function) - 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 (function) - 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 processor_t::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 (function) - 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 processor_t::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 (function) - get_8bit(ea, v, nbit) -> PyObject * - - @param ea: ea_t - @param v: uint32 - @param nbit: int - -ida_bytes.get_byte (function) - 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 (function) - get_bytes(ea, size, gmb_flags=0x01) -> bytes or None - Get the specified number of bytes of the program. - - @param ea: program address - @param size: number of bytes to return - @param gmb_flags: int - @return: the bytes (as a str), or None in case of failure - -ida_bytes.get_bytes_and_mask (function) - 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 - @param gmb_flags: int - @return: a tuple (bytes, mask), or None in case of failure. - Both 'bytes' and 'mask' are 'str' instances. - -ida_bytes.get_cmt (function) - get_cmt(ea, rptble) -> str - Get an indented comment. - - @param ea: (C++: ea_t) linear address. may point to tail byte, the function will find start - of the item - @param rptble: (C++: bool) get repeatable comment? - @return: size of comment or -1 - -ida_bytes.get_custom_data_format (function) - get_custom_data_format(dfid) -> data_format_t - Get definition of a registered custom data format. - - @param dfid: (C++: int) data format id - @return: data format definition or nullptr - -ida_bytes.get_custom_data_formats (function) - get_custom_data_formats(out, dtid) -> int - Get list of attached custom data formats for the specified data type. - - @param out: (C++: intvec_t *) buffer for the output. may be nullptr - @param dtid: (C++: int) data type id - @return: number of returned custom data formats. if error, returns -1 - -ida_bytes.get_custom_data_type (function) - get_custom_data_type(dtid) -> data_type_t - Get definition of a registered custom data type. - - @param dtid: (C++: int) data type id - @return: data type definition or nullptr - -ida_bytes.get_custom_data_types (function) - get_custom_data_types(out, min_size=0, max_size=BADADDR) -> int - Get list of registered custom data type ids. - - @param out: (C++: intvec_t *) buffer for the output. may be nullptr - @param min_size: (C++: asize_t) minimum value size - @param max_size: (C++: asize_t) maximum value size - @return: number of custom data types with the specified size limits - -ida_bytes.get_data_elsize (function) - get_data_elsize(ea, F, ti=None) -> asize_t - Get size of data type specified in flags 'F'. - - @param ea: (C++: ea_t) linear address of the item - @param F: (C++: flags64_t) flags - @param ti: (C++: const opinfo_t *) 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 nullptr). If specified as nullptr, will - be automatically retrieved from the database - @return: * byte : 1 - * word : 2 - * etc... - -ida_bytes.get_data_value (function) - 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: (C++: uval_t *) pointer to the result. may be nullptr - @param ea: (C++: ea_t) linear address - @param size: (C++: asize_t) size of data to read. If 0, then the item type at 'ea' will be used - @return: success - -ida_bytes.get_db_byte (function) - 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 (function) - get_default_radix() -> int - Get default base of number for the current processor. - - @return: 2, 8, 10, 16 - -ida_bytes.get_dword (function) - get_dword(ea) -> uint32 - Get one dword (32-bit) of the program at 'ea'. This function takes into account - order of bytes specified in idainfo::is_be() This function works only for 8bit - byte processors. - - @param ea: (C++: ea_t) - -ida_bytes.get_enum_id (function) - get_enum_id(ea, n) -> enum_t - Get enum id of 'enum' operand. - - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL one of the operands - @return: id of enum or BADNODE - -ida_bytes.get_first_hidden_range (function) - get_first_hidden_range() -> hidden_range_t - Get pointer to the first hidden range. - - @return: ptr to hidden range or nullptr - -ida_bytes.get_flags (function) - get_flags(ea) -> flags64_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 (function) - get_flags_by_size(size) -> flags64_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 (function) - get_flags_ex(ea, how) -> flags64_t - Get flags for the specified address, extended form. - - @param ea: (C++: ea_t) - @param how: (C++: int) - -ida_bytes.get_forced_operand (function) - get_forced_operand(ea, n) -> str - Get forced operand. - - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number - @return: size of forced operand or -1 - -ida_bytes.get_full_data_elsize (function) - 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++: flags64_t) - @param ti: (C++: const opinfo_t *) opinfo_t const * - -ida_bytes.get_full_flags (function) - get_full_flags(ea) -> flags64_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 (function) - get_hidden_range(ea) -> hidden_range_t - Get pointer to hidden range structure, in: linear address. - - @param ea: (C++: ea_t) any address in the hidden range - -ida_bytes.get_hidden_range_num (function) - get_hidden_range_num(ea) -> int - Get number of a hidden range. - - @param ea: (C++: ea_t) any address in the hidden range - @return: number of hidden range (0..get_hidden_range_qty()-1) - -ida_bytes.get_hidden_range_qty (function) - get_hidden_range_qty() -> int - Get number of hidden ranges. - -ida_bytes.get_item_end (function) - 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 (function) - get_item_flag(_from, n, ea, appzero) -> flags64_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: (C++: ea_t) linear address of the instruction which refers to 'ea' - @param n: (C++: int) operand number which refers to 'ea' or OPND_ALL for one of the - operands - @param ea: (C++: ea_t) the referenced address - @param appzero: (C++: bool) append a struct field name if the field offset is zero? - meaningful only if the name refers to a structure. - @return: flags or 0 (if failed) - -ida_bytes.get_item_head (function) - 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_refinfo (function) - get_item_refinfo(ri, ea, n) -> bool - Get refinfo of the item at 'ea'. This function works for a regular offset - operand as well as for a tail byte of a structure variable (in this case refinfo - to corresponding structure member will be returned) - - @param ri: (C++: refinfo_t *) refinfo holder - @param ea: (C++: ea_t) the item address - @param n: (C++: int) operand number which refers to 'ea' or OPND_ALL for one of the - operands - @return: success - -ida_bytes.get_item_size (function) - get_item_size(ea) -> asize_t - Get size of item (instruction/data) in bytes. Unexplored bytes have length of 1 - byte. This function returns 0 only for BADADDR. - - @param ea: (C++: ea_t) - -ida_bytes.get_last_hidden_range (function) - get_last_hidden_range() -> hidden_range_t - Get pointer to the last hidden range. - - @return: ptr to hidden range or nullptr - -ida_bytes.get_manual_insn (function) - get_manual_insn(ea) -> str - Retrieve the user-specified string for the manual instruction. - - @param ea: (C++: ea_t) linear address of the instruction or data item - @return: size of manual instruction or -1 - -ida_bytes.get_mapping (function) - get_mapping(n) -> bool - Get memory mapping range by its number. - - @param n: (C++: size_t) number of mapping range (0..get_mappings_qty()-1) - @return: false if the specified range doesn't exist, otherwise returns `from', - `to', `size' - -ida_bytes.get_mappings_qty (function) - get_mappings_qty() -> size_t - Get number of mappings. - -ida_bytes.get_max_strlit_length (function) - get_max_strlit_length(ea, strtype, options=0) -> size_t - Determine maximum length of string literal. - - If the string literal has a length prefix (e.g., STRTYPE_LEN2 has a two-byte - length prefix), the length of that prefix (i.e., 2) will be part of the returned - value. - - @param ea: (C++: ea_t) starting address - @param strtype: (C++: int32) string type. one of String type codes - @param options: (C++: int) combination of string literal length options - @return: length of the string in octets (octet==8bit) - -ida_bytes.get_next_hidden_range (function) - get_next_hidden_range(ea) -> hidden_range_t - Get pointer to next hidden range. - - @param ea: (C++: ea_t) any address in the program - @return: ptr to hidden range or nullptr if next hidden range doesn't exist - -ida_bytes.get_octet (function) - get_octet(ea, v, nbit) -> (int, int, int, int) - - @param ea: ea_t - @param v: uint64 - @param nbit: int - -ida_bytes.get_octet2 (function) - get_octet2(ogen) -> bool - - @param ogen: octet_generator_t * - -ida_bytes.get_operand_flag (function) - get_operand_flag(typebits, n) -> flags64_t - Place operand `n`'s type flag in the right nibble of a 64-bit flags set. - - @param typebits: (C++: uint8) the type bits (one of `FF_N_`) - @param n: (C++: int) the operand number - @return: the shift to the nibble - -ida_bytes.get_operand_type_shift (function) - get_operand_type_shift(n) -> int - Get the shift in `flags64_t` for the nibble representing operand `n`'s type - - Note: n must be < UA_MAXOP, and is not checked - - @param n: (C++: uint32) the operand number - @return: the shift to the nibble - -ida_bytes.get_opinfo (function) - get_opinfo(buf, ea, n, flags) -> opinfo_t - Get additional information about an operand representation. - - @param buf: (C++: opinfo_t *) buffer to receive the result. may not be nullptr - @param ea: (C++: ea_t) linear address of item - @param n: (C++: int) number of operand, 0 or 1 - @param flags: (C++: flags64_t) flags of the item - @return: nullptr if no additional representation information - -ida_bytes.get_optype_flags0 (function) - get_optype_flags0(F) -> flags64_t - Get flags for first operand. - - @param F: (C++: flags64_t) - -ida_bytes.get_optype_flags1 (function) - get_optype_flags1(F) -> flags64_t - Get flags for second operand. - - @param F: (C++: flags64_t) - -ida_bytes.get_original_byte (function) - 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 (function) - 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 - idainfo::is_be() - - @param ea: (C++: ea_t) - -ida_bytes.get_original_qword (function) - 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 idainfo::is_be() - - @param ea: (C++: ea_t) - -ida_bytes.get_original_word (function) - 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 idainfo::is_be() - - @param ea: (C++: ea_t) - -ida_bytes.get_possible_item_varsize (function) - get_possible_item_varsize(ea, tif) -> asize_t - Return the possible size of the item at EA of type TIF if TIF is the variable - structure. - - @param ea: (C++: ea_t) the linear address of the item - @param tif: (C++: const tinfo_t &) the item type - @return: the possible size - @retval asize_t(-1): TIF is not a variable structure - -ida_bytes.get_predef_insn_cmt (function) - get_predef_insn_cmt(ins) -> str - Get predefined comment. - - @param ins: (C++: const insn_t &) current instruction information - @return: size of comment or -1 - -ida_bytes.get_prev_hidden_range (function) - get_prev_hidden_range(ea) -> hidden_range_t - Get pointer to previous hidden range. - - @param ea: (C++: ea_t) any address in the program - @return: ptr to hidden range or nullptr if previous hidden range doesn't exist - -ida_bytes.get_qword (function) - get_qword(ea) -> uint64 - Get one qword (64-bit) of the program at 'ea'. This function takes into account - order of bytes specified in idainfo::is_be() This function works only for 8bit - byte processors. - - @param ea: (C++: ea_t) - -ida_bytes.get_radix (function) - 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: (C++: flags64_t) flags - @param n: (C++: int) number of operand (0, 1, -1) - @return: 2, 8, 10, 16 - -ida_bytes.get_strlit_contents (function) - get_strlit_contents(ea, py_len, type, flags=0) -> bytes or None - Get contents of string literal, as UTF-8-encoded codepoints. - It works even if the string has not been created in the database yet. - - Note that the returned value will be of type 'bytes'; if - you want auto-conversion to unicode strings (that is: real Python - strings), you should probably be using the idautils.Strings class. - - @param ea: linear address of the string - @param py_len: length of the string in bytes (including terminating 0) - @param type: type of the string. Represents both the character encoding, - <u>and</u> 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 (function) - get_stroff_path(path, delta, ea, n) -> int - Get struct path of operand. - - @param path: (C++: tid_t *) buffer for structure path (strpath). see nalt.hpp for more info. - @param delta: (C++: adiff_t *) struct offset delta - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL one of the operands - @return: length of strpath - -ida_bytes.get_wide_byte (function) - 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 (function) - 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 idainfo::is_be() - @note: this function works incorrectly if processor_t::nbits > 16 - - @param ea: (C++: ea_t) - -ida_bytes.get_wide_word (function) - 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 idainfo::is_be() - - @param ea: (C++: ea_t) - -ida_bytes.get_word (function) - get_word(ea) -> ushort - Get one word (16-bit) of the program at 'ea'. This function takes into account - order of bytes specified in idainfo::is_be() This function works only for 8bit - byte processors. - - @param ea: (C++: ea_t) - -ida_bytes.get_zero_ranges (function) - 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: (C++: rangeset_t *) pointer to the return value. cannot be nullptr - @param range: (C++: const range_t *) the range of addresses to verify. can be nullptr - means all - ranges - @return: true if the result is a non-empty set - -ida_bytes.getn_hidden_range (function) - getn_hidden_range(n) -> hidden_range_t - Get pointer to hidden range structure, in: number of hidden range. - - @param n: (C++: int) number of hidden range, is in range 0..get_hidden_range_qty()-1 - -ida_bytes.has_any_name (function) - has_any_name(F) -> bool - Does the current byte have any name? - - @param F: (C++: flags64_t) - -ida_bytes.has_auto_name (function) - has_auto_name(F) -> bool - Does the current byte have auto-generated (no special prefix) name? - - @param F: (C++: flags64_t) - -ida_bytes.has_cmt (function) - has_cmt(F) -> bool - Does the current byte have an indented comment? - - @param F: (C++: flags64_t) - -ida_bytes.has_dummy_name (function) - has_dummy_name(F) -> bool - Does the current byte have dummy (auto-generated, with special prefix) name? - - @param F: (C++: flags64_t) - -ida_bytes.has_extra_cmts (function) - has_extra_cmts(F) -> bool - Does the current byte have additional anterior or posterior lines? - - @param F: (C++: flags64_t) - -ida_bytes.has_immd (function) - has_immd(F) -> bool - Has immediate value? - - @param F: (C++: flags64_t) - -ida_bytes.has_name (function) - has_name(F) -> bool - Does the current byte have non-trivial (non-dummy) name? - - @param F: (C++: flags64_t) - -ida_bytes.has_user_name (function) - has_user_name(F) -> bool - Does the current byte have user-specified name? - - @param F: (C++: flags64_t) - -ida_bytes.has_value (function) - has_value(F) -> bool - Do flags contain byte value? - - @param F: (C++: flags64_t) - -ida_bytes.has_xref (function) - has_xref(F) -> bool - Does the current byte have cross-references to it? - - @param F: (C++: flags64_t) - -ida_bytes.hex_flag (function) - hex_flag() -> flags64_t - Get number flag of the base, regardless of current processor - better to use - num_flag() - -ida_bytes.hidden_range_t (class) - Proxy of C++ hidden_range_t class. - -ida_bytes.hidden_range_t.__init__ (method) - __init__(self) -> hidden_range_t - -ida_bytes.hidden_range_t.color (variable) - range color - -ida_bytes.hidden_range_t.description (variable) - description to display if the range is collapsed - -ida_bytes.hidden_range_t.footer (variable) - footer lines to display if the range is expanded - -ida_bytes.hidden_range_t.header (variable) - header lines to display if the range is expanded - -ida_bytes.hidden_range_t.visible (variable) - the range state - -ida_bytes.is_align (function) - is_align(F) -> bool - FF_ALIGN - - @param F: (C++: flags64_t) - -ida_bytes.is_attached_custom_data_format (function) - is_attached_custom_data_format(dtid, dfid) -> bool - Is the custom data format attached to the custom data type? - - @param dtid: (C++: int) data type id - @param dfid: (C++: int) data format id - @return: true or false - -ida_bytes.is_bnot (function) - is_bnot(ea, F, n) -> bool - Should we negate the operand?. asm_t::a_bnot should be defined in the idp module - in order to work with this function - - @param ea: (C++: ea_t) - @param F: (C++: flags64_t) - @param n: (C++: int) - -ida_bytes.is_byte (function) - is_byte(F) -> bool - FF_BYTE - - @param F: (C++: flags64_t) - -ida_bytes.is_char (function) - is_char(F, n) -> bool - is character constant? - - @param F: (C++: flags64_t) - @param n: (C++: int) - -ida_bytes.is_char0 (function) - is_char0(F) -> bool - Is the first operand character constant? (example: push 'a') - - @param F: (C++: flags64_t) - -ida_bytes.is_char1 (function) - is_char1(F) -> bool - Is the second operand character constant? (example: mov al, 'a') - - @param F: (C++: flags64_t) - -ida_bytes.is_code (function) - is_code(F) -> bool - Does flag denote start of an instruction? - - @param F: (C++: flags64_t) - -ida_bytes.is_custfmt (function) - is_custfmt(F, n) -> bool - is custom data format? - - @param F: (C++: flags64_t) - @param n: (C++: int) - -ida_bytes.is_custfmt0 (function) - is_custfmt0(F) -> bool - Does the first operand use a custom data representation? - - @param F: (C++: flags64_t) - -ida_bytes.is_custfmt1 (function) - is_custfmt1(F) -> bool - Does the second operand use a custom data representation? - - @param F: (C++: flags64_t) - -ida_bytes.is_custom (function) - is_custom(F) -> bool - FF_CUSTOM - - @param F: (C++: flags64_t) - -ida_bytes.is_data (function) - is_data(F) -> bool - Does flag denote start of data? - - @param F: (C++: flags64_t) - -ida_bytes.is_defarg (function) - is_defarg(F, n) -> bool - is defined? - - @param F: (C++: flags64_t) - @param n: (C++: int) - -ida_bytes.is_defarg0 (function) - is_defarg0(F) -> bool - Is the first operand defined? Initially operand has no defined representation. - - @param F: (C++: flags64_t) - -ida_bytes.is_defarg1 (function) - is_defarg1(F) -> bool - Is the second operand defined? Initially operand has no defined representation. - - @param F: (C++: flags64_t) - -ida_bytes.is_double (function) - is_double(F) -> bool - FF_DOUBLE - - @param F: (C++: flags64_t) - -ida_bytes.is_dword (function) - is_dword(F) -> bool - FF_DWORD - - @param F: (C++: flags64_t) - -ida_bytes.is_enum (function) - is_enum(F, n) -> bool - is enum? - - @param F: (C++: flags64_t) - @param n: (C++: int) - -ida_bytes.is_enum0 (function) - is_enum0(F) -> bool - Is the first operand a symbolic constant (enum member)? - - @param F: (C++: flags64_t) - -ida_bytes.is_enum1 (function) - is_enum1(F) -> bool - Is the second operand a symbolic constant (enum member)? - - @param F: (C++: flags64_t) - -ida_bytes.is_flag_for_operand (function) - is_flag_for_operand(F, typebits, n) -> bool - Check that the 64-bit flags set has the expected type for operand `n`. - - @param F: (C++: flags64_t) the flags - @param typebits: (C++: uint8) the type bits (one of `FF_N_`) - @param n: (C++: int) the operand number - @return: success - -ida_bytes.is_float (function) - is_float(F) -> bool - FF_FLOAT - - @param F: (C++: flags64_t) - -ida_bytes.is_float0 (function) - is_float0(F) -> bool - Is the first operand a floating point number? - - @param F: (C++: flags64_t) - -ida_bytes.is_float1 (function) - is_float1(F) -> bool - Is the second operand a floating point number? - - @param F: (C++: flags64_t) - -ida_bytes.is_flow (function) - is_flow(F) -> bool - Does the previous instruction exist and pass execution flow to the current byte? - - @param F: (C++: flags64_t) - -ida_bytes.is_fltnum (function) - is_fltnum(F, n) -> bool - is floating point number? - - @param F: (C++: flags64_t) - @param n: (C++: int) - -ida_bytes.is_forced_operand (function) - is_forced_operand(ea, n) -> bool - Is operand manually defined?. - - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number - -ida_bytes.is_func (function) - is_func(F) -> bool - Is function start? - - @param F: (C++: flags64_t) - -ida_bytes.is_head (function) - is_head(F) -> bool - Does flag denote start of instruction OR data? - - @param F: (C++: flags64_t) - -ida_bytes.is_invsign (function) - 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++: flags64_t) - @param n: (C++: int) - -ida_bytes.is_loaded (function) - is_loaded(ea) -> bool - Does the specified address have a byte value (is initialized?) - - @param ea: (C++: ea_t) - -ida_bytes.is_lzero (function) - is_lzero(ea, n) -> bool - Display leading zeroes? Display leading zeroes in operands. The global switch - for the leading zeroes is in idainfo::s_genflags Note: the leading zeroes - doesn't work if for the target assembler octal numbers start with 0. - - @param ea: (C++: ea_t) the item (insn/data) address - @param n: (C++: int) the operand number (0-first operand, 1-other operands) - @return: success - -ida_bytes.is_manual (function) - is_manual(F, n) -> bool - is forced operand? (use is_forced_operand()) - - @param F: (C++: flags64_t) - @param n: (C++: int) - -ida_bytes.is_manual_insn (function) - is_manual_insn(ea) -> bool - Is the instruction overridden? - - @param ea: (C++: ea_t) linear address of the instruction or data item - -ida_bytes.is_mapped (function) - is_mapped(ea) -> bool - Is the specified address 'ea' present in the program? - - @param ea: (C++: ea_t) - -ida_bytes.is_not_tail (function) - is_not_tail(F) -> bool - Does flag denote tail byte? - - @param F: (C++: flags64_t) - -ida_bytes.is_numop (function) - is_numop(F, n) -> bool - is number (bin, oct, dec, hex)? - - @param F: (C++: flags64_t) - @param n: (C++: int) - -ida_bytes.is_numop0 (function) - is_numop0(F) -> bool - Is the first operand a number (i.e. binary, octal, decimal or hex?) - - @param F: (C++: flags64_t) - -ida_bytes.is_numop1 (function) - is_numop1(F) -> bool - Is the second operand a number (i.e. binary, octal, decimal or hex?) - - @param F: (C++: flags64_t) - -ida_bytes.is_off (function) - is_off(F, n) -> bool - is offset? - - @param F: (C++: flags64_t) - @param n: (C++: int) - -ida_bytes.is_off0 (function) - is_off0(F) -> bool - Is the first operand offset? (example: push offset xxx) - - @param F: (C++: flags64_t) - -ida_bytes.is_off1 (function) - is_off1(F) -> bool - Is the second operand offset? (example: mov ax, offset xxx) - - @param F: (C++: flags64_t) - -ida_bytes.is_oword (function) - is_oword(F) -> bool - FF_OWORD - - @param F: (C++: flags64_t) - -ida_bytes.is_pack_real (function) - is_pack_real(F) -> bool - FF_PACKREAL - - @param F: (C++: flags64_t) - -ida_bytes.is_qword (function) - is_qword(F) -> bool - FF_QWORD - - @param F: (C++: flags64_t) - -ida_bytes.is_same_data_type (function) - is_same_data_type(F1, F2) -> bool - Do the given flags specify the same data type? - - @param F1: (C++: flags64_t) - @param F2: (C++: flags64_t) - -ida_bytes.is_seg (function) - is_seg(F, n) -> bool - is segment? - - @param F: (C++: flags64_t) - @param n: (C++: int) - -ida_bytes.is_seg0 (function) - is_seg0(F) -> bool - Is the first operand segment selector? (example: push seg seg001) - - @param F: (C++: flags64_t) - -ida_bytes.is_seg1 (function) - is_seg1(F) -> bool - Is the second operand segment selector? (example: mov dx, seg dseg) - - @param F: (C++: flags64_t) - -ida_bytes.is_stkvar (function) - is_stkvar(F, n) -> bool - is stack variable? - - @param F: (C++: flags64_t) - @param n: (C++: int) - -ida_bytes.is_stkvar0 (function) - is_stkvar0(F) -> bool - Is the first operand a stack variable? - - @param F: (C++: flags64_t) - -ida_bytes.is_stkvar1 (function) - is_stkvar1(F) -> bool - Is the second operand a stack variable? - - @param F: (C++: flags64_t) - -ida_bytes.is_strlit (function) - is_strlit(F) -> bool - FF_STRLIT - - @param F: (C++: flags64_t) - -ida_bytes.is_stroff (function) - is_stroff(F, n) -> bool - is struct offset? - - @param F: (C++: flags64_t) - @param n: (C++: int) - -ida_bytes.is_stroff0 (function) - is_stroff0(F) -> bool - Is the first operand an offset within a struct? - - @param F: (C++: flags64_t) - -ida_bytes.is_stroff1 (function) - is_stroff1(F) -> bool - Is the second operand an offset within a struct? - - @param F: (C++: flags64_t) - -ida_bytes.is_struct (function) - is_struct(F) -> bool - FF_STRUCT - - @param F: (C++: flags64_t) - -ida_bytes.is_suspop (function) - is_suspop(ea, F, n) -> bool - is suspicious operand? - - @param ea: (C++: ea_t) - @param F: (C++: flags64_t) - @param n: (C++: int) - -ida_bytes.is_tail (function) - is_tail(F) -> bool - Does flag denote tail byte? - - @param F: (C++: flags64_t) - -ida_bytes.is_tbyte (function) - is_tbyte(F) -> bool - FF_TBYTE - - @param F: (C++: flags64_t) - -ida_bytes.is_unknown (function) - is_unknown(F) -> bool - Does flag denote unexplored byte? - - @param F: (C++: flags64_t) - -ida_bytes.is_varsize_item (function) - is_varsize_item(ea, F, ti=None, itemsize=None) -> int - Is the item at 'ea' variable size?. - - @param ea: (C++: ea_t) linear address of the item - @param F: (C++: flags64_t) flags - @param ti: (C++: const opinfo_t *) 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 nullptr). If specified as nullptr, will - be automatically retrieved from the database - @param itemsize: (C++: asize_t *) if not nullptr and the item is varsize, itemsize will contain - the calculated item size (for struct types, the minimal size is - returned) - @retval 1: varsize item - @retval 0: fixed item - @retval -1: error (bad data definition) - -ida_bytes.is_word (function) - is_word(F) -> bool - FF_WORD - - @param F: (C++: flags64_t) - -ida_bytes.is_yword (function) - is_yword(F) -> bool - FF_YWORD - - @param F: (C++: flags64_t) - -ida_bytes.is_zword (function) - is_zword(F) -> bool - FF_ZWORD - - @param F: (C++: flags64_t) - -ida_bytes.leading_zero_important (function) - leading_zero_important(ea, n) -> bool - Check if leading zeroes are important. - - @param ea: (C++: ea_t) - @param n: (C++: int) - -ida_bytes.nbits (function) - nbits(ea) -> int - Get number of bits in a byte at the given address. - - @param ea: (C++: ea_t) - @return: processor_t::dnbits() if the address doesn't belong to a segment, - otherwise the result depends on the segment type - -ida_bytes.next_addr (function) - 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 (function) - 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 (function) - next_head(ea, maxea) -> ea_t - Get start of next defined item. - - @param ea: (C++: ea_t) begin search at this address - @param maxea: (C++: ea_t) not included in the search range - @return: BADADDR if none exists. - -ida_bytes.next_inited (function) - 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 (function) - 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 (function) - next_that(ea, maxea, testf) -> ea_t - Find next address with a flag satisfying the function 'testf'. - @note: do not pass is_unknown() to this function to find unexplored bytes. It - will fail under the debugger. To find unexplored bytes, use - next_unknown(). - - @param ea: (C++: ea_t) start searching at this address + 1 - @param maxea: (C++: ea_t) not included in the search range. - @param testf: (C++: testf_t *) test function to find next address - @return: the found address or BADADDR. - -ida_bytes.next_unknown (function) - 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.next_visea (function) - next_visea(ea) -> ea_t - Get next visible address. - - @param ea: (C++: ea_t) - @return: BADADDR if none exists. - -ida_bytes.num_flag (function) - num_flag() -> flags64_t - Get number of default base (bin, oct, dec, hex) - -ida_bytes.oct_flag (function) - oct_flag() -> flags64_t - Get number flag of the base, regardless of current processor - better to use - num_flag() - -ida_bytes.octet_generator_t (class) - Proxy of C++ octet_generator_t class. - -ida_bytes.octet_generator_t.__init__ (method) - __init__(self, _ea) -> octet_generator_t - - @param _ea: ea_t - -ida_bytes.octet_generator_t.invert_byte_order (method) - invert_byte_order(self) - -ida_bytes.off_flag (function) - off_flag() -> flags64_t - see FF_opbits - -ida_bytes.op_adds_xrefs (function) - 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++: flags64_t) - @param n: (C++: int) - -ida_bytes.op_based_stroff (function) - op_based_stroff(insn, n, opval, base) -> bool - Set operand representation to be 'struct offset' if the operand likely points to - a structure member. For example, let's there is a structure at 1000 1000 - stru_1000 Elf32_Sym <...> the operand #8 will be represented as - '#Elf32_Sym.st_size' after the call of 'op_based_stroff(..., 8, 0x1000)' By the - way, after the call of 'op_plain_offset(..., 0x1000)' it will be represented as - '#(stru_1000.st_size - 0x1000)' - - @param insn: (C++: const insn_t &) the instruction - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands - @param opval: (C++: adiff_t) operand value (usually op_t::value or op_t::addr) - @param base: (C++: ea_t) base reference - @return: success - -ida_bytes.op_bin (function) - op_bin(ea, n) -> bool - set op type to bin_flag() - - @param ea: (C++: ea_t) - @param n: (C++: int) - -ida_bytes.op_chr (function) - op_chr(ea, n) -> bool - set op type to char_flag() - - @param ea: (C++: ea_t) - @param n: (C++: int) - -ida_bytes.op_custfmt (function) - 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 (function) - op_dec(ea, n) -> bool - set op type to dec_flag() - - @param ea: (C++: ea_t) - @param n: (C++: int) - -ida_bytes.op_enum (function) - op_enum(ea, n, id, serial=0) -> bool - Set operand representation to be 'enum_t'. If applied to unexplored bytes, - converts them to 16/32bit word data - - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands - @param id: (C++: enum_t) id of enum - @param serial: (C++: uchar) the serial number of the constant in the enumeration, usually 0. - the serial numbers are used if the enumeration contains several - constants with the same value - @return: success - -ida_bytes.op_flt (function) - op_flt(ea, n) -> bool - set op type to flt_flag() - - @param ea: (C++: ea_t) - @param n: (C++: int) - -ida_bytes.op_hex (function) - op_hex(ea, n) -> bool - set op type to hex_flag() - - @param ea: (C++: ea_t) - @param n: (C++: int) - -ida_bytes.op_num (function) - op_num(ea, n) -> bool - set op type to num_flag() - - @param ea: (C++: ea_t) - @param n: (C++: int) - -ida_bytes.op_oct (function) - op_oct(ea, n) -> bool - set op type to oct_flag() - - @param ea: (C++: ea_t) - @param n: (C++: int) - -ida_bytes.op_seg (function) - 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: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands - @return: success - -ida_bytes.op_stkvar (function) - 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: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands - @return: success - -ida_bytes.op_stroff (function) - op_stroff(insn, n, path, path_len, delta) -> bool - Set operand representation to be 'struct offset'. - - @param insn: (C++: const insn_t &) the instruction - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands - @param path: (C++: const tid_t *) structure path (strpath). see nalt.hpp for more info. - @param path_len: (C++: int) length of the structure path - @param delta: (C++: adiff_t) struct offset delta. usually 0. denotes the difference between the - structure base and the pointer into the structure. - @return: success - op_stroff(insn, n, path, delta) -> bool - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param n: int - @param path: qvector< tid_t > const & - @param delta: adiff_t - -ida_bytes.oword_flag (function) - oword_flag() -> flags64_t - Get a flags64_t representing a octaword. - -ida_bytes.packreal_flag (function) - packreal_flag() -> flags64_t - Get a flags64_t representing a packed decimal real. - -ida_bytes.parse_binpat_str (function) - parse_binpat_str(out, ea, _in, radix, strlits_encoding=0) -> str - Convert user-specified binary string to internal representation. The 'in' - parameter contains space-separated tokens: - - numbers (numeric base is determined by 'radix') - - if value of number fits a byte, it is considered as a byte - - if value of number fits a word, it is considered as 2 bytes - - if value of number fits a dword,it is considered as 4 bytes - - "..." string constants - - 'x' single-character constants - - ? variable bytes - - Note that string constants are surrounded with double quotes. - - Here are a few examples (assuming base 16): - CD 21 - bytes 0xCD, 0x21 - 21CD - bytes 0xCD, 0x21 (little endian ) or 0x21, 0xCD (big-endian) - "Hello", 0 - the null terminated string "Hello" - L"Hello" - 'H', 0, 'e', 0, 'l', 0, 'l', 0, 'o', 0 - B8 ? ? ? ? 90 - byte 0xB8, 4 bytes with any value, byte 0x90 - - @param out: (C++: compiled_binpat_vec_t *) a vector of compiled binary patterns, for use with bin_search2() - @param ea: (C++: ea_t) linear address to convert for (the conversion depends on the address, - because the number of bits in a byte depend on the segment type) - @param in: (C++: const char *) input text string - @param radix: (C++: int) numeric base of numbers (8,10,16) - @param strlits_encoding: (C++: int) the target encoding into which the string literals - present in 'in', should be encoded. Can be any from [1, - get_encoding_qty()), or the special values PBSENC_* - @return: false either in case of parsing error, or if at least one requested - target encoding couldn't encode the string literals present in "in". - -ida_bytes.patch_byte (function) - 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. - @retval true: the database has been modified, - @retval false: the debugger is running and the process' memory has value 'x' at - address 'ea', or the debugger is not running, and the IDB has - value 'x' at address 'ea already. - - @param ea: (C++: ea_t) - @param x: (C++: uint64) - -ida_bytes.patch_bytes (function) - 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: (C++: ea_t) linear address - @param buf: (C++: const void *) buffer with new values of bytes - -ida_bytes.patch_dword (function) - 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 - idainfo::is_be() - @retval true: the database has been modified, - @retval false: the debugger is running and the process' memory has value 'x' at - address 'ea', or the debugger is not running, and the IDB has - value 'x' at address 'ea already. - - @param ea: (C++: ea_t) - @param x: (C++: uint64) - -ida_bytes.patch_qword (function) - 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 - idainfo::is_be() - @retval true: the database has been modified, - @retval false: the debugger is running and the process' memory has value 'x' at - address 'ea', or the debugger is not running, and the IDB has - value 'x' at address 'ea already. - - @param ea: (C++: ea_t) - @param x: (C++: uint64) - -ida_bytes.patch_word (function) - 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 - idainfo::is_be() - @retval true: the database has been modified, - @retval false: the debugger is running and the process' memory has value 'x' at - address 'ea', or the debugger is not running, and the IDB has - value 'x' at address 'ea already. - - @param ea: (C++: ea_t) - @param x: (C++: uint64) - -ida_bytes.prev_addr (function) - 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 (function) - 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 (function) - prev_head(ea, minea) -> ea_t - Get start of previous defined item. - - @param ea: (C++: ea_t) begin search at this address - @param minea: (C++: ea_t) included in the search range - @return: BADADDR if none exists. - -ida_bytes.prev_inited (function) - 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 (function) - 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 (function) - prev_that(ea, minea, testf) -> ea_t - Find previous address with a flag satisfying the function 'testf'. - @note: 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: (C++: ea_t) start searching from this address - 1. - @param minea: (C++: ea_t) included in the search range. - @param testf: (C++: testf_t *) test function to find previous address - @return: the found address or BADADDR. - -ida_bytes.prev_unknown (function) - 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.prev_visea (function) - prev_visea(ea) -> ea_t - Get previous visible address. - - @param ea: (C++: ea_t) - @return: BADADDR if none exists. - -ida_bytes.print_strlit_type (function) - print_strlit_type(strtype, flags=0) -> (str, str) - Get string type information: the string type name (possibly decorated with - hotkey markers), and the tooltip. - - @param strtype: (C++: int32) the string type - @param flags: (C++: int) or'ed PSTF_* constants - @return: length of generated text - -ida_bytes.put_byte (function) - 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. - @note: 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: (C++: ea_t) linear address - @param x: (C++: uint64) byte value - @return: true if the database has been modified - -ida_bytes.put_bytes (function) - 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: (C++: ea_t) linear address - @param buf: (C++: const void *) buffer with new values of bytes - -ida_bytes.put_dword (function) - put_dword(ea, x) - Set value of one dword of the program. This function takes into account order of - bytes specified in idainfo::is_be() This function works for wide byte processors - too. - - @param ea: (C++: ea_t) linear address - @param x: (C++: uint64) dword value - @note: the original value of the dword is completely lost and can't be recovered - by the get_original_dword() function. - -ida_bytes.put_qword (function) - put_qword(ea, x) - Set value of one qword (8 bytes) of the program. This function takes into - account order of bytes specified in idainfo::is_be() This function DOESN'T works - for wide byte processors. - - @param ea: (C++: ea_t) linear address - @param x: (C++: uint64) qword value - -ida_bytes.put_word (function) - put_word(ea, x) - Set value of one word of the program. This function takes into account order of - bytes specified in idainfo::is_be() This function works for wide byte processors - too. - @note: 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 (function) - qword_flag() -> flags64_t - Get a flags64_t representing a quad word. - -ida_bytes.register_custom_data_format (function) - register_custom_data_format(py_df) -> int - Registers a custom data format with a given data type. - - @param py_df: an instance of data_format_t - @return: < 0 if failed to register - > 0 data format id - -ida_bytes.register_custom_data_type (function) - register_custom_data_type(py_dt) -> int - Registers a custom data type. - - @param py_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 (function) - 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.register_data_types_and_formats.__reg_format (function) - -ida_bytes.register_data_types_and_formats.__reg_type (function) - -ida_bytes.revert_byte (function) - revert_byte(ea) -> bool - Revert patched byte - @retval true: byte was patched before and reverted now - - @param ea: (C++: ea_t) - -ida_bytes.seg_flag (function) - seg_flag() -> flags64_t - see FF_opbits - -ida_bytes.set_cmt (function) - set_cmt(ea, comm, rptble) -> bool - Set an indented comment. - - @param ea: (C++: ea_t) linear address - @param comm: (C++: const char *) comment string - * nullptr: do nothing (return 0) - * "" : delete comment - @param rptble: (C++: bool) is repeatable? - @return: success - -ida_bytes.set_forced_operand (function) - set_forced_operand(ea, n, op) -> bool - Set forced operand. - - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number - @param op: (C++: const char *) text of operand - * nullptr: do nothing (return 0) - * "" : delete forced operand - @return: success - -ida_bytes.set_immd (function) - 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 (function) - set_lzero(ea, n) -> bool - Set toggle lzero bit. This function changes the display of leading zeroes for - the specified operand. If the default is not to display leading zeroes, this - function will display them and vice versa. - - @param ea: (C++: ea_t) the item (insn/data) address - @param n: (C++: int) the operand number (0-first operand, 1-other operands) - @return: success - -ida_bytes.set_manual_insn (function) - set_manual_insn(ea, manual_insn) - Set manual instruction string. - - @param ea: (C++: ea_t) linear address of the instruction or data item - @param manual_insn: (C++: const char *) "" - delete manual string. nullptr - do nothing - -ida_bytes.set_op_type (function) - set_op_type(ea, type, n) -> bool - (internal function) change representation of operand(s). - - @param ea: (C++: ea_t) linear address - @param type: (C++: flags64_t) new flag value (should be obtained from char_flag(), num_flag() and - similar functions) - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands - @retval 1: ok - @retval 0: failed (applied to a tail byte) - -ida_bytes.set_opinfo (function) - 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: (C++: ea_t) linear address of the item - @param n: (C++: int) number of operand, 0 or 1 (see the note below) - @param flag: (C++: flags64_t) flags of the item - @param ti: (C++: const opinfo_t *) additional representation information - @param suppress_events: (C++: bool) do not generate changing_op_type and op_type_changed - events - @return: success - @note: for custom formats (if is_custfmt(flag, n) is true) or for offsets (if - is_off(flag, n) is true) N can be in range 0..UA_MAXOP-1 or equal to - OPND_ALL. In the case of OPND_ALL the additional information about all - operands will be set. - -ida_bytes.stkvar_flag (function) - stkvar_flag() -> flags64_t - see FF_opbits - -ida_bytes.strlit_flag (function) - strlit_flag() -> flags64_t - Get a flags64_t representing a string literal. - -ida_bytes.stroff_flag (function) - stroff_flag() -> flags64_t - see FF_opbits - -ida_bytes.stru_flag (function) - stru_flag() -> flags64_t - Get a flags64_t representing a struct. - -ida_bytes.tbyte_flag (function) - tbyte_flag() -> flags64_t - Get a flags64_t representing a tbyte. - -ida_bytes.toggle_bnot (function) - 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 (function) - toggle_lzero(ea, n) -> bool - Toggle lzero bit. - - @param ea: (C++: ea_t) the item (insn/data) address - @param n: (C++: int) the operand number (0-first operand, 1-other operands) - @return: success - -ida_bytes.toggle_sign (function) - 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 (function) - unregister_custom_data_format(dfid) -> bool - Unregisters a custom data format - - @param dfid: data format id - @return: Boolean - -ida_bytes.unregister_custom_data_type (function) - 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 (function) - As opposed to register_data_types_and_formats(), this function - unregisters multiple data types and formats at once. - -ida_bytes.unregister_data_types_and_formats.__unreg_format (function) - -ida_bytes.unregister_data_types_and_formats.__unreg_type (function) - -ida_bytes.update_hidden_range (function) - update_hidden_range(ha) -> bool - Update hidden range information in the database. You cannot use this function to - change the range boundaries - - @param ha: (C++: const hidden_range_t *) range to update - @return: success - -ida_bytes.use_mapping (function) - use_mapping(ea) -> ea_t - Translate address according to current mappings. - - @param ea: (C++: ea_t) address to translate - @return: translated address - -ida_bytes.visit_patched_bytes (function) - 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 py_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 (function) - word_flag() -> flags64_t - Get a flags64_t representing a word. - -ida_bytes.yword_flag (function) - yword_flag() -> flags64_t - Get a flags64_t representing a ymm word. - -ida_bytes.zword_flag (function) - zword_flag() -> flags64_t - Get a flags64_t representing a zmm word. - -ida_dbg (module) - Contains functions to control the debugging of a process. - - See Debugger functions for a complete explanation of these functions. - - These functions are inlined for the kernel. They are not inlined for the user- - interfaces. - -ida_dbg.BKPT_ACTIVE (variable) - active? - -ida_dbg.BKPT_BADBPT (variable) - failed to write the bpt to the process memory (at least one location) - -ida_dbg.BKPT_CNDREADY (variable) - condition has been compiled - -ida_dbg.BKPT_FAKEPEND (variable) - fake pending bpt: it is inactive but another bpt of the same type is active at - the same address(es) - -ida_dbg.BKPT_LISTBPT (variable) - include in bpt list (user-defined bpt) - -ida_dbg.BKPT_PAGE (variable) - written to the process as a page bpt. Available only after writing the bpt to - the process. - -ida_dbg.BKPT_PARTIAL (variable) - partially active? (some locations were not written yet) - -ida_dbg.BKPT_TRACE (variable) - trace bpt; should not be deleted when the process gets suspended - -ida_dbg.BPLT_ABS (variable) - absolute address: ea - -ida_dbg.BPLT_REL (variable) - relative address: module_path, offset - -ida_dbg.BPLT_SRC (variable) - source level: filename, lineno - -ida_dbg.BPTCK_ACT (variable) - breakpoint is active (written to the process) - -ida_dbg.BPTCK_NO (variable) - breakpoint is disabled - -ida_dbg.BPTCK_NONE (variable) - breakpoint does not exist - -ida_dbg.BPTCK_YES (variable) - breakpoint is enabled - -ida_dbg.BPTEV_ADDED (variable) - Breakpoint has been added. - -ida_dbg.BPTEV_CHANGED (variable) - Breakpoint has been modified. - -ida_dbg.BPTEV_REMOVED (variable) - Breakpoint has been removed. - -ida_dbg.BPT_BRK (variable) - suspend execution upon hit - -ida_dbg.BPT_ELANG_SHIFT (variable) - index of the extlang (scripting language) of the condition - -ida_dbg.BPT_ENABLED (variable) - enabled? - -ida_dbg.BPT_LOWCND (variable) - condition is calculated at low level (on the server side) - -ida_dbg.BPT_TRACE (variable) - add trace information upon hit - -ida_dbg.BPT_TRACEON (variable) - enable tracing when the breakpoint is reached - -ida_dbg.BPT_TRACE_BBLK (variable) - basic block tracing - -ida_dbg.BPT_TRACE_FUNC (variable) - function tracing - -ida_dbg.BPT_TRACE_INSN (variable) - instruction tracing - -ida_dbg.BPT_TRACE_TYPES (variable) - 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 (variable) - refresh the memory layout and contents before evaluating bpt condition - -ida_dbg.BT_LOG_INSTS (variable) - specific options for basic block tracing (see set_bblk_trace_options()) - - log all instructions in the current basic block - -ida_dbg.DBGINV_ALL (variable) - invalidate everything - -ida_dbg.DBGINV_MEMCFG (variable) - invalidate cached process segmentation - -ida_dbg.DBGINV_MEMORY (variable) - invalidate cached memory contents - -ida_dbg.DBGINV_NONE (variable) - invalidate nothing - -ida_dbg.DBGINV_REDRAW (variable) - refresh the screen - -ida_dbg.DBGINV_REGS (variable) - invalidate cached register values - -ida_dbg.DBG_Hooks (class) - Proxy of C++ DBG_Hooks class. - -ida_dbg.DBG_Hooks.__disown__ (method) - -ida_dbg.DBG_Hooks.__init__ (method) - __init__(self, _flags=0, _hkcb_flags=0x0001) -> DBG_Hooks - - @param _flags: uint32 - @param _hkcb_flags: uint32 - -ida_dbg.DBG_Hooks.dbg_bpt (method) - dbg_bpt(self, tid, bptea) -> int - A user defined breakpoint was reached. - - @param tid: (thid_t) - @param bptea: (::ea_t) - -ida_dbg.DBG_Hooks.dbg_bpt_changed (method) - dbg_bpt_changed(self, bptev_code, bpt) - Breakpoint has been changed. - - @param bptev_code: (int) Breakpoint modification events - @param bpt: (bpt_t *) - -ida_dbg.DBG_Hooks.dbg_exception (method) - dbg_exception(self, pid, tid, ea, exc_code, exc_can_cont, exc_ea, exc_info) -> int - - @param event: (const debug_event_t *) - @param warn: (int *) filled with: - * -1: display an exception warning dialog if the process is suspended. - * 0: never display an exception warning dialog. - * 1: always display an exception warning dialog. - @param ea: ea_t - @param exc_code: int - @param exc_can_cont: bool - @param exc_ea: ea_t - @param exc_info: char const * - -ida_dbg.DBG_Hooks.dbg_finished_loading_bpts (method) - dbg_finished_loading_bpts(self) - Finished loading breakpoint info from idb. - -ida_dbg.DBG_Hooks.dbg_information (method) - dbg_information(self, pid, tid, ea, info) - - @param event: (const debug_event_t *) - @param tid: thid_t - @param ea: ea_t - @param info: char const * - -ida_dbg.DBG_Hooks.dbg_library_load (method) - dbg_library_load(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) - - @param event: (const debug_event_t *) - @param tid: thid_t - @param ea: ea_t - @param modinfo_name: char const * - @param modinfo_base: ea_t - @param modinfo_size: asize_t - -ida_dbg.DBG_Hooks.dbg_library_unload (method) - dbg_library_unload(self, pid, tid, ea, info) - - @param event: (const debug_event_t *) - @param tid: thid_t - @param ea: ea_t - @param info: char const * - -ida_dbg.DBG_Hooks.dbg_process_attach (method) - dbg_process_attach(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) - - @param event: (const debug_event_t *) - @note: This event notification is also an asynchronous function result - notification for start_process() ! - @param tid: thid_t - @param ea: ea_t - @param modinfo_name: char const * - @param modinfo_base: ea_t - @param modinfo_size: asize_t - -ida_dbg.DBG_Hooks.dbg_process_detach (method) - dbg_process_detach(self, pid, tid, ea) - - @param event: (const debug_event_t *) - @note: This event notification is also an asynchronous function result - notification for start_process() ! - @param tid: thid_t - @param ea: ea_t - -ida_dbg.DBG_Hooks.dbg_process_exit (method) - dbg_process_exit(self, pid, tid, ea, exit_code) - - @param event: (const debug_event_t *) - @note: This event notification is also an asynchronous function result - notification for start_process() ! - @param tid: thid_t - @param ea: ea_t - @param exit_code: int - -ida_dbg.DBG_Hooks.dbg_process_start (method) - dbg_process_start(self, pid, tid, ea, modinfo_name, modinfo_base, modinfo_size) - - @param event: (const debug_event_t *) - @note: This event notification is also an asynchronous function result - notification for start_process() ! - @param tid: thid_t - @param ea: ea_t - @param modinfo_name: char const * - @param modinfo_base: ea_t - @param modinfo_size: asize_t - -ida_dbg.DBG_Hooks.dbg_request_error (method) - dbg_request_error(self, failed_command, failed_dbg_notification) - An error occurred during the processing of a request. - - @param failed_command: (ui_notification_t) - @param failed_dbg_notification: (dbg_notification_t) - -ida_dbg.DBG_Hooks.dbg_run_to (method) - dbg_run_to(self, pid, tid, ea) - - @param event: (const debug_event_t *) - @param tid: thid_t - @param ea: ea_t - -ida_dbg.DBG_Hooks.dbg_started_loading_bpts (method) - dbg_started_loading_bpts(self) - Started loading breakpoint info from idb. - -ida_dbg.DBG_Hooks.dbg_step_into (method) - dbg_step_into(self) - -ida_dbg.DBG_Hooks.dbg_step_over (method) - dbg_step_over(self) - -ida_dbg.DBG_Hooks.dbg_step_until_ret (method) - dbg_step_until_ret(self) - -ida_dbg.DBG_Hooks.dbg_suspend_process (method) - dbg_suspend_process(self) - The process is now suspended. - -ida_dbg.DBG_Hooks.dbg_thread_exit (method) - dbg_thread_exit(self, pid, tid, ea, exit_code) - - @param event: (const debug_event_t *) - @param tid: thid_t - @param ea: ea_t - @param exit_code: int - -ida_dbg.DBG_Hooks.dbg_thread_start (method) - dbg_thread_start(self, pid, tid, ea) - - @param event: (const debug_event_t *) - @param tid: thid_t - @param ea: ea_t - -ida_dbg.DBG_Hooks.dbg_trace (method) - dbg_trace(self, tid, ip) -> int - A step occurred (one instruction was executed). This event notification is only - generated if step tracing is enabled. - - @param tid: (thid_t) thread ID - @param ip: (::ea_t) current instruction pointer. usually points after the - executed instruction - @retval 1: do not log this trace event - @retval 0: log it - -ida_dbg.DBG_Hooks.hook (method) - hook(self) -> bool - -ida_dbg.DBG_Hooks.unhook (method) - unhook(self) -> bool - -ida_dbg.DEC_ERROR (variable) - error - -ida_dbg.DEC_NOTASK (variable) - process does not exist - -ida_dbg.DEC_TIMEOUT (variable) - timeout - -ida_dbg.DOPT_BPT_MSGS (variable) - log breakpoints - -ida_dbg.DOPT_DISABLE_ASLR (variable) - disable ASLR - -ida_dbg.DOPT_END_BPT (variable) - evaluate event condition on process end - -ida_dbg.DOPT_ENTRY_BPT (variable) - break on program entry point - -ida_dbg.DOPT_EXCDLG (variable) - exception dialogs: - -ida_dbg.DOPT_FAST_STEP (variable) - prevent debugger memory refreshes when single-stepping - -ida_dbg.DOPT_INFO_BPT (variable) - break on debugging information - -ida_dbg.DOPT_INFO_MSGS (variable) - log debugging info events - -ida_dbg.DOPT_LIB_BPT (variable) - break on library load/unload - -ida_dbg.DOPT_LIB_MSGS (variable) - log library loads/unloads - -ida_dbg.DOPT_LOAD_DINFO (variable) - automatically load debug files (pdb) - -ida_dbg.DOPT_REAL_MEMORY (variable) - do not hide breakpoint instructions - -ida_dbg.DOPT_REDO_STACK (variable) - reconstruct the stack - -ida_dbg.DOPT_SEGM_MSGS (variable) - log debugger segments modifications - -ida_dbg.DOPT_START_BPT (variable) - break on process start - -ida_dbg.DOPT_TEMP_HWBPT (variable) - when possible use hardware bpts for temp bpts - -ida_dbg.DOPT_THREAD_BPT (variable) - break on thread start/exit - -ida_dbg.DOPT_THREAD_MSGS (variable) - log thread starts/exits - -ida_dbg.DSTATE_NOTASK (variable) - no process is currently debugged - -ida_dbg.DSTATE_RUN (variable) - process is running - -ida_dbg.DSTATE_SUSP (variable) - process is suspended and will not continue - -ida_dbg.EXCDLG_ALWAYS (variable) - always display - -ida_dbg.EXCDLG_NEVER (variable) - never display exception dialogs - -ida_dbg.EXCDLG_UNKNOWN (variable) - display for unknown exceptions - -ida_dbg.FT_LOG_RET (variable) - specific options for function tracing (see set_func_trace_options()) - - function tracing will log returning instructions - -ida_dbg.IT_LOG_SAME_IP (variable) - specific options for instruction tracing (see set_insn_trace_options()) - - instruction tracing will log new instructions even when IP doesn't change - -ida_dbg.SRCIT_EXPR (variable) - an expression (a+b*c) - -ida_dbg.SRCIT_FUNC (variable) - function - -ida_dbg.SRCIT_LOCVAR (variable) - a stack, register, or register-relative local variable or parameter - -ida_dbg.SRCIT_MODULE (variable) - module - -ida_dbg.SRCIT_NONE (variable) - unknown - -ida_dbg.SRCIT_STMT (variable) - a statement (if/while/for...) - -ida_dbg.SRCIT_STTVAR (variable) - static variable/code - -ida_dbg.ST_ALREADY_LOGGED (variable) - step tracing will be disabled when IP is already logged - -ida_dbg.ST_OPTIONS_MASK (variable) - mask of available options, to ensure compatibility with newer IDA versions - -ida_dbg.ST_OVER_DEBUG_SEG (variable) - step tracing will be disabled when IP is in a debugger segment - -ida_dbg.ST_OVER_LIB_FUNC (variable) - step tracing will be disabled when IP is in a library function - -ida_dbg.ST_SKIP_LOOPS (variable) - step tracing will try to skip loops already recorded - -ida_dbg.WFNE_ANY (variable) - return the first event (even if it doesn't suspend the process) - -ida_dbg.WFNE_CONT (variable) - continue from the suspended state - -ida_dbg.WFNE_NOWAIT (variable) - do not wait for any event, immediately return DEC_TIMEOUT (to be used with - WFNE_CONT) - -ida_dbg.WFNE_SILENT (variable) - 1: be silent, 0:display modal boxes if necessary - -ida_dbg.WFNE_SUSP (variable) - wait until the process gets suspended - -ida_dbg.WFNE_USEC (variable) - timeout is specified in microseconds (minimum non-zero timeout is 40000us) - -ida_dbg.add_bpt (function) - add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool - Add a new breakpoint in the debugged process. \sq{Type, Synchronous function - - available as request, Notification, none (synchronous function)} - - @param bpt: (C++: const bpt_t &) Breakpoint to add. It describes the break condition, type, flags, - location (module relative, source breakpoint or absolute) and other - attributes. - @param size: asize_t - @param type: bpttype_t - - add_bpt(bpt) -> bool - - @param bpt: bpt_t const & - -ida_dbg.add_path_mapping (function) - add_path_mapping(src, dst) - - @param src: char const * - @param dst: char const * - -ida_dbg.add_virt_module (function) - add_virt_module(mod) -> bool - - @param mod: modinfo_t const * - -ida_dbg.attach_process (function) - 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} - @note: This function shouldn't be called as a request if NO_PROCESS is used. - - @param pid: (C++: pid_t) PID of the process to attach to. If NO_PROCESS, a dialog box will - interactively ask the user for the process to attach to. - @retval -4: debugger was not inited - @retval -3: the attaching is not supported - @retval -2: impossible to find a compatible process - @retval -1: impossible to attach to the given process (process died, privilege - needed, not supported by the debugger plugin, ...) - @retval 0: the user cancelled the attaching to the process - @retval 1: the debugger properly attached to the process - -ida_dbg.bpt_location_t (class) - Proxy of C++ bpt_location_t class. - -ida_dbg.bpt_location_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: bpt_location_t const & - -ida_dbg.bpt_location_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: bpt_location_t const & - -ida_dbg.bpt_location_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: bpt_location_t const & - -ida_dbg.bpt_location_t.__init__ (method) - __init__(self) -> bpt_location_t - -ida_dbg.bpt_location_t.__le__ (method) - __le__(self, r) -> bool - - @param r: bpt_location_t const & - -ida_dbg.bpt_location_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: bpt_location_t const & - -ida_dbg.bpt_location_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: bpt_location_t const & - -ida_dbg.bpt_location_t.compare (method) - compare(self, r) -> int - Lexically compare two breakpoint locations. Bpt locations are first compared - based on type (i.e. BPLT_ABS < BPLT_REL). BPLT_ABS locations are compared based - on their ea values. For all other location types, locations are first compared - based on their string (path/filename/symbol), then their offset/lineno. - - @param r: (C++: const bpt_location_t &) bpt_location_t const & - -ida_dbg.bpt_location_t.ea (method) - ea(self) -> ea_t - Get address (BPLT_ABS) - -ida_dbg.bpt_location_t.is_empty_path (method) - is_empty_path(self) -> bool - No path/filename specified? (BPLT_REL, BPLT_SRC) - -ida_dbg.bpt_location_t.lineno (method) - lineno(self) -> int - Get line number (BPLT_SRC) - -ida_dbg.bpt_location_t.offset (method) - offset(self) -> uval_t - Get offset (BPLT_REL, BPLT_SYM) - -ida_dbg.bpt_location_t.path (method) - path(self) -> char const * - Get path/filename (BPLT_REL, BPLT_SRC) - -ida_dbg.bpt_location_t.set_abs_bpt (method) - set_abs_bpt(self, a) - Specify an absolute address location. - - @param a: (C++: ea_t) - -ida_dbg.bpt_location_t.set_rel_bpt (method) - set_rel_bpt(self, mod, _offset) - Specify a relative address location. - - @param mod: (C++: const char *) char const * - @param _offset: (C++: uval_t) - -ida_dbg.bpt_location_t.set_src_bpt (method) - set_src_bpt(self, fn, _lineno) - Specify a source level location. - - @param fn: (C++: const char *) char const * - @param _lineno: (C++: int) - -ida_dbg.bpt_location_t.set_sym_bpt (method) - set_sym_bpt(self, _symbol, _offset=0) - Specify a symbolic location. - - @param _symbol: (C++: const char *) char const * - @param _offset: (C++: uval_t) - -ida_dbg.bpt_location_t.symbol (method) - symbol(self) -> char const * - Get symbol name (BPLT_SYM) - -ida_dbg.bpt_location_t.type (method) - type(self) -> bpt_loctype_t - Get bpt type. - -ida_dbg.bpt_t (class) - Proxy of C++ bpt_t class. - -ida_dbg.bpt_t.__init__ (method) - __init__(self) -> bpt_t - -ida_dbg.bpt_t.badbpt (method) - badbpt(self) -> bool - Failed to write bpt to process memory? - -ida_dbg.bpt_t.bptid (variable) - Internal breakpoint id. - -ida_dbg.bpt_t.cb (variable) - size of this structure - -ida_dbg.bpt_t.cndidx (variable) - Internal number of the condition (<0-none) - -ida_dbg.bpt_t.ea (variable) - Address, if known. For BPLT_SRC, index into an internal data struct. - -ida_dbg.bpt_t.enabled (method) - enabled(self) -> bool - Is breakpoint enabled? - -ida_dbg.bpt_t.flags (variable) - Breakpoint property bits - -ida_dbg.bpt_t.get_cnd_elang_idx (method) - get_cnd_elang_idx(self) -> size_t - -ida_dbg.bpt_t.get_size (method) - get_size(self) -> int - Get bpt size. - -ida_dbg.bpt_t.is_absbpt (method) - is_absbpt(self) -> bool - Is absolute address breakpoint? - -ida_dbg.bpt_t.is_active (method) - is_active(self) -> bool - Written completely to process? - -ida_dbg.bpt_t.is_compiled (method) - is_compiled(self) -> bool - Condition has been compiled? - -ida_dbg.bpt_t.is_hwbpt (method) - is_hwbpt(self) -> bool - Is hardware breakpoint? - -ida_dbg.bpt_t.is_inactive (method) - is_inactive(self) -> bool - Not written to process at all? - -ida_dbg.bpt_t.is_low_level (method) - is_low_level(self) -> bool - Is bpt condition calculated at low level? - -ida_dbg.bpt_t.is_page_bpt (method) - is_page_bpt(self) -> bool - Page breakpoint? - -ida_dbg.bpt_t.is_partially_active (method) - is_partially_active(self) -> bool - Written partially to process? - -ida_dbg.bpt_t.is_relbpt (method) - is_relbpt(self) -> bool - Is relative address breakpoint? - -ida_dbg.bpt_t.is_srcbpt (method) - is_srcbpt(self) -> bool - Is source level breakpoint? - -ida_dbg.bpt_t.is_symbpt (method) - is_symbpt(self) -> bool - Is symbolic breakpoint? - -ida_dbg.bpt_t.is_tracemodebpt (method) - is_tracemodebpt(self) -> bool - Does breakpoint trace anything? - -ida_dbg.bpt_t.is_traceoffbpt (method) - is_traceoffbpt(self) -> bool - Is this a tracing breakpoint, and is tracing disabled? - -ida_dbg.bpt_t.is_traceonbpt (method) - is_traceonbpt(self) -> bool - Is this a tracing breakpoint, and is tracing enabled? - -ida_dbg.bpt_t.listbpt (method) - listbpt(self) -> bool - Include in the bpt list? - -ida_dbg.bpt_t.loc (variable) - Location. - -ida_dbg.bpt_t.pass_count (variable) - Number of times the breakpoint is hit before stopping (default is 0: stop - always) - -ida_dbg.bpt_t.pid (variable) - breakpoint process id - -ida_dbg.bpt_t.props (variable) - Internal breakpoint properties - -ida_dbg.bpt_t.set_abs_bpt (method) - set_abs_bpt(self, a) - Set bpt location to an absolute address. - - @param a: (C++: ea_t) - -ida_dbg.bpt_t.set_rel_bpt (method) - set_rel_bpt(self, mod, o) - Set bpt location to a relative address. - - @param mod: (C++: const char *) char const * - @param o: (C++: uval_t) - -ida_dbg.bpt_t.set_src_bpt (method) - set_src_bpt(self, fn, lineno) - Set bpt location to a source line. - - @param fn: (C++: const char *) char const * - @param lineno: (C++: int) - -ida_dbg.bpt_t.set_sym_bpt (method) - set_sym_bpt(self, sym, o) - Set bpt location to a symbol. - - @param sym: (C++: const char *) char const * - @param o: (C++: uval_t) - -ida_dbg.bpt_t.set_trace_action (method) - set_trace_action(self, enable, trace_types) -> bool - Configure tracing options. - - @param enable: (C++: bool) - @param trace_types: (C++: int) - -ida_dbg.bpt_t.size (variable) - Size of the breakpoint (0 for software breakpoints) - -ida_dbg.bpt_t.tid (variable) - breakpoint thread id - -ida_dbg.bpt_t.type (variable) - Breakpoint type. - -ida_dbg.bpt_vec_t (class) - Proxy of C++ qvector< bpt_t > class. - -ida_dbg.bpt_vec_t.__getitem__ (method) - __getitem__(self, i) -> bpt_t - - @param i: size_t - -ida_dbg.bpt_vec_t.__init__ (method) - __init__(self) -> bpt_vec_t - __init__(self, x) -> bpt_vec_t - - @param x: qvector< bpt_t > const & - -ida_dbg.bpt_vec_t.__len__ (method) - __len__(self) -> size_t - -ida_dbg.bpt_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: bpt_t const & - -ida_dbg.bpt_vec_t.at (method) - at(self, _idx) -> bpt_t - - @param _idx: size_t - -ida_dbg.bpt_vec_t.begin (method) - begin(self) -> bpt_t - -ida_dbg.bpt_vec_t.capacity (method) - capacity(self) -> size_t - -ida_dbg.bpt_vec_t.clear (method) - clear(self) - -ida_dbg.bpt_vec_t.empty (method) - empty(self) -> bool - -ida_dbg.bpt_vec_t.end (method) - end(self) -> bpt_t - -ida_dbg.bpt_vec_t.erase (method) - erase(self, it) -> bpt_t - - @param it: qvector< bpt_t >::iterator - - erase(self, first, last) -> bpt_t - - @param first: qvector< bpt_t >::iterator - @param last: qvector< bpt_t >::iterator - -ida_dbg.bpt_vec_t.extract (method) - extract(self) -> bpt_t - -ida_dbg.bpt_vec_t.grow (method) - grow(self, x=bpt_t()) - - @param x: bpt_t const & - -ida_dbg.bpt_vec_t.inject (method) - inject(self, s, len) - - @param s: bpt_t * - @param len: size_t - -ida_dbg.bpt_vec_t.insert (method) - insert(self, it, x) -> bpt_t - - @param it: qvector< bpt_t >::iterator - @param x: bpt_t const & - -ida_dbg.bpt_vec_t.pop_back (method) - pop_back(self) - -ida_dbg.bpt_vec_t.push_back (method) - push_back(self, x) - - @param x: bpt_t const & - - push_back(self) -> bpt_t - -ida_dbg.bpt_vec_t.qclear (method) - qclear(self) - -ida_dbg.bpt_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_dbg.bpt_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: bpt_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_dbg.bpt_vec_t.size (method) - size(self) -> size_t - -ida_dbg.bpt_vec_t.swap (method) - swap(self, r) - - @param r: qvector< bpt_t > & - -ida_dbg.bpt_vec_t.truncate (method) - truncate(self) - -ida_dbg.bptaddrs_t (class) - Proxy of C++ bptaddrs_t class. - -ida_dbg.bptaddrs_t.__init__ (method) - __init__(self) -> bptaddrs_t - -ida_dbg.bring_debugger_to_front (function) - bring_debugger_to_front() - -ida_dbg.check_bpt (function) - 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 (function) - choose_trace_file() -> str - Show the choose trace dialog. - -ida_dbg.clear_requests_queue (function) - clear_requests_queue() - Clear the queue of waiting requests. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - @note: If a request is currently running, this one isn't stopped. - -ida_dbg.clear_trace (function) - 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 (function) - collect_stack_trace(tid, trace) -> bool - - @param tid: thid_t - @param trace: call_stack_t * - -ida_dbg.continue_process (function) - continue_process() -> bool - Continue the execution of the process in the debugger. \sq{Type, Synchronous - function - available as Request, Notification, none (synchronous function)} - @note: 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 (function) - 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 (function) - 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 (function) - 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 (function) - 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 (function) - 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) enum save_reg_values_t - @return: false if the operation failed, true otherwise - -ida_dbg.dbg_add_many_tevs (function) - 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 (function) - 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 (function) - 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) enum tev_type_t - @param tid: (C++: thid_t) - @param address: (C++: ea_t) - -ida_dbg.dbg_add_thread (function) - 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 (function) - dbg_bin_search(start_ea, end_ea, data, srch_flags) -> str - - @param start_ea: ea_t - @param end_ea: ea_t - @param data: compiled_binpat_vec_t const & - @param srch_flags: int - -ida_dbg.dbg_bpt (variable) - A user defined breakpoint was reached. - -ida_dbg.dbg_bpt_changed (variable) - Breakpoint has been changed. - -ida_dbg.dbg_can_query (function) - 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 (function) - 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_finished_loading_bpts (variable) - Finished loading breakpoint info from idb. - -ida_dbg.dbg_is_loaded (function) - dbg_is_loaded() -> bool - Checks if a debugger is loaded - - @return: Boolean - -ida_dbg.dbg_last (variable) - The last debugger notification code. - -ida_dbg.dbg_process_attach (variable) - @note: This event notification is also an asynchronous function result - notification for start_process() ! - -ida_dbg.dbg_process_detach (variable) - @note: This event notification is also an asynchronous function result - notification for start_process() ! - -ida_dbg.dbg_process_exit (variable) - @note: This event notification is also an asynchronous function result - notification for start_process() ! - -ida_dbg.dbg_process_start (variable) - @note: This event notification is also an asynchronous function result - notification for start_process() ! - -ida_dbg.dbg_request_error (variable) - An error occurred during the processing of a request. - -ida_dbg.dbg_started_loading_bpts (variable) - Started loading breakpoint info from idb. - -ida_dbg.dbg_suspend_process (variable) - The process is now suspended. - - @note: This event notification is also an asynchronous function result - notification for suspend_process() ! - -ida_dbg.dbg_trace (variable) - A step occurred (one instruction was executed). This event notification is only - generated if step tracing is enabled. - - @retval 1: do not log this trace event - @retval 0: log it - -ida_dbg.define_exception (function) - define_exception(code, name, desc, flags) -> char const * - Convenience function: define new exception code. - - @param code: (C++: uint) exception code (cannot be 0) - @param name: (C++: const char *) exception name (cannot be empty or nullptr) - @param desc: (C++: const char *) exception description (maybe nullptr) - @param flags: (C++: int) combination of Exception info flags - @return: failure message or nullptr. You must call store_exceptions() if this - function succeeds - -ida_dbg.del_bpt (function) - del_bpt(ea) -> bool - Delete an existing breakpoint in the debugged process. \sq{Type, Synchronous - function - available as request, Notification, none (synchronous function)} - - @param bptloc: (C++: const bpt_location_t &) Breakpoint location - del_bpt(bptloc) -> bool - - @param bptloc: bpt_location_t const & - -ida_dbg.del_bptgrp (function) - del_bptgrp(name) -> bool - Delete a folder, bpt that were part of this folder are moved to the root folder - \sq{Type, Synchronous function, Notification, none (synchronous function)} - - @param name: (C++: const char *) full path to the folder to be deleted - @return: success - -ida_dbg.del_virt_module (function) - del_virt_module(base) -> bool - - @param base: ea_t const - -ida_dbg.detach_process (function) - 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 (function) - diff_trace_file(NONNULL_filename) -> bool - Show difference between the current trace and the one from 'filename'. - - @param NONNULL_filename: (C++: const char *) char const * - -ida_dbg.disable_bblk_trace (function) - disable_bblk_trace() -> bool - -ida_dbg.disable_bpt (function) - disable_bpt(ea) -> bool - - @param ea: ea_t - - disable_bpt(bptloc) -> bool - - @param bptloc: bpt_location_t const & - -ida_dbg.disable_func_trace (function) - disable_func_trace() -> bool - -ida_dbg.disable_insn_trace (function) - disable_insn_trace() -> bool - -ida_dbg.disable_step_trace (function) - disable_step_trace() -> bool - -ida_dbg.edit_manual_regions (function) - edit_manual_regions() - -ida_dbg.enable_bblk_trace (function) - enable_bblk_trace(enable=True) -> bool - - @param enable: bool - -ida_dbg.enable_bpt (function) - enable_bpt(ea, enable=True) -> bool - - @param ea: ea_t - @param enable: bool - - enable_bpt(bptloc, enable=True) -> bool - - @param bptloc: bpt_location_t const & - @param enable: bool - -ida_dbg.enable_bptgrp (function) - enable_bptgrp(bptgrp_name, enable=True) -> int - Enable (or disable) all bpts in a folder \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param bptgrp_name: (C++: const char *) absolute path to the folder - @param enable: (C++: bool) by default true, enable bpts, false disable bpts - @return: -1 an error occured 0 no changes >0 nubmers of bpts udpated - -ida_dbg.enable_func_trace (function) - enable_func_trace(enable=True) -> bool - - @param enable: bool - -ida_dbg.enable_insn_trace (function) - enable_insn_trace(enable=True) -> bool - - @param enable: bool - -ida_dbg.enable_manual_regions (function) - enable_manual_regions(enable) - - @param enable: bool - -ida_dbg.enable_step_trace (function) - enable_step_trace(enable=1) -> bool - - @param enable: int - -ida_dbg.eval_ctx_t (class) - Proxy of C++ eval_ctx_t class. - -ida_dbg.eval_ctx_t.__init__ (method) - __init__(self, _ea) -> eval_ctx_t - - @param _ea: ea_t - -ida_dbg.exist_bpt (function) - exist_bpt(ea) -> bool - Does a breakpoint exist at the given location? - - @param ea: (C++: ea_t) - -ida_dbg.exit_process (function) - 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 (function) - find_bpt(bptloc, bpt) -> bool - Find a breakpoint by location. \sq{Type, Synchronous function - available as - request, Notification, none (synchronous function)} - - @param bptloc: (C++: const bpt_location_t &) Breakpoint location - @param bpt: (C++: bpt_t *) bpt is filled if the breakpoint was found - -ida_dbg.get_bblk_trace_options (function) - 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 (function) - get_bpt(ea, bpt) -> bool - Get the characteristics of a breakpoint. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param ea: (C++: ea_t) any address in the breakpoint range - @param bpt: (C++: bpt_t *) if not nullptr, is filled with the characteristics. - @return: false if no breakpoint exists - -ida_dbg.get_bpt_group (function) - get_bpt_group(bptloc) -> str - Retrieve the absolute path to the folder of the bpt based on the bpt_location - find_bpt is called to retrieve the bpt \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param bptloc: (C++: const bpt_location_t &) bptlocation of the bpt - @return: breakpoint correclty moved to the directory - success - -ida_dbg.get_bpt_qty (function) - get_bpt_qty() -> int - Get number of breakpoints. \sq{Type, Synchronous function, Notification, none - (synchronous function)} - -ida_dbg.get_bpt_tev_ea (function) - 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)} - - @param n: (C++: int) number of trace event, is in range 0..get_tev_qty()-1. 0 represents - the latest added trace event. - @return: BADADDR if not a read, read/write or execution trace event. - @note: 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. - -ida_dbg.get_bptloc_string (function) - get_bptloc_string(i) -> char const * - - @param i: int - -ida_dbg.get_call_tev_callee (function) - 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: (C++: int) number of trace event, is in range 0..get_tev_qty()-1. 0 represents - the latest added trace event. - @return: BADADDR if not a function call event. - -ida_dbg.get_current_source_file (function) - get_current_source_file() -> str - -ida_dbg.get_current_source_line (function) - get_current_source_line() -> int - -ida_dbg.get_current_thread (function) - get_current_thread() -> thid_t - Get current thread ID. \sq{Type, Synchronous function, Notification, none - (synchronous function)} - -ida_dbg.get_dbg_byte (function) - get_dbg_byte(ea) -> bool - Get one byte of the debugged process memory. - - @param ea: (C++: ea_t) linear address - @return: true success - false address inaccessible or debugger not running - -ida_dbg.get_dbg_memory_info (function) - get_dbg_memory_info(ranges) -> int - - @param ranges: meminfo_vec_t * - -ida_dbg.get_dbg_reg_info (function) - get_dbg_reg_info(regname, ri) -> bool - Get register information \sq{Type, Synchronous function, Notification, none - (synchronous function)} - - @param regname: (C++: const char *) char const * - @param ri: (C++: register_info_t *) - -ida_dbg.get_debug_event (function) - get_debug_event() -> debug_event_t - Get the current debugger event. - -ida_dbg.get_debugger_event_cond (function) - get_debugger_event_cond() -> char const * - -ida_dbg.get_first_module (function) - get_first_module(modinfo) -> bool - - @param modinfo: modinfo_t * - -ida_dbg.get_func_trace_options (function) - 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 (function) - get_global_var(prov, ea, name, out) -> bool - - @param prov: srcinfo_provider_t * - @param ea: ea_t - @param name: char const * - @param out: source_item_ptr * - -ida_dbg.get_grp_bpts (function) - get_grp_bpts(bpts, grp_name) -> ssize_t - Retrieve a copy the bpts stored in a folder \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param bpts: (C++: bpt_vec_t *) : pointer to a vector where the copy of bpts are stored - @param grp_name: (C++: const char *) absolute path to the folder - @return: number of bpts present in the vector - -ida_dbg.get_insn_tev_reg_mem (function) - 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: (C++: int) number of trace event, is in range 0..get_tev_qty()-1. 0 represents - the latest added trace event. - @param memmap: (C++: memreg_infos_t *) result - @return: false if not an instruction event or no memory is available - -ida_dbg.get_insn_tev_reg_result (function) - get_insn_tev_reg_result(n, regname, regval) -> bool - - @param n: int - @param regname: char const * - @param regval: regval_t * - -ida_dbg.get_insn_tev_reg_val (function) - get_insn_tev_reg_val(n, regname, regval) -> bool - - @param n: int - @param regname: char const * - @param regval: regval_t * - -ida_dbg.get_insn_trace_options (function) - 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 (function) - 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 (function) - get_local_var(prov, ea, name, out) -> bool - - @param prov: srcinfo_provider_t * - @param ea: ea_t - @param name: char const * - @param out: source_item_ptr * - -ida_dbg.get_local_vars (function) - get_local_vars(prov, ea, out) -> bool - - @param prov: srcinfo_provider_t * - @param ea: ea_t - @param out: source_items_t * - -ida_dbg.get_manual_regions (function) - get_manual_regions(ranges) - Returns the manual memory regions - - @param ranges: meminfo_vec_t * - - @return: list(start_ea, end_ea, name, sclass, sbase, bitness, perm) - get_manual_regions() -> [(int, int, str, str, int, int, int), ...] or None - -ida_dbg.get_module_info (function) - get_module_info(ea, modinfo) -> bool - - @param ea: ea_t - @param modinfo: modinfo_t * - -ida_dbg.get_next_module (function) - get_next_module(modinfo) -> bool - - @param modinfo: modinfo_t * - -ida_dbg.get_process_options (function) - get_process_options() - Get process options. Any of the arguments may be nullptr - -ida_dbg.get_process_state (function) - 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 (function) - 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 *) array with information about each running process - @return: number of processes or -1 on error - -ida_dbg.get_reg_val (function) - get_reg_val(regname, regval) -> bool - Get register value as an unsigned 64-bit int. - - @param regname: (C++: const char *) char const * - @param regval: regval_t * - - get_reg_val(regname, ival) -> bool - - @param regname: char const * - @param ival: uint64 * - - get_reg_val(regname) -> bool, float, int - - @param regname: char const * - -ida_dbg.get_reg_vals (function) - get_reg_vals(tid, clsmask=-1) -> regvals_t - Fetch live registers values for the thread - - @param tid: The ID of the thread to read registers for - @param clsmask: An OR'ed mask of register classes to - read values for (can be used to speed up the - retrieval process) - - @return: a regvals_t instance (empty if an error occurs) - -ida_dbg.get_ret_tev_return (function) - 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: (C++: int) number of trace event, is in range 0..get_tev_qty()-1. 0 represents - the latest added trace event. - @return: BADADDR if not a function return event. - -ida_dbg.get_running_notification (function) - 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 (function) - 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 (function) - get_sp_val() -> bool - Get value of the SP register for the current thread. Requires a suspended - debugger. - -ida_dbg.get_srcinfo_provider (function) - get_srcinfo_provider(name) -> srcinfo_provider_t * - - @param name: char const * - -ida_dbg.get_step_trace_options (function) - 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 (function) - get_tev_ea(n) -> ea_t - - @param n: int - -ida_dbg.get_tev_event (function) - 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: (C++: int) number of trace event, is in range 0..get_tev_qty()-1. 0 represents - the latest added trace event. - @param d: (C++: debug_event_t *) result - @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 (function) - get_tev_info(n, tev_info) -> bool - Get main information about a trace event. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param n: (C++: int) number of trace event, is in range 0..get_tev_qty()-1. 0 represents - the latest added trace event. - @param tev_info: (C++: tev_info_t *) result - @return: success - -ida_dbg.get_tev_memory_info (function) - 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: (C++: int) number of trace event, is in range 0..get_tev_qty()-1. 0 represents - the latest added trace event. - @param mi: (C++: meminfo_vec_t *) result - @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 (function) - 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_reg_mem (function) - -ida_dbg.get_tev_reg_mem_ea (function) - -ida_dbg.get_tev_reg_mem_qty (function) - -ida_dbg.get_tev_reg_val (function) - -ida_dbg.get_tev_tid (function) - get_tev_tid(n) -> int - - @param n: int - -ida_dbg.get_tev_type (function) - get_tev_type(n) -> int - - @param n: int - -ida_dbg.get_thread_qty (function) - get_thread_qty() -> int - Get number of threads. \sq{Type, Synchronous function, Notification, none - (synchronous function)} - -ida_dbg.get_trace_base_address (function) - 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_dynamic_register_set (function) - get_trace_dynamic_register_set(idaregs) - Get dynamic register set of current trace. - - @param idaregs: (C++: dynamic_register_set_t *) - -ida_dbg.get_trace_file_desc (function) - get_trace_file_desc(filename) -> str - Get the file header of the specified trace file. - - @param filename: (C++: const char *) char const * - -ida_dbg.get_trace_platform (function) - get_trace_platform() -> char const * - Get platform name of current trace. - -ida_dbg.getn_bpt (function) - getn_bpt(n, bpt) -> bool - Get the characteristics of a breakpoint. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param n: (C++: int) number of breakpoint, is in range 0..get_bpt_qty()-1 - @param bpt: (C++: bpt_t *) filled with the characteristics. - @return: false if no breakpoint exists - -ida_dbg.getn_thread (function) - getn_thread(n) -> thid_t - Get the ID of a thread. \sq{Type, Synchronous function, Notification, none - (synchronous function)} - - @param n: (C++: int) number of thread, is in range 0..get_thread_qty()-1 - @return: NO_THREAD if the thread doesn't exist. - -ida_dbg.getn_thread_name (function) - getn_thread_name(n) -> char const * - Get the NAME of a thread \sq{Type, Synchronous function, Notification, none - (synchronous function)} - - @param n: (C++: int) number of thread, is in range 0..get_thread_qty()-1 or -1 for the - current thread - @return: thread name or nullptr if the thread doesn't exist. - -ida_dbg.graph_trace (function) - graph_trace() -> bool - Show the trace callgraph. - -ida_dbg.handle_debug_event (function) - handle_debug_event(ev, rqflags) -> int - - @param ev: debug_event_t const * - @param rqflags: int - -ida_dbg.hide_all_bpts (function) - hide_all_bpts() -> int - -ida_dbg.internal_get_sreg_base (function) - internal_get_sreg_base(tid, sreg_value) -> ea_t - Get the sreg base, for the given thread. - - @param tid: thid_t - @param sreg_value: int - @return: The sreg base, or BADADDR on failure. - -ida_dbg.internal_ioctl (function) - internal_ioctl(fn, buf, poutbuf, poutsize) -> int - - @param fn: int - @param buf: void const * - @param poutbuf: void ** - @param poutsize: ssize_t * - -ida_dbg.invalidate_dbg_state (function) - invalidate_dbg_state(dbginv) -> int - Invalidate cached debugger information. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param dbginv: (C++: int) Debugged process invalidation options - @return: current debugger state (one of Debugged process states) - -ida_dbg.invalidate_dbgmem_config (function) - 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 (function) - 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 (function) - is_bblk_trace_enabled() -> bool - -ida_dbg.is_debugger_busy (function) - 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 (function) - is_debugger_memory(ea) -> bool - Is the address mapped to debugger memory? - - @param ea: (C++: ea_t) - -ida_dbg.is_debugger_on (function) - is_debugger_on() -> bool - Is the debugger currently running? - -ida_dbg.is_func_trace_enabled (function) - 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 (function) - is_insn_trace_enabled() -> bool - Get current state of instruction tracing. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - -ida_dbg.is_reg_custom (function) - 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 *) char const * - -ida_dbg.is_reg_float (function) - 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 *) char const * - -ida_dbg.is_reg_integer (function) - 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 *) char const * - -ida_dbg.is_request_running (function) - is_request_running() -> bool - Is a request currently running? - -ida_dbg.is_step_trace_enabled (function) - is_step_trace_enabled() -> bool - Get current state of step tracing. \sq{Type, Synchronous function, Notification, - none (synchronous function)} - -ida_dbg.is_valid_dstate (function) - is_valid_dstate(state) -> bool - - @param state: int - -ida_dbg.is_valid_trace_file (function) - is_valid_trace_file(filename) -> bool - Is the specified file a valid trace file for the current database? - - @param filename: (C++: const char *) char const * - -ida_dbg.list_bptgrps (function) - list_bptgrps(bptgrps) -> size_t - Retrieve the list of absolute path of all folders of bpt dirtree \sq{Type, - Synchronous function, Notification, none (synchronous function)} - - @param bptgrps: (C++: qstrvec_t *) list of absolute path in the bpt dirtree - @return: number of folders returned - list_bptgrps() -> [str, ...] - -ida_dbg.load_debugger (function) - load_debugger(dbgname, use_remote) -> bool - - @param dbgname: char const * - @param use_remote: bool - -ida_dbg.load_trace_file (function) - load_trace_file(filename) -> str - Load a recorded trace file in the 'Tracing' 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 *) char const * - -ida_dbg.memreg_info_t (class) - Proxy of C++ memreg_info_t class. - -ida_dbg.memreg_info_t.__init__ (method) - __init__(self) -> memreg_info_t - -ida_dbg.memreg_info_t.get_bytes (method) - get_bytes(self) -> PyObject * - -ida_dbg.memreg_infos_t (class) - Proxy of C++ qvector< memreg_info_t > class. - -ida_dbg.memreg_infos_t.__getitem__ (method) - __getitem__(self, i) -> memreg_info_t - - @param i: size_t - -ida_dbg.memreg_infos_t.__init__ (method) - __init__(self) -> memreg_infos_t - __init__(self, x) -> memreg_infos_t - - @param x: qvector< memreg_info_t > const & - -ida_dbg.memreg_infos_t.__len__ (method) - __len__(self) -> size_t - -ida_dbg.memreg_infos_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: memreg_info_t const & - -ida_dbg.memreg_infos_t.at (method) - at(self, _idx) -> memreg_info_t - - @param _idx: size_t - -ida_dbg.memreg_infos_t.begin (method) - begin(self) -> memreg_info_t - -ida_dbg.memreg_infos_t.capacity (method) - capacity(self) -> size_t - -ida_dbg.memreg_infos_t.clear (method) - clear(self) - -ida_dbg.memreg_infos_t.empty (method) - empty(self) -> bool - -ida_dbg.memreg_infos_t.end (method) - end(self) -> memreg_info_t - -ida_dbg.memreg_infos_t.erase (method) - erase(self, it) -> memreg_info_t - - @param it: qvector< memreg_info_t >::iterator - - erase(self, first, last) -> memreg_info_t - - @param first: qvector< memreg_info_t >::iterator - @param last: qvector< memreg_info_t >::iterator - -ida_dbg.memreg_infos_t.extract (method) - extract(self) -> memreg_info_t - -ida_dbg.memreg_infos_t.grow (method) - grow(self, x=memreg_info_t()) - - @param x: memreg_info_t const & - -ida_dbg.memreg_infos_t.inject (method) - inject(self, s, len) - - @param s: memreg_info_t * - @param len: size_t - -ida_dbg.memreg_infos_t.insert (method) - insert(self, it, x) -> memreg_info_t - - @param it: qvector< memreg_info_t >::iterator - @param x: memreg_info_t const & - -ida_dbg.memreg_infos_t.pop_back (method) - pop_back(self) - -ida_dbg.memreg_infos_t.push_back (method) - push_back(self, x) - - @param x: memreg_info_t const & - - push_back(self) -> memreg_info_t - -ida_dbg.memreg_infos_t.qclear (method) - qclear(self) - -ida_dbg.memreg_infos_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_dbg.memreg_infos_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: memreg_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_dbg.memreg_infos_t.size (method) - size(self) -> size_t - -ida_dbg.memreg_infos_t.swap (method) - swap(self, r) - - @param r: qvector< memreg_info_t > & - -ida_dbg.memreg_infos_t.truncate (method) - truncate(self) - -ida_dbg.put_dbg_byte (function) - put_dbg_byte(ea, x) -> bool - Change one byte of the debugged process memory. - - @param ea: (C++: ea_t) linear address - @param x: (C++: uint32) byte value - @return: true if the process memory has been modified - -ida_dbg.read_dbg_memory (function) - read_dbg_memory(ea, buffer, size) -> ssize_t - - @param ea: ea_t - @param buffer: void * - @param size: size_t - -ida_dbg.refresh_debugger_memory (function) - refresh_debugger_memory() -> PyObject * - Refreshes the debugger memory - - @return: Nothing - -ida_dbg.rename_bptgrp (function) - rename_bptgrp(old_name, new_name) -> bool - Rename a folder of bpt dirtree \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - @param old_name: (C++: const char *) absolute path to the folder to be renamed - @param new_name: (C++: const char *) absolute path of the new folder name - @return: success - -ida_dbg.request_add_bpt (function) - request_add_bpt(ea, size=0, type=BPT_DEFAULT) -> bool - Post an add_bpt(const bpt_t &) request. - - @param ea: ea_t - @param size: asize_t - @param type: bpttype_t - - request_add_bpt(bpt) -> bool - - @param bpt: bpt_t const & - -ida_dbg.request_attach_process (function) - 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 (function) - request_clear_trace() - Post a clear_trace() request. - -ida_dbg.request_continue_process (function) - request_continue_process() -> bool - Post a continue_process() request. - @note: This requires an explicit call to run_requests() - -ida_dbg.request_del_bpt (function) - request_del_bpt(ea) -> bool - Post a del_bpt(const bpt_location_t &) request. - - @param ea: ea_t - - request_del_bpt(bptloc) -> bool - - @param bptloc: bpt_location_t const & - -ida_dbg.request_detach_process (function) - request_detach_process() -> bool - Post a detach_process() request. - -ida_dbg.request_disable_bblk_trace (function) - request_disable_bblk_trace() -> bool - -ida_dbg.request_disable_bpt (function) - request_disable_bpt(ea) -> bool - - @param ea: ea_t - - request_disable_bpt(bptloc) -> bool - - @param bptloc: bpt_location_t const & - -ida_dbg.request_disable_func_trace (function) - request_disable_func_trace() -> bool - -ida_dbg.request_disable_insn_trace (function) - request_disable_insn_trace() -> bool - -ida_dbg.request_disable_step_trace (function) - request_disable_step_trace() -> bool - -ida_dbg.request_enable_bblk_trace (function) - request_enable_bblk_trace(enable=True) -> bool - - @param enable: bool - -ida_dbg.request_enable_bpt (function) - request_enable_bpt(ea, enable=True) -> bool - - @param ea: ea_t - @param enable: bool - - request_enable_bpt(bptloc, enable=True) -> bool - - @param bptloc: bpt_location_t const & - @param enable: bool - -ida_dbg.request_enable_func_trace (function) - request_enable_func_trace(enable=True) -> bool - - @param enable: bool - -ida_dbg.request_enable_insn_trace (function) - request_enable_insn_trace(enable=True) -> bool - - @param enable: bool - -ida_dbg.request_enable_step_trace (function) - request_enable_step_trace(enable=1) -> bool - - @param enable: int - -ida_dbg.request_exit_process (function) - request_exit_process() -> bool - Post an exit_process() request. - -ida_dbg.request_resume_thread (function) - request_resume_thread(tid) -> int - Post a resume_thread() request. - - @param tid: (C++: thid_t) - -ida_dbg.request_run_to (function) - 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) - -ida_dbg.request_select_thread (function) - request_select_thread(tid) -> bool - Post a select_thread() request. - - @param tid: (C++: thid_t) - -ida_dbg.request_set_bblk_trace_options (function) - request_set_bblk_trace_options(options) - Post a set_bblk_trace_options() request. - - @param options: (C++: int) - -ida_dbg.request_set_func_trace_options (function) - request_set_func_trace_options(options) - Post a set_func_trace_options() request. - - @param options: (C++: int) - -ida_dbg.request_set_insn_trace_options (function) - request_set_insn_trace_options(options) - Post a set_insn_trace_options() request. - - @param options: (C++: int) - -ida_dbg.request_set_reg_val (function) - request_set_reg_val(regname, o) -> PyObject * - Post a set_reg_val() request. - - @param regname: (C++: const char *) char const * - @param o: PyObject * - -ida_dbg.request_set_resume_mode (function) - request_set_resume_mode(tid, mode) -> bool - Post a set_resume_mode() request. - - @param tid: (C++: thid_t) - @param mode: (C++: resume_mode_t) enum resume_mode_t - -ida_dbg.request_set_step_trace_options (function) - request_set_step_trace_options(options) - Post a set_step_trace_options() request. - - @param options: (C++: int) - -ida_dbg.request_start_process (function) - request_start_process(path=None, args=None, sdir=None) -> int - Post a start_process() request. - - @param path: (C++: const char *) char const * - @param args: (C++: const char *) char const * - @param sdir: (C++: const char *) char const * - -ida_dbg.request_step_into (function) - request_step_into() -> bool - Post a step_into() request. - -ida_dbg.request_step_over (function) - request_step_over() -> bool - Post a step_over() request. - -ida_dbg.request_step_until_ret (function) - request_step_until_ret() -> bool - Post a step_until_ret() request. - -ida_dbg.request_suspend_process (function) - request_suspend_process() -> bool - Post a suspend_process() request. - -ida_dbg.request_suspend_thread (function) - request_suspend_thread(tid) -> int - Post a suspend_thread() request. - - @param tid: (C++: thid_t) - -ida_dbg.resume_thread (function) - resume_thread(tid) -> int - Resume thread. \sq{Type, Synchronous function - available as request, - Notification, none (synchronous function)} - - @param tid: (C++: thid_t) thread id - @retval -1: network error - @retval 0: failed - @retval 1: ok - -ida_dbg.retrieve_exceptions (function) - 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 (function) - run_requests() -> bool - Execute requests until all requests are processed or an asynchronous function is - called. \sq{Type, Synchronous function, Notification, none (synchronous - function)} - - @return: false if not all requests could be processed (indicates an asynchronous - function was started) - @note: If called from a notification handler, the execution of requests will be - postponed to the end of the execution of all notification handlers. - -ida_dbg.run_to (function) - 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: (C++: ea_t) target address - @param pid: (C++: pid_t) not used yet. please do not specify this parameter. - -ida_dbg.save_trace_file (function) - save_trace_file(filename, description) -> bool - Save the current trace in the specified file. - - @param filename: (C++: const char *) char const * - @param description: (C++: const char *) char const * - -ida_dbg.select_thread (function) - 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: (C++: thid_t) ID of the thread to select - @return: false if the thread doesn't exist. - -ida_dbg.send_dbg_command (function) - 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, <result string>) on success, or (False, <Error message string>) on failure - -ida_dbg.set_bblk_trace_options (function) - set_bblk_trace_options(options) - Modify basic block tracing options (see BT_LOG_INSTS) - - @param options: (C++: int) - -ida_dbg.set_bpt_group (function) - set_bpt_group(bpt, grp_name) -> bool - Move a bpt into a folder in the breakpoint dirtree if the folder didn't exists, - it will be created \sq{Type, Synchronous function, Notification, none - (synchronous function)} - - @param bpt: (C++: bpt_t &) bpt that will be moved - @param grp_name: (C++: const char *) absolute path to the breakpoint dirtree folder - @return: success - -ida_dbg.set_bptloc_group (function) - set_bptloc_group(bptloc, grp_name) -> bool - Move a bpt into a folder in the breakpoint dirtree based on the bpt_location - find_bpt is called to retrieve the bpt and then set_bpt_group if the folder - didn't exists, it will be created \sq{Type, Synchronous function, Notification, - none (synchronous function)} - - @param bptloc: (C++: const bpt_location_t &) bptlocation of the bpt that will be moved - @param grp_name: (C++: const char *) absolute path to the breakpoint dirtree folder - @return: success - -ida_dbg.set_bptloc_string (function) - set_bptloc_string(s) -> int - - @param s: char const * - -ida_dbg.set_debugger_event_cond (function) - set_debugger_event_cond(NONNULL_evcond) - - @param NONNULL_evcond: char const * - -ida_dbg.set_debugger_options (function) - 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 (function) - 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 (function) - 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 (function) - 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 (function) - set_manual_regions(ranges) - - @param ranges: meminfo_vec_t const * - -ida_dbg.set_process_options (function) - set_process_options(path, args, sdir, host, _pass, port) - Set process options. Any of the arguments may be nullptr, which means 'do not - modify' - - @param path: (C++: const char *) char const * - @param args: (C++: const char *) char const * - @param sdir: (C++: const char *) char const * - @param host: (C++: const char *) char const * - @param pass: (C++: const char *) char const * - @param port: (C++: int) - -ida_dbg.set_process_state (function) - 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: (C++: int) new process state (one of Debugged process states) if - DSTATE_NOTASK is passed then the state is not changed - @param p_thid: (C++: thid_t *) ptr to new thread id. may be nullptr or pointer to NO_THREAD. the - pointed variable will contain the old thread id upon return - @param dbginv: (C++: int) Debugged process invalidation options - @return: old debugger state (one of Debugged process states) - -ida_dbg.set_reg_val (function) - set_reg_val(regname, o) -> PyObject - - @param regname: char const * - @param o: PyObject * - - set_reg_val(tid, regidx, o) -> bool, int - - @param tid: thid_t - @param regidx: int - @param o: PyObject * - -ida_dbg.set_remote_debugger (function) - set_remote_debugger(host, _pass, port=-1) - Set remote debugging options. Should be used before starting the debugger. - - @param host: (C++: const char *) If empty, IDA will use local debugger. If nullptr, the host will - not be set. - @param pass: (C++: const char *) If nullptr, the password will not be set - @param port: (C++: int) If -1, the default port number will be used - -ida_dbg.set_resume_mode (function) - 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) enum resume_mode_t - -ida_dbg.set_step_trace_options (function) - 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 (function) - 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_dynamic_register_set (function) - set_trace_dynamic_register_set(idaregs) - Set dynamic register set of current trace. - - @param idaregs: (C++: dynamic_register_set_t &) - -ida_dbg.set_trace_file_desc (function) - set_trace_file_desc(filename, description) -> bool - Change the description of the specified trace file. - - @param filename: (C++: const char *) char const * - @param description: (C++: const char *) char const * - -ida_dbg.set_trace_platform (function) - set_trace_platform(platform) - Set platform name of current trace. - - @param platform: (C++: const char *) char const * - -ida_dbg.set_trace_size (function) - set_trace_size(size) -> bool - Specify the new size of the circular buffer. \sq{Type, Synchronous function, - Notification, none (synchronous function)} - - @param size: (C++: int) 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. - @note: If you specify 0, all available memory can be quickly used !!! - -ida_dbg.srcdbg_request_step_into (function) - srcdbg_request_step_into() -> bool - -ida_dbg.srcdbg_request_step_over (function) - srcdbg_request_step_over() -> bool - -ida_dbg.srcdbg_request_step_until_ret (function) - srcdbg_request_step_until_ret() -> bool - -ida_dbg.srcdbg_step_into (function) - srcdbg_step_into() -> bool - -ida_dbg.srcdbg_step_over (function) - srcdbg_step_over() -> bool - -ida_dbg.srcdbg_step_until_ret (function) - srcdbg_step_until_ret() -> bool - -ida_dbg.start_process (function) - 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} - @note: You can also use the run_to() function to easily start the execution of a - process until a given address is reached. - @note: For all parameters, a nullptr value indicates the debugger will take the - value from the defined Process Options. - - @param path: (C++: const char *) path to the executable to start - @param args: (C++: const char *) arguments to pass to process - @param sdir: (C++: const char *) starting directory for the process - @retval -1: impossible to create the process - @retval 0: the starting of the process was cancelled by the user - @retval 1: the process was properly started - -ida_dbg.step_into (function) - 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 (function) - 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 (function) - 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 (function) - store_exceptions() -> bool - Update the exception information stored in the debugger module by invoking its - dbg->set_exception_info callback - -ida_dbg.suspend_process (function) - 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) } - @note: 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 (function) - 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: (C++: thid_t) thread id - @retval -1: network error - @retval 0: failed - @retval 1: ok - -ida_dbg.tev_bpt (variable) - write, read/write, execution trace - -ida_dbg.tev_call (variable) - a function call trace - -ida_dbg.tev_event (variable) - debug event occurred - -ida_dbg.tev_info_reg_t (class) - Proxy of C++ tev_info_reg_t class. - -ida_dbg.tev_info_reg_t.__init__ (method) - __init__(self) -> tev_info_reg_t - -ida_dbg.tev_info_t (class) - Proxy of C++ tev_info_t class. - -ida_dbg.tev_info_t.__init__ (method) - __init__(self) -> tev_info_t - -ida_dbg.tev_info_t.ea (variable) - address where the event occurred - -ida_dbg.tev_info_t.tid (variable) - thread where the event was recorded - -ida_dbg.tev_info_t.type (variable) - trace event type - -ida_dbg.tev_insn (variable) - an instruction trace - -ida_dbg.tev_max (variable) - first unused event type - -ida_dbg.tev_mem (variable) - memory layout changed - -ida_dbg.tev_none (variable) - no event - -ida_dbg.tev_reg_value_t (class) - Proxy of C++ tev_reg_value_t class. - -ida_dbg.tev_reg_value_t.__init__ (method) - __init__(self, _reg_idx=-1, _value=uint64(-1)) -> tev_reg_value_t - - @param _reg_idx: int - @param _value: uint64 - -ida_dbg.tev_reg_values_t (class) - Proxy of C++ qvector< tev_reg_value_t > class. - -ida_dbg.tev_reg_values_t.__getitem__ (method) - __getitem__(self, i) -> tev_reg_value_t - - @param i: size_t - -ida_dbg.tev_reg_values_t.__init__ (method) - __init__(self) -> tev_reg_values_t - __init__(self, x) -> tev_reg_values_t - - @param x: qvector< tev_reg_value_t > const & - -ida_dbg.tev_reg_values_t.__len__ (method) - __len__(self) -> size_t - -ida_dbg.tev_reg_values_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: tev_reg_value_t const & - -ida_dbg.tev_reg_values_t.at (method) - at(self, _idx) -> tev_reg_value_t - - @param _idx: size_t - -ida_dbg.tev_reg_values_t.begin (method) - begin(self) -> tev_reg_value_t - -ida_dbg.tev_reg_values_t.capacity (method) - capacity(self) -> size_t - -ida_dbg.tev_reg_values_t.clear (method) - clear(self) - -ida_dbg.tev_reg_values_t.empty (method) - empty(self) -> bool - -ida_dbg.tev_reg_values_t.end (method) - end(self) -> tev_reg_value_t - -ida_dbg.tev_reg_values_t.erase (method) - erase(self, it) -> tev_reg_value_t - - @param it: qvector< tev_reg_value_t >::iterator - - erase(self, first, last) -> tev_reg_value_t - - @param first: qvector< tev_reg_value_t >::iterator - @param last: qvector< tev_reg_value_t >::iterator - -ida_dbg.tev_reg_values_t.extract (method) - extract(self) -> tev_reg_value_t - -ida_dbg.tev_reg_values_t.grow (method) - grow(self, x=tev_reg_value_t()) - - @param x: tev_reg_value_t const & - -ida_dbg.tev_reg_values_t.inject (method) - inject(self, s, len) - - @param s: tev_reg_value_t * - @param len: size_t - -ida_dbg.tev_reg_values_t.insert (method) - insert(self, it, x) -> tev_reg_value_t - - @param it: qvector< tev_reg_value_t >::iterator - @param x: tev_reg_value_t const & - -ida_dbg.tev_reg_values_t.pop_back (method) - pop_back(self) - -ida_dbg.tev_reg_values_t.push_back (method) - push_back(self, x) - - @param x: tev_reg_value_t const & - - push_back(self) -> tev_reg_value_t - -ida_dbg.tev_reg_values_t.qclear (method) - qclear(self) - -ida_dbg.tev_reg_values_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_dbg.tev_reg_values_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: tev_reg_value_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_dbg.tev_reg_values_t.size (method) - size(self) -> size_t - -ida_dbg.tev_reg_values_t.swap (method) - swap(self, r) - - @param r: qvector< tev_reg_value_t > & - -ida_dbg.tev_reg_values_t.truncate (method) - truncate(self) - -ida_dbg.tev_ret (variable) - a function return trace - -ida_dbg.tevinforeg_vec_t (class) - Proxy of C++ qvector< tev_info_reg_t > class. - -ida_dbg.tevinforeg_vec_t.__getitem__ (method) - __getitem__(self, i) -> tev_info_reg_t - - @param i: size_t - -ida_dbg.tevinforeg_vec_t.__init__ (method) - __init__(self) -> tevinforeg_vec_t - __init__(self, x) -> tevinforeg_vec_t - - @param x: qvector< tev_info_reg_t > const & - -ida_dbg.tevinforeg_vec_t.__len__ (method) - __len__(self) -> size_t - -ida_dbg.tevinforeg_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: tev_info_reg_t const & - -ida_dbg.tevinforeg_vec_t.at (method) - at(self, _idx) -> tev_info_reg_t - - @param _idx: size_t - -ida_dbg.tevinforeg_vec_t.begin (method) - begin(self) -> tev_info_reg_t - -ida_dbg.tevinforeg_vec_t.capacity (method) - capacity(self) -> size_t - -ida_dbg.tevinforeg_vec_t.clear (method) - clear(self) - -ida_dbg.tevinforeg_vec_t.empty (method) - empty(self) -> bool - -ida_dbg.tevinforeg_vec_t.end (method) - end(self) -> tev_info_reg_t - -ida_dbg.tevinforeg_vec_t.erase (method) - erase(self, it) -> tev_info_reg_t - - @param it: qvector< tev_info_reg_t >::iterator - - erase(self, first, last) -> tev_info_reg_t - - @param first: qvector< tev_info_reg_t >::iterator - @param last: qvector< tev_info_reg_t >::iterator - -ida_dbg.tevinforeg_vec_t.extract (method) - extract(self) -> tev_info_reg_t - -ida_dbg.tevinforeg_vec_t.grow (method) - grow(self, x=tev_info_reg_t()) - - @param x: tev_info_reg_t const & - -ida_dbg.tevinforeg_vec_t.inject (method) - inject(self, s, len) - - @param s: tev_info_reg_t * - @param len: size_t - -ida_dbg.tevinforeg_vec_t.insert (method) - insert(self, it, x) -> tev_info_reg_t - - @param it: qvector< tev_info_reg_t >::iterator - @param x: tev_info_reg_t const & - -ida_dbg.tevinforeg_vec_t.pop_back (method) - pop_back(self) - -ida_dbg.tevinforeg_vec_t.push_back (method) - push_back(self, x) - - @param x: tev_info_reg_t const & - - push_back(self) -> tev_info_reg_t - -ida_dbg.tevinforeg_vec_t.qclear (method) - qclear(self) - -ida_dbg.tevinforeg_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_dbg.tevinforeg_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: tev_info_reg_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_dbg.tevinforeg_vec_t.size (method) - size(self) -> size_t - -ida_dbg.tevinforeg_vec_t.swap (method) - swap(self, r) - - @param r: qvector< tev_info_reg_t > & - -ida_dbg.tevinforeg_vec_t.truncate (method) - truncate(self) - -ida_dbg.update_bpt (function) - 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)} - @note: Only the following fields can be modified: - * bpt_t::cndbody - * bpt_t::pass_count - * bpt_t::flags - * bpt_t::size - * bpt_t::type - @note: 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 *) bpt_t const * - -ida_dbg.wait_for_next_event (function) - 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: (C++: int) combination of Wait for debugger event flags constants - @param timeout: (C++: int) number of seconds to wait, -1-infinity - @return: either an event_id_t (if > 0), or a dbg_event_code_t (if <= 0) - -ida_dbg.write_dbg_memory (function) - write_dbg_memory(ea, py_buf, size=size_t(-1)) -> ssize_t - - @param ea: ea_t - @param py_buf: PyObject * - @param size: size_t - -ida_diskio (module) - File I/O functions for IDA. - - You should not use standard C file I/O functions in modules. Use functions from - this header, pro.h and fpro.h instead. - - This file also declares a call_system() function. - -ida_diskio.IDA_SUBDIR_IDADIR_FIRST (variable) - $IDADIR/subdir will be first, not last - -ida_diskio.IDA_SUBDIR_IDP (variable) - append the processor name as a subdirectory - -ida_diskio.IDA_SUBDIR_ONLY_EXISTING (variable) - only existing directories will be present - -ida_diskio.LINPUT_GENERIC (variable) - generic linput - -ida_diskio.LINPUT_LOCAL (variable) - local file - -ida_diskio.LINPUT_NONE (variable) - invalid linput - -ida_diskio.LINPUT_PROCMEM (variable) - debugged process memory (read_dbg_memory()) - -ida_diskio.LINPUT_RFILE (variable) - remote file ( debugger_t::open_file, debugger_t::read_file) - -ida_diskio.choose_ioport_device2 (function) - choose_ioport_device2(_device, file, parse_params) -> bool - - @param _device: qstring * - @param file: char const * - @param parse_params: choose_ioport_parser_t * - -ida_diskio.choose_ioport_parser_t (class) - Proxy of C++ choose_ioport_parser_t class. - -ida_diskio.choose_ioport_parser_t.__disown__ (method) - -ida_diskio.choose_ioport_parser_t.__init__ (method) - __init__(self) -> choose_ioport_parser_t - - @param self: PyObject * - -ida_diskio.choose_ioport_parser_t.parse (method) - parse(self, param, line) -> bool - @retval true: and fill PARAM with a displayed string - @retval false: and empty PARAM to skip the current device - @retval false: and fill PARAM with an error message - - @param param: (C++: qstring *) - @param line: (C++: const char *) char const * - -ida_diskio.close_linput (function) - close_linput(li) - Close loader input. - - @param li: (C++: linput_t *) - -ida_diskio.create_bytearray_linput (function) - create_bytearray_linput(s) -> linput_t * - Trivial memory linput. - - @param s: qstring const & - -ida_diskio.create_generic_linput (function) - create_generic_linput(gl) -> linput_t * - Create a generic linput - - @param gl: (C++: generic_linput_t *) linput description. this object will be destroyed by close_linput() - using "delete gl;" - -ida_diskio.create_memory_linput (function) - 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: (C++: ea_t) starting address of the input - @param size: (C++: asize_t) size of the memory area to represent as linput if unknown, may be - passed as 0 - -ida_diskio.eclose (function) - eclose(fp) - - @param fp: FILE * - -ida_diskio.enumerate_files (function) - 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.enumerate_files2 (function) - enumerate_files2(answer, answer_size, path, fname, fv) -> int - - @param answer: char * - @param answer_size: size_t - @param path: char const * - @param fname: char const * - @param fv: file_enumerator_t & - -ida_diskio.file_enumerator_t (class) - Proxy of C++ file_enumerator_t class. - -ida_diskio.file_enumerator_t.__disown__ (method) - -ida_diskio.file_enumerator_t.__init__ (method) - __init__(self) -> file_enumerator_t - - @param self: PyObject * - -ida_diskio.file_enumerator_t.visit_file (method) - visit_file(self, file) -> int - - @param file: char const * - -ida_diskio.fopenA (function) - fopenA(file) -> FILE * - Open a file for append in text mode, deny none. - - @param file: (C++: const char *) char const * - @return: nullptr if failure - -ida_diskio.fopenM (function) - fopenM(file) -> FILE * - Open a file for read/write in binary mode, deny write. - - @param file: (C++: const char *) char const * - @return: nullptr if failure - -ida_diskio.fopenRB (function) - fopenRB(file) -> FILE * - Open a file for read in binary mode, deny none. - - @param file: (C++: const char *) char const * - @return: nullptr if failure - -ida_diskio.fopenRT (function) - fopenRT(file) -> FILE * - Open a file for read in text mode, deny none. - - @param file: (C++: const char *) char const * - @return: nullptr if failure - -ida_diskio.fopenWB (function) - 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 *) char const * - @return: nullptr if failure - -ida_diskio.fopenWT (function) - 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 *) char const * - @return: nullptr if failure - -ida_diskio.generic_linput_t (class) - Proxy of C++ generic_linput_t class. - -ida_diskio.generic_linput_t.__init__ (method) - -ida_diskio.generic_linput_t.blocksize (variable) - preferred block size to work with read/write sizes will be in multiples of this - number. for example, 4096 is a nice value blocksize 0 means that the filesize is - unknown. the internal cache will be disabled in this case. also, seeks from the - file end will fail. blocksize=-1 means error. - -ida_diskio.generic_linput_t.filesize (variable) - input file size - -ida_diskio.generic_linput_t.read (method) - read(self, off, buffer, nbytes) -> ssize_t - - @param off: qoff64_t - @param buffer: void * - @param nbytes: size_t - -ida_diskio.get_ida_subdirs (function) - 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: (C++: const char *) name of the resource to list - @param flags: (C++: int) Subdirectory modification flags bits - @return: number of directories appended to 'dirs' - -ida_diskio.get_linput_type (function) - get_linput_type(li) -> linput_type_t - Get linput type. - - @param li: (C++: linput_t *) - -ida_diskio.get_special_folder (function) - 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) - -ida_diskio.get_user_idadir (function) - 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 (function) - getsysfile(filename, subdir) -> str - Search for IDA system file. This function searches for a file in: - 1. each directory specified by IDAUSR% - 2. ida directory [+ subdir] and returns the first match. - - @param filename: (C++: const char *) name of file to search - @param subdir: (C++: const char *) if specified, the file is looked for in the specified - subdirectory of the ida directory first (see IDA subdirectories) - @return: nullptr if not found, otherwise a pointer to full file name. - -ida_diskio.idadir (function) - idadir(subdir) -> char const * - Get IDA directory (if subdir==nullptr) or the specified subdirectory (see IDA - subdirectories) - - @param subdir: (C++: const char *) char const * - -ida_diskio.ioports_fallback_t (class) - Proxy of C++ ioports_fallback_t class. - -ida_diskio.ioports_fallback_t.__disown__ (method) - -ida_diskio.ioports_fallback_t.__init__ (method) - __init__(self) -> ioports_fallback_t - - @param self: PyObject * - -ida_diskio.ioports_fallback_t.handle (method) - handle(self, ports, line) -> bool - - @param ports: ioports_t const & - @param line: char const * - -ida_diskio.open_linput (function) - open_linput(file, remote) -> linput_t * - Open loader input. - - @param file: (C++: const char *) char const * - @param remote: (C++: bool) - -ida_diskio.qlgetz (function) - 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.read_ioports2 (function) - read_ioports2(ports, device, file, callback=None) -> ssize_t - - @param ports: ioports_t * - @param device: qstring * - @param file: char const * - @param callback: ioports_fallback_t * - -ida_dirtree (module) - Types involved in grouping of item into folders. - - The dirtree_t class is used to organize a directory tree on top of any - collection that allows for accessing its elements by an id (inode). - - No requirements are imposed on the inodes apart from the forbidden value -1 (it - is used ot denote a bad inode). - - The dirspec_t class is used to specialize the dirtree. It can be used to - introduce a directory structure for: - * local types - * structs - * enums - * functions - * names - * etc - - @note: you should be manipulating dirtree_t (and, if implementing a new tree - backend, dirspec_t) instances, not calling top-level functions in this - file directly. - -ida_dirtree.DTN_DISPLAY_NAME (variable) - use short, displayable form of the entry name. for example, 'std::string' - instead of 'std::basic_string<char, ...>'. Note that more than one "full name" - can have the same displayable name. - -ida_dirtree.DTN_FULL_NAME (variable) - use long form of the entry name. That name is unique. - -ida_dirtree.direntry_t (class) - Proxy of C++ direntry_t class. - -ida_dirtree.direntry_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: direntry_t const & - -ida_dirtree.direntry_t.__init__ (method) - __init__(self, i=BADIDX, d=False) -> direntry_t - - @param i: uval_t - @param d: bool - -ida_dirtree.direntry_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: direntry_t const & - -ida_dirtree.direntry_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: direntry_t const & - -ida_dirtree.direntry_t.idx (variable) - diridx_t or inode_t - -ida_dirtree.direntry_t.isdir (variable) - is 'idx' a diridx_t, or an inode_t - -ida_dirtree.direntry_t.valid (method) - valid(self) -> bool - -ida_dirtree.direntry_vec_t (class) - Proxy of C++ qvector< direntry_t > class. - -ida_dirtree.direntry_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< direntry_t > const & - -ida_dirtree.direntry_vec_t.__getitem__ (method) - __getitem__(self, i) -> direntry_t - - @param i: size_t - -ida_dirtree.direntry_vec_t.__init__ (method) - __init__(self) -> direntry_vec_t - __init__(self, x) -> direntry_vec_t - - @param x: qvector< direntry_t > const & - -ida_dirtree.direntry_vec_t.__len__ (method) - __len__(self) -> size_t - -ida_dirtree.direntry_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< direntry_t > const & - -ida_dirtree.direntry_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: direntry_t const & - -ida_dirtree.direntry_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: direntry_t const & - -ida_dirtree.direntry_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: direntry_t const & - -ida_dirtree.direntry_vec_t.at (method) - at(self, _idx) -> direntry_t - - @param _idx: size_t - -ida_dirtree.direntry_vec_t.begin (method) - begin(self) -> direntry_t - -ida_dirtree.direntry_vec_t.capacity (method) - capacity(self) -> size_t - -ida_dirtree.direntry_vec_t.clear (method) - clear(self) - -ida_dirtree.direntry_vec_t.empty (method) - empty(self) -> bool - -ida_dirtree.direntry_vec_t.end (method) - end(self) -> direntry_t - -ida_dirtree.direntry_vec_t.erase (method) - erase(self, it) -> direntry_t - - @param it: qvector< direntry_t >::iterator - - erase(self, first, last) -> direntry_t - - @param first: qvector< direntry_t >::iterator - @param last: qvector< direntry_t >::iterator - -ida_dirtree.direntry_vec_t.extract (method) - extract(self) -> direntry_t - -ida_dirtree.direntry_vec_t.find (method) - find(self, x) -> direntry_t - - @param x: direntry_t const & - -ida_dirtree.direntry_vec_t.grow (method) - grow(self, x=direntry_t()) - - @param x: direntry_t const & - -ida_dirtree.direntry_vec_t.has (method) - has(self, x) -> bool - - @param x: direntry_t const & - -ida_dirtree.direntry_vec_t.inject (method) - inject(self, s, len) - - @param s: direntry_t * - @param len: size_t - -ida_dirtree.direntry_vec_t.insert (method) - insert(self, it, x) -> direntry_t - - @param it: qvector< direntry_t >::iterator - @param x: direntry_t const & - -ida_dirtree.direntry_vec_t.pop_back (method) - pop_back(self) - -ida_dirtree.direntry_vec_t.push_back (method) - push_back(self, x) - - @param x: direntry_t const & - - push_back(self) -> direntry_t - -ida_dirtree.direntry_vec_t.qclear (method) - qclear(self) - -ida_dirtree.direntry_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_dirtree.direntry_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: direntry_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_dirtree.direntry_vec_t.size (method) - size(self) -> size_t - -ida_dirtree.direntry_vec_t.swap (method) - swap(self, r) - - @param r: qvector< direntry_t > & - -ida_dirtree.direntry_vec_t.truncate (method) - truncate(self) - -ida_dirtree.dirspec_t (class) - Proxy of C++ dirspec_t class. - -ida_dirtree.dirspec_t.__disown__ (method) - -ida_dirtree.dirspec_t.__init__ (method) - __init__(self, nm=None, f=0) -> dirspec_t - - @param nm: char const * - @param f: uint32 - -ida_dirtree.dirspec_t.get_attrs (method) - get_attrs(self, inode) -> qstring - - @param inode: inode_t - -ida_dirtree.dirspec_t.get_inode (method) - get_inode(self, dirpath, name) -> inode_t - get the entry inode in the specified directory - - @param dirpath: (C++: const char *) the absolute directory path with trailing slash - @param name: (C++: const char *) the entry name in the directory - @return: the entry inode - -ida_dirtree.dirspec_t.get_name (method) - get_name(self, inode, name_flags=DTN_FULL_NAME) -> bool - get the entry name. for example, the structure name - - @param inode: (C++: inode_t) inode number of the entry - @param name_flags: (C++: uint32) how exactly the name should be retrieved. combination of bits - for get_...name() methods bits - @return: false if the entry does not exist. - -ida_dirtree.dirspec_t.is_orderable (method) - is_orderable(self) -> bool - -ida_dirtree.dirspec_t.rename_inode (method) - rename_inode(self, inode, newname) -> bool - rename the entry - - @param inode: (C++: inode_t) - @param newname: (C++: const char *) - @return: success - -ida_dirtree.dirspec_t.unlink_inode (method) - unlink_inode(self, inode) - - @param inode: (C++: inode_t) - -ida_dirtree.dirtree_cursor_t (class) - Proxy of C++ dirtree_cursor_t class. - -ida_dirtree.dirtree_cursor_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: dirtree_cursor_t const & - -ida_dirtree.dirtree_cursor_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: dirtree_cursor_t const & - -ida_dirtree.dirtree_cursor_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: dirtree_cursor_t const & - -ida_dirtree.dirtree_cursor_t.__init__ (method) - __init__(self, _parent=BADIDX, _rank=size_t(-1)) -> dirtree_cursor_t - - @param _parent: diridx_t - @param _rank: size_t - -ida_dirtree.dirtree_cursor_t.__le__ (method) - __le__(self, r) -> bool - - @param r: dirtree_cursor_t const & - -ida_dirtree.dirtree_cursor_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: dirtree_cursor_t const & - -ida_dirtree.dirtree_cursor_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: dirtree_cursor_t const & - -ida_dirtree.dirtree_cursor_t.compare (method) - compare(self, r) -> int - - @param r: dirtree_cursor_t const & - -ida_dirtree.dirtree_cursor_t.is_root_cursor (method) - is_root_cursor(self) -> bool - -ida_dirtree.dirtree_cursor_t.parent (variable) - the parent directory - -ida_dirtree.dirtree_cursor_t.rank (variable) - the index into the parent directory - -ida_dirtree.dirtree_cursor_t.root_cursor (method) - root_cursor() -> dirtree_cursor_t - -ida_dirtree.dirtree_cursor_t.set_root_cursor (method) - set_root_cursor(self) - -ida_dirtree.dirtree_cursor_t.valid (method) - valid(self) -> bool - -ida_dirtree.dirtree_cursor_t_root_cursor (function) - dirtree_cursor_t_root_cursor() -> dirtree_cursor_t - -ida_dirtree.dirtree_cursor_vec_t (class) - Proxy of C++ qvector< dirtree_cursor_t > class. - -ida_dirtree.dirtree_cursor_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< dirtree_cursor_t > const & - -ida_dirtree.dirtree_cursor_vec_t.__getitem__ (method) - __getitem__(self, i) -> dirtree_cursor_t - - @param i: size_t - -ida_dirtree.dirtree_cursor_vec_t.__init__ (method) - __init__(self) -> dirtree_cursor_vec_t - __init__(self, x) -> dirtree_cursor_vec_t - - @param x: qvector< dirtree_cursor_t > const & - -ida_dirtree.dirtree_cursor_vec_t.__len__ (method) - __len__(self) -> size_t - -ida_dirtree.dirtree_cursor_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< dirtree_cursor_t > const & - -ida_dirtree.dirtree_cursor_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: dirtree_cursor_t const & - -ida_dirtree.dirtree_cursor_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: dirtree_cursor_t const & - -ida_dirtree.dirtree_cursor_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: dirtree_cursor_t const & - -ida_dirtree.dirtree_cursor_vec_t.at (method) - at(self, _idx) -> dirtree_cursor_t - - @param _idx: size_t - -ida_dirtree.dirtree_cursor_vec_t.begin (method) - begin(self) -> dirtree_cursor_t - -ida_dirtree.dirtree_cursor_vec_t.capacity (method) - capacity(self) -> size_t - -ida_dirtree.dirtree_cursor_vec_t.clear (method) - clear(self) - -ida_dirtree.dirtree_cursor_vec_t.empty (method) - empty(self) -> bool - -ida_dirtree.dirtree_cursor_vec_t.end (method) - end(self) -> dirtree_cursor_t - -ida_dirtree.dirtree_cursor_vec_t.erase (method) - erase(self, it) -> dirtree_cursor_t - - @param it: qvector< dirtree_cursor_t >::iterator - - erase(self, first, last) -> dirtree_cursor_t - - @param first: qvector< dirtree_cursor_t >::iterator - @param last: qvector< dirtree_cursor_t >::iterator - -ida_dirtree.dirtree_cursor_vec_t.extract (method) - extract(self) -> dirtree_cursor_t - -ida_dirtree.dirtree_cursor_vec_t.find (method) - find(self, x) -> dirtree_cursor_t - - @param x: dirtree_cursor_t const & - -ida_dirtree.dirtree_cursor_vec_t.grow (method) - grow(self, x=dirtree_cursor_t()) - - @param x: dirtree_cursor_t const & - -ida_dirtree.dirtree_cursor_vec_t.has (method) - has(self, x) -> bool - - @param x: dirtree_cursor_t const & - -ida_dirtree.dirtree_cursor_vec_t.inject (method) - inject(self, s, len) - - @param s: dirtree_cursor_t * - @param len: size_t - -ida_dirtree.dirtree_cursor_vec_t.insert (method) - insert(self, it, x) -> dirtree_cursor_t - - @param it: qvector< dirtree_cursor_t >::iterator - @param x: dirtree_cursor_t const & - -ida_dirtree.dirtree_cursor_vec_t.pop_back (method) - pop_back(self) - -ida_dirtree.dirtree_cursor_vec_t.push_back (method) - push_back(self, x) - - @param x: dirtree_cursor_t const & - - push_back(self) -> dirtree_cursor_t - -ida_dirtree.dirtree_cursor_vec_t.qclear (method) - qclear(self) - -ida_dirtree.dirtree_cursor_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_dirtree.dirtree_cursor_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: dirtree_cursor_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_dirtree.dirtree_cursor_vec_t.size (method) - size(self) -> size_t - -ida_dirtree.dirtree_cursor_vec_t.swap (method) - swap(self, r) - - @param r: qvector< dirtree_cursor_t > & - -ida_dirtree.dirtree_cursor_vec_t.truncate (method) - truncate(self) - -ida_dirtree.dirtree_iterator_t (class) - Proxy of C++ dirtree_iterator_t class. - -ida_dirtree.dirtree_iterator_t.__init__ (method) - __init__(self) -> dirtree_iterator_t - -ida_dirtree.dirtree_selection_t (class) - Proxy of C++ dirtree_selection_t class. - -ida_dirtree.dirtree_selection_t.__init__ (method) - __init__(self) -> dirtree_selection_t - -ida_dirtree.dirtree_t (class) - Proxy of C++ dirtree_t class. - -ida_dirtree.dirtree_t.__init__ (method) - __init__(self, ds) -> dirtree_t - - @param ds: dirspec_t * - -ida_dirtree.dirtree_t.change_rank (method) - change_rank(self, path, rank_delta) -> dterr_t - Change ordering rank of an item. - - @param path: (C++: const char *) path to the item - @param rank_delta: (C++: ssize_t) the amount of the change. positive numbers mean to move down - in the list; negative numbers mean to move up. - @return: dterr_t error code - @note: this function may disable natural ordering of the parent folder - @see: set_natural_order() - -ida_dirtree.dirtree_t.chdir (method) - chdir(self, path) -> dterr_t - Change current directory - - @param path: (C++: const char *) new current directory - @return: dterr_t error code - -ida_dirtree.dirtree_t.errstr (method) - errstr(err) -> char const * - Get textual representation of the error code. - - @param err: (C++: dterr_t) enum dterr_t - -ida_dirtree.dirtree_t.find_entry (method) - find_entry(self, de) -> dirtree_cursor_t - Find the cursor corresponding to an entry of a directory - - @param de: (C++: const direntry_t &) directory entry - @return: cursor corresponding to the directory entry - -ida_dirtree.dirtree_t.findfirst (method) - findfirst(self, ff, pattern) -> bool - Start iterating over files in a directory - - @param ff: (C++: dirtree_iterator_t *) directory iterator. it will be initialized by the function - @param pattern: (C++: const char *) pattern to search for - @return: success - -ida_dirtree.dirtree_t.findnext (method) - findnext(self, ff) -> bool - Continue iterating over files in a directory - - @param ff: (C++: dirtree_iterator_t *) directory iterator - @return: success - -ida_dirtree.dirtree_t.get_abspath (method) - get_abspath(self, cursor, name_flags=DTN_FULL_NAME) -> qstring - Construct an absolute path from the specified relative path. This function - verifies the directory part of the specified path. The last component of the - specified path is not verified. - - @param cursor: dirtree_cursor_t const & - @param name_flags: uint32 - - @return: path. empty path means wrong directory part of RELPATH - get_abspath(self, relpath) -> qstring - - @param relpath: char const * - -ida_dirtree.dirtree_t.get_dir_size (method) - get_dir_size(self, diridx) -> ssize_t - Get dir size - - @param diridx: (C++: diridx_t) directory index - @return: number of entries under this directory; if error, return -1 - -ida_dirtree.dirtree_t.get_entry_attrs (method) - get_entry_attrs(self, de) -> qstring - Get entry attributes - - @param de: (C++: const direntry_t &) directory entry - @return: name - -ida_dirtree.dirtree_t.get_entry_name (method) - get_entry_name(self, de, name_flags=DTN_FULL_NAME) -> qstring - Get entry name - - @param de: (C++: const direntry_t &) directory entry - @param name_flags: (C++: uint32) how exactly the name should be retrieved. combination of bits - for get_...name() methods bits - @return: name - -ida_dirtree.dirtree_t.get_id (method) - get_id(self) -> char const * - netnode name - -ida_dirtree.dirtree_t.get_parent_cursor (method) - get_parent_cursor(self, cursor) -> dirtree_cursor_t - Get parent cursor. - - @param cursor: (C++: const dirtree_cursor_t &) a valid ditree cursor - @return: cursor's parent - -ida_dirtree.dirtree_t.get_rank (method) - get_rank(self, diridx, de) -> ssize_t - Get ordering rank of an item. - - @param diridx: (C++: diridx_t) index of the parent directory - @param de: (C++: const direntry_t &) directory entry - @return: number in a range of [0..n) where n is the number of entries in the - parent directory. -1 if error - -ida_dirtree.dirtree_t.getcwd (method) - getcwd(self) -> qstring - Get current directory - - @return: the current working directory - -ida_dirtree.dirtree_t.is_dir_ordered (method) - is_dir_ordered(self, diridx) -> bool - Is dir ordered? - - @param diridx: (C++: diridx_t) - @return: true if the dirtree has natural ordering - -ida_dirtree.dirtree_t.is_orderable (method) - is_orderable(self) -> bool - Is dirtree orderable? - - @return: true if the dirtree is orderable - -ida_dirtree.dirtree_t.isdir (method) - isdir(self, de) -> bool - - @param de: direntry_t const & - - isdir(self, path) -> bool - - @param path: char const * - -ida_dirtree.dirtree_t.isfile (method) - isfile(self, de) -> bool - - @param de: direntry_t const & - - isfile(self, path) -> bool - - @param path: char const * - -ida_dirtree.dirtree_t.link (method) - link(self, path) -> dterr_t - Add an inode into the current directory - - @param path: char const * - - @return: dterr_t error code - link(self, inode) -> dterr_t - - @param inode: inode_t - -ida_dirtree.dirtree_t.load (method) - load(self) -> bool - Load the tree structure from the netnode. If dirspec_t::id is empty, the - operation will be considered a success. In addition, calling load() more than - once will not do anything, and will be considered a success. - - @return: success - @see: dirspec_t::id. - -ida_dirtree.dirtree_t.mkdir (method) - mkdir(self, path) -> dterr_t - Create a directory. - - @param path: (C++: const char *) directory to create - @return: dterr_t error code - -ida_dirtree.dirtree_t.notify_dirtree (method) - notify_dirtree(self, added, inode) - Notify dirtree about a change of an inode. - - @param added: (C++: bool) are we adding or deleting an inode? - @param inode: (C++: inode_t) inode in question - -ida_dirtree.dirtree_t.rename (method) - rename(self, _from, to) -> dterr_t - Rename a directory entry. - - @param from: (C++: const char *) source path - @param to: (C++: const char *) destination path - @return: dterr_t error code - @note: This function can also rename the item - -ida_dirtree.dirtree_t.resolve_cursor (method) - resolve_cursor(self, cursor) -> direntry_t - Resolve cursor - - @param cursor: (C++: const dirtree_cursor_t &) to analyze - @return: directory entry; if the cursor is bad, the resolved entry will be - invalid. - @note: see also get_abspath() - -ida_dirtree.dirtree_t.resolve_path (method) - resolve_path(self, path) -> direntry_t - Resolve path - - @param path: (C++: const char *) to analyze - @return: directory entry - -ida_dirtree.dirtree_t.rmdir (method) - rmdir(self, path) -> dterr_t - Remove a directory. - - @param path: (C++: const char *) directory to delete - @return: dterr_t error code - -ida_dirtree.dirtree_t.save (method) - save(self) -> bool - Save the tree structure to the netnode. - - @return: success - @see: dirspec_t::id. - -ida_dirtree.dirtree_t.set_id (method) - set_id(self, nm) - - @param nm: char const * - -ida_dirtree.dirtree_t.set_natural_order (method) - set_natural_order(self, diridx, enable) -> bool - Enable/disable natural inode order in a directory. - - @param diridx: (C++: diridx_t) directory index - @param enable: (C++: bool) action to do TRUE - enable ordering: re-order existing entries so - that all subdirs are at the to beginning of the list, file - entries are sorted and placed after the subdirs FALSE - disable - ordering, no changes to existing entries - @return: SUCCESS - -ida_dirtree.dirtree_t.traverse (method) - traverse(self, v) -> ssize_t - Traverse dirtree, and be notified at each entry If the the visitor returns - anything other than 0, iteration will stop, and that value returned. The tree is - traversed using a depth-first algorithm. It is forbidden to modify the dirtree_t - during traversal; doing so will result in undefined behavior. - - @param v: (C++: dirtree_visitor_t &) the callback - @return: 0, or whatever the visitor returned - -ida_dirtree.dirtree_t.unlink (method) - unlink(self, path) -> dterr_t - Remove an inode from the current directory - - @param path: char const * - - @return: dterr_t error code - unlink(self, inode) -> dterr_t - - @param inode: inode_t - -ida_dirtree.dirtree_t_errstr (function) - dirtree_t_errstr(err) -> char const * - - @param err: enum dterr_t - -ida_dirtree.dirtree_visitor_t (class) - Proxy of C++ dirtree_visitor_t class. - -ida_dirtree.dirtree_visitor_t.__disown__ (method) - -ida_dirtree.dirtree_visitor_t.__init__ (method) - __init__(self) -> dirtree_visitor_t - - @param self: PyObject * - -ida_dirtree.dirtree_visitor_t.visit (method) - visit(self, c, de) -> ssize_t - Will be called for each entry in the dirtree_t If something other than 0 is - returned, iteration will stop. - - @param c: (C++: const dirtree_cursor_t &) the current cursor - @param de: (C++: const direntry_t &) the current entry - @return: 0 to keep iterating, or anything else to stop - -ida_dirtree.get_std_dirtree (function) - get_std_dirtree(id) -> dirtree_t - - @param id: enum dirtree_id_t - -ida_entry (module) - Functions that deal with entry points. - - Exported functions are considered as entry points as well. - - IDA maintains list of entry points to the program. Each entry point: - * has an address - * has a name - * may have an ordinal number - -ida_entry.AEF_IDBENC (variable) - 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 (variable) - automatically prepend the name with '_' if it begins with a dummy suffix. See - also AEF_IDBENC - -ida_entry.AEF_UTF8 (variable) - the name is given in UTF-8 (default) - -ida_entry.add_entry (function) - add_entry(ord, ea, name, makecode, flags=0) -> bool - Add an entry point to the list of entry points. - - @param ord: (C++: uval_t) ordinal number if ordinal number is equal to 'ea' then ordinal is - not used - @param ea: (C++: ea_t) linear address - @param name: (C++: const char *) name of entry point. If the specified location already has a name, - the old name will be appended to the regular comment. If name == - nullptr, then the old name will be retained. - @param makecode: (C++: bool) should the kernel convert bytes at the entry point to - instruction(s) - @param flags: (C++: int) See AEF_* - @return: success (currently always true) - -ida_entry.get_entry (function) - get_entry(ord) -> ea_t - Get entry point address by its ordinal - - @param ord: (C++: uval_t) ordinal number of entry point - @return: address or BADADDR - -ida_entry.get_entry_forwarder (function) - get_entry_forwarder(ord) -> str - Get forwarder name for the entry point by its ordinal. - - @param ord: (C++: uval_t) ordinal number of entry point - @return: size of entry forwarder name or -1 - -ida_entry.get_entry_name (function) - get_entry_name(ord) -> str - Get name of the entry point by its ordinal. - - @param ord: (C++: uval_t) ordinal number of entry point - @return: size of entry name or -1 - -ida_entry.get_entry_ordinal (function) - get_entry_ordinal(idx) -> uval_t - Get ordinal number of an entry point. - - @param idx: (C++: size_t) internal number of entry point. Should be in the range - 0..get_entry_qty()-1 - @return: ordinal number or 0. - -ida_entry.get_entry_qty (function) - get_entry_qty() -> size_t - Get number of entry points. - -ida_entry.rename_entry (function) - rename_entry(ord, name, flags=0) -> bool - Rename entry point. - - @param ord: (C++: uval_t) ordinal number of the entry point - @param name: (C++: const char *) name of entry point. If the specified location already has a name, - the old name will be appended to a repeatable comment. - @param flags: (C++: int) See AEF_* - @return: success - -ida_entry.set_entry_forwarder (function) - set_entry_forwarder(ord, name, flags=0) -> bool - Set forwarder name for ordinal. - - @param ord: (C++: uval_t) ordinal number of the entry point - @param name: (C++: const char *) forwarder name for entry point. - @param flags: (C++: int) See AEF_* - @return: success - -ida_enum (module) - Assembly level enum management. - - Enums and bitfields are represented as enum_t. - -ida_enum.DEFMASK (variable) - default bitmask - -ida_enum.ENFL_REGEX (variable) - apply regular expressions to beautify the name - -ida_enum.ENUM_MEMBER_ERROR_ENUM (variable) - bad enum id - -ida_enum.ENUM_MEMBER_ERROR_ILLV (variable) - bad bmask and value combination (~bmask & value != 0) - -ida_enum.ENUM_MEMBER_ERROR_MASK (variable) - bad bmask - -ida_enum.ENUM_MEMBER_ERROR_NAME (variable) - already have member with this name (bad name) - -ida_enum.ENUM_MEMBER_ERROR_VALUE (variable) - already have 256 members with this value - -ida_enum.MAX_ENUM_SERIAL (variable) - Max number of identical constants allowed for one enum type. - -ida_enum.add_enum (function) - add_enum(idx, name, flag) -> enum_t - Add new enum type. - * if idx==BADADDR then add as the last idx - * if name==nullptr then generate a unique name "enum_%d" - - @param idx: (C++: size_t) - @param name: (C++: const char *) char const * - @param flag: (C++: flags64_t) - -ida_enum.add_enum_member (function) - 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 *) char const * - @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 (function) - del_enum(id) - Delete an enum type. - - @param id: (C++: enum_t) - -ida_enum.del_enum_member (function) - 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) - -ida_enum.enum_member_visitor_t (class) - Proxy of C++ enum_member_visitor_t class. - -ida_enum.enum_member_visitor_t.__disown__ (method) - -ida_enum.enum_member_visitor_t.__init__ (method) - __init__(self) -> enum_member_visitor_t - - @param self: PyObject * - -ida_enum.enum_member_visitor_t.visit_enum_member (method) - visit_enum_member(self, cid, value) -> int - Implements action to take when enum member is visited. - - @param cid: (C++: const_t) - @param value: (C++: uval_t) - @return: nonzero to stop the iteration - -ida_enum.for_all_enum_members (function) - 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 (function) - get_bmask_cmt(id, bmask, repeatable) -> str - - @param id: enum_t - @param bmask: bmask_t - @param repeatable: bool - -ida_enum.get_bmask_name (function) - get_bmask_name(id, bmask) -> str - - @param id: enum_t - @param bmask: bmask_t - -ida_enum.get_enum (function) - get_enum(name) -> enum_t - Get enum by name. - - @param name: (C++: const char *) char const * - -ida_enum.get_enum_cmt (function) - get_enum_cmt(id, repeatable) -> str - Get enum comment. - - @param id: (C++: enum_t) - @param repeatable: (C++: bool) - -ida_enum.get_enum_flag (function) - get_enum_flag(id) -> flags64_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 (function) - get_enum_idx(id) -> uval_t - Get the index in the list of enums. - - @param id: (C++: enum_t) - -ida_enum.get_enum_member (function) - get_enum_member(id, value, serial, mask) -> const_t - Find an enum member by enum, value and bitmask - @note: if 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 (function) - 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 (function) - get_enum_member_by_name(name) -> const_t - Get a reference to an enum member by its name. - - @param name: (C++: const char *) char const * - -ida_enum.get_enum_member_cmt (function) - get_enum_member_cmt(id, repeatable) -> str - Get enum member's comment. - - @param id: (C++: const_t) - @param repeatable: (C++: bool) - -ida_enum.get_enum_member_enum (function) - 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 (function) - get_enum_member_name(id) -> str - Get name of an enum member by const_t. - - @param id: (C++: const_t) - -ida_enum.get_enum_member_serial (function) - get_enum_member_serial(cid) -> uchar - Get serial number of an enum member. - - @param cid: (C++: const_t) - -ida_enum.get_enum_member_value (function) - get_enum_member_value(id) -> uval_t - Get value of an enum member. - - @param id: (C++: const_t) - -ida_enum.get_enum_name (function) - get_enum_name(id) -> str - - @param id: enum_t - -ida_enum.get_enum_name2 (function) - get_enum_name2(id, flags=0) -> str - Get name of enum - - @param id: (C++: enum_t) enum id - @param flags: (C++: int) Enum name flags - -ida_enum.get_enum_qty (function) - get_enum_qty() -> size_t - Get number of declared enum_t types. - -ida_enum.get_enum_size (function) - 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 (function) - get_enum_type_ordinal(id) -> int32 - Get corresponding type ordinal number. - - @param id: (C++: enum_t) - -ida_enum.get_enum_width (function) - 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 (function) - get_first_bmask(enum_id) -> bmask_t - Get first bitmask in the enum (bitfield) - - @param enum_id: (C++: enum_t) id of enum (bitfield) - @return: the smallest bitmask for enum, or DEFMASK - -ida_enum.get_first_enum_member (function) - get_first_enum_member(id, bmask=(bmask_t(-1))) -> uval_t - - @param id: enum_t - @param bmask: bmask_t - -ida_enum.get_first_serial_enum_member (function) - get_first_serial_enum_member(id, value, bmask) -> const_t - - @param id: enum_t - @param value: uval_t - @param bmask: bmask_t - -ida_enum.get_last_bmask (function) - get_last_bmask(enum_id) -> bmask_t - Get last bitmask in the enum (bitfield) - - @param enum_id: (C++: enum_t) id of enum - @return: the biggest bitmask for enum, or DEFMASK - -ida_enum.get_last_enum_member (function) - get_last_enum_member(id, bmask=(bmask_t(-1))) -> uval_t - - @param id: enum_t - @param bmask: bmask_t - -ida_enum.get_last_serial_enum_member (function) - get_last_serial_enum_member(id, value, bmask) -> const_t - - @param id: enum_t - @param value: uval_t - @param bmask: bmask_t - -ida_enum.get_next_bmask (function) - get_next_bmask(enum_id, bmask) -> bmask_t - Get next bitmask in the enum (bitfield) - - @param enum_id: (C++: enum_t) id of enum - @param bmask: (C++: bmask_t) the current bitmask - @return: value of a bitmask with value higher than the specified value, or - DEFMASK - -ida_enum.get_next_enum_member (function) - get_next_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t - - @param id: enum_t - @param value: uval_t - @param bmask: bmask_t - -ida_enum.get_next_serial_enum_member (function) - get_next_serial_enum_member(in_out_serial, first_cid) -> const_t - - @param in_out_serial: uchar * - @param first_cid: const_t - -ida_enum.get_prev_bmask (function) - get_prev_bmask(enum_id, bmask) -> bmask_t - Get prev bitmask in the enum (bitfield) - - @param enum_id: (C++: enum_t) id of enum - @param bmask: (C++: bmask_t) the current bitmask - @return: value of a bitmask with value lower than the specified value, or - DEFMASK - -ida_enum.get_prev_enum_member (function) - get_prev_enum_member(id, value, bmask=(bmask_t(-1))) -> uval_t - - @param id: enum_t - @param value: uval_t - @param bmask: bmask_t - -ida_enum.get_prev_serial_enum_member (function) - get_prev_serial_enum_member(in_out_serial, first_cid) -> const_t - - @param in_out_serial: uchar * - @param first_cid: const_t - -ida_enum.getn_enum (function) - getn_enum(idx) -> enum_t - Get enum by its index in the list of enums (0..get_enum_qty()-1). - - @param idx: (C++: size_t) - -ida_enum.is_bf (function) - 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 (function) - is_enum_fromtil(id) -> bool - Does enum come from type library? - - @param id: (C++: enum_t) - -ida_enum.is_enum_hidden (function) - is_enum_hidden(id) -> bool - Is enum collapsed? - - @param id: (C++: enum_t) - -ida_enum.is_ghost_enum (function) - is_ghost_enum(id) -> bool - Is a ghost copy of a local type? - - @param id: (C++: enum_t) - -ida_enum.is_one_bit_mask (function) - is_one_bit_mask(mask) -> bool - Is bitmask one bit? - - @param mask: (C++: bmask_t) - -ida_enum.set_bmask_cmt (function) - set_bmask_cmt(id, bmask, cmt, repeatable) -> bool - - @param id: enum_t - @param bmask: bmask_t - @param cmt: char const * - @param repeatable: bool - -ida_enum.set_bmask_name (function) - set_bmask_name(id, bmask, name) -> bool - - @param id: enum_t - @param bmask: bmask_t - @param name: char const * - -ida_enum.set_enum_bf (function) - 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 (function) - set_enum_cmt(id, cmt, repeatable) -> bool - Set comment for enum type. - - @param id: (C++: enum_t) - @param cmt: (C++: const char *) char const * - @param repeatable: (C++: bool) - -ida_enum.set_enum_flag (function) - set_enum_flag(id, flag) -> bool - Set data representation flags. - - @param id: (C++: enum_t) - @param flag: (C++: flags64_t) - -ida_enum.set_enum_fromtil (function) - 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 (function) - 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 (function) - set_enum_hidden(id, hidden) -> bool - Collapse enum. - - @param id: (C++: enum_t) - @param hidden: (C++: bool) - -ida_enum.set_enum_idx (function) - 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 (function) - set_enum_member_cmt(id, cmt, repeatable) -> bool - Set comment for enum member. - - @param id: (C++: const_t) - @param cmt: (C++: const char *) char const * - @param repeatable: (C++: bool) - -ida_enum.set_enum_member_name (function) - set_enum_member_name(id, name) -> bool - Set name of enum member. - - @param id: (C++: const_t) - @param name: (C++: const char *) char const * - -ida_enum.set_enum_name (function) - set_enum_name(id, name) -> bool - Set name of enum type. - - @param id: (C++: enum_t) - @param name: (C++: const char *) char const * - -ida_enum.set_enum_type_ordinal (function) - 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 (function) - set_enum_width(id, width) -> bool - See comment for get_enum_width() - - @param id: (C++: enum_t) - @param width: (C++: int) - -ida_expr (module) - Functions that deal with C-like expressions and built-in IDC language. - - Functions marked THREAD_SAFE may be called from any thread. No simultaneous - calls should be made for the same variable. We protect only global structures, - individual variables must be protected manually. - -ida_expr.CPL_DEL_MACROS (variable) - delete macros at the end of compilation - -ida_expr.CPL_ONLY_SAFE (variable) - allow calls of only thread-safe functions - -ida_expr.CPL_USE_LABELS (variable) - allow program labels in the script - -ida_expr.EXTFUN_BASE (variable) - requires open database. - -ida_expr.EXTFUN_NORET (variable) - does not return. the interpreter may clean up its state before calling it. - -ida_expr.EXTFUN_SAFE (variable) - thread safe function. may be called from any thread. - -ida_expr.IDC_LANG_EXT (variable) - IDC script extension. - -ida_expr.VARSLICE_SINGLE (variable) - return single index (i2 is ignored) - -ida_expr.VREF_COPY (variable) - copy the result to the input var (v) - -ida_expr.VREF_LOOP (variable) - dereference until we get a non VT_REF - -ida_expr.VREF_ONCE (variable) - dereference only once, do not loop - -ida_expr.VT_FLOAT (variable) - Floating point (see idc_value_t::e) - -ida_expr.VT_FUNC (variable) - Function (see idc_value_t::funcidx) - -ida_expr.VT_INT64 (variable) - i64 - -ida_expr.VT_LONG (variable) - Integer (see idc_value_t::num) - -ida_expr.VT_OBJ (variable) - Object (see idc_value_t::obj) - -ida_expr.VT_PVOID (variable) - void * - -ida_expr.VT_REF (variable) - Reference. - -ida_expr.VT_STR (variable) - String (see qstr() and similar functions) - -ida_expr.VT_WILD (variable) - 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._IdcFunction (class) - Internal class that calls pyw_call_idc_func() with a context - -ida_expr._IdcFunction.__call__ (method) - -ida_expr._IdcFunction.__init__ (method) - -ida_expr.add_idc_class (function) - add_idc_class(name, super=None) -> idc_class_t * - Create a new IDC class. - - @param name: (C++: const char *) name of the new class - @param super: (C++: const idc_class_t *) the base class for the new class. if the new class is not based on - any other class, pass nullptr - @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 (function) - Extends the IDC language by exposing a new IDC function that is backed up by a Python function - - 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\n", 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, - nullptr, 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"); - - @note: If the function already exists, it will be replaced by the new function - @return: success - -ida_expr.add_idc_gvar (function) - add_idc_gvar(name) -> idc_value_t - Add global IDC variable. - - @param name: (C++: const char *) name of the global variable - @return: pointer to the created variable or existing variable. NB: the returned - pointer is valid until a new global var is added. - -ida_expr.call_idc_func__ (function) - -ida_expr.compile_idc_file (function) - compile_idc_file(nonnul_line) -> str - - @param nonnul_line: char const * - -ida_expr.compile_idc_snippet (function) - compile_idc_snippet(func, text, resolver=None, only_safe_funcs=False) -> str - Compile text with IDC statements. - - @param func: (C++: const char *) name of the function to create out of the snippet - @param text: (C++: const char *) text to compile - @param resolver: (C++: idc_resolver_t *) callback object to get values of undefined variables This - object will be called if IDC function contains references to - undefined variables. May be nullptr. - @param only_safe_funcs: (C++: bool) if true, any calls to functions without EXTFUN_SAFE flag - will lead to a compilation error. - @retval true: ok - @retval false: error, see errbuf - -ida_expr.compile_idc_text (function) - compile_idc_text(nonnul_line) -> str - - @param nonnul_line: char const * - -ida_expr.copy_idcv (function) - 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 &) idc_value_t const & - -ida_expr.create_idcv_ref (function) - create_idcv_ref(ref, v) -> bool - Create a variable reference. Currently only references to global variables can - be created. - - @param ref: (C++: idc_value_t *) ptr to the result - @param v: (C++: const idc_value_t *) variable to reference - @return: success - -ida_expr.deep_copy_idcv (function) - 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 &) idc_value_t const & - -ida_expr.del_idc_func (function) - Unregisters the specified IDC function - - Delete an IDC function - -ida_expr.del_idcv_attr (function) - del_idcv_attr(obj, attr) -> error_t - Delete an object attribute. - - @param obj: (C++: idc_value_t *) variable that holds an object reference - @param attr: (C++: const char *) attribute name - @return: error code, eOk on success - -ida_expr.deref_idcv (function) - deref_idcv(v, vref_flags) -> idc_value_t - Dereference a VT_REF variable. - - @param v: (C++: idc_value_t *) variable to dereference - @param vref_flags: (C++: int) Dereference IDC variable flags - @return: pointer to the dereference result or nullptr. If returns nullptr, - qerrno is set to eExecBadRef "Illegal variable reference" - -ida_expr.eExecThrow (variable) - See return value of idc_func_t. - -ida_expr.eval_expr (function) - eval_expr(rv, where, line) -> str - Compile and calculate an expression. - - @param rv: (C++: idc_value_t *) pointer to the result - @param where: (C++: ea_t) 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. - @param line: (C++: const char *) the expression to evaluate - @retval true: ok - @retval false: error, see errbuf - -ida_expr.eval_idc_expr (function) - 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) - @param line: char const * - -ida_expr.exec_idc_script (function) - exec_idc_script(result, path, func, args, argsnum) -> str - Compile and execute IDC function(s) from file. - - @param result: (C++: idc_value_t *) ptr to idc_value_t to hold result of the function. If execution - fails, this variable will contain the exception information. You - may pass nullptr if you are not interested in the returned value. - @param path: (C++: const char *) text file containing text of IDC functions - @param func: (C++: const char *) function name to execute - @param args: (C++: const idc_value_t) array of parameters - @param argsnum: (C++: size_t) number of parameters to pass to 'fname' This number should be - equal to number of parameters the function expects. - @retval true: ok - @retval false: error, see errbuf - -ida_expr.exec_system_script (function) - exec_system_script(file, complain_if_no_file=True) -> bool - Compile and execute "main" function from system file. - - @param file: (C++: const char *) file name with IDC function(s). The file will be searched using - get_idc_filename(). - @param complain_if_no_file: (C++: bool) * 1: display warning if the file is not found - * 0: don't complain if file doesn't exist - @retval 1: ok, file is compiled and executed - @retval 0: failure, compilation or execution error, warning is displayed - -ida_expr.find_idc_class (function) - find_idc_class(name) -> idc_class_t * - Find an existing IDC class by its name. - - @param name: (C++: const char *) name of the class - @return: pointer to the class or nullptr. The returned pointer is valid until a - new call to add_idc_class() - -ida_expr.find_idc_func (function) - find_idc_func(prefix, n=0) -> str - - @param prefix: char const * - @param n: int - -ida_expr.find_idc_gvar (function) - find_idc_gvar(name) -> idc_value_t - Find an existing global IDC variable by its name. - - @param name: (C++: const char *) name of the global variable - @return: pointer to the variable or nullptr. 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 (function) - first_idcv_attr(obj) -> char const * - - @param obj: idc_value_t const * - -ida_expr.free_idcv (function) - 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 (function) - get_idc_filename(file) -> str - Get full name of IDC file name. Search for file in list of include directories, - IDCPATH directory and system directories. - - @param file: (C++: const char *) file name without full path - @return: nullptr is file not found. otherwise returns pointer to buf - -ida_expr.get_idcv_attr (function) - get_idcv_attr(res, obj, attr, may_use_getattr=False) -> error_t - Get an object attribute. - - @param res: (C++: idc_value_t *) buffer for the attribute value - @param obj: (C++: const idc_value_t *) variable that holds an object reference. if obj is nullptr it - searches global variables, then user functions - @param attr: (C++: const char *) attribute name - @param may_use_getattr: (C++: bool) may call getattr functions to calculate the attribute if - it does not exist - @return: error code, eOk on success - -ida_expr.get_idcv_class_name (function) - get_idcv_class_name(obj) -> str - Retrieves the IDC object class name. - - @param obj: (C++: const idc_value_t *) class instance variable - @return: error code, eOk on success - -ida_expr.get_idcv_slice (function) - get_idcv_slice(res, v, i1, i2, flags=0) -> error_t - Get slice. - - @param res: (C++: idc_value_t *) output variable that will contain the slice - @param v: (C++: const idc_value_t *) input variable (string or object) - @param i1: (C++: uval_t) slice start index - @param i2: (C++: uval_t) slice end index (excluded) - @param flags: (C++: int) IDC variable slice flags or 0 - @return: eOk if success - -ida_expr.highlighter_cbs_t (class) - Proxy of C++ highlighter_cbs_t class. - -ida_expr.highlighter_cbs_t.__disown__ (method) - -ida_expr.highlighter_cbs_t.__init__ (method) - __init__(self) -> highlighter_cbs_t - - @param self: PyObject * - -ida_expr.highlighter_cbs_t.cur_block_state (method) - cur_block_state(self) -> int32 - -ida_expr.highlighter_cbs_t.prev_block_state (method) - prev_block_state(self) -> int32 - -ida_expr.highlighter_cbs_t.set_block_state (method) - set_block_state(self, arg0) - - @param arg0: int32 - -ida_expr.highlighter_cbs_t.set_style (method) - set_style(self, arg0, arg1, arg2) - - @param arg0: int32 - @param arg1: int32 - @param arg2: enum syntax_highlight_style - -ida_expr.idc_global_t (class) - Proxy of C++ idc_global_t class. - -ida_expr.idc_global_t.__init__ (method) - __init__(self) -> idc_global_t - __init__(self, n) -> idc_global_t - - @param n: char const * - -ida_expr.idc_value_t (class) - Proxy of C++ idc_value_t class. - -ida_expr.idc_value_t.__init__ (method) - __init__(self, n=0) -> idc_value_t - - @param n: sval_t - - __init__(self, r) -> idc_value_t - - @param r: idc_value_t const & - - __init__(self, _str) -> idc_value_t - - @param _str: char const * - -ida_expr.idc_value_t._create_empty_string (method) - _create_empty_string(self) - -ida_expr.idc_value_t.c_str (method) - c_str(self) -> char const * - VT_STR - -ida_expr.idc_value_t.clear (method) - clear(self) - See free_idcv() - -ida_expr.idc_value_t.create_empty_string (method) - create_empty_string(self) - -ida_expr.idc_value_t.e (variable) - VT_FLOAT - -ida_expr.idc_value_t.funcidx (variable) - VT_FUNC - -ida_expr.idc_value_t.i64 (variable) - VT_INT64 - -ida_expr.idc_value_t.is_convertible (method) - is_convertible(self) -> bool - Convertible types are VT_LONG, VT_FLOAT, VT_INT64, and VT_STR. - -ida_expr.idc_value_t.is_integral (method) - is_integral(self) -> bool - Does value represent a whole number? - -ida_expr.idc_value_t.is_zero (method) - is_zero(self) -> bool - Does value represent the integer 0? - -ida_expr.idc_value_t.num (variable) - VT_LONG - -ida_expr.idc_value_t.pvoid (variable) - VT_PVOID - -ida_expr.idc_value_t.qstr (method) - qstr(self) -> qstring - VT_STR - qstr(self) -> qstring const & - -ida_expr.idc_value_t.reserve (variable) - internal housekeeping: 64-bit qstring is bigger than 12 bytes - -ida_expr.idc_value_t.set_float (method) - set_float(self, f) - - @param f: fpvalue_t const & - -ida_expr.idc_value_t.set_int64 (method) - set_int64(self, v) - - @param v: int64 - -ida_expr.idc_value_t.set_long (method) - set_long(self, v) - - @param v: sval_t - -ida_expr.idc_value_t.set_pvoid (method) - set_pvoid(self, p) - - @param p: void * - -ida_expr.idc_value_t.set_string (method) - set_string(self, _str, len) - - @param _str: char const * - @param len: size_t - - set_string(self, _str) - - @param _str: char const * - -ida_expr.idc_value_t.swap (method) - swap(self, v) - Set this = r and v = this. - - @param v: (C++: idc_value_t &) - -ida_expr.idc_value_t.u_str (method) - u_str(self) -> uchar const * - VT_STR - -ida_expr.idc_value_t.vtype (variable) - IDC value types - -ida_expr.idc_values_t (class) - Proxy of C++ qvector< idc_value_t > class. - -ida_expr.idc_values_t.__getitem__ (method) - __getitem__(self, i) -> idc_value_t - - @param i: size_t - -ida_expr.idc_values_t.__init__ (method) - __init__(self) -> idc_values_t - __init__(self, x) -> idc_values_t - - @param x: qvector< idc_value_t > const & - -ida_expr.idc_values_t.__len__ (method) - __len__(self) -> size_t - -ida_expr.idc_values_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: idc_value_t const & - -ida_expr.idc_values_t.at (method) - at(self, _idx) -> idc_value_t - - @param _idx: size_t - -ida_expr.idc_values_t.begin (method) - begin(self) -> idc_value_t - -ida_expr.idc_values_t.capacity (method) - capacity(self) -> size_t - -ida_expr.idc_values_t.clear (method) - clear(self) - -ida_expr.idc_values_t.empty (method) - empty(self) -> bool - -ida_expr.idc_values_t.end (method) - end(self) -> idc_value_t - -ida_expr.idc_values_t.erase (method) - erase(self, it) -> idc_value_t - - @param it: qvector< idc_value_t >::iterator - - erase(self, first, last) -> idc_value_t - - @param first: qvector< idc_value_t >::iterator - @param last: qvector< idc_value_t >::iterator - -ida_expr.idc_values_t.extract (method) - extract(self) -> idc_value_t - -ida_expr.idc_values_t.grow (method) - grow(self, x=idc_value_t()) - - @param x: idc_value_t const & - -ida_expr.idc_values_t.inject (method) - inject(self, s, len) - - @param s: idc_value_t * - @param len: size_t - -ida_expr.idc_values_t.insert (method) - insert(self, it, x) -> idc_value_t - - @param it: qvector< idc_value_t >::iterator - @param x: idc_value_t const & - -ida_expr.idc_values_t.pop_back (method) - pop_back(self) - -ida_expr.idc_values_t.push_back (method) - push_back(self, x) - - @param x: idc_value_t const & - - push_back(self) -> idc_value_t - -ida_expr.idc_values_t.qclear (method) - qclear(self) - -ida_expr.idc_values_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_expr.idc_values_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: idc_value_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_expr.idc_values_t.size (method) - size(self) -> size_t - -ida_expr.idc_values_t.swap (method) - swap(self, r) - - @param r: qvector< idc_value_t > & - -ida_expr.idc_values_t.truncate (method) - truncate(self) - -ida_expr.idcv_float (function) - idcv_float(v) -> error_t - Convert IDC variable to a floating point. - - @param v: (C++: idc_value_t *) - -ida_expr.idcv_int64 (function) - 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 (function) - 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 (function) - 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 (function) - idcv_object(v, icls=None) -> error_t - Create an IDC object. The original value of 'v' is discarded (freed). - - @param v: (C++: idc_value_t *) variable to hold the object. any previous value will be cleaned - @param icls: (C++: const idc_class_t *) ptr to the desired class. nullptr means "object" class this ptr - must be returned by add_idc_class() or find_idc_class() - @return: always eOk - -ida_expr.idcv_string (function) - idcv_string(v) -> error_t - Convert IDC variable to a text string. - - @param v: (C++: idc_value_t *) - -ida_expr.last_idcv_attr (function) - last_idcv_attr(obj) -> char const * - - @param obj: idc_value_t const * - -ida_expr.move_idcv (function) - 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 (function) - next_idcv_attr(obj, attr) -> char const * - - @param obj: idc_value_t const * - @param attr: char const * - -ida_expr.prev_idcv_attr (function) - prev_idcv_attr(obj, attr) -> char const * - - @param obj: idc_value_t const * - @param attr: char const * - -ida_expr.print_idcv (function) - print_idcv(v, name=None, indent=0) -> str - Get text representation of idc_value_t. - - @param v: (C++: const idc_value_t &) idc_value_t const & - @param name: (C++: const char *) char const * - @param indent: (C++: int) - -ida_expr.py_add_idc_func (function) - py_add_idc_func(name, fp_ptr, args, defvals, flags) -> bool - - @param name: char const * - @param fp_ptr: size_t - @param args: char const * - @param defvals: idc_values_t const & - @param flags: int - -ida_expr.py_get_call_idc_func (function) - py_get_call_idc_func() -> size_t - -ida_expr.pyw_convert_defvals (function) - pyw_convert_defvals(out, py_seq) -> bool - - @param out: idc_values_t * - @param py_seq: PyObject * - -ida_expr.pyw_register_idc_func (function) - pyw_register_idc_func(name, args, py_fp) -> size_t - - @param name: char const * - @param args: char const * - @param py_fp: PyObject * - -ida_expr.pyw_unregister_idc_func (function) - pyw_unregister_idc_func(ctxptr) -> bool - - @param ctxptr: size_t - -ida_expr.set_header_path (function) - 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: (C++: const char *) list of directories to add (separated by ';') may be nullptr, in - this case nothing is added - @param add: (C++: bool) true: append. false: remove old paths. - @retval true: success - @retval false: no memory - -ida_expr.set_idcv_attr (function) - set_idcv_attr(obj, attr, value, may_use_setattr=False) -> error_t - Set an object attribute. - - @param obj: (C++: idc_value_t *) variable that holds an object reference. if obj is nullptr then it - tries to modify a global variable with the attribute name - @param attr: (C++: const char *) attribute name - @param value: (C++: const idc_value_t &) new attribute value - @param may_use_setattr: (C++: bool) may call setattr functions for the class - @return: error code, eOk on success - -ida_expr.set_idcv_slice (function) - set_idcv_slice(v, i1, i2, _in, flags=0) -> error_t - Set slice. - - @param v: (C++: idc_value_t *) variable to modify (string or object) - @param i1: (C++: uval_t) slice start index - @param i2: (C++: uval_t) slice end index (excluded) - @param in: (C++: const idc_value_t &) new value for the slice - @param flags: (C++: int) IDC variable slice flags or 0 - @return: eOk on success - -ida_expr.swap_idcvs (function) - swap_idcvs(v1, v2) - Swap 2 variables. - - @param v1: (C++: idc_value_t *) - @param v2: (C++: idc_value_t *) - -ida_expr.throw_idc_exception (function) - 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: (C++: idc_value_t *) object to hold the exception object - @param desc: (C++: const char *) exception description - @return: eExecThrow - -ida_fixup (module) - Functions that deal with fixup information. - - A loader should setup fixup information using set_fixup(). - -ida_fixup.FIXUPF_CREATED (variable) - fixup was not present in the input file - -ida_fixup.FIXUPF_EXTDEF (variable) - 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 (variable) - 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 (variable) - 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 (variable) - fixup is ignored by IDA - * disallows the kernel to convert operands - * this fixup is not used during output - -ida_fixup.FIXUP_CUSTOM (variable) - start of the custom types range - -ida_fixup.FIXUP_HI16 (variable) - high 16 bits of 32bit offset - -ida_fixup.FIXUP_HI8 (variable) - high 8 bits of 16bit offset - -ida_fixup.FIXUP_LOW16 (variable) - low 16 bits of 32bit offset - -ida_fixup.FIXUP_LOW8 (variable) - low 8 bits of 16bit offset - -ida_fixup.FIXUP_OFF16 (variable) - 16-bit offset - -ida_fixup.FIXUP_OFF16S (variable) - 16-bit signed offset - -ida_fixup.FIXUP_OFF32 (variable) - 32-bit offset - -ida_fixup.FIXUP_OFF32S (variable) - 32-bit signed offset - -ida_fixup.FIXUP_OFF64 (variable) - 64-bit offset - -ida_fixup.FIXUP_OFF8 (variable) - 8-bit offset - -ida_fixup.FIXUP_OFF8S (variable) - 8-bit signed offset - -ida_fixup.FIXUP_PTR16 (variable) - 32-bit long pointer (16-bit base:16-bit offset) - -ida_fixup.FIXUP_PTR32 (variable) - 48-bit pointer (16-bit base:32-bit offset) - -ida_fixup.FIXUP_SEG16 (variable) - 16-bit base-logical segment base (selector) - -ida_fixup.V695_FIXUP_VHIGH (variable) - obsolete - -ida_fixup.V695_FIXUP_VLOW (variable) - obsolete - -ida_fixup.calc_fixup_size (function) - calc_fixup_size(type) -> int - Calculate size of fixup in bytes (the number of bytes the fixup patches) - @retval -1: means error - - @param type: (C++: fixup_type_t) - -ida_fixup.contains_fixups (function) - 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 (function) - del_fixup(source) - Delete fixup information. - - @param source: (C++: ea_t) - -ida_fixup.exists_fixup (function) - exists_fixup(source) -> bool - Check that a fixup exists at the given address. - - @param source: (C++: ea_t) - -ida_fixup.find_custom_fixup (function) - find_custom_fixup(name) -> fixup_type_t - Get id of a custom fixup handler. - - @param name: (C++: const char *) name of the custom fixup handler - @return: id with FIXUP_CUSTOM bit set or 0 - -ida_fixup.fixup_data_t (class) - Proxy of C++ fixup_data_t class. - -ida_fixup.fixup_data_t.__init__ (method) - __init__(self) -> fixup_data_t - __init__(self, type_, flags_=0) -> fixup_data_t - - @param type_: fixup_type_t - @param flags_: uint32 - -ida_fixup.fixup_data_t.calc_size (method) - calc_size(self) -> int - calc_fixup_size() - -ida_fixup.fixup_data_t.clr_extdef (method) - clr_extdef(self) - -ida_fixup.fixup_data_t.clr_unused (method) - clr_unused(self) - -ida_fixup.fixup_data_t.displacement (variable) - displacement (offset from the target) - -ida_fixup.fixup_data_t.get (method) - get(self, source) -> bool - get_fixup() - - @param source: (C++: ea_t) - -ida_fixup.fixup_data_t.get_base (method) - get_base(self) -> ea_t - Get base of fixup. - @note: The target is calculated as `get_base() + off`. - @see: FIXUPF_REL - -ida_fixup.fixup_data_t.get_desc (method) - get_desc(self, source) -> char const * - get_fixup_desc() - - @param source: (C++: ea_t) - -ida_fixup.fixup_data_t.get_flags (method) - get_flags(self) -> uint32 - Fixup flags Fixup flags. - -ida_fixup.fixup_data_t.get_handler (method) - get_handler(self) -> fixup_handler_t const * - get_fixup_handler() - -ida_fixup.fixup_data_t.get_type (method) - get_type(self) -> fixup_type_t - Fixup type Types of fixups. - -ida_fixup.fixup_data_t.get_value (method) - get_value(self, ea) -> uval_t - get_fixup_value() - - @param ea: (C++: ea_t) - -ida_fixup.fixup_data_t.has_base (method) - has_base(self) -> bool - Is fixup relative? - -ida_fixup.fixup_data_t.is_custom (method) - is_custom(self) -> bool - is_fixup_custom() - -ida_fixup.fixup_data_t.is_extdef (method) - is_extdef(self) -> bool - -ida_fixup.fixup_data_t.is_unused (method) - is_unused(self) -> bool - -ida_fixup.fixup_data_t.off (variable) - target offset - @note: The target is calculated as `get_base() + off`. - -ida_fixup.fixup_data_t.patch_value (method) - patch_value(self, ea) -> bool - patch_fixup_value() - - @param ea: (C++: ea_t) - -ida_fixup.fixup_data_t.sel (variable) - selector of the target segment. BADSEL means an absolute (zero based) target. - @see: FIXUPF_REL - -ida_fixup.fixup_data_t.set (method) - set(self, source) - set_fixup() - - @param source: (C++: ea_t) - -ida_fixup.fixup_data_t.set_base (method) - set_base(self, new_base) - Set base of fixup. The target should be set before a call of this function. - - @param new_base: (C++: ea_t) - -ida_fixup.fixup_data_t.set_extdef (method) - set_extdef(self) - -ida_fixup.fixup_data_t.set_sel (method) - set_sel(self, seg) - - @param seg: segment_t const * - -ida_fixup.fixup_data_t.set_target_sel (method) - set_target_sel(self) - Set selector of fixup to the target. The target should be set before a call of - this function. - -ida_fixup.fixup_data_t.set_type (method) - set_type(self, type_) - - @param type_: fixup_type_t - -ida_fixup.fixup_data_t.set_type_and_flags (method) - set_type_and_flags(self, type_, flags_=0) - - @param type_: fixup_type_t - @param flags_: uint32 - -ida_fixup.fixup_data_t.set_unused (method) - set_unused(self) - -ida_fixup.fixup_data_t.was_created (method) - was_created(self) -> bool - Is fixup artificial? - -ida_fixup.fixup_info_t (class) - Proxy of C++ fixup_info_t class. - -ida_fixup.fixup_info_t.__init__ (method) - __init__(self) -> fixup_info_t - -ida_fixup.gen_fix_fixups (function) - 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 (function) - get_first_fixup_ea() -> ea_t - -ida_fixup.get_fixup (function) - get_fixup(fd, source) -> bool - Get fixup information. - - @param fd: (C++: fixup_data_t *) - @param source: (C++: ea_t) - -ida_fixup.get_fixup_desc (function) - get_fixup_desc(source, fd) -> str - Get FIXUP description comment. - - @param source: (C++: ea_t) - @param fd: (C++: const fixup_data_t &) fixup_data_t const & - -ida_fixup.get_fixup_handler (function) - 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 (function) - 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 - `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. - - @param ea: (C++: ea_t) address to get fixup bytes from, the size of the fixup bytes depends - on the fixup type. - @see: fixup_handler_t::size - @param type: (C++: fixup_type_t) fixup type - @retval operand: value - -ida_fixup.get_fixups (function) - get_fixups(out, ea, size) -> bool - - @param out: fixups_t * - @param ea: ea_t - @param size: asize_t - -ida_fixup.get_next_fixup_ea (function) - get_next_fixup_ea(ea) -> ea_t - Find next address with fixup information - - @param ea: (C++: ea_t) current address - @return: the next address with fixup information, or BADADDR - -ida_fixup.get_prev_fixup_ea (function) - get_prev_fixup_ea(ea) -> ea_t - Find previous address with fixup information - - @param ea: (C++: ea_t) current address - @return: the previous address with fixup information, or BADADDR - -ida_fixup.handle_fixups_in_macro (function) - handle_fixups_in_macro(ri, ea, other, macro_reft_and_flags) -> bool - Handle two fixups in a macro. We often combine two instruction that load parts - of a value into one macro instruction. For example: - ARM: ADRP X0, #var@PAGE - ADD X0, X0, #var@PAGEOFF --> ADRL X0, var - MIPS: lui $v0, %hi(var) - addiu $v0, $v0, %lo(var) --> la $v0, var - When applying the fixups that fall inside such a macro, we should convert them - to one refinfo. This function does exactly that. It should be called from the - apply() callback of a custom fixup. - - @param ri: (C++: refinfo_t *) - @param ea: (C++: ea_t) - @param other: (C++: fixup_type_t) - @param macro_reft_and_flags: (C++: uint32) - @return: success ('false' means that RI was not changed) - -ida_fixup.is_fixup_custom (function) - is_fixup_custom(type) -> bool - Is fixup processed by processor module? - - @param type: (C++: fixup_type_t) - -ida_fixup.patch_fixup_value (function) - 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. - - @param ea: (C++: ea_t) address where data are changed, the size of the changed data depends - on the fixup type. - @see: fixup_handler_t::size - @param fd: (C++: const fixup_data_t &) fixup data - @retval false: the fixup bytes do not fit (e.g. `fd->off' is greater than - 0xFFFFFFC for BRANCH26). The database is changed even in this - case. - -ida_fixup.set_fixup (function) - 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: (C++: ea_t) the fixup source address, i.e. the address modified by the fixup - @param fd: (C++: const fixup_data_t &) fixup data - -ida_fpro (module) - System independent counterparts of FILE* related functions from Clib. - - You should not use C standard I/O functions in your modules. The reason: Each - module compiled with Borland (and statically linked to Borland's library) will - host a copy of the FILE * information. - - So, if you open a file in the plugin and pass the handle to the kernel, the - kernel will not be able to use it. - - If you really need to use the standard functions, define - USE_STANDARD_FILE_FUNCTIONS. In this case do not mix them with q... functions. - -ida_fpro.qfile_t (class) - A helper class to work with FILE related functions. - -ida_fpro.qfile_t.__init__ (method) - __init__(self, rhs) -> qfile_t - - @param rhs: qfile_t const & - - __init__(self, pycapsule=None) -> qfile_t - - @param pycapsule: PyObject * - -ida_fpro.qfile_t.close (method) - close(self) - Closes the file - -ida_fpro.qfile_t.filename (method) - filename(self) -> PyObject * - -ida_fpro.qfile_t.flush (method) - flush(self) -> int - -ida_fpro.qfile_t.from_capsule (method) - from_capsule(pycapsule) -> qfile_t - - @param pycapsule: PyObject * - -ida_fpro.qfile_t.from_fp (method) - from_fp(fp) -> qfile_t - - @param fp: FILE * - -ida_fpro.qfile_t.get_byte (method) - get_byte(self) -> PyObject * - Reads a single byte from the file. Returns None if EOF or the read byte - -ida_fpro.qfile_t.get_fp (method) - get_fp(self) -> FILE * - -ida_fpro.qfile_t.gets (method) - gets(self, size) -> PyObject * - Reads a line from the input file. Returns the read line or None - - @param size: int - -ida_fpro.qfile_t.open (method) - 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 (method) - opened(self) -> bool - Checks if the file is opened or not - -ida_fpro.qfile_t.put_byte (method) - put_byte(self, chr) -> int - Writes a single byte to the file - - @param chr: int - -ida_fpro.qfile_t.puts (method) - puts(self, str) -> int - - @param str: char const * - -ida_fpro.qfile_t.read (method) - read(self, size) -> PyObject * - Reads from the file. Returns the buffer or None - - @param size: int - -ida_fpro.qfile_t.readbytes (method) - readbytes(self, size, big_endian) -> PyObject * - Similar to read() but it respect the endianness - - @param size: int - @param big_endian: bool - -ida_fpro.qfile_t.seek (method) - seek(self, offset, whence=SEEK_SET) -> int - Set input source position - - @param offset: int64 - @param whence: int - @return: the new position (not 0 as fseek!) - -ida_fpro.qfile_t.size (method) - size(self) -> int64 - -ida_fpro.qfile_t.tell (method) - tell(self) -> int64 - Returns the current position - -ida_fpro.qfile_t.tmpfile (method) - tmpfile() -> qfile_t - A static method to construct an instance using a temporary file - -ida_fpro.qfile_t.write (method) - write(self, py_buf) -> int - Writes to the file. Returns 0 or the number of bytes written - - @param py_buf: PyObject * - -ida_fpro.qfile_t.writebytes (method) - writebytes(self, py_buf, big_endian) -> int - Similar to write() but it respect the endianness - - @param py_buf: PyObject * - @param big_endian: bool - -ida_fpro.qfile_t_from_capsule (function) - qfile_t_from_capsule(pycapsule) -> qfile_t - - @param pycapsule: PyObject * - -ida_fpro.qfile_t_from_fp (function) - qfile_t_from_fp(fp) -> qfile_t - - @param fp: FILE * - -ida_fpro.qfile_t_tmpfile (function) - qfile_t_tmpfile() -> qfile_t - -ida_frame (module) - Routines to manipulate function stack frames, stack variables, register - variables and local labels. - - The frame is represented as a structure: - +------------------------------------------------+ - | function arguments | - +------------------------------------------------+ - | return address (isn't stored in func_t) | - +------------------------------------------------+ - | saved registers (SI, DI, etc - func_t::frregs) | - +------------------------------------------------+ <- typical BP - | | | - | | | func_t::fpd - | | | - | | <- real BP - | local variables (func_t::frsize) | - | | - | | - +------------------------------------------------+ <- SP - - To access the structure of a function frame, use: - * get_struc() (use func_t::frame as structure ID) - * get_frame(const func_t *pfn) - * get_frame(ea_t ea) - -ida_frame.REGVAR_ERROR_ARG (variable) - function arguments are bad - -ida_frame.REGVAR_ERROR_NAME (variable) - the provided name(s) can't be accepted - -ida_frame.REGVAR_ERROR_OK (variable) - all ok - -ida_frame.REGVAR_ERROR_RANGE (variable) - the definition range is bad - -ida_frame.STKVAR_VALID_SIZE (variable) - 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.add_auto_stkpnt (function) - add_auto_stkpnt(pfn, ea, delta) -> bool - Add automatic SP register change point. - - @param pfn: (C++: func_t *) pointer to the function. may be nullptr. - @param ea: (C++: ea_t) linear address where SP changes. usually this is the end of the - instruction which modifies the stack pointer ( insn_t::ea+ - insn_t::size) - @param delta: (C++: sval_t) difference between old and new values of SP - @return: success - -ida_frame.add_frame (function) - add_frame(pfn, frsize, frregs, argsize) -> bool - Add function frame. - - @param pfn: (C++: func_t *) pointer to function structure - @param frsize: (C++: sval_t) size of function local variables - @param frregs: (C++: ushort) size of saved registers - @param argsize: (C++: asize_t) 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. - @retval 1: ok - @retval 0: failed (no function, frame already exists) - -ida_frame.add_regvar (function) - add_regvar(pfn, ea1, ea2, canon, user, cmt) -> int - Define a register variable. - - @param pfn: (C++: func_t *) function in which the definition will be created - @param ea1: (C++: ea_t) ,ea2: range of addresses within the function where the definition will - be used - @param canon: (C++: const char *) name of a general register - @param canon: (C++: const char *) name of a general register - @param user: (C++: const char *) user-defined name for the register - @param cmt: (C++: const char *) comment for the definition - @return: Register variable error codes - -ida_frame.add_user_stkpnt (function) - add_user_stkpnt(ea, delta) -> bool - Add user-defined SP register change point. - - @param ea: (C++: ea_t) linear address where SP changes - @param delta: (C++: sval_t) difference between old and new values of SP - @return: success - -ida_frame.build_stkvar_name (function) - build_stkvar_name(pfn, v) -> str - Build automatic stack variable name. - - @param pfn: (C++: const func_t *) pointer to function (can't be nullptr!) - @param v: (C++: sval_t) value of variable offset - @return: length of stack variable name or -1 - -ida_frame.build_stkvar_xrefs (function) - 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: (C++: xreflist_t *) the list of xrefs to fill. - @param pfn: (C++: func_t *) the function to scan. - @param mptr: (C++: const member_t *) the argument/variable in pfn's stack frame. - -ida_frame.calc_stkvar_struc_offset (function) - calc_stkvar_struc_offset(pfn, insn, n) -> ea_t - Calculate offset of stack variable in the frame structure. - - @param pfn: (C++: func_t *) pointer to function (can't be nullptr!) - @param insn: (C++: const insn_t &) the instruction - @param n: (C++: int) 0..UA_MAXOP-1 operand number -1 if error, return BADADDR - @return: BADADDR if some error (issue a warning if stack frame is bad) - -ida_frame.define_stkvar (function) - define_stkvar(pfn, name, off, flags, ti, nbytes) -> bool - Define/redefine a stack variable. - - @param pfn: (C++: func_t *) pointer to function - @param name: (C++: const char *) variable name, nullptr means autogenerate a name - @param off: (C++: sval_t) offset of the stack variable in the frame. negative values denote - local variables, positive - function arguments. - @param flags: (C++: flags64_t) variable type flags (byte_flag() for a byte variable, for example) - @param ti: (C++: const opinfo_t *) additional type information (like offsets, structs, etc) - @param nbytes: (C++: asize_t) number of bytes occupied by the variable - @return: success - -ida_frame.del_frame (function) - del_frame(pfn) -> bool - Delete a function frame. - - @param pfn: (C++: func_t *) pointer to function structure - @return: success - -ida_frame.del_regvar (function) - del_regvar(pfn, ea1, ea2, canon) -> int - Delete a register variable definition. - - @param pfn: (C++: func_t *) function in question - @param ea1: (C++: ea_t) ,ea2: range of addresses within the function where the definition - holds - @param canon: (C++: const char *) name of a general register - @param canon: (C++: const char *) name of a general register - @return: Register variable error codes - -ida_frame.del_stkpnt (function) - del_stkpnt(pfn, ea) -> bool - Delete SP register change point. - - @param pfn: (C++: func_t *) pointer to the function. may be nullptr. - @param ea: (C++: ea_t) linear address - @return: success - -ida_frame.delete_unreferenced_stkvars (function) - delete_unreferenced_stkvars(pfn) -> int - - @param pfn: func_t * - -ida_frame.delete_wrong_stkvar_ops (function) - delete_wrong_stkvar_ops(pfn) -> int - - @param pfn: func_t * - -ida_frame.find_regvar (function) - find_regvar(pfn, ea1, ea2, canon, user) -> regvar_t - Find a register variable definition. - - @param pfn: (C++: func_t *) function in question - @param ea1: ea_t - @param canon: (C++: const char *) name of a general register - @param canon: (C++: const char *) name of a general register - @param user: char const * - - @return: nullptr-not found, otherwise ptr to regvar_t - find_regvar(pfn, ea, canon) -> regvar_t - - @param pfn: func_t * - @param ea: ea_t - @param canon: char const * - -ida_frame.frame_off_args (function) - frame_off_args(pfn) -> ea_t - Get starting address of arguments section. - - @param pfn: (C++: const func_t *) func_t const * - -ida_frame.frame_off_lvars (function) - frame_off_lvars(pfn) -> ea_t - Get start address of local variables section. - - @param pfn: (C++: const func_t *) func_t const * - -ida_frame.frame_off_retaddr (function) - frame_off_retaddr(pfn) -> ea_t - Get starting address of return address section. - - @param pfn: (C++: const func_t *) func_t const * - -ida_frame.frame_off_savregs (function) - frame_off_savregs(pfn) -> ea_t - Get starting address of saved registers section. - - @param pfn: (C++: const func_t *) func_t const * - -ida_frame.free_regvar (function) - free_regvar(v) - - @param v: regvar_t * - -ida_frame.get_effective_spd (function) - 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: (C++: func_t *) pointer to the function. may be nullptr. - @param ea: (C++: ea_t) linear address - @return: 0 or the difference, usually a negative number - -ida_frame.get_frame (function) - get_frame(pfn) -> struc_t * - Get pointer to function frame. - - @param pfn: func_t const * - -ida_frame.get_frame_member_by_id (function) - get_frame_member_by_id(out_mname, out_fptr, mid) -> member_t * - Check if the specified member id points to a frame member. - - @param out_mname: (C++: qstring *) - @param out_fptr: (C++: struc_t **) - @param mid: (C++: tid_t) - -ida_frame.get_frame_part (function) - get_frame_part(range, pfn, part) - Get offsets of the frame part in the frame. - - @param range: (C++: range_t *) pointer to the output buffer with the frame part - start/end(exclusive) offsets, can't be nullptr - @param pfn: (C++: const func_t *) pointer to function structure, can't be nullptr - @param part: (C++: frame_part_t) frame part - -ida_frame.get_frame_retsize (function) - get_frame_retsize(pfn) -> int - Get size of function return address. - - @param pfn: (C++: const func_t *) pointer to function structure, can't be nullptr - -ida_frame.get_frame_size (function) - 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: (C++: const func_t *) pointer to function structure, may be nullptr - @return: size of frame in bytes or zero - -ida_frame.get_func_by_frame (function) - get_func_by_frame(frame_id) -> ea_t - Get function by its frame id. - @warning: this function works only with databases created by IDA > 5.6 - - @param frame_id: (C++: tid_t) id of the function frame - @return: start address of the function or BADADDR - -ida_frame.get_min_spd_ea (function) - get_min_spd_ea(pfn) -> ea_t - - @param pfn: func_t * - -ida_frame.get_sp_delta (function) - get_sp_delta(pfn, ea) -> sval_t - Get modification of SP made at the specified location - - @param pfn: (C++: func_t *) pointer to the function. may be nullptr. - @param ea: (C++: ea_t) linear address - @return: 0 if the specified location doesn't contain a SP change point. - otherwise return delta of SP modification. - -ida_frame.get_spd (function) - get_spd(pfn, ea) -> sval_t - Get difference between the initial and current values of ESP. - - @param pfn: (C++: func_t *) pointer to the function. may be nullptr. - @param ea: (C++: ea_t) linear address of the instruction - @return: 0 or the difference, usually a negative number. returns the sp-diff - before executing the instruction. - -ida_frame.get_stkvar (function) - get_stkvar(insn, op, v) -> (member_t, int) or None - Get pointer to stack variable - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @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 (function) - has_regvar(pfn, ea) -> bool - Is there a register variable definition? - - @param pfn: (C++: func_t *) function in question - @param ea: (C++: ea_t) current address - -ida_frame.is_funcarg_off (function) - is_funcarg_off(pfn, frameoff) -> bool - - @param pfn: func_t const * - @param frameoff: uval_t - -ida_frame.lvar_off (function) - lvar_off(pfn, frameoff) -> sval_t - - @param pfn: func_t const * - @param frameoff: uval_t - -ida_frame.recalc_spd (function) - 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: (C++: ea_t) linear address of the current instruction - @retval 1: new stkpnt is added - @retval 0: nothing is changed - -ida_frame.recalc_spd_for_basic_block (function) - recalc_spd_for_basic_block(pfn, cur_ea) -> bool - Recalculate SP delta for the current instruction. The typical code snippet to - calculate SP delta in a proc module is: - - if ( may_trace_sp() && pfn != nullptr ) - if ( !recalc_spd_for_basic_block(pfn, insn.ea) ) - trace_sp(pfn, insn); - - where trace_sp() is a typical name for a function that emulates the SP change of - an instruction. - - @param pfn: (C++: func_t *) pointer to the function - @param cur_ea: (C++: ea_t) linear address of the current instruction - @retval true: the cumulative SP delta is set - @retval false: the instruction at CUR_EA passes flow to the next instruction. SP - delta must be set as a result of emulating the current - instruction. - -ida_frame.regvar_t (class) - Proxy of C++ regvar_t class. - -ida_frame.regvar_t.__init__ (method) - __init__(self) -> regvar_t - __init__(self, r) -> regvar_t - - @param r: regvar_t const & - -ida_frame.regvar_t.canon (variable) - canonical register name (case-insensitive) - -ida_frame.regvar_t.cmt (variable) - comment to appear near definition - -ida_frame.regvar_t.swap (method) - swap(self, r) - - @param r: regvar_t & - -ida_frame.regvar_t.user (variable) - user-defined register name - -ida_frame.rename_regvar (function) - rename_regvar(pfn, v, user) -> int - Rename a register variable. - - @param pfn: (C++: func_t *) function in question - @param v: (C++: regvar_t *) variable to rename - @param user: (C++: const char *) new user-defined name for the register - @return: Register variable error codes - -ida_frame.set_auto_spd (function) - set_auto_spd(pfn, ea, new_spd) -> bool - Add such an automatic SP register change point so that at EA the new cumulative - SP delta (that is, the difference between the initial and current values of SP) - would be equal to NEW_SPD. - - @param pfn: (C++: func_t *) pointer to the function. may be nullptr. - @param ea: (C++: ea_t) linear address of the instruction - @param new_spd: (C++: sval_t) new value of the cumulative SP delta - @return: success - -ida_frame.set_frame_size (function) - 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: (C++: func_t *) pointer to function structure - @param frsize: (C++: asize_t) size of function local variables - @param frregs: (C++: ushort) size of saved registers - @param argsize: (C++: asize_t) size of function arguments that will be purged from the stack - upon return - @return: success - -ida_frame.set_purged (function) - 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: (C++: ea_t) address of the function of item - @param nbytes: (C++: int) number of purged bytes - @param override_old_value: (C++: bool) may overwrite old information about purged bytes - @return: success - -ida_frame.set_regvar_cmt (function) - set_regvar_cmt(pfn, v, cmt) -> int - Set comment for a register variable. - - @param pfn: (C++: func_t *) function in question - @param v: (C++: regvar_t *) variable to rename - @param cmt: (C++: const char *) new comment - @return: Register variable error codes - -ida_frame.soff_to_fpoff (function) - 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) - -ida_frame.stkpnt_t (class) - Proxy of C++ stkpnt_t class. - -ida_frame.stkpnt_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: stkpnt_t const & - -ida_frame.stkpnt_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: stkpnt_t const & - -ida_frame.stkpnt_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: stkpnt_t const & - -ida_frame.stkpnt_t.__init__ (method) - __init__(self) -> stkpnt_t - -ida_frame.stkpnt_t.__le__ (method) - __le__(self, r) -> bool - - @param r: stkpnt_t const & - -ida_frame.stkpnt_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: stkpnt_t const & - -ida_frame.stkpnt_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: stkpnt_t const & - -ida_frame.stkpnt_t.compare (method) - compare(self, r) -> int - - @param r: stkpnt_t const & - -ida_frame.stkpnts_t (class) - Proxy of C++ stkpnts_t class. - -ida_frame.stkpnts_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: stkpnts_t const & - -ida_frame.stkpnts_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: stkpnts_t const & - -ida_frame.stkpnts_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: stkpnts_t const & - -ida_frame.stkpnts_t.__init__ (method) - __init__(self) -> stkpnts_t - -ida_frame.stkpnts_t.__le__ (method) - __le__(self, r) -> bool - - @param r: stkpnts_t const & - -ida_frame.stkpnts_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: stkpnts_t const & - -ida_frame.stkpnts_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: stkpnts_t const & - -ida_frame.stkpnts_t.compare (method) - compare(self, r) -> int - - @param r: stkpnts_t const & - -ida_frame.update_fpd (function) - update_fpd(pfn, fpd) -> bool - Update frame pointer delta. - - @param pfn: (C++: func_t *) pointer to function structure - @param fpd: (C++: asize_t) new fpd value. cannot be bigger than the local variable range size. - @return: success - -ida_frame.xreflist_entry_t (class) - Proxy of C++ xreflist_entry_t class. - -ida_frame.xreflist_entry_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: xreflist_entry_t const & - -ida_frame.xreflist_entry_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: xreflist_entry_t const & - -ida_frame.xreflist_entry_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: xreflist_entry_t const & - -ida_frame.xreflist_entry_t.__init__ (method) - __init__(self) -> xreflist_entry_t - -ida_frame.xreflist_entry_t.__le__ (method) - __le__(self, r) -> bool - - @param r: xreflist_entry_t const & - -ida_frame.xreflist_entry_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: xreflist_entry_t const & - -ida_frame.xreflist_entry_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: xreflist_entry_t const & - -ida_frame.xreflist_entry_t.compare (method) - compare(self, r) -> int - - @param r: xreflist_entry_t const & - -ida_frame.xreflist_entry_t.ea (variable) - Location of the insn referencing the stack frame member. - -ida_frame.xreflist_entry_t.opnum (variable) - Number of the operand of that instruction. - -ida_frame.xreflist_entry_t.type (variable) - The type of xref (cref_t & dref_t) - -ida_frame.xreflist_t (class) - Proxy of C++ qvector< xreflist_entry_t > class. - -ida_frame.xreflist_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< xreflist_entry_t > const & - -ida_frame.xreflist_t.__getitem__ (method) - __getitem__(self, i) -> xreflist_entry_t - - @param i: size_t - -ida_frame.xreflist_t.__init__ (method) - __init__(self) -> xreflist_t - __init__(self, x) -> xreflist_t - - @param x: qvector< xreflist_entry_t > const & - -ida_frame.xreflist_t.__len__ (method) - __len__(self) -> size_t - -ida_frame.xreflist_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< xreflist_entry_t > const & - -ida_frame.xreflist_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: xreflist_entry_t const & - -ida_frame.xreflist_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: xreflist_entry_t const & - -ida_frame.xreflist_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: xreflist_entry_t const & - -ida_frame.xreflist_t.at (method) - at(self, _idx) -> xreflist_entry_t - - @param _idx: size_t - -ida_frame.xreflist_t.begin (method) - begin(self) -> xreflist_entry_t - -ida_frame.xreflist_t.capacity (method) - capacity(self) -> size_t - -ida_frame.xreflist_t.clear (method) - clear(self) - -ida_frame.xreflist_t.empty (method) - empty(self) -> bool - -ida_frame.xreflist_t.end (method) - end(self) -> xreflist_entry_t - -ida_frame.xreflist_t.erase (method) - erase(self, it) -> xreflist_entry_t - - @param it: qvector< xreflist_entry_t >::iterator - - erase(self, first, last) -> xreflist_entry_t - - @param first: qvector< xreflist_entry_t >::iterator - @param last: qvector< xreflist_entry_t >::iterator - -ida_frame.xreflist_t.extract (method) - extract(self) -> xreflist_entry_t - -ida_frame.xreflist_t.find (method) - find(self, x) -> xreflist_entry_t - - @param x: xreflist_entry_t const & - -ida_frame.xreflist_t.grow (method) - grow(self, x=xreflist_entry_t()) - - @param x: xreflist_entry_t const & - -ida_frame.xreflist_t.has (method) - has(self, x) -> bool - - @param x: xreflist_entry_t const & - -ida_frame.xreflist_t.inject (method) - inject(self, s, len) - - @param s: xreflist_entry_t * - @param len: size_t - -ida_frame.xreflist_t.insert (method) - insert(self, it, x) -> xreflist_entry_t - - @param it: qvector< xreflist_entry_t >::iterator - @param x: xreflist_entry_t const & - -ida_frame.xreflist_t.pop_back (method) - pop_back(self) - -ida_frame.xreflist_t.push_back (method) - push_back(self, x) - - @param x: xreflist_entry_t const & - - push_back(self) -> xreflist_entry_t - -ida_frame.xreflist_t.qclear (method) - qclear(self) - -ida_frame.xreflist_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_frame.xreflist_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: xreflist_entry_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_frame.xreflist_t.size (method) - size(self) -> size_t - -ida_frame.xreflist_t.swap (method) - swap(self, r) - - @param r: qvector< xreflist_entry_t > & - -ida_frame.xreflist_t.truncate (method) - truncate(self) - -ida_funcs (module) - Routines for working with functions within the disassembled program. - - This file also contains routines for working with library signatures (e.g. - FLIRT). - - Each function consists of function chunks. At least one function chunk must be - present in the function definition - the function entry chunk. Other chunks are - called function tails. There may be several of them for a function. - - A function tail is a continuous range of addresses. It can be used in the - definition of one or more functions. One function using the tail is singled out - and called the tail owner. This function is considered as 'possessing' the tail. - get_func() on a tail address will return the function possessing the tail. You - can enumerate the functions using the tail by using func_parent_iterator_t. - - Each function chunk in the disassembly is represented as an "range" (a range of - addresses, see range.hpp for details) with characteristics. - - A function entry must start with an instruction (code) byte. - -ida_funcs.FIND_FUNC_DEFINE (variable) - create instruction if undefined byte is encountered - -ida_funcs.FIND_FUNC_EXIST (variable) - function exists already. its bounds are returned in 'nfn'. - -ida_funcs.FIND_FUNC_IGNOREFN (variable) - ignore existing function boundaries. by default the function returns function - boundaries if ea belongs to a function. - -ida_funcs.FIND_FUNC_KEEPBD (variable) - do not modify incoming function boundaries, just create instructions inside the - boundaries. - -ida_funcs.FIND_FUNC_NORMAL (variable) - stop processing if undefined byte is encountered - -ida_funcs.FIND_FUNC_OK (variable) - ok, 'nfn' is ready for add_func() - -ida_funcs.FIND_FUNC_UNDEF (variable) - function has instructions that pass execution flow to unexplored bytes. - nfn->end_ea will have the address of the unexplored byte. - -ida_funcs.FUNC_BOTTOMBP (variable) - BP points to the bottom of the stack frame. - -ida_funcs.FUNC_FAR (variable) - Far function. - -ida_funcs.FUNC_FRAME (variable) - Function uses frame pointer (BP) - -ida_funcs.FUNC_FUZZY_SP (variable) - Function changes SP in untraceable way, for example: and esp, 0FFFFFFF0h - -ida_funcs.FUNC_HIDDEN (variable) - A hidden function chunk. - -ida_funcs.FUNC_LIB (variable) - Library function. - -ida_funcs.FUNC_LUMINA (variable) - Function info is provided by Lumina. - -ida_funcs.FUNC_NORET (variable) - Function doesn't return. - -ida_funcs.FUNC_NORET_PENDING (variable) - Function 'non-return' analysis must be performed. This flag is verified upon - func_does_return() - -ida_funcs.FUNC_OUTLINE (variable) - Outlined code, not a real function. - -ida_funcs.FUNC_PROLOG_OK (variable) - Prolog analysis has been performed by last SP-analysis - -ida_funcs.FUNC_PURGED_OK (variable) - '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_REANALYZE (variable) - Function frame changed, request to reanalyze the function after the last insn is - analyzed. - -ida_funcs.FUNC_SP_READY (variable) - 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 (variable) - Static function. - -ida_funcs.FUNC_TAIL (variable) - This is a function tail. Other bits must be clear (except FUNC_HIDDEN). - -ida_funcs.FUNC_THUNK (variable) - Thunk (jump) function. - -ida_funcs.FUNC_USERFAR (variable) - User has specified far-ness of the function - -ida_funcs.IDASGN_APPLIED (variable) - signature is already applied - -ida_funcs.IDASGN_BADARG (variable) - bad number of signature - -ida_funcs.IDASGN_CURRENT (variable) - signature is currently being applied - -ida_funcs.IDASGN_OK (variable) - ok - -ida_funcs.IDASGN_PLANNED (variable) - signature is planned to be applied - -ida_funcs.LIBFUNC_DELAY (variable) - no decision because of lack of information - -ida_funcs.LIBFUNC_FOUND (variable) - ok, library function is found - -ida_funcs.LIBFUNC_NONE (variable) - no, this is not a library function - -ida_funcs.MOVE_FUNC_BADSTART (variable) - bad new start address - -ida_funcs.MOVE_FUNC_NOCODE (variable) - no instruction at 'newstart' - -ida_funcs.MOVE_FUNC_NOFUNC (variable) - no function at 'ea' - -ida_funcs.MOVE_FUNC_OK (variable) - ok - -ida_funcs.MOVE_FUNC_REFUSED (variable) - a plugin refused the action - -ida_funcs.add_func (function) - 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: (C++: ea_t) start address - @param ea2: (C++: ea_t) end address - @return: success - -ida_funcs.add_func_ex (function) - 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: (C++: func_t *) ptr to filled function structure - @return: success - -ida_funcs.add_regarg (function) - add_regarg(pfn, reg, tif, name) - - @param pfn: func_t * - @param reg: int - @param tif: tinfo_t const & - @param name: char const * - -ida_funcs.append_func_tail (function) - 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 *) pointer to the function - @param ea1: (C++: ea_t) start of the tail. If a tail already exists at the specified address - it must start at 'ea1' - @param ea2: (C++: ea_t) 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. - -ida_funcs.apply_idasgn_to (function) - apply_idasgn_to(signame, ea, is_startup) -> int - Apply a signature file to the specified address. - - @param signame: (C++: const char *) short name of signature file (the file name without path) - @param ea: (C++: ea_t) address to apply the signature - @param is_startup: (C++: bool) 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. - @return: Library function codes - -ida_funcs.apply_startup_sig (function) - apply_startup_sig(ea, startup) -> bool - Apply a startup signature file to the specified address. - - @param ea: (C++: ea_t) address to apply the signature to; usually idainfo::start_ea - @param startup: (C++: const char *) the name of the signature file without path and extension - @return: true if successfully applied the signature - -ida_funcs.calc_func_size (function) - calc_func_size(pfn) -> asize_t - Calculate function size. This function takes into account all fragments of the - function. - - @param pfn: (C++: func_t *) ptr to function structure - -ida_funcs.calc_idasgn_state (function) - calc_idasgn_state(n) -> int - Get state of a signature in the list of planned signatures - - @param n: (C++: int) number of signature in the list (0..get_idasgn_qty()-1) - @return: state of signature or IDASGN_BADARG - -ida_funcs.calc_thunk_func_target (function) - calc_thunk_func_target(pfn) -> ea_t - Calculate target of a thunk function. - - @param pfn: (C++: func_t *) pointer to function (may not be nullptr) - @return: the target function or BADADDR - -ida_funcs.calc_thunk_func_target (function) - -ida_funcs.del_func (function) - del_func(ea) -> bool - Delete a function. - - @param ea: (C++: ea_t) any address in the function entry chunk - @return: success - -ida_funcs.del_idasgn (function) - del_idasgn(n) -> int - Remove signature from the list of planned signatures. - - @param n: (C++: int) number of signature in the list (0..get_idasgn_qty()-1) - @return: IDASGN_OK, IDASGN_BADARG, IDASGN_APPLIED - -ida_funcs.dyn_ea_array (class) - Proxy of C++ dynamic_wrapped_array_t< ea_t > class. - -ida_funcs.dyn_ea_array.__getitem__ (method) - __getitem__(self, i) -> unsigned-ea-like-numeric-type const & - - @param i: size_t - -ida_funcs.dyn_ea_array.__init__ (method) - __init__(self, _data, _count) -> dyn_ea_array - - @param _data: unsigned-ea-like-numeric-type * - @param _count: size_t - -ida_funcs.dyn_ea_array.__len__ (method) - __len__(self) -> size_t - -ida_funcs.dyn_ea_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: unsigned-ea-like-numeric-type const & - -ida_funcs.dyn_range_array (class) - Proxy of C++ dynamic_wrapped_array_t< range_t > class. - -ida_funcs.dyn_range_array.__getitem__ (method) - __getitem__(self, i) -> range_t - - @param i: size_t - -ida_funcs.dyn_range_array.__init__ (method) - __init__(self, _data, _count) -> dyn_range_array - - @param _data: range_t * - @param _count: size_t - -ida_funcs.dyn_range_array.__len__ (method) - __len__(self) -> size_t - -ida_funcs.dyn_range_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: range_t const & - -ida_funcs.dyn_regarg_array (class) - Proxy of C++ dynamic_wrapped_array_t< regarg_t > class. - -ida_funcs.dyn_regarg_array.__getitem__ (method) - __getitem__(self, i) -> regarg_t - - @param i: size_t - -ida_funcs.dyn_regarg_array.__init__ (method) - __init__(self, _data, _count) -> dyn_regarg_array - - @param _data: regarg_t * - @param _count: size_t - -ida_funcs.dyn_regarg_array.__len__ (method) - __len__(self) -> size_t - -ida_funcs.dyn_regarg_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: regarg_t const & - -ida_funcs.dyn_regvar_array (class) - Proxy of C++ dynamic_wrapped_array_t< regvar_t > class. - -ida_funcs.dyn_regvar_array.__getitem__ (method) - __getitem__(self, i) -> regvar_t const & - - @param i: size_t - -ida_funcs.dyn_regvar_array.__init__ (method) - __init__(self, _data, _count) -> dyn_regvar_array - - @param _data: regvar_t * - @param _count: size_t - -ida_funcs.dyn_regvar_array.__len__ (method) - __len__(self) -> size_t - -ida_funcs.dyn_regvar_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: regvar_t const & - -ida_funcs.dyn_stkpnt_array (class) - Proxy of C++ dynamic_wrapped_array_t< stkpnt_t > class. - -ida_funcs.dyn_stkpnt_array.__getitem__ (method) - __getitem__(self, i) -> stkpnt_t const & - - @param i: size_t - -ida_funcs.dyn_stkpnt_array.__init__ (method) - __init__(self, _data, _count) -> dyn_stkpnt_array - - @param _data: stkpnt_t * - @param _count: size_t - -ida_funcs.dyn_stkpnt_array.__len__ (method) - __len__(self) -> size_t - -ida_funcs.dyn_stkpnt_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: stkpnt_t const & - -ida_funcs.f_any (function) - f_any(arg1, arg2) -> bool - Helper function to accept any address. - - @param arg1: flags64_t - @param arg2: void * - -ida_funcs.find_func_bounds (function) - 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 - processor_t::func_bounds in order to fine tune the function boundaries. - - @param nfn: (C++: func_t *) structure to fill with information \ nfn->start_ea points to the - start address of the new function. - @param flags: (C++: int) Find function bounds flags - @return: Find function bounds result codes - -ida_funcs.free_regarg (function) - free_regarg(v) - - @param v: regarg_t * - -ida_funcs.func_contains (function) - 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 (function) - 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_t (class) - Proxy of C++ func_item_iterator_t class. - -ida_funcs.func_item_iterator_t.__init__ (method) - __init__(self) -> func_item_iterator_t - __init__(self, pfn, _ea=BADADDR) -> func_item_iterator_t - - @param pfn: func_t * - @param _ea: ea_t - -ida_funcs.func_item_iterator_t.__iter__ (method) - Provide an iterator on code items - -ida_funcs.func_item_iterator_t.__next__ (method) - __next__(self, func) -> bool - - @param func: testf_t * - -ida_funcs.func_item_iterator_t.addresses (method) - Provide an iterator on addresses contained within the function - -ida_funcs.func_item_iterator_t.chunk (method) - chunk(self) -> range_t - -ida_funcs.func_item_iterator_t.code_items (method) - Provide an iterator on code items contained within the function - -ida_funcs.func_item_iterator_t.current (method) - current(self) -> ea_t - -ida_funcs.func_item_iterator_t.data_items (method) - Provide an iterator on data items contained within the function - -ida_funcs.func_item_iterator_t.decode_preceding_insn (method) - decode_preceding_insn(self, visited, p_farref, out) -> bool - - @param visited: eavec_t * - @param p_farref: bool * - @param out: insn_t * - -ida_funcs.func_item_iterator_t.decode_prev_insn (method) - decode_prev_insn(self, out) -> bool - - @param out: insn_t * - -ida_funcs.func_item_iterator_t.first (method) - first(self) -> bool - -ida_funcs.func_item_iterator_t.head_items (method) - Provide an iterator on item heads contained within the function - -ida_funcs.func_item_iterator_t.last (method) - last(self) -> bool - -ida_funcs.func_item_iterator_t.next_addr (method) - next_addr(self) -> bool - -ida_funcs.func_item_iterator_t.next_code (method) - next_code(self) -> bool - -ida_funcs.func_item_iterator_t.next_data (method) - next_data(self) -> bool - -ida_funcs.func_item_iterator_t.next_head (method) - next_head(self) -> bool - -ida_funcs.func_item_iterator_t.next_not_tail (method) - next_not_tail(self) -> bool - -ida_funcs.func_item_iterator_t.not_tails (method) - Provide an iterator on non-tail addresses contained within the function - -ida_funcs.func_item_iterator_t.prev (method) - prev(self, func) -> bool - - @param func: testf_t * - -ida_funcs.func_item_iterator_t.prev_addr (method) - prev_addr(self) -> bool - -ida_funcs.func_item_iterator_t.prev_code (method) - prev_code(self) -> bool - -ida_funcs.func_item_iterator_t.prev_data (method) - prev_data(self) -> bool - -ida_funcs.func_item_iterator_t.prev_head (method) - prev_head(self) -> bool - -ida_funcs.func_item_iterator_t.prev_not_tail (method) - prev_not_tail(self) -> bool - -ida_funcs.func_item_iterator_t.set (method) - set(self, pfn, _ea=BADADDR) -> bool - Set a function range. if pfn == nullptr then a segment range will be set. - - @param pfn: (C++: func_t *) - @param _ea: (C++: ea_t) - -ida_funcs.func_item_iterator_t.set_range (method) - set_range(self, ea1, ea2) -> bool - Set an arbitrary range. - - @param ea1: (C++: ea_t) - @param ea2: (C++: ea_t) - -ida_funcs.func_item_iterator_t.succ (method) - succ(self, func) -> bool - Similar to next(), but succ() iterates the chunks from low to high addresses, - while next() iterates through chunks starting at the function entry chunk - - @param func: (C++: testf_t *) - -ida_funcs.func_item_iterator_t.succ_code (method) - succ_code(self) -> bool - -ida_funcs.func_parent_iterator_set (function) - func_parent_iterator_set(fpi, pfn) -> bool - - @param fpi: func_parent_iterator_t * - @param pfn: func_t * - -ida_funcs.func_parent_iterator_t (class) - Proxy of C++ func_parent_iterator_t class. - -ida_funcs.func_parent_iterator_t.__init__ (method) - __init__(self) -> func_parent_iterator_t - __init__(self, _fnt) -> func_parent_iterator_t - - @param _fnt: func_t * - -ida_funcs.func_parent_iterator_t.__iter__ (method) - Provide an iterator on function parents - -ida_funcs.func_parent_iterator_t.__next__ (method) - __next__(self) -> bool - -ida_funcs.func_parent_iterator_t.first (method) - first(self) -> bool - -ida_funcs.func_parent_iterator_t.last (method) - last(self) -> bool - -ida_funcs.func_parent_iterator_t.parent (method) - parent(self) -> ea_t - -ida_funcs.func_parent_iterator_t.prev (method) - prev(self) -> bool - -ida_funcs.func_parent_iterator_t.reset_fnt (method) - reset_fnt(self, _fnt) - - @param _fnt: func_t * - -ida_funcs.func_parent_iterator_t.set (method) - set(self, _fnt) -> bool - - @param _fnt: func_t * - -ida_funcs.func_t (class) - Proxy of C++ func_t class. - -ida_funcs.func_t.__get_points__ (method) - __get_points__(self) -> dyn_stkpnt_array - -ida_funcs.func_t.__get_referers__ (method) - __get_referers__(self) -> dyn_ea_array - -ida_funcs.func_t.__get_regargs__ (method) - __get_regargs__(self) -> dyn_regarg_array - -ida_funcs.func_t.__get_regvars__ (method) - __get_regvars__(self) -> dyn_regvar_array - -ida_funcs.func_t.__get_tails__ (method) - __get_tails__(self) -> dyn_range_array - -ida_funcs.func_t.__init__ (method) - __init__(self, start=0, end=0, f=0) -> func_t - - @param start: ea_t - @param end: ea_t - @param f: flags64_t - -ida_funcs.func_t.__iter__ (method) - Alias for func_item_iterator_t(self).__iter__() - -ida_funcs.func_t.addresses (method) - Alias for func_item_iterator_t(self).addresses() - -ida_funcs.func_t.analyzed_sp (method) - analyzed_sp(self) -> bool - Has SP-analysis been performed? - -ida_funcs.func_t.argsize (variable) - number of bytes purged from the stack upon returning - -ida_funcs.func_t.code_items (method) - Alias for func_item_iterator_t(self).code_items() - -ida_funcs.func_t.color (variable) - user defined function color - -ida_funcs.func_t.data_items (method) - Alias for func_item_iterator_t(self).data_items() - -ida_funcs.func_t.does_return (method) - does_return(self) -> bool - Does function return? - -ida_funcs.func_t.flags (variable) - Function flags - -ida_funcs.func_t.fpd (variable) - frame pointer delta. (usually 0, i.e. realBP==typicalBP) use update_fpd() to - modify it. - -ida_funcs.func_t.frame (variable) - netnode id of frame structure - see frame.hpp - -ida_funcs.func_t.frregs (variable) - size of saved registers in frame. This range is immediately above the local - variables range. - -ida_funcs.func_t.frsize (variable) - size of local variables part of frame in bytes. If FUNC_FRAME is set and fpd==0, - the frame pointer (EBP) is assumed to point to the top of the local variables - range. - -ida_funcs.func_t.head_items (method) - Alias for func_item_iterator_t(self).head_items() - -ida_funcs.func_t.is_far (method) - is_far(self) -> bool - Is a far function? - -ida_funcs.func_t.need_prolog_analysis (method) - need_prolog_analysis(self) -> bool - Needs prolog analysis? - -ida_funcs.func_t.not_tails (method) - Alias for func_item_iterator_t(self).not_tails() - -ida_funcs.func_t.owner (variable) - the address of the main function possessing this tail - -ida_funcs.func_t.pntqty (variable) - number of SP change points - -ida_funcs.func_t.points (variable) - array of SP change points. use ...stkpnt...() functions to access this array. - -ida_funcs.func_t.referers (variable) - array of referers (function start addresses). use func_parent_iterator_t to - access the referers. - -ida_funcs.func_t.refqty (variable) - number of referers - -ida_funcs.func_t.regargqty (variable) - number of register arguments. During analysis IDA tries to guess the register - arguments. It stores store the guessing outcome in this field. As soon as it - determines the final function prototype, regargqty is set to zero. - -ida_funcs.func_t.regargs (variable) - unsorted array of register arguments. use ...regarg...() functions to access - this array. regargs are destroyed when the full function type is determined. - -ida_funcs.func_t.regvarqty (variable) - number of register variables (-1-not read in yet) use find_regvar() to read - register variables - -ida_funcs.func_t.regvars (variable) - array of register variables. this array is sorted by: start_ea. use - ...regvar...() functions to access this array. - -ida_funcs.func_t.tailqty (variable) - number of function tails - -ida_funcs.func_t.tails (variable) - array of tails, sorted by ea. use func_tail_iterator_t to access function tails. - -ida_funcs.func_t__from_ptrval__ (function) - func_t__from_ptrval__(ptrval) -> func_t - - @param ptrval: size_t - -ida_funcs.func_tail_iterator_set (function) - func_tail_iterator_set(fti, pfn, ea) -> bool - - @param fti: func_tail_iterator_t * - @param pfn: func_t * - @param ea: ea_t - -ida_funcs.func_tail_iterator_set_ea (function) - func_tail_iterator_set_ea(fti, ea) -> bool - - @param fti: func_tail_iterator_t * - @param ea: ea_t - -ida_funcs.func_tail_iterator_t (class) - Proxy of C++ func_tail_iterator_t class. - -ida_funcs.func_tail_iterator_t.__init__ (method) - __init__(self) -> func_tail_iterator_t - __init__(self, _pfn, ea=BADADDR) -> func_tail_iterator_t - - @param _pfn: func_t * - @param ea: ea_t - -ida_funcs.func_tail_iterator_t.__iter__ (method) - Provide an iterator on function tails - -ida_funcs.func_tail_iterator_t.__next__ (method) - __next__(self) -> bool - -ida_funcs.func_tail_iterator_t.chunk (method) - chunk(self) -> range_t - -ida_funcs.func_tail_iterator_t.first (method) - first(self) -> bool - -ida_funcs.func_tail_iterator_t.last (method) - last(self) -> bool - -ida_funcs.func_tail_iterator_t.main (method) - main(self) -> bool - -ida_funcs.func_tail_iterator_t.prev (method) - prev(self) -> bool - -ida_funcs.func_tail_iterator_t.set (method) - set(self, _pfn, ea=BADADDR) -> bool - - @param _pfn: func_t * - @param ea: ea_t - -ida_funcs.func_tail_iterator_t.set_ea (method) - set_ea(self, ea) -> bool - - @param ea: ea_t - -ida_funcs.func_tail_iterator_t.set_range (method) - set_range(self, ea1, ea2) -> bool - - @param ea1: ea_t - @param ea2: ea_t - -ida_funcs.get_current_idasgn (function) - get_current_idasgn() -> int - Get number of the the current signature. - - @return: 0..n-1 - -ida_funcs.get_fchunk (function) - get_fchunk(ea) -> func_t - Get pointer to function chunk structure by address. - - @param ea: (C++: ea_t) any address in a function chunk - @return: ptr to a function chunk or nullptr. This function may return a function - entry as well as a function tail. - -ida_funcs.get_fchunk_num (function) - get_fchunk_num(ea) -> int - Get ordinal number of a function chunk in the global list of function chunks. - - @param ea: (C++: ea_t) any address in the function chunk - @return: number of function chunk (0..get_fchunk_qty()-1). -1 means 'no function - chunk at the specified address'. - -ida_funcs.get_fchunk_qty (function) - get_fchunk_qty() -> size_t - Get total number of function chunks in the program. - -ida_funcs.get_fchunk_referer (function) - get_fchunk_referer(ea, idx) -> ea_t - - @param ea: ea_t - @param idx: size_t - -ida_funcs.get_func (function) - get_func(ea) -> func_t - Get pointer to function structure by address. - - @param ea: (C++: ea_t) any address in a function - @return: ptr to a function or nullptr. This function returns a function entry - chunk. - -ida_funcs.get_func_bitness (function) - get_func_bitness(pfn) -> int - Get function bitness (which is equal to the function segment bitness). - pfn==nullptr => returns 0 - @retval 0: 16 - @retval 1: 32 - @retval 2: 64 - - @param pfn: (C++: const func_t *) func_t const * - -ida_funcs.get_func_bits (function) - get_func_bits(pfn) -> int - Get number of bits in the function addressing. - - @param pfn: (C++: const func_t *) func_t const * - -ida_funcs.get_func_bytes (function) - get_func_bytes(pfn) -> int - Get number of bytes in the function addressing. - - @param pfn: (C++: const func_t *) func_t const * - -ida_funcs.get_func_chunknum (function) - get_func_chunknum(pfn, ea) -> int - Get the containing tail chunk of 'ea'. - @retval -1: means 'does not contain ea' - @retval 0: means the 'pfn' itself contains ea - @retval >0: the number of the containing function tail chunk - - @param pfn: (C++: func_t *) - @param ea: (C++: ea_t) - -ida_funcs.get_func_cmt (function) - get_func_cmt(pfn, repeatable) -> str - Get function comment. - - @param pfn: (C++: const func_t *) ptr to function structure - @param repeatable: (C++: bool) get repeatable comment? - @return: size of comment or -1 In fact this function works with function chunks - too. - -ida_funcs.get_func_name (function) - get_func_name(ea) -> str - Get function name. - - @param ea: (C++: ea_t) any address in the function - @return: length of the function name - -ida_funcs.get_func_num (function) - get_func_num(ea) -> int - Get ordinal number of a function. - - @param ea: (C++: ea_t) any address in the function - @return: number of function (0..get_func_qty()-1). -1 means 'no function at the - specified address'. - -ida_funcs.get_func_qty (function) - get_func_qty() -> size_t - Get total number of functions in the program. - -ida_funcs.get_func_ranges (function) - get_func_ranges(ranges, pfn) -> ea_t - Get function ranges. - - @param ranges: (C++: rangeset_t *) buffer to receive the range info - @param pfn: (C++: func_t *) ptr to function structure - @return: end address of the last function range (BADADDR-error) - -ida_funcs.get_idasgn_desc (function) - get_idasgn_desc(n) -> (str, str) - 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 (function) - get_idasgn_desc_with_matches(n) -> (str, str, int) - 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 (function) - get_idasgn_qty() -> int - Get number of signatures in the list of planned and applied signatures. - - @return: 0..n - -ida_funcs.get_idasgn_title (function) - get_idasgn_title(name) -> str - Get full description of the signature by its short name. - - @param name: (C++: const char *) short name of a signature - @return: size of signature description or -1 - -ida_funcs.get_next_fchunk (function) - get_next_fchunk(ea) -> func_t - Get pointer to the next function chunk in the global list. - - @param ea: (C++: ea_t) any address in the program - @return: ptr to function chunk or nullptr if next function chunk doesn't exist - -ida_funcs.get_next_func (function) - get_next_func(ea) -> func_t - Get pointer to the next function. - - @param ea: (C++: ea_t) any address in the program - @return: ptr to function or nullptr if next function doesn't exist - -ida_funcs.get_next_func_addr (function) - get_next_func_addr(pfn, ea) -> ea_t - - @param pfn: func_t * - @param ea: ea_t - -ida_funcs.get_prev_fchunk (function) - get_prev_fchunk(ea) -> func_t - Get pointer to the previous function chunk in the global list. - - @param ea: (C++: ea_t) any address in the program - @return: ptr to function chunk or nullptr if previous function chunk doesn't - exist - -ida_funcs.get_prev_func (function) - get_prev_func(ea) -> func_t - Get pointer to the previous function. - - @param ea: (C++: ea_t) any address in the program - @return: ptr to function or nullptr if previous function doesn't exist - -ida_funcs.get_prev_func_addr (function) - get_prev_func_addr(pfn, ea) -> ea_t - - @param pfn: func_t * - @param ea: ea_t - -ida_funcs.getn_fchunk (function) - getn_fchunk(n) -> func_t - Get pointer to function chunk structure by number. - - @param n: (C++: int) number of function chunk, is in range 0..get_fchunk_qty()-1 - @return: ptr to a function chunk or nullptr. This function may return a function - entry as well as a function tail. - -ida_funcs.getn_func (function) - getn_func(n) -> func_t - Get pointer to function structure by number. - - @param n: (C++: size_t) number of function, is in range 0..get_func_qty()-1 - @return: ptr to a function or nullptr. This function returns a function entry - chunk. - -ida_funcs.is_finally_visible_func (function) - 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 (function) - is_func_entry(pfn) -> bool - Does function describe a function entry chunk? - - @param pfn: (C++: const func_t *) func_t const * - -ida_funcs.is_func_locked (function) - is_func_locked(pfn) -> bool - Is the function pointer locked? - - @param pfn: (C++: const func_t *) func_t const * - -ida_funcs.is_func_tail (function) - is_func_tail(pfn) -> bool - Does function describe a function tail chunk? - - @param pfn: (C++: const func_t *) func_t const * - -ida_funcs.is_same_func (function) - 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 (function) - is_visible_func(pfn) -> bool - Is the function visible (not hidden)? - - @param pfn: (C++: func_t *) - -ida_funcs.lock_func (class) - Proxy of C++ lock_func class. - -ida_funcs.lock_func.__init__ (method) - __init__(self, _pfn) -> lock_func - - @param _pfn: func_t const * - -ida_funcs.lock_func_range (function) - 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 *) func_t const * - @param lock: (C++: bool) - -ida_funcs.lock_func_with_tails_t (class) - Proxy of C++ lock_func_with_tails_t class. - -ida_funcs.lock_func_with_tails_t.__init__ (method) - __init__(self, pfn) -> lock_func_with_tails_t - - @param pfn: func_t * - -ida_funcs.plan_to_apply_idasgn (function) - plan_to_apply_idasgn(fname) -> int - Add a signature file to the list of planned signature files. - - @param fname: (C++: const char *) file name. should not contain directory part. - @return: 0 if failed, otherwise number of planned (and applied) signatures - -ida_funcs.read_regargs (function) - read_regargs(pfn) - - @param pfn: func_t * - -ida_funcs.reanalyze_function (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: (C++: func_t *) pointer to a function - @param ea1: (C++: ea_t) start of the range to analyze - @param ea2: (C++: ea_t) end of range to analyze - @param analyze_parents: (C++: bool) 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. - -ida_funcs.reanalyze_noret_flag (function) - 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) - -ida_funcs.regarg_t (class) - Proxy of C++ regarg_t class. - -ida_funcs.regarg_t.__init__ (method) - __init__(self) -> regarg_t - __init__(self, r) -> regarg_t - - @param r: regarg_t const & - -ida_funcs.regarg_t.swap (method) - swap(self, r) - - @param r: regarg_t & - -ida_funcs.remove_func_tail (function) - 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 *) pointer to the function - @param tail_ea: (C++: ea_t) any address inside the tail to remove - -ida_funcs.set_func_cmt (function) - set_func_cmt(pfn, cmt, repeatable) -> bool - Set function comment. This function works with function chunks too. - - @param pfn: (C++: const func_t *) ptr to function structure - @param cmt: (C++: const char *) comment string, may be multiline (with ' - '). Use empty str ("") to delete comment - @param repeatable: (C++: bool) set repeatable comment? - -ida_funcs.set_func_end (function) - set_func_end(ea, newend) -> bool - Move function chunk end address. - - @param ea: (C++: ea_t) any address in the function - @param newend: (C++: ea_t) new end address of the function - @return: success - -ida_funcs.set_func_name_if_jumpfunc (function) - set_func_name_if_jumpfunc(pfn, oldname) -> int - Give a meaningful name to function if it consists of only 'jump' instruction. - - @param pfn: (C++: func_t *) pointer to function (may be nullptr) - @param oldname: (C++: const char *) 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 nullptr. - @return: success - -ida_funcs.set_func_start (function) - set_func_start(ea, newstart) -> int - Move function chunk start address. - - @param ea: (C++: ea_t) any address in the function - @param newstart: (C++: ea_t) new end address of the function - @return: Function move result codes - -ida_funcs.set_noret_insn (function) - 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 (function) - set_tail_owner(fnt, new_owner) -> bool - Set a new owner of a function tail. The new owner function must be already - referring to the tail (after append_func_tail). - - @param fnt: (C++: func_t *) pointer to the function tail - @param new_owner: (C++: ea_t) the entry point of the new owner function - -ida_funcs.set_visible_func (function) - set_visible_func(pfn, visible) - Set visibility of function. - - @param pfn: (C++: func_t *) - @param visible: (C++: bool) - -ida_funcs.try_to_add_libfunc (function) - 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: (C++: ea_t) any address in the program - @return: Library function codes - -ida_funcs.update_func (function) - 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: (C++: func_t *) ptr to function structure - @return: success - -ida_gdl (module) - Low level graph drawing operations. - -ida_gdl.BasicBlock (class) - Basic block class. It is returned by the Flowchart class - -ida_gdl.BasicBlock.__init__ (method) - Block type (check fc_block_type_t enum) - -ida_gdl.BasicBlock.preds (method) - Iterates the predecessors list - -ida_gdl.BasicBlock.succs (method) - Iterates the successors list - -ida_gdl.CHART_FOLLOW_DIRECTION (variable) - analyze references to added blocks only in the direction of the reference who - discovered the current block - -ida_gdl.CHART_GEN_DOT (variable) - generate .dot file (file extension is forced to .dot) - -ida_gdl.CHART_GEN_GDL (variable) - generate .gdl file (file extension is forced to .gdl) - -ida_gdl.CHART_IGNORE_LIB_FROM (variable) - ignore references from library functions - -ida_gdl.CHART_IGNORE_LIB_TO (variable) - ignore references to library functions - -ida_gdl.CHART_NOLIBFUNCS (variable) - don't include library functions in the graph - -ida_gdl.CHART_PRINT_DOTS (variable) - print dots if xrefs exist outside of the range recursion depth - -ida_gdl.CHART_PRINT_NAMES (variable) - print labels for each block? - -ida_gdl.CHART_RECURSIVE (variable) - analyze added blocks - -ida_gdl.CHART_REFERENCED (variable) - references from the addresses in the list - -ida_gdl.CHART_REFERENCING (variable) - references to the addresses in the list - -ida_gdl.CHART_WINGRAPH (variable) - call grapher to display the graph - -ida_gdl.FC_APPND (variable) - multirange flowchart (set by append_to_flowchart) - -ida_gdl.FC_CALL_ENDS (variable) - call instructions terminate basic blocks - -ida_gdl.FC_CHKBREAK (variable) - build_qflow_chart() may be aborted by user - -ida_gdl.FC_NOEXT (variable) - 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_NOPREDS (variable) - do not compute predecessor lists - -ida_gdl.FC_OUTLINES (variable) - include outlined code (with FUNC_OUTLINE) - -ida_gdl.FC_PRINT (variable) - print names (used only by display_flow_chart()) - -ida_gdl.FlowChart (class) - Flowchart class used to determine basic blocks. - Check ex_gdl_qflow_chart.py for sample usage. - -ida_gdl.FlowChart.__getitem__ (method) - Returns a basic block - - @return: BasicBlock - -ida_gdl.FlowChart.__init__ (method) - 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. - -ida_gdl.FlowChart.__iter__ (method) - -ida_gdl.FlowChart._getitem (method) - -ida_gdl.FlowChart.refresh (method) - Refreshes the flow chart - -ida_gdl.FlowChart.size (variable) - Number of blocks in the flow chart - -ida_gdl.cancellable_graph_t (class) - Proxy of C++ cancellable_graph_t class. - -ida_gdl.cancellable_graph_t.__disown__ (method) - -ida_gdl.cancellable_graph_t.__init__ (method) - __init__(self) -> cancellable_graph_t - - @param self: PyObject * - -ida_gdl.display_gdl (function) - 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(). The path - should point to a temporary file: when wingraph32 succeeds showing the graph, - the input file will be deleted. - - @param fname: (C++: const char *) char const * - @return: error code from os, 0 if ok - -ida_gdl.fcb_cndret (variable) - conditional return block - -ida_gdl.fcb_enoret (variable) - external noreturn block (does not belong to the function) - -ida_gdl.fcb_error (variable) - block passes execution past the function end - -ida_gdl.fcb_extern (variable) - external normal block - -ida_gdl.fcb_indjump (variable) - block ends with indirect jump - -ida_gdl.fcb_noret (variable) - noreturn block - -ida_gdl.fcb_normal (variable) - normal block - -ida_gdl.fcb_ret (variable) - return block - -ida_gdl.gdl_graph_t (class) - Proxy of C++ gdl_graph_t class. - -ida_gdl.gdl_graph_t.__disown__ (method) - -ida_gdl.gdl_graph_t.__init__ (method) - __init__(self) -> gdl_graph_t - - @param self: PyObject * - -ida_gdl.gdl_graph_t.begin (method) - begin(self) -> node_iterator - -ida_gdl.gdl_graph_t.edge (method) - edge(self, node, i, ispred) -> int - - @param node: int - @param i: int - @param ispred: bool - -ida_gdl.gdl_graph_t.empty (method) - empty(self) -> bool - -ida_gdl.gdl_graph_t.end (method) - end(self) -> node_iterator - -ida_gdl.gdl_graph_t.entry (method) - entry(self) -> int - -ida_gdl.gdl_graph_t.exists (method) - exists(self, node) -> bool - - @param node: int - -ida_gdl.gdl_graph_t.exit (method) - exit(self) -> int - -ida_gdl.gdl_graph_t.front (method) - front(self) -> int - -ida_gdl.gdl_graph_t.get_edge_color (method) - get_edge_color(self, i, j) -> bgcolor_t - - @param i: int - @param j: int - -ida_gdl.gdl_graph_t.get_node_color (method) - get_node_color(self, n) -> bgcolor_t - - @param n: int - -ida_gdl.gdl_graph_t.get_node_label (method) - get_node_label(self, n) -> char * - - @param n: int - -ida_gdl.gdl_graph_t.nedge (method) - nedge(self, node, ispred) -> size_t - - @param node: int - @param ispred: bool - -ida_gdl.gdl_graph_t.node_qty (method) - node_qty(self) -> int - -ida_gdl.gdl_graph_t.npred (method) - npred(self, node) -> int - - @param node: int - -ida_gdl.gdl_graph_t.nsucc (method) - nsucc(self, node) -> int - - @param node: int - -ida_gdl.gdl_graph_t.pred (method) - pred(self, node, i) -> int - - @param node: int - @param i: int - -ida_gdl.gdl_graph_t.print_edge (method) - print_edge(self, fp, i, j) -> bool - - @param fp: FILE * - @param i: int - @param j: int - -ida_gdl.gdl_graph_t.print_graph_attributes (method) - print_graph_attributes(self, fp) - - @param fp: FILE * - -ida_gdl.gdl_graph_t.print_node (method) - print_node(self, fp, n) -> bool - - @param fp: FILE * - @param n: int - -ida_gdl.gdl_graph_t.print_node_attributes (method) - print_node_attributes(self, fp, n) - - @param fp: FILE * - @param n: int - -ida_gdl.gdl_graph_t.size (method) - size(self) -> int - -ida_gdl.gdl_graph_t.succ (method) - succ(self, node, i) -> int - - @param node: int - @param i: int - -ida_gdl.gen_complex_call_chart (function) - gen_complex_call_chart(filename, wait, title, ea1, ea2, flags, recursion_depth=-1) -> bool - Build and display a complex xref graph. - - @param filename: (C++: const char *) output file name. the file extension is not used. maybe - nullptr. - @param wait: (C++: const char *) message to display during graph building - @param title: (C++: const char *) graph title - @param ea1: (C++: ea_t) ,ea2: address range - @param flags: (C++: int) 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. - @param flags: (C++: int) 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. - @param recursion_depth: (C++: int32) optional limit of recursion - @return: success. if fails, a warning message is displayed on the screen - -ida_gdl.gen_flow_graph (function) - gen_flow_graph(filename, title, pfn, ea1, ea2, gflags) -> bool - Build and display a flow graph. - - @param filename: (C++: const char *) output file name. the file extension is not used. maybe - nullptr. - @param title: (C++: const char *) graph title - @param pfn: (C++: func_t *) function to graph - @param ea1: (C++: ea_t) ,ea2: if pfn == nullptr, then the address range - @param gflags: (C++: int) combination of Flow graph building flags. if none of - CHART_GEN_DOT, CHART_GEN_GDL, CHART_WINGRAPH is specified, the - function will return false - @param gflags: (C++: int) combination of Flow graph building flags. if none of - CHART_GEN_DOT, CHART_GEN_GDL, CHART_WINGRAPH is specified, the - function will return false - @return: success. if fails, a warning message is displayed on the screen - -ida_gdl.gen_gdl (function) - gen_gdl(g, fname) - Create GDL file for graph. - - @param g: (C++: const gdl_graph_t *) gdl_graph_t const * - @param fname: (C++: const char *) char const * - -ida_gdl.gen_simple_call_chart (function) - gen_simple_call_chart(filename, wait, title, gflags) -> bool - Build and display a simple function call graph. - - @param filename: (C++: const char *) output file name. the file extension is not used. maybe - nullptr. - @param wait: (C++: const char *) message to display during graph building - @param title: (C++: const char *) graph title - @param gflags: (C++: int) 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. - @return: success. if fails, a warning message is displayed on the screen - -ida_gdl.is_noret_block (function) - is_noret_block(btype) -> bool - Does this block never return? - - @param btype: (C++: fc_block_type_t) enum fc_block_type_t - -ida_gdl.is_ret_block (function) - is_ret_block(btype) -> bool - Does this block return? - - @param btype: (C++: fc_block_type_t) enum fc_block_type_t - -ida_gdl.node_iterator (class) - Proxy of C++ node_iterator class. - -ida_gdl.node_iterator.__eq__ (method) - __eq__(self, n) -> bool - - @param n: node_iterator const & - -ida_gdl.node_iterator.__init__ (method) - __init__(self, _g, n) -> node_iterator - - @param _g: gdl_graph_t const * - @param n: int - -ida_gdl.node_iterator.__ne__ (method) - __ne__(self, n) -> bool - - @param n: node_iterator const & - -ida_gdl.node_iterator.__ref__ (method) - __ref__(self) -> int - -ida_gdl.qbasic_block_t (class) - Proxy of C++ qbasic_block_t class. - -ida_gdl.qbasic_block_t.__init__ (method) - __init__(self) -> qbasic_block_t - -ida_gdl.qflow_chart_t (class) - Proxy of C++ qflow_chart_t class. - -ida_gdl.qflow_chart_t.__getitem__ (method) - __getitem__(self, n) -> qbasic_block_t - - @param n: int - -ida_gdl.qflow_chart_t.__init__ (method) - __init__(self) -> qflow_chart_t - __init__(self, _title, _pfn, _ea1, _ea2, _flags) -> qflow_chart_t - - @param _title: char const * - @param _pfn: func_t * - @param _ea1: ea_t - @param _ea2: ea_t - @param _flags: int - -ida_gdl.qflow_chart_t.append_to_flowchart (method) - append_to_flowchart(self, ea1, ea2) - - @param ea1: ea_t - @param ea2: ea_t - -ida_gdl.qflow_chart_t.bounds (variable) - overall bounds of the qflow_chart_t instance - -ida_gdl.qflow_chart_t.calc_block_type (method) - calc_block_type(self, blknum) -> fc_block_type_t - - @param blknum: size_t - -ida_gdl.qflow_chart_t.create (method) - create(self, _title, _pfn, _ea1, _ea2, _flags) - - @param _title: char const * - @param _pfn: func_t * - @param _ea1: ea_t - @param _ea2: ea_t - @param _flags: int - - create(self, _title, ranges, _flags) - - @param _title: char const * - @param ranges: rangevec_t const & - @param _flags: int - -ida_gdl.qflow_chart_t.flags (variable) - flags. See Flow chart flags - -ida_gdl.qflow_chart_t.get_node_label (method) - get_node_label(self, n) -> char * - - @param n: int - -ida_gdl.qflow_chart_t.is_noret_block (method) - is_noret_block(self, blknum) -> bool - - @param blknum: size_t - -ida_gdl.qflow_chart_t.is_ret_block (method) - is_ret_block(self, blknum) -> bool - - @param blknum: size_t - -ida_gdl.qflow_chart_t.npred (method) - npred(self, node) -> int - - @param node: int - -ida_gdl.qflow_chart_t.nproper (variable) - number of basic blocks belonging to the specified range - -ida_gdl.qflow_chart_t.nsucc (method) - nsucc(self, node) -> int - - @param node: int - -ida_gdl.qflow_chart_t.pfn (variable) - the function this instance was built upon - -ida_gdl.qflow_chart_t.pred (method) - pred(self, node, i) -> int - - @param node: int - @param i: int - -ida_gdl.qflow_chart_t.print_names (method) - print_names(self) -> bool - -ida_gdl.qflow_chart_t.print_node_attributes (method) - print_node_attributes(self, fp, n) - - @param fp: FILE * - @param n: int - -ida_gdl.qflow_chart_t.refresh (method) - refresh(self) - -ida_gdl.qflow_chart_t.size (method) - size(self) -> int - -ida_gdl.qflow_chart_t.succ (method) - succ(self, node, i) -> int - - @param node: int - @param i: int - -ida_graph (module) - Graph view management. - -ida_graph.GLICTL_CENTER (variable) - the gli should be set/get as center - -ida_graph.GraphViewer (class) - This class wraps the user graphing facility provided by the graph.hpp file - -ida_graph.GraphViewer.AddCommand (method) - -ida_graph.GraphViewer.AddEdge (method) - Creates an edge between two given node ids - -ida_graph.GraphViewer.AddNode (method) - Creates a node associated with the given object and returns the node id - -ida_graph.GraphViewer.Clear (method) - Clears all the nodes and edges - -ida_graph.GraphViewer.Close (method) - Closes the graph. - It is possible to call Show() again (which will recreate the graph) - -ida_graph.GraphViewer.Count (method) - Returns the node count - -ida_graph.GraphViewer.OnCommand (method) - -ida_graph.GraphViewer.OnPopup (method) - -ida_graph.GraphViewer.OnRefresh (method) - 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.Select (method) - Selects a node on the graph - -ida_graph.GraphViewer.Show (method) - Shows an existing graph or creates a new one - - @return: Boolean - -ida_graph.GraphViewer.UI_Hooks_Trampoline (class) - -ida_graph.GraphViewer.UI_Hooks_Trampoline.__init__ (method) - -ida_graph.GraphViewer.UI_Hooks_Trampoline.populating_widget_popup (method) - -ida_graph.GraphViewer._OnBind (method) - -ida_graph.GraphViewer.__getitem__ (method) - Returns a reference to the object associated with this node id - -ida_graph.GraphViewer.__init__ (method) - 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? - -ida_graph.GraphViewer.__init__._qccb (function) - -ida_graph.GraphViewer.__iter__ (method) - -ida_graph.MTG_DOT_NODE (variable) - is dot node? - -ida_graph.MTG_GROUP_NODE (variable) - is group node? - -ida_graph.MTG_NON_DISPLAYABLE_NODE (variable) - 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 (variable) - node_info_t::bg_color - -ida_graph.NIF_EA (variable) - node_info_t::ea - -ida_graph.NIF_FLAGS (variable) - node_info_t::flags - -ida_graph.NIF_FRAME_COLOR (variable) - node_info_t::frame_color - -ida_graph.NIF_TEXT (variable) - node_info_t::text - -ida_graph.TPointDouble (class) - Proxy of C++ TPointDouble class. - -ida_graph.TPointDouble.__eq__ (method) - __eq__(self, r) -> bool - - @param r: TPointDouble const & - -ida_graph.TPointDouble.__init__ (method) - __init__(self) -> TPointDouble - __init__(self, a, b) -> TPointDouble - - @param a: double - @param b: double - - __init__(self, r) -> TPointDouble - - @param r: point_t const & - -ida_graph.TPointDouble.__ne__ (method) - __ne__(self, r) -> bool - - @param r: TPointDouble const & - -ida_graph.TPointDouble.add (method) - add(self, r) - - @param r: TPointDouble const & - -ida_graph.TPointDouble.negate (method) - negate(self) - -ida_graph.TPointDouble.sub (method) - sub(self, r) - - @param r: TPointDouble const & - -ida_graph.abstract_graph_t (class) - Proxy of C++ abstract_graph_t class. - -ida_graph.abstract_graph_t.__disown__ (method) - -ida_graph.abstract_graph_t.__init__ (method) - __init__(self) -> abstract_graph_t - - @param self: PyObject * - -ida_graph.abstract_graph_t.callback_ud (variable) - user data for callback - -ida_graph.abstract_graph_t.circle_center (variable) - for layout_circle - -ida_graph.abstract_graph_t.circle_radius (variable) - for layout_circle - -ida_graph.abstract_graph_t.create_circle_layout (method) - create_circle_layout(self, p, radius) -> bool - - @param p: point_t - @param radius: int - -ida_graph.abstract_graph_t.create_tree_layout (method) - create_tree_layout(self) -> bool - -ida_graph.abstract_graph_t.current_layout (variable) - see Proximity view layouts - -ida_graph.abstract_graph_t.get_edge (method) - get_edge(self, e) -> edge_info_t - - @param e: edge_t - -ida_graph.abstract_graph_t.grcall (method) - grcall(self, code) -> ssize_t - - @param code: int - -ida_graph.abstract_graph_t.nrect (method) - nrect(self, n) -> rect_t - - @param n: int - -ida_graph.abstract_graph_t.rect_edges_made (variable) - have create rectangular edges? - -ida_graph.abstract_graph_t.set_callback (method) - set_callback(self, _callback, _ud) - - @param _callback: hook_cb_t * - @param _ud: void * - -ida_graph.abstract_graph_t.title (variable) - graph title - -ida_graph.calc_dist (function) - 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 (function) - clr_node_info(gid, node, flags) - Clear node info for the given node. - - @param gid: (C++: graph_id_t) id of desired graph - @param node: (C++: int) node number - @param flags: (C++: uint32) combination of Node info flags, identifying which fields of - node_info_t will be cleared - -ida_graph.create_disasm_graph (function) - create_disasm_graph(ea) -> mutable_graph_t - Create a graph using an arbitrary set of ranges. - - @param ea: ea_t - - create_disasm_graph(ranges) -> mutable_graph_t - - @param ranges: rangevec_t const & - -ida_graph.create_graph_viewer (function) - create_graph_viewer(title, id, callback, ud, title_height, parent=None) -> graph_viewer_t * - Create a custom graph viewer. - - @param title: (C++: const char *) the widget title - @param id: (C++: uval_t) graph id - @param callback: (C++: hook_cb_t *) callback to handle graph notifications (graph_notification_t) - @param ud: (C++: void *) user data passed to callback - @param title_height: (C++: int) node title height - @param parent: (C++: TWidget *) the parent widget of the graph viewer - @return: new viewer - -ida_graph.create_mutable_graph (function) - 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 (function) - 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 (function) - 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 (function) - delete_mutable_graph(g) - Delete graph object. - @warning: 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 *) - -ida_graph.edge_info_t (class) - Proxy of C++ edge_info_t class. - -ida_graph.edge_info_t.__init__ (method) - __init__(self) -> edge_info_t - -ida_graph.edge_info_t.color (variable) - edge color - -ida_graph.edge_info_t.layout (variable) - describes geometry of edge - -ida_graph.edge_info_t.reverse_layout (method) - reverse_layout(self) - -ida_graph.edge_info_t.width (variable) - edge width - -ida_graph.edge_infos_wrapper_t (class) - Proxy of C++ edge_infos_wrapper_t class. - -ida_graph.edge_infos_wrapper_t.__init__ (method) - -ida_graph.edge_infos_wrapper_t.clear (method) - clear(self) - -ida_graph.edge_layout_point_t (class) - Proxy of C++ edge_layout_point_t class. - -ida_graph.edge_layout_point_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: edge_layout_point_t const & - -ida_graph.edge_layout_point_t.__init__ (method) - __init__(self) -> edge_layout_point_t - __init__(self, _e, _pidx) -> edge_layout_point_t - - @param _e: edge_t const & - @param _pidx: int - -ida_graph.edge_layout_point_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: edge_layout_point_t const & - -ida_graph.edge_layout_point_t.compare (method) - compare(self, r) -> int - - @param r: edge_layout_point_t const & - -ida_graph.edge_layout_point_t.e (variable) - parent edge - -ida_graph.edge_layout_point_t.pidx (variable) - index into edge_info_t::layout - -ida_graph.edge_segment_t (class) - Proxy of C++ edge_segment_t class. - -ida_graph.edge_segment_t.__init__ (method) - __init__(self) -> edge_segment_t - -ida_graph.edge_segment_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: edge_segment_t const & - -ida_graph.edge_segment_t.length (method) - length(self) -> size_t - -ida_graph.edge_segment_t.toright (method) - toright(self) -> bool - -ida_graph.edge_t (class) - Proxy of C++ edge_t class. - -ida_graph.edge_t.__eq__ (method) - __eq__(self, y) -> bool - - @param y: edge_t const & - -ida_graph.edge_t.__init__ (method) - __init__(self) -> edge_t - __init__(self, x, y) -> edge_t - - @param x: int - @param y: int - -ida_graph.edge_t.__lt__ (method) - __lt__(self, y) -> bool - - @param y: edge_t const & - -ida_graph.edge_t.__ne__ (method) - __ne__(self, y) -> bool - - @param y: edge_t const & - -ida_graph.edge_t.dst (variable) - destination node number - -ida_graph.edge_t.src (variable) - source node number - -ida_graph.get_graph_viewer (function) - get_graph_viewer(parent) -> graph_viewer_t * - Get custom graph viewer for given form. - - @param parent: (C++: TWidget *) - -ida_graph.get_node_info (function) - get_node_info(out, gid, node) -> bool - Get node info. - - @param out: (C++: node_info_t *) result - @param gid: (C++: graph_id_t) id of desired graph - @param node: (C++: int) node number - @return: success - -ida_graph.get_viewer_graph (function) - get_viewer_graph(gv) -> mutable_graph_t - Get graph object for given custom graph viewer. - - @param gv: (C++: graph_viewer_t *) - -ida_graph.git_edge (variable) - edge (graph_item_t::e, graph_item_t::n. n is farthest edge endpoint) - -ida_graph.git_elp (variable) - edge layout point (graph_item_t::elp) - -ida_graph.git_node (variable) - node title (graph_item_t::n) - -ida_graph.git_none (variable) - nothing - -ida_graph.git_text (variable) - node text (graph_item_t::n, graph_item_t::p) - -ida_graph.git_tool (variable) - node title button (graph_item_t::n, graph_item_t::b) - -ida_graph.graph_item_t (class) - Proxy of C++ graph_item_t class. - -ida_graph.graph_item_t.__init__ (method) - __init__(self) -> graph_item_t - -ida_graph.graph_item_t.b (variable) - button number - -ida_graph.graph_item_t.e (variable) - edge source and destination - -ida_graph.graph_item_t.elp (variable) - edge layout point - -ida_graph.graph_item_t.is_edge (method) - is_edge(self) -> bool - -ida_graph.graph_item_t.is_node (method) - is_node(self) -> bool - -ida_graph.graph_item_t.n (variable) - node number - -ida_graph.graph_item_t.p (variable) - text coordinates in the node - -ida_graph.graph_item_t.type (variable) - type - -ida_graph.graph_node_visitor_t (class) - Proxy of C++ graph_node_visitor_t class. - -ida_graph.graph_node_visitor_t.__disown__ (method) - -ida_graph.graph_node_visitor_t.__init__ (method) - __init__(self) -> graph_node_visitor_t - - @param self: PyObject * - -ida_graph.graph_node_visitor_t.is_forbidden_edge (method) - is_forbidden_edge(self, arg0, arg1) -> bool - Should the edge between 'n' and 'm' be ignored? - - @param arg0: int - @param arg1: int - -ida_graph.graph_node_visitor_t.is_visited (method) - is_visited(self, n) -> bool - Have we already visited the given node? - - @param n: (C++: int) - -ida_graph.graph_node_visitor_t.reinit (method) - reinit(self) - Reset visited nodes. - -ida_graph.graph_node_visitor_t.set_visited (method) - set_visited(self, n) - Mark node as visited. - - @param n: (C++: int) - -ida_graph.graph_node_visitor_t.visit_node (method) - visit_node(self, arg0) -> int - Implements action to take when a node is visited. - - @param arg0: int - -ida_graph.graph_path_visitor_t (class) - Proxy of C++ graph_path_visitor_t class. - -ida_graph.graph_path_visitor_t.__disown__ (method) - -ida_graph.graph_path_visitor_t.__init__ (method) - __init__(self) -> graph_path_visitor_t - - @param self: PyObject * - -ida_graph.graph_path_visitor_t.path (variable) - current path - -ida_graph.graph_path_visitor_t.prune (variable) - walk_forward(): prune := true means to stop the current path - -ida_graph.graph_path_visitor_t.walk_backward (method) - walk_backward(self, arg0) -> int - - @param arg0: int - -ida_graph.graph_path_visitor_t.walk_forward (method) - walk_forward(self, arg0) -> int - - @param arg0: int - -ida_graph.graph_visitor_t (class) - Proxy of C++ graph_visitor_t class. - -ida_graph.graph_visitor_t.__disown__ (method) - -ida_graph.graph_visitor_t.__init__ (method) - __init__(self) -> graph_visitor_t - - @param self: PyObject * - -ida_graph.graph_visitor_t.visit_edge (method) - visit_edge(self, arg2, arg3) -> int - - @param arg2: edge_t - @param arg3: edge_info_t * - -ida_graph.graph_visitor_t.visit_node (method) - visit_node(self, arg2, arg3) -> int - - @param arg2: int - @param arg3: rect_t & - -ida_graph.grcode_calculating_layout (variable) - calculating user-defined graph layout. - - @retval 0: not implemented - @retval 1: graph layout calculated by the plugin - -ida_graph.grcode_center_on (variable) - use viewer_center_on() - -ida_graph.grcode_change_group_visibility (variable) - use mutable_graph_t::change_group_visibility() - -ida_graph.grcode_changed_graph (variable) - new graph has been set. - - @retval 0: must return 0 - -ida_graph.grcode_clear (variable) - use mutable_graph_t::clear() - -ida_graph.grcode_clicked (variable) - graph is being clicked. this callback allows you to ignore some clicks. it - occurs too early, internal graph variables are not updated yet. current_item1, - current_item2 point to the same thing. item2 has more information. see also: - custom_viewer_click_t - - @retval 0: ok - @retval 1: ignore click - -ida_graph.grcode_create_circle_layout (variable) - use abstract_graph_t::create_circle_layout() - -ida_graph.grcode_create_digraph_layout (variable) - use mutable_graph_t::create_digraph_layout() - -ida_graph.grcode_create_disasm_graph1 (variable) - use create_disasm_graph(ea_t ea) - -ida_graph.grcode_create_disasm_graph2 (variable) - use create_disasm_graph(const rangevec_t &ranges) - -ida_graph.grcode_create_graph_viewer (variable) - use create_graph_viewer() - -ida_graph.grcode_create_group (variable) - use mutable_graph_t::create_group() - -ida_graph.grcode_create_mutable_graph (variable) - use create_mutable_graph() - -ida_graph.grcode_create_tree_layout (variable) - use abstract_graph_t::create_tree_layout() - -ida_graph.grcode_create_user_graph_place (variable) - use create_user_graph_place() - -ida_graph.grcode_creating_group (variable) - a group is being created. this provides an opportunity for the graph to forbid - creation of the group. Note that groups management is done by the - mutable_graph_t instance itself: there is no need to modify the graph in this - callback. - - @retval 0: ok - @retval 1: forbid group creation - -ida_graph.grcode_dblclicked (variable) - a graph node has been double clicked. - - @retval 0: ok - @retval 1: ignore click - -ida_graph.grcode_del_custom_layout (variable) - use mutable_graph_t::del_custom_layout() - -ida_graph.grcode_del_node_info (variable) - use viewer_del_node_info() - -ida_graph.grcode_delete_group (variable) - use mutable_graph_t::delete_group() - -ida_graph.grcode_delete_mutable_graph (variable) - use delete_mutable_graph() - -ida_graph.grcode_deleting_group (variable) - a group is being deleted. this provides an opportunity for the graph to forbid - deletion of the group. Note that groups management is done by the - mutable_graph_t instance itself: there is no need to modify the graph in this - callback. - - @retval 0: ok - @retval 1: forbid group deletion - -ida_graph.grcode_destroyed (variable) - graph is being destroyed. Note that this doesn't mean the graph viewer is being - destroyed; this only means that the graph that is being displayed by it is being - destroyed, and that, e.g., any possibly cached data should be invalidated (this - event can happen when, for example, the user decides to group nodes together: - that operation will effectively create a new graph, that will replace the old - one.) To be notified when the graph viewer itself is being destroyed, please see - notification 'view_close', in kernwin.hpp - - @retval 0: must return 0 - -ida_graph.grcode_edge_infos_wrapper_clear (variable) - use edge_infos_wrapper_t::clear() - -ida_graph.grcode_edge_infos_wrapper_copy (variable) - use edge_infos_wrapper_t::operator=() - -ida_graph.grcode_empty (variable) - use mutable_graph_t::empty() - -ida_graph.grcode_find_subgraph_node (variable) - use mutable_graph_t::_find_subgraph_node() - -ida_graph.grcode_fit_window (variable) - use viewer_fit_window() - -ida_graph.grcode_get_curnode (variable) - use viewer_get_curnode() - -ida_graph.grcode_get_custom_layout (variable) - use mutable_graph_t::get_custom_layout() - -ida_graph.grcode_get_gli (variable) - use viewer_get_gli() - -ida_graph.grcode_get_graph_groups (variable) - use mutable_graph_t::get_graph_groups() - -ida_graph.grcode_get_graph_viewer (variable) - use get_graph_viewer() - -ida_graph.grcode_get_node_info (variable) - use viewer_get_node_info() - -ida_graph.grcode_get_node_representative (variable) - use mutable_graph_t::get_node_representative() - -ida_graph.grcode_get_selection (variable) - use viewer_get_selection() - -ida_graph.grcode_get_viewer_graph (variable) - use get_viewer_graph() - -ida_graph.grcode_gotfocus (variable) - a graph viewer got focus. - - @retval 0: must return 0 - -ida_graph.grcode_group_visibility (variable) - a group is being collapsed/uncollapsed this provides an opportunity for the - graph to forbid changing the visibility of the group. Note that groups - management is done by the mutable_graph_t instance itself: there is no need to - modify the graph in this callback. - - @retval 0: ok - @retval 1: forbid group modification - -ida_graph.grcode_is_visible_node (variable) - use mutable_graph_t::is_visible_node() - -ida_graph.grcode_layout_calculated (variable) - graph layout calculated. - - @retval 0: must return 0 - -ida_graph.grcode_lostfocus (variable) - a graph viewer lost focus. - - @retval 0: must return 0 - -ida_graph.grcode_node_qty (variable) - use mutable_graph_t::node_qty() - -ida_graph.grcode_nrect (variable) - use mutable_graph_t::nrect() - -ida_graph.grcode_refresh_viewer (variable) - use refresh_viewer() - -ida_graph.grcode_set_custom_layout (variable) - use mutable_graph_t::set_custom_layout() - -ida_graph.grcode_set_edge (variable) - use mutable_graph_t::set_edge() - -ida_graph.grcode_set_gli (variable) - use viewer_set_gli() - -ida_graph.grcode_set_graph_groups (variable) - use mutable_graph_t::set_graph_groups() - -ida_graph.grcode_set_node_info (variable) - use viewer_set_node_info() - -ida_graph.grcode_set_titlebar_height (variable) - use viewer_set_titlebar_height() - -ida_graph.grcode_set_viewer_graph (variable) - use set_viewer_graph() - -ida_graph.grcode_user_draw (variable) - render node of a user-defined graph. NB: draw only on the specified DC and - nowhere else! - - @retval 0: not rendered - @retval 1: rendered - -ida_graph.grcode_user_hint (variable) - retrieve hint for the user-defined graph. - - @retval 0: use default hint - @retval 1: use proposed hint - -ida_graph.grcode_user_refresh (variable) - refresh user-defined graph nodes and edges This is called when the UI considers - that it is necessary to recreate the graph layout, and thus has to ensure that - the 'mutable_graph_t' instance it is using, is up-to-date. For example: - * at graph creation-time - * if a refresh_viewer() call was made - - @return: success - -ida_graph.grcode_user_size (variable) - calculate node size for user-defined graph. - - @retval 0: did not calculate. ida will use node text size - @retval 1: calculated. ida will add node title to the size - -ida_graph.grcode_user_text (variable) - retrieve text for user-defined graph node. NB: do not use anything calling GDI! - - @return: success, result must be filled - -ida_graph.grcode_user_title (variable) - render node title of a user-defined graph. - - @retval 0: did not render, ida will fill it with title_bg_color - @retval 1: rendered node title - -ida_graph.grcode_viewer_create_groups_vec (variable) - use viewer_create_groups() - -ida_graph.grcode_viewer_delete_groups_vec (variable) - use viewer_delete_groups() - -ida_graph.grcode_viewer_groups_visibility_vec (variable) - use viewer_set_groups_visibility() - -ida_graph.group_crinfo_t (class) - Proxy of C++ group_crinfo_t class. - -ida_graph.group_crinfo_t.__init__ (method) - __init__(self) -> group_crinfo_t - -ida_graph.interval_t (class) - Proxy of C++ interval_t class. - -ida_graph.interval_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: interval_t const & - -ida_graph.interval_t.__init__ (method) - __init__(self) -> interval_t - __init__(self, y0, y1) -> interval_t - - @param y0: int - @param y1: int - - __init__(self, s) -> interval_t - - @param s: edge_segment_t const & - -ida_graph.interval_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: interval_t const & - -ida_graph.interval_t.contains (method) - contains(self, x) -> bool - - @param x: int - -ida_graph.interval_t.empty (method) - empty(self) -> bool - -ida_graph.interval_t.intersect (method) - intersect(self, r) - - @param r: interval_t const & - -ida_graph.interval_t.length (method) - length(self) -> int - -ida_graph.interval_t.make_union (method) - make_union(self, r) - - @param r: interval_t const & - -ida_graph.interval_t.move_by (method) - move_by(self, shift) - - @param shift: int - -ida_graph.mutable_graph_t (class) - Proxy of C++ mutable_graph_t class. - -ida_graph.mutable_graph_t.__init__ (method) - -ida_graph.mutable_graph_t.add_edge (method) - add_edge(self, i, j, ei) -> bool - - @param i: int - @param j: int - @param ei: edge_info_t const * - -ida_graph.mutable_graph_t.add_node (method) - add_node(self, r) -> int - Add a node, possibly with a specific geometry - - @param r: (C++: const rect_t *) the node geometry (can be nullptr) - @return: the new node - -ida_graph.mutable_graph_t.belongs (variable) - the subgraph the node belongs to INT_MAX means that the node doesn't exist sign - bit means collapsed node - -ida_graph.mutable_graph_t.calc_group_ea (method) - calc_group_ea(self, arg2) -> ea_t - - @param arg2: intvec_t const & - -ida_graph.mutable_graph_t.change_group_visibility (method) - change_group_visibility(self, group, expand) -> bool - Expand/collapse a group node - - @param group: (C++: int) the group node - @param expand: (C++: bool) whether to expand or collapse - @return: success - -ida_graph.mutable_graph_t.create_digraph_layout (method) - create_digraph_layout(self) -> bool - -ida_graph.mutable_graph_t.create_group (method) - create_group(self, nodes) -> int - Create a new group node, that will contain all the nodes in 'nodes'. - - @param nodes: (C++: const intvec_t &) the nodes that will be part of the group - @return: the group node, or -1 in case of error - -ida_graph.mutable_graph_t.del_custom_layout (method) - del_custom_layout(self) - -ida_graph.mutable_graph_t.del_edge (method) - del_edge(self, i, j) -> bool - - @param i: int - @param j: int - -ida_graph.mutable_graph_t.del_node (method) - del_node(self, n) -> ssize_t - Delete a node - - @param n: (C++: int) the node to delete - @return: the number of deleted edges - -ida_graph.mutable_graph_t.delete_group (method) - delete_group(self, group) -> bool - Delete a group node. - - This deletes the group node only; it does not delete nodes that are part of the - group. - - @param group: (C++: int) the group node - @return: success - -ida_graph.mutable_graph_t.empty (method) - empty(self) -> bool - Is the graph (visually) empty? - - @return: true if there are no visible nodes - -ida_graph.mutable_graph_t.exists (method) - exists(self, node) -> bool - Is the node visible? - - @param node: (C++: int) the node number - @return: success - -ida_graph.mutable_graph_t.get_custom_layout (method) - get_custom_layout(self) -> bool - -ida_graph.mutable_graph_t.get_first_subgraph_node (method) - get_first_subgraph_node(self, group) -> int - - @param group: int - -ida_graph.mutable_graph_t.get_graph_groups (method) - get_graph_groups(self) -> bool - -ida_graph.mutable_graph_t.get_next_subgraph_node (method) - get_next_subgraph_node(self, group, current) -> int - - @param group: int - @param current: int - -ida_graph.mutable_graph_t.get_node_group (method) - get_node_group(self, node) -> int - - @param node: int - -ida_graph.mutable_graph_t.get_node_representative (method) - get_node_representative(self, node) -> int - Get the node that currently visually represents 'node'. This will find the - "closest" parent group node that's visible, by attempting to walk up the group - nodes that contain 'node', and will stop when it finds a node that is currently - visible. - - See also get_group_node() - - @param node: (C++: int) the node - @return: the node that represents 'node', or 'node' if it's not part of any - group - -ida_graph.mutable_graph_t.gid (variable) - graph id - unique for the database for flowcharts it is equal to the function - start_ea - -ida_graph.mutable_graph_t.is_collapsed_node (method) - is_collapsed_node(self, node) -> bool - - @param node: int - -ida_graph.mutable_graph_t.is_deleted_node (method) - is_deleted_node(self, node) -> bool - - @param node: int - -ida_graph.mutable_graph_t.is_displayable_node (method) - is_displayable_node(self, node) -> bool - - @param node: int - -ida_graph.mutable_graph_t.is_dot_node (method) - is_dot_node(self, node) -> bool - - @param node: int - -ida_graph.mutable_graph_t.is_group_node (method) - is_group_node(self, node) -> bool - - @param node: int - -ida_graph.mutable_graph_t.is_simple_node (method) - is_simple_node(self, node) -> bool - - @param node: int - -ida_graph.mutable_graph_t.is_subgraph_node (method) - is_subgraph_node(self, node) -> bool - - @param node: int - -ida_graph.mutable_graph_t.is_uncollapsed_node (method) - is_uncollapsed_node(self, node) -> bool - - @param node: int - -ida_graph.mutable_graph_t.is_user_graph (method) - is_user_graph(self) -> bool - -ida_graph.mutable_graph_t.is_visible_node (method) - is_visible_node(self, node) -> bool - Is the node currently visible? - - An invisible node is a node that's part of a group that's currently collapsed. - - @param node: (C++: int) the node - @return: success - -ida_graph.mutable_graph_t.node_flags (variable) - node flags - -ida_graph.mutable_graph_t.node_qty (method) - node_qty(self) -> int - Get the number of visible nodes (the list can be retrieved using gdl.hpp's - node_iterator) - - See also size() - - @return: the number of visible nodes - -ida_graph.mutable_graph_t.npred (method) - npred(self, b) -> int - - @param b: int - -ida_graph.mutable_graph_t.nsucc (method) - nsucc(self, b) -> int - - @param b: int - -ida_graph.mutable_graph_t.pred (method) - pred(self, b, i) -> int - - @param b: int - @param i: int - -ida_graph.mutable_graph_t.predset (method) - predset(self, b) -> intvec_t const & - - @param b: int - -ida_graph.mutable_graph_t.redo_layout (method) - redo_layout(self) -> bool - Recompute the layout, according to the value of 'current_layout'. - - @return: success - -ida_graph.mutable_graph_t.refresh (method) - refresh(self) -> bool - Refresh the graph - - A graph needs refreshing when it's "backing data". E.g., if the number (or - contents) of the objects in the above example, change. - - Let's say the user's plugin ends up finding a 5th piece of scattered data. It - should then add it to its internal list of known objects, and tell IDA that the - graph needs to be refreshed, using refresh_viewer(). This will cause IDA to: - * discard all its internal rendering information, - * call mutable_graph_t::refresh() on the graph so that the user's plugin has a - chance to "sync" the number of nodes & edges that this graph contains, to the - information that the plugin has collected so far - * re-create internal rendering information, and - * repaint the view - - @return: success - -ida_graph.mutable_graph_t.replace_edge (method) - replace_edge(self, i, j, x, y) -> bool - - @param i: int - @param j: int - @param x: int - @param y: int - -ida_graph.mutable_graph_t.reset (method) - reset(self) - -ida_graph.mutable_graph_t.resize (method) - resize(self, n) - Resize the graph to 'n' nodes - - @param n: (C++: int) the new size - -ida_graph.mutable_graph_t.set_custom_layout (method) - set_custom_layout(self) - -ida_graph.mutable_graph_t.set_deleted_node (method) - set_deleted_node(self, node) - - @param node: int - -ida_graph.mutable_graph_t.set_edge (method) - set_edge(self, e, ei) -> bool - - @param e: edge_t - @param ei: edge_info_t const * - -ida_graph.mutable_graph_t.set_graph_groups (method) - set_graph_groups(self) - -ida_graph.mutable_graph_t.set_node_group (method) - set_node_group(self, node, group) - - @param node: int - @param group: int - -ida_graph.mutable_graph_t.set_nrect (method) - set_nrect(self, n, r) -> bool - - @param n: int - @param r: rect_t const & - -ida_graph.mutable_graph_t.size (method) - size(self) -> int - Get the total number of nodes (including group nodes, and including hidden - nodes.) - - See also node_qty() - - @return: the total number of nodes in the graph - -ida_graph.mutable_graph_t.succ (method) - succ(self, b, i) -> int - - @param b: int - @param i: int - -ida_graph.mutable_graph_t.succset (method) - succset(self, b) -> intvec_t const & - - @param b: int - -ida_graph.node_info_t (class) - Proxy of C++ node_info_t class. - -ida_graph.node_info_t.__init__ (method) - __init__(self) -> node_info_t - -ida_graph.node_info_t.bg_color (variable) - background color - -ida_graph.node_info_t.ea (variable) - address - -ida_graph.node_info_t.flags (variable) - flags - -ida_graph.node_info_t.frame_color (variable) - color of enclosing frame - -ida_graph.node_info_t.get_flags_for_valid (method) - get_flags_for_valid(self) -> uint32 - Get combination of Node info flags describing which attributes are valid. - -ida_graph.node_info_t.text (variable) - node contents - -ida_graph.node_info_t.valid_bg_color (method) - valid_bg_color(self) -> bool - Has valid bg_color? - -ida_graph.node_info_t.valid_ea (method) - valid_ea(self) -> bool - Has valid ea? - -ida_graph.node_info_t.valid_flags (method) - valid_flags(self) -> bool - Has valid flags? - -ida_graph.node_info_t.valid_frame_color (method) - valid_frame_color(self) -> bool - Has valid frame_color? - -ida_graph.node_info_t.valid_text (method) - valid_text(self) -> bool - Has non-empty text? - -ida_graph.node_layout_t (class) - Proxy of C++ qvector< rect_t > class. - -ida_graph.node_layout_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< rect_t > const & - -ida_graph.node_layout_t.__getitem__ (method) - __getitem__(self, i) -> rect_t - - @param i: size_t - -ida_graph.node_layout_t.__init__ (method) - __init__(self) -> node_layout_t - __init__(self, x) -> node_layout_t - - @param x: qvector< rect_t > const & - -ida_graph.node_layout_t.__len__ (method) - __len__(self) -> size_t - -ida_graph.node_layout_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< rect_t > const & - -ida_graph.node_layout_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: rect_t const & - -ida_graph.node_layout_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: rect_t const & - -ida_graph.node_layout_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: rect_t const & - -ida_graph.node_layout_t.at (method) - at(self, _idx) -> rect_t - - @param _idx: size_t - -ida_graph.node_layout_t.begin (method) - begin(self) -> rect_t - -ida_graph.node_layout_t.capacity (method) - capacity(self) -> size_t - -ida_graph.node_layout_t.clear (method) - clear(self) - -ida_graph.node_layout_t.empty (method) - empty(self) -> bool - -ida_graph.node_layout_t.end (method) - end(self) -> rect_t - -ida_graph.node_layout_t.erase (method) - erase(self, it) -> rect_t - - @param it: qvector< rect_t >::iterator - - erase(self, first, last) -> rect_t - - @param first: qvector< rect_t >::iterator - @param last: qvector< rect_t >::iterator - -ida_graph.node_layout_t.extract (method) - extract(self) -> rect_t - -ida_graph.node_layout_t.find (method) - find(self, x) -> rect_t - - @param x: rect_t const & - -ida_graph.node_layout_t.grow (method) - grow(self, x=rect_t()) - - @param x: rect_t const & - -ida_graph.node_layout_t.has (method) - has(self, x) -> bool - - @param x: rect_t const & - -ida_graph.node_layout_t.inject (method) - inject(self, s, len) - - @param s: rect_t * - @param len: size_t - -ida_graph.node_layout_t.insert (method) - insert(self, it, x) -> rect_t - - @param it: qvector< rect_t >::iterator - @param x: rect_t const & - -ida_graph.node_layout_t.pop_back (method) - pop_back(self) - -ida_graph.node_layout_t.push_back (method) - push_back(self, x) - - @param x: rect_t const & - - push_back(self) -> rect_t - -ida_graph.node_layout_t.qclear (method) - qclear(self) - -ida_graph.node_layout_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_graph.node_layout_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: rect_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_graph.node_layout_t.size (method) - size(self) -> size_t - -ida_graph.node_layout_t.swap (method) - swap(self, r) - - @param r: qvector< rect_t > & - -ida_graph.node_layout_t.truncate (method) - truncate(self) - -ida_graph.node_ordering_t (class) - Proxy of C++ node_ordering_t class. - -ida_graph.node_ordering_t.__init__ (method) - __init__(self) -> node_ordering_t - -ida_graph.node_ordering_t.clear (method) - clear(self) - -ida_graph.node_ordering_t.clr (method) - clr(self, _node) -> bool - - @param _node: int - -ida_graph.node_ordering_t.node (method) - node(self, _order) -> int - - @param _order: size_t - -ida_graph.node_ordering_t.order (method) - order(self, _node) -> int - - @param _node: int - -ida_graph.node_ordering_t.resize (method) - resize(self, n) - - @param n: int - -ida_graph.node_ordering_t.set (method) - set(self, _node, num) - - @param _node: int - @param num: int - -ida_graph.node_ordering_t.size (method) - size(self) -> size_t - -ida_graph.point_t (class) - Proxy of C++ point_t class. - -ida_graph.point_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: point_t const & - -ida_graph.point_t.__init__ (method) - __init__(self) -> point_t - __init__(self, _x, _y) -> point_t - - @param _x: int - @param _y: int - -ida_graph.point_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: point_t const & - -ida_graph.point_t.add (method) - add(self, r) -> point_t - - @param r: point_t const & - -ida_graph.point_t.negate (method) - negate(self) - -ida_graph.point_t.sub (method) - sub(self, r) -> point_t - - @param r: point_t const & - -ida_graph.pointseq_t (class) - Proxy of C++ pointseq_t class. - -ida_graph.pointseq_t.__init__ (method) - __init__(self) -> pointseq_t - -ida_graph.pointvec_t (class) - Proxy of C++ qvector< point_t > class. - -ida_graph.pointvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< point_t > const & - -ida_graph.pointvec_t.__getitem__ (method) - __getitem__(self, i) -> point_t - - @param i: size_t - -ida_graph.pointvec_t.__init__ (method) - __init__(self) -> pointvec_t - __init__(self, x) -> pointvec_t - - @param x: qvector< point_t > const & - -ida_graph.pointvec_t.__len__ (method) - __len__(self) -> size_t - -ida_graph.pointvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< point_t > const & - -ida_graph.pointvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: point_t const & - -ida_graph.pointvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: point_t const & - -ida_graph.pointvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: point_t const & - -ida_graph.pointvec_t.at (method) - at(self, _idx) -> point_t - - @param _idx: size_t - -ida_graph.pointvec_t.begin (method) - begin(self) -> point_t - -ida_graph.pointvec_t.capacity (method) - capacity(self) -> size_t - -ida_graph.pointvec_t.clear (method) - clear(self) - -ida_graph.pointvec_t.empty (method) - empty(self) -> bool - -ida_graph.pointvec_t.end (method) - end(self) -> point_t - -ida_graph.pointvec_t.erase (method) - erase(self, it) -> point_t - - @param it: qvector< point_t >::iterator - - erase(self, first, last) -> point_t - - @param first: qvector< point_t >::iterator - @param last: qvector< point_t >::iterator - -ida_graph.pointvec_t.extract (method) - extract(self) -> point_t - -ida_graph.pointvec_t.find (method) - find(self, x) -> point_t - - @param x: point_t const & - -ida_graph.pointvec_t.grow (method) - grow(self, x=point_t()) - - @param x: point_t const & - -ida_graph.pointvec_t.has (method) - has(self, x) -> bool - - @param x: point_t const & - -ida_graph.pointvec_t.inject (method) - inject(self, s, len) - - @param s: point_t * - @param len: size_t - -ida_graph.pointvec_t.insert (method) - insert(self, it, x) -> point_t - - @param it: qvector< point_t >::iterator - @param x: point_t const & - -ida_graph.pointvec_t.pop_back (method) - pop_back(self) - -ida_graph.pointvec_t.push_back (method) - push_back(self, x) - - @param x: point_t const & - - push_back(self) -> point_t - -ida_graph.pointvec_t.qclear (method) - qclear(self) - -ida_graph.pointvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_graph.pointvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: point_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_graph.pointvec_t.size (method) - size(self) -> size_t - -ida_graph.pointvec_t.swap (method) - swap(self, r) - - @param r: qvector< point_t > & - -ida_graph.pointvec_t.truncate (method) - truncate(self) - -ida_graph.pyg_close (function) - pyg_close(_self) - - @param self: PyObject * - -ida_graph.pyg_select_node (function) - pyg_select_node(_self, nid) - - @param self: PyObject * - @param nid: int - -ida_graph.pyg_show (function) - pyg_show(_self) -> bool - - @param self: PyObject * - -ida_graph.rect_t (class) - Proxy of C++ rect_t class. - -ida_graph.rect_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: rect_t const & - -ida_graph.rect_t.__init__ (method) - __init__(self) -> rect_t - __init__(self, l, t, r, b) -> rect_t - - @param l: int - @param t: int - @param r: int - @param b: int - - __init__(self, p0, p1) -> rect_t - - @param p0: point_t const & - @param p1: point_t const & - -ida_graph.rect_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: rect_t const & - -ida_graph.rect_t.area (method) - area(self) -> int - -ida_graph.rect_t.bottomright (method) - bottomright(self) -> point_t - -ida_graph.rect_t.center (method) - center(self) -> point_t - -ida_graph.rect_t.contains (method) - contains(self, p) -> bool - - @param p: point_t const & - -ida_graph.rect_t.empty (method) - empty(self) -> bool - -ida_graph.rect_t.grow (method) - grow(self, delta) - - @param delta: int - -ida_graph.rect_t.height (method) - height(self) -> int - -ida_graph.rect_t.intersect (method) - intersect(self, r) - - @param r: rect_t const & - -ida_graph.rect_t.is_intersection_empty (method) - is_intersection_empty(self, r) -> bool - - @param r: rect_t const & - -ida_graph.rect_t.make_union (method) - make_union(self, r) - - @param r: rect_t const & - -ida_graph.rect_t.move_by (method) - move_by(self, p) - - @param p: point_t const & - -ida_graph.rect_t.move_to (method) - move_to(self, p) - - @param p: point_t const & - -ida_graph.rect_t.topleft (method) - topleft(self) -> point_t - -ida_graph.rect_t.width (method) - width(self) -> int - -ida_graph.refresh_viewer (function) - refresh_viewer(gv) - Redraw the graph in the given view. - - @param gv: (C++: graph_viewer_t *) - -ida_graph.row_info_t (class) - Proxy of C++ row_info_t class. - -ida_graph.row_info_t.__init__ (method) - __init__(self) -> row_info_t - -ida_graph.row_info_t.bottom (variable) - bottom y coord of the row - -ida_graph.row_info_t.height (method) - height(self) -> int - -ida_graph.row_info_t.nodes (variable) - list of nodes at the row - -ida_graph.row_info_t.top (variable) - top y coord of the row - -ida_graph.screen_graph_selection_base_t (class) - Proxy of C++ qvector< selection_item_t > class. - -ida_graph.screen_graph_selection_base_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< selection_item_t > const & - -ida_graph.screen_graph_selection_base_t.__getitem__ (method) - __getitem__(self, i) -> selection_item_t - - @param i: size_t - -ida_graph.screen_graph_selection_base_t.__init__ (method) - __init__(self) -> screen_graph_selection_base_t - __init__(self, x) -> screen_graph_selection_base_t - - @param x: qvector< selection_item_t > const & - -ida_graph.screen_graph_selection_base_t.__len__ (method) - __len__(self) -> size_t - -ida_graph.screen_graph_selection_base_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< selection_item_t > const & - -ida_graph.screen_graph_selection_base_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: selection_item_t const & - -ida_graph.screen_graph_selection_base_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: selection_item_t const & - -ida_graph.screen_graph_selection_base_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: selection_item_t const & - -ida_graph.screen_graph_selection_base_t.at (method) - at(self, _idx) -> selection_item_t - - @param _idx: size_t - -ida_graph.screen_graph_selection_base_t.begin (method) - begin(self) -> selection_item_t - -ida_graph.screen_graph_selection_base_t.capacity (method) - capacity(self) -> size_t - -ida_graph.screen_graph_selection_base_t.clear (method) - clear(self) - -ida_graph.screen_graph_selection_base_t.empty (method) - empty(self) -> bool - -ida_graph.screen_graph_selection_base_t.end (method) - end(self) -> selection_item_t - -ida_graph.screen_graph_selection_base_t.erase (method) - erase(self, it) -> selection_item_t - - @param it: qvector< selection_item_t >::iterator - - erase(self, first, last) -> selection_item_t - - @param first: qvector< selection_item_t >::iterator - @param last: qvector< selection_item_t >::iterator - -ida_graph.screen_graph_selection_base_t.extract (method) - extract(self) -> selection_item_t - -ida_graph.screen_graph_selection_base_t.find (method) - find(self, x) -> selection_item_t - - @param x: selection_item_t const & - -ida_graph.screen_graph_selection_base_t.grow (method) - grow(self, x=selection_item_t()) - - @param x: selection_item_t const & - -ida_graph.screen_graph_selection_base_t.has (method) - has(self, x) -> bool - - @param x: selection_item_t const & - -ida_graph.screen_graph_selection_base_t.inject (method) - inject(self, s, len) - - @param s: selection_item_t * - @param len: size_t - -ida_graph.screen_graph_selection_base_t.insert (method) - insert(self, it, x) -> selection_item_t - - @param it: qvector< selection_item_t >::iterator - @param x: selection_item_t const & - -ida_graph.screen_graph_selection_base_t.pop_back (method) - pop_back(self) - -ida_graph.screen_graph_selection_base_t.push_back (method) - push_back(self, x) - - @param x: selection_item_t const & - - push_back(self) -> selection_item_t - -ida_graph.screen_graph_selection_base_t.qclear (method) - qclear(self) - -ida_graph.screen_graph_selection_base_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_graph.screen_graph_selection_base_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: selection_item_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_graph.screen_graph_selection_base_t.size (method) - size(self) -> size_t - -ida_graph.screen_graph_selection_base_t.swap (method) - swap(self, r) - - @param r: qvector< selection_item_t > & - -ida_graph.screen_graph_selection_base_t.truncate (method) - truncate(self) - -ida_graph.screen_graph_selection_t (class) - Proxy of C++ screen_graph_selection_t class. - -ida_graph.screen_graph_selection_t.__init__ (method) - __init__(self) -> screen_graph_selection_t - -ida_graph.screen_graph_selection_t.add (method) - add(self, s) - - @param s: screen_graph_selection_t const & - -ida_graph.screen_graph_selection_t.add_node (method) - add_node(self, node) - - @param node: int - -ida_graph.screen_graph_selection_t.add_point (method) - add_point(self, e, idx) - - @param e: edge_t - @param idx: int - -ida_graph.screen_graph_selection_t.del_node (method) - del_node(self, node) - - @param node: int - -ida_graph.screen_graph_selection_t.del_point (method) - del_point(self, e, idx) - - @param e: edge_t - @param idx: int - -ida_graph.screen_graph_selection_t.has (method) - has(self, item) -> bool - - @param item: selection_item_t const & - -ida_graph.screen_graph_selection_t.items_count (method) - items_count(self, look_for_nodes) -> size_t - - @param look_for_nodes: bool - -ida_graph.screen_graph_selection_t.nodes_count (method) - nodes_count(self) -> size_t - -ida_graph.screen_graph_selection_t.points_count (method) - points_count(self) -> size_t - -ida_graph.screen_graph_selection_t.sub (method) - sub(self, s) - - @param s: screen_graph_selection_t const & - -ida_graph.selection_item_t (class) - Proxy of C++ selection_item_t class. - -ida_graph.selection_item_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: selection_item_t const & - -ida_graph.selection_item_t.__init__ (method) - __init__(self) -> selection_item_t - __init__(self, n) -> selection_item_t - - @param n: int - - __init__(self, _elp) -> selection_item_t - - @param _elp: edge_layout_point_t & - - __init__(self, e, idx) -> selection_item_t - - @param e: edge_t - @param idx: int - -ida_graph.selection_item_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: selection_item_t const & - -ida_graph.selection_item_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: selection_item_t const & - -ida_graph.selection_item_t.compare (method) - compare(self, r) -> int - - @param r: selection_item_t const & - -ida_graph.selection_item_t.elp (variable) - edge layout point (is_node = false) - -ida_graph.selection_item_t.is_node (variable) - represents a selected node? - -ida_graph.selection_item_t.node (variable) - node number (is_node = true) - -ida_graph.set_node_info (function) - set_node_info(gid, node, ni, flags) - Set node info. - - @param gid: (C++: graph_id_t) id of desired graph - @param node: (C++: int) node number - @param ni: (C++: const node_info_t &) node info to use - @param flags: (C++: uint32) combination of Node info flags, identifying which fields of 'ni' - will be used - -ida_graph.set_viewer_graph (function) - 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 *) - -ida_graph.user_graph_place_t (class) - Proxy of C++ user_graph_place_t class. - -ida_graph.user_graph_place_t.__init__ (method) - -ida_graph.viewer_attach_menu_item (function) - 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 *) graph viewer - @param name: (C++: const char *) action name - @return: success - -ida_graph.viewer_center_on (function) - 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 (function) - 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 graph - * for each group_crinfo_t, attempt creating group in that new graph - * if all were successful, animate to that new graph. - @note: 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 &) groups_crinfos_t const & - -ida_graph.viewer_del_node_info (function) - 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 (function) - viewer_delete_groups(gv, groups, new_current=-1) -> bool - Wrapper around mutable_graph_t::delete_group. This function will: - * clone the current graph - * attempt deleting the groups in that new graph - * if successful, animate to that new graph. - - @param gv: (C++: graph_viewer_t *) - @param groups: (C++: const intvec_t &) intvec_t const & - @param new_current: (C++: int) - -ida_graph.viewer_fit_window (function) - viewer_fit_window(gv) - Fit graph viewer to its parent form. - - @param gv: (C++: graph_viewer_t *) - -ida_graph.viewer_get_curnode (function) - 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 (function) - 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 (function) - 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 (function) - 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 (function) - 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 *) graph_location_info_t const * - @param flags: (C++: uint32) - -ida_graph.viewer_set_groups_visibility (function) - viewer_set_groups_visibility(gv, groups, expand, new_current=-1) -> bool - Wrapper around mutable_graph_t::change_visibility. This function will: - * clone the current graph - * attempt changing visibility of the groups in that new graph - * if successful, animate to that new graph. - - @param gv: (C++: graph_viewer_t *) - @param groups: (C++: const intvec_t &) intvec_t const & - @param expand: (C++: bool) - @param new_current: (C++: int) - -ida_graph.viewer_set_node_info (function) - 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 &) node_info_t const & - @param flags: (C++: uint32) - -ida_graph.viewer_set_titlebar_height (function) - 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_ida (module) - Contains the inf structure definition and some functions common to the whole IDA - project. - - The inf structure is saved in the database and contains information specific to - the current program being disassembled. Initially it is filled with values from - ida.cfg. - - Although it is not a good idea to change values in inf structure (because you - will overwrite values taken from ida.cfg), you are allowed to do it if you feel - it necessary. - -ida_ida.ABI_8ALIGN4 (variable) - 4 byte alignment for 8byte scalars (__int64/double) inside structures? - -ida_ida.ABI_BIGARG_ALIGN (variable) - use natural type alignment for argument if the alignment exceeds native word - size. (e.g. __int64 argument should be 8byte aligned on some 32bit platforms) - -ida_ida.ABI_GCC_LAYOUT (variable) - use gcc layout for udts (used for mingw) - -ida_ida.ABI_HARD_FLOAT (variable) - use the floating-point register set - -ida_ida.ABI_HUGEARG_ALIGN (variable) - 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. this bit is not used by ida yet - -ida_ida.ABI_MAP_STKARGS (variable) - register arguments are mapped to stack area (and consume stack slots) - -ida_ida.ABI_PACK_STKARGS (variable) - do not align stack arguments to stack slots - -ida_ida.ABI_SET_BY_USER (variable) - compiler/abi were set by user flag and require SETCOMP_BY_USER flag to be - changed - -ida_ida.ABI_STACK_LDBL (variable) - long double arguments are passed on stack - -ida_ida.ABI_STACK_VARARGS (variable) - varargs are always passed on stack (even when there are free registers) - -ida_ida.AF2_DOEH (variable) - Handle EH information. - -ida_ida.AF2_DORTTI (variable) - Handle RTTI information. - -ida_ida.AF2_MACRO (variable) - Try to combine several instructions into a macro instruction - -ida_ida.AF2_MERGESTR (variable) - Merge string literals created using data xrefs - -ida_ida.AF_ANORET (variable) - Perform 'no-return' analysis. - -ida_ida.AF_CHKUNI (variable) - Check for unicode strings. - -ida_ida.AF_CODE (variable) - Trace execution flow. - -ida_ida.AF_DATOFF (variable) - Automatically convert data to offsets. - -ida_ida.AF_DOCODE (variable) - Coagulate code segs at the final pass. - -ida_ida.AF_DODATA (variable) - Coagulate data segs at the final pass. - -ida_ida.AF_DREFOFF (variable) - Create offset if data xref to seg32 exists. - -ida_ida.AF_FINAL (variable) - Final pass of analysis. - -ida_ida.AF_FIXUP (variable) - Create offsets and segments using fixup info. - -ida_ida.AF_FLIRT (variable) - Use flirt signatures. - -ida_ida.AF_FTAIL (variable) - Create function tails. - -ida_ida.AF_HFLIRT (variable) - Automatically hide library functions. - -ida_ida.AF_IMMOFF (variable) - Convert 32bit instruction operand to offset. - -ida_ida.AF_JFUNC (variable) - Rename jump functions as j_... - -ida_ida.AF_JUMPTBL (variable) - Locate and create jump tables. - -ida_ida.AF_LVAR (variable) - Create stack variables. - -ida_ida.AF_MARKCODE (variable) - Mark typical code sequences as code. - -ida_ida.AF_MEMFUNC (variable) - Try to guess member function types. - -ida_ida.AF_NULLSUB (variable) - Rename empty functions as nullsub_... - -ida_ida.AF_PROC (variable) - Create functions if call is present. - -ida_ida.AF_PROCPTR (variable) - Create function if data xref data->code32 exists. - -ida_ida.AF_PURDAT (variable) - Control flow to data segment is ignored. - -ida_ida.AF_REGARG (variable) - Propagate register argument information. - -ida_ida.AF_SIGCMT (variable) - Append a signature name comment for recognized anonymous library functions. - -ida_ida.AF_SIGMLT (variable) - Allow recognition of several copies of the same function. - -ida_ida.AF_STKARG (variable) - Propagate stack argument information. - -ida_ida.AF_STRLIT (variable) - Create string literal if data xref exists. - -ida_ida.AF_TRACE (variable) - Trace stack pointer. - -ida_ida.AF_TRFUNC (variable) - Truncate functions upon code deletion. - -ida_ida.AF_UNK (variable) - Delete instructions with no xrefs. - -ida_ida.AF_USED (variable) - Analyze and create all xrefs. - -ida_ida.AF_VERSP (variable) - Perform full SP-analysis. ( processor_t::verify_sp) - -ida_ida.DEMNAM_CMNT (variable) - display demangled names as comments - -ida_ida.DEMNAM_FIRST (variable) - override type info - -ida_ida.DEMNAM_GCC3 (variable) - assume gcc3 names (valid for gnu compiler) - -ida_ida.DEMNAM_MASK (variable) - mask for name form - -ida_ida.DEMNAM_NAME (variable) - display demangled names as regular names - -ida_ida.DEMNAM_NONE (variable) - don't display demangled names - -ida_ida.IDAINFO_TAG_SIZE (variable) - The database parameters. This structure is kept in the ida database. It contains - the essential parameters for the current program - -ida_ida.IDB_COMPRESSED (variable) - compress & pack database components - -ida_ida.IDB_PACKED (variable) - pack database components into .idb - -ida_ida.IDB_UNPACKED (variable) - leave database components unpacked - -ida_ida.INFFL_ALLASM (variable) - may use constructs not supported by the target assembler - -ida_ida.INFFL_AUTO (variable) - Autoanalysis is enabled? - -ida_ida.INFFL_CHKOPS (variable) - check manual operands? (unused) - -ida_ida.INFFL_GRAPH_VIEW (variable) - currently using graph options ( text_options_t::graph) - -ida_ida.INFFL_LOADIDC (variable) - loading an idc file that contains database info - -ida_ida.INFFL_NMOPS (variable) - allow non-matched operands? (unused) - -ida_ida.INFFL_NOUSER (variable) - do not store user info in the database - -ida_ida.INFFL_READONLY (variable) - (internal) temporary interdiction to modify the database - -ida_ida.INF_ABINAME (variable) - ABI name (processor specific) - -ida_ida.INF_ARCHIVE_PATH (variable) - archive file path - -ida_ida.INF_CRC32 (variable) - input file crc32 - -ida_ida.INF_CTIME (variable) - database creation timestamp - -ida_ida.INF_C_MACROS (variable) - C predefined macros. - -ida_ida.INF_DBG_BINPATHS (variable) - unused (20 indexes) - -ida_ida.INF_DUALOP_GRAPH (variable) - Graph text representation options. - -ida_ida.INF_DUALOP_TEXT (variable) - Text text representation options. - -ida_ida.INF_ELAPSED (variable) - seconds database stayed open - -ida_ida.INF_FILE_FORMAT_NAME (variable) - file format name for loader modules - -ida_ida.INF_FSIZE (variable) - input file size - -ida_ida.INF_GROUPS (variable) - segment group information (see init_groups()) - -ida_ida.INF_H_PATH (variable) - C header path. - -ida_ida.INF_IDA_VERSION (variable) - version of ida which created the database - -ida_ida.INF_IDSNODE (variable) - ids modnode id (for import_module) - -ida_ida.INF_IMAGEBASE (variable) - image base - -ida_ida.INF_INCLUDE (variable) - assembler include file name - -ida_ida.INF_INITIAL_VERSION (variable) - initial version of database - -ida_ida.INF_MD5 (variable) - MD5 of the input file. - -ida_ida.INF_NOPENS (variable) - how many times the database is opened - -ida_ida.INF_NOTEPAD (variable) - notepad blob, occupies 1000 indexes (1MB of text) - -ida_ida.INF_OUTFILEENC (variable) - output file encoding index - -ida_ida.INF_PROBLEMS (variable) - problem lists - -ida_ida.INF_SELECTORS (variable) - 2..63 are for selector_t blob (see init_selectors()) - -ida_ida.INF_SHA256 (variable) - SHA256 of the input file. - -ida_ida.INF_SRCDBG_PATHS (variable) - source debug paths, occupies 20 indexes - -ida_ida.INF_SRCDBG_UNDESIRED (variable) - user-closed source files, occupies 20 indexes - -ida_ida.INF_STR_ENCODINGS (variable) - a list of encodings for the program strings - -ida_ida.LFLG_64BIT (variable) - 64-bit program? - -ida_ida.LFLG_COMPRESS (variable) - compress the database? - -ida_ida.LFLG_DBG_NOPATH (variable) - do not store input full path in debugger process options - -ida_ida.LFLG_FLAT_OFF32 (variable) - treat REF_OFF32 as 32-bit offset for 16bit segments (otherwise try SEG16:OFF16) - -ida_ida.LFLG_IS_DLL (variable) - Is dynamic library? - -ida_ida.LFLG_KERNMODE (variable) - is kernel mode binary? - -ida_ida.LFLG_MSF (variable) - Byte order: is MSB first? - -ida_ida.LFLG_PACK (variable) - pack the database? - -ida_ida.LFLG_PC_FLAT (variable) - 32-bit program (or higher)? - -ida_ida.LFLG_PC_FPP (variable) - decode floating point processor instructions? - -ida_ida.LFLG_SNAPSHOT (variable) - memory snapshot was taken? - -ida_ida.LFLG_WIDE_HBF (variable) - Bit order of wide bytes: high byte first? (wide bytes: processor_t::dnbits > 8) - -ida_ida.LMT_EMPTY (variable) - empty lines at the end of basic blocks - -ida_ida.LMT_THICK (variable) - thick borders - -ida_ida.LMT_THIN (variable) - thin borders - -ida_ida.LN_AUTO (variable) - include autogenerated names - -ida_ida.LN_NORMAL (variable) - include normal names - -ida_ida.LN_PUBLIC (variable) - include public names - -ida_ida.LN_WEAK (variable) - include weak names - -ida_ida.OFLG_GEN_ASSUME (variable) - Generate 'assume' directives? - -ida_ida.OFLG_GEN_NULL (variable) - Generate empty lines? - -ida_ida.OFLG_GEN_ORG (variable) - Generate 'org' directives? - -ida_ida.OFLG_GEN_TRYBLKS (variable) - Generate try/catch directives? - -ida_ida.OFLG_LZERO (variable) - generate leading zeroes in numbers - -ida_ida.OFLG_PREF_SEG (variable) - line prefixes with segment name? - -ida_ida.OFLG_SHOW_AUTO (variable) - Display autoanalysis indicator? - -ida_ida.OFLG_SHOW_PREF (variable) - Show line prefixes? - -ida_ida.OFLG_SHOW_VOID (variable) - Display void marks? - -ida_ida.PREF_FNCOFF (variable) - show function offsets? - -ida_ida.PREF_PFXTRUNC (variable) - truncate instruction bytes if they would need more than 1 line - -ida_ida.PREF_SEGADR (variable) - show segment addresses? - -ida_ida.PREF_STACK (variable) - show stack pointer? - -ida_ida.SCF_ALLCMT (variable) - comment all lines? - -ida_ida.SCF_LINNUM (variable) - show source line numbers - -ida_ida.SCF_NOCMT (variable) - no comments at all - -ida_ida.SCF_RPTCMT (variable) - show repeatable comments? - -ida_ida.SCF_SHHID_FUNC (variable) - show hidden functions - -ida_ida.SCF_SHHID_ITEM (variable) - show hidden instructions - -ida_ida.SCF_SHHID_SEGM (variable) - show hidden segments - -ida_ida.SCF_TESTMODE (variable) - testida.idc is running - -ida_ida.STRF_AUTO (variable) - names have 'autogenerated' bit? - -ida_ida.STRF_COMMENT (variable) - generate auto comment for string references? - -ida_ida.STRF_GEN (variable) - generate names? - -ida_ida.STRF_SAVECASE (variable) - preserve case of strings for identifiers - -ida_ida.STRF_SERIAL (variable) - generate serial names? - -ida_ida.STRF_UNICODE (variable) - unicode strings are present? - -ida_ida.STT_CUR (variable) - use current storage type (may be used only as a function argument) - -ida_ida.STT_DBG (variable) - memory map: temporary debugger storage. used internally - -ida_ida.STT_MM (variable) - memory map: sparse storage. useful for huge objects - -ida_ida.STT_VA (variable) - regular storage: virtual arrays, an explicit flag for each byte - -ida_ida.SW_SEGXRF (variable) - show segments in xrefs? - -ida_ida.SW_XRFFNC (variable) - show function offsets? - -ida_ida.SW_XRFMRK (variable) - show xref type marks? - -ida_ida.SW_XRFVAL (variable) - show xref values? (otherwise-"...") - -ida_ida.UA_MAXOP (variable) - max number of operands allowed for an instruction - -ida_ida.VLD_AUTO_REPAIR (variable) - automatically repair the database - -ida_ida.VLD_DIALOG (variable) - ask user to repair (this bit is mutually exclusive with VLD_AUTO_REPAIR) - -ida_ida.VLD_SILENT (variable) - no messages to the output window - -ida_ida.__make_idainfo_accessors (function) - -ida_ida.__make_idainfo_bound (function) - -ida_ida.__make_idainfo_bound.__func (function) - -ida_ida.__make_idainfo_getter (function) - -ida_ida.__set_module_dynattrs (function) - -ida_ida.__wrap_hooks_callback (function) - -ida_ida.__wrap_hooks_callback.__wrapper (function) - -ida_ida.calc_default_idaplace_flags (function) - calc_default_idaplace_flags() -> int - Get default disassembly line options. - -ida_ida.compiler_info_t (class) - Proxy of C++ compiler_info_t class. - -ida_ida.compiler_info_t.__init__ (method) - __init__(self) -> compiler_info_t - -ida_ida.compiler_info_t.cm (variable) - memory model and calling convention (see CM) - -ida_ida.compiler_info_t.defalign (variable) - default alignment for structures - -ida_ida.compiler_info_t.id (variable) - compiler id (see Compiler IDs) - -ida_ida.compiler_info_t.size_b (variable) - sizeof(bool) - -ida_ida.compiler_info_t.size_e (variable) - sizeof(enum) - -ida_ida.compiler_info_t.size_i (variable) - sizeof(int) - -ida_ida.compiler_info_t.size_l (variable) - long - -ida_ida.compiler_info_t.size_ldbl (variable) - longdouble (if different from processor_t::tbyte_size) - -ida_ida.compiler_info_t.size_ll (variable) - longlong - -ida_ida.compiler_info_t.size_s (variable) - short - -ida_ida.delinf (function) - delinf(tag) -> bool - Undefine a program specific information - - @param tag: (C++: inftag_t) one of inftag_t constants - @return: success - -ida_ida.f_AIXAR (variable) - AIX ar library. - -ida_ida.f_AOUT (variable) - Linux a.out (AOUT) - -ida_ida.f_AR (variable) - ar library - -ida_ida.f_BIN (variable) - Binary File. - -ida_ida.f_COFF (variable) - Common Object File Format (COFF) - -ida_ida.f_COM (variable) - MS DOS COM File. - -ida_ida.f_COM_old (variable) - MS DOS COM File. - -ida_ida.f_DRV (variable) - MS DOS Driver. - -ida_ida.f_ELF (variable) - Executable and Linkable Format (ELF) - -ida_ida.f_EXE (variable) - MS DOS EXE File. - -ida_ida.f_EXE_old (variable) - MS DOS EXE File. - -ida_ida.f_HEX (variable) - Intel Hex Object File. - -ida_ida.f_LE (variable) - Linear Executable (LE) - -ida_ida.f_LOADER (variable) - file is loaded using LOADER DLL - -ida_ida.f_LX (variable) - Linear Executable (LX) - -ida_ida.f_MACHO (variable) - Mac OS X Mach-O. - -ida_ida.f_MEX (variable) - MOS Technology Hex Object File. - -ida_ida.f_NLM (variable) - Netware Loadable Module (NLM) - -ida_ida.f_OMF (variable) - Object Module Format. - -ida_ida.f_OMFLIB (variable) - Library of OMF Modules. - -ida_ida.f_PE (variable) - Portable Executable (PE) - -ida_ida.f_PRC (variable) - PalmPilot program file. - -ida_ida.f_PSXOBJ (variable) - Sony Playstation PSX object file. - -ida_ida.f_SREC (variable) - Motorola SREC (S-record) - -ida_ida.f_W32RUN (variable) - Watcom DOS32 Extender (W32RUN) - -ida_ida.f_WIN (variable) - New Executable (NE) - -ida_ida.f_ZIP (variable) - ZIP file (this file is never loaded to IDA database) - -ida_ida.get_dbctx_id (function) - get_dbctx_id() -> ssize_t - Get the current database context ID - - @return: the database context ID, or -1 if no current database - -ida_ida.get_dbctx_qty (function) - get_dbctx_qty() -> size_t - Get number of database contexts - - @return: number of database contexts - -ida_ida.getinf_str (function) - getinf_str(tag) -> str - Get program specific information (a non-scalar value) - - @param tag: (C++: inftag_t) one of inftag_t constants - @return: number of bytes stored in the buffer (<0 - not defined) - -ida_ida.idainfo (class) - Proxy of C++ idainfo class. - -ida_ida.idainfo.__init__ (method) - -ida_ida.idainfo._get_lflags (method) - _get_lflags(self) -> uint32 - -ida_ida.idainfo._set_lflags (method) - _set_lflags(self, _f) - - Parameters - ---------- - _f: uint32 - -ida_ida.idainfo.abibits (variable) - ABI features. Depends on info returned by get_abi_name() Processor modules may - modify them in set_compiler - -ida_ida.idainfo.af (variable) - Analysis flags - -ida_ida.idainfo.af2 (variable) - Analysis flags 2 - -ida_ida.idainfo.appcall_options (variable) - appcall options, see idd.hpp - -ida_ida.idainfo.apptype (variable) - Application type bit definitions in libfuncs.hpp - -ida_ida.idainfo.asmtype (variable) - target assembler number - -ida_ida.idainfo.baseaddr (variable) - remaining 28 bits are reserved - - base address of the program (paragraphs) - -ida_ida.idainfo.bin_prefix_size (variable) - Number of instruction bytes (opcodes) to show in line prefix. - -ida_ida.idainfo.cc (variable) - COMPILER. - - Target compiler - -ida_ida.idainfo.cmt_indent (variable) - Indentation for comments. - -ida_ida.idainfo.database_change_count (variable) - incremented after each byte and regular segment modifications - -ida_ida.idainfo.datatypes (variable) - data types allowed in data carousel - -ida_ida.idainfo.demnames (variable) - Demangled name flags - -ida_ida.idainfo.filetype (variable) - The input file type. - -ida_ida.idainfo.get_abiname (method) - get_abiname(self) -> qstring - -ida_ida.idainfo.highoff (variable) - High limit for offsets (used in calculation of 'void' operands) - -ida_ida.idainfo.indent (variable) - DISASSEMBLY LISTING DETAILS. - - Indentation for instructions - -ida_ida.idainfo.lenxref (variable) - max length of line with xrefs - -ida_ida.idainfo.lflags (variable) - Misc. database flags - -ida_ida.idainfo.listnames (variable) - Name list options - -ida_ida.idainfo.long_demnames (variable) - long form of demangled names see demangle.h for definitions - -ida_ida.idainfo.lowoff (variable) - Low limit for offsets (used in calculation of 'void' operands) - -ida_ida.idainfo.main (variable) - address of main() - -ida_ida.idainfo.margin (variable) - max length of data lines - -ida_ida.idainfo.max_autoname_len (variable) - NAMES. - - max autogenerated name length (without zero byte) - -ida_ida.idainfo.max_ea (variable) - maxEA is excluded - -ida_ida.idainfo.maxref (variable) - Max tail for references. - -ida_ida.idainfo.min_ea (variable) - current limits of program - -ida_ida.idainfo.nametype (variable) - Dummy names representation types - -ida_ida.idainfo.omax_ea (variable) - original maxEA (is set after loading the input file) - -ida_ida.idainfo.omin_ea (variable) - original minEA (is set after loading the input file) - -ida_ida.idainfo.ostype (variable) - OS type the program is for bit definitions in libfuncs.hpp - -ida_ida.idainfo.outflags (variable) - output flags - -ida_ida.idainfo.procname (variable) - Name of the current processor (with \0) - -ida_ida.idainfo.refcmtnum (variable) - Number of comment lines to generate for refs to string literals or demangled - names 0 - such comments won't be generated at all - -ida_ida.idainfo.s_cmtflg (variable) - Comment options - -ida_ida.idainfo.s_genflags (variable) - General idainfo flags - -ida_ida.idainfo.s_limiter (variable) - Delimiter options - -ida_ida.idainfo.s_prefflag (variable) - Line prefix options - -ida_ida.idainfo.s_xrefflag (variable) - Xref options - -ida_ida.idainfo.short_demnames (variable) - short form of demangled names - -ida_ida.idainfo.specsegs (variable) - What format do special segments use? 0-unspecified, 4-entries are 4 bytes, 8- - entries are 8 bytes. - -ida_ida.idainfo.start_cs (variable) - selector of the segment with the main entry point - -ida_ida.idainfo.start_ea (variable) - Linear address of program entry point. - -ida_ida.idainfo.start_ip (variable) - IP register value at the start of program execution - -ida_ida.idainfo.start_sp (variable) - SP register value at the start of program execution - -ida_ida.idainfo.start_ss (variable) - selector of the initial stack segment - -ida_ida.idainfo.strlit_break (variable) - string literal line break symbol - -ida_ida.idainfo.strlit_flags (variable) - STRING LITERALS. - - string literal flags - -ida_ida.idainfo.strlit_pref (variable) - prefix for string literal names - -ida_ida.idainfo.strlit_sernum (variable) - serial number - -ida_ida.idainfo.strlit_zeroes (variable) - leading zeroes - -ida_ida.idainfo.strtype (variable) - current ascii string type see nalt.hpp for string types - -ida_ida.idainfo.tag (variable) - 'IDA' - -ida_ida.idainfo.type_xrefnum (variable) - Number of references to generate in the struct & enum windows 0 - xrefs won't be - generated at all - -ida_ida.idainfo.version (variable) - Version of database. - -ida_ida.idainfo.xrefnum (variable) - CROSS REFERENCES. - - Number of references to generate in the disassembly listing 0 - xrefs won't be - generated at all - -ida_ida.idainfo_is_32bit (function) - -ida_ida.inf_abi_set_by_user (function) - inf_abi_set_by_user() -> bool - -ida_ida.inf_allow_non_matched_ops (function) - inf_allow_non_matched_ops() -> bool - -ida_ida.inf_allow_sigmulti (function) - inf_allow_sigmulti() -> bool - -ida_ida.inf_append_sigcmt (function) - inf_append_sigcmt() -> bool - -ida_ida.inf_big_arg_align (function) - inf_big_arg_align(cc) -> bool - - @param cc: cm_t - - inf_big_arg_align() -> bool - -ida_ida.inf_check_manual_ops (function) - inf_check_manual_ops() -> bool - -ida_ida.inf_check_unicode_strlits (function) - inf_check_unicode_strlits() -> bool - -ida_ida.inf_coagulate_code (function) - inf_coagulate_code() -> bool - -ida_ida.inf_coagulate_data (function) - inf_coagulate_data() -> bool - -ida_ida.inf_compress_idb (function) - inf_compress_idb() -> bool - -ida_ida.inf_create_all_xrefs (function) - inf_create_all_xrefs() -> bool - -ida_ida.inf_create_func_from_call (function) - inf_create_func_from_call() -> bool - -ida_ida.inf_create_func_from_ptr (function) - inf_create_func_from_ptr() -> bool - -ida_ida.inf_create_func_tails (function) - inf_create_func_tails() -> bool - -ida_ida.inf_create_jump_tables (function) - inf_create_jump_tables() -> bool - -ida_ida.inf_create_off_on_dref (function) - inf_create_off_on_dref() -> bool - -ida_ida.inf_create_off_using_fixup (function) - inf_create_off_using_fixup() -> bool - -ida_ida.inf_create_strlit_on_xref (function) - inf_create_strlit_on_xref() -> bool - -ida_ida.inf_data_offset (function) - inf_data_offset() -> bool - -ida_ida.inf_dbg_no_store_path (function) - inf_dbg_no_store_path() -> bool - -ida_ida.inf_decode_fpp (function) - inf_decode_fpp() -> bool - -ida_ida.inf_del_no_xref_insns (function) - inf_del_no_xref_insns() -> bool - -ida_ida.inf_final_pass (function) - inf_final_pass() -> bool - -ida_ida.inf_full_sp_ana (function) - inf_full_sp_ana() -> bool - -ida_ida.inf_gen_assume (function) - inf_gen_assume() -> bool - -ida_ida.inf_gen_lzero (function) - inf_gen_lzero() -> bool - -ida_ida.inf_gen_null (function) - inf_gen_null() -> bool - -ida_ida.inf_gen_org (function) - inf_gen_org() -> bool - -ida_ida.inf_gen_tryblks (function) - inf_gen_tryblks() -> bool - -ida_ida.inf_get_abibits (function) - inf_get_abibits() -> uint32 - -ida_ida.inf_get_af (function) - inf_get_af() -> uint32 - -ida_ida.inf_get_af2 (function) - inf_get_af2() -> uint32 - -ida_ida.inf_get_af2_low (function) - inf_get_af2_low() -> ushort - Get/set low 16bit half of inf.af2. - -ida_ida.inf_get_af_high (function) - inf_get_af_high() -> ushort - -ida_ida.inf_get_af_low (function) - inf_get_af_low() -> ushort - Get/set low/high 16bit halves of inf.af. - -ida_ida.inf_get_app_bitness (function) - inf_get_app_bitness() -> uint - -ida_ida.inf_get_appcall_options (function) - inf_get_appcall_options() -> uint32 - -ida_ida.inf_get_apptype (function) - inf_get_apptype() -> ushort - -ida_ida.inf_get_asmtype (function) - inf_get_asmtype() -> uchar - -ida_ida.inf_get_baseaddr (function) - inf_get_baseaddr() -> uval_t - -ida_ida.inf_get_bin_prefix_size (function) - inf_get_bin_prefix_size() -> short - -ida_ida.inf_get_cc (function) - inf_get_cc(out) -> bool - - @param out: compiler_info_t * - -ida_ida.inf_get_cc_cm (function) - inf_get_cc_cm() -> cm_t - -ida_ida.inf_get_cc_defalign (function) - inf_get_cc_defalign() -> uchar - -ida_ida.inf_get_cc_id (function) - inf_get_cc_id() -> comp_t - -ida_ida.inf_get_cc_size_b (function) - inf_get_cc_size_b() -> uchar - -ida_ida.inf_get_cc_size_e (function) - inf_get_cc_size_e() -> uchar - -ida_ida.inf_get_cc_size_i (function) - inf_get_cc_size_i() -> uchar - -ida_ida.inf_get_cc_size_l (function) - inf_get_cc_size_l() -> uchar - -ida_ida.inf_get_cc_size_ldbl (function) - inf_get_cc_size_ldbl() -> uchar - -ida_ida.inf_get_cc_size_ll (function) - inf_get_cc_size_ll() -> uchar - -ida_ida.inf_get_cc_size_s (function) - inf_get_cc_size_s() -> uchar - -ida_ida.inf_get_cmt_indent (function) - inf_get_cmt_indent() -> uchar - -ida_ida.inf_get_cmtflg (function) - inf_get_cmtflg() -> uchar - -ida_ida.inf_get_database_change_count (function) - inf_get_database_change_count() -> uint32 - -ida_ida.inf_get_datatypes (function) - inf_get_datatypes() -> uval_t - -ida_ida.inf_get_demname_form (function) - inf_get_demname_form() -> uchar - Get DEMNAM_MASK bits of #demnames. - -ida_ida.inf_get_demnames (function) - inf_get_demnames() -> uchar - -ida_ida.inf_get_filetype (function) - inf_get_filetype() -> filetype_t - -ida_ida.inf_get_genflags (function) - inf_get_genflags() -> ushort - -ida_ida.inf_get_highoff (function) - inf_get_highoff() -> ea_t - -ida_ida.inf_get_indent (function) - inf_get_indent() -> uchar - -ida_ida.inf_get_lenxref (function) - inf_get_lenxref() -> ushort - -ida_ida.inf_get_lflags (function) - inf_get_lflags() -> uint32 - -ida_ida.inf_get_limiter (function) - inf_get_limiter() -> uchar - -ida_ida.inf_get_listnames (function) - inf_get_listnames() -> uchar - -ida_ida.inf_get_long_demnames (function) - inf_get_long_demnames() -> uint32 - -ida_ida.inf_get_lowoff (function) - inf_get_lowoff() -> ea_t - -ida_ida.inf_get_main (function) - inf_get_main() -> ea_t - -ida_ida.inf_get_margin (function) - inf_get_margin() -> ushort - -ida_ida.inf_get_max_autoname_len (function) - inf_get_max_autoname_len() -> ushort - -ida_ida.inf_get_max_ea (function) - inf_get_max_ea() -> ea_t - -ida_ida.inf_get_maxref (function) - inf_get_maxref() -> uval_t - -ida_ida.inf_get_min_ea (function) - inf_get_min_ea() -> ea_t - -ida_ida.inf_get_nametype (function) - inf_get_nametype() -> char - -ida_ida.inf_get_netdelta (function) - inf_get_netdelta() -> sval_t - -ida_ida.inf_get_omax_ea (function) - inf_get_omax_ea() -> ea_t - -ida_ida.inf_get_omin_ea (function) - inf_get_omin_ea() -> ea_t - -ida_ida.inf_get_ostype (function) - inf_get_ostype() -> ushort - -ida_ida.inf_get_outflags (function) - inf_get_outflags() -> uint32 - -ida_ida.inf_get_pack_mode (function) - inf_get_pack_mode() -> int - -ida_ida.inf_get_prefflag (function) - inf_get_prefflag() -> uchar - -ida_ida.inf_get_privrange (function) - inf_get_privrange(out) -> bool - - @param out: range_t * - - inf_get_privrange() -> range_t - -ida_ida.inf_get_privrange_end_ea (function) - inf_get_privrange_end_ea() -> ea_t - -ida_ida.inf_get_privrange_start_ea (function) - inf_get_privrange_start_ea() -> ea_t - -ida_ida.inf_get_procname (function) - inf_get_procname() -> str - -ida_ida.inf_get_refcmtnum (function) - inf_get_refcmtnum() -> uchar - -ida_ida.inf_get_short_demnames (function) - inf_get_short_demnames() -> uint32 - -ida_ida.inf_get_specsegs (function) - inf_get_specsegs() -> uchar - -ida_ida.inf_get_start_cs (function) - inf_get_start_cs() -> sel_t - -ida_ida.inf_get_start_ea (function) - inf_get_start_ea() -> ea_t - -ida_ida.inf_get_start_ip (function) - inf_get_start_ip() -> ea_t - -ida_ida.inf_get_start_sp (function) - inf_get_start_sp() -> ea_t - -ida_ida.inf_get_start_ss (function) - inf_get_start_ss() -> sel_t - -ida_ida.inf_get_strlit_break (function) - inf_get_strlit_break() -> uchar - -ida_ida.inf_get_strlit_flags (function) - inf_get_strlit_flags() -> uchar - -ida_ida.inf_get_strlit_pref (function) - inf_get_strlit_pref() -> str - -ida_ida.inf_get_strlit_sernum (function) - inf_get_strlit_sernum() -> uval_t - -ida_ida.inf_get_strlit_zeroes (function) - inf_get_strlit_zeroes() -> char - -ida_ida.inf_get_strtype (function) - inf_get_strtype() -> int32 - -ida_ida.inf_get_type_xrefnum (function) - inf_get_type_xrefnum() -> uchar - -ida_ida.inf_get_version (function) - inf_get_version() -> ushort - -ida_ida.inf_get_xrefflag (function) - inf_get_xrefflag() -> uchar - -ida_ida.inf_get_xrefnum (function) - inf_get_xrefnum() -> uchar - -ida_ida.inf_guess_func_type (function) - inf_guess_func_type() -> bool - -ida_ida.inf_handle_eh (function) - inf_handle_eh() -> bool - -ida_ida.inf_handle_rtti (function) - inf_handle_rtti() -> bool - -ida_ida.inf_hide_comments (function) - inf_hide_comments() -> bool - -ida_ida.inf_hide_libfuncs (function) - inf_hide_libfuncs() -> bool - -ida_ida.inf_huge_arg_align (function) - inf_huge_arg_align(cc) -> bool - - @param cc: cm_t - - inf_huge_arg_align() -> bool - -ida_ida.inf_inc_database_change_count (function) - inf_inc_database_change_count(cnt=1) - - @param cnt: int - -ida_ida.inf_is_16bit (function) - inf_is_16bit() -> bool - -ida_ida.inf_is_32bit_exactly (function) - inf_is_32bit_exactly() -> bool - -ida_ida.inf_is_32bit_or_higher (function) - inf_is_32bit_or_higher() -> bool - -ida_ida.inf_is_64bit (function) - inf_is_64bit() -> bool - -ida_ida.inf_is_auto_enabled (function) - inf_is_auto_enabled() -> bool - -ida_ida.inf_is_be (function) - inf_is_be() -> bool - -ida_ida.inf_is_dll (function) - inf_is_dll() -> bool - -ida_ida.inf_is_flat_off32 (function) - inf_is_flat_off32() -> bool - -ida_ida.inf_is_graph_view (function) - inf_is_graph_view() -> bool - -ida_ida.inf_is_hard_float (function) - inf_is_hard_float() -> bool - -ida_ida.inf_is_kernel_mode (function) - inf_is_kernel_mode() -> bool - -ida_ida.inf_is_limiter_empty (function) - inf_is_limiter_empty() -> bool - -ida_ida.inf_is_limiter_thick (function) - inf_is_limiter_thick() -> bool - -ida_ida.inf_is_limiter_thin (function) - inf_is_limiter_thin() -> bool - -ida_ida.inf_is_mem_aligned4 (function) - inf_is_mem_aligned4() -> bool - -ida_ida.inf_is_snapshot (function) - inf_is_snapshot() -> bool - -ida_ida.inf_is_wide_high_byte_first (function) - inf_is_wide_high_byte_first() -> bool - -ida_ida.inf_like_binary (function) - inf_like_binary() -> bool - -ida_ida.inf_line_pref_with_seg (function) - inf_line_pref_with_seg() -> bool - -ida_ida.inf_loading_idc (function) - inf_loading_idc() -> bool - -ida_ida.inf_macros_enabled (function) - inf_macros_enabled() -> bool - -ida_ida.inf_map_stkargs (function) - inf_map_stkargs() -> bool - -ida_ida.inf_mark_code (function) - inf_mark_code() -> bool - -ida_ida.inf_merge_strlits (function) - inf_merge_strlits() -> bool - -ida_ida.inf_no_store_user_info (function) - inf_no_store_user_info() -> bool - -ida_ida.inf_noflow_to_data (function) - inf_noflow_to_data() -> bool - -ida_ida.inf_noret_ana (function) - inf_noret_ana() -> bool - -ida_ida.inf_op_offset (function) - inf_op_offset() -> bool - -ida_ida.inf_pack_idb (function) - inf_pack_idb() -> bool - -ida_ida.inf_pack_stkargs (function) - inf_pack_stkargs(cc) -> bool - - @param cc: cm_t - - inf_pack_stkargs() -> bool - -ida_ida.inf_postinc_strlit_sernum (function) - inf_postinc_strlit_sernum(cnt=1) -> uval_t - - @param cnt: uval_t - -ida_ida.inf_prefix_show_funcoff (function) - inf_prefix_show_funcoff() -> bool - -ida_ida.inf_prefix_show_segaddr (function) - inf_prefix_show_segaddr() -> bool - -ida_ida.inf_prefix_show_stack (function) - inf_prefix_show_stack() -> bool - -ida_ida.inf_prefix_truncate_opcode_bytes (function) - inf_prefix_truncate_opcode_bytes() -> bool - -ida_ida.inf_propagate_regargs (function) - inf_propagate_regargs() -> bool - -ida_ida.inf_propagate_stkargs (function) - inf_propagate_stkargs() -> bool - -ida_ida.inf_readonly_idb (function) - inf_readonly_idb() -> bool - -ida_ida.inf_rename_jumpfunc (function) - inf_rename_jumpfunc() -> bool - -ida_ida.inf_rename_nullsub (function) - inf_rename_nullsub() -> bool - -ida_ida.inf_set_32bit (function) - inf_set_32bit(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_64bit (function) - inf_set_64bit(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_abi_set_by_user (function) - inf_set_abi_set_by_user(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_abibits (function) - inf_set_abibits(_v) -> bool - - @param _v: uint32 - -ida_ida.inf_set_af (function) - inf_set_af(_v) -> bool - - @param _v: uint32 - -ida_ida.inf_set_af2 (function) - inf_set_af2(_v) -> bool - - @param _v: uint32 - -ida_ida.inf_set_af2_low (function) - inf_set_af2_low(saf) - - @param saf: ushort - -ida_ida.inf_set_af_high (function) - inf_set_af_high(saf2) - - @param saf2: ushort - -ida_ida.inf_set_af_low (function) - inf_set_af_low(saf) - - @param saf: ushort - -ida_ida.inf_set_allow_non_matched_ops (function) - inf_set_allow_non_matched_ops(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_allow_sigmulti (function) - inf_set_allow_sigmulti(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_app_bitness (function) - inf_set_app_bitness(bitness) - - @param bitness: uint - -ida_ida.inf_set_appcall_options (function) - inf_set_appcall_options(_v) -> bool - - @param _v: uint32 - -ida_ida.inf_set_append_sigcmt (function) - inf_set_append_sigcmt(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_apptype (function) - inf_set_apptype(_v) -> bool - - @param _v: ushort - -ida_ida.inf_set_asmtype (function) - inf_set_asmtype(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_auto_enabled (function) - inf_set_auto_enabled(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_baseaddr (function) - inf_set_baseaddr(_v) -> bool - - @param _v: uval_t - -ida_ida.inf_set_be (function) - inf_set_be(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_big_arg_align (function) - inf_set_big_arg_align(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_bin_prefix_size (function) - inf_set_bin_prefix_size(_v) -> bool - - @param _v: short - -ida_ida.inf_set_cc (function) - inf_set_cc(_v) -> bool - - @param _v: compiler_info_t const & - -ida_ida.inf_set_cc_cm (function) - inf_set_cc_cm(_v) -> bool - - @param _v: cm_t - -ida_ida.inf_set_cc_defalign (function) - inf_set_cc_defalign(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_cc_id (function) - inf_set_cc_id(_v) -> bool - - @param _v: comp_t - -ida_ida.inf_set_cc_size_b (function) - inf_set_cc_size_b(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_cc_size_e (function) - inf_set_cc_size_e(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_cc_size_i (function) - inf_set_cc_size_i(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_cc_size_l (function) - inf_set_cc_size_l(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_cc_size_ldbl (function) - inf_set_cc_size_ldbl(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_cc_size_ll (function) - inf_set_cc_size_ll(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_cc_size_s (function) - inf_set_cc_size_s(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_check_manual_ops (function) - inf_set_check_manual_ops(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_check_unicode_strlits (function) - inf_set_check_unicode_strlits(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_cmt_indent (function) - inf_set_cmt_indent(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_cmtflg (function) - inf_set_cmtflg(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_coagulate_code (function) - inf_set_coagulate_code(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_coagulate_data (function) - inf_set_coagulate_data(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_compress_idb (function) - inf_set_compress_idb(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_create_all_xrefs (function) - inf_set_create_all_xrefs(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_create_func_from_call (function) - inf_set_create_func_from_call(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_create_func_from_ptr (function) - inf_set_create_func_from_ptr(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_create_func_tails (function) - inf_set_create_func_tails(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_create_jump_tables (function) - inf_set_create_jump_tables(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_create_off_on_dref (function) - inf_set_create_off_on_dref(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_create_off_using_fixup (function) - inf_set_create_off_using_fixup(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_create_strlit_on_xref (function) - inf_set_create_strlit_on_xref(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_data_offset (function) - inf_set_data_offset(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_database_change_count (function) - inf_set_database_change_count(_v) -> bool - - @param _v: uint32 - -ida_ida.inf_set_datatypes (function) - inf_set_datatypes(_v) -> bool - - @param _v: uval_t - -ida_ida.inf_set_dbg_no_store_path (function) - inf_set_dbg_no_store_path(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_decode_fpp (function) - inf_set_decode_fpp(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_del_no_xref_insns (function) - inf_set_del_no_xref_insns(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_demnames (function) - inf_set_demnames(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_dll (function) - inf_set_dll(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_filetype (function) - inf_set_filetype(_v) -> bool - - @param _v: enum filetype_t - -ida_ida.inf_set_final_pass (function) - inf_set_final_pass(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_flat_off32 (function) - inf_set_flat_off32(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_full_sp_ana (function) - inf_set_full_sp_ana(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_gen_assume (function) - inf_set_gen_assume(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_gen_lzero (function) - inf_set_gen_lzero(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_gen_null (function) - inf_set_gen_null(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_gen_org (function) - inf_set_gen_org(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_gen_tryblks (function) - inf_set_gen_tryblks(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_genflags (function) - inf_set_genflags(_v) -> bool - - @param _v: ushort - -ida_ida.inf_set_graph_view (function) - inf_set_graph_view(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_guess_func_type (function) - inf_set_guess_func_type(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_handle_eh (function) - inf_set_handle_eh(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_handle_rtti (function) - inf_set_handle_rtti(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_hard_float (function) - inf_set_hard_float(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_hide_comments (function) - inf_set_hide_comments(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_hide_libfuncs (function) - inf_set_hide_libfuncs(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_highoff (function) - inf_set_highoff(_v) -> bool - - @param _v: ea_t - -ida_ida.inf_set_huge_arg_align (function) - inf_set_huge_arg_align(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_indent (function) - inf_set_indent(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_kernel_mode (function) - inf_set_kernel_mode(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_lenxref (function) - inf_set_lenxref(_v) -> bool - - @param _v: ushort - -ida_ida.inf_set_lflags (function) - inf_set_lflags(_v) -> bool - - @param _v: uint32 - -ida_ida.inf_set_limiter (function) - inf_set_limiter(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_limiter_empty (function) - inf_set_limiter_empty(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_limiter_thick (function) - inf_set_limiter_thick(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_limiter_thin (function) - inf_set_limiter_thin(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_line_pref_with_seg (function) - inf_set_line_pref_with_seg(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_listnames (function) - inf_set_listnames(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_loading_idc (function) - inf_set_loading_idc(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_long_demnames (function) - inf_set_long_demnames(_v) -> bool - - @param _v: uint32 - -ida_ida.inf_set_lowoff (function) - inf_set_lowoff(_v) -> bool - - @param _v: ea_t - -ida_ida.inf_set_macros_enabled (function) - inf_set_macros_enabled(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_main (function) - inf_set_main(_v) -> bool - - @param _v: ea_t - -ida_ida.inf_set_map_stkargs (function) - inf_set_map_stkargs(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_margin (function) - inf_set_margin(_v) -> bool - - @param _v: ushort - -ida_ida.inf_set_mark_code (function) - inf_set_mark_code(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_max_autoname_len (function) - inf_set_max_autoname_len(_v) -> bool - - @param _v: ushort - -ida_ida.inf_set_max_ea (function) - inf_set_max_ea(_v) -> bool - - @param _v: ea_t - -ida_ida.inf_set_maxref (function) - inf_set_maxref(_v) -> bool - - @param _v: uval_t - -ida_ida.inf_set_mem_aligned4 (function) - inf_set_mem_aligned4(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_merge_strlits (function) - inf_set_merge_strlits(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_min_ea (function) - inf_set_min_ea(_v) -> bool - - @param _v: ea_t - -ida_ida.inf_set_nametype (function) - inf_set_nametype(_v) -> bool - - @param _v: char - -ida_ida.inf_set_netdelta (function) - inf_set_netdelta(_v) -> bool - - @param _v: sval_t - -ida_ida.inf_set_no_store_user_info (function) - inf_set_no_store_user_info(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_noflow_to_data (function) - inf_set_noflow_to_data(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_noret_ana (function) - inf_set_noret_ana(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_omax_ea (function) - inf_set_omax_ea(_v) -> bool - - @param _v: ea_t - -ida_ida.inf_set_omin_ea (function) - inf_set_omin_ea(_v) -> bool - - @param _v: ea_t - -ida_ida.inf_set_op_offset (function) - inf_set_op_offset(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_ostype (function) - inf_set_ostype(_v) -> bool - - @param _v: ushort - -ida_ida.inf_set_outflags (function) - inf_set_outflags(_v) -> bool - - @param _v: uint32 - -ida_ida.inf_set_pack_idb (function) - inf_set_pack_idb(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_pack_mode (function) - inf_set_pack_mode(pack_mode) -> int - - @param pack_mode: int - -ida_ida.inf_set_pack_stkargs (function) - inf_set_pack_stkargs(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_prefflag (function) - inf_set_prefflag(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_prefix_show_funcoff (function) - inf_set_prefix_show_funcoff(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_prefix_show_segaddr (function) - inf_set_prefix_show_segaddr(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_prefix_show_stack (function) - inf_set_prefix_show_stack(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_prefix_truncate_opcode_bytes (function) - inf_set_prefix_truncate_opcode_bytes(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_privrange (function) - inf_set_privrange(_v) -> bool - - @param _v: range_t const & - -ida_ida.inf_set_privrange_end_ea (function) - inf_set_privrange_end_ea(_v) -> bool - - @param _v: ea_t - -ida_ida.inf_set_privrange_start_ea (function) - inf_set_privrange_start_ea(_v) -> bool - - @param _v: ea_t - -ida_ida.inf_set_procname (function) - inf_set_procname(_v, len=size_t(-1)) -> bool - - @param _v: char const * - @param len: size_t - -ida_ida.inf_set_propagate_regargs (function) - inf_set_propagate_regargs(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_propagate_stkargs (function) - inf_set_propagate_stkargs(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_readonly_idb (function) - inf_set_readonly_idb(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_refcmtnum (function) - inf_set_refcmtnum(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_rename_jumpfunc (function) - inf_set_rename_jumpfunc(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_rename_nullsub (function) - inf_set_rename_nullsub(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_short_demnames (function) - inf_set_short_demnames(_v) -> bool - - @param _v: uint32 - -ida_ida.inf_set_should_create_stkvars (function) - inf_set_should_create_stkvars(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_should_trace_sp (function) - inf_set_should_trace_sp(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_show_all_comments (function) - inf_set_show_all_comments(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_show_auto (function) - inf_set_show_auto(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_show_hidden_funcs (function) - inf_set_show_hidden_funcs(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_show_hidden_insns (function) - inf_set_show_hidden_insns(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_show_hidden_segms (function) - inf_set_show_hidden_segms(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_show_line_pref (function) - inf_set_show_line_pref(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_show_repeatables (function) - inf_set_show_repeatables(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_show_src_linnum (function) - inf_set_show_src_linnum(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_show_void (function) - inf_set_show_void(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_show_xref_fncoff (function) - inf_set_show_xref_fncoff(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_show_xref_seg (function) - inf_set_show_xref_seg(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_show_xref_tmarks (function) - inf_set_show_xref_tmarks(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_show_xref_val (function) - inf_set_show_xref_val(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_snapshot (function) - inf_set_snapshot(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_specsegs (function) - inf_set_specsegs(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_stack_ldbl (function) - inf_set_stack_ldbl(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_stack_varargs (function) - inf_set_stack_varargs(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_start_cs (function) - inf_set_start_cs(_v) -> bool - - @param _v: sel_t - -ida_ida.inf_set_start_ea (function) - inf_set_start_ea(_v) -> bool - - @param _v: ea_t - -ida_ida.inf_set_start_ip (function) - inf_set_start_ip(_v) -> bool - - @param _v: ea_t - -ida_ida.inf_set_start_sp (function) - inf_set_start_sp(_v) -> bool - - @param _v: ea_t - -ida_ida.inf_set_start_ss (function) - inf_set_start_ss(_v) -> bool - - @param _v: sel_t - -ida_ida.inf_set_strlit_autocmt (function) - inf_set_strlit_autocmt(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_strlit_break (function) - inf_set_strlit_break(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_strlit_flags (function) - inf_set_strlit_flags(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_strlit_name_bit (function) - inf_set_strlit_name_bit(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_strlit_names (function) - inf_set_strlit_names(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_strlit_pref (function) - inf_set_strlit_pref(_v, len=size_t(-1)) -> bool - - @param _v: char const * - @param len: size_t - -ida_ida.inf_set_strlit_savecase (function) - inf_set_strlit_savecase(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_strlit_serial_names (function) - inf_set_strlit_serial_names(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_strlit_sernum (function) - inf_set_strlit_sernum(_v) -> bool - - @param _v: uval_t - -ida_ida.inf_set_strlit_zeroes (function) - inf_set_strlit_zeroes(_v) -> bool - - @param _v: char - -ida_ida.inf_set_strtype (function) - inf_set_strtype(_v) -> bool - - @param _v: int32 - -ida_ida.inf_set_trace_flow (function) - inf_set_trace_flow(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_truncate_on_del (function) - inf_set_truncate_on_del(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_type_xrefnum (function) - inf_set_type_xrefnum(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_unicode_strlits (function) - inf_set_unicode_strlits(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_use_allasm (function) - inf_set_use_allasm(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_use_flirt (function) - inf_set_use_flirt(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_use_gcc_layout (function) - inf_set_use_gcc_layout(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_version (function) - inf_set_version(_v) -> bool - - @param _v: ushort - -ida_ida.inf_set_wide_high_byte_first (function) - inf_set_wide_high_byte_first(_v=True) -> bool - - @param _v: bool - -ida_ida.inf_set_xrefflag (function) - inf_set_xrefflag(_v) -> bool - - @param _v: uchar - -ida_ida.inf_set_xrefnum (function) - inf_set_xrefnum(_v) -> bool - - @param _v: uchar - -ida_ida.inf_should_create_stkvars (function) - inf_should_create_stkvars() -> bool - -ida_ida.inf_should_trace_sp (function) - inf_should_trace_sp() -> bool - -ida_ida.inf_show_all_comments (function) - inf_show_all_comments() -> bool - -ida_ida.inf_show_auto (function) - inf_show_auto() -> bool - -ida_ida.inf_show_hidden_funcs (function) - inf_show_hidden_funcs() -> bool - -ida_ida.inf_show_hidden_insns (function) - inf_show_hidden_insns() -> bool - -ida_ida.inf_show_hidden_segms (function) - inf_show_hidden_segms() -> bool - -ida_ida.inf_show_line_pref (function) - inf_show_line_pref() -> bool - -ida_ida.inf_show_repeatables (function) - inf_show_repeatables() -> bool - -ida_ida.inf_show_src_linnum (function) - inf_show_src_linnum() -> bool - -ida_ida.inf_show_void (function) - inf_show_void() -> bool - -ida_ida.inf_show_xref_fncoff (function) - inf_show_xref_fncoff() -> bool - -ida_ida.inf_show_xref_seg (function) - inf_show_xref_seg() -> bool - -ida_ida.inf_show_xref_tmarks (function) - inf_show_xref_tmarks() -> bool - -ida_ida.inf_show_xref_val (function) - inf_show_xref_val() -> bool - -ida_ida.inf_stack_ldbl (function) - inf_stack_ldbl() -> bool - -ida_ida.inf_stack_varargs (function) - inf_stack_varargs() -> bool - -ida_ida.inf_strlit_autocmt (function) - inf_strlit_autocmt() -> bool - -ida_ida.inf_strlit_name_bit (function) - inf_strlit_name_bit() -> bool - -ida_ida.inf_strlit_names (function) - inf_strlit_names() -> bool - -ida_ida.inf_strlit_savecase (function) - inf_strlit_savecase() -> bool - -ida_ida.inf_strlit_serial_names (function) - inf_strlit_serial_names() -> bool - -ida_ida.inf_test_mode (function) - inf_test_mode() -> bool - -ida_ida.inf_trace_flow (function) - inf_trace_flow() -> bool - -ida_ida.inf_truncate_on_del (function) - inf_truncate_on_del() -> bool - -ida_ida.inf_unicode_strlits (function) - inf_unicode_strlits() -> bool - -ida_ida.inf_use_allasm (function) - inf_use_allasm() -> bool - -ida_ida.inf_use_flirt (function) - inf_use_flirt() -> bool - -ida_ida.inf_use_gcc_layout (function) - inf_use_gcc_layout() -> bool - -ida_ida.is_database_busy (function) - is_database_busy() -> bool - Check if the database is busy (e.g. performing some critical operations and - cannot be safely accessed) - -ida_ida.is_filetype_like_binary (function) - is_filetype_like_binary(ft) -> bool - Is unstructured input file? - - @param ft: (C++: filetype_t) enum filetype_t - -ida_ida.move_privrange (function) - move_privrange(new_privrange_start) -> bool - Move privrange to the specified address - - @param new_privrange_start: (C++: ea_t) new start address of the privrange - @return: success - -ida_ida.switch_dbctx (function) - switch_dbctx(idx) -> dbctx_t * - Switch to the database with the provided context ID - - @param idx: (C++: size_t) the index of the database to switch to - @return: the current dbctx_t instance or nullptr - -ida_ida.to_ea (function) - 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.validate_idb (function) - validate_idb(vld_flags=0) -> size_t - Validate the database - - @param vld_flags: (C++: uint32) combination of VLD_.. constants - @return: number of corrupted/fixed records - -ida_idaapi (module) - -ida_idaapi.IDAPython_ExecScript (function) - Run the specified script. - - This function is used by the low-level plugin code. - -ida_idaapi.IDAPython_ExecSystem (function) - Executes a command with popen(). - -ida_idaapi.IDAPython_FormatExc (function) - This function is used to format an exception given the - values returned by a PyErr_Fetch() - -ida_idaapi.IDAPython_LoadProcMod (function) - Load processor module. - -ida_idaapi.IDAPython_UnLoadProcMod (function) - Unload processor module. - -ida_idaapi.IDAPython_displayhook (class) - -ida_idaapi.IDAPython_displayhook.__init__ (method) - -ida_idaapi.IDAPython_displayhook._print_hex (method) - -ida_idaapi.IDAPython_displayhook.displayhook (method) - -ida_idaapi.IDAPython_displayhook.format_item (method) - -ida_idaapi.IDAPython_displayhook.format_seq (method) - -ida_idaapi.NW_CLOSEIDB (variable) - Notify when the database is closed. Its callback is of the form: def notify_when_callback(nw_code) - -ida_idaapi.NW_INITIDA (variable) - Notify when the IDA starts. Its callback is of the form: def notify_when_callback(nw_code) - -ida_idaapi.NW_OPENIDB (variable) - Notify when the database is opened. Its callback is of the form: def notify_when_callback(nw_code, is_old_database) - -ida_idaapi.NW_REMOVE (variable) - Use this flag with other flags to uninstall a notifywhen callback - -ida_idaapi.NW_TERMIDA (variable) - Notify when the IDA terminates. Its callback is of the form: def notify_when_callback(nw_code) - -ida_idaapi.PY_ICID_BYREF (variable) - byref object - -ida_idaapi.PY_ICID_INT64 (variable) - int64 object - -ida_idaapi.PY_ICID_OPAQUE (variable) - opaque object - -ida_idaapi.PyIdc_cvt_int64__ (class) - Helper class for explicitly representing VT_INT64 values - -ida_idaapi.PyIdc_cvt_int64__.__add__ (method) - -ida_idaapi.PyIdc_cvt_int64__.__div__ (method) - -ida_idaapi.PyIdc_cvt_int64__.__init__ (method) - -ida_idaapi.PyIdc_cvt_int64__.__mul__ (method) - -ida_idaapi.PyIdc_cvt_int64__.__op (method) - -ida_idaapi.PyIdc_cvt_int64__.__radd__ (method) - -ida_idaapi.PyIdc_cvt_int64__.__rdiv__ (method) - -ida_idaapi.PyIdc_cvt_int64__.__rmul__ (method) - -ida_idaapi.PyIdc_cvt_int64__.__rsub__ (method) - -ida_idaapi.PyIdc_cvt_int64__.__sub__ (method) - -ida_idaapi.PyIdc_cvt_refclass__ (class) - Helper class for representing references to immutable objects - -ida_idaapi.PyIdc_cvt_refclass__.__init__ (method) - -ida_idaapi.PyIdc_cvt_refclass__.cstr (method) - Returns the string as a C string (up to the zero termination) - -ida_idaapi.ST_OVER_DEBUG_SEG (variable) - step tracing will be disabled when IP is in a debugger segment - -ida_idaapi.ST_OVER_LIB_FUNC (variable) - step tracing will be disabled when IP is in a library function - -ida_idaapi.TRUNC (function) - Truncate EA for the current application bitness - -ida_idaapi.__IDAPython_Completion_Util (class) - Internal utility class for auto-completion support - -ida_idaapi.__IDAPython_Completion_Util.__call__ (method) - -ida_idaapi.__IDAPython_Completion_Util.__init__ (method) - -ida_idaapi.__IDAPython_Completion_Util.debug (method) - -ida_idaapi.__IDAPython_Completion_Util.dir_namespace (method) - -ida_idaapi.__IDAPython_Completion_Util.get_candidates (method) - -ida_idaapi.__IDAPython_Completion_Util.maybe_extend_syntactically (method) - -ida_idaapi.__install_excepthook (function) - -ida_idaapi._bounded_getitem_iterator (function) - Helper function, to be set as __iter__ method for qvector-, or array-based classes. - -ida_idaapi._listify_types (function) - -ida_idaapi._make_missed_695bwcompat_property (function) - -ida_idaapi._make_missed_695bwcompat_property._getter (function) - -ida_idaapi._make_missed_695bwcompat_property._setter (function) - -ida_idaapi._make_one_time_warning_message (function) - -ida_idaapi._make_one_time_warning_message.f (function) - -ida_idaapi._qvector_back (function) - -ida_idaapi._qvector_front (function) - -ida_idaapi._replace_module_function (function) - -ida_idaapi.as_UTF16 (function) - Convenience function to convert a string into appropriate unicode format - -ida_idaapi.as_cstr (function) - 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 \x00 and returns the string value up to that point. - -ida_idaapi.as_int32 (function) - Returns a number as a signed int32 number - -ida_idaapi.as_signed (function) - Returns a number as signed. The number of bits are specified by the user. - The MSB holds the sign. - -ida_idaapi.as_uint32 (function) - Returns a number as an unsigned int32 number - -ida_idaapi.copy_bits (function) - Copy bits from a value - @param v: the value - @param s: starting bit (0-based) - @param e: ending bit - -ida_idaapi.disable_script_timeout (function) - 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 (function) - 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 (function) - enable_python_cli(enable) - - @param enable: bool - -ida_idaapi.format_basestring (function) - format_basestring(_in) -> str - - @param _in: PyObject * - -ida_idaapi.get_inf_structure (function) - get_inf_structure() -> idainfo - Returns the global variable 'inf' (an instance of idainfo structure, see ida.hpp) - -ida_idaapi.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.__init__ (method) - __init__(self, pycapsule=None) -> loader_input_t - - @param pycapsule: PyObject * - -ida_idaapi.loader_input_t.close (method) - close(self) - Closes the file - -ida_idaapi.loader_input_t.file2base (method) - 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 pos: position in the file - @param ea1: ..ea2): range of destination linear addresses - @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 (method) - filename(self) -> PyObject * - -ida_idaapi.loader_input_t.from_capsule (method) - from_capsule(pycapsule) -> loader_input_t - - @param pycapsule: PyObject * - -ida_idaapi.loader_input_t.from_fp (method) - from_fp(fp) -> loader_input_t - A static method to construct an instance from a FILE* - - @param fp: FILE * - -ida_idaapi.loader_input_t.from_linput (method) - from_linput(linput) -> loader_input_t - - @param linput: linput_t * - -ida_idaapi.loader_input_t.get_byte (method) - get_byte(self) -> PyObject * - Reads a single byte from the file. Returns None if EOF or the read byte - -ida_idaapi.loader_input_t.get_linput (method) - get_linput(self) -> linput_t * - -ida_idaapi.loader_input_t.gets (method) - gets(self, len) -> str - Reads a line from the input file. Returns the read line or None - - @param len: size_t - -ida_idaapi.loader_input_t.getz (method) - 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 (method) - open(self, filename, remote=False) -> bool - Opens a file (or a remote file) - - @param filename: char const * - @param remote: bool - @return: Boolean - -ida_idaapi.loader_input_t.open_memory (method) - 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 (method) - opened(self) -> bool - Checks if the file is opened or not - -ida_idaapi.loader_input_t.read (method) - read(self, size) -> bytes or None - Reads from the file. Returns the buffer or None - - @param size: size_t - -ida_idaapi.loader_input_t.readbytes (method) - readbytes(self, size, big_endian) -> PyObject * - Similar to read() but it respect the endianness - - @param size: size_t - @param big_endian: bool - -ida_idaapi.loader_input_t.seek (method) - seek(self, pos, whence=SEEK_SET) -> int64 - Set input source position - - @param pos: int64 - @param whence: int - @return: the new position (not 0 as fseek!) - -ida_idaapi.loader_input_t.set_linput (method) - set_linput(self, linput) - Links the current loader_input_t instance to a linput_t instance - - @param linput: linput_t * - -ida_idaapi.loader_input_t.size (method) - size(self) -> int64 - -ida_idaapi.loader_input_t.tell (method) - tell(self) -> int64 - Returns the current position - -ida_idaapi.loader_input_t_from_capsule (function) - loader_input_t_from_capsule(pycapsule) -> loader_input_t - - @param pycapsule: PyObject * - -ida_idaapi.loader_input_t_from_fp (function) - loader_input_t_from_fp(fp) -> loader_input_t - - @param fp: FILE * - -ida_idaapi.loader_input_t_from_linput (function) - loader_input_t_from_linput(linput) -> loader_input_t - - @param linput: linput_t * - -ida_idaapi.notify_when (function) - 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 - -ida_idaapi.object_t (class) - Helper class used to initialize empty objects - -ida_idaapi.object_t.__getitem__ (method) - Allow access to object attributes by index (like dictionaries) - -ida_idaapi.object_t.__init__ (method) - -ida_idaapi.parse_command_line3 (function) - parse_command_line3(cmdline) -> PyObject * - - @param cmdline: char const * - -ida_idaapi.plugin_t (class) - Base class for all scripted plugins. - -ida_idaapi.plugin_t.run (method) - -ida_idaapi.plugin_t.term (method) - -ida_idaapi.plugmod_t (class) - Base class for all scripted multi-plugins. - -ida_idaapi.py_clinked_object_t (class) - This is a utility and base class for C linked objects - -ida_idaapi.py_clinked_object_t.__del__ (method) - Delete the link upon object destruction (only if not static) - -ida_idaapi.py_clinked_object_t.__init__ (method) - -ida_idaapi.py_clinked_object_t._create_clink (method) - Overwrite me. - Creates a new clink - @return: PyCapsule representing the C link - -ida_idaapi.py_clinked_object_t._del_clink (method) - Overwrite me. - This method deletes the link - -ida_idaapi.py_clinked_object_t._free (method) - Explicitly delete the link (only if not static) - -ida_idaapi.py_clinked_object_t._get_clink_ptr (method) - Overwrite me. - Returns the C link pointer as a 64bit number - -ida_idaapi.py_clinked_object_t.assign (method) - Overwrite me. - This method allows you to assign an instance contents to anothers - @return: Boolean - -ida_idaapi.py_clinked_object_t.clink (variable) - Returns the C link as a PyObject - -ida_idaapi.py_clinked_object_t.clink_ptr (variable) - Returns the C link pointer as a number - -ida_idaapi.py_clinked_object_t.copy (method) - Returns a new copy of this class - -ida_idaapi.pycim_get_widget (function) - pycim_get_widget(_self) -> TWidget * - - @param self: PyObject * - -ida_idaapi.pycim_view_close (function) - pycim_view_close(_self) - - @param self: PyObject * - -ida_idaapi.pygc_create_groups (function) - pygc_create_groups(_self, groups_infos) -> [int, ...] or None - - @param self: PyObject * - @param groups_infos: PyObject * - -ida_idaapi.pygc_delete_groups (function) - pygc_delete_groups(_self, groups, new_current) -> bool - - @param self: PyObject * - @param groups: PyObject * - @param new_current: PyObject * - -ida_idaapi.pygc_refresh (function) - pygc_refresh(_self) - - @param self: PyObject * - -ida_idaapi.pygc_set_groups_visibility (function) - pygc_set_groups_visibility(_self, groups, expand, new_current) -> bool - - @param self: PyObject * - @param groups: PyObject * - @param expand: PyObject * - @param new_current: PyObject * - -ida_idaapi.pyidc_cvt_helper__ (class) - 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 - -ida_idaapi.pyidc_cvt_helper__.__get_value (method) - -ida_idaapi.pyidc_cvt_helper__.__init__ (method) - -ida_idaapi.pyidc_cvt_helper__.__set_value (method) - -ida_idaapi.pyidc_opaque_object_t (class) - This is the base class for all Python<->IDC opaque objects - -ida_idaapi.replfun (function) - -ida_idaapi.require (function) - 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: <http://www.hexblog.com/?p=749>. - -ida_idaapi.set_script_timeout (function) - 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 (function) - 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 (module) - -ida_idc.get_mark_comment (function) - get_mark_comment(slot) -> PyObject * - - @param slot: int32 - -ida_idc.get_marked_pos (function) - get_marked_pos(slot) -> ea_t - - @param slot: int32 - -ida_idc.mark_position (function) - mark_position(ea, lnnum, x, y, slot, comment) - - @param ea: ea_t - @param lnnum: int - @param x: short - @param y: short - @param slot: int32 - @param comment: char const * - -ida_idd (module) - Contains definition of the interface to IDD modules. - - The interface consists of structures describing the target debugged processor - and a debugging API. - -ida_idd.APPCALL_DEBEV (variable) - Return debug event information. - -ida_idd.APPCALL_MANUAL (variable) - Only set up the appcall, do not run. debugger_t::cleanup_appcall will not be - generated by ida! - -ida_idd.APPCALL_TIMEOUT (variable) - Appcall with timeout. If timed out, errbuf will contain "timeout". See - SET_APPCALL_TIMEOUT and GET_APPCALL_TIMEOUT - -ida_idd.Appcall__ (class) - -ida_idd.Appcall__.APPCALL_DEBEV (variable) - Return debug event information - If this bit is set, exceptions during appcall - will generate idc exceptions with full - information about the exception - -ida_idd.Appcall__.APPCALL_MANUAL (variable) - Only set up the appcall, do not run it. - you should call CleanupAppcall() when finished - -ida_idd.Appcall__.APPCALL_TIMEOUT (variable) - Appcall with timeout - The timeout value in milliseconds is specified - in the high 2 bytes of the 'options' argument: - If timed out, errbuf will contain "timeout". - -ida_idd.Appcall__.Consts (variable) - Use Appcall.Consts.CONST_NAME to access constants - -ida_idd.Appcall__.UTF16 (method) - -ida_idd.Appcall__.__get_consts (method) - -ida_idd.Appcall__.__getattr__ (method) - Allows you to call functions as if they were member functions (by returning a callable object) - -ida_idd.Appcall__.__getitem__ (method) - Use self[func_name] syntax if the function name contains invalid characters for an attribute name - See __getattr___ - -ida_idd.Appcall__.__init__ (method) - -ida_idd.Appcall__.__name_or_ea (method) - 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 - -ida_idd.Appcall__.__typedecl_or_tinfo (method) - 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 - -ida_idd.Appcall__.array (method) - Defines an array type. Later you need to pack() / unpack() - -ida_idd.Appcall__.buffer (method) - 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) - 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 (method) - Equivalent to IDC's CleanupAppcall() - -ida_idd.Appcall__.cstr (method) - -ida_idd.Appcall__.get_appcall_options (method) - Return the global Appcall options - -ida_idd.Appcall__.int64 (method) - Whenever a 64bit number is needed use this method to construct an object - -ida_idd.Appcall__.obj (method) - Returns an empty object or objects with attributes as passed via its keywords arguments - -ida_idd.Appcall__.proto (method) - 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) - Method to change the Appcall options globally (not per Appcall) - -ida_idd.Appcall__.typedobj (method) - 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 (method) - Returns the numeric value of a given name string. - If the name could not be resolved then the default value will be returned - -ida_idd.Appcall_array__ (class) - This class is used with Appcall.array() method - -ida_idd.Appcall_array__.__init__ (method) - -ida_idd.Appcall_array__.pack (method) - Packs a list or tuple into a byref buffer - -ida_idd.Appcall_array__.try_to_convert_to_list (method) - Is this object a list? We check for the existance of attribute zero and attribute self.size-1 - -ida_idd.Appcall_array__.unpack (method) - Unpacks an array back into a list or an object - -ida_idd.Appcall_callable__ (class) - 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__.__call__ (method) - Make object callable. We redirect execution to idaapi.appcall() - -ida_idd.Appcall_callable__.__get_ea (method) - -ida_idd.Appcall_callable__.__get_fields (method) - -ida_idd.Appcall_callable__.__get_options (method) - -ida_idd.Appcall_callable__.__get_size (method) - -ida_idd.Appcall_callable__.__get_tif (method) - -ida_idd.Appcall_callable__.__get_timeout (method) - -ida_idd.Appcall_callable__.__get_type (method) - -ida_idd.Appcall_callable__.__init__ (method) - Initializes an appcall with a given function ea - -ida_idd.Appcall_callable__.__set_ea (method) - -ida_idd.Appcall_callable__.__set_options (method) - -ida_idd.Appcall_callable__.__set_timeout (method) - -ida_idd.Appcall_callable__.ea (variable) - Returns or sets the EA associated with this object - -ida_idd.Appcall_callable__.fields (variable) - Returns the field names - -ida_idd.Appcall_callable__.options (variable) - Sets the Appcall options locally to this Appcall instance - -ida_idd.Appcall_callable__.retrieve (method) - 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__.size (variable) - Returns the size of the type - -ida_idd.Appcall_callable__.store (method) - 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) - -ida_idd.Appcall_callable__.tif (variable) - Returns the tinfo_t object - -ida_idd.Appcall_callable__.timeout (variable) - An Appcall instance can change its timeout value with this attribute - -ida_idd.Appcall_callable__.type (variable) - Returns the typestring - -ida_idd.Appcall_consts__ (class) - Helper class used by Appcall.Consts attribute - It is used to retrieve constants via attribute access - -ida_idd.Appcall_consts__.__getattr__ (method) - -ida_idd.Appcall_consts__.__init__ (method) - -ida_idd.BPT_BAD_ADDR (variable) - ea is invalid - -ida_idd.BPT_BAD_ALIGN (variable) - alignment is invalid - -ida_idd.BPT_BAD_LEN (variable) - bpt len is invalid - -ida_idd.BPT_BAD_TYPE (variable) - bpt type is not supported - -ida_idd.BPT_DEFAULT (variable) - Choose bpt type automatically. - -ida_idd.BPT_EXEC (variable) - Execute instruction. - -ida_idd.BPT_INTERNAL_ERR (variable) - interr occurred when verifying breakpoint - -ida_idd.BPT_OK (variable) - breakpoint can be set - -ida_idd.BPT_PAGE_OK (variable) - update_bpts(): ok, added a page bpt - -ida_idd.BPT_RDWR (variable) - Read/write access. - -ida_idd.BPT_READ (variable) - Read access. - -ida_idd.BPT_READ_ERROR (variable) - failed to read memory at bpt ea - -ida_idd.BPT_SKIP (variable) - update_bpts(): do not process bpt - -ida_idd.BPT_SOFT (variable) - Software breakpoint. - -ida_idd.BPT_TOO_MANY (variable) - reached max number of supported breakpoints - -ida_idd.BPT_WRITE (variable) - Write access. - -ida_idd.BPT_WRITE_ERROR (variable) - failed to write memory at bpt ea - -ida_idd.BREAKPOINT (variable) - Breakpoint has been reached. IDA will complain about unknown breakpoints, they - should be reported as exceptions. - -ida_idd.DBG_FLAG_ADD_ENVS (variable) - The debugger supports launching processes with environment variables. - -ida_idd.DBG_FLAG_ANYSIZE_HWBPT (variable) - The debugger supports arbitrary size hardware breakpoints. - -ida_idd.DBG_FLAG_CAN_CONT_BPT (variable) - Debugger knows to continue from a bpt. This flag also means that the debugger - module hides breakpoints from ida upon read_memory - -ida_idd.DBG_FLAG_CLEAN_EXIT (variable) - IDA must suspend the application and remove all breakpoints before terminating - the application. Usually this is not required because the application memory - disappears upon termination. - -ida_idd.DBG_FLAG_CONNSTRING (variable) - Display "Connection string" instead of "Hostname" and hide the "Port" field. - -ida_idd.DBG_FLAG_DEBTHREAD (variable) - Supports creation of a separate thread in ida for the debugger (the debthread). - Most debugger functions will be called from debthread (exceptions are marked - below) The debugger module may directly call only THREAD_SAFE functions. To call - other functions please use execute_sync(). The debthread significantly increases - debugging speed, especially if debug events occur frequently. - -ida_idd.DBG_FLAG_DEBUG_DLL (variable) - Can debug standalone DLLs. For example, Bochs debugger can debug any snippet of - code - -ida_idd.DBG_FLAG_DONT_DISTURB (variable) - Debugger can handle only get_debug_event(), request_pause(), exit_process() when - the debugged process is running. The kernel may also call service functions - (file I/O, map_address, etc) - -ida_idd.DBG_FLAG_EXITSHOTOK (variable) - IDA may take a memory snapshot at PROCESS_EXITED event. - -ida_idd.DBG_FLAG_FAKE_ATTACH (variable) - PROCESS_ATTACHED is a fake event and does not suspend the execution - -ida_idd.DBG_FLAG_FAKE_MEMORY (variable) - get_memory_info()/read_memory()/write_memory() work with the idb. (there is no - real process to read from, as for the replayer module) the kernel will not call - these functions if this flag is set. however, third party plugins may call them, - they must be implemented. - -ida_idd.DBG_FLAG_FAST_STEP (variable) - Do not refresh memory layout info after single stepping. - -ida_idd.DBG_FLAG_HWDATBPT_ONE (variable) - Hardware data breakpoints are one byte size by default - -ida_idd.DBG_FLAG_LAZY_WATCHPTS (variable) - Watchpoints are triggered before the offending instruction is executed. The - debugger must temporarily disable the watchpoint and single-step before - resuming. - -ida_idd.DBG_FLAG_LOWCNDS (variable) - Low level breakpoint conditions are supported. - -ida_idd.DBG_FLAG_MANMEMINFO (variable) - If set, manual memory region manipulation commands will be available. Use this - bit for debugger modules that cannot return memory layout information - -ida_idd.DBG_FLAG_MERGE_ENVS (variable) - The debugger supports merge or replace setting for environment variables (only - makes sense if DBG_FLAG_ADD_ENVS is set) - -ida_idd.DBG_FLAG_NEEDPORT (variable) - Remote debugger requires port number (to be used with DBG_FLAG_NOHOST) - -ida_idd.DBG_FLAG_NOHOST (variable) - Remote debugger with does not require network params (host/port/pass). (a unique - device connected to the machine) - -ida_idd.DBG_FLAG_NOPARAMETERS (variable) - Debugger module doesn't use commandline parameters. - -ida_idd.DBG_FLAG_NOPASSWORD (variable) - Remote debugger doesn't use password. - -ida_idd.DBG_FLAG_NOSTARTDIR (variable) - Debugger module doesn't use startup directory. - -ida_idd.DBG_FLAG_PREFER_SWBPTS (variable) - Prefer to use software breakpoints. - -ida_idd.DBG_FLAG_REMOTE (variable) - Remote debugger (requires remote host name unless DBG_FLAG_NOHOST) - -ida_idd.DBG_FLAG_SAFE (variable) - The debugger is safe (probably because it just emulates the application without - really running it) - -ida_idd.DBG_FLAG_SMALLBLKS (variable) - If set, IDA uses 256-byte blocks for caching memory contents. Otherwise, - 1024-byte blocks are used - -ida_idd.DBG_FLAG_TRACER_MODULE (variable) - The module is a tracer, not a full featured debugger module. - -ida_idd.DBG_FLAG_USE_SREGS (variable) - Take segment register values into account (non flat memory) - -ida_idd.DBG_FLAG_VIRTHREADS (variable) - Thread IDs may be shuffled after each debug event. (to be used for virtual - threads that represent cpus for windbg kmode) - -ida_idd.DBG_HAS_APPCALL (variable) - supports ev_appcall, ev_cleanup_appcall - -ida_idd.DBG_HAS_ATTACH_PROCESS (variable) - supports ev_attach_process - -ida_idd.DBG_HAS_CHECK_BPT (variable) - supports ev_check_bpt - -ida_idd.DBG_HAS_DETACH_PROCESS (variable) - supports ev_detach_process - -ida_idd.DBG_HAS_GET_PROCESSES (variable) - supports ev_get_processes - -ida_idd.DBG_HAS_MAP_ADDRESS (variable) - supports ev_map_address. Avoid using this bit, especially together with - DBG_FLAG_DEBTHREAD because it may cause big slow downs - -ida_idd.DBG_HAS_OPEN_FILE (variable) - supports ev_open_file, ev_close_file, ev_read_file, ev_write_file - -ida_idd.DBG_HAS_REQUEST_PAUSE (variable) - supports ev_request_pause - -ida_idd.DBG_HAS_REXEC (variable) - supports ev_rexec - -ida_idd.DBG_HAS_SET_EXCEPTION_INFO (variable) - supports ev_set_exception_info - -ida_idd.DBG_HAS_SET_RESUME_MODE (variable) - supports ev_set_resume_mode. Cannot be set inside the - debugger_t::init_debugger() - -ida_idd.DBG_HAS_THREAD_CONTINUE (variable) - supports ev_thread_continue - -ida_idd.DBG_HAS_THREAD_GET_SREG_BASE (variable) - supports ev_thread_get_sreg_base - -ida_idd.DBG_HAS_THREAD_SUSPEND (variable) - supports ev_thread_suspend - -ida_idd.DBG_HAS_UPDATE_CALL_STACK (variable) - supports ev_update_call_stack - -ida_idd.DBG_HIDE_WINDOW (variable) - application should be hidden on startup (windows) - -ida_idd.DBG_NO_ASLR (variable) - disable ASLR (linux) - -ida_idd.DBG_NO_TRACE (variable) - do not trace the application (mac/linux) - -ida_idd.DBG_PROC_32BIT (variable) - application is 32-bit - -ida_idd.DBG_PROC_64BIT (variable) - application is 64-bit - -ida_idd.DBG_PROC_IS_DLL (variable) - database contains a dll (not exe) - -ida_idd.DBG_PROC_IS_GUI (variable) - using gui version of ida - -ida_idd.DBG_RESMOD_STEP_HANDLE (variable) - RESMOD_HANDLE is available - -ida_idd.DBG_RESMOD_STEP_INTO (variable) - RESMOD_INTO is available - -ida_idd.DBG_RESMOD_STEP_OUT (variable) - RESMOD_OUT is available - -ida_idd.DBG_RESMOD_STEP_OVER (variable) - RESMOD_OVER is available - -ida_idd.DBG_RESMOD_STEP_SRCINTO (variable) - RESMOD_SRCINTO is available - -ida_idd.DBG_RESMOD_STEP_SRCOUT (variable) - RESMOD_SRCOUT is available - -ida_idd.DBG_RESMOD_STEP_SRCOVER (variable) - RESMOD_SRCOVER is available - -ida_idd.DBG_RESMOD_STEP_USER (variable) - RESMOD_USER is available - -ida_idd.DBG_SUSPENDED (variable) - application should be suspended on startup (mac) - -ida_idd.DEBUGGER_ID_6811_EMULATOR (variable) - MC6812 emulator (beta) - -ida_idd.DEBUGGER_ID_ARM_IPHONE_USER (variable) - iPhone 1.x - -ida_idd.DEBUGGER_ID_ARM_LINUX_USER (variable) - Userland arm linux. - -ida_idd.DEBUGGER_ID_ARM_MACOS_USER (variable) - Userland arm MAC OS. - -ida_idd.DEBUGGER_ID_DALVIK_USER (variable) - Dalvik. - -ida_idd.DEBUGGER_ID_GDB_USER (variable) - GDB remote. - -ida_idd.DEBUGGER_ID_TRACE_REPLAYER (variable) - Fake debugger to replay recorded traces. - -ida_idd.DEBUGGER_ID_WINDBG (variable) - WinDBG using Microsoft Debug engine. - -ida_idd.DEBUGGER_ID_X86_DOSBOX_EMULATOR (variable) - Dosbox MS-DOS emulator. - -ida_idd.DEBUGGER_ID_X86_IA32_BOCHS (variable) - BochsDbg.exe 32. - -ida_idd.DEBUGGER_ID_X86_IA32_LINUX_USER (variable) - Userland linux processes (ptrace()) - -ida_idd.DEBUGGER_ID_X86_IA32_MACOSX_USER (variable) - Userland MAC OS X processes. - -ida_idd.DEBUGGER_ID_X86_IA32_WIN32_USER (variable) - Userland win32 processes (win32 debugging APIs) - -ida_idd.DEBUGGER_ID_X86_PIN_TRACER (variable) - PIN Tracer module. - -ida_idd.DEBUGGER_ID_XNU_USER (variable) - XNU Kernel. - -ida_idd.DRC_CRC (variable) - success, but the input file crc does not match - -ida_idd.DRC_ERROR (variable) - unclassified error, may be complemented by errbuf - -ida_idd.DRC_EVENTS (variable) - success, there are pending events - -ida_idd.DRC_FAILED (variable) - failed or false - -ida_idd.DRC_IDBSEG (variable) - use idb segmentation - -ida_idd.DRC_NETERR (variable) - network error - -ida_idd.DRC_NOCHG (variable) - no changes - -ida_idd.DRC_NOFILE (variable) - file not found - -ida_idd.DRC_NONE (variable) - reaction to the event not implemented - -ida_idd.DRC_NOPROC (variable) - the process does not exist anymore - -ida_idd.DRC_OK (variable) - success - -ida_idd.EXCEPTION (variable) - Exception. - -ida_idd.EXC_BREAK (variable) - break on the exception - -ida_idd.EXC_HANDLE (variable) - should be handled by the debugger? - -ida_idd.EXC_MSG (variable) - instead of a warning, log the exception to the output window - -ida_idd.EXC_SILENT (variable) - do not warn or log to the output window - -ida_idd.IDD_INTERFACE_VERSION (variable) - The IDD interface version number. - -ida_idd.INFORMATION (variable) - User-defined information. This event can be used to return empty information - This will cause IDA to call get_debug_event() immediately once more. - -ida_idd.LIB_LOADED (variable) - New library has been loaded. - -ida_idd.LIB_UNLOADED (variable) - Library has been unloaded. - -ida_idd.NO_EVENT (variable) - Not an interesting event. This event can be used if the debugger module needs to - return an event but there are no valid events. - -ida_idd.NO_PROCESS (variable) - No process. - -ida_idd.NO_THREAD (variable) - 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.PROCESS_ATTACHED (variable) - Successfully attached to running process. - -ida_idd.PROCESS_DETACHED (variable) - Successfully detached from process. - -ida_idd.PROCESS_EXITED (variable) - Process has been stopped. - -ida_idd.PROCESS_STARTED (variable) - New process has been started. - -ida_idd.PROCESS_SUSPENDED (variable) - Process has been suspended. This event can be used by the debugger module to - signal if the process spontaneously gets suspended (not because of an exception, - breakpoint, or single step). IDA will silently switch to the 'suspended process' - mode without displaying any messages. - -ida_idd.REGISTER_ADDRESS (variable) - may contain an address - -ida_idd.REGISTER_CS (variable) - code segment - -ida_idd.REGISTER_CUSTFMT (variable) - 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 (variable) - frame pointer - -ida_idd.REGISTER_IP (variable) - instruction pointer - -ida_idd.REGISTER_NOLF (variable) - displays this register without returning to the next line, allowing the next - register to be displayed to its right (on the same line) - -ida_idd.REGISTER_READONLY (variable) - the user can't modify the current value of this register - -ida_idd.REGISTER_SP (variable) - stack pointer - -ida_idd.REGISTER_SS (variable) - stack segment - -ida_idd.RESMOD_HANDLE (variable) - step into the exception handler - -ida_idd.RESMOD_INTO (variable) - step into call (the most typical single stepping) - -ida_idd.RESMOD_NONE (variable) - no stepping, run freely - -ida_idd.RESMOD_OUT (variable) - step out of the current function (run until return) - -ida_idd.RESMOD_OVER (variable) - step over call - -ida_idd.RESMOD_SRCINTO (variable) - until control reaches a different source line - -ida_idd.RESMOD_SRCOUT (variable) - next source line in the previous stack frame - -ida_idd.RESMOD_SRCOVER (variable) - next source line in the current stack frame - -ida_idd.RESMOD_USER (variable) - step out to the user code - -ida_idd.RVT_FLOAT (variable) - floating point - -ida_idd.RVT_INT (variable) - integer - -ida_idd.RVT_UNAVAILABLE (variable) - unavailable; other values mean custom data type - -ida_idd.STEP (variable) - One instruction has been executed. Spurious events of this kind are silently - ignored by IDA. - -ida_idd.THREAD_EXITED (variable) - Thread has been stopped. - -ida_idd.THREAD_STARTED (variable) - New thread has been started. - -ida_idd.TRACE_FULL (variable) - The trace buffer of the tracer module is full and IDA needs to read it before - continuing - -ida_idd.appcall (function) - appcall(func_ea, tid, _type_or_none, _fields, arg_list) -> PyObject * - - @param func_ea: ea_t - @param tid: thid_t - @param _type_or_none: bytevec_t const & - @param _fields: bytevec_t const & - @param arg_list: PyObject * - -ida_idd.bptaddr_t (class) - Proxy of C++ bptaddr_t class. - -ida_idd.bptaddr_t.__init__ (method) - __init__(self) -> bptaddr_t - -ida_idd.bptaddr_t.hea (variable) - Possible address referenced by hardware breakpoints. - -ida_idd.bptaddr_t.kea (variable) - Address of the triggered bpt from the kernel's point of view. (for some systems - with special memory mappings, the triggered ea might be different from event - ea). Use to BADADDR for flat memory model. - -ida_idd.call_stack_info_t (class) - Proxy of C++ call_stack_info_t class. - -ida_idd.call_stack_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: call_stack_info_t const & - -ida_idd.call_stack_info_t.__init__ (method) - __init__(self) -> call_stack_info_t - -ida_idd.call_stack_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: call_stack_info_t const & - -ida_idd.call_stack_info_t.callea (variable) - the address of the call instruction. for the 0th frame this is usually just the - current value of EIP. - -ida_idd.call_stack_info_t.fp (variable) - the value of the frame pointer of the called function - -ida_idd.call_stack_info_t.funcea (variable) - the address of the called function - -ida_idd.call_stack_info_t.funcok (variable) - is the function present? - -ida_idd.call_stack_info_vec_t (class) - Proxy of C++ qvector< call_stack_info_t > class. - -ida_idd.call_stack_info_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< call_stack_info_t > const & - -ida_idd.call_stack_info_vec_t.__getitem__ (method) - __getitem__(self, i) -> call_stack_info_t - - @param i: size_t - -ida_idd.call_stack_info_vec_t.__init__ (method) - __init__(self) -> call_stack_info_vec_t - __init__(self, x) -> call_stack_info_vec_t - - @param x: qvector< call_stack_info_t > const & - -ida_idd.call_stack_info_vec_t.__len__ (method) - __len__(self) -> size_t - -ida_idd.call_stack_info_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< call_stack_info_t > const & - -ida_idd.call_stack_info_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: call_stack_info_t const & - -ida_idd.call_stack_info_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: call_stack_info_t const & - -ida_idd.call_stack_info_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: call_stack_info_t const & - -ida_idd.call_stack_info_vec_t.at (method) - at(self, _idx) -> call_stack_info_t - - @param _idx: size_t - -ida_idd.call_stack_info_vec_t.begin (method) - begin(self) -> call_stack_info_t - -ida_idd.call_stack_info_vec_t.capacity (method) - capacity(self) -> size_t - -ida_idd.call_stack_info_vec_t.clear (method) - clear(self) - -ida_idd.call_stack_info_vec_t.empty (method) - empty(self) -> bool - -ida_idd.call_stack_info_vec_t.end (method) - end(self) -> call_stack_info_t - -ida_idd.call_stack_info_vec_t.erase (method) - erase(self, it) -> call_stack_info_t - - @param it: qvector< call_stack_info_t >::iterator - - erase(self, first, last) -> call_stack_info_t - - @param first: qvector< call_stack_info_t >::iterator - @param last: qvector< call_stack_info_t >::iterator - -ida_idd.call_stack_info_vec_t.extract (method) - extract(self) -> call_stack_info_t - -ida_idd.call_stack_info_vec_t.find (method) - find(self, x) -> call_stack_info_t - - @param x: call_stack_info_t const & - -ida_idd.call_stack_info_vec_t.grow (method) - grow(self, x=call_stack_info_t()) - - @param x: call_stack_info_t const & - -ida_idd.call_stack_info_vec_t.has (method) - has(self, x) -> bool - - @param x: call_stack_info_t const & - -ida_idd.call_stack_info_vec_t.inject (method) - inject(self, s, len) - - @param s: call_stack_info_t * - @param len: size_t - -ida_idd.call_stack_info_vec_t.insert (method) - insert(self, it, x) -> call_stack_info_t - - @param it: qvector< call_stack_info_t >::iterator - @param x: call_stack_info_t const & - -ida_idd.call_stack_info_vec_t.pop_back (method) - pop_back(self) - -ida_idd.call_stack_info_vec_t.push_back (method) - push_back(self, x) - - @param x: call_stack_info_t const & - - push_back(self) -> call_stack_info_t - -ida_idd.call_stack_info_vec_t.qclear (method) - qclear(self) - -ida_idd.call_stack_info_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_idd.call_stack_info_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: call_stack_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_idd.call_stack_info_vec_t.size (method) - size(self) -> size_t - -ida_idd.call_stack_info_vec_t.swap (method) - swap(self, r) - - @param r: qvector< call_stack_info_t > & - -ida_idd.call_stack_info_vec_t.truncate (method) - truncate(self) - -ida_idd.call_stack_t (class) - Proxy of C++ call_stack_t class. - -ida_idd.call_stack_t.__init__ (method) - __init__(self) -> call_stack_t - -ida_idd.can_exc_continue (function) - can_exc_continue(ev) -> bool - - @param ev: debug_event_t const * - -ida_idd.cleanup_appcall (function) - cleanup_appcall(tid) -> error_t - Cleanup after manual appcall. - - @param tid: (C++: thid_t) 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. - @return: eOk if successful, otherwise an error code - -ida_idd.dbg_appcall (function) - dbg_appcall(retval, func_ea, tid, ptif, argv, argnum) -> error_t - Call a function from the debugged application. - - @param retval: (C++: idc_value_t *) function return value - * for APPCALL_MANUAL, r will hold the new stack point value - * for APPCALL_DEBEV, r will hold the exception information upon failure and the - return code will be eExecThrow - @param func_ea: (C++: ea_t) address to call - @param tid: (C++: thid_t) thread to use. NO_THREAD means to use the current thread - @param ptif: (C++: const tinfo_t *) pointer to type of the function to call - @param argv: (C++: idc_value_t *) array of arguments - @param argnum: (C++: size_t) number of actual arguments - @return: eOk if successful, otherwise an error code - -ida_idd.dbg_get_memory_info (function) - 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 (function) - 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 (function) - 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 (function) - 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 - -ida_idd.dbg_read_memory (function) - dbg_read_memory(ea, sz) -> PyObject * - Reads from the debugee's memory at the specified ea - - @param ea: ea_t - @param sz: size_t - @return: - The read buffer (as a string) - - Or None on failure - -ida_idd.dbg_write_memory (function) - dbg_write_memory(ea, buf) -> bool - Writes a buffer to the debugee's memory - - @param ea: ea_t - @param buf: bytevec_t const & - @return: Boolean - -ida_idd.debapp_attrs_t (class) - Proxy of C++ debapp_attrs_t class. - -ida_idd.debapp_attrs_t.__init__ (method) - __init__(self) -> debapp_attrs_t - -ida_idd.debapp_attrs_t.addrsize (variable) - address size of the process. Since 64-bit debuggers usually can debug 32-bit - applications, we cannot rely on sizeof(ea_t) to detect the current address size. - The following variable should be used instead. It is initialized with 8 for - 64-bit debuggers but they should adjust it as soon as they learn that a 32-bit - application is being debugged. For 32-bit debuggers it is initialized with 4. - -ida_idd.debapp_attrs_t.cbsize (variable) - control field: size of this structure - -ida_idd.debapp_attrs_t.platform (variable) - platform name process is running/debugging under. (is used as a key value in - exceptions.cfg) - -ida_idd.debug_event_t (class) - Proxy of C++ debug_event_t class. - -ida_idd.debug_event_t.__init__ (method) - __init__(self) -> debug_event_t - __init__(self, r) -> debug_event_t - - @param r: debug_event_t const & - -ida_idd.debug_event_t.bpt (method) - bpt(self) -> bptaddr_t - -ida_idd.debug_event_t.bpt_ea (method) - bpt_ea(self) -> ea_t - On some systems with special memory mappings the triggered ea might be different - from the actual ea. Calculate the address to use. - -ida_idd.debug_event_t.clear (method) - clear(self) - clear the dependent information (see below), set event code to NO_EVENT - -ida_idd.debug_event_t.clear_all (method) - clear_all(self) - -ida_idd.debug_event_t.copy (method) - copy(self, r) -> debug_event_t - - @param r: debug_event_t const & - -ida_idd.debug_event_t.ea (variable) - Address where the event occurred. - -ida_idd.debug_event_t.eid (method) - eid(self) -> event_id_t - Event code. - -ida_idd.debug_event_t.exc (method) - exc(self) -> excinfo_t - -ida_idd.debug_event_t.exit_code (method) - exit_code(self) -> int const & - -ida_idd.debug_event_t.handled (variable) - Is event handled by the debugger?. (from the system's point of view) Meaningful - for EXCEPTION events - -ida_idd.debug_event_t.info (method) - info(self) -> qstring - info(self) -> qstring const & - -ida_idd.debug_event_t.modinfo (method) - modinfo(self) -> modinfo_t - -ida_idd.debug_event_t.pid (variable) - Process where the event occurred. - -ida_idd.debug_event_t.set_bpt (method) - set_bpt(self) -> bptaddr_t - -ida_idd.debug_event_t.set_eid (method) - set_eid(self, id) - Set event code. If the new event code is compatible with the old one then the - dependent information (see below) will be preserved. Otherwise the event will be - cleared and the new event code will be set. - - @param id: (C++: event_id_t) enum event_id_t - -ida_idd.debug_event_t.set_exception (method) - set_exception(self) -> excinfo_t - -ida_idd.debug_event_t.set_exit_code (method) - set_exit_code(self, id, code) - - @param id: enum event_id_t - @param code: int - -ida_idd.debug_event_t.set_info (method) - set_info(self, id) -> qstring & - - @param id: enum event_id_t - -ida_idd.debug_event_t.set_modinfo (method) - set_modinfo(self, id) -> modinfo_t - - @param id: enum event_id_t - -ida_idd.debug_event_t.tid (variable) - Thread where the event occurred. - -ida_idd.debugger_t (class) - Proxy of C++ debugger_t class. - -ida_idd.debugger_t.__get_bpt_bytes (method) - __get_bpt_bytes(self) -> bytevec_t - -ida_idd.debugger_t.__get_nregs (method) - __get_nregs(self) -> int - -ida_idd.debugger_t.__get_regclasses (method) - __get_regclasses(self) -> PyObject * - -ida_idd.debugger_t.__get_registers (method) - __get_registers(self) -> dyn_register_info_array - -ida_idd.debugger_t.__init__ (method) - __init__(self) -> debugger_t - -ida_idd.debugger_t.attach_process (method) - attach_process(self, pid, event_id, dbg_proc_flags) -> drc_t - - @param pid: pid_t - @param event_id: int - @param dbg_proc_flags: uint32 - -ida_idd.debugger_t.bin_search (method) - bin_search(self, start_ea, end_ea, data, srch_flags) -> drc_t - - @param start_ea: ea_t - @param end_ea: ea_t - @param data: compiled_binpat_vec_t const & - @param srch_flags: int - -ida_idd.debugger_t.bpt_bytes (variable) - A software breakpoint instruction. - -ida_idd.debugger_t.bpt_size (variable) - Size of the software breakpoint instruction in bytes. - -ida_idd.debugger_t.cache_block_size (method) - cache_block_size(self) -> size_t - -ida_idd.debugger_t.can_continue_from_bpt (method) - can_continue_from_bpt(self) -> bool - -ida_idd.debugger_t.can_debug_standalone_dlls (method) - can_debug_standalone_dlls(self) -> bool - -ida_idd.debugger_t.check_bpt (method) - check_bpt(self, bptvc, type, ea, len) -> drc_t - - @param bptvc: int * - @param type: bpttype_t - @param ea: ea_t - @param len: int - -ida_idd.debugger_t.cleanup_appcall (method) - cleanup_appcall(self, tid) -> drc_t - - @param tid: thid_t - -ida_idd.debugger_t.close_file (method) - close_file(self, fn) - - @param fn: int - -ida_idd.debugger_t.dbg_enable_trace (method) - dbg_enable_trace(self, tid, enable, trace_flags) -> bool - - @param tid: thid_t - @param enable: bool - @param trace_flags: int - -ida_idd.debugger_t.default_regclasses (variable) - Mask of default printed register classes. - -ida_idd.debugger_t.detach_process (method) - detach_process(self) -> drc_t - -ida_idd.debugger_t.ev_appcall (variable) - Call application function. This event calls a function from the debugged - application. This event is generated in debthread Available if HAS_APPCALL is - set - - @retval DRC_NONE - @retval DRC_OK,see: BLOB_EA - -ida_idd.debugger_t.ev_attach_process (variable) - Attach to an existing running process. event_id should be equal to -1 if not - attaching to a crashed process. This event is generated in debthread. Available - if DBG_HAS_ATTACH_PROCESS is set - - @return: DRC_NONE, DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_bin_search (variable) - Search for a binary pattern in the program. - - @return: DRC_OK EA contains the binary pattern address - @retval DRC_FAILED: not found - @retval DRC_NONE: not implemented - @retval DRC_NETERR,DRC_ERROR - -ida_idd.debugger_t.ev_check_bpt (variable) - Is it possible to set breakpoint? This event is generated in debthread or in the - main thread if debthread is not running yet. It is generated to verify hardware - breakpoints. Available if DBG_HAS_CHECK_BPT is set - - @return: DRC_OK, DRC_NONE - -ida_idd.debugger_t.ev_cleanup_appcall (variable) - Cleanup after appcall(). The debugger module must keep the stack blob in the - memory until this event is generated. It will be generated by the kernel for - each successful appcall(). There is an exception: if APPCALL_MANUAL, IDA may not - call cleanup_appcall. If the user selects to terminate a manual appcall, then - cleanup_appcall will be generated. Otherwise, the debugger module should - terminate the appcall when the generated event returns. This event is generated - in debthread. Available if HAS_APPCALL is set - - @retval DRC_EVENTS: success, there are pending events - @retval DRC_OK: success - @retval DRC_FAILED: failed - @retval DRC_NETERR: network error - -ida_idd.debugger_t.ev_close_file (variable) - @return: ignored - -ida_idd.debugger_t.ev_dbg_enable_trace (variable) - Enable/Disable tracing. The kernel will generated this event if the debugger - plugin set DBG_FLAG_TRACER_MODULE. TRACE_FLAGS can be a set of #STEP_TRACE, - #INSN_TRACE, #BBLK_TRACE or #FUNC_TRACE. This event is generated in the main - thread. - - @return: DRC_OK, DRC_FAILED, DRC_NONE - -ida_idd.debugger_t.ev_detach_process (variable) - Detach from the debugged process. May be generated while the process is running - or suspended. Must detach from the process in any case. The kernel will - repeatedly call get_debug_event() until PROCESS_DETACHED is received. In this - mode, all other events will be automatically handled and process will be - resumed. This event is generated from debthread. Available if - DBG_HAS_DETACH_PROCESS is set - - @return: DRC_NONE, DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_eval_lowcnd (variable) - Evaluate a low level breakpoint condition at 'ea'. Other evaluation errors are - displayed in a dialog box. This call is used by IDA when the process has already - been temporarily suspended for some reason and IDA has to decide whether the - process should be resumed or definitely suspended because of a breakpoint with a - low level condition. This event is generated in debthread. - - @retval DRC_OK: condition is satisfied - @retval DRC_FAILED: not satisfied - @retval DRC_NETERR: network error - -ida_idd.debugger_t.ev_exit_process (variable) - Stop the process. May be generated while the process is running or suspended. - Must terminate the process in any case. The kernel will repeatedly call - get_debug_event() until PROCESS_EXITED is received. In this mode, all other - events will be automatically handled and process will be resumed. This event is - generated in debthread. Must be implemented. - - @return: DRC_NONE, DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_get_debapp_attrs (variable) - Retrieve process- and debugger-specific runtime attributes. This event is - generated in the main thread. - - @return: DRC_NONE, DRC_OK - -ida_idd.debugger_t.ev_get_debmod_extensions (variable) - Get pointer to debugger specific events. This event returns a pointer to a - structure that holds pointers to debugger module specific events. For - information on the structure layout, please check the corresponding debugger - module. Most debugger modules return nullptr because they do not have any - extensions. Available extensions may be generated from plugins. This event is - generated in the main thread. - - @return: DRC_NONE, DRC_OK see EXT - -ida_idd.debugger_t.ev_get_debug_event (variable) - Get a pending debug event and suspend the process. This event will be generated - regularly by IDA. This event is generated in debthread. IMPORTANT: the - BREAKPOINT/EXCEPTION/STEP events must be reported only after reporting other - pending events for a thread. Must be implemented. - - @retval ignored - -ida_idd.debugger_t.ev_get_memory_info (variable) - Get information on the memory ranges. The debugger module fills 'ranges'. The - returned vector must be sorted. This event is generated in debthread. Must be - implemented. - - @retval DRC_OK: new memory layout is returned - @retval DRC_FAILED,DRC_NETERR,DRC_NOPROC,DRC_NOCHG,DRC_IDBSEG - -ida_idd.debugger_t.ev_get_processes (variable) - Return information about the running processes. This event is generated in the - main thread. Available if DBG_HAS_GET_PROCESSES is set - - @return: DRC_NONE, DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_get_srcinfo_path (variable) - Get the path to a file containing source debug info for the given module. This - allows srcinfo providers to call into the debugger when looking for debug info. - It is useful in certain cases like the iOS debugger, which is a remote debugger - but the remote debugserver does not provide dwarf info. So, we allow the - debugger client to decide where to look for debug info locally. - - @return: DRC_NONE, DRC_OK result stored in PATH - -ida_idd.debugger_t.ev_init_debugger (variable) - Initialize debugger. This event is generated in the main thread. - - @return: DRC_OK, DRC_FAILED - -ida_idd.debugger_t.ev_is_tracing_enabled (variable) - Is tracing enabled? The kernel will generated this event if the debugger plugin - set DBG_FLAG_TRACER_MODULE. TRACE_BIT can be one of the following: #STEP_TRACE, - #INSN_TRACE, #BBLK_TRACE or #FUNC_TRACE - - @retval DRC_OK: bit is set - @retval DRC_NONE: bit is not set or not implemented - -ida_idd.debugger_t.ev_map_address (variable) - Map process address. The debugger module may ignore this event. This event is - generated in debthread. IDA will generate this event only if DBG_HAS_MAP_ADDRESS - is set. - - @return: DRC_NONE, DRC_OK see MAPPED - -ida_idd.debugger_t.ev_open_file (variable) - @retval (int): handle - @retval -1: error - -ida_idd.debugger_t.ev_read_file (variable) - @retval number: of read bytes - -ida_idd.debugger_t.ev_read_memory (variable) - Read process memory. This event is generated in debthread. - - @return: DRC_OK, DRC_FAILED, DRC_NOPROC - -ida_idd.debugger_t.ev_read_registers (variable) - Read thread registers. This event is generated in debthread. Must be - implemented. - - @return: DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_rebase_if_required_to (variable) - Rebase database if the debugged program has been rebased by the system. This - event is generated in the main thread. - - @return: DRC_NONE, DRC_OK - -ida_idd.debugger_t.ev_request_pause (variable) - Prepare to pause the process. Normally the next get_debug_event() will pause the - process If the process is sleeping, then the pause will not occur until the - process wakes up. If the debugger module does not react to this event, then it - will be impossible to pause the program. This event is generated in debthread. - Available if DBG_HAS_REQUEST_PAUSE is set - - @return: DRC_NONE, DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_resume (variable) - Continue after handling the event. This event is generated in debthread. Must be - implemented. - - @return: DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_rexec (variable) - Execute a command on the remote computer. Available if DBG_HAS_REXEC is set - - @return: (int) exit code - -ida_idd.debugger_t.ev_send_ioctl (variable) - Perform a debugger-specific event. This event is generated in debthread - - @retval DRC_... - -ida_idd.debugger_t.ev_set_exception_info (variable) - Set exception handling. This event is generated in debthread or the main thread. - Available if DBG_HAS_SET_EXCEPTION_INFO is set - - @return: DRC_NONE, DRC_OK - -ida_idd.debugger_t.ev_set_resume_mode (variable) - Specify resume action Available if DBG_HAS_SET_RESUME_MODE is set - -ida_idd.debugger_t.ev_start_process (variable) - Start an executable to debug. This event is generated in debthread. Must be - implemented. - - @return: DRC_OK, DRC_CRC, DRC_FAILED, DRC_NETERR, DRC_NOFILE - -ida_idd.debugger_t.ev_suspended (variable) - This event will be generated by the kernel each time it has suspended the - debuggee process and refreshed the database. The debugger module may add - information to the database if necessary. - - The reason for introducing this event is that when an event like LOAD_DLL - happens, the database does not reflect the memory state yet and therefore we - can't add information about the dll into the database in the get_debug_event() - function. Only when the kernel has adjusted the database we can do it. Example: - for loaded PE DLLs we can add the exported function names to the list of debug - names (see set_debug_names()). - - This event is generated in the main thread. - - @return: DRC_NONE, DRC_OK - -ida_idd.debugger_t.ev_term_debugger (variable) - Terminate debugger. This event is generated in the main thread. - - @return: DRC_OK, DRC_FAILED - -ida_idd.debugger_t.ev_thread_continue (variable) - Resume a suspended thread Available if DBG_HAS_THREAD_CONTINUE is set - -ida_idd.debugger_t.ev_thread_get_sreg_base (variable) - Get information about the base of a segment register. Currently used by the IBM - PC module to resolve references like fs:0. This event is generated in debthread. - Available if DBG_HAS_THREAD_GET_SREG_BASE is set - - @return: DRC_NONE, DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_thread_suspend (variable) - Suspend a running thread Available if DBG_HAS_THREAD_SUSPEND is set - -ida_idd.debugger_t.ev_update_bpts (variable) - Add/del breakpoints. bpts array contains nadd bpts to add, followed by ndel bpts - to del. This event is generated in debthread. - - @return: DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.ev_update_call_stack (variable) - Calculate the call stack trace for the given thread. This event is generated - when the process is suspended and should fill the 'trace' object with the - information about the current call stack. If this event returns DRC_NONE, IDA - will try to invoke a processor-specific mechanism (see - processor_t::ev_update_call_stack). If the current processor module does not - implement stack tracing, then IDA will fall back to a generic algorithm (based - on the frame pointer chain) to calculate the trace. This event is ideal if the - debugging targets manage stack frames in a peculiar way, requiring special - analysis. This event is generated in the main thread. Available if - DBG_HAS_UPDATE_CALL_STACK is set - - @retval DRC_NONE: false or not implemented - @return: DRC_OK success - -ida_idd.debugger_t.ev_update_lowcnds (variable) - Update low-level (server side) breakpoint conditions. This event is generated in - debthread. - - @return: DRC_OK, DRC_NETERR - -ida_idd.debugger_t.ev_write_file (variable) - @retval number: of written bytes - -ida_idd.debugger_t.ev_write_memory (variable) - Write process memory. This event is generated in debthread. - - @retval DRC_OK,DRC_FAILED,DRC_NOPROC - -ida_idd.debugger_t.ev_write_register (variable) - Write one thread register. This event is generated in debthread. Must be - implemented. - - @return: DRC_OK, DRC_FAILED, DRC_NETERR - -ida_idd.debugger_t.eval_lowcnd (method) - eval_lowcnd(self, tid, ea) -> drc_t - - @param tid: thid_t - @param ea: ea_t - -ida_idd.debugger_t.exit_process (method) - exit_process(self) -> drc_t - -ida_idd.debugger_t.fake_memory (method) - fake_memory(self) -> bool - -ida_idd.debugger_t.filetype (variable) - Input file type for the instant debugger. This value will be used after - attaching to a new process. - -ida_idd.debugger_t.flags2 (variable) - Debugger module features - -ida_idd.debugger_t.get_debapp_attrs (method) - get_debapp_attrs(self, out_pattrs) -> bool - - @param out_pattrs: debapp_attrs_t * - -ida_idd.debugger_t.get_debmod_extensions (method) - get_debmod_extensions(self) -> void const * - -ida_idd.debugger_t.get_debug_event (method) - get_debug_event(self, event, timeout_ms) -> gdecode_t - - @param event: debug_event_t * - @param timeout_ms: int - -ida_idd.debugger_t.get_memory_info (method) - get_memory_info(self, ranges) -> drc_t - - @param ranges: meminfo_vec_t & - -ida_idd.debugger_t.get_processes (method) - get_processes(self, procs) -> drc_t - - @param procs: procinfo_vec_t * - -ida_idd.debugger_t.get_srcinfo_path (method) - get_srcinfo_path(self, path, base) -> bool - - @param path: qstring * - @param base: ea_t - -ida_idd.debugger_t.has_appcall (method) - has_appcall(self) -> bool - -ida_idd.debugger_t.has_attach_process (method) - has_attach_process(self) -> bool - -ida_idd.debugger_t.has_check_bpt (method) - has_check_bpt(self) -> bool - -ida_idd.debugger_t.has_detach_process (method) - has_detach_process(self) -> bool - -ida_idd.debugger_t.has_get_processes (method) - has_get_processes(self) -> bool - -ida_idd.debugger_t.has_map_address (method) - has_map_address(self) -> bool - -ida_idd.debugger_t.has_open_file (method) - has_open_file(self) -> bool - -ida_idd.debugger_t.has_request_pause (method) - has_request_pause(self) -> bool - -ida_idd.debugger_t.has_rexec (method) - has_rexec(self) -> bool - -ida_idd.debugger_t.has_set_exception_info (method) - has_set_exception_info(self) -> bool - -ida_idd.debugger_t.has_set_resume_mode (method) - has_set_resume_mode(self) -> bool - -ida_idd.debugger_t.has_soft_bpt (method) - has_soft_bpt(self) -> bool - -ida_idd.debugger_t.has_thread_continue (method) - has_thread_continue(self) -> bool - -ida_idd.debugger_t.has_thread_get_sreg_base (method) - has_thread_get_sreg_base(self) -> bool - -ida_idd.debugger_t.has_thread_suspend (method) - has_thread_suspend(self) -> bool - -ida_idd.debugger_t.has_update_call_stack (method) - has_update_call_stack(self) -> bool - -ida_idd.debugger_t.id (variable) - one of Debugger API module id - -ida_idd.debugger_t.init_debugger (method) - init_debugger(self, hostname, portnum, password) -> bool - - @param hostname: char const * - @param portnum: int - @param password: char const * - -ida_idd.debugger_t.is_remote (method) - is_remote(self) -> bool - -ida_idd.debugger_t.is_resmod_avail (method) - is_resmod_avail(self, resmod) -> bool - - @param resmod: int - -ida_idd.debugger_t.is_safe (method) - is_safe(self) -> bool - -ida_idd.debugger_t.is_tracing_enabled (method) - is_tracing_enabled(self, tid, tracebit) -> bool - - @param tid: thid_t - @param tracebit: int - -ida_idd.debugger_t.map_address (method) - map_address(self, off, regs, regnum) -> ea_t - - @param off: ea_t - @param regs: regval_t const * - @param regnum: int - -ida_idd.debugger_t.may_disturb (method) - may_disturb(self) -> bool - -ida_idd.debugger_t.may_take_exit_snapshot (method) - may_take_exit_snapshot(self) -> bool - -ida_idd.debugger_t.memory_page_size (variable) - Size of a memory page. Usually 4K. - -ida_idd.debugger_t.must_have_hostname (method) - must_have_hostname(self) -> bool - -ida_idd.debugger_t.name (variable) - Short debugger name like win32 or linux. - -ida_idd.debugger_t.nregs (variable) - Number of registers. - -ida_idd.debugger_t.open_file (method) - open_file(self, file, fsize, readonly) -> int - - @param file: char const * - @param fsize: uint64 * - @param readonly: bool - -ida_idd.debugger_t.processor (variable) - Required processor name. Used for instant debugging to load the correct - processor module - -ida_idd.debugger_t.read_file (method) - read_file(self, fn, off, buf, size) -> ssize_t - - @param fn: int - @param off: qoff64_t - @param buf: void * - @param size: size_t - -ida_idd.debugger_t.read_memory (method) - read_memory(self, nbytes, ea, buffer, size) -> drc_t - - @param nbytes: size_t * - @param ea: ea_t - @param buffer: void * - @param size: size_t - -ida_idd.debugger_t.read_registers (method) - read_registers(self, tid, clsmask, values) -> drc_t - - @param tid: thid_t - @param clsmask: int - @param values: regval_t * - -ida_idd.debugger_t.rebase_if_required_to (method) - rebase_if_required_to(self, new_base) - - @param new_base: ea_t - -ida_idd.debugger_t.regclasses (variable) - Array of register class names. - -ida_idd.debugger_t.registers (variable) - Array of registers. Use regs() to access it. - -ida_idd.debugger_t.regs (method) - regs(self, idx) -> register_info_t - - @param idx: int - -ida_idd.debugger_t.request_pause (method) - request_pause(self) -> drc_t - -ida_idd.debugger_t.resume (method) - resume(self, event) -> drc_t - - @param event: debug_event_t const * - -ida_idd.debugger_t.resume_modes (variable) - Resume modes - -ida_idd.debugger_t.rexec (method) - rexec(self, cmdline) -> int - - @param cmdline: char const * - -ida_idd.debugger_t.send_ioctl (method) - send_ioctl(self, fn, buf, poutbuf, poutsize) -> drc_t - - @param fn: int - @param buf: void const * - @param poutbuf: void ** - @param poutsize: ssize_t * - -ida_idd.debugger_t.set_exception_info (method) - set_exception_info(self, info, qty) - - @param info: exception_info_t const * - @param qty: int - -ida_idd.debugger_t.set_resume_mode (method) - set_resume_mode(self, tid, resmod) -> drc_t - - @param tid: thid_t - @param resmod: enum resume_mode_t - -ida_idd.debugger_t.start_process (method) - start_process(self, path, args, envs, startdir, dbg_proc_flags, input_path, input_file_crc32) -> drc_t - - @param path: char const * - @param args: char const * - @param envs: launch_env_t * - @param startdir: char const * - @param dbg_proc_flags: uint32 - @param input_path: char const * - @param input_file_crc32: uint32 - -ida_idd.debugger_t.supports_debthread (method) - supports_debthread(self) -> bool - -ida_idd.debugger_t.supports_lowcnds (method) - supports_lowcnds(self) -> bool - -ida_idd.debugger_t.suspended (method) - suspended(self, dlls_added, thr_names=None) - - @param dlls_added: bool - @param thr_names: thread_name_vec_t * - -ida_idd.debugger_t.term_debugger (method) - term_debugger(self) -> bool - -ida_idd.debugger_t.thread_continue (method) - thread_continue(self, tid) -> drc_t - - @param tid: thid_t - -ida_idd.debugger_t.thread_get_sreg_base (method) - thread_get_sreg_base(self, answer, tid, sreg_value) -> drc_t - - @param answer: ea_t * - @param tid: thid_t - @param sreg_value: int - -ida_idd.debugger_t.thread_suspend (method) - thread_suspend(self, tid) -> drc_t - - @param tid: thid_t - -ida_idd.debugger_t.update_bpts (method) - update_bpts(self, nbpts, bpts, nadd, ndel) -> drc_t - - @param nbpts: int * - @param bpts: update_bpt_info_t * - @param nadd: int - @param ndel: int - -ida_idd.debugger_t.update_call_stack (method) - update_call_stack(self, tid, trace) -> drc_t - - @param tid: thid_t - @param trace: call_stack_t * - -ida_idd.debugger_t.update_lowcnds (method) - update_lowcnds(self, nupdated, lowcnds, nlowcnds) -> drc_t - - @param nupdated: int * - @param lowcnds: lowcnd_t const * - @param nlowcnds: int - -ida_idd.debugger_t.use_memregs (method) - use_memregs(self) -> bool - -ida_idd.debugger_t.use_sregs (method) - use_sregs(self) -> bool - -ida_idd.debugger_t.version (variable) - Expected kernel version, should be IDD_INTERFACE_VERSION - -ida_idd.debugger_t.virtual_threads (method) - virtual_threads(self) -> bool - -ida_idd.debugger_t.write_file (method) - write_file(self, fn, off, buf) -> ssize_t - - @param fn: int - @param off: qoff64_t - @param buf: void const * - -ida_idd.debugger_t.write_memory (method) - write_memory(self, nbytes, ea, buffer, size) -> drc_t - - @param nbytes: size_t * - @param ea: ea_t - @param buffer: void const * - @param size: size_t - -ida_idd.debugger_t.write_register (method) - write_register(self, tid, regidx, value) -> drc_t - - @param tid: thid_t - @param regidx: int - @param value: regval_t const * - -ida_idd.dyn_register_info_array (class) - Proxy of C++ dynamic_wrapped_array_t< register_info_t > class. - -ida_idd.dyn_register_info_array.__getitem__ (method) - __getitem__(self, i) -> register_info_t - - @param i: size_t - -ida_idd.dyn_register_info_array.__init__ (method) - __init__(self, _data, _count) -> dyn_register_info_array - - @param _data: register_info_t * - @param _count: size_t - -ida_idd.dyn_register_info_array.__len__ (method) - __len__(self) -> size_t - -ida_idd.dyn_register_info_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: register_info_t const & - -ida_idd.exception_info_t (class) - Proxy of C++ exception_info_t class. - -ida_idd.exception_info_t.__init__ (method) - __init__(self) -> exception_info_t - __init__(self, _code, _flags, _name, _desc) -> exception_info_t - - @param _code: uint - @param _flags: uint32 - @param _name: char const * - @param _desc: char const * - -ida_idd.exception_info_t.break_on (method) - break_on(self) -> bool - Should we break on the exception? - -ida_idd.exception_info_t.code (variable) - exception code - -ida_idd.exception_info_t.desc (variable) - Long message used to display info about the exception. - -ida_idd.exception_info_t.flags (variable) - Exception info flags - -ida_idd.exception_info_t.handle (method) - handle(self) -> bool - Should we handle the exception? - -ida_idd.exception_info_t.name (variable) - Exception standard name. - -ida_idd.excinfo_t (class) - Proxy of C++ excinfo_t class. - -ida_idd.excinfo_t.__init__ (method) - __init__(self) -> excinfo_t - -ida_idd.excinfo_t.can_cont (variable) - Execution of the process can continue after this exception? - -ida_idd.excinfo_t.code (variable) - Exception code. - -ida_idd.excinfo_t.ea (variable) - Possible address referenced by the exception. - -ida_idd.excinfo_t.info (variable) - Exception message. - -ida_idd.excvec_t (class) - Proxy of C++ qvector< exception_info_t > class. - -ida_idd.excvec_t.__getitem__ (method) - __getitem__(self, i) -> exception_info_t - - @param i: size_t - -ida_idd.excvec_t.__init__ (method) - __init__(self) -> excvec_t - __init__(self, x) -> excvec_t - - @param x: qvector< exception_info_t > const & - -ida_idd.excvec_t.__len__ (method) - __len__(self) -> size_t - -ida_idd.excvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: exception_info_t const & - -ida_idd.excvec_t.at (method) - at(self, _idx) -> exception_info_t - - @param _idx: size_t - -ida_idd.excvec_t.begin (method) - begin(self) -> exception_info_t - -ida_idd.excvec_t.capacity (method) - capacity(self) -> size_t - -ida_idd.excvec_t.clear (method) - clear(self) - -ida_idd.excvec_t.empty (method) - empty(self) -> bool - -ida_idd.excvec_t.end (method) - end(self) -> exception_info_t - -ida_idd.excvec_t.erase (method) - erase(self, it) -> exception_info_t - - @param it: qvector< exception_info_t >::iterator - - erase(self, first, last) -> exception_info_t - - @param first: qvector< exception_info_t >::iterator - @param last: qvector< exception_info_t >::iterator - -ida_idd.excvec_t.extract (method) - extract(self) -> exception_info_t - -ida_idd.excvec_t.grow (method) - grow(self, x=exception_info_t()) - - @param x: exception_info_t const & - -ida_idd.excvec_t.inject (method) - inject(self, s, len) - - @param s: exception_info_t * - @param len: size_t - -ida_idd.excvec_t.insert (method) - insert(self, it, x) -> exception_info_t - - @param it: qvector< exception_info_t >::iterator - @param x: exception_info_t const & - -ida_idd.excvec_t.pop_back (method) - pop_back(self) - -ida_idd.excvec_t.push_back (method) - push_back(self, x) - - @param x: exception_info_t const & - - push_back(self) -> exception_info_t - -ida_idd.excvec_t.qclear (method) - qclear(self) - -ida_idd.excvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_idd.excvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: exception_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_idd.excvec_t.size (method) - size(self) -> size_t - -ida_idd.excvec_t.swap (method) - swap(self, r) - - @param r: qvector< exception_info_t > & - -ida_idd.excvec_t.truncate (method) - truncate(self) - -ida_idd.get_dbg (function) - get_dbg() -> debugger_t - -ida_idd.get_event_bpt_hea (function) - get_event_bpt_hea(ev) -> ea_t - - @param ev: debug_event_t const * - -ida_idd.get_event_exc_code (function) - get_event_exc_code(ev) -> uint - - @param ev: debug_event_t const * - -ida_idd.get_event_exc_ea (function) - get_event_exc_ea(ev) -> ea_t - - @param ev: debug_event_t const * - -ida_idd.get_event_exc_info (function) - get_event_exc_info(ev) -> str - - @param ev: debug_event_t const * - -ida_idd.get_event_info (function) - get_event_info(ev) -> str - - @param ev: debug_event_t const * - -ida_idd.get_event_module_base (function) - get_event_module_base(ev) -> ea_t - - @param ev: debug_event_t const * - -ida_idd.get_event_module_name (function) - get_event_module_name(ev) -> str - - @param ev: debug_event_t const * - -ida_idd.get_event_module_size (function) - get_event_module_size(ev) -> asize_t - - @param ev: debug_event_t const * - -ida_idd.launch_env_t (class) - Proxy of C++ launch_env_t class. - -ida_idd.launch_env_t.__init__ (method) - __init__(self) -> launch_env_t - -ida_idd.meminfo_vec_t (class) - Proxy of C++ meminfo_vec_t class. - -ida_idd.meminfo_vec_t.__init__ (method) - __init__(self) -> meminfo_vec_t - -ida_idd.meminfo_vec_template_t (class) - Proxy of C++ qvector< memory_info_t > class. - -ida_idd.meminfo_vec_template_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< memory_info_t > const & - -ida_idd.meminfo_vec_template_t.__getitem__ (method) - __getitem__(self, i) -> memory_info_t - - @param i: size_t - -ida_idd.meminfo_vec_template_t.__init__ (method) - __init__(self) -> meminfo_vec_template_t - __init__(self, x) -> meminfo_vec_template_t - - @param x: qvector< memory_info_t > const & - -ida_idd.meminfo_vec_template_t.__len__ (method) - __len__(self) -> size_t - -ida_idd.meminfo_vec_template_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< memory_info_t > const & - -ida_idd.meminfo_vec_template_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: memory_info_t const & - -ida_idd.meminfo_vec_template_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: memory_info_t const & - -ida_idd.meminfo_vec_template_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: memory_info_t const & - -ida_idd.meminfo_vec_template_t.at (method) - at(self, _idx) -> memory_info_t - - @param _idx: size_t - -ida_idd.meminfo_vec_template_t.begin (method) - begin(self) -> memory_info_t - -ida_idd.meminfo_vec_template_t.capacity (method) - capacity(self) -> size_t - -ida_idd.meminfo_vec_template_t.clear (method) - clear(self) - -ida_idd.meminfo_vec_template_t.empty (method) - empty(self) -> bool - -ida_idd.meminfo_vec_template_t.end (method) - end(self) -> memory_info_t - -ida_idd.meminfo_vec_template_t.erase (method) - erase(self, it) -> memory_info_t - - @param it: qvector< memory_info_t >::iterator - - erase(self, first, last) -> memory_info_t - - @param first: qvector< memory_info_t >::iterator - @param last: qvector< memory_info_t >::iterator - -ida_idd.meminfo_vec_template_t.extract (method) - extract(self) -> memory_info_t - -ida_idd.meminfo_vec_template_t.find (method) - find(self, x) -> memory_info_t - - @param x: memory_info_t const & - -ida_idd.meminfo_vec_template_t.grow (method) - grow(self, x=memory_info_t()) - - @param x: memory_info_t const & - -ida_idd.meminfo_vec_template_t.has (method) - has(self, x) -> bool - - @param x: memory_info_t const & - -ida_idd.meminfo_vec_template_t.inject (method) - inject(self, s, len) - - @param s: memory_info_t * - @param len: size_t - -ida_idd.meminfo_vec_template_t.insert (method) - insert(self, it, x) -> memory_info_t - - @param it: qvector< memory_info_t >::iterator - @param x: memory_info_t const & - -ida_idd.meminfo_vec_template_t.pop_back (method) - pop_back(self) - -ida_idd.meminfo_vec_template_t.push_back (method) - push_back(self, x) - - @param x: memory_info_t const & - - push_back(self) -> memory_info_t - -ida_idd.meminfo_vec_template_t.qclear (method) - qclear(self) - -ida_idd.meminfo_vec_template_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_idd.meminfo_vec_template_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: memory_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_idd.meminfo_vec_template_t.size (method) - size(self) -> size_t - -ida_idd.meminfo_vec_template_t.swap (method) - swap(self, r) - - @param r: qvector< memory_info_t > & - -ida_idd.meminfo_vec_template_t.truncate (method) - truncate(self) - -ida_idd.memory_info_t (class) - Proxy of C++ memory_info_t class. - -ida_idd.memory_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: memory_info_t const & - -ida_idd.memory_info_t.__init__ (method) - __init__(self) -> memory_info_t - -ida_idd.memory_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: memory_info_t const & - -ida_idd.memory_info_t.bitness (variable) - Number of bits in segment addresses (0-16bit, 1-32bit, 2-64bit) - -ida_idd.memory_info_t.name (variable) - Memory range name. - -ida_idd.memory_info_t.perm (variable) - Memory range permissions (0-no information): see segment.hpp. - -ida_idd.memory_info_t.sbase (variable) - Segment base (meaningful only for segmented architectures, e.g. 16-bit x86) The - base is specified in paragraphs (i.e. shifted to the right by 4) - -ida_idd.memory_info_t.sclass (variable) - Memory range class name. - -ida_idd.modinfo_t (class) - Proxy of C++ modinfo_t class. - -ida_idd.modinfo_t.__init__ (method) - __init__(self) -> modinfo_t - -ida_idd.modinfo_t.base (variable) - module base address. if unknown pass BADADDR - -ida_idd.modinfo_t.name (variable) - full name of the module - -ida_idd.modinfo_t.rebase_to (variable) - if not BADADDR, then rebase the program to the specified address - -ida_idd.modinfo_t.size (variable) - module size. if unknown pass 0 - -ida_idd.process_info_t (class) - Proxy of C++ process_info_t class. - -ida_idd.process_info_t.__init__ (method) - __init__(self) -> process_info_t - -ida_idd.process_info_t.name (variable) - process name - -ida_idd.process_info_t.pid (variable) - process id - -ida_idd.procinfo_vec_t (class) - Proxy of C++ qvector< process_info_t > class. - -ida_idd.procinfo_vec_t.__getitem__ (method) - __getitem__(self, i) -> process_info_t - - @param i: size_t - -ida_idd.procinfo_vec_t.__init__ (method) - __init__(self) -> procinfo_vec_t - __init__(self, x) -> procinfo_vec_t - - @param x: qvector< process_info_t > const & - -ida_idd.procinfo_vec_t.__len__ (method) - __len__(self) -> size_t - -ida_idd.procinfo_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: process_info_t const & - -ida_idd.procinfo_vec_t.at (method) - at(self, _idx) -> process_info_t - - @param _idx: size_t - -ida_idd.procinfo_vec_t.begin (method) - begin(self) -> process_info_t - -ida_idd.procinfo_vec_t.capacity (method) - capacity(self) -> size_t - -ida_idd.procinfo_vec_t.clear (method) - clear(self) - -ida_idd.procinfo_vec_t.empty (method) - empty(self) -> bool - -ida_idd.procinfo_vec_t.end (method) - end(self) -> process_info_t - -ida_idd.procinfo_vec_t.erase (method) - erase(self, it) -> process_info_t - - @param it: qvector< process_info_t >::iterator - - erase(self, first, last) -> process_info_t - - @param first: qvector< process_info_t >::iterator - @param last: qvector< process_info_t >::iterator - -ida_idd.procinfo_vec_t.extract (method) - extract(self) -> process_info_t - -ida_idd.procinfo_vec_t.grow (method) - grow(self, x=process_info_t()) - - @param x: process_info_t const & - -ida_idd.procinfo_vec_t.inject (method) - inject(self, s, len) - - @param s: process_info_t * - @param len: size_t - -ida_idd.procinfo_vec_t.insert (method) - insert(self, it, x) -> process_info_t - - @param it: qvector< process_info_t >::iterator - @param x: process_info_t const & - -ida_idd.procinfo_vec_t.pop_back (method) - pop_back(self) - -ida_idd.procinfo_vec_t.push_back (method) - push_back(self, x) - - @param x: process_info_t const & - - push_back(self) -> process_info_t - -ida_idd.procinfo_vec_t.qclear (method) - qclear(self) - -ida_idd.procinfo_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_idd.procinfo_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: process_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_idd.procinfo_vec_t.size (method) - size(self) -> size_t - -ida_idd.procinfo_vec_t.swap (method) - swap(self, r) - - @param r: qvector< process_info_t > & - -ida_idd.procinfo_vec_t.truncate (method) - truncate(self) - -ida_idd.register_info_t (class) - Proxy of C++ register_info_t class. - -ida_idd.register_info_t.__get_bit_strings (method) - __get_bit_strings(self) -> PyObject * - -ida_idd.register_info_t.__init__ (method) - __init__(self) -> register_info_t - -ida_idd.register_info_t.bit_strings (variable) - strings corresponding to each bit of the register. (nullptr = no bit, same name - = multi-bits mask) - -ida_idd.register_info_t.default_bit_strings_mask (variable) - mask of default bits - -ida_idd.register_info_t.dtype (variable) - Register size (see Operand value types) - -ida_idd.register_info_t.flags (variable) - Register info attribute flags - -ida_idd.register_info_t.name (variable) - Register name. - -ida_idd.register_info_t.register_class (variable) - segment, mmx, etc. - -ida_idd.regval_t (class) - Proxy of C++ regval_t class. - -ida_idd.regval_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: regval_t const & - -ida_idd.regval_t.__init__ (method) - __init__(self) -> regval_t - __init__(self, r) -> regval_t - - @param r: regval_t const & - -ida_idd.regval_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: regval_t const & - -ida_idd.regval_t.bytes (method) - bytes(self) -> bytevec_t - Get const custom value. - bytes(self) -> bytevec_t const & - -ida_idd.regval_t.clear (method) - clear(self) - Clear register value. - -ida_idd.regval_t.fval (variable) - 12: floating point value in the internal representation (see ieee.h) - -ida_idd.regval_t.get_data (method) - get_data(self) - Get const pointer to value. - get_data(self) -> void const * - -ida_idd.regval_t.get_data_size (method) - get_data_size(self) -> size_t - Get size of value. - -ida_idd.regval_t.ival (variable) - 8: integer value - -ida_idd.regval_t.pyval (method) - pyval(self, dtype) -> PyObject * - - @param dtype: op_dtype_t - -ida_idd.regval_t.rvtype (variable) - one of Register value types - -ida_idd.regval_t.set_bytes (method) - set_bytes(self, data, size) - Initialize this regval to an empty custom value. - - @param data: uchar const * - @param size: size_t - - set_bytes(self, v) - - @param v: bytevec_t const & - - set_bytes(self) -> bytevec_t & - -ida_idd.regval_t.set_float (method) - set_float(self, x) - Set float value (fval) - - @param x: (C++: const fpvalue_t &) fpvalue_t const & - -ida_idd.regval_t.set_int (method) - set_int(self, x) - - @param x: uint64 - -ida_idd.regval_t.set_pyval (method) - set_pyval(self, o, dtype) -> bool - - @param o: PyObject * - @param dtype: op_dtype_t - -ida_idd.regval_t.set_unavailable (method) - set_unavailable(self) - Mark as unavailable. - -ida_idd.regval_t.swap (method) - swap(self, r) - Set this = r and r = this. - - @param r: (C++: regval_t &) - -ida_idd.regvals_t (class) - Proxy of C++ qvector< regval_t > class. - -ida_idd.regvals_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< regval_t > const & - -ida_idd.regvals_t.__getitem__ (method) - __getitem__(self, i) -> regval_t - - @param i: size_t - -ida_idd.regvals_t.__init__ (method) - __init__(self) -> regvals_t - __init__(self, x) -> regvals_t - - @param x: qvector< regval_t > const & - -ida_idd.regvals_t.__len__ (method) - __len__(self) -> size_t - -ida_idd.regvals_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< regval_t > const & - -ida_idd.regvals_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: regval_t const & - -ida_idd.regvals_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: regval_t const & - -ida_idd.regvals_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: regval_t const & - -ida_idd.regvals_t.at (method) - at(self, _idx) -> regval_t - - @param _idx: size_t - -ida_idd.regvals_t.begin (method) - begin(self) -> regval_t - -ida_idd.regvals_t.capacity (method) - capacity(self) -> size_t - -ida_idd.regvals_t.clear (method) - clear(self) - -ida_idd.regvals_t.empty (method) - empty(self) -> bool - -ida_idd.regvals_t.end (method) - end(self) -> regval_t - -ida_idd.regvals_t.erase (method) - erase(self, it) -> regval_t - - @param it: qvector< regval_t >::iterator - - erase(self, first, last) -> regval_t - - @param first: qvector< regval_t >::iterator - @param last: qvector< regval_t >::iterator - -ida_idd.regvals_t.extract (method) - extract(self) -> regval_t - -ida_idd.regvals_t.find (method) - find(self, x) -> regval_t - - @param x: regval_t const & - -ida_idd.regvals_t.grow (method) - grow(self, x=regval_t()) - - @param x: regval_t const & - -ida_idd.regvals_t.has (method) - has(self, x) -> bool - - @param x: regval_t const & - -ida_idd.regvals_t.inject (method) - inject(self, s, len) - - @param s: regval_t * - @param len: size_t - -ida_idd.regvals_t.insert (method) - insert(self, it, x) -> regval_t - - @param it: qvector< regval_t >::iterator - @param x: regval_t const & - -ida_idd.regvals_t.pop_back (method) - pop_back(self) - -ida_idd.regvals_t.push_back (method) - push_back(self, x) - - @param x: regval_t const & - - push_back(self) -> regval_t - -ida_idd.regvals_t.qclear (method) - qclear(self) - -ida_idd.regvals_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_idd.regvals_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: regval_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_idd.regvals_t.size (method) - size(self) -> size_t - -ida_idd.regvals_t.swap (method) - swap(self, r) - - @param r: qvector< regval_t > & - -ida_idd.regvals_t.truncate (method) - truncate(self) - -ida_idd.scattered_segm_t (class) - Proxy of C++ scattered_segm_t class. - -ida_idd.scattered_segm_t.__init__ (method) - __init__(self) -> scattered_segm_t - -ida_idd.scattered_segm_t.name (variable) - name of the segment - -ida_idd.set_debug_event_code (function) - set_debug_event_code(ev, id) - - @param ev: debug_event_t * - @param id: enum event_id_t - -ida_idd.thread_name_t (class) - Proxy of C++ thread_name_t class. - -ida_idd.thread_name_t.__init__ (method) - __init__(self) -> thread_name_t - -ida_idd.thread_name_t.name (variable) - new thread name - -ida_idd.thread_name_t.tid (variable) - thread - -ida_idp (module) - Contains definition of the interface to IDP modules. - - The interface consists of two structures: - * definition of target assembler: ::ash - * definition of current processor: ::ph - - These structures contain information about target processor and assembler - features. - - It also defines two groups of kernel events: - * processor_t::event_t processor related events - * idb_event:event_code_t database related events - - The processor related events are used to communicate with the processor module. - The database related events are used to inform any interested parties, like - plugins or processor modules, about the changes in the database. - -ida_idp.AS2_BRACE (variable) - Use braces for all expressions. - -ida_idp.AS2_BYTE1CHAR (variable) - One symbol per processor byte. Meaningful only for wide byte processors - -ida_idp.AS2_COLONSUF (variable) - addresses may have ":xx" suffix; this suffix must be ignored when extracting the - address under the cursor - -ida_idp.AS2_IDEALDSCR (variable) - Description of struc/union is in the 'reverse' form (keyword before name), the - same as in borland tasm ideal - -ida_idp.AS2_STRINV (variable) - Invert meaning of idainfo::wide_high_byte_first for text strings (for processors - with bytes bigger than 8 bits) - -ida_idp.AS2_TERSESTR (variable) - 'terse' structure initialization form; NAME<fld,fld,...> is supported - -ida_idp.AS2_YWORD (variable) - a_yword field is present and valid - -ida_idp.AS2_ZWORD (variable) - a_zword field is present and valid - -ida_idp.ASB_BINF0 (variable) - 010101b - -ida_idp.ASB_BINF1 (variable) - ^B010101 - -ida_idp.ASB_BINF2 (variable) - %010101 - -ida_idp.ASB_BINF3 (variable) - 0b1010101 - -ida_idp.ASB_BINF4 (variable) - b'1010101 - -ida_idp.ASB_BINF5 (variable) - b'1010101' - -ida_idp.ASD_DECF0 (variable) - 34 - -ida_idp.ASD_DECF1 (variable) - #34 - -ida_idp.ASD_DECF2 (variable) - 34. - -ida_idp.ASD_DECF3 (variable) - .34 - -ida_idp.ASH_HEXF0 (variable) - 34h - -ida_idp.ASH_HEXF1 (variable) - h'34 - -ida_idp.ASH_HEXF2 (variable) - 34 - -ida_idp.ASH_HEXF3 (variable) - 0x34 - -ida_idp.ASH_HEXF4 (variable) - $34 - -ida_idp.ASH_HEXF5 (variable) - <^R > (radix) - -ida_idp.ASO_OCTF0 (variable) - 123o - -ida_idp.ASO_OCTF1 (variable) - 0123 - -ida_idp.ASO_OCTF2 (variable) - 123 - -ida_idp.ASO_OCTF3 (variable) - @123 - -ida_idp.ASO_OCTF4 (variable) - o'123 - -ida_idp.ASO_OCTF5 (variable) - 123q - -ida_idp.ASO_OCTF6 (variable) - ~123 - -ida_idp.ASO_OCTF7 (variable) - q'123 - -ida_idp.AS_1TEXT (variable) - 1 text per line, no bytes - -ida_idp.AS_2CHRE (variable) - double char constants are: "xy - -ida_idp.AS_ALIGN2 (variable) - .align directive expects an exponent rather than a power of 2 (.align 5 means to - align at 32byte boundary) - -ida_idp.AS_ASCIIC (variable) - ascii directive accepts C-like escape sequences (\n,\x01 and similar) - -ida_idp.AS_ASCIIZ (variable) - ascii directive inserts implicit zero byte at the end - -ida_idp.AS_BINFM (variable) - mask - binary number format - -ida_idp.AS_COLON (variable) - create colons after data names ? - -ida_idp.AS_DECFM (variable) - mask - decimal number format - -ida_idp.AS_HEXFM (variable) - mask - hex number format - -ida_idp.AS_LALIGN (variable) - Labels at "align" keyword are supported. - -ida_idp.AS_N2CHR (variable) - can't have 2 byte char consts - -ida_idp.AS_NCHRE (variable) - char constants are: 'x - -ida_idp.AS_NCMAS (variable) - no commas in ascii directives - -ida_idp.AS_NHIAS (variable) - no characters with high bit - -ida_idp.AS_NOCODECLN (variable) - don't create colons after code names - -ida_idp.AS_NOSPACE (variable) - No spaces in expressions. - -ida_idp.AS_NOXRF (variable) - Disable xrefs during the output file generation. - -ida_idp.AS_OCTFM (variable) - mask - octal number format - -ida_idp.AS_OFFST (variable) - offsets are 'offset xxx' ? - -ida_idp.AS_ONEDUP (variable) - One array definition per line. - -ida_idp.AS_RELSUP (variable) - Checkarg: 'and','or','xor' operations with addresses are possible. - -ida_idp.AS_UDATA (variable) - can use '?' in data directives - -ida_idp.AS_UNEQU (variable) - replace undefined data items with EQU (for ANTA's A80) - -ida_idp.AS_XTRNTYPE (variable) - Assembler understands type of extern symbols as ":type" suffix. - -ida_idp.AssembleLine (function) - AssembleLine(ea, cs, ip, use32, nonnul_line) -> bytes - 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 nonnul_line: char const * - @return: - None on failure - - or a string containing the assembled instruction - -ida_idp.CF_CALL (variable) - CALL instruction (should make a procedure here) - -ida_idp.CF_CHG1 (variable) - The instruction modifies the first operand. - -ida_idp.CF_CHG2 (variable) - The instruction modifies the second operand. - -ida_idp.CF_CHG3 (variable) - The instruction modifies the third operand. - -ida_idp.CF_CHG4 (variable) - The instruction modifies the fourth operand. - -ida_idp.CF_CHG5 (variable) - The instruction modifies the fifth operand. - -ida_idp.CF_CHG6 (variable) - The instruction modifies the sixth operand. - -ida_idp.CF_CHG7 (variable) - The instruction modifies the seventh operand. - -ida_idp.CF_CHG8 (variable) - The instruction modifies the eighth operand. - -ida_idp.CF_HLL (variable) - Instruction may be present in a high level language function - -ida_idp.CF_JUMP (variable) - The instruction passes execution using indirect jump or call (thus needs - additional analysis) - -ida_idp.CF_SHFT (variable) - Bit-shift instruction (shl,shr...) - -ida_idp.CF_STOP (variable) - Instruction doesn't pass execution to the next instruction - -ida_idp.CF_USE1 (variable) - The instruction uses value of the first operand. - -ida_idp.CF_USE2 (variable) - The instruction uses value of the second operand. - -ida_idp.CF_USE3 (variable) - The instruction uses value of the third operand. - -ida_idp.CF_USE4 (variable) - The instruction uses value of the fourth operand. - -ida_idp.CF_USE5 (variable) - The instruction uses value of the fifth operand. - -ida_idp.CF_USE6 (variable) - The instruction uses value of the sixth operand. - -ida_idp.CF_USE7 (variable) - The instruction uses value of the seventh operand. - -ida_idp.CF_USE8 (variable) - The instruction uses value of the eighth operand. - -ida_idp.CUSTOM_INSN_ITYPE (variable) - Custom instruction codes defined by processor extension plugins must be greater - than or equal to this - -ida_idp.HKCB_GLOBAL (variable) - is global event listener? if true, the listener will survive database closing - and opening. it will stay in the memory until explicitly unhooked. otherwise the - kernel will delete it as soon as the owner is unloaded. should be used only with - PLUGIN_FIX plugins. - -ida_idp.IDB_Hooks (class) - Proxy of C++ IDB_Hooks class. - -ida_idp.IDB_Hooks.__disown__ (method) - -ida_idp.IDB_Hooks.__init__ (method) - __init__(self, _flags=0, _hkcb_flags=0x0001) -> IDB_Hooks - - @param _flags: uint32 - @param _hkcb_flags: uint32 - -ida_idp.IDB_Hooks.adding_segm (method) - adding_segm(self, s) - A segment is being created. - - @param s: (segment_t *) - -ida_idp.IDB_Hooks.allsegs_moved (method) - allsegs_moved(self, info) - Program rebasing is complete. This event is generated after series of segm_moved - events - - @param info: (segm_move_infos_t *) - -ida_idp.IDB_Hooks.auto_empty (method) - auto_empty(self) - -ida_idp.IDB_Hooks.auto_empty_finally (method) - auto_empty_finally(self) - -ida_idp.IDB_Hooks.bookmark_changed (method) - bookmark_changed(self, index, pos, desc, operation) - Boomarked position changed. - - @param index: (uint32) - @param pos: (::const lochist_entry_t *) - @param desc: (::const char *) - @param operation: (int) 0-added, 1-updated, 2-deleted if desc==nullptr, then the - bookmark was deleted. - -ida_idp.IDB_Hooks.byte_patched (method) - byte_patched(self, ea, old_value) - A byte has been patched. - - @param ea: (::ea_t) - @param old_value: (uint32) - -ida_idp.IDB_Hooks.callee_addr_changed (method) - callee_addr_changed(self, ea, callee) - Callee address has been updated by the user. - - @param ea: (::ea_t) - @param callee: (::ea_t) - -ida_idp.IDB_Hooks.changing_cmt (method) - changing_cmt(self, ea, repeatable_cmt, newcmt) - An item comment is to be changed. - - @param ea: (::ea_t) - @param repeatable_cmt: (bool) - @param newcmt: (const char *) - -ida_idp.IDB_Hooks.changing_enum_bf (method) - changing_enum_bf(self, id, new_bf) - An enum type 'bitfield' attribute is to be changed. - - @param id: (enum_t) - @param new_bf: (bool) - -ida_idp.IDB_Hooks.changing_enum_cmt (method) - changing_enum_cmt(self, id, repeatable, newcmt) - An enum or member type comment is to be changed. - - @param id: (tid_t) - @param repeatable: (bool) - @param newcmt: (const char *) - -ida_idp.IDB_Hooks.changing_op_ti (method) - changing_op_ti(self, ea, n, new_type, new_fnames) - An operand typestring (c/c++ prototype) is to be changed. - - @param ea: (::ea_t) - @param n: (int) - @param new_type: (const type_t *) - @param new_fnames: (const p_list *) - -ida_idp.IDB_Hooks.changing_op_type (method) - changing_op_type(self, ea, n, opinfo) - An operand type (offset, hex, etc...) is to be changed. - - @param ea: (::ea_t) - @param n: (int) eventually or'ed with OPND_OUTER or OPND_ALL - @param opinfo: (const opinfo_t *) additional operand info - -ida_idp.IDB_Hooks.changing_range_cmt (method) - changing_range_cmt(self, kind, a, cmt, repeatable) - Range comment is to be changed. - - @param kind: (range_kind_t) - @param a: (const range_t *) - @param cmt: (const char *) - @param repeatable: (bool) - -ida_idp.IDB_Hooks.changing_segm_class (method) - changing_segm_class(self, s) - Segment class is being changed. - - @param s: (segment_t *) - -ida_idp.IDB_Hooks.changing_segm_end (method) - changing_segm_end(self, s, new_end, segmod_flags) - Segment end address is to be changed. - - @param s: (segment_t *) - @param new_end: (::ea_t) - @param segmod_flags: (int) - -ida_idp.IDB_Hooks.changing_segm_name (method) - changing_segm_name(self, s, oldname) - Segment name is being changed. - - @param s: (segment_t *) - @param oldname: (const char *) - -ida_idp.IDB_Hooks.changing_segm_start (method) - changing_segm_start(self, s, new_start, segmod_flags) - Segment start address is to be changed. - - @param s: (segment_t *) - @param new_start: (::ea_t) - @param segmod_flags: (int) - -ida_idp.IDB_Hooks.changing_struc_align (method) - changing_struc_align(self, sptr) - A structure type is being changed (the struct alignment). - - @param sptr: (struc_t *) - -ida_idp.IDB_Hooks.changing_struc_cmt (method) - changing_struc_cmt(self, struc_id, repeatable, newcmt) - A structure type comment is to be changed. - - @param struc_id: (tid_t) - @param repeatable: (bool) - @param newcmt: (const char *) - -ida_idp.IDB_Hooks.changing_struc_member (method) - changing_struc_member(self, sptr, mptr, flag, ti, nbytes) - A structure member is to be changed. - - @param sptr: (struc_t *) - @param mptr: (member_t *) - @param flag: (flags64_t) - @param ti: (const opinfo_t *) - @param nbytes: (::asize_t) - -ida_idp.IDB_Hooks.changing_ti (method) - changing_ti(self, ea, new_type, new_fnames) - An item typestring (c/c++ prototype) is to be changed. - - @param ea: (::ea_t) - @param new_type: (const type_t *) - @param new_fnames: (const p_list *) - -ida_idp.IDB_Hooks.closebase (method) - closebase(self) - The database will be closed now. - -ida_idp.IDB_Hooks.cmt_changed (method) - cmt_changed(self, ea, repeatable_cmt) - An item comment has been changed. - - @param ea: (::ea_t) - @param repeatable_cmt: (bool) - -ida_idp.IDB_Hooks.compiler_changed (method) - compiler_changed(self, adjust_inf_fields) - The kernel has changed the compiler information. ( idainfo::cc structure; - get_abi_name) - - @param adjust_inf_fields: (::bool) may change inf fields? - -ida_idp.IDB_Hooks.deleting_enum (method) - deleting_enum(self, id) - An enum type is to be deleted. - - @param id: (enum_t) - -ida_idp.IDB_Hooks.deleting_enum_member (method) - deleting_enum_member(self, id, cid) - An enum member is to be deleted. - - @param id: (enum_t) - @param cid: (const_t) - -ida_idp.IDB_Hooks.deleting_func (method) - deleting_func(self, pfn) - The kernel is about to delete a function. - - @param pfn: (func_t *) - -ida_idp.IDB_Hooks.deleting_func_tail (method) - deleting_func_tail(self, pfn, tail) - A function tail chunk is to be removed. - - @param pfn: (func_t *) - @param tail: (const range_t *) - -ida_idp.IDB_Hooks.deleting_segm (method) - deleting_segm(self, start_ea) - A segment is to be deleted. - - @param start_ea: (::ea_t) - -ida_idp.IDB_Hooks.deleting_struc (method) - deleting_struc(self, sptr) - A structure type is to be deleted. - - @param sptr: (struc_t *) - -ida_idp.IDB_Hooks.deleting_struc_member (method) - deleting_struc_member(self, sptr, mptr) - A structure member is to be deleted. - - @param sptr: (struc_t *) - @param mptr: (member_t *) - -ida_idp.IDB_Hooks.deleting_tryblks (method) - deleting_tryblks(self, range) - About to delete tryblk information in given range - - @param range: (const range_t *) - -ida_idp.IDB_Hooks.destroyed_items (method) - destroyed_items(self, ea1, ea2, will_disable_range) - Instructions/data have been destroyed in [ea1,ea2). - - @param ea1: (::ea_t) - @param ea2: (::ea_t) - @param will_disable_range: (bool) - -ida_idp.IDB_Hooks.determined_main (method) - determined_main(self, main) - The main() function has been determined. - - @param main: (::ea_t) address of the main() function - -ida_idp.IDB_Hooks.dirtree_link (method) - dirtree_link(self, dt, path, link) - - @param dt: (dirtree_t *) - @param path: (::const char *) - @param link: (::bool) - -ida_idp.IDB_Hooks.dirtree_mkdir (method) - dirtree_mkdir(self, dt, path) - - @param dt: (dirtree_t *) - @param path: (::const char *) - -ida_idp.IDB_Hooks.dirtree_move (method) - dirtree_move(self, dt, _from, to) - - @param dt: (dirtree_t *) - @param from: (::const char *) - @param to: (::const char *) - -ida_idp.IDB_Hooks.dirtree_rank (method) - dirtree_rank(self, dt, path, rank) - - @param dt: (dirtree_t *) - @param path: (::const char *) - @param rank: (::size_t) - -ida_idp.IDB_Hooks.dirtree_rmdir (method) - dirtree_rmdir(self, dt, path) - - @param dt: (dirtree_t *) - @param path: (::const char *) - -ida_idp.IDB_Hooks.dirtree_rminode (method) - dirtree_rminode(self, dt, inode) - - @param dt: (dirtree_t *) - @param inode: (inode_t) - -ida_idp.IDB_Hooks.dirtree_segm_moved (method) - dirtree_segm_moved(self, dt) - - @param dt: (dirtree_t *) - -ida_idp.IDB_Hooks.enum_bf_changed (method) - enum_bf_changed(self, id) - An enum type 'bitfield' attribute has been changed. - - @param id: (enum_t) - -ida_idp.IDB_Hooks.enum_cmt_changed (method) - enum_cmt_changed(self, id, repeatable) - An enum or member type comment has been changed. - - @param id: (tid_t) - @param repeatable: (bool) - -ida_idp.IDB_Hooks.enum_created (method) - enum_created(self, id) - An enum type has been created. - - @param id: (enum_t) - -ida_idp.IDB_Hooks.enum_deleted (method) - enum_deleted(self, id) - An enum type has been deleted. - - @param id: (enum_t) - -ida_idp.IDB_Hooks.enum_flag_changed (method) - enum_flag_changed(self, id, F) - Enum flags have been changed. - - @param id: (enum_t) - @param F: (flags64_t) - -ida_idp.IDB_Hooks.enum_member_created (method) - enum_member_created(self, id, cid) - An enum member has been created. - - @param id: (enum_t) - @param cid: (const_t) - -ida_idp.IDB_Hooks.enum_member_deleted (method) - enum_member_deleted(self, id, cid) - An enum member has been deleted. - - @param id: (enum_t) - @param cid: (const_t) - -ida_idp.IDB_Hooks.enum_ordinal_changed (method) - enum_ordinal_changed(self, id, ord) - Enum mapping to a local type has been changed. - - @param id: (enum_t) - @param ord: (int) - -ida_idp.IDB_Hooks.enum_renamed (method) - enum_renamed(self, id) - An enum or member has been renamed. - - @param id: (tid_t) - -ida_idp.IDB_Hooks.enum_width_changed (method) - enum_width_changed(self, id, width) - Enum width has been changed. - - @param id: (enum_t) - @param width: (int) - -ida_idp.IDB_Hooks.expanding_struc (method) - expanding_struc(self, sptr, offset, delta) - A structure type is to be expanded/shrunk. - - @param sptr: (struc_t *) - @param offset: (::ea_t) - @param delta: (::adiff_t) - -ida_idp.IDB_Hooks.extlang_changed (method) - extlang_changed(self, kind, el, idx) - The list of extlangs or the default extlang was changed. - - @param kind: (int) 0: extlang installed 1: extlang removed 2: default extlang - changed - @param el: (extlang_t *) pointer to the extlang affected - @param idx: (int) extlang index - -ida_idp.IDB_Hooks.extra_cmt_changed (method) - extra_cmt_changed(self, ea, line_idx, cmt) - An extra comment has been changed. - - @param ea: (::ea_t) - @param line_idx: (int) - @param cmt: (const char *) - -ida_idp.IDB_Hooks.flow_chart_created (method) - flow_chart_created(self, fc) - Gui has retrieved a function flow chart. Plugins may modify the flow chart in - this callback. - - @param fc: (qflow_chart_t *) - -ida_idp.IDB_Hooks.frame_deleted (method) - frame_deleted(self, pfn) - The kernel has deleted a function frame. - - @param pfn: (func_t *) - -ida_idp.IDB_Hooks.func_added (method) - func_added(self, pfn) - The kernel has added a function. - - @param pfn: (func_t *) - -ida_idp.IDB_Hooks.func_deleted (method) - func_deleted(self, func_ea) - A function has been deleted. - - @param func_ea: (::ea_t) - -ida_idp.IDB_Hooks.func_noret_changed (method) - func_noret_changed(self, pfn) - FUNC_NORET bit has been changed. - - @param pfn: (func_t *) - -ida_idp.IDB_Hooks.func_tail_appended (method) - func_tail_appended(self, pfn, tail) - A function tail chunk has been appended. - - @param pfn: (func_t *) - @param tail: (func_t *) - -ida_idp.IDB_Hooks.func_tail_deleted (method) - func_tail_deleted(self, pfn, tail_ea) - A function tail chunk has been removed. - - @param pfn: (func_t *) - @param tail_ea: (::ea_t) - -ida_idp.IDB_Hooks.func_updated (method) - func_updated(self, pfn) - The kernel has updated a function. - - @param pfn: (func_t *) - -ida_idp.IDB_Hooks.hook (method) - hook(self) -> bool - -ida_idp.IDB_Hooks.idasgn_loaded (method) - idasgn_loaded(self, short_sig_name) - FLIRT signature has been loaded for normal processing (not for recognition of - startup sequences). - - @param short_sig_name: (const char *) - -ida_idp.IDB_Hooks.item_color_changed (method) - item_color_changed(self, ea, color) - An item color has been changed. - - @param ea: (::ea_t) - @param color: (bgcolor_t) if color==DEFCOLOR, the the color is deleted. - -ida_idp.IDB_Hooks.kernel_config_loaded (method) - kernel_config_loaded(self, pass_number) - This event is issued when ida.cfg is parsed. - - @param pass_number: (int) - -ida_idp.IDB_Hooks.loader_finished (method) - loader_finished(self, li, neflags, filetypename) - External file loader finished its work. Use this event to augment the existing - loader functionality. - - @param li: (linput_t *) - @param neflags: (uint16) Load file flags - @param filetypename: (const char *) - -ida_idp.IDB_Hooks.local_types_changed (method) - local_types_changed(self, ltc, ordinal, name) - Local types have been changed - - @param ltc: (::local_type_change_t) - @param ordinal: (uint32) 0 means ordinal is unknown - @param name: (const char *) nullptr means name is unknown - -ida_idp.IDB_Hooks.make_code (method) - make_code(self, insn) - An instruction is being created. - - @param insn: (const insn_t*) - -ida_idp.IDB_Hooks.make_data (method) - make_data(self, ea, flags, tid, len) - A data item is being created. - - @param ea: (::ea_t) - @param flags: (flags64_t) - @param tid: (tid_t) - @param len: (::asize_t) - -ida_idp.IDB_Hooks.op_ti_changed (method) - op_ti_changed(self, ea, n, type, fnames) - An operand typestring (c/c++ prototype) has been changed. - - @param ea: (::ea_t) - @param n: (int) - @param type: (const type_t *) - @param fnames: (const p_list *) - -ida_idp.IDB_Hooks.op_type_changed (method) - op_type_changed(self, ea, n) - An operand type (offset, hex, etc...) has been set or deleted. - - @param ea: (::ea_t) - @param n: (int) eventually or'ed with OPND_OUTER or OPND_ALL - -ida_idp.IDB_Hooks.range_cmt_changed (method) - range_cmt_changed(self, kind, a, cmt, repeatable) - Range comment has been changed. - - @param kind: (range_kind_t) - @param a: (const range_t *) - @param cmt: (const char *) - @param repeatable: (bool) - -ida_idp.IDB_Hooks.renamed (method) - renamed(self, ea, new_name, local_name, old_name) - The kernel has renamed a byte. See also the rename event - - @param ea: (::ea_t) - @param new_name: (const char *) can be nullptr - @param local_name: (bool) - @param old_name: (const char *) can be nullptr - -ida_idp.IDB_Hooks.renaming_enum (method) - renaming_enum(self, id, is_enum, newname) - An enum or enum member is to be renamed. - - @param id: (tid_t) - @param is_enum: (bool) - @param newname: (const char *) - -ida_idp.IDB_Hooks.renaming_struc (method) - renaming_struc(self, id, oldname, newname) - A structure type is to be renamed. - - @param id: (tid_t) - @param oldname: (const char *) - @param newname: (const char *) - -ida_idp.IDB_Hooks.renaming_struc_member (method) - renaming_struc_member(self, sptr, mptr, newname) - A structure member is to be renamed. - - @param sptr: (struc_t *) - @param mptr: (member_t *) - @param newname: (const char *) - -ida_idp.IDB_Hooks.savebase (method) - savebase(self) - The database is being saved. - -ida_idp.IDB_Hooks.segm_added (method) - segm_added(self, s) - A new segment has been created. - - @param s: (segment_t *) See also adding_segm - -ida_idp.IDB_Hooks.segm_attrs_updated (method) - segm_attrs_updated(self, s) - Segment attributes has been changed. - - @param s: (segment_t *) This event is generated for secondary segment attributes - (examples: color, permissions, etc) - -ida_idp.IDB_Hooks.segm_class_changed (method) - segm_class_changed(self, s, sclass) - Segment class has been changed. - - @param s: (segment_t *) - @param sclass: (const char *) - -ida_idp.IDB_Hooks.segm_deleted (method) - segm_deleted(self, start_ea, end_ea, flags) - A segment has been deleted. - - @param start_ea: (::ea_t) - @param end_ea: (::ea_t) - @param flags: (int) - -ida_idp.IDB_Hooks.segm_end_changed (method) - segm_end_changed(self, s, oldend) - Segment end address has been changed. - - @param s: (segment_t *) - @param oldend: (::ea_t) - -ida_idp.IDB_Hooks.segm_moved (method) - segm_moved(self, _from, to, size, changed_netmap) - Segment has been moved. - - @param from: (::ea_t) - @param to: (::ea_t) - @param size: (::asize_t) - @param changed_netmap: (bool) See also idb_event::allsegs_moved - -ida_idp.IDB_Hooks.segm_name_changed (method) - segm_name_changed(self, s, name) - Segment name has been changed. - - @param s: (segment_t *) - @param name: (const char *) - -ida_idp.IDB_Hooks.segm_start_changed (method) - segm_start_changed(self, s, oldstart) - Segment start address has been changed. - - @param s: (segment_t *) - @param oldstart: (::ea_t) - -ida_idp.IDB_Hooks.set_func_end (method) - set_func_end(self, pfn, new_end) - Function chunk end address will be changed. - - @param pfn: (func_t *) - @param new_end: (::ea_t) - -ida_idp.IDB_Hooks.set_func_start (method) - set_func_start(self, pfn, new_start) - Function chunk start address will be changed. - - @param pfn: (func_t *) - @param new_start: (::ea_t) - -ida_idp.IDB_Hooks.sgr_changed (method) - sgr_changed(self, start_ea, end_ea, regnum, value, old_value, tag) - The kernel has changed a segment register value. - - @param start_ea: (::ea_t) - @param end_ea: (::ea_t) - @param regnum: (int) - @param value: (::sel_t) - @param old_value: (::sel_t) - @param tag: (uchar) Segment register range tags - -ida_idp.IDB_Hooks.sgr_deleted (method) - sgr_deleted(self, start_ea, end_ea, regnum) - The kernel has deleted a segment register value. - - @param start_ea: (::ea_t) - @param end_ea: (::ea_t) - @param regnum: (int) - -ida_idp.IDB_Hooks.stkpnts_changed (method) - stkpnts_changed(self, pfn) - Stack change points have been modified. - - @param pfn: (func_t *) - -ida_idp.IDB_Hooks.struc_align_changed (method) - struc_align_changed(self, sptr) - A structure type has been changed (the struct alignment). - - @param sptr: (struc_t *) - -ida_idp.IDB_Hooks.struc_cmt_changed (method) - struc_cmt_changed(self, struc_id, repeatable_cmt) - A structure type comment has been changed. - - @param struc_id: (tid_t) - @param repeatable_cmt: (bool) - -ida_idp.IDB_Hooks.struc_created (method) - struc_created(self, struc_id) - A new structure type has been created. - - @param struc_id: (tid_t) - -ida_idp.IDB_Hooks.struc_deleted (method) - struc_deleted(self, struc_id) - A structure type has been deleted. - - @param struc_id: (tid_t) - -ida_idp.IDB_Hooks.struc_expanded (method) - struc_expanded(self, sptr) - A structure type has been expanded/shrank. - - @param sptr: (struc_t *) - -ida_idp.IDB_Hooks.struc_member_changed (method) - struc_member_changed(self, sptr, mptr) - A structure member has been changed. - - @param sptr: (struc_t *) - @param mptr: (member_t *) - -ida_idp.IDB_Hooks.struc_member_created (method) - struc_member_created(self, sptr, mptr) - A structure member has been created. - - @param sptr: (struc_t *) - @param mptr: (member_t *) - -ida_idp.IDB_Hooks.struc_member_deleted (method) - struc_member_deleted(self, sptr, member_id, offset) - A structure member has been deleted. - - @param sptr: (struc_t *) - @param member_id: (tid_t) - @param offset: (::ea_t) - -ida_idp.IDB_Hooks.struc_member_renamed (method) - struc_member_renamed(self, sptr, mptr) - A structure member has been renamed. - - @param sptr: (struc_t *) - @param mptr: (member_t *) - -ida_idp.IDB_Hooks.struc_renamed (method) - struc_renamed(self, sptr, success) - A structure type has been renamed. - - @param sptr: (struc_t *) - @param success: (::bool) the structure was successfully renamed - -ida_idp.IDB_Hooks.tail_owner_changed (method) - tail_owner_changed(self, tail, owner_func, old_owner) - A tail chunk owner has been changed. - - @param tail: (func_t *) - @param owner_func: (::ea_t) - @param old_owner: (::ea_t) - -ida_idp.IDB_Hooks.thunk_func_created (method) - thunk_func_created(self, pfn) - A thunk bit has been set for a function. - - @param pfn: (func_t *) - -ida_idp.IDB_Hooks.ti_changed (method) - ti_changed(self, ea, type, fnames) - An item typestring (c/c++ prototype) has been changed. - - @param ea: (::ea_t) - @param type: (const type_t *) - @param fnames: (const p_list *) - -ida_idp.IDB_Hooks.tryblks_updated (method) - tryblks_updated(self, tbv) - Updated tryblk information - - @param tbv: (const ::tryblks_t *) - -ida_idp.IDB_Hooks.unhook (method) - unhook(self) -> bool - -ida_idp.IDB_Hooks.updating_tryblks (method) - updating_tryblks(self, tbv) - About to update tryblk information - - @param tbv: (const ::tryblks_t *) - -ida_idp.IDB_Hooks.upgraded (method) - upgraded(self, _from) - The database has been upgraded and the receiver can upgrade its info as well - - @param from: (int) - old IDB version - -ida_idp.IDP_Hooks (class) - Proxy of C++ IDP_Hooks class. - -ida_idp.IDP_Hooks.__disown__ (method) - -ida_idp.IDP_Hooks.__init__ (method) - __init__(self, _flags=0, _hkcb_flags=0x0001) -> IDP_Hooks - - @param _flags: uint32 - @param _hkcb_flags: uint32 - -ida_idp.IDP_Hooks.ev_add_cref (method) - ev_add_cref(self, _from, to, type) -> int - A code reference is being created. - - @param from: (::ea_t) - @param to: (::ea_t) - @param type: (cref_t) - @retval <0: cancel cref creation - @retval 0: not implemented or continue - -ida_idp.IDP_Hooks.ev_add_dref (method) - ev_add_dref(self, _from, to, type) -> int - A data reference is being created. - - @param from: (::ea_t) - @param to: (::ea_t) - @param type: (dref_t) - @retval <0: cancel dref creation - @retval 0: not implemented or continue - -ida_idp.IDP_Hooks.ev_adjust_argloc (method) - ev_adjust_argloc(self, argloc, optional_type, size) -> int - Adjust argloc according to its type/size and platform endianess - - @param argloc: (argloc_t *), inout - @param type: (const tinfo_t *), may be nullptr nullptr means primitive type of - given size - @param size: (int) 'size' makes no sense if type != nullptr (type->get_size() - should be used instead) - @retval 0: not implemented - @retval 1: ok - @retval -1: error - -ida_idp.IDP_Hooks.ev_adjust_libfunc_ea (method) - ev_adjust_libfunc_ea(self, sig, libfun, ea) -> int - Called when a signature module has been matched against bytes in the database. - This is used to compute the offset at which a particular module's libfunc should - be applied. - - @param sig: (const idasgn_t *) - @param libfun: (const libfunc_t *) - @param ea: (::ea_t *) - @note: 'ea' initially contains the ea_t of the start of the pattern match - @retval 1: the ea_t pointed to by the third argument was modified. - @retval <=0: not modified. use default algorithm. - -ida_idp.IDP_Hooks.ev_adjust_refinfo (method) - ev_adjust_refinfo(self, ri, ea, n, fd) -> int - Called from apply_fixup before converting operand to reference. Can be used for - changing the reference info. (e.g. the PPC module adds REFINFO_NOBASE for some - references) - - @param ri: (refinfo_t *) - @param ea: (::ea_t) instruction address - @param n: (int) operand number - @param fd: (const fixup_data_t *) - @retval <0: do not create an offset - @retval 0: not implemented or refinfo adjusted - -ida_idp.IDP_Hooks.ev_ana_insn (method) - ev_ana_insn(self, out) -> bool - Analyze one instruction and fill 'out' structure. This function shouldn't change - the database, flags or anything else. All these actions should be performed only - by emu_insn() function. insn_t::ea contains address of instruction to analyze. - - @param out: (insn_t *) - @return: length of the instruction in bytes, 0 if instruction can't be decoded. - @retval 0: if instruction can't be decoded. - -ida_idp.IDP_Hooks.ev_analyze_prolog (method) - ev_analyze_prolog(self, ea) -> int - Analyzes function prolog, epilog, and updates purge, and function attributes - - @param ea: (::ea_t) start of function - @retval 1: ok - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_arch_changed (method) - ev_arch_changed(self) -> int - The loader is done parsing arch-related information, which the processor module - might want to use to finish its initialization. - @retval 1: if success - @retval 0: not implemented or failed - -ida_idp.IDP_Hooks.ev_arg_addrs_ready (method) - ev_arg_addrs_ready(self, caller, n, tif, addrs) -> int - Argument address info is ready. - - @param caller: (::ea_t) - @param n: (int) number of formal arguments - @param tif: (tinfo_t *) call prototype - @param addrs: (::ea_t *) argument intilization addresses - @retval <0: do not save into idb; other values mean "ok to save" - -ida_idp.IDP_Hooks.ev_asm_installed (method) - ev_asm_installed(self, asmnum) -> int - After setting a new assembler - - @param asmnum: (int) See also ev_newasm - -ida_idp.IDP_Hooks.ev_assemble (method) - ev_assemble(self, ea, cs, ip, use32, line) -> PyObject * - Assemble an instruction. (display a warning if an error is found). - - @param ea: (::ea_t) linear address of instruction - @param cs: (::ea_t) cs of instruction - @param ip: (::ea_t) ip of instruction - @param use32: (bool) is 32bit segment? - @param line: (const char *) line to assemble - @return: size of the instruction in bytes - -ida_idp.IDP_Hooks.ev_auto_queue_empty (method) - ev_auto_queue_empty(self, type) -> int - One analysis queue is empty. - - @param type: (atype_t) - @retval void: see also idb_event::auto_empty_finally - -ida_idp.IDP_Hooks.ev_calc_arglocs (method) - ev_calc_arglocs(self, fti) -> int - Calculate function argument locations. This callback should fill retloc, all - arglocs, and stkargs. This callback is never called for CM_CC_SPECIAL functions. - - @param fti: (func_type_data_t *) points to the func type info - @retval 0: not implemented - @retval 1: ok - @retval -1: error - -ida_idp.IDP_Hooks.ev_calc_cdecl_purged_bytes (method) - ev_calc_cdecl_purged_bytes(self, ea) -> int - Calculate number of purged bytes after call. - - @param ea: (::ea_t) address of the call instruction - @return: number of purged bytes (usually add sp, N) - -ida_idp.IDP_Hooks.ev_calc_next_eas (method) - ev_calc_next_eas(self, res, insn, over) -> int - Calculate list of addresses the instruction in 'insn' may pass control to. This - callback is required for source level debugging. - - @param res: (eavec_t *), out: array for the results. - @param insn: (const insn_t*) the instruction - @param over: (bool) calculate for step over (ignore call targets) - @retval <0: incalculable (indirect jumps, for example) - @retval >=0: number of addresses of called functions in the array. They must be - put at the beginning of the array (0 if over=true) - -ida_idp.IDP_Hooks.ev_calc_purged_bytes (method) - ev_calc_purged_bytes(self, p_purged_bytes, fti) -> int - Calculate number of purged bytes by the given function type. - - @param p_purged_bytes: (int *) ptr to output - @param fti: (const func_type_data_t *) func type details - @retval 1 - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_calc_retloc (method) - ev_calc_retloc(self, retloc, rettype, cc) -> int - Calculate return value location. - - @param retloc: (argloc_t *) - @param rettype: (const tinfo_t *) - @param cc: (cm_t) - @retval 0: not implemented - @retval 1: ok, - @retval -1: error - -ida_idp.IDP_Hooks.ev_calc_spdelta (method) - ev_calc_spdelta(self, spdelta, insn) -> int - Calculate amount of change to sp for the given insn. This event is required to - decompile code snippets. - - @param spdelta: (sval_t *) - @param insn: (const insn_t *) - @retval 1: ok - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_calc_step_over (method) - ev_calc_step_over(self, target, ip) -> int - Calculate the address of the instruction which will be executed after "step - over". The kernel will put a breakpoint there. If the step over is equal to step - into or we cannot calculate the address, return BADADDR. - - @param target: (::ea_t *) pointer to the answer - @param ip: (::ea_t) instruction address - @retval 0: unimplemented - @retval 1: implemented - -ida_idp.IDP_Hooks.ev_calc_switch_cases (method) - ev_calc_switch_cases(self, casevec, targets, insn_ea, si) -> int - Calculate case values and targets for a custom jump table. - - @param casevec: (::casevec_t *) vector of case values (may be nullptr) - @param targets: (eavec_t *) corresponding target addresses (my be nullptr) - @param insn_ea: (::ea_t) address of the 'indirect jump' instruction - @param si: (switch_info_t *) switch information - @retval 1: ok - @retval <=0: failed - -ida_idp.IDP_Hooks.ev_calc_varglocs (method) - ev_calc_varglocs(self, ftd, aux_regs, aux_stkargs, nfixed) -> int - Calculate locations of the arguments that correspond to '...'. - - @param ftd: (func_type_data_t *), inout: info about all arguments (including - varargs) - @param aux_regs: (regobjs_t *) buffer for hidden register arguments, may be - nullptr - @param aux_stkargs: (relobj_t *) buffer for hidden stack arguments, may be - nullptr - @param nfixed: (int) number of fixed arguments - @retval 0: not implemented - @retval 1: ok - @retval -1: error On some platforms variadic calls require passing additional - information: for example, number of floating variadic arguments must - be passed in rax on gcc-x64. The locations and values that - constitute this additional information are returned in the buffers - pointed by aux_regs and aux_stkargs - -ida_idp.IDP_Hooks.ev_calcrel (method) - ev_calcrel(self) -> int - Reserved. - -ida_idp.IDP_Hooks.ev_can_have_type (method) - ev_can_have_type(self, op) -> int - Can the operand have a type as offset, segment, decimal, etc? (for example, a - register AX can't have a type, meaning that the user can't change its - representation. see bytes.hpp for information about types and flags) - - @param op: (const op_t *) - @retval 0: unknown - @retval <0: no - @retval 1: yes - -ida_idp.IDP_Hooks.ev_clean_tbit (method) - ev_clean_tbit(self, ea, getreg, regvalues) -> int - Clear the TF bit after an insn like pushf stored it in memory. - - @param ea: (::ea_t) instruction address - @param getreg: (::processor_t::regval_getter_t *) function to get register - values - @param regvalues: (const regval_t *) register values array - @retval 1: ok - @retval 0: failed - -ida_idp.IDP_Hooks.ev_cmp_operands (method) - ev_cmp_operands(self, op1, op2) -> int - Compare instruction operands - - @param op1: (const op_t*) - @param op2: (const op_t*) - @retval 1: equal - @retval -1: not equal - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_coagulate (method) - ev_coagulate(self, start_ea) -> int - Try to define some unexplored bytes. This notification will be called if the - kernel tried all possibilities and could not find anything more useful than to - convert to array of bytes. The module can help the kernel and convert the bytes - into something more useful. - - @param start_ea: (::ea_t) - @return: number of converted bytes - -ida_idp.IDP_Hooks.ev_coagulate_dref (method) - ev_coagulate_dref(self, _from, to, may_define, code_ea) -> int - Data reference is being analyzed. plugin may correct 'code_ea' (e.g. for thumb - mode refs, we clear the last bit) - - @param from: (::ea_t) - @param to: (::ea_t) - @param may_define: (bool) - @param code_ea: (::ea_t *) - @retval <0: failed dref analysis, >0 done dref analysis - @retval 0: not implemented or continue - -ida_idp.IDP_Hooks.ev_create_flat_group (method) - ev_create_flat_group(self, image_base, bitness, dataseg_sel) -> int - Create special segment representing the flat group. - - @param image_base: (::ea_t) - @param bitness: (int) - @param dataseg_sel: (::sel_t) return value is ignored - -ida_idp.IDP_Hooks.ev_create_func_frame (method) - ev_create_func_frame(self, pfn) -> int - Create a function frame for a newly created function Set up frame size, its - attributes etc - - @param pfn: (func_t *) - @retval 1: ok - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_create_merge_handlers (method) - ev_create_merge_handlers(self, md) -> int - Create merge handlers, if needed - - @param md: (::merge_data_t *) This event is generated immediately after opening - idbs. - @return: must be 0 - -ida_idp.IDP_Hooks.ev_create_switch_xrefs (method) - ev_create_switch_xrefs(self, jumpea, si) -> int - Create xrefs for a custom jump table. - - @param jumpea: (::ea_t) address of the jump insn - @param si: (const switch_info_t *) switch information - @return: must return 1 Must be implemented if module uses custom jump tables, - SWI_CUSTOM - -ida_idp.IDP_Hooks.ev_creating_segm (method) - ev_creating_segm(self, seg) -> int - A new segment is about to be created. - - @param seg: (segment_t *) - @retval 1: ok - @retval <0: segment should not be created - -ida_idp.IDP_Hooks.ev_cvt64_hashval (method) - ev_cvt64_hashval(self, node, tag, name, data) -> int - perform 32-64 conversion for a hash value - - @param node: (::nodeidx_t) - @param tag: (uchar) - @param name: (const ::char *) - @param data: (const uchar *) - @return: 0 nothing was done - 1 converted successfully - -1 error (and message in errbuf) - -ida_idp.IDP_Hooks.ev_cvt64_supval (method) - ev_cvt64_supval(self, node, tag, idx, data) -> int - perform 32-64 conversion for a netnode array element - - @param node: (::nodeidx_t) - @param tag: (uchar) - @param idx: (::nodeidx_t) - @param data: (const uchar *) - @return: 0 nothing was done - 1 converted successfully - -1 error (and message in errbuf) - -ida_idp.IDP_Hooks.ev_decorate_name (method) - ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * - Decorate/undecorate a C symbol name. - - @param name: (const char *) name of symbol - @param mangle: (bool) true-mangle, false-unmangle - @param cc: (cm_t) calling convention - @param optional_type: tinfo_t const * - @retval 1: if success - @retval 0: not implemented or failed - -ida_idp.IDP_Hooks.ev_del_cref (method) - ev_del_cref(self, _from, to, expand) -> int - A code reference is being deleted. - - @param from: (::ea_t) - @param to: (::ea_t) - @param expand: (bool) - @retval <0: cancel cref deletion - @retval 0: not implemented or continue - -ida_idp.IDP_Hooks.ev_del_dref (method) - ev_del_dref(self, _from, to) -> int - A data reference is being deleted. - - @param from: (::ea_t) - @param to: (::ea_t) - @retval <0: cancel dref deletion - @retval 0: not implemented or continue - -ida_idp.IDP_Hooks.ev_delay_slot_insn (method) - ev_delay_slot_insn(self, ea, bexec, fexec) -> PyObject * - Get delay slot instruction - - @param ea: (::ea_t *) in: instruction address in question, out: (if the answer - is positive) if the delay slot contains valid insn: the address of - the delay slot insn else: BADADDR (invalid insn, e.g. a branch) - @param bexec: (bool *) execute slot if jumping, initially set to 'true' - @param fexec: (bool *) execute slot if not jumping, initally set to 'true' - @retval 1: positive answer - @retval <=0: ordinary insn - @note: Input EA may point to the instruction with a delay slot or to the delay - slot instruction itself. - -ida_idp.IDP_Hooks.ev_demangle_name (method) - ev_demangle_name(self, name, disable_mask, demreq) -> PyObject * - Demangle a C++ (or another language) name into a user-readable string. This - event is called by demangle_name() - - @param name: (const char *) mangled name - @param disable_mask: (uint32) flags to inhibit parts of output or compiler - info/other (see MNG_) - @param demreq: (demreq_type_t) operation to perform - @retval 1: if success - @retval 0: not implemented - @note: if you call demangle_name() from the handler, protect against recursion! - -ida_idp.IDP_Hooks.ev_emu_insn (method) - 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. - - @param insn: (const insn_t *) - @retval 1: ok - @retval -1: the kernel will delete the instruction - -ida_idp.IDP_Hooks.ev_endbinary (method) - ev_endbinary(self, ok) -> int - IDA has loaded a binary file. - - @param ok: (bool) file loaded successfully? - -ida_idp.IDP_Hooks.ev_ending_undo (method) - ev_ending_undo(self, action_name, is_undo) -> int - Ended undoing/redoing an action - - @param action_name: (const char *) action that we finished undoing/redoing. is - not nullptr. - @param is_undo: (bool) true if performing undo, false if performing redo - -ida_idp.IDP_Hooks.ev_equal_reglocs (method) - ev_equal_reglocs(self, a1, a2) -> int - Are 2 register arglocs the same?. We need this callback for the pc module. - - @param a1: (argloc_t *) - @param a2: (argloc_t *) - @retval 1: yes - @retval -1: no - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_extract_address (method) - ev_extract_address(self, out_ea, screen_ea, string, position) -> int - Extract address from a string. - - @param out_ea: (ea_t *), out - @param screen_ea: (ea_t) - @param string: (const char *) - @param position: (size_t) - @retval 1: ok - @retval 0: kernel should use the standard algorithm - @retval -1: error - -ida_idp.IDP_Hooks.ev_find_op_value (method) - ev_find_op_value(self, pinsn, opn) -> PyObject * - Find operand value via a register tracker. The returned value in 'out' is valid - before executing the instruction. - - @param pinsn: (const insn_t *) instruction - @param opn: (int) operand index - @retval 1: if implemented, and value was found - @retval 0: not implemented, -1 decoding failed, or no value found - -ida_idp.IDP_Hooks.ev_find_reg_value (method) - ev_find_reg_value(self, pinsn, reg) -> PyObject * - Find register value via a register tracker. The returned value in 'out' is valid - before executing the instruction. - - @param pinsn: (const insn_t *) instruction - @param reg: (int) register index - @retval 1: if implemented, and value was found - @retval 0: not implemented, -1 decoding failed, or no value found - -ida_idp.IDP_Hooks.ev_func_bounds (method) - ev_func_bounds(self, possible_return_code, pfn, max_func_end_ea) -> int - find_func_bounds() finished its work. The module may fine tune the function - bounds - - @param possible_return_code: (int *), in/out - @param pfn: (func_t *) - @param max_func_end_ea: (::ea_t) (from the kernel's point of view) - @retval void - -ida_idp.IDP_Hooks.ev_gen_asm_or_lst (method) - ev_gen_asm_or_lst(self, starting, fp, is_asm, flags, outline) -> int - - @param starting: (bool) beginning listing generation - @param fp: (FILE *) output file - @param is_asm: (bool) true:assembler, false:listing - @param flags: (int) flags passed to gen_file() - @param outline: (html_line_cb_t **) ptr to ptr to outline callback. if this - callback is defined for this code, it will be used by the kernel - to output the generated lines - @retval void - -ida_idp.IDP_Hooks.ev_gen_map_file (method) - ev_gen_map_file(self, nlines, fp) -> int - Generate map file. If not implemented the kernel itself will create the map - file. - - @param nlines: (int *) number of lines in map file (-1 means write error) - @param fp: (FILE *) output file - @retval 0: not implemented - @retval 1: ok - @retval -1: write error - -ida_idp.IDP_Hooks.ev_gen_regvar_def (method) - ev_gen_regvar_def(self, outctx, v) -> int - Generate register variable definition line. - - @param outctx: (outctx_t *) - @param v: (regvar_t *) - @retval >0: ok, generated the definition text - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_gen_src_file_lnnum (method) - ev_gen_src_file_lnnum(self, outctx, file, lnnum) -> int - - @param outctx: (outctx_t *) output context - @param file: (const char *) source file (may be nullptr) - @param lnnum: (size_t) line number - @retval 1: directive has been generated - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_gen_stkvar_def (method) - ev_gen_stkvar_def(self, outctx, mptr, v) -> int - Generate stack variable definition line Default line is varname = type ptr - value, where 'type' is one of byte,word,dword,qword,tbyte - - @param outctx: (outctx_t *) - @param mptr: (const member_t *) - @param v: (sval_t) - @retval 1: ok - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_get_abi_info (method) - ev_get_abi_info(self, abi_names, abi_opts, comp) -> int - Get all possible ABI names and optional extensions for given compiler - abiname/option is a string entirely consisting of letters, digits and underscore - - @param abi_names: (qstrvec_t *) - all possible ABis each in form abiname- - opt1-opt2-... - @param abi_opts: (qstrvec_t *) - array of all possible options in form - "opt:description" or opt:hint-line#description - @param comp: (comp_t) - compiler ID - @retval 0: not implemented - @retval 1: ok - -ida_idp.IDP_Hooks.ev_get_autocmt (method) - ev_get_autocmt(self, insn) -> PyObject * - - @param insn: (const insn_t*) the instruction - @retval 1: new comment has been generated - @retval 0: callback has not been handled. the buffer must not be changed in this - case - -ida_idp.IDP_Hooks.ev_get_bg_color (method) - ev_get_bg_color(self, color, ea) -> int - Get item background color. Plugins can hook this callback to color disassembly - lines dynamically - - @param color: (bgcolor_t *), out - @param ea: (::ea_t) - @retval 0: not implemented - @retval 1: color set - -ida_idp.IDP_Hooks.ev_get_cc_regs (method) - ev_get_cc_regs(self, regs, cc) -> int - Get register allocation convention for given calling convention - - @param regs: (callregs_t *), out - @param cc: (cm_t) - @retval 1 - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_get_code16_mode (method) - ev_get_code16_mode(self, ea) -> int - Get ISA 16-bit mode - - @param ea: (ea_t) address to get the ISA mode - @retval 1: 16-bit mode - @retval 0: not implemented or 32-bit mode - -ida_idp.IDP_Hooks.ev_get_dbr_opnum (method) - ev_get_dbr_opnum(self, opnum, insn) -> int - Get the number of the operand to be displayed in the debugger reference view - (text mode). - - @param opnum: (int *) operand number (out, -1 means no such operand) - @param insn: (const insn_t*) the instruction - @retval 0: unimplemented - @retval 1: implemented - -ida_idp.IDP_Hooks.ev_get_default_enum_size (method) - ev_get_default_enum_size(self) -> int - Get default enum size. Not generated anymore. inf_get_cc_size_e() is used - instead - -ida_idp.IDP_Hooks.ev_get_frame_retsize (method) - ev_get_frame_retsize(self, frsize, pfn) -> int - Get size of function return address in bytes If this event is not implemented, - the kernel will assume - * 8 bytes for 64-bit function - * 4 bytes for 32-bit function - * 2 bytes otherwise - - @param frsize: (int *) frame size (out) - @param pfn: (const func_t *), can't be nullptr - @retval 1: ok - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_get_macro_insn_head (method) - ev_get_macro_insn_head(self, head, ip) -> int - Calculate the start of a macro instruction. This notification is called if IP - points to the middle of an instruction - - @param head: (::ea_t *), out: answer, BADADDR means normal instruction - @param ip: (::ea_t) instruction address - @retval 0: unimplemented - @retval 1: implemented - -ida_idp.IDP_Hooks.ev_get_operand_string (method) - ev_get_operand_string(self, insn, opnum) -> PyObject * - Request text string for operand (cli, java, ...). - - @param insn: (const insn_t*) the instruction - @param opnum: (int) operand number, -1 means any string operand - @retval 0: no string (or empty string) - @retval >0: original string length without terminating zero - -ida_idp.IDP_Hooks.ev_get_procmod (method) - ev_get_procmod(self) -> int - Get pointer to the processor module object. All processor modules must implement - this. The pointer is returned as size_t. - -ida_idp.IDP_Hooks.ev_get_reg_accesses (method) - ev_get_reg_accesses(self, accvec, insn, flags) -> int - Get info about the registers that are used/changed by an instruction. - - @param accvec: (reg_accesses_t*) out: info about accessed registers - @param insn: (const insn_t *) instruction in question - @param flags: (int) reserved, must be 0 - @retval -1: if accvec is nullptr - @retval 1: found the requested access (and filled accvec) - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_get_reg_info (method) - ev_get_reg_info(self, main_regname, bitrange, regname) -> int - Get register information by its name. example: "ah" returns: - * main_regname="eax" - * bitrange_t = { offset==8, nbits==8 } - - This callback may be unimplemented if the register names are all present in - processor_t::reg_names and they all have the same size - - @param main_regname: (const char **), out - @param bitrange: (bitrange_t *), out: position and size of the value within - 'main_regname' (empty bitrange == whole register) - @param regname: (const char *) - @retval 1: ok - @retval -1: failed (not found) - @retval 0: unimplemented - -ida_idp.IDP_Hooks.ev_get_reg_name (method) - ev_get_reg_name(self, reg, width, reghi) -> PyObject * - Generate text representation of a register. Most processor modules do not need - to implement this callback. It is useful only if processor_t::reg_names[reg] - does not provide the correct register name. - - @param reg: (int) internal register number as defined in the processor module - @param width: (size_t) register width in bytes - @param reghi: (int) if not -1 then this function will return the register pair - @retval -1: if error - @retval strlen(buf): if success - -ida_idp.IDP_Hooks.ev_get_simd_types (method) - ev_get_simd_types(self, out, simd_attrs, argloc, create_tifs) -> int - Get SIMD-related types according to given attributes ant/or argument location - - @param out: (::simd_info_vec_t *) - @param simd_attrs: (const simd_info_t *), may be nullptr - @param argloc: (const argloc_t *), may be nullptr - @param create_tifs: (bool) return valid tinfo_t objects, create if neccessary - @retval number: of found types - @retval -1: error If name==nullptr, initialize all SIMD types - -ida_idp.IDP_Hooks.ev_get_stkarg_area_info (method) - ev_get_stkarg_area_info(self, out, cc) -> int - Get some metrics of the stack argument area. - - @param out: (stkarg_area_info_t *) ptr to stkarg_area_info_t - @param cc: (cm_t) calling convention - @retval 1: if success - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_get_stkvar_scale_factor (method) - ev_get_stkvar_scale_factor(self) -> int - Should stack variable references be multiplied by a coefficient before being - used in the stack frame?. Currently used by TMS320C55 because the references - into the stack should be multiplied by 2 - - @return: scaling factor - @retval 0: not implemented - @note: PR_SCALE_STKVARS should be set to use this callback - -ida_idp.IDP_Hooks.ev_getreg (method) - ev_getreg(self, regval, regnum) -> int - IBM PC only internal request, should never be used for other purpose Get - register value by internal index - - @param regval: (uval_t *), out - @param regnum: (int) - @retval 1: ok - @retval 0: not implemented - @retval -1: failed (undefined value or bad regnum) - -ida_idp.IDP_Hooks.ev_init (method) - ev_init(self, idp_modname) -> int - The IDP module is just loaded. - - @param idp_modname: (const char *) processor module name - @retval <0: on failure - -ida_idp.IDP_Hooks.ev_insn_reads_tbit (method) - ev_insn_reads_tbit(self, insn, getreg, regvalues) -> int - Check if insn will read the TF bit. - - @param insn: (const insn_t*) the instruction - @param getreg: (::processor_t::regval_getter_t *) function to get register - values - @param regvalues: (const regval_t *) register values array - @retval 2: yes, will generate 'step' exception - @retval 1: yes, will store the TF bit in memory - @retval 0: no - -ida_idp.IDP_Hooks.ev_is_align_insn (method) - ev_is_align_insn(self, ea) -> int - Is the instruction created only for alignment purposes?. Do not directly call - this function, use is_align_insn() - - @param ea: (ea_t) - instruction address - @retval number: of bytes in the instruction - -ida_idp.IDP_Hooks.ev_is_alloca_probe (method) - ev_is_alloca_probe(self, ea) -> int - Does the function at 'ea' behave as __alloca_probe? - - @param ea: (::ea_t) - @retval 1: yes - @retval 0: no - -ida_idp.IDP_Hooks.ev_is_basic_block_end (method) - ev_is_basic_block_end(self, insn, call_insn_stops_block) -> int - Is the current instruction end of a basic block?. This function should be - defined for processors with delayed jump slots. - - @param insn: (const insn_t*) the instruction - @param call_insn_stops_block: (bool) - @retval 0: unknown - @retval <0: no - @retval 1: yes - -ida_idp.IDP_Hooks.ev_is_call_insn (method) - ev_is_call_insn(self, insn) -> int - Is the instruction a "call"? - - @param insn: (const insn_t *) instruction - @retval 0: unknown - @retval <0: no - @retval 1: yes - -ida_idp.IDP_Hooks.ev_is_cond_insn (method) - ev_is_cond_insn(self, insn) -> int - Is conditional instruction? - - @param insn: (const insn_t *) instruction address - @retval 1: yes - @retval -1: no - @retval 0: not implemented or not instruction - -ida_idp.IDP_Hooks.ev_is_control_flow_guard (method) - ev_is_control_flow_guard(self, p_reg, insn) -> int - Detect if an instruction is a "thunk call" to a flow guard function (equivalent - to call reg/return/nop) - - @param p_reg: (int *) indirect register number, may be -1 - @param insn: (const insn_t *) call/jump instruction - @retval -1: no thunk detected - @retval 1: indirect call - @retval 2: security check routine call (NOP) - @retval 3: return thunk - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_is_far_jump (method) - ev_is_far_jump(self, icode) -> int - is indirect far jump or call instruction? meaningful only if the processor has - 'near' and 'far' reference types - - @param icode: (int) - @retval 0: not implemented - @retval 1: yes - @retval -1: no - -ida_idp.IDP_Hooks.ev_is_indirect_jump (method) - ev_is_indirect_jump(self, insn) -> int - Determine if instruction is an indirect jump. If CF_JUMP bit cannot describe all - jump types jumps, please define this callback. - - @param insn: (const insn_t*) the instruction - @retval 0: use CF_JUMP - @retval 1: no - @retval 2: yes - -ida_idp.IDP_Hooks.ev_is_insn_table_jump (method) - ev_is_insn_table_jump(self) -> int - Reserved. - -ida_idp.IDP_Hooks.ev_is_jump_func (method) - ev_is_jump_func(self, pfn, jump_target, func_pointer) -> int - Is the function a trivial "jump" function?. - - @param pfn: (func_t *) - @param jump_target: (::ea_t *) - @param func_pointer: (::ea_t *) - @retval <0: no - @retval 0: don't know - @retval 1: yes, see 'jump_target' and 'func_pointer' - -ida_idp.IDP_Hooks.ev_is_ret_insn (method) - ev_is_ret_insn(self, insn, strict) -> int - Is the instruction a "return"? - - @param insn: (const insn_t *) instruction - @param strict: (bool) 1: report only ret instructions 0: include instructions - like "leave" which begins the function epilog - @retval 0: unknown - @retval <0: no - @retval 1: yes - -ida_idp.IDP_Hooks.ev_is_sane_insn (method) - ev_is_sane_insn(self, insn, no_crefs) -> int - Is the instruction sane for the current file type?. - - @param insn: (const insn_t*) the instruction - @param no_crefs: (int) 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. - @retval >=0: ok - @retval <0: no, the instruction isn't likely to appear in the program - -ida_idp.IDP_Hooks.ev_is_sp_based (method) - ev_is_sp_based(self, mode, insn, op) -> int - Check whether the operand is relative to stack pointer or frame pointer This - event is used to determine how to output a stack variable If not implemented, - then all operands are sp based by default. Implement this event only if some - stack references use frame pointer instead of stack pointer. - - @param mode: (int *) out, combination of SP/FP operand flags - @param insn: (const insn_t *) - @param op: (const op_t *) - @retval 0: not implemented - @retval 1: ok - -ida_idp.IDP_Hooks.ev_is_switch (method) - ev_is_switch(self, si, insn) -> int - Find 'switch' idiom or override processor module's decision. It will be called - for instructions marked with CF_JUMP. - - @param si: (switch_info_t *), out - @param insn: (const insn_t *) instruction possibly belonging to a switch - @retval 1: switch is found, 'si' is filled. IDA will create the switch using the - filled 'si' - @retval -1: no switch found. This value forbids switch creation by the processor - module - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_last_cb_before_loader (method) - ev_last_cb_before_loader(self) -> int - -ida_idp.IDP_Hooks.ev_loader (method) - ev_loader(self) -> int - This code and higher ones are reserved for the loaders. The arguments and the - return values are defined by the loaders - -ida_idp.IDP_Hooks.ev_lower_func_type (method) - ev_lower_func_type(self, argnums, fti) -> int - Get function arguments which should be converted to pointers when lowering - function prototype. The processor module can also modify 'fti' in order to make - non-standard conversion of some arguments. - - @param argnums: (intvec_t *), out - numbers of arguments to be converted to - pointers in acsending order - @param fti: (func_type_data_t *), inout func type details (special values -1/-2 - for return value - position of hidden 'retstr' argument: -1 - at the - beginning, -2 - at the end) - @retval 0: not implemented - @retval 1: argnums was filled - @retval 2: argnums was filled and made substantial changes to fti - -ida_idp.IDP_Hooks.ev_max_ptr_size (method) - ev_max_ptr_size(self) -> int - Get maximal size of a pointer in bytes. - - @return: max possible size of a pointer - -ida_idp.IDP_Hooks.ev_may_be_func (method) - ev_may_be_func(self, insn, state) -> int - Can a function start here? - - @param insn: (const insn_t*) the instruction - @param state: (int) autoanalysis phase 0: creating functions 1: creating chunks - @return: probability 1..100 - @note: Actually IDA uses 3 intervals of a probability: 0..50 not a function, - 51..99 a function (IDA needs another proof), 100 a function (no other - proofs needed) - -ida_idp.IDP_Hooks.ev_may_show_sreg (method) - ev_may_show_sreg(self, current_ea) -> int - The kernel wants to display the segment registers in the messages window. - - @param current_ea: (::ea_t) - @retval <0: if the kernel should not show the segment registers. (assuming that - the module has done it) - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_moving_segm (method) - ev_moving_segm(self, seg, to, flags) -> int - May the kernel move the segment? - - @param seg: (segment_t *) segment to move - @param to: (::ea_t) new segment start address - @param flags: (int) combination of Move segment flags - @retval 0: yes - @retval <0: the kernel should stop - -ida_idp.IDP_Hooks.ev_newasm (method) - ev_newasm(self, asmnum) -> int - Before setting a new assembler. - - @param asmnum: (int) See also ev_asm_installed - -ida_idp.IDP_Hooks.ev_newbinary (method) - ev_newbinary(self, filename, fileoff, basepara, binoff, nbytes) -> int - IDA is about to load a binary file. - - @param filename: (char *) binary file name - @param fileoff: (qoff64_t) offset in the file - @param basepara: (::ea_t) base loading paragraph - @param binoff: (::ea_t) loader offset - @param nbytes: (::uint64) number of bytes to load - -ida_idp.IDP_Hooks.ev_newfile (method) - ev_newfile(self, fname) -> int - A new file has been loaded. - - @param fname: (char *) input file name - -ida_idp.IDP_Hooks.ev_newprc (method) - ev_newprc(self, pnum, keep_cfg) -> int - Before changing processor type. - - @param pnum: (int) processor number in the array of processor names - @param keep_cfg: (bool) true: do not modify kernel configuration - @retval 1: ok - @retval <0: prohibit - -ida_idp.IDP_Hooks.ev_next_exec_insn (method) - ev_next_exec_insn(self, target, ea, tid, getreg, regvalues) -> int - Get next address to be executed This function must return the next address to be - executed. If the instruction following the current one is executed, then it must - return BADADDR Usually the instructions to consider are: jumps, branches, calls, - returns. This function is essential if the 'single step' is not supported in - hardware. - - @param target: (::ea_t *), out: pointer to the answer - @param ea: (::ea_t) instruction address - @param tid: (int) current therad id - @param getreg: (::processor_t::regval_getter_t *) function to get register - values - @param regvalues: (const regval_t *) register values array - @retval 0: unimplemented - @retval 1: implemented - -ida_idp.IDP_Hooks.ev_oldfile (method) - ev_oldfile(self, fname) -> int - An old file has been loaded. - - @param fname: (char *) input file name - -ida_idp.IDP_Hooks.ev_out_assumes (method) - ev_out_assumes(self, outctx) -> int - Function to produce assume directives when segment register value changes. - - @param outctx: (outctx_t *) - @retval 1: ok - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_out_data (method) - ev_out_data(self, outctx, analyze_only) -> int - Generate text representation of data items This function may change the database - and create cross-references if analyze_only is set - - @param outctx: (outctx_t *) - @param analyze_only: (bool) - @retval 1: ok - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_out_footer (method) - ev_out_footer(self, outctx) -> int - Function to produce end of disassembled text - - @param outctx: (outctx_t *) - @retval void - -ida_idp.IDP_Hooks.ev_out_header (method) - ev_out_header(self, outctx) -> int - Function to produce start of disassembled text - - @param outctx: (outctx_t *) - @retval void - -ida_idp.IDP_Hooks.ev_out_insn (method) - ev_out_insn(self, outctx) -> bool - Generate text representation of an instruction in 'ctx.insn' outctx_t provides - functions to output the generated text. This function shouldn't change the - database, flags or anything else. All these actions should be performed only by - emu_insn() function. - - @param outctx: (outctx_t *) - @retval void - -ida_idp.IDP_Hooks.ev_out_label (method) - ev_out_label(self, outctx, colored_name) -> int - The kernel is going to generate an instruction label line or a function header. - - @param outctx: (outctx_t *) - @param colored_name: (const char *) - @retval <0: if the kernel should not generate the label - @retval 0: not implemented or continue - -ida_idp.IDP_Hooks.ev_out_mnem (method) - ev_out_mnem(self, outctx) -> int - Generate instruction mnemonics. This callback should append the colored - mnemonics to ctx.outbuf Optional notification, if absent, out_mnem will be - called. - - @param outctx: (outctx_t *) - @retval 1: if appended the mnemonics - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_out_operand (method) - ev_out_operand(self, outctx, op) -> bool - Generate text representation of an instruction operand outctx_t provides - functions to output the generated text. All these actions should be performed - only by emu_insn() function. - - @param outctx: (outctx_t *) - @param op: (const op_t *) - @retval 1: ok - @retval -1: operand is hidden - -ida_idp.IDP_Hooks.ev_out_segend (method) - ev_out_segend(self, outctx, seg) -> int - Function to produce end of segment - - @param outctx: (outctx_t *) - @param seg: (segment_t *) - @retval 1: ok - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_out_segstart (method) - ev_out_segstart(self, outctx, seg) -> int - Function to produce start of segment - - @param outctx: (outctx_t *) - @param seg: (segment_t *) - @retval 1: ok - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_out_special_item (method) - ev_out_special_item(self, outctx, segtype) -> int - Generate text representation of an item in a special segment i.e. absolute - symbols, externs, communal definitions etc - - @param outctx: (outctx_t *) - @param segtype: (uchar) - @retval 1: ok - @retval 0: not implemented - @retval -1: overflow - -ida_idp.IDP_Hooks.ev_privrange_changed (method) - ev_privrange_changed(self, old_privrange, delta) -> int - Privrange interval has been moved to a new location. Most common actions to be - done by module in this case: fix indices of netnodes used by module - - @param old_privrange: (const range_t *) - old privrange interval - @param delta: (::adiff_t) - @return: 0 Ok - -1 error (and message in errbuf) - -ida_idp.IDP_Hooks.ev_realcvt (method) - ev_realcvt(self, m, e, swt) -> int - Floating point -> IEEE conversion - - @param m: (void *) ptr to processor-specific floating point value - @param e: (fpvalue_t *) IDA representation of a floating point value - @param swt: (uint16) operation (see realcvt() in ieee.h) - @retval 0: not implemented - @retval 1: ok - @retval unknown - -ida_idp.IDP_Hooks.ev_rename (method) - ev_rename(self, ea, new_name) -> int - The kernel is going to rename a byte. - - @param ea: (::ea_t) - @param new_name: (const char *) - @retval <0: if the kernel should not rename it. - @retval 2: to inhibit the notification. I.e., the kernel should not rename, but - 'set_name()' should return 'true'. also see renamed the return value - is ignored when kernel is going to delete name - -ida_idp.IDP_Hooks.ev_replaying_undo (method) - ev_replaying_undo(self, action_name, vec, is_undo) -> int - Replaying an undo/redo buffer - - @param action_name: (const char *) action that we perform undo/redo for. may be - nullptr for intermediary buffers. - @param vec: (const undo_records_t *) - @param is_undo: (bool) true if performing undo, false if performing redo This - event may be generated multiple times per undo/redo - -ida_idp.IDP_Hooks.ev_set_code16_mode (method) - ev_set_code16_mode(self, ea, code16) -> int - Some processors have ISA 16-bit mode e.g. ARM Thumb mode, PPC VLE, MIPS16 Set - ISA 16-bit mode - - @param ea: (ea_t) address to set new ISA mode - @param code16: (bool) true for 16-bit mode, false for 32-bit mode - -ida_idp.IDP_Hooks.ev_set_idp_options (method) - ev_set_idp_options(self, keyword, value_type, value, idb_loaded) -> int - Set IDP-specific configuration option Also see set_options_t in config.hpp - - @param keyword: (const char *) - @param value_type: (int) - @param value: (const void *) - @param idb_loaded: (bool) true if the ev_oldfile/ev_newfile events have been - generated - @retval 1: ok - @retval 0: not implemented - @retval -1: error (and message in errbuf) - -ida_idp.IDP_Hooks.ev_set_proc_options (method) - ev_set_proc_options(self, options, confidence) -> int - Called if the user specified an option string in the command line: -p<processor - name>:<options>. Can be used for setting a processor subtype. Also called if - option string is passed to set_processor_type() and IDC's SetProcessorType(). - - @param options: (const char *) - @param confidence: (int) 0: loader's suggestion 1: user's decision - @retval <0: if bad option string - -ida_idp.IDP_Hooks.ev_setup_til (method) - ev_setup_til(self) -> int - Setup default type libraries. (called after loading a new file into the - database). The processor module may load tils, setup memory model and perform - other actions required to set up the type system. This is an optional callback. - @retval void - -ida_idp.IDP_Hooks.ev_str2reg (method) - ev_str2reg(self, regname) -> int - Convert a register name to a register number. The register number is the - register index in the processor_t::reg_names array Most processor modules do not - need to implement this callback It is useful only if processor_t::reg_names[reg] - does not provide the correct register names - - @param regname: (const char *) - @retval register: number + 1 - @retval 0: not implemented or could not be decoded - -ida_idp.IDP_Hooks.ev_term (method) - ev_term(self) -> int - The IDP module is being unloaded. - -ida_idp.IDP_Hooks.ev_treat_hindering_item (method) - ev_treat_hindering_item(self, hindering_item_ea, new_item_flags, new_item_ea, new_item_length) -> int - An item hinders creation of another item. - - @param hindering_item_ea: (::ea_t) - @param new_item_flags: (flags64_t) (0 for code) - @param new_item_ea: (::ea_t) - @param new_item_length: (::asize_t) - @retval 0: no reaction - @retval !=0: the kernel may delete the hindering item - -ida_idp.IDP_Hooks.ev_undefine (method) - ev_undefine(self, ea) -> int - An item in the database (insn or data) is being deleted. - - @param ea: (ea_t) - @retval 1: do not delete srranges at the item end - @retval 0: srranges can be deleted - -ida_idp.IDP_Hooks.ev_update_call_stack (method) - ev_update_call_stack(self, stack, tid, getreg, regvalues) -> int - Calculate the call stack trace for the given thread. This callback is invoked - when the process is suspended and should fill the 'trace' object with the - information about the current call stack. Note that this callback is NOT invoked - if the current debugger backend implements stack tracing via - debugger_t::event_t::ev_update_call_stack. The debugger-specific algorithm takes - priority. Implementing this callback in the processor module is useful when - multiple debugging platforms follow similar patterns, and thus the same - processor-specific algorithm can be used for different platforms. - - @param stack: (call_stack_t *) result - @param tid: (int) thread id - @param getreg: (::processor_t::regval_getter_t *) function to get register - values - @param regvalues: (const regval_t *) register values array - @retval 1: ok - @retval -1: failed - @retval 0: unimplemented - -ida_idp.IDP_Hooks.ev_use_arg_types (method) - ev_use_arg_types(self, ea, fti, rargs) -> int - Use information about callee arguments. - - @param ea: (::ea_t) address of the call instruction - @param fti: (func_type_data_t *) info about function type - @param rargs: (funcargvec_t *) array of register arguments - @retval 1: (and removes handled arguments from fti and rargs) - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_use_regarg_type (method) - ev_use_regarg_type(self, ea, rargs) -> PyObject * - Use information about register argument. - - @param ea: (::ea_t) address of the instruction - @param rargs: (const funcargvec_t *) vector of register arguments (including - regs extracted from scattered arguments) - @retval 1 - @retval 0: not implemented - -ida_idp.IDP_Hooks.ev_use_stkarg_type (method) - ev_use_stkarg_type(self, ea, arg) -> int - Use information about a stack argument. - - @param ea: (::ea_t) address of the push instruction which pushes the function - argument into the stack - @param arg: (const funcarg_t *) argument info - @retval 1: ok - @retval <=0: failed, the kernel will create a comment with the argument name or - type for the instruction - -ida_idp.IDP_Hooks.ev_validate_flirt_func (method) - ev_validate_flirt_func(self, start_ea, funcname) -> int - Flirt has recognized a library function. This callback can be used by a plugin - or proc module to intercept it and validate such a function. - - @param start_ea: (::ea_t) - @param funcname: (const char *) - @retval -1: do not create a function, - @retval 0: function is validated - -ida_idp.IDP_Hooks.ev_verify_noreturn (method) - ev_verify_noreturn(self, pfn) -> int - The kernel wants to set 'noreturn' flags for a function. - - @param pfn: (func_t *) - @retval 0: ok. any other value: do not set 'noreturn' flag - -ida_idp.IDP_Hooks.ev_verify_sp (method) - ev_verify_sp(self, pfn) -> int - All function instructions have been analyzed. Now the processor module can - analyze the stack pointer for the whole function - - @param pfn: (func_t *) - @retval 0: ok - @retval <0: bad stack pointer - -ida_idp.IDP_Hooks.hook (method) - hook(self) -> bool - -ida_idp.IDP_Hooks.unhook (method) - unhook(self) -> bool - -ida_idp.IDP_INTERFACE_VERSION (variable) - The interface version number. - @note: see also IDA_SDK_VERSION from pro.h - -ida_idp.OP_FP_BASED (variable) - operand is FP based - -ida_idp.OP_SP_ADD (variable) - operand value is added to the pointer - -ida_idp.OP_SP_BASED (variable) - operand is SP based - -ida_idp.OP_SP_SUB (variable) - operand value is subtracted from the pointer - -ida_idp.PLFM_386 (variable) - Intel 80x86. - -ida_idp.PLFM_6502 (variable) - 6502 - -ida_idp.PLFM_65C816 (variable) - 65802/65816 - -ida_idp.PLFM_6800 (variable) - Motorola 68xx. - -ida_idp.PLFM_68K (variable) - Motorola 680x0. - -ida_idp.PLFM_80196 (variable) - Intel 80196. - -ida_idp.PLFM_8051 (variable) - 8051 - -ida_idp.PLFM_AD2106X (variable) - Analog Devices ADSP 2106X. - -ida_idp.PLFM_AD218X (variable) - Analog Devices ADSP 218X. - -ida_idp.PLFM_ALPHA (variable) - DEC Alpha. - -ida_idp.PLFM_ARC (variable) - Argonaut RISC Core. - -ida_idp.PLFM_ARM (variable) - Advanced RISC Machines. - -ida_idp.PLFM_AVR (variable) - Atmel 8-bit RISC processor(s) - -ida_idp.PLFM_C166 (variable) - Siemens C166 family. - -ida_idp.PLFM_C39 (variable) - Rockwell C39. - -ida_idp.PLFM_CR16 (variable) - NSC CR16. - -ida_idp.PLFM_DALVIK (variable) - Android Dalvik Virtual Machine. - -ida_idp.PLFM_DSP56K (variable) - Motorola DSP5600x. - -ida_idp.PLFM_DSP96K (variable) - Motorola DSP96000. - -ida_idp.PLFM_EBC (variable) - EFI Bytecode. - -ida_idp.PLFM_F2MC (variable) - Fujistu F2MC-16. - -ida_idp.PLFM_FR (variable) - Fujitsu FR Family. - -ida_idp.PLFM_H8 (variable) - Hitachi H8/300, H8/2000. - -ida_idp.PLFM_H8500 (variable) - Hitachi H8/500. - -ida_idp.PLFM_HPPA (variable) - Hewlett-Packard PA-RISC. - -ida_idp.PLFM_I860 (variable) - Intel 860. - -ida_idp.PLFM_I960 (variable) - Intel 960. - -ida_idp.PLFM_IA64 (variable) - Intel Itanium IA64. - -ida_idp.PLFM_JAVA (variable) - Java. - -ida_idp.PLFM_KR1878 (variable) - Angstrem KR1878. - -ida_idp.PLFM_M16C (variable) - Renesas M16C. - -ida_idp.PLFM_M32R (variable) - Mitsubishi 32bit RISC. - -ida_idp.PLFM_M740 (variable) - Mitsubishi 8bit. - -ida_idp.PLFM_M7700 (variable) - Mitsubishi 16bit. - -ida_idp.PLFM_M7900 (variable) - Mitsubishi 7900. - -ida_idp.PLFM_MC6812 (variable) - Motorola 68HC12. - -ida_idp.PLFM_MC6816 (variable) - Motorola 68HC16. - -ida_idp.PLFM_MIPS (variable) - MIPS. - -ida_idp.PLFM_MN102L00 (variable) - Panasonic MN10200. - -ida_idp.PLFM_MSP430 (variable) - Texas Instruments MSP430. - -ida_idp.PLFM_NEC_78K0 (variable) - NEC 78K0. - -ida_idp.PLFM_NEC_78K0S (variable) - NEC 78K0S. - -ida_idp.PLFM_NEC_V850X (variable) - NEC V850 and V850ES/E1/E2. - -ida_idp.PLFM_NET (variable) - Microsoft Visual Studio.Net. - -ida_idp.PLFM_OAKDSP (variable) - Atmel OAK DSP. - -ida_idp.PLFM_PDP (variable) - PDP11. - -ida_idp.PLFM_PIC (variable) - Microchip's PIC. - -ida_idp.PLFM_PIC16 (variable) - Microchip's 16-bit PIC. - -ida_idp.PLFM_PPC (variable) - PowerPC. - -ida_idp.PLFM_RISCV (variable) - RISC-V. - -ida_idp.PLFM_RL78 (variable) - Renesas RL78. - -ida_idp.PLFM_RX (variable) - Renesas RX. - -ida_idp.PLFM_S390 (variable) - IBM's S390. - -ida_idp.PLFM_SCR_ADPT (variable) - Processor module adapter for processor modules written in scripting languages. - -ida_idp.PLFM_SH (variable) - Renesas (formerly Hitachi) SuperH. - -ida_idp.PLFM_SPARC (variable) - SPARC. - -ida_idp.PLFM_SPC700 (variable) - Sony SPC700. - -ida_idp.PLFM_SPU (variable) - Cell Broadband Engine Synergistic Processor Unit. - -ida_idp.PLFM_ST20 (variable) - SGS-Thomson ST20. - -ida_idp.PLFM_ST7 (variable) - SGS-Thomson ST7. - -ida_idp.PLFM_ST9 (variable) - ST9+. - -ida_idp.PLFM_TLCS900 (variable) - Toshiba TLCS-900. - -ida_idp.PLFM_TMS (variable) - Texas Instruments TMS320C5x. - -ida_idp.PLFM_TMS320C1X (variable) - Texas Instruments TMS320C1x. - -ida_idp.PLFM_TMS320C28 (variable) - Texas Instruments TMS320C28x. - -ida_idp.PLFM_TMS320C3 (variable) - Texas Instruments TMS320C3. - -ida_idp.PLFM_TMS320C54 (variable) - Texas Instruments TMS320C54xx. - -ida_idp.PLFM_TMS320C55 (variable) - Texas Instruments TMS320C55xx. - -ida_idp.PLFM_TMSC6 (variable) - Texas Instruments TMS320C6x. - -ida_idp.PLFM_TRICORE (variable) - Tasking Tricore. - -ida_idp.PLFM_TRIMEDIA (variable) - Trimedia. - -ida_idp.PLFM_UNSP (variable) - SunPlus unSP. - -ida_idp.PLFM_XTENSA (variable) - Tensilica Xtensa. - -ida_idp.PLFM_Z8 (variable) - Z8. - -ida_idp.PLFM_Z80 (variable) - 8085, Z80 - -ida_idp.PR2_CODE16_BIT (variable) - low bit of code addresses has special meaning e.g. ARM Thumb, MIPS16 - -ida_idp.PR2_FORCE_16BIT (variable) - use 16-bit basic types despite of 32-bit segments (used by c166) - -ida_idp.PR2_IDP_OPTS (variable) - the module has processor-specific configuration options - -ida_idp.PR2_MACRO (variable) - processor supports macro instructions - -ida_idp.PR2_MAPPINGS (variable) - the processor module uses memory mapping - -ida_idp.PR2_REALCVT (variable) - the module has a custom 'ev_realcvt' implementation (otherwise IEEE-754 format - is assumed) - -ida_idp.PR2_REL_BITS (variable) - (Lumina) calcrel info has bits granularity, not bytes - construction flag only - -ida_idp.PR2_USE_CALCREL (variable) - (Lumina) the module supports calcrel info - -ida_idp.PRN_BIN (variable) - binary - -ida_idp.PRN_DEC (variable) - decimal - -ida_idp.PRN_HEX (variable) - hex - -ida_idp.PRN_OCT (variable) - octal - -ida_idp.PR_ADJSEGS (variable) - IDA may adjust segments' starting/ending addresses. - -ida_idp.PR_ALIGN (variable) - All data items should be aligned properly. - -ida_idp.PR_ALIGN_INSN (variable) - 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 (variable) - Module has a built-in assembler and will react to ev_assemble. - -ida_idp.PR_BINMEM (variable) - 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 (variable) - don't allow near xrefs between segments with different bases - -ida_idp.PR_CNDINSNS (variable) - has conditional instructions - -ida_idp.PR_DEFNUM (variable) - mask - default number representation - -ida_idp.PR_DEFSEG32 (variable) - segments are 32-bit by default - -ida_idp.PR_DEFSEG64 (variable) - segments are 64-bit by default - -ida_idp.PR_DELAYED (variable) - has delayed jumps and calls. If this flag is set, - processor_t::is_basic_block_end, processor_t::delay_slot_insn should be - implemented - -ida_idp.PR_NOCHANGE (variable) - The user can't change segments and code/data attributes (display only) - -ida_idp.PR_NO_SEGMOVE (variable) - the processor module doesn't support move_segm() (i.e. the user can't move - segments) - -ida_idp.PR_OUTER (variable) - has outer operands (currently only mc68k) - -ida_idp.PR_PURGING (variable) - there are calling conventions which may purge bytes from the stack - -ida_idp.PR_RNAMESOK (variable) - allow user register names for location names - -ida_idp.PR_SCALE_STKVARS (variable) - use processor_t::get_stkvar_scale callback - -ida_idp.PR_SEGS (variable) - has segment registers? - -ida_idp.PR_SEGTRANS (variable) - the processor module supports the segment translation feature (meaning it - calculates the code addresses using the map_code_ea() function) - -ida_idp.PR_SGROTHER (variable) - the segment registers don't contain the segment selectors. - -ida_idp.PR_STACK_UP (variable) - the stack grows up - -ida_idp.PR_TYPEINFO (variable) - the processor module fully supports type information callbacks; without full - support, function argument locations and other things will probably be wrong. - -ida_idp.PR_USE32 (variable) - supports 32-bit addressing? - -ida_idp.PR_USE64 (variable) - supports 64-bit addressing? - -ida_idp.PR_USE_ARG_TYPES (variable) - use processor_t::use_arg_types callback - -ida_idp.PR_USE_TBYTE (variable) - BTMT_SPECFLT means _TBYTE type - -ida_idp.PR_WORD_INS (variable) - instruction codes are grouped 2bytes in binary line prefix - -ida_idp.REG_SPOIL (variable) - processor_t::use_regarg_type uses this bit in the return value to indicate that - the register value has been spoiled - -ida_idp.SETPROC_IDB (variable) - set processor type for old idb - -ida_idp.SETPROC_LOADER (variable) - set processor type for new idb; if the user has specified a compatible - processor, return success without changing it. if failure, call loader_failure() - -ida_idp.SETPROC_LOADER_NON_FATAL (variable) - the same as SETPROC_LOADER but non-fatal failures. - -ida_idp.SETPROC_USER (variable) - set user-specified processor used for -p and manual processor change at later - time - -ida_idp.__ph (class) - -ida_idp._idp_cvar_t (class) - -ida_idp._notify_when_dispatcher_t (class) - -ida_idp._notify_when_dispatcher_t._IDB_Hooks (class) - -ida_idp._notify_when_dispatcher_t._IDB_Hooks.__init__ (method) - -ida_idp._notify_when_dispatcher_t._IDB_Hooks.closebase (method) - -ida_idp._notify_when_dispatcher_t._IDP_Hooks (class) - -ida_idp._notify_when_dispatcher_t._IDP_Hooks.__init__ (method) - -ida_idp._notify_when_dispatcher_t._IDP_Hooks.ev_newfile (method) - -ida_idp._notify_when_dispatcher_t._IDP_Hooks.ev_oldfile (method) - -ida_idp._notify_when_dispatcher_t.__init__ (method) - -ida_idp._notify_when_dispatcher_t._callback_t (class) - -ida_idp._notify_when_dispatcher_t._callback_t.__init__ (method) - -ida_idp._notify_when_dispatcher_t._find (method) - -ida_idp._notify_when_dispatcher_t.dispatch (method) - -ida_idp._notify_when_dispatcher_t.notify_when (method) - -ida_idp._processor_t (class) - Proxy of C++ processor_t class. - -ida_idp._processor_t.__init__ (method) - __init__(self) -> _processor_t - -ida_idp._processor_t.add_cref (method) - add_cref(_from, to, type) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - type: enum cref_t - -ida_idp._processor_t.add_dref (method) - add_dref(_from, to, type) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - type: enum dref_t - -ida_idp._processor_t.adjust_argloc (method) - adjust_argloc(argloc, type, size) -> ssize_t - - Parameters - ---------- - argloc: argloc_t * - type: tinfo_t const * - size: int - -ida_idp._processor_t.adjust_libfunc_ea (method) - adjust_libfunc_ea(sig, libfun, ea) -> ssize_t - - Parameters - ---------- - sig: idasgn_t const & - libfun: libfunc_t const & - ea: ea_t * - -ida_idp._processor_t.adjust_refinfo (method) - adjust_refinfo(ri, ea, n, fd) -> ssize_t - - Parameters - ---------- - ri: refinfo_t * - ea: ea_t - n: int - fd: fixup_data_t const & - -ida_idp._processor_t.ana_insn (method) - ana_insn(out) -> ssize_t - - Parameters - ---------- - out: insn_t * - -ida_idp._processor_t.analyze_prolog (method) - analyze_prolog(fct_ea) -> ssize_t - - Parameters - ---------- - fct_ea: ea_t - -ida_idp._processor_t.arch_changed (method) - arch_changed() -> ssize_t - -ida_idp._processor_t.arg_addrs_ready (method) - arg_addrs_ready(caller, n, tif, addrs) -> ssize_t - - Parameters - ---------- - caller: ea_t - n: int - tif: tinfo_t const & - addrs: ea_t * - -ida_idp._processor_t.asm_installed (method) - asm_installed(asmnum) -> ssize_t - - Parameters - ---------- - asmnum: int - -ida_idp._processor_t.assemble (method) - assemble(_bin, ea, cs, ip, _use32, line) -> ssize_t - - Parameters - ---------- - _bin: uchar * - ea: ea_t - cs: ea_t - ip: ea_t - _use32: bool - line: char const * - -ida_idp._processor_t.auto_queue_empty (method) - auto_queue_empty(type) - - Parameters - ---------- - type: int - -ida_idp._processor_t.calc_arglocs (method) - calc_arglocs(fti) -> ssize_t - - Parameters - ---------- - fti: func_type_data_t * - -ida_idp._processor_t.calc_cdecl_purged_bytes (method) - calc_cdecl_purged_bytes(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t.calc_next_eas (method) - calc_next_eas(res, insn, over) -> ssize_t - - Parameters - ---------- - res: eavec_t * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - over: bool - -ida_idp._processor_t.calc_purged_bytes (method) - calc_purged_bytes(p_purged_bytes, fti) -> ssize_t - - Parameters - ---------- - p_purged_bytes: int * - fti: func_type_data_t const & - -ida_idp._processor_t.calc_retloc (method) - calc_retloc(retloc, rettype, cc) -> ssize_t - - Parameters - ---------- - retloc: argloc_t * - rettype: tinfo_t const & - cc: cm_t - -ida_idp._processor_t.calc_spdelta (method) - calc_spdelta(spdelta, ins) -> ssize_t - - Parameters - ---------- - spdelta: sval_t * - ins: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.calc_step_over (method) - calc_step_over(target, ip) -> ssize_t - - Parameters - ---------- - target: ea_t * - ip: ea_t - -ida_idp._processor_t.calc_switch_cases (method) - calc_switch_cases(casevec, targets, insn_ea, si) -> ssize_t - - Parameters - ---------- - casevec: void * - targets: eavec_t * - insn_ea: ea_t - si: switch_info_t const & - -ida_idp._processor_t.calc_varglocs (method) - calc_varglocs(ftd, regs, stkargs, nfixed) -> ssize_t - - Parameters - ---------- - ftd: func_type_data_t * - regs: regobjs_t * - stkargs: relobj_t * - nfixed: int - -ida_idp._processor_t.calcrel (method) - calcrel(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t.calcrel_in_bits (method) - calcrel_in_bits(self) -> bool - -ida_idp._processor_t.can_have_type (method) - can_have_type(op) -> ssize_t - - Parameters - ---------- - op: op_t const & - -ida_idp._processor_t.cbsize (method) - cbsize(self) -> int - -ida_idp._processor_t.clean_tbit (method) - clean_tbit(ea, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - ea: ea_t - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t.cmp_operands (method) - cmp_operands(op1, op2) -> ssize_t - - Parameters - ---------- - op1: op_t const & - op2: op_t const & - -ida_idp._processor_t.coagulate (method) - coagulate(start_ea) -> ssize_t - - Parameters - ---------- - start_ea: ea_t - -ida_idp._processor_t.coagulate_dref (method) - coagulate_dref(_from, to, may_define, code_ea) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - may_define: bool - code_ea: ea_t * - -ida_idp._processor_t.create_flat_group (method) - create_flat_group(image_base, bitness, dataseg_sel) -> ssize_t - - Parameters - ---------- - image_base: ea_t - bitness: int - dataseg_sel: sel_t - -ida_idp._processor_t.create_func_frame (method) - create_func_frame(pfn) -> ssize_t - - Parameters - ---------- - pfn: func_t * - -ida_idp._processor_t.create_merge_handlers (method) - create_merge_handlers(md) -> ssize_t - - Parameters - ---------- - md: merge_data_t * - -ida_idp._processor_t.create_switch_xrefs (method) - create_switch_xrefs(jumpea, si) -> ssize_t - - Parameters - ---------- - jumpea: ea_t - si: switch_info_t const & - -ida_idp._processor_t.creating_segm (method) - creating_segm(seg) -> ssize_t - - Parameters - ---------- - seg: segment_t * - -ida_idp._processor_t.cvt64_hashval (method) - cvt64_hashval(self, node, tag, name, data) -> ssize_t - - Parameters - ---------- - node: nodeidx_t - tag: uchar - name: char const * - data: uchar const * - -ida_idp._processor_t.cvt64_supval (method) - cvt64_supval(self, node, tag, idx, data) -> ssize_t - - Parameters - ---------- - node: nodeidx_t - tag: uchar - idx: nodeidx_t - data: uchar const * - -ida_idp._processor_t.dbsize (method) - dbsize(self) -> int - -ida_idp._processor_t.decorate_name (method) - decorate_name(outbuf, name, mangle, cc, type) -> ssize_t - - Parameters - ---------- - outbuf: qstring * - name: char const * - mangle: bool - cc: cm_t - type: tinfo_t const & - -ida_idp._processor_t.del_cref (method) - del_cref(_from, to, expand) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - expand: bool - -ida_idp._processor_t.del_dref (method) - del_dref(_from, to) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - -ida_idp._processor_t.delay_slot_insn (method) - delay_slot_insn(self, ea, bexec, fexec) -> bool - - Parameters - ---------- - ea: ea_t * - bexec: bool * - fexec: bool * - -ida_idp._processor_t.demangle_name (method) - demangle_name(res, name, disable_mask, demreq) -> ssize_t - - Parameters - ---------- - res: int32 * - name: char const * - disable_mask: uint32 - demreq: int - -ida_idp._processor_t.emu_insn (method) - emu_insn(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.endbinary (method) - endbinary(ok) -> ssize_t - - Parameters - ---------- - ok: bool - -ida_idp._processor_t.equal_reglocs (method) - equal_reglocs(a1, a2) -> ssize_t - - Parameters - ---------- - a1: argloc_t const & - a2: argloc_t const & - -ida_idp._processor_t.extract_address (method) - extract_address(out_ea, screen_ea, string, x) -> ssize_t - - Parameters - ---------- - out_ea: ea_t * - screen_ea: ea_t - string: char const * - x: size_t - -ida_idp._processor_t.find_op_value (method) - find_op_value(insn, op) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - op: int - -ida_idp._processor_t.find_reg_value (method) - find_reg_value(insn, reg) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - reg: int - -ida_idp._processor_t.func_bounds (method) - func_bounds(possible_return_code, pfn, max_func_end_ea) -> ssize_t - - Parameters - ---------- - possible_return_code: int * - pfn: func_t * - max_func_end_ea: ea_t - -ida_idp._processor_t.gen_asm_or_lst (method) - gen_asm_or_lst(starting, fp, is_asm, flags, outline) -> ssize_t - - Parameters - ---------- - starting: bool - fp: FILE * - is_asm: bool - flags: int - outline: void * - -ida_idp._processor_t.gen_map_file (method) - gen_map_file(nlines, fp) -> ssize_t - - Parameters - ---------- - nlines: int * - fp: FILE * - -ida_idp._processor_t.gen_regvar_def (method) - gen_regvar_def(ctx, v) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - v: regvar_t * - -ida_idp._processor_t.gen_src_file_lnnum (method) - gen_src_file_lnnum(ctx, file, lnnum) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - file: char const * - lnnum: size_t - -ida_idp._processor_t.gen_stkvar_def (method) - gen_stkvar_def(ctx, mptr, v) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - mptr: member_t const * - v: sval_t - -ida_idp._processor_t.get_abi_info (method) - get_abi_info(abi_names, abi_opts, comp) -> ssize_t - - Parameters - ---------- - abi_names: qstrvec_t * - abi_opts: qstrvec_t * - comp: comp_t - -ida_idp._processor_t.get_autocmt (method) - get_autocmt(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.get_bg_color (method) - get_bg_color(color, ea) -> ssize_t - - Parameters - ---------- - color: bgcolor_t * - ea: ea_t - -ida_idp._processor_t.get_canon_feature (method) - get_canon_feature(self, itype) -> uint32 - - Parameters - ---------- - itype: uint16 - -ida_idp._processor_t.get_canon_mnem (method) - get_canon_mnem(self, itype) -> char const * - - Parameters - ---------- - itype: uint16 - -ida_idp._processor_t.get_cc_regs (method) - get_cc_regs(regs, cc) -> ssize_t - - Parameters - ---------- - regs: callregs_t * - cc: cm_t - -ida_idp._processor_t.get_code16_mode (method) - get_code16_mode(ea) -> bool - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t.get_dbr_opnum (method) - get_dbr_opnum(opnum, insn) -> ssize_t - - Parameters - ---------- - opnum: int * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.get_default_segm_bitness (method) - get_default_segm_bitness(self, is_64bit_app) -> int - - Parameters - ---------- - is_64bit_app: bool - -ida_idp._processor_t.get_frame_retsize (method) - get_frame_retsize(retsize, pfn) -> ssize_t - - Parameters - ---------- - retsize: int * - pfn: func_t const * - -ida_idp._processor_t.get_idd_opinfo (method) - get_idd_opinfo(opinf, ea, n, thread_id, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - opinf: idd_opinfo_t * - ea: ea_t - n: int - thread_id: int - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t.get_macro_insn_head (method) - get_macro_insn_head(head, ip) -> ssize_t - - Parameters - ---------- - head: ea_t * - ip: ea_t - -ida_idp._processor_t.get_operand_string (method) - get_operand_string(insn, opnum) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - opnum: int - -ida_idp._processor_t.get_proc_index (method) - get_proc_index(self) -> int - -ida_idp._processor_t.get_reg_accesses (method) - get_reg_accesses(accvec, insn, flags) -> ssize_t - - Parameters - ---------- - accvec: reg_accesses_t * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - flags: int - -ida_idp._processor_t.get_reg_info (method) - get_reg_info(regname, bitrange) -> char const * - - Parameters - ---------- - regname: char const * - bitrange: bitrange_t * - -ida_idp._processor_t.get_reg_name (method) - get_reg_name(reg, width, reghi) -> ssize_t - - Parameters - ---------- - reg: int - width: size_t - reghi: int - -ida_idp._processor_t.get_simd_types (method) - get_simd_types(out, simd_attrs, argloc, create_tifs) -> ssize_t - - Parameters - ---------- - out: void * - simd_attrs: simd_info_t const * - argloc: argloc_t const * - create_tifs: bool - -ida_idp._processor_t.get_stkarg_area_info (method) - get_stkarg_area_info(out, cc) -> ssize_t - - Parameters - ---------- - out: stkarg_area_info_t * - cc: cm_t - -ida_idp._processor_t.get_stkvar_scale (method) - get_stkvar_scale(self) -> int - -ida_idp._processor_t.get_stkvar_scale_factor (method) - get_stkvar_scale_factor() -> ssize_t - -ida_idp._processor_t.getreg (method) - getreg(rv, regnum) -> ssize_t - - Parameters - ---------- - rv: uval_t * - regnum: int - -ida_idp._processor_t.has_code16_bit (method) - has_code16_bit(self) -> bool - -ida_idp._processor_t.has_idp_opts (method) - has_idp_opts(self) -> bool - -ida_idp._processor_t.has_realcvt (method) - has_realcvt(self) -> bool - -ida_idp._processor_t.has_segregs (method) - has_segregs(self) -> bool - -ida_idp._processor_t.init (method) - init(idp_modname) -> ssize_t - - Parameters - ---------- - idp_modname: char const * - -ida_idp._processor_t.insn_reads_tbit (method) - insn_reads_tbit(insn, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t.is_align_insn (method) - is_align_insn(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t.is_alloca_probe (method) - is_alloca_probe(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t.is_basic_block_end (method) - is_basic_block_end(insn, call_insn_stops_block) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - call_insn_stops_block: bool - -ida_idp._processor_t.is_call_insn (method) - is_call_insn(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.is_cond_insn (method) - is_cond_insn(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.is_control_flow_guard (method) - is_control_flow_guard(p_reg, insn) -> ssize_t - - Parameters - ---------- - p_reg: int * - insn: insn_t const * - -ida_idp._processor_t.is_far_jump (method) - is_far_jump(icode) -> ssize_t - - Parameters - ---------- - icode: int - -ida_idp._processor_t.is_indirect_jump (method) - is_indirect_jump(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.is_jump_func (method) - is_jump_func(pfn, jump_target, func_pointer) -> ssize_t - - Parameters - ---------- - pfn: func_t * - jump_target: ea_t * - func_pointer: ea_t * - -ida_idp._processor_t.is_ret_insn (method) - is_ret_insn(insn, strict) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - strict: bool - -ida_idp._processor_t.is_sane_insn (method) - is_sane_insn(insn, no_crefs) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - no_crefs: int - -ida_idp._processor_t.is_sp_based (method) - is_sp_based(insn, x) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - x: op_t const & - -ida_idp._processor_t.is_switch (method) - is_switch(si, insn) -> ssize_t - - Parameters - ---------- - si: switch_info_t * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t.loader_elf_machine (method) - loader_elf_machine(li, machine_type, p_procname, p_pd, ldr, reader) -> ssize_t - - Parameters - ---------- - li: linput_t * - machine_type: int - p_procname: char const ** - p_pd: proc_def_t ** - ldr: elf_loader_t * - reader: reader_t * - -ida_idp._processor_t.lower_func_type (method) - lower_func_type(argnums, fti) -> ssize_t - - Parameters - ---------- - argnums: intvec_t * - fti: func_type_data_t * - -ida_idp._processor_t.max_ptr_size (method) - max_ptr_size() -> ssize_t - -ida_idp._processor_t.may_be_func (method) - may_be_func(insn, state) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - state: int - -ida_idp._processor_t.may_show_sreg (method) - may_show_sreg(current_ea) -> ssize_t - - Parameters - ---------- - current_ea: ea_t - -ida_idp._processor_t.moving_segm (method) - moving_segm(seg, to, flags) -> ssize_t - - Parameters - ---------- - seg: segment_t * - to: ea_t - flags: int - -ida_idp._processor_t.newasm (method) - newasm(asmnum) -> ssize_t - - Parameters - ---------- - asmnum: int - -ida_idp._processor_t.newbinary (method) - newbinary(filename, fileoff, basepara, binoff, nbytes) -> ssize_t - - Parameters - ---------- - filename: char const * - fileoff: qoff64_t - basepara: ea_t - binoff: ea_t - nbytes: uint64 - -ida_idp._processor_t.newfile (method) - newfile(fname) -> ssize_t - - Parameters - ---------- - fname: char const * - -ida_idp._processor_t.newprc (method) - newprc(pnum, keep_cfg) -> ssize_t - - Parameters - ---------- - pnum: int - keep_cfg: bool - -ida_idp._processor_t.next_exec_insn (method) - next_exec_insn(target, ea, tid, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - target: ea_t * - ea: ea_t - tid: int - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t.notify (method) - notify(event_code) -> ssize_t - - Parameters - ---------- - event_code: enum processor_t::event_t - -ida_idp._processor_t.oldfile (method) - oldfile(fname) -> ssize_t - - Parameters - ---------- - fname: char const * - -ida_idp._processor_t.out_assumes (method) - out_assumes(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t.out_data (method) - out_data(ctx, analyze_only) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - analyze_only: bool - -ida_idp._processor_t.out_footer (method) - out_footer(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t.out_header (method) - out_header(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t.out_insn (method) - out_insn(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t.out_label (method) - out_label(ctx, colored_name) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - colored_name: char const * - -ida_idp._processor_t.out_mnem (method) - out_mnem(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t.out_operand (method) - out_operand(ctx, op) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - op: op_t const & - -ida_idp._processor_t.out_segend (method) - out_segend(ctx, seg) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - seg: segment_t * - -ida_idp._processor_t.out_segstart (method) - out_segstart(ctx, seg) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - seg: segment_t * - -ida_idp._processor_t.out_special_item (method) - out_special_item(ctx, segtype) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - segtype: uchar - -ida_idp._processor_t.privrange_changed (method) - privrange_changed(self, old_privrange, delta) -> ssize_t - - Parameters - ---------- - old_privrange: range_t const & - delta: adiff_t - -ida_idp._processor_t.realcvt (method) - realcvt(m, e, swt) -> fpvalue_error_t - - Parameters - ---------- - m: void * - e: fpvalue_t * - swt: uint16 - -ida_idp._processor_t.rename (method) - rename(ea, new_name, flags) -> ssize_t - - Parameters - ---------- - ea: ea_t - new_name: char const * - flags: int - -ida_idp._processor_t.set_code16_mode (method) - set_code16_mode(ea, code16=True) -> ssize_t - - Parameters - ---------- - ea: ea_t - code16: bool - -ida_idp._processor_t.set_idp_options (method) - set_idp_options(keyword, vtype, value, idb_loaded=True) -> char const * - - Parameters - ---------- - keyword: char const * - vtype: int - value: void const * - idb_loaded: bool - -ida_idp._processor_t.set_proc_options (method) - set_proc_options(options, confidence) -> ssize_t - - Parameters - ---------- - options: char const * - confidence: int - -ida_idp._processor_t.setup_til (method) - setup_til() -> ssize_t - -ida_idp._processor_t.sizeof_ldbl (method) - sizeof_ldbl(self) -> size_t - -ida_idp._processor_t.stkup (method) - stkup(self) -> bool - -ida_idp._processor_t.str2reg (method) - str2reg(regname) -> ssize_t - - Parameters - ---------- - regname: char const * - -ida_idp._processor_t.supports_calcrel (method) - supports_calcrel(self) -> bool - -ida_idp._processor_t.supports_macros (method) - supports_macros(self) -> bool - -ida_idp._processor_t.term (method) - term() -> ssize_t - -ida_idp._processor_t.ti (method) - ti(self) -> bool - -ida_idp._processor_t.treat_hindering_item (method) - treat_hindering_item(hindering_item_ea, new_item_flags, new_item_ea, new_item_length) -> ssize_t - - Parameters - ---------- - hindering_item_ea: ea_t - new_item_flags: flags64_t - new_item_ea: ea_t - new_item_length: asize_t - -ida_idp._processor_t.undefine (method) - undefine(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t.update_call_stack (method) - update_call_stack(stack, tid, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - stack: call_stack_t * - tid: int - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t.use32 (method) - use32(self) -> bool - -ida_idp._processor_t.use64 (method) - use64(self) -> bool - -ida_idp._processor_t.use_arg_types (method) - use_arg_types(ea, fti, rargs) -> ssize_t - - Parameters - ---------- - ea: ea_t - fti: func_type_data_t * - rargs: void * - -ida_idp._processor_t.use_mappings (method) - use_mappings(self) -> bool - -ida_idp._processor_t.use_regarg_type (method) - use_regarg_type(idx, ea, rargs) -> ssize_t - - Parameters - ---------- - idx: int * - ea: ea_t - rargs: void * - -ida_idp._processor_t.use_stkarg_type (method) - use_stkarg_type(ea, arg) -> ssize_t - - Parameters - ---------- - ea: ea_t - arg: funcarg_t const & - -ida_idp._processor_t.use_tbyte (method) - use_tbyte(self) -> bool - -ida_idp._processor_t.validate_flirt_func (method) - validate_flirt_func(start_ea, funcname) -> ssize_t - - Parameters - ---------- - start_ea: ea_t - funcname: char const * - -ida_idp._processor_t.verify_noreturn (method) - verify_noreturn(pfn) -> ssize_t - - Parameters - ---------- - pfn: func_t * - -ida_idp._processor_t.verify_sp (method) - verify_sp(pfn) -> ssize_t - - Parameters - ---------- - pfn: func_t * - -ida_idp._processor_t_Trampoline_IDB_Hooks (class) - -ida_idp._processor_t_Trampoline_IDB_Hooks.__dummy (method) - -ida_idp._processor_t_Trampoline_IDB_Hooks.__init__ (method) - -ida_idp._processor_t_Trampoline_IDB_Hooks.__make_parent_caller (method) - -ida_idp._processor_t_Trampoline_IDB_Hooks.__make_parent_caller.call_parent (function) - -ida_idp._processor_t_add_cref (function) - _processor_t_add_cref(_from, to, type) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - type: enum cref_t - -ida_idp._processor_t_add_dref (function) - _processor_t_add_dref(_from, to, type) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - type: enum dref_t - -ida_idp._processor_t_adjust_argloc (function) - _processor_t_adjust_argloc(argloc, type, size) -> ssize_t - - Parameters - ---------- - argloc: argloc_t * - type: tinfo_t const * - size: int - -ida_idp._processor_t_adjust_libfunc_ea (function) - _processor_t_adjust_libfunc_ea(sig, libfun, ea) -> ssize_t - - Parameters - ---------- - sig: idasgn_t const & - libfun: libfunc_t const & - ea: ea_t * - -ida_idp._processor_t_adjust_refinfo (function) - _processor_t_adjust_refinfo(ri, ea, n, fd) -> ssize_t - - Parameters - ---------- - ri: refinfo_t * - ea: ea_t - n: int - fd: fixup_data_t const & - -ida_idp._processor_t_ana_insn (function) - _processor_t_ana_insn(out) -> ssize_t - - Parameters - ---------- - out: insn_t * - -ida_idp._processor_t_analyze_prolog (function) - _processor_t_analyze_prolog(fct_ea) -> ssize_t - - Parameters - ---------- - fct_ea: ea_t - -ida_idp._processor_t_arch_changed (function) - _processor_t_arch_changed() -> ssize_t - -ida_idp._processor_t_arg_addrs_ready (function) - _processor_t_arg_addrs_ready(caller, n, tif, addrs) -> ssize_t - - Parameters - ---------- - caller: ea_t - n: int - tif: tinfo_t const & - addrs: ea_t * - -ida_idp._processor_t_asm_installed (function) - _processor_t_asm_installed(asmnum) -> ssize_t - - Parameters - ---------- - asmnum: int - -ida_idp._processor_t_assemble (function) - _processor_t_assemble(_bin, ea, cs, ip, _use32, line) -> ssize_t - - Parameters - ---------- - _bin: uchar * - ea: ea_t - cs: ea_t - ip: ea_t - _use32: bool - line: char const * - -ida_idp._processor_t_auto_queue_empty (function) - _processor_t_auto_queue_empty(type) - - Parameters - ---------- - type: int - -ida_idp._processor_t_calc_arglocs (function) - _processor_t_calc_arglocs(fti) -> ssize_t - - Parameters - ---------- - fti: func_type_data_t * - -ida_idp._processor_t_calc_cdecl_purged_bytes (function) - _processor_t_calc_cdecl_purged_bytes(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t_calc_next_eas (function) - _processor_t_calc_next_eas(res, insn, over) -> ssize_t - - Parameters - ---------- - res: eavec_t * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - over: bool - -ida_idp._processor_t_calc_purged_bytes (function) - _processor_t_calc_purged_bytes(p_purged_bytes, fti) -> ssize_t - - Parameters - ---------- - p_purged_bytes: int * - fti: func_type_data_t const & - -ida_idp._processor_t_calc_retloc (function) - _processor_t_calc_retloc(retloc, rettype, cc) -> ssize_t - - Parameters - ---------- - retloc: argloc_t * - rettype: tinfo_t const & - cc: cm_t - -ida_idp._processor_t_calc_spdelta (function) - _processor_t_calc_spdelta(spdelta, ins) -> ssize_t - - Parameters - ---------- - spdelta: sval_t * - ins: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_calc_step_over (function) - _processor_t_calc_step_over(target, ip) -> ssize_t - - Parameters - ---------- - target: ea_t * - ip: ea_t - -ida_idp._processor_t_calc_switch_cases (function) - _processor_t_calc_switch_cases(casevec, targets, insn_ea, si) -> ssize_t - - Parameters - ---------- - casevec: void * - targets: eavec_t * - insn_ea: ea_t - si: switch_info_t const & - -ida_idp._processor_t_calc_varglocs (function) - _processor_t_calc_varglocs(ftd, regs, stkargs, nfixed) -> ssize_t - - Parameters - ---------- - ftd: func_type_data_t * - regs: regobjs_t * - stkargs: relobj_t * - nfixed: int - -ida_idp._processor_t_calcrel (function) - _processor_t_calcrel(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t_can_have_type (function) - _processor_t_can_have_type(op) -> ssize_t - - Parameters - ---------- - op: op_t const & - -ida_idp._processor_t_clean_tbit (function) - _processor_t_clean_tbit(ea, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - ea: ea_t - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t_cmp_operands (function) - _processor_t_cmp_operands(op1, op2) -> ssize_t - - Parameters - ---------- - op1: op_t const & - op2: op_t const & - -ida_idp._processor_t_coagulate (function) - _processor_t_coagulate(start_ea) -> ssize_t - - Parameters - ---------- - start_ea: ea_t - -ida_idp._processor_t_coagulate_dref (function) - _processor_t_coagulate_dref(_from, to, may_define, code_ea) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - may_define: bool - code_ea: ea_t * - -ida_idp._processor_t_create_flat_group (function) - _processor_t_create_flat_group(image_base, bitness, dataseg_sel) -> ssize_t - - Parameters - ---------- - image_base: ea_t - bitness: int - dataseg_sel: sel_t - -ida_idp._processor_t_create_func_frame (function) - _processor_t_create_func_frame(pfn) -> ssize_t - - Parameters - ---------- - pfn: func_t * - -ida_idp._processor_t_create_merge_handlers (function) - _processor_t_create_merge_handlers(md) -> ssize_t - - Parameters - ---------- - md: merge_data_t * - -ida_idp._processor_t_create_switch_xrefs (function) - _processor_t_create_switch_xrefs(jumpea, si) -> ssize_t - - Parameters - ---------- - jumpea: ea_t - si: switch_info_t const & - -ida_idp._processor_t_creating_segm (function) - _processor_t_creating_segm(seg) -> ssize_t - - Parameters - ---------- - seg: segment_t * - -ida_idp._processor_t_decorate_name (function) - _processor_t_decorate_name(outbuf, name, mangle, cc, type) -> ssize_t - - Parameters - ---------- - outbuf: qstring * - name: char const * - mangle: bool - cc: cm_t - type: tinfo_t const & - -ida_idp._processor_t_del_cref (function) - _processor_t_del_cref(_from, to, expand) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - expand: bool - -ida_idp._processor_t_del_dref (function) - _processor_t_del_dref(_from, to) -> ssize_t - - Parameters - ---------- - from: ea_t - to: ea_t - -ida_idp._processor_t_demangle_name (function) - _processor_t_demangle_name(res, name, disable_mask, demreq) -> ssize_t - - Parameters - ---------- - res: int32 * - name: char const * - disable_mask: uint32 - demreq: int - -ida_idp._processor_t_emu_insn (function) - _processor_t_emu_insn(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_endbinary (function) - _processor_t_endbinary(ok) -> ssize_t - - Parameters - ---------- - ok: bool - -ida_idp._processor_t_equal_reglocs (function) - _processor_t_equal_reglocs(a1, a2) -> ssize_t - - Parameters - ---------- - a1: argloc_t const & - a2: argloc_t const & - -ida_idp._processor_t_extract_address (function) - _processor_t_extract_address(out_ea, screen_ea, string, x) -> ssize_t - - Parameters - ---------- - out_ea: ea_t * - screen_ea: ea_t - string: char const * - x: size_t - -ida_idp._processor_t_find_op_value (function) - _processor_t_find_op_value(insn, op) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - op: int - -ida_idp._processor_t_find_reg_value (function) - _processor_t_find_reg_value(insn, reg) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - reg: int - -ida_idp._processor_t_func_bounds (function) - _processor_t_func_bounds(possible_return_code, pfn, max_func_end_ea) -> ssize_t - - Parameters - ---------- - possible_return_code: int * - pfn: func_t * - max_func_end_ea: ea_t - -ida_idp._processor_t_gen_asm_or_lst (function) - _processor_t_gen_asm_or_lst(starting, fp, is_asm, flags, outline) -> ssize_t - - Parameters - ---------- - starting: bool - fp: FILE * - is_asm: bool - flags: int - outline: void * - -ida_idp._processor_t_gen_map_file (function) - _processor_t_gen_map_file(nlines, fp) -> ssize_t - - Parameters - ---------- - nlines: int * - fp: FILE * - -ida_idp._processor_t_gen_regvar_def (function) - _processor_t_gen_regvar_def(ctx, v) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - v: regvar_t * - -ida_idp._processor_t_gen_src_file_lnnum (function) - _processor_t_gen_src_file_lnnum(ctx, file, lnnum) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - file: char const * - lnnum: size_t - -ida_idp._processor_t_gen_stkvar_def (function) - _processor_t_gen_stkvar_def(ctx, mptr, v) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - mptr: member_t const * - v: sval_t - -ida_idp._processor_t_get_abi_info (function) - _processor_t_get_abi_info(abi_names, abi_opts, comp) -> ssize_t - - Parameters - ---------- - abi_names: qstrvec_t * - abi_opts: qstrvec_t * - comp: comp_t - -ida_idp._processor_t_get_autocmt (function) - _processor_t_get_autocmt(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_get_bg_color (function) - _processor_t_get_bg_color(color, ea) -> ssize_t - - Parameters - ---------- - color: bgcolor_t * - ea: ea_t - -ida_idp._processor_t_get_cc_regs (function) - _processor_t_get_cc_regs(regs, cc) -> ssize_t - - Parameters - ---------- - regs: callregs_t * - cc: cm_t - -ida_idp._processor_t_get_code16_mode (function) - _processor_t_get_code16_mode(ea) -> bool - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t_get_dbr_opnum (function) - _processor_t_get_dbr_opnum(opnum, insn) -> ssize_t - - Parameters - ---------- - opnum: int * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_get_frame_retsize (function) - _processor_t_get_frame_retsize(retsize, pfn) -> ssize_t - - Parameters - ---------- - retsize: int * - pfn: func_t const * - -ida_idp._processor_t_get_idd_opinfo (function) - _processor_t_get_idd_opinfo(opinf, ea, n, thread_id, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - opinf: idd_opinfo_t * - ea: ea_t - n: int - thread_id: int - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t_get_macro_insn_head (function) - _processor_t_get_macro_insn_head(head, ip) -> ssize_t - - Parameters - ---------- - head: ea_t * - ip: ea_t - -ida_idp._processor_t_get_operand_string (function) - _processor_t_get_operand_string(insn, opnum) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - opnum: int - -ida_idp._processor_t_get_reg_accesses (function) - _processor_t_get_reg_accesses(accvec, insn, flags) -> ssize_t - - Parameters - ---------- - accvec: reg_accesses_t * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - flags: int - -ida_idp._processor_t_get_reg_info (function) - _processor_t_get_reg_info(regname, bitrange) -> char const * - - Parameters - ---------- - regname: char const * - bitrange: bitrange_t * - -ida_idp._processor_t_get_reg_name (function) - _processor_t_get_reg_name(reg, width, reghi) -> ssize_t - - Parameters - ---------- - reg: int - width: size_t - reghi: int - -ida_idp._processor_t_get_simd_types (function) - _processor_t_get_simd_types(out, simd_attrs, argloc, create_tifs) -> ssize_t - - Parameters - ---------- - out: void * - simd_attrs: simd_info_t const * - argloc: argloc_t const * - create_tifs: bool - -ida_idp._processor_t_get_stkarg_area_info (function) - _processor_t_get_stkarg_area_info(out, cc) -> ssize_t - - Parameters - ---------- - out: stkarg_area_info_t * - cc: cm_t - -ida_idp._processor_t_get_stkvar_scale_factor (function) - _processor_t_get_stkvar_scale_factor() -> ssize_t - -ida_idp._processor_t_getreg (function) - _processor_t_getreg(rv, regnum) -> ssize_t - - Parameters - ---------- - rv: uval_t * - regnum: int - -ida_idp._processor_t_init (function) - _processor_t_init(idp_modname) -> ssize_t - - Parameters - ---------- - idp_modname: char const * - -ida_idp._processor_t_insn_reads_tbit (function) - _processor_t_insn_reads_tbit(insn, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t_is_align_insn (function) - _processor_t_is_align_insn(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t_is_alloca_probe (function) - _processor_t_is_alloca_probe(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t_is_basic_block_end (function) - _processor_t_is_basic_block_end(insn, call_insn_stops_block) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - call_insn_stops_block: bool - -ida_idp._processor_t_is_call_insn (function) - _processor_t_is_call_insn(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_is_cond_insn (function) - _processor_t_is_cond_insn(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_is_control_flow_guard (function) - _processor_t_is_control_flow_guard(p_reg, insn) -> ssize_t - - Parameters - ---------- - p_reg: int * - insn: insn_t const * - -ida_idp._processor_t_is_far_jump (function) - _processor_t_is_far_jump(icode) -> ssize_t - - Parameters - ---------- - icode: int - -ida_idp._processor_t_is_indirect_jump (function) - _processor_t_is_indirect_jump(insn) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_is_jump_func (function) - _processor_t_is_jump_func(pfn, jump_target, func_pointer) -> ssize_t - - Parameters - ---------- - pfn: func_t * - jump_target: ea_t * - func_pointer: ea_t * - -ida_idp._processor_t_is_ret_insn (function) - _processor_t_is_ret_insn(insn, strict) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - strict: bool - -ida_idp._processor_t_is_sane_insn (function) - _processor_t_is_sane_insn(insn, no_crefs) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - no_crefs: int - -ida_idp._processor_t_is_sp_based (function) - _processor_t_is_sp_based(insn, x) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - x: op_t const & - -ida_idp._processor_t_is_switch (function) - _processor_t_is_switch(si, insn) -> ssize_t - - Parameters - ---------- - si: switch_info_t * - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp._processor_t_loader_elf_machine (function) - _processor_t_loader_elf_machine(li, machine_type, p_procname, p_pd, ldr, reader) -> ssize_t - - Parameters - ---------- - li: linput_t * - machine_type: int - p_procname: char const ** - p_pd: proc_def_t ** - ldr: elf_loader_t * - reader: reader_t * - -ida_idp._processor_t_lower_func_type (function) - _processor_t_lower_func_type(argnums, fti) -> ssize_t - - Parameters - ---------- - argnums: intvec_t * - fti: func_type_data_t * - -ida_idp._processor_t_max_ptr_size (function) - _processor_t_max_ptr_size() -> ssize_t - -ida_idp._processor_t_may_be_func (function) - _processor_t_may_be_func(insn, state) -> ssize_t - - Parameters - ---------- - insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - state: int - -ida_idp._processor_t_may_show_sreg (function) - _processor_t_may_show_sreg(current_ea) -> ssize_t - - Parameters - ---------- - current_ea: ea_t - -ida_idp._processor_t_moving_segm (function) - _processor_t_moving_segm(seg, to, flags) -> ssize_t - - Parameters - ---------- - seg: segment_t * - to: ea_t - flags: int - -ida_idp._processor_t_newasm (function) - _processor_t_newasm(asmnum) -> ssize_t - - Parameters - ---------- - asmnum: int - -ida_idp._processor_t_newbinary (function) - _processor_t_newbinary(filename, fileoff, basepara, binoff, nbytes) -> ssize_t - - Parameters - ---------- - filename: char const * - fileoff: qoff64_t - basepara: ea_t - binoff: ea_t - nbytes: uint64 - -ida_idp._processor_t_newfile (function) - _processor_t_newfile(fname) -> ssize_t - - Parameters - ---------- - fname: char const * - -ida_idp._processor_t_newprc (function) - _processor_t_newprc(pnum, keep_cfg) -> ssize_t - - Parameters - ---------- - pnum: int - keep_cfg: bool - -ida_idp._processor_t_next_exec_insn (function) - _processor_t_next_exec_insn(target, ea, tid, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - target: ea_t * - ea: ea_t - tid: int - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t_notify (function) - _processor_t_notify(event_code) -> ssize_t - - Parameters - ---------- - event_code: enum processor_t::event_t - -ida_idp._processor_t_oldfile (function) - _processor_t_oldfile(fname) -> ssize_t - - Parameters - ---------- - fname: char const * - -ida_idp._processor_t_out_assumes (function) - _processor_t_out_assumes(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t_out_data (function) - _processor_t_out_data(ctx, analyze_only) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - analyze_only: bool - -ida_idp._processor_t_out_footer (function) - _processor_t_out_footer(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t_out_header (function) - _processor_t_out_header(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t_out_insn (function) - _processor_t_out_insn(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t_out_label (function) - _processor_t_out_label(ctx, colored_name) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - colored_name: char const * - -ida_idp._processor_t_out_mnem (function) - _processor_t_out_mnem(ctx) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - -ida_idp._processor_t_out_operand (function) - _processor_t_out_operand(ctx, op) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - op: op_t const & - -ida_idp._processor_t_out_segend (function) - _processor_t_out_segend(ctx, seg) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - seg: segment_t * - -ida_idp._processor_t_out_segstart (function) - _processor_t_out_segstart(ctx, seg) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - seg: segment_t * - -ida_idp._processor_t_out_special_item (function) - _processor_t_out_special_item(ctx, segtype) -> ssize_t - - Parameters - ---------- - ctx: outctx_t & - segtype: uchar - -ida_idp._processor_t_realcvt (function) - _processor_t_realcvt(m, e, swt) -> fpvalue_error_t - - Parameters - ---------- - m: void * - e: fpvalue_t * - swt: uint16 - -ida_idp._processor_t_rename (function) - _processor_t_rename(ea, new_name, flags) -> ssize_t - - Parameters - ---------- - ea: ea_t - new_name: char const * - flags: int - -ida_idp._processor_t_set_code16_mode (function) - _processor_t_set_code16_mode(ea, code16=True) -> ssize_t - - Parameters - ---------- - ea: ea_t - code16: bool - -ida_idp._processor_t_set_idp_options (function) - _processor_t_set_idp_options(keyword, vtype, value, idb_loaded=True) -> char const * - - Parameters - ---------- - keyword: char const * - vtype: int - value: void const * - idb_loaded: bool - -ida_idp._processor_t_set_proc_options (function) - _processor_t_set_proc_options(options, confidence) -> ssize_t - - Parameters - ---------- - options: char const * - confidence: int - -ida_idp._processor_t_setup_til (function) - _processor_t_setup_til() -> ssize_t - -ida_idp._processor_t_str2reg (function) - _processor_t_str2reg(regname) -> ssize_t - - Parameters - ---------- - regname: char const * - -ida_idp._processor_t_term (function) - _processor_t_term() -> ssize_t - -ida_idp._processor_t_treat_hindering_item (function) - _processor_t_treat_hindering_item(hindering_item_ea, new_item_flags, new_item_ea, new_item_length) -> ssize_t - - Parameters - ---------- - hindering_item_ea: ea_t - new_item_flags: flags64_t - new_item_ea: ea_t - new_item_length: asize_t - -ida_idp._processor_t_undefine (function) - _processor_t_undefine(ea) -> ssize_t - - Parameters - ---------- - ea: ea_t - -ida_idp._processor_t_update_call_stack (function) - _processor_t_update_call_stack(stack, tid, _getreg, regvalues) -> ssize_t - - Parameters - ---------- - stack: call_stack_t * - tid: int - _getreg: processor_t::regval_getter_t * - regvalues: regval_t const & - -ida_idp._processor_t_use_arg_types (function) - _processor_t_use_arg_types(ea, fti, rargs) -> ssize_t - - Parameters - ---------- - ea: ea_t - fti: func_type_data_t * - rargs: void * - -ida_idp._processor_t_use_regarg_type (function) - _processor_t_use_regarg_type(idx, ea, rargs) -> ssize_t - - Parameters - ---------- - idx: int * - ea: ea_t - rargs: void * - -ida_idp._processor_t_use_stkarg_type (function) - _processor_t_use_stkarg_type(ea, arg) -> ssize_t - - Parameters - ---------- - ea: ea_t - arg: funcarg_t const & - -ida_idp._processor_t_validate_flirt_func (function) - _processor_t_validate_flirt_func(start_ea, funcname) -> ssize_t - - Parameters - ---------- - start_ea: ea_t - funcname: char const * - -ida_idp._processor_t_verify_noreturn (function) - _processor_t_verify_noreturn(pfn) -> ssize_t - - Parameters - ---------- - pfn: func_t * - -ida_idp._processor_t_verify_sp (function) - _processor_t_verify_sp(pfn) -> ssize_t - - Parameters - ---------- - pfn: func_t * - -ida_idp.asm_t (class) - Proxy of C++ asm_t class. - -ida_idp.asm_t.__init__ (method) - __init__(self) -> asm_t - -ida_idp.asm_t.a_align (variable) - "align" keyword - -ida_idp.asm_t.a_ascii (variable) - string literal directive - -ida_idp.asm_t.a_band (variable) - & bit and assembler time operation - -ida_idp.asm_t.a_bnot (variable) - ~ bit not assembler time operation - -ida_idp.asm_t.a_bor (variable) - | bit or assembler time operation - -ida_idp.asm_t.a_bss (variable) - uninitialized data directive should include 's' for the size of data - -ida_idp.asm_t.a_byte (variable) - byte directive - -ida_idp.asm_t.a_comdef (variable) - "comm" (communal variable) - -ida_idp.asm_t.a_curip (variable) - current IP (instruction pointer) symbol in assembler - -ida_idp.asm_t.a_double (variable) - double; 8bytes; nullptr if not allowed - -ida_idp.asm_t.a_dups (variable) - array keyword. the following sequences may appear: - * #h header - * #d size - * #v value - * #s(b,w,l,q,f,d,o) size specifiers for byte,word, dword,qword, - float,double,oword - -ida_idp.asm_t.a_dword (variable) - nullptr if not allowed - -ida_idp.asm_t.a_equ (variable) - 'equ' Used if AS_UNEQU is set - -ida_idp.asm_t.a_extrn (variable) - "extern" name keyword - -ida_idp.asm_t.a_float (variable) - float; 4bytes; nullptr if not allowed - -ida_idp.asm_t.a_include_fmt (variable) - the include directive (format string) - -ida_idp.asm_t.a_mod (variable) - % mod assembler time operation - -ida_idp.asm_t.a_oword (variable) - nullptr if not allowed - -ida_idp.asm_t.a_packreal (variable) - packed decimal real nullptr if not allowed - -ida_idp.asm_t.a_public (variable) - "public" name keyword. nullptr-use default, ""-do not generate - -ida_idp.asm_t.a_qword (variable) - nullptr if not allowed - -ida_idp.asm_t.a_rva (variable) - 'rva' keyword for image based offsets (see REFINFO_RVAOFF) - -ida_idp.asm_t.a_seg (variable) - 'seg ' prefix (example: push seg seg001) - -ida_idp.asm_t.a_shl (variable) - << shift left assembler time operation - -ida_idp.asm_t.a_shr (variable) - >> shift right assembler time operation - -ida_idp.asm_t.a_sizeof_fmt (variable) - size of type (format string) - -ida_idp.asm_t.a_tbyte (variable) - long double; nullptr if not allowed - -ida_idp.asm_t.a_vstruc_fmt (variable) - if a named item is a structure and displayed in the verbose (multiline) form - then display the name as printf(a_strucname_fmt, typename) (for asms with type - checking, e.g. tasm ideal) - -ida_idp.asm_t.a_weak (variable) - "weak" name keyword. nullptr-use default, ""-do not generate - -ida_idp.asm_t.a_word (variable) - word directive - -ida_idp.asm_t.a_xor (variable) - ^ bit xor assembler time operation - -ida_idp.asm_t.a_yword (variable) - 32-byte (256-bit) data; nullptr if not allowed requires AS2_YWORD - -ida_idp.asm_t.a_zword (variable) - 64-byte (512-bit) data; nullptr if not allowed requires AS2_ZWORD - -ida_idp.asm_t.accsep (variable) - char constant delimiter - -ida_idp.asm_t.ascsep (variable) - string literal delimiter - -ida_idp.asm_t.cmnt (variable) - comment string (see also cmnt2) - -ida_idp.asm_t.cmnt2 (variable) - comment close string (usually nullptr) this is used to denote a string which - closes comments, for example, if the comments are represented with (* ... *) - then cmnt = "(*" and cmnt2 = "*)" - -ida_idp.asm_t.end (variable) - end directive - -ida_idp.asm_t.esccodes (variable) - special chars that cannot appear as is in string and char literals - -ida_idp.asm_t.flag (variable) - Assembler feature bits - -ida_idp.asm_t.flag2 (variable) - Secondary assembler feature bits - -ida_idp.asm_t.header (variable) - array of automatically generated header lines they appear at the start of - disassembled text - -ida_idp.asm_t.help (variable) - Help screen number, 0 - no help. - -ida_idp.asm_t.high16 (variable) - high16 - -ida_idp.asm_t.high8 (variable) - high8 - -ida_idp.asm_t.lbrace (variable) - left brace used in complex expressions - -ida_idp.asm_t.low16 (variable) - low16 - -ida_idp.asm_t.low8 (variable) - low8 operation, should contain s for the operand - -ida_idp.asm_t.name (variable) - Assembler name (displayed in menus) - -ida_idp.asm_t.origin (variable) - org directive - -ida_idp.asm_t.rbrace (variable) - right brace used in complex expressions - -ida_idp.asm_t.uflag (variable) - user defined flags (local only for IDP) you may define and use your own bits - -ida_idp.assemble (function) - 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 (function) - cfg_get_cc_header_path(compid) -> char const * - - @param compid: comp_t - -ida_idp.cfg_get_cc_parm (function) - cfg_get_cc_parm(compid, name) -> char const * - - @param compid: comp_t - @param name: char const * - -ida_idp.cfg_get_cc_predefined_macros (function) - cfg_get_cc_predefined_macros(compid) -> char const * - - @param compid: comp_t - -ida_idp.delay_slot_insn (function) - delay_slot_insn(ea, bexec, fexec) -> bool - - @param ea: ea_t * - @param bexec: bool * - @param fexec: bool * - -ida_idp.gen_idb_event (function) - gen_idb_event(code) - the kernel will use this function to generate idb_events - - @param code: (C++: idb_event::event_code_t) enum idb_event::event_code_t - -ida_idp.get_ash (function) - get_ash() -> asm_t - -ida_idp.get_config_value (function) - get_config_value(key) -> bool - - @param key: char const * - -ida_idp.get_idb_notifier_addr (function) - get_idb_notifier_addr(arg1) -> PyObject * - - @param arg1: PyObject * - -ida_idp.get_idb_notifier_ud_addr (function) - get_idb_notifier_ud_addr(hooks) -> PyObject * - - @param hooks: IDB_Hooks * - -ida_idp.get_idp_name (function) - 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 nullptr - -ida_idp.get_idp_notifier_addr (function) - get_idp_notifier_addr(arg1) -> PyObject * - - @param arg1: PyObject * - -ida_idp.get_idp_notifier_ud_addr (function) - get_idp_notifier_ud_addr(hooks) -> PyObject * - - @param hooks: IDP_Hooks * - -ida_idp.get_ph (function) - get_ph() -> _processor_t - -ida_idp.get_reg_info (function) - get_reg_info(regname, bitrange) -> char const * - - @param regname: char const * - @param bitrange: bitrange_t * - -ida_idp.get_reg_name (function) - get_reg_name(reg, width, reghi=-1) -> str - Get text representation of a register. For most processors this function will - just return processor_t::reg_names[reg]. If the processor module has implemented - processor_t::get_reg_name, it will be used instead - - @param reg: (C++: int) internal register number as defined in the processor module - @param width: (C++: size_t) register width in bytes - @param reghi: (C++: int) if specified, then this function will return the register pair - @return: length of register name in bytes or -1 if failure - -ida_idp.has_cf_chg (function) - 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 (function) - 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 (function) - has_insn_feature(icode, bit) -> bool - Does the specified instruction have the specified feature? - - @param icode: (C++: uint16) - @param bit: (C++: uint32) - -ida_idp.is_align_insn (function) - 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 (function) - 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 &) an ida_ua.insn_t, or an address (C++: const insn_t &) - @param call_insn_stops_block: (C++: bool) - -ida_idp.is_call_insn (function) - is_call_insn(insn) -> bool - Is the instruction a "call"? - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp.is_indirect_jump_insn (function) - is_indirect_jump_insn(insn) -> bool - Is the instruction an indirect jump? - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_idp.is_ret_insn (function) - is_ret_insn(insn, strict=True) -> bool - Is the instruction a "return"? - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - @param strict: (C++: bool) - -ida_idp.num_range_t (class) - Proxy of C++ cfgopt_t::num_range_t class. - -ida_idp.num_range_t.__init__ (method) - __init__(self, _min, _max) -> num_range_t - - @param _min: int64 - @param _max: int64 - -ida_idp.params_t (class) - Proxy of C++ cfgopt_t::params_t class. - -ida_idp.params_t.__init__ (method) - __init__(self, _p1, _p2) -> params_t - - @param _p1: int64 - @param _p2: int64 - -ida_idp.parse_reg_name (function) - parse_reg_name(ri, regname) -> bool - Get register info by name. - - @param ri: (C++: reg_info_t *) result - @param regname: (C++: const char *) name of register - @return: success - -ida_idp.ph_calcrel (function) - ph_calcrel(ea) - - @param ea: ea_t - -ida_idp.ph_find_op_value (function) - ph_find_op_value(insn, op) -> ssize_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param op: int - -ida_idp.ph_find_reg_value (function) - ph_find_reg_value(insn, reg) -> ssize_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param reg: int - -ida_idp.ph_get_cnbits (function) - ph_get_cnbits() -> size_t - Returns the 'ph.cnbits' - -ida_idp.ph_get_dnbits (function) - ph_get_dnbits() -> size_t - Returns the 'ph.dnbits' - -ida_idp.ph_get_flag (function) - ph_get_flag() -> size_t - Returns the 'ph.flag' - -ida_idp.ph_get_icode_return (function) - ph_get_icode_return() -> size_t - Returns the 'ph.icode_return' - -ida_idp.ph_get_id (function) - ph_get_id() -> size_t - Returns the 'ph.id' field - -ida_idp.ph_get_instruc (function) - ph_get_instruc() -> [(str, int), ...] - 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 (function) - ph_get_instruc_end() -> size_t - Returns the 'ph.instruc_end' - -ida_idp.ph_get_instruc_start (function) - ph_get_instruc_start() -> size_t - Returns the 'ph.instruc_start' - -ida_idp.ph_get_operand_info (function) - ph_get_operand_info(ea, n) -> (int, int, int, int, int) or None - 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_accesses (function) - ph_get_reg_accesses(accvec, insn, flags) -> ssize_t - - @param accvec: reg_accesses_t * - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param flags: int - -ida_idp.ph_get_reg_code_sreg (function) - ph_get_reg_code_sreg() -> size_t - Returns the 'ph.reg_code_sreg' - -ida_idp.ph_get_reg_data_sreg (function) - ph_get_reg_data_sreg() -> size_t - Returns the 'ph.reg_data_sreg' - -ida_idp.ph_get_reg_first_sreg (function) - ph_get_reg_first_sreg() -> size_t - Returns the 'ph.reg_first_sreg' - -ida_idp.ph_get_reg_last_sreg (function) - ph_get_reg_last_sreg() -> size_t - Returns the 'ph.reg_last_sreg' - -ida_idp.ph_get_regnames (function) - ph_get_regnames() -> [str, ...] - Returns the list of register names as defined in the processor module - -ida_idp.ph_get_segreg_size (function) - ph_get_segreg_size() -> size_t - Returns the 'ph.segreg_size' - -ida_idp.ph_get_tbyte_size (function) - ph_get_tbyte_size() -> size_t - Returns the 'ph.tbyte_size' field as defined in he processor module - -ida_idp.ph_get_version (function) - ph_get_version() -> size_t - Returns the 'ph.version' - -ida_idp.process_config_directive (function) - process_config_directive(directive, priority=2) - - @param directive: char const * - @param priority: int - -ida_idp.processor_t (class) - Base class for all processor module scripts - - A processor_t instance is both an ida_idp.IDP_Hooks, and an - ida_idp.IDB_Hooks at the same time: any method of those two classes - can be overridden in your processor_t subclass (with the exception of - 'ida_idp.IDP_Hooks.ev_init' (replaced with processor_t.__init__), - and 'ida_idp.IDP_Hooks.ev_term' (replaced with processor_t.__del__)). - -ida_idp.processor_t.__init__ (method) - -ida_idp.processor_t._get_idb_notifier_addr (method) - -ida_idp.processor_t._get_idb_notifier_ud_addr (method) - -ida_idp.processor_t._get_idp_notifier_addr (method) - -ida_idp.processor_t._get_idp_notifier_ud_addr (method) - -ida_idp.processor_t._get_notify (method) - This helper is used to implement backward-compatibility - of pre IDA 7.3 processor_t interfaces. - -ida_idp.processor_t._make_forced_value_wrapper (method) - -ida_idp.processor_t._make_forced_value_wrapper.f (function) - -ida_idp.processor_t._make_int_returning_wrapper (method) - -ida_idp.processor_t._make_int_returning_wrapper.f (function) - -ida_idp.processor_t.auto_empty (method) - -ida_idp.processor_t.auto_empty_finally (method) - -ida_idp.processor_t.closebase (method) - -ida_idp.processor_t.compiler_changed (method) - -ida_idp.processor_t.deleting_func (method) - -ida_idp.processor_t.determined_main (method) - -ida_idp.processor_t.ev_ana_insn (method) - -ida_idp.processor_t.ev_assemble (method) - -ida_idp.processor_t.ev_auto_queue_empty (method) - -ida_idp.processor_t.ev_calc_step_over (method) - -ida_idp.processor_t.ev_can_have_type (method) - -ida_idp.processor_t.ev_cmp_operands (method) - -ida_idp.processor_t.ev_coagulate (method) - -ida_idp.processor_t.ev_coagulate_dref (method) - -ida_idp.processor_t.ev_create_func_frame (method) - -ida_idp.processor_t.ev_create_switch_xrefs (method) - -ida_idp.processor_t.ev_creating_segm (method) - -ida_idp.processor_t.ev_emu_insn (method) - -ida_idp.processor_t.ev_endbinary (method) - -ida_idp.processor_t.ev_func_bounds (method) - -ida_idp.processor_t.ev_gen_map_file (method) - -ida_idp.processor_t.ev_gen_regvar_def (method) - -ida_idp.processor_t.ev_gen_src_file_lnnum (method) - -ida_idp.processor_t.ev_get_autocmt (method) - -ida_idp.processor_t.ev_get_frame_retsize (method) - -ida_idp.processor_t.ev_get_operand_string (method) - -ida_idp.processor_t.ev_is_align_insn (method) - -ida_idp.processor_t.ev_is_alloca_probe (method) - -ida_idp.processor_t.ev_is_basic_block_end (method) - -ida_idp.processor_t.ev_is_call_insn (method) - -ida_idp.processor_t.ev_is_far_jump (method) - -ida_idp.processor_t.ev_is_indirect_jump (method) - -ida_idp.processor_t.ev_is_insn_table_jump (method) - -ida_idp.processor_t.ev_is_ret_insn (method) - -ida_idp.processor_t.ev_is_sane_insn (method) - -ida_idp.processor_t.ev_is_sp_based (method) - -ida_idp.processor_t.ev_is_switch (method) - -ida_idp.processor_t.ev_may_be_func (method) - -ida_idp.processor_t.ev_may_show_sreg (method) - -ida_idp.processor_t.ev_moving_segm (method) - -ida_idp.processor_t.ev_newbinary (method) - -ida_idp.processor_t.ev_newfile (method) - -ida_idp.processor_t.ev_newprc (method) - -ida_idp.processor_t.ev_oldfile (method) - -ida_idp.processor_t.ev_out_assumes (method) - -ida_idp.processor_t.ev_out_data (method) - -ida_idp.processor_t.ev_out_footer (method) - -ida_idp.processor_t.ev_out_header (method) - -ida_idp.processor_t.ev_out_insn (method) - -ida_idp.processor_t.ev_out_label (method) - -ida_idp.processor_t.ev_out_mnem (method) - -ida_idp.processor_t.ev_out_operand (method) - -ida_idp.processor_t.ev_out_segend (method) - -ida_idp.processor_t.ev_out_segstart (method) - -ida_idp.processor_t.ev_out_special_item (method) - -ida_idp.processor_t.ev_rename (method) - -ida_idp.processor_t.ev_set_idp_options (method) - -ida_idp.processor_t.ev_set_proc_options (method) - -ida_idp.processor_t.ev_str2reg (method) - -ida_idp.processor_t.ev_treat_hindering_item (method) - -ida_idp.processor_t.ev_undefine (method) - -ida_idp.processor_t.ev_validate_flirt_func (method) - -ida_idp.processor_t.ev_verify_noreturn (method) - -ida_idp.processor_t.ev_verify_sp (method) - -ida_idp.processor_t.func_added (method) - -ida_idp.processor_t.get_auxpref (method) - This function returns insn.auxpref value - -ida_idp.processor_t.get_idpdesc (method) - 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 (method) - Use this utility function to retrieve the 'uFlag' global variable - -ida_idp.processor_t.idasgn_loaded (method) - -ida_idp.processor_t.kernel_config_loaded (method) - -ida_idp.processor_t.make_code (method) - -ida_idp.processor_t.make_data (method) - -ida_idp.processor_t.renamed (method) - -ida_idp.processor_t.savebase (method) - -ida_idp.processor_t.segm_moved (method) - -ida_idp.processor_t.set_func_end (method) - -ida_idp.processor_t.set_func_start (method) - -ida_idp.processor_t.sgr_changed (method) - -ida_idp.reg_access_t (class) - Proxy of C++ reg_access_t class. - -ida_idp.reg_access_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: reg_access_t const & - -ida_idp.reg_access_t.__init__ (method) - __init__(self) -> reg_access_t - -ida_idp.reg_access_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: reg_access_t const & - -ida_idp.reg_access_t.have_common_bits (method) - have_common_bits(self, r) -> bool - - @param r: reg_access_t const & - -ida_idp.reg_access_t.opnum (variable) - operand number - -ida_idp.reg_access_t.range (variable) - bitrange inside the register - -ida_idp.reg_access_t.regnum (variable) - register number (only entire registers) - -ida_idp.reg_access_vec_t (class) - Proxy of C++ qvector< reg_access_t > class. - -ida_idp.reg_access_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< reg_access_t > const & - -ida_idp.reg_access_vec_t.__getitem__ (method) - __getitem__(self, i) -> reg_access_t - - @param i: size_t - -ida_idp.reg_access_vec_t.__init__ (method) - __init__(self) -> reg_access_vec_t - __init__(self, x) -> reg_access_vec_t - - @param x: qvector< reg_access_t > const & - -ida_idp.reg_access_vec_t.__len__ (method) - __len__(self) -> size_t - -ida_idp.reg_access_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< reg_access_t > const & - -ida_idp.reg_access_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: reg_access_t const & - -ida_idp.reg_access_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: reg_access_t const & - -ida_idp.reg_access_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: reg_access_t const & - -ida_idp.reg_access_vec_t.at (method) - at(self, _idx) -> reg_access_t - - @param _idx: size_t - -ida_idp.reg_access_vec_t.begin (method) - begin(self) -> reg_access_t - -ida_idp.reg_access_vec_t.capacity (method) - capacity(self) -> size_t - -ida_idp.reg_access_vec_t.clear (method) - clear(self) - -ida_idp.reg_access_vec_t.empty (method) - empty(self) -> bool - -ida_idp.reg_access_vec_t.end (method) - end(self) -> reg_access_t - -ida_idp.reg_access_vec_t.erase (method) - erase(self, it) -> reg_access_t - - @param it: qvector< reg_access_t >::iterator - - erase(self, first, last) -> reg_access_t - - @param first: qvector< reg_access_t >::iterator - @param last: qvector< reg_access_t >::iterator - -ida_idp.reg_access_vec_t.extract (method) - extract(self) -> reg_access_t - -ida_idp.reg_access_vec_t.find (method) - find(self, x) -> reg_access_t - - @param x: reg_access_t const & - -ida_idp.reg_access_vec_t.grow (method) - grow(self, x=reg_access_t()) - - @param x: reg_access_t const & - -ida_idp.reg_access_vec_t.has (method) - has(self, x) -> bool - - @param x: reg_access_t const & - -ida_idp.reg_access_vec_t.inject (method) - inject(self, s, len) - - @param s: reg_access_t * - @param len: size_t - -ida_idp.reg_access_vec_t.insert (method) - insert(self, it, x) -> reg_access_t - - @param it: qvector< reg_access_t >::iterator - @param x: reg_access_t const & - -ida_idp.reg_access_vec_t.pop_back (method) - pop_back(self) - -ida_idp.reg_access_vec_t.push_back (method) - push_back(self, x) - - @param x: reg_access_t const & - - push_back(self) -> reg_access_t - -ida_idp.reg_access_vec_t.qclear (method) - qclear(self) - -ida_idp.reg_access_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_idp.reg_access_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: reg_access_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_idp.reg_access_vec_t.size (method) - size(self) -> size_t - -ida_idp.reg_access_vec_t.swap (method) - swap(self, r) - - @param r: qvector< reg_access_t > & - -ida_idp.reg_access_vec_t.truncate (method) - truncate(self) - -ida_idp.reg_accesses_t (class) - Proxy of C++ reg_accesses_t class. - -ida_idp.reg_accesses_t.__init__ (method) - __init__(self) -> reg_accesses_t - -ida_idp.reg_info_t (class) - Proxy of C++ reg_info_t class. - -ida_idp.reg_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: reg_info_t const & - -ida_idp.reg_info_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: reg_info_t const & - -ida_idp.reg_info_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: reg_info_t const & - -ida_idp.reg_info_t.__init__ (method) - __init__(self) -> reg_info_t - -ida_idp.reg_info_t.__le__ (method) - __le__(self, r) -> bool - - @param r: reg_info_t const & - -ida_idp.reg_info_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: reg_info_t const & - -ida_idp.reg_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: reg_info_t const & - -ida_idp.reg_info_t.compare (method) - compare(self, r) -> int - - @param r: reg_info_t const & - -ida_idp.reg_info_t.reg (variable) - register number - -ida_idp.reg_info_t.size (variable) - register size - -ida_idp.register_cfgopts (function) - register_cfgopts(opts, nopts, cb=None, obj=None) -> bool - - @param opts: cfgopt_t const [] - @param nopts: size_t - @param cb: config_changed_cb_t * - @param obj: void * - -ida_idp.set_processor_type (function) - 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: (C++: const char *) name of processor type (one of names present in - processor_t::psnames) - @param level: (C++: setproc_level_t) SETPROC_ - @return: success - -ida_idp.set_target_assembler (function) - set_target_assembler(asmnum) -> bool - Set target assembler. - - @param asmnum: (C++: int) number of assembler in the current processor module - @return: success - -ida_idp.sizeof_ldbl (function) - sizeof_ldbl() -> size_t - -ida_idp.str2reg (function) - str2reg(p) -> int - Get any reg number (-1 on error) - - @param p: (C++: const char *) char const * - -ida_ieee (module) - IEEE floating point functions. - -ida_ieee.E_SPECIAL_EXP (variable) - Exponent in fpvalue_t for NaN and Inf. - -ida_ieee.FPV_BADARG (variable) - wrong value of max_exp - -ida_ieee.FPV_NAN (variable) - NaN. - -ida_ieee.FPV_NINF (variable) - negative infinity - -ida_ieee.FPV_NORM (variable) - regular value - -ida_ieee.FPV_PINF (variable) - positive infinity - -ida_ieee.IEEE_EXONE (variable) - The exponent of 1.0. - -ida_ieee.REAL_ERROR_FPOVER (variable) - floating overflow or underflow - -ida_ieee.REAL_ERROR_INTOVER (variable) - eetol*: integer overflow - -ida_ieee.REAL_ERROR_OK (variable) - no error - -ida_ieee.ecleaz (function) - ecleaz(x) - - @param x: unsigned short [(6+3)] - -ida_ieee.fpvalue_shorts_array_t (class) - Proxy of C++ wrapped_array_t< uint16,FPVAL_NWORDS > class. - -ida_ieee.fpvalue_shorts_array_t.__getitem__ (method) - __getitem__(self, i) -> unsigned short const & - - @param i: size_t - -ida_ieee.fpvalue_shorts_array_t.__init__ (method) - __init__(self, data) -> fpvalue_shorts_array_t - - @param data: unsigned short (&)[FPVAL_NWORDS] - -ida_ieee.fpvalue_shorts_array_t.__len__ (method) - __len__(self) -> size_t - -ida_ieee.fpvalue_shorts_array_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: unsigned short const & - -ida_ieee.fpvalue_shorts_array_t._get_bytes (method) - _get_bytes(self) -> bytevec_t - -ida_ieee.fpvalue_shorts_array_t._set_bytes (method) - _set_bytes(self, bts) - - Parameters - ---------- - bts: bytevec_t const & - -ida_ieee.fpvalue_t (class) - Proxy of C++ fpvalue_t class. - -ida_ieee.fpvalue_t.__add__ (method) - __add__(self, o) -> fpvalue_t - - @param o: fpvalue_t const & - -ida_ieee.fpvalue_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: fpvalue_t const & - -ida_ieee.fpvalue_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: fpvalue_t const & - -ida_ieee.fpvalue_t.__getitem__ (method) - -ida_ieee.fpvalue_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: fpvalue_t const & - -ida_ieee.fpvalue_t.__init__ (method) - __init__(self) -> fpvalue_t - __init__(self, _in) -> fpvalue_t - - @param in: bytevec12_t const & - -ida_ieee.fpvalue_t.__iter__ (method) - -ida_ieee.fpvalue_t.__le__ (method) - __le__(self, r) -> bool - - @param r: fpvalue_t const & - -ida_ieee.fpvalue_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: fpvalue_t const & - -ida_ieee.fpvalue_t.__mul__ (method) - __mul__(self, o) -> fpvalue_t - - @param o: fpvalue_t const & - -ida_ieee.fpvalue_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: fpvalue_t const & - -ida_ieee.fpvalue_t.__setitem__ (method) - -ida_ieee.fpvalue_t.__str__ (method) - __str__(self) -> qstring - -ida_ieee.fpvalue_t.__sub__ (method) - __sub__(self, o) -> fpvalue_t - - @param o: fpvalue_t const & - -ida_ieee.fpvalue_t.__truediv__ (method) - __truediv__(self, o) -> fpvalue_t - - @param o: fpvalue_t const & - -ida_ieee.fpvalue_t._get_10bytes (method) - _get_10bytes(self) - -ida_ieee.fpvalue_t._get_bytes (method) - _get_bytes(self) - -ida_ieee.fpvalue_t._get_float (method) - _get_float(self) -> double - -ida_ieee.fpvalue_t._get_shorts (method) - _get_shorts(self) -> fpvalue_shorts_array_t - -ida_ieee.fpvalue_t._set_10bytes (method) - _set_10bytes(self, _in) - - Parameters - ---------- - in: bytevec10_t const & - -ida_ieee.fpvalue_t._set_bytes (method) - _set_bytes(self, _in) - - Parameters - ---------- - in: bytevec12_t const & - -ida_ieee.fpvalue_t._set_float (method) - _set_float(self, v) - - Parameters - ---------- - v: double - -ida_ieee.fpvalue_t.assign (method) - assign(self, r) - - @param r: fpvalue_t const & - -ida_ieee.fpvalue_t.clear (method) - clear(self) - -ida_ieee.fpvalue_t.compare (method) - compare(self, r) -> int - - @param r: fpvalue_t const & - -ida_ieee.fpvalue_t.eabs (method) - eabs(self) - Calculate absolute value. - -ida_ieee.fpvalue_t.fadd (method) - fadd(self, y) -> fpvalue_error_t - Arithmetic operations. - - @param y: (C++: const fpvalue_t &) fpvalue_t const & - -ida_ieee.fpvalue_t.fdiv (method) - fdiv(self, y) -> fpvalue_error_t - - @param y: fpvalue_t const & - -ida_ieee.fpvalue_t.fmul (method) - fmul(self, y) -> fpvalue_error_t - - @param y: fpvalue_t const & - -ida_ieee.fpvalue_t.from_10bytes (method) - from_10bytes(self, fpval) -> fpvalue_error_t - Conversions for 10-byte floating point values. - - @param fpval: (C++: const void *) void const * - -ida_ieee.fpvalue_t.from_12bytes (method) - from_12bytes(self, fpval) -> fpvalue_error_t - Conversions for 12-byte floating point values. - - @param fpval: (C++: const void *) void const * - -ida_ieee.fpvalue_t.from_int64 (method) - from_int64(self, x) - - @param x: int64 - -ida_ieee.fpvalue_t.from_str (method) - from_str(self, p) -> fpvalue_error_t - Convert string to IEEE. - - @param p_str: (C++: const char **) pointer to pointer to string. it will advanced. - -ida_ieee.fpvalue_t.from_sval (method) - from_sval(self, x) - Convert integer to IEEE. - - @param x: (C++: sval_t) - -ida_ieee.fpvalue_t.from_uint64 (method) - from_uint64(self, x) - - @param x: uint64 - -ida_ieee.fpvalue_t.fsub (method) - fsub(self, y) -> fpvalue_error_t - - @param y: fpvalue_t const & - -ida_ieee.fpvalue_t.get_kind (method) - get_kind(self) -> fpvalue_kind_t - Get value kind. - -ida_ieee.fpvalue_t.is_negative (method) - is_negative(self) -> bool - Is negative value? - -ida_ieee.fpvalue_t.mul_pow2 (method) - mul_pow2(self, power_of_2) -> fpvalue_error_t - Multiply by a power of 2. - - @param power_of_2: (C++: int32) - -ida_ieee.fpvalue_t.negate (method) - negate(self) - Negate. - -ida_ieee.fpvalue_t.to_10bytes (method) - to_10bytes(self, fpval) -> fpvalue_error_t - - @param fpval: void * - -ida_ieee.fpvalue_t.to_12bytes (method) - to_12bytes(self, fpval) -> fpvalue_error_t - - @param fpval: void * - -ida_ieee.fpvalue_t.to_int64 (method) - to_int64(self, round=False) -> fpvalue_error_t - - @param round: bool - -ida_ieee.fpvalue_t.to_str (method) - to_str(self, mode) - Convert IEEE to string. - - @param mode: (C++: uint) broken down into: - * low byte: number of digits after '.' - * second byte: FPNUM_LENGTH - * third byte: FPNUM_DIGITS - -ida_ieee.fpvalue_t.to_sval (method) - to_sval(self, round=False) -> fpvalue_error_t - Convert IEEE to integer (+-0.5 if round) - - @param round: (C++: bool) - -ida_ieee.fpvalue_t.to_uint64 (method) - to_uint64(self, round=False) -> fpvalue_error_t - - @param round: bool - -ida_kernwin (module) - Defines the interface between the kernel and the UI. - - It contains: - * the UI dispatcher notification codes (ui_notification_t) - * convenience functions for UI services - * structures which hold information about the lines (disassembly, structures, - enums) generated by the kernel - * functions to interact with the user (dialog boxes) - * some string and conversion functions. - -ida_kernwin.AA_CHECKABLE (variable) - see update_action_checkable() - -ida_kernwin.AA_CHECKED (variable) - see update_action_checked() - -ida_kernwin.AA_ICON (variable) - see update_action_icon() - -ida_kernwin.AA_LABEL (variable) - see update_action_label() - -ida_kernwin.AA_NONE (variable) - no effect - -ida_kernwin.AA_SHORTCUT (variable) - see update_action_shortcut() - -ida_kernwin.AA_STATE (variable) - see update_action_state() - -ida_kernwin.AA_TOOLTIP (variable) - see update_action_tooltip() - -ida_kernwin.AA_VISIBILITY (variable) - see update_action_visibility() - -ida_kernwin.ACF_HAS_FIELD_DIRTREE_SELECTION (variable) - 'cur_enum_member' and 'dirtree_selection' fields are present - -ida_kernwin.ACF_HAS_SELECTION (variable) - there is currently a valid selection - -ida_kernwin.ACF_HAS_SOURCE (variable) - 'source' field is present - -ida_kernwin.ACF_HAS_TYPE_REF (variable) - 'type_ref' field is present - -ida_kernwin.ACF_XTRN_EA (variable) - cur_ea is in 'externs' segment - -ida_kernwin.ADF_CHECKABLE (variable) - action is checkable - -ida_kernwin.ADF_CHECKED (variable) - starts in a checked state (requires ADF_CHECKABLE) - -ida_kernwin.ADF_GLOBAL (variable) - Register the action globally, so that it's available even if no IDB is present - -ida_kernwin.ADF_NO_HIGHLIGHT (variable) - After activating, do not update the highlight according to what's under the - cursor (listings only.) - -ida_kernwin.ADF_NO_UNDO (variable) - the action does not create an undo point. useful for actions that do not modify - the database. - -ida_kernwin.ADF_OT_MASK (variable) - Owner type mask. - -ida_kernwin.ADF_OT_PLUGIN (variable) - Owner is a plugin_t. - -ida_kernwin.ADF_OT_PLUGMOD (variable) - Owner is a plugmod_t. - -ida_kernwin.ADF_OT_PROCMOD (variable) - Owner is a procmod_t. - -ida_kernwin.ADF_OWN_HANDLER (variable) - handler is owned by the action; it'll be destroyed when the action is - unregistered. Use DYNACTION_DESC_LITERAL to set this bit. - -ida_kernwin.AHF_VERSION (variable) - action handler version (used by action_handler_t::flags) - -ida_kernwin.AHF_VERSION_MASK (variable) - mask for action_handler_t::flags - -ida_kernwin.ASKBTN_BTN1 (variable) - First (Yes) button. - -ida_kernwin.ASKBTN_BTN2 (variable) - Second (No) button. - -ida_kernwin.ASKBTN_BTN3 (variable) - Third (Cancel) button. - -ida_kernwin.ASKBTN_CANCEL (variable) - Cancel button. - -ida_kernwin.ASKBTN_NO (variable) - No button. - -ida_kernwin.ASKBTN_YES (variable) - Yes button. - -ida_kernwin.AST_DISABLE (variable) - analog of AST_ENABLE - -ida_kernwin.AST_DISABLE_ALWAYS (variable) - disable action and do not call action_handler_t::action() anymore - -ida_kernwin.AST_DISABLE_FOR_IDB (variable) - analog of AST_ENABLE_FOR_IDB - -ida_kernwin.AST_DISABLE_FOR_WIDGET (variable) - analog of AST_ENABLE_FOR_WIDGET - -ida_kernwin.AST_ENABLE (variable) - enable action - call action_handler_t::update() when anything changes - -ida_kernwin.AST_ENABLE_ALWAYS (variable) - enable action and do not call action_handler_t::update() anymore - -ida_kernwin.AST_ENABLE_FOR_IDB (variable) - enable action for the current idb. call action_handler_t::update() when a - database is opened/closed - -ida_kernwin.AST_ENABLE_FOR_WIDGET (variable) - enable action for the current widget. call action_handler_t::update() when a - widget gets/loses focus - -ida_kernwin.BWN_ADDRWATCH (variable) - the 'Watch List' window - -ida_kernwin.BWN_BOOKMARKS (variable) - a persistent 'Bookmarks' widget - -ida_kernwin.BWN_BPTS (variable) - breakpoints - -ida_kernwin.BWN_CALLS (variable) - function calls - -ida_kernwin.BWN_CALLS_CALLEES (variable) - function calls, callees - -ida_kernwin.BWN_CALLS_CALLERS (variable) - function calls, callers - -ida_kernwin.BWN_CALL_STACK (variable) - call stack - -ida_kernwin.BWN_CHOOSER (variable) - a non-builtin chooser - -ida_kernwin.BWN_CLI (variable) - the command-line, in the output window - -ida_kernwin.BWN_CMDPALCSR (variable) - the command palette chooser (Qt version only) - -ida_kernwin.BWN_CMDPALWIN (variable) - the command palette window (Qt version only) - -ida_kernwin.BWN_CPUREGS (variable) - one of the 'General registers', 'FPU register', ... debugger windows - -ida_kernwin.BWN_CUSTVIEW (variable) - custom viewers - -ida_kernwin.BWN_CV_LINE_INFOS (variable) - custom viewers' lineinfo widget - -ida_kernwin.BWN_DISASM (variable) - disassembly views - -ida_kernwin.BWN_DISASMS (variable) - Alias. Some BWN_* were confusing, and thus have been renamed. This is to ensure - bw-compat. - -ida_kernwin.BWN_DISASM_ARROWS (variable) - disassembly arrows widget - -ida_kernwin.BWN_DUMP (variable) - hex dumps - -ida_kernwin.BWN_DUMPS (variable) - Alias. Some BWN_* were confusing, and thus have been renamed. This is to ensure - bw-compat. - -ida_kernwin.BWN_ENUMS (variable) - enumerations - -ida_kernwin.BWN_EXPORTS (variable) - exports - -ida_kernwin.BWN_FRAME (variable) - function frame - -ida_kernwin.BWN_FUNCS (variable) - functions - -ida_kernwin.BWN_IMPORTS (variable) - imports - -ida_kernwin.BWN_LOCALS (variable) - the 'locals' debugger window - -ida_kernwin.BWN_LOCTYPS (variable) - local types - -ida_kernwin.BWN_MDVIEWCSR (variable) - lumina metadata view chooser - -ida_kernwin.BWN_MODULES (variable) - modules - -ida_kernwin.BWN_NAMES (variable) - names - -ida_kernwin.BWN_NAVBAND (variable) - navigation band - -ida_kernwin.BWN_NOTEPAD (variable) - notepad - -ida_kernwin.BWN_OUTPUT (variable) - the text area, in the output window - -ida_kernwin.BWN_PROBS (variable) - problems - -ida_kernwin.BWN_PSEUDOCODE (variable) - hexrays decompiler views - -ida_kernwin.BWN_SCRIPTS_CSR (variable) - the "Recent scripts" chooser - -ida_kernwin.BWN_SEARCH (variable) - search results - -ida_kernwin.BWN_SEARCHS (variable) - Alias. Some BWN_* were confusing, and thus have been renamed. This is to ensure - bw-compat. - -ida_kernwin.BWN_SEGREGS (variable) - segment registers - -ida_kernwin.BWN_SEGS (variable) - segments - -ida_kernwin.BWN_SELS (variable) - selectors - -ida_kernwin.BWN_SHORTCUTCSR (variable) - the shortcuts chooser (Qt version only) - -ida_kernwin.BWN_SHORTCUTWIN (variable) - the shortcuts window (Qt version only) - -ida_kernwin.BWN_SIGNS (variable) - signatures - -ida_kernwin.BWN_SNIPPETS (variable) - the 'Execute script' window - -ida_kernwin.BWN_SNIPPETS_CSR (variable) - the list of snippets in the 'Execute script' window - -ida_kernwin.BWN_SO_OFFSETS (variable) - the 'Structure offsets' dialog's offset panel - -ida_kernwin.BWN_SO_STRUCTS (variable) - the 'Structure offsets' dialog's 'Structures and Unions' panel - -ida_kernwin.BWN_SRCPTHMAP_CSR (variable) - "Source paths..."'s path mappings chooser - -ida_kernwin.BWN_SRCPTHUND_CSR (variable) - "Source paths..."'s undesired paths chooser - -ida_kernwin.BWN_STACK (variable) - Alias. Some BWN_* were confusing, and thus have been renamed. This is to ensure - bw-compat. - -ida_kernwin.BWN_STKVIEW (variable) - the 'Stack view' debugger window - -ida_kernwin.BWN_STRINGS (variable) - strings - -ida_kernwin.BWN_STRUCTS (variable) - structures - -ida_kernwin.BWN_THREADS (variable) - threads - -ida_kernwin.BWN_TILIST (variable) - a types listing widget - -ida_kernwin.BWN_TILS (variable) - type libraries - -ida_kernwin.BWN_TRACE (variable) - tracing view - -ida_kernwin.BWN_UNDOHIST (variable) - Undo history. - -ida_kernwin.BWN_UNKNOWN (variable) - unknown window - -ida_kernwin.BWN_WATCH (variable) - the 'watches' debugger window - -ida_kernwin.BWN_XREFS (variable) - xrefs - -ida_kernwin.CDVF_LINEICONS (variable) - icons can be drawn over the line control - -ida_kernwin.CDVF_NOLINES (variable) - don't show line numbers - -ida_kernwin.CDVF_STATUSBAR (variable) - keep the status bar in the custom viewer - -ida_kernwin.CDVH_LINES_ALIGNMENT (variable) - see set_code_viewer_lines_alignment() - -ida_kernwin.CDVH_LINES_CLICK (variable) - see code_viewer_lines_click_t - -ida_kernwin.CDVH_LINES_DBLCLICK (variable) - see code_viewer_lines_click_t - -ida_kernwin.CDVH_LINES_DRAWICON (variable) - see code_viewer_lines_icon_t - -ida_kernwin.CDVH_LINES_ICONMARGIN (variable) - see set_code_viewer_lines_icon_margin() - -ida_kernwin.CDVH_LINES_LINENUM (variable) - see code_viewer_lines_linenum_t - -ida_kernwin.CDVH_LINES_POPUP (variable) - see code_viewer_lines_click_t - -ida_kernwin.CDVH_LINES_RADIX (variable) - see set_code_viewer_lines_radix() - -ida_kernwin.CDVH_SRCVIEW (variable) - see set_code_viewer_is_source() - -ida_kernwin.CDVH_USERDATA (variable) - see set_code_viewer_user_data() - -ida_kernwin.CH2_LAZY_LOADED (variable) - The chooser is lazy-loaded; it receives the callback do_lazy_load_dir() (only - meaningful when CH_HAS_DIRTREE is set) - -ida_kernwin.CHCOL_DEC (variable) - decimal number - -ida_kernwin.CHCOL_DEFHIDDEN (variable) - column should be hidden by default - -ida_kernwin.CHCOL_DRAGHINT (variable) - the column number that will be used to build hints for the dragging undo label. - This should be provided for at most one column for any given chooser. - -ida_kernwin.CHCOL_EA (variable) - address - -ida_kernwin.CHCOL_FNAME (variable) - function name. If a chooser column has this flag set and implements - chooser_base_t::get_ea(), rows background colors will be automatically set to - match the navigator's "Library function", "Lumina function" and "External - symbol" colors - -ida_kernwin.CHCOL_FORMAT (variable) - column format mask - -ida_kernwin.CHCOL_HEX (variable) - hexadecimal number - -ida_kernwin.CHCOL_INODENAME (variable) - if CH_HAS_DIRTREE has been specified, this instructs the chooser that this - column shows the inode name. This should be provided for at most one column for - any given chooser. - -ida_kernwin.CHCOL_PATH (variable) - file path. TUI IDA will truncate excessive cell lengths starting at their - beginning, and prepending the resulting text with "..." order to leave the - filename visible - -ida_kernwin.CHCOL_PLAIN (variable) - plain string - -ida_kernwin.CHITEM_BOLD (variable) - display the item in bold - -ida_kernwin.CHITEM_GRAY (variable) - gray out the item - -ida_kernwin.CHITEM_ITALIC (variable) - display the item in italic - -ida_kernwin.CHITEM_STRIKE (variable) - strikeout the item - -ida_kernwin.CHITEM_UNDER (variable) - underline the item - -ida_kernwin.CHOOSER_NOMAINMENU (variable) - do not display main menu - -ida_kernwin.CHOOSER_NOSTATUSBAR (variable) - do not display status bar (obsolete. Use CH_NO_STATUS_BAR instead) - -ida_kernwin.CH_ATTRS (variable) - generate ui_get_chooser_item_attrs (gui only) - -ida_kernwin.CH_BUILTIN_MASK (variable) - Mask for builtin chooser numbers. Plugins should not use them. - -ida_kernwin.CH_CAN_DEL (variable) - allow to delete existing item(s) - -ida_kernwin.CH_CAN_EDIT (variable) - allow to edit existing item(s) - -ida_kernwin.CH_CAN_INS (variable) - allow to insert new items - -ida_kernwin.CH_CAN_REFRESH (variable) - allow to refresh chooser - -ida_kernwin.CH_FORCE_DEFAULT (variable) - if a non-modal chooser was already open, change selection to the default one - -ida_kernwin.CH_HAS_DIFF (variable) - The chooser can be used in a diffing/merging workflow. - -ida_kernwin.CH_HAS_DIRTREE (variable) - The chooser can provide a dirtree_t, meaning a tree-like structure can be - provided to the user (instead of a flat table) - -ida_kernwin.CH_KEEP (variable) - 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 (variable) - Modal chooser. - -ida_kernwin.CH_MULTI (variable) - The chooser will allow multi-selection (only for GUI choosers). This bit is set - when using the chooser_multi_t structure. - -ida_kernwin.CH_MULTI_EDIT (variable) - Obsolete. - -ida_kernwin.CH_NOBTNS (variable) - 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_NON_PERSISTED_TREE (variable) - the chooser tree is not persisted (it is not loaded on startup and is not saved - on exit) - -ida_kernwin.CH_NO_FILTER (variable) - The chooser will not have filtering abilities. - -ida_kernwin.CH_NO_SORT (variable) - The chooser will not have sorting abilities. - -ida_kernwin.CH_NO_STATUS_BAR (variable) - don't show a status bar - -ida_kernwin.CH_QFLT (variable) - open with quick filter enabled and focused - -ida_kernwin.CH_QFTYP_DEFAULT (variable) - set quick filtering type to the possible existing default for this chooser - -ida_kernwin.CH_QFTYP_FUZZY (variable) - fuzzy search quick filter type - -ida_kernwin.CH_QFTYP_NORMAL (variable) - normal (i.e., lexicographical) quick filter type - -ida_kernwin.CH_QFTYP_REGEX (variable) - regex quick filter type - -ida_kernwin.CH_QFTYP_WHOLE_WORDS (variable) - whole words quick filter type - -ida_kernwin.CH_RENAME_IS_EDIT (variable) - triggering a 'edit/rename' (i.e., F2 shortcut) on a cell, should call the edit() - callback for the corresponding row. - -ida_kernwin.CH_RESTORE (variable) - restore floating position if present (equivalent of WOPN_RESTORE) (GUI version - only) - -ida_kernwin.CH_TM_FOLDERS_ONLY (variable) - chooser will show in folders-only mode - -ida_kernwin.CH_TM_FULL_TREE (variable) - chooser will show in no-tree mode - -ida_kernwin.CH_TM_NO_TREE (variable) - chooser will show up in no-tree mode - -ida_kernwin.CK_EXTRA1 (variable) - extra background overlay #1 - -ida_kernwin.CK_EXTRA10 (variable) - extra background overlay #10 - -ida_kernwin.CK_EXTRA11 (variable) - extra background overlay #11 - -ida_kernwin.CK_EXTRA12 (variable) - extra background overlay #12 - -ida_kernwin.CK_EXTRA13 (variable) - extra background overlay #13 - -ida_kernwin.CK_EXTRA14 (variable) - extra background overlay #14 - -ida_kernwin.CK_EXTRA15 (variable) - extra background overlay #15 - -ida_kernwin.CK_EXTRA16 (variable) - extra background overlay #16 - -ida_kernwin.CK_EXTRA2 (variable) - extra background overlay #2 - -ida_kernwin.CK_EXTRA3 (variable) - extra background overlay #3 - -ida_kernwin.CK_EXTRA4 (variable) - extra background overlay #4 - -ida_kernwin.CK_EXTRA5 (variable) - extra background overlay #5 - -ida_kernwin.CK_EXTRA6 (variable) - extra background overlay #6 - -ida_kernwin.CK_EXTRA7 (variable) - extra background overlay #7 - -ida_kernwin.CK_EXTRA8 (variable) - extra background overlay #8 - -ida_kernwin.CK_EXTRA9 (variable) - extra background overlay #9 - -ida_kernwin.CK_TRACE (variable) - traced address - -ida_kernwin.CK_TRACE_OVL (variable) - overlay trace address - -ida_kernwin.CLNL_FINDCMT (variable) - Search for the comment symbol everywhere in the line, not only at the beginning. - -ida_kernwin.CLNL_LTRIM (variable) - Remove leading space characters. - -ida_kernwin.CLNL_RTRIM (variable) - Remove trailing space characters. - -ida_kernwin.CREATETB_ADV (variable) - toolbar is for 'advanced mode' only - -ida_kernwin.CVH_CLICK (variable) - see custom_viewer_click_t - -ida_kernwin.CVH_CLOSE (variable) - see custom_viewer_close_t - -ida_kernwin.CVH_CURPOS (variable) - see custom_viewer_curpos_t - -ida_kernwin.CVH_DBLCLICK (variable) - see custom_viewer_dblclick_t - -ida_kernwin.CVH_HELP (variable) - see custom_viewer_help_t - -ida_kernwin.CVH_KEYDOWN (variable) - see custom_viewer_keydown_t - -ida_kernwin.CVH_MOUSEMOVE (variable) - see custom_viewer_mouse_moved_t - -ida_kernwin.CVH_POPUP (variable) - see custom_viewer_popup_t - -ida_kernwin.CVH_QT_AWARE (variable) - see set_custom_viewer_qt_aware() - -ida_kernwin.CVLF_USE_MOUSE (variable) - Fetch the location from the mouse, instead of caret in the listing. - -ida_kernwin.CVNF_ACT (variable) - activate (i.e., switch to) the viewer. Activation is performed before the new - lochist_entry_t instance is actually copied to the viewer's lochist_t - (otherwise, if the viewer was invisible its on_location_changed() handler - wouldn't be called.) - -ida_kernwin.CVNF_JUMP (variable) - push the current position in this viewer's lochist_t before going to the new - location - -ida_kernwin.CVNF_LAZY (variable) - try and move the cursor to a line displaying the place_t if possible. This might - disregard the Y position in case of success - -ida_kernwin.Choose (class) - The chooser can be used in a diffing/merging workflow - -ida_kernwin.Choose.ALREADY_EXISTS (variable) - the non-modal chooser with the same data is already open - -ida_kernwin.Choose.Activate (method) - Activates a visible chooser - -ida_kernwin.Choose.AddCommand (method) - -ida_kernwin.Choose.CH_CAN_DEL (variable) - allow to delete existing item(s) - -ida_kernwin.Choose.CH_CAN_EDIT (variable) - allow to edit existing item(s) - -ida_kernwin.Choose.CH_CAN_INS (variable) - allow to insert new items - -ida_kernwin.Choose.CH_CAN_REFRESH (variable) - allow to refresh chooser - -ida_kernwin.Choose.CH_FORCE_DEFAULT (variable) - If a non-modal chooser was already open, change selection to the given - default one - -ida_kernwin.Choose.CH_MODAL (variable) - Modal chooser - -ida_kernwin.Choose.CH_MULTI (variable) - Allow multi selection. - Refer the description of the OnInsertLine(), OnDeleteLine(), - OnEditLine(), OnSelectLine(), OnRefresh(), OnSelectionChange() to - see a difference between single and multi selection callbacks. - -ida_kernwin.Choose.CH_NOIDB (variable) - use the chooser even without an open database, same as x0=-2 - -ida_kernwin.Choose.CH_NO_STATUS_BAR (variable) - don't show a status bar - -ida_kernwin.Choose.CH_QFLT (variable) - open with quick filter enabled and focused - -ida_kernwin.Choose.CH_RENAME_IS_EDIT (variable) - triggering a 'edit/rename' (i.e., F2 shortcut) on a cell, - should call the edit() callback for the corresponding row. - -ida_kernwin.Choose.CH_RESTORE (variable) - restore floating position if present (equivalent of WOPN_RESTORE) (GUI version only) - -ida_kernwin.Choose.Close (method) - Closes the chooser - -ida_kernwin.Choose.EMPTY_CHOOSER (variable) - the chooser is initialized - -ida_kernwin.Choose.Embedded (method) - Creates an embedded chooser (as opposed to Show()) - @return: Returns 0 on success or NO_ATTR - -ida_kernwin.Choose.GetEmbSelection (method) - Deprecated. For embedded choosers, the selection is - available through 'Form.EmbeddedChooserControl.selection' - -ida_kernwin.Choose.GetWidget (method) - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - -ida_kernwin.Choose.NO_ATTR (variable) - some mandatory attribute is missing - -ida_kernwin.Choose.NO_SELECTION (variable) - there is no selected item - -ida_kernwin.Choose.OnClose (method) - The chooser window is closed. - -ida_kernwin.Choose.OnDeleteLine (method) - User deleted an element - - @param sel: the current selection - @return: a tuple (changed, selection) - -ida_kernwin.Choose.OnEditLine (method) - User asked to edit an element. - - @param sel: the current selection - @return: a tuple (changed, selection) - -ida_kernwin.Choose.OnGetDirTree (method) - Get the dirtree_t that will be used to present a tree-like - structure to the user (see CH_HAS_DIRTREE) - - @return: the dirtree_t, or None - -ida_kernwin.Choose.OnGetEA (method) - Get the address of an element - - When this function returns valid addresses: - * If any column has the `CHCOL_FNAME` flag, rows will - be colored according to the attributes of the functions - who own those addresses (extern, library function, - Lumina, ... - similar to what the "Functions" widget does) - * When a selection is present and the user presses `<Enter>` - (`<Shift+Enter>` if the chooser is modal), IDA will jump - to that address (through jumpto()) - @param n: element number (0-based) - @return: the effective address, ida_idaapi.BADADDR if the element has no address - -ida_kernwin.Choose.OnGetIcon (method) - Get an icon to associate with the first cell of an element - - @param n: index of the element - @return: an icon ID - -ida_kernwin.Choose.OnGetLine (method) - Get data for an element - - This callback is mandatory - - @param n: the index to fetch data for - @return: a list of strings - -ida_kernwin.Choose.OnGetLineAttr (method) - Get attributes for an element - - @param n: index of the element - @return: a tuple (color, flags) - -ida_kernwin.Choose.OnGetSize (method) - Get the number of elements in the chooser. - - This callback is mandatory - - @return: the number of elements - -ida_kernwin.Choose.OnIndexToDiffpos (method) - Map an element index to a diffpos_t - - This callback is mandatory if CH_HAS_DIFF is specified - - @param n: index of the element - @return: the diffpos - -ida_kernwin.Choose.OnIndexToInode (method) - Map an element index to a dirtree_t inode - - This callback is mandatory if CH_HAS_DIRTREE is specified - - @param n: index of the element - @return: the inode number - -ida_kernwin.Choose.OnInit (method) - Initialize the chooser and populate it. - - This callback is optional - -ida_kernwin.Choose.OnInsertLine (method) - User asked to insert an element - - @param sel: the current selection - @return: a tuple (changed, selection) - -ida_kernwin.Choose.OnLazyLoadDir (method) - Callback for lazy-loaded, dirtree-based choosers; - the function will be called when a folder is expanded and it has - not been loaded before. The implementation should use the - given dirtree's link() or mkdir() methods to add the folder contents. - - @param path: an absolute dirtree path to the directory that is being expanded - @return: success - -ida_kernwin.Choose.OnPopup (method) - -ida_kernwin.Choose.OnRefresh (method) - The chooser needs to be refreshed. - It returns the new positions of the selected items. - - @param sel: the current selection - @return: a tuple (changed, selection) - -ida_kernwin.Choose.OnSelectLine (method) - User pressed the enter key, or double-clicked a selection - - @param sel: the current selection - @return: a tuple (changed, selection) - -ida_kernwin.Choose.OnSelectionChange (method) - Selection changed - - @param sel: the new selection - -ida_kernwin.Choose.Refresh (method) - Causes the refresh callback to trigger - -ida_kernwin.Choose.Show (method) - 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 (class) - -ida_kernwin.Choose.UI_Hooks_Trampoline.__init__ (method) - -ida_kernwin.Choose.UI_Hooks_Trampoline.populating_widget_popup (method) - -ida_kernwin.Choose.__init__ (method) - 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 flags2: One of CH2_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 - -ida_kernwin.Choose.__init__._qccb (function) - -ida_kernwin.Choose.adjust_last_item (method) - 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 (class) - -ida_kernwin.CustomIDAMemo.CreateGroups (method) - 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" : [<int>, <int>, <int>, ...] # The list of nodes to group - "text" : <string> # The synthetic text for that group - } - - @param groups_infos: A list of objects that describe those groups. - @return: A [<int>, <int>, ...] list of group nodes, or None (failure). - -ida_kernwin.CustomIDAMemo.DelNodesInfos (method) - Delete the properties for the given node(s). - - @param nodes: A list of node IDs - -ida_kernwin.CustomIDAMemo.DeleteGroups (method) - 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.GetCurrentRendererType (method) - -ida_kernwin.CustomIDAMemo.GetNodeInfo (method) - Get the properties for the given node. - - @param ni: A node_info_t instance - @param node: The index of the node. - @return: success - -ida_kernwin.CustomIDAMemo.GetWidget (method) - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - -ida_kernwin.CustomIDAMemo.GetWidgetAsGraphViewer (method) - Return the graph_viewer_t underlying this view. - - @return: The graph_viewer_t underlying this view, or None. - -ida_kernwin.CustomIDAMemo.Refresh (method) - Refreshes the view. This causes the OnRefresh() to be called - -ida_kernwin.CustomIDAMemo.SetCurrentRendererType (method) - Set the current view's renderer. - - @param rtype: The renderer type. Should be one of the idaapi.TCCRT_* values. - -ida_kernwin.CustomIDAMemo.SetGroupsVisibility (method) - 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 (method) - 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 (method) - 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._OnBind (method) - -ida_kernwin.CustomIDAMemo.__init__ (method) - -ida_kernwin.CustomIDAMemo._dummy_cb (method) - -ida_kernwin.CustomIDAMemo._get_cb (method) - -ida_kernwin.CustomIDAMemo._get_cb_arity (method) - -ida_kernwin.CustomIDAMemo._graph_item_tuple (method) - -ida_kernwin.CustomIDAMemo.view_activated (method) - -ida_kernwin.CustomIDAMemo.view_click (method) - -ida_kernwin.CustomIDAMemo.view_close (method) - -ida_kernwin.CustomIDAMemo.view_curpos (method) - -ida_kernwin.CustomIDAMemo.view_dblclick (method) - -ida_kernwin.CustomIDAMemo.view_deactivated (method) - -ida_kernwin.CustomIDAMemo.view_keydown (method) - -ida_kernwin.CustomIDAMemo.view_loc_changed (method) - -ida_kernwin.CustomIDAMemo.view_mouse_moved (method) - -ida_kernwin.CustomIDAMemo.view_mouse_over (method) - -ida_kernwin.CustomIDAMemo.view_switched (method) - -ida_kernwin.DP_BEFORE (variable) - Place src_form before dst_form in the tab bar instead of after; used with - DP_INSIDE or DP_TAB. - -ida_kernwin.DP_BOTTOM (variable) - Dock src_form below dest_form. - -ida_kernwin.DP_FLOATING (variable) - Make src_form floating. - -ida_kernwin.DP_INSIDE (variable) - Create a new tab bar with both src_form and dest_form. - -ida_kernwin.DP_LEFT (variable) - Dock src_form to the left of dest_form. - -ida_kernwin.DP_RIGHT (variable) - Dock src_form to the right of dest_form. - -ida_kernwin.DP_SZHINT (variable) - When floating or in a splitter (i.e., not tabbed), use the widget's size hint to - determine the best geometry (Qt only) - -ida_kernwin.DP_TAB (variable) - 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 (variable) - Dock src_form above dest_form. - -ida_kernwin.Form (class) - -ida_kernwin.Form.Add (method) - 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 (method) - 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 - -ida_kernwin.Form.ButtonInput (class) - 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.__init__ (method) - @param handler: Button handler. A callback taking one argument which is the code. - @param code: A code associated with the button and that is later passed to the handler. - -ida_kernwin.Form.ButtonInput.helper_cb (method) - -ida_kernwin.Form.ButtonInput.is_input_field (method) - -ida_kernwin.Form.ChkGroupControl (class) - Checkbox group control class. - It holds a set of checkbox controls - -ida_kernwin.Form.ChkGroupControl.ItemClass (variable) - Group control item factory class instance - We need this because later we won't be treating ChkGroupControl or RadGroupControl - individually, instead we will be working with GroupControl in general. - -ida_kernwin.Form.ChkGroupControl.__init__ (method) - -ida_kernwin.Form.ChkGroupItemControl (class) - Checkbox group item control - -ida_kernwin.Form.ChkGroupItemControl.__get_value (method) - -ida_kernwin.Form.ChkGroupItemControl.__init__ (method) - -ida_kernwin.Form.ChkGroupItemControl.__set_value (method) - -ida_kernwin.Form.ChkGroupItemControl.checked (variable) - Get/Sets checkbox item check status - -ida_kernwin.Form.Close (method) - 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 - -ida_kernwin.Form.ColorInput (class) - Color button input control - -ida_kernwin.Form.ColorInput.__init__ (method) - @param value: Initial color value in RGB - -ida_kernwin.Form.Compile (method) - 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 (method) - 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.CompileEx.next_control (function) - -ida_kernwin.Form.Compiled (method) - Checks if the form has already been compiled - - @return: Boolean - -ida_kernwin.Form.Control (class) - -ida_kernwin.Form.Control.__init__ (method) - Reference to the parent form. It is filled by Form.Add() - -ida_kernwin.Form.Control.free (method) - Free the control - -ida_kernwin.Form.Control.get_arg (method) - Control returns the parameter to be pushed on the stack - (Of ask_form()) - -ida_kernwin.Form.Control.get_tag (method) - 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 (method) - Return True if this field acts as an input - -ida_kernwin.Form.ControlToFieldTypeIdAndSize (method) - Converts a control object to a tuple containing the field id - and the associated buffer size - -ida_kernwin.Form.DirInput (class) - Directory browsing control - -ida_kernwin.Form.DirInput.__init__ (method) - -ida_kernwin.Form.DropdownListControl (class) - Dropdown control - This control allows manipulating a dropdown control - -ida_kernwin.Form.DropdownListControl.__get_selval (method) - -ida_kernwin.Form.DropdownListControl.__init__ (method) - @param items: A string list of items used to prepopulate the control - @param readonly: Specifies whether the dropdown list is editable or not - @param selval: The preselected item index (when readonly) or text value (when editable) - @param width: the control width (n/a if the dropdown list is readonly) - @param swidth: string width - -ida_kernwin.Form.DropdownListControl.__set_selval (method) - -ida_kernwin.Form.DropdownListControl.free (method) - -ida_kernwin.Form.DropdownListControl.selval (variable) - Read/write the selection value. - The value is used as an item index in readonly mode or text value in editable mode - This value can be used only after the form has been closed. - -ida_kernwin.Form.DropdownListControl.set_items (method) - Sets the dropdown list items - -ida_kernwin.Form.EmbeddedChooserControl (class) - Embedded chooser control. - This control links to a Chooser2 control created with the 'embedded=True' - -ida_kernwin.Form.EmbeddedChooserControl.__get_selection__ (method) - -ida_kernwin.Form.EmbeddedChooserControl.__init__ (method) - Embedded chooser control - - @param chooser: A chooser2 instance (must be constructed with 'embedded=True') - -ida_kernwin.Form.EmbeddedChooserControl.free (method) - Frees the embedded chooser data - -ida_kernwin.Form.EmbeddedChooserControl.selection (variable) - Returns the selection - -ida_kernwin.Form.EmbeddedChooserControl.value (variable) - Returns the embedded chooser instance - -ida_kernwin.Form.EnableField (method) - Enable or disable an input field - @return: False - no such control - -ida_kernwin.Form.Execute (method) - Displays a modal dialog containing the compiled form. - @return: 1 - ok ; 0 - cancel - -ida_kernwin.Form.FT_ADDR (variable) - Address - ea_t * - -ida_kernwin.Form.FT_ASCII (variable) - Ascii string - char * - -ida_kernwin.Form.FT_BIN (variable) - Binary number, 0b prefix - sval_t * - -ida_kernwin.Form.FT_BUTTON (variable) - Button - def handler(code) - -ida_kernwin.Form.FT_CHAR (variable) - Char value -- sval_t * - -ida_kernwin.Form.FT_COLOR (variable) - Color button - bgcolor_t * - -ida_kernwin.Form.FT_DEC (variable) - Decimal number - sval_t * - -ida_kernwin.Form.FT_DIR (variable) - Path to directory - char * at least QMAXPATH - -ida_kernwin.Form.FT_DROPDOWN_LIST (variable) - Dropdown list control - Form.DropdownControl - -ida_kernwin.Form.FT_ECHOOSER (variable) - Embedded chooser - idaapi.Choose - -ida_kernwin.Form.FT_FILE (variable) - File browse - char * at least QMAXPATH - -ida_kernwin.Form.FT_FORMCHG (variable) - Form change callback - formchgcb_t - -ida_kernwin.Form.FT_HEX (variable) - Hex number - uval_t * - -ida_kernwin.Form.FT_HTML_LABEL (variable) - HTML label to display (only for GUI version, and for dynamic labels; no input) - -ida_kernwin.Form.FT_IDENT (variable) - Identifier - char * at least MAXNAMELEN - -ida_kernwin.Form.FT_INT64 (variable) - default base int64 - int64 - -ida_kernwin.Form.FT_MULTI_LINE_TEXT (variable) - Multi text control - textctrl_info_t - -ida_kernwin.Form.FT_OCT (variable) - Octal number, C notation - sval_t * - -ida_kernwin.Form.FT_RAWHEX (variable) - Hex number, no 0x prefix - uval_t * - -ida_kernwin.Form.FT_SEG (variable) - Segment - sel_t * - -ida_kernwin.Form.FT_SHEX (variable) - Signed hex number - sval_t * - -ida_kernwin.Form.FT_TYPE (variable) - Type declaration - char * at least MAXSTR - -ida_kernwin.Form.FT_UINT64 (variable) - default base uint64 - uint64 - -ida_kernwin.Form.FileInput (class) - File Open/Save input control - -ida_kernwin.Form.FileInput.__init__ (method) - -ida_kernwin.Form.FindControlById (method) - Finds a control instance given its id - -ida_kernwin.Form.FormChangeCb (class) - 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.__init__ (method) - Constructs the handler. - @param handler: The handler (preferrably a member function of a class derived from the Form class). - -ida_kernwin.Form.FormChangeCb.free (method) - -ida_kernwin.Form.FormChangeCb.get_tag (method) - -ida_kernwin.Form.FormChangeCb.helper_cb (method) - -ida_kernwin.Form.Free (method) - Frees all resources associated with a compiled form. - Make sure you call this function when you finish using the form. - -ida_kernwin.Form.GetControlValue (method) - 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 (method) - Get currently focused input field. - @return: None if no field is selected otherwise the control ID - -ida_kernwin.Form.GroupControl (class) - Base class for group controls - -ida_kernwin.Form.GroupControl.__init__ (method) - -ida_kernwin.Form.GroupControl._reset (method) - -ida_kernwin.Form.GroupControl.get_tag (method) - -ida_kernwin.Form.GroupControl.next_child_pos (method) - -ida_kernwin.Form.GroupItemControl (class) - Base class for group control items - -ida_kernwin.Form.GroupItemControl.__init__ (method) - -ida_kernwin.Form.GroupItemControl.assign_pos (method) - -ida_kernwin.Form.GroupItemControl.get_tag (method) - -ida_kernwin.Form.GroupItemControl.is_input_field (method) - -ida_kernwin.Form.InputControl (class) - Generic form input control. - It could be numeric control, string control, directory/file browsing, etc... - -ida_kernwin.Form.InputControl.__init__ (method) - @param width: The maximum possible number of characters that - can be entered into the input field - @param swidth: The width of visible part of the input field - -ida_kernwin.Form.InputControl.get_tag (method) - -ida_kernwin.Form.InputControl.is_input_field (method) - -ida_kernwin.Form.LabelControl (class) - Base class for static label control - -ida_kernwin.Form.LabelControl.__init__ (method) - -ida_kernwin.Form.LabelControl.get_tag (method) - -ida_kernwin.Form.MoveField (method) - Move/resize an input field - - @return: False - no such fiel - -ida_kernwin.Form.MultiLineTextControl (class) - 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.__init__ (method) - @param text: Initial text value - @param flags: One of textctrl_info_t.TXTF_.... values - @param tabsize: Tab size - @param width: Display width - @param swidth: String width - -ida_kernwin.Form.MultiLineTextControl.free (method) - -ida_kernwin.Form.NumericArgument (class) - Argument representing various integer arguments (ushort, uint32, uint64, etc...) - @param tp: One of Form.FT_XXX - -ida_kernwin.Form.NumericArgument.__init__ (method) - -ida_kernwin.Form.NumericArgument.__set_value (method) - -ida_kernwin.Form.NumericInput (class) - A composite class serving as a base numeric input control class - -ida_kernwin.Form.NumericInput.__init__ (method) - -ida_kernwin.Form.NumericLabel (class) - Numeric label control - -ida_kernwin.Form.NumericLabel.__init__ (method) - -ida_kernwin.Form.Open (method) - Opens a widget containing the compiled form. - -ida_kernwin.Form.RadGroupControl (class) - Radiobox group control class. - It holds a set of radiobox controls - -ida_kernwin.Form.RadGroupControl.__init__ (method) - Creates a radiogroup control. - @param children_names: A tuple containing group item names - @param value: Initial selected radio item - @param secondory: Allows rendering one the same line as the previous group control. - Use this if you have another group control on the same line. - -ida_kernwin.Form.RadGroupItemControl (class) - Radiobox group item control - -ida_kernwin.Form.RadGroupItemControl.__get_value (method) - -ida_kernwin.Form.RadGroupItemControl.__init__ (method) - -ida_kernwin.Form.RadGroupItemControl.__set_value (method) - -ida_kernwin.Form.RadGroupItemControl.selected (variable) - Get/Sets radiobox item selection status - -ida_kernwin.Form.RefreshField (method) - Refresh a field - @return: False - no such control - -ida_kernwin.Form.SetControlValue (method) - 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 (method) - Set currently focused input field - @return: False - no such control - -ida_kernwin.Form.ShowField (method) - Show or hide an input field - @return: False - no such control - -ida_kernwin.Form.StringArgument (class) - Argument representing a character buffer - -ida_kernwin.Form.StringArgument.__get_value (method) - -ida_kernwin.Form.StringArgument.__init__ (method) - -ida_kernwin.Form.StringArgument.__set_value (method) - -ida_kernwin.Form.StringInput (class) - Base string input control class. - This class also constructs a StringArgument - -ida_kernwin.Form.StringInput.__init__ (method) - @param width: String size. But in some cases it has special meaning. For example in FileInput control. - If you want to define the string buffer size then pass the 'size' argument - @param swidth: Control width - @param value: Initial value - @param size: String size - -ida_kernwin.Form.StringLabel (class) - String label control - -ida_kernwin.Form.StringLabel.__init__ (method) - Type field can be one of: - A - ascii string - T - type declaration - I - ident - F - folder - f - file - X - command - -ida_kernwin.Form._AddGroup (method) - 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) - -ida_kernwin.Form._ChkCompiled (method) - -ida_kernwin.Form._FT_USHORT (variable) - Unsigned short - -ida_kernwin.Form._ParseFormTitle (method) - Parses the form's title from the form text - -ida_kernwin.Form.__getitem__ (method) - Returns a control object by name - -ida_kernwin.Form.__init__ (method) - If non-modal, these flags will be passed to open_form. - This is an OR'ed combination of the PluginForm.FORM_* values. - -ida_kernwin.Form._reset (method) - Resets the Form class state variables - -ida_kernwin.Form.create_string_buffer (method) - -ida_kernwin.Form.fieldtype_to_ctype (method) - Factory method returning a ctype class corresponding to the field type string - -ida_kernwin.GCRF_ALL (variable) - Return all rows. - -ida_kernwin.GCRF_CURRENT (variable) - Return the current row. - -ida_kernwin.GCRF_HEADER (variable) - Return header texts. - -ida_kernwin.GCRF_SELECTION (variable) - Return selected rows. - -ida_kernwin.HIF_IDENTIFIER (variable) - text is an identifier (i.e., when searching for the current highlight, - SEARCH_IDENT will be used) - -ida_kernwin.HIF_LOCKED (variable) - locked; clicking/moving the cursor around doesn't change the highlight - -ida_kernwin.HIF_NOCASE (variable) - case insensitive - -ida_kernwin.HIF_REGISTER (variable) - text represents a register (aliases/subregisters will be highlit as well) - -ida_kernwin.HIF_SLOT_0 (variable) - operate on slot 0 - -ida_kernwin.HIF_SLOT_1 (variable) - operate on slot 1 - -ida_kernwin.HIF_SLOT_2 (variable) - operate on slot 2 - -ida_kernwin.HIF_SLOT_3 (variable) - operate on slot 3 - -ida_kernwin.HIF_SLOT_4 (variable) - operate on slot 4 - -ida_kernwin.HIF_SLOT_5 (variable) - operate on slot 5 - -ida_kernwin.HIF_SLOT_6 (variable) - operate on slot 6 - -ida_kernwin.HIF_SLOT_7 (variable) - operate on slot 7 - -ida_kernwin.HIF_SLOT_SHIFT (variable) - position of the 3 top bits specifying which highlight to use - -ida_kernwin.HIF_USE_SLOT (variable) - use the given number, or just use the "floating" highlight - -ida_kernwin.HIST_CMD (variable) - commands - -ida_kernwin.HIST_CMT (variable) - comments - -ida_kernwin.HIST_DIR (variable) - directory names (text version only) - -ida_kernwin.HIST_FILE (variable) - file names - -ida_kernwin.HIST_IDENT (variable) - identifiers. usually CPU register names are forbidden - -ida_kernwin.HIST_IDENT2 (variable) - identifiers, including CPU register names - -ida_kernwin.HIST_SEG (variable) - segment names - -ida_kernwin.HIST_SRCH (variable) - search substrings - -ida_kernwin.HIST_TYPE (variable) - type declarations - -ida_kernwin.IDAViewWrapper (class) - 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.Bind (method) - -ida_kernwin.IDAViewWrapper.Unbind (method) - -ida_kernwin.IDAViewWrapper.__init__ (method) - -ida_kernwin.IDA_DEBUG_ACCESSIBILITY (variable) - accessibility - -ida_kernwin.IDA_DEBUG_ALREADY (variable) - already data or code - -ida_kernwin.IDA_DEBUG_ALWAYS (variable) - everything - -ida_kernwin.IDA_DEBUG_APPCALL (variable) - appcall - -ida_kernwin.IDA_DEBUG_CHECKMEM (variable) - check heap consistency - -ida_kernwin.IDA_DEBUG_CONFIG (variable) - config file - -ida_kernwin.IDA_DEBUG_DBGINFO (variable) - handling of debug info (e.g. pdb, dwarf) - -ida_kernwin.IDA_DEBUG_DEBUGGER (variable) - debugger - -ida_kernwin.IDA_DEBUG_DEMANGLE (variable) - demangler - -ida_kernwin.IDA_DEBUG_DREFS (variable) - drefs - -ida_kernwin.IDA_DEBUG_FLIRT (variable) - flirt - -ida_kernwin.IDA_DEBUG_IDP (variable) - idp module - -ida_kernwin.IDA_DEBUG_IDS (variable) - ids files - -ida_kernwin.IDA_DEBUG_INTERNET (variable) - internet connection (for API backward compatibility) - -ida_kernwin.IDA_DEBUG_LDR (variable) - ldr module - -ida_kernwin.IDA_DEBUG_LICENSE (variable) - licensing - -ida_kernwin.IDA_DEBUG_LUMINA (variable) - lumina related - -ida_kernwin.IDA_DEBUG_NETWORK (variable) - network - -ida_kernwin.IDA_DEBUG_NOTIFY (variable) - show all notifications - -ida_kernwin.IDA_DEBUG_OFFSET (variable) - offsets - -ida_kernwin.IDA_DEBUG_PLUGIN (variable) - plugin module - -ida_kernwin.IDA_DEBUG_QUEUE (variable) - queue - -ida_kernwin.IDA_DEBUG_REGEX (variable) - regular expression - -ida_kernwin.IDA_DEBUG_ROLLBACK (variable) - rollback - -ida_kernwin.IDA_DEBUG_SIMPLEX (variable) - full stack analysis - -ida_kernwin.IDA_DEBUG_SRCDBG (variable) - source debugging - -ida_kernwin.IDA_DEBUG_SUBPROC (variable) - sub process - -ida_kernwin.IDA_DEBUG_THEMES (variable) - themes - -ida_kernwin.IDA_DEBUG_TIL (variable) - type system - -ida_kernwin.IDCHK_ARG (variable) - bad argument(s) - -ida_kernwin.IDCHK_KEY (variable) - bad hotkey name - -ida_kernwin.IDCHK_MAX (variable) - too many IDC hotkeys - -ida_kernwin.IDCHK_OK (variable) - ok - -ida_kernwin.IWID_ADDRWATCH (variable) - address watches (47) - -ida_kernwin.IWID_ALL (variable) - mask - -ida_kernwin.IWID_BOOKMARKS (variable) - bookmarks list (59) - -ida_kernwin.IWID_BPTS (variable) - breakpoints (13) - -ida_kernwin.IWID_CALLS (variable) - function calls (11) - -ida_kernwin.IWID_CALLS_CALLEES (variable) - funcalls, callees (50) - -ida_kernwin.IWID_CALLS_CALLERS (variable) - funcalls, callers (49) - -ida_kernwin.IWID_CALL_STACK (variable) - call stack (17) - -ida_kernwin.IWID_CHOOSER (variable) - chooser (37) - -ida_kernwin.IWID_CLI (variable) - input line (33) - -ida_kernwin.IWID_CMDPALCSR (variable) - command palette (43) - -ida_kernwin.IWID_CMDPALWIN (variable) - command palette (44) - -ida_kernwin.IWID_CPUREGS (variable) - registers (40) - -ida_kernwin.IWID_CUSTVIEW (variable) - custom viewers (46) - -ida_kernwin.IWID_CV_LINE_INFOS (variable) - lineinfo widget (53) - -ida_kernwin.IWID_DISASM (variable) - disassembly views (29) - -ida_kernwin.IWID_DISASM_ARROWS (variable) - arrows widget (52) - -ida_kernwin.IWID_DUMP (variable) - hex dumps (30) - -ida_kernwin.IWID_ENUMS (variable) - enumerations (27) - -ida_kernwin.IWID_EXPORTS (variable) - exports (0) - -ida_kernwin.IWID_FRAME (variable) - function frame (25) - -ida_kernwin.IWID_FUNCS (variable) - functions (3) - -ida_kernwin.IWID_IMPORTS (variable) - imports (1) - -ida_kernwin.IWID_LOCALS (variable) - locals (35) - -ida_kernwin.IWID_LOCTYPS (variable) - local types (10) - -ida_kernwin.IWID_MDVIEWCSR (variable) - lumina md view (51) - -ida_kernwin.IWID_MODULES (variable) - modules (15) - -ida_kernwin.IWID_NAMES (variable) - names (2) - -ida_kernwin.IWID_NAVBAND (variable) - navigation band (26) - -ida_kernwin.IWID_NOTEPAD (variable) - notepad (31) - -ida_kernwin.IWID_OUTPUT (variable) - output (32) - -ida_kernwin.IWID_PROBS (variable) - problems (12) - -ida_kernwin.IWID_PSEUDOCODE (variable) - decompiler (48) - -ida_kernwin.IWID_SCRIPTS_CSR (variable) - recent scripts (58) - -ida_kernwin.IWID_SEARCH (variable) - search results (19) - -ida_kernwin.IWID_SEGREGS (variable) - segment registers (6) - -ida_kernwin.IWID_SEGS (variable) - segments (5) - -ida_kernwin.IWID_SELS (variable) - selectors (7) - -ida_kernwin.IWID_SHORTCUTCSR (variable) - shortcuts chooser (38) - -ida_kernwin.IWID_SHORTCUTWIN (variable) - shortcuts window (39) - -ida_kernwin.IWID_SIGNS (variable) - signatures (8) - -ida_kernwin.IWID_SNIPPETS (variable) - snippets (45) - -ida_kernwin.IWID_SNIPPETS_CSR (variable) - snippets chooser (57) - -ida_kernwin.IWID_SO_OFFSETS (variable) - stroff (42) - -ida_kernwin.IWID_SO_STRUCTS (variable) - stroff (41) - -ida_kernwin.IWID_SRCPTHMAP_CSR (variable) - mappings chooser (54) - -ida_kernwin.IWID_SRCPTHUND_CSR (variable) - undesired chooser (55) - -ida_kernwin.IWID_STACK (variable) - Alias. Some IWID_* were confusing, and thus have been renamed. This is to ensure - bw-compat. - -ida_kernwin.IWID_STKVIEW (variable) - stack view (36) - -ida_kernwin.IWID_STRINGS (variable) - strings (4) - -ida_kernwin.IWID_STRUCTS (variable) - structures (28) - -ida_kernwin.IWID_THREADS (variable) - threads (14) - -ida_kernwin.IWID_TILIST (variable) - types listing (60) - -ida_kernwin.IWID_TILS (variable) - type libraries (9) - -ida_kernwin.IWID_TRACE (variable) - tracing view (16) - -ida_kernwin.IWID_UNDOHIST (variable) - Undo history (56) - -ida_kernwin.IWID_WATCH (variable) - watches (34) - -ida_kernwin.IWID_XREFS (variable) - xrefs (18) - -ida_kernwin.LROEF_CPS_RANGE (variable) - background for range of chars - -ida_kernwin.LROEF_FULL_LINE (variable) - full line background - -ida_kernwin.MFF_FAST (variable) - execute code as soon as possible - this mode is ok call ui related functions - that do not query the database. - -ida_kernwin.MFF_NOWAIT (variable) - Do not wait for the request to be executed. - he caller should ensure that the request is not - destroyed until the execution completes. - if not, the request will be ignored. - the return code of execute_sync() is meaningless - in this case. - 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 (variable) - 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 (variable) - 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.PCF_EA_CAPABLE (variable) - toea() implementation returns meaningful data - -ida_kernwin.PCF_MAKEPLACE_ALLOCATES (variable) - makeplace() returns a freshly allocated (i.e., non-static) instance. All new - code should pass that flag to register_place_class(), and the corresponding - makeplace() class implementation should return new instances. - -ida_kernwin.PluginForm (class) - PluginForm class. - - This form can be used to host additional controls. Please check the PyQt example. - -ida_kernwin.PluginForm.Close (method) - Closes the form. - - @param options: Close options (WCLS_SAVE, WCLS_NO_CONTEXT, ...) - - @return: None - -ida_kernwin.PluginForm.GetWidget (method) - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - -ida_kernwin.PluginForm.OnClose (method) - Called when the plugin form is closed - - @return: None - -ida_kernwin.PluginForm.OnCreate (method) - 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 (method) - 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 (method) - 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 (method) - 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 (method) - 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.WCLS_DELETE_LATER (variable) - This flag should be used when Close() is called from an event handler - -ida_kernwin.PluginForm.WCLS_DONT_SAVE_SIZE (variable) - Don't save size of the window - -ida_kernwin.PluginForm.WCLS_NO_CONTEXT (variable) - Don't change the current context (useful for toolbars) - -ida_kernwin.PluginForm.WCLS_SAVE (variable) - Save state in desktop config - -ida_kernwin.PluginForm.WOPN_DP_BEFORE (variable) - place widget before dst_form in the tab bar instead of after - used with #WOPN_DP_INSIDE and #WOPN_DP_TAB - -ida_kernwin.PluginForm.WOPN_DP_BOTTOM (variable) - Dock widget below dest_ctrl - -ida_kernwin.PluginForm.WOPN_DP_FLOATING (variable) - When floating or in a splitter (i.e., not tabbed), - use the widget's size hint to determine the best - geometry (Qt only) - -ida_kernwin.PluginForm.WOPN_DP_INSIDE (variable) - Create a new tab bar with both widget and dest_ctrl - -ida_kernwin.PluginForm.WOPN_DP_LEFT (variable) - Dock widget to the left of dest_ctrl - -ida_kernwin.PluginForm.WOPN_DP_RIGHT (variable) - Dock widget to the right of dest_ctrl - -ida_kernwin.PluginForm.WOPN_DP_SZHINT (variable) - Make widget floating - -ida_kernwin.PluginForm.WOPN_DP_TAB (variable) - Place widget into a tab next to dest_ctrl, - if dest_ctrl is in a tab bar - (otherwise the same as #WOPN_DP_INSIDE) - -ida_kernwin.PluginForm.WOPN_DP_TOP (variable) - Dock widget above dest_ctrl - -ida_kernwin.PluginForm.WOPN_PERSIST (variable) - form will persist until explicitly closed with Close() - -ida_kernwin.PluginForm.WOPN_RESTORE (variable) - if the widget is the only widget in a floating area when - it is closed, remember that area's geometry. The next - time that widget is created as floating (i.e., WOPN_DP_FLOATING) - its geometry will be restored (e.g., "Execute script" - -ida_kernwin.PluginForm.__init__ (method) - -ida_kernwin.PluginForm._ensure_widget_deps (method) - -ida_kernwin.RENADDR_HR (variable) - dialog for "Pseudocode"; additional flags: - * 0x01 Library function - * 0x02 Mark as decompiled - -ida_kernwin.RENADDR_IDA (variable) - dialog for "IDA View" - -ida_kernwin.S2EAOPT_NOCALC (variable) - don't try to interpret string as IDC (or current extlang) expression - -ida_kernwin.SETMENU_APP (variable) - add menu item after the specified path - -ida_kernwin.SETMENU_ENSURE_SEP (variable) - make sure there is a separator before the action - -ida_kernwin.SETMENU_FIRST (variable) - add item to the beginning of menu - -ida_kernwin.SETMENU_INS (variable) - add menu item before the specified path (default) - -ida_kernwin.SVF_COPY_LINES (variable) - keep a local copy of '*lines' - -ida_kernwin.SVF_LINES_BYPTR (variable) - remember the 'lines' ptr. do not make a copy of '*lines' - -ida_kernwin.TCCPT_ENUMPLACE (variable) - enumplace_t - -ida_kernwin.TCCPT_IDAPLACE (variable) - idaplace_t - -ida_kernwin.TCCPT_INVALID (variable) - invalid - -ida_kernwin.TCCPT_PLACE (variable) - place_t - -ida_kernwin.TCCPT_SIMPLELINE_PLACE (variable) - simpleline_place_t - -ida_kernwin.TCCPT_STRUCTPLACE (variable) - structplace_t - -ida_kernwin.TCCPT_TIPLACE (variable) - tiplace_t - -ida_kernwin.TCCRT_FLAT (variable) - flat view - -ida_kernwin.TCCRT_GRAPH (variable) - graph view - -ida_kernwin.TCCRT_INVALID (variable) - invalid - -ida_kernwin.TCCRT_PROXIMITY (variable) - proximity view - -ida_kernwin.TWidget__from_ptrval__ (function) - TWidget__from_ptrval__(ptrval) -> TWidget * - - @param ptrval: size_t - -ida_kernwin.UIJMP_ACTIVATE (variable) - activate the new window - -ida_kernwin.UIJMP_ANYVIEW (variable) - jump in any ea_t-capable view - -ida_kernwin.UIJMP_DONTPUSH (variable) - do not remember the current address in the navigation history - -ida_kernwin.UIJMP_IDAVIEW (variable) - jump in idaview - -ida_kernwin.UIJMP_IDAVIEW_NEW (variable) - jump in new idaview - -ida_kernwin.UI_Hooks (class) - Proxy of C++ UI_Hooks class. - -ida_kernwin.UI_Hooks.__disown__ (method) - -ida_kernwin.UI_Hooks.__init__ (method) - __init__(self, _flags=0, _hkcb_flags=0x0001) -> UI_Hooks - - @param _flags: uint32 - @param _hkcb_flags: uint32 - -ida_kernwin.UI_Hooks.create_desktop_widget (method) - create_desktop_widget(self, title, cfg) -> PyObject * - create a widget, to be placed in the widget tree (at desktop-creation time.) - - @param title: (const char *) - @param cfg: (const jobj_t *) - @return: TWidget * the created widget, or null - -ida_kernwin.UI_Hooks.current_widget_changed (method) - current_widget_changed(self, widget, prev_widget) - The currently-active TWidget changed. - - @param widget: (TWidget *) - @param prev_widget: (TWidget *) - -ida_kernwin.UI_Hooks.database_closed (method) - database_closed(self) - The database has been closed. See also processor_t::closebase, it occurs - earlier. See also ui_initing_database. This is not the same as IDA exiting. If - you need to perform cleanup at the exiting time, use qatexit(). - -ida_kernwin.UI_Hooks.database_inited (method) - database_inited(self, is_new_database, idc_script) - database initialization has completed. the kernel is about to run idc - scripts - - @param is_new_database: (int) - @param idc_script: (const char *) - may be nullptr - @return: void See also ui_initing_database. This event is called for both new - and old databases. - -ida_kernwin.UI_Hooks.debugger_menu_change (method) - debugger_menu_change(self, enable) - debugger menu modification detected - - @param enable: (bool) true: debugger menu has been added, or a different - debugger has been selected false: debugger menu will be removed - (user switched to "No debugger") - -ida_kernwin.UI_Hooks.desktop_applied (method) - desktop_applied(self, name, from_idb, type) - a desktop has been applied - - @param name: (const char *) the desktop name - @param from_idb: (bool) the desktop was stored in the IDB (false if it comes - from the registry) - @param type: (int) the desktop type (1-disassembly, 2-debugger, 3-merge) - -ida_kernwin.UI_Hooks.destroying_plugmod (method) - destroying_plugmod(self, plugmod, entry) - The plugin object is about to be destroyed - - @param plugmod: (const plugmod_t *) - @param entry: (const plugin_t *) - -ida_kernwin.UI_Hooks.destroying_procmod (method) - destroying_procmod(self, procmod) - The processor module is about to be destroyed - - @param procmod: (const procmod_t *) - -ida_kernwin.UI_Hooks.finish_populating_widget_popup (method) - finish_populating_widget_popup(self, widget, popup_handle, ctx=None) - IDA is about to be done populating the context menu for a widget. This is - your chance to attach_action_to_popup(). - - @param widget: (TWidget *) - @param popup_handle: (TPopupMenu *) - @param ctx: (const action_activation_ctx_t *) - -ida_kernwin.UI_Hooks.get_chooser_item_attrs (method) - get_chooser_item_attrs(self, chooser, n, attrs) - get item-specific attributes for a chooser. This callback is generated only - after enable_chooser_attrs() - - @param chooser: (const chooser_base_t *) - @param n: (::size_t) - @param attrs: (chooser_item_attrs_t *) - -ida_kernwin.UI_Hooks.get_custom_viewer_hint (method) - get_custom_viewer_hint(self, viewer, place) -> PyObject * - ui wants to display a hint for a viewer (idaview or custom). Every - subscriber is supposed to append the hint lines to HINT and increment - IMPORTANT_LINES accordingly. Completely overwriting the existing lines in HINT - is possible but not recommended. If the REG_HINTS_MARKER sequence is found in - the returned hints string, it will be replaced with the contents of the - "regular" hints. If the SRCDBG_HINTS_MARKER sequence is found in the returned - hints string, it will be replaced with the contents of the source-level - debugger-generated hints. The following keywords might appear at the beginning - of the returned hints: HIGHLIGHT text - where text will be highlighted CAPTION caption - caption for the hint widget - - @param viewer: (TWidget*) viewer - @param place: (place_t *) current position in the viewer - @retval 0: continue collecting hints with other subscribers - @retval 1: stop collecting hints - -ida_kernwin.UI_Hooks.get_ea_hint (method) - get_ea_hint(self, ea) -> PyObject * - ui wants to display a simple hint for an address. Use this event to generate - a custom hint See also more generic ui_get_item_hint - - @param ea: (::ea_t) - @return: true if generated a hint - -ida_kernwin.UI_Hooks.get_item_hint (method) - get_item_hint(self, ea, max_lines) -> PyObject * - ui wants to display multiline hint for an item. See also more generic - ui_get_custom_viewer_hint - - @param ea: (ea_t) or item id like a structure or enum member - @param max_lines: (int) maximal number of lines - @return: true if generated a hint - -ida_kernwin.UI_Hooks.get_lines_rendering_info (method) - get_lines_rendering_info(self, out, widget, info) - get lines rendering information - - @param out: (lines_rendering_output_t *) - @param widget: (const TWidget *) - @param info: (const lines_rendering_input_t *) - -ida_kernwin.UI_Hooks.get_widget_config (method) - get_widget_config(self, widget, cfg) -> PyObject * - retrieve the widget configuration (it will be passed back at - ui_create_desktop_widget-, and ui_set_widget_config-time) - - @param widget: (const TWidget *) - @param cfg: (jobj_t *) - -ida_kernwin.UI_Hooks.hook (method) - hook(self) -> bool - -ida_kernwin.UI_Hooks.idcstart (method) - idcstart(self) - Start of IDC engine work. - -ida_kernwin.UI_Hooks.idcstop (method) - idcstop(self) - Stop of IDC engine work. - -ida_kernwin.UI_Hooks.initing_database (method) - initing_database(self) - database initialization has started. - - @return: void See also ui_database_inited. This event is called for both new and - old databases. - -ida_kernwin.UI_Hooks.plugin_loaded (method) - plugin_loaded(self, plugin_info) - The plugin was loaded in memory. - - @param plugin_info: (const plugin_info_t *) - -ida_kernwin.UI_Hooks.plugin_unloading (method) - plugin_unloading(self, plugin_info) - The plugin is about to be unloaded - - @param plugin_info: (const plugin_info_t *) - -ida_kernwin.UI_Hooks.populating_widget_popup (method) - populating_widget_popup(self, widget, popup_handle, ctx=None) - IDA is populating the context menu for a widget. This is your chance to - attach_action_to_popup(). - - Have a look at ui_finish_populating_widget_popup, if you want to augment the - context menu with your own actions after the menu has had a chance to be - properly populated by the owning component or plugin (which typically does it on - ui_populating_widget_popup.) - - @param widget: (TWidget *) - @param popup_handle: (TPopupMenu *) - @param ctx: (const action_activation_ctx_t *) - -ida_kernwin.UI_Hooks.postprocess_action (method) - postprocess_action(self) - an ida ui action has been handled - -ida_kernwin.UI_Hooks.preprocess_action (method) - preprocess_action(self, name) -> int - ida ui is about to handle a user action. - - @param name: (const char *) ui action name. these names can be looked up in - ida[tg]ui.cfg - @retval 0: ok - @retval nonzero: a plugin has handled the command - -ida_kernwin.UI_Hooks.range (method) - range(self) - The disassembly range has been changed ( idainfo::min_ea ... - idainfo::max_ea). UI should redraw the scrollbars. See also: - ui_lock_range_refresh - -ida_kernwin.UI_Hooks.ready_to_run (method) - ready_to_run(self) - all UI elements have been initialized. Automatic plugins may hook to this - event to perform their tasks. - -ida_kernwin.UI_Hooks.resume (method) - resume(self) - Resume the suspended graphical interface. Only the text version. Interface - should respond to it - -ida_kernwin.UI_Hooks.saved (method) - saved(self, path) - The kernel has saved the database. This callback just informs the interface. - Note that at the time this notification is sent, the internal paths are not - updated yet, and calling get_path(PATH_TYPE_IDB) will return the previous path. - - @param path: (const char *) the database path - -ida_kernwin.UI_Hooks.saving (method) - saving(self) - The kernel is flushing its buffers to the disk. The user interface should - save its state. Parameters: none Returns: none - -ida_kernwin.UI_Hooks.screen_ea_changed (method) - screen_ea_changed(self, ea, prev_ea) - The "current address" changed - - @param ea: (ea_t) - @param prev_ea: (ea_t) - -ida_kernwin.UI_Hooks.set_widget_config (method) - set_widget_config(self, widget, cfg) - set the widget configuration - - @param widget: (const TWidget *) - @param cfg: (const jobj_t *) - -ida_kernwin.UI_Hooks.suspend (method) - suspend(self) - Suspend graphical interface. Only the text version. Interface should respond - to it. - -ida_kernwin.UI_Hooks.unhook (method) - unhook(self) -> bool - -ida_kernwin.UI_Hooks.updated_actions (method) - updated_actions(self) - IDA is done updating actions. - -ida_kernwin.UI_Hooks.updating_actions (method) - updating_actions(self, ctx) - IDA is about to update all actions. If your plugin needs to perform - expensive operations more than once (e.g., once per action it registers), you - should do them only once, right away. - - @param ctx: (action_update_ctx_t *) - -ida_kernwin.UI_Hooks.widget_closing (method) - widget_closing(self, widget) - TWidget is about to close. This event precedes ui_widget_invisible. Use this to - perform some possible actions relevant to the lifecycle of this widget - - @param widget: (TWidget *) - -ida_kernwin.UI_Hooks.widget_invisible (method) - widget_invisible(self, widget) - TWidget is being closed. Use this event to destroy the window controls - - @param widget: (TWidget *) - -ida_kernwin.UI_Hooks.widget_visible (method) - widget_visible(self, widget) - TWidget is displayed on the screen. Use this event to populate the window with - controls - - @param widget: (TWidget *) - -ida_kernwin.VES_SHIFT (variable) - state & 1 => Shift is pressed - state & 2 => Alt is pressed - state & 4 => Ctrl is pressed - state & 8 => Mouse left button is pressed - state & 16 => Mouse right button is pressed - state & 32 => Mouse middle button is pressed - state & 128 => Meta is pressed (OSX only) - -ida_kernwin.VME_LEFT_BUTTON (variable) - left mouse button - -ida_kernwin.VME_MID_BUTTON (variable) - middle mouse button - -ida_kernwin.VME_RIGHT_BUTTON (variable) - right mouse button - -ida_kernwin.VME_UNKNOWN (variable) - unknown mouse button - -ida_kernwin.View_Hooks (class) - Proxy of C++ View_Hooks class. - -ida_kernwin.View_Hooks.__disown__ (method) - -ida_kernwin.View_Hooks.__init__ (method) - __init__(self, _flags=0, _hkcb_flags=0x0001) -> View_Hooks - - @param _flags: uint32 - @param _hkcb_flags: uint32 - -ida_kernwin.View_Hooks.hook (method) - hook(self) -> bool - -ida_kernwin.View_Hooks.unhook (method) - unhook(self) -> bool - -ida_kernwin.View_Hooks.view_activated (method) - view_activated(self, view) - A view is activated - - @param view: (TWidget *) - -ida_kernwin.View_Hooks.view_click (method) - view_click(self, view, event) - Click event - - @param view: (TWidget *) - @param event: (const view_mouse_event_t *) - -ida_kernwin.View_Hooks.view_close (method) - view_close(self, view) - View closed - - @param view: (TWidget *) - -ida_kernwin.View_Hooks.view_created (method) - view_created(self, view) - A view is being created. - - @param view: (TWidget *) - -ida_kernwin.View_Hooks.view_curpos (method) - view_curpos(self, view) - Cursor position changed - - @param view: (TWidget *) - -ida_kernwin.View_Hooks.view_dblclick (method) - view_dblclick(self, view, event) - Double click event - - @param view: (TWidget *) - @param event: (const view_mouse_event_t *) - -ida_kernwin.View_Hooks.view_deactivated (method) - view_deactivated(self, view) - A view is deactivated - - @param view: (TWidget *) - -ida_kernwin.View_Hooks.view_keydown (method) - view_keydown(self, view, key, state) - Key down event - - @param view: (TWidget *) - @param key: (int) - @param state: (::view_event_state_t) - -ida_kernwin.View_Hooks.view_loc_changed (method) - view_loc_changed(self, view, now, was) - The location for the view has changed (can be either the place_t, the - renderer_info_t, or both.) - - @param view: (TWidget *) - @param now: (const lochist_entry_t *) - @param was: (const lochist_entry_t *) - -ida_kernwin.View_Hooks.view_mouse_moved (method) - view_mouse_moved(self, view, event) - The mouse moved on the view - - @param view: (TWidget *) - @param event: (const view_mouse_event_t *) - -ida_kernwin.View_Hooks.view_mouse_over (method) - view_mouse_over(self, view, event) - The user moved the mouse over (or out of) a node or an edge. This is only - relevant in a graph view. - - @param view: (TWidget *) - @param event: (const view_mouse_event_t *) - -ida_kernwin.View_Hooks.view_switched (method) - view_switched(self, view, rt) - A view's renderer has changed. - - @param view: (TWidget *) - @param rt: (tcc_renderer_type_t) - -ida_kernwin.WCLS_DELETE_LATER (variable) - assign the deletion of the widget to the UI loop ///< - -ida_kernwin.WCLS_DONT_SAVE_SIZE (variable) - don't save size of the window - -ida_kernwin.WCLS_NO_CONTEXT (variable) - don't change the current context (useful for toolbars) - -ida_kernwin.WCLS_SAVE (variable) - save state in desktop config - -ida_kernwin.WOPN_CLOSED_BY_ESC (variable) - override idagui.cfg:CLOSED_BY_ESC: esc will close - -ida_kernwin.WOPN_DP_BEFORE (variable) - Place widget before dst_form in the tab bar instead of after; used with - WOPN_DP_INSIDE and WOPN_DP_TAB - -ida_kernwin.WOPN_DP_BOTTOM (variable) - Dock widget below dest_ctrl. - -ida_kernwin.WOPN_DP_FLOATING (variable) - Make widget floating. - -ida_kernwin.WOPN_DP_INSIDE (variable) - Create a new tab bar with both widget and dest_ctrl. - -ida_kernwin.WOPN_DP_LEFT (variable) - Dock widget to the left of dest_ctrl. - -ida_kernwin.WOPN_DP_RIGHT (variable) - Dock widget to the right of dest_ctrl. - -ida_kernwin.WOPN_DP_SZHINT (variable) - when floating or in a splitter (i.e., not tabbed), use the widget's size hint to - determine the best geometry (Qt only) - -ida_kernwin.WOPN_DP_TAB (variable) - Place widget into a tab next to dest_ctrl, if dest_ctrl is in a tab bar - (otherwise the same as WOPN_DP_INSIDE) - -ida_kernwin.WOPN_DP_TOP (variable) - Dock widget above dest_ctrl. - -ida_kernwin.WOPN_NOT_CLOSED_BY_ESC (variable) - override idagui.cfg:CLOSED_BY_ESC: esc will not close - -ida_kernwin.WOPN_PERSIST (variable) - widget will remain available when starting or stopping debugger sessions - -ida_kernwin.WOPN_RESTORE (variable) - if the widget was the only widget in a floating area the last time it was - closed, it will be restored as floating, with the same position+size as before - -ida_kernwin.__qtimer_t (class) - Proxy of C++ __qtimer_t class. - -ida_kernwin.__qtimer_t.__init__ (method) - __init__(self) -> __qtimer_t - -ida_kernwin._ask_addr (function) - _ask_addr(addr, format) -> bool - - Parameters - ---------- - addr: ea_t * - format: char const * - -ida_kernwin._ask_long (function) - _ask_long(value, format) -> bool - - Parameters - ---------- - value: sval_t * - format: char const * - -ida_kernwin._ask_seg (function) - _ask_seg(sel, format) -> bool - - Parameters - ---------- - sel: sel_t * - format: char const * - -ida_kernwin._kludge_force_declare_dirspec_t (function) - _kludge_force_declare_dirspec_t(arg1) - - Parameters - ---------- - arg1: dirspec_t const * - -ida_kernwin._kludge_force_declare_dirtree_t (function) - _kludge_force_declare_dirtree_t(arg1) - - Parameters - ---------- - arg1: dirtree_t const * - -ida_kernwin.action_ctx_base_cur_sel_t (class) - Proxy of C++ action_ctx_base_cur_sel_t class. - -ida_kernwin.action_ctx_base_cur_sel_t.__init__ (method) - __init__(self) -> action_ctx_base_cur_sel_t - -ida_kernwin.action_ctx_base_cur_sel_t.reset (method) - reset(self) - -ida_kernwin.action_ctx_base_cur_sel_t.to (variable) - end of selection - -ida_kernwin.action_ctx_base_source_t (class) - Proxy of C++ action_ctx_base_source_t class. - -ida_kernwin.action_ctx_base_source_t.__init__ (method) - __init__(self) -> action_ctx_base_source_t - -ida_kernwin.action_ctx_base_source_t.reset (method) - reset(self) - -ida_kernwin.action_ctx_base_t (class) - Proxy of C++ action_ctx_base_t class. - -ida_kernwin.action_ctx_base_t.__init__ (method) - __init__(self) -> action_ctx_base_t - -ida_kernwin.action_ctx_base_t.action (variable) - action name - -ida_kernwin.action_ctx_base_t.chooser_selection (variable) - current chooser selection (0-based) - -ida_kernwin.action_ctx_base_t.cur_ea (variable) - the current EA of the position in the view - -ida_kernwin.action_ctx_base_t.cur_enum (variable) - the current enum - -ida_kernwin.action_ctx_base_t.cur_fchunk (variable) - the current function chunk - -ida_kernwin.action_ctx_base_t.cur_flags (variable) - Current address information. see Action context property bits. - -ida_kernwin.action_ctx_base_t.cur_func (variable) - the current function - -ida_kernwin.action_ctx_base_t.cur_seg (variable) - the current segment - -ida_kernwin.action_ctx_base_t.cur_sel (variable) - the currently selected range. also see ACF_HAS_SELECTION - -ida_kernwin.action_ctx_base_t.cur_strmem (variable) - the current structure member - -ida_kernwin.action_ctx_base_t.cur_struc (variable) - the current structure - -ida_kernwin.action_ctx_base_t.cur_value (variable) - the possible address, or value the cursor is positioned on - -ida_kernwin.action_ctx_base_t.dirtree_selection (variable) - the current dirtree_t selection (if applicable) - -ida_kernwin.action_ctx_base_t.focus (variable) - The focused widget in case it is not the 'form' itself (e.g., the 'quick filter' - input in choosers.) - -ida_kernwin.action_ctx_base_t.graph_selection (variable) - the current graph selection (if in a graph view) - -ida_kernwin.action_ctx_base_t.has_flag (method) - has_flag(self, flag) -> bool - Check if the given flag is set. - - @param flag: (C++: uint32) - -ida_kernwin.action_ctx_base_t.regname (variable) - register name (if widget_type == BWN_CPUREGS and context menu opened on - register) - -ida_kernwin.action_ctx_base_t.reset (method) - reset(self) - Invalidate all context info. - -ida_kernwin.action_ctx_base_t.source (variable) - the underlying chooser_base_t (if 'widget' is a chooser widget) - -ida_kernwin.action_ctx_base_t.type_ref (variable) - a reference to the current type (if 'widget' is a types listing widget; nullptr - otherwise) - -ida_kernwin.action_ctx_base_t.widget_title (variable) - title of current widget - -ida_kernwin.action_ctx_base_t.widget_type (variable) - type of current widget - -ida_kernwin.action_desc_t (class) - Proxy of C++ action_desc_t class. - -ida_kernwin.action_desc_t.__init__ (method) - __init__(self, name, label, handler, shortcut=None, tooltip=None, icon=-1, flags=0) -> action_desc_t - - @param name: char const * - @param label: char const * - @param handler: PyObject * - @param shortcut: char const * - @param tooltip: char const * - @param icon: int - @param flags: int - -ida_kernwin.action_desc_t.cb (variable) - size of this structure - -ida_kernwin.action_desc_t.flags (variable) - See Action flags. - -ida_kernwin.action_desc_t.icon (variable) - an optional icon ID to use - -ida_kernwin.action_desc_t.label (variable) - the label of the action, possibly with an accelerator key definition (e.g., - "~J~ump to operand") - -ida_kernwin.action_desc_t.name (variable) - the internal name of the action; must be unique. a way to reduce possible - conflicts is to prefix it with some specific prefix. E.g., "myplugin:doSthg". - -ida_kernwin.action_desc_t.owner (variable) - either the plugin_t, or plugmod_t responsible for registering the action. Can be - nullptr Please see ACTION_DESC_LITERAL_PLUGMOD - -ida_kernwin.action_desc_t.shortcut (variable) - an optional shortcut definition. E.g., "Ctrl+Enter" - -ida_kernwin.action_desc_t.tooltip (variable) - an optional tooltip for the action - -ida_kernwin.action_handler_t (class) - -ida_kernwin.action_handler_t.__init__ (method) - -ida_kernwin.action_handler_t.activate (method) - Activate an action. This function implements the core behavior of an action. It - is called when the action is triggered, from a menu, from a popup menu, from the - toolbar, or programmatically. - - @return: non-zero: all IDA windows will be refreshed - -ida_kernwin.action_handler_t.update (method) - Update an action. This is called when the context of the UI changed, and we need - to let the action update some of its properties if needed (label, icon, ...) - - In addition, this lets IDA know whether the action is enabled, and when it - should be queried for availability again. - - Note: This callback is not meant to change anything in the application's state, - except by calling one (or many) of the "update_action_*()" functions on this - very action. - -ida_kernwin.activate_widget (function) - activate_widget(widget, take_focus) - Activate widget (only gui version) (ui_activate_widget). - - @param widget: (C++: TWidget *) existing widget to display - @param take_focus: (C++: bool) give focus to given widget - -ida_kernwin.add_hotkey (function) - add_hotkey(hotkey, pyfunc) -> PyCapsule - 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 (function) - add_idc_hotkey(hotkey, idcfunc) -> int - Add hotkey for IDC function (ui_add_idckey). - - @param hotkey: (C++: const char *) hotkey name - @param idcfunc: (C++: const char *) IDC function name - @return: IDC hotkey error codes - -ida_kernwin.add_spaces (function) - add_spaces(s, len) -> str - 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 str: (C++: char *) pointer to colored string to modify (may not be nullptr) - @param len: (C++: ssize_t) the desired length of the string - @return: pointer to the end of input string - -ida_kernwin.addon_count (function) - addon_count() -> int - Get number of installed addons. - -ida_kernwin.addon_info_t (class) - Proxy of C++ addon_info_t class. - -ida_kernwin.addon_info_t.__init__ (method) - __init__(self) -> addon_info_t - -ida_kernwin.analyzer_options (function) - analyzer_options() - Allow the user to set analyzer options. (show a dialog box) - (ui_analyzer_options) - -ida_kernwin.ask_addr (function) - Output a formatted string to the output window (msg) preprended with "**DATABASE - IS CORRUPTED: " Display a dialog box and wait for the user to input an address - (ui_ask_addr). - - @retval 0: the user pressed Esc. - @retval 1: ok, the user entered an address - -ida_kernwin.ask_buttons (function) - ask_buttons(Yes, No, Cancel, deflt, format) -> int - Display a dialog box and get choice from maximum three possibilities - (ui_ask_buttons). - @note: for all buttons: - * use "" or nullptr to take the default name for the button. - * prepend "HIDECANCEL\n" in 'format' to hide the Cancel button - - @param Yes: (C++: const char *) text for the first button - @param No: (C++: const char *) text for the second button - @param Cancel: (C++: const char *) text for the third button - @param deflt: (C++: int) default choice: one of Button IDs - @param format: (C++: const char *) printf-style format string for question. It may have some - prefixes, see below. - @return: one of Button IDs specifying the selected button (Esc key returns - Cancel/3rd button value) - -ida_kernwin.ask_file (function) - ask_file(for_saving, defval, format) -> char * - - @param for_saving: bool - @param defval: char const * - @param format: char const * - -ida_kernwin.ask_for_feedback (function) - ask_for_feedback(format) - Show a message box asking to send the input file to \link{mailto:support@hex- - rays.com,support@hex-rays.com}. - - @param format: (C++: const char *) the reason why the input file is bad - -ida_kernwin.ask_form (function) - Display a dialog box and wait for the user. If the form contains the "BUTTON NO - <title>" keyword, then the return values are the same as in the ask_yn() - function (Button IDs) - - @retval 0: no memory to display or form syntax error (a warning is displayed in - this case). the user pressed the 'No' button (if the form has it) or - the user cancelled the dialog otherwise. all variables retain their - original values. - @retval 1: ok, all input fields are filled and validated. - @retval -1: the form has the 'No' button and the user cancelled the dialog - -ida_kernwin.ask_ident (function) - Display a dialog box and wait for the user to input an identifier. If the user - enters a non-valid identifier, this function displays a warning and allows the - user to correct it. CPU register names are usually forbidden. - - @return: false if the user cancelled the dialog, otherwise returns true. - -ida_kernwin.ask_ident2 (function) - ask_ident2(str, format) -> bool - Display a dialog box and wait for the user to input an identifier. If the user - enters a non-valid identifier, this function displays a warning and allows the - user to correct it. CPU register names are permitted. - - @param str: (C++: qstring *) qstring to fill. Can contain the default value. Cannot be nullptr. - @param format: (C++: const char *) printf() style format string with the question - @return: false if the user cancelled the dialog, otherwise returns true. - -ida_kernwin.ask_long (function) - Display a dialog box and wait for the user to input an number (ui_ask_long). The - number is represented in C-style. This function allows to enter any IDC - expression and properly calculates it. - - @retval 0: if the user pressed Esc. - @retval 1: ok, the user entered a valid number. - -ida_kernwin.ask_seg (function) - Display a dialog box and wait for the user to input an segment name - (ui_ask_seg). This function allows to enter segment register names, segment base - paragraphs, segment names to denote a segment. - - @retval 0: if the user pressed Esc. - @retval 1: ok, the user entered an segment name - -ida_kernwin.ask_str (function) - ask_str(defval, hist, prompt) -> str or None - Asks for a long text - - @param defval: The default value - @param hist: history id - @param prompt: The prompt value - @return: None or the entered string - -ida_kernwin.ask_text (function) - ask_text(max_size, defval, prompt) -> str - 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 (function) - ask_yn(deflt, format) -> int - Display a dialog box and get choice from "Yes", "No", "Cancel". - - @param deflt: (C++: int) default choice: one of Button IDs - @param format: (C++: const char *) The question in printf() style format - @return: the selected button (one of Button IDs). Esc key returns ASKBTN_CANCEL. - -ida_kernwin.atoea (function) - atoea(str) -> bool - Convert a number in C notation to an address. decimal: 1234 - octal: 0123 - hexadecimal: 0xabcd - binary: 0b00101010 - - @param str: (C++: const char *) the string to parse - -ida_kernwin.attach_action_to_menu (function) - attach_action_to_menu(menupath, name, flags=0) -> bool - Attach a previously-registered action to the menu (ui_attach_action_to_menu). - @note: 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: (C++: const char *) 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 - @param name: (C++: const char *) the action name - @param flags: (C++: int) a combination of Set menu flags, to determine menu item position - @return: success - -ida_kernwin.attach_action_to_popup (function) - 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: (C++: TWidget *) target widget - @param popup_handle: (C++: TPopupMenu *) target popup menu - * if non-nullptr, the action is added to this popup menu invocation (i.e., - 'single-shot') - * if nullptr, the action is added to a list of actions that should always be - present in context menus for this widget (i.e., 'permanent'.) - @param name: (C++: const char *) action name - @param popuppath: (C++: const char *) can be nullptr - @param flags: (C++: int) a combination of SETMENU_ flags (see Set menu flags) - @return: success - -ida_kernwin.attach_action_to_toolbar (function) - attach_action_to_toolbar(toolbar_name, name) -> bool - Attach an action to an existing toolbar (ui_attach_action_to_toolbar). - - @param toolbar_name: (C++: const char *) the name of the toolbar - @param name: (C++: const char *) the action name - @return: success - -ida_kernwin.attach_dynamic_action_to_popup (function) - attach_dynamic_action_to_popup(unused, popup_handle, desc, popuppath=None, flags=0) -> bool - Create & insert an action into the widget's popup menu - (::ui_attach_dynamic_action_to_popup). - Note: The action description in the 'desc' parameter is modified by - this call so you should prepare a new description for each call. - For example: - desc = idaapi.action_desc_t(None, 'Dynamic popup action', Handler()) - idaapi.attach_dynamic_action_to_popup(form, popup, desc) - - @param unused: deprecated; should be None - @param popup_handle: target popup - @param desc: action description of type action_desc_t - @param popuppath: can be None - @param flags: a combination of SETMENU_ constants - @return: success - -ida_kernwin.banner (function) - banner(wait) -> bool - Show a banner dialog box (ui_banner). - - @param wait: (C++: int) time to wait before closing - @retval 1: ok - @retval 0: esc was pressed - -ida_kernwin.beep (function) - beep(beep_type=beep_default) - Issue a beeping sound (ui_beep). - - @param beep_type: (C++: beep_t) - -ida_kernwin.call_nav_colorizer (function) - 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(). - - @param dict: PyObject * - @param ea: ea_t - @param nbytes: asize_t - -ida_kernwin.cancel_exec_request (function) - cancel_exec_request(req_id) -> bool - Try to cancel an asynchronous exec request (ui_cancel_exec_request). - - @param req_id: (C++: int) request id - @retval true: successfully canceled - @retval false: request has already been processed. - -ida_kernwin.cancel_thread_exec_requests (function) - cancel_thread_exec_requests(tid) -> int - Try to cancel asynchronous exec requests created by the specified thread. - - @param tid: (C++: qthread_t) thread id - @return: number of the canceled requests. - -ida_kernwin.choose_activate (function) - choose_activate(_self) - - @param self: PyObject * - -ida_kernwin.choose_choose (function) - choose_choose(_self) -> PyObject * - - @param self: PyObject * - -ida_kernwin.choose_close (function) - choose_close(_self) - - @param self: PyObject * - -ida_kernwin.choose_create_embedded_chobj (function) - choose_create_embedded_chobj(_self) -> PyObject * - - @param self: PyObject * - -ida_kernwin.choose_entry (function) - choose_entry(title) -> ea_t - Choose an entry point (ui_choose, chtype_entry). - - @param title: (C++: const char *) chooser title - @return: ea of selected entry point, BADADDR if none selected - -ida_kernwin.choose_enum (function) - choose_enum(out, title, default_ord) -> bool - - @param out: tinfo_t * - @param title: char const * - @param default_ord: uint32 - - choose_enum(title, default_id) -> enum_t - - @param title: char const * - @param default_id: enum_t - -ida_kernwin.choose_enum_by_value (function) - choose_enum_by_value(out, title, default_ord, value, nbytes) -> bool - - @param out: tinfo_t * - @param title: char const * - @param default_ord: uint32 - @param value: uint64 - @param nbytes: int - - choose_enum_by_value(title, default_id, value, nbytes) -> enum_t - - @param title: char const * - @param default_id: enum_t - @param value: uint64 - @param nbytes: int - -ida_kernwin.choose_find (function) - choose_find(title) -> MyChoose or None - - @param title: char const * - -ida_kernwin.choose_func (function) - choose_func(title, default_ea) -> func_t * - Choose a function (ui_choose, chtype_func). - - @param title: (C++: const char *) chooser title - @param default_ea: (C++: ea_t) ea of function to select by default - @return: pointer to function that was selected, nullptr if none selected - -ida_kernwin.choose_get_widget (function) - choose_get_widget(_self) -> TWidget * - - @param self: PyObject * - -ida_kernwin.choose_idasgn (function) - choose_idasgn() -> PyObject * - Opens the signature chooser - - @return: None or the selected signature name - -ida_kernwin.choose_name (function) - choose_name(title) -> ea_t - Choose a name (ui_choose, chtype_name). - - @param title: (C++: const char *) chooser title - @return: ea of selected name, BADADDR if none selected - -ida_kernwin.choose_refresh (function) - choose_refresh(_self) - - @param self: PyObject * - -ida_kernwin.choose_segm (function) - choose_segm(title, default_ea) -> segment_t * - Choose a segment (ui_choose, chtype_segm). - - @param title: (C++: const char *) chooser title - @param default_ea: (C++: ea_t) ea of segment to select by default - @return: pointer to segment that was selected, nullptr if none selected - -ida_kernwin.choose_srcp (function) - choose_srcp(title) -> sreg_range_t * - Choose a segment register change point (ui_choose, chtype_srcp). - - @param title: (C++: const char *) chooser title - @return: pointer to segment register range of selected change point, nullptr if - none selected - -ida_kernwin.choose_stkvar_xref (function) - choose_stkvar_xref(pfn, mptr) -> ea_t - Choose an xref to a stack variable (ui_choose, chtype_name). - - @param pfn: (C++: func_t *) function - @param mptr: (C++: member_t *) variable - @return: ea of the selected xref, BADADDR if none selected - -ida_kernwin.choose_struc (function) - choose_struc(title) -> struc_t * - - @param title: char const * - -ida_kernwin.choose_struct (function) - choose_struct(out, title) -> bool - Choose a structure (ui_choose, chtype_struct). - - @param out: (C++: tinfo_t *) the selected structure type - @param title: (C++: const char *) chooser title - @retval true: the selected type is in OUT - @retval false: nothing was selected - -ida_kernwin.choose_til (function) - choose_til() -> str - Choose a type library (ui_choose, chtype_idatil). - - @retval true: 'buf' was filled with the name of the selected til - @retval false: otherwise - -ida_kernwin.choose_xref (function) - choose_xref(to) -> ea_t - Choose an xref to an address (ui_choose, chtype_xref). - - @param to: (C++: ea_t) referenced address - @return: ea of selected xref, BADADDR if none selected - -ida_kernwin.chooser_base_t (class) - Proxy of C++ chooser_base_t class. - -ida_kernwin.chooser_base_t.__init__ (method) - -ida_kernwin.chooser_base_t.ask_item_attrs (method) - ask_item_attrs(self) -> bool - should chooser generate ui_get_chooser_item_attrs events? - -ida_kernwin.chooser_base_t.can_del (method) - can_del(self) -> bool - -ida_kernwin.chooser_base_t.can_edit (method) - can_edit(self) -> bool - -ida_kernwin.chooser_base_t.can_filter (method) - can_filter(self) -> bool - -ida_kernwin.chooser_base_t.can_ins (method) - can_ins(self) -> bool - is an operation allowed? - -ida_kernwin.chooser_base_t.can_refresh (method) - can_refresh(self) -> bool - -ida_kernwin.chooser_base_t.can_sort (method) - can_sort(self) -> bool - -ida_kernwin.chooser_base_t.columns (variable) - number of columns - -ida_kernwin.chooser_base_t.deflt_col (variable) - Column that will have focus. - -ida_kernwin.chooser_base_t.get_builtin_number (method) - get_builtin_number(self) -> uint - get number of the built-in chooser - -ida_kernwin.chooser_base_t.get_count (method) - get_count(self) -> size_t - get the number of elements in the chooser - -ida_kernwin.chooser_base_t.get_ea (method) - get_ea(self, arg2) -> ea_t - get the address of an element. When this function returns valid addresses: * If - any column has the `CHCOL_FNAME` flag, rows will be colored according to the - attributes of the functions who own those addresses (extern, library function, - Lumina, ... - similar to what the "Functions" widget does) * When a selection is - present and the user presses `<Enter>` (`<Shift+Enter>` if the chooser is - modal), IDA will jump to that address (through jumpto()) - - @param arg2: size_t - @return: the effective address, BADADDR if the element has no address - -ida_kernwin.chooser_base_t.get_quick_filter_initial_mode (method) - get_quick_filter_initial_mode(self) -> int - -ida_kernwin.chooser_base_t.get_row (method) - get_row(self, n) -> ([str, ...], int, chooser_item_attrs_t) - get a description of an element. - - @param n: (C++: size_t) element number (0..get_count()-1) - -ida_kernwin.chooser_base_t.has_diff_capability (method) - has_diff_capability(self) -> bool - -ida_kernwin.chooser_base_t.has_dirtree (method) - has_dirtree(self) -> bool - -ida_kernwin.chooser_base_t.has_inode_to_index (method) - has_inode_to_index(self) -> bool - -ida_kernwin.chooser_base_t.header (variable) - header line; contains the tooltips, and column name for each of 'columns' - columns. When tooltips need to be provided, the syntax should be: - "#tooltip#column-name". (Otherwise, the syntax is simply "column-name".) - -ida_kernwin.chooser_base_t.height (variable) - (in chars) - -ida_kernwin.chooser_base_t.icon (variable) - default icon - -ida_kernwin.chooser_base_t.is_dirtree_persisted (method) - is_dirtree_persisted(self) -> bool - -ida_kernwin.chooser_base_t.is_force_default (method) - is_force_default(self) -> bool - should selection of the already opened non-modal chooser be changed? - -ida_kernwin.chooser_base_t.is_lazy_loaded (method) - is_lazy_loaded(self) -> bool - -ida_kernwin.chooser_base_t.is_modal (method) - is_modal(self) -> bool - is choose modal? - -ida_kernwin.chooser_base_t.is_multi (method) - is_multi(self) -> bool - is multi-selection allowed? - -ida_kernwin.chooser_base_t.is_quick_filter_visible_initially (method) - is_quick_filter_visible_initially(self) -> bool - -ida_kernwin.chooser_base_t.is_same (method) - is_same(self, other) -> bool - do the current and the given objects hold the same data? - - @param other: (C++: const chooser_base_t *) chooser_base_t const * - -ida_kernwin.chooser_base_t.is_status_bar_hidden (method) - is_status_bar_hidden(self) -> bool - -ida_kernwin.chooser_base_t.popup_allowed (method) - popup_allowed(self, stdact_idx) -> bool - is a standard action allowed? - - @param stdact_idx: (C++: int) - -ida_kernwin.chooser_base_t.popup_names (variable) - array of custom labels of the standard actions. Used to replace labels for these - actions. - An empty name means that the default name will be used. - @note: Availability of these actions is determined by the CH_CAN_... flags. The - label, icon and other action attributes can be overwritten in the action - description returned by get_stdact_descs() - -ida_kernwin.chooser_base_t.should_rename_trigger_edit (method) - should_rename_trigger_edit(self) -> bool - -ida_kernwin.chooser_base_t.should_restore_geometry (method) - should_restore_geometry(self) -> bool - -ida_kernwin.chooser_base_t.title (variable) - menu title (includes ptr to help). May have chooser title prefixes (see "Chooser - title" above). - -ida_kernwin.chooser_base_t.width (variable) - (in chars) - -ida_kernwin.chooser_base_t.widths (variable) - column widths - * low 16 bits of each value hold the column width - * high 16 bits are flags (see Chooser column flags) - -ida_kernwin.chooser_base_t.x0 (variable) - screen position, Functions: generic list choosers - -ida_kernwin.chooser_item_attrs_t (class) - Proxy of C++ chooser_item_attrs_t class. - -ida_kernwin.chooser_item_attrs_t.__eq__ (method) - __eq__(self, other) -> bool - - @param other: chooser_item_attrs_t const & - -ida_kernwin.chooser_item_attrs_t.__init__ (method) - __init__(self) -> chooser_item_attrs_t - -ida_kernwin.chooser_item_attrs_t.color (variable) - item color - -ida_kernwin.chooser_item_attrs_t.flags (variable) - Chooser item property bits - -ida_kernwin.chooser_item_attrs_t.reset (method) - reset(self) - -ida_kernwin.chooser_row_info_t (class) - Proxy of C++ chooser_row_info_t class. - -ida_kernwin.chooser_row_info_t.__eq__ (method) - __eq__(self, other) -> bool - - @param other: chooser_row_info_t const & - -ida_kernwin.chooser_row_info_t.__init__ (method) - __init__(self) -> chooser_row_info_t - -ida_kernwin.chooser_row_info_t.__ne__ (method) - __ne__(self, other) -> bool - - @param other: chooser_row_info_t const & - -ida_kernwin.chooser_row_info_t.attrs (variable) - styling attributes - -ida_kernwin.chooser_row_info_t.icon (variable) - icon number - -ida_kernwin.chooser_row_info_t.texts (variable) - texts, one per chooser column - -ida_kernwin.chooser_row_info_vec_t (class) - Proxy of C++ qvector< chooser_row_info_t > class. - -ida_kernwin.chooser_row_info_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< chooser_row_info_t > const & - -ida_kernwin.chooser_row_info_vec_t.__getitem__ (method) - __getitem__(self, i) -> chooser_row_info_t - - @param i: size_t - -ida_kernwin.chooser_row_info_vec_t.__init__ (method) - __init__(self) -> chooser_row_info_vec_t - __init__(self, x) -> chooser_row_info_vec_t - - @param x: qvector< chooser_row_info_t > const & - -ida_kernwin.chooser_row_info_vec_t.__len__ (method) - __len__(self) -> size_t - -ida_kernwin.chooser_row_info_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< chooser_row_info_t > const & - -ida_kernwin.chooser_row_info_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: chooser_row_info_t const & - -ida_kernwin.chooser_row_info_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: chooser_row_info_t const & - -ida_kernwin.chooser_row_info_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: chooser_row_info_t const & - -ida_kernwin.chooser_row_info_vec_t.at (method) - at(self, _idx) -> chooser_row_info_t - - @param _idx: size_t - -ida_kernwin.chooser_row_info_vec_t.begin (method) - begin(self) -> chooser_row_info_t - -ida_kernwin.chooser_row_info_vec_t.capacity (method) - capacity(self) -> size_t - -ida_kernwin.chooser_row_info_vec_t.clear (method) - clear(self) - -ida_kernwin.chooser_row_info_vec_t.empty (method) - empty(self) -> bool - -ida_kernwin.chooser_row_info_vec_t.end (method) - end(self) -> chooser_row_info_t - -ida_kernwin.chooser_row_info_vec_t.erase (method) - erase(self, it) -> chooser_row_info_t - - @param it: qvector< chooser_row_info_t >::iterator - - erase(self, first, last) -> chooser_row_info_t - - @param first: qvector< chooser_row_info_t >::iterator - @param last: qvector< chooser_row_info_t >::iterator - -ida_kernwin.chooser_row_info_vec_t.extract (method) - extract(self) -> chooser_row_info_t - -ida_kernwin.chooser_row_info_vec_t.find (method) - find(self, x) -> chooser_row_info_t - - @param x: chooser_row_info_t const & - -ida_kernwin.chooser_row_info_vec_t.grow (method) - grow(self, x=chooser_row_info_t()) - - @param x: chooser_row_info_t const & - -ida_kernwin.chooser_row_info_vec_t.has (method) - has(self, x) -> bool - - @param x: chooser_row_info_t const & - -ida_kernwin.chooser_row_info_vec_t.inject (method) - inject(self, s, len) - - @param s: chooser_row_info_t * - @param len: size_t - -ida_kernwin.chooser_row_info_vec_t.insert (method) - insert(self, it, x) -> chooser_row_info_t - - @param it: qvector< chooser_row_info_t >::iterator - @param x: chooser_row_info_t const & - -ida_kernwin.chooser_row_info_vec_t.pop_back (method) - pop_back(self) - -ida_kernwin.chooser_row_info_vec_t.push_back (method) - push_back(self, x) - - @param x: chooser_row_info_t const & - - push_back(self) -> chooser_row_info_t - -ida_kernwin.chooser_row_info_vec_t.qclear (method) - qclear(self) - -ida_kernwin.chooser_row_info_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_kernwin.chooser_row_info_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: chooser_row_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_kernwin.chooser_row_info_vec_t.size (method) - size(self) -> size_t - -ida_kernwin.chooser_row_info_vec_t.swap (method) - swap(self, r) - - @param r: qvector< chooser_row_info_t > & - -ida_kernwin.chooser_row_info_vec_t.truncate (method) - truncate(self) - -ida_kernwin.chooser_stdact_desc_t (class) - Proxy of C++ chooser_stdact_desc_t class. - -ida_kernwin.chooser_stdact_desc_t.__disown__ (method) - -ida_kernwin.chooser_stdact_desc_t.__init__ (method) - __init__(self, _label=None, _tooltip=None, _icon=-1) -> chooser_stdact_desc_t - - @param _label: char const * - @param _tooltip: char const * - @param _icon: int - -ida_kernwin.chooser_stdact_desc_t.label (variable) - see action_desc_t - -ida_kernwin.chooser_stdact_desc_t.ucb (method) - ucb(self, arg0) -> action_state_t - the update callback, see action_handler_t::update() When the update callback is - called from the chooser UI engine, it can be sure that ctx.source.chooser is a - valid pointer to chooser_base_t and that there are selected items for the Delete - and Edit actions. - - @param arg0: action_update_ctx_t * - -ida_kernwin.chooser_stdact_desc_t.version (variable) - to support the backward compatibility - -ida_kernwin.chtype_entry (variable) - see choose_entry() - -ida_kernwin.chtype_enum (variable) - see choose_enum() - -ida_kernwin.chtype_enum_by_value (variable) - Deprecated. See chtype_enum_by_value_and_size. - -ida_kernwin.chtype_enum_by_value_and_size (variable) - see choose_enum_by_value() - -ida_kernwin.chtype_func (variable) - see choose_func() - -ida_kernwin.chtype_generic (variable) - the generic choose() function - -ida_kernwin.chtype_idasgn (variable) - see choose_idasgn() - -ida_kernwin.chtype_idatil (variable) - see choose_til() - -ida_kernwin.chtype_name (variable) - see choose_name() - -ida_kernwin.chtype_obsolete_enum (variable) - see choose_enum() - -ida_kernwin.chtype_obsolete_enum_by_value_and_size (variable) - see choose_enum_by_value() - -ida_kernwin.chtype_obsolete_struc (variable) - see choose_struc() - -ida_kernwin.chtype_segm (variable) - see choose_segm() - -ida_kernwin.chtype_srcp (variable) - see choose_srcp() - -ida_kernwin.chtype_stkvar_xref (variable) - see choose_stkvar_xref() - -ida_kernwin.chtype_strpath (variable) - see choose_struc_path() - -ida_kernwin.chtype_struct (variable) - see choose_struct() - -ida_kernwin.chtype_xref (variable) - see choose_xref() - -ida_kernwin.clear_refresh_request (function) - clear_refresh_request(mask) - - @param mask: uint64 - -ida_kernwin.cli_t (class) - cli_t wrapper class. - - This class allows you to implement your own command line interface handlers. - -ida_kernwin.cli_t.OnCompleteLine (method) - The user pressed Tab. Find a completion number N for prefix PREFIX - - This callback is optional. - - @param prefix: Line prefix at prefix_start (string) - @param n: completion number (int) - @param line: the current line (string) - @param prefix_start: the index where PREFIX starts in LINE (int) - - @return: None if no completion could be generated otherwise a String with the completion suggestion - -ida_kernwin.cli_t.OnExecuteLine (method) - The user pressed Enter. The CLI is free to execute the line immediately or ask for more lines. - - This callback is mandatory. - - @param line: typed line(s) - @return: Boolean: True-executed line, False-ask for more lines - -ida_kernwin.cli_t.OnKeydown (method) - A keyboard key has been pressed - This is a generic callback and the CLI is free to do whatever it wants. - - This callback is optional. - - @param line: current input line - @param x: current x coordinate of the cursor - @param sellen: current selection length (usually 0) - @param vkey: virtual key code. if the key has been handled, it should be returned as zero - @param shift: shift state - - @return: None - Nothing was changed - tuple(line, x, sellen, vkey): if either of the input line or the x coordinate or the selection length has been modified. - It is possible to return a tuple with None elements to preserve old values. Example: tuple(new_line, None, None, None) or tuple(new_line) - -ida_kernwin.cli_t.__del__ (method) - -ida_kernwin.cli_t.__init__ (method) - -ida_kernwin.cli_t.register (method) - 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 (method) - Unregisters the CLI (if it was registered) - -ida_kernwin.close_chooser (function) - close_chooser(title) -> bool - Close a non-modal chooser (ui_close_chooser). - - @param title: (C++: const char *) window title of chooser to close - @return: success - -ida_kernwin.close_widget (function) - close_widget(widget, options) - Close widget (ui_close_widget, only gui version). - - @param widget: (C++: TWidget *) pointer to the widget to close - @param options: (C++: int) Form close flags - -ida_kernwin.clr_cancelled (function) - clr_cancelled() - Clear "Cancelled" flag (ui_clr_cancelled) - -ida_kernwin.create_code_viewer (function) - 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: (C++: TWidget *) the custom view to be added - @param flags: (C++: int) Code viewer flags - @param parent: (C++: TWidget *) widget to contain the new code viewer - -ida_kernwin.create_empty_widget (function) - create_empty_widget(title, icon=-1) -> TWidget * - Create an empty widget, serving as a container for custom user widgets - - @param title: (C++: const char *) char const * - @param icon: (C++: int) - -ida_kernwin.create_menu (function) - 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-nullptr, 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: (C++: const char *) name of menu (must be unique) - @param label: (C++: const char *) label of menu - @param menupath: (C++: const char *) where should the menu be inserted - @return: success - -ida_kernwin.create_toolbar (function) - create_toolbar(name, label, before=None, flags=0) -> bool - Create a toolbar with the given name, label and optional position - - @param name: (C++: const char *) name of toolbar (must be unique) - @param label: (C++: const char *) label of toolbar - @param before: (C++: const char *) if non-nullptr, the toolbar before which the new toolbar will be - inserted - @param flags: (C++: int) a combination of create toolbar flags, to determine toolbar - position - @return: success - -ida_kernwin.custom_viewer_jump (function) - custom_viewer_jump(v, loc, flags=0) -> bool - Append 'loc' to the viewer's history, and cause the viewer to display it. - - @param v: (C++: TWidget *) (TWidget *) - @param loc: (C++: const lochist_entry_t &) (const lochist_entry_t &) - @param flags: (C++: uint32) (uint32) or'ed combination of CVNF_* values - @return: success - -ida_kernwin.del_hotkey (function) - 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 (function) - del_idc_hotkey(hotkey) -> bool - - @param hotkey: char const * - -ida_kernwin.delete_menu (function) - delete_menu(name) -> bool - Delete an existing menu - - @param name: (C++: const char *) name of menu - @return: success - -ida_kernwin.delete_toolbar (function) - delete_toolbar(name) -> bool - Delete an existing toolbar - - @param name: (C++: const char *) name of toolbar - @return: success - -ida_kernwin.detach_action_from_menu (function) - detach_action_from_menu(menupath, name) -> bool - Detach an action from the menu (ui_detach_action_from_menu). - - @param menupath: (C++: const char *) path to the menu item - @param name: (C++: const char *) the action name - @return: success - -ida_kernwin.detach_action_from_popup (function) - 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: (C++: TWidget *) target widget - @param name: (C++: const char *) action name - -ida_kernwin.detach_action_from_toolbar (function) - detach_action_from_toolbar(toolbar_name, name) -> bool - Detach an action from the toolbar (ui_detach_action_from_toolbar). - - @param toolbar_name: (C++: const char *) the name of the toolbar - @param name: (C++: const char *) the action name - @return: success - -ida_kernwin.disabled_script_timeout_t (class) - -ida_kernwin.disabled_script_timeout_t.__enter__ (method) - -ida_kernwin.disabled_script_timeout_t.__exit__ (method) - -ida_kernwin.disasm_line_t (class) - Proxy of C++ disasm_line_t class. - -ida_kernwin.disasm_line_t.__init__ (method) - __init__(self) -> disasm_line_t - __init__(self, other) -> disasm_line_t - - @param other: disasm_line_t const & - -ida_kernwin.disasm_text_t (class) - Proxy of C++ qvector< disasm_line_t > class. - -ida_kernwin.disasm_text_t.__getitem__ (method) - __getitem__(self, i) -> disasm_line_t - - @param i: size_t - -ida_kernwin.disasm_text_t.__init__ (method) - __init__(self) -> disasm_text_t - __init__(self, x) -> disasm_text_t - - @param x: qvector< disasm_line_t > const & - -ida_kernwin.disasm_text_t.__len__ (method) - __len__(self) -> size_t - -ida_kernwin.disasm_text_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: disasm_line_t const & - -ida_kernwin.disasm_text_t.at (method) - at(self, _idx) -> disasm_line_t - - @param _idx: size_t - -ida_kernwin.disasm_text_t.begin (method) - begin(self) -> disasm_line_t - -ida_kernwin.disasm_text_t.capacity (method) - capacity(self) -> size_t - -ida_kernwin.disasm_text_t.clear (method) - clear(self) - -ida_kernwin.disasm_text_t.empty (method) - empty(self) -> bool - -ida_kernwin.disasm_text_t.end (method) - end(self) -> disasm_line_t - -ida_kernwin.disasm_text_t.erase (method) - erase(self, it) -> disasm_line_t - - @param it: qvector< disasm_line_t >::iterator - - erase(self, first, last) -> disasm_line_t - - @param first: qvector< disasm_line_t >::iterator - @param last: qvector< disasm_line_t >::iterator - -ida_kernwin.disasm_text_t.extract (method) - extract(self) -> disasm_line_t - -ida_kernwin.disasm_text_t.grow (method) - grow(self, x=disasm_line_t()) - - @param x: disasm_line_t const & - -ida_kernwin.disasm_text_t.inject (method) - inject(self, s, len) - - @param s: disasm_line_t * - @param len: size_t - -ida_kernwin.disasm_text_t.insert (method) - insert(self, it, x) -> disasm_line_t - - @param it: qvector< disasm_line_t >::iterator - @param x: disasm_line_t const & - -ida_kernwin.disasm_text_t.pop_back (method) - pop_back(self) - -ida_kernwin.disasm_text_t.push_back (method) - push_back(self, x) - - @param x: disasm_line_t const & - - push_back(self) -> disasm_line_t - -ida_kernwin.disasm_text_t.qclear (method) - qclear(self) - -ida_kernwin.disasm_text_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_kernwin.disasm_text_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: disasm_line_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_kernwin.disasm_text_t.size (method) - size(self) -> size_t - -ida_kernwin.disasm_text_t.swap (method) - swap(self, r) - - @param r: qvector< disasm_line_t > & - -ida_kernwin.disasm_text_t.truncate (method) - truncate(self) - -ida_kernwin.display_copyright_warning (function) - display_copyright_warning() -> bool - Display copyright warning (ui_copywarn). - - @return: yes/no - -ida_kernwin.display_widget (function) - display_widget(widget, options, dest_ctrl=None) - Display a widget, dock it if not done before - - @param widget: (C++: TWidget *) widget to display - @param options: (C++: uint32) Widget open flags - @param dest_ctrl: (C++: const char *) where to dock: if nullptr or invalid then use the active - docker if there is not create a new tab relative to current - active tab - -ida_kernwin.ea2str (function) - ea2str(ea) -> str - Convert linear address to UTF-8 string. - - @param ea: (C++: ea_t) - -ida_kernwin.ea_viewer_history_push_and_jump (function) - 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: (C++: TWidget *) ea viewer - @param ea: (C++: ea_t) jump destination - @param x: (C++: int) ,y: coords on screen - @param lnnum: (C++: int) desired line number of given address - @param lnnum: (C++: int) desired line number of given address - -ida_kernwin.enable_chooser_item_attrs (function) - 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_attrs - events 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 *) char const * - @param enable: (C++: bool) - @return: success - -ida_kernwin.enumplace_t (class) - Proxy of C++ enumplace_t class. - -ida_kernwin.enumplace_t.__init__ (method) - -ida_kernwin.enumplace_t.bmask (variable) - enum member bitmask - -ida_kernwin.enumplace_t.idx (variable) - enum serial number - -ida_kernwin.enumplace_t.serial (variable) - enum member serial number - -ida_kernwin.enumplace_t.value (variable) - enum member value - -ida_kernwin.error (function) - error(format) - Display a fatal message in a message box and quit IDA - - @param format: message to print - -ida_kernwin.execute_sync (function) - 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 py_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 (function) - 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 callable item - -ida_kernwin.find_widget (function) - 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: (C++: const char *) title of tab, or window title if widget is not tabbed - @return: pointer to the TWidget, nullptr if none is found - -ida_kernwin.formchgcbfa_close (function) - formchgcbfa_close(p_fa, close_normally) - - @param p_fa: size_t - @param close_normally: int - -ida_kernwin.formchgcbfa_enable_field (function) - formchgcbfa_enable_field(p_fa, fid, enable) -> bool - - @param p_fa: size_t - @param fid: int - @param enable: bool - -ida_kernwin.formchgcbfa_get_field_value (function) - formchgcbfa_get_field_value(p_fa, fid, ft, sz) -> PyObject * - - @param p_fa: size_t - @param fid: int - @param ft: int - @param sz: size_t - -ida_kernwin.formchgcbfa_get_focused_field (function) - formchgcbfa_get_focused_field(p_fa) -> int - - @param p_fa: size_t - -ida_kernwin.formchgcbfa_move_field (function) - formchgcbfa_move_field(p_fa, fid, x, y, w, h) -> bool - - @param p_fa: size_t - @param fid: int - @param x: int - @param y: int - @param w: int - @param h: int - -ida_kernwin.formchgcbfa_refresh_field (function) - formchgcbfa_refresh_field(p_fa, fid) - - @param p_fa: size_t - @param fid: int - -ida_kernwin.formchgcbfa_set_field_value (function) - formchgcbfa_set_field_value(p_fa, fid, ft, py_val) -> bool - - @param p_fa: size_t - @param fid: int - @param ft: int - @param py_val: PyObject * - -ida_kernwin.formchgcbfa_set_focused_field (function) - formchgcbfa_set_focused_field(p_fa, fid) -> bool - - @param p_fa: size_t - @param fid: int - -ida_kernwin.formchgcbfa_show_field (function) - formchgcbfa_show_field(p_fa, fid, show) -> bool - - @param p_fa: size_t - @param fid: int - @param show: bool - -ida_kernwin.free_custom_icon (function) - free_custom_icon(icon_id) - Frees an icon loaded with load_custom_icon() - - @param icon_id: int - -ida_kernwin.gen_disasm_text (function) - gen_disasm_text(text, ea1, ea2, truncate_lines) - Generate disassembly text for a range. - - @param text: (C++: text_t &) result - @param ea1: (C++: ea_t) start address - @param ea2: (C++: ea_t) end address - @param truncate_lines: (C++: bool) (on idainfo::margin) - -ida_kernwin.get_action_checkable (function) - get_action_checkable(name) -> bool - Get an action's checkability (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success - -ida_kernwin.get_action_checked (function) - get_action_checked(name) -> bool - Get an action's checked state (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success - -ida_kernwin.get_action_icon (function) - get_action_icon(name) -> bool - Get an action's icon (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success - -ida_kernwin.get_action_label (function) - get_action_label(name) -> str - Get an action's label (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success - -ida_kernwin.get_action_shortcut (function) - get_action_shortcut(name) -> str - Get an action's shortcut (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success - -ida_kernwin.get_action_state (function) - get_action_state(name) -> bool - Get an action's state (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success - -ida_kernwin.get_action_tooltip (function) - get_action_tooltip(name) -> str - Get an action's tooltip (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success - -ida_kernwin.get_action_visibility (function) - get_action_visibility(name) -> bool - Get an action's visibility (ui_get_action_attr). - - @param name: (C++: const char *) the action name - @return: success - -ida_kernwin.get_active_modal_widget (function) - 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 nullptr even if it is - currently shown. - - @return: TWidget * the active modal widget, or nullptr - -ida_kernwin.get_addon_info (function) - 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 *) char const * - @param info: (C++: addon_info_t *) - @return: false if not found - -ida_kernwin.get_addon_info_idx (function) - 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 (function) - get_chooser_data(chooser_caption, n) -> [str, ...] - Get the text corresponding to the index N in the chooser data. Use -1 to get the - header. - - See also get_chooser_rows(). - - @param chooser_caption: (C++: const char *) char const * - @param n: (C++: int) - -ida_kernwin.get_chooser_obj (function) - get_chooser_obj(chooser_caption) -> void * - Get the underlying object of the specified chooser (ui_get_chooser_obj). - - This attemps to find the choser by its title and, if found, returns the result - of calling its chooser_base_t::get_chooser_obj() method. - - @note: This is object is chooser-specific. - - @param chooser_caption: (C++: const char *) char const * - @return: the object that was used to create the chooser - -ida_kernwin.get_chooser_rows (function) - get_chooser_rows(out, chooser_caption, what) -> bool - Get the chooser contents corresponding to the rows indicated by "what". - - @param out: (C++: chooser_row_info_vec_t *) A vector of chooser_row_info_t, one entry per returned row. - @param chooser_caption: (C++: const char *) The caption that identifies the desired chooser. - @param what: (C++: size_t) Either one of the GCRF_ flags, or a row index. - @return: Success. - -ida_kernwin.get_curline (function) - 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 (function) - get_current_viewer() -> TWidget * - Get current ida viewer (idaview or custom viewer) (ui_get_current_viewer) - -ida_kernwin.get_current_widget (function) - get_current_widget() -> TWidget * - Get a pointer to the current widget (ui_get_current_widget). - -ida_kernwin.get_cursor (function) - get_cursor() -> bool - Get the cursor position on the screen (ui_get_cursor). - @note: coordinates are 0-based - - @retval true: pointers are filled - @retval false: no disassembly window open - -ida_kernwin.get_custom_viewer_curline (function) - 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 - - See also the more powerful get_custom_viewer_location() - - @param custom_viewer: (C++: TWidget *) view - @param mouse: (C++: bool) mouse position (otherwise cursor position) - @return: pointer to contents of current line - -ida_kernwin.get_custom_viewer_location (function) - get_custom_viewer_location(out, custom_viewer, mouse=False) -> bool - Get the current location in a custom viewer (ui_get_custom_viewer_location_2). - - @param out: (C++: listing_location_t *) output structure to fill - @param custom_viewer: (C++: TWidget *) the listing widget - @param flags: (C++: uint32) or'ed combination of CVLF_* values - get_custom_viewer_location(out, custom_viewer, flags=0) -> bool - - @param out: listing_location_t * - @param custom_viewer: TWidget * - @param flags: uint32 - -ida_kernwin.get_custom_viewer_place (function) - 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: (C++: TWidget *) view - @param mouse: (C++: bool) mouse position (otherwise cursor position) - -ida_kernwin.get_custom_viewer_place_xcoord (function) - get_custom_viewer_place_xcoord(custom_viewer, pline, pitem) -> int - Get the X position of the item, in the line - - @param custom_viewer: (C++: TWidget *) the widget - @param pline: (C++: const place_t *) a place corresponding to the line - @param pitem: (C++: const place_t *) a place corresponding to the item - @return: -1 if 'pitem' is not included in the line - -2 if 'pitem' points at the entire line - >= 0 for the X coordinate within the pline, where pitem points - -ida_kernwin.get_ea_viewer_history_info (function) - get_ea_viewer_history_info(nback, nfwd, v) -> bool - Get information about what's in the history (ui_ea_viewer_history_info). - - @param nback: (C++: int *) number of available back steps - @param nfwd: (C++: int *) number of available forward steps - @param v: (C++: TWidget *) ea viewer - @retval false: if the given ea viewer does not exist - @retval true: otherwise - -ida_kernwin.get_hexdump_ea (function) - get_hexdump_ea(hexdump_num) -> ea_t - Get the current address in a hex view. - - @param hexdump_num: (C++: int) number of hexview window - -ida_kernwin.get_highlight (function) - get_highlight(v, in_flags=0) -> (str, int) or None - Returns the currently highlighted identifier and flags - - @param v: The UI widget to operate on - @param flags: Optionally specify a slot (see kernwin.hpp), current otherwise - @return: a tuple (text, flags), or None if nothing - is highlighted or in case of error. - -ida_kernwin.get_icon_id_by_name (function) - get_icon_id_by_name(icon_name) -> int - Retrieve the id of the icon by name (ui_get_icon_id_by_name). - - @param icon_name: (C++: const char *) full name of the icon - @return: icon id - -ida_kernwin.get_kernel_version (function) - get_kernel_version() -> str - Get IDA kernel version (in a string like "5.1"). - -ida_kernwin.get_key_code (function) - get_key_code(keyname) -> ushort - Get keyboard key code by its name (ui_get_key_code) - - @param keyname: (C++: const char *) char const * - -ida_kernwin.get_navband_ea (function) - 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 (function) - get_navband_pixel(ea) -> int - Maps an address, onto a pixel coordinate within the navigation band - - @param ea: The address to map - @return: a list [pixel, is_vertical] - -ida_kernwin.get_opnum (function) - get_opnum() -> int - Get current operand number, -1 means no operand (ui_get_opnum) - -ida_kernwin.get_output_curline (function) - get_output_curline(mouse) -> str - Get current line of output window (ui_get_output_curline). - - @param mouse: (C++: bool) current for mouse pointer? - @return: false if output contains no text - -ida_kernwin.get_output_cursor (function) - get_output_cursor() -> bool - Get coordinates of the output window's cursor (ui_get_output_cursor). - @note: coordinates are 0-based - @note: this function will succeed even if the output window is not visible - - @retval false: the output window has been destroyed. - @retval true: pointers are filled - -ida_kernwin.get_output_selected_text (function) - get_output_selected_text() -> str - Returns selected text from output window (ui_get_output_selected_text). - - @return: true if there is a selection - -ida_kernwin.get_place_class (function) - 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: (C++: int *) output flags (can be nullptr) - @param out_sdk_version: (C++: int *) sdk version the place was created with (can be nullptr) - @param id: (C++: int) place class ID - @return: the place_t template, or nullptr if not found - -ida_kernwin.get_place_class_id (function) - get_place_class_id(name) -> int - Get the place class ID for the place that has been registered as 'name'. - - @param name: (C++: const char *) the class name - @return: the place class ID, or -1 if not found - -ida_kernwin.get_place_class_template (function) - get_place_class_template(id) -> place_t - See get_place_class() - - @param id: (C++: int) - -ida_kernwin.get_registered_actions (function) - get_registered_actions() -> [str, ...] - Get a list of all currently-registered actions - -ida_kernwin.get_screen_ea (function) - get_screen_ea() -> ea_t - Get the address at the screen cursor (ui_screenea) - -ida_kernwin.get_synced_group (function) - get_synced_group(w) -> synced_group_t - Get the group of widgets/registers this view is synchronized with - - @param w: (C++: const TWidget *) the widget - @return: the group of widgets/registers, or nullptr - -ida_kernwin.get_tab_size (function) - get_tab_size(path) -> int - Get the size of a tab in spaces (ui_get_tab_size). - - @param path: (C++: const char *) the path of the source view for which the tab size is requested. - * if nullptr, the default size is returned. - -ida_kernwin.get_user_input_event (function) - get_user_input_event(out) -> bool - Get the current user input event (mouse button press, key press, ...) It is - sometimes desirable to be able to tell when a certain situation happens (e.g., - 'view_curpos' gets triggered); this function exists to provide that context (GUI - version only) - - @param out: (C++: input_event_t *) the input event data - @return: false if we are not currently processing a user input event - -ida_kernwin.get_user_strlist_options (function) - get_user_strlist_options(out) - - @param out: strwinsetup_t * - -ida_kernwin.get_view_renderer_type (function) - 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 (function) - 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 (function) - 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 (function) - get_widget_title(widget) -> str - Get the TWidget's title (ui_get_widget_title). - - @param widget: (C++: TWidget *) - -ida_kernwin.get_widget_type (function) - 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 (function) - get_window_id(name=None) -> void * - Get the system-specific window ID (GUI version only) - - @param name: (C++: const char *) name of the window (nullptr means the main IDA window) - @return: the low-level window ID - -ida_kernwin.hide_wait_box (function) - hide_wait_box() - Hide the "Please wait dialog box". - -ida_kernwin.idaplace_t (class) - Proxy of C++ idaplace_t class. - -ida_kernwin.idaplace_t.__init__ (method) - -ida_kernwin.idaplace_t.ea (variable) - address - -ida_kernwin.info (function) - info(format) - - @param format: char const * - -ida_kernwin.input_event_keyboard_data_t (class) - Proxy of C++ input_event_t::input_event_keyboard_data_t class. - -ida_kernwin.input_event_keyboard_data_t.__init__ (method) - __init__(self) -> input_event_keyboard_data_t - -ida_kernwin.input_event_mouse_data_t (class) - Proxy of C++ input_event_t::input_event_mouse_data_t class. - -ida_kernwin.input_event_mouse_data_t.__init__ (method) - __init__(self) -> input_event_mouse_data_t - -ida_kernwin.input_event_shortcut_data_t (class) - Proxy of C++ input_event_t::input_event_shortcut_data_t class. - -ida_kernwin.input_event_shortcut_data_t.__init__ (method) - __init__(self) -> input_event_shortcut_data_t - -ida_kernwin.input_event_t (class) - Proxy of C++ input_event_t class. - -ida_kernwin.input_event_t.__init__ (method) - __init__(self) -> input_event_t - -ida_kernwin.input_event_t._source_as_size (method) - _source_as_size(self) -> size_t - -ida_kernwin.input_event_t._target_as_size (method) - _target_as_size(self) -> size_t - -ida_kernwin.input_event_t.cb (variable) - size marker - -ida_kernwin.input_event_t.get_source_QEvent (method) - -ida_kernwin.input_event_t.get_target_QWidget (method) - -ida_kernwin.input_event_t.kind (variable) - the kind of event - -ida_kernwin.input_event_t.modifiers (variable) - current keyboard (and mouse) modifiers - -ida_kernwin.input_event_t.source (variable) - the source event, should it be required for detailed inform (e.g., a QEvent in - the GUI version of IDA) - -ida_kernwin.input_event_t.target (variable) - the target widget - -ida_kernwin.install_command_interpreter (function) - install_command_interpreter(py_obj) -> int - Install command line interpreter (ui_install_cli) - - @param py_obj: PyObject * - -ida_kernwin.internal_register_place_class (function) - internal_register_place_class(tmplate, flags, owner, sdk_version) -> int - - @param tmplate: place_t const * - @param flags: int - @param owner: plugin_t const * - @param sdk_version: int - -ida_kernwin.is_action_enabled (function) - is_action_enabled(s) -> bool - Check if the given action state is one of AST_ENABLE*. - - @param s: (C++: action_state_t) enum action_state_t - -ida_kernwin.is_chooser_widget (function) - is_chooser_widget(t) -> bool - Does the given widget type specify a chooser widget? - - @param t: (C++: twidget_type_t) - -ida_kernwin.is_idaq (function) - is_idaq() -> bool - Returns True or False depending if IDAPython is hosted by IDAQ - -ida_kernwin.is_idaview (function) - is_idaview(v) -> bool - Is the given custom view an idaview? (ui_is_idaview) - - @param v: (C++: TWidget *) - -ida_kernwin.is_msg_inited (function) - is_msg_inited() -> bool - Can we use msg() functions? - -ida_kernwin.is_place_class_ea_capable (function) - is_place_class_ea_capable(id) -> bool - See get_place_class() - - @param id: (C++: int) - -ida_kernwin.is_refresh_requested (function) - is_refresh_requested(mask) -> bool - Get a refresh request state - - @param mask: (C++: uint64) Window refresh flags - @return: the state (set or cleared) - -ida_kernwin.is_tif_cursor_footer (function) - is_tif_cursor_footer(c) -> bool - - @param c: tif_cursor_t - -ida_kernwin.is_tif_cursor_header (function) - is_tif_cursor_header(c) -> bool - - @param c: tif_cursor_t - -ida_kernwin.is_tif_cursor_index (function) - is_tif_cursor_index(c) -> bool - - @param c: tif_cursor_t - -ida_kernwin.jobj_wrapper_t (class) - Proxy of C++ jobj_wrapper_t class. - -ida_kernwin.jobj_wrapper_t.__init__ (method) - -ida_kernwin.jobj_wrapper_t.get_dict (method) - get_dict(self) -> dict - -ida_kernwin.jumpto (function) - jumpto(ea, opnum=-1, uijmp_flags=0x0001) -> bool - Set cursor position in custom ida viewer. - - @param custom_viewer: (C++: TWidget *) view - @param place: (C++: place_t *) target position - @param uijmp_flags: int - - @return: success - jumpto(custom_viewer, place, x, y) -> bool - - @param custom_viewer: TWidget * - @param place: place_t * - @param x: int - -ida_kernwin.l_compare2 (function) - l_compare2(t1, t2, ud) -> int - - @param t1: place_t const * - @param t2: place_t const * - @param ud: void * - -ida_kernwin.line_rendering_output_entries_refs_t (class) - Proxy of C++ qvector< line_rendering_output_entry_t * > class. - -ida_kernwin.line_rendering_output_entries_refs_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< line_rendering_output_entry_t * > const & - -ida_kernwin.line_rendering_output_entries_refs_t.__getitem__ (method) - __getitem__(self, i) -> line_rendering_output_entry_t - - @param i: size_t - -ida_kernwin.line_rendering_output_entries_refs_t.__init__ (method) - __init__(self) -> line_rendering_output_entries_refs_t - __init__(self, x) -> line_rendering_output_entries_refs_t - - @param x: qvector< line_rendering_output_entry_t * > const & - -ida_kernwin.line_rendering_output_entries_refs_t.__len__ (method) - __len__(self) -> size_t - -ida_kernwin.line_rendering_output_entries_refs_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< line_rendering_output_entry_t * > const & - -ida_kernwin.line_rendering_output_entries_refs_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: line_rendering_output_entry_t *const & - -ida_kernwin.line_rendering_output_entries_refs_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: line_rendering_output_entry_t *const & - -ida_kernwin.line_rendering_output_entries_refs_t._internal_push_back (method) - _internal_push_back(self, e) - - Parameters - ---------- - e: line_rendering_output_entry_t * - -ida_kernwin.line_rendering_output_entries_refs_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: line_rendering_output_entry_t *const & - -ida_kernwin.line_rendering_output_entries_refs_t.at (method) - at(self, _idx) -> line_rendering_output_entry_t - - @param _idx: size_t - -ida_kernwin.line_rendering_output_entries_refs_t.begin (method) - begin(self) -> qvector< line_rendering_output_entry_t * >::iterator - begin(self) -> qvector< line_rendering_output_entry_t * >::const_iterator - -ida_kernwin.line_rendering_output_entries_refs_t.capacity (method) - capacity(self) -> size_t - -ida_kernwin.line_rendering_output_entries_refs_t.clear (method) - clear(self) - -ida_kernwin.line_rendering_output_entries_refs_t.empty (method) - empty(self) -> bool - -ida_kernwin.line_rendering_output_entries_refs_t.end (method) - end(self) -> qvector< line_rendering_output_entry_t * >::iterator - end(self) -> qvector< line_rendering_output_entry_t * >::const_iterator - -ida_kernwin.line_rendering_output_entries_refs_t.erase (method) - erase(self, it) -> qvector< line_rendering_output_entry_t * >::iterator - - @param it: qvector< line_rendering_output_entry_t * >::iterator - - erase(self, first, last) -> qvector< line_rendering_output_entry_t * >::iterator - - @param first: qvector< line_rendering_output_entry_t * >::iterator - @param last: qvector< line_rendering_output_entry_t * >::iterator - -ida_kernwin.line_rendering_output_entries_refs_t.extract (method) - extract(self) -> line_rendering_output_entry_t ** - -ida_kernwin.line_rendering_output_entries_refs_t.find (method) - find(self, x) -> qvector< line_rendering_output_entry_t * >::iterator - - @param x: line_rendering_output_entry_t *const & - - find(self, x) -> qvector< line_rendering_output_entry_t * >::const_iterator - - @param x: line_rendering_output_entry_t *const & - -ida_kernwin.line_rendering_output_entries_refs_t.has (method) - has(self, x) -> bool - - @param x: line_rendering_output_entry_t *const & - -ida_kernwin.line_rendering_output_entries_refs_t.inject (method) - inject(self, s, len) - - @param s: line_rendering_output_entry_t ** - @param len: size_t - -ida_kernwin.line_rendering_output_entries_refs_t.insert (method) - insert(self, it, x) -> qvector< line_rendering_output_entry_t * >::iterator - - @param it: qvector< line_rendering_output_entry_t * >::iterator - @param x: line_rendering_output_entry_t *const & - -ida_kernwin.line_rendering_output_entries_refs_t.pop_back (method) - pop_back(self) - -ida_kernwin.line_rendering_output_entries_refs_t.push_back (method) - push_back(self, x) - - @param x: line_rendering_output_entry_t *const & - - push_back(self) -> line_rendering_output_entry_t *& - -ida_kernwin.line_rendering_output_entries_refs_t.push_back (method) - -ida_kernwin.line_rendering_output_entries_refs_t.qclear (method) - qclear(self) - -ida_kernwin.line_rendering_output_entries_refs_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_kernwin.line_rendering_output_entries_refs_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: line_rendering_output_entry_t *const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_kernwin.line_rendering_output_entries_refs_t.size (method) - size(self) -> size_t - -ida_kernwin.line_rendering_output_entries_refs_t.swap (method) - swap(self, r) - - @param r: qvector< line_rendering_output_entry_t * > & - -ida_kernwin.line_rendering_output_entries_refs_t.truncate (method) - truncate(self) - -ida_kernwin.line_rendering_output_entry_t (class) - Proxy of C++ line_rendering_output_entry_t class. - -ida_kernwin.line_rendering_output_entry_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: line_rendering_output_entry_t const & - -ida_kernwin.line_rendering_output_entry_t.__init__ (method) - __init__(self, _line, _flags=0, _bg_color=0) -> line_rendering_output_entry_t - - @param _line: twinline_t const * - @param _flags: uint32 - @param _bg_color: bgcolor_t - - __init__(self, _line, _cpx, _nchars, _flags, _bg_color) -> line_rendering_output_entry_t - - @param _line: twinline_t const * - @param _cpx: int - @param _nchars: int - @param _flags: uint32 - @param _bg_color: bgcolor_t - -ida_kernwin.line_rendering_output_entry_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: line_rendering_output_entry_t const & - -ida_kernwin.line_rendering_output_entry_t.cpx (variable) - number of char to start from, valid if LROEF_CPS_RANGE - -ida_kernwin.line_rendering_output_entry_t.flags (variable) - line_rendering_output_entry_t flags - -ida_kernwin.line_rendering_output_entry_t.is_bg_color_direct (method) - is_bg_color_direct(self) -> bool - -ida_kernwin.line_rendering_output_entry_t.is_bg_color_empty (method) - is_bg_color_empty(self) -> bool - -ida_kernwin.line_rendering_output_entry_t.is_bg_color_key (method) - is_bg_color_key(self) -> bool - -ida_kernwin.line_rendering_output_entry_t.nchars (variable) - chars count, valid if LROEF_CPS_RANGE - -ida_kernwin.line_section_t (class) - Proxy of C++ line_section_t class. - -ida_kernwin.line_section_t.__init__ (method) - __init__(self) -> line_section_t - -ida_kernwin.line_section_t.contains (method) - contains(self, x) -> bool - - @param x: cpidx_t - -ida_kernwin.line_section_t.is_closed (method) - is_closed(self) -> bool - -ida_kernwin.line_section_t.is_open (method) - is_open(self) -> bool - -ida_kernwin.line_section_t.valid (method) - valid(self) -> bool - -ida_kernwin.linearray_t (class) - Proxy of C++ linearray_t class. - -ida_kernwin.linearray_t.__init__ (method) - __init__(self, _ud) -> linearray_t - - @param _ud: void * - -ida_kernwin.linearray_t.beginning (method) - beginning(self) -> bool - Are we at the beginning? - -ida_kernwin.linearray_t.down (method) - down(self) -> qstring const * - Get a line from down direction. place is ok BEFORE - -ida_kernwin.linearray_t.ending (method) - ending(self) -> bool - -ida_kernwin.linearray_t.get_bg_color (method) - get_bg_color(self) -> bgcolor_t - Get current background color. (the same behavior as with get_place(): good - before down() and after up()) - -ida_kernwin.linearray_t.get_dlnnum (method) - get_dlnnum(self) -> int - Get default line number. (the same behavior as with get_place(): good before - down() and after up()) - -ida_kernwin.linearray_t.get_linecnt (method) - get_linecnt(self) -> int - Get number of lines for the current place. (the same behavior as with - get_place(): good before down() and after up()) - -ida_kernwin.linearray_t.get_pfx_color (method) - get_pfx_color(self) -> bgcolor_t - Get current prefix color. (the same behavior as with get_place(): good before - down() and after up()) - -ida_kernwin.linearray_t.get_place (method) - get_place(self) -> place_t - Get the current place. If called before down(), then returns place of line which - will be returned by down(). If called after up(), then returns place if line - returned by up(). - -ida_kernwin.linearray_t.set_place (method) - set_place(self, new_at) -> int - Position the array. This function must be called before calling any other member - functions. - - linearray_t doesn't own place_t structures. The caller must take care of place_t - objects. - - @param new_at: (C++: const place_t *) new position of the array - @return: the delta of lines that the linearray_t had to adjust the place by. - For example, if the place_t has a lnnum of 5, but it turns out, upon generating - lines, - that the number of lines for that particular place is only 2, then 3 will be - returned. - -ida_kernwin.linearray_t.set_userdata (method) - set_userdata(self, userd) - Change the user data. - - @param userd: (C++: void *) - -ida_kernwin.linearray_t.up (method) - up(self) -> qstring const * - Get a line from up direction. place is ok AFTER - -ida_kernwin.linearray_t.userdata (method) - userdata(self) -> void * - Get pointer to user data. - -ida_kernwin.lines_rendering_input_t (class) - Proxy of C++ lines_rendering_input_t class. - -ida_kernwin.lines_rendering_input_t.__init__ (method) - __init__(self) -> lines_rendering_input_t - -ida_kernwin.lines_rendering_input_t.sections_lines (variable) - references to the lines that are used for rendering - -ida_kernwin.lines_rendering_input_t.sync_group (variable) - the 'synced' group 'widget' (see ui_get_lines_rendering_info) belongs to, or - nullptr - -ida_kernwin.lines_rendering_output_t (class) - Proxy of C++ lines_rendering_output_t class. - -ida_kernwin.lines_rendering_output_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: lines_rendering_output_t const & - -ida_kernwin.lines_rendering_output_t.__init__ (method) - __init__(self) -> lines_rendering_output_t - -ida_kernwin.lines_rendering_output_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: lines_rendering_output_t const & - -ida_kernwin.lines_rendering_output_t.clear (method) - clear(self) - -ida_kernwin.lines_rendering_output_t.swap (method) - swap(self, r) - - @param r: lines_rendering_output_t & - -ida_kernwin.listing_location_t (class) - Proxy of C++ listing_location_t class. - -ida_kernwin.listing_location_t.__init__ (method) - __init__(self) -> listing_location_t - -ida_kernwin.load_custom_icon (function) - 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. - - Load an icon and return its id (ui_load_custom_icon). - - @return: icon id - -ida_kernwin.load_dbg_dbginfo (function) - load_dbg_dbginfo(path, li=None, base=BADADDR, verbose=False) -> bool - Load debugging information from a file. - - @param path: (C++: const char *) path to file - @param li: (C++: linput_t *) loader input. if nullptr, check DBG_NAME_KEY - @param base: (C++: ea_t) loading address - @param verbose: (C++: bool) dump status to message window - -ida_kernwin.lookup_key_code (function) - lookup_key_code(key, shift, is_qt) -> ushort - Get shortcut code previously created by ui_get_key_code. - - @param key: (C++: int) key constant - @param shift: (C++: int) modifiers - @param is_qt: (C++: bool) are we using gui version? - -ida_kernwin.mbox_internal (variable) - internal error - -ida_kernwin.msg (function) - msg(o) -> int - 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_activated (variable) - The message window is activated. - -ida_kernwin.msg_clear (function) - msg_clear() - Clear the "Output" window. - -ida_kernwin.msg_click (variable) - Click event. - - @retval 1: handled - @retval 0: not handled (invoke default handler) - -ida_kernwin.msg_closed (variable) - View closed. - -ida_kernwin.msg_dblclick (variable) - Double click event. - - @retval 1: handled - @retval 0: not handled (invoke default handler) - -ida_kernwin.msg_deactivated (variable) - The message window is deactivated. - -ida_kernwin.msg_get_lines (function) - msg_get_lines(count=-1) -> [str, ...] - Retrieve the last 'count' lines from the output window, in reverse order (from - most recent, to least recent) - - @param count: (C++: int) The number of lines to retrieve. -1 means: all - -ida_kernwin.msg_keydown (variable) - Key down event. - - @retval 1: handled - @retval 0: not handled (invoke default handler) - -ida_kernwin.msg_save (function) - msg_save(path) -> bool - Save the "Output" window contents into a file - - @param path: (C++: qstring &) 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. - @return: success - -ida_kernwin.nomem (function) - nomem(format) - - @param format: char const * - -ida_kernwin.open_bookmarks_window (function) - open_bookmarks_window(w) -> TWidget * - Open the bookmarks window (ui_open_builtin). - - @param w: (C++: TWidget *) The widget for which the bookmarks will open. For example, this can be - an IDAView, or Enums view, etc. - @return: pointer to resulting window - -ida_kernwin.open_bpts_window (function) - open_bpts_window(ea) -> TWidget * - Open the breakpoints window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window - -ida_kernwin.open_calls_window (function) - 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 (function) - open_disasm_window(window_title, ranges=None) -> TWidget * - Open a disassembly view (ui_open_builtin). - - @param window_title: (C++: const char *) title of view to open - @param ranges: (C++: const rangevec_t *) if != nullptr, then display a flow chart with the specified - ranges - @return: pointer to resulting window - -ida_kernwin.open_enums_window (function) - open_enums_window(const_id=BADADDR) -> TWidget * - Open the enums window (ui_open_builtin). - - @param const_id: (C++: tid_t) index of entry to select by default - @return: pointer to resulting window - -ida_kernwin.open_exports_window (function) - open_exports_window(ea) -> TWidget * - Open the exports window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window - -ida_kernwin.open_form (function) - Display a dockable modeless dialog box and return a handle to it. The modeless - form can be closed in the following ways: - * by pressing the small 'x' in the window title - * by calling form_actions_t::close() from the form callback (form_actions_t) - @note: pressing the 'Yes/No/Cancel' buttons does not close the modeless form, - except if the form callback explicitly calls close(). - - @return: handle to the form or nullptr. the handle can be used with TWidget - -ida_kernwin.open_frame_window (function) - open_frame_window(pfn, offset) -> TWidget * - Open the frame window for the given function (ui_open_builtin). - - @param pfn: (C++: func_t *) function to analyze - @param offset: (C++: uval_t) offset where the cursor is placed - @return: pointer to resulting window if 'pfn' is a valid function and the window - was displayed, - nullptr otherwise - -ida_kernwin.open_funcs_window (function) - open_funcs_window(ea) -> TWidget * - Open the 'Functions' window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window - -ida_kernwin.open_hexdump_window (function) - open_hexdump_window(window_title) -> TWidget * - Open a hexdump view (ui_open_builtin). - - @param window_title: (C++: const char *) title of view to open - @return: pointer to resulting window - -ida_kernwin.open_imports_window (function) - open_imports_window(ea) -> TWidget * - Open the exports window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window - -ida_kernwin.open_loctypes_window (function) - open_loctypes_window(ordinal, cursor=None) -> TWidget * - Open the local types window (ui_open_builtin). - - @param ordinal: (C++: int) ordinal of type to select by default - @param cursor: (C++: const tif_cursor_t *) cursor to the type member - @return: pointer to resulting window - -ida_kernwin.open_modules_window (function) - open_modules_window() -> TWidget * - Open the modules window (ui_open_builtin). - - @return: pointer to resulting window - -ida_kernwin.open_names_window (function) - open_names_window(ea) -> TWidget * - Open the names window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window - -ida_kernwin.open_navband_window (function) - open_navband_window(ea, zoom) -> TWidget * - Open the navigation band window (ui_open_builtin). - - @param ea: (C++: ea_t) sets the address of the navband arrow - @param zoom: (C++: int) sets the navband zoom level - @return: pointer to resulting window - -ida_kernwin.open_notepad_window (function) - open_notepad_window() -> TWidget * - Open the notepad window (ui_open_builtin). - - @return: pointer to resulting window - -ida_kernwin.open_problems_window (function) - open_problems_window(ea) -> TWidget * - Open the problems window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window - -ida_kernwin.open_segments_window (function) - open_segments_window(ea) -> TWidget * - Open the segments window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window - -ida_kernwin.open_segregs_window (function) - open_segregs_window(ea) -> TWidget * - Open the segment registers window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window - -ida_kernwin.open_selectors_window (function) - open_selectors_window() -> TWidget * - Open the selectors window (ui_open_builtin). - - @return: pointer to resulting window - -ida_kernwin.open_signatures_window (function) - open_signatures_window() -> TWidget * - Open the signatures window (ui_open_builtin). - - @return: pointer to resulting window - -ida_kernwin.open_stack_window (function) - open_stack_window() -> TWidget * - Open the call stack window (ui_open_builtin). - - @return: pointer to resulting window - -ida_kernwin.open_strings_window (function) - open_strings_window(ea, selstart=BADADDR, selend=BADADDR) -> TWidget * - Open the 'Strings' window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @param selstart: (C++: ea_t) ,selend: only display strings that occur within this range - @param selend: (C++: ea_t) - @return: pointer to resulting window - -ida_kernwin.open_structs_window (function) - open_structs_window(id=BADADDR, offset=0) -> TWidget * - Open the structs window (ui_open_builtin). - - @param id: (C++: tid_t) index of entry to select by default - @param offset: (C++: uval_t) offset where the cursor is placed - @return: pointer to resulting window - -ida_kernwin.open_threads_window (function) - open_threads_window() -> TWidget * - Open the threads window (ui_open_builtin). - - @return: pointer to resulting window - -ida_kernwin.open_tils_window (function) - open_tils_window() -> TWidget * - Open the type libraries window (ui_open_builtin). - - @return: pointer to resulting window - -ida_kernwin.open_trace_window (function) - open_trace_window() -> TWidget * - Open the tracing window (ui_open_builtin). - - @return: pointer to resulting window - -ida_kernwin.open_url (function) - open_url(url) - Open the given url (ui_open_url) - - @param url: (C++: const char *) char const * - -ida_kernwin.open_xrefs_window (function) - open_xrefs_window(ea) -> TWidget * - Open the cross references window (ui_open_builtin). - - @param ea: (C++: ea_t) index of entry to select by default - @return: pointer to resulting window - -ida_kernwin.place_t (class) - Proxy of C++ place_t class. - -ida_kernwin.place_t.__init__ (method) - -ida_kernwin.place_t._print (method) - _print(self, ud) - - Parameters - ---------- - ud: void * - -ida_kernwin.place_t.adjust (method) - adjust(self, ud) - Adjust the current location to point to a displayable object. This function - validates the location and makes sure that it points to an existing object. For - example, if the location points to the middle of an instruction, it will be - adjusted to point to the beginning of the instruction. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - -ida_kernwin.place_t.as_enumplace_t (method) - as_enumplace_t(p) -> enumplace_t - - @param p: place_t * - -ida_kernwin.place_t.as_idaplace_t (method) - as_idaplace_t(p) -> idaplace_t - - @param p: place_t * - -ida_kernwin.place_t.as_simpleline_place_t (method) - as_simpleline_place_t(p) -> simpleline_place_t - - @param p: place_t * - -ida_kernwin.place_t.as_structplace_t (method) - as_structplace_t(p) -> structplace_t - - @param p: place_t * - -ida_kernwin.place_t.as_tiplace_t (method) - as_tiplace_t(p) -> tiplace_t - - @param p: place_t * - -ida_kernwin.place_t.beginning (method) - beginning(self, ud) -> bool - Are we at the first displayable object?. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - @return: true if the current location points to the first displayable object - -ida_kernwin.place_t.clone (method) - clone(self) -> place_t - Clone the location. - - @return: a pointer to a copy of the current location in dynamic memory - -ida_kernwin.place_t.compare (method) - compare(self, t2) -> int - Deprecated. Please consider compare2(const place_t *, void *) instead. - - @param t2: (C++: const place_t *) place_t const * - -ida_kernwin.place_t.compare2 (method) - compare2(self, t2, arg3) -> int - Compare two locations except line numbers (lnnum). This function is used to - organize loops. For example, if the user has selected an range, its boundaries - are remembered as location objects. Any operation within the selection will have - the following look: for ( loc=starting_location; loc < ending_location; - loc.next() ) In this loop, the comparison function is used. - - @param t2: (C++: const place_t *) the place to compare this one to. - @param arg3: void * - -ida_kernwin.place_t.copyfrom (method) - copyfrom(self, _from) - Copy the specified location object to the current object. - - @param from: (C++: const place_t *) place_t const * - -ida_kernwin.place_t.deserialize (method) - deserialize(self, _in) -> bool - De-serialize into this instance. 'pptr' should be incremented by as many bytes - as de-serialization consumed. - - @param pptr: (C++: const uchar **) pointer to a serialized representation of a place_t of this type. - @return: whether de-serialization was successful - -ida_kernwin.place_t.ending (method) - ending(self, ud) -> bool - Are we at the last displayable object?. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - @return: true if the current location points to the last displayable object - -ida_kernwin.place_t.enter (method) - enter(self, arg2) -> place_t - Visit this place, possibly 'unhiding' a section of text. If entering that place - required some expanding, a place_t should be returned that represents that - section, plus some flags for later use by 'leave()'. - - @param out_flags: flags to be used together with the place_t that is returned, - in order to restore the section to its original state when - leave() is called. - @return: a place_t corresponding to the beginning of the section of text that - had to be expanded. That place_t's leave() will be called with the - flags contained in 'out_flags' when the user navigates away from it. - -ida_kernwin.place_t.generate (method) - generate(self, ud, maxsize) -> ([str, ...], int, int, int) - Generate text lines for the current location. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - @param maxsize: (C++: int) the maximum number of lines to generate - @return: number of generated lines - -ida_kernwin.place_t.id (method) - id(self) -> int - Get the place's ID (i.e., the value returned by register_place_class()) - - @return: the id - -ida_kernwin.place_t.leave (method) - leave(self, arg2) - Leave this place, possibly 'hiding' a section of text that was previously - expanded (at enter()-time.) - - @param arg2: uint32 - -ida_kernwin.place_t.lnnum (variable) - Number of line within the current object. - -ida_kernwin.place_t.makeplace (method) - makeplace(self, ud, x, lnnum) -> place_t - Map a number to a location. When the user clicks on the scrollbar and drags it, - we need to determine the location corresponding to the new scrollbar position. - This function is used to determine it. It builds a location object for the - specified 'x' and returns a pointer to it. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - @param x: (C++: uval_t) number to map - @param lnnum: (C++: int) line number to initialize 'lnnum' - @return: a freshly allocated object. See also PCF_MAKEPLACE_ALLOCATES - -ida_kernwin.place_t.name (method) - name(self) -> char const * - Get this place type name. All instances of a given class must return the same - string. - - @return: the place type name. Please try and pick something that is not too - generic, as it might clash w/ other plugins. A good practice is to - prefix the class name with the name of your plugin. E.g., - "myplugin:srcplace_t". - -ida_kernwin.place_t.next (method) - next(self, ud) -> bool - Move to the next displayable location. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - @return: success - -ida_kernwin.place_t.prev (method) - prev(self, ud) -> bool - Move to the previous displayable location. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - @return: success - -ida_kernwin.place_t.rebase (method) - rebase(self, arg2) -> bool - Rebase the place instance - - @param arg2: segm_move_infos_t const & - @return: true if place was rebased, false otherwise - -ida_kernwin.place_t.serialize (method) - serialize(self) - Serialize this instance. It is fundamental that all instances of a particular - subclass of of place_t occupy the same number of bytes when serialized. - -ida_kernwin.place_t.toea (method) - toea(self) -> ea_t - Map the location to an ea_t. - - @return: the corresponding ea_t, or BADADDR; - -ida_kernwin.place_t.touval (method) - touval(self, ud) -> uval_t - Map the location to a number. This mapping is used to draw the vertical - scrollbar. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - -ida_kernwin.place_t_as_enumplace_t (function) - place_t_as_enumplace_t(p) -> enumplace_t - - @param p: place_t * - -ida_kernwin.place_t_as_idaplace_t (function) - place_t_as_idaplace_t(p) -> idaplace_t - - @param p: place_t * - -ida_kernwin.place_t_as_simpleline_place_t (function) - place_t_as_simpleline_place_t(p) -> simpleline_place_t - - @param p: place_t * - -ida_kernwin.place_t_as_structplace_t (function) - place_t_as_structplace_t(p) -> structplace_t - - @param p: place_t * - -ida_kernwin.place_t_as_tiplace_t (function) - place_t_as_tiplace_t(p) -> tiplace_t - - @param p: place_t * - -ida_kernwin.plgform_close (function) - plgform_close(py_link, options) - - @param py_link: PyObject * - @param options: int - -ida_kernwin.plgform_get_widget (function) - plgform_get_widget(py_link) -> TWidget * - - @param py_link: PyObject * - -ida_kernwin.plgform_new (function) - plgform_new() -> PyObject * - -ida_kernwin.plgform_show (function) - plgform_show(py_link, py_obj, caption, options=(0x0040 << 16)|0x00000004u) -> bool - - @param py_link: PyObject * - @param py_obj: PyObject * - @param caption: char const * - @param options: int - -ida_kernwin.process_ui_action (function) - process_ui_action(name, flags=0) -> bool - Invokes an IDA UI action by name - - @param name: action name - @param flags: int - @return: Boolean - -ida_kernwin.py_chooser_base_t_get_row (function) - py_chooser_base_t_get_row(chobj, n) -> PyObject * - - @param chobj: chooser_base_t const * - @param n: size_t - -ida_kernwin.py_get_ask_form (function) - py_get_ask_form() -> size_t - -ida_kernwin.py_get_open_form (function) - py_get_open_form() -> size_t - -ida_kernwin.py_load_custom_icon_data (function) - py_load_custom_icon_data(data, format) -> int - - @param data: PyObject * - @param format: char const * - -ida_kernwin.py_load_custom_icon_fn (function) - py_load_custom_icon_fn(filename) -> int - - @param filename: char const * - -ida_kernwin.py_register_compiled_form (function) - py_register_compiled_form(py_form) - - @param py_form: PyObject * - -ida_kernwin.py_unregister_compiled_form (function) - py_unregister_compiled_form(py_form) - - @param py_form: PyObject * - -ida_kernwin.pyidag_bind (function) - pyidag_bind(_self) -> bool - - @param self: PyObject * - -ida_kernwin.pyidag_unbind (function) - pyidag_unbind(_self) -> bool - - @param self: PyObject * - -ida_kernwin.pyscv_add_line (function) - pyscv_add_line(py_this, py_sl) -> bool - - @param py_this: PyObject * - @param py_sl: PyObject * - -ida_kernwin.pyscv_clear_lines (function) - pyscv_clear_lines(py_this) -> PyObject * - - @param py_this: PyObject * - -ida_kernwin.pyscv_close (function) - pyscv_close(py_this) - - @param py_this: PyObject * - -ida_kernwin.pyscv_count (function) - pyscv_count(py_this) -> size_t - - @param py_this: PyObject * - -ida_kernwin.pyscv_del_line (function) - pyscv_del_line(py_this, nline) -> bool - - @param py_this: PyObject * - @param nline: size_t - -ida_kernwin.pyscv_edit_line (function) - pyscv_edit_line(py_this, nline, py_sl) -> bool - - @param py_this: PyObject * - @param nline: size_t - @param py_sl: PyObject * - -ida_kernwin.pyscv_get_current_line (function) - pyscv_get_current_line(py_this, mouse, notags) -> PyObject * - - @param py_this: PyObject * - @param mouse: bool - @param notags: bool - -ida_kernwin.pyscv_get_current_word (function) - pyscv_get_current_word(py_this, mouse) -> PyObject * - - @param py_this: PyObject * - @param mouse: bool - -ida_kernwin.pyscv_get_line (function) - pyscv_get_line(py_this, nline) -> PyObject * - - @param py_this: PyObject * - @param nline: size_t - -ida_kernwin.pyscv_get_pos (function) - pyscv_get_pos(py_this, mouse) -> PyObject * - - @param py_this: PyObject * - @param mouse: bool - -ida_kernwin.pyscv_get_selection (function) - pyscv_get_selection(py_this) -> PyObject * - - @param py_this: PyObject * - -ida_kernwin.pyscv_get_widget (function) - pyscv_get_widget(py_this) -> TWidget * - - @param py_this: PyObject * - -ida_kernwin.pyscv_init (function) - pyscv_init(py_link, title) -> PyObject * - - @param py_link: PyObject * - @param title: char const * - -ida_kernwin.pyscv_insert_line (function) - pyscv_insert_line(py_this, nline, py_sl) -> bool - - @param py_this: PyObject * - @param nline: size_t - @param py_sl: PyObject * - -ida_kernwin.pyscv_is_focused (function) - pyscv_is_focused(py_this) -> bool - - @param py_this: PyObject * - -ida_kernwin.pyscv_jumpto (function) - pyscv_jumpto(py_this, ln, x, y) -> bool - - @param py_this: PyObject * - @param ln: size_t - @param x: int - @param y: int - -ida_kernwin.pyscv_patch_line (function) - pyscv_patch_line(py_this, nline, offs, value) -> bool - - @param py_this: PyObject * - @param nline: size_t - @param offs: size_t - @param value: int - -ida_kernwin.pyscv_refresh (function) - pyscv_refresh(py_this) -> bool - - @param py_this: PyObject * - -ida_kernwin.pyscv_show (function) - pyscv_show(py_this) -> bool - - @param py_this: PyObject * - -ida_kernwin.qcleanline (function) - qcleanline(cmt_char='\0', flags=((1 << 0)|(1 << 1))|(1 << 2)) -> str - Performs some cleanup operations to a line. - - @param cmt_char: (C++: 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 - @param flags: (C++: uint32) a combination of line cleanup flags. defaults to CLNL_TRIM - @return: length of line - -ida_kernwin.quick_widget_commands_t (class) - -ida_kernwin.quick_widget_commands_t.__init__ (method) - -ida_kernwin.quick_widget_commands_t._ah_t (class) - -ida_kernwin.quick_widget_commands_t._ah_t.__init__ (method) - -ida_kernwin.quick_widget_commands_t._ah_t.activate (method) - -ida_kernwin.quick_widget_commands_t._ah_t.update (method) - -ida_kernwin.quick_widget_commands_t._cmd_t (class) - -ida_kernwin.quick_widget_commands_t._cmd_t.__init__ (method) - -ida_kernwin.quick_widget_commands_t.add (method) - -ida_kernwin.quick_widget_commands_t.populate_popup (method) - -ida_kernwin.read_range_selection (function) - read_range_selection(v) -> bool - Get the address range for the selected range boundaries, this is the convenient - function for read_selection() - - @param v: (C++: TWidget *) view, nullptr means the last active window containing addresses - @retval 0: no range is selected - @retval 1: ok, start ea and end ea are filled - -ida_kernwin.read_selection (function) - 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 p1: Storage for the "to" part of the selection. - @param p1: Storage for the "to" part of the selection. - @return: a bool value indicating success. - -ida_kernwin.refresh_chooser (function) - refresh_chooser(title) -> bool - Mark a non-modal custom chooser for a refresh (ui_refresh_chooser). - - @param title: (C++: const char *) title of chooser - @return: success - -ida_kernwin.refresh_choosers (function) - refresh_choosers() - -ida_kernwin.refresh_custom_viewer (function) - refresh_custom_viewer(custom_viewer) - Refresh custom ida viewer (ui_refresh_custom_viewer) - - @param custom_viewer: (C++: TWidget *) - -ida_kernwin.refresh_idaview (function) - refresh_idaview() - Refresh marked windows (ui_refreshmarked) - -ida_kernwin.refresh_idaview_anyway (function) - refresh_idaview_anyway() - Refresh all disassembly views (ui_refresh), forces an immediate refresh. Please - consider request_refresh() instead - -ida_kernwin.refresh_navband (function) - refresh_navband(force) - Refresh navigation band if changed (ui_refresh_navband). - - @param force: (C++: bool) refresh regardless - -ida_kernwin.register_action (function) - 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: (C++: const action_desc_t &) action to register - @return: success - -ida_kernwin.register_addon (function) - 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 *) addon_info_t const * - -ida_kernwin.register_and_attach_to_menu (function) - register_and_attach_to_menu(menupath, name, label, shortcut, flags, handler, owner, action_desc_t_flags) -> 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 *) char const * - @param name: (C++: const char *) char const * - @param label: (C++: const char *) char const * - @param shortcut: (C++: const char *) char const * - @param flags: (C++: int) - @param handler: (C++: action_handler_t *) - @param owner: (C++: void *) - @param action_desc_t_flags: (C++: int) - -ida_kernwin.register_timer (function) - register_timer(interval, py_callback) -> PyCapsule - Register a timer - - @param interval: Interval in milliseconds - @param py_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 (function) - remove_command_interpreter(cli_idx) - Remove command line interpreter (ui_install_cli) - - @param cli_idx: int - -ida_kernwin.renderer_pos_info_t (class) - Proxy of C++ renderer_pos_info_t class. - -ida_kernwin.renderer_pos_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: renderer_pos_info_t const & - -ida_kernwin.renderer_pos_info_t.__init__ (method) - __init__(self) -> renderer_pos_info_t - -ida_kernwin.renderer_pos_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: renderer_pos_info_t const & - -ida_kernwin.renderer_pos_info_t.cx (variable) - the X coords of the character in the current line. When in graph mode: X coords - of the character in 'node'. - When in flat mode: X coords of the character in the line, w/o - taking scrolling into consideration. - -ida_kernwin.renderer_pos_info_t.cy (variable) - the Y coords of the character. When in graph mode: Y coords of the character in - 'node'. - When in flat mode: Line number, starting from the top. - -ida_kernwin.renderer_pos_info_t.node (variable) - the node, or -1 if the current renderer is not a graph renderer. - -ida_kernwin.renderer_pos_info_t.sx (variable) - the number of chars that are scrolled (flat mode only) - -ida_kernwin.repaint_custom_viewer (function) - repaint_custom_viewer(custom_viewer) - Repaint the given widget immediately (ui_repaint_qwidget) - - @param custom_viewer: (C++: TWidget *) - -ida_kernwin.replace_wait_box (function) - replace_wait_box(format) - Replace the label of "Please wait dialog box". - - @param format: (C++: const char *) char const * - -ida_kernwin.request_refresh (function) - request_refresh(mask, cnd=True) - Request a refresh of a builtin window. - - @param mask: (C++: uint64) Window refresh flags - @param cnd: (C++: bool) set if true or clear flag otherwise - -ida_kernwin.restore_database_snapshot (function) - restore_database_snapshot(ss, pyfunc_or_none, pytuple_or_none) -> bool - Restore a database snapshot. Note: This call is asynchronous. When it is - completed, the callback will be triggered. - - @param ss: (C++: const snapshot_t *) snapshot instance (see build_snapshot_tree()) - @param pyfunc_or_none: PyObject * - @param pytuple_or_none: PyObject * - @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.section_lines_refs_t (class) - Proxy of C++ qvector< twinline_t const * > class. - -ida_kernwin.section_lines_refs_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< twinline_t const * > const & - -ida_kernwin.section_lines_refs_t.__getitem__ (method) - __getitem__(self, i) -> twinline_t - - @param i: size_t - -ida_kernwin.section_lines_refs_t.__init__ (method) - __init__(self) -> section_lines_refs_t - __init__(self, x) -> section_lines_refs_t - - @param x: qvector< twinline_t const * > const & - -ida_kernwin.section_lines_refs_t.__len__ (method) - __len__(self) -> size_t - -ida_kernwin.section_lines_refs_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< twinline_t const * > const & - -ida_kernwin.section_lines_refs_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: twinline_t const *const & - -ida_kernwin.section_lines_refs_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: twinline_t const *const & - -ida_kernwin.section_lines_refs_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: twinline_t const *const & - -ida_kernwin.section_lines_refs_t.at (method) - at(self, _idx) -> twinline_t - - @param _idx: size_t - -ida_kernwin.section_lines_refs_t.begin (method) - begin(self) -> qvector< twinline_t const * >::iterator - begin(self) -> qvector< twinline_t const * >::const_iterator - -ida_kernwin.section_lines_refs_t.capacity (method) - capacity(self) -> size_t - -ida_kernwin.section_lines_refs_t.clear (method) - clear(self) - -ida_kernwin.section_lines_refs_t.empty (method) - empty(self) -> bool - -ida_kernwin.section_lines_refs_t.end (method) - end(self) -> qvector< twinline_t const * >::iterator - end(self) -> qvector< twinline_t const * >::const_iterator - -ida_kernwin.section_lines_refs_t.erase (method) - erase(self, it) -> qvector< twinline_t const * >::iterator - - @param it: qvector< twinline_t const * >::iterator - - erase(self, first, last) -> qvector< twinline_t const * >::iterator - - @param first: qvector< twinline_t const * >::iterator - @param last: qvector< twinline_t const * >::iterator - -ida_kernwin.section_lines_refs_t.extract (method) - extract(self) -> twinline_t const ** - -ida_kernwin.section_lines_refs_t.find (method) - find(self, x) -> qvector< twinline_t const * >::iterator - - @param x: twinline_t const *const & - - find(self, x) -> qvector< twinline_t const * >::const_iterator - - @param x: twinline_t const *const & - -ida_kernwin.section_lines_refs_t.has (method) - has(self, x) -> bool - - @param x: twinline_t const *const & - -ida_kernwin.section_lines_refs_t.inject (method) - inject(self, s, len) - - @param s: twinline_t const ** - @param len: size_t - -ida_kernwin.section_lines_refs_t.insert (method) - insert(self, it, x) -> qvector< twinline_t const * >::iterator - - @param it: qvector< twinline_t const * >::iterator - @param x: twinline_t const *const & - -ida_kernwin.section_lines_refs_t.pop_back (method) - pop_back(self) - -ida_kernwin.section_lines_refs_t.push_back (method) - push_back(self, x) - - @param x: twinline_t const *const & - - push_back(self) -> twinline_t const *& - -ida_kernwin.section_lines_refs_t.qclear (method) - qclear(self) - -ida_kernwin.section_lines_refs_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_kernwin.section_lines_refs_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: twinline_t const *const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_kernwin.section_lines_refs_t.size (method) - size(self) -> size_t - -ida_kernwin.section_lines_refs_t.swap (method) - swap(self, r) - - @param r: qvector< twinline_t const * > & - -ida_kernwin.section_lines_refs_t.truncate (method) - truncate(self) - -ida_kernwin.sections_lines_refs_t (class) - Proxy of C++ qvector< section_lines_refs_t > class. - -ida_kernwin.sections_lines_refs_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< section_lines_refs_t > const & - -ida_kernwin.sections_lines_refs_t.__getitem__ (method) - __getitem__(self, i) -> section_lines_refs_t - - @param i: size_t - -ida_kernwin.sections_lines_refs_t.__init__ (method) - __init__(self) -> sections_lines_refs_t - __init__(self, x) -> sections_lines_refs_t - - @param x: qvector< section_lines_refs_t > const & - -ida_kernwin.sections_lines_refs_t.__len__ (method) - __len__(self) -> size_t - -ida_kernwin.sections_lines_refs_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< section_lines_refs_t > const & - -ida_kernwin.sections_lines_refs_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: section_lines_refs_t const & - -ida_kernwin.sections_lines_refs_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: section_lines_refs_t const & - -ida_kernwin.sections_lines_refs_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: section_lines_refs_t const & - -ida_kernwin.sections_lines_refs_t.at (method) - at(self, _idx) -> section_lines_refs_t - - @param _idx: size_t - -ida_kernwin.sections_lines_refs_t.begin (method) - begin(self) -> qvector< section_lines_refs_t >::iterator - begin(self) -> qvector< section_lines_refs_t >::const_iterator - -ida_kernwin.sections_lines_refs_t.capacity (method) - capacity(self) -> size_t - -ida_kernwin.sections_lines_refs_t.clear (method) - clear(self) - -ida_kernwin.sections_lines_refs_t.empty (method) - empty(self) -> bool - -ida_kernwin.sections_lines_refs_t.end (method) - end(self) -> qvector< section_lines_refs_t >::iterator - end(self) -> qvector< section_lines_refs_t >::const_iterator - -ida_kernwin.sections_lines_refs_t.erase (method) - erase(self, it) -> qvector< section_lines_refs_t >::iterator - - @param it: qvector< section_lines_refs_t >::iterator - - erase(self, first, last) -> qvector< section_lines_refs_t >::iterator - - @param first: qvector< section_lines_refs_t >::iterator - @param last: qvector< section_lines_refs_t >::iterator - -ida_kernwin.sections_lines_refs_t.extract (method) - extract(self) -> section_lines_refs_t - -ida_kernwin.sections_lines_refs_t.find (method) - find(self, x) -> qvector< section_lines_refs_t >::iterator - - @param x: section_lines_refs_t const & - - find(self, x) -> qvector< section_lines_refs_t >::const_iterator - - @param x: section_lines_refs_t const & - -ida_kernwin.sections_lines_refs_t.grow (method) - grow(self, x=section_lines_refs_t()) - - @param x: section_lines_refs_t const & - -ida_kernwin.sections_lines_refs_t.has (method) - has(self, x) -> bool - - @param x: section_lines_refs_t const & - -ida_kernwin.sections_lines_refs_t.inject (method) - inject(self, s, len) - - @param s: section_lines_refs_t * - @param len: size_t - -ida_kernwin.sections_lines_refs_t.insert (method) - insert(self, it, x) -> qvector< section_lines_refs_t >::iterator - - @param it: qvector< section_lines_refs_t >::iterator - @param x: section_lines_refs_t const & - -ida_kernwin.sections_lines_refs_t.pop_back (method) - pop_back(self) - -ida_kernwin.sections_lines_refs_t.push_back (method) - push_back(self, x) - - @param x: section_lines_refs_t const & - - push_back(self) -> section_lines_refs_t - -ida_kernwin.sections_lines_refs_t.qclear (method) - qclear(self) - -ida_kernwin.sections_lines_refs_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_kernwin.sections_lines_refs_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: section_lines_refs_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_kernwin.sections_lines_refs_t.size (method) - size(self) -> size_t - -ida_kernwin.sections_lines_refs_t.swap (method) - swap(self, r) - - @param r: qvector< section_lines_refs_t > & - -ida_kernwin.sections_lines_refs_t.truncate (method) - truncate(self) - -ida_kernwin.set_cancelled (function) - set_cancelled() - Set "Cancelled" flag (ui_set_cancelled) - -ida_kernwin.set_code_viewer_handler (function) - 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: (C++: TWidget *) the code viewer - @param handler_id: (C++: custom_viewer_handler_id_t) one of CDVH_ in custom_viewer_handler_id_t - @param handler_or_data: (C++: void *) can be a handler or data. see examples in Functions: - custom viewer handlers - @return: old value of the handler or data - -ida_kernwin.set_code_viewer_is_source (function) - 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 (function) - 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 nullptr - - @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 (function) - 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 (function) - 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 (function) - 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 (function) - 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 (function) - 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 (function) - 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. - - Use the left, top, right, bottom parameters if DP_FLOATING is used, - or if you want to specify the width of docked windows. - - @param src_ctrl: char const * - @param dest_ctrl: char const * - @param orient: One of DP_XXXX constants - @param left: int - @param top: int - @param right: int - @param bottom: int - @return: Boolean - - Example: - set_dock_pos('Structures', 'Enums', DP_RIGHT) <- docks the Structures window to the right of Enums window - -ida_kernwin.set_highlight (function) - set_highlight(viewer, str, flags) -> bool - Set the highlighted identifier in the viewer (ui_set_highlight). - - @param viewer: (C++: TWidget *) the viewer - @param str: (C++: const char *) the text to match, or nullptr to remove current - @param flags: (C++: int) combination of HIF_... bits (see set_highlight flags) - @return: false if an error occurred - -ida_kernwin.set_nav_colorizer (function) - set_nav_colorizer(new_py_colorizer) -> dict or None - 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) - - @param new_py_colorizer: PyObject * - -ida_kernwin.set_view_renderer_type (function) - 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) enum tcc_renderer_type_t - -ida_kernwin.show_wait_box (function) - show_wait_box(message) - Display a dialog box with "Please wait...". The behavior of the dialog box can - be configured with well-known - tokens, that should be placed at the start of the format string: - "NODELAY\n": the dialog will show immediately, instead of - appearing after usual grace threshold - "HIDECANCEL\n": the cancel button won't be added to the dialog box - and user_cancelled() will always return false (but - can be called to refresh UI) - Using "HIDECANCEL" implies "NODELAY" - Plugins must call hide_wait_box() to close the dialog box, otherwise - the user interface will remain disabled. - Note that, if the wait dialog is already visible, show_wait_box() will - 1) push the currently-displayed text on a stack - 2) display the new text - Then, when hide_wait_box() is called, if that stack isn't empty its top - label will be popped and restored in the wait dialog. - This implies that a plugin should call hide_wait_box() exactly as many - times as it called show_wait_box(), or the wait dialog might remain - visible 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 the - dialog without pushing the currently-displayed text on the stack. - - @param message: char const * - -ida_kernwin.simplecustviewer_t (class) - The base class for implementing simple custom viewers - -ida_kernwin.simplecustviewer_t.AddLine (method) - Adds a colored line to the view - @return: Boolean - -ida_kernwin.simplecustviewer_t.ClearLines (method) - Clears all the lines - -ida_kernwin.simplecustviewer_t.Close (method) - 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 (method) - Returns the number of lines in the view - -ida_kernwin.simplecustviewer_t.Create (method) - 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 (method) - Deletes an existing line - @return: Boolean - -ida_kernwin.simplecustviewer_t.EditLine (method) - Edits an existing line. - @return: Boolean - -ida_kernwin.simplecustviewer_t.GetCurrentLine (method) - 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 (method) - 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 (method) - Returns a line - @param lineno: The line number - @return: Returns a tuple (colored_line, fgcolor, bgcolor) or None - -ida_kernwin.simplecustviewer_t.GetLineNo (method) - Calls GetPos() and returns the current line number or -1 on failure - -ida_kernwin.simplecustviewer_t.GetPos (method) - Returns the current cursor or mouse position. - @param mouse: return mouse position - @return: Returns a tuple (lineno, x, y) - -ida_kernwin.simplecustviewer_t.GetSelection (method) - Returns the selected range or None - @return: - tuple(x1, y1, x2, y2) - - None if no selection - -ida_kernwin.simplecustviewer_t.GetWidget (method) - Return the TWidget underlying this view. - - @return: The TWidget underlying this view, or None. - -ida_kernwin.simplecustviewer_t.InsertLine (method) - Inserts a line in the given position - @return: Boolean - -ida_kernwin.simplecustviewer_t.IsFocused (method) - Returns True if the current view is the focused view - -ida_kernwin.simplecustviewer_t.Jump (method) - -ida_kernwin.simplecustviewer_t.OnPopup (method) - 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 (method) - 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.Refresh (method) - -ida_kernwin.simplecustviewer_t.RefreshCurrent (method) - Refreshes the current line only - -ida_kernwin.simplecustviewer_t.Show (method) - Shows an already created view. It the view was closed, then it will call Create() for you - @return: Boolean - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline (class) - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.__init__ (method) - -ida_kernwin.simplecustviewer_t.UI_Hooks_Trampoline.populating_widget_popup (method) - -ida_kernwin.simplecustviewer_t.__init__ (method) - -ida_kernwin.simplecustviewer_t.__make_sl_arg (method) - -ida_kernwin.simpleline_place_t (class) - Proxy of C++ simpleline_place_t class. - -ida_kernwin.simpleline_place_t.__init__ (method) - -ida_kernwin.simpleline_place_t.n (variable) - line number - -ida_kernwin.simpleline_t (class) - Proxy of C++ simpleline_t class. - -ida_kernwin.simpleline_t.__init__ (method) - __init__(self) -> simpleline_t - __init__(self, c, str) -> simpleline_t - - @param c: color_t - @param str: char const * - - __init__(self, str) -> simpleline_t - - @param str: char const * - -ida_kernwin.simpleline_t.bgcolor (variable) - line background color - -ida_kernwin.simpleline_t.color (variable) - line prefix color - -ida_kernwin.simpleline_t.line (variable) - line text - -ida_kernwin.str2ea (function) - str2ea(str, screen_ea=BADADDR) -> bool - Convert string to linear address. Tries to interpret the string as: - 1) "current IP" keyword if supported by assembler (e.g. "$" in x86) - 2) segment:offset expression, where "segment" may be a name or a fixed segment - register (e.g. cs, ds) - 3) just segment name/register (translated to segment's start address) - 4) a name in the database (or debug name during debugging) - 5) hexadecimal value without prefix or suffix - 6) +delta or -delta, where numerical 'delta' is added to or subtracted from - 'screen_ea' - 7) register name (only during debugging) - 8) if all else fails, try to evaluate 'str' as an IDC expression - - @param str: (C++: const char *) string to parse - @param screen_ea: (C++: ea_t) the current address in the disassembly/pseudocode view - @return: success - -ida_kernwin.str2ea_ex (function) - str2ea_ex(str, screen_ea=BADADDR, flags=0) -> bool - Same as str2ea() but possibly with some steps skipped. - - @param str: (C++: const char *) string to parse - @param screen_ea: (C++: ea_t) the current address in the disassembly/pseudocode view - @param flags: (C++: int) see String to address conversion flags - @return: success - -ida_kernwin.strarray (function) - 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 *) strarray_t const * - @param array_size: (C++: size_t) - @param code: (C++: int) - -ida_kernwin.strarray_t (class) - Proxy of C++ strarray_t class. - -ida_kernwin.strarray_t.__init__ (method) - __init__(self) -> strarray_t - -ida_kernwin.structplace_t (class) - Proxy of C++ structplace_t class. - -ida_kernwin.structplace_t.__init__ (method) - -ida_kernwin.structplace_t.idx (variable) - struct serial number - -ida_kernwin.structplace_t.offset (variable) - offset within struct - -ida_kernwin.sync_source_t (class) - Proxy of C++ sync_source_t class. - -ida_kernwin.sync_source_t.__eq__ (method) - __eq__(self, _o) -> bool - - @param _o: sync_source_t const & - -ida_kernwin.sync_source_t.__init__ (method) - __init__(self, _view) -> sync_source_t - - @param _view: TWidget const * - - __init__(self, _regname) -> sync_source_t - - @param _regname: char const * - -ida_kernwin.sync_source_t.__ne__ (method) - __ne__(self, _o) -> bool - - @param _o: sync_source_t const & - -ida_kernwin.sync_source_t.get_register (method) - get_register(self) -> char const * - -ida_kernwin.sync_source_t.get_widget (method) - get_widget(self) -> TWidget const * - -ida_kernwin.sync_source_t.is_register (method) - is_register(self) -> bool - -ida_kernwin.sync_source_t.is_widget (method) - is_widget(self) -> bool - -ida_kernwin.sync_source_vec_t (class) - Proxy of C++ qvector< sync_source_t > class. - -ida_kernwin.sync_source_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< sync_source_t > const & - -ida_kernwin.sync_source_vec_t.__getitem__ (method) - __getitem__(self, i) -> sync_source_t - - @param i: size_t - -ida_kernwin.sync_source_vec_t.__init__ (method) - __init__(self) -> sync_source_vec_t - __init__(self, x) -> sync_source_vec_t - - @param x: qvector< sync_source_t > const & - -ida_kernwin.sync_source_vec_t.__len__ (method) - __len__(self) -> size_t - -ida_kernwin.sync_source_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< sync_source_t > const & - -ida_kernwin.sync_source_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: sync_source_t const & - -ida_kernwin.sync_source_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: sync_source_t const & - -ida_kernwin.sync_source_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: sync_source_t const & - -ida_kernwin.sync_source_vec_t.at (method) - at(self, _idx) -> sync_source_t - - @param _idx: size_t - -ida_kernwin.sync_source_vec_t.begin (method) - begin(self) -> sync_source_t - -ida_kernwin.sync_source_vec_t.capacity (method) - capacity(self) -> size_t - -ida_kernwin.sync_source_vec_t.clear (method) - clear(self) - -ida_kernwin.sync_source_vec_t.empty (method) - empty(self) -> bool - -ida_kernwin.sync_source_vec_t.end (method) - end(self) -> sync_source_t - -ida_kernwin.sync_source_vec_t.erase (method) - erase(self, it) -> sync_source_t - - @param it: qvector< sync_source_t >::iterator - - erase(self, first, last) -> sync_source_t - - @param first: qvector< sync_source_t >::iterator - @param last: qvector< sync_source_t >::iterator - -ida_kernwin.sync_source_vec_t.extract (method) - extract(self) -> sync_source_t - -ida_kernwin.sync_source_vec_t.find (method) - find(self, x) -> sync_source_t - - @param x: sync_source_t const & - -ida_kernwin.sync_source_vec_t.has (method) - has(self, x) -> bool - - @param x: sync_source_t const & - -ida_kernwin.sync_source_vec_t.inject (method) - inject(self, s, len) - - @param s: sync_source_t * - @param len: size_t - -ida_kernwin.sync_source_vec_t.insert (method) - insert(self, it, x) -> sync_source_t - - @param it: qvector< sync_source_t >::iterator - @param x: sync_source_t const & - -ida_kernwin.sync_source_vec_t.pop_back (method) - pop_back(self) - -ida_kernwin.sync_source_vec_t.push_back (method) - push_back(self, x) - - @param x: sync_source_t const & - -ida_kernwin.sync_source_vec_t.qclear (method) - qclear(self) - -ida_kernwin.sync_source_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_kernwin.sync_source_vec_t.size (method) - size(self) -> size_t - -ida_kernwin.sync_source_vec_t.swap (method) - swap(self, r) - - @param r: qvector< sync_source_t > & - -ida_kernwin.sync_source_vec_t.truncate (method) - truncate(self) - -ida_kernwin.sync_sources (function) - 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.synced_group_t (class) - Proxy of C++ synced_group_t class. - -ida_kernwin.synced_group_t.__init__ (method) - __init__(self) -> synced_group_t - -ida_kernwin.synced_group_t.has (method) - has(self, ss) -> bool - - @param ss: sync_source_t const & - -ida_kernwin.synced_group_t.has_register (method) - has_register(self, r) -> bool - - @param r: char const * - -ida_kernwin.synced_group_t.has_widget (method) - has_widget(self, v) -> bool - - @param v: TWidget const * - -ida_kernwin.tagged_line_section_t (class) - Proxy of C++ tagged_line_section_t class. - -ida_kernwin.tagged_line_section_t.__init__ (method) - __init__(self) -> tagged_line_section_t - -ida_kernwin.tagged_line_section_t.substr (method) - substr(self, _in) -> bool - - @param in: qstring const & - -ida_kernwin.tagged_line_section_t.valid (method) - valid(self) -> bool - -ida_kernwin.tagged_line_section_t.valid_in (method) - valid_in(self, _in) -> bool - - @param in: qstring const & - -ida_kernwin.tagged_line_sections_t (class) - Proxy of C++ tagged_line_sections_t class. - -ida_kernwin.tagged_line_sections_t.__init__ (method) - __init__(self) -> tagged_line_sections_t - -ida_kernwin.tagged_line_sections_t.find_in (method) - find_in(self, range, tag=0) -> tagged_line_section_t - - @param range: tagged_line_section_t const & - @param tag: color_t - -ida_kernwin.tagged_line_sections_t.nearest_at (method) - nearest_at(self, x, tag=0) -> tagged_line_section_t - - @param x: cpidx_t - @param tag: color_t - -ida_kernwin.tagged_line_sections_t.sections_at (method) - sections_at(self, out, x, tag=0) - - @param out: tagged_line_sections_t * - @param x: cpidx_t - @param tag: color_t - -ida_kernwin.take_database_snapshot (function) - take_database_snapshot(ss) -> (bool, NoneType) - Take a database snapshot (ui_take_database_snapshot). - - @param ss: (C++: snapshot_t *) in/out parameter. - * in: description, flags - * out: filename, id - @return: success - -ida_kernwin.text_t (class) - Proxy of C++ qvector< twinline_t > class. - -ida_kernwin.text_t.__getitem__ (method) - __getitem__(self, i) -> twinline_t - - @param i: size_t - -ida_kernwin.text_t.__init__ (method) - __init__(self) -> text_t - __init__(self, x) -> text_t - - @param x: qvector< twinline_t > const & - -ida_kernwin.text_t.__len__ (method) - __len__(self) -> size_t - -ida_kernwin.text_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: twinline_t const & - -ida_kernwin.text_t.at (method) - at(self, _idx) -> twinline_t - - @param _idx: size_t - -ida_kernwin.text_t.begin (method) - begin(self) -> twinline_t - -ida_kernwin.text_t.capacity (method) - capacity(self) -> size_t - -ida_kernwin.text_t.clear (method) - clear(self) - -ida_kernwin.text_t.empty (method) - empty(self) -> bool - -ida_kernwin.text_t.end (method) - end(self) -> twinline_t - -ida_kernwin.text_t.erase (method) - erase(self, it) -> twinline_t - - @param it: qvector< twinline_t >::iterator - - erase(self, first, last) -> twinline_t - - @param first: qvector< twinline_t >::iterator - @param last: qvector< twinline_t >::iterator - -ida_kernwin.text_t.extract (method) - extract(self) -> twinline_t - -ida_kernwin.text_t.grow (method) - grow(self, x=twinline_t()) - - @param x: twinline_t const & - -ida_kernwin.text_t.inject (method) - inject(self, s, len) - - @param s: twinline_t * - @param len: size_t - -ida_kernwin.text_t.insert (method) - insert(self, it, x) -> twinline_t - - @param it: qvector< twinline_t >::iterator - @param x: twinline_t const & - -ida_kernwin.text_t.pop_back (method) - pop_back(self) - -ida_kernwin.text_t.push_back (method) - push_back(self, x) - - @param x: twinline_t const & - - push_back(self) -> twinline_t - -ida_kernwin.text_t.qclear (method) - qclear(self) - -ida_kernwin.text_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_kernwin.text_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: twinline_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_kernwin.text_t.size (method) - size(self) -> size_t - -ida_kernwin.text_t.swap (method) - swap(self, r) - - @param r: qvector< twinline_t > & - -ida_kernwin.text_t.truncate (method) - truncate(self) - -ida_kernwin.textctrl_info_t (class) - Class representing textctrl_info_t - -ida_kernwin.textctrl_info_t.TXTF_ACCEPTTABS (variable) - Tab key inserts 'tabsize' spaces - -ida_kernwin.textctrl_info_t.TXTF_AUTOINDENT (variable) - Auto-indent on new line - -ida_kernwin.textctrl_info_t.TXTF_FIXEDFONT (variable) - The control uses IDA's fixed font - -ida_kernwin.textctrl_info_t.TXTF_MODIFIED (variable) - Gets/sets the modified status - -ida_kernwin.textctrl_info_t.TXTF_READONLY (variable) - Text cannot be edited (but can be selected and copied) - -ida_kernwin.textctrl_info_t.TXTF_SELECTED (variable) - Shows the field with its text selected - -ida_kernwin.textctrl_info_t.__get_flags__ (method) - Returns the flags value - -ida_kernwin.textctrl_info_t.__get_tabsize__ (method) - Returns the tabsize value - -ida_kernwin.textctrl_info_t.__get_text (method) - Sets the text value - -ida_kernwin.textctrl_info_t.__init__ (method) - -ida_kernwin.textctrl_info_t.__set_flags__ (method) - Sets the flags value - -ida_kernwin.textctrl_info_t.__set_tabsize__ (method) - Sets the tabsize value - -ida_kernwin.textctrl_info_t.__set_text (method) - Sets the text value - -ida_kernwin.textctrl_info_t._create_clink (method) - -ida_kernwin.textctrl_info_t._del_clink (method) - -ida_kernwin.textctrl_info_t._get_clink_ptr (method) - -ida_kernwin.textctrl_info_t.assign (method) - Copies the contents of 'other' to 'self' - -ida_kernwin.textctrl_info_t.flags (variable) - Text control property bits - -ida_kernwin.textctrl_info_t.tabsize (variable) - how many spaces a single tab will indent - -ida_kernwin.textctrl_info_t.text (variable) - in, out: text control value - -ida_kernwin.textctrl_info_t.value (variable) - Alias for the text property - -ida_kernwin.textctrl_info_t_assign (function) - textctrl_info_t_assign(_self, other) -> bool - - @param self: PyObject * - @param other: PyObject * - -ida_kernwin.textctrl_info_t_create (function) - textctrl_info_t_create() -> PyObject * - -ida_kernwin.textctrl_info_t_destroy (function) - textctrl_info_t_destroy(py_obj) -> bool - - @param py_obj: PyObject * - -ida_kernwin.textctrl_info_t_get_clink (function) - textctrl_info_t_get_clink(_self) -> textctrl_info_t * - - @param self: PyObject * - -ida_kernwin.textctrl_info_t_get_clink_ptr (function) - textctrl_info_t_get_clink_ptr(_self) -> PyObject * - - @param self: PyObject * - -ida_kernwin.textctrl_info_t_get_flags (function) - textctrl_info_t_get_flags(_self) -> unsigned int - - @param self: PyObject * - -ida_kernwin.textctrl_info_t_get_tabsize (function) - textctrl_info_t_get_tabsize(_self) -> unsigned int - - @param self: PyObject * - -ida_kernwin.textctrl_info_t_get_text (function) - textctrl_info_t_get_text(_self) -> char const * - - @param self: PyObject * - -ida_kernwin.textctrl_info_t_set_flags (function) - textctrl_info_t_set_flags(_self, flags) -> bool - - @param self: PyObject * - @param flags: unsigned int - -ida_kernwin.textctrl_info_t_set_tabsize (function) - textctrl_info_t_set_tabsize(_self, tabsize) -> bool - - @param self: PyObject * - @param tabsize: unsigned int - -ida_kernwin.textctrl_info_t_set_text (function) - textctrl_info_t_set_text(_self, s) -> bool - - @param self: PyObject * - @param s: char const * - -ida_kernwin.tiplace_t (class) - Proxy of C++ tiplace_t class. - -ida_kernwin.tiplace_t.__init__ (method) - -ida_kernwin.tiplace_t.calc_udm_offset (method) - calc_udm_offset(self, ud, p_udmidx=None, p_bitoff=None) -> uint64 - for structs: calculate the offset that corresponds to the tiplace. - - @param ud: (C++: const void *) pointer to user-defined context data. Is supplied by linearray_t - @param p_udmidx: (C++: ssize_t *) place to return the index of the current udt member, if any. if - there is no member at the current offset, return -1 - @param p_bitoff: (C++: int *) place to return the bit offset of the item from the beginning - of the bit bucket if there no bitfields, return -1 - @return: the current offset or uint64(-1) - -ida_kernwin.tiplace_t.fill_type_ref (method) - fill_type_ref(self, out, ud) -> bool - fill the type information for use in actions - - @param out: (C++: til_type_ref_t *) pointer to storage - @param ud: (C++: const void *) pointer to user-defined context data. Is supplied by linearray_t - @return: success - -ida_kernwin.tiplace_t.get_kind (method) - get_kind(self, ud) -> type_t - get the kind of type this place represents - - @param ud: (C++: const void *) pointer to user-defined context data. Is supplied by linearray_t - @return: one of BTF_TYPEDEF, BTF_STRUCT, BTF_UNION, BTF_ENUM or BT_UNK - -ida_kernwin.tiplace_t.is_footer (method) - is_footer(self) -> bool - -ida_kernwin.tiplace_t.is_header (method) - is_header(self) -> bool - -ida_kernwin.tiplace_t.is_index (method) - is_index(self) -> bool - -ida_kernwin.tiplace_t.reset (method) - reset(self) - -ida_kernwin.tiplace_t.set_footer (method) - set_footer(self) - -ida_kernwin.tiplace_t.set_header (method) - set_header(self) - -ida_kernwin.tiplace_t.set_index_by_offset (method) - set_index_by_offset(self, ud, offset) - for structs: calculate the index that corresponds to the offset and set it. - - @param ud: (C++: void *) pointer to user-defined context data. Is supplied by linearray_t - @param offset: (C++: uint64) offset of udt member - -ida_kernwin.tiplace_t.valid_ord (method) - valid_ord(self) -> bool - -ida_kernwin.twinline_t (class) - Proxy of C++ twinline_t class. - -ida_kernwin.twinline_t.__init__ (method) - __init__(self) -> twinline_t - __init__(self, t, pc, bc) -> twinline_t - - @param t: place_t * - @param pc: color_t - @param bc: bgcolor_t - -ida_kernwin.twinline_t.at (variable) - location in view - -ida_kernwin.twinline_t.bg_color (variable) - line background color - -ida_kernwin.twinline_t.is_default (variable) - is this the default line of the current location? - -ida_kernwin.twinline_t.line (variable) - line contents - -ida_kernwin.twinline_t.prefix_color (variable) - line prefix color - -ida_kernwin.twinpos_t (class) - Proxy of C++ twinpos_t class. - -ida_kernwin.twinpos_t.__init__ (method) - __init__(self) -> twinpos_t - __init__(self, t) -> twinpos_t - - @param t: place_t * - - __init__(self, t, x0) -> twinpos_t - - @param t: place_t * - @param x0: int - -ida_kernwin.twinpos_t.at (variable) - location in view - -ida_kernwin.twinpos_t.place (method) - -ida_kernwin.twinpos_t.place_as_enumplace_t (method) - -ida_kernwin.twinpos_t.place_as_idaplace_t (method) - -ida_kernwin.twinpos_t.place_as_simpleline_place_t (method) - -ida_kernwin.twinpos_t.place_as_structplace_t (method) - -ida_kernwin.twinpos_t.place_as_tiplace_t (method) - -ida_kernwin.twinpos_t.x (variable) - cursor x - -ida_kernwin.ui_load_new_file (function) - 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: (C++: qstring *) name of the file with the extracted archive member. - @param filename: (C++: qstring *) the name of input file as is, library or archive name - @param pli: (C++: linput_t **) loader input source, may be changed to point to temp_file - @param neflags: (C++: ushort) combination of NEF_... bits (see Load file flags) - @param ploaders: (C++: load_info_t **) list of loaders which accept file, may be changed for loaders - of temp_file - @retval true: file was successfully loaded - @retval false: otherwise - -ida_kernwin.ui_requests_t (class) - Proxy of C++ ui_requests_t class. - -ida_kernwin.ui_requests_t.__init__ (method) - __init__(self) -> ui_requests_t - -ida_kernwin.ui_run_debugger (function) - ui_run_debugger(dbgopts, exename, argc, argv) -> bool - Load a debugger plugin and run the specified program (ui_run_dbg). - - @param dbgopts: (C++: const char *) value of the -r command line switch - @param exename: (C++: const char *) name of the file to run - @param argc: (C++: int) number of arguments for the executable - @param argv: (C++: const char *const *) argument vector - @return: success - -ida_kernwin.unmark_selection (function) - unmark_selection() - Unmark selection (ui_unmarksel) - -ida_kernwin.unregister_action (function) - unregister_action(name) -> bool - Delete a previously-registered action (ui_unregister_action). - - @param name: (C++: const char *) name of action - @return: success - -ida_kernwin.unregister_timer (function) - 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. - -ida_kernwin.update_action_checkable (function) - update_action_checkable(name, checkable) -> bool - Update an action's checkability (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param checkable: (C++: bool) new checkability - @return: success - -ida_kernwin.update_action_checked (function) - update_action_checked(name, checked) -> bool - Update an action's checked state (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param checked: (C++: bool) new checked state - @return: success - -ida_kernwin.update_action_icon (function) - update_action_icon(name, icon) -> bool - Update an action's icon (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param icon: (C++: int) new icon id - @return: success - -ida_kernwin.update_action_label (function) - update_action_label(name, label) -> bool - Update an action's label (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param label: (C++: const char *) new label - @return: success - -ida_kernwin.update_action_shortcut (function) - update_action_shortcut(name, shortcut) -> bool - Update an action's shortcut (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param shortcut: (C++: const char *) new shortcut - @return: success - -ida_kernwin.update_action_state (function) - update_action_state(name, state) -> bool - Update an action's state (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param state: (C++: action_state_t) new state - @return: success - -ida_kernwin.update_action_tooltip (function) - update_action_tooltip(name, tooltip) -> bool - Update an action's tooltip (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param tooltip: (C++: const char *) new tooltip - @return: success - -ida_kernwin.update_action_visibility (function) - update_action_visibility(name, visible) -> bool - Update an action's visibility (ui_update_action_attr). - - @param name: (C++: const char *) action name - @param visible: (C++: bool) new visibility - @return: success - -ida_kernwin.user_cancelled (function) - user_cancelled() -> bool - Test the ctrl-break flag (ui_test_cancelled). - @retval 1: Ctrl-Break is detected, a message is displayed - @retval 2: Ctrl-Break is detected again, a message is not displayed - @retval 0: Ctrl-Break is not detected - -ida_kernwin.view_activated (variable) - A view is activated - -ida_kernwin.view_click (variable) - Click event - -ida_kernwin.view_close (variable) - View closed - -ida_kernwin.view_created (variable) - A view is being created. - -ida_kernwin.view_curpos (variable) - Cursor position changed - -ida_kernwin.view_dblclick (variable) - Double click event - -ida_kernwin.view_deactivated (variable) - A view is deactivated - -ida_kernwin.view_keydown (variable) - Key down event - -ida_kernwin.view_loc_changed (variable) - The location for the view has changed (can be either the place_t, the - renderer_info_t, or both.) - -ida_kernwin.view_mouse_event_location_t (class) - Proxy of C++ view_mouse_event_location_t class. - -ida_kernwin.view_mouse_event_location_t.__init__ (method) - __init__(self) -> view_mouse_event_location_t - -ida_kernwin.view_mouse_event_location_t.ea (variable) - flat view (rtype == TCCRT_FLAT) - -ida_kernwin.view_mouse_event_location_t.item (variable) - graph views (rtype != TCCRT_FLAT). nullptr if mouse is not currently over an - item. - -ida_kernwin.view_mouse_event_t (class) - Proxy of C++ view_mouse_event_t class. - -ida_kernwin.view_mouse_event_t.__init__ (method) - __init__(self) -> view_mouse_event_t - -ida_kernwin.view_mouse_event_t.button (variable) - represents which mouse button was responsible for generating the event. This - field does not care about the current state of the mouse. - -ida_kernwin.view_mouse_event_t.location (variable) - location where event was generated - -ida_kernwin.view_mouse_event_t.renderer_pos (variable) - position where event was generated, relative to the renderer - -ida_kernwin.view_mouse_event_t.rtype (variable) - type of renderer that received the event - -ida_kernwin.view_mouse_event_t.state (variable) - contains information about what buttons are CURRENTLY pressed on the keyboard - and mouse. view_mouse_event_t instances created in functions like - mouseReleaseEvent() won't contain any information about the mouse, because it - has been released. - -ida_kernwin.view_mouse_event_t.x (variable) - screen x coordinate - -ida_kernwin.view_mouse_event_t.y (variable) - screen y coordinate - -ida_kernwin.view_mouse_moved (variable) - The mouse moved on the view - -ida_kernwin.view_mouse_over (variable) - The user moved the mouse over (or out of) a node or an edge. This is only - relevant in a graph view. - -ida_kernwin.view_switched (variable) - A view's renderer has changed. - -ida_kernwin.warning (function) - 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_lines (module) - High level functions that deal with the generation of the disassembled text - lines. - - This file also contains definitions for the syntax highlighting. - - Finally there are functions that deal with anterior/posterior user-defined - lines. - -ida_lines.COLOR_ADDR (variable) - hidden address marks. the address is represented as 8digit hex number: 01234567. - it doesn't have COLOR_OFF pair. NB: for 64-bit IDA, the address is 16digit. - -ida_lines.COLOR_ADDR_SIZE (variable) - Size of a tagged address (see COLOR_ADDR) - -ida_lines.COLOR_ALTOP (variable) - Alternative operand. - -ida_lines.COLOR_ASMDIR (variable) - Assembler directive. - -ida_lines.COLOR_AUTOCMT (variable) - Automatic comment. - -ida_lines.COLOR_BG_MAX (variable) - Max color number. - -ida_lines.COLOR_BINPREF (variable) - Binary line prefix bytes. - -ida_lines.COLOR_CHAR (variable) - Char constant in instruction. - -ida_lines.COLOR_CNAME (variable) - Regular code name. - -ida_lines.COLOR_CODE (variable) - Single instruction. - -ida_lines.COLOR_CODNAME (variable) - Dummy code name. - -ida_lines.COLOR_COLLAPSED (variable) - Collapsed line. - -ida_lines.COLOR_CREF (variable) - Code reference. - -ida_lines.COLOR_CREFTAIL (variable) - Code reference to tail byte. - -ida_lines.COLOR_CURITEM (variable) - Current item. - -ida_lines.COLOR_CURLINE (variable) - Current line. - -ida_lines.COLOR_DATA (variable) - Data bytes. - -ida_lines.COLOR_DATNAME (variable) - Dummy Data Name. - -ida_lines.COLOR_DCHAR (variable) - Char constant in data directive. - -ida_lines.COLOR_DEFAULT (variable) - Default. - -ida_lines.COLOR_DEMNAME (variable) - Demangled Name. - -ida_lines.COLOR_DNAME (variable) - Regular Data Name. - -ida_lines.COLOR_DNUM (variable) - Numeric constant in data directive. - -ida_lines.COLOR_DREF (variable) - Data reference. - -ida_lines.COLOR_DREFTAIL (variable) - Data reference to tail byte. - -ida_lines.COLOR_DSTR (variable) - String constant in data directive. - -ida_lines.COLOR_ERROR (variable) - Error or problem. - -ida_lines.COLOR_ESC (variable) - Escape character (Quote next character). This is needed to output '\1' and '\2' - characters. - -ida_lines.COLOR_EXTERN (variable) - External name definition segment. - -ida_lines.COLOR_EXTRA (variable) - Extra line. - -ida_lines.COLOR_FG_MAX (variable) - Max color number. - -ida_lines.COLOR_HIDLINE (variable) - Hidden line. - -ida_lines.COLOR_HIDNAME (variable) - Hidden name. - -ida_lines.COLOR_IMPNAME (variable) - Imported name. - -ida_lines.COLOR_INSN (variable) - Instruction. - -ida_lines.COLOR_INV (variable) - 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_KEYWORD (variable) - Keywords. - -ida_lines.COLOR_LIBFUNC (variable) - Library function. - -ida_lines.COLOR_LIBNAME (variable) - Library function name. - -ida_lines.COLOR_LOCNAME (variable) - Local variable name. - -ida_lines.COLOR_LUMFUNC (variable) - Lumina function. - -ida_lines.COLOR_LUMINA (variable) - Lumina-related, only for the navigation band. - -ida_lines.COLOR_MACRO (variable) - Macro. - -ida_lines.COLOR_NUMBER (variable) - Numeric constant in instruction. - -ida_lines.COLOR_OFF (variable) - Escape character (OFF). Followed by a color code (color_t). - -ida_lines.COLOR_ON (variable) - Escape character (ON). Followed by a color code (color_t). - -ida_lines.COLOR_OPND1 (variable) - Instruction operand 1. - -ida_lines.COLOR_OPND2 (variable) - Instruction operand 2. - -ida_lines.COLOR_OPND3 (variable) - Instruction operand 3. - -ida_lines.COLOR_OPND4 (variable) - Instruction operand 4. - -ida_lines.COLOR_OPND5 (variable) - Instruction operand 5. - -ida_lines.COLOR_OPND6 (variable) - Instruction operand 6. - -ida_lines.COLOR_OPND7 (variable) - Instruction operand 7. - -ida_lines.COLOR_OPND8 (variable) - Instruction operand 8. - -ida_lines.COLOR_PREFIX (variable) - Line prefix. - -ida_lines.COLOR_REG (variable) - Register name. - -ida_lines.COLOR_REGCMT (variable) - Regular comment. - -ida_lines.COLOR_REGFUNC (variable) - Regular function. - -ida_lines.COLOR_RESERVED1 (variable) - This tag is reserved for internal IDA use. - -ida_lines.COLOR_RPTCMT (variable) - Repeatable comment (comment defined somewhere else) - -ida_lines.COLOR_SEGNAME (variable) - Segment name. - -ida_lines.COLOR_SELECTED (variable) - Selected. - -ida_lines.COLOR_STRING (variable) - String constant in instruction. - -ida_lines.COLOR_SYMBOL (variable) - Punctuation. - -ida_lines.COLOR_UNAME (variable) - Regular unknown name. - -ida_lines.COLOR_UNKNAME (variable) - Dummy unknown name. - -ida_lines.COLOR_UNKNOWN (variable) - Unexplored byte. - -ida_lines.COLOR_VOIDOP (variable) - Void operand. - -ida_lines.COLSTR (function) - Utility function to create a colored line - @param str: The string - @param tag: Color tag constant. One of SCOLOR_XXXX - -ida_lines.SCOLOR_ADDR (variable) - Hidden address mark. - -ida_lines.SCOLOR_ALTOP (variable) - Alternative operand. - -ida_lines.SCOLOR_ASMDIR (variable) - Assembler directive. - -ida_lines.SCOLOR_AUTOCMT (variable) - Automatic comment. - -ida_lines.SCOLOR_BINPREF (variable) - Binary line prefix bytes. - -ida_lines.SCOLOR_CHAR (variable) - Char constant in instruction. - -ida_lines.SCOLOR_CNAME (variable) - Regular code name. - -ida_lines.SCOLOR_CODNAME (variable) - Dummy code name. - -ida_lines.SCOLOR_COLLAPSED (variable) - Collapsed line. - -ida_lines.SCOLOR_CREF (variable) - Code reference. - -ida_lines.SCOLOR_CREFTAIL (variable) - Code reference to tail byte. - -ida_lines.SCOLOR_DATNAME (variable) - Dummy Data Name. - -ida_lines.SCOLOR_DCHAR (variable) - Char constant in data directive. - -ida_lines.SCOLOR_DEFAULT (variable) - Default. - -ida_lines.SCOLOR_DEMNAME (variable) - Demangled Name. - -ida_lines.SCOLOR_DNAME (variable) - Regular Data Name. - -ida_lines.SCOLOR_DNUM (variable) - Numeric constant in data directive. - -ida_lines.SCOLOR_DREF (variable) - Data reference. - -ida_lines.SCOLOR_DREFTAIL (variable) - Data reference to tail byte. - -ida_lines.SCOLOR_DSTR (variable) - String constant in data directive. - -ida_lines.SCOLOR_ERROR (variable) - Error or problem. - -ida_lines.SCOLOR_ESC (variable) - Escape character (Quote next character) - -ida_lines.SCOLOR_EXTRA (variable) - Extra line. - -ida_lines.SCOLOR_HIDNAME (variable) - Hidden name. - -ida_lines.SCOLOR_IMPNAME (variable) - Imported name. - -ida_lines.SCOLOR_INSN (variable) - Instruction. - -ida_lines.SCOLOR_INV (variable) - Escape character (Inverse colors) - -ida_lines.SCOLOR_KEYWORD (variable) - Keywords. - -ida_lines.SCOLOR_LIBNAME (variable) - Library function name. - -ida_lines.SCOLOR_LOCNAME (variable) - Local variable name. - -ida_lines.SCOLOR_MACRO (variable) - Macro. - -ida_lines.SCOLOR_NUMBER (variable) - Numeric constant in instruction. - -ida_lines.SCOLOR_OFF (variable) - Escape character (OFF) - -ida_lines.SCOLOR_ON (variable) - Escape character (ON) - -ida_lines.SCOLOR_PREFIX (variable) - Line prefix. - -ida_lines.SCOLOR_REG (variable) - Register name. - -ida_lines.SCOLOR_REGCMT (variable) - Regular comment. - -ida_lines.SCOLOR_RPTCMT (variable) - Repeatable comment (defined not here) - -ida_lines.SCOLOR_SEGNAME (variable) - Segment name. - -ida_lines.SCOLOR_STRING (variable) - String constant in instruction. - -ida_lines.SCOLOR_SYMBOL (variable) - Punctuation. - -ida_lines.SCOLOR_UNAME (variable) - Regular unknown name. - -ida_lines.SCOLOR_UNKNAME (variable) - Dummy unknown name. - -ida_lines.SCOLOR_VOIDOP (variable) - Void operand. - -ida_lines.add_extra_cmt (function) - add_extra_cmt(ea, isprev, format) -> bool - Add anterior/posterior comment line(s). - - @param ea: (C++: ea_t) linear address - @param isprev: (C++: bool) do we add anterior lines? (0-no, posterior) - @param format: (C++: const char *) 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. - @return: true if success - -ida_lines.add_extra_line (function) - add_extra_line(ea, isprev, format) -> bool - Add anterior/posterior non-comment line(s). - - @param ea: (C++: ea_t) linear address - @param isprev: (C++: bool) do we add anterior lines? (0-no, posterior) - @param format: (C++: const char *) printf() style format string. may contain \n to denote new lines. - @return: true if success - -ida_lines.add_pgm_cmt (function) - add_pgm_cmt(format) -> bool - Add anterior comment line(s) at the start of program. - - @param format: (C++: const char *) 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. - @return: true if success - -ida_lines.add_sourcefile (function) - 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: (C++: ea_t) linear address of start of the address range - @param ea2: (C++: ea_t) linear address of end of the address range (excluded) - @param filename: (C++: const char *) name of source file. - @return: success - -ida_lines.calc_bg_color (function) - 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 (function) - 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 (function) - create_encoding_helper(encidx=-1, nr=nr_once) -> encoder_t * - - @param encidx: int - @param nr: enum encoder_t::notify_recerr_t - -ida_lines.del_extra_cmt (function) - del_extra_cmt(ea, what) - - @param ea: ea_t - @param what: int - -ida_lines.del_sourcefile (function) - del_sourcefile(ea) -> bool - Delete information about the source file. - - @param ea: (C++: ea_t) linear address - @return: success - -ida_lines.delete_extra_cmts (function) - delete_extra_cmts(ea, what) - - @param ea: ea_t - @param what: int - -ida_lines.generate_disasm_line (function) - generate_disasm_line(ea, flags=0) -> str - - @param ea: ea_t - @param flags: int - -ida_lines.generate_disassembly (function) - generate_disassembly(ea, max_lines, as_stack, notags) -> (int, [str, ...]) - 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 - @param notags: bool - @return: - None on failure - - tuple(most_important_line_number, list(lines)) : Returns a tuple containing - the most important line number and a list of generated lines - -ida_lines.get_extra_cmt (function) - get_extra_cmt(ea, what) -> ssize_t - - @param ea: ea_t - @param what: int - -ida_lines.get_first_free_extra_cmtidx (function) - get_first_free_extra_cmtidx(ea, start) -> int - - @param ea: ea_t - @param start: int - -ida_lines.get_sourcefile (function) - get_sourcefile(ea, bounds=None) -> char const * - Get name of source file occupying the given address. - - @param ea: (C++: ea_t) linear address - @param bounds: (C++: range_t *) pointer to the output buffer with the address range for the - current file. May be nullptr. - @return: nullptr if source file information is not found, otherwise returns - pointer to file name - -ida_lines.install_user_defined_prefix (function) - install_user_defined_prefix(prefix_len, udp, owner) -> bool - User-defined line-prefixes are displayed just after the autogenerated line - prefixes in the disassembly listing. There is no need to call this function - explicitly. Use the user_defined_prefix_t class. - - @param prefix_len: (C++: size_t) prefixed length. if 0, then uninstall UDP - @param udp: (C++: struct user_defined_prefix_t *) object to generate user-defined prefix - @param owner: (C++: const void *) pointer to the plugin_t that owns UDP if non-nullptr, then the - object will be uninstalled and destroyed when the plugin gets - unloaded - -ida_lines.requires_color_esc (function) - Checks if the given character requires escaping - Is the given char a color escape character? - -ida_lines.set_user_defined_prefix (function) - set_user_defined_prefix(width, pycb) -> bool - Deprecated. Please use install_user_defined_prefix() instead - - @param width: size_t - @param pycb: PyObject * - -ida_lines.tag_addr (function) - tag_addr(ea) -> PyObject * - Insert an address mark into a string. - - @param ea: (C++: ea_t) address to include - -ida_lines.tag_advance (function) - tag_advance(line, cnt) -> int - Move pointer to a 'line' to 'cnt' positions right. Take into account escape - sequences. - - @param line: (C++: const char *) pointer to string - @param cnt: (C++: int) number of positions to move right - @return: moved pointer - -ida_lines.tag_remove (function) - tag_remove(nonnul_instr) -> str - - @param nonnul_instr: char const * - -ida_lines.tag_skipcode (function) - 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 *) char const * - @return: moved pointer - -ida_lines.tag_skipcodes (function) - tag_skipcodes(line) -> int - Move the pointer past all color codes. - - @param line: (C++: const char *) can't be nullptr - @return: moved pointer, can't be nullptr - -ida_lines.tag_strlen (function) - 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 *) char const * - @return: the number of codepoints in the line, or -1 on error - -ida_lines.update_extra_cmt (function) - update_extra_cmt(ea, what, str) - - @param ea: ea_t - @param what: int - @param str: char const * - -ida_lines.user_defined_prefix_t (class) - Proxy of C++ user_defined_prefix_t class. - -ida_lines.user_defined_prefix_t.__disown__ (method) - -ida_lines.user_defined_prefix_t.__init__ (method) - __init__(self, prefix_len, owner) -> user_defined_prefix_t - - @param prefix_len: size_t - @param owner: void const * - -ida_lines.user_defined_prefix_t.get_user_defined_prefix (method) - get_user_defined_prefix(self, ea, insn, lnnum, indent, line) - This callback must be overridden by the derived class. - - @param ea: (C++: ea_t) the current address - @param insn: (C++: const class insn_t &) the current instruction. if the current item is not an instruction, - then insn.itype is zero. - @param lnnum: (C++: int) number of the current line (each address may have several listing - lines for it). 0 means the very first line for the current - address. - @param indent: (C++: int) see explanations for gen_printf() - @param line: (C++: const char *) the line to be generated. the line usually contains color tags. - this argument can be examined to decide whether to generate the - prefix. - -ida_loader (module) - Definitions of IDP, LDR, PLUGIN module interfaces. - - This file also contains: - * functions to load files into the database - * functions to generate output files - * high level functions to work with the database (open, save, close) - - The LDR interface consists of one structure: loader_t - The IDP interface consists of one structure: processor_t - The PLUGIN interface consists of one structure: plugin_t - - Modules can't use standard FILE* functions. They must use functions from - <fpro.h> - - Modules can't use standard memory allocation functions. They must use functions - from <pro.h> - - The exported entry #1 in the module should point to the the appropriate - structure. (loader_t for LDR module, for example) - -ida_loader.ACCEPT_ARCHIVE (variable) - Specify that a file format is served by archive loader See loader_t::accept_file - -ida_loader.ACCEPT_CONTINUE (variable) - Specify that the function must be called another time See loader_t::accept_file - -ida_loader.ACCEPT_FIRST (variable) - Specify that a file format should be place first in "load file" dialog box. See - loader_t::accept_file - -ida_loader.DBFL_BAK (variable) - create backup file (if !DBFL_KILL) - -ida_loader.DBFL_COMP (variable) - collect garbage - -ida_loader.DBFL_KILL (variable) - delete unpacked database - -ida_loader.DBFL_TEMP (variable) - temporary database - -ida_loader.FILEREG_NOTPATCHABLE (variable) - the data is kept in some encoded form in the file. - -ida_loader.FILEREG_PATCHABLE (variable) - means that the input file may be patched (i.e. no compression, no iterated data, - etc) - -ida_loader.GENFLG_ASMINC (variable) - OFILE_ASM,OFILE_LST: gen information only about types - -ida_loader.GENFLG_ASMTYPE (variable) - OFILE_ASM,OFILE_LST: gen information about types too - -ida_loader.GENFLG_GENHTML (variable) - OFILE_ASM,OFILE_LST: generate html (ui_genfile_callback will be used) - -ida_loader.LDRF_RELOAD (variable) - loader recognizes NEF_RELOAD flag - -ida_loader.LDRF_REQ_PROC (variable) - 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 (variable) - Maximum database snapshot description length. - -ida_loader.NEF_CODE (variable) - for load_binary_file(): load as a code segment - -ida_loader.NEF_FILL (variable) - Fill segment gaps. - -ida_loader.NEF_FIRST (variable) - This is the first file loaded into the database. - -ida_loader.NEF_FLAT (variable) - Autocreate FLAT group (PE) - -ida_loader.NEF_IMPS (variable) - Create import segment. - -ida_loader.NEF_LALL (variable) - Load all segments without questions. - -ida_loader.NEF_LOPT (variable) - Display additional loader options dialog. - -ida_loader.NEF_MAN (variable) - Manual load. - -ida_loader.NEF_MINI (variable) - Create mini database (do not copy segment bytes from the input file; use only - the file header metadata) - -ida_loader.NEF_NAME (variable) - Rename entries. - -ida_loader.NEF_RELOAD (variable) - reload the file at the same place: - * don't create segments - * don't create fixup info - * don't import segments - * etc. - - Load only the bytes into the base. A loader should have the LDRF_RELOAD bit set. - -ida_loader.NEF_RSCS (variable) - Load resources. - -ida_loader.NEF_SEGS (variable) - Create segments. - -ida_loader.OFILE_ASM (variable) - Assembly. - -ida_loader.OFILE_DIF (variable) - Difference. - -ida_loader.OFILE_EXE (variable) - Executable file. - -ida_loader.OFILE_IDC (variable) - IDC file. - -ida_loader.OFILE_LST (variable) - Disassembly listing. - -ida_loader.OFILE_MAP (variable) - MAP file. - -ida_loader.PATH_TYPE_CMD (variable) - full path to the file specified in the command line - -ida_loader.PATH_TYPE_ID0 (variable) - full path of ID0 file - -ida_loader.PATH_TYPE_IDB (variable) - full path of IDB file - -ida_loader.PLUGIN_DLL (variable) - Pattern to find plugin files. - -ida_loader.SSF_AUTOMATIC (variable) - automatic snapshot - -ida_loader.SSUF_DESC (variable) - Update the description. - -ida_loader.SSUF_FLAGS (variable) - Update the flags. - -ida_loader.SSUF_PATH (variable) - Update the path. - -ida_loader.base2file (function) - base2file(fp, pos, ea1, ea2) -> int - Unload database to a binary file. This function works for wide byte processors - too. - - @param fp: (C++: FILE *) pointer to file - @param pos: (C++: qoff64_t) position in the file - @param ea1: (C++: ea_t) ,ea2: range of source linear addresses - @param ea2: (C++: ea_t) - @return: 1-ok(always), write error leads to immediate exit - -ida_loader.build_snapshot_tree (function) - build_snapshot_tree(root) -> bool - Build the snapshot tree. - - @param root: (C++: snapshot_t *) snapshot root that will contain the snapshot tree elements. - @return: success - -ida_loader.clr_database_flag (function) - clr_database_flag(dbfl) - - @param dbfl: uint32 - -ida_loader.extract_module_from_archive (function) - extract_module_from_archive(fname, is_remote=False) -> (NoneType, NoneType), (str, str) - 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 filename: (C++: char *) in: input file. out: name of the selected module. - @param is_remote: (C++: bool) is the input file remote? - @retval true: ok - @retval false: something bad happened (error message has been displayed to the - user) - -ida_loader.file2base (function) - 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: (C++: linput_t *) pointer of input source - @param pos: (C++: qoff64_t) position in the file - @param ea1: (C++: ea_t) ,ea2: range of destination linear addresses - @param patchable: (C++: int) should the kernel remember correspondence of file offsets to - linear addresses. - @retval 1: ok - @retval 0: read error, a warning is displayed - @note: The storage type of the specified range will be changed to STT_VA. - @param patchable: (C++: int) should the kernel remember correspondence of file offsets to - linear addresses. - @retval 1: ok - @retval 0: read error, a warning is displayed - @note: The storage type of the specified range will be changed to STT_VA. - -ida_loader.find_plugin (function) - find_plugin(name, load_if_needed=False) -> plugin_t * - Find a user-defined plugin and optionally load it. - - @param name: (C++: const char *) short plugin name without path and extension, or absolute path to - the file name - @param load_if_needed: (C++: bool) if the plugin is not present in the memory, try to load - it - @return: pointer to plugin description block - -ida_loader.flush_buffers (function) - flush_buffers() -> int - Flush buffers to the disk. - -ida_loader.gen_exe_file (function) - 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 == nullptr then return: - * 1: can generate an executable file - * 0: can't generate an executable file - @retval 1: ok - @retval 0: failed - -ida_loader.gen_file (function) - gen_file(otype, fp, ea1, ea2, flags) -> int - Generate an output file. - - @param otype: (C++: ofile_type_t) type of output file. - @param fp: (C++: FILE *) the output file handle - @param ea1: (C++: ea_t) start address. For some file types this argument is ignored - @param ea2: (C++: ea_t) end address. For some file types this argument is ignored as usual - in ida, the end address of the range is not included - @param flags: (C++: int) Generate file flagsOFILE_EXE: - @retval 0: can't generate exe file - @retval 1: ok - @return: number of the generated lines. -1 if an error occurred - -ida_loader.get_basic_file_type (function) - 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 (function) - get_elf_debug_file_directory() -> char const * - Get the value of the ELF_DEBUG_FILE_DIRECTORY configuration directive. - -ida_loader.get_file_type_name (function) - get_file_type_name() -> str - Get name of the current file type. The current file type is kept in - idainfo::filetype. - - @return: size of answer, this function always succeeds - -ida_loader.get_fileregion_ea (function) - 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 (function) - 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 (function) - get_path(pt) -> char const * - Get the file path - - @param pt: (C++: path_type_t) file path type Types of the file pathes - @return: file path, never returns nullptr - -ida_loader.get_plugin_options (function) - 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 nullptr if there we no options specified - - @param plugin: (C++: const char *) char const * - -ida_loader.idp_desc_t (class) - Proxy of C++ idp_desc_t class. - -ida_loader.idp_desc_t.__init__ (method) - __init__(self) -> idp_desc_t - -ida_loader.idp_desc_t.checked (variable) - internal, for cache management - -ida_loader.idp_desc_t.family (variable) - processor's family - -ida_loader.idp_desc_t.is_script (variable) - the processor module is a script - -ida_loader.idp_desc_t.mtime (variable) - time of last modification - -ida_loader.idp_desc_t.names (variable) - processor names - -ida_loader.idp_desc_t.path (variable) - module file name - -ida_loader.idp_name_t (class) - Proxy of C++ idp_name_t class. - -ida_loader.idp_name_t.__init__ (method) - __init__(self) -> idp_name_t - -ida_loader.idp_name_t.hidden (variable) - is hidden - -ida_loader.idp_name_t.lname (variable) - long processor name - -ida_loader.idp_name_t.sname (variable) - short processor name - -ida_loader.is_database_flag (function) - is_database_flag(dbfl) -> bool - Get the current database flag - - @param dbfl: (C++: uint32) flag Database flags - @return: the state of the flag (set or cleared) - -ida_loader.is_trusted_idb (function) - is_trusted_idb() -> bool - Is the database considered as trusted? - -ida_loader.load_and_run_plugin (function) - load_and_run_plugin(name, arg) -> bool - Load & run a plugin. - - @param name: (C++: const char *) char const * - @param arg: (C++: size_t) - -ida_loader.load_binary_file (function) - 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: (C++: const char *) the name of input file as is (if the input file is from - library, then this is the name from the library) - @param li: (C++: linput_t *) loader input source - @param _neflags: (C++: ushort) Load file flags. For the first file, the flag NEF_FIRST must be - set. - @param fileoff: (C++: qoff64_t) Offset in the input file - @param basepara: (C++: ea_t) Load address in paragraphs - @param binoff: (C++: ea_t) Load offset (load_address=(basepara<<4)+binoff) - @param nbytes: (C++: uint64) Number of bytes to load from the file. - * 0: up to the end of the file - @retval true: ok - @retval false: failed (couldn't open the file) - -ida_loader.load_ids_module (function) - 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: (C++: char *) name of file to apply - @retval 1: ok - @retval 0: some error (a message is displayed). if the ids file does not exist, - no message is displayed - -ida_loader.load_plugin (function) - load_plugin(name) -> PyCapsule or None - Loads a plugin - - @param name: char const * - @return: - None if plugin could not be loaded - - An opaque object representing the loaded plugin - -ida_loader.loader_t (class) - Proxy of C++ loader_t class. - -ida_loader.loader_t.__init__ (method) - __init__(self) -> loader_t - -ida_loader.loader_t.flags (variable) - Loader flags - -ida_loader.loader_t.version (variable) - api version, should be IDP_INTERFACE_VERSION - -ida_loader.mem2base (function) - mem2base(py_mem, ea, fpos=-1) -> int - Load database from the memory. - - @param py_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 - -ida_loader.plugin_info_t (class) - Proxy of C++ plugin_info_t class. - -ida_loader.plugin_info_t.__init__ (method) - __init__(self) -> plugin_info_t - -ida_loader.plugin_info_t.arg (variable) - argument used to call the plugin - -ida_loader.plugin_info_t.comment (variable) - a copy of plugin_t::comment - -ida_loader.plugin_info_t.entry (variable) - pointer to the plugin if it is already loaded - -ida_loader.plugin_info_t.flags (variable) - a copy of plugin_t::flags - -ida_loader.plugin_info_t.hotkey (variable) - current hotkey to run the plugin - -ida_loader.plugin_info_t.name (variable) - short name of the plugin it will appear in the menu - -ida_loader.plugin_info_t.next (variable) - next plugin information - -ida_loader.plugin_info_t.org_hotkey (variable) - original hotkey to run the plugin - -ida_loader.plugin_info_t.org_name (variable) - original short name of the plugin - -ida_loader.plugin_info_t.path (variable) - full path to the plugin - -ida_loader.process_archive (function) - 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 'loader' is a pointer - to load_info_t structure. - - @param temp_file: (C++: qstring *) - @param li: (C++: linput_t *) - @param module_name: (C++: qstring *) - @param neflags: (C++: ushort *) - @param defmember: (C++: const char *) char const * - @param loader: (C++: const load_info_t *) load_info_t const * - -ida_loader.qvector_snapshotvec_t (class) - Proxy of C++ qvector< snapshot_t * > class. - -ida_loader.qvector_snapshotvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< snapshot_t * > const & - -ida_loader.qvector_snapshotvec_t.__getitem__ (method) - __getitem__(self, i) -> snapshot_t - - @param i: size_t - -ida_loader.qvector_snapshotvec_t.__init__ (method) - __init__(self) -> qvector_snapshotvec_t - __init__(self, x) -> qvector_snapshotvec_t - - @param x: qvector< snapshot_t * > const & - -ida_loader.qvector_snapshotvec_t.__len__ (method) - __len__(self) -> size_t - -ida_loader.qvector_snapshotvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< snapshot_t * > const & - -ida_loader.qvector_snapshotvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: snapshot_t *const & - -ida_loader.qvector_snapshotvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: snapshot_t *const & - -ida_loader.qvector_snapshotvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: snapshot_t *const & - -ida_loader.qvector_snapshotvec_t.at (method) - at(self, _idx) -> snapshot_t - - @param _idx: size_t - -ida_loader.qvector_snapshotvec_t.begin (method) - begin(self) -> qvector< snapshot_t * >::iterator - begin(self) -> qvector< snapshot_t * >::const_iterator - -ida_loader.qvector_snapshotvec_t.capacity (method) - capacity(self) -> size_t - -ida_loader.qvector_snapshotvec_t.clear (method) - clear(self) - -ida_loader.qvector_snapshotvec_t.empty (method) - empty(self) -> bool - -ida_loader.qvector_snapshotvec_t.end (method) - end(self) -> qvector< snapshot_t * >::iterator - end(self) -> qvector< snapshot_t * >::const_iterator - -ida_loader.qvector_snapshotvec_t.erase (method) - erase(self, it) -> qvector< snapshot_t * >::iterator - - @param it: qvector< snapshot_t * >::iterator - - erase(self, first, last) -> qvector< snapshot_t * >::iterator - - @param first: qvector< snapshot_t * >::iterator - @param last: qvector< snapshot_t * >::iterator - -ida_loader.qvector_snapshotvec_t.extract (method) - extract(self) -> snapshot_t ** - -ida_loader.qvector_snapshotvec_t.find (method) - find(self, x) -> qvector< snapshot_t * >::iterator - - @param x: snapshot_t *const & - - find(self, x) -> qvector< snapshot_t * >::const_iterator - - @param x: snapshot_t *const & - -ida_loader.qvector_snapshotvec_t.has (method) - has(self, x) -> bool - - @param x: snapshot_t *const & - -ida_loader.qvector_snapshotvec_t.inject (method) - inject(self, s, len) - - @param s: snapshot_t ** - @param len: size_t - -ida_loader.qvector_snapshotvec_t.insert (method) - insert(self, it, x) -> qvector< snapshot_t * >::iterator - - @param it: qvector< snapshot_t * >::iterator - @param x: snapshot_t *const & - -ida_loader.qvector_snapshotvec_t.pop_back (method) - pop_back(self) - -ida_loader.qvector_snapshotvec_t.push_back (method) - push_back(self, x) - - @param x: snapshot_t *const & - - push_back(self) -> snapshot_t *& - -ida_loader.qvector_snapshotvec_t.qclear (method) - qclear(self) - -ida_loader.qvector_snapshotvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_loader.qvector_snapshotvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: snapshot_t *const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_loader.qvector_snapshotvec_t.size (method) - size(self) -> size_t - -ida_loader.qvector_snapshotvec_t.swap (method) - swap(self, r) - - @param r: qvector< snapshot_t * > & - -ida_loader.qvector_snapshotvec_t.truncate (method) - truncate(self) - -ida_loader.reload_file (function) - 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: (C++: const char *) name of the input file. if file == nullptr then returns: - * 1: can reload the input file - * 0: can't reload the input file - @param is_remote: (C++: bool) is the file located on a remote computer with the debugger - server? - @return: success - -ida_loader.run_plugin (function) - run_plugin(plg, arg) -> bool - Runs a plugin - - @param plg: A plugin object (returned by load_plugin()) - @param arg: size_t - @return: Boolean - -ida_loader.save_database (function) - save_database(outfile, flags, root=None, attr=None) -> bool - Save current database using a new file name. - - @param outfile: (C++: const char *) output database file name - @param flags: (C++: uint32) Database flags - @param root: (C++: const snapshot_t *) optional: snapshot tree root. - @param attr: (C++: const snapshot_t *) optional: snapshot attributes - @note: when both root and attr are not nullptr then the snapshot attributes will - be updated, otherwise the snapshot attributes will be inherited from the - current database. - @return: success - -ida_loader.set_database_flag (function) - set_database_flag(dbfl, cnd=True) - Set or clear database flag - - @param dbfl: (C++: uint32) flag Database flags - @param cnd: (C++: bool) set if true or clear flag otherwise - -ida_loader.set_import_name (function) - set_import_name(modnode, ea, name) - Set information about the named import entry. This function performs - 'modnode.supset_ea(ea, name);' - - @param modnode: (C++: uval_t) node with information about imported entries - @param ea: (C++: ea_t) linear address of the entry - @param name: (C++: const char *) name of the entry - -ida_loader.set_import_ordinal (function) - set_import_ordinal(modnode, ea, ord) - Set information about the ordinal import entry. This function performs - 'modnode.altset(ord, ea2node(ea));' - - @param modnode: (C++: uval_t) node with information about imported entries - @param ea: (C++: ea_t) linear address of the entry - @param ord: (C++: uval_t) ordinal number of the entry - -ida_loader.set_path (function) - set_path(pt, path) - Set the file path - - @param pt: (C++: path_type_t) file path type Types of the file pathes - @param path: (C++: const char *) new file path, use nullptr or empty string to clear the file path - -ida_loader.snapshot_t (class) - Proxy of C++ snapshot_t class. - -ida_loader.snapshot_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: snapshot_t const & - -ida_loader.snapshot_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: snapshot_t const & - -ida_loader.snapshot_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: snapshot_t const & - -ida_loader.snapshot_t.__init__ (method) - __init__(self) -> snapshot_t - -ida_loader.snapshot_t.__le__ (method) - __le__(self, r) -> bool - - @param r: snapshot_t const & - -ida_loader.snapshot_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: snapshot_t const & - -ida_loader.snapshot_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: snapshot_t const & - -ida_loader.snapshot_t.children (variable) - snapshot children - -ida_loader.snapshot_t.clear (method) - clear(self) - -ida_loader.snapshot_t.desc (variable) - snapshot description - -ida_loader.snapshot_t.filename (variable) - snapshot file name - -ida_loader.snapshot_t.flags (variable) - Snapshot flags - -ida_loader.snapshot_t.id (variable) - snapshot ID. This value is computed using qgettimeofday() - -ida_moves (module) - - -ida_moves.bookmarks_t (class) - Proxy of C++ bookmarks_t class. - -ida_moves.bookmarks_t.__getitem__ (method) - Get the n-th bookmark for the widget. - -ida_moves.bookmarks_t.__init__ (method) - -ida_moves.bookmarks_t.__init__ (method) - Build an object suitable for iterating bookmarks - associated with the specified widget. - - Note: all ea_t-based widgets (e.g., "IDA View-*", - "Pseudocode-*", "Hex View-*", ...) share a common storage, - so bookmarks can be re-used interchangeably between them - -ida_moves.bookmarks_t.__iter__ (method) - Iterate on bookmarks present for the widget. - -ida_moves.bookmarks_t.__len__ (method) - Get the number of bookmarks for the widget. - -ida_moves.bookmarks_t.erase (method) - erase(e, index, ud) -> bool - - @param e: lochist_entry_t const & - @param index: uint32 - @param ud: void * - -ida_moves.bookmarks_t.find_index (method) - find_index(e, ud) -> uint32 - - @param e: lochist_entry_t const & - @param ud: void * - -ida_moves.bookmarks_t.get (method) - get(out, _index, ud) -> PyObject * - - @param out: lochist_entry_t * - @param _index: uint32 - @param ud: void * - -ida_moves.bookmarks_t.get_desc (method) - get_desc(e, index, ud) -> bool - - @param e: lochist_entry_t const & - @param index: uint32 - @param ud: void * - -ida_moves.bookmarks_t.get_dirtree_id (method) - get_dirtree_id(e, ud) -> dirtree_id_t - - @param e: lochist_entry_t const & - @param ud: void * - -ida_moves.bookmarks_t.mark (method) - mark(e, index, title, desc, ud) -> uint32 - - @param e: lochist_entry_t const & - @param index: uint32 - @param title: char const * - @param desc: char const * - @param ud: void * - -ida_moves.bookmarks_t.size (method) - size(e, ud) -> uint32 - - @param e: lochist_entry_t const & - @param ud: void * - -ida_moves.bookmarks_t_erase (function) - bookmarks_t_erase(e, index, ud) -> bool - - @param e: lochist_entry_t const & - @param index: uint32 - @param ud: void * - -ida_moves.bookmarks_t_find_index (function) - bookmarks_t_find_index(e, ud) -> uint32 - - @param e: lochist_entry_t const & - @param ud: void * - -ida_moves.bookmarks_t_get (function) - bookmarks_t_get(out, _index, ud) -> PyObject * - - @param out: lochist_entry_t * - @param _index: uint32 - @param ud: void * - -ida_moves.bookmarks_t_get_desc (function) - bookmarks_t_get_desc(e, index, ud) -> str - - @param e: lochist_entry_t const & - @param index: uint32 - @param ud: void * - -ida_moves.bookmarks_t_get_dirtree_id (function) - bookmarks_t_get_dirtree_id(e, ud) -> dirtree_id_t - - @param e: lochist_entry_t const & - @param ud: void * - -ida_moves.bookmarks_t_mark (function) - bookmarks_t_mark(e, index, title, desc, ud) -> uint32 - - @param e: lochist_entry_t const & - @param index: uint32 - @param title: char const * - @param desc: char const * - @param ud: void * - -ida_moves.bookmarks_t_size (function) - bookmarks_t_size(e, ud) -> uint32 - - @param e: lochist_entry_t const & - @param ud: void * - -ida_moves.graph_location_info_t (class) - Proxy of C++ graph_location_info_t class. - -ida_moves.graph_location_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: graph_location_info_t const & - -ida_moves.graph_location_info_t.__init__ (method) - __init__(self) -> graph_location_info_t - -ida_moves.graph_location_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: graph_location_info_t const & - -ida_moves.lochist_entry_t (class) - Proxy of C++ lochist_entry_t class. - -ida_moves.lochist_entry_t.__init__ (method) - __init__(self) -> lochist_entry_t - __init__(self, p, r) -> lochist_entry_t - - @param p: place_t const * - @param r: renderer_info_t const & - - __init__(self, other) -> lochist_entry_t - - @param other: lochist_entry_t const & - -ida_moves.lochist_entry_t.acquire_place (method) - acquire_place(self, in_p) - - @param in_p: place_t * - -ida_moves.lochist_entry_t.is_valid (method) - is_valid(self) -> bool - -ida_moves.lochist_entry_t.place (method) - place(self) -> place_t - -ida_moves.lochist_entry_t.renderer_info (method) - renderer_info(self) -> renderer_info_t - -ida_moves.lochist_entry_t.set_place (method) - set_place(self, p) - - @param p: place_t const * - -ida_moves.lochist_t (class) - Proxy of C++ lochist_t class. - -ida_moves.lochist_t.__init__ (method) - __init__(self) -> lochist_t - -ida_moves.lochist_t.back (method) - back(self, cnt, try_to_unhide) -> bool - - @param cnt: uint32 - @param try_to_unhide: bool - -ida_moves.lochist_t.clear (method) - clear(self) - -ida_moves.lochist_t.current_index (method) - current_index(self) -> uint32 - -ida_moves.lochist_t.fwd (method) - fwd(self, cnt, try_to_unhide) -> bool - - @param cnt: uint32 - @param try_to_unhide: bool - -ida_moves.lochist_t.get (method) - get(self, out, index) -> bool - - @param out: lochist_entry_t * - @param index: uint32 - -ida_moves.lochist_t.get_current (method) - get_current(self) -> lochist_entry_t - -ida_moves.lochist_t.get_place_id (method) - get_place_id(self) -> int - -ida_moves.lochist_t.get_template_place (method) - get_template_place(self) -> place_t - -ida_moves.lochist_t.init (method) - init(self, stream_name, _defpos, _ud, _flags) -> bool - - @param stream_name: char const * - @param _defpos: place_t const * - @param _ud: void * - @param _flags: uint32 - -ida_moves.lochist_t.is_history_enabled (method) - is_history_enabled(self) -> bool - -ida_moves.lochist_t.jump (method) - jump(self, try_to_unhide, e) - - @param try_to_unhide: bool - @param e: lochist_entry_t const & - -ida_moves.lochist_t.netcode (method) - netcode(self) -> nodeidx_t - -ida_moves.lochist_t.save (method) - save(self) - -ida_moves.lochist_t.seek (method) - seek(self, index, try_to_unhide) -> bool - - @param index: uint32 - @param try_to_unhide: bool - -ida_moves.lochist_t.set (method) - set(self, index, e) - - @param index: uint32 - @param e: lochist_entry_t const & - -ida_moves.lochist_t.set_current (method) - set_current(self, e) - - @param e: lochist_entry_t const & - -ida_moves.lochist_t.size (method) - size(self) -> uint32 - -ida_moves.renderer_info_pos_t (class) - Proxy of C++ renderer_info_pos_t class. - -ida_moves.renderer_info_pos_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: renderer_info_pos_t const & - -ida_moves.renderer_info_pos_t.__init__ (method) - __init__(self) -> renderer_info_pos_t - -ida_moves.renderer_info_pos_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: renderer_info_pos_t const & - -ida_moves.renderer_info_t (class) - Proxy of C++ renderer_info_t class. - -ida_moves.renderer_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: renderer_info_t const & - -ida_moves.renderer_info_t.__init__ (method) - __init__(self) -> renderer_info_t - __init__(self, _rtype, cx, cy) -> renderer_info_t - - @param _rtype: enum tcc_renderer_type_t - @param cx: short - @param cy: short - -ida_moves.renderer_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: renderer_info_t const & - -ida_moves.segm_move_info_t (class) - Proxy of C++ segm_move_info_t class. - -ida_moves.segm_move_info_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: segm_move_info_t const & - -ida_moves.segm_move_info_t.__init__ (method) - __init__(self, _from=0, _to=0, _sz=0) -> segm_move_info_t - - @param _from: ea_t - @param _to: ea_t - @param _sz: size_t - -ida_moves.segm_move_info_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t (class) - Proxy of C++ qvector< segm_move_info_t > class. - -ida_moves.segm_move_info_vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< segm_move_info_t > const & - -ida_moves.segm_move_info_vec_t.__getitem__ (method) - __getitem__(self, i) -> segm_move_info_t - - @param i: size_t - -ida_moves.segm_move_info_vec_t.__init__ (method) - __init__(self) -> segm_move_info_vec_t - __init__(self, x) -> segm_move_info_vec_t - - @param x: qvector< segm_move_info_t > const & - -ida_moves.segm_move_info_vec_t.__len__ (method) - __len__(self) -> size_t - -ida_moves.segm_move_info_vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< segm_move_info_t > const & - -ida_moves.segm_move_info_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t.at (method) - at(self, _idx) -> segm_move_info_t - - @param _idx: size_t - -ida_moves.segm_move_info_vec_t.begin (method) - begin(self) -> segm_move_info_t - -ida_moves.segm_move_info_vec_t.capacity (method) - capacity(self) -> size_t - -ida_moves.segm_move_info_vec_t.clear (method) - clear(self) - -ida_moves.segm_move_info_vec_t.empty (method) - empty(self) -> bool - -ida_moves.segm_move_info_vec_t.end (method) - end(self) -> segm_move_info_t - -ida_moves.segm_move_info_vec_t.erase (method) - erase(self, it) -> segm_move_info_t - - @param it: qvector< segm_move_info_t >::iterator - - erase(self, first, last) -> segm_move_info_t - - @param first: qvector< segm_move_info_t >::iterator - @param last: qvector< segm_move_info_t >::iterator - -ida_moves.segm_move_info_vec_t.extract (method) - extract(self) -> segm_move_info_t - -ida_moves.segm_move_info_vec_t.find (method) - find(self, x) -> segm_move_info_t - - @param x: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t.grow (method) - grow(self, x=segm_move_info_t()) - - @param x: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t.has (method) - has(self, x) -> bool - - @param x: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t.inject (method) - inject(self, s, len) - - @param s: segm_move_info_t * - @param len: size_t - -ida_moves.segm_move_info_vec_t.insert (method) - insert(self, it, x) -> segm_move_info_t - - @param it: qvector< segm_move_info_t >::iterator - @param x: segm_move_info_t const & - -ida_moves.segm_move_info_vec_t.pop_back (method) - pop_back(self) - -ida_moves.segm_move_info_vec_t.push_back (method) - push_back(self, x) - - @param x: segm_move_info_t const & - - push_back(self) -> segm_move_info_t - -ida_moves.segm_move_info_vec_t.qclear (method) - qclear(self) - -ida_moves.segm_move_info_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_moves.segm_move_info_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: segm_move_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_moves.segm_move_info_vec_t.size (method) - size(self) -> size_t - -ida_moves.segm_move_info_vec_t.swap (method) - swap(self, r) - - @param r: qvector< segm_move_info_t > & - -ida_moves.segm_move_info_vec_t.truncate (method) - truncate(self) - -ida_moves.segm_move_infos_t (class) - Proxy of C++ segm_move_infos_t class. - -ida_moves.segm_move_infos_t.__init__ (method) - __init__(self) -> segm_move_infos_t - -ida_moves.segm_move_infos_t.find (method) - find(self, ea) -> segm_move_info_t - - @param ea: ea_t - -ida_nalt (module) - Definitions of various information kept in netnodes. - - Each address in the program has a corresponding netnode: netnode(ea). - - If we have no information about an address, the corresponding netnode is not - created. Otherwise we will create a netnode and save information in it. All - variable length information (names, comments, offset information, etc) is stored - in the netnode. - - Don't forget that some information is already stored in the flags (bytes.hpp) - - @warning: Many of the functions in this file are very low level (they are marked - as low level functions). Use them only if you can't find higher level - function to set/get/del information.netnode. - -ida_nalt.AFL_ALIGNFLOW (variable) - the previous insn was created for alignment purposes only - -ida_nalt.AFL_BNOT0 (variable) - the 1st operand is bitwise negated - -ida_nalt.AFL_BNOT1 (variable) - the 2nd operand is bitwise negated - -ida_nalt.AFL_COLORED (variable) - has user defined instruction color? - -ida_nalt.AFL_FIXEDSPD (variable) - sp delta value is fixed by analysis. should not be modified by modules - -ida_nalt.AFL_HIDDEN (variable) - the item is hidden completely - -ida_nalt.AFL_HR_DETERMINED (variable) - the type is definitely guessed by the decompiler - -ida_nalt.AFL_HR_GUESSED_DATA (variable) - the data type is guessed by the decompiler - -ida_nalt.AFL_HR_GUESSED_FUNC (variable) - the function type is guessed by the decompiler - -ida_nalt.AFL_IDA_GUESSED (variable) - the type is guessed by IDA - -ida_nalt.AFL_LIB (variable) - item from the standard library. low level flag, is used to set FUNC_LIB of - func_t - -ida_nalt.AFL_LINNUM (variable) - has line number info - -ida_nalt.AFL_LNAME (variable) - has local name too (FF_NAME should be set) - -ida_nalt.AFL_LZERO0 (variable) - toggle leading zeroes for the 1st operand - -ida_nalt.AFL_LZERO1 (variable) - toggle leading zeroes for the 2nd operand - -ida_nalt.AFL_MANUAL (variable) - the instruction/data is specified by the user - -ida_nalt.AFL_NOBRD (variable) - the code/data border is hidden - -ida_nalt.AFL_NORET (variable) - 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 (variable) - autoanalysis should not create code here - -ida_nalt.AFL_NOTPROC (variable) - autoanalysis should not create proc here - -ida_nalt.AFL_PUBNAM (variable) - name is public (inter-file linkage) - -ida_nalt.AFL_RETFP (variable) - function returns a floating point value - -ida_nalt.AFL_TERSESTR (variable) - terse structure variable display? - -ida_nalt.AFL_TI (variable) - has typeinfo? (NSUP_TYPEINFO); used only for addresses, not for member_t - -ida_nalt.AFL_TI0 (variable) - has typeinfo for operand 0? (NSUP_OPTYPES) - -ida_nalt.AFL_TI1 (variable) - has typeinfo for operand 1? (NSUP_OPTYPES+1) - -ida_nalt.AFL_TILCMT (variable) - has type comment? (such a comment may be changed by IDA) - -ida_nalt.AFL_TYPE_GUESSED (variable) - who guessed the type information? - -ida_nalt.AFL_USEMODSP (variable) - insn modifes SP and uses the modified value; example: pop [rsp+N] - -ida_nalt.AFL_USERSP (variable) - user-defined SP value - -ida_nalt.AFL_USERTI (variable) - the type information is definitive. (comes from the user or type library) if not - set see AFL_TYPE_GUESSED - -ida_nalt.AFL_WEAKNAM (variable) - name is weak - -ida_nalt.AFL_ZSTROFF (variable) - display struct field name at 0 offset when displaying an offset. example: - offset somestruct.field_0 if this flag is clear, then - offset somestruct - -ida_nalt.AP_ALLOWDUPS (variable) - use 'dup' construct - -ida_nalt.AP_ARRAY (variable) - create as array (this flag is not stored in database) - -ida_nalt.AP_IDXBASEMASK (variable) - mask for number base of the indexes - -ida_nalt.AP_IDXBIN (variable) - display indexes in binary - -ida_nalt.AP_IDXDEC (variable) - display indexes in decimal - -ida_nalt.AP_IDXHEX (variable) - display indexes in hex - -ida_nalt.AP_IDXOCT (variable) - display indexes in octal - -ida_nalt.AP_INDEX (variable) - display array element indexes as comments - -ida_nalt.AP_SIGNED (variable) - treats numbers as signed - -ida_nalt.IDB_DESKTOPS_NODE_NAME (variable) - hash indexed by desktop name with dekstop netnode - -ida_nalt.IDB_DESKTOPS_TAG (variable) - tag to store desktop blob & timestamp - -ida_nalt.MAXSTRUCPATH (variable) - maximal inclusion depth of unions - -ida_nalt.NALT_ABSBASE (variable) - absolute segment location - -ida_nalt.NALT_AFLAGS (variable) - additional flags for an item - -ida_nalt.NALT_ALIGN (variable) - alignment value if the item is FF_ALIGN (should by equal to power of 2) - -ida_nalt.NALT_COLOR (variable) - instruction/data background color - -ida_nalt.NALT_CREF_FROM (variable) - code xref from, idx: source address - -ida_nalt.NALT_CREF_TO (variable) - code xref to, idx: target address - -ida_nalt.NALT_DREF_FROM (variable) - data xref from, idx: source address - -ida_nalt.NALT_DREF_TO (variable) - data xref to, idx: target address - -ida_nalt.NALT_ENUM0 (variable) - enum id for the first operand - -ida_nalt.NALT_ENUM1 (variable) - enum id for the second operand - -ida_nalt.NALT_GR_LAYX (variable) - group layout ptrs, hash: md5 of 'belongs' - -ida_nalt.NALT_LINNUM (variable) - source line number - -ida_nalt.NALT_PURGE (variable) - number of bytes purged from the stack when a function is called indirectly - -ida_nalt.NALT_STRTYPE (variable) - type of string item - -ida_nalt.NALT_STRUCT (variable) - struct id - -ida_nalt.NALT_SWITCH (variable) - switch idiom address (used at jump targets) - -ida_nalt.NSUP_ARGEAS (variable) - instructions that initialize call arguments - -ida_nalt.NSUP_ARRAY (variable) - array parameters - -ida_nalt.NSUP_CMT (variable) - regular comment - -ida_nalt.NSUP_CUSTDT (variable) - custom data type id - -ida_nalt.NSUP_EX_FLAGS (variable) - Extended flags. - -ida_nalt.NSUP_FOP1 (variable) - forced operand 1 - -ida_nalt.NSUP_FOP2 (variable) - forced operand 2 - -ida_nalt.NSUP_FOP3 (variable) - forced operand 3 - -ida_nalt.NSUP_FOP4 (variable) - forced operand 4 - -ida_nalt.NSUP_FOP5 (variable) - forced operand 5 - -ida_nalt.NSUP_FOP6 (variable) - forced operand 6 - -ida_nalt.NSUP_FOP7 (variable) - forced operand 7 - -ida_nalt.NSUP_FOP8 (variable) - forced operand 8 - -ida_nalt.NSUP_FTAILS (variable) - function tails or tail referers values NSUP_FTAILS..NSUP_FTAILS+0x1000 are - reserved - -ida_nalt.NSUP_GROUP (variable) - graph group information values NSUP_GROUP..NSUP_GROUP+0x1000 are reserved - -ida_nalt.NSUP_GR_INFO (variable) - group node info: color, ea, text - -ida_nalt.NSUP_GR_LAYT (variable) - group layouts, idx: layout pointer - -ida_nalt.NSUP_JINFO (variable) - jump table info - -ida_nalt.NSUP_LLABEL (variable) - local labels. values NSUP_LLABEL..NSUP_LLABEL+0x1000 are reserved - -ida_nalt.NSUP_MANUAL (variable) - manual instruction. values NSUP_MANUAL..NSUP_MANUAL+0x1000 are reserved - -ida_nalt.NSUP_OPTYPES (variable) - operand type information. values NSUP_OPTYPES..NSUP_OPTYPES+0x100000 are - reserved - -ida_nalt.NSUP_OREF0 (variable) - outer complex reference information for operand 1 - -ida_nalt.NSUP_OREF1 (variable) - outer complex reference information for operand 2 - -ida_nalt.NSUP_OREF2 (variable) - outer complex reference information for operand 3 - -ida_nalt.NSUP_OREF3 (variable) - outer complex reference information for operand 4 - -ida_nalt.NSUP_OREF4 (variable) - outer complex reference information for operand 5 - -ida_nalt.NSUP_OREF5 (variable) - outer complex reference information for operand 6 - -ida_nalt.NSUP_OREF6 (variable) - outer complex reference information for operand 7 - -ida_nalt.NSUP_OREF7 (variable) - outer complex reference information for operand 8 - -ida_nalt.NSUP_ORIGFMD (variable) - function metadata before lumina information was applied values - NSUP_ORIGFMD..NSUP_ORIGFMD+0x1000 are reserved - -ida_nalt.NSUP_POINTS (variable) - SP change points blob (see funcs.cpp). values NSUP_POINTS..NSUP_POINTS+0x1000 - are reserved - -ida_nalt.NSUP_REF0 (variable) - complex reference information for operand 1 - -ida_nalt.NSUP_REF1 (variable) - complex reference information for operand 2 - -ida_nalt.NSUP_REF2 (variable) - complex reference information for operand 3 - -ida_nalt.NSUP_REF3 (variable) - complex reference information for operand 4 - -ida_nalt.NSUP_REF4 (variable) - complex reference information for operand 5 - -ida_nalt.NSUP_REF5 (variable) - complex reference information for operand 6 - -ida_nalt.NSUP_REF6 (variable) - complex reference information for operand 7 - -ida_nalt.NSUP_REF7 (variable) - complex reference information for operand 8 - -ida_nalt.NSUP_REGARG (variable) - register argument type/name descriptions values NSUP_REGARG..NSUP_REGARG+0x1000 - are reserved - -ida_nalt.NSUP_REGVAR (variable) - register variables. values NSUP_REGVAR..NSUP_REGVAR+0x1000 are reserved - -ida_nalt.NSUP_REPCMT (variable) - repeatable comment - -ida_nalt.NSUP_SEGTRANS (variable) - segment translations - -ida_nalt.NSUP_SWITCH (variable) - switch information - -ida_nalt.NSUP_TYPEINFO (variable) - type information. values NSUP_TYPEINFO..NSUP_TYPEINFO+0x1000 are reserved - -ida_nalt.NSUP_XREFPOS (variable) - saved xref address and type in the xrefs window - -ida_nalt.PATCH_TAG (variable) - Patch netnode tag. - -ida_nalt.REFINFO_CUSTOM (variable) - a custom reference. see custom_refinfo_handler_t. the id of the custom refinfo - is stored under the REFINFO_TYPE mask. - -ida_nalt.REFINFO_NOBASE (variable) - 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_NO_ONES (variable) - an opval of ~0 will be considered invalid - -ida_nalt.REFINFO_NO_ZEROS (variable) - an opval of 0 will be considered invalid - -ida_nalt.REFINFO_PASTEND (variable) - reference past an item; it may point to an nonexistent address; do not destroy - alignment dirs - -ida_nalt.REFINFO_RVAOFF (variable) - based reference (rva); refinfo_t::base will be forced to get_imagebase(); such a - reference is displayed with the asm_t::a_rva keyword - -ida_nalt.REFINFO_SELFREF (variable) - the self-based reference; refinfo_t::base will be forced to the reference - address - -ida_nalt.REFINFO_SIGNEDOP (variable) - the operand value is sign-extended (only supported for REF_OFF8/16/32/64) - -ida_nalt.REFINFO_SUBTRACT (variable) - the reference value is subtracted from the base value instead of (as usual) - being added to it - -ida_nalt.REFINFO_TYPE (variable) - reference type (reftype_t), or custom reference ID if REFINFO_CUSTOM set - -ida_nalt.REF_HIGH16 (variable) - high 16bits of 32bit offset - -ida_nalt.REF_HIGH8 (variable) - high 8bits of 16bit offset - -ida_nalt.REF_LOW16 (variable) - low 16bits of 32bit offset - -ida_nalt.REF_LOW8 (variable) - low 8bits of 16bit offset - -ida_nalt.REF_OFF16 (variable) - 16bit full offset - -ida_nalt.REF_OFF32 (variable) - 32bit full offset - -ida_nalt.REF_OFF64 (variable) - 64bit full offset - -ida_nalt.REF_OFF8 (variable) - 8bit full offset - -ida_nalt.RIDX_ABINAME (variable) - ABI name (processor specific) - -ida_nalt.RIDX_ARCHIVE_PATH (variable) - archive file path - -ida_nalt.RIDX_C_MACROS (variable) - C predefined macros. - -ida_nalt.RIDX_DBG_BINPATHS (variable) - unused (20 indexes) - -ida_nalt.RIDX_DUALOP_GRAPH (variable) - Graph text representation options. - -ida_nalt.RIDX_DUALOP_TEXT (variable) - Text text representation options. - -ida_nalt.RIDX_FILE_FORMAT_NAME (variable) - file format name for loader modules - -ida_nalt.RIDX_GROUPS (variable) - segment group information (see init_groups()) - -ida_nalt.RIDX_H_PATH (variable) - C header path. - -ida_nalt.RIDX_IDA_VERSION (variable) - version of ida which created the database - -ida_nalt.RIDX_INCLUDE (variable) - assembler include file name - -ida_nalt.RIDX_MD5 (variable) - MD5 of the input file. - -ida_nalt.RIDX_NOTEPAD (variable) - notepad blob, occupies 1000 indexes (1MB of text) - -ida_nalt.RIDX_PROBLEMS (variable) - problem lists - -ida_nalt.RIDX_SELECTORS (variable) - 2..63 are for selector_t blob (see init_selectors()) - -ida_nalt.RIDX_SHA256 (variable) - SHA256 of the input file. - -ida_nalt.RIDX_SMALL_IDC (variable) - Instant IDC statements, blob. - -ida_nalt.RIDX_SMALL_IDC_OLD (variable) - Instant IDC statements (obsolete) - -ida_nalt.RIDX_SRCDBG_PATHS (variable) - source debug paths, occupies 20 indexes - -ida_nalt.RIDX_SRCDBG_UNDESIRED (variable) - user-closed source files, occupies 20 indexes - -ida_nalt.RIDX_STR_ENCODINGS (variable) - a list of encodings for the program strings - -ida_nalt.STRENC_DEFAULT (variable) - use default encoding for this type (see get_default_encoding_idx()) - -ida_nalt.STRENC_NONE (variable) - force no-conversion encoding - -ida_nalt.STRTYPE_C (variable) - Zero-terminated 16bit chars. - -ida_nalt.STRTYPE_C_16 (variable) - Zero-terminated 32bit chars. - -ida_nalt.STRTYPE_C_32 (variable) - Pascal-style, one-byte length prefix. - -ida_nalt.STRTYPE_LEN2 (variable) - Pascal-style, 16bit chars, two-byte length prefix. - -ida_nalt.STRTYPE_LEN2_16 (variable) - Pascal-style, 32bit chars, two-byte length prefix. - -ida_nalt.STRTYPE_LEN2_32 (variable) - Pascal-style, four-byte length prefix. - -ida_nalt.STRTYPE_LEN4 (variable) - Pascal-style, 16bit chars, four-byte length prefix. - -ida_nalt.STRTYPE_LEN4_16 (variable) - Pascal-style, 32bit chars, four-byte length prefix. - -ida_nalt.STRTYPE_PASCAL (variable) - Pascal-style, 16bit chars, one-byte length prefix. - -ida_nalt.STRTYPE_PASCAL_16 (variable) - Pascal-style, 32bit chars, one-byte length prefix. - -ida_nalt.STRTYPE_PASCAL_32 (variable) - Pascal-style, two-byte length prefix. - -ida_nalt.STRTYPE_TERMCHR (variable) - C-style string. - -ida_nalt.SWI_CUSTOM (variable) - custom jump table. processor_t::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 (variable) - return in the default case (defjump==BADADDR) - -ida_nalt.SWI_DEF_IN_TBL (variable) - 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) {jump table - size} == {value table size} + 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 (variable) - elbase is present (otherwise the base of the switch segment will be used) - -ida_nalt.SWI_HXNOLOWCASE (variable) - lowcase value should not be used by the decompiler (internal flag) - -ida_nalt.SWI_INDIRECT (variable) - value table elements are used as indexes into the jump table (for sparse - switches) - -ida_nalt.SWI_J32 (variable) - 32-bit jump offsets - -ida_nalt.SWI_JMPINSN (variable) - 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 (variable) - jumptable is inversed. (last entry is for first entry in values table) - -ida_nalt.SWI_JSIZE (variable) - jump offset expansion bit - -ida_nalt.SWI_SELFREL (variable) - jump address is relative to the element not to ELBASE - -ida_nalt.SWI_SEPARATE (variable) - create an array of individual elements (otherwise separate items) - -ida_nalt.SWI_SHIFT_MASK (variable) - use formula (element<<shift) + elbase to find jump targets - -ida_nalt.SWI_SIGNED (variable) - jump table entries are signed - -ida_nalt.SWI_SPARSE (variable) - sparse switch (value table present), otherwise lowcase present - -ida_nalt.SWI_STDTBL (variable) - custom jump table with standard table formatting. ATM IDA doesn't use SWI_CUSTOM - for switches with standard table formatting. So this flag can be considered as - obsolete. - -ida_nalt.SWI_SUBTRACT (variable) - table values are subtracted from the elbase instead of being added - -ida_nalt.SWI_USER (variable) - user specified switch (starting from version 2) - -ida_nalt.SWI_V32 (variable) - 32-bit values in table - -ida_nalt.SWI_VERSION (variable) - the structure contains the VERSION member - -ida_nalt.SWI_VSIZE (variable) - value table element size expansion bit - -ida_nalt.SWI_VSPLIT (variable) - value table is split (only for 32-bit values) - -ida_nalt.V695_REF_OFF8 (variable) - reserved - -ida_nalt.V695_REF_VHIGH (variable) - obsolete - -ida_nalt.V695_REF_VLOW (variable) - obsolete - -ida_nalt.add_encoding (function) - add_encoding(encname) -> int - Add a new encoding (e.g. "UTF-8"). If it's already in the list, return its - index. - - @param encname: (C++: const char *) the encoding name - @return: its index (1-based); -1 means error - -ida_nalt.array_parameters_t (class) - Proxy of C++ array_parameters_t class. - -ida_nalt.array_parameters_t.__init__ (method) - __init__(self, _f=0x00000001, _l=0, _a=-1) -> array_parameters_t - - @param _f: int32 - @param _l: int32 - @param _a: int32 - -ida_nalt.array_parameters_t.alignment (variable) - -1 - don't align. 0 - align automatically. else item width - -ida_nalt.array_parameters_t.is_default (method) - is_default(self) -> bool - -ida_nalt.array_parameters_t.lineitems (variable) - number of items on a line - -ida_nalt.clr__bnot0 (function) - clr__bnot0(ea) - - @param ea: ea_t - -ida_nalt.clr__bnot1 (function) - clr__bnot1(ea) - - @param ea: ea_t - -ida_nalt.clr__invsign0 (function) - clr__invsign0(ea) - - @param ea: ea_t - -ida_nalt.clr__invsign1 (function) - clr__invsign1(ea) - - @param ea: ea_t - -ida_nalt.clr_abits (function) - clr_abits(ea, bits) - - @param ea: ea_t - @param bits: aflags_t - -ida_nalt.clr_align_flow (function) - clr_align_flow(ea) - - @param ea: ea_t - -ida_nalt.clr_colored_item (function) - clr_colored_item(ea) - - @param ea: ea_t - -ida_nalt.clr_fixed_spd (function) - clr_fixed_spd(ea) - - @param ea: ea_t - -ida_nalt.clr_has_lname (function) - clr_has_lname(ea) - - @param ea: ea_t - -ida_nalt.clr_has_ti (function) - clr_has_ti(ea) - - @param ea: ea_t - -ida_nalt.clr_has_ti0 (function) - clr_has_ti0(ea) - - @param ea: ea_t - -ida_nalt.clr_has_ti1 (function) - clr_has_ti1(ea) - - @param ea: ea_t - -ida_nalt.clr_libitem (function) - clr_libitem(ea) - - @param ea: ea_t - -ida_nalt.clr_lzero0 (function) - clr_lzero0(ea) - - @param ea: ea_t - -ida_nalt.clr_lzero1 (function) - clr_lzero1(ea) - - @param ea: ea_t - -ida_nalt.clr_noret (function) - clr_noret(ea) - - @param ea: ea_t - -ida_nalt.clr_notcode (function) - clr_notcode(ea) - Clear not-code mark. - - @param ea: (C++: ea_t) - -ida_nalt.clr_notproc (function) - clr_notproc(ea) - - @param ea: ea_t - -ida_nalt.clr_retfp (function) - clr_retfp(ea) - - @param ea: ea_t - -ida_nalt.clr_terse_struc (function) - clr_terse_struc(ea) - - @param ea: ea_t - -ida_nalt.clr_tilcmt (function) - clr_tilcmt(ea) - - @param ea: ea_t - -ida_nalt.clr_usemodsp (function) - clr_usemodsp(ea) - - @param ea: ea_t - -ida_nalt.clr_usersp (function) - clr_usersp(ea) - - @param ea: ea_t - -ida_nalt.clr_userti (function) - clr_userti(ea) - - @param ea: ea_t - -ida_nalt.clr_zstroff (function) - clr_zstroff(ea) - - @param ea: ea_t - -ida_nalt.custom_data_type_ids_fids_array (class) - Proxy of C++ wrapped_array_t< int16,8 > class. - -ida_nalt.custom_data_type_ids_fids_array.__getitem__ (method) - __getitem__(self, i) -> short const & - - @param i: size_t - -ida_nalt.custom_data_type_ids_fids_array.__init__ (method) - __init__(self, data) -> custom_data_type_ids_fids_array - - @param data: short (&)[8] - -ida_nalt.custom_data_type_ids_fids_array.__len__ (method) - __len__(self) -> size_t - -ida_nalt.custom_data_type_ids_fids_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: short const & - -ida_nalt.custom_data_type_ids_fids_array._get_bytes (method) - _get_bytes(self) -> bytevec_t - -ida_nalt.custom_data_type_ids_fids_array._set_bytes (method) - _set_bytes(self, bts) - - Parameters - ---------- - bts: bytevec_t const & - -ida_nalt.custom_data_type_ids_t (class) - Proxy of C++ custom_data_type_ids_t class. - -ida_nalt.custom_data_type_ids_t.__getFids (method) - __getFids(self) -> custom_data_type_ids_fids_array - -ida_nalt.custom_data_type_ids_t.__init__ (method) - __init__(self) -> custom_data_type_ids_t - -ida_nalt.custom_data_type_ids_t.dtid (variable) - data type id - -ida_nalt.custom_data_type_ids_t.fids (variable) - data format ids - -ida_nalt.custom_data_type_ids_t.get_dtid (method) - get_dtid(self) -> tid_t - -ida_nalt.custom_data_type_ids_t.set (method) - set(self, tid) - - @param tid: tid_t - -ida_nalt.dbg_get_input_path (function) - dbg_get_input_path() -> str - Get debugger input file name/path (see LFLG_DBG_NOPATH) - -ida_nalt.del_absbase (function) - del_absbase(ea) - - @param ea: ea_t - -ida_nalt.del_aflags (function) - del_aflags(ea) - - @param ea: ea_t - -ida_nalt.del_alignment (function) - del_alignment(ea) - - @param ea: ea_t - -ida_nalt.del_array_parameters (function) - del_array_parameters(ea) - - @param ea: ea_t - -ida_nalt.del_custom_data_type_ids (function) - del_custom_data_type_ids(ea) - - @param ea: ea_t - -ida_nalt.del_encoding (function) - del_encoding(idx) -> bool - Delete an encoding The encoding is not actually removed because its index may be - used in strtype. So the deletion just clears the encoding name. The default - encoding cannot be deleted. - - @param idx: (C++: int) the encoding index (1-based) - -ida_nalt.del_ind_purged (function) - del_ind_purged(ea) - - @param ea: ea_t - -ida_nalt.del_item_color (function) - del_item_color(ea) -> bool - - @param ea: ea_t - -ida_nalt.del_op_tinfo (function) - del_op_tinfo(ea, n) - - @param ea: ea_t - @param n: int - -ida_nalt.del_refinfo (function) - del_refinfo(ea, n) -> bool - - @param ea: ea_t - @param n: int - -ida_nalt.del_source_linnum (function) - del_source_linnum(ea) - - @param ea: ea_t - -ida_nalt.del_str_type (function) - del_str_type(ea) - - @param ea: ea_t - -ida_nalt.del_switch_info (function) - del_switch_info(ea) - - @param ea: ea_t - -ida_nalt.del_switch_parent (function) - del_switch_parent(ea) - - @param ea: ea_t - -ida_nalt.del_tinfo (function) - del_tinfo(ea) - - @param ea: ea_t - -ida_nalt.delete_imports (function) - delete_imports() - Delete all imported modules information. - -ida_nalt.ea2node (function) - ea2node(ea) -> nodeidx_t - Get netnode for the specified address. - - @param ea: (C++: ea_t) - -ida_nalt.encoding_from_strtype (function) - encoding_from_strtype(strtype) -> char const * - Get encoding name for this strtype - @retval nullptr: if STRTYPE has an incorrent encoding index - @retval empty: string if the encoding was deleted - - @param strtype: (C++: int32) - -ida_nalt.end_ea2node (function) - end_ea2node(ea) -> nodeidx_t - - @param ea: ea_t - -ida_nalt.enum_const_t (class) - Proxy of C++ enum_const_t class. - -ida_nalt.enum_const_t.__init__ (method) - __init__(self) -> enum_const_t - -ida_nalt.enum_import_names (function) - 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 (function) - find_custom_refinfo(name) -> int - Get id of a custom refinfo type. - - @param name: (C++: const char *) char const * - -ida_nalt.get_abi_name (function) - -ida_nalt.get_absbase (function) - get_absbase(ea) -> ea_t - - @param ea: ea_t - -ida_nalt.get_aflags (function) - get_aflags(ea) -> aflags_t - - @param ea: ea_t - -ida_nalt.get_alignment (function) - get_alignment(ea) -> uint32 - - @param ea: ea_t - -ida_nalt.get_archive_path (function) - get_archive_path() -> str - Get archive file path from which input file was extracted. - -ida_nalt.get_array_parameters (function) - get_array_parameters(out, ea) -> ssize_t - - @param out: array_parameters_t * - @param ea: ea_t - -ida_nalt.get_asm_inc_file (function) - get_asm_inc_file() -> str - Get name of the include file. - -ida_nalt.get_custom_data_type_ids (function) - get_custom_data_type_ids(cdis, ea) -> int - - @param cdis: custom_data_type_ids_t * - @param ea: ea_t - -ida_nalt.get_custom_refinfo (function) - 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 (function) - get_default_encoding_idx(bpu) -> int - Get default encoding index for a specific string type. - - @param bpu: (C++: int) the amount of bytes per unit (e.g., 1 for ASCII, CP1252, UTF-8..., 2 - for UTF-16, 4 for UTF-32) - @retval 0: bad BPU argument - -ida_nalt.get_elapsed_secs (function) - get_elapsed_secs() -> size_t - Get seconds database stayed open. - -ida_nalt.get_encoding_bpu (function) - 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: (C++: int) the encoding index (1-based) - @return: the number of bytes per units (1/2/4); -1 means error - -ida_nalt.get_encoding_bpu_by_name (function) - get_encoding_bpu_by_name(encname) -> int - Get the amount of bytes per unit for the given encoding - - @param encname: (C++: const char *) the encoding name - @return: the number of bytes per units (1/2/4); -1 means error - -ida_nalt.get_encoding_name (function) - get_encoding_name(idx) -> char const * - Get encoding name for specific index (1-based). - - @param idx: (C++: int) the encoding index (1-based) - @retval nullptr: if IDX is out of bounds - @retval empty: string if the encoding was deleted - -ida_nalt.get_encoding_qty (function) - get_encoding_qty() -> int - Get total number of encodings (counted from 0) - -ida_nalt.get_gotea (function) - get_gotea() -> ea_t - -ida_nalt.get_ida_notepad_text (function) - get_ida_notepad_text() -> str - Get notepad text. - -ida_nalt.get_idb_ctime (function) - get_idb_ctime() -> time_t - Get database creation timestamp. - -ida_nalt.get_idb_nopens (function) - get_idb_nopens() -> size_t - Get number of times the database is opened. - -ida_nalt.get_ids_modnode (function) - get_ids_modnode() -> netnode - Get ids modnode. - -ida_nalt.get_imagebase (function) - get_imagebase() -> ea_t - Get image base address. - -ida_nalt.get_import_module_name (function) - get_import_module_name(mod_index) -> str - Returns the name of an imported module given its index - - @param mod_index: int - @return: None or the module name - -ida_nalt.get_import_module_qty (function) - get_import_module_qty() -> uint - Get number of import modules. - -ida_nalt.get_ind_purged (function) - get_ind_purged(ea) -> ea_t - - @param ea: ea_t - -ida_nalt.get_initial_ida_version (function) - get_initial_ida_version() -> str - Get version of ida which created the database (string format like "7.5") - -ida_nalt.get_initial_idb_version (function) - get_initial_idb_version() -> ushort - Get initial version of the database (numeric format like 700) - -ida_nalt.get_input_file_path (function) - get_input_file_path() -> str - Get full path of the input file. - -ida_nalt.get_item_color (function) - get_item_color(ea) -> bgcolor_t - - @param ea: ea_t - -ida_nalt.get_loader_format_name (function) - get_loader_format_name() -> str - Get file format name for loader modules. - -ida_nalt.get_op_tinfo (function) - get_op_tinfo(tif, ea, n) -> bool - - @param tif: tinfo_t * - @param ea: ea_t - @param n: int - -ida_nalt.get_outfile_encoding_idx (function) - get_outfile_encoding_idx() -> int - Get the index of the encoding used when producing files - @retval 0: the IDB's default 1 byte-per-unit encoding is used - -ida_nalt.get_refinfo (function) - get_refinfo(ri, ea, n) -> bool - - @param ri: refinfo_t * - @param ea: ea_t - @param n: int - -ida_nalt.get_reftype_by_size (function) - 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 (function) - get_root_filename() -> str - Get file name only of the input file. - -ida_nalt.get_source_linnum (function) - get_source_linnum(ea) -> uval_t - - @param ea: ea_t - -ida_nalt.get_srcdbg_paths (function) - get_srcdbg_paths() -> str - Get source debug paths. - -ida_nalt.get_srcdbg_undesired_paths (function) - get_srcdbg_undesired_paths() -> str - Get user-closed source files. - -ida_nalt.get_str_encoding_idx (function) - get_str_encoding_idx(strtype) -> uchar - Get index of the string encoding for this string. - - @param strtype: (C++: int32) - -ida_nalt.get_str_term1 (function) - get_str_term1(strtype) -> char - - @param strtype: int32 - -ida_nalt.get_str_term2 (function) - get_str_term2(strtype) -> char - - @param strtype: int32 - -ida_nalt.get_str_type (function) - get_str_type(ea) -> uint32 - - @param ea: ea_t - -ida_nalt.get_str_type_code (function) - get_str_type_code(strtype) -> uchar - - @param strtype: int32 - -ida_nalt.get_str_type_prefix_length (function) - get_str_type_prefix_length(strtype) -> size_t - - @param strtype: int32 - -ida_nalt.get_strid (function) - get_strid(ea) -> tid_t - - @param ea: ea_t - -ida_nalt.get_strtype_bpu (function) - get_strtype_bpu(strtype) -> int - - @param strtype: int32 - -ida_nalt.get_switch_info (function) - get_switch_info(out, ea) -> ssize_t - - @param out: switch_info_t * - @param ea: ea_t - -ida_nalt.get_switch_info (function) - -ida_nalt.get_switch_parent (function) - get_switch_parent(ea) -> ea_t - - @param ea: ea_t - -ida_nalt.get_tinfo (function) - get_tinfo(tif, ea) -> bool - - @param tif: tinfo_t * - @param ea: ea_t - -ida_nalt.getnode (function) - getnode(ea) -> netnode - - @param ea: ea_t - -ida_nalt.has_aflag_linnum (function) - has_aflag_linnum(flags) -> bool - - @param flags: aflags_t - -ida_nalt.has_aflag_lname (function) - has_aflag_lname(flags) -> bool - - @param flags: aflags_t - -ida_nalt.has_aflag_ti (function) - has_aflag_ti(flags) -> bool - - @param flags: aflags_t - -ida_nalt.has_aflag_ti0 (function) - has_aflag_ti0(flags) -> bool - - @param flags: aflags_t - -ida_nalt.has_aflag_ti1 (function) - has_aflag_ti1(flags) -> bool - - @param flags: aflags_t - -ida_nalt.has_lname (function) - has_lname(ea) -> bool - - @param ea: ea_t - -ida_nalt.has_ti (function) - has_ti(ea) -> bool - - @param ea: ea_t - -ida_nalt.has_ti0 (function) - has_ti0(ea) -> bool - - @param ea: ea_t - -ida_nalt.has_ti1 (function) - has_ti1(ea) -> bool - - @param ea: ea_t - -ida_nalt.hide_border (function) - hide_border(ea) - - @param ea: ea_t - -ida_nalt.hide_item (function) - hide_item(ea) - - @param ea: ea_t - -ida_nalt.is__bnot0 (function) - is__bnot0(ea) -> bool - - @param ea: ea_t - -ida_nalt.is__bnot1 (function) - is__bnot1(ea) -> bool - - @param ea: ea_t - -ida_nalt.is__invsign0 (function) - is__invsign0(ea) -> bool - - @param ea: ea_t - -ida_nalt.is__invsign1 (function) - is__invsign1(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_aflag__bnot0 (function) - is_aflag__bnot0(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag__bnot1 (function) - is_aflag__bnot1(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag__invsign0 (function) - is_aflag__invsign0(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag__invsign1 (function) - is_aflag__invsign1(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_align_flow (function) - is_aflag_align_flow(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_colored_item (function) - is_aflag_colored_item(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_data_guessed_by_hexrays (function) - is_aflag_data_guessed_by_hexrays(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_fixed_spd (function) - is_aflag_fixed_spd(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_func_guessed_by_hexrays (function) - is_aflag_func_guessed_by_hexrays(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_hidden_border (function) - is_aflag_hidden_border(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_hidden_item (function) - is_aflag_hidden_item(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_libitem (function) - is_aflag_libitem(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_lzero0 (function) - is_aflag_lzero0(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_lzero1 (function) - is_aflag_lzero1(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_manual_insn (function) - is_aflag_manual_insn(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_noret (function) - is_aflag_noret(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_notcode (function) - is_aflag_notcode(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_notproc (function) - is_aflag_notproc(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_public_name (function) - is_aflag_public_name(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_retfp (function) - is_aflag_retfp(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_terse_struc (function) - is_aflag_terse_struc(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_tilcmt (function) - is_aflag_tilcmt(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_type_determined_by_hexrays (function) - is_aflag_type_determined_by_hexrays(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_type_guessed_by_hexrays (function) - is_aflag_type_guessed_by_hexrays(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_type_guessed_by_ida (function) - is_aflag_type_guessed_by_ida(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_usersp (function) - is_aflag_usersp(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_userti (function) - is_aflag_userti(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_weak_name (function) - is_aflag_weak_name(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_aflag_zstroff (function) - is_aflag_zstroff(flags) -> bool - - @param flags: aflags_t - -ida_nalt.is_align_flow (function) - is_align_flow(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_colored_item (function) - is_colored_item(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_data_guessed_by_hexrays (function) - is_data_guessed_by_hexrays(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_finally_visible_item (function) - is_finally_visible_item(ea) -> bool - Is instruction visible? - - @param ea: (C++: ea_t) - -ida_nalt.is_fixed_spd (function) - is_fixed_spd(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_func_guessed_by_hexrays (function) - is_func_guessed_by_hexrays(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_hidden_border (function) - is_hidden_border(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_hidden_item (function) - is_hidden_item(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_libitem (function) - is_libitem(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_lzero0 (function) - is_lzero0(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_lzero1 (function) - is_lzero1(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_noret (function) - is_noret(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_notcode (function) - is_notcode(ea) -> bool - Is the address marked as not-code? - - @param ea: (C++: ea_t) - -ida_nalt.is_notproc (function) - is_notproc(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_pascal (function) - is_pascal(strtype) -> bool - - @param strtype: int32 - -ida_nalt.is_reftype_target_optional (function) - is_reftype_target_optional(type) -> bool - Can the target be calculated using operand value? - - @param type: (C++: reftype_t) - -ida_nalt.is_retfp (function) - is_retfp(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_terse_struc (function) - is_terse_struc(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_tilcmt (function) - is_tilcmt(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_type_determined_by_hexrays (function) - is_type_determined_by_hexrays(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_type_guessed_by_hexrays (function) - is_type_guessed_by_hexrays(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_type_guessed_by_ida (function) - is_type_guessed_by_ida(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_usersp (function) - is_usersp(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_userti (function) - is_userti(ea) -> bool - - @param ea: ea_t - -ida_nalt.is_visible_item (function) - is_visible_item(ea) -> bool - Test visibility of item at given ea. - - @param ea: (C++: ea_t) - -ida_nalt.is_zstroff (function) - is_zstroff(ea) -> bool - - @param ea: ea_t - -ida_nalt.make_str_type (function) - make_str_type(type_code, encoding_idx, term1=0, term2=0) -> int32 - Get string type for a string in the given encoding. - - @param type_code: (C++: uchar) - @param encoding_idx: (C++: int) - @param term1: (C++: uchar) - @param term2: (C++: uchar) - -ida_nalt.node2ea (function) - node2ea(ndx) -> ea_t - - @param ndx: nodeidx_t - -ida_nalt.opinfo_t (class) - Proxy of C++ opinfo_t class. - -ida_nalt.opinfo_t.__init__ (method) - __init__(self) -> opinfo_t - -ida_nalt.opinfo_t.cd (variable) - for custom data - -ida_nalt.opinfo_t.ec (variable) - for enums - -ida_nalt.opinfo_t.path (variable) - for stroff - -ida_nalt.opinfo_t.ri (variable) - for offset members - -ida_nalt.opinfo_t.strtype (variable) - for strings (String type codes) - -ida_nalt.opinfo_t.tid (variable) - for struct, etc. members - -ida_nalt.printop_t (class) - Proxy of C++ printop_t class. - -ida_nalt.printop_t.__init__ (method) - __init__(self) -> printop_t - -ida_nalt.printop_t.get_ti (method) - get_ti(self) -> opinfo_t - -ida_nalt.printop_t.is_aflags_initialized (method) - is_aflags_initialized(self) -> bool - -ida_nalt.printop_t.is_f64 (method) - is_f64(self) -> bool - -ida_nalt.printop_t.is_ti_initialized (method) - is_ti_initialized(self) -> bool - -ida_nalt.printop_t.set_aflags_initialized (method) - set_aflags_initialized(self, v=True) - - @param v: bool - -ida_nalt.printop_t.set_ti_initialized (method) - set_ti_initialized(self, v=True) - - @param v: bool - -ida_nalt.refinfo_t (class) - Proxy of C++ refinfo_t class. - -ida_nalt.refinfo_t.__init__ (method) - __init__(self) -> refinfo_t - -ida_nalt.refinfo_t.base (variable) - base of reference (may be BADADDR) - -ida_nalt.refinfo_t.flags (variable) - Reference info flags - -ida_nalt.refinfo_t.init (method) - init(self, reft_and_flags, _base=0, _target=BADADDR, _tdelta=0) - - @param reft_and_flags: uint32 - @param _base: ea_t - @param _target: ea_t - @param _tdelta: adiff_t - -ida_nalt.refinfo_t.is_custom (method) - is_custom(self) -> bool - -ida_nalt.refinfo_t.is_no_ones (method) - is_no_ones(self) -> bool - -ida_nalt.refinfo_t.is_no_zeros (method) - is_no_zeros(self) -> bool - -ida_nalt.refinfo_t.is_pastend (method) - is_pastend(self) -> bool - -ida_nalt.refinfo_t.is_rvaoff (method) - is_rvaoff(self) -> bool - -ida_nalt.refinfo_t.is_selfref (method) - is_selfref(self) -> bool - -ida_nalt.refinfo_t.is_signed (method) - is_signed(self) -> bool - -ida_nalt.refinfo_t.is_subtract (method) - is_subtract(self) -> bool - -ida_nalt.refinfo_t.is_target_optional (method) - is_target_optional(self) -> bool - < is_reftype_target_optional() - -ida_nalt.refinfo_t.no_base_xref (method) - no_base_xref(self) -> bool - -ida_nalt.refinfo_t.set_type (method) - set_type(self, rt) - - @param rt: reftype_t - -ida_nalt.refinfo_t.target (variable) - reference target (BADADDR-none) - -ida_nalt.refinfo_t.tdelta (variable) - offset from the target - -ida_nalt.refinfo_t.type (method) - type(self) -> reftype_t - -ida_nalt.rename_encoding (function) - rename_encoding(idx, encname) -> bool - Change name for an encoding The number of bytes per unit (BPU) of the new - encoding must match this number of the existing default encoding. Specifying the - empty name simply deletes this encoding. - - @param idx: (C++: int) the encoding index (1-based) - @param encname: (C++: const char *) the new encoding name - -ida_nalt.retrieve_input_file_crc32 (function) - 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 (function) - retrieve_input_file_md5() -> bytes - Get input file md5. - -ida_nalt.retrieve_input_file_sha256 (function) - retrieve_input_file_sha256() -> bytes - Get input file sha256. - -ida_nalt.retrieve_input_file_size (function) - retrieve_input_file_size() -> size_t - Get size of input file in bytes. - -ida_nalt.set__bnot0 (function) - set__bnot0(ea) - - @param ea: ea_t - -ida_nalt.set__bnot1 (function) - set__bnot1(ea) - - @param ea: ea_t - -ida_nalt.set__invsign0 (function) - set__invsign0(ea) - - @param ea: ea_t - -ida_nalt.set__invsign1 (function) - set__invsign1(ea) - - @param ea: ea_t - -ida_nalt.set_abits (function) - set_abits(ea, bits) - - @param ea: ea_t - @param bits: aflags_t - -ida_nalt.set_absbase (function) - set_absbase(ea, x) - - @param ea: ea_t - @param x: ea_t - -ida_nalt.set_aflags (function) - set_aflags(ea, flags) - - @param ea: ea_t - @param flags: aflags_t - -ida_nalt.set_align_flow (function) - set_align_flow(ea) - - @param ea: ea_t - -ida_nalt.set_alignment (function) - set_alignment(ea, x) - - @param ea: ea_t - @param x: uint32 - -ida_nalt.set_archive_path (function) - set_archive_path(file) -> bool - Set archive file path from which input file was extracted. - - @param file: (C++: const char *) char const * - -ida_nalt.set_array_parameters (function) - set_array_parameters(ea, _in) - - @param ea: ea_t - @param in: array_parameters_t const * - -ida_nalt.set_asm_inc_file (function) - set_asm_inc_file(file) -> bool - Set name of the include file. - - @param file: (C++: const char *) char const * - -ida_nalt.set_colored_item (function) - set_colored_item(ea) - - @param ea: ea_t - -ida_nalt.set_custom_data_type_ids (function) - set_custom_data_type_ids(ea, cdis) - - @param ea: ea_t - @param cdis: custom_data_type_ids_t const * - -ida_nalt.set_data_guessed_by_hexrays (function) - set_data_guessed_by_hexrays(ea) - - @param ea: ea_t - -ida_nalt.set_default_encoding_idx (function) - set_default_encoding_idx(bpu, idx) -> bool - Set default encoding for a string type - - @param bpu: (C++: int) the amount of bytes per unit - @param idx: (C++: int) the encoding index. It cannot be 0 - -ida_nalt.set_fixed_spd (function) - set_fixed_spd(ea) - - @param ea: ea_t - -ida_nalt.set_func_guessed_by_hexrays (function) - set_func_guessed_by_hexrays(ea) - - @param ea: ea_t - -ida_nalt.set_gotea (function) - set_gotea(gotea) - - @param gotea: ea_t - -ida_nalt.set_has_lname (function) - set_has_lname(ea) - - @param ea: ea_t - -ida_nalt.set_has_ti (function) - set_has_ti(ea) - - @param ea: ea_t - -ida_nalt.set_has_ti0 (function) - set_has_ti0(ea) - - @param ea: ea_t - -ida_nalt.set_has_ti1 (function) - set_has_ti1(ea) - - @param ea: ea_t - -ida_nalt.set_ida_notepad_text (function) - set_ida_notepad_text(text, size=0) - Set notepad text. - - @param text: (C++: const char *) char const * - @param size: (C++: size_t) - -ida_nalt.set_ids_modnode (function) - set_ids_modnode(id) - Set ids modnode. - - @param id: (C++: netnode) - -ida_nalt.set_imagebase (function) - set_imagebase(base) - Set image base address. - - @param base: (C++: ea_t) - -ida_nalt.set_item_color (function) - set_item_color(ea, color) - - @param ea: ea_t - @param color: bgcolor_t - -ida_nalt.set_libitem (function) - set_libitem(ea) - - @param ea: ea_t - -ida_nalt.set_loader_format_name (function) - set_loader_format_name(name) - Set file format name for loader modules. - - @param name: (C++: const char *) char const * - -ida_nalt.set_lzero0 (function) - set_lzero0(ea) - - @param ea: ea_t - -ida_nalt.set_lzero1 (function) - set_lzero1(ea) - - @param ea: ea_t - -ida_nalt.set_noret (function) - set_noret(ea) - - @param ea: ea_t - -ida_nalt.set_notcode (function) - set_notcode(ea) - Mark address so that it cannot be converted to instruction. - - @param ea: (C++: ea_t) - -ida_nalt.set_notproc (function) - set_notproc(ea) - - @param ea: ea_t - -ida_nalt.set_op_tinfo (function) - set_op_tinfo(ea, n, tif) -> bool - - @param ea: ea_t - @param n: int - @param tif: tinfo_t const * - -ida_nalt.set_outfile_encoding_idx (function) - set_outfile_encoding_idx(idx) -> bool - set encoding to be used when producing files - - @param idx: (C++: int) the encoding index IDX can be 0 to use the IDB's default 1-byte-per- - unit encoding - -ida_nalt.set_refinfo (function) - set_refinfo(ea, n, type, target=BADADDR, base=0, tdelta=0) -> bool - - @param ea: ea_t - @param n: int - @param type: reftype_t - @param target: ea_t - @param base: ea_t - @param tdelta: adiff_t - -ida_nalt.set_refinfo_ex (function) - set_refinfo_ex(ea, n, ri) -> bool - - @param ea: ea_t - @param n: int - @param ri: refinfo_t const * - -ida_nalt.set_retfp (function) - set_retfp(ea) - - @param ea: ea_t - -ida_nalt.set_root_filename (function) - set_root_filename(file) - Set full path of the input file. - - @param file: (C++: const char *) char const * - -ida_nalt.set_source_linnum (function) - set_source_linnum(ea, lnnum) - - @param ea: ea_t - @param lnnum: uval_t - -ida_nalt.set_srcdbg_paths (function) - set_srcdbg_paths(paths) - Set source debug paths. - - @param paths: (C++: const char *) char const * - -ida_nalt.set_srcdbg_undesired_paths (function) - set_srcdbg_undesired_paths(paths) - Set user-closed source files. - - @param paths: (C++: const char *) char const * - -ida_nalt.set_str_encoding_idx (function) - set_str_encoding_idx(strtype, encoding_idx) -> int32 - Set index of the string encoding in the string type. - - @param strtype: (C++: int32) - @param encoding_idx: (C++: int) - -ida_nalt.set_str_type (function) - set_str_type(ea, x) - - @param ea: ea_t - @param x: uint32 - -ida_nalt.set_switch_info (function) - set_switch_info(ea, _in) - - @param ea: ea_t - @param in: switch_info_t const & - -ida_nalt.set_switch_parent (function) - set_switch_parent(ea, x) - - @param ea: ea_t - @param x: ea_t - -ida_nalt.set_terse_struc (function) - set_terse_struc(ea) - - @param ea: ea_t - -ida_nalt.set_tilcmt (function) - set_tilcmt(ea) - - @param ea: ea_t - -ida_nalt.set_tinfo (function) - set_tinfo(ea, tif) -> bool - - @param ea: ea_t - @param tif: tinfo_t const * - -ida_nalt.set_type_determined_by_hexrays (function) - set_type_determined_by_hexrays(ea) - - @param ea: ea_t - -ida_nalt.set_type_guessed_by_ida (function) - set_type_guessed_by_ida(ea) - - @param ea: ea_t - -ida_nalt.set_usemodsp (function) - set_usemodsp(ea) - - @param ea: ea_t - -ida_nalt.set_usersp (function) - set_usersp(ea) - - @param ea: ea_t - -ida_nalt.set_userti (function) - set_userti(ea) - - @param ea: ea_t - -ida_nalt.set_visible_item (function) - 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 (function) - set_zstroff(ea) - - @param ea: ea_t - -ida_nalt.strpath_ids_array (class) - Proxy of C++ wrapped_array_t< tid_t,32 > class. - -ida_nalt.strpath_ids_array.__getitem__ (method) - __getitem__(self, i) -> unsigned-ea-like-numeric-type const & - - @param i: size_t - -ida_nalt.strpath_ids_array.__init__ (method) - __init__(self, data) -> strpath_ids_array - - @param data: unsigned-ea-like-numeric-type (&)[32] - -ida_nalt.strpath_ids_array.__len__ (method) - __len__(self) -> size_t - -ida_nalt.strpath_ids_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: unsigned-ea-like-numeric-type const & - -ida_nalt.strpath_ids_array._get_bytes (method) - _get_bytes(self) -> bytevec_t - -ida_nalt.strpath_ids_array._set_bytes (method) - _set_bytes(self, bts) - - Parameters - ---------- - bts: bytevec_t const & - -ida_nalt.strpath_t (class) - Proxy of C++ strpath_t class. - -ida_nalt.strpath_t.__getIds (method) - __getIds(self) -> strpath_ids_array - -ida_nalt.strpath_t.__init__ (method) - __init__(self) -> strpath_t - -ida_nalt.switch_info_t (class) - Proxy of C++ switch_info_t class. - -ida_nalt.switch_info_t.__init__ (method) - __init__(self) -> switch_info_t - -ida_nalt.switch_info_t._get_values_lowcase (method) - _get_values_lowcase(self) -> ea_t - -ida_nalt.switch_info_t._set_values_lowcase (method) - _set_values_lowcase(self, values) - - Parameters - ---------- - values: ea_t - -ida_nalt.switch_info_t.assign (method) - assign(self, other) - - @param other: switch_info_t const & - -ida_nalt.switch_info_t.clear (method) - clear(self) - -ida_nalt.switch_info_t.custom (variable) - information for custom tables (filled and used by modules) - -ida_nalt.switch_info_t.defjump (variable) - default jump address (BADADDR if no default case) - -ida_nalt.switch_info_t.elbase (variable) - element base - -ida_nalt.switch_info_t.expr_ea (variable) - the address before that the switch expression is in REGNUM. If BADADDR, then the - first insn marked as IM_SWITCH after STARTEA is used. - -ida_nalt.switch_info_t.flags (variable) - Switch info flags - -ida_nalt.switch_info_t.get_jrange_vrange (method) - get_jrange_vrange(self, jrange=None, vrange=None) -> bool - get separate parts of the switch - - @param jrange: (C++: range_t *) - @param vrange: (C++: range_t *) - -ida_nalt.switch_info_t.get_jtable_element_size (method) - get_jtable_element_size(self) -> int - -ida_nalt.switch_info_t.get_jtable_size (method) - get_jtable_size(self) -> int - -ida_nalt.switch_info_t.get_lowcase (method) - get_lowcase(self) -> sval_t - -ida_nalt.switch_info_t.get_shift (method) - get_shift(self) -> int - See SWI_SHIFT_MASK. possible answers: 0..3. - -ida_nalt.switch_info_t.get_version (method) - get_version(self) -> int - -ida_nalt.switch_info_t.get_vtable_element_size (method) - get_vtable_element_size(self) -> int - -ida_nalt.switch_info_t.has_default (method) - has_default(self) -> bool - -ida_nalt.switch_info_t.has_elbase (method) - has_elbase(self) -> bool - -ida_nalt.switch_info_t.is_custom (method) - is_custom(self) -> bool - -ida_nalt.switch_info_t.is_indirect (method) - is_indirect(self) -> bool - -ida_nalt.switch_info_t.is_nolowcase (method) - is_nolowcase(self) -> bool - -ida_nalt.switch_info_t.is_sparse (method) - is_sparse(self) -> bool - -ida_nalt.switch_info_t.is_subtract (method) - is_subtract(self) -> bool - -ida_nalt.switch_info_t.is_user_defined (method) - is_user_defined(self) -> bool - -ida_nalt.switch_info_t.jcases (variable) - number of entries in the jump table (SWI_INDIRECT) - -ida_nalt.switch_info_t.jumps (variable) - jump table start address - -ida_nalt.switch_info_t.lowcase (variable) - the lowest value in cases - -ida_nalt.switch_info_t.marks (variable) - the insns marked as IM_SWITCH. They are used to delete the switch. - -ida_nalt.switch_info_t.ncases (variable) - number of cases (excluding default) - -ida_nalt.switch_info_t.regdtype (variable) - size of the switch expression register as dtype - -ida_nalt.switch_info_t.regnum (variable) - the switch expression as a value of the REGNUM register before the instruction - at EXPR_EA. -1 means 'unknown' - -ida_nalt.switch_info_t.set_elbase (method) - set_elbase(self, base) - - @param base: ea_t - -ida_nalt.switch_info_t.set_expr (method) - set_expr(self, r, dt) - - @param r: int - @param dt: op_dtype_t - -ida_nalt.switch_info_t.set_jtable_element_size (method) - set_jtable_element_size(self, size) - - @param size: int - -ida_nalt.switch_info_t.set_jtable_size (method) - set_jtable_size(self, size) - - @param size: int - -ida_nalt.switch_info_t.set_shift (method) - set_shift(self, shift) - See SWI_SHIFT_MASK. - - @param shift: (C++: int) - -ida_nalt.switch_info_t.set_vtable_element_size (method) - set_vtable_element_size(self, size) - - @param size: int - -ida_nalt.switch_info_t.startea (variable) - start of the switch idiom - -ida_nalt.switch_info_t.use_std_table (method) - use_std_table(self) -> bool - -ida_nalt.switch_info_t.values (variable) - values table address (if SWI_SPARSE is set) - -ida_nalt.switch_info_t__from_ptrval__ (function) - switch_info_t__from_ptrval__(ptrval) -> switch_info_t - - @param ptrval: size_t - -ida_nalt.unhide_border (function) - unhide_border(ea) - - @param ea: ea_t - -ida_nalt.unhide_item (function) - unhide_item(ea) - - @param ea: ea_t - -ida_nalt.upd_abits (function) - upd_abits(ea, clr_bits, set_bits) - - @param ea: ea_t - @param clr_bits: aflags_t - @param set_bits: aflags_t - -ida_nalt.uses_aflag_modsp (function) - uses_aflag_modsp(flags) -> bool - - @param flags: aflags_t - -ida_nalt.uses_modsp (function) - uses_modsp(ea) -> bool - - @param ea: ea_t - -ida_nalt.validate_idb_names (function) - validate_idb_names(do_repair) -> int - - @param do_repair: bool - -ida_name (module) - Functions that deal with names. - - A non-tail address of the program may have a name. Tail addresses (i.e. the - addresses in the middle of an instruction or data item) cannot have names. - -ida_name.DEBNAME_EXACT (variable) - find a name at exactly the specified address - -ida_name.DEBNAME_LOWER (variable) - find a name with the address >= the specified address - -ida_name.DEBNAME_NICE (variable) - find a name with the address <= the specified address - -ida_name.DEBNAME_UPPER (variable) - find a name with the address > the specified address - -ida_name.FUNC_IMPORT_PREFIX (variable) - Name prefix used by IDA for the imported functions. - -ida_name.GETN_APPZERO (variable) - meaningful only if the name refers to a structure. append a struct field name if - the field offset is zero? - -ida_name.GETN_NODUMMY (variable) - do not create a new dummy name but pretend it exists - -ida_name.GETN_NOFIXUP (variable) - ignore the fixup information when producing the name - -ida_name.GNCN_NOCOLOR (variable) - generate an uncolored name - -ida_name.GNCN_NODBGNM (variable) - don't use debug names - -ida_name.GNCN_NOFUNC (variable) - don't generate funcname+... expressions - -ida_name.GNCN_NOLABEL (variable) - don't generate labels - -ida_name.GNCN_NOSEG (variable) - ignore the segment prefix when producing the name - -ida_name.GNCN_PREFDBG (variable) - if using debug names, prefer debug names over function names - -ida_name.GNCN_REQFUNC (variable) - return 0 if the address does not belong to a function - -ida_name.GNCN_REQNAME (variable) - return 0 if the address can only be represented as a hex number - -ida_name.GNCN_SEGNUM (variable) - segment part is displayed as a hex number - -ida_name.GNCN_SEG_FUNC (variable) - generate both segment and function names (default is to omit segment name if a - function name is present) - -ida_name.GN_COLORED (variable) - return colored name - -ida_name.GN_DEMANGLED (variable) - return demangled name - -ida_name.GN_ISRET (variable) - for dummy names: use retloc - -ida_name.GN_LOCAL (variable) - try to get local name first; if failed, get global - -ida_name.GN_LONG (variable) - use long form of demangled name - -ida_name.GN_NOT_DUMMY (variable) - do not return a dummy name - -ida_name.GN_NOT_ISRET (variable) - for dummy names: do not use retloc - -ida_name.GN_SHORT (variable) - use short form of demangled name - -ida_name.GN_STRICT (variable) - fail if cannot demangle - -ida_name.GN_VISIBLE (variable) - replace forbidden characters by SUBSTCHAR - -ida_name.MAXNAMELEN (variable) - Maximum length of a name in IDA (with the trailing zero) - -ida_name.NT_ABS (variable) - name is absolute symbol (SEG_ABSSYM) - -ida_name.NT_BMASK (variable) - name is a bit group mask name - -ida_name.NT_BYTE (variable) - name is byte name (regular name) - -ida_name.NT_ENUM (variable) - name is symbolic constant - -ida_name.NT_LOCAL (variable) - name is local label - -ida_name.NT_NONE (variable) - name doesn't exist or has no value - -ida_name.NT_REGVAR (variable) - name is a renamed register (*value is idx into pfn->regvars) - -ida_name.NT_SEG (variable) - name is segment or segment register name - -ida_name.NT_STKVAR (variable) - name is stack variable name - -ida_name.NT_STROFF (variable) - name is structure member - -ida_name.NearestName (class) - Utility class to help find the nearest name in a given ea/name dictionary - -ida_name.NearestName.__getitem__ (method) - Returns the tupple (ea, name, index) - -ida_name.NearestName.__init__ (method) - -ida_name.NearestName.__iter__ (method) - -ida_name.NearestName._get_item (method) - -ida_name.NearestName.find (method) - Returns a tupple (ea, name, pos) that is the nearest to the passed ea - If no name is matched then None is returned - -ida_name.NearestName.update (method) - Updates the ea/names map - -ida_name.SN_AUTO (variable) - if set, make name autogenerated - -ida_name.SN_CHECK (variable) - Fail if the name contains invalid characters. - -ida_name.SN_DELTAIL (variable) - if name cannot be set because of a tail byte, delete the hindering item - -ida_name.SN_FORCE (variable) - if the specified name is already present in the database, try variations with a - numerical suffix like "_123" - -ida_name.SN_IDBENC (variable) - 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 (variable) - 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 (variable) - Replace invalid characters silently. If this bit is set, all invalid chars (not - in NameChars or MangleChars) will be replaced by '_' List of valid characters is - defined in ida.cfg - -ida_name.SN_NODUMMY (variable) - automatically prepend the name with '_' if it begins with a dummy suffix such as - 'sub_'. See also SN_IDBENC - -ida_name.SN_NOLIST (variable) - 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 (variable) - if set, make name non-autogenerated - -ida_name.SN_NON_PUBLIC (variable) - if set, make name non-public - -ida_name.SN_NON_WEAK (variable) - if set, make name non-weak - -ida_name.SN_NOWARN (variable) - don't display a warning if failed - -ida_name.SN_PUBLIC (variable) - if set, make name public - -ida_name.SN_WEAK (variable) - if set, make name weak - -ida_name.append_struct_fields (function) - 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: (C++: adiff_t *) displacement from the name - @param n: (C++: int) operand number in which the name appears - @param path: (C++: const tid_t *) path in the struct. path is an array of id's. maximal length of - array is MAXSTRUCPATH. the first element of the array is the - structure id. consecutive elements are id's of used union members - (if any). - @param flags: (C++: flags64_t) the input flags. they will be returned if the struct cannot be - found. - @param delta: (C++: adiff_t) delta to add to displacement - @param appzero: (C++: bool) should append a struct field name if the displacement is zero? - @return: flags of the innermost struct member or the input flags - -ida_name.calc_gtn_flags (function) - 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 (function) - cleanup_name(ea, name, flags=0) -> str - - @param ea: ea_t - @param name: char const * - @param flags: uint32 - -ida_name.del_debug_names (function) - del_debug_names(ea1, ea2) - - @param ea1: ea_t - @param ea2: ea_t - -ida_name.del_global_name (function) - del_global_name(ea) -> bool - - @param ea: ea_t - -ida_name.del_local_name (function) - del_local_name(ea) -> bool - - @param ea: ea_t - -ida_name.demangle_name (function) - demangle_name(name, disable_mask, demreq=DQT_FULL) -> str - Demangle a name. - - @param name: (C++: const char *) char const * - @param disable_mask: (C++: uint32) - @param demreq: (C++: demreq_type_t) enum demreq_type_t - -ida_name.ea_name_t (class) - Proxy of C++ ea_name_t class. - -ida_name.ea_name_t.__init__ (method) - __init__(self) -> ea_name_t - __init__(self, _ea, _name) -> ea_name_t - - @param _ea: ea_t - @param _name: qstring const & - -ida_name.ea_name_vec_t (class) - Proxy of C++ qvector< ea_name_t > class. - -ida_name.ea_name_vec_t.__getitem__ (method) - __getitem__(self, i) -> ea_name_t - - @param i: size_t - -ida_name.ea_name_vec_t.__init__ (method) - __init__(self) -> ea_name_vec_t - __init__(self, x) -> ea_name_vec_t - - @param x: qvector< ea_name_t > const & - -ida_name.ea_name_vec_t.__len__ (method) - __len__(self) -> size_t - -ida_name.ea_name_vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: ea_name_t const & - -ida_name.ea_name_vec_t.at (method) - at(self, _idx) -> ea_name_t - - @param _idx: size_t - -ida_name.ea_name_vec_t.begin (method) - begin(self) -> ea_name_t - -ida_name.ea_name_vec_t.capacity (method) - capacity(self) -> size_t - -ida_name.ea_name_vec_t.clear (method) - clear(self) - -ida_name.ea_name_vec_t.empty (method) - empty(self) -> bool - -ida_name.ea_name_vec_t.end (method) - end(self) -> ea_name_t - -ida_name.ea_name_vec_t.erase (method) - erase(self, it) -> ea_name_t - - @param it: qvector< ea_name_t >::iterator - - erase(self, first, last) -> ea_name_t - - @param first: qvector< ea_name_t >::iterator - @param last: qvector< ea_name_t >::iterator - -ida_name.ea_name_vec_t.extract (method) - extract(self) -> ea_name_t - -ida_name.ea_name_vec_t.grow (method) - grow(self, x=ea_name_t()) - - @param x: ea_name_t const & - -ida_name.ea_name_vec_t.inject (method) - inject(self, s, len) - - @param s: ea_name_t * - @param len: size_t - -ida_name.ea_name_vec_t.insert (method) - insert(self, it, x) -> ea_name_t - - @param it: qvector< ea_name_t >::iterator - @param x: ea_name_t const & - -ida_name.ea_name_vec_t.pop_back (method) - pop_back(self) - -ida_name.ea_name_vec_t.push_back (method) - push_back(self, x) - - @param x: ea_name_t const & - - push_back(self) -> ea_name_t - -ida_name.ea_name_vec_t.qclear (method) - qclear(self) - -ida_name.ea_name_vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_name.ea_name_vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: ea_name_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_name.ea_name_vec_t.size (method) - size(self) -> size_t - -ida_name.ea_name_vec_t.swap (method) - swap(self, r) - - @param r: qvector< ea_name_t > & - -ida_name.ea_name_vec_t.truncate (method) - truncate(self) - -ida_name.extract_name (function) - extract_name(line, x) -> str - Extract a name or address from the specified string. - - @param line: (C++: const char *) input string - @param x: (C++: int) x coordinate of cursor - @return: -1 if cannot extract. otherwise length of the name - -ida_name.force_name (function) - force_name(ea, name, flags=0) -> bool - - @param ea: ea_t - @param name: char const * - @param flags: int - -ida_name.get_colored_demangled_name (function) - get_colored_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring - - @param ea: ea_t - @param inhibitor: int32 - @param demform: int - @param gtn_flags: int - -ida_name.get_colored_long_name (function) - get_colored_long_name(ea, gtn_flags=0) -> qstring - - @param ea: ea_t - @param gtn_flags: int - -ida_name.get_colored_name (function) - get_colored_name(ea) -> qstring - - @param ea: ea_t - -ida_name.get_colored_short_name (function) - get_colored_short_name(ea, gtn_flags=0) -> qstring - - @param ea: ea_t - @param gtn_flags: int - -ida_name.get_cp_validity (function) - 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) enum ucdr_kind_t - @param cp: (C++: wchar32_t) - @param endcp: (C++: wchar32_t) - -ida_name.get_debug_name (function) - get_debug_name(ea_ptr, how) -> str - - @param ea_ptr: ea_t * - @param how: enum debug_name_how_t - -ida_name.get_debug_name_ea (function) - get_debug_name_ea(name) -> ea_t - - @param name: char const * - -ida_name.get_debug_names (function) - get_debug_names(names, ea1, ea2) - - @param names: ea_name_vec_t * - @param ea1: ea_t - @param ea2: ea_t - - get_debug_names(ea1, ea2, return_list=False) -> dict or None - - @param ea1: ea_t - @param ea2: ea_t - @param return_list: bool - -ida_name.get_demangled_name (function) - get_demangled_name(ea, inhibitor, demform, gtn_flags=0) -> qstring - - @param ea: ea_t - @param inhibitor: int32 - @param demform: int - @param gtn_flags: int - -ida_name.get_ea_name (function) - get_ea_name(ea, gtn_flags=0) -> qstring - Get name at the specified address. - - @param ea: (C++: ea_t) linear address - @param gtn_flags: (C++: int) how exactly the name should be retrieved. combination of bits - for get_ea_name() function. There is a convenience bits - @return: success - -ida_name.get_long_name (function) - get_long_name(ea, gtn_flags=0) -> qstring - - @param ea: ea_t - @param gtn_flags: int - -ida_name.get_mangled_name_type (function) - get_mangled_name_type(name) -> mangled_name_type_t - - @param name: char const * - -ida_name.get_name (function) - get_name(ea) -> qstring - - @param ea: ea_t - -ida_name.get_name_base_ea (function) - get_name_base_ea(_from, to) -> ea_t - Get address of the name used in the expression for the address - - @param from: (C++: ea_t) address of the operand which references to the address - @param to: (C++: ea_t) the referenced address - @return: address of the name used to represent the operand - -ida_name.get_name_color (function) - get_name_color(_from, ea) -> color_t - Calculate flags for get_ea_name() function. - - Get name color. - - @param from: (C++: ea_t) 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. - @param ea: (C++: ea_t) linear address - -ida_name.get_name_ea (function) - get_name_ea(_from, name) -> ea_t - Get the address of a name. This function resolves a name into an address. It can - handle regular global and local names, as well as debugger names. - - @param from: (C++: ea_t) linear address where the name is used. If specified, the local - labels of the function at the specified address will will be - checked. BADADDR means that local names won't be consulted. - @param name: (C++: const char *) any name in the program or nullptr - @return: address of the name or BADADDR - -ida_name.get_name_expr (function) - 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 <name> +/- <offset>). It also knows about structure members and arrays. - If the specified address doesn't have a name, a dummy name is generated. - - @param from: (C++: ea_t) linear address of instruction operand or data referring to the - name. This address will be used to get fixup information, so it - should point to exact position of the operand in the instruction. - @param n: (C++: int) number of referencing operand. for data items specify 0 - @param ea: (C++: ea_t) address to convert to name expression - @param off: (C++: uval_t) 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. - @param flags: (C++: int) Name expression flags - @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 (function) - get_name_value(_from, name) -> int - Get value of the name. This function knows about: regular names, enums, special - segments, etc. - - @param from: (C++: ea_t) linear address where the name is used if not applicable, then - should be BADADDR - @param name: (C++: const char *) any name in the program or nullptr - @return: Name value result codes - -ida_name.get_nice_colored_name (function) - get_nice_colored_name(ea, flags=0) -> str - Get a nice colored name at the specified address. Ex: - * segment:sub+offset - * segment:sub:local_label - * segment:label - * segment:address - * segment:address+offset - - @param ea: (C++: ea_t) linear address - @param flags: (C++: int) Nice colored name flags - @return: the length of the generated name in bytes. - -ida_name.get_nlist_ea (function) - get_nlist_ea(idx) -> ea_t - Get address from the list at 'idx'. - - @param idx: (C++: size_t) - -ida_name.get_nlist_idx (function) - get_nlist_idx(ea) -> size_t - Get index of the name in the list - @warning: returns the closest match. may return idx >= size. - - @param ea: (C++: ea_t) - -ida_name.get_nlist_name (function) - get_nlist_name(idx) -> char const * - Get name using idx. - - @param idx: (C++: size_t) - -ida_name.get_nlist_size (function) - get_nlist_size() -> size_t - Get number of names in the list. - -ida_name.get_short_name (function) - get_short_name(ea, gtn_flags=0) -> qstring - - @param ea: ea_t - @param gtn_flags: int - -ida_name.get_visible_name (function) - get_visible_name(ea, gtn_flags=0) -> qstring - - @param ea: ea_t - @param gtn_flags: int - -ida_name.hide_name (function) - hide_name(ea) - Remove name from the list of names - - @param ea: (C++: ea_t) address of the name - -ida_name.is_ident (function) - is_ident(name) -> bool - Is a valid name? (including ::MangleChars) - - @param name: (C++: const char *) char const * - -ida_name.is_ident_cp (function) - 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 (function) - is_in_nlist(ea) -> bool - Is the name included into the name list? - - @param ea: (C++: ea_t) - -ida_name.is_name_defined_locally (function) - 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: (C++: func_t *) pointer to function - @param name: (C++: const char *) name to check - @param ignore_name_def: (C++: ignore_name_def_t) which names to ignore when checking - @param ea1: (C++: ea_t) the starting address of the range inside the function (optional) - @param ea2: (C++: ea_t) the ending address of the range inside the function (optional) - @return: true if the name has been defined - -ida_name.is_public_name (function) - is_public_name(ea) -> bool - - @param ea: ea_t - -ida_name.is_strlit_cp (function) - 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 *) rangeset_crefvec_t const * - -ida_name.is_uname (function) - is_uname(name) -> bool - Is valid user-specified name? (valid name & !dummy prefix). - - @param name: (C++: const char *) name to test. may be nullptr. - @retval 1: yes - @retval 0: no - -ida_name.is_valid_cp (function) - 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) enum nametype_t - @param data: (C++: void *) - -ida_name.is_valid_name (function) - is_valid_name(name, cpuregs_permitted) -> bool - - @param name: char const * - @param cpuregs_permitted: bool - -ida_name.is_valid_typename (function) - is_valid_typename(name) -> bool - Is valid type name? - - @param name: (C++: const char *) name to test. may be nullptr. - @retval 1: yes - @retval 0: no - -ida_name.is_visible_cp (function) - 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 (function) - is_weak_name(ea) -> bool - - @param ea: ea_t - -ida_name.make_name_auto (function) - make_name_auto(ea) -> bool - - @param ea: ea_t - -ida_name.make_name_non_public (function) - make_name_non_public(ea) - - @param ea: ea_t - -ida_name.make_name_non_weak (function) - make_name_non_weak(ea) - - @param ea: ea_t - -ida_name.make_name_public (function) - make_name_public(ea) - - @param ea: ea_t - -ida_name.make_name_user (function) - make_name_user(ea) -> bool - - @param ea: ea_t - -ida_name.make_name_weak (function) - make_name_weak(ea) - - @param ea: ea_t - -ida_name.rebuild_nlist (function) - rebuild_nlist() - Rebuild the name list. - -ida_name.reorder_dummy_names (function) - reorder_dummy_names() - Renumber dummy names. - -ida_name.set_cp_validity (function) - 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) enum ucdr_kind_t - @param cp: (C++: wchar32_t) - @param endcp: (C++: wchar32_t) - -ida_name.set_debug_name (function) - set_debug_name(ea, name) -> bool - - @param ea: ea_t - @param name: char const * - -ida_name.set_dummy_name (function) - set_dummy_name(_from, ea) -> bool - Give an autogenerated (dummy) name. Autogenerated names have special prefixes - (loc_...). - - @param from: (C++: ea_t) linear address of the operand which references to the address - @param ea: (C++: ea_t) linear address - @retval 1: ok, dummy name is generated or the byte already had a name - @retval 0: failure, invalid address or tail byte - -ida_name.set_name (function) - 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: (C++: ea_t) linear address. do nothing if ea is not valid (return 0). tail bytes - can't have names. - @param name: (C++: const char *) new name. - * nullptr: do nothing (return 0). - * "" : delete name. - * otherwise this is a new name. - @param flags: (C++: int) 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. - @retval 1: ok, name is changed - @retval 0: failure, a warning is displayed - -ida_name.show_name (function) - show_name(ea) - Insert name to the list of names. - - @param ea: (C++: ea_t) - -ida_name.validate_name (function) - validate_name(name, type, flags=0) -> PyObject * - Validate a name. If SN_NOCHECK is specified, 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: (C++: qstring *) ptr to name. the name will be modified - @param type: (C++: nametype_t) the type of name we want to validate - @param flags: (C++: int) see SN_* - @return: success - -ida_netnode (module) - Functions that provide the lowest level public interface to the database. - Namely, we use Btree. To learn more about BTree: - - \link{https://en.wikipedia.org/wiki/B-tree} - - We do not use Btree directly. Instead, we have another layer built on the top of - Btree. Here is a brief explanation of this layer. - - An object called "netnode" is modeled on the top of Btree. Each netnode has a - unique id: a 32-bit value (64-bit for ida64). Initially there is a trivial - mapping of the linear addresses used in the program to netnodes (later this - mapping may be modified using ea2node and node2ea functions; this is used for - fast database rebasings). If we have additional information about an address - (for example, a comment is attached to it), this information is stored in the - corresponding netnode. See nalt.hpp to see how the kernel uses netnodes. Also, - some netnodes have no corresponding linear address (however, they still have an - id). They are used to store information not related to a particular address. - - Each netnode _may_ have the following attributes: - - * a name: an arbitrary non-empty string, up to 255KB-1 bytes - * a value: arbitrary sized object, max size is MAXSPECSIZE - * altvals: a sparse array of 32-bit values. indexes in this array may be 8-bit - or 32-bit values - * supvals: an array of arbitrary sized objects. (size of each object is limited - by MAXSPECSIZE) indexes in this array may be 8-bit or 32-bit values - * charvals: a sparse array of 8-bit values. indexes in this array may be 8-bit - or 32-bit values - * hashvals: a hash (an associative array). indexes in this array are strings - values are arbitrary sized (max size is MAXSPECSIZE) - - Initially a new netnode contains no information at all so no disk space is used - for it. As you add new information, the netnode grows. - - All arrays that are attached to the netnode behave in the same manner. - Initially: - * all members of altvals/charvals array are zeroes - * all members of supvals/hashvals array are undefined - - If you need to store objects bigger that MAXSPECSIZE, please note that there are - high-level functions to store arbitrary sized objects in supvals. See - setblob/getblob and other blob-related functions. - - You may use netnodes to store additional information about the program. - Limitations on the use of netnodes are the following: - - * use netnodes only if you could not find a kernel service to store your type of - information - * do not create netnodes with valid identifier names. Use the "$ " prefix (or - any other prefix with characters not allowed in the identifiers for the names of - your netnodes. Although you will probably not destroy anything by accident, - using already defined names for the names of your netnodes is still discouraged. - * you may create as many netnodes as you want (creation of an unnamed netnode - does not increase the size of the database). however, since each netnode has a - number, creating too many netnodes could lead to the exhaustion of the netnode - numbers (the numbering starts at 0xFF000000) - * remember that netnodes are automatically saved to the disk by the kernel. - - Advanced info: - - In fact a netnode may contain up to 256 arrays of arbitrary sized objects (not - only the 4 listed above). Each array has an 8-bit tag. Usually tags are - represented by character constants. For example, altvals and supvals are simply - 2 of 256 arrays, with the tags 'A' and 'S' respectively. - -ida_netnode.BADNODE (variable) - A number to represent a bad netnode reference. - -ida_netnode.MAXNAMESIZE (variable) - Maximum length of a netnode name. WILL BE REMOVED IN THE FUTURE. - -ida_netnode.MAXSPECSIZE (variable) - Maximum length of strings or objects stored in a supval array element. - -ida_netnode.MAX_NODENAME_SIZE (variable) - Maximum length of a name. We permit names up to 32KB-1 bytes. - -ida_netnode.atag (variable) - Array of altvals. - -ida_netnode.exist (function) - exist(n) -> bool - - @param n: netnode const & - -ida_netnode.htag (variable) - Array of hashvals. - -ida_netnode.ltag (variable) - Links between netnodes. - -ida_netnode.netnode (class) - Proxy of C++ netnode class. - -ida_netnode.netnode.__eq__ (method) - __eq__(self, n) -> bool - - @param n: netnode & - - __eq__(self, x) -> bool - - @param x: nodeidx_t - -ida_netnode.netnode.__init__ (method) - __init__(self, num=nodeidx_t(-1)) -> netnode - - @param num: nodeidx_t - - __init__(self, _name, namlen=0, do_create=False) -> netnode - - @param _name: char const * - @param namlen: size_t - @param do_create: bool - -ida_netnode.netnode.__ne__ (method) - __ne__(self, n) -> bool - - @param n: netnode & - - __ne__(self, x) -> bool - - @param x: nodeidx_t - -ida_netnode.netnode.altdel (method) - altdel(self, alt, tag=atag) -> bool - Delete all elements of altval array. This function may be applied to 32-bit and - 8-bit altval arrays. This function deletes the whole altval array. - - @param alt: nodeidx_t - @param tag: uchar - - @return: success - altdel(self) -> bool - -ida_netnode.netnode.altdel_all (method) - altdel_all(self, tag=atag) -> bool - Delete all elements of the specified altval array. This function may be applied - to 32-bit and 8-bit altval arrays. This function deletes the whole altval array. - - @param tag: (C++: uchar) tag of array - @return: success - -ida_netnode.netnode.altdel_ea (method) - altdel_ea(self, ea, tag=atag) -> bool - - @param ea: ea_t - @param tag: uchar - -ida_netnode.netnode.altdel_idx8 (method) - altdel_idx8(self, alt, tag) -> bool - - @param alt: uchar - @param tag: uchar - -ida_netnode.netnode.altfirst (method) - altfirst(self, tag=atag) -> nodeidx_t - Get first existing element of altval array. - - @param tag: (C++: uchar) tag of array - @return: index of first existing element of altval array, BADNODE if altval - array is empty - -ida_netnode.netnode.altfirst_idx8 (method) - altfirst_idx8(self, tag) -> nodeidx_t - - @param tag: uchar - -ida_netnode.netnode.altlast (method) - altlast(self, tag=atag) -> nodeidx_t - Get last element of altval array. - - @param tag: (C++: uchar) tag of array - @return: index of last existing element of altval array, BADNODE if altval array - is empty - -ida_netnode.netnode.altlast_idx8 (method) - altlast_idx8(self, tag) -> nodeidx_t - - @param tag: uchar - -ida_netnode.netnode.altnext (method) - altnext(self, cur, tag=atag) -> nodeidx_t - Get next existing element of altval array. - - @param cur: (C++: nodeidx_t) current index - @param tag: (C++: uchar) tag of array - @return: index of the next existing element of altval array, BADNODE if no more - altval array elements exist - -ida_netnode.netnode.altnext_idx8 (method) - altnext_idx8(self, cur, tag) -> nodeidx_t - - @param cur: uchar - @param tag: uchar - -ida_netnode.netnode.altprev (method) - altprev(self, cur, tag=atag) -> nodeidx_t - Get previous existing element of altval array. - - @param cur: (C++: nodeidx_t) current index - @param tag: (C++: uchar) tag of array - @return: index of the previous existing element of altval array, BADNODE if no - more altval array elements exist - -ida_netnode.netnode.altprev_idx8 (method) - altprev_idx8(self, cur, tag) -> nodeidx_t - - @param cur: uchar - @param tag: uchar - -ida_netnode.netnode.altset (method) - altset(self, alt, value, tag=atag) -> bool - Set value of altval array. - - @param alt: (C++: nodeidx_t) index into array of altvals - @param value: (C++: nodeidx_t) new value of altval element - @param tag: (C++: uchar) tag of array - @retval 1: ok - @retval 0: failed, normally should not occur - -ida_netnode.netnode.altset_ea (method) - altset_ea(self, ea, value, tag=atag) -> bool - - @param ea: ea_t - @param value: nodeidx_t - @param tag: uchar - -ida_netnode.netnode.altset_idx8 (method) - altset_idx8(self, alt, val, tag) -> bool - - @param alt: uchar - @param val: nodeidx_t - @param tag: uchar - -ida_netnode.netnode.altshift (method) - altshift(self, _from, to, size, tag=atag) -> size_t - Shift the altval array elements. Moves the array elements at (from..from+size) - to (to..to+size) - - @param from: (C++: nodeidx_t) - @param to: (C++: nodeidx_t) - @param size: (C++: nodeidx_t) - @param tag: (C++: uchar) - @return: number of shifted elements - -ida_netnode.netnode.altval (method) - altval(self, alt, tag=atag) -> nodeidx_t - Get altval element of the specified array. - - @param alt: (C++: nodeidx_t) index into array of altvals - @param tag: (C++: uchar) tag of array. may be omitted - @return: value of altval element. nonexistent altval members are returned as - zeroes - -ida_netnode.netnode.altval_ea (method) - altval_ea(self, ea, tag=atag) -> nodeidx_t - - @param ea: ea_t - @param tag: uchar - -ida_netnode.netnode.altval_idx8 (method) - altval_idx8(self, alt, tag) -> nodeidx_t - - @param alt: uchar - @param tag: uchar - -ida_netnode.netnode.blobshift (method) - blobshift(self, _from, to, size, tag) -> size_t - Shift the blob array elements. Moves the array elements at (from..from+size) to - (to..to+size) - - @param from: (C++: nodeidx_t) - @param to: (C++: nodeidx_t) - @param size: (C++: nodeidx_t) - @param tag: (C++: uchar) - @return: number of shifted elements - -ida_netnode.netnode.blobsize (method) - blobsize(self, _start, tag) -> size_t - Get size of blob. - - @param _start: (C++: nodeidx_t) index of the first supval element used to store blob - @param tag: (C++: uchar) tag of supval array - @return: number of bytes required to store a blob - -ida_netnode.netnode.blobsize_ea (method) - blobsize_ea(self, ea, tag) -> size_t - - @param ea: ea_t - @param tag: uchar - -ida_netnode.netnode.chardel (method) - chardel(self, alt, tag) -> bool - - @param alt: nodeidx_t - @param tag: uchar - -ida_netnode.netnode.chardel_ea (method) - chardel_ea(self, ea, tag) -> bool - - @param ea: ea_t - @param tag: uchar - -ida_netnode.netnode.chardel_idx8 (method) - chardel_idx8(self, alt, tag) -> bool - - @param alt: uchar - @param tag: uchar - -ida_netnode.netnode.charfirst (method) - charfirst(self, tag) -> nodeidx_t - - @param tag: uchar - -ida_netnode.netnode.charfirst_idx8 (method) - charfirst_idx8(self, tag) -> nodeidx_t - - @param tag: uchar - -ida_netnode.netnode.charlast (method) - charlast(self, tag) -> nodeidx_t - - @param tag: uchar - -ida_netnode.netnode.charlast_idx8 (method) - charlast_idx8(self, tag) -> nodeidx_t - - @param tag: uchar - -ida_netnode.netnode.charnext (method) - charnext(self, cur, tag) -> nodeidx_t - - @param cur: nodeidx_t - @param tag: uchar - -ida_netnode.netnode.charnext_idx8 (method) - charnext_idx8(self, cur, tag) -> nodeidx_t - - @param cur: uchar - @param tag: uchar - -ida_netnode.netnode.charprev (method) - charprev(self, cur, tag) -> nodeidx_t - - @param cur: nodeidx_t - @param tag: uchar - -ida_netnode.netnode.charprev_idx8 (method) - charprev_idx8(self, cur, tag) -> nodeidx_t - - @param cur: uchar - @param tag: uchar - -ida_netnode.netnode.charset (method) - charset(self, alt, val, tag) -> bool - - @param alt: nodeidx_t - @param val: uchar - @param tag: uchar - -ida_netnode.netnode.charset_ea (method) - charset_ea(self, ea, val, tag) -> bool - - @param ea: ea_t - @param val: uchar - @param tag: uchar - -ida_netnode.netnode.charset_idx8 (method) - charset_idx8(self, alt, val, tag) -> bool - - @param alt: uchar - @param val: uchar - @param tag: uchar - -ida_netnode.netnode.charshift (method) - charshift(self, _from, to, size, tag) -> size_t - - @param from: nodeidx_t - @param to: nodeidx_t - @param size: nodeidx_t - @param tag: uchar - -ida_netnode.netnode.charval (method) - charval(self, alt, tag) -> uchar - - @param alt: nodeidx_t - @param tag: uchar - -ida_netnode.netnode.charval_ea (method) - charval_ea(self, ea, tag) -> uchar - - @param ea: ea_t - @param tag: uchar - -ida_netnode.netnode.charval_idx8 (method) - charval_idx8(self, alt, tag) -> uchar - - @param alt: uchar - @param tag: uchar - -ida_netnode.netnode.copyto (method) - copyto(self, destnode, count=1) -> size_t - - @param destnode: netnode - @param count: nodeidx_t - -ida_netnode.netnode.create (method) - create(self, _name, namlen=0) -> bool - Create unnamed netnode. - @retval 1: ok - @retval 0: should not happen, indicates internal error - - @param _name: char const * - @param namlen: size_t - - create(self) -> bool - -ida_netnode.netnode.delblob (method) - delblob(self, _start, tag) -> int - Delete a blob. - - @param _start: (C++: nodeidx_t) index of the first supval element used to store blob - @param tag: (C++: uchar) tag of supval array - @return: number of deleted supvals - -ida_netnode.netnode.delblob_ea (method) - delblob_ea(self, ea, tag) -> int - - @param ea: ea_t - @param tag: uchar - -ida_netnode.netnode.delvalue (method) - delvalue(self) -> bool - Delete value of netnode. - @retval 1: ok - @retval 0: failed, netnode is bad or other error - -ida_netnode.netnode.eadel (method) - eadel(self, ea, tag) -> bool - - @param ea: ea_t - @param tag: uchar - -ida_netnode.netnode.eadel_idx8 (method) - eadel_idx8(self, idx, tag) -> bool - - @param idx: uchar - @param tag: uchar - -ida_netnode.netnode.eaget (method) - eaget(self, ea, tag) -> ea_t - - @param ea: ea_t - @param tag: uchar - -ida_netnode.netnode.eaget_idx (method) - eaget_idx(self, idx, tag) -> ea_t - - @param idx: nodeidx_t - @param tag: uchar - -ida_netnode.netnode.eaget_idx8 (method) - eaget_idx8(self, idx, tag) -> ea_t - - @param idx: uchar - @param tag: uchar - -ida_netnode.netnode.easet (method) - easet(self, ea, addr, tag) -> bool - Store/retrieve/delete an address value in the netnode that corresponds to an - address. - - @param ea: (C++: ea_t) - @param addr: (C++: ea_t) - @param tag: (C++: uchar) - -ida_netnode.netnode.easet_idx (method) - easet_idx(self, idx, addr, tag) -> bool - - @param idx: nodeidx_t - @param addr: ea_t - @param tag: uchar - -ida_netnode.netnode.easet_idx8 (method) - easet_idx8(self, idx, addr, tag) -> bool - - @param idx: uchar - @param addr: ea_t - @param tag: uchar - -ida_netnode.netnode.end (method) - end(self) -> bool - Get last netnode in the graph. Sets netnodenumber to the highest existing - number. - @retval true: ok - @retval false: graph is empty - -ida_netnode.netnode.exist (method) - exist(_name) -> bool - Does the netnode with the specified name exist? - - @param _name: (C++: const char *) char const * - -ida_netnode.netnode.get_name (method) - get_name(self) -> ssize_t - Get the netnode name. - - @return: -1 if netnode is unnamed (buf is untouched in this case), otherwise the - name length - -ida_netnode.netnode.getblob (method) - getblob(self, start, tag) -> bytes or None - Get blob from a netnode into a qstring* and make sure the string is null- - terminated. - - @param start: nodeidx_t - @param tag: (C++: uchar) tag of supval array - @return: -1 if blob doesn't exist size of string (including terminating null) - otherwise - -ida_netnode.netnode.getblob_ea (method) - getblob_ea(self, ea, tag) -> PyObject * - - @param ea: ea_t - @param tag: char - -ida_netnode.netnode.getclob (method) - getclob(self, start, tag) -> str - - @param start: nodeidx_t - @param tag: char - -ida_netnode.netnode.hashdel (method) - hashdel(self, idx, tag=htag) -> bool - Delete hash element. - - @param idx: (C++: const char *) index into hash - @param tag: (C++: uchar) tag of hash. Default: htag - @retval true: deleted - @retval false: element does not exist - -ida_netnode.netnode.hashdel_all (method) - hashdel_all(self, tag=htag) -> bool - Delete all elements of hash. This function deletes the whole hash. - - @param tag: (C++: uchar) tag of hash. Default: htag - @return: success - -ida_netnode.netnode.hashfirst (method) - hashfirst(self, tag=htag) -> ssize_t - @see: hashfirst(qstring *buf, uchar tag=htag) const - - @param tag: (C++: uchar) - -ida_netnode.netnode.hashlast (method) - hashlast(self, tag=htag) -> ssize_t - @see: hashlast(qstring *buf, uchar tag=htag) const - - @param tag: (C++: uchar) - -ida_netnode.netnode.hashnext (method) - hashnext(self, idx, tag=htag) -> ssize_t - @see: hashnext(qstring *buf, const char *idx, uchar tag=htag) const - - @param idx: (C++: const char *) char const * - @param tag: (C++: uchar) - -ida_netnode.netnode.hashprev (method) - hashprev(self, idx, tag=htag) -> ssize_t - @see: hashprev(qstring *buf, const char *idx, uchar tag=htag) const - - @param idx: (C++: const char *) char const * - @param tag: (C++: uchar) - -ida_netnode.netnode.hashset (method) - hashset(self, idx, value, tag=htag) -> bool - Set value of hash element to long value. - - @param idx: (C++: const char *) index into hash - @param value: (C++: nodeidx_t) new value of hash element - @param tag: (C++: uchar) tag of hash. Default: htag - @retval 1: ok - @retval 0: should not occur - indicates internal error - -ida_netnode.netnode.hashset_buf (method) - hashset_buf(self, idx, py_str, tag=htag) -> bool - - @param idx: char const * - @param py_str: PyObject * - @param tag: char - -ida_netnode.netnode.hashset_idx (method) - hashset_idx(self, idx, value, tag=htag) -> bool - - @param idx: char const * - @param value: nodeidx_t - @param tag: uchar - -ida_netnode.netnode.hashstr (method) - hashstr(self, idx, tag=htag) -> ssize_t - @see: hashstr(qstring *buf, const char *idx, uchar tag=htag) const - - @param idx: (C++: const char *) char const * - @param tag: (C++: uchar) - -ida_netnode.netnode.hashstr_buf (method) - hashstr_buf(self, idx, tag=htag) -> PyObject * - - @param idx: char const * - @param tag: char - -ida_netnode.netnode.hashval (method) - hashval(self, idx, tag=htag) -> ssize_t - Get value of the specified hash element. - - @param idx: (C++: const char *) index into hash - @param tag: (C++: uchar) tag of hash. Default: htag - @return: -1 if element doesn't exist or idx is nullptr. otherwise returns the - value size in bytes - -ida_netnode.netnode.hashval_long (method) - hashval_long(self, idx, tag=htag) -> nodeidx_t - Get value of the specified hash element. - - @param idx: (C++: const char *) index into hash - @param tag: (C++: uchar) tag of hash. Default: htag - @return: value of hash element (it should be set using hashset(nodeidx_t)), 0 if - the element does not exist - -ida_netnode.netnode.index (method) - index(self) -> nodeidx_t - -ida_netnode.netnode.kill (method) - kill(self) - Delete a netnode with all information attached to it. - -ida_netnode.netnode.long_value (method) - long_value(self) -> nodeidx_t - -ida_netnode.netnode.lower_bound (method) - lower_bound(self, cur, tag=stag) -> nodeidx_t - Get lower bound of existing elements of supval array. - - @param cur: (C++: nodeidx_t) current index - @param tag: (C++: uchar) tag of array - @return: index of first existing element of supval array >= cur BADNODE if - supval array is empty - -ida_netnode.netnode.lower_bound_ea (method) - lower_bound_ea(self, ea, tag=stag) -> nodeidx_t - - @param ea: ea_t - @param tag: uchar - -ida_netnode.netnode.lower_bound_idx8 (method) - lower_bound_idx8(self, alt, tag) -> nodeidx_t - - @param alt: uchar - @param tag: uchar - -ida_netnode.netnode.moveto (method) - moveto(self, destnode, count=1) -> size_t - - @param destnode: netnode - @param count: nodeidx_t - -ida_netnode.netnode.next (method) - next(self) -> bool - Get next netnode in the graph. Sets netnodenumber to the next existing number - @retval true: ok - @retval false: no more netnodes - -ida_netnode.netnode.prev (method) - prev(self) -> bool - Get prev netnode in the graph. Sets netnodenumber to the previous existing - number - @retval true: ok - @retval false: no more netnodes - -ida_netnode.netnode.rename (method) - rename(self, newname, namlen=0) -> bool - Rename a netnode. - - @param newname: (C++: const char *) new name of netnode. nullptr or "" means to delete name. names - of user-defined netnodes must have the "$ " prefix in order to - avoid clashes with program byte names. - @param namlen: (C++: size_t) length of new name. if not specified, it will be calculated using - strlen() - @retval 1: ok - @retval 0: failed, newname is already used - -ida_netnode.netnode.set (method) - set(self, value) -> bool - Set value of netnode. - - @param value: (C++: const void *) pointer to value - @return: 1 - ok - -ida_netnode.netnode.set_long (method) - set_long(self, x) -> bool - Value of netnode as a long number: - - @param x: (C++: nodeidx_t) - -ida_netnode.netnode.setblob (method) - setblob(self, buf, _start, tag) -> bool - Store a blob in a netnode. - - @param buf: (C++: const void *) pointer to blob to save - @param _start: (C++: nodeidx_t) - @param tag: (C++: uchar) tag of supval array - @return: success - -ida_netnode.netnode.setblob_ea (method) - setblob_ea(self, buf, ea, tag) -> bool - - @param buf: void const * - @param ea: ea_t - @param tag: uchar - -ida_netnode.netnode.start (method) - start(self) -> bool - Get first netnode in the graph. Sets netnodenumber to the lowest existing - number. - @retval true: ok - @retval false: graph is empty - -ida_netnode.netnode.supdel (method) - supdel(self, alt, tag=stag) -> bool - Delete all elements of supval array. This function may be applied to 32-bit and - 8-bit supval arrays. This function deletes the whole supval array. - - @param alt: nodeidx_t - @param tag: uchar - - @return: success - supdel(self) -> bool - -ida_netnode.netnode.supdel_all (method) - supdel_all(self, tag) -> bool - Delete all elements of the specified supval array. This function may be applied - to 32-bit and 8-bit supval arrays. This function deletes the whole supval array. - - @param tag: (C++: uchar) - @return: success - -ida_netnode.netnode.supdel_ea (method) - supdel_ea(self, ea, tag=stag) -> bool - - @param ea: ea_t - @param tag: uchar - -ida_netnode.netnode.supdel_idx8 (method) - supdel_idx8(self, alt, tag) -> bool - - @param alt: uchar - @param tag: uchar - -ida_netnode.netnode.supdel_range (method) - supdel_range(self, idx1, idx2, tag) -> int - Delete range of elements in the specified supval array. Elements in range [idx1, - idx2) will be deleted. - @note: This function can also be used to delete a range of altval elements - - @param idx1: (C++: nodeidx_t) first element to delete - @param idx2: (C++: nodeidx_t) last element to delete + 1 - @param tag: (C++: uchar) tag of array - @return: number of deleted elements - -ida_netnode.netnode.supdel_range_idx8 (method) - supdel_range_idx8(self, idx1, idx2, tag) -> int - Same as above, but accepts 8-bit indexes. - - @param idx1: (C++: uchar) - @param idx2: (C++: uchar) - @param tag: (C++: uchar) - -ida_netnode.netnode.supfirst (method) - supfirst(self, tag=stag) -> nodeidx_t - Get first existing element of supval array. - - @param tag: (C++: uchar) tag of array - @return: index of first existing element of supval array, BADNODE if supval - array is empty - -ida_netnode.netnode.supfirst_idx8 (method) - supfirst_idx8(self, tag) -> nodeidx_t - - @param tag: uchar - -ida_netnode.netnode.suplast (method) - suplast(self, tag=stag) -> nodeidx_t - Get last existing element of supval array. - - @param tag: (C++: uchar) tag of array - @return: index of last existing element of supval array, BADNODE if supval array - is empty - -ida_netnode.netnode.suplast_idx8 (method) - suplast_idx8(self, tag) -> nodeidx_t - - @param tag: uchar - -ida_netnode.netnode.supnext (method) - supnext(self, cur, tag=stag) -> nodeidx_t - Get next existing element of supval array. - - @param cur: (C++: nodeidx_t) current index - @param tag: (C++: uchar) tag of array - @return: index of the next existing element of supval array, BADNODE if no more - supval array elements exist - -ida_netnode.netnode.supnext_idx8 (method) - supnext_idx8(self, alt, tag) -> nodeidx_t - - @param alt: uchar - @param tag: uchar - -ida_netnode.netnode.supprev (method) - supprev(self, cur, tag=stag) -> nodeidx_t - Get previous existing element of supval array. - - @param cur: (C++: nodeidx_t) current index - @param tag: (C++: uchar) tag of array - @return: index of the previous existing element of supval array BADNODE if no - more supval array elements exist - -ida_netnode.netnode.supprev_idx8 (method) - supprev_idx8(self, alt, tag) -> nodeidx_t - - @param alt: uchar - @param tag: uchar - -ida_netnode.netnode.supset (method) - supset(self, alt, value, tag=stag) -> bool - Set value of supval array element. - - @param alt: (C++: nodeidx_t) index into array of supvals - @param value: (C++: const void *) pointer to supval value - @param tag: (C++: uchar) tag of array - @retval 1: ok - @retval 0: should not occur - indicates internal error - -ida_netnode.netnode.supset_ea (method) - supset_ea(self, ea, value, tag=stag) -> bool - - @param ea: ea_t - @param value: void const * - @param tag: uchar - -ida_netnode.netnode.supset_idx8 (method) - supset_idx8(self, alt, value, tag) -> bool - - @param alt: uchar - @param value: void const * - @param tag: uchar - -ida_netnode.netnode.supshift (method) - supshift(self, _from, to, size, tag=stag) -> size_t - Shift the supval array elements. Moves the array elements at (from..from+size) - to (to..to+size) - - @param from: (C++: nodeidx_t) - @param to: (C++: nodeidx_t) - @param size: (C++: nodeidx_t) - @param tag: (C++: uchar) - @return: number of shifted elements - -ida_netnode.netnode.supstr (method) - supstr(self, alt, tag=stag) -> ssize_t - @see: supstr(qstring *buf, nodeidx_t alt, uchar tag=stag) const - - @param alt: (C++: nodeidx_t) - @param tag: (C++: uchar) - -ida_netnode.netnode.supstr_ea (method) - supstr_ea(self, ea, tag=stag) -> ssize_t - - @param ea: ea_t - @param tag: uchar - -ida_netnode.netnode.supstr_idx8 (method) - supstr_idx8(self, alt, tag) -> ssize_t - - @param alt: uchar - @param tag: uchar - -ida_netnode.netnode.supval (method) - supval(self, alt, tag=stag) -> ssize_t - Get value of the specified supval array element. NB: do not use this function to - retrieve strings, see supstr()! - - @param alt: (C++: nodeidx_t) index into array of supvals - @param tag: (C++: uchar) tag of array. Default: stag - @return: size of value, -1 if element doesn't exist - -ida_netnode.netnode.supval_ea (method) - supval_ea(self, ea, tag=stag) -> ssize_t - - @param ea: ea_t - @param tag: uchar - -ida_netnode.netnode.supval_idx8 (method) - supval_idx8(self, alt, tag) -> ssize_t - - @param alt: uchar - @param tag: uchar - -ida_netnode.netnode.valobj (method) - valobj(self) -> ssize_t - Get value of netnode. Netnode values are arbitrary sized objects with max size - is MAXSPECSIZE. NB: do not use this function for strings - see valstr(). - - @return: length of value, -1 if no value present - -ida_netnode.netnode.valstr (method) - valstr(self) -> ssize_t - @see: valstr(qstring *buf) const - -ida_netnode.netnode.value_exists (method) - value_exists(self) -> bool - -ida_netnode.netnode_exist (function) - netnode_exist(_name) -> bool - - @param _name: char const * - -ida_netnode.ntag (variable) - Name of netnode. - -ida_netnode.stag (variable) - Array of supvals. - -ida_netnode.vtag (variable) - Value of netnode. - -ida_offset (module) - Functions that deal with offsets. - - "Being an offset" is a characteristic of an operand. This means that operand or - its part represent offset from some address in the program. This linear address - is called "offset base". Some operands may have 2 offsets simultaneously. - Generally, IDA doesn't handle this except for Motorola outer offsets. Thus there - may be two offset values in an operand: simple offset and outer offset. - - Outer offsets are handled by specifying special operand number: it should be - ORed with OPND_OUTER value. - - See bytes.hpp for further explanation of operand numbers. - -ida_offset.add_refinfo_dref (function) - 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: (C++: const insn_t &) the referencing instruction - @param from: (C++: ea_t) the referencing instruction/data address - @param ri: (C++: const refinfo_t &) reference info block from the database - @param opval: (C++: adiff_t) operand value (usually op_t::value or op_t::addr) - @param type: (C++: dref_t) type of xref - @param opoff: (C++: int) offset of the operand from the start of instruction - @return: the target address of the reference - -ida_offset.calc_basevalue (function) - 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 (function) - 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: (C++: ea_t) the referencing instruction/data address - @param n: (C++: int) operand number - * 0: first operand - * 1: second operand - * ... - * 7: eighth operand - @return: output base address or BADADDR - -ida_offset.calc_probable_base_by_value (function) - 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 (function) - 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: (C++: ea_t *) output target address - @param base: (C++: ea_t *) output base address - @param from: (C++: ea_t) the referencing instruction/data address - @param ri: (C++: const refinfo_t &) reference info block from the database - @param opval: (C++: adiff_t) operand value (usually op_t::value or op_t::addr) - @return: success - -ida_offset.calc_target (function) - calc_target(_from, opval, ri) -> ea_t - Retrieve refinfo_t structure and calculate the target. - - @param from: (C++: ea_t) - @param opval: (C++: adiff_t) - @param ri: refinfo_t const & - - calc_target(_from, ea, n, opval) -> ea_t - - @param from: ea_t - @param ea: ea_t - @param n: int - @param opval: adiff_t - -ida_offset.can_be_off32 (function) - 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 (function) - 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, REF_OFF64 - -ida_offset.get_offbase (function) - get_offbase(ea, n) -> ea_t - Get offset base value - - @param ea: (C++: ea_t) linear address - @param n: (C++: int) 0..UA_MAXOP-1 operand number - @return: offset base or BADADDR - -ida_offset.get_offset_expr (function) - 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 &) refinfo_t const & - @param from: (C++: ea_t) - @param offset: (C++: adiff_t) - @param getn_flags: (C++: int) - -ida_offset.get_offset_expression (function) - 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 ( processor_t::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: (C++: ea_t) start of instruction or data with the offset expression - @param n: (C++: int) operand number (may be ORed with OPND_OUTER) - * 0: first operand - * 1: second operand - * ... - * 7: eighth operand - @param from: (C++: ea_t) linear address of instruction operand or data referring to the - name. This address will be used to get fixup information, so it - should point to exact position of operand in the instruction. - @param offset: (C++: adiff_t) value of operand or its part. The function will return text - representation of this value as offset expression. - @param getn_flags: (C++: int) 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) - @retval 0: can't convert to offset expression - @retval 1: ok, a simple offset expression - @retval 2: ok, a complex offset expression - -ida_offset.op_offset (function) - op_offset(ea, n, type_and_flags, target=BADADDR, base=0, tdelta=0) -> bool - See op_offset_ex() - - @param ea: (C++: ea_t) - @param n: (C++: int) - @param type_and_flags: (C++: uint32) - @param target: (C++: ea_t) - @param base: (C++: ea_t) - @param tdelta: (C++: adiff_t) - -ida_offset.op_offset_ex (function) - op_offset_ex(ea, n, ri) -> bool - Convert operand to a reference. To delete an offset, use clr_op_type() function. - - @param ea: (C++: ea_t) 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 - @param n: (C++: int) operand number (may be ORed with OPND_OUTER) - * 0: first - * 1: second - * ... - * 7: eighth operand - * OPND_MASK: all operands - @param ri: (C++: const refinfo_t *) reference information - @return: success - -ida_offset.op_plain_offset (function) - 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) - -ida_pro (module) - This is the first header included in the IDA project. - - It defines the most common types, functions and data. Also, it tries to make - system dependent definitions. - - The following preprocessor macros are used in the project (the list may be - incomplete) - - Platform must be specified as one of: - - __NT__ - MS Windows (all platforms) - __LINUX__ - Linux - __MAC__ - MAC OS X - - __EA64__ - 64-bit address size (sizeof(ea_t)==8) - __X86__ - 32-bit debug servers (sizeof(void*)==4) - __X64__ - x64 processor (sizeof(void*)==8) default - __PPC__ - PowerPC - __ARM__ - ARM - -ida_pro.CP_UTF16 (variable) - UTF-16 codepage. - -ida_pro.IDA_SDK_VERSION (variable) - IDA SDK v8.4. - -ida_pro.IDBDEC_ESCAPE (variable) - convert non-printable characters to C escapes ( - , \xNN, \uNNNN) - -ida_pro.IOREDIR_APPEND (variable) - append, do not overwrite the output file - -ida_pro.IOREDIR_INPUT (variable) - input redirection - -ida_pro.IOREDIR_OUTPUT (variable) - output redirection - -ida_pro.IOREDIR_QUOTED (variable) - the file name was quoted - -ida_pro.MAXSTR (variable) - maximum string size - -ida_pro.SUBSTCHAR (variable) - default char, used if a char cannot be represented in a codepage - -ida_pro.__MF__ (variable) - byte sex of our platform (Most significant byte First). 0: little endian (Intel - 80x86). 1: big endian (PowerPC). - -ida_pro.__qmutex_t (class) - Proxy of C++ __qmutex_t class. - -ida_pro.__qmutex_t.__init__ (method) - __init__(self) -> __qmutex_t - -ida_pro.__qsemaphore_t (class) - Proxy of C++ __qsemaphore_t class. - -ida_pro.__qsemaphore_t.__init__ (method) - __init__(self) -> __qsemaphore_t - -ida_pro.__qthread_t (class) - Proxy of C++ __qthread_t class. - -ida_pro.__qthread_t.__init__ (method) - __init__(self) -> __qthread_t - -ida_pro._qstrvec_t (class) - 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. - -ida_pro._qstrvec_t.__get_size (method) - -ida_pro._qstrvec_t.__getitem__ (method) - Gets the string at the given index - -ida_pro._qstrvec_t.__init__ (method) - -ida_pro._qstrvec_t.__setitem__ (method) - Sets string at the given index - -ida_pro._qstrvec_t._create_clink (method) - -ida_pro._qstrvec_t._del_clink (method) - -ida_pro._qstrvec_t._get_clink_ptr (method) - -ida_pro._qstrvec_t.add (method) - Add a string to the vector - -ida_pro._qstrvec_t.addressof (method) - Returns the address (as number) of the qstring at the given index - -ida_pro._qstrvec_t.assign (method) - Copies the contents of 'other' to 'self' - -ida_pro._qstrvec_t.clear (method) - Clears all strings from the vector. - @param qclear: Just reset the size but do not actually free the memory - -ida_pro._qstrvec_t.from_list (method) - Populates the vector from a Python string list - -ida_pro._qstrvec_t.insert (method) - Insert a string into the vector - -ida_pro._qstrvec_t.remove (method) - Removes a string from the vector - -ida_pro._qstrvec_t.size (variable) - Returns the count of elements - -ida_pro.boolvec_t (class) - Proxy of C++ qvector< bool > class. - -ida_pro.boolvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< bool > const & - -ida_pro.boolvec_t.__getitem__ (method) - __getitem__(self, i) -> bool const & - - @param i: size_t - -ida_pro.boolvec_t.__init__ (method) - __init__(self) -> boolvec_t - __init__(self, x) -> boolvec_t - - @param x: qvector< bool > const & - -ida_pro.boolvec_t.__len__ (method) - __len__(self) -> size_t - -ida_pro.boolvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< bool > const & - -ida_pro.boolvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: bool const & - -ida_pro.boolvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: bool const & - -ida_pro.boolvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: bool const & - -ida_pro.boolvec_t.at (method) - at(self, _idx) -> bool const & - - @param _idx: size_t - -ida_pro.boolvec_t.begin (method) - begin(self) -> qvector< bool >::iterator - begin(self) -> qvector< bool >::const_iterator - -ida_pro.boolvec_t.capacity (method) - capacity(self) -> size_t - -ida_pro.boolvec_t.clear (method) - clear(self) - -ida_pro.boolvec_t.empty (method) - empty(self) -> bool - -ida_pro.boolvec_t.end (method) - end(self) -> qvector< bool >::iterator - end(self) -> qvector< bool >::const_iterator - -ida_pro.boolvec_t.erase (method) - erase(self, it) -> qvector< bool >::iterator - - @param it: qvector< bool >::iterator - - erase(self, first, last) -> qvector< bool >::iterator - - @param first: qvector< bool >::iterator - @param last: qvector< bool >::iterator - -ida_pro.boolvec_t.extract (method) - extract(self) -> bool * - -ida_pro.boolvec_t.find (method) - find(self, x) -> qvector< bool >::iterator - - @param x: bool const & - - find(self, x) -> qvector< bool >::const_iterator - - @param x: bool const & - -ida_pro.boolvec_t.grow (method) - grow(self, x=bool()) - - @param x: bool const & - -ida_pro.boolvec_t.has (method) - has(self, x) -> bool - - @param x: bool const & - -ida_pro.boolvec_t.inject (method) - inject(self, s, len) - - @param s: bool * - @param len: size_t - -ida_pro.boolvec_t.insert (method) - insert(self, it, x) -> qvector< bool >::iterator - - @param it: qvector< bool >::iterator - @param x: bool const & - -ida_pro.boolvec_t.pop_back (method) - pop_back(self) - -ida_pro.boolvec_t.push_back (method) - push_back(self, x) - - @param x: bool const & - - push_back(self) -> bool & - -ida_pro.boolvec_t.qclear (method) - qclear(self) - -ida_pro.boolvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_pro.boolvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: bool const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_pro.boolvec_t.size (method) - size(self) -> size_t - -ida_pro.boolvec_t.swap (method) - swap(self, r) - - @param r: qvector< bool > & - -ida_pro.boolvec_t.truncate (method) - truncate(self) - -ida_pro.channel_redir_t (class) - Proxy of C++ channel_redir_t class. - -ida_pro.channel_redir_t.__init__ (method) - __init__(self) -> channel_redir_t - -ida_pro.channel_redir_t.fd (variable) - channel number - -ida_pro.channel_redir_t.file (variable) - file name to redirect to/from. if empty, the channel must be closed. - -ida_pro.channel_redir_t.flags (variable) - i/o redirection flags - -ida_pro.channel_redir_t.is_append (method) - is_append(self) -> bool - -ida_pro.channel_redir_t.is_input (method) - is_input(self) -> bool - -ida_pro.channel_redir_t.is_output (method) - is_output(self) -> bool - -ida_pro.channel_redir_t.is_quoted (method) - is_quoted(self) -> bool - -ida_pro.channel_redir_t.length (variable) - length of the redirection string in the command line - -ida_pro.channel_redir_t.start (variable) - begin of the redirection string in the command line - -ida_pro.check_process_exit (function) - check_process_exit(handle, exit_code, msecs=-1) -> int - Check whether process has terminated or not. - - @param handle: (C++: void *) process handle to wait for - @param exit_code: (C++: int *) pointer to the buffer for the exit code - @param msecs: how long to wait. special values: - * 0: do not wait - * 1 or -1: wait infinitely - * other values: timeout in milliseconds - @retval 0: process has exited, and the exit code is available. if *exit_code < - 0: the process was killed with a signal -*exit_code - @retval 1: process has not exited yet - @retval -1: error happened, see error code for winerr() in *exit_code - -ida_pro.ea_array (class) - Proxy of C++ ea_array class. - -ida_pro.ea_array.__getitem__ (method) - __getitem__(self, index) -> ea_t - - @param index: size_t - -ida_pro.ea_array.__init__ (method) - __init__(self, nelements) -> ea_array - - @param nelements: size_t - -ida_pro.ea_array.__setitem__ (method) - __setitem__(self, index, value) - - @param index: size_t - @param value: ea_t - -ida_pro.ea_array.cast (method) - cast(self) -> ea_t * - -ida_pro.ea_array.frompointer (method) - frompointer(t) -> ea_array - - @param t: ea_t * - -ida_pro.ea_array_frompointer (function) - ea_array_frompointer(t) -> ea_array - - @param t: ea_t * - -ida_pro.ea_pointer (class) - Proxy of C++ ea_pointer class. - -ida_pro.ea_pointer.__init__ (method) - __init__(self) -> ea_pointer - -ida_pro.ea_pointer.assign (method) - assign(self, value) - - @param value: ea_t - -ida_pro.ea_pointer.cast (method) - cast(self) -> ea_t * - -ida_pro.ea_pointer.frompointer (method) - frompointer(t) -> ea_pointer - - @param t: ea_t * - -ida_pro.ea_pointer.value (method) - value(self) -> ea_t - -ida_pro.ea_pointer_frompointer (function) - ea_pointer_frompointer(t) -> ea_pointer - - @param t: ea_t * - -ida_pro.extend_sign (function) - 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) - -ida_pro.instant_dbgopts_t (class) - Proxy of C++ instant_dbgopts_t class. - -ida_pro.instant_dbgopts_t.__init__ (method) - __init__(self) -> instant_dbgopts_t - -ida_pro.instant_dbgopts_t.attach (variable) - should attach to a process? - -ida_pro.instant_dbgopts_t.debmod (variable) - name of debugger module - -ida_pro.instant_dbgopts_t.env (variable) - config variables for debmod. example: DEFAULT_CPU=13;MAXPACKETSIZE=-1 - -ida_pro.instant_dbgopts_t.event_id (variable) - event to trigger upon attaching - -ida_pro.instant_dbgopts_t.host (variable) - remote hostname (if remote debugging) - -ida_pro.instant_dbgopts_t.pid (variable) - process to attach to (-1: ask the user) - -ida_pro.instant_dbgopts_t.port (variable) - port number for the remote debugger server - -ida_pro.int64vec_t (class) - Proxy of C++ qvector< long long > class. - -ida_pro.int64vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< long long > const & - -ida_pro.int64vec_t.__getitem__ (method) - __getitem__(self, i) -> long long const & - - @param i: size_t - -ida_pro.int64vec_t.__init__ (method) - __init__(self) -> int64vec_t - __init__(self, x) -> int64vec_t - - @param x: qvector< long long > const & - -ida_pro.int64vec_t.__len__ (method) - __len__(self) -> size_t - -ida_pro.int64vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< long long > const & - -ida_pro.int64vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: long long const & - -ida_pro.int64vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: long long const & - -ida_pro.int64vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: long long const & - -ida_pro.int64vec_t.at (method) - at(self, _idx) -> long long const & - - @param _idx: size_t - -ida_pro.int64vec_t.begin (method) - begin(self) -> qvector< long long >::iterator - begin(self) -> qvector< long long >::const_iterator - -ida_pro.int64vec_t.capacity (method) - capacity(self) -> size_t - -ida_pro.int64vec_t.clear (method) - clear(self) - -ida_pro.int64vec_t.empty (method) - empty(self) -> bool - -ida_pro.int64vec_t.end (method) - end(self) -> qvector< long long >::iterator - end(self) -> qvector< long long >::const_iterator - -ida_pro.int64vec_t.erase (method) - erase(self, it) -> qvector< long long >::iterator - - @param it: qvector< long long >::iterator - - erase(self, first, last) -> qvector< long long >::iterator - - @param first: qvector< long long >::iterator - @param last: qvector< long long >::iterator - -ida_pro.int64vec_t.extract (method) - extract(self) -> long long * - -ida_pro.int64vec_t.find (method) - find(self, x) -> qvector< long long >::iterator - - @param x: long long const & - - find(self, x) -> qvector< long long >::const_iterator - - @param x: long long const & - -ida_pro.int64vec_t.has (method) - has(self, x) -> bool - - @param x: long long const & - -ida_pro.int64vec_t.inject (method) - inject(self, s, len) - - @param s: long long * - @param len: size_t - -ida_pro.int64vec_t.insert (method) - insert(self, it, x) -> qvector< long long >::iterator - - @param it: qvector< long long >::iterator - @param x: long long const & - -ida_pro.int64vec_t.pop_back (method) - pop_back(self) - -ida_pro.int64vec_t.push_back (method) - push_back(self, x) - - @param x: long long const & - - push_back(self) -> long long & - -ida_pro.int64vec_t.qclear (method) - qclear(self) - -ida_pro.int64vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_pro.int64vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: long long const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_pro.int64vec_t.size (method) - size(self) -> size_t - -ida_pro.int64vec_t.swap (method) - swap(self, r) - - @param r: qvector< long long > & - -ida_pro.int64vec_t.truncate (method) - truncate(self) - -ida_pro.int_pointer (class) - Proxy of C++ int_pointer class. - -ida_pro.int_pointer.__init__ (method) - __init__(self) -> int_pointer - -ida_pro.int_pointer.assign (method) - assign(self, value) - - @param value: int - -ida_pro.int_pointer.cast (method) - cast(self) -> int * - -ida_pro.int_pointer.frompointer (method) - frompointer(t) -> int_pointer - - @param t: int * - -ida_pro.int_pointer.value (method) - value(self) -> int - -ida_pro.int_pointer_frompointer (function) - int_pointer_frompointer(t) -> int_pointer - - @param t: int * - -ida_pro.intvec_t (class) - Proxy of C++ qvector< int > class. - -ida_pro.intvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< int > const & - -ida_pro.intvec_t.__getitem__ (method) - __getitem__(self, i) -> int const & - - @param i: size_t - -ida_pro.intvec_t.__init__ (method) - __init__(self) -> intvec_t - __init__(self, x) -> intvec_t - - @param x: qvector< int > const & - -ida_pro.intvec_t.__len__ (method) - __len__(self) -> size_t - -ida_pro.intvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< int > const & - -ida_pro.intvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: int const & - -ida_pro.intvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: int const & - -ida_pro.intvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: int const & - -ida_pro.intvec_t.at (method) - at(self, _idx) -> int const & - - @param _idx: size_t - -ida_pro.intvec_t.begin (method) - begin(self) -> qvector< int >::iterator - begin(self) -> qvector< int >::const_iterator - -ida_pro.intvec_t.capacity (method) - capacity(self) -> size_t - -ida_pro.intvec_t.clear (method) - clear(self) - -ida_pro.intvec_t.empty (method) - empty(self) -> bool - -ida_pro.intvec_t.end (method) - end(self) -> qvector< int >::iterator - end(self) -> qvector< int >::const_iterator - -ida_pro.intvec_t.erase (method) - erase(self, it) -> qvector< int >::iterator - - @param it: qvector< int >::iterator - - erase(self, first, last) -> qvector< int >::iterator - - @param first: qvector< int >::iterator - @param last: qvector< int >::iterator - -ida_pro.intvec_t.extract (method) - extract(self) -> int * - -ida_pro.intvec_t.find (method) - find(self, x) -> qvector< int >::iterator - - @param x: int const & - - find(self, x) -> qvector< int >::const_iterator - - @param x: int const & - -ida_pro.intvec_t.has (method) - has(self, x) -> bool - - @param x: int const & - -ida_pro.intvec_t.inject (method) - inject(self, s, len) - - @param s: int * - @param len: size_t - -ida_pro.intvec_t.insert (method) - insert(self, it, x) -> qvector< int >::iterator - - @param it: qvector< int >::iterator - @param x: int const & - -ida_pro.intvec_t.pop_back (method) - pop_back(self) - -ida_pro.intvec_t.push_back (method) - push_back(self, x) - - @param x: int const & - - push_back(self) -> int & - -ida_pro.intvec_t.qclear (method) - qclear(self) - -ida_pro.intvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_pro.intvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: int const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_pro.intvec_t.size (method) - size(self) -> size_t - -ida_pro.intvec_t.swap (method) - swap(self, r) - - @param r: qvector< int > & - -ida_pro.intvec_t.truncate (method) - truncate(self) - -ida_pro.is_control_tty (function) - 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_cvt64 (function) - is_cvt64() -> bool - is IDA converting IDB into I64? - -ida_pro.is_main_thread (function) - is_main_thread() -> bool - Are we running in the main thread? - -ida_pro.log2ceil (function) - log2ceil(d64) -> int - calculate ceil(log2(d64)) or floor(log2(d64)), it returns 0 if d64 == 0 - - @param d64: (C++: uint64) - -ida_pro.log2floor (function) - log2floor(d64) -> int - - @param d64: uint64 - -ida_pro.parse_dbgopts (function) - 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 *) instant_dbgopts_t * - @param r_switch: (C++: const char *) char const * - @return: true-ok, false-parse error - -ida_pro.qatoll (function) - qatoll(nptr) -> int64 - - @param nptr: char const * - -ida_pro.qcontrol_tty (function) - qcontrol_tty() - Make the current terminal the controlling terminal of the calling process. - @note: The current terminal is supposed to be /dev/tty - -ida_pro.qdetach_tty (function) - qdetach_tty() - If the current terminal is the controlling terminal of the calling process, give - up this controlling terminal. - @note: The current terminal is supposed to be /dev/tty - -ida_pro.qexit (function) - qexit(code) - Call qatexit functions, shut down UI and kernel, and exit. - - @param code: (C++: int) exit code - -ida_pro.qmutex_locker_t (class) - Proxy of C++ qmutex_locker_t class. - -ida_pro.qmutex_locker_t.__init__ (method) - __init__(self, _lock) -> qmutex_locker_t - - @param _lock: qmutex_t - -ida_pro.qrefcnt_obj_t (class) - Proxy of C++ qrefcnt_obj_t class. - -ida_pro.qrefcnt_obj_t.__init__ (method) - -ida_pro.qrefcnt_obj_t.refcnt (variable) - counter - -ida_pro.qrefcnt_obj_t.release (method) - release(self) - Call destructor. We use release() instead of operator delete() to maintain - binary compatibility with all compilers (vc and gcc use different vtable layouts - for operator delete) - -ida_pro.qstrvec_t_add (function) - qstrvec_t_add(_self, s) -> bool - - @param self: PyObject * - @param s: char const * - -ida_pro.qstrvec_t_addressof (function) - qstrvec_t_addressof(_self, idx) -> PyObject * - - @param self: PyObject * - @param idx: size_t - -ida_pro.qstrvec_t_assign (function) - qstrvec_t_assign(_self, other) -> bool - - @param self: PyObject * - @param other: PyObject * - -ida_pro.qstrvec_t_clear (function) - qstrvec_t_clear(_self, qclear) -> bool - - @param self: PyObject * - @param qclear: bool - -ida_pro.qstrvec_t_create (function) - qstrvec_t_create() -> PyObject * - -ida_pro.qstrvec_t_destroy (function) - qstrvec_t_destroy(py_obj) -> bool - - @param py_obj: PyObject * - -ida_pro.qstrvec_t_from_list (function) - qstrvec_t_from_list(_self, py_list) -> bool - - @param self: PyObject * - @param py_list: PyObject * - -ida_pro.qstrvec_t_get (function) - qstrvec_t_get(_self, idx) -> PyObject * - - @param self: PyObject * - @param idx: size_t - -ida_pro.qstrvec_t_get_clink (function) - qstrvec_t_get_clink(_self) -> qstrvec_t * - - @param self: PyObject * - -ida_pro.qstrvec_t_get_clink_ptr (function) - qstrvec_t_get_clink_ptr(_self) -> PyObject * - - @param self: PyObject * - -ida_pro.qstrvec_t_insert (function) - qstrvec_t_insert(_self, idx, s) -> bool - - @param self: PyObject * - @param idx: size_t - @param s: char const * - -ida_pro.qstrvec_t_remove (function) - qstrvec_t_remove(_self, idx) -> bool - - @param self: PyObject * - @param idx: size_t - -ida_pro.qstrvec_t_set (function) - qstrvec_t_set(_self, idx, s) -> bool - - @param self: PyObject * - @param idx: size_t - @param s: char const * - -ida_pro.qstrvec_t_size (function) - qstrvec_t_size(_self) -> size_t - - @param self: PyObject * - -ida_pro.qthread_equal (function) - qthread_equal(q1, q2) -> bool - Are two threads equal? - - @param q1: (C++: qthread_t) - @param q2: (C++: qthread_t) - -ida_pro.quote_cmdline_arg (function) - 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 (function) - qvector_reserve(vec, old, cnt, elsize) -> void * - Change capacity of given qvector. - - @param vec: (C++: void *) a pointer to a qvector - @param old: (C++: void *) a pointer to the qvector's array - @param cnt: (C++: size_t) number of elements to reserve - @param elsize: (C++: size_t) size of each element - @return: a pointer to the newly allocated array - -ida_pro.readbytes (function) - readbytes(h, res, size, mf) -> int - Read at most 4 bytes from file. - - @param h: (C++: int) file handle - @param res: (C++: uint32 *) value read from file - @param size: (C++: int) size of value in bytes (1,2,4) - @param mf: (C++: bool) is MSB first? - @return: 0 on success, nonzero otherwise - -ida_pro.reloc_value (function) - reloc_value(value, size, delta, mf) - - @param value: void * - @param size: int - @param delta: adiff_t - @param mf: bool - -ida_pro.relocate_relobj (function) - relocate_relobj(_relobj, ea, mf) -> bool - - @param _relobj: relobj_t * - @param ea: ea_t - @param mf: bool - -ida_pro.sel_array (class) - Proxy of C++ sel_array class. - -ida_pro.sel_array.__getitem__ (method) - __getitem__(self, index) -> sel_t - - @param index: size_t - -ida_pro.sel_array.__init__ (method) - __init__(self, nelements) -> sel_array - - @param nelements: size_t - -ida_pro.sel_array.__setitem__ (method) - __setitem__(self, index, value) - - @param index: size_t - @param value: sel_t - -ida_pro.sel_array.cast (method) - cast(self) -> sel_t * - -ida_pro.sel_array.frompointer (method) - frompointer(t) -> sel_array - - @param t: sel_t * - -ida_pro.sel_array_frompointer (function) - sel_array_frompointer(t) -> sel_array - - @param t: sel_t * - -ida_pro.sel_pointer (class) - Proxy of C++ sel_pointer class. - -ida_pro.sel_pointer.__init__ (method) - __init__(self) -> sel_pointer - -ida_pro.sel_pointer.assign (method) - assign(self, value) - - @param value: sel_t - -ida_pro.sel_pointer.cast (method) - cast(self) -> sel_t * - -ida_pro.sel_pointer.frompointer (method) - frompointer(t) -> sel_pointer - - @param t: sel_t * - -ida_pro.sel_pointer.value (method) - value(self) -> sel_t - -ida_pro.sel_pointer_frompointer (function) - sel_pointer_frompointer(t) -> sel_pointer - - @param t: sel_t * - -ida_pro.sizevec_t (class) - Proxy of C++ qvector< size_t > class. - -ida_pro.sizevec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< size_t > const & - -ida_pro.sizevec_t.__getitem__ (method) - __getitem__(self, i) -> size_t const & - - @param i: size_t - -ida_pro.sizevec_t.__init__ (method) - __init__(self) -> sizevec_t - __init__(self, x) -> sizevec_t - - @param x: qvector< size_t > const & - -ida_pro.sizevec_t.__len__ (method) - __len__(self) -> size_t - -ida_pro.sizevec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< size_t > const & - -ida_pro.sizevec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: size_t const & - -ida_pro.sizevec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: size_t const & - -ida_pro.sizevec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: size_t const & - -ida_pro.sizevec_t.at (method) - at(self, _idx) -> size_t const & - - @param _idx: size_t - -ida_pro.sizevec_t.begin (method) - begin(self) -> qvector< size_t >::iterator - begin(self) -> qvector< size_t >::const_iterator - -ida_pro.sizevec_t.capacity (method) - capacity(self) -> size_t - -ida_pro.sizevec_t.clear (method) - clear(self) - -ida_pro.sizevec_t.empty (method) - empty(self) -> bool - -ida_pro.sizevec_t.end (method) - end(self) -> qvector< size_t >::iterator - end(self) -> qvector< size_t >::const_iterator - -ida_pro.sizevec_t.erase (method) - erase(self, it) -> qvector< size_t >::iterator - - @param it: qvector< size_t >::iterator - - erase(self, first, last) -> qvector< size_t >::iterator - - @param first: qvector< size_t >::iterator - @param last: qvector< size_t >::iterator - -ida_pro.sizevec_t.extract (method) - extract(self) -> size_t * - -ida_pro.sizevec_t.find (method) - find(self, x) -> qvector< size_t >::iterator - - @param x: size_t const & - - find(self, x) -> qvector< size_t >::const_iterator - - @param x: size_t const & - -ida_pro.sizevec_t.grow (method) - grow(self, x=size_t()) - - @param x: size_t const & - -ida_pro.sizevec_t.has (method) - has(self, x) -> bool - - @param x: size_t const & - -ida_pro.sizevec_t.inject (method) - inject(self, s, len) - - @param s: size_t * - @param len: size_t - -ida_pro.sizevec_t.insert (method) - insert(self, it, x) -> qvector< size_t >::iterator - - @param it: qvector< size_t >::iterator - @param x: size_t const & - -ida_pro.sizevec_t.pop_back (method) - pop_back(self) - -ida_pro.sizevec_t.push_back (method) - push_back(self, x) - - @param x: size_t const & - - push_back(self) -> size_t & - -ida_pro.sizevec_t.qclear (method) - qclear(self) - -ida_pro.sizevec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_pro.sizevec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: size_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_pro.sizevec_t.size (method) - size(self) -> size_t - -ida_pro.sizevec_t.swap (method) - swap(self, r) - - @param r: qvector< size_t > & - -ida_pro.sizevec_t.truncate (method) - truncate(self) - -ida_pro.str2user (function) - str2user(str) -> str or None - Insert C-style escape characters to string - - @param str: char const * - @return: new string with escape characters inserted - -ida_pro.strvec_t (class) - Proxy of C++ qvector< simpleline_t > class. - -ida_pro.strvec_t.__getitem__ (method) - __getitem__(self, i) -> simpleline_t const & - - @param i: size_t - -ida_pro.strvec_t.__init__ (method) - __init__(self) -> strvec_t - __init__(self, x) -> strvec_t - - @param x: qvector< simpleline_t > const & - -ida_pro.strvec_t.__len__ (method) - __len__(self) -> size_t - -ida_pro.strvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: simpleline_t const & - -ida_pro.strvec_t.at (method) - at(self, _idx) -> simpleline_t const & - - @param _idx: size_t - -ida_pro.strvec_t.begin (method) - begin(self) -> qvector< simpleline_t >::iterator - begin(self) -> qvector< simpleline_t >::const_iterator - -ida_pro.strvec_t.capacity (method) - capacity(self) -> size_t - -ida_pro.strvec_t.clear (method) - clear(self) - -ida_pro.strvec_t.empty (method) - empty(self) -> bool - -ida_pro.strvec_t.end (method) - end(self) -> qvector< simpleline_t >::iterator - end(self) -> qvector< simpleline_t >::const_iterator - -ida_pro.strvec_t.erase (method) - erase(self, it) -> qvector< simpleline_t >::iterator - - @param it: qvector< simpleline_t >::iterator - - erase(self, first, last) -> qvector< simpleline_t >::iterator - - @param first: qvector< simpleline_t >::iterator - @param last: qvector< simpleline_t >::iterator - -ida_pro.strvec_t.extract (method) - extract(self) -> simpleline_t * - -ida_pro.strvec_t.grow (method) - grow(self, x=simpleline_t()) - - @param x: simpleline_t const & - -ida_pro.strvec_t.inject (method) - inject(self, s, len) - - @param s: simpleline_t * - @param len: size_t - -ida_pro.strvec_t.insert (method) - insert(self, it, x) -> qvector< simpleline_t >::iterator - - @param it: qvector< simpleline_t >::iterator - @param x: simpleline_t const & - -ida_pro.strvec_t.pop_back (method) - pop_back(self) - -ida_pro.strvec_t.push_back (method) - push_back(self, x) - - @param x: simpleline_t const & - - push_back(self) -> simpleline_t & - -ida_pro.strvec_t.qclear (method) - qclear(self) - -ida_pro.strvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_pro.strvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: simpleline_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_pro.strvec_t.size (method) - size(self) -> size_t - -ida_pro.strvec_t.swap (method) - swap(self, r) - - @param r: qvector< simpleline_t > & - -ida_pro.strvec_t.truncate (method) - truncate(self) - -ida_pro.sval_pointer (class) - Proxy of C++ sval_pointer class. - -ida_pro.sval_pointer.__init__ (method) - __init__(self) -> sval_pointer - -ida_pro.sval_pointer.assign (method) - assign(self, value) - - @param value: sval_t - -ida_pro.sval_pointer.cast (method) - cast(self) -> sval_t * - -ida_pro.sval_pointer.frompointer (method) - frompointer(t) -> sval_pointer - - @param t: sval_t * - -ida_pro.sval_pointer.value (method) - value(self) -> sval_t - -ida_pro.sval_pointer_frompointer (function) - sval_pointer_frompointer(t) -> sval_pointer - - @param t: sval_t * - -ida_pro.tid_array (class) - Proxy of C++ tid_array class. - -ida_pro.tid_array.__getitem__ (method) - __getitem__(self, index) -> tid_t - - @param index: size_t - -ida_pro.tid_array.__init__ (method) - __init__(self, nelements) -> tid_array - - @param nelements: size_t - -ida_pro.tid_array.__setitem__ (method) - __setitem__(self, index, value) - - @param index: size_t - @param value: tid_t - -ida_pro.tid_array.cast (method) - cast(self) -> tid_t * - -ida_pro.tid_array.frompointer (method) - frompointer(t) -> tid_array - - @param t: tid_t * - -ida_pro.tid_array_frompointer (function) - tid_array_frompointer(t) -> tid_array - - @param t: tid_t * - -ida_pro.uchar_array (class) - Proxy of C++ uchar_array class. - -ida_pro.uchar_array.__getitem__ (method) - __getitem__(self, index) -> uchar - - @param index: size_t - -ida_pro.uchar_array.__init__ (method) - __init__(self, nelements) -> uchar_array - - @param nelements: size_t - -ida_pro.uchar_array.__setitem__ (method) - __setitem__(self, index, value) - - @param index: size_t - @param value: uchar - -ida_pro.uchar_array.cast (method) - cast(self) -> uchar * - -ida_pro.uchar_array.frompointer (method) - frompointer(t) -> uchar_array - - @param t: uchar * - -ida_pro.uchar_array_frompointer (function) - uchar_array_frompointer(t) -> uchar_array - - @param t: uchar * - -ida_pro.uint64vec_t (class) - Proxy of C++ qvector< unsigned long long > class. - -ida_pro.uint64vec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< unsigned long long > const & - -ida_pro.uint64vec_t.__getitem__ (method) - __getitem__(self, i) -> unsigned long long const & - - @param i: size_t - -ida_pro.uint64vec_t.__init__ (method) - __init__(self) -> uint64vec_t - __init__(self, x) -> uint64vec_t - - @param x: qvector< unsigned long long > const & - -ida_pro.uint64vec_t.__len__ (method) - __len__(self) -> size_t - -ida_pro.uint64vec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< unsigned long long > const & - -ida_pro.uint64vec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: unsigned long long const & - -ida_pro.uint64vec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: unsigned long long const & - -ida_pro.uint64vec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: unsigned long long const & - -ida_pro.uint64vec_t.at (method) - at(self, _idx) -> unsigned long long const & - - @param _idx: size_t - -ida_pro.uint64vec_t.begin (method) - begin(self) -> qvector< unsigned long long >::iterator - begin(self) -> qvector< unsigned long long >::const_iterator - -ida_pro.uint64vec_t.capacity (method) - capacity(self) -> size_t - -ida_pro.uint64vec_t.clear (method) - clear(self) - -ida_pro.uint64vec_t.empty (method) - empty(self) -> bool - -ida_pro.uint64vec_t.end (method) - end(self) -> qvector< unsigned long long >::iterator - end(self) -> qvector< unsigned long long >::const_iterator - -ida_pro.uint64vec_t.erase (method) - erase(self, it) -> qvector< unsigned long long >::iterator - - @param it: qvector< unsigned long long >::iterator - - erase(self, first, last) -> qvector< unsigned long long >::iterator - - @param first: qvector< unsigned long long >::iterator - @param last: qvector< unsigned long long >::iterator - -ida_pro.uint64vec_t.extract (method) - extract(self) -> unsigned long long * - -ida_pro.uint64vec_t.find (method) - find(self, x) -> qvector< unsigned long long >::iterator - - @param x: unsigned long long const & - - find(self, x) -> qvector< unsigned long long >::const_iterator - - @param x: unsigned long long const & - -ida_pro.uint64vec_t.has (method) - has(self, x) -> bool - - @param x: unsigned long long const & - -ida_pro.uint64vec_t.inject (method) - inject(self, s, len) - - @param s: unsigned long long * - @param len: size_t - -ida_pro.uint64vec_t.insert (method) - insert(self, it, x) -> qvector< unsigned long long >::iterator - - @param it: qvector< unsigned long long >::iterator - @param x: unsigned long long const & - -ida_pro.uint64vec_t.pop_back (method) - pop_back(self) - -ida_pro.uint64vec_t.push_back (method) - push_back(self, x) - - @param x: unsigned long long const & - - push_back(self) -> unsigned long long & - -ida_pro.uint64vec_t.qclear (method) - qclear(self) - -ida_pro.uint64vec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_pro.uint64vec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: unsigned long long const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_pro.uint64vec_t.size (method) - size(self) -> size_t - -ida_pro.uint64vec_t.swap (method) - swap(self, r) - - @param r: qvector< unsigned long long > & - -ida_pro.uint64vec_t.truncate (method) - truncate(self) - -ida_pro.uintvec_t (class) - Proxy of C++ qvector< unsigned int > class. - -ida_pro.uintvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< unsigned int > const & - -ida_pro.uintvec_t.__getitem__ (method) - __getitem__(self, i) -> unsigned int const & - - @param i: size_t - -ida_pro.uintvec_t.__init__ (method) - __init__(self) -> uintvec_t - __init__(self, x) -> uintvec_t - - @param x: qvector< unsigned int > const & - -ida_pro.uintvec_t.__len__ (method) - __len__(self) -> size_t - -ida_pro.uintvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< unsigned int > const & - -ida_pro.uintvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: unsigned int const & - -ida_pro.uintvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: unsigned int const & - -ida_pro.uintvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: unsigned int const & - -ida_pro.uintvec_t.at (method) - at(self, _idx) -> unsigned int const & - - @param _idx: size_t - -ida_pro.uintvec_t.begin (method) - begin(self) -> qvector< unsigned int >::iterator - begin(self) -> qvector< unsigned int >::const_iterator - -ida_pro.uintvec_t.capacity (method) - capacity(self) -> size_t - -ida_pro.uintvec_t.clear (method) - clear(self) - -ida_pro.uintvec_t.empty (method) - empty(self) -> bool - -ida_pro.uintvec_t.end (method) - end(self) -> qvector< unsigned int >::iterator - end(self) -> qvector< unsigned int >::const_iterator - -ida_pro.uintvec_t.erase (method) - erase(self, it) -> qvector< unsigned int >::iterator - - @param it: qvector< unsigned int >::iterator - - erase(self, first, last) -> qvector< unsigned int >::iterator - - @param first: qvector< unsigned int >::iterator - @param last: qvector< unsigned int >::iterator - -ida_pro.uintvec_t.extract (method) - extract(self) -> unsigned int * - -ida_pro.uintvec_t.find (method) - find(self, x) -> qvector< unsigned int >::iterator - - @param x: unsigned int const & - - find(self, x) -> qvector< unsigned int >::const_iterator - - @param x: unsigned int const & - -ida_pro.uintvec_t.has (method) - has(self, x) -> bool - - @param x: unsigned int const & - -ida_pro.uintvec_t.inject (method) - inject(self, s, len) - - @param s: unsigned int * - @param len: size_t - -ida_pro.uintvec_t.insert (method) - insert(self, it, x) -> qvector< unsigned int >::iterator - - @param it: qvector< unsigned int >::iterator - @param x: unsigned int const & - -ida_pro.uintvec_t.pop_back (method) - pop_back(self) - -ida_pro.uintvec_t.push_back (method) - push_back(self, x) - - @param x: unsigned int const & - - push_back(self) -> unsigned int & - -ida_pro.uintvec_t.qclear (method) - qclear(self) - -ida_pro.uintvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_pro.uintvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: unsigned int const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_pro.uintvec_t.size (method) - size(self) -> size_t - -ida_pro.uintvec_t.swap (method) - swap(self, r) - - @param r: qvector< unsigned int > & - -ida_pro.uintvec_t.truncate (method) - truncate(self) - -ida_pro.uval_array (class) - Proxy of C++ uval_array class. - -ida_pro.uval_array.__getitem__ (method) - __getitem__(self, index) -> uval_t - - @param index: size_t - -ida_pro.uval_array.__init__ (method) - __init__(self, nelements) -> uval_array - - @param nelements: size_t - -ida_pro.uval_array.__setitem__ (method) - __setitem__(self, index, value) - - @param index: size_t - @param value: uval_t - -ida_pro.uval_array.cast (method) - cast(self) -> uval_t * - -ida_pro.uval_array.frompointer (method) - frompointer(t) -> uval_array - - @param t: uval_t * - -ida_pro.uval_array_frompointer (function) - uval_array_frompointer(t) -> uval_array - - @param t: uval_t * - -ida_pro.writebytes (function) - writebytes(h, l, size, mf) -> int - Write at most 4 bytes to file. - - @param h: (C++: int) file handle - @param l: (C++: uint32) value to write - @param size: (C++: int) size of value in bytes (1,2,4) - @param mf: (C++: bool) is MSB first? - @return: 0 on success, nonzero otherwise - -ida_problems (module) - Functions that deal with the list of problems. - - There are several problem lists. An address may be inserted to any list. The - kernel simply maintains these lists, no additional processing is done. - - The problem lists are accessible for the user from the View->Subviews->Problems - menu item. - - Addresses in the lists are kept sorted. In general IDA just maintains these - lists without using them during analysis (except PR_ROLLED). - -ida_problems.PR_ATTN (variable) - Attention! Probably erroneous situation. - -ida_problems.PR_BADSTACK (variable) - Failed to trace the value of the stack pointer. - -ida_problems.PR_COLLISION (variable) - FLAIR collision: the function with the given name already exists. - -ida_problems.PR_DECIMP (variable) - FLAIR match indecision: the patterns matched, but not the function(s) being - referenced. - -ida_problems.PR_DISASM (variable) - Can't disasm. - -ida_problems.PR_END (variable) - Number of problem types. - -ida_problems.PR_FINAL (variable) - Decision to convert to instruction/data is made by IDA. - -ida_problems.PR_HEAD (variable) - Already head. - -ida_problems.PR_ILLADDR (variable) - Exec flows beyond limits. - -ida_problems.PR_JUMP (variable) - Jump by table !!!! ignored. - -ida_problems.PR_MANYLINES (variable) - Too many lines. - -ida_problems.PR_NOBASE (variable) - Can't find offset base. - -ida_problems.PR_NOCMT (variable) - Can't find comment (not used anymore) - -ida_problems.PR_NOFOP (variable) - Can't find forced op (not used anymore) - -ida_problems.PR_NONAME (variable) - Can't find name. - -ida_problems.PR_NOXREFS (variable) - Can't find references. - -ida_problems.PR_ROLLED (variable) - The decision made by IDA was wrong and rolled back. - -ida_problems.forget_problem (function) - forget_problem(type, ea) -> bool - Remove an address from a problem list - - @param type: (C++: problist_id_t) problem list type - @param ea: (C++: ea_t) linear address - @return: success - -ida_problems.get_problem (function) - get_problem(type, lowea) -> ea_t - Get an address from the specified problem list. The address is not removed from - the list. - - @param type: (C++: problist_id_t) problem list type - @param lowea: (C++: ea_t) the returned address will be higher or equal than the specified - address - @return: linear address or BADADDR - -ida_problems.get_problem_desc (function) - get_problem_desc(t, ea) -> str - Get the human-friendly description of the problem, if one was provided to - remember_problem. - - @param t: (C++: problist_id_t) problem list type. - @param ea: (C++: ea_t) linear address. - @return: the message length or -1 if none - -ida_problems.get_problem_name (function) - 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 (function) - 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 (function) - 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: (C++: problist_id_t) problem list type - @param ea: (C++: ea_t) linear address - @param msg: (C++: const char *) a user-friendly message to be displayed instead of the default more - generic one associated with the type of problem. Defaults to - nullptr. - -ida_problems.was_ida_decision (function) - was_ida_decision(ea) -> bool - - @param ea: ea_t - -ida_range (module) - Contains the definition of range_t. - - A range is a non-empty continuous range of addresses (specified by its start and - end addresses, the end address is excluded from the range). - - Ranges are stored in the Btree part of the IDA database. To learn more about - Btrees (Balanced Trees): \link{http://www.bluerwhite.org/btree/} - -ida_range.RANGE_KIND_FUNC (variable) - func_t - -ida_range.RANGE_KIND_HIDDEN_RANGE (variable) - hidden_range_t - -ida_range.RANGE_KIND_SEGMENT (variable) - segment_t - -ida_range.array_of_rangesets (class) - Proxy of C++ qvector< rangeset_t > class. - -ida_range.array_of_rangesets.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< rangeset_t > const & - -ida_range.array_of_rangesets.__getitem__ (method) - __getitem__(self, i) -> rangeset_t - - @param i: size_t - -ida_range.array_of_rangesets.__init__ (method) - __init__(self) -> array_of_rangesets - __init__(self, x) -> array_of_rangesets - - @param x: qvector< rangeset_t > const & - -ida_range.array_of_rangesets.__len__ (method) - __len__(self) -> size_t - -ida_range.array_of_rangesets.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< rangeset_t > const & - -ida_range.array_of_rangesets.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: rangeset_t const & - -ida_range.array_of_rangesets._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: rangeset_t const & - -ida_range.array_of_rangesets.add_unique (method) - add_unique(self, x) -> bool - - @param x: rangeset_t const & - -ida_range.array_of_rangesets.at (method) - at(self, _idx) -> rangeset_t - - @param _idx: size_t - -ida_range.array_of_rangesets.begin (method) - begin(self) -> rangeset_t - -ida_range.array_of_rangesets.capacity (method) - capacity(self) -> size_t - -ida_range.array_of_rangesets.clear (method) - clear(self) - -ida_range.array_of_rangesets.empty (method) - empty(self) -> bool - -ida_range.array_of_rangesets.end (method) - end(self) -> rangeset_t - -ida_range.array_of_rangesets.erase (method) - erase(self, it) -> rangeset_t - - @param it: qvector< rangeset_t >::iterator - - erase(self, first, last) -> rangeset_t - - @param first: qvector< rangeset_t >::iterator - @param last: qvector< rangeset_t >::iterator - -ida_range.array_of_rangesets.extract (method) - extract(self) -> rangeset_t - -ida_range.array_of_rangesets.find (method) - find(self, x) -> rangeset_t - - @param x: rangeset_t const & - -ida_range.array_of_rangesets.grow (method) - grow(self, x=rangeset_t()) - - @param x: rangeset_t const & - -ida_range.array_of_rangesets.has (method) - has(self, x) -> bool - - @param x: rangeset_t const & - -ida_range.array_of_rangesets.inject (method) - inject(self, s, len) - - @param s: rangeset_t * - @param len: size_t - -ida_range.array_of_rangesets.insert (method) - insert(self, it, x) -> rangeset_t - - @param it: qvector< rangeset_t >::iterator - @param x: rangeset_t const & - -ida_range.array_of_rangesets.pop_back (method) - pop_back(self) - -ida_range.array_of_rangesets.push_back (method) - push_back(self, x) - - @param x: rangeset_t const & - - push_back(self) -> rangeset_t - -ida_range.array_of_rangesets.qclear (method) - qclear(self) - -ida_range.array_of_rangesets.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_range.array_of_rangesets.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: rangeset_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_range.array_of_rangesets.size (method) - size(self) -> size_t - -ida_range.array_of_rangesets.swap (method) - swap(self, r) - - @param r: qvector< rangeset_t > & - -ida_range.array_of_rangesets.truncate (method) - truncate(self) - -ida_range.range_t (class) - Proxy of C++ range_t class. - -ida_range.range_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: range_t const & - -ida_range.range_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: range_t const & - -ida_range.range_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: range_t const & - -ida_range.range_t.__init__ (method) - __init__(self, ea1=0, ea2=0) -> range_t - - @param ea1: ea_t - @param ea2: ea_t - -ida_range.range_t.__le__ (method) - __le__(self, r) -> bool - - @param r: range_t const & - -ida_range.range_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: range_t const & - -ida_range.range_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: range_t const & - -ida_range.range_t._print (method) - _print(self) -> size_t - -ida_range.range_t.clear (method) - clear(self) - Set start_ea, end_ea to 0. - -ida_range.range_t.compare (method) - compare(self, r) -> int - - @param r: range_t const & - -ida_range.range_t.contains (method) - contains(self, ea) -> bool - Is every ea in 'r' also in this range_t? - - @param ea: ea_t - - contains(self, r) -> bool - - @param r: range_t const & - -ida_range.range_t.empty (method) - empty(self) -> bool - Is the size of the range_t <= 0? - -ida_range.range_t.end_ea (variable) - end_ea excluded - -ida_range.range_t.extend (method) - extend(self, ea) - Ensure that the range_t includes 'ea'. - - @param ea: (C++: ea_t) - -ida_range.range_t.intersect (method) - intersect(self, r) - Assign the range_t to the intersection between the range_t and 'r'. - - @param r: (C++: const range_t &) range_t const & - -ida_range.range_t.overlaps (method) - overlaps(self, r) -> bool - Is there an ea in 'r' that is also in this range_t? - - @param r: (C++: const range_t &) range_t const & - -ida_range.range_t.size (method) - size(self) -> asize_t - Get end_ea - start_ea. - -ida_range.range_t.start_ea (variable) - start_ea included - -ida_range.range_t_print (function) - range_t_print(cb) -> str - Helper function. Should not be called directly! - - @param cb: range_t const * - -ida_range.rangeset_t (class) - Proxy of C++ rangeset_t class. - -ida_range.rangeset_t.__eq__ (method) - __eq__(self, aset) -> bool - - @param aset: rangeset_t const & - -ida_range.rangeset_t.__getitem__ (method) - -ida_range.rangeset_t.__init__ (method) - __init__(self) -> rangeset_t - __init__(self, range) -> rangeset_t - - @param range: range_t const & - - __init__(self, ivs) -> rangeset_t - - @param ivs: rangeset_t const & - -ida_range.rangeset_t.__ne__ (method) - __ne__(self, aset) -> bool - - @param aset: rangeset_t const & - -ida_range.rangeset_t._print (method) - _print(self) -> size_t - -ida_range.rangeset_t.add (method) - add(self, range) -> bool - Add each element of 'aset' to the set. - - @param range: range_t const & - - @return: false if no elements were added (the set was unchanged) - add(self, start, _end) -> bool - - @param start: ea_t - @param _end: ea_t - - add(self, aset) -> bool - - @param aset: rangeset_t const & - -ida_range.rangeset_t.begin (method) - begin(self) -> range_t - Get an iterator that points to the first element in the set. - -ida_range.rangeset_t.cached_range (method) - cached_range(self) -> range_t - When searching the rangeset, we keep a cached element to help speed up searches. - - @return: a pointer to the cached element - -ida_range.rangeset_t.clear (method) - clear(self) - Delete all elements from the set. See qvector::clear() - -ida_range.rangeset_t.contains (method) - contains(self, ea) -> bool - Is every element in 'aset' contained in an element of this rangeset?. See - range_t::contains(range_t) - - @param ea: ea_t - - contains(self, aset) -> bool - - @param aset: rangeset_t const & - -ida_range.rangeset_t.empty (method) - empty(self) -> bool - Does the set have zero elements. - -ida_range.rangeset_t.end (method) - end(self) -> range_t - Get an iterator that points to the end of the set. (This is NOT the last - element) - -ida_range.rangeset_t.find_range (method) - find_range(self, ea) -> range_t - Get the element from the set that contains 'ea'. - - @param ea: (C++: ea_t) - @return: nullptr if there is no such element - -ida_range.rangeset_t.getrange (method) - getrange(self, idx) -> range_t - Get the range_t at index 'idx'. - - @param idx: (C++: int) - -ida_range.rangeset_t.has_common (method) - has_common(self, range) -> bool - Does any element of 'aset' overlap with an element in this rangeset?. See - range_t::overlaps() - - @param range: range_t const & - - has_common(self, aset) -> bool - - @param aset: rangeset_t const & - -ida_range.rangeset_t.includes (method) - includes(self, range) -> bool - Is every ea in 'range' contained in the rangeset? - - @param range: (C++: const range_t &) range_t const & - -ida_range.rangeset_t.intersect (method) - intersect(self, aset) -> bool - Set the rangeset to its intersection with 'aset'. - - @param aset: (C++: const rangeset_t &) rangeset_t const & - @return: false if the set was unchanged - -ida_range.rangeset_t.is_equal (method) - is_equal(self, aset) -> bool - Do this rangeset and 'aset' have identical elements? - - @param aset: (C++: const rangeset_t &) rangeset_t const & - -ida_range.rangeset_t.is_subset_of (method) - is_subset_of(self, aset) -> bool - Is every element in the rangeset contained in an element of 'aset'? - - @param aset: (C++: const rangeset_t &) rangeset_t const & - -ida_range.rangeset_t.lastrange (method) - lastrange(self) -> range_t - Get the last range_t in the set. - -ida_range.rangeset_t.next_addr (method) - next_addr(self, ea) -> ea_t - Get the smallest ea_t value greater than 'ea' contained in the rangeset. - - @param ea: (C++: ea_t) - -ida_range.rangeset_t.next_range (method) - next_range(self, ea) -> ea_t - Get the smallest ea_t value greater than 'ea' that is not in the same range as - 'ea'. - - @param ea: (C++: ea_t) - -ida_range.rangeset_t.nranges (method) - nranges(self) -> size_t - Get the number of range_t elements in the set. - -ida_range.rangeset_t.prev_addr (method) - prev_addr(self, ea) -> ea_t - Get the largest ea_t value less than 'ea' contained in the rangeset. - - @param ea: (C++: ea_t) - -ida_range.rangeset_t.prev_range (method) - prev_range(self, ea) -> ea_t - Get the largest ea_t value less than 'ea' that is not in the same range as 'ea'. - - @param ea: (C++: ea_t) - -ida_range.rangeset_t.sub (method) - sub(self, range) -> bool - Subtract each range in 'aset' from the set - - @param range: range_t const & - - @return: false if nothing was subtracted (the set was unchanged) - sub(self, ea) -> bool - - @param ea: ea_t - - sub(self, aset) -> bool - - @param aset: rangeset_t const & - -ida_range.rangeset_t.swap (method) - swap(self, r) - Set this = 'r' and 'r' = this. See qvector::swap() - - @param r: (C++: rangeset_t &) - -ida_range.rangevec_base_t (class) - Proxy of C++ qvector< range_t > class. - -ida_range.rangevec_base_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< range_t > const & - -ida_range.rangevec_base_t.__getitem__ (method) - __getitem__(self, i) -> range_t - - @param i: size_t - -ida_range.rangevec_base_t.__init__ (method) - __init__(self) -> rangevec_base_t - __init__(self, x) -> rangevec_base_t - - @param x: qvector< range_t > const & - -ida_range.rangevec_base_t.__len__ (method) - __len__(self) -> size_t - -ida_range.rangevec_base_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< range_t > const & - -ida_range.rangevec_base_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: range_t const & - -ida_range.rangevec_base_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: range_t const & - -ida_range.rangevec_base_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: range_t const & - -ida_range.rangevec_base_t.at (method) - at(self, _idx) -> range_t - - @param _idx: size_t - -ida_range.rangevec_base_t.begin (method) - begin(self) -> range_t - -ida_range.rangevec_base_t.capacity (method) - capacity(self) -> size_t - -ida_range.rangevec_base_t.clear (method) - clear(self) - -ida_range.rangevec_base_t.empty (method) - empty(self) -> bool - -ida_range.rangevec_base_t.end (method) - end(self) -> range_t - -ida_range.rangevec_base_t.erase (method) - erase(self, it) -> range_t - - @param it: qvector< range_t >::iterator - - erase(self, first, last) -> range_t - - @param first: qvector< range_t >::iterator - @param last: qvector< range_t >::iterator - -ida_range.rangevec_base_t.extract (method) - extract(self) -> range_t - -ida_range.rangevec_base_t.find (method) - find(self, x) -> range_t - - @param x: range_t const & - -ida_range.rangevec_base_t.grow (method) - grow(self, x=range_t()) - - @param x: range_t const & - -ida_range.rangevec_base_t.has (method) - has(self, x) -> bool - - @param x: range_t const & - -ida_range.rangevec_base_t.inject (method) - inject(self, s, len) - - @param s: range_t * - @param len: size_t - -ida_range.rangevec_base_t.insert (method) - insert(self, it, x) -> range_t - - @param it: qvector< range_t >::iterator - @param x: range_t const & - -ida_range.rangevec_base_t.pop_back (method) - pop_back(self) - -ida_range.rangevec_base_t.push_back (method) - push_back(self, x) - - @param x: range_t const & - - push_back(self) -> range_t - -ida_range.rangevec_base_t.qclear (method) - qclear(self) - -ida_range.rangevec_base_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_range.rangevec_base_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: range_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_range.rangevec_base_t.size (method) - size(self) -> size_t - -ida_range.rangevec_base_t.swap (method) - swap(self, r) - - @param r: qvector< range_t > & - -ida_range.rangevec_base_t.truncate (method) - truncate(self) - -ida_range.rangevec_t (class) - Proxy of C++ rangevec_t class. - -ida_range.rangevec_t.__init__ (method) - __init__(self) -> rangevec_t - -ida_registry (module) - Registry related functions. - - IDA uses the registry to store global configuration options that must persist - after IDA has been closed. - - On Windows, IDA uses the Windows registry directly. On Unix systems, the - registry is stored in a file (typically ~/.idapro/ida.reg). - - The root key for accessing IDA settings in the registry is defined by - ROOT_KEY_NAME. - -ida_registry.ROOT_KEY_NAME (variable) - Default key used to store IDA settings in registry (Windows version). - @note: this name is automatically prepended to all key names passed to functions - in this file. - -ida_registry.reg_binary (variable) - binary data - -ida_registry.reg_data_type (function) - reg_data_type(name, subkey=None) -> regval_type_t - Get data type of a given value. - - @param name: (C++: const char *) value name - @param subkey: (C++: const char *) key name - @return: false if the [key+]value doesn't exist - -ida_registry.reg_delete (function) - reg_delete(name, subkey=None) -> bool - Delete a value from the registry. - - @param name: (C++: const char *) value name - @param subkey: (C++: const char *) parent key - @return: success - -ida_registry.reg_delete_subkey (function) - reg_delete_subkey(name) -> bool - Delete a key from the registry. - - @param name: (C++: const char *) char const * - -ida_registry.reg_delete_tree (function) - reg_delete_tree(name) -> bool - Delete a subtree from the registry. - - @param name: (C++: const char *) char const * - -ida_registry.reg_dword (variable) - 32-bit number - -ida_registry.reg_exists (function) - reg_exists(name, subkey=None) -> bool - Is there already a value with the given name? - - @param name: (C++: const char *) value name - @param subkey: (C++: const char *) parent key - -ida_registry.reg_flush (function) - reg_flush() - -ida_registry.reg_load (function) - reg_load() - -ida_registry.reg_read_binary (function) - reg_read_binary(name, subkey=None) -> bytes or None - Read binary data from the registry. - - @param name: (C++: const char *) value name - @param subkey: (C++: const char *) key name - @return: success - -ida_registry.reg_read_bool (function) - reg_read_bool(name, defval, subkey=None) -> bool - Read boolean value from the registry. - - @param name: (C++: const char *) value name - @param defval: (C++: bool) default value - @param subkey: (C++: const char *) key name - @return: boolean read from registry, or 'defval' if the read failed - -ida_registry.reg_read_int (function) - reg_read_int(name, defval, subkey=None) -> int - Read integer value from the registry. - - @param name: (C++: const char *) value name - @param defval: (C++: int) default value - @param subkey: (C++: const char *) key name - @return: the value read from the registry, or 'defval' if the read failed - -ida_registry.reg_read_string (function) - reg_read_string(name, subkey=None, _def=None) -> str - Read a string from the registry. - - @param name: (C++: const char *) value name - @param subkey: (C++: const char *) key name - @param def: char const * - @return: success - -ida_registry.reg_read_strlist (function) - reg_read_strlist(subkey) - Retrieve all string values associated with the given key. Also see - reg_update_strlist(). - - @param subkey: (C++: const char *) char const * - -ida_registry.reg_subkey_exists (function) - reg_subkey_exists(name) -> bool - Is there already a key with the given name? - - @param name: (C++: const char *) char const * - -ida_registry.reg_subkey_subkeys (function) - reg_subkey_subkeys(name) -> [str, ...] - Get all subkey names of given key. - - @param name: (C++: const char *) char const * - -ida_registry.reg_subkey_values (function) - reg_subkey_values(name) -> [str, ...] - Get all value names under given key. - - @param name: (C++: const char *) char const * - -ida_registry.reg_sz (variable) - utf8 string - -ida_registry.reg_unknown (variable) - unknown - -ida_registry.reg_update_filestrlist (function) - reg_update_filestrlist(subkey, add, maxrecs, rem=None) - Update registry with a file list. Case sensitivity will vary depending on the - target OS. - @note: 'add' and 'rem' must be UTF-8, just like for regular string operations. - - @param subkey: (C++: const char *) char const * - @param add: (C++: const char *) char const * - @param maxrecs: (C++: size_t) - @param rem: (C++: const char *) char const * - -ida_registry.reg_update_strlist (function) - reg_update_strlist(subkey, add, maxrecs, rem=None, ignorecase=False) - Update list of strings associated with given key. - - @param subkey: (C++: const char *) key name - @param add: (C++: const char *) string to be added to list, can be nullptr - @param maxrecs: (C++: size_t) limit list to this size - @param rem: (C++: const char *) string to be removed from list, can be nullptr - @param ignorecase: (C++: bool) ignore case for 'add' and 'rem' - -ida_registry.reg_write_binary (function) - reg_write_binary(name, py_bytes, subkey=None) -> PyObject * - Write binary data to the registry. - - @param name: (C++: const char *) value name - @param py_bytes: PyObject * - @param subkey: (C++: const char *) key name - -ida_registry.reg_write_bool (function) - reg_write_bool(name, value, subkey=None) - Write boolean value to the registry. - - @param name: (C++: const char *) value name - @param value: (C++: int) boolean to write (nonzero = true) - @param subkey: (C++: const char *) key name - -ida_registry.reg_write_int (function) - reg_write_int(name, value, subkey=None) - Write integer value to the registry. - - @param name: (C++: const char *) value name - @param value: (C++: int) value to write - @param subkey: (C++: const char *) key name - -ida_registry.reg_write_string (function) - reg_write_string(name, utf8, subkey=None) - Write a string to the registry. - - @param name: (C++: const char *) value name - @param utf8: (C++: const char *) utf8-encoded string - @param subkey: (C++: const char *) key name - -ida_registry.set_registry_root (function) - set_registry_root(name) -> bool - - @param name: char const * - -ida_regfinder (module) - - -ida_regfinder.find_nearest_rvi (function) - find_nearest_rvi(rvi, ea, reg) -> int - Find the value of any of the two registers using the register tracker. First, - this function tries to find the registers in the basic block of EA, and if it - could not do this, then it tries to find in the entire function. - - @param rvi: (C++: reg_value_info_t *) the found value with additional attributes - @param ea: (C++: ea_t) the address to find a value at - @param reg: (C++: const int) the registers to find - @return: the index of the found register or -1 - -ida_regfinder.find_reg_value (function) - find_reg_value(ea, reg) -> int - Find register value using the register tracker. - @note: The returned value is valid *before* executing the instruction. - - @param ea: (C++: ea_t) the address to find a value at - @param reg: (C++: int) the register to find - @retval 0: no value (the value is varying or the find depth is not enough to - find a value) - @retval 1: the found value is in VAL - @retval -1: the processor module does not support a register tracker - -ida_regfinder.find_reg_value_info (function) - find_reg_value_info(rvi, ea, reg, max_depth=0) -> bool - Find register value using the register tracker. - @note: The returned value is valid *before* executing the instruction. - @note: The _undefined_ value means that there is no execution flow to EA, e.g. - we try to find a value after the call of NORET function. - @note: The _unknown_ value means that the value is: - * a result of unsupported instruction, e.g. the result of a call, - * a function argument, - * is varying, e.g. it is a loop counter. - - @param rvi: (C++: reg_value_info_t *) the found value with additional attributes - @param ea: (C++: ea_t) the address to find a value at - @param reg: (C++: int) the register to find - @param max_depth: (C++: int) the number of basic blocks to look before aborting the search - and returning the unknown value. 0 means the value of - REGTRACK_MAX_DEPTH from ida.cfg for ordinal registers or - REGTRACK_FUNC_MAX_DEPTH for the function-wide registers, -1 - means the value of REGTRACK_FUNC_MAX_DEPTH from ida.cfg. - @retval 'false': the processor module does not support a register tracker - @retval 'true': the found value is in RVI - -ida_regfinder.find_sp_value (function) - find_sp_value(ea, reg=-1) -> int - Find a value of the SP based register using the register tracker. - @note: The returned value is valid *before* executing the instruction. - - @param ea: (C++: ea_t) the address to find a value at - @param reg: (C++: int) the register to find. by default the SP register is used. - @retval 0: no value (the value is varying or the find depth is not enough to - find a value) - @retval 1: the found value is in VAL - @retval -1: the processor module does not support a register tracker - -ida_regfinder.invalidate_regfinder_cache (function) - invalidate_regfinder_cache(ea=BADADDR) - Remove from the register tracker cache all values at EA and all dependent - values. As if the control flow to this instruction has changed. if EA == BADADDR - then clear the entire cache. - - @param ea: (C++: ea_t) - -ida_regfinder.reg_value_def_t (class) - Proxy of C++ reg_value_def_t class. - -ida_regfinder.reg_value_def_t.LIKE_GOT (variable) - the value is like GOT only for numbers - @see: is_num() - -ida_regfinder.reg_value_def_t.NOVAL (variable) - without a value - -ida_regfinder.reg_value_def_t.PC_BASED (variable) - the value depends on DEF_EA only for numbers - @see: is_num() - -ida_regfinder.reg_value_def_t.SHORT_INSN (variable) - like 'addi reg, imm' - -ida_regfinder.reg_value_def_t.SPVAL (variable) - as a SP delta - -ida_regfinder.reg_value_def_t.UVAL (variable) - as a number - -ida_regfinder.reg_value_def_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: reg_value_def_t const & - -ida_regfinder.reg_value_def_t.__init__ (method) - __init__(self) -> reg_value_def_t - __init__(self, _val, ea, _flags=0) -> reg_value_def_t - - @param _val: uval_t - @param ea: ea_t - @param _flags: uint16 - - __init__(self, _val, insn, _flags=0) -> reg_value_def_t - - @param _val: uval_t - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param _flags: uint16 - -ida_regfinder.reg_value_def_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: reg_value_def_t const & - -ida_regfinder.reg_value_def_t.def_ea (variable) - the instruction address - -ida_regfinder.reg_value_def_t.def_itype (variable) - the instruction code (processor specific) - -ida_regfinder.reg_value_def_t.dstr (method) - dstr(self, how, pm=None) -> qstring - Return the string representation. - - @param how: (C++: dstr_val_t) enum reg_value_def_t::dstr_val_t - @param pm: (C++: const procmod_t *) procmod_t const * - -ida_regfinder.reg_value_def_t.flags (variable) - additional info about the value - -ida_regfinder.reg_value_def_t.is_like_got (method) - is_like_got(self) -> bool - -ida_regfinder.reg_value_def_t.is_pc_based (method) - is_pc_based(self) -> bool - -ida_regfinder.reg_value_def_t.is_short_insn (method) - is_short_insn(self, insn) -> bool - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - - is_short_insn(self) -> bool - -ida_regfinder.reg_value_def_t.val (variable) - the value - -ida_regfinder.reg_value_info_t (class) - Proxy of C++ reg_value_info_t class. - -ida_regfinder.reg_value_info_t.CONTAINED (variable) - L is contained in R (i.e. L\R is empty) - -ida_regfinder.reg_value_info_t.CONTAINS (variable) - L contains R (i.e. R\L is empty) - -ida_regfinder.reg_value_info_t.EQUAL (variable) - L==R. - -ida_regfinder.reg_value_info_t.NOT_COMPARABLE (variable) - L\R is not empty and R\L is not empty. - -ida_regfinder.reg_value_info_t.__getitem__ (method) - __getitem__(self, i) -> reg_value_def_t - - @param i: size_t - -ida_regfinder.reg_value_info_t.__init__ (method) - __init__(self) -> reg_value_info_t - -ida_regfinder.reg_value_info_t.__len__ (method) - __len__(self) -> size_t - -ida_regfinder.reg_value_info_t.__str__ (method) - __str__(self) -> qstring - -ida_regfinder.reg_value_info_t.aborted (method) - aborted(self) -> bool - Return 'true' if the tracking process was aborted. - -ida_regfinder.reg_value_info_t.add (method) - add(self, r, insn) - Add R to the value, save INSN as a defining instruction. - @note: Either THIS or R must have a single value. - - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t.add_num (method) - add_num(self, r, insn) - Add R to the value, do not change the defining instructions. - @note: This method do nothing for unknown values. - - @param r: (C++: uval_t) - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - - add_num(self, r) - - @param r: uval_t - -ida_regfinder.reg_value_info_t.band (method) - band(self, r, insn) - Make bitwise AND of R to the value, save INSN as a defining instruction. - @note: Either THIS or R must have a single value. - - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t.bandnot (method) - bandnot(self, r, insn) - Make bitwise AND of the inverse of R to the value, save INSN as a defining - instruction. - @note: Either THIS or R must have a single value. - - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t.bnot (method) - bnot(self, insn) - Make bitwise inverse of the value, save INSN as a defining instruction. - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t.bor (method) - bor(self, r, insn) - Make bitwise OR of R to the value, save INSN as a defining instruction. - @note: Either THIS or R must have a single value. - - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t.bxor (method) - bxor(self, r, insn) - Make bitwise eXclusive OR of R to the value, save INSN as a defining - instruction. - @note: Either THIS or R must have a single value. - - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t.clear (method) - clear(self) - Undefine the value. - -ida_regfinder.reg_value_info_t.empty (method) - empty(self) -> bool - Return 'true' if we know nothing about a value. - -ida_regfinder.reg_value_info_t.extend (method) - extend(self, pm, width, is_signed) - Sign-, or zero-extend the number or SP delta value to full size. The initial - value is considered to be of size WIDTH. - @note: This method do nothing for unknown values. - - @param pm: (C++: const procmod_t &) procmod_t const & - @param width: (C++: int) - @param is_signed: (C++: bool) - -ida_regfinder.reg_value_info_t.get_def_ea (method) - get_def_ea(self) -> ea_t - Return the defining address. - -ida_regfinder.reg_value_info_t.get_def_itype (method) - get_def_itype(self) -> uint16 - Return the defining instruction code (processor specific). - -ida_regfinder.reg_value_info_t.get_num (method) - get_num(self) -> bool - Return the number if the value is a constant. - @see: is_num() - -ida_regfinder.reg_value_info_t.get_spd (method) - get_spd(self) -> bool - Return the SP delta if the value depends on the stack pointer. - @see: is_spd() - -ida_regfinder.reg_value_info_t.have_all_vals_flag (method) - have_all_vals_flag(self, val_flags) -> bool - Check the given flag for each value. - - @param val_flags: (C++: uint16) - -ida_regfinder.reg_value_info_t.is_all_vals_like_got (method) - is_all_vals_like_got(self) -> bool - -ida_regfinder.reg_value_info_t.is_all_vals_pc_based (method) - is_all_vals_pc_based(self) -> bool - -ida_regfinder.reg_value_info_t.is_badinsn (method) - is_badinsn(self) -> bool - Return 'true' if the value is unknown because of a bad insn. - -ida_regfinder.reg_value_info_t.is_dead_end (method) - is_dead_end(self) -> bool - Return 'true' if the value is undefined because of a dead end. - -ida_regfinder.reg_value_info_t.is_known (method) - is_known(self) -> bool - Return 'true' if the value is known (i.e. it is a number or SP delta). - -ida_regfinder.reg_value_info_t.is_num (method) - is_num(self) -> bool - Return 'true' if the value is a constant. - -ida_regfinder.reg_value_info_t.is_spd (method) - is_spd(self) -> bool - Return 'true' if the value depends on the stack pointer. - -ida_regfinder.reg_value_info_t.is_special (method) - is_special(self) -> bool - Return 'true' if the value requires special handling. - -ida_regfinder.reg_value_info_t.is_unkfunc (method) - is_unkfunc(self) -> bool - Return 'true' if the value is unknown from the function start. - -ida_regfinder.reg_value_info_t.is_unkinsn (method) - is_unkinsn(self) -> bool - Return 'true' if the value is unknown after executing the insn. - -ida_regfinder.reg_value_info_t.is_unkloop (method) - is_unkloop(self) -> bool - Return 'true' if the value is unknown because it changes in a loop. - -ida_regfinder.reg_value_info_t.is_unkmult (method) - is_unkmult(self) -> bool - Return 'true' if the value is unknown because the register has incompatible - values (a number and SP delta). - -ida_regfinder.reg_value_info_t.is_unknown (method) - is_unknown(self) -> bool - Return 'true' if the value is unknown. - -ida_regfinder.reg_value_info_t.is_value_unique (method) - is_value_unique(self) -> bool - Check that the value is unique. - -ida_regfinder.reg_value_info_t.make_aborted (method) - make_aborted(bblk_ea) -> reg_value_info_t - Return the value after aborting. - @see: aborted() - - @param bblk_ea: (C++: ea_t) - -ida_regfinder.reg_value_info_t.make_badinsn (method) - make_badinsn(insn_ea) -> reg_value_info_t - Return the unknown value after a bad insn. - @see: is_badinsn() - - @param insn_ea: (C++: ea_t) - -ida_regfinder.reg_value_info_t.make_dead_end (method) - make_dead_end(dead_end_ea) -> reg_value_info_t - Return the undefined value because of a dead end. - @see: is_dead_end() - - @param dead_end_ea: (C++: ea_t) - -ida_regfinder.reg_value_info_t.make_initial_sp (method) - make_initial_sp(func_ea) -> reg_value_info_t - Return the value that is the initial stack pointer. - @see: is_spd() - - @param func_ea: (C++: ea_t) - -ida_regfinder.reg_value_info_t.make_num (method) - make_num(rval, insn, val_flags=0) -> reg_value_info_t - Return the value that is the RVAL number. - @see: is_num() - - @param rval: (C++: uval_t) - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param val_flags: (C++: uint16) - - make_num(rval, val_ea, val_flags=0) -> reg_value_info_t - - @param rval: uval_t - @param val_ea: ea_t - @param val_flags: uint16 - -ida_regfinder.reg_value_info_t.make_unkfunc (method) - make_unkfunc(func_ea) -> reg_value_info_t - Return the unknown value from the function start. - @see: is_unkfunc() - - @param func_ea: (C++: ea_t) - -ida_regfinder.reg_value_info_t.make_unkinsn (method) - make_unkinsn(insn) -> reg_value_info_t - Return the unknown value after executing the insn. - @see: is_unkinsn() - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t.make_unkloop (method) - make_unkloop(bblk_ea) -> reg_value_info_t - Return the unknown value if it changes in a loop. - @see: is_unkloop() - - @param bblk_ea: (C++: ea_t) - -ida_regfinder.reg_value_info_t.make_unkmult (method) - make_unkmult(bblk_ea) -> reg_value_info_t - Return the unknown value if the register has incompatible values. - @see: is_unkmult() - - @param bblk_ea: (C++: ea_t) - -ida_regfinder.reg_value_info_t.neg (method) - neg(self, insn) - Negate the value, save INSN as a defining instruction. - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t.set_aborted (method) - set_aborted(self, bblk_ea) - Set the value after aborting. - @see: aborted() - - @param bblk_ea: (C++: ea_t) - -ida_regfinder.reg_value_info_t.set_badinsn (method) - set_badinsn(self, insn_ea) - Set the value to be unknown after a bad insn. - @see: is_badinsn() - - @param insn_ea: (C++: ea_t) - -ida_regfinder.reg_value_info_t.set_dead_end (method) - set_dead_end(self, dead_end_ea) - Set the value to be undefined because of a dead end. - @see: is_dead_end() - - @param dead_end_ea: (C++: ea_t) - -ida_regfinder.reg_value_info_t.set_num (method) - set_num(self, rval, insn, val_flags=0) - Set the value to be a number before an address. - @see: is_num() - - @param rval: (C++: uval_t) - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param val_flags: (C++: uint16) - - set_num(self, rvals, insn) - - @param rvals: uvalvec_t * - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - - set_num(self, rval, val_ea, val_flags=0) - - @param rval: uval_t - @param val_ea: ea_t - @param val_flags: uint16 - -ida_regfinder.reg_value_info_t.set_unkfunc (method) - set_unkfunc(self, func_ea) - Set the value to be unknown from the function start. - @see: is_unkfunc() - - @param func_ea: (C++: ea_t) - -ida_regfinder.reg_value_info_t.set_unkinsn (method) - set_unkinsn(self, insn) - Set the value to be unknown after executing the insn. - @see: is_unkinsn() - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t.set_unkloop (method) - set_unkloop(self, bblk_ea) - Set the value to be unknown because it changes in a loop. - @see: is_unkloop() - - @param bblk_ea: (C++: ea_t) - -ida_regfinder.reg_value_info_t.set_unkmult (method) - set_unkmult(self, bblk_ea) - Set the value to be unknown because the register has incompatible values. - @see: is_unkmult() - - @param bblk_ea: (C++: ea_t) - -ida_regfinder.reg_value_info_t.shift_left (method) - shift_left(self, r) - Shift the value left by R, do not change the defining instructions. - @note: This method do nothing for unknown values. - - @param r: (C++: uval_t) - -ida_regfinder.reg_value_info_t.shift_right (method) - shift_right(self, r) - Shift the value right by R, do not change the defining instructions. - @note: This method do nothing for unknown values. - - @param r: (C++: uval_t) - -ida_regfinder.reg_value_info_t.sll (method) - sll(self, r, insn) - Shift the value left by R, save INSN as a defining instruction. - @note: Either THIS or R must have a single value. - - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t.slr (method) - slr(self, r, insn) - Shift the value right by R, save INSN as a defining instruction. - @note: Either THIS or R must have a single value. - - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t.sub (method) - sub(self, r, insn) - Subtract R from the value, save INSN as a defining instruction. - @note: Either THIS or R must have a single value. - - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t.trunc_uval (method) - trunc_uval(self, pm) - Truncate the number to the application bitness. - @note: This method do nothing for non-number values. - - @param pm: (C++: const procmod_t &) procmod_t const & - -ida_regfinder.reg_value_info_t.vals_union (method) - vals_union(self, r) -> reg_value_info_t::set_compare_res_t - Add values from R into THIS ignoring duplicates. - @note: This method is the only way to get multiple values. - @retval EQUAL: THIS is not changed - @retval CONTAINS: THIS is not changed - @retval CONTAINED: THIS is a copy of R - @retval NOT_COMPARABLE: values from R are added to THIS - - @param r: (C++: const reg_value_info_t &) reg_value_info_t const & - -ida_regfinder.reg_value_info_t_make_aborted (function) - reg_value_info_t_make_aborted(bblk_ea) -> reg_value_info_t - - @param bblk_ea: ea_t - -ida_regfinder.reg_value_info_t_make_badinsn (function) - reg_value_info_t_make_badinsn(insn_ea) -> reg_value_info_t - - @param insn_ea: ea_t - -ida_regfinder.reg_value_info_t_make_dead_end (function) - reg_value_info_t_make_dead_end(dead_end_ea) -> reg_value_info_t - - @param dead_end_ea: ea_t - -ida_regfinder.reg_value_info_t_make_initial_sp (function) - reg_value_info_t_make_initial_sp(func_ea) -> reg_value_info_t - - @param func_ea: ea_t - -ida_regfinder.reg_value_info_t_make_num (function) - reg_value_info_t_make_num(rval, insn, val_flags=0) -> reg_value_info_t - - @param rval: uval_t - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param val_flags: uint16 - - reg_value_info_t_make_num(rval, val_ea, val_flags=0) -> reg_value_info_t - - @param rval: uval_t - @param val_ea: ea_t - @param val_flags: uint16 - -ida_regfinder.reg_value_info_t_make_unkfunc (function) - reg_value_info_t_make_unkfunc(func_ea) -> reg_value_info_t - - @param func_ea: ea_t - -ida_regfinder.reg_value_info_t_make_unkinsn (function) - reg_value_info_t_make_unkinsn(insn) -> reg_value_info_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_regfinder.reg_value_info_t_make_unkloop (function) - reg_value_info_t_make_unkloop(bblk_ea) -> reg_value_info_t - - @param bblk_ea: ea_t - -ida_regfinder.reg_value_info_t_make_unkmult (function) - reg_value_info_t_make_unkmult(bblk_ea) -> reg_value_info_t - - @param bblk_ea: ea_t - -ida_search (module) - Middle-level search functions. - - They all are controlled by Search flags - -ida_search.SEARCH_BRK (variable) - return BADADDR if the search was cancelled. - -ida_search.SEARCH_CASE (variable) - case-sensitive search (case-insensitive otherwise) - -ida_search.SEARCH_DOWN (variable) - search towards higher addresses - -ida_search.SEARCH_IDENT (variable) - 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 (variable) - skip the starting address when searching. this bit is useful only for search(), - bin_search2(), find_reg_access(). find_.. functions skip the starting address - automatically. - -ida_search.SEARCH_NOBRK (variable) - do not test if the user clicked cancel to interrupt the search - -ida_search.SEARCH_NOSHOW (variable) - do not display the search progress/refresh screen - -ida_search.SEARCH_REGEX (variable) - regular expressions in search string (supported only for the text search) - -ida_search.SEARCH_UP (variable) - search towards lower addresses - -ida_search.SEARCH_USESEL (variable) - query the UI for a possible current selection to limit the search to - -ida_search.find_binary (function) - find_binary(arg1, arg2, arg3, arg4, arg5) -> ea_t - Deprecated. Please use ida_bytes.bin_search() instead. - - @param arg1: ea_t - @param arg2: ea_t - @param arg3: char const * - @param arg4: int - @param arg5: int - -ida_search.find_code (function) - find_code(ea, sflag) -> ea_t - Find next code address. - - @param ea: (C++: ea_t) - @param sflag: (C++: int) - -ida_search.find_data (function) - find_data(ea, sflag) -> ea_t - Find next data address. - - @param ea: (C++: ea_t) - @param sflag: (C++: int) - -ida_search.find_defined (function) - 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 (function) - find_error(ea, sflag) -> ea_t - Find next error or problem. - - @param ea: (C++: ea_t) - @param sflag: (C++: int) - -ida_search.find_imm (function) - find_imm(ea, sflag, search_value) -> ea_t - Find next immediate operand with the given value. - - @param ea: (C++: ea_t) - @param sflag: (C++: int) - @param search_value: (C++: uval_t) - -ida_search.find_not_func (function) - 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 (function) - 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_reg_access (function) - find_reg_access(out, start_ea, end_ea, regname, sflag) -> ea_t - Find access to a register. - - @param out: (C++: struct reg_access_t *) pointer to the output buffer. must be non-null. upon success - contains info about the found register. upon failed search for a - read access out->range contains the info about the non-redefined - parts of the register. - @param start_ea: (C++: ea_t) starting address - @param end_ea: (C++: ea_t) ending address. BADADDR means that the end limit is missing. - otherwise, if the search direction is SEARCH_UP, END_EA must be - lower than START_EA. - @param regname: (C++: const char *) the register to search for. - @param sflag: (C++: int) combination of Search flags bits. - @note: This function does not care about the control flow and probes all - instructions in the specified range, starting from START_EA. Only direct - references to registers are detected. Function calls and system traps are - ignored. - @return: the found address. BADADDR if not found or error. - -ida_search.find_suspop (function) - find_suspop(ea, sflag) -> ea_t - Find next suspicious operand. - - @param ea: (C++: ea_t) - @param sflag: (C++: int) - -ida_search.find_text (function) - 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 *) char const * - @param sflag: (C++: int) - -ida_search.find_unknown (function) - find_unknown(ea, sflag) -> ea_t - Find next unexplored address. - - @param ea: (C++: ea_t) - @param sflag: (C++: int) - -ida_search.search_down (function) - search_down(sflag) -> bool - Is the SEARCH_DOWN bit set? - - @param sflag: (C++: int) - -ida_segment (module) - Functions that deal with segments. - - IDA requires that all program addresses belong to segments (each address must - belong to exactly one segment). The situation when an address doesn't belong to - any segment is allowed as a temporary situation only when the user changes - program segmentation. Bytes outside a segment can't be converted to - instructions, have names, comments, etc. Each segment has its start address, - ending address and represents a contiguous range of addresses. There might be - unused holes between segments. - - Each segment has its unique segment selector. This selector is used to - distinguish the segment from other segments. For 16-bit programs the selector is - equal to the segment base paragraph. For 32-bit programs there is special array - to translate the selectors to the segment base paragraphs. A selector is a 32/64 - bit value. - - The segment base paragraph determines the offsets in the segment. If the start - address of the segment == (base << 4) then the first offset in the segment will - be 0. The start address should be higher or equal to (base << 4). We will call - the offsets in the segment 'virtual addresses'. So, the virtual address of the - first byte of the segment is - - (start address of segment - segment base linear address) - - For IBM PC, the virtual address corresponds to the offset part of the address. - For other processors (Z80, for example), virtual addresses correspond to Z80 - addresses and linear addresses are used only internally. For MS Windows programs - the segment base paragraph is 0 and therefore the segment virtual addresses are - equal to linear addresses. - -ida_segment.ADDSEG_FILLGAP (variable) - 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 (variable) - 'name' and 'sclass' are given in the IDB encoding; non-ASCII bytes will be - decoded accordingly - -ida_segment.ADDSEG_NOAA (variable) - do not mark new segment for auto-analysis - -ida_segment.ADDSEG_NOSREG (variable) - set all default segment register values to BADSEL (undefine all default segment - registers) - -ida_segment.ADDSEG_NOTRUNC (variable) - don't truncate the new segment at the beginning of the next segment if they - overlap. destroy/truncate old segments instead. - -ida_segment.ADDSEG_OR_DIE (variable) - qexit() if can't add a segment - -ida_segment.ADDSEG_QUIET (variable) - silent mode, no "Adding segment..." in the messages window - -ida_segment.ADDSEG_SPARSE (variable) - use sparse storage method for the new ranges of the created segment. please note - that the ranges that were already enabled before creating the segment will not - change their storage type. - -ida_segment.CSS_BREAK (variable) - memory reading process stopped by user - -ida_segment.CSS_NODBG (variable) - debugger is not running - -ida_segment.CSS_NOMEM (variable) - not enough memory (might be because the segment is too big) - -ida_segment.CSS_NORANGE (variable) - could not find corresponding memory range - -ida_segment.CSS_OK (variable) - ok - -ida_segment.MAX_GROUPS (variable) - max number of segment groups - -ida_segment.MAX_SEGM_TRANSLATIONS (variable) - max number of segment translations - -ida_segment.MOVE_SEGM_CHUNK (variable) - Too many chunks are defined, can't move. - -ida_segment.MOVE_SEGM_DEBUG (variable) - Debugger segments cannot be moved. - -ida_segment.MOVE_SEGM_IDP (variable) - IDP module forbids moving the segment. - -ida_segment.MOVE_SEGM_INVAL (variable) - Invalid argument (delta/target does not fit the address space) - -ida_segment.MOVE_SEGM_LOADER (variable) - The segment has been moved but the loader complained. - -ida_segment.MOVE_SEGM_MAPPING (variable) - Memory mapping ranges of addresses hinder segment movement. - -ida_segment.MOVE_SEGM_ODD (variable) - Cannot move segments by an odd number of bytes. - -ida_segment.MOVE_SEGM_OK (variable) - all ok - -ida_segment.MOVE_SEGM_ORPHAN (variable) - Orphan bytes hinder segment movement. - -ida_segment.MOVE_SEGM_PARAM (variable) - The specified segment does not exist. - -ida_segment.MOVE_SEGM_ROOM (variable) - Not enough free room at the target address. - -ida_segment.MOVE_SEGM_SOURCEFILES (variable) - Source files ranges of addresses hinder segment movement. - -ida_segment.MSF_FIXONCE (variable) - call loader only once with the special calling method. valid for - rebase_program(). see loader_t::move_segm. - -ida_segment.MSF_LDKEEP (variable) - keep the loader in the memory (optimization) - -ida_segment.MSF_NETNODES (variable) - move netnodes instead of changing inf.netdelta (this is slower); valid for - rebase_program() - -ida_segment.MSF_NOFIX (variable) - don't call the loader to fix relocations - -ida_segment.MSF_PRIORITY (variable) - loader segments will overwrite any existing debugger segments when moved. valid - for move_segm() - -ida_segment.MSF_SILENT (variable) - don't display a "please wait" box on the screen - -ida_segment.SEGMOD_KEEP (variable) - keep information (code & data, etc) - -ida_segment.SEGMOD_KEEP0 (variable) - flag for internal use, don't set - -ida_segment.SEGMOD_KEEPSEL (variable) - do not try to delete unused selector - -ida_segment.SEGMOD_KILL (variable) - disable addresses if segment gets shrinked or deleted - -ida_segment.SEGMOD_NOMOVE (variable) - don't move info from the start of segment to the new start address (for - set_segm_start()) - -ida_segment.SEGMOD_SILENT (variable) - be silent - -ida_segment.SEGMOD_SPARSE (variable) - use sparse storage if extending the segment (for set_segm_start(), - set_segm_end()) - -ida_segment.SEGPERM_EXEC (variable) - Execute. - -ida_segment.SEGPERM_READ (variable) - Read. - -ida_segment.SEGPERM_WRITE (variable) - Write. - -ida_segment.SEG_ABSSYM (variable) - * segment with definitions of absolute symbols - -ida_segment.SEG_BSS (variable) - uninitialized segment - -ida_segment.SEG_CODE (variable) - code segment - -ida_segment.SEG_COMM (variable) - * segment with communal definitions - -ida_segment.SEG_DATA (variable) - data segment - -ida_segment.SEG_GRP (variable) - * group of segments - -ida_segment.SEG_IMEM (variable) - internal processor memory & sfr (8051) - -ida_segment.SEG_NORM (variable) - unknown type, no assumptions - -ida_segment.SEG_NULL (variable) - zero-length segment - -ida_segment.SEG_UNDF (variable) - undefined segment type (not used) - -ida_segment.SEG_XTRN (variable) - * segment with 'extern' definitions. no instructions are allowed - -ida_segment.SFL_COMORG (variable) - IDP dependent field (IBM PC: if set, ORG directive is not commented out) - -ida_segment.SFL_DEBUG (variable) - Is the segment created for the debugger?. Such segments are temporary and do not - have permanent flags. - -ida_segment.SFL_HEADER (variable) - Header segment (do not create offsets to it in the disassembly) - -ida_segment.SFL_HIDDEN (variable) - Is the segment hidden? - -ida_segment.SFL_HIDETYPE (variable) - Hide segment type (do not print it in the listing) - -ida_segment.SFL_LOADER (variable) - Is the segment created by the loader? - -ida_segment.SFL_OBOK (variable) - Orgbase is present? (IDP dependent field) - -ida_segment.SNAP_ALL_SEG (variable) - Take a snapshot of all segments. - -ida_segment.SNAP_CUR_SEG (variable) - Take a snapshot of current segment. - -ida_segment.SNAP_LOAD_SEG (variable) - Take a snapshot of loader segments. - -ida_segment.SREG_NUM (variable) - Maximum number of segment registers is 16 (see segregs.hpp) - -ida_segment.add_segm (function) - 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: (C++: ea_t) segment base paragraph. if paragraph can't fit in 16bit, then a new - selector is allocated and mapped to the paragraph. - @param start: (C++: ea_t) start address of the segment. if start==BADADDR then start <- - to_ea(para,0). - @param end: (C++: ea_t) 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. - @param name: (C++: const char *) name of new segment. may be nullptr - @param sclass: (C++: const char *) class of the segment. may be nullptr. 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 - @param flags: (C++: int) Add segment flags - @retval 1: ok - @retval 0: failed, a warning message is displayed - -ida_segment.add_segm_ex (function) - add_segm_ex(NONNULL_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 NONNULL_s: (C++: segment_t *) - @param name: (C++: const char *) name of new segment. may be nullptr. if specified, the segment is - immediately renamed - @param sclass: (C++: const char *) class of the segment. may be nullptr. if specified, the segment - class is immediately changed - @param flags: (C++: int) Add segment flags - @retval 1: ok - @retval 0: failed, a warning message is displayed - -ida_segment.add_segment_translation (function) - add_segment_translation(segstart, mappedseg) -> bool - Add segment translation. - - @param segstart: (C++: ea_t) start address of the segment to add translation to - @param mappedseg: (C++: ea_t) start address of the overlayed segment - @retval 1: ok - @retval 0: too many translations or bad segstart - -ida_segment.allocate_selector (function) - 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: (C++: ea_t) a new segment base paragraph - @return: the allocated selector number - -ida_segment.change_segment_status (function) - 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: (C++: segment_t *) segment to modify - @param is_deb_segm: (C++: bool) new status of the segment - @return: Change segment status result codes - -ida_segment.del_segm (function) - del_segm(ea, flags) -> bool - Delete a segment. - - @param ea: (C++: ea_t) any address belonging to the segment - @param flags: (C++: int) Segment modification flags - @retval 1: ok - @retval 0: failed, no segment at 'ea'. - -ida_segment.del_segment_translations (function) - del_segment_translations(segstart) - Delete the translation list - - @param segstart: (C++: ea_t) start address of the segment to delete translation list - -ida_segment.del_selector (function) - 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: (C++: sel_t) number of selector to remove from the translation table - -ida_segment.find_free_selector (function) - find_free_selector() -> sel_t - Find first unused selector. - - @return: a number >= 1 - -ida_segment.find_selector (function) - find_selector(base) -> sel_t - Find a selector that has mapping to the specified paragraph. - - @param base: (C++: ea_t) paragraph to search in the translation table - @return: selector value or base - -ida_segment.get_defsr (function) - get_defsr(s, reg) -> sel_t - Deprecated, use instead: - value = s.defsr[reg] - - @param s: segment_t * - @param reg: int - -ida_segment.get_first_seg (function) - get_first_seg() -> segment_t - Get pointer to the first segment. - -ida_segment.get_group_selector (function) - get_group_selector(grpsel) -> sel_t - Get common selector for a group of segments. - - @param grpsel: (C++: sel_t) selector of group segment - @return: common selector of the group or 'grpsel' if no such group is found - -ida_segment.get_last_seg (function) - get_last_seg() -> segment_t - Get pointer to the last segment. - -ida_segment.get_next_seg (function) - get_next_seg(ea) -> segment_t - Get pointer to the next segment. - - @param ea: (C++: ea_t) - -ida_segment.get_prev_seg (function) - get_prev_seg(ea) -> segment_t - Get pointer to the previous segment. - - @param ea: (C++: ea_t) - -ida_segment.get_segm_base (function) - 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: (C++: const segment_t *) pointer to segment - @return: 0 if s == nullptr, otherwise segment base linear address - -ida_segment.get_segm_by_name (function) - 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: (C++: const char *) segment name. may be nullptr. - @return: nullptr or pointer to segment structure - -ida_segment.get_segm_by_sel (function) - 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: (C++: sel_t) a segment with the specified selector will be returned - @return: pointer to segment or nullptr - -ida_segment.get_segm_class (function) - get_segm_class(s) -> str - Get segment class. Segment class is arbitrary text (max 8 characters). - - @param s: (C++: const segment_t *) pointer to segment - @return: size of segment class (-1 if s==nullptr or bufsize<=0) - -ida_segment.get_segm_name (function) - get_segm_name(s, flags=0) -> str - Get true segment name by pointer to segment. - - @param s: (C++: const segment_t *) pointer to segment - @param flags: (C++: int) 0-return name as is; 1-substitute bad symbols with _ 1 corresponds - to GN_VISIBLE - @return: size of segment name (-1 if s==nullptr) - -ida_segment.get_segm_num (function) - get_segm_num(ea) -> int - Get number of segment by address. - - @param ea: (C++: ea_t) linear address belonging to the segment - @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 (function) - 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: (C++: const segment_t *) pointer to segment - @return: 0 if s == nullptr, the segment base paragraph - -ida_segment.get_segm_qty (function) - get_segm_qty() -> int - Get number of segments. - -ida_segment.get_segment_alignment (function) - 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 (function) - get_segment_cmt(s, repeatable) -> str - Get segment comment. - - @param s: (C++: const segment_t *) pointer to segment structure - @param repeatable: (C++: bool) 0: get regular comment. 1: get repeatable comment. - @return: size of comment or -1 - -ida_segment.get_segment_combination (function) - 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 (function) - get_segment_translations(transmap, segstart) -> ssize_t - Get segment translation list. - - @param transmap: (C++: eavec_t *) vector of segment start addresses for the translation list - @param segstart: (C++: ea_t) start address of the segment to get information about - @return: -1 if no translation list or bad segstart. otherwise returns size of - translation list. - -ida_segment.get_selector_qty (function) - get_selector_qty() -> size_t - Get number of defined selectors. - -ida_segment.get_visible_segm_name (function) - get_visible_segm_name(s) -> str - Get segment name by pointer to segment. - - @param s: (C++: const segment_t *) pointer to segment - @return: size of segment name (-1 if s==nullptr) - -ida_segment.getn_selector (function) - getn_selector(n) -> bool - Get description of selector (0..get_selector_qty()-1) - - @param n: (C++: int) - -ida_segment.getnseg (function) - getnseg(n) -> segment_t - Get pointer to segment by its number. - @warning: Obsoleted because it can slow down the debugger (it has to refresh the - whole memory segmentation to calculate the correct answer) - - @param n: (C++: int) segment number in the range (0..get_segm_qty()-1) - @return: nullptr or pointer to segment structure - -ida_segment.getseg (function) - getseg(ea) -> segment_t - Get pointer to segment by linear address. - - @param ea: (C++: ea_t) linear address belonging to the segment - @return: nullptr or pointer to segment structure - -ida_segment.is_finally_visible_segm (function) - is_finally_visible_segm(s) -> bool - See SFL_HIDDEN, SCF_SHHID_SEGM. - - @param s: (C++: segment_t *) - -ida_segment.is_miniidb (function) - 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 (function) - is_segm_locked(segm) -> bool - Is a segment pointer locked? - - @param segm: (C++: const segment_t *) segment_t const * - -ida_segment.is_spec_ea (function) - 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: (C++: ea_t) linear address - -ida_segment.is_spec_segm (function) - 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 (function) - is_visible_segm(s) -> bool - See SFL_HIDDEN. - - @param s: (C++: segment_t *) - -ida_segment.lock_segm (function) - 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 *) segment_t const * - @param lock: (C++: bool) - -ida_segment.lock_segment (class) - Proxy of C++ lock_segment class. - -ida_segment.lock_segment.__init__ (method) - __init__(self, _segm) -> lock_segment - - @param _segm: segment_t const * - -ida_segment.move_segm (function) - move_segm(s, to, flags=0) -> move_segm_code_t - This function moves all information to the new address. It fixes up address - sensitive information in the kernel. The total effect is equal to reloading the - segment to the target address. For the file format dependent address sensitive - information, loader_t::move_segm is called. Also IDB notification event - idb_event::segm_moved is called. - - @param s: (C++: segment_t *) segment to move - @param to: (C++: ea_t) new segment start address - @param flags: (C++: int) Move segment flags - @return: Move segment result codes - -ida_segment.move_segm_start (function) - 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. - @note: this function never disables addresses. - - @param ea: (C++: ea_t) any address belonging to the segment - @param newstart: (C++: ea_t) new start address of the segment note that segment start - address should be higher than segment base linear address. - @param mode: (C++: int) 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) - @retval 1: ok - @retval 0: failed, a warning message is displayed - -ida_segment.move_segm_strerror (function) - move_segm_strerror(code) -> char const * - Return string describing error MOVE_SEGM_... code. - - @param code: (C++: move_segm_code_t) enum move_segm_code_t - -ida_segment.rebase_program (function) - rebase_program(delta, flags) -> int - Rebase the whole program by 'delta' bytes. - - @param delta: (C++: adiff_t) number of bytes to move the program - @param flags: (C++: int) Move segment flags it is recommended to use MSF_FIXONCE so that - the loader takes care of global variables it stored in the - database - @return: Move segment result codes - -ida_segment.saAbs (variable) - Absolute segment. - -ida_segment.saGroup (variable) - Segment group. - -ida_segment.saRel1024Bytes (variable) - 1024 bytes - -ida_segment.saRel128Bytes (variable) - 128 bytes - -ida_segment.saRel2048Bytes (variable) - 2048 bytes - -ida_segment.saRel32Bytes (variable) - 32 bytes - -ida_segment.saRel4K (variable) - This value is used by the PharLap OMF for page (4K) alignment. It is not - supported by LINK. - -ida_segment.saRel512Bytes (variable) - 512 bytes - -ida_segment.saRel64Bytes (variable) - 64 bytes - -ida_segment.saRelByte (variable) - Relocatable, byte aligned. - -ida_segment.saRelDble (variable) - Relocatable, aligned on a double word (4-byte) boundary. - -ida_segment.saRelPage (variable) - Relocatable, aligned on 256-byte boundary. - -ida_segment.saRelPara (variable) - Relocatable, paragraph (16-byte) aligned. - -ida_segment.saRelQword (variable) - 8 bytes - -ida_segment.saRelWord (variable) - Relocatable, word (2-byte) aligned. - -ida_segment.scCommon (variable) - Common. Combine by overlay using maximum size. - -ida_segment.scGroup (variable) - Segment group. - -ida_segment.scPriv (variable) - Private. Do not combine with any other program segment. - -ida_segment.scPub (variable) - Public. Combine by appending at an offset that meets the alignment requirement. - -ida_segment.scPub2 (variable) - As defined by Microsoft, same as C=2 (public). - -ida_segment.scPub3 (variable) - As defined by Microsoft, same as C=2 (public). - -ida_segment.scStack (variable) - Stack. Combine as for C=2. This combine type forces byte alignment. - -ida_segment.segm_adjust_diff (function) - segm_adjust_diff(s, delta) -> adiff_t - Truncate and sign extend a delta depending on the segment. - - @param s: (C++: const segment_t *) segment_t const * - @param delta: (C++: adiff_t) - -ida_segment.segm_adjust_ea (function) - segm_adjust_ea(s, ea) -> ea_t - Truncate an address depending on the segment. - - @param s: (C++: const segment_t *) segment_t const * - @param ea: (C++: ea_t) - -ida_segment.segment_defsr_array (class) - Proxy of C++ wrapped_array_t< sel_t,SREG_NUM > class. - -ida_segment.segment_defsr_array.__getitem__ (method) - __getitem__(self, i) -> unsigned-ea-like-numeric-type const & - - @param i: size_t - -ida_segment.segment_defsr_array.__init__ (method) - __init__(self, data) -> segment_defsr_array - - @param data: unsigned-ea-like-numeric-type (&)[SREG_NUM] - -ida_segment.segment_defsr_array.__len__ (method) - __len__(self) -> size_t - -ida_segment.segment_defsr_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: unsigned-ea-like-numeric-type const & - -ida_segment.segment_defsr_array._get_bytes (method) - _get_bytes(self) -> bytevec_t - -ida_segment.segment_defsr_array._set_bytes (method) - _set_bytes(self, bts) - - Parameters - ---------- - bts: bytevec_t const & - -ida_segment.segment_t (class) - Proxy of C++ segment_t class. - -ida_segment.segment_t.__getDefsr (method) - __getDefsr(self) -> segment_defsr_array - -ida_segment.segment_t.__init__ (method) - __init__(self) -> segment_t - -ida_segment.segment_t.abits (method) - abits(self) -> int - Get number of address bits. - -ida_segment.segment_t.abytes (method) - abytes(self) -> int - Get number of address bytes. - -ida_segment.segment_t.align (variable) - Segment alignment codes - -ida_segment.segment_t.bitness (variable) - Number of bits in the segment addressing - * 0: 16 bits - * 1: 32 bits - * 2: 64 bits - -ida_segment.segment_t.clr_comorg (method) - clr_comorg(self) - -ida_segment.segment_t.clr_ob_ok (method) - clr_ob_ok(self) - -ida_segment.segment_t.color (variable) - the segment color - -ida_segment.segment_t.comb (variable) - Segment combination codes - -ida_segment.segment_t.comorg (method) - comorg(self) -> bool - -ida_segment.segment_t.defsr (variable) - default segment register values. first element of this array keeps information - about value of processor_t::reg_first_sreg - -ida_segment.segment_t.flags (variable) - Segment flags - -ida_segment.segment_t.is_16bit (method) - is_16bit(self) -> bool - Is a 16-bit segment? - -ida_segment.segment_t.is_32bit (method) - is_32bit(self) -> bool - Is a 32-bit segment? - -ida_segment.segment_t.is_64bit (method) - is_64bit(self) -> bool - Is a 64-bit segment? - -ida_segment.segment_t.is_header_segm (method) - is_header_segm(self) -> bool - -ida_segment.segment_t.is_hidden_segtype (method) - is_hidden_segtype(self) -> bool - -ida_segment.segment_t.is_loader_segm (method) - is_loader_segm(self) -> bool - -ida_segment.segment_t.is_visible_segm (method) - is_visible_segm(self) -> bool - -ida_segment.segment_t.name (variable) - use get/set_segm_name() functions - -ida_segment.segment_t.ob_ok (method) - ob_ok(self) -> bool - -ida_segment.segment_t.orgbase (variable) - this field is IDP dependent. you may keep your information about the segment - here - -ida_segment.segment_t.perm (variable) - Segment permissions (0 means no information) - -ida_segment.segment_t.sclass (variable) - use get/set_segm_class() functions - -ida_segment.segment_t.sel (variable) - segment selector - should be unique. You can't change this field after creating - the segment. Exception: 16bit OMF files may have several segments with the same - selector, but this is not good (no way to denote a segment exactly) so it should - be fixed in the future. - -ida_segment.segment_t.set_comorg (method) - set_comorg(self) - -ida_segment.segment_t.set_debugger_segm (method) - set_debugger_segm(self, debseg) - - @param debseg: bool - -ida_segment.segment_t.set_header_segm (method) - set_header_segm(self, on) - - @param on: bool - -ida_segment.segment_t.set_hidden_segtype (method) - set_hidden_segtype(self, hide) - - @param hide: bool - -ida_segment.segment_t.set_loader_segm (method) - set_loader_segm(self, ldrseg) - - @param ldrseg: bool - -ida_segment.segment_t.set_ob_ok (method) - set_ob_ok(self) - -ida_segment.segment_t.set_visible_segm (method) - set_visible_segm(self, visible) - - @param visible: bool - -ida_segment.segment_t.type (variable) - segment type (see Segment types). The kernel treats different segment types - differently. Segments marked with '*' contain no instructions or data and are - not declared as 'segments' in the disassembly. - -ida_segment.segment_t.update (method) - update(self) -> bool - Update segment information. You must call this function after modification of - segment characteristics. Note that not all fields of segment structure may be - modified directly, there are special functions to modify some fields. - - @return: success - -ida_segment.segtype (function) - segtype(ea) -> uchar - Get segment type. - - @param ea: (C++: ea_t) any linear address within the segment - @return: Segment types, SEG_UNDF if no segment found at 'ea' - -ida_segment.sel2ea (function) - sel2ea(selector) -> ea_t - Get mapping of a selector as a linear address. - - @param selector: (C++: sel_t) number of selector to translate to linear address - @return: linear address the specified selector is mapped to. if there is no - mapping, returns to_ea(selector,0); - -ida_segment.sel2para (function) - sel2para(selector) -> ea_t - Get mapping of a selector. - - @param selector: (C++: sel_t) number of selector to translate - @return: paragraph the specified selector is mapped to. if there is no mapping, - returns 'selector'. - -ida_segment.set_defsr (function) - set_defsr(s, reg, value) - Deprecated, use instead: - s.defsr[reg] = value - - @param s: segment_t * - @param reg: int - @param value: sel_t - -ida_segment.set_group_selector (function) - set_group_selector(grp, sel) -> int - Create a new group of segments (used OMF files). - - @param grp: (C++: sel_t) 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. - @param sel: (C++: sel_t) common selector of all segments belonging to the segment You should - create all segments within the group with the same selector value. - @return: 1 ok - 0 too many groups (see MAX_GROUPS) - -ida_segment.set_segm_addressing (function) - 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: (C++: segment_t *) pointer to segment - @param bitness: (C++: size_t) new addressing mode of segment - * 2: 64bit segment - * 1: 32bit segment - * 0: 16bit segment - @return: success - -ida_segment.set_segm_base (function) - set_segm_base(s, newbase) -> bool - Internal function. - - @param s: (C++: segment_t *) - @param newbase: (C++: ea_t) - -ida_segment.set_segm_class (function) - set_segm_class(s, sclass, flags=0) -> int - Set segment class. - - @param s: (C++: segment_t *) pointer to segment (may be nullptr) - @param sclass: (C++: const char *) segment class (may be nullptr). 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. - @param flags: (C++: int) Add segment flags - @retval 1: ok, name is good and segment is renamed - @retval 0: failure, name is nullptr or bad or segment is nullptr - -ida_segment.set_segm_end (function) - 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: (C++: ea_t) any address belonging to the segment - @param newend: (C++: ea_t) new end address of the segment - @param flags: (C++: int) Segment modification flags - @retval 1: ok - @retval 0: failed, a warning message is displayed - -ida_segment.set_segm_name (function) - 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: (C++: segment_t *) pointer to segment (may be nullptr) - @param name: (C++: const char *) new segment name - @param flags: (C++: int) ADDSEG_IDBENC or 0 - @retval 1: ok, name is good and segment is renamed - @retval 0: failure, name is bad or segment is nullptr - -ida_segment.set_segm_start (function) - 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: (C++: ea_t) any address belonging to the segment - @param newstart: (C++: ea_t) new start address of the segment note that segment start - address should be higher than segment base linear address. - @param flags: (C++: int) Segment modification flags - @retval 1: ok - @retval 0: failed, a warning message is displayed - -ida_segment.set_segment_cmt (function) - set_segment_cmt(s, cmt, repeatable) - Set segment comment. - - @param s: (C++: const segment_t *) pointer to segment structure - @param cmt: (C++: const char *) comment string, may be multiline (with ' - '). maximal size is 4096 bytes. Use empty str ("") to delete comment - @param repeatable: (C++: bool) 0: set regular comment. 1: set repeatable comment. - -ida_segment.set_segment_translations (function) - set_segment_translations(segstart, transmap) -> bool - Set new translation list. - - @param segstart: (C++: ea_t) start address of the segment to add translation to - @param transmap: (C++: const eavec_t &) vector of segment start addresses for the translation list. If - transmap is empty, the translation list is deleted. - @retval 1: ok - @retval 0: too many translations or bad segstart - -ida_segment.set_selector (function) - set_selector(selector, paragraph) -> int - Set mapping of selector to a paragraph. You should call this function _before_ - creating a segment which uses the selector, otherwise the creation of the - segment will fail. - - @param selector: (C++: sel_t) 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. - @param paragraph: (C++: ea_t) paragraph to map selector - @retval 1: ok - @retval 0: failure (bad selector or too many mappings) - -ida_segment.set_visible_segm (function) - set_visible_segm(s, visible) - See SFL_HIDDEN. - - @param s: (C++: segment_t *) - @param visible: (C++: bool) - -ida_segment.setup_selector (function) - 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: (C++: ea_t) a new segment base paragraph - @return: the allocated selector number - -ida_segment.std_out_segm_footer (function) - 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 &) outctx_t & - @param seg: (C++: segment_t *) - -ida_segment.take_memory_snapshot (function) - take_memory_snapshot(type) -> bool - Take a memory snapshot of the running process. - - @param type: (C++: int) specifies which snapshot we want (see SNAP_ Snapshot types) - @return: success - -ida_segment.update_segm (function) - update_segm(s) -> bool - - @param s: segment_t * - -ida_segregs (module) - Functions that deal with the segment registers. - - If your processor doesn't use segment registers, then these functions are of no - use for you. However, you should define two virtual segment registers - CS and - DS (for code segment and data segment) and specify their internal numbers in the - LPH structure (processor_t::reg_code_sreg and processor_t::reg_data_sreg). - -ida_segregs.SR_auto (variable) - the value is determined by IDA - -ida_segregs.SR_autostart (variable) - used as SR_auto for segment starting address - -ida_segregs.SR_inherit (variable) - the value is inherited from the previous range - -ida_segregs.SR_user (variable) - the value is specified by the user - -ida_segregs.copy_sreg_ranges (function) - copy_sreg_ranges(dst_rg, src_rg, map_selector=False) - Duplicate segment register ranges. - - @param dst_rg: (C++: int) number of destination segment register - @param src_rg: (C++: int) copy ranges from - @param map_selector: (C++: bool) map selectors to linear addresses using sel2ea() - -ida_segregs.del_sreg_range (function) - 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: (C++: ea_t) start_ea of the deleted range - @param rg: (C++: int) the segment register number - @return: success - -ida_segregs.get_prev_sreg_range (function) - get_prev_sreg_range(out, ea, rg) -> bool - Get segment register range previous to one with address. - @note: more efficient then get_sreg_range(reg, ea-1) - - @param out: (C++: sreg_range_t *) segment register range - @param ea: (C++: ea_t) any linear address in the program - @param rg: (C++: int) the segment register number - @return: success - -ida_segregs.get_sreg (function) - 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: (C++: ea_t) linear address in the program - @param rg: (C++: int) number of the segment register - @return: value of the segment register, BADSEL if value is unknown. - -ida_segregs.get_sreg_range (function) - get_sreg_range(out, ea, rg) -> bool - Get segment register range by linear address. - - @param out: (C++: sreg_range_t *) segment register range - @param ea: (C++: ea_t) any linear address in the program - @param rg: (C++: int) the segment register number - @return: success - -ida_segregs.get_sreg_range_num (function) - get_sreg_range_num(ea, rg) -> int - Get number of segment register range by address. - - @param ea: (C++: ea_t) any address in the range - @param rg: (C++: int) the segment register number - @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 (function) - get_sreg_ranges_qty(rg) -> size_t - Get number of segment register ranges. - - @param rg: (C++: int) the segment register number - -ida_segregs.getn_sreg_range (function) - getn_sreg_range(out, rg, n) -> bool - Get segment register range by its number. - - @param out: (C++: sreg_range_t *) segment register range - @param rg: (C++: int) the segment register number - @param n: (C++: int) number of range (0..qty()-1) - @return: success - -ida_segregs.set_default_dataseg (function) - 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 (function) - set_default_sreg_value(sg, rg, value) -> bool - Set default value of a segment register for a segment. - - @param sg: (C++: segment_t *) pointer to segment structure if nullptr, then set the register for - all segments - @param rg: (C++: int) number of segment register - @param value: (C++: sel_t) its default value. this value will be used by get_sreg() if value - of the register is unknown at the specified address. - @return: success - -ida_segregs.set_sreg_at_next_code (function) - 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: (C++: ea_t) address to start to search for an instruction - @param ea2: (C++: ea_t) the maximal address - @param rg: (C++: int) the segment register number - @param value: (C++: sel_t) the segment register value - -ida_segregs.split_sreg_range (function) - 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: (C++: ea_t) linear address where the segment register will have a new value. if - ea==BADADDR, nothing to do. - @param rg: (C++: int) the number of the segment register - @param v: (C++: sel_t) the new value of the segment register. If the value is unknown, you - should specify BADSEL. - @param tag: (C++: uchar) the register info tag. see Segment register range tags - @param silent: (C++: bool) if false, display a warning() in the case of failure - @return: success - -ida_segregs.sreg_range_t (class) - Proxy of C++ sreg_range_t class. - -ida_segregs.sreg_range_t.__init__ (method) - __init__(self) -> sreg_range_t - -ida_segregs.sreg_range_t.tag (variable) - Segment register range tags - -ida_segregs.sreg_range_t.val (variable) - segment register value - -ida_srclang (module) - Third-party compiler support. - -ida_srclang.SRCLANG_C (variable) - C. - -ida_srclang.SRCLANG_CPP (variable) - C++. - -ida_srclang.SRCLANG_GO (variable) - Golang (not supported yet) - -ida_srclang.SRCLANG_OBJC (variable) - Objective-C. - -ida_srclang.SRCLANG_SWIFT (variable) - Swift (not supported yet) - -ida_srclang.parse_decls_for_srclang (function) - parse_decls_for_srclang(lang, til, input, is_path) -> int - Parse type declarations in the specified language - - @param lang: (C++: srclang_t) the source language(s) expected in the input - @param til: (C++: til_t *) type library to store the types - @param input: (C++: const char *) input source. can be a file path or decl string - @param is_path: (C++: bool) true if input parameter is a path to a source file, false if the - input is an in-memory source snippet - @retval -1: no parser was found that supports the given source language(s) - @retval else: the number of errors encountered in the input source - -ida_srclang.parse_decls_with_parser (function) - parse_decls_with_parser(parser_name, til, input, is_path) -> int - Parse type declarations using the parser with the specified name - - @param parser_name: (C++: const char *) name of the target parser - @param til: (C++: til_t *) type library to store the types - @param input: (C++: const char *) input source. can be a file path or decl string - @param is_path: (C++: bool) true if input parameter is a path to a source file, false if the - input is an in-memory source snippet - @retval -1: no parser was found with the given name - @retval else: the number of errors encountered in the input source - -ida_srclang.select_parser_by_name (function) - select_parser_by_name(name) -> bool - Set the parser with the given name as the current parser. Pass nullptr or an - empty string to select the default parser. - - @param name: (C++: const char *) char const * - @return: false if no parser was found with the given name - -ida_srclang.select_parser_by_srclang (function) - select_parser_by_srclang(lang) -> bool - Set the parser that supports the given language(s) as the current parser. The - selected parser must support all languages specified by the given srclang_t. - - @param lang: (C++: srclang_t) - @return: false if no such parser was found - -ida_srclang.set_parser_argv (function) - set_parser_argv(parser_name, argv) -> int - Set the command-line args to use for invocations of the parser with the given - name - - @param parser_name: (C++: const char *) name of the target parser - @param argv: (C++: const char *) argument list - @retval -1: no parser was found with the given name - @retval -2: the operation is not supported by the given parser - @retval 0: success - -ida_strlist (module) - Functions that deal with the string list. - - While the kernel keeps the string list, it does not update it. The string list - is not used by the kernel because keeping it up-to-date would slow down IDA - without any benefit. If the string list is not cleared using clear_strlist(), - the list will be saved to the database and restored on the next startup. - - The users of this list should call build_strlist() if they need an up-to-date - version. - -ida_strlist.build_strlist (function) - build_strlist() - Rebuild the string list. - -ida_strlist.clear_strlist (function) - clear_strlist() - Clear the string list. - -ida_strlist.get_strlist_item (function) - 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 (function) - get_strlist_options() -> strwinsetup_t - Get the static string list options. - -ida_strlist.get_strlist_qty (function) - get_strlist_qty() -> size_t - Get number of elements in the string list. The list will be loaded from the - database (if saved) or built from scratch. - -ida_strlist.string_info_t (class) - Proxy of C++ string_info_t class. - -ida_strlist.string_info_t.__init__ (method) - __init__(self, _ea=BADADDR) -> string_info_t - - @param _ea: ea_t - -ida_strlist.string_info_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: string_info_t const & - -ida_strlist.strwinsetup_t (class) - Proxy of C++ strwinsetup_t class. - -ida_strlist.strwinsetup_t.__init__ (method) - __init__(self) -> strwinsetup_t - -ida_strlist.strwinsetup_t._get_strtypes (method) - _get_strtypes(self) -> PyObject * - -ida_strlist.strwinsetup_t._set_strtypes (method) - _set_strtypes(self, py_t) -> PyObject * - - Parameters - ---------- - py_t: PyObject * - -ida_struct (module) - Structure type management (assembly level types) - -ida_struct.MF_BASECLASS (variable) - a special member representing base class - -ida_struct.MF_BYTIL (variable) - the member was created due to the type system - -ida_struct.MF_DTOR (variable) - a special member representing destructor - -ida_struct.MF_DUPNAME (variable) - duplicate name resolved with _N suffix (N==soff) - -ida_struct.MF_HASTI (variable) - has type information? - -ida_struct.MF_HASUNI (variable) - has members of type "union"? - -ida_struct.MF_OK (variable) - is the member ok? (always yes) - -ida_struct.MF_UNIMEM (variable) - is a member of a union? - -ida_struct.SET_MEMTI_BYTIL (variable) - new type was created by the type subsystem - -ida_struct.SET_MEMTI_COMPATIBLE (variable) - new type must be compatible with the old - -ida_struct.SET_MEMTI_FUNCARG (variable) - mptr is function argument (cannot create arrays) - -ida_struct.SET_MEMTI_MAY_DESTROY (variable) - may destroy other members - -ida_struct.SET_MEMTI_USERTI (variable) - user-specified type - -ida_struct.SF_ALIGN (variable) - alignment (shift amount: 0..31) - -ida_struct.SF_FRAME (variable) - the structure is a function frame - -ida_struct.SF_GHOST (variable) - ghost copy of a local type - -ida_struct.SF_HASUNI (variable) - has members of type "union"? - -ida_struct.SF_HIDDEN (variable) - the structure is collapsed - -ida_struct.SF_NOLIST (variable) - don't include in the chooser list - -ida_struct.SF_TYPLIB (variable) - the structure comes from type library - -ida_struct.SF_UNION (variable) - is a union? varunions are prohibited! - -ida_struct.SF_VAR (variable) - 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.SMT_ARRAY (variable) - arrays are forbidden as function arguments - -ida_struct.SMT_BADARG (variable) - bad parameters - -ida_struct.SMT_FAILED (variable) - failed to set new member type - -ida_struct.SMT_KEEP (variable) - no need to change the member type, the old type is better - -ida_struct.SMT_NOCOMPAT (variable) - the new type is not compatible with the old type - -ida_struct.SMT_OVERLAP (variable) - member would overlap with members that cannot be deleted - -ida_struct.SMT_SIZE (variable) - the new type is incompatible with the member size - -ida_struct.SMT_WORSE (variable) - the new type is worse than the old type - -ida_struct.STRNFL_REGEX (variable) - apply regular expressions to beautify the name - -ida_struct.STRUC_ERROR_MEMBER_LTUDT (variable) - failed to change corresponding local type - -ida_struct.STRUC_ERROR_MEMBER_NAME (variable) - already has member with this name (bad name) - -ida_struct.STRUC_ERROR_MEMBER_NESTED (variable) - recursive structure nesting is forbidden - -ida_struct.STRUC_ERROR_MEMBER_OFFSET (variable) - already has member at this offset - -ida_struct.STRUC_ERROR_MEMBER_OK (variable) - success - -ida_struct.STRUC_ERROR_MEMBER_SIZE (variable) - bad number of bytes or bad sizeof(type) - -ida_struct.STRUC_ERROR_MEMBER_STRUCT (variable) - bad struct id (the 1st argument) - -ida_struct.STRUC_ERROR_MEMBER_TINFO (variable) - bad typeid parameter - -ida_struct.STRUC_ERROR_MEMBER_UNIVAR (variable) - unions can't have variable sized members - -ida_struct.STRUC_ERROR_MEMBER_VARLAST (variable) - variable sized member should be the last member in the structure - -ida_struct.STRUC_SEPARATOR (variable) - structname.fieldname - -ida_struct.add_struc (function) - add_struc(idx, name, is_union=False) -> tid_t - Create a structure type. if idx==BADADDR then add as the last idx. if - name==nullptr then a name will be generated "struct_%d". - - @param idx: (C++: uval_t) - @param name: (C++: const char *) char const * - @param is_union: (C++: bool) - -ida_struct.add_struc_member (function) - add_struc_member(sptr, fieldname, offset, flag, mt, nbytes) -> struc_error_t - Add member to existing structure. - - @param sptr: (C++: struc_t *) structure to modify - @param fieldname: (C++: const char *) if nullptr, then "anonymous_#" name will be generated - @param offset: (C++: ea_t) BADADDR means add to the end of structure - @param flag: (C++: flags64_t) type + representation bits - @param mt: (C++: const opinfo_t *) additional info about member type. must be present for structs, - offsets, enums, strings, struct offsets. - @param nbytes: (C++: asize_t) if == 0 then the structure will be a varstruct. in this case the - member should be the last member in the structure - -ida_struct.del_member_tinfo (function) - 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 (function) - del_struc(sptr) -> bool - Delete a structure type This function deletes as well local type synced with the - structure - - @param sptr: (C++: struc_t *) - -ida_struct.del_struc_member (function) - 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 (function) - 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.dyn_member_ref_array (class) - Proxy of C++ dynamic_wrapped_array_t< member_t > class. - -ida_struct.dyn_member_ref_array.__getitem__ (method) - __getitem__(self, i) -> member_t - - @param i: size_t - -ida_struct.dyn_member_ref_array.__init__ (method) - __init__(self, _data, _count) -> dyn_member_ref_array - - @param _data: member_t * - @param _count: size_t - -ida_struct.dyn_member_ref_array.__len__ (method) - __len__(self) -> size_t - -ida_struct.dyn_member_ref_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: member_t const & - -ida_struct.expand_struc (function) - 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 (function) - 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 *) struc_t const * - @param offset: (C++: asize_t) - -ida_struct.get_first_struc_idx (function) - get_first_struc_idx() -> uval_t - Get index of first structure. - - @return: BADADDR if no known structures, 0 otherwise - -ida_struct.get_innermost_member (function) - get_innermost_member(sptr, offset) -> (member_t, struc_t, int) - Get the innermost member at the given offset - - @param sptr: the starting structure - @param offset: offset into the starting structure - @return: - None on failure - - tuple(member_t, struct_t, offset) - where member_t: a member in SPTR (it is not a structure), - struct_t: the innermost structure, - offset: remaining offset into the returned member - -ida_struct.get_last_struc_idx (function) - 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 (function) - 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 (function) - get_member(sptr, offset) -> member_t - Get member at given offset. - - @param sptr: (C++: const struc_t *) struc_t const * - @param offset: (C++: asize_t) - -ida_struct.get_member_by_fullname (function) - get_member_by_fullname(fullname) -> member_t - Get a member by its fully qualified name, "struct.field". - - @param fullname: (C++: const char *) char const * - -ida_struct.get_member_by_id (function) - get_member_by_id(mid) -> member_t - Check if the specified member id points to a struct member. convenience - function. - - @param mid: (C++: tid_t) - -ida_struct.get_member_by_name (function) - get_member_by_name(sptr, membername) -> member_t - Get a member by its name, like "field44". - - @param sptr: (C++: const struc_t *) struc_t const * - @param membername: (C++: const char *) char const * - -ida_struct.get_member_cmt (function) - get_member_cmt(mid, repeatable) -> str - Get comment of structure member. - - @param mid: (C++: tid_t) - @param repeatable: (C++: bool) - -ida_struct.get_member_fullname (function) - get_member_fullname(mid) -> str - Get a member's fully qualified name, "struct.field". - - @param mid: (C++: tid_t) - -ida_struct.get_member_id (function) - get_member_id(sptr, offset) -> tid_t - Get member id at given offset. - - @param sptr: (C++: const struc_t *) struc_t const * - @param offset: (C++: asize_t) - -ida_struct.get_member_name (function) - get_member_name(mid) -> str - - @param mid: tid_t - -ida_struct.get_member_size (function) - get_member_size(NONNULL_mptr) -> asize_t - Get size of structure member. May return 0 for the last member of varstruct. For - union members, returns member_t::eoff. - - @param NONNULL_mptr: (C++: const member_t *) member_t const * - -ida_struct.get_member_struc (function) - get_member_struc(fullname) -> struc_t - Get containing structure of member by its full name "struct.field". - - @param fullname: (C++: const char *) char const * - -ida_struct.get_member_tinfo (function) - get_member_tinfo(tif, mptr) -> bool - Get tinfo for given member. - - @param tif: (C++: tinfo_t *) - @param mptr: (C++: const member_t *) member_t const * - -ida_struct.get_next_member_idx (function) - 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 *) struc_t const * - @param off: (C++: asize_t) - -ida_struct.get_next_struc_idx (function) - 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 (function) - 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 *) member_t const * - -ida_struct.get_prev_member_idx (function) - 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 *) struc_t const * - @param off: (C++: asize_t) - -ida_struct.get_prev_struc_idx (function) - 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 (function) - get_sptr(mptr) -> struc_t - Get child struct if member is a struct. - - @param mptr: (C++: const member_t *) member_t const * - -ida_struct.get_struc (function) - get_struc(id) -> struc_t - Get pointer to struct type info. - - @param id: (C++: tid_t) - -ida_struct.get_struc_by_idx (function) - get_struc_by_idx(idx) -> tid_t - Get struct id by struct number. - - @param idx: (C++: uval_t) - -ida_struct.get_struc_cmt (function) - get_struc_cmt(id, repeatable) -> str - Get struct comment. - - @param id: (C++: tid_t) - @param repeatable: (C++: bool) - -ida_struct.get_struc_first_offset (function) - get_struc_first_offset(sptr) -> ea_t - Get offset of first member. - - @param sptr: (C++: const struc_t *) struc_t const * - @return: BADADDR if memqty == 0 - -ida_struct.get_struc_id (function) - get_struc_id(name) -> tid_t - Get struct id by name. - - @param name: (C++: const char *) char const * - -ida_struct.get_struc_idx (function) - get_struc_idx(id) -> uval_t - Get internal number of the structure. - - @param id: (C++: tid_t) - -ida_struct.get_struc_last_offset (function) - get_struc_last_offset(sptr) -> ea_t - Get offset of last member. - - @param sptr: (C++: const struc_t *) struc_t const * - @return: BADADDR if memqty == 0 - -ida_struct.get_struc_name (function) - get_struc_name(id, flags=0) -> str - - @param id: tid_t - @param flags: int - -ida_struct.get_struc_next_offset (function) - get_struc_next_offset(sptr, offset) -> ea_t - Get offset of member with smallest offset larger than 'offset'. - - @param sptr: (C++: const struc_t *) struc_t const * - @param offset: (C++: ea_t) - @return: BADADDR if no next offset - -ida_struct.get_struc_prev_offset (function) - get_struc_prev_offset(sptr, offset) -> ea_t - Get offset of member with largest offset less than 'offset'. - - @param sptr: (C++: const struc_t *) struc_t const * - @param offset: (C++: ea_t) - @return: BADADDR if no prev offset - -ida_struct.get_struc_qty (function) - get_struc_qty() -> size_t - Get number of known structures. - -ida_struct.get_struc_size (function) - get_struc_size(sptr) -> asize_t - Get struct size (also see get_struc_size(const struc_t *)) - - @param sptr: struc_t const * - - get_struc_size(id) -> asize_t - - @param id: tid_t - -ida_struct.is_anonymous_member_name (function) - is_anonymous_member_name(name) -> bool - Is member name prefixed with "anonymous"? - - @param name: (C++: const char *) char const * - -ida_struct.is_dummy_member_name (function) - is_dummy_member_name(name) -> bool - Is member name an auto-generated name? - - @param name: (C++: const char *) char const * - -ida_struct.is_member_id (function) - is_member_id(mid) -> bool - Is a member id? - - @param mid: (C++: tid_t) - -ida_struct.is_special_member (function) - is_special_member(id) -> bool - Is a special member with the name beginning with ' '? - - @param id: (C++: tid_t) - -ida_struct.is_union (function) - is_union(id) -> bool - Is a union? - - @param id: (C++: tid_t) - -ida_struct.is_varmember (function) - is_varmember(mptr) -> bool - Is variable size member? - - @param mptr: (C++: const member_t *) member_t const * - -ida_struct.is_varstr (function) - is_varstr(id) -> bool - Is variable size structure? - - @param id: (C++: tid_t) - -ida_struct.member_t (class) - Proxy of C++ member_t class. - -ida_struct.member_t.__init__ (method) - __init__(self) -> member_t - -ida_struct.member_t.by_til (method) - by_til(self) -> bool - Was the member created due to the type system? - -ida_struct.member_t.eoff (variable) - end offset - -ida_struct.member_t.flag (variable) - type+representation bits - -ida_struct.member_t.get_size (method) - get_size(self) -> asize_t - Get member size. - -ida_struct.member_t.get_soff (method) - get_soff(self) -> ea_t - Get start offset (for unions - returns 0) - -ida_struct.member_t.has_ti (method) - has_ti(self) -> bool - Has type information? - -ida_struct.member_t.has_union (method) - has_union(self) -> bool - Has members of type "union"? - -ida_struct.member_t.id (variable) - name(), cmt, rptcmt - -ida_struct.member_t.is_baseclass (method) - is_baseclass(self) -> bool - Is a base class member? - -ida_struct.member_t.is_destructor (method) - is_destructor(self) -> bool - Is a virtual destructor? - -ida_struct.member_t.is_dupname (method) - is_dupname(self) -> bool - Duplicate name was resolved during import? - -ida_struct.member_t.props (variable) - Struct member properties - -ida_struct.member_t.soff (variable) - start offset (for unions - number of the member 0..n) - -ida_struct.member_t.unimem (method) - unimem(self) -> bool - Is a member of a union? - -ida_struct.retrieve_member_info (function) - retrieve_member_info(buf, mptr) -> opinfo_t - Get operand type info for member. - - @param buf: (C++: opinfo_t *) - @param mptr: (C++: const member_t *) member_t const * - -ida_struct.save_struc (function) - save_struc(sptr, may_update_ltypes=True) - Update struct information in the database (internal function) - - @param sptr: (C++: const struc_t *) struc_t const * - @param may_update_ltypes: (C++: bool) - -ida_struct.set_member_cmt (function) - set_member_cmt(mptr, cmt, repeatable) -> bool - Set member comment. - - @param mptr: (C++: member_t *) - @param cmt: (C++: const char *) char const * - @param repeatable: (C++: bool) - -ida_struct.set_member_name (function) - 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 *) char const * - -ida_struct.set_member_tinfo (function) - set_member_tinfo(sptr, mptr, memoff, tif, flags) -> smt_code_t - Set tinfo for given member. - - @param sptr: (C++: struc_t *) containing struct - @param mptr: (C++: member_t *) target member - @param memoff: (C++: uval_t) offset within member - @param tif: (C++: const tinfo_t &) type info - @param flags: (C++: int) Set member tinfo flags - -ida_struct.set_member_type (function) - 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++: flags64_t) - @param mt: (C++: const opinfo_t *) opinfo_t const * - @param nbytes: (C++: asize_t) - -ida_struct.set_struc_align (function) - 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 (function) - set_struc_cmt(id, cmt, repeatable) -> bool - Set structure comment. - - @param id: (C++: tid_t) - @param cmt: (C++: const char *) char const * - @param repeatable: (C++: bool) - -ida_struct.set_struc_hidden (function) - 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 (function) - 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 *) struc_t const * - @param idx: (C++: uval_t) - -ida_struct.set_struc_listed (function) - 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 (function) - set_struc_name(id, name) -> bool - Set structure name. - - @param id: (C++: tid_t) - @param name: (C++: const char *) char const * - -ida_struct.stroff_as_size (function) - stroff_as_size(plen, sptr, value) -> bool - - @param plen: int - @param sptr: struc_t const * - @param value: asize_t - - stroff_as_size(plen, tif, value) -> bool - - @param plen: int - @param tif: tinfo_t const & - @param value: asize_t - -ida_struct.struc_t (class) - Proxy of C++ struc_t class. - -ida_struct.struc_t.__get_members__ (method) - __get_members__(self) -> dyn_member_ref_array - -ida_struct.struc_t.__init__ (method) - -ida_struct.struc_t.age (variable) - not used - -ida_struct.struc_t.from_til (method) - from_til(self) -> bool - Does structure come from a type library? - -ida_struct.struc_t.get_alignment (method) - get_alignment(self) -> int - See SF_ALIGN. - -ida_struct.struc_t.get_last_member (method) - get_last_member(self) -> member_t - -ida_struct.struc_t.get_member (method) - -ida_struct.struc_t.has_union (method) - has_union(self) -> bool - Has members of type "union"? - -ida_struct.struc_t.id (variable) - struct id - -ida_struct.struc_t.is_choosable (method) - is_choosable(self) -> bool - Is included in chooser list? Use set_struc_listed to change the listed status - -ida_struct.struc_t.is_copyof (method) - is_copyof(self) -> bool - Is copied from a local type? - -ida_struct.struc_t.is_frame (method) - is_frame(self) -> bool - Is this structure a function frame? - -ida_struct.struc_t.is_ghost (method) - is_ghost(self) -> bool - Is a ghost copy of a local type? - -ida_struct.struc_t.is_hidden (method) - is_hidden(self) -> bool - Is the structure collapsed? Use set_struc_hidden to change the hidden status - -ida_struct.struc_t.is_mappedto (method) - is_mappedto(self) -> bool - Is mapped to a local type? - -ida_struct.struc_t.is_synced (method) - is_synced(self) -> bool - Is synced with a local type? - -ida_struct.struc_t.is_union (method) - is_union(self) -> bool - Is a union? - -ida_struct.struc_t.is_varstr (method) - is_varstr(self) -> bool - Is variable size structure? - -ida_struct.struc_t.like_union (method) - like_union(self) -> bool - Is a union or contains members of type "union"? - -ida_struct.struc_t.members (variable) - only defined members are stored here. there may be gaps between members. - -ida_struct.struc_t.memqty (variable) - number of members - -ida_struct.struc_t.ordinal (variable) - corresponding local type ordinal number - -ida_struct.struc_t.props (variable) - Structure properties - -ida_struct.struc_t.set_alignment (method) - set_alignment(self, shift) - Do not use; use set_struc_align() - - @param shift: (C++: int) - -ida_struct.struct_field_visitor_t (class) - Proxy of C++ struct_field_visitor_t class. - -ida_struct.struct_field_visitor_t.__disown__ (method) - -ida_struct.struct_field_visitor_t.__init__ (method) - __init__(self) -> struct_field_visitor_t - - @param self: PyObject * - -ida_struct.struct_field_visitor_t.visit_field (method) - visit_field(self, sptr, mptr) -> int - - @param sptr: struc_t * - @param mptr: member_t * - -ida_struct.udm_visitor_t (class) - Proxy of C++ udm_visitor_t class. - -ida_struct.udm_visitor_t.__disown__ (method) - -ida_struct.udm_visitor_t.__init__ (method) - __init__(self) -> udm_visitor_t - - @param self: PyObject * - -ida_struct.udm_visitor_t.visit_udm (method) - visit_udm(self, tid, tif, udt, idx) -> int - - @param tid: (C++: tid_t) udt tid - @param tif: (C++: const tinfo_t *) udt type info (may be nullptr for corrupted idbs) - @param udt: (C++: const udt_type_data_t *) udt type data (may be nullptr for corrupted idbs) - @param idx: (C++: ssize_t) the index of udt the member (may be -1 if udm was not found) - -ida_struct.unsync_and_delete_struc (function) - unsync_and_delete_struc(sptr) - Delete the structure but leave synced ltudt unchanged. Note del_struc() deletes - both ASM struc and the corresponding local type - - @param sptr: (C++: struc_t *) - -ida_struct.visit_stroff_fields (function) - visit_stroff_fields(sfv, path, disp, appzero) -> flags64_t - - @param sfv: struct_field_visitor_t & - @param path: tid_t const * - @param disp: adiff_t * - @param appzero: bool - -ida_struct.visit_stroff_udms (function) - visit_stroff_udms(sfv, path, disp, appzero) -> int - 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: (C++: udm_visitor_t &) visitor object - @param path: (C++: const tid_t *) struct path (path[0] contains the initial struct id) - @param disp: (C++: adiff_t *) offset into structure - @param appzero: (C++: bool) should visit field at offset zero? - @return: visitor result - -ida_tryblks (module) - Architecture independent exception handling info. - - Try blocks have the following general properties: - * A try block specifies a possibly fragmented guarded code region. - * Each try block has always at least one catch/except block description - * Each catch block contains its boundaries and a filter. - * Additionally a catch block can hold sp adjustment and the offset to the - exception object offset (C++). - * Try blocks can be nested. Nesting is automatically calculated at the retrieval - time. - * There may be (nested) multiple try blocks starting at the same address. - - See examples in tests/input/src/eh_tests. - -ida_tryblks.TBERR_EMPTY (variable) - empty try block - -ida_tryblks.TBERR_END (variable) - bad end address - -ida_tryblks.TBERR_INTERSECT (variable) - range would intersect inner tryblk - -ida_tryblks.TBERR_KIND (variable) - illegal try block kind - -ida_tryblks.TBERR_NO_CATCHES (variable) - no catch blocks at all - -ida_tryblks.TBERR_OK (variable) - ok - -ida_tryblks.TBERR_ORDER (variable) - bad address order - -ida_tryblks.TBERR_START (variable) - bad start address - -ida_tryblks.add_tryblk (function) - add_tryblk(tb) -> int - Add one try block information. - - @param tb: (C++: const tryblk_t &) try block to add. - @return: error code; 0 means good - -ida_tryblks.catch_t (class) - Proxy of C++ catch_t class. - -ida_tryblks.catch_t.__init__ (method) - __init__(self) -> catch_t - -ida_tryblks.catchvec_t (class) - Proxy of C++ qvector< catch_t > class. - -ida_tryblks.catchvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< catch_t > const & - -ida_tryblks.catchvec_t.__getitem__ (method) - __getitem__(self, i) -> catch_t - - @param i: size_t - -ida_tryblks.catchvec_t.__init__ (method) - __init__(self) -> catchvec_t - __init__(self, x) -> catchvec_t - - @param x: qvector< catch_t > const & - -ida_tryblks.catchvec_t.__len__ (method) - __len__(self) -> size_t - -ida_tryblks.catchvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< catch_t > const & - -ida_tryblks.catchvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: catch_t const & - -ida_tryblks.catchvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: catch_t const & - -ida_tryblks.catchvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: catch_t const & - -ida_tryblks.catchvec_t.at (method) - at(self, _idx) -> catch_t - - @param _idx: size_t - -ida_tryblks.catchvec_t.begin (method) - begin(self) -> catch_t - -ida_tryblks.catchvec_t.capacity (method) - capacity(self) -> size_t - -ida_tryblks.catchvec_t.clear (method) - clear(self) - -ida_tryblks.catchvec_t.empty (method) - empty(self) -> bool - -ida_tryblks.catchvec_t.end (method) - end(self) -> catch_t - -ida_tryblks.catchvec_t.erase (method) - erase(self, it) -> catch_t - - @param it: qvector< catch_t >::iterator - - erase(self, first, last) -> catch_t - - @param first: qvector< catch_t >::iterator - @param last: qvector< catch_t >::iterator - -ida_tryblks.catchvec_t.extract (method) - extract(self) -> catch_t - -ida_tryblks.catchvec_t.find (method) - find(self, x) -> catch_t - - @param x: catch_t const & - -ida_tryblks.catchvec_t.grow (method) - grow(self, x=catch_t()) - - @param x: catch_t const & - -ida_tryblks.catchvec_t.has (method) - has(self, x) -> bool - - @param x: catch_t const & - -ida_tryblks.catchvec_t.inject (method) - inject(self, s, len) - - @param s: catch_t * - @param len: size_t - -ida_tryblks.catchvec_t.insert (method) - insert(self, it, x) -> catch_t - - @param it: qvector< catch_t >::iterator - @param x: catch_t const & - -ida_tryblks.catchvec_t.pop_back (method) - pop_back(self) - -ida_tryblks.catchvec_t.push_back (method) - push_back(self, x) - - @param x: catch_t const & - - push_back(self) -> catch_t - -ida_tryblks.catchvec_t.qclear (method) - qclear(self) - -ida_tryblks.catchvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_tryblks.catchvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: catch_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_tryblks.catchvec_t.size (method) - size(self) -> size_t - -ida_tryblks.catchvec_t.swap (method) - swap(self, r) - - @param r: qvector< catch_t > & - -ida_tryblks.catchvec_t.truncate (method) - truncate(self) - -ida_tryblks.del_tryblks (function) - del_tryblks(range) - Delete try block information in the specified range. - - @param range: (C++: const range_t &) the range to be cleared - -ida_tryblks.find_syseh (function) - find_syseh(ea) -> ea_t - Find the start address of the system eh region including the argument. - - @param ea: (C++: ea_t) search address - @return: start address of surrounding tryblk, otherwise BADADDR - -ida_tryblks.get_tryblks (function) - 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: (C++: tryblks_t *) output buffer; may be nullptr - @param range: (C++: const range_t &) address range to change - @return: number of found try blocks - -ida_tryblks.is_ea_tryblks (function) - is_ea_tryblks(ea, flags) -> bool - Check if the given address ea is part of tryblks description. - - @param ea: (C++: ea_t) address to check - @param flags: (C++: uint32) combination of flags for is_ea_tryblks() - -ida_tryblks.seh_t (class) - Proxy of C++ seh_t class. - -ida_tryblks.seh_t.__init__ (method) - __init__(self) -> seh_t - -ida_tryblks.seh_t.clear (method) - clear(self) - -ida_tryblks.try_handler_t (class) - Proxy of C++ try_handler_t class. - -ida_tryblks.try_handler_t.__init__ (method) - __init__(self) -> try_handler_t - -ida_tryblks.try_handler_t.clear (method) - clear(self) - -ida_tryblks.tryblk_t (class) - Proxy of C++ tryblk_t class. - -ida_tryblks.tryblk_t.__init__ (method) - __init__(self) -> tryblk_t - __init__(self, r) -> tryblk_t - - @param r: tryblk_t const & - -ida_tryblks.tryblk_t.clear (method) - clear(self) - -ida_tryblks.tryblk_t.cpp (method) - cpp(self) -> catchvec_t - -ida_tryblks.tryblk_t.empty (method) - empty(self) -> bool - -ida_tryblks.tryblk_t.get_kind (method) - get_kind(self) -> uchar - -ida_tryblks.tryblk_t.is_cpp (method) - is_cpp(self) -> bool - -ida_tryblks.tryblk_t.is_seh (method) - is_seh(self) -> bool - -ida_tryblks.tryblk_t.seh (method) - seh(self) -> seh_t - -ida_tryblks.tryblk_t.set_cpp (method) - set_cpp(self) -> catchvec_t - -ida_tryblks.tryblk_t.set_seh (method) - set_seh(self) -> seh_t - -ida_tryblks.tryblks_t (class) - Proxy of C++ qvector< tryblk_t > class. - -ida_tryblks.tryblks_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< tryblk_t > const & - -ida_tryblks.tryblks_t.__getitem__ (method) - __getitem__(self, i) -> tryblk_t - - @param i: size_t - -ida_tryblks.tryblks_t.__init__ (method) - __init__(self) -> tryblks_t - __init__(self, x) -> tryblks_t - - @param x: qvector< tryblk_t > const & - -ida_tryblks.tryblks_t.__len__ (method) - __len__(self) -> size_t - -ida_tryblks.tryblks_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< tryblk_t > const & - -ida_tryblks.tryblks_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: tryblk_t const & - -ida_tryblks.tryblks_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: tryblk_t const & - -ida_tryblks.tryblks_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: tryblk_t const & - -ida_tryblks.tryblks_t.at (method) - at(self, _idx) -> tryblk_t - - @param _idx: size_t - -ida_tryblks.tryblks_t.begin (method) - begin(self) -> tryblk_t - -ida_tryblks.tryblks_t.capacity (method) - capacity(self) -> size_t - -ida_tryblks.tryblks_t.clear (method) - clear(self) - -ida_tryblks.tryblks_t.empty (method) - empty(self) -> bool - -ida_tryblks.tryblks_t.end (method) - end(self) -> tryblk_t - -ida_tryblks.tryblks_t.erase (method) - erase(self, it) -> tryblk_t - - @param it: qvector< tryblk_t >::iterator - - erase(self, first, last) -> tryblk_t - - @param first: qvector< tryblk_t >::iterator - @param last: qvector< tryblk_t >::iterator - -ida_tryblks.tryblks_t.extract (method) - extract(self) -> tryblk_t - -ida_tryblks.tryblks_t.find (method) - find(self, x) -> tryblk_t - - @param x: tryblk_t const & - -ida_tryblks.tryblks_t.grow (method) - grow(self, x=tryblk_t()) - - @param x: tryblk_t const & - -ida_tryblks.tryblks_t.has (method) - has(self, x) -> bool - - @param x: tryblk_t const & - -ida_tryblks.tryblks_t.inject (method) - inject(self, s, len) - - @param s: tryblk_t * - @param len: size_t - -ida_tryblks.tryblks_t.insert (method) - insert(self, it, x) -> tryblk_t - - @param it: qvector< tryblk_t >::iterator - @param x: tryblk_t const & - -ida_tryblks.tryblks_t.pop_back (method) - pop_back(self) - -ida_tryblks.tryblks_t.push_back (method) - push_back(self, x) - - @param x: tryblk_t const & - - push_back(self) -> tryblk_t - -ida_tryblks.tryblks_t.qclear (method) - qclear(self) - -ida_tryblks.tryblks_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_tryblks.tryblks_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: tryblk_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_tryblks.tryblks_t.size (method) - size(self) -> size_t - -ida_tryblks.tryblks_t.swap (method) - swap(self, r) - - @param r: qvector< tryblk_t > & - -ida_tryblks.tryblks_t.truncate (method) - truncate(self) - -ida_typeinf (module) - Describes the type information records in IDA. - - The recommended way of using type info is to use the tinfo_t class. The type - information is internally kept as an array of bytes terminated by 0. - - Items in brackets [] are optional and sometimes are omitted. type_t... means a - sequence of type_t bytes which defines a type. - - @note: to work with the types of instructions or data in the database, use - get_tinfo()/set_tinfo() and similar functions. - -ida_typeinf.ADDTIL_ABORTED (variable) - til was not loaded (incompatible til rejected by user) - -ida_typeinf.ADDTIL_COMP (variable) - ok, but til is not compatible with the current compiler - -ida_typeinf.ADDTIL_DEFAULT (variable) - default behavior - -ida_typeinf.ADDTIL_FAILED (variable) - something bad, the warning is displayed - -ida_typeinf.ADDTIL_INCOMP (variable) - load incompatible tils - -ida_typeinf.ADDTIL_OK (variable) - ok, til is loaded - -ida_typeinf.ADDTIL_SILENT (variable) - do not ask any questions - -ida_typeinf.ALOC_CUSTOM (variable) - custom argloc (7 or higher) - -ida_typeinf.ALOC_DIST (variable) - distributed (scattered) - -ida_typeinf.ALOC_NONE (variable) - none - -ida_typeinf.ALOC_REG1 (variable) - one register (and offset within it) - -ida_typeinf.ALOC_REG2 (variable) - register pair - -ida_typeinf.ALOC_RREL (variable) - register relative - -ida_typeinf.ALOC_STACK (variable) - stack offset - -ida_typeinf.ALOC_STATIC (variable) - global address - -ida_typeinf.ARGREGS_BY_SLOTS (variable) - fixed FP/GP register per each slot (like vc64) - -ida_typeinf.ARGREGS_FP_CONSUME_GP (variable) - FP register also consumes one or more GP regs but not vice versa (aix ppc ABI) - -ida_typeinf.ARGREGS_GP_ONLY (variable) - GP registers used for all arguments. - -ida_typeinf.ARGREGS_INDEPENDENT (variable) - FP/GP registers used separately (like gcc64) - -ida_typeinf.ARGREGS_MIPS_O32 (variable) - MIPS ABI o32. - -ida_typeinf.BADSIZE (variable) - bad type size - -ida_typeinf.BFA_FUNC_EXT_FORMAT (variable) - This is NOT a real attribute (used internally as marker for extended format) - -ida_typeinf.BFA_FUNC_MARKER (variable) - This is NOT a cc! (used internally as a marker) - -ida_typeinf.BFA_HIGH (variable) - high level prototype (with possibly hidden args) - -ida_typeinf.BFA_NORET (variable) - __noreturn - -ida_typeinf.BFA_PURE (variable) - __pure - -ida_typeinf.BFA_STATIC (variable) - static - -ida_typeinf.BFA_VIRTUAL (variable) - virtual - -ida_typeinf.BTE_ALWAYS (variable) - this bit MUST be present - -ida_typeinf.BTE_BITMASK (variable) - 'subarrays'. In this case ANY record has the following format: - * 'de' mask (has name) - * 'dt' cnt - * cnt records of 'de' values (cnt CAN be 0) - @note: delta for ALL subsegment is ONE - -ida_typeinf.BTE_CHAR (variable) - char or hex - -ida_typeinf.BTE_HEX (variable) - hex - -ida_typeinf.BTE_OUT_MASK (variable) - output style mask - -ida_typeinf.BTE_RESERVED (variable) - must be 0, in order to distinguish from a tah-byte - -ida_typeinf.BTE_SDEC (variable) - signed decimal - -ida_typeinf.BTE_SIZE_MASK (variable) - storage size. - * if == 0 then inf_get_cc_size_e() - * else 1 << (n -1) = 1,2,4,8 - * n == 5,6,7 are reserved - -ida_typeinf.BTE_UDEC (variable) - unsigned decimal - -ida_typeinf.BTF_BOOL (variable) - boolean - -ida_typeinf.BTF_BYTE (variable) - byte - -ida_typeinf.BTF_CHAR (variable) - signed char - -ida_typeinf.BTF_DOUBLE (variable) - double - -ida_typeinf.BTF_ENUM (variable) - enum - -ida_typeinf.BTF_FLOAT (variable) - float - -ida_typeinf.BTF_INT (variable) - int, unknown signedness - -ida_typeinf.BTF_INT128 (variable) - signed 128-bit value - -ida_typeinf.BTF_INT16 (variable) - signed short - -ida_typeinf.BTF_INT32 (variable) - signed int - -ida_typeinf.BTF_INT64 (variable) - signed long - -ida_typeinf.BTF_INT8 (variable) - signed byte - -ida_typeinf.BTF_LDOUBLE (variable) - long double - -ida_typeinf.BTF_SINT (variable) - singed int - -ida_typeinf.BTF_STRUCT (variable) - struct - -ida_typeinf.BTF_TBYTE (variable) - see BTMT_SPECFLT - -ida_typeinf.BTF_TYPEDEF (variable) - typedef - -ida_typeinf.BTF_UCHAR (variable) - unsigned char - -ida_typeinf.BTF_UINT (variable) - unsigned int - -ida_typeinf.BTF_UINT128 (variable) - unsigned 128-bit value - -ida_typeinf.BTF_UINT16 (variable) - unsigned short - -ida_typeinf.BTF_UINT32 (variable) - unsigned int - -ida_typeinf.BTF_UINT64 (variable) - unsigned long - -ida_typeinf.BTF_UINT8 (variable) - unsigned byte - -ida_typeinf.BTF_UNION (variable) - union - -ida_typeinf.BTF_UNK (variable) - unknown - -ida_typeinf.BTF_VOID (variable) - void - -ida_typeinf.BTMT_ARRESERV (variable) - reserved bit - -ida_typeinf.BTMT_BFLDI16 (variable) - __int16 - -ida_typeinf.BTMT_BFLDI32 (variable) - __int32 - -ida_typeinf.BTMT_BFLDI64 (variable) - __int64 - -ida_typeinf.BTMT_BFLDI8 (variable) - __int8 - -ida_typeinf.BTMT_BOOL1 (variable) - size 1byte - -ida_typeinf.BTMT_BOOL2 (variable) - size 2bytes - !inf_is_64bit() - -ida_typeinf.BTMT_BOOL4 (variable) - size 4bytes - -ida_typeinf.BTMT_BOOL8 (variable) - size 8bytes - inf_is_64bit() - -ida_typeinf.BTMT_CHAR (variable) - specify char or segment register - * BT_INT8 - char - * BT_INT - segment register - * other BT_INT... - don't use - -ida_typeinf.BTMT_CLOSURE (variable) - closure. - * if ptr to BT_FUNC - __closure. in this case next byte MUST be RESERVED_BYTE, - and after it BT_FUNC - * else the next byte contains sizeof(ptr) allowed values are 1 - ph.max_ptr_size - * if value is bigger than ph.max_ptr_size, based_ptr_name_and_size() is called - to find out the typeinfo - -ida_typeinf.BTMT_DEFBOOL (variable) - size is model specific or unknown(?) - -ida_typeinf.BTMT_DEFCALL (variable) - call method - default for model or unknown - -ida_typeinf.BTMT_DEFPTR (variable) - default for model - -ida_typeinf.BTMT_DOUBLE (variable) - double (8 bytes) - -ida_typeinf.BTMT_FAR (variable) - far - -ida_typeinf.BTMT_FARCALL (variable) - function returns by retf - -ida_typeinf.BTMT_FLOAT (variable) - float (4 bytes) - -ida_typeinf.BTMT_INTCALL (variable) - function returns by iret in this case cc MUST be 'unknown' - -ida_typeinf.BTMT_LNGDBL (variable) - long double (compiler specific) - -ida_typeinf.BTMT_NEAR (variable) - near - -ida_typeinf.BTMT_NEARCALL (variable) - function returns by retn - -ida_typeinf.BTMT_NONBASED (variable) - if set - array base==0 - format: dt num_elem; [tah-typeattrs]; type_t... - if num_elem==0 then the array size is unknown - else - format: da num_elem, base; [tah-typeattrs]; type_t... - used only for serialization - -ida_typeinf.BTMT_SIGNED (variable) - signed - -ida_typeinf.BTMT_SIZE0 (variable) - BT_VOID - normal void; BT_UNK - don't use - -ida_typeinf.BTMT_SIZE12 (variable) - size = 1 byte if BT_VOID; 2 if BT_UNK - -ida_typeinf.BTMT_SIZE128 (variable) - size = 16 bytes if BT_VOID; unknown if BT_UNK (IN struct alignment - see below) - -ida_typeinf.BTMT_SIZE48 (variable) - size = 4 bytes if BT_VOID; 8 if BT_UNK - -ida_typeinf.BTMT_SPECFLT (variable) - float (variable size). if processor_t::use_tbyte() then use - processor_t::tbyte_size, otherwise 2 bytes - -ida_typeinf.BTMT_TYPEDEF (variable) - named reference always p_string name - -ida_typeinf.BTMT_UNKSIGN (variable) - unknown signedness - -ida_typeinf.BTMT_USIGNED (variable) - unsigned - -ida_typeinf.BTM_CONST (variable) - const - -ida_typeinf.BTM_VOLATILE (variable) - volatile - -ida_typeinf.BT_ARRAY (variable) - array - -ida_typeinf.BT_BITFIELD (variable) - bitfield (only in struct) ['bitmasked' enum see below] next byte is dt ((size in - bits << 1) | (unsigned ? 1 : 0)) - -ida_typeinf.BT_BOOL (variable) - bool - -ida_typeinf.BT_COMPLEX (variable) - struct/union/enum/typedef. format: - [dt N (N=field count) if !BTMT_TYPEDEF] - if N == 0: - p_string name (unnamed types have names "anon_...") - [sdacl-typeattrs]; - else, for struct & union: - if N == 0x7FFE // Support for high (i.e., > 4095) members count - N = deserialize_de() - ALPOW = N & 0x7 - MCNT = N >> 3 - if MCNT == 0 - empty struct - if ALPOW == 0 - ALIGN = get_default_align() - else - ALIGN = (1 << (ALPOW - 1)) - [sdacl-typeattrs]; - else, for enums: - if N == 0x7FFE // Support for high enum entries count. - N = deserialize_de() - [tah-typeattrs]; - -ida_typeinf.BT_FLOAT (variable) - float - -ida_typeinf.BT_FUNC (variable) - function. format: - optional: CM_CC_SPOILED | num_of_spoiled_regs - if num_of_spoiled_reg == BFA_FUNC_MARKER: - ::bfa_byte - if (bfa_byte & BFA_FUNC_EXT_FORMAT) != 0 - ::fti_bits (only low bits: FTI_SPOILED,...,FTI_VIRTUAL) - num_of_spoiled_reg times: spoiled reg info (see - extract_spoiledreg) - else - bfa_byte is function attribute byte (see Function attribute - byte...) - else: - num_of_spoiled_reg times: spoiled reg info (see - extract_spoiledreg) - cm_t ... calling convention and memory model - [tah-typeattrs]; - type_t ... return type; - [serialized argloc_t of returned value (if CM_CC_SPECIAL{PE} && !return - void); - if !CM_CC_VOIDARG: - dt N (N=number of parameters) - if ( N == 0 ) - if CM_CC_ELLIPSIS or CM_CC_SPECIALE - func(...) - else - parameters are unknown - else - N records: - type_t ... (i.e. type of each parameter) - [serialized argloc_t (if CM_CC_SPECIAL{PE})] (i.e. place of each - parameter) - [FAH_BYTE + de( funcarg_t::flags )] - -ida_typeinf.BT_INT (variable) - natural int. (size provided by idp module) - -ida_typeinf.BT_INT128 (variable) - __int128 (for alpha & future use) - -ida_typeinf.BT_INT16 (variable) - __int16 - -ida_typeinf.BT_INT32 (variable) - __int32 - -ida_typeinf.BT_INT64 (variable) - __int64 - -ida_typeinf.BT_INT8 (variable) - __int8 - -ida_typeinf.BT_PTR (variable) - pointer. has the following format: [db sizeof(ptr)]; [tah-typeattrs]; type_t... - -ida_typeinf.BT_RESERVED (variable) - RESERVED. - -ida_typeinf.BT_SEGREG (variable) - segment register - -ida_typeinf.BT_UNK (variable) - unknown - -ida_typeinf.BT_UNKNOWN (variable) - unknown size - for parameters - -ida_typeinf.BT_UNK_BYTE (variable) - 1 byte - -ida_typeinf.BT_UNK_DWORD (variable) - 4 bytes - -ida_typeinf.BT_UNK_OWORD (variable) - 16 bytes - -ida_typeinf.BT_UNK_QWORD (variable) - 8 bytes - -ida_typeinf.BT_UNK_WORD (variable) - 2 bytes - -ida_typeinf.BT_VOID (variable) - void - -ida_typeinf.CC_ALLOW_ARGPERM (variable) - disregard argument order? - -ida_typeinf.CC_ALLOW_REGHOLES (variable) - allow holes in register argument list? - -ida_typeinf.CC_CDECL_OK (variable) - can use __cdecl calling convention? - -ida_typeinf.CC_GOLANG_OK (variable) - can use __golang calling convention - -ida_typeinf.CC_HAS_ELLIPSIS (variable) - function has a variable list of arguments? - -ida_typeinf.CM_CC_CDECL (variable) - stack - -ida_typeinf.CM_CC_ELLIPSIS (variable) - cdecl + ellipsis - -ida_typeinf.CM_CC_FASTCALL (variable) - stack, purged (x86), first args are in regs (compiler-dependent) - -ida_typeinf.CM_CC_GOLANG (variable) - (Go) arguments and return value in stack - -ida_typeinf.CM_CC_INVALID (variable) - this value is invalid - -ida_typeinf.CM_CC_PASCAL (variable) - stack, purged, reverse order of args - -ida_typeinf.CM_CC_SPECIALE (variable) - CM_CC_SPECIAL with ellipsis - -ida_typeinf.CM_CC_SPECIALP (variable) - Equal to CM_CC_SPECIAL, but with purged stack. - -ida_typeinf.CM_CC_SPOILED (variable) - This is NOT a cc! Mark of __spoil record the low nibble is count and after n - {spoilreg_t} present real cm_t byte. if n == BFA_FUNC_MARKER, the next byte is - the function attribute byte. - -ida_typeinf.CM_CC_STDCALL (variable) - stack, purged - -ida_typeinf.CM_CC_SWIFT (variable) - (Swift) arguments and return values in registers (compiler-dependent) - -ida_typeinf.CM_CC_THISCALL (variable) - stack, purged (x86), first arg is in reg (compiler-dependent) - -ida_typeinf.CM_CC_UNKNOWN (variable) - unknown calling convention - -ida_typeinf.CM_CC_VOIDARG (variable) - function without arguments if has other cc and argnum == 0, represent as f() - - unknown list - -ida_typeinf.CM_N16_F32 (variable) - near 2 bytes, far 4 bytes - -ida_typeinf.CM_N32_F48 (variable) - near 4 bytes, far 6 bytes - -ida_typeinf.CM_N64 (variable) - if sizeof(int)>2: near 8 bytes, far 8 bytes - -ida_typeinf.CM_N8_F16 (variable) - if sizeof(int)<=2: near 1 byte, far 2 bytes - -ida_typeinf.CM_UNKNOWN (variable) - unknown - -ida_typeinf.COMP_BC (variable) - Borland C++. - -ida_typeinf.COMP_BP (variable) - Delphi. - -ida_typeinf.COMP_GNU (variable) - GNU C++. - -ida_typeinf.COMP_MS (variable) - Visual C++. - -ida_typeinf.COMP_UNK (variable) - Unknown. - -ida_typeinf.COMP_UNSURE (variable) - uncertain compiler id - -ida_typeinf.COMP_VISAGE (variable) - Visual Age C++. - -ida_typeinf.COMP_WATCOM (variable) - Watcom C++. - -ida_typeinf.DEFMASK64 (variable) - default bitmask 64bits - -ida_typeinf.ETF_ASMENUM (variable) - asm enum compatibility mode *- - -ida_typeinf.ETF_AUTONAME (variable) - generate a member name if was not specified (add_udm, set_udm_type) - -ida_typeinf.ETF_COMPATIBLE (variable) - new type must be compatible with the old - -ida_typeinf.ETF_FORCENAME (variable) - anyway use name, see below for more usage description - -ida_typeinf.ETF_FUNCARG (variable) - mptr is function argument (cannot create arrays) - -ida_typeinf.ETF_MAY_DESTROY (variable) - may destroy other members - -ida_typeinf.ETF_NO_IDBSYNC (variable) - do not sync type to IDB (udt only) *- - -ida_typeinf.ETF_NO_LAYOUT (variable) - don't calc type layout before editing - -ida_typeinf.ETF_NO_SAVE (variable) - don't save to til (normally typerefs are saved to til) A call with ETF_NO_SAVE - must be followed by a call without it. Otherwise there may be inconsistencies - between the memory and the type library. - -ida_typeinf.FAH_BYTE (variable) - function argument attribute header byte - -ida_typeinf.FAI_ARRAY (variable) - was initially an array; see "__org_typedef" or "__org_arrdim" type attributes to - determine the original type - -ida_typeinf.FAI_HIDDEN (variable) - hidden argument - -ida_typeinf.FAI_RETPTR (variable) - pointer to return value. implies hidden - -ida_typeinf.FAI_STRUCT (variable) - was initially a structure - -ida_typeinf.FAI_UNUSED (variable) - argument is not used by the function - -ida_typeinf.FIRST_NONTRIVIAL_TYPID (variable) - Denotes the first bit describing a nontrivial type. - -ida_typeinf.FRB_CHAR (variable) - Char. - -ida_typeinf.FRB_CUSTOM (variable) - *Custom data type - -ida_typeinf.FRB_ENUM (variable) - *Enumeration - -ida_typeinf.FRB_FLOAT (variable) - Floating point number (for interpreting an integer type as a floating value) - -ida_typeinf.FRB_INVBITS (variable) - Invert bits (0x01 is represented as ~0xFE) - -ida_typeinf.FRB_INVSIGN (variable) - Invert sign (0x01 is represented as -0xFF) - -ida_typeinf.FRB_LZERO (variable) - Toggle leading zeroes (used for integers) - -ida_typeinf.FRB_MASK (variable) - Mask for the value type (* means requires additional info): - -ida_typeinf.FRB_NUMB (variable) - Binary number. - -ida_typeinf.FRB_NUMD (variable) - Decimal number. - -ida_typeinf.FRB_NUMH (variable) - Hexadecimal number. - -ida_typeinf.FRB_NUMO (variable) - Octal number. - -ida_typeinf.FRB_OFFSET (variable) - *Offset - -ida_typeinf.FRB_SEG (variable) - Segment. - -ida_typeinf.FRB_SIGNED (variable) - Force signed representation. - -ida_typeinf.FRB_STRLIT (variable) - *String literal (used for arrays) - -ida_typeinf.FRB_STROFF (variable) - *Struct offset - -ida_typeinf.FRB_TABFORM (variable) - has additional tabular parameters - -ida_typeinf.FRB_UNK (variable) - Unknown. - -ida_typeinf.FTI_ALL (variable) - all defined bits - -ida_typeinf.FTI_ARGLOCS (variable) - info about argument locations has been calculated (stkargs and retloc too) - -ida_typeinf.FTI_CALLTYPE (variable) - mask for FTI_*CALL - -ida_typeinf.FTI_CONST (variable) - const member function - -ida_typeinf.FTI_CTOR (variable) - constructor - -ida_typeinf.FTI_DEFCALL (variable) - default call - -ida_typeinf.FTI_DTOR (variable) - destructor - -ida_typeinf.FTI_EXPLOCS (variable) - all arglocs are specified explicitly - -ida_typeinf.FTI_FARCALL (variable) - far call - -ida_typeinf.FTI_HIGH (variable) - high level prototype (with possibly hidden args) - -ida_typeinf.FTI_INTCALL (variable) - interrupt call - -ida_typeinf.FTI_NEARCALL (variable) - near call - -ida_typeinf.FTI_NORET (variable) - noreturn - -ida_typeinf.FTI_PURE (variable) - __pure - -ida_typeinf.FTI_SPOILED (variable) - information about spoiled registers is present - -ida_typeinf.FTI_STATIC (variable) - static - -ida_typeinf.FTI_VIRTUAL (variable) - virtual - -ida_typeinf.GTD_CALC_ARGLOCS (variable) - calculate func arg locations - -ida_typeinf.GTD_CALC_LAYOUT (variable) - calculate udt layout - -ida_typeinf.GTD_DEL_BITFLDS (variable) - delete udt bitfields - -ida_typeinf.GTD_NO_ARGLOCS (variable) - don't calculate func arg locations please note that the locations may have been - calculated earlier - -ida_typeinf.GTD_NO_LAYOUT (variable) - don't calculate udt layout please note that udt layout may have been calculated - earlier - -ida_typeinf.GTS_BASECLASS (variable) - is baseclass of a udt - -ida_typeinf.GTS_NESTED (variable) - nested type (embedded into a udt) - -ida_typeinf.GUESS_FUNC_FAILED (variable) - couldn't guess the function type - -ida_typeinf.GUESS_FUNC_OK (variable) - ok, some non-trivial information is gathered - -ida_typeinf.GUESS_FUNC_TRIVIAL (variable) - the function type doesn't have interesting info - -ida_typeinf.HTI_CPP (variable) - C++ mode (not implemented) - -ida_typeinf.HTI_DCL (variable) - don't complain about redeclarations - -ida_typeinf.HTI_FIL (variable) - "input" is file name, otherwise "input" contains a C declaration - -ida_typeinf.HTI_HIGH (variable) - assume high level prototypes (with hidden args, etc) - -ida_typeinf.HTI_LOWER (variable) - lower the function prototypes - -ida_typeinf.HTI_MAC (variable) - define macros from the base tils - -ida_typeinf.HTI_NDC (variable) - don't decorate names - -ida_typeinf.HTI_NER (variable) - ignore all errors but display them - -ida_typeinf.HTI_NOBASE (variable) - do not inspect base tils - -ida_typeinf.HTI_NWR (variable) - no warning messages - -ida_typeinf.HTI_PAK (variable) - explicit structure pack value (#pragma pack) - -ida_typeinf.HTI_PAK1 (variable) - #pragma pack(1) - -ida_typeinf.HTI_PAK16 (variable) - #pragma pack(16) - -ida_typeinf.HTI_PAK2 (variable) - #pragma pack(2) - -ida_typeinf.HTI_PAK4 (variable) - #pragma pack(4) - -ida_typeinf.HTI_PAK8 (variable) - #pragma pack(8) - -ida_typeinf.HTI_PAKDEF (variable) - default pack value - -ida_typeinf.HTI_PAK_SHIFT (variable) - 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 (variable) - leave argument names unchanged (do not remove underscores) - -ida_typeinf.HTI_RELAXED (variable) - accept references to unknown namespaces - -ida_typeinf.HTI_TST (variable) - test mode: discard the result - -ida_typeinf.IMPTYPE_LOCAL (variable) - 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.MAX_FUNC_ARGS (variable) - max number of function arguments - -ida_typeinf.NTF_64BIT (variable) - value is 64bit - -ida_typeinf.NTF_CHKSYNC (variable) - check that synchronization to IDB passed OK (set_numbered_type, set_named_type) - -ida_typeinf.NTF_COPY (variable) - save a new type definition, not a typeref (tinfo_t::set_numbered_type, - tinfo_t::set_named_type) - -ida_typeinf.NTF_FIXNAME (variable) - force-validate the name of the type when setting (set_named_type, - set_numbered_type only) - -ida_typeinf.NTF_IDBENC (variable) - 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 (variable) - don't inspect base tils (for get_named_type) - -ida_typeinf.NTF_NOCUR (variable) - don't inspect current til file (for get_named_type) - -ida_typeinf.NTF_NO_NAMECHK (variable) - do not validate type name (set_numbered_type, set_named_type) - -ida_typeinf.NTF_REPLACE (variable) - replace original type (for set_named_type) - -ida_typeinf.NTF_SYMM (variable) - symbol, name is mangled ('_func'); only one of NTF_TYPE and NTF_SYMU, NTF_SYMM - can be used - -ida_typeinf.NTF_SYMU (variable) - symbol, name is unmangled ('func') - -ida_typeinf.NTF_TYPE (variable) - type name - -ida_typeinf.NTF_UMANGLED (variable) - name is unmangled (don't use this flag) - -ida_typeinf.PDF_DEF_BASE (variable) - Include base types: __int8, __int16, etc.. - -ida_typeinf.PDF_DEF_FWD (variable) - Allow forward declarations. - -ida_typeinf.PDF_HEADER_CMT (variable) - Prepend output with a descriptive comment. - -ida_typeinf.PDF_INCL_DEPS (variable) - Include all type dependencies. - -ida_typeinf.PIO_IGNORE_PTRS (variable) - do not follow pointers - -ida_typeinf.PIO_NOATTR_FAIL (variable) - missing attributes are not ok - -ida_typeinf.PRALOC_STKOFF (variable) - print stack offsets - -ida_typeinf.PRALOC_VERIFY (variable) - interr if illegal argloc - -ida_typeinf.PRTYPE_1LINCMT (variable) - print comments even in the one line mode - -ida_typeinf.PRTYPE_1LINE (variable) - print to one line - -ida_typeinf.PRTYPE_COLORED (variable) - add color tag COLOR_SYMBOL for any parentheses, commas and colons - -ida_typeinf.PRTYPE_CPP (variable) - use c++ name (only for print_type()) - -ida_typeinf.PRTYPE_HEADER (variable) - print only type header (only for definitions) - -ida_typeinf.PRTYPE_MAXSTR (variable) - limit the output length to 1024 bytes (the output may be slightly longer) - -ida_typeinf.PRTYPE_MULTI (variable) - print to many lines - -ida_typeinf.PRTYPE_NOREGEX (variable) - do not apply regular expressions to beautify name - -ida_typeinf.PRTYPE_PRAGMA (variable) - print pragmas for alignment - -ida_typeinf.PRTYPE_SEMI (variable) - append ; to the end - -ida_typeinf.PRTYPE_TYPE (variable) - print type declaration (not variable declaration) - -ida_typeinf.PT_HIGH (variable) - assume high level prototypes (with hidden args, etc) - -ida_typeinf.PT_LOWER (variable) - lower the function prototypes - -ida_typeinf.PT_NDC (variable) - don't decorate names - -ida_typeinf.PT_PACKMASK (variable) - mask for pack alignment values - -ida_typeinf.PT_RAWARGS (variable) - leave argument names unchanged (do not remove underscores) - -ida_typeinf.PT_RELAXED (variable) - accept references to unknown namespaces - -ida_typeinf.PT_REPLACE (variable) - replace the old type (used in idc) - -ida_typeinf.PT_SIL (variable) - silent, no messages - -ida_typeinf.PT_TYP (variable) - return declared type information - -ida_typeinf.PT_VAR (variable) - return declared object information - -ida_typeinf.RESERVED_BYTE (variable) - multifunctional purpose - -ida_typeinf.SC_AUTO (variable) - auto - -ida_typeinf.SC_EXT (variable) - extern - -ida_typeinf.SC_FRIEND (variable) - friend - -ida_typeinf.SC_REG (variable) - register - -ida_typeinf.SC_STAT (variable) - static - -ida_typeinf.SC_TYPE (variable) - typedef - -ida_typeinf.SC_UNK (variable) - unknown - -ida_typeinf.SC_VIRT (variable) - virtual - -ida_typeinf.SETCOMP_BY_USER (variable) - invoked by user, cannot be replaced by module/loader - -ida_typeinf.SETCOMP_ONLY_ABI (variable) - ignore cc field complete, use only abiname - -ida_typeinf.SETCOMP_ONLY_ID (variable) - cc has only 'id' field; the rest will be set to defaults corresponding to the - program bitness - -ida_typeinf.SETCOMP_OVERRIDE (variable) - may override old compiler info - -ida_typeinf.STI_ACCHAR (variable) - const char[] - -ida_typeinf.STI_ACHAR (variable) - char[] - -ida_typeinf.STI_ACUCHAR (variable) - const uint8[] - -ida_typeinf.STI_AEABI_LCMP (variable) - int __fastcall __pure(int64 x, int64 y) - -ida_typeinf.STI_AEABI_MEMCLR (variable) - void __fastcall(void *, size_t) - -ida_typeinf.STI_AEABI_MEMCPY (variable) - void __fastcall(void *, const void *, size_t) - -ida_typeinf.STI_AEABI_MEMSET (variable) - void __fastcall(void *, size_t, int) - -ida_typeinf.STI_AEABI_ULCMP (variable) - int __fastcall __pure(uint64 x, uint64 y) - -ida_typeinf.STI_AUCHAR (variable) - uint8[] - -ida_typeinf.STI_COMPLEX128 (variable) - struct complex128_t { double real, imag; } - -ida_typeinf.STI_COMPLEX64 (variable) - struct complex64_t { float real, imag; } - -ida_typeinf.STI_DONT_USE (variable) - unused stock type id; should not be used - -ida_typeinf.STI_FDELOP (variable) - void __cdecl(void *) - -ida_typeinf.STI_FPURGING (variable) - void __userpurge(int) - -ida_typeinf.STI_MSGSEND (variable) - void *(void *, const char *, ...) - -ida_typeinf.STI_PBYTE (variable) - _BYTE * - -ida_typeinf.STI_PCCHAR (variable) - const char * - -ida_typeinf.STI_PCHAR (variable) - char * - -ida_typeinf.STI_PCUCHAR (variable) - const uint8 * - -ida_typeinf.STI_PCVOID (variable) - const void * - -ida_typeinf.STI_PINT (variable) - int * - -ida_typeinf.STI_PPVOID (variable) - void ** - -ida_typeinf.STI_PUCHAR (variable) - uint8 * - -ida_typeinf.STI_PUINT (variable) - unsigned int * - -ida_typeinf.STI_PVOID (variable) - void * - -ida_typeinf.STI_RTC_CHECK_2 (variable) - int16 __fastcall(int16 x) - -ida_typeinf.STI_RTC_CHECK_4 (variable) - int32 __fastcall(int32 x) - -ida_typeinf.STI_RTC_CHECK_8 (variable) - int64 __fastcall(int64 x) - -ida_typeinf.STI_SIZE_T (variable) - size_t - -ida_typeinf.STI_SSIZE_T (variable) - ssize_t - -ida_typeinf.STRMEM_ANON (variable) - can be combined with STRMEM_NAME: look inside anonymous members too. - -ida_typeinf.STRMEM_AUTO (variable) - 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 (variable) - can be combined with STRMEM_TYPE: member type must be castable to the specified - type - -ida_typeinf.STRMEM_INDEX (variable) - get member by number - * in: udm->offset - is a member number - -ida_typeinf.STRMEM_MAXS (variable) - get biggest member by size. - -ida_typeinf.STRMEM_MINS (variable) - get smallest member by size. - -ida_typeinf.STRMEM_NAME (variable) - get member by name - * in: udm->name - the desired member name. - -ida_typeinf.STRMEM_OFFSET (variable) - get member by offset - * in: udm->offset - is a member offset in bits - -ida_typeinf.STRMEM_SIZE (variable) - get member by size. - * in: udm->size - the desired member size. - -ida_typeinf.STRMEM_SKIP_EMPTY (variable) - 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 (variable) - get member by type. - * in: udm->type - the desired member type. member types are compared with - tinfo_t::equals_to() - -ida_typeinf.STRMEM_VFTABLE (variable) - can be combined with STRMEM_OFFSET, STRMEM_AUTO get vftable instead of the base - class - -ida_typeinf.SUDT_ALIGN (variable) - recalculate field alignments, struct packing, etc to match the offsets and size - info - -ida_typeinf.SUDT_CONST (variable) - only for serialize_udt: make type const - -ida_typeinf.SUDT_FAST (variable) - serialize without verifying offsets and alignments - -ida_typeinf.SUDT_GAPS (variable) - allow to fill gaps with additional members (_BYTE[]) - -ida_typeinf.SUDT_SORT (variable) - fields are not sorted by offset, sort them first - -ida_typeinf.SUDT_UNEX (variable) - references to nonexistent member types are acceptable; in this case it is better - to set the corresponding udm_t::fda field to the type alignment. If this field - is not set, ida will try to guess the alignment. - -ida_typeinf.SUDT_VOLATILE (variable) - only for serialize_udt: make type volatile - -ida_typeinf.TAFLD_METHOD (variable) - denotes a udt member function - -ida_typeinf.TAH_ALL (variable) - all defined bits - -ida_typeinf.TAH_BYTE (variable) - type attribute header byte - -ida_typeinf.TAH_HASATTRS (variable) - has extended attributes - -ida_typeinf.TA_FORMAT (variable) - info about the 'format' argument. 3 times pack_dd: format_functype_t, argument - number of 'format', argument number of '...' - -ida_typeinf.TA_ORG_ARRDIM (variable) - the original array dimension (pack_dd) - -ida_typeinf.TA_ORG_TYPEDEF (variable) - the original typedef name (simple string) - -ida_typeinf.TA_VALUE_REPR (variable) - serialized value_repr_t (used for scalars and arrays) - -ida_typeinf.TCMP_ANYBASE (variable) - accept any base class when casting - -ida_typeinf.TCMP_AUTOCAST (variable) - can t1 be cast into t2 automatically? - -ida_typeinf.TCMP_CALL (variable) - can t1 be called with t2 type? - -ida_typeinf.TCMP_DECL (variable) - compare declarations without resolving them - -ida_typeinf.TCMP_DELPTR (variable) - remove pointer from types before comparing - -ida_typeinf.TCMP_EQUAL (variable) - are types equal? - -ida_typeinf.TCMP_IGNMODS (variable) - ignore const/volatile modifiers - -ida_typeinf.TCMP_MANCAST (variable) - can t1 be cast into t2 manually? - -ida_typeinf.TCMP_SKIPTHIS (variable) - skip the first function argument in comparison - -ida_typeinf.TERR_ALIEN_NAME (variable) - enum member name is used in another enum - -ida_typeinf.TERR_BAD_ARG (variable) - bad argument - -ida_typeinf.TERR_BAD_ARRAY (variable) - arrays are forbidden as function arguments - -ida_typeinf.TERR_BAD_BASE (variable) - bad base class - -ida_typeinf.TERR_BAD_BF (variable) - bitfields are forbidden as function arguments - -ida_typeinf.TERR_BAD_BMASK (variable) - Bad enum member mask 0xI64X. The specified mask should not intersect with any - existing mask in the enum. Zero masks are prohibited too. - -ida_typeinf.TERR_BAD_GAP (variable) - bad gap - -ida_typeinf.TERR_BAD_GROUPS (variable) - bad group sizes for bitmask enum - -ida_typeinf.TERR_BAD_INDEX (variable) - bad index d - -ida_typeinf.TERR_BAD_LAYOUT (variable) - failed to calculate the structure/union layout - -ida_typeinf.TERR_BAD_MSKVAL (variable) - bad bmask and value combination (value=0xI64X; bitmask 0xI64X) - -ida_typeinf.TERR_BAD_NAME (variable) - name s is not acceptable - -ida_typeinf.TERR_BAD_OFFSET (variable) - bad member offset s - -ida_typeinf.TERR_BAD_REPR (variable) - bad or incompatible field representation - -ida_typeinf.TERR_BAD_SERIAL (variable) - enum value has too many serials - -ida_typeinf.TERR_BAD_SIZE (variable) - bad size d - -ida_typeinf.TERR_BAD_SUBTYPE (variable) - recursive structure nesting is forbidden - -ida_typeinf.TERR_BAD_SYNC (variable) - failed to synchronize with IDB - -ida_typeinf.TERR_BAD_TAH (variable) - bad bits in the type attributes (TAH bits) - -ida_typeinf.TERR_BAD_TYPE (variable) - bad type - -ida_typeinf.TERR_BAD_UNIVAR (variable) - unions cannot have variable sized members - -ida_typeinf.TERR_BAD_VALUE (variable) - value 0xI64X is not acceptable - -ida_typeinf.TERR_BAD_VARLAST (variable) - variable sized member must be the last member in the structure - -ida_typeinf.TERR_DUPNAME (variable) - duplicate name s - -ida_typeinf.TERR_ENUM_SIZE (variable) - bad enum size - -ida_typeinf.TERR_GRP_NOEMPTY (variable) - could not delete group mask for not empty group 0xI64X - -ida_typeinf.TERR_NESTED (variable) - recursive structure nesting is forbidden - -ida_typeinf.TERR_NOT_COMPAT (variable) - the new type is not compatible with the old type - -ida_typeinf.TERR_NOT_IMPL (variable) - not implemented - -ida_typeinf.TERR_NO_BMASK (variable) - bitmask 0xI64X is not found - -ida_typeinf.TERR_OK (variable) - ok - -ida_typeinf.TERR_OVERLAP (variable) - the member overlaps with other members that cannot be deleted - -ida_typeinf.TERR_SAVE_ERROR (variable) - failed to save - -ida_typeinf.TERR_SERIALIZE (variable) - failed to serialize - -ida_typeinf.TERR_STOCK (variable) - stock type info cannot be modified - -ida_typeinf.TERR_UNION_BF (variable) - unions cannot have bitfields - -ida_typeinf.TIL_ADD_ALREADY (variable) - the base til was already added - -ida_typeinf.TIL_ADD_FAILED (variable) - see errbuf - -ida_typeinf.TIL_ADD_OK (variable) - some tils were added - -ida_typeinf.TIL_ALI (variable) - type aliases are present (this bit is used only on the disk) - -ida_typeinf.TIL_ESI (variable) - extended sizeof info (short, long, longlong) - -ida_typeinf.TIL_MAC (variable) - til has macro table - -ida_typeinf.TIL_MOD (variable) - til has been modified, should be saved - -ida_typeinf.TIL_ORD (variable) - type ordinal numbers are present - -ida_typeinf.TIL_SLD (variable) - sizeof(long double) - -ida_typeinf.TIL_STM (variable) - til has extra streams - -ida_typeinf.TIL_UNI (variable) - universal til for any compiler - -ida_typeinf.TIL_ZIP (variable) - pack buckets using zip - -ida_typeinf.TINFO_DEFINITE (variable) - this is a definite type - -ida_typeinf.TINFO_DELAYFUNC (variable) - 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 (variable) - this is a guessed type - -ida_typeinf.TINFO_STRICT (variable) - never convert given type to another one before applying - -ida_typeinf.TVIS_CMT (variable) - new comment is present (only for udt members) - -ida_typeinf.TVIS_NAME (variable) - new name is present (only for funcargs and udt members) - -ida_typeinf.TVIS_RPTCMT (variable) - the new comment is repeatable - -ida_typeinf.TVIS_TYPE (variable) - new type info is present - -ida_typeinf.TVST_DEF (variable) - visit type definition (meaningful for typerefs) - -ida_typeinf.TVST_PRUNE (variable) - don't visit children of current type - -ida_typeinf.TYPE_BASE_MASK (variable) - the low 4 bits define the basic type - -ida_typeinf.TYPE_FLAGS_MASK (variable) - type flags - they have different meaning depending on the basic type - -ida_typeinf.TYPE_FULL_MASK (variable) - basic type with type flags - -ida_typeinf.TYPE_MODIF_MASK (variable) - modifiers. - * for BT_ARRAY see Derived type: array - * BT_VOID can have them ONLY in 'void *' - -ida_typeinf.TYPID_ISREF (variable) - Identifies that a type that is a typeref. - -ida_typeinf.TYPID_SHIFT (variable) - First type detail bit. - -ida_typeinf.VALSTR_OPEN (variable) - printed opening curly brace '{' - -ida_typeinf._BT_LAST_BASIC (variable) - the last basic type, all basic types may be followed by [tah-typeattrs] - -ida_typeinf._wrap_cvar (class) - -ida_typeinf._wrap_cvar.__getattr__ (method) - -ida_typeinf._wrap_cvar.__setattr__ (method) - -ida_typeinf.add_til (function) - add_til(name, flags) -> int - Load a til file and add it the database type libraries list. IDA will also apply - function prototypes for matching function names. - - @param name: (C++: const char *) til name - @param flags: (C++: int) combination of Load TIL flags - @return: one of Load TIL result codes - -ida_typeinf.alloc_type_ordinal (function) - alloc_type_ordinal(ti) -> uint32 - alloc_type_ordinals(ti, 1) - - @param ti: (C++: til_t *) - -ida_typeinf.alloc_type_ordinals (function) - alloc_type_ordinals(ti, qty) -> uint32 - Allocate a range of ordinal numbers for new types. - - @param ti: (C++: til_t *) type library - @param qty: (C++: int) number of ordinals to allocate - @return: the first ordinal. 0 means failure. - -ida_typeinf.aloc_visitor_t (class) - Proxy of C++ aloc_visitor_t class. - -ida_typeinf.aloc_visitor_t.__disown__ (method) - -ida_typeinf.aloc_visitor_t.__init__ (method) - __init__(self) -> aloc_visitor_t - - @param self: PyObject * - -ida_typeinf.aloc_visitor_t.visit_location (method) - visit_location(self, v, off, size) -> int - - @param v: argloc_t & - @param off: int - @param size: int - -ida_typeinf.append_abi_opts (function) - 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: (C++: const char *) - ABI options to add/remove in form opt1-opt2-... - @param user_level: (C++: bool) - initiated by user if TRUE (==SETCOMP_BY_USER) - @return: success - -ida_typeinf.append_argloc (function) - append_argloc(out, vloc) -> bool - Serialize argument location - - @param out: (C++: qtype *) - @param vloc: (C++: const argloc_t &) argloc_t const & - -ida_typeinf.append_tinfo_covered (function) - append_tinfo_covered(out, typid, offset) -> bool - - @param out: rangeset_t * - @param typid: uint32 - @param offset: uint64 - -ida_typeinf.apply_callee_tinfo (function) - 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: (C++: ea_t) linear address of the calling instruction. must belong to a - function. - @param tif: (C++: const tinfo_t &) type info - @return: success - -ida_typeinf.apply_cdecl (function) - 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: (C++: til_t *) type library - @param ea: (C++: ea_t) linear address - @param decl: (C++: const char *) type declaration in C form - @param flags: (C++: int) flags to pass to apply_tinfo (TINFO_DEFINITE is always passed) - @return: success - -ida_typeinf.apply_named_type (function) - apply_named_type(ea, name) -> bool - Apply the specified named type to the address. - - @param ea: (C++: ea_t) linear address - @param name: (C++: const char *) the type name, e.g. "FILE" - @return: success - -ida_typeinf.apply_once_tinfo_and_name (function) - 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 type - does not exist or the new type is 'better' than the old type, then the - new type will be applied. A type is considered better if it has more - information (e.g. BTMT_STRUCT is better than BT_INT). - The same logic is with the name: if the address already have a meaningful - name, it will be preserved. Only if the old name does not exist or it - is a dummy name like byte_123, it will be replaced by the new name. - - @param dea: (C++: ea_t) linear address - @param tif: (C++: const tinfo_t &) type string in the internal format - @param name: (C++: const char *) new name for the address - @return: success - -ida_typeinf.apply_tinfo (function) - 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: (C++: ea_t) linear address - @param tif: (C++: const tinfo_t &) type string in internal format - @param flags: (C++: uint32) combination of Apply tinfo flags - @return: success - -ida_typeinf.apply_tinfo_to_stkarg (function) - apply_tinfo_to_stkarg(insn, x, v, tif, name) -> bool - Helper function for the processor modules. to be called from - processor_t::use_stkarg_type - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - @param x: (C++: const op_t &) op_t const & - @param v: (C++: uval_t) - @param tif: (C++: const tinfo_t &) tinfo_t const & - @param name: (C++: const char *) char const * - -ida_typeinf.apply_type (function) - 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 type: type_t const * - @param fields: p_list const * - @param ea: the address of the object - @param flags: combination of TINFO_... constants or 0 - @return: Boolean - -ida_typeinf.argloc_t (class) - Proxy of C++ argloc_t class. - -ida_typeinf.argloc_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: argloc_t const & - -ida_typeinf.argloc_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: argloc_t const & - -ida_typeinf.argloc_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: argloc_t const & - -ida_typeinf.argloc_t.__init__ (method) - __init__(self) -> argloc_t - __init__(self, r) -> argloc_t - - @param r: argloc_t const & - -ida_typeinf.argloc_t.__le__ (method) - __le__(self, r) -> bool - - @param r: argloc_t const & - -ida_typeinf.argloc_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: argloc_t const & - -ida_typeinf.argloc_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: argloc_t const & - -ida_typeinf.argloc_t._consume_rrel (method) - _consume_rrel(self, p) -> bool - - Parameters - ---------- - p: rrel_t * - -ida_typeinf.argloc_t._consume_scattered (method) - _consume_scattered(self, p) -> bool - - Parameters - ---------- - p: scattered_aloc_t * - -ida_typeinf.argloc_t._set_badloc (method) - _set_badloc(self) - -ida_typeinf.argloc_t._set_biggest (method) - _set_biggest(self, ct, data) - - Parameters - ---------- - ct: argloc_type_t - data: argloc_t::biggest_t - -ida_typeinf.argloc_t._set_custom (method) - _set_custom(self, ct, pdata) - - Parameters - ---------- - ct: argloc_type_t - pdata: void * - -ida_typeinf.argloc_t._set_ea (method) - _set_ea(self, _ea) - - Parameters - ---------- - _ea: ea_t - -ida_typeinf.argloc_t._set_reg1 (method) - _set_reg1(self, reg, off=0) - - Parameters - ---------- - reg: int - off: int - -ida_typeinf.argloc_t._set_reg2 (method) - _set_reg2(self, _reg1, _reg2) - - Parameters - ---------- - _reg1: int - _reg2: int - -ida_typeinf.argloc_t._set_stkoff (method) - _set_stkoff(self, off) - - Parameters - ---------- - off: sval_t - -ida_typeinf.argloc_t.advance (method) - advance(self, delta) -> bool - Move the location to point 'delta' bytes further. - - @param delta: (C++: int) - -ida_typeinf.argloc_t.align_reg_high (method) - align_reg_high(self, size, _slotsize) - Set register offset to align it to the upper part of _SLOTSIZE. - - @param size: (C++: size_t) - @param _slotsize: (C++: size_t) - -ida_typeinf.argloc_t.align_stkoff_high (method) - align_stkoff_high(self, size, _slotsize) - Set stack offset to align to the upper part of _SLOTSIZE. - - @param size: (C++: size_t) - @param _slotsize: (C++: size_t) - -ida_typeinf.argloc_t.atype (method) - atype(self) -> argloc_type_t - Get type (Argument location types) - -ida_typeinf.argloc_t.calc_offset (method) - calc_offset(self) -> sval_t - Calculate offset that can be used to compare 2 similar arglocs. - -ida_typeinf.argloc_t.compare (method) - compare(self, r) -> int - - @param r: argloc_t const & - -ida_typeinf.argloc_t.consume_rrel (method) - consume_rrel(self, p) - Set register-relative location - can't be nullptr. - - @param p: (C++: rrel_t *) - -ida_typeinf.argloc_t.consume_scattered (method) - consume_scattered(self, p) - Set distributed argument location. - - @param p: (C++: scattered_aloc_t *) scattered_aloc_t const & - -ida_typeinf.argloc_t.get_biggest (method) - get_biggest(self) -> argloc_t::biggest_t - Get largest element in internal union. - -ida_typeinf.argloc_t.get_custom (method) - get_custom(self) -> void * - Get custom argloc info. Use if atype() == ALOC_CUSTOM - -ida_typeinf.argloc_t.get_ea (method) - get_ea(self) -> ea_t - Get the global address. Use when atype() == ALOC_STATIC - -ida_typeinf.argloc_t.get_reginfo (method) - get_reginfo(self) -> uint32 - Get all register info. Use when atype() == ALOC_REG1 or ALOC_REG2 - -ida_typeinf.argloc_t.get_rrel (method) - get_rrel(self) -> rrel_t - Get register-relative info. Use when atype() == ALOC_RREL - -ida_typeinf.argloc_t.has_reg (method) - has_reg(self) -> bool - TRUE if argloc has a register part. - -ida_typeinf.argloc_t.has_stkoff (method) - has_stkoff(self) -> bool - TRUE if argloc has a stack part. - -ida_typeinf.argloc_t.in_stack (method) - in_stack(self) -> bool - TRUE if argloc is in stack entirely. - -ida_typeinf.argloc_t.is_badloc (method) - is_badloc(self) -> bool - See ALOC_NONE. - -ida_typeinf.argloc_t.is_custom (method) - is_custom(self) -> bool - See ALOC_CUSTOM. - -ida_typeinf.argloc_t.is_ea (method) - is_ea(self) -> bool - See ALOC_STATIC. - -ida_typeinf.argloc_t.is_fragmented (method) - is_fragmented(self) -> bool - is_scattered() || is_reg2() - -ida_typeinf.argloc_t.is_mixed_scattered (method) - is_mixed_scattered(self) -> bool - mixed scattered: consists of register and stack parts - -ida_typeinf.argloc_t.is_reg (method) - is_reg(self) -> bool - is_reg1() || is_reg2() - -ida_typeinf.argloc_t.is_reg1 (method) - is_reg1(self) -> bool - See ALOC_REG1. - -ida_typeinf.argloc_t.is_reg2 (method) - is_reg2(self) -> bool - See ALOC_REG2. - -ida_typeinf.argloc_t.is_rrel (method) - is_rrel(self) -> bool - See ALOC_RREL. - -ida_typeinf.argloc_t.is_scattered (method) - is_scattered(self) -> bool - See ALOC_DIST. - -ida_typeinf.argloc_t.is_stkoff (method) - is_stkoff(self) -> bool - See ALOC_STACK. - -ida_typeinf.argloc_t.reg1 (method) - reg1(self) -> int - Get the register info. Use when atype() == ALOC_REG1 or ALOC_REG2 - -ida_typeinf.argloc_t.reg2 (method) - reg2(self) -> int - Get info for the second register. Use when atype() == ALOC_REG2 - -ida_typeinf.argloc_t.regoff (method) - regoff(self) -> int - Get offset from the beginning of the register in bytes. Use when atype() == - ALOC_REG1 - -ida_typeinf.argloc_t.scattered (method) - scattered(self) -> scattered_aloc_t - Get scattered argument info. Use when atype() == ALOC_DIST - -ida_typeinf.argloc_t.set_badloc (method) - set_badloc(self) - Set to invalid location. - -ida_typeinf.argloc_t.set_ea (method) - set_ea(self, _ea) - Set static ea location. - - @param _ea: (C++: ea_t) - -ida_typeinf.argloc_t.set_reg1 (method) - set_reg1(self, reg, off=0) - Set register location. - - @param reg: (C++: int) - @param off: (C++: int) - -ida_typeinf.argloc_t.set_reg2 (method) - set_reg2(self, _reg1, _reg2) - Set secondary register location. - - @param _reg1: (C++: int) - @param _reg2: (C++: int) - -ida_typeinf.argloc_t.set_stkoff (method) - set_stkoff(self, off) - Set stack offset location. - - @param off: (C++: sval_t) - -ida_typeinf.argloc_t.stkoff (method) - stkoff(self) -> sval_t - Get the stack offset. Use if atype() == ALOC_STACK - -ida_typeinf.argloc_t.swap (method) - swap(self, r) - Assign this == r and r == this. - - @param r: (C++: argloc_t &) - -ida_typeinf.argpart_t (class) - Proxy of C++ argpart_t class. - -ida_typeinf.argpart_t.__init__ (method) - __init__(self, a) -> argpart_t - - @param a: argloc_t const & - - __init__(self) -> argpart_t - -ida_typeinf.argpart_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: argpart_t const & - -ida_typeinf.argpart_t.bad_offset (method) - bad_offset(self) -> bool - Does this argpart have a valid offset? - -ida_typeinf.argpart_t.bad_size (method) - bad_size(self) -> bool - Does this argpart have a valid size? - -ida_typeinf.argpart_t.off (variable) - offset from the beginning of the argument - -ida_typeinf.argpart_t.size (variable) - the number of bytes - -ida_typeinf.argpart_t.swap (method) - swap(self, r) - Assign this = r and r = this. - - @param r: (C++: argpart_t &) - -ida_typeinf.argpartvec_t (class) - Proxy of C++ qvector< argpart_t > class. - -ida_typeinf.argpartvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< argpart_t > const & - -ida_typeinf.argpartvec_t.__getitem__ (method) - __getitem__(self, i) -> argpart_t - - @param i: size_t - -ida_typeinf.argpartvec_t.__init__ (method) - __init__(self) -> argpartvec_t - __init__(self, x) -> argpartvec_t - - @param x: qvector< argpart_t > const & - -ida_typeinf.argpartvec_t.__len__ (method) - __len__(self) -> size_t - -ida_typeinf.argpartvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< argpart_t > const & - -ida_typeinf.argpartvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: argpart_t const & - -ida_typeinf.argpartvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: argpart_t const & - -ida_typeinf.argpartvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: argpart_t const & - -ida_typeinf.argpartvec_t.at (method) - at(self, _idx) -> argpart_t - - @param _idx: size_t - -ida_typeinf.argpartvec_t.begin (method) - begin(self) -> argpart_t - -ida_typeinf.argpartvec_t.capacity (method) - capacity(self) -> size_t - -ida_typeinf.argpartvec_t.clear (method) - clear(self) - -ida_typeinf.argpartvec_t.empty (method) - empty(self) -> bool - -ida_typeinf.argpartvec_t.end (method) - end(self) -> argpart_t - -ida_typeinf.argpartvec_t.erase (method) - erase(self, it) -> argpart_t - - @param it: qvector< argpart_t >::iterator - - erase(self, first, last) -> argpart_t - - @param first: qvector< argpart_t >::iterator - @param last: qvector< argpart_t >::iterator - -ida_typeinf.argpartvec_t.extract (method) - extract(self) -> argpart_t - -ida_typeinf.argpartvec_t.find (method) - find(self, x) -> argpart_t - - @param x: argpart_t const & - -ida_typeinf.argpartvec_t.grow (method) - grow(self, x=argpart_t()) - - @param x: argpart_t const & - -ida_typeinf.argpartvec_t.has (method) - has(self, x) -> bool - - @param x: argpart_t const & - -ida_typeinf.argpartvec_t.inject (method) - inject(self, s, len) - - @param s: argpart_t * - @param len: size_t - -ida_typeinf.argpartvec_t.insert (method) - insert(self, it, x) -> argpart_t - - @param it: qvector< argpart_t >::iterator - @param x: argpart_t const & - -ida_typeinf.argpartvec_t.pop_back (method) - pop_back(self) - -ida_typeinf.argpartvec_t.push_back (method) - push_back(self, x) - - @param x: argpart_t const & - - push_back(self) -> argpart_t - -ida_typeinf.argpartvec_t.qclear (method) - qclear(self) - -ida_typeinf.argpartvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_typeinf.argpartvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: argpart_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_typeinf.argpartvec_t.size (method) - size(self) -> size_t - -ida_typeinf.argpartvec_t.swap (method) - swap(self, r) - - @param r: qvector< argpart_t > & - -ida_typeinf.argpartvec_t.truncate (method) - truncate(self) - -ida_typeinf.argtinfo_helper_t (class) - Proxy of C++ argtinfo_helper_t class. - -ida_typeinf.argtinfo_helper_t.__disown__ (method) - -ida_typeinf.argtinfo_helper_t.__init__ (method) - __init__(self) -> argtinfo_helper_t - - @param self: PyObject * - -ida_typeinf.argtinfo_helper_t.has_delay_slot (method) - has_delay_slot(self, arg0) -> bool - The call instruction with a delay slot?. - - @param arg0: ea_t - -ida_typeinf.argtinfo_helper_t.is_stkarg_load (method) - is_stkarg_load(self, insn, src, dst) -> bool - Is the current insn a stkarg load?. if yes: - * src: index of the source operand in insn_t::ops - * dst: index of the destination operand in insn_t::ops insn_t::ops[dst].addr is - expected to have the stack offset - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - @param src: (C++: int *) - @param dst: (C++: int *) - -ida_typeinf.argtinfo_helper_t.set_op_tinfo (method) - set_op_tinfo(self, insn, x, tif, name) -> bool - Set the operand type as specified. - - @param insn: (C++: const insn_t &) an ida_ua.insn_t, or an address (C++: const insn_t &) - @param x: (C++: const op_t &) op_t const & - @param tif: (C++: const tinfo_t &) tinfo_t const & - @param name: (C++: const char *) char const * - -ida_typeinf.argtinfo_helper_t.use_arg_tinfos (method) - use_arg_tinfos(self, caller, fti, rargs) - This function is to be called by the processor module in response to - ev_use_arg_types. - - @param caller: (C++: ea_t) - @param fti: (C++: func_type_data_t *) - @param rargs: (C++: funcargvec_t *) - -ida_typeinf.array_type_data_t (class) - Proxy of C++ array_type_data_t class. - -ida_typeinf.array_type_data_t.__init__ (method) - __init__(self, b=0, n=0) -> array_type_data_t - - @param b: size_t - @param n: size_t - -ida_typeinf.array_type_data_t.base (variable) - array base - -ida_typeinf.array_type_data_t.elem_type (variable) - element type - -ida_typeinf.array_type_data_t.nelems (variable) - number of elements - -ida_typeinf.array_type_data_t.swap (method) - swap(self, r) - set this = r and r = this - - @param r: (C++: array_type_data_t &) - -ida_typeinf.begin_type_updating (function) - 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) enum update_type_t - -ida_typeinf.bitfield_type_data_t (class) - Proxy of C++ bitfield_type_data_t class. - -ida_typeinf.bitfield_type_data_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: bitfield_type_data_t const & - -ida_typeinf.bitfield_type_data_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: bitfield_type_data_t const & - -ida_typeinf.bitfield_type_data_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: bitfield_type_data_t const & - -ida_typeinf.bitfield_type_data_t.__init__ (method) - __init__(self, _nbytes=0, _width=0, _is_unsigned=False) -> bitfield_type_data_t - - @param _nbytes: uchar - @param _width: uchar - @param _is_unsigned: bool - -ida_typeinf.bitfield_type_data_t.__le__ (method) - __le__(self, r) -> bool - - @param r: bitfield_type_data_t const & - -ida_typeinf.bitfield_type_data_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: bitfield_type_data_t const & - -ida_typeinf.bitfield_type_data_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: bitfield_type_data_t const & - -ida_typeinf.bitfield_type_data_t.compare (method) - compare(self, r) -> int - - @param r: bitfield_type_data_t const & - -ida_typeinf.bitfield_type_data_t.is_unsigned (variable) - is bitfield unsigned? - -ida_typeinf.bitfield_type_data_t.is_valid_bitfield (method) - is_valid_bitfield(self) -> bool - -ida_typeinf.bitfield_type_data_t.nbytes (variable) - enclosing type size (1,2,4,8 bytes) - -ida_typeinf.bitfield_type_data_t.swap (method) - swap(self, r) - - @param r: bitfield_type_data_t & - -ida_typeinf.bitfield_type_data_t.width (variable) - number of bits - -ida_typeinf.calc_c_cpp_name (function) - calc_c_cpp_name(name, type, ccn_flags) -> str - Get C or C++ form of the name. - - @param name: (C++: const char *) original (mangled or decorated) name - @param type: (C++: const tinfo_t *) name type if known, otherwise nullptr - @param ccn_flags: (C++: int) one of C/C++ naming flags - -ida_typeinf.calc_number_of_children (function) - 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: (C++: const argloc_t &) location of the data (ALOC_STATIC or ALOC_CUSTOM) - @param tif: (C++: const tinfo_t &) type info - @param dont_deref_ptr: (C++: bool) consider 'ea' as the ptr value - @retval 0: data is not expandable - @retval -1: error, see qerrno - @retval else: the max number of lines - -ida_typeinf.calc_tinfo_gaps (function) - calc_tinfo_gaps(out, typid) -> bool - - @param out: rangeset_t * - @param typid: uint32 - -ida_typeinf.calc_type_size (function) - calc_type_size(ti, tp) -> PyObject * - Returns the size of a type - - @param ti: Type info library. 'None' can be passed. - @param tp: serialized type byte string - @return: - None on failure - - The size of the type - -ida_typeinf.callregs_t (class) - Proxy of C++ callregs_t class. - -ida_typeinf.callregs_t.__init__ (method) - __init__(self) -> callregs_t - __init__(self, cc) -> callregs_t - - @param cc: cm_t - -ida_typeinf.callregs_t.by_slots (method) - by_slots(self) -> bool - -ida_typeinf.callregs_t.fpregs (variable) - array of fp registers - -ida_typeinf.callregs_t.gpregs (variable) - array of gp registers - -ida_typeinf.callregs_t.init_regs (method) - init_regs(self, cc) - Init policy & registers for given CC. - - @param cc: (C++: cm_t) - -ida_typeinf.callregs_t.nregs (variable) - max number of registers that can be used in a call - -ida_typeinf.callregs_t.policy (variable) - argument policy - -ida_typeinf.callregs_t.regcount (method) - regcount(cc) -> int - Get max number of registers may be used in a function call. - - @param cc: (C++: cm_t) - -ida_typeinf.callregs_t.reginds (method) - reginds(self, gp_ind, fp_ind, r) -> bool - Get register indexes within GP/FP arrays. (-1 -> is not present in the - corresponding array) - - @param gp_ind: (C++: int *) - @param fp_ind: (C++: int *) - @param r: (C++: int) - -ida_typeinf.callregs_t.reset (method) - reset(self) - Set policy and registers to invalid values. - -ida_typeinf.callregs_t.set (method) - set(self, _policy, gprs, fprs) - Init policy & registers (arrays are -1-terminated) - - @param _policy: (C++: argreg_policy_t) enum argreg_policy_t - @param gprs: (C++: const int *) int const * - @param fprs: (C++: const int *) int const * - -ida_typeinf.callregs_t.swap (method) - swap(self, r) - swap two instances - - @param r: (C++: callregs_t &) - -ida_typeinf.callregs_t_regcount (function) - callregs_t_regcount(cc) -> int - - @param cc: cm_t - -ida_typeinf.choose_local_tinfo (function) - choose_local_tinfo(ti, title, func=None, def_ord=0, ud=None) -> uint32 - Choose a type from the local type library. - - @param ti: (C++: const til_t *) pointer to til - @param title: (C++: const char *) title of listbox to display - @param func: (C++: local_tinfo_predicate_t *) predicate to select types to display (maybe nullptr) - @param def_ord: (C++: uint32) ordinal to position cursor before choose - @param ud: (C++: void *) user data - @return: == 0 means nothing is chosen, otherwise an ordinal number - -ida_typeinf.choose_local_tinfo_and_delta (function) - 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: (C++: int32 *) pointer shift value - @param ti: (C++: const til_t *) pointer to til - @param title: (C++: const char *) title of listbox to display - @param func: (C++: local_tinfo_predicate_t *) predicate to select types to display (maybe nullptr) - @param def_ord: (C++: uint32) ordinal to position cursor before choose - @param ud: (C++: void *) user data - @return: == 0 means nothing is chosen, otherwise an ordinal number - -ida_typeinf.choose_named_type (function) - choose_named_type(out_sym, root_til, title, ntf_flags, predicate=None) -> bool - Choose a type from a type library. - - @param out_sym: (C++: til_symbol_t *) pointer to be filled with the chosen type - @param root_til: (C++: const til_t *) pointer to starting til (the function will inspect the base - tils if allowed by flags) - @param title: (C++: const char *) title of listbox to display - @param ntf_flags: (C++: int) combination of Flags for named types - @param predicate: (C++: predicate_t *) predicate to select types to display (maybe nullptr) - @return: false if nothing is chosen, otherwise true - -ida_typeinf.clear_tinfo_t (function) - clear_tinfo_t(_this) - - @param _this: tinfo_t * - -ida_typeinf.compact_til (function) - 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 (function) - compare_tinfo(t1, t2, tcflags) -> bool - - @param t1: uint32 - @param t2: uint32 - @param tcflags: int - -ida_typeinf.const_aloc_visitor_t (class) - Proxy of C++ const_aloc_visitor_t class. - -ida_typeinf.const_aloc_visitor_t.__disown__ (method) - -ida_typeinf.const_aloc_visitor_t.__init__ (method) - __init__(self) -> const_aloc_visitor_t - - @param self: PyObject * - -ida_typeinf.const_aloc_visitor_t.visit_location (method) - visit_location(self, v, off, size) -> int - - @param v: argloc_t const & - @param off: int - @param size: int - -ida_typeinf.convert_pt_flags_to_hti (function) - 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 (function) - 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: (C++: til_t *) Destination til. It must have orginal types enabled - @param srctil: (C++: const til_t *) Source til. - @param name: (C++: const char *) name of the type to copy - @return: ordinal number of the copied type. 0 means error - -ida_typeinf.copy_tinfo_t (function) - copy_tinfo_t(_this, r) - - @param _this: tinfo_t * - @param r: tinfo_t const & - -ida_typeinf.create_enum_type (function) - create_enum_type(enum_name, ei, enum_width, sign, convert_to_bitmask, enum_cmt=None) -> tid_t - Create type enum - - @param enum_name: (C++: const char *) type name - @param ei: (C++: enum_type_data_t &) enum type data - @param enum_width: (C++: int) the width of an enum element allowed values: 0 - (unspecified),1,2,4,8,16,32,64 - @param sign: (C++: type_sign_t) enum sign - @param convert_to_bitmask: (C++: bool) try convert enum to bitmask enum - @param enum_cmt: (C++: const char *) enum type comment - @return: enum TID - -ida_typeinf.create_numbered_type_name (function) - 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) - -ida_typeinf.create_tinfo (function) - create_tinfo(_this, bt, bt2, ptr) -> bool - - @param _this: tinfo_t * - @param bt: type_t - @param bt2: type_t - @param ptr: void * - -ida_typeinf.create_tinfo2 (function) - create_tinfo2(_this, bt, bt2, ptr) -> bool - - @param _this: tinfo_t * - @param bt: type_t - @param bt2: type_t - @param ptr: void * - -ida_typeinf.custom_data_type_info_t (class) - Proxy of C++ custom_data_type_info_t class. - -ida_typeinf.custom_data_type_info_t.__init__ (method) - __init__(self) -> custom_data_type_info_t - -ida_typeinf.custom_data_type_info_t.dtid (variable) - data type id - -ida_typeinf.custom_data_type_info_t.fid (variable) - data format ids - -ida_typeinf.default_compiler (function) - default_compiler() -> comp_t - Get compiler specified by inf.cc. - -ida_typeinf.del_named_type (function) - del_named_type(ti, name, ntf_flags) -> bool - Delete information about a symbol. - - @param ti: (C++: til_t *) type library - @param name: (C++: const char *) name of symbol - @param ntf_flags: (C++: int) combination of Flags for named types - @return: success - -ida_typeinf.del_numbered_type (function) - del_numbered_type(ti, ordinal) -> bool - Delete a numbered type. - - @param ti: (C++: til_t *) - @param ordinal: (C++: uint32) - -ida_typeinf.del_til (function) - del_til(name) -> bool - Unload a til file. - - @param name: (C++: const char *) char const * - -ida_typeinf.del_tinfo_attr (function) - del_tinfo_attr(tif, key, make_copy) -> bool - - @param tif: tinfo_t * - @param key: qstring const & - @param make_copy: bool - -ida_typeinf.del_vftable_ea (function) - del_vftable_ea(ordinal) -> bool - Delete the address of a vftable instance for a vftable type. - - @param ordinal: (C++: uint32) ordinal number of a vftable type. - @return: success - -ida_typeinf.deref_ptr (function) - deref_ptr(ptr_ea, tif, closure_obj=None) -> bool - Dereference a pointer. - - @param ptr_ea: (C++: ea_t *) in/out parameter - * in: address of the pointer - * out: the pointed address - @param tif: (C++: const tinfo_t &) type of the pointer - @param closure_obj: (C++: ea_t *) closure object (not used yet) - @return: success - -ida_typeinf.deserialize_tinfo (function) - deserialize_tinfo(tif, til, ptype, pfields, pfldcmts, cmt=None) -> bool - - @param tif: tinfo_t * - @param til: til_t const * - @param ptype: type_t const ** - @param pfields: p_list const ** - @param pfldcmts: p_list const ** - @param cmt: char const * - -ida_typeinf.dstr_tinfo (function) - dstr_tinfo(tif) -> char const * - - @param tif: tinfo_t const * - -ida_typeinf.dump_func_type_data (function) - dump_func_type_data(fti, praloc_bits) -> str - Use func_type_data_t::dump() - - @param fti: (C++: const func_type_data_t &) func_type_data_t const & - @param praloc_bits: (C++: int) - -ida_typeinf.edm_t (class) - Proxy of C++ edm_t class. - -ida_typeinf.edm_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: edm_t const & - -ida_typeinf.edm_t.__init__ (method) - __init__(self) -> edm_t - -ida_typeinf.edm_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: edm_t const & - -ida_typeinf.edm_t.get_tid (method) - get_tid(self) -> tid_t - -ida_typeinf.edm_t.swap (method) - swap(self, r) - - @param r: edm_t & - -ida_typeinf.edmvec_t (class) - Proxy of C++ qvector< edm_t > class. - -ida_typeinf.edmvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< edm_t > const & - -ida_typeinf.edmvec_t.__getitem__ (method) - __getitem__(self, i) -> edm_t - - @param i: size_t - -ida_typeinf.edmvec_t.__init__ (method) - __init__(self) -> edmvec_t - __init__(self, x) -> edmvec_t - - @param x: qvector< edm_t > const & - -ida_typeinf.edmvec_t.__len__ (method) - __len__(self) -> size_t - -ida_typeinf.edmvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< edm_t > const & - -ida_typeinf.edmvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: edm_t const & - -ida_typeinf.edmvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: edm_t const & - -ida_typeinf.edmvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: edm_t const & - -ida_typeinf.edmvec_t.at (method) - at(self, _idx) -> edm_t - - @param _idx: size_t - -ida_typeinf.edmvec_t.begin (method) - begin(self) -> edm_t - -ida_typeinf.edmvec_t.capacity (method) - capacity(self) -> size_t - -ida_typeinf.edmvec_t.clear (method) - clear(self) - -ida_typeinf.edmvec_t.empty (method) - empty(self) -> bool - -ida_typeinf.edmvec_t.end (method) - end(self) -> edm_t - -ida_typeinf.edmvec_t.erase (method) - erase(self, it) -> edm_t - - @param it: qvector< edm_t >::iterator - - erase(self, first, last) -> edm_t - - @param first: qvector< edm_t >::iterator - @param last: qvector< edm_t >::iterator - -ida_typeinf.edmvec_t.extract (method) - extract(self) -> edm_t - -ida_typeinf.edmvec_t.find (method) - find(self, x) -> edm_t - - @param x: edm_t const & - -ida_typeinf.edmvec_t.grow (method) - grow(self, x=edm_t()) - - @param x: edm_t const & - -ida_typeinf.edmvec_t.has (method) - has(self, x) -> bool - - @param x: edm_t const & - -ida_typeinf.edmvec_t.inject (method) - inject(self, s, len) - - @param s: edm_t * - @param len: size_t - -ida_typeinf.edmvec_t.insert (method) - insert(self, it, x) -> edm_t - - @param it: qvector< edm_t >::iterator - @param x: edm_t const & - -ida_typeinf.edmvec_t.pop_back (method) - pop_back(self) - -ida_typeinf.edmvec_t.push_back (method) - push_back(self, x) - - @param x: edm_t const & - - push_back(self) -> edm_t - -ida_typeinf.edmvec_t.qclear (method) - qclear(self) - -ida_typeinf.edmvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_typeinf.edmvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: edm_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_typeinf.edmvec_t.size (method) - size(self) -> size_t - -ida_typeinf.edmvec_t.swap (method) - swap(self, r) - - @param r: qvector< edm_t > & - -ida_typeinf.edmvec_t.truncate (method) - truncate(self) - -ida_typeinf.enable_numbered_types (function) - enable_numbered_types(ti, enable) -> bool - Enable the use of numbered types in til. Currently it is impossible to disable - numbered types once they are enabled - - @param ti: (C++: til_t *) - @param enable: (C++: bool) - -ida_typeinf.end_type_updating (function) - 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) enum update_type_t - -ida_typeinf.enum_type_data_t (class) - Proxy of C++ enum_type_data_t class. - -ida_typeinf.enum_type_data_t.__init__ (method) - __init__(self, _bte=BTE_ALWAYS|BTE_HEX) -> enum_type_data_t - - @param _bte: bte_t - -ida_typeinf.enum_type_data_t.add_constant (method) - add_constant(self, name, value, cmt=None) - add constant for regular enum - - @param name: (C++: const char *) char const * - @param value: (C++: uint64) - @param cmt: (C++: const char *) char const * - -ida_typeinf.enum_type_data_t.bte (variable) - enum member sizes (shift amount) and style. do not manually set BTE_BITMASK, use - set_enum_is_bitmask() - -ida_typeinf.enum_type_data_t.calc_mask (method) - calc_mask(self) -> uint64 - -ida_typeinf.enum_type_data_t.calc_nbytes (method) - calc_nbytes(self) -> int - get the width of enum in bytes - -ida_typeinf.enum_type_data_t.find_member (method) - find_member(self, name, _from=0, to=size_t(-1)) -> ssize_t - find member (constant or bmask) by value - - @param name: char const * - @param from: (C++: size_t) - @param to: (C++: size_t) - - find_member(self, value, serial, _from=0, to=size_t(-1), vmask=uint64(-1)) -> ssize_t - - @param value: uint64 - @param serial: uchar - @param from: size_t - @param to: size_t - @param vmask: uint64 - -ida_typeinf.enum_type_data_t.get_constant_group (method) - get_constant_group(self, group_start_index, group_size, idx) -> bool - get group parameters for the constant, valid for etimask enum - - @param group_start_index: (C++: size_t *) index of the group mask - @param group_size: (C++: size_t *) group size (>=1) - @param idx: (C++: size_t) constant index - @return: success - -ida_typeinf.enum_type_data_t.get_enum_radix (method) - get_enum_radix(self) -> int - Get enum constant radix - - @return: radix or 1 for BTE_CHAR - -ida_typeinf.enum_type_data_t.group_sizes (variable) - if present, specifies bitmask group sizes each non-trivial group starts with a - mask member - -ida_typeinf.enum_type_data_t.has_lzero (method) - has_lzero(self) -> bool - -ida_typeinf.enum_type_data_t.is_bf (method) - is_bf(self) -> bool - is bitmask or ordinary enum? - -ida_typeinf.enum_type_data_t.is_bin (method) - is_bin(self) -> bool - -ida_typeinf.enum_type_data_t.is_char (method) - is_char(self) -> bool - -ida_typeinf.enum_type_data_t.is_dec (method) - is_dec(self) -> bool - -ida_typeinf.enum_type_data_t.is_group_mask_at (method) - is_group_mask_at(self, idx) -> bool - is the enum member at IDX a non-trivial group mask? a trivial group consist of - one bit and has just one member, which can be considered as a mask or a bitfield - constant - - @param idx: (C++: size_t) index - @return: success - -ida_typeinf.enum_type_data_t.is_hex (method) - is_hex(self) -> bool - -ida_typeinf.enum_type_data_t.is_number_signed (method) - is_number_signed(self) -> bool - -ida_typeinf.enum_type_data_t.is_oct (method) - is_oct(self) -> bool - -ida_typeinf.enum_type_data_t.is_sbin (method) - is_sbin(self) -> bool - -ida_typeinf.enum_type_data_t.is_shex (method) - is_shex(self) -> bool - -ida_typeinf.enum_type_data_t.is_soct (method) - is_soct(self) -> bool - -ida_typeinf.enum_type_data_t.is_udec (method) - is_udec(self) -> bool - -ida_typeinf.enum_type_data_t.is_valid_group_sizes (method) - is_valid_group_sizes(self) -> bool - is valid group sizes - -ida_typeinf.enum_type_data_t.set_enum_radix (method) - set_enum_radix(self, radix, sign) - Set radix to display constants - - @param radix: (C++: int) radix with the special case 1 to display as character - @param sign: (C++: bool) - -ida_typeinf.enum_type_data_t.set_lzero (method) - set_lzero(self, on) - - @param on: bool - -ida_typeinf.enum_type_data_t.set_nbytes (method) - set_nbytes(self, nbytes) -> bool - set enum width (nbytes) - - @param nbytes: (C++: int) - -ida_typeinf.enum_type_data_t.set_value_repr (method) - set_value_repr(self, repr) -> tinfo_code_t - set enum radix and other representation info - - @param repr: (C++: const value_repr_t &) value display info - -ida_typeinf.enum_type_data_t.store_64bit_values (method) - store_64bit_values(self) -> bool - -ida_typeinf.enum_type_data_t.swap (method) - swap(self, r) - swap two instances - - @param r: (C++: enum_type_data_t &) - -ida_typeinf.enum_type_data_t.taenum_bits (variable) - Type attributes for enums - -ida_typeinf.enum_type_data_t__get_max_serial (function) - enum_type_data_t__get_max_serial(ei, value) -> uchar - - @param ei: enum_type_data_t const * - @param value: uint64 - -ida_typeinf.extract_argloc (function) - extract_argloc(vloc, ptype, forbid_stkoff) -> bool - Deserialize an argument location. Argument FORBID_STKOFF checks location type. - It can be used, for example, to check the return location of a function that - cannot return a value in the stack - - @param vloc: (C++: argloc_t *) - @param ptype: (C++: const type_t **) type_t const ** - @param forbid_stkoff: (C++: bool) - -ida_typeinf.find_tinfo_udt_member (function) - find_tinfo_udt_member(udm, typid, strmem_flags) -> int - - @param udm: udm_t * - @param typid: uint32 - @param strmem_flags: int - -ida_typeinf.first_named_type (function) - first_named_type(ti, ntf_flags) -> char const * - Enumerate types. - - @param ti: (C++: const til_t *) type library. nullptr means the local type library for the current - database. - @param ntf_flags: (C++: int) combination of Flags for named types - @return: Type or symbol names, depending of ntf_flags. Returns mangled names. - Never returns anonymous types. To include them, enumerate types by - ordinals. - -ida_typeinf.for_all_arglocs (function) - 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 (function) - 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 &) argloc_t const & - @param size: (C++: int) - @param off: (C++: int) - -ida_typeinf.free_til (function) - free_til(ti) - Free memory allocated by til. - - @param ti: (C++: til_t *) - -ida_typeinf.func_has_stkframe_hole (function) - 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 &) func_type_data_t const & - -ida_typeinf.func_type_data_t (class) - Proxy of C++ func_type_data_t class. - -ida_typeinf.func_type_data_t.__init__ (method) - __init__(self) -> func_type_data_t - -ida_typeinf.func_type_data_t.cc (variable) - calling convention - -ida_typeinf.func_type_data_t.dump (method) - dump(self, praloc_bits=0x02) -> bool - Dump information that is not always visible in the function prototype. (argument - locations, return location, total stkarg size) - - @param praloc_bits: (C++: int) - -ida_typeinf.func_type_data_t.flags (variable) - Function type data property bits - -ida_typeinf.func_type_data_t.get_call_method (method) - get_call_method(self) -> int - -ida_typeinf.func_type_data_t.guess_cc (method) - guess_cc(self, purged, cc_flags) -> cm_t - Guess function calling convention use the following info: argument locations and - 'stkargs' - - @param purged: (C++: int) - @param cc_flags: (C++: int) - -ida_typeinf.func_type_data_t.is_const (method) - is_const(self) -> bool - -ida_typeinf.func_type_data_t.is_ctor (method) - is_ctor(self) -> bool - -ida_typeinf.func_type_data_t.is_dtor (method) - is_dtor(self) -> bool - -ida_typeinf.func_type_data_t.is_golang_cc (method) - is_golang_cc(self) -> bool - -ida_typeinf.func_type_data_t.is_high (method) - is_high(self) -> bool - -ida_typeinf.func_type_data_t.is_noret (method) - is_noret(self) -> bool - -ida_typeinf.func_type_data_t.is_pure (method) - is_pure(self) -> bool - -ida_typeinf.func_type_data_t.is_static (method) - is_static(self) -> bool - -ida_typeinf.func_type_data_t.is_swift_cc (method) - is_swift_cc(self) -> bool - -ida_typeinf.func_type_data_t.is_vararg_cc (method) - is_vararg_cc(self) -> bool - -ida_typeinf.func_type_data_t.is_virtual (method) - is_virtual(self) -> bool - -ida_typeinf.func_type_data_t.retloc (variable) - return location - -ida_typeinf.func_type_data_t.rettype (variable) - return type - -ida_typeinf.func_type_data_t.spoiled (variable) - spoiled register information. if spoiled register info is present, it overrides - the standard spoil info (eax, edx, ecx for x86) - -ida_typeinf.func_type_data_t.stkargs (variable) - size of stack arguments (not used in build_func_type) - -ida_typeinf.func_type_data_t.swap (method) - swap(self, r) - - @param r: func_type_data_t & - -ida_typeinf.funcarg_t (class) - Proxy of C++ funcarg_t class. - -ida_typeinf.funcarg_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: funcarg_t const & - -ida_typeinf.funcarg_t.__init__ (method) - __init__(self) -> funcarg_t - -ida_typeinf.funcarg_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: funcarg_t const & - -ida_typeinf.funcarg_t.argloc (variable) - argument location - -ida_typeinf.funcarg_t.cmt (variable) - argument comment (may be empty) - -ida_typeinf.funcarg_t.flags (variable) - Function argument property bits - -ida_typeinf.funcarg_t.name (variable) - argument name (may be empty) - -ida_typeinf.funcarg_t.type (variable) - argument type - -ida_typeinf.funcargvec_t (class) - Proxy of C++ qvector< funcarg_t > class. - -ida_typeinf.funcargvec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< funcarg_t > const & - -ida_typeinf.funcargvec_t.__getitem__ (method) - __getitem__(self, i) -> funcarg_t - - @param i: size_t - -ida_typeinf.funcargvec_t.__init__ (method) - __init__(self) -> funcargvec_t - __init__(self, x) -> funcargvec_t - - @param x: qvector< funcarg_t > const & - -ida_typeinf.funcargvec_t.__len__ (method) - __len__(self) -> size_t - -ida_typeinf.funcargvec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< funcarg_t > const & - -ida_typeinf.funcargvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: funcarg_t const & - -ida_typeinf.funcargvec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: funcarg_t const & - -ida_typeinf.funcargvec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: funcarg_t const & - -ida_typeinf.funcargvec_t.at (method) - at(self, _idx) -> funcarg_t - - @param _idx: size_t - -ida_typeinf.funcargvec_t.begin (method) - begin(self) -> funcarg_t - -ida_typeinf.funcargvec_t.capacity (method) - capacity(self) -> size_t - -ida_typeinf.funcargvec_t.clear (method) - clear(self) - -ida_typeinf.funcargvec_t.empty (method) - empty(self) -> bool - -ida_typeinf.funcargvec_t.end (method) - end(self) -> funcarg_t - -ida_typeinf.funcargvec_t.erase (method) - erase(self, it) -> funcarg_t - - @param it: qvector< funcarg_t >::iterator - - erase(self, first, last) -> funcarg_t - - @param first: qvector< funcarg_t >::iterator - @param last: qvector< funcarg_t >::iterator - -ida_typeinf.funcargvec_t.extract (method) - extract(self) -> funcarg_t - -ida_typeinf.funcargvec_t.find (method) - find(self, x) -> funcarg_t - - @param x: funcarg_t const & - -ida_typeinf.funcargvec_t.grow (method) - grow(self, x=funcarg_t()) - - @param x: funcarg_t const & - -ida_typeinf.funcargvec_t.has (method) - has(self, x) -> bool - - @param x: funcarg_t const & - -ida_typeinf.funcargvec_t.inject (method) - inject(self, s, len) - - @param s: funcarg_t * - @param len: size_t - -ida_typeinf.funcargvec_t.insert (method) - insert(self, it, x) -> funcarg_t - - @param it: qvector< funcarg_t >::iterator - @param x: funcarg_t const & - -ida_typeinf.funcargvec_t.pop_back (method) - pop_back(self) - -ida_typeinf.funcargvec_t.push_back (method) - push_back(self, x) - - @param x: funcarg_t const & - - push_back(self) -> funcarg_t - -ida_typeinf.funcargvec_t.qclear (method) - qclear(self) - -ida_typeinf.funcargvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_typeinf.funcargvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: funcarg_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_typeinf.funcargvec_t.size (method) - size(self) -> size_t - -ida_typeinf.funcargvec_t.swap (method) - swap(self, r) - - @param r: qvector< funcarg_t > & - -ida_typeinf.funcargvec_t.truncate (method) - truncate(self) - -ida_typeinf.gcc_layout (function) - gcc_layout() -> bool - Should use the struct/union layout as done by gcc? - -ida_typeinf.gen_decorate_name (function) - gen_decorate_name(name, mangle, cc, type) -> str - Generic function for decorate_name() (may be used in IDP modules) - - @param name: (C++: const char *) char const * - @param mangle: (C++: bool) - @param cc: (C++: cm_t) - @param type: (C++: const tinfo_t *) tinfo_t const * - -ida_typeinf.gen_use_arg_tinfos (function) - gen_use_arg_tinfos(caller, fti, rargs, set_optype, is_stkarg_load, has_delay_slot) - - @param caller: ea_t - @param fti: func_type_data_t * - @param rargs: funcargvec_t * - @param set_optype: set_op_tinfo_t * - @param is_stkarg_load: is_stkarg_load_t * - @param has_delay_slot: has_delay_slot_t * - -ida_typeinf.gen_use_arg_tinfos2 (function) - gen_use_arg_tinfos2(_this, caller, fti, rargs) - Do not call this function directly, use argtinfo_helper_t. - - @param _this: (C++: struct argtinfo_helper_t *) argtinfo_helper_t * - @param caller: (C++: ea_t) - @param fti: (C++: func_type_data_t *) - @param rargs: (C++: funcargvec_t *) - -ida_typeinf.get_abi_name (function) - get_abi_name() -> str - Get ABI name. - - @return: length of the name (>=0) - -ida_typeinf.get_alias_target (function) - 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 *) til_t const * - @param ordinal: (C++: uint32) - -ida_typeinf.get_arg_addrs (function) - 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 (function) - 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 (function) - get_c_header_path() -> str - Get the include directory path of the target compiler. - -ida_typeinf.get_c_macros (function) - get_c_macros() -> str - Get predefined macros for the target compiler. - -ida_typeinf.get_comp (function) - get_comp(comp) -> comp_t - Get compiler bits. - - @param comp: (C++: comp_t) - -ida_typeinf.get_compiler_abbr (function) - get_compiler_abbr(id) -> char const * - Get abbreviated compiler name. - - @param id: (C++: comp_t) - -ida_typeinf.get_compiler_name (function) - get_compiler_name(id) -> char const * - Get full compiler name. - - @param id: (C++: comp_t) - -ida_typeinf.get_compilers (function) - 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 (function) - 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: (C++: const tinfo_t &) enumeration type - @param serial: (C++: int) which enumeration member to use (0 means the first with the given - value) - @param value: (C++: uint64) value to search in the enumeration type - @return: success - -ida_typeinf.get_full_type (function) - get_full_type(t) -> type_t - Get basic type bits + type flags (TYPE_FULL_MASK) - - @param t: (C++: type_t) - -ida_typeinf.get_idainfo64_by_type (function) - get_idainfo64_by_type(out_flags, tif) -> bool - Extract information from a tinfo_t. - - @param out_flags: (C++: flags64_t *) description of type using flags64_t - @param tif: (C++: const tinfo_t &) the type to inspect - -ida_typeinf.get_idainfo_by_type (function) - get_idainfo_by_type(tif) -> bool - Extract information from a tinfo_t. - - @param tif: (C++: const tinfo_t &) the type to inspect - -ida_typeinf.get_idati (function) - get_idati() -> til_t - Pointer to the local type library - this til is private for each IDB file - Functions that accept til_t* default to `idati` when is nullptr provided. - -ida_typeinf.get_named_type (function) - get_named_type(til, name, ntf_flags) -> (int, bytes, bytes, NoneType, NoneType, int, int) - 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 (function) - get_named_type64(til, name, ntf_flags) -> (int, bytes, NoneType, NoneType, NoneType, int, int) - See get_named_type() above. - @note: If the value in the 'ti' library is 32-bit, it will be sign-extended - before being stored in the 'value' pointer. - - @param til: til_t const * - @param name: (C++: const char *) char const * - @param ntf_flags: (C++: int) - -ida_typeinf.get_named_type_tid (function) - get_named_type_tid(name) -> tid_t - Get named local type TID - - @param name: (C++: const char *) type name - @return: TID or BADADDR - -ida_typeinf.get_numbered_type (function) - get_numbered_type(til, ordinal) -> (bytes, NoneType, NoneType, NoneType, int), (bytes, bytes, NoneType, NoneType, int) - Retrieve a type by its ordinal number. - - @param til: til_t const * - @param ordinal: (C++: uint32) - -ida_typeinf.get_numbered_type_name (function) - 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 nullptr - - @param ti: (C++: const til_t *) til_t const * - @param ordinal: (C++: uint32) - -ida_typeinf.get_ordinal_count (function) - get_ordinal_count(ti=None) -> uint32 - Get number of allocated ordinals. - - @param ti: (C++: const til_t *) type library; nullptr means the local types for the current database. - @return: 0 if ordinals have not been enabled for the til. - -ida_typeinf.get_ordinal_from_idb_type (function) - 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 *) char const * - @param type: (C++: const type_t *) type_t const * - -ida_typeinf.get_ordinal_limit (function) - get_ordinal_limit(ti=None) -> uint32 - Get number of allocated ordinals + 1. If there are no allocated ordinals, return - 0. To enumerate all ordinals, use: for ( uint32 i = 1; i < limit; ++i ) - - @param ti: (C++: const til_t *) type library; nullptr means the local types for the current database. - @return: uint32(-1) if ordinals have not been enabled for the til. For local - types (idati), ordinals are always enabled. - -ida_typeinf.get_ordinal_qty (function) - get_ordinal_qty(ti) -> uint32 - - @param ti: til_t const * - -ida_typeinf.get_scalar_bt (function) - get_scalar_bt(size) -> type_t - - @param size: int - -ida_typeinf.get_stock_tinfo (function) - get_stock_tinfo(tif, id) -> bool - - @param tif: tinfo_t * - @param id: enum stock_type_id_t - -ida_typeinf.get_tid_name (function) - get_tid_name(tid) -> str - Get a type name for the specified TID - - @param tid: (C++: tid_t) type TID - @return: true if there is type with TID - @note: this function is the inverse to get_named_type_tid - -ida_typeinf.get_tid_ordinal (function) - get_tid_ordinal(tid) -> uint32 - Get type ordinal number for TID - - @param tid: (C++: tid_t) type/enum constant/udt member TID - @return: type ordinal number or 0 - -ida_typeinf.get_tinfo_attr (function) - get_tinfo_attr(typid, key, bv, all_attrs) -> bool - - @param typid: uint32 - @param key: qstring const & - @param bv: bytevec_t * - @param all_attrs: bool - -ida_typeinf.get_tinfo_attrs (function) - get_tinfo_attrs(typid, tav, include_ref_attrs) -> bool - - @param typid: uint32 - @param tav: type_attrs_t * - @param include_ref_attrs: bool - -ida_typeinf.get_tinfo_by_flags (function) - get_tinfo_by_flags(out, flags) -> bool - Get tinfo object that corresponds to data flags - - @param out: (C++: tinfo_t *) type info - @param flags: (C++: flags64_t) simple flags (byte, word, ..., zword) - -ida_typeinf.get_tinfo_details (function) - get_tinfo_details(typid, bt2, buf) -> bool - - @param typid: uint32 - @param bt2: type_t - @param buf: void * - -ida_typeinf.get_tinfo_details2 (function) - get_tinfo_details2(typid, bt2, buf) -> bool - - @param typid: uint32 - @param bt2: type_t - @param buf: void * - -ida_typeinf.get_tinfo_pdata (function) - get_tinfo_pdata(outptr, typid, what) -> size_t - - @param outptr: void * - @param typid: uint32 - @param what: int - -ida_typeinf.get_tinfo_property (function) - get_tinfo_property(typid, gta_prop) -> size_t - - @param typid: uint32 - @param gta_prop: int - -ida_typeinf.get_tinfo_property4 (function) - get_tinfo_property4(typid, gta_prop, p1, p2, p3, p4) -> size_t - - @param typid: uint32 - @param gta_prop: int - @param p1: size_t - @param p2: size_t - @param p3: size_t - @param p4: size_t - -ida_typeinf.get_tinfo_size (function) - get_tinfo_size(p_effalign, typid, gts_code) -> size_t - - @param p_effalign: uint32 * - @param typid: uint32 - @param gts_code: int - -ida_typeinf.get_tinfo_tid (function) - get_tinfo_tid(tif, force_tid) -> tid_t - - @param tif: tinfo_t * - @param force_tid: bool - -ida_typeinf.get_type_flags (function) - get_type_flags(t) -> type_t - Get type flags (TYPE_FLAGS_MASK) - - @param t: (C++: type_t) - -ida_typeinf.get_type_ordinal (function) - get_type_ordinal(ti, name) -> int32 - Get type ordinal by its name. - - @param ti: (C++: const til_t *) til_t const * - @param name: (C++: const char *) char const * - -ida_typeinf.get_udm_by_fullname (function) - get_udm_by_fullname(udm, fullname) -> ssize_t - Get udt member by full name - - @param udm: (C++: udm_t *) member, can be NULL - @param fullname: (C++: const char *) udt member name in format <udt name>.<member name> - @return: member index into udt_type_data_t or -1 - -ida_typeinf.get_udm_tid (function) - get_udm_tid(udm, udt_name) -> tid_t - - @param udm: udm_t const * - @param udt_name: char const * - -ida_typeinf.get_vftable_ea (function) - get_vftable_ea(ordinal) -> ea_t - Get address of a virtual function table. - - @param ordinal: (C++: uint32) ordinal number of a vftable type. - @return: address of the corresponding virtual function table in the current - database. - -ida_typeinf.get_vftable_ordinal (function) - get_vftable_ordinal(vftable_ea) -> uint32 - Get ordinal number of the virtual function table. - - @param vftable_ea: (C++: ea_t) address of a virtual function table. - @return: ordinal number of the corresponding vftable type. 0 - failure. - -ida_typeinf.guess_func_cc (function) - guess_func_cc(fti, npurged, cc_flags) -> cm_t - Use func_type_data_t::guess_cc() - - @param fti: (C++: const func_type_data_t &) func_type_data_t const & - @param npurged: (C++: int) - @param cc_flags: (C++: int) - -ida_typeinf.guess_tinfo (function) - guess_tinfo(out, id) -> int - Generate a type information about the id from the disassembly. id can be a - structure/union/enum id or an address. - - @param out: (C++: tinfo_t *) - @param id: (C++: tid_t) - @return: one of Guess tinfo codes - -ida_typeinf.ida_lowertype_helper_t (class) - Proxy of C++ ida_lowertype_helper_t class. - -ida_typeinf.ida_lowertype_helper_t.__init__ (method) - __init__(self, _tif, _ea, _pb) -> ida_lowertype_helper_t - - @param _tif: tinfo_t const & - @param _ea: ea_t - @param _pb: int - -ida_typeinf.ida_lowertype_helper_t.func_has_stkframe_hole (method) - func_has_stkframe_hole(self, candidate, candidate_data) -> bool - - @param candidate: tinfo_t const & - @param candidate_data: func_type_data_t const & - -ida_typeinf.ida_lowertype_helper_t.get_func_purged_bytes (method) - get_func_purged_bytes(self, candidate, arg3) -> int - - @param candidate: tinfo_t const & - @param arg3: func_type_data_t const & - -ida_typeinf.idc_get_local_type (function) - idc_get_local_type(ordinal, flags) -> str - - @param ordinal: int - @param flags: int - -ida_typeinf.idc_get_local_type_name (function) - idc_get_local_type_name(ordinal) -> str - - @param ordinal: int - -ida_typeinf.idc_get_local_type_raw (function) - idc_get_local_type_raw(ordinal) -> (bytes, bytes) - - @param ordinal: int - -ida_typeinf.idc_get_type (function) - idc_get_type(ea) -> str - - @param ea: ea_t - -ida_typeinf.idc_get_type_raw (function) - idc_get_type_raw(ea) -> PyObject * - - @param ea: ea_t - -ida_typeinf.idc_guess_type (function) - idc_guess_type(ea) -> str - - @param ea: ea_t - -ida_typeinf.idc_parse_decl (function) - idc_parse_decl(ti, decl, flags) -> (str, bytes, bytes) or None - - @param ti: til_t * - @param decl: char const * - @param flags: int - -ida_typeinf.idc_parse_types (function) - idc_parse_types(input, flags) -> int - - @param input: char const * - @param flags: int - -ida_typeinf.idc_print_type (function) - idc_print_type(type, fields, name, flags) -> str - - @param type: type_t const * - @param fields: p_list const * - @param name: char const * - @param flags: int - -ida_typeinf.idc_set_local_type (function) - idc_set_local_type(ordinal, dcl, flags) -> int - - @param ordinal: int - @param dcl: char const * - @param flags: int - -ida_typeinf.import_type (function) - import_type(til, idx, name, flags=0) -> tid_t - Copy a named type from til to idb. - - @param til: (C++: const til_t *) type library - @param idx: (C++: int) the position of the new type in the list of types (structures or - enums). -1 means at the end of the list - @param name: (C++: const char *) the type name - @param flags: (C++: int) combination of Import type flags - @return: BADNODE on error - -ida_typeinf.inf_big_arg_align (function) - inf_big_arg_align() -> bool - inf_big_arg_align(cc) -> bool - - @param cc: cm_t - -ida_typeinf.inf_huge_arg_align (function) - inf_huge_arg_align() -> bool - inf_huge_arg_align(cc) -> bool - - @param cc: cm_t - -ida_typeinf.inf_pack_stkargs (function) - inf_pack_stkargs() -> bool - inf_pack_stkargs(cc) -> bool - - @param cc: cm_t - -ida_typeinf.is_autosync (function) - is_autosync(name, type) -> bool - Is the specified idb type automatically synchronized? - - @param name: (C++: const char *) char const * - @param type: type_t const * - - is_autosync(name, tif) -> bool - - @param name: char const * - @param tif: tinfo_t const & - -ida_typeinf.is_code_far (function) - is_code_far(cm) -> bool - Does the given model specify far code?. - - @param cm: (C++: cm_t) - -ida_typeinf.is_comp_unsure (function) - is_comp_unsure(comp) -> comp_t - See COMP_UNSURE. - - @param comp: (C++: comp_t) - -ida_typeinf.is_data_far (function) - is_data_far(cm) -> bool - Does the given model specify far data?. - - @param cm: (C++: cm_t) - -ida_typeinf.is_gcc (function) - is_gcc() -> bool - Is the target compiler COMP_GNU? - -ida_typeinf.is_gcc32 (function) - is_gcc32() -> bool - Is the target compiler 32 bit gcc? - -ida_typeinf.is_gcc64 (function) - is_gcc64() -> bool - Is the target compiler 64 bit gcc? - -ida_typeinf.is_golang_cc (function) - is_golang_cc(cc) -> bool - GO language calling convention (return value in stack)? - - @param cc: (C++: cm_t) - -ida_typeinf.is_ordinal_name (function) - 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 *) char const * - @param ord: (C++: uint32 *) - -ida_typeinf.is_purging_cc (function) - is_purging_cc(cm) -> bool - Does the calling convention clean the stack arguments upon return?. - @note: this function is valid only for x86 code - - @param cm: (C++: cm_t) - -ida_typeinf.is_restype_enum (function) - is_restype_enum(til, type) -> bool - - @param til: til_t const * - @param type: type_t const * - -ida_typeinf.is_restype_struct (function) - is_restype_struct(til, type) -> bool - - @param til: til_t const * - @param type: type_t const * - -ida_typeinf.is_restype_struni (function) - is_restype_struni(til, type) -> bool - - @param til: til_t const * - @param type: type_t const * - -ida_typeinf.is_restype_void (function) - is_restype_void(til, type) -> bool - - @param til: til_t const * - @param type: type_t const * - -ida_typeinf.is_sdacl_byte (function) - 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_swift_cc (function) - is_swift_cc(cc) -> bool - Swift calling convention (arguments and return values in registers)? - - @param cc: (C++: cm_t) - -ida_typeinf.is_tah_byte (function) - 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 (function) - is_type_arithmetic(t) -> bool - Is the type an arithmetic type? (floating or integral) - - @param t: (C++: type_t) - -ida_typeinf.is_type_array (function) - is_type_array(t) -> bool - See BT_ARRAY. - - @param t: (C++: type_t) - -ida_typeinf.is_type_bitfld (function) - is_type_bitfld(t) -> bool - See BT_BITFIELD. - - @param t: (C++: type_t) - -ida_typeinf.is_type_bool (function) - is_type_bool(t) -> bool - See BTF_BOOL. - - @param t: (C++: type_t) - -ida_typeinf.is_type_char (function) - 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_choosable (function) - is_type_choosable(ti, ordinal) -> bool - Check if a struct/union type is choosable - - @param ti: (C++: const til_t *) type library - @param ordinal: (C++: uint32) ordinal number of a UDT type - -ida_typeinf.is_type_complex (function) - is_type_complex(t) -> bool - See BT_COMPLEX. - - @param t: (C++: type_t) - -ida_typeinf.is_type_const (function) - is_type_const(t) -> bool - See BTM_CONST. - - @param t: (C++: type_t) - -ida_typeinf.is_type_double (function) - is_type_double(t) -> bool - See BTF_DOUBLE. - - @param t: (C++: type_t) - -ida_typeinf.is_type_enum (function) - is_type_enum(t) -> bool - See BTF_ENUM. - - @param t: (C++: type_t) - -ida_typeinf.is_type_ext_arithmetic (function) - 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 (function) - 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 (function) - is_type_float(t) -> bool - See BTF_FLOAT. - - @param t: (C++: type_t) - -ida_typeinf.is_type_floating (function) - is_type_floating(t) -> bool - Is the type a floating point type? - - @param t: (C++: type_t) - -ida_typeinf.is_type_func (function) - is_type_func(t) -> bool - See BT_FUNC. - - @param t: (C++: type_t) - -ida_typeinf.is_type_int (function) - 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 (function) - 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 (function) - 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 (function) - 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 (function) - 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 (function) - 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 (function) - is_type_ldouble(t) -> bool - See BTF_LDOUBLE. - - @param t: (C++: type_t) - -ida_typeinf.is_type_paf (function) - is_type_paf(t) -> bool - Is the type a pointer, array, or function type? - - @param t: (C++: type_t) - -ida_typeinf.is_type_partial (function) - 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 (function) - is_type_ptr(t) -> bool - See BT_PTR. - - @param t: (C++: type_t) - -ida_typeinf.is_type_ptr_or_array (function) - 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 (function) - is_type_struct(t) -> bool - See BTF_STRUCT. - - @param t: (C++: type_t) - -ida_typeinf.is_type_struni (function) - is_type_struni(t) -> bool - Is the type a struct or union? - - @param t: (C++: type_t) - -ida_typeinf.is_type_sue (function) - is_type_sue(t) -> bool - Is the type a struct/union/enum? - - @param t: (C++: type_t) - -ida_typeinf.is_type_tbyte (function) - is_type_tbyte(t) -> bool - See BTF_FLOAT. - - @param t: (C++: type_t) - -ida_typeinf.is_type_typedef (function) - is_type_typedef(t) -> bool - See BTF_TYPEDEF. - - @param t: (C++: type_t) - -ida_typeinf.is_type_uchar (function) - is_type_uchar(t) -> bool - See BTF_UCHAR. - - @param t: (C++: type_t) - -ida_typeinf.is_type_uint (function) - is_type_uint(t) -> bool - See BTF_UINT. - - @param t: (C++: type_t) - -ida_typeinf.is_type_uint128 (function) - is_type_uint128(t) -> bool - See BTF_UINT128. - - @param t: (C++: type_t) - -ida_typeinf.is_type_uint16 (function) - is_type_uint16(t) -> bool - See BTF_UINT16. - - @param t: (C++: type_t) - -ida_typeinf.is_type_uint32 (function) - is_type_uint32(t) -> bool - See BTF_UINT32. - - @param t: (C++: type_t) - -ida_typeinf.is_type_uint64 (function) - is_type_uint64(t) -> bool - See BTF_UINT64. - - @param t: (C++: type_t) - -ida_typeinf.is_type_union (function) - is_type_union(t) -> bool - See BTF_UNION. - - @param t: (C++: type_t) - -ida_typeinf.is_type_unknown (function) - is_type_unknown(t) -> bool - See BT_UNKNOWN. - - @param t: (C++: type_t) - -ida_typeinf.is_type_void (function) - is_type_void(t) -> bool - See BTF_VOID. - - @param t: (C++: type_t) - -ida_typeinf.is_type_volatile (function) - is_type_volatile(t) -> bool - See BTM_VOLATILE. - - @param t: (C++: type_t) - -ida_typeinf.is_typeid_last (function) - 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 (function) - is_user_cc(cm) -> bool - Does the calling convention specify argument locations explicitly? - - @param cm: (C++: cm_t) - -ida_typeinf.is_vararg_cc (function) - is_vararg_cc(cm) -> bool - Does the calling convention use ellipsis? - - @param cm: (C++: cm_t) - -ida_typeinf.lexcompare_tinfo (function) - lexcompare_tinfo(t1, t2, arg3) -> int - - @param t1: uint32 - @param t2: uint32 - @param arg3: int - -ida_typeinf.load_til (function) - load_til(name, tildir=None) -> til_t - Load til from a file without adding it to the database list (see also add_til). - Failure to load base tils are reported into 'errbuf'. They do not prevent - loading of the main til. - - @param name: (C++: const char *) filename of the til. If it's an absolute path, tildir is ignored. - * NB: the file extension is forced to .til - @param tildir: (C++: const char *) directory where to load the til from. nullptr means default til - subdirectories. - @return: pointer to resulting til, nullptr if failed and error message is in - errbuf - -ida_typeinf.load_til_header (function) - load_til_header(tildir, name) -> til_t - Get human-readable til description. - - @param tildir: (C++: const char *) char const * - @param name: (C++: const char *) char const * - -ida_typeinf.lower_type (function) - 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, etc - We 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 children - types walked through by recursion. - @retval 1: removed FTI_HIGH, - @retval 2: made substantial changes - @retval -1: failure - - @param til: (C++: til_t *) - @param tif: (C++: tinfo_t *) - @param name: (C++: const char *) char const * - @param _helper: (C++: lowertype_helper_t *) - -ida_typeinf.lowertype_helper_t (class) - Proxy of C++ lowertype_helper_t class. - -ida_typeinf.lowertype_helper_t.__init__ (method) - -ida_typeinf.lowertype_helper_t.func_has_stkframe_hole (method) - func_has_stkframe_hole(self, candidate, candidate_data) -> bool - - @param candidate: tinfo_t const & - @param candidate_data: func_type_data_t const & - -ida_typeinf.lowertype_helper_t.get_func_purged_bytes (method) - get_func_purged_bytes(self, candidate, candidate_data) -> int - - @param candidate: tinfo_t const & - @param candidate_data: func_type_data_t const & - -ida_typeinf.new_til (function) - new_til(name, desc) -> til_t - Initialize a til. - - @param name: (C++: const char *) char const * - @param desc: (C++: const char *) char const * - -ida_typeinf.next_named_type (function) - next_named_type(ti, name, ntf_flags) -> char const * - Enumerate types. - - @param ti: (C++: const til_t *) type library. nullptr means the local type library for the current - database. - @param name: (C++: const char *) the current name. the name that follows this one will be returned. - @param ntf_flags: (C++: int) combination of Flags for named types - @return: Type or symbol names, depending of ntf_flags. Returns mangled names. - Never returns anonymous types. To include them, enumerate types by - ordinals. - -ida_typeinf.no_sign (variable) - no sign, or unknown - -ida_typeinf.optimize_argloc (function) - optimize_argloc(vloc, size, gaps) -> bool - Verify and optimize scattered argloc into simple form. All new arglocs must be - processed by this function. - @retval true: success - @retval false: the input argloc was illegal - - @param vloc: (C++: argloc_t *) - @param size: (C++: int) - @param gaps: (C++: const rangeset_t *) rangeset_t const * - -ida_typeinf.pack_idcobj_to_bv (function) - 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 *) idc_value_t const * - @param tif: (C++: const tinfo_t &) tinfo_t const & - @param bytes: (C++: relobj_t *) - @param objoff: (C++: void *) - @param pio_flags: (C++: int) - -ida_typeinf.pack_idcobj_to_idb (function) - 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 *) idc_value_t const * - @param tif: (C++: const tinfo_t &) tinfo_t const & - @param ea: (C++: ea_t) - @param pio_flags: (C++: int) - -ida_typeinf.pack_object_to_bv (function) - pack_object_to_bv(py_obj, ti, type, fields, base_ea, pio_flags=0) -> PyObject * - Packs a typed object to a string - - @param py_obj: PyObject * - @param ti: Type info. 'None' can be passed. - @param type: type_t const * - @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 (function) - 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 py_obj: PyObject * - @param ti: Type info. 'None' can be passed. - @param type: type_t const * - @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 (function) - parse_decl(out_tif, til, decl, pt_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. - @note: name & tif may be empty after the call! - - @param out_tif: (C++: tinfo_t *) type info - @param til: (C++: til_t *) type library to use. may be nullptr - @param decl: (C++: const char *) C declaration to parse - @param pt_flags: (C++: int) combination of Type parsing flags bits - @retval true: ok - @retval false: declaration is bad, the error message is displayed if !PT_SIL - -ida_typeinf.parse_decls (function) - 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: (C++: til_t *) type library to store the result - @param input: (C++: const char *) input string or file name (see hti_flags) - @param printer: (C++: printer_t *) function to output error messages (use msg or nullptr or your - own callback) - @param hti_flags: (C++: int) combination of Type formatting flags - @return: number of errors, 0 means ok. - -ida_typeinf.predicate_t (class) - Proxy of C++ predicate_t class. - -ida_typeinf.predicate_t.__disown__ (method) - -ida_typeinf.predicate_t.__init__ (method) - __init__(self) -> predicate_t - - @param self: PyObject * - -ida_typeinf.predicate_t.should_display (method) - should_display(self, til, name, type, fields) -> bool - - @param til: til_t const * - @param name: char const * - @param type: type_t const * - @param fields: p_list const * - -ida_typeinf.print_argloc (function) - print_argloc(vloc, size=0, vflags=0) -> str - Convert an argloc to human readable form. - - @param vloc: (C++: const argloc_t &) argloc_t const & - @param size: (C++: int) - @param vflags: (C++: int) - -ida_typeinf.print_decls (function) - print_decls(printer, til, py_ordinals, flags) -> int - Print types (and possibly their dependencies) in a format suitable for using in - a header file. This is the reverse parse_decls(). - - @param printer: (C++: text_sink_t &) a handler for printing text - @param til: (C++: til_t *) the type library holding the ordinals - @param py_ordinals: ordinals of types to export. nullptr means: all ordinals in til - @param pdf_flags: (C++: uint32) flags for the algorithm. A combination of PDF_ constants - @retval >0: the number of types exported - @retval 0: an error occurred - @retval <0: the negated number of types exported. There were minor errors and - the resulting output might not be compilable. - -ida_typeinf.print_tinfo (function) - print_tinfo(prefix, indent, cmtindent, flags, tif, name, cmt) -> str - - @param prefix: char const * - @param indent: int - @param cmtindent: int - @param flags: int - @param tif: tinfo_t const * - @param name: char const * - @param cmt: char const * - -ida_typeinf.print_type (function) - print_type(ea, prtype_flags) -> str - Get type declaration for the specified address. - - @param ea: (C++: ea_t) address - @param prtype_flags: (C++: int) combination of Type printing flags - @return: success - -ida_typeinf.ptr_type_data_t (class) - Proxy of C++ ptr_type_data_t class. - -ida_typeinf.ptr_type_data_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: ptr_type_data_t const & - -ida_typeinf.ptr_type_data_t.__init__ (method) - __init__(self, c=tinfo_t(), bps=0, p=tinfo_t(), d=0) -> ptr_type_data_t - - @param c: tinfo_t - @param bps: uchar - @param p: tinfo_t - @param d: int32 - -ida_typeinf.ptr_type_data_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: ptr_type_data_t const & - -ida_typeinf.ptr_type_data_t.closure (variable) - cannot have both closure and based_ptr_size - -ida_typeinf.ptr_type_data_t.delta (variable) - Offset from the beginning of the parent struct. - -ida_typeinf.ptr_type_data_t.is_code_ptr (method) - is_code_ptr(self) -> bool - Are we pointing to code? - -ida_typeinf.ptr_type_data_t.is_shifted (method) - is_shifted(self) -> bool - -ida_typeinf.ptr_type_data_t.obj_type (variable) - pointed object type - -ida_typeinf.ptr_type_data_t.parent (variable) - Parent struct. - -ida_typeinf.ptr_type_data_t.swap (method) - swap(self, r) - Set this = r and r = this. - - @param r: (C++: ptr_type_data_t &) - -ida_typeinf.ptr_type_data_t.taptr_bits (variable) - TAH bits. - -ida_typeinf.read_tinfo_bitfield_value (function) - read_tinfo_bitfield_value(typid, v, bitoff) -> uint64 - - @param typid: uint32 - @param v: uint64 - @param bitoff: int - -ida_typeinf.reginfovec_t (class) - Proxy of C++ qvector< reg_info_t > class. - -ida_typeinf.reginfovec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< reg_info_t > const & - -ida_typeinf.reginfovec_t.__getitem__ (method) - __getitem__(self, i) -> reg_info_t - - @param i: size_t - -ida_typeinf.reginfovec_t.__init__ (method) - __init__(self) -> reginfovec_t - __init__(self, x) -> reginfovec_t - - @param x: qvector< reg_info_t > const & - -ida_typeinf.reginfovec_t.__len__ (method) - __len__(self) -> size_t - -ida_typeinf.reginfovec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< reg_info_t > const & - -ida_typeinf.reginfovec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: reg_info_t const & - -ida_typeinf.reginfovec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: reg_info_t const & - -ida_typeinf.reginfovec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: reg_info_t const & - -ida_typeinf.reginfovec_t.at (method) - at(self, _idx) -> reg_info_t - - @param _idx: size_t - -ida_typeinf.reginfovec_t.begin (method) - begin(self) -> reg_info_t - -ida_typeinf.reginfovec_t.capacity (method) - capacity(self) -> size_t - -ida_typeinf.reginfovec_t.clear (method) - clear(self) - -ida_typeinf.reginfovec_t.empty (method) - empty(self) -> bool - -ida_typeinf.reginfovec_t.end (method) - end(self) -> reg_info_t - -ida_typeinf.reginfovec_t.erase (method) - erase(self, it) -> reg_info_t - - @param it: qvector< reg_info_t >::iterator - - erase(self, first, last) -> reg_info_t - - @param first: qvector< reg_info_t >::iterator - @param last: qvector< reg_info_t >::iterator - -ida_typeinf.reginfovec_t.extract (method) - extract(self) -> reg_info_t - -ida_typeinf.reginfovec_t.find (method) - find(self, x) -> reg_info_t - - @param x: reg_info_t const & - -ida_typeinf.reginfovec_t.grow (method) - grow(self, x=reg_info_t()) - - @param x: reg_info_t const & - -ida_typeinf.reginfovec_t.has (method) - has(self, x) -> bool - - @param x: reg_info_t const & - -ida_typeinf.reginfovec_t.inject (method) - inject(self, s, len) - - @param s: reg_info_t * - @param len: size_t - -ida_typeinf.reginfovec_t.insert (method) - insert(self, it, x) -> reg_info_t - - @param it: qvector< reg_info_t >::iterator - @param x: reg_info_t const & - -ida_typeinf.reginfovec_t.pop_back (method) - pop_back(self) - -ida_typeinf.reginfovec_t.push_back (method) - push_back(self, x) - - @param x: reg_info_t const & - - push_back(self) -> reg_info_t - -ida_typeinf.reginfovec_t.qclear (method) - qclear(self) - -ida_typeinf.reginfovec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_typeinf.reginfovec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: reg_info_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_typeinf.reginfovec_t.size (method) - size(self) -> size_t - -ida_typeinf.reginfovec_t.swap (method) - swap(self, r) - - @param r: qvector< reg_info_t > & - -ida_typeinf.reginfovec_t.truncate (method) - truncate(self) - -ida_typeinf.regobj_t (class) - Proxy of C++ regobj_t class. - -ida_typeinf.regobj_t.__init__ (method) - __init__(self) -> regobj_t - -ida_typeinf.regobj_t.regidx (variable) - index into dbg->registers - -ida_typeinf.regobj_t.relocate (variable) - 0-plain num, 1-must relocate - -ida_typeinf.regobj_t.size (method) - size(self) -> size_t - -ida_typeinf.regobjs_t (class) - Proxy of C++ regobjs_t class. - -ida_typeinf.regobjs_t.__init__ (method) - __init__(self) -> regobjs_t - -ida_typeinf.regobjvec_t (class) - Proxy of C++ qvector< regobj_t > class. - -ida_typeinf.regobjvec_t.__getitem__ (method) - __getitem__(self, i) -> regobj_t - - @param i: size_t - -ida_typeinf.regobjvec_t.__init__ (method) - __init__(self) -> regobjvec_t - __init__(self, x) -> regobjvec_t - - @param x: qvector< regobj_t > const & - -ida_typeinf.regobjvec_t.__len__ (method) - __len__(self) -> size_t - -ida_typeinf.regobjvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: regobj_t const & - -ida_typeinf.regobjvec_t.at (method) - at(self, _idx) -> regobj_t - - @param _idx: size_t - -ida_typeinf.regobjvec_t.begin (method) - begin(self) -> regobj_t - -ida_typeinf.regobjvec_t.capacity (method) - capacity(self) -> size_t - -ida_typeinf.regobjvec_t.clear (method) - clear(self) - -ida_typeinf.regobjvec_t.empty (method) - empty(self) -> bool - -ida_typeinf.regobjvec_t.end (method) - end(self) -> regobj_t - -ida_typeinf.regobjvec_t.erase (method) - erase(self, it) -> regobj_t - - @param it: qvector< regobj_t >::iterator - - erase(self, first, last) -> regobj_t - - @param first: qvector< regobj_t >::iterator - @param last: qvector< regobj_t >::iterator - -ida_typeinf.regobjvec_t.extract (method) - extract(self) -> regobj_t - -ida_typeinf.regobjvec_t.grow (method) - grow(self, x=regobj_t()) - - @param x: regobj_t const & - -ida_typeinf.regobjvec_t.inject (method) - inject(self, s, len) - - @param s: regobj_t * - @param len: size_t - -ida_typeinf.regobjvec_t.insert (method) - insert(self, it, x) -> regobj_t - - @param it: qvector< regobj_t >::iterator - @param x: regobj_t const & - -ida_typeinf.regobjvec_t.pop_back (method) - pop_back(self) - -ida_typeinf.regobjvec_t.push_back (method) - push_back(self, x) - - @param x: regobj_t const & - - push_back(self) -> regobj_t - -ida_typeinf.regobjvec_t.qclear (method) - qclear(self) - -ida_typeinf.regobjvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_typeinf.regobjvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: regobj_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_typeinf.regobjvec_t.size (method) - size(self) -> size_t - -ida_typeinf.regobjvec_t.swap (method) - swap(self, r) - - @param r: qvector< regobj_t > & - -ida_typeinf.regobjvec_t.truncate (method) - truncate(self) - -ida_typeinf.remove_abi_opts (function) - remove_abi_opts(abi_opts, user_level=False) -> bool - - @param abi_opts: char const * - @param user_level: bool - -ida_typeinf.remove_pointer (function) - remove_pointer(tif) -> tinfo_t - - @param 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() - -ida_typeinf.remove_tinfo_pointer (function) - remove_tinfo_pointer(tif, name, til) -> (bool, NoneType), (bool, str) - 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 name: char const * - @param til: (C++: const til_t *) til_t const * - -ida_typeinf.replace_ordinal_typerefs (function) - 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: (C++: til_t *) type library to use. may be nullptr. - @param tif: (C++: tinfo_t *) type to modify (in/out) - @retval number: of replaced subtypes, -1 on failure - -ida_typeinf.resolve_typedef (function) - resolve_typedef(til, type) -> type_t const * - - @param til: til_t const * - @param type: type_t const * - -ida_typeinf.rrel_t (class) - Proxy of C++ rrel_t class. - -ida_typeinf.rrel_t.__init__ (method) - __init__(self) -> rrel_t - -ida_typeinf.rrel_t.off (variable) - displacement from the address pointed by the register - -ida_typeinf.rrel_t.reg (variable) - register index (into ph.reg_names) - -ida_typeinf.save_tinfo (function) - save_tinfo(tif, til, ord, name, ntf_flags) -> tinfo_code_t - - @param tif: tinfo_t * - @param til: til_t * - @param ord: size_t - @param name: char const * - @param ntf_flags: int - -ida_typeinf.scattered_aloc_t (class) - Proxy of C++ scattered_aloc_t class. - -ida_typeinf.scattered_aloc_t.__init__ (method) - __init__(self) -> scattered_aloc_t - -ida_typeinf.score_tinfo (function) - score_tinfo(tif) -> uint32 - - @param tif: tinfo_t const * - -ida_typeinf.serialize_tinfo (function) - serialize_tinfo(type, fields, fldcmts, tif, sudt_flags) -> bool - - @param type: qtype * - @param fields: qtype * - @param fldcmts: qtype * - @param tif: tinfo_t const * - @param sudt_flags: int - -ida_typeinf.set_abi_name (function) - set_abi_name(abiname, user_level=False) -> bool - Set abi name (see Compiler IDs) - - @param abiname: (C++: const char *) char const * - @param user_level: (C++: bool) - -ida_typeinf.set_c_header_path (function) - set_c_header_path(incdir) - Set include directory path the target compiler. - - @param incdir: (C++: const char *) char const * - -ida_typeinf.set_c_macros (function) - set_c_macros(macros) - Set predefined macros for the target compiler. - - @param macros: (C++: const char *) char const * - -ida_typeinf.set_compiler (function) - set_compiler(cc, flags, abiname=None) -> bool - Change current compiler. - - @param cc: (C++: const compiler_info_t &) compiler to switch to - @param flags: (C++: int) Set compiler flags - @param abiname: (C++: const char *) ABI name - @return: success - -ida_typeinf.set_compiler_id (function) - set_compiler_id(id, abiname=None) -> bool - Set the compiler id (see Compiler IDs) - - @param id: (C++: comp_t) - @param abiname: (C++: const char *) char const * - -ida_typeinf.set_compiler_string (function) - set_compiler_string(compstr, user_level) -> bool - - @param compstr: (C++: const char *) - compiler description in form <abbr>:<abiname> - @param user_level: (C++: bool) - initiated by user if TRUE - @return: success - -ida_typeinf.set_numbered_type (function) - 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 nullptr for anonymous types. To replace - the existed type use NTF_REPLACE - - @param ti: (C++: til_t *) - @param ordinal: (C++: uint32) - @param ntf_flags: (C++: int) - @param name: (C++: const char *) char const * - @param type: (C++: const type_t *) type_t const * - @param fields: (C++: const p_list *) p_list const * - @param cmt: (C++: const char *) char const * - @param fldcmts: (C++: const p_list *) p_list const * - @param sclass: (C++: const sclass_t *) sclass_t const * - -ida_typeinf.set_tinfo_attr (function) - set_tinfo_attr(tif, ta, may_overwrite) -> bool - - @param tif: tinfo_t * - @param ta: type_attr_t const & - @param may_overwrite: bool - -ida_typeinf.set_tinfo_attrs (function) - set_tinfo_attrs(tif, ta) -> bool - - @param tif: tinfo_t * - @param ta: type_attrs_t * - -ida_typeinf.set_tinfo_property (function) - set_tinfo_property(tif, sta_prop, x) -> size_t - - @param tif: tinfo_t * - @param sta_prop: int - @param x: size_t - -ida_typeinf.set_tinfo_property4 (function) - set_tinfo_property4(tif, sta_prop, p1, p2, p3, p4) -> size_t - - @param tif: tinfo_t * - @param sta_prop: int - @param p1: size_t - @param p2: size_t - @param p3: size_t - @param p4: size_t - -ida_typeinf.set_type_alias (function) - 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 references to srctype - by dsttype. - - @param ti: (C++: til_t *) - @param src_ordinal: (C++: uint32) - @param dst_ordinal: (C++: uint32) - -ida_typeinf.set_type_choosable (function) - set_type_choosable(ti, ordinal, value) - Enable/disable 'choosability' flag for a struct/union type - - @param ti: (C++: til_t *) type library - @param ordinal: (C++: uint32) ordinal number of a UDT type - @param value: (C++: bool) flag value - -ida_typeinf.set_vftable_ea (function) - set_vftable_ea(ordinal, vftable_ea) -> bool - Set the address of a vftable instance for a vftable type. - - @param ordinal: (C++: uint32) ordinal number of the corresponding vftable type. - @param vftable_ea: (C++: ea_t) address of a virtual function table. - @return: success - -ida_typeinf.simd_info_t (class) - Proxy of C++ simd_info_t class. - -ida_typeinf.simd_info_t.__init__ (method) - __init__(self, nm=None, sz=0, memt=BTF_UNK) -> simd_info_t - - @param nm: char const * - @param sz: uint16 - @param memt: type_t - -ida_typeinf.simd_info_t.match_pattern (method) - match_pattern(self, pattern) -> bool - - @param pattern: simd_info_t const * - -ida_typeinf.simd_info_t.memtype (variable) - member type BTF_INT8/16/32/64/128, BTF_UINT8/16/32/64/128 BTF_INT - integrals of - any size/sign BTF_FLOAT, BTF_DOUBLE BTF_TBYTE - floatings of any size BTF_UNION - - union of integral and floating types BTF_UNK - undefined - -ida_typeinf.simd_info_t.name (variable) - name of SIMD type (nullptr-undefined) - -ida_typeinf.simd_info_t.size (variable) - SIMD type size in bytes (0-undefined) - -ida_typeinf.simd_info_t.tif (variable) - SIMD type (empty-undefined) - -ida_typeinf.stkarg_area_info_t (class) - Proxy of C++ stkarg_area_info_t class. - -ida_typeinf.stkarg_area_info_t.__init__ (method) - __init__(self) -> stkarg_area_info_t - -ida_typeinf.stkarg_area_info_t.linkage_area (variable) - Size of the linkage area. explanations at: \link{https://www.ibm.com/docs/en/xl- - fortran-aix/16.1.0?topic=conventions-linkage-area} examples: pc: 0, hppa: 0, ppc - aix: 0x18 (equal to stkarg_offset) - -ida_typeinf.stkarg_area_info_t.shadow_size (variable) - Size of the shadow area. explanations at: - \link{https://stackoverflow.com/questions/30190132/what-is-the-shadow-space- - in-x64-assembly} examples: x64 Visual Studio C++: 0x20, x64 gcc: 0, ppc aix: - 0x20 - -ida_typeinf.stkarg_area_info_t.stkarg_offset (variable) - Offset from the SP to the first stack argument (can include linkage area) - examples: pc: 0, hppa: -0x34, ppc aix: 0x18 - -ida_typeinf.store_til (function) - 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: (C++: til_t *) type library to store - @param tildir: (C++: const char *) directory where to store the til. nullptr means current - directory. - @param name: (C++: const char *) filename of the til. If it's an absolute path, tildir is ignored. - * NB: the file extension is forced to .til - @return: success - -ida_typeinf.switch_to_golang (function) - switch_to_golang() - switch to GOLANG calling convention (to be used as default CC) - -ida_typeinf.text_sink_t (class) - Proxy of C++ text_sink_t class. - -ida_typeinf.text_sink_t.__disown__ (method) - -ida_typeinf.text_sink_t.__init__ (method) - __init__(self) -> text_sink_t - - @param self: PyObject * - -ida_typeinf.text_sink_t._print (method) - _print(self, str) -> int - - Parameters - ---------- - str: char const * - -ida_typeinf.til_symbol_t (class) - Proxy of C++ til_symbol_t class. - -ida_typeinf.til_symbol_t.__init__ (method) - __init__(self, n=None, t=None) -> til_symbol_t - - @param n: char const * - @param t: til_t const * - -ida_typeinf.til_symbol_t.name (variable) - symbol name - -ida_typeinf.til_symbol_t.til (variable) - pointer to til - -ida_typeinf.til_t (class) - Proxy of C++ til_t class. - -ida_typeinf.til_t.__init__ (method) - __init__(self) -> til_t - -ida_typeinf.til_t.base (method) - base(self, n) -> til_t - tils that our til is based on - - @param n: int - -ida_typeinf.til_t.cc (variable) - information about the target compiler - -ida_typeinf.til_t.desc (variable) - human readable til description - -ida_typeinf.til_t.flags (variable) - Type info library property bits - -ida_typeinf.til_t.is_dirty (method) - is_dirty(self) -> bool - Has the til been modified? (TIL_MOD) - -ida_typeinf.til_t.name (variable) - short file name (without path and extension) - -ida_typeinf.til_t.nbases (variable) - number of base tils - -ida_typeinf.til_t.nrefs (variable) - number of references to the til - -ida_typeinf.til_t.nstreams (variable) - number of extra streams - -ida_typeinf.til_t.set_dirty (method) - set_dirty(self) - Mark the til as modified (TIL_MOD) - -ida_typeinf.til_t.streams (variable) - symbol stream storage - -ida_typeinf.tinfo_errstr (function) - tinfo_errstr(code) -> char const * - Helper function to convert an error code into a printable string. Additional - arguments are handled using the functions from err.h - - @param code: (C++: tinfo_code_t) enum tinfo_code_t - -ida_typeinf.tinfo_t (class) - Proxy of C++ tinfo_t class. - -ida_typeinf.tinfo_t.ENUMBM_AUTO (variable) - convert to bitmask if the outcome is nice and useful - -ida_typeinf.tinfo_t.ENUMBM_OFF (variable) - convert to ordinal enum - -ida_typeinf.tinfo_t.ENUMBM_ON (variable) - convert to bitmask enum - -ida_typeinf.tinfo_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: tinfo_t const & - -ida_typeinf.tinfo_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: tinfo_t const & - -ida_typeinf.tinfo_t.__gt__ (method) - __gt__(self, r) -> bool - - @param r: tinfo_t const & - -ida_typeinf.tinfo_t.__init__ (method) - __init__(self) -> tinfo_t - __init__(self, decl_type) -> tinfo_t - - @param decl_type: type_t - - __init__(self, r) -> tinfo_t - - @param r: tinfo_t const & - -ida_typeinf.tinfo_t.__le__ (method) - __le__(self, r) -> bool - - @param r: tinfo_t const & - -ida_typeinf.tinfo_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: tinfo_t const & - -ida_typeinf.tinfo_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: tinfo_t const & - -ida_typeinf.tinfo_t.__str__ (method) - __str__(self) -> qstring - -ida_typeinf.tinfo_t._print (method) - _print(self, name=None, prtype_flags=0, indent=0, cmtindent=0, prefix=None, cmt=None) -> bool - - Parameters - ---------- - name: char const * - prtype_flags: int - indent: int - cmtindent: int - prefix: char const * - cmt: char const * - -ida_typeinf.tinfo_t.add_edm (method) - add_edm(self, edm, bmask=bmask64_t(-1), etf_flags=0, idx=-1) -> tinfo_code_t - Add a new enum member (a new symbolic constant) - - @param edm: (C++: const edm_t &) the constant name, value, and comment - @param bmask: (C++: bmask64_t) bmask of the group to add the constant to - @note: 1. For non-bitmask enum push back constant, BMASK is not used (set it ot - -1), never failed 2. For bitmask enum: - * if VAL and BMASK are not agreed, return TERR_BAD_MSKVAL - * if group with BMASK exists, push back constant to group - * otherwise use constant as bitmask for a new group - @note: ETF_NO_SAVE is ignored - -ida_typeinf.tinfo_t.add_udm (method) - add_udm(self, udm, etf_flags=0, times=1, idx=-1) -> tinfo_code_t - Add a structure/union member. - - @param udm: (C++: const udm_t &) member to add - @param etf_flags: (C++: uint) edit_type() flags flags - @param times: (C++: size_t) how many times to add. if times > 1, the member name will be - appended a suffix like "_2" and so on - @param idx: (C++: ssize_t) the index in the udm array where the new udm should be placed. if - the specified index cannot be honored because it would spoil the udm - sorting order, it is silently ignored. - @note: ETF_NO_SAVE is ignored - -ida_typeinf.tinfo_t.append_covered (method) - append_covered(self, out, offset=0) -> bool - Calculate set of covered bytes for the type - - @param out: (C++: rangeset_t *) pointer to the output buffer. covered bytes will be appended to it. - @param offset: (C++: uint64) delta in bytes to add to all calculations. used internally during - recurion. - -ida_typeinf.tinfo_t.calc_gaps (method) - calc_gaps(self, out) -> bool - Calculate set of padding bytes for the type - - @param out: (C++: rangeset_t *) pointer to the output buffer; old buffer contents will be lost. - -ida_typeinf.tinfo_t.calc_purged_bytes (method) - calc_purged_bytes(self) -> int - -ida_typeinf.tinfo_t.calc_score (method) - calc_score(self) -> uint32 - Calculate the type score (the higher - the nicer is the type) - -ida_typeinf.tinfo_t.calc_udt_aligns (method) - calc_udt_aligns(self, sudt_flags=0x0004) -> bool - Calculate the udt alignments using the field offsets/sizes and the total udt - size This function does not work on typerefs - - @param sudt_flags: (C++: int) - -ida_typeinf.tinfo_t.change_sign (method) - change_sign(self, sign) -> bool - Change the type sign. Works only for the types that may have sign. - - @param sign: (C++: type_sign_t) - -ida_typeinf.tinfo_t.clear (method) - clear(self) - Clear contents of this tinfo, and remove from the type system. - -ida_typeinf.tinfo_t.clr_const (method) - clr_const(self) -> bool - -ida_typeinf.tinfo_t.clr_const_volatile (method) - clr_const_volatile(self) -> bool - -ida_typeinf.tinfo_t.clr_decl_const_volatile (method) - clr_decl_const_volatile(self) - -ida_typeinf.tinfo_t.clr_volatile (method) - clr_volatile(self) -> bool - -ida_typeinf.tinfo_t.compare (method) - compare(self, r) -> int - - @param r: tinfo_t const & - -ida_typeinf.tinfo_t.compare_with (method) - compare_with(self, r, tcflags=0) -> bool - Compare two types, based on given flags (see tinfo_t comparison flags) - - @param r: (C++: const tinfo_t &) tinfo_t const & - @param tcflags: (C++: int) - -ida_typeinf.tinfo_t.convert_array_to_ptr (method) - convert_array_to_ptr(self) -> bool - Convert an array into a pointer. type[] => type * - -ida_typeinf.tinfo_t.copy (method) - copy(self) -> tinfo_t - -ida_typeinf.tinfo_t.copy_type (method) - copy_type(self, til, name, ntf_flags=0x0001|0x1000) -> tinfo_code_t - - @param til: til_t * - @param name: char const * - @param ntf_flags: int - -ida_typeinf.tinfo_t.create_array (method) - create_array(self, p, decl_type=BT_ARRAY) -> bool - - @param p: array_type_data_t const & - @param decl_type: type_t - - create_array(self, tif, nelems=0, base=0, decl_type=BT_ARRAY) -> bool - - @param tif: tinfo_t const & - @param nelems: uint32 - @param base: uint32 - @param decl_type: type_t - -ida_typeinf.tinfo_t.create_bitfield (method) - create_bitfield(self, p, decl_type=BT_BITFIELD) -> bool - - @param p: bitfield_type_data_t const & - @param decl_type: type_t - - create_bitfield(self, nbytes, width, is_unsigned=False, decl_type=BT_BITFIELD) -> bool - - @param nbytes: uchar - @param width: uchar - @param is_unsigned: bool - @param decl_type: type_t - -ida_typeinf.tinfo_t.create_enum (method) - create_enum(self, p, decl_type=BTF_ENUM) -> bool - - @param p: enum_type_data_t & - @param decl_type: type_t - -ida_typeinf.tinfo_t.create_forward_decl (method) - create_forward_decl(self, til, decl_type, name, ntf_flags=0) -> tinfo_code_t - Create a forward declaration. decl_type: BTF_STRUCT, BTF_UNION, or BTF_ENUM - - @param til: (C++: til_t *) - @param decl_type: (C++: type_t) - @param name: (C++: const char *) char const * - @param ntf_flags: (C++: int) - -ida_typeinf.tinfo_t.create_func (method) - create_func(self, p, decl_type=BT_FUNC) -> bool - - @param p: func_type_data_t & - @param decl_type: type_t - -ida_typeinf.tinfo_t.create_ptr (method) - create_ptr(self, p, decl_type=BT_PTR) -> bool - - @param p: ptr_type_data_t const & - @param decl_type: type_t - - create_ptr(self, tif, bps=0, decl_type=BT_PTR) -> bool - - @param tif: tinfo_t const & - @param bps: uchar - @param decl_type: type_t - -ida_typeinf.tinfo_t.create_simple_type (method) - create_simple_type(self, decl_type) -> bool - - @param decl_type: type_t - -ida_typeinf.tinfo_t.create_typedef (method) - create_typedef(self, p, decl_type=BTF_TYPEDEF, try_ordinal=True) -> bool - - @param p: typedef_type_data_t const & - @param decl_type: type_t - @param try_ordinal: bool - - create_typedef(self, til, name, decl_type=BTF_TYPEDEF, try_ordinal=True) - - @param til: til_t const * - @param name: char const * - @param decl_type: type_t - @param try_ordinal: bool - - create_typedef(self, til, ord, decl_type=BTF_TYPEDEF) - - @param til: til_t const * - @param ord: uint - @param decl_type: type_t - -ida_typeinf.tinfo_t.create_udt (method) - create_udt(self, p) -> bool - - @param p: udt_type_data_t & - - create_udt(self, p, decl_type) -> bool - - @param p: udt_type_data_t & - @param decl_type: type_t - -ida_typeinf.tinfo_t.del_attr (method) - del_attr(self, key, make_copy=True) -> bool - Del a type attribute. typerefs cannot be modified by this function. - - @param key: (C++: const qstring &) qstring const & - @param make_copy: (C++: bool) - -ida_typeinf.tinfo_t.del_attrs (method) - del_attrs(self) - Del all type attributes. typerefs cannot be modified by this function. - -ida_typeinf.tinfo_t.del_edm (method) - del_edm(self, idx, etf_flags=0) -> tinfo_code_t - - @param idx: size_t - @param etf_flags: uint - -ida_typeinf.tinfo_t.del_edms (method) - del_edms(self, idx1, idx2, etf_flags=0) -> tinfo_code_t - Delete enum members - - @param idx1: (C++: size_t) index in edmvec_t - @param idx2: (C++: size_t) index in edmvec_t or size_t(-1) - @param etf_flags: (C++: uint) etf_flag_t Delete enum members in [idx1, idx2) - @note: For bitmask enum, the first member of a non-trivial group (having 2 or - more members) is considered as a group mask. It is impossible to delete - the group mask of a non-trivial group, other members of the group must be - deleted first. Empty groups are automatically deleted. - -ida_typeinf.tinfo_t.del_udm (method) - del_udm(self, index, etf_flags=0) -> tinfo_code_t - Delete a structure/union member. - - @param index: (C++: size_t) - @param etf_flags: (C++: uint) - -ida_typeinf.tinfo_t.del_udms (method) - del_udms(self, idx1, idx2, etf_flags=0) -> tinfo_code_t - Delete structure/union members in the range [idx1, idx2) - - @param idx1: (C++: size_t) - @param idx2: (C++: size_t) - @param etf_flags: (C++: uint) - -ida_typeinf.tinfo_t.deserialize (method) - deserialize(self, til, ptype, pfields=None, pfldcmts=None, cmt=None) -> bool - Deserialize a type string into a tinfo_t object. - - @param til: (C++: const til_t *) til_t const * - @param ptype: (C++: const qtype *) type_t const ** - @param pfields: (C++: const qtype *) p_list const ** - @param pfldcmts: (C++: const qtype *) p_list const ** - @param cmt: (C++: const char *) char const * - - deserialize(self, til, type, fields, cmts=None) -> bool - - @param til: til_t const * - @param type: type_t const * - @param fields: p_list const * - @param cmts: p_list const * - -ida_typeinf.tinfo_t.dstr (method) - dstr(self) -> char const * - Function to facilitate debugging. - -ida_typeinf.tinfo_t.edit_array (method) - edit_array(self, editor, etf_flags=0) -> tinfo_code_t - - @param editor: std::function< tinfo_code_t (array_type_data_t *) > const & - @param etf_flags: uint - -ida_typeinf.tinfo_t.edit_bitfield (method) - edit_bitfield(self, editor, etf_flags=0) -> tinfo_code_t - - @param editor: std::function< tinfo_code_t (bitfield_type_data_t *) > const & - @param etf_flags: uint - -ida_typeinf.tinfo_t.edit_edm (method) - edit_edm(self, idx, value, bmask=bmask64_t(-1), etf_flags=0) -> tinfo_code_t - Change constant value and/or bitmask - - @param idx: (C++: size_t) index in edmvec_t - @param value: (C++: uint64) old or new value - @param bmask: (C++: bmask64_t) old or new bitmask - @note: if new bitmask is specified the index of constant may be changed - -ida_typeinf.tinfo_t.edit_enum (method) - edit_enum(self, editor, etf_flags=0) -> tinfo_code_t - - @param editor: std::function< tinfo_code_t (enum_type_data_t *) > const & - @param etf_flags: uint - -ida_typeinf.tinfo_t.edit_func (method) - edit_func(self, editor, etf_flags=0) -> tinfo_code_t - - @param editor: std::function< tinfo_code_t (func_type_data_t *) > const & - @param etf_flags: uint - -ida_typeinf.tinfo_t.edit_ptr (method) - edit_ptr(self, editor, etf_flags=0) -> tinfo_code_t - - @param editor: std::function< tinfo_code_t (ptr_type_data_t *) > const & - @param etf_flags: uint - -ida_typeinf.tinfo_t.edit_udt (method) - edit_udt(self, editor, etf_flags=0) -> tinfo_code_t - Edit udt/enum/func/array/ptr/bitfield. These functions may be used if the - desired functionality is not provided by the STA_... based functions. - - @param editor: (C++: const std::function< tinfo_code_t(udt_type_data_t *)> &) callback to modify the type details; should return true on - success - @param etf_flags: (C++: uint) combination of etf_flag_t constants - -ida_typeinf.tinfo_t.empty (method) - empty(self) -> bool - Was tinfo_t initialized with some type info or not? - -ida_typeinf.tinfo_t.equals_to (method) - equals_to(self, r) -> bool - - @param r: tinfo_t const & - -ida_typeinf.tinfo_t.expand_udt (method) - expand_udt(self, idx, delta, etf_flags=0) -> tinfo_code_t - Expand/shtrink a structure by adding/removing a gap before the specified member. - - @param idx: (C++: size_t) index of the member - @param delta: (C++: adiff_t) number of bytes to add or remove - @param etf_flags: (C++: uint) etf_flag_t Please note that it is impossible to add a gap at - the very end of a structure. However, adding before a regular - member is possible. This function can be used to remove gaps - in the middle of a structure by specifying a negative delta - value. - -ida_typeinf.tinfo_t.find_edm (method) - find_edm(self, edm, value, bmask=bmask64_t(-1), serial=0) -> tinfo_code_t - Find enum member - - @param edm: (C++: edm_t *) enum type member - @param value: uint64 - @param bmask: bmask64_t - find_edm(self, edm, name) -> tinfo_code_t - - @param edm: edm_t * - @param name: char const * - -ida_typeinf.tinfo_t.find_udm (method) - find_udm(self, udm, strmem_flags) -> int - BTF_STRUCT,BTF_UNION: Find a udt member. - * at the specified offset (STRMEM_OFFSET) - * with the specified index (STRMEM_INDEX) - * with the specified type (STRMEM_TYPE) - * with the specified name (STRMEM_NAME) - - @param udm: (C++: struct udm_t *) udm_t * - @param strmem_flags: (C++: int) - @return: the index of the found member or -1 - -ida_typeinf.tinfo_t.force_tid (method) - force_tid(self) -> tid_t - Get the type tid. Create if it does not exist yet. If the type comes from a base - til, the type will be copied to the local til and a new tid will be created for - it. (if the type comes from a base til, it does not have a tid yet). If the type - comes from the local til, this function is equivalent to get_tid() - - @return: tid or BADADDR - -ida_typeinf.tinfo_t.get_alias_target (method) - get_alias_target(self) -> uint32 - Get type alias If the type has no alias, return 0. - -ida_typeinf.tinfo_t.get_array_details (method) - get_array_details(self, ai) -> bool - Get the array specific info. - - @param ai: (C++: array_type_data_t *) - -ida_typeinf.tinfo_t.get_array_element (method) - get_array_element(self) -> tinfo_t - -ida_typeinf.tinfo_t.get_array_nelems (method) - get_array_nelems(self) -> int - -ida_typeinf.tinfo_t.get_attr (method) - get_attr(self, key, all_attrs=True) -> str or None - Get a type attribute. - - @param key: (C++: const qstring &) qstring const & - @param all_attrs: (C++: bool) - -ida_typeinf.tinfo_t.get_attrs (method) - get_attrs(self, tav, all_attrs=False) -> bool - Get type attributes (all_attrs: include attributes of referenced types, if any) - - @param tav: (C++: type_attrs_t *) - @param all_attrs: (C++: bool) - -ida_typeinf.tinfo_t.get_bit_buckets (method) - get_bit_buckets(self, buckets) -> bool - ::BT_STRUCT: get bit buckets Bit buckets are used to layout bitfields - - @param buckets: (C++: range64vec_t *) - @return: false if wrong type was passed - -ida_typeinf.tinfo_t.get_bitfield_details (method) - get_bitfield_details(self, bi) -> bool - Get the bitfield specific info. - - @param bi: (C++: bitfield_type_data_t *) - -ida_typeinf.tinfo_t.get_declalign (method) - get_declalign(self) -> uchar - Get declared alignment of the type. - -ida_typeinf.tinfo_t.get_decltype (method) - get_decltype(self) -> type_t - Get declared type (without resolving type references; they are returned as is). - Obviously this is a very fast function and should be used instead of - get_realtype() if possible. Please note that for typerefs this function will - return BTF_TYPEDEF. To determine if a typeref is a typedef, use is_typedef() - -ida_typeinf.tinfo_t.get_edm (method) - get_edm(self, edm, idx) -> tinfo_code_t - Get enum member - - @param edm: (C++: edm_t *) enum type member - @param idx: (C++: size_t) enum member index - -ida_typeinf.tinfo_t.get_edm_by_tid (method) - get_edm_by_tid(self, edm, tid) -> ssize_t - - @param edm: edm_t * - @param tid: tid_t - -ida_typeinf.tinfo_t.get_enum_base_type (method) - get_enum_base_type(self) -> type_t - Get enum base type (convert enum to integer type) Returns BT_UNK if failed to - convert - -ida_typeinf.tinfo_t.get_enum_details (method) - get_enum_details(self, ei) -> bool - Get the enum specific info. - - @param ei: (C++: enum_type_data_t *) - -ida_typeinf.tinfo_t.get_enum_radix (method) - get_enum_radix(self) -> int - Get enum constant radix - - @return: radix or 1 for BTE_CHAR enum_type_data_t::get_enum_radix() - -ida_typeinf.tinfo_t.get_final_element (method) - get_final_element(self) -> tinfo_t - repeat recursively: if an array, return the type of its element; else return the - type itself. - -ida_typeinf.tinfo_t.get_final_ordinal (method) - get_final_ordinal(self) -> uint32 - Get final type ordinal (0 if none) - -ida_typeinf.tinfo_t.get_final_type_name (method) - get_final_type_name(self) -> bool - Use in the case of typedef chain (TYPE1 -> TYPE2 -> TYPE3...TYPEn). - - @return: the name of the last type in the chain (TYPEn). if there is no chain, - returns TYPE1 - -ida_typeinf.tinfo_t.get_forward_type (method) - get_forward_type(self) -> type_t - Get type of a forward declaration. For a forward declaration this function - returns its base type. In other cases it returns BT_UNK - -ida_typeinf.tinfo_t.get_func_details (method) - get_func_details(self, fi, gtd=GTD_CALC_ARGLOCS) -> bool - Get only the function specific info for this tinfo_t. - - @param fi: (C++: func_type_data_t *) - @param gtd: (C++: gtd_func_t) enum gtd_func_t - -ida_typeinf.tinfo_t.get_innermost_udm (method) - get_innermost_udm(self, bitoffset) -> tinfo_t - Get the innermost member at the given offset - - @param bitoffset: (C++: uint64) bit offset into the structure - @retval udt: with the innermost member - @retval empty: type if it is not a struct type or OFFSET could not be found - -ida_typeinf.tinfo_t.get_methods (method) - get_methods(self, methods) -> bool - - @param BT_COMPLEX: get a list of member functions declared in this udt. - @return: false if no member functions exist - -ida_typeinf.tinfo_t.get_modifiers (method) - get_modifiers(self) -> type_t - -ida_typeinf.tinfo_t.get_named_type (method) - get_named_type(self, til, name, decl_type=BTF_TYPEDEF, resolve=True, try_ordinal=True) -> bool - Create a tinfo_t object for an existing named type. - - @param til: (C++: const til_t *) type library to use - @param name: (C++: const char *) name of the type to link to - @param decl_type: (C++: type_t) if the reference was explicitly specified with the type tag - (BTF_STRUCT/BTF_UNION/BTF_ENUM) you may specify it. - the kernel will accept only the specified tag after resolving - the type. If the resolved type does not correspond to the - explicitly specified tag, the type will be considered as undefined - @param resolve: (C++: bool) true: immediately resolve the type and return success code. - @param try_ordinal: (C++: bool) true: try to replace name reference by an ordinal reference - -ida_typeinf.tinfo_t.get_nargs (method) - get_nargs(self) -> int - BT_FUNC or BT_PTR BT_FUNC: Calculate number of arguments (-1 - error) - -ida_typeinf.tinfo_t.get_next_type_name (method) - get_next_type_name(self) -> bool - Use In the case of typedef chain (TYPE1 -> TYPE2 -> TYPE3...TYPEn). - - @return: the name of the next type in the chain (TYPE2). if there is no chain, - returns failure - -ida_typeinf.tinfo_t.get_nice_type_name (method) - get_nice_type_name(self) -> bool - Get the beautified type name. Get the referenced name and apply regular - expressions from goodname.cfg to beautify the name - -ida_typeinf.tinfo_t.get_nth_arg (method) - get_nth_arg(self, n) -> tinfo_t - BT_FUNC or BT_PTR BT_FUNC: Get type of n-th arg (-1 means return type, see - get_rettype()) - - @param n: (C++: int) - -ida_typeinf.tinfo_t.get_numbered_type (method) - get_numbered_type(self, til, ordinal, decl_type=BTF_TYPEDEF, resolve=True) -> bool - Create a tinfo_t object for an existing ordinal type. - - @param til: (C++: const til_t *) type library to use - @param ordinal: (C++: uint32) number of the type to link to - @param decl_type: (C++: type_t) if the reference was explicitly specified with the type tag - (BTF_STRUCT/BTF_UNION/BTF_ENUM) you may specify it. the kernel - will accept only the specified tag after resolving the type. - If the resolved type does not correspond to the explicitly - specified tag, the type will be considered as undefined - @param resolve: (C++: bool) true: immediately resolve the type and return success code - -ida_typeinf.tinfo_t.get_onemember_type (method) - get_onemember_type(self) -> tinfo_t - For objects consisting of one member entirely: return type of the member. - -ida_typeinf.tinfo_t.get_ordinal (method) - get_ordinal(self) -> uint32 - Get type ordinal (only if the type was created as a numbered type, 0 if none) - -ida_typeinf.tinfo_t.get_pointed_object (method) - get_pointed_object(self) -> tinfo_t - -ida_typeinf.tinfo_t.get_ptr_details (method) - get_ptr_details(self, pi) -> bool - Get the pointer info. - - @param pi: (C++: ptr_type_data_t *) - -ida_typeinf.tinfo_t.get_ptrarr_object (method) - get_ptrarr_object(self) -> tinfo_t - BT_PTR & BT_ARRAY: get the pointed object or array element. If the current type - is not a pointer or array, return empty type info. - -ida_typeinf.tinfo_t.get_ptrarr_objsize (method) - get_ptrarr_objsize(self) -> int - BT_PTR & BT_ARRAY: get size of pointed object or array element. On error returns - -1 - -ida_typeinf.tinfo_t.get_realtype (method) - get_realtype(self, full=False) -> type_t - Get the resolved base type. Deserialization options: - * if full=true, the referenced type will be deserialized fully, this may not - always be desirable (slows down things) - * if full=false, we just return the base type, the referenced type will be - resolved again later if necessary (this may lead to multiple resolvings of the - same type) imho full=false is a better approach because it does not perform - unnecessary actions just in case. however, in some cases the caller knows that - it is very likely that full type info will be required. in those cases full=true - makes sense - - @param full: (C++: bool) - -ida_typeinf.tinfo_t.get_rettype (method) - get_rettype(self) -> tinfo_t - BT_FUNC or BT_PTR BT_FUNC: Get the function's return type - -ida_typeinf.tinfo_t.get_sign (method) - get_sign(self) -> type_sign_t - Get type sign. - -ida_typeinf.tinfo_t.get_size (method) - get_size(self, p_effalign=None, gts_code=0) -> size_t - Get the type size in bytes. - - @param p_effalign: (C++: uint32 *) buffer for the alignment value - @param gts_code: (C++: int) combination of GTS_... constants - @return: BADSIZE in case of problems - -ida_typeinf.tinfo_t.get_stock (method) - get_stock(id) -> tinfo_t - Get stock type information. This function can be used to get tinfo_t for some - common types. The same tinfo_t will be returned for the same id, thus saving - memory and increasing the speed Please note that retrieving the STI_SIZE_T or - STI_SSIZE_T stock type, will also have the side-effect of adding that type to - the 'idati' TIL, under the well-known name 'size_t' or 'ssize_t' (respectively). - The same is valid for STI_COMPLEX64 and STI_COMPLEX64 stock types with names - 'complex64_t' and 'complex128_t' (respectively). - - @param id: (C++: stock_type_id_t) enum stock_type_id_t - -ida_typeinf.tinfo_t.get_tid (method) - get_tid(self) -> tid_t - Get the type tid Each type in the local type library has a so-called `tid` - associated with it. The tid is used to collect xrefs to the type. The tid is - created when the type is created in the local type library and does not change - afterwards. It can be passed to xref-related functions instead of the address. - - @return: tid or BADADDR - @note: types that do not come from a type library (that exist only in the - memory) can not have a tid. - -ida_typeinf.tinfo_t.get_til (method) - get_til(self) -> til_t - Get the type library for tinfo_t. - -ida_typeinf.tinfo_t.get_type_by_edm_name (method) - get_type_by_edm_name(self, mname, til=None) -> bool - Retrieve enum tinfo using enum member name - - @param mname: (C++: const char *) enum type member name - @param til: (C++: til_t *) type library - @return: success If the function fails, THIS object becomes empty. - -ida_typeinf.tinfo_t.get_type_by_tid (method) - get_type_by_tid(self, tid) -> bool - - @param tid: tid_t - -ida_typeinf.tinfo_t.get_type_cmt (method) - get_type_cmt(self) -> int - Get type comment - - @return: 0-failed, 1-returned regular comment, 2-returned repeatable comment - -ida_typeinf.tinfo_t.get_type_name (method) - get_type_name(self) -> bool - Does a type refer to a name?. If yes, fill the provided buffer with the type - name and return true. Names are returned for numbered types too: either a user- - defined nice name or, if a user-provided name does not exist, an ordinal name - (like #xx, see create_numbered_type_name()). - -ida_typeinf.tinfo_t.get_type_rptcmt (method) - get_type_rptcmt(self) -> bool - Get type comment only if it is repeatable. - -ida_typeinf.tinfo_t.get_udm_by_tid (method) - get_udm_by_tid(self, udm, tid) -> ssize_t - Retrive tinfo using type TID or struct/enum member MID - - @param udm: (C++: udm_t *) [out]: place to save the found member to, may be nullptr - @param tid: (C++: tid_t) tid can denote a type tid or a member tid. - @return: if a member tid was specified, returns the member index, otherwise - returns -1. if the function fails, THIS object becomes empty. - -ida_typeinf.tinfo_t.get_udm_tid (method) - get_udm_tid(self, idx) -> tid_t - Get udt member TID - - @param idx: (C++: size_t) the index of udt the member - @return: tid or BADADDR The tid is used to collect xrefs to the member, it can - be passed to xref-related functions instead of the address. - -ida_typeinf.tinfo_t.get_udt_details (method) - get_udt_details(self, udt, gtd=GTD_CALC_LAYOUT) -> bool - Get the udt specific info. - - @param udt: (C++: udt_type_data_t *) - @param gtd: (C++: gtd_udt_t) enum gtd_udt_t - -ida_typeinf.tinfo_t.get_udt_nmembers (method) - get_udt_nmembers(self) -> int - Get number of udt members. -1-error. - -ida_typeinf.tinfo_t.get_unpadded_size (method) - get_unpadded_size(self) -> size_t - Get the type size in bytes without the final padding, in bytes. For some UDTs - get_unpadded_size() != get_size() - -ida_typeinf.tinfo_t.has_details (method) - has_details(self) -> bool - Does this type refer to a nontrivial type? - -ida_typeinf.tinfo_t.has_union (method) - has_union(self) -> bool - Has a member of type "union"? - -ida_typeinf.tinfo_t.has_vftable (method) - has_vftable(self) -> bool - Has a vftable? - -ida_typeinf.tinfo_t.is_aliased (method) - is_aliased(self) -> bool - -ida_typeinf.tinfo_t.is_anonymous_udt (method) - is_anonymous_udt(self) -> bool - Is an anonymous struct/union? We assume that types with names are anonymous if - the name starts with $ - -ida_typeinf.tinfo_t.is_arithmetic (method) - is_arithmetic(self) -> bool - is_type_arithmetic(get_realtype()) - -ida_typeinf.tinfo_t.is_array (method) - is_array(self) -> bool - is_type_array(get_realtype()) - -ida_typeinf.tinfo_t.is_bitfield (method) - is_bitfield(self) -> bool - is_type_bitfld(get_realtype()) - -ida_typeinf.tinfo_t.is_bitmask_enum (method) - is_bitmask_enum(self) -> bool - Is bitmask enum? - - @return: true for bitmask enum and false in other cases - enum_type_data_t::is_bf() - -ida_typeinf.tinfo_t.is_bool (method) - is_bool(self) -> bool - is_type_bool(get_realtype()) - -ida_typeinf.tinfo_t.is_castable_to (method) - is_castable_to(self, target) -> bool - - @param target: tinfo_t const & - -ida_typeinf.tinfo_t.is_char (method) - is_char(self) -> bool - is_type_char(get_realtype()) - -ida_typeinf.tinfo_t.is_complex (method) - is_complex(self) -> bool - is_type_complex(get_realtype()) - -ida_typeinf.tinfo_t.is_const (method) - is_const(self) -> bool - is_type_const(get_realtype()) - -ida_typeinf.tinfo_t.is_correct (method) - is_correct(self) -> bool - Is the type object correct?. It is possible to create incorrect types. For - example, we can define a function that returns an enum and then delete the enum - type. If this function returns false, the type should not be used in - disassembly. Please note that this function does not verify all involved types: - for example, pointers to undefined types are permitted. - -ida_typeinf.tinfo_t.is_decl_array (method) - is_decl_array(self) -> bool - is_type_array(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_bitfield (method) - is_decl_bitfield(self) -> bool - is_type_bitfld(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_bool (method) - is_decl_bool(self) -> bool - is_type_bool(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_char (method) - is_decl_char(self) -> bool - is_type_char(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_complex (method) - is_decl_complex(self) -> bool - is_type_complex(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_const (method) - is_decl_const(self) -> bool - is_type_const(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_double (method) - is_decl_double(self) -> bool - is_type_double(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_enum (method) - is_decl_enum(self) -> bool - is_type_enum(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_float (method) - is_decl_float(self) -> bool - is_type_float(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_floating (method) - is_decl_floating(self) -> bool - is_type_floating(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_func (method) - is_decl_func(self) -> bool - is_type_func(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_int (method) - is_decl_int(self) -> bool - is_type_int(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_int128 (method) - is_decl_int128(self) -> bool - is_type_int128(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_int16 (method) - is_decl_int16(self) -> bool - is_type_int16(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_int32 (method) - is_decl_int32(self) -> bool - is_type_int32(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_int64 (method) - is_decl_int64(self) -> bool - is_type_int64(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_last (method) - is_decl_last(self) -> bool - is_typeid_last(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_ldouble (method) - is_decl_ldouble(self) -> bool - is_type_ldouble(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_paf (method) - is_decl_paf(self) -> bool - is_type_paf(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_partial (method) - is_decl_partial(self) -> bool - is_type_partial(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_ptr (method) - is_decl_ptr(self) -> bool - is_type_ptr(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_struct (method) - is_decl_struct(self) -> bool - is_type_struct(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_sue (method) - is_decl_sue(self) -> bool - is_type_sue(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_tbyte (method) - is_decl_tbyte(self) -> bool - is_type_tbyte(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_typedef (method) - is_decl_typedef(self) -> bool - is_type_typedef(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_uchar (method) - is_decl_uchar(self) -> bool - is_type_uchar(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_udt (method) - is_decl_udt(self) -> bool - is_type_struni(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_uint (method) - is_decl_uint(self) -> bool - is_type_uint(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_uint128 (method) - is_decl_uint128(self) -> bool - is_type_uint128(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_uint16 (method) - is_decl_uint16(self) -> bool - is_type_uint16(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_uint32 (method) - is_decl_uint32(self) -> bool - is_type_uint32(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_uint64 (method) - is_decl_uint64(self) -> bool - is_type_uint64(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_union (method) - is_decl_union(self) -> bool - is_type_union(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_unknown (method) - is_decl_unknown(self) -> bool - is_type_unknown(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_void (method) - is_decl_void(self) -> bool - is_type_void(get_decltype()) - -ida_typeinf.tinfo_t.is_decl_volatile (method) - is_decl_volatile(self) -> bool - is_type_volatile(get_decltype()) - -ida_typeinf.tinfo_t.is_double (method) - is_double(self) -> bool - is_type_double(get_realtype()) - -ida_typeinf.tinfo_t.is_empty_udt (method) - is_empty_udt(self) -> bool - Is an empty struct/union? (has no fields) - -ida_typeinf.tinfo_t.is_enum (method) - is_enum(self) -> bool - is_type_enum(get_realtype()) - -ida_typeinf.tinfo_t.is_ext_arithmetic (method) - is_ext_arithmetic(self) -> bool - is_type_ext_arithmetic(get_realtype()) - -ida_typeinf.tinfo_t.is_ext_integral (method) - is_ext_integral(self) -> bool - is_type_ext_integral(get_realtype()) - -ida_typeinf.tinfo_t.is_float (method) - is_float(self) -> bool - is_type_float(get_realtype()) - -ida_typeinf.tinfo_t.is_floating (method) - is_floating(self) -> bool - is_type_floating(get_realtype()) - -ida_typeinf.tinfo_t.is_forward_decl (method) - is_forward_decl(self) -> bool - Is this a forward declaration?. Forward declarations are placeholders: the type - definition does not exist - -ida_typeinf.tinfo_t.is_forward_enum (method) - is_forward_enum(self) -> bool - -ida_typeinf.tinfo_t.is_forward_struct (method) - is_forward_struct(self) -> bool - -ida_typeinf.tinfo_t.is_forward_union (method) - is_forward_union(self) -> bool - -ida_typeinf.tinfo_t.is_from_subtil (method) - is_from_subtil(self) -> bool - Was the named type found in some base type library (not the top level type - library)?. If yes, it usually means that the type comes from some loaded type - library, not the local type library for the database - -ida_typeinf.tinfo_t.is_func (method) - is_func(self) -> bool - is_type_func(get_realtype()) - -ida_typeinf.tinfo_t.is_funcptr (method) - is_funcptr(self) -> bool - Is this pointer to a function? - -ida_typeinf.tinfo_t.is_high_func (method) - is_high_func(self) -> bool - -ida_typeinf.tinfo_t.is_int (method) - is_int(self) -> bool - is_type_int(get_realtype()) - -ida_typeinf.tinfo_t.is_int128 (method) - is_int128(self) -> bool - is_type_int128(get_realtype()) - -ida_typeinf.tinfo_t.is_int16 (method) - is_int16(self) -> bool - is_type_int16(get_realtype()) - -ida_typeinf.tinfo_t.is_int32 (method) - is_int32(self) -> bool - is_type_int32(get_realtype()) - -ida_typeinf.tinfo_t.is_int64 (method) - is_int64(self) -> bool - is_type_int64(get_realtype()) - -ida_typeinf.tinfo_t.is_integral (method) - is_integral(self) -> bool - is_type_integral(get_realtype()) - -ida_typeinf.tinfo_t.is_ldouble (method) - is_ldouble(self) -> bool - is_type_ldouble(get_realtype()) - -ida_typeinf.tinfo_t.is_manually_castable_to (method) - is_manually_castable_to(self, target) -> bool - - @param target: tinfo_t const & - -ida_typeinf.tinfo_t.is_one_fpval (method) - is_one_fpval(self) -> bool - Floating value or an object consisting of one floating member entirely. - -ida_typeinf.tinfo_t.is_paf (method) - is_paf(self) -> bool - is_type_paf(get_realtype()) - -ida_typeinf.tinfo_t.is_partial (method) - is_partial(self) -> bool - is_type_partial(get_realtype()) - -ida_typeinf.tinfo_t.is_ptr (method) - is_ptr(self) -> bool - is_type_ptr(get_realtype()) - -ida_typeinf.tinfo_t.is_ptr_or_array (method) - is_ptr_or_array(self) -> bool - is_type_ptr_or_array(get_realtype()) - -ida_typeinf.tinfo_t.is_purging_cc (method) - is_purging_cc(self) -> bool - is_purging_cc(get_cc()) - -ida_typeinf.tinfo_t.is_pvoid (method) - is_pvoid(self) -> bool - Is "void *"?. This function does not check the pointer attributes and type - modifiers. - -ida_typeinf.tinfo_t.is_scalar (method) - is_scalar(self) -> bool - Does the type represent a single number? - -ida_typeinf.tinfo_t.is_shifted_ptr (method) - is_shifted_ptr(self) -> bool - Is a shifted pointer? - -ida_typeinf.tinfo_t.is_signed (method) - is_signed(self) -> bool - Is this a signed type? - -ida_typeinf.tinfo_t.is_small_udt (method) - is_small_udt(self) -> bool - Is a small udt? (can fit a register or a pair of registers) - -ida_typeinf.tinfo_t.is_sse_type (method) - is_sse_type(self) -> bool - Is a SSE vector type? - -ida_typeinf.tinfo_t.is_struct (method) - is_struct(self) -> bool - is_type_struct(get_realtype()) - -ida_typeinf.tinfo_t.is_sue (method) - is_sue(self) -> bool - is_type_sue(get_realtype()) - -ida_typeinf.tinfo_t.is_tbyte (method) - is_tbyte(self) -> bool - is_type_tbyte(get_realtype()) - -ida_typeinf.tinfo_t.is_typedef (method) - is_typedef(self) -> bool - Is this a typedef?. This function will return true for a reference to a local - type that is declared as a typedef. - -ida_typeinf.tinfo_t.is_typeref (method) - is_typeref(self) -> bool - Is this type a type reference?. - -ida_typeinf.tinfo_t.is_uchar (method) - is_uchar(self) -> bool - is_type_uchar(get_realtype()) - -ida_typeinf.tinfo_t.is_udt (method) - is_udt(self) -> bool - is_type_struni(get_realtype()) - -ida_typeinf.tinfo_t.is_uint (method) - is_uint(self) -> bool - is_type_uint(get_realtype()) - -ida_typeinf.tinfo_t.is_uint128 (method) - is_uint128(self) -> bool - is_type_uint128(get_realtype()) - -ida_typeinf.tinfo_t.is_uint16 (method) - is_uint16(self) -> bool - is_type_uint16(get_realtype()) - -ida_typeinf.tinfo_t.is_uint32 (method) - is_uint32(self) -> bool - is_type_uint32(get_realtype()) - -ida_typeinf.tinfo_t.is_uint64 (method) - is_uint64(self) -> bool - is_type_uint64(get_realtype()) - -ida_typeinf.tinfo_t.is_union (method) - is_union(self) -> bool - is_type_union(get_realtype()) - -ida_typeinf.tinfo_t.is_unknown (method) - is_unknown(self) -> bool - is_type_unknown(get_realtype()) - -ida_typeinf.tinfo_t.is_unsigned (method) - is_unsigned(self) -> bool - Is this an unsigned type? - -ida_typeinf.tinfo_t.is_user_cc (method) - is_user_cc(self) -> bool - is_user_cc(get_cc()) - -ida_typeinf.tinfo_t.is_vararg_cc (method) - is_vararg_cc(self) -> bool - is_vararg_cc(get_cc()) - -ida_typeinf.tinfo_t.is_varmember (method) - is_varmember(self) -> bool - Can the type be of a variable struct member? This function checks for: - is_array() && array.nelems==0 Such a member can be only the very last member of - a structure - -ida_typeinf.tinfo_t.is_varstruct (method) - is_varstruct(self) -> bool - Is a variable-size structure? - -ida_typeinf.tinfo_t.is_vftable (method) - is_vftable(self) -> bool - Is a vftable type? - -ida_typeinf.tinfo_t.is_void (method) - is_void(self) -> bool - is_type_void(get_realtype()) - -ida_typeinf.tinfo_t.is_volatile (method) - is_volatile(self) -> bool - is_type_volatile(get_realtype()) - -ida_typeinf.tinfo_t.is_well_defined (method) - is_well_defined(self) -> bool - !(empty()) && !(is_decl_partial()) - -ida_typeinf.tinfo_t.parse (method) - parse(self, decl, til=None, pt_flags=0) -> bool - Convenience function to parse a string with a type declaration - - @param decl: (C++: const char *) a type declaration - @param til: (C++: til_t *) type library to use - @param pt_flags: (C++: int) combination of Type parsing flags bits - -ida_typeinf.tinfo_t.present (method) - present(self) -> bool - Is the type really present? (not a reference to a missing type, for example) - -ida_typeinf.tinfo_t.read_bitfield_value (method) - read_bitfield_value(self, v, bitoff) -> uint64 - - @param v: uint64 - @param bitoff: int - -ida_typeinf.tinfo_t.remove_ptr_or_array (method) - remove_ptr_or_array(self) -> bool - Replace the current type with the ptr obj or array element. This function - performs one of the following conversions: - * type[] => type - * type* => type If the conversion is performed successfully, return true - -ida_typeinf.tinfo_t.rename_edm (method) - rename_edm(self, idx, name, etf_flags=0) -> tinfo_code_t - Rename a enum member - - @param idx: (C++: size_t) index in edmvec_t - @param name: (C++: const char *) new name - @param etf_flags: (C++: uint) etf_flag_t ETF_FORCENAME may be used in case of - TERR_ALIEN_NAME - @note: ETF_NO_SAVE is ignored - -ida_typeinf.tinfo_t.rename_type (method) - rename_type(self, name, ntf_flags=0) -> tinfo_code_t - Rename a type - - @param name: (C++: const char *) new type name - @param ntf_flags: (C++: int) Flags for named types - @note: The change is saved immediately - -ida_typeinf.tinfo_t.rename_udm (method) - rename_udm(self, index, name, etf_flags=0) -> tinfo_code_t - Rename a structure/union member. The new name must be unique. - @note: ETF_NO_SAVE is ignored - - @param index: (C++: size_t) - @param name: (C++: const char *) char const * - @param etf_flags: (C++: uint) - -ida_typeinf.tinfo_t.requires_qualifier (method) - requires_qualifier(self, name, offset) -> bool - Requires full qualifier? (name is not unique) - - @param name: (C++: const char *) field name - @param offset: (C++: uint64) field offset in bits - @return: if the name is not unique, returns true - -ida_typeinf.tinfo_t.save_type (method) - save_type(self, ntf_flags=0x0001|0x0004) -> tinfo_code_t - - @param ntf_flags: int - -ida_typeinf.tinfo_t.serialize (method) - serialize(self, sudt_flags=SUDT_FAST|SUDT_TRUNC) -> (bytes, NoneType, NoneType), (bytes, bytes, NoneType) - Serialize tinfo_t object into a type string. - - @param sudt_flags: (C++: int) - -ida_typeinf.tinfo_t.set_attr (method) - set_attr(self, ta, may_overwrite=True) -> bool - Set a type attribute. If necessary, a new typid will be created. - - @param ta: (C++: const type_attr_t &) type_attr_t const & - @param may_overwrite: (C++: bool) - -ida_typeinf.tinfo_t.set_attrs (method) - set_attrs(self, tav) -> bool - Set type attributes. If necessary, a new typid will be created. this function - modifies tav! (returns old attributes, if any) - - @param tav: (C++: type_attrs_t *) - @return: false: bad attributes - -ida_typeinf.tinfo_t.set_const (method) - set_const(self) - -ida_typeinf.tinfo_t.set_declalign (method) - set_declalign(self, declalign) -> bool - - @param declalign: uchar - -ida_typeinf.tinfo_t.set_edm_cmt (method) - set_edm_cmt(self, idx, cmt, etf_flags=0) -> tinfo_code_t - Set a comment for an enum member. Such comments are always considered as - repeatable. - - @param idx: (C++: size_t) index in edmvec_t - @param cmt: (C++: const char *) comment - @param etf_flags: (C++: uint) etf_flag_t - -ida_typeinf.tinfo_t.set_enum_is_bitmask (method) - set_enum_is_bitmask(self, stance=ENUMBM_ON, etf_flags=0) -> tinfo_code_t - - @param stance: enum tinfo_t::bitmask_cvt_stance_t - @param etf_flags: uint - -ida_typeinf.tinfo_t.set_enum_repr (method) - set_enum_repr(self, repr, etf_flags=0) -> tinfo_code_t - Set the representation of enum members. - - @param repr: (C++: const value_repr_t &) value_repr_t - @param etf_flags: (C++: uint) etf_flag_t - -ida_typeinf.tinfo_t.set_enum_sign (method) - set_enum_sign(self, sign, etf_flags=0) -> tinfo_code_t - Set enum sign - - @param sign: (C++: type_sign_t) - @param etf_flags: (C++: uint) etf_flag_t - -ida_typeinf.tinfo_t.set_enum_width (method) - set_enum_width(self, nbytes, etf_flags=0) -> tinfo_code_t - Set the width of enum base type - - @param nbytes: (C++: int) width of enum base type, allowed values: 0 - (unspecified),1,2,4,8,16,32,64 - @param etf_flags: (C++: uint) etf_flag_t - -ida_typeinf.tinfo_t.set_methods (method) - set_methods(self, methods) -> bool - - @param BT_COMPLEX: set the list of member functions. This function consumes 'methods' - (makes it empty). - @return: false if this type is not a udt, or if the given list is empty - -ida_typeinf.tinfo_t.set_modifiers (method) - set_modifiers(self, mod) - - @param mod: type_t - -ida_typeinf.tinfo_t.set_named_type (method) - set_named_type(self, til, name, ntf_flags=0) -> tinfo_code_t - - @param til: til_t * - @param name: char const * - @param ntf_flags: int - -ida_typeinf.tinfo_t.set_numbered_type (method) - set_numbered_type(self, til, ord, ntf_flags=0, name=None) -> tinfo_code_t - - @param til: til_t * - @param ord: uint32 - @param ntf_flags: int - @param name: char const * - -ida_typeinf.tinfo_t.set_symbol_type (method) - set_symbol_type(self, til, name, ntf_flags=0) -> tinfo_code_t - - @param til: til_t * - @param name: char const * - @param ntf_flags: int - -ida_typeinf.tinfo_t.set_type_alias (method) - set_type_alias(self, dest_ord) -> bool - Set type alias Redirects all references to source type to the destination type. - This is equivalent to instantaneous replacement all references to srctype by - dsttype. - - @param dest_ord: (C++: uint32) - -ida_typeinf.tinfo_t.set_type_alignment (method) - set_type_alignment(self, declalign, etf_flags=0) -> tinfo_code_t - Set type alignment. - - @param declalign: (C++: uchar) - @param etf_flags: (C++: uint) - -ida_typeinf.tinfo_t.set_type_cmt (method) - set_type_cmt(self, cmt, is_regcmt=False, etf_flags=0) -> tinfo_code_t - Set type comment This function works only for non-trivial types - - @param cmt: (C++: const char *) char const * - @param is_regcmt: (C++: bool) - @param etf_flags: (C++: uint) - -ida_typeinf.tinfo_t.set_udm_cmt (method) - set_udm_cmt(self, index, cmt, is_regcmt=False, etf_flags=0) -> tinfo_code_t - Set a comment for a structure/union member. A member may have just one comment, - and it is either repeatable or regular. - - @param index: (C++: size_t) - @param cmt: (C++: const char *) char const * - @param is_regcmt: (C++: bool) - @param etf_flags: (C++: uint) - -ida_typeinf.tinfo_t.set_udm_repr (method) - set_udm_repr(self, index, repr, etf_flags=0) -> tinfo_code_t - Set the representation of a structure/union member. - - @param index: (C++: size_t) - @param repr: (C++: const value_repr_t &) value_repr_t const & - @param etf_flags: (C++: uint) - -ida_typeinf.tinfo_t.set_udm_type (method) - set_udm_type(self, index, tif, etf_flags=0, repr=None) -> tinfo_code_t - Set type of a structure/union member. - - @param index: (C++: size_t) member index in the udm array - @param tif: (C++: const tinfo_t &) new type for the member - @param etf_flags: (C++: uint) etf_flag_t - @param repr: (C++: const value_repr_t *) new representation for the member (optional) - @return: tinfo_code_t - -ida_typeinf.tinfo_t.set_udt_alignment (method) - set_udt_alignment(self, sda, etf_flags=0) -> tinfo_code_t - Set declared structure alignment (sda) This alignment supersedes the alignment - returned by get_declalign() and is really used when calculating the struct - layout. However, the effective structure alignment may differ from `sda` because - of packing. The type editing functions (they accept etf_flags) may overwrite - this attribute. - - @param sda: (C++: int) - @param etf_flags: (C++: uint) - -ida_typeinf.tinfo_t.set_udt_pack (method) - set_udt_pack(self, pack, etf_flags=0) -> tinfo_code_t - Set structure packing. The value controls how little a structure member - alignment can be. Example: if pack=1, then it is possible to align a double to a - byte. __attribute__((aligned(1))) double x; However, if pack=3, a double will be - aligned to 8 (2**3) even if requested to be aligned to a byte. pack==0 will have - the same effect. The type editing functions (they accept etf_flags) may - overwrite this attribute. - - @param pack: (C++: int) - @param etf_flags: (C++: uint) - -ida_typeinf.tinfo_t.set_volatile (method) - set_volatile(self) - -ida_typeinf.tinfo_t.swap (method) - swap(self, r) - Assign this = r and r = this. - - @param r: (C++: tinfo_t &) - -ida_typeinf.tinfo_t.write_bitfield_value (method) - write_bitfield_value(self, dst, v, bitoff) -> uint64 - - @param dst: uint64 - @param v: uint64 - @param bitoff: int - -ida_typeinf.tinfo_t_get_stock (function) - tinfo_t_get_stock(id) -> tinfo_t - - @param id: enum stock_type_id_t - -ida_typeinf.tinfo_visitor_t (class) - Proxy of C++ tinfo_visitor_t class. - -ida_typeinf.tinfo_visitor_t.__disown__ (method) - -ida_typeinf.tinfo_visitor_t.__init__ (method) - __init__(self, s=0) -> tinfo_visitor_t - - @param s: int - -ida_typeinf.tinfo_visitor_t.apply_to (method) - apply_to(self, tif, out=None, name=None, cmt=None) -> int - Call this function to initiate the traversal. - - @param tif: (C++: const tinfo_t &) tinfo_t const & - @param out: (C++: type_mods_t *) - @param name: (C++: const char *) char const * - @param cmt: (C++: const char *) char const * - -ida_typeinf.tinfo_visitor_t.prune_now (method) - prune_now(self) - To refuse to visit children of the current type, use this: - -ida_typeinf.tinfo_visitor_t.state (variable) - tinfo visitor states - -ida_typeinf.tinfo_visitor_t.visit_type (method) - visit_type(self, out, tif, name, cmt) -> int - Visit a subtype. this function must be implemented in the derived class. it may - optionally fill out with the new type info. this can be used to modify types (in - this case the 'out' argument of apply_to() may not be nullptr) return 0 to - continue the traversal. return !=0 to stop the traversal. - - @param out: (C++: type_mods_t *) - @param tif: (C++: const tinfo_t &) tinfo_t const & - @param name: (C++: const char *) char const * - @param cmt: (C++: const char *) char const * - -ida_typeinf.type_attr_t (class) - Proxy of C++ type_attr_t class. - -ida_typeinf.type_attr_t.__ge__ (method) - __ge__(self, r) -> bool - - @param r: type_attr_t const & - -ida_typeinf.type_attr_t.__init__ (method) - __init__(self) -> type_attr_t - -ida_typeinf.type_attr_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: type_attr_t const & - -ida_typeinf.type_attr_t.key (variable) - one symbol keys are reserved to be used by the kernel the ones starting with an - underscore are reserved too - -ida_typeinf.type_attr_t.value (variable) - attribute bytes - -ida_typeinf.type_attrs_t (class) - Proxy of C++ qvector< type_attr_t > class. - -ida_typeinf.type_attrs_t.__getitem__ (method) - __getitem__(self, i) -> type_attr_t - - @param i: size_t - -ida_typeinf.type_attrs_t.__init__ (method) - __init__(self) -> type_attrs_t - __init__(self, x) -> type_attrs_t - - @param x: qvector< type_attr_t > const & - -ida_typeinf.type_attrs_t.__len__ (method) - __len__(self) -> size_t - -ida_typeinf.type_attrs_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: type_attr_t const & - -ida_typeinf.type_attrs_t.at (method) - at(self, _idx) -> type_attr_t - - @param _idx: size_t - -ida_typeinf.type_attrs_t.begin (method) - begin(self) -> type_attr_t - -ida_typeinf.type_attrs_t.capacity (method) - capacity(self) -> size_t - -ida_typeinf.type_attrs_t.clear (method) - clear(self) - -ida_typeinf.type_attrs_t.empty (method) - empty(self) -> bool - -ida_typeinf.type_attrs_t.end (method) - end(self) -> type_attr_t - -ida_typeinf.type_attrs_t.erase (method) - erase(self, it) -> type_attr_t - - @param it: qvector< type_attr_t >::iterator - - erase(self, first, last) -> type_attr_t - - @param first: qvector< type_attr_t >::iterator - @param last: qvector< type_attr_t >::iterator - -ida_typeinf.type_attrs_t.extract (method) - extract(self) -> type_attr_t - -ida_typeinf.type_attrs_t.grow (method) - grow(self, x=type_attr_t()) - - @param x: type_attr_t const & - -ida_typeinf.type_attrs_t.inject (method) - inject(self, s, len) - - @param s: type_attr_t * - @param len: size_t - -ida_typeinf.type_attrs_t.insert (method) - insert(self, it, x) -> type_attr_t - - @param it: qvector< type_attr_t >::iterator - @param x: type_attr_t const & - -ida_typeinf.type_attrs_t.pop_back (method) - pop_back(self) - -ida_typeinf.type_attrs_t.push_back (method) - push_back(self, x) - - @param x: type_attr_t const & - - push_back(self) -> type_attr_t - -ida_typeinf.type_attrs_t.qclear (method) - qclear(self) - -ida_typeinf.type_attrs_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_typeinf.type_attrs_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: type_attr_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_typeinf.type_attrs_t.size (method) - size(self) -> size_t - -ida_typeinf.type_attrs_t.swap (method) - swap(self, r) - - @param r: qvector< type_attr_t > & - -ida_typeinf.type_attrs_t.truncate (method) - truncate(self) - -ida_typeinf.type_mods_t (class) - Proxy of C++ type_mods_t class. - -ida_typeinf.type_mods_t.__init__ (method) - __init__(self) -> type_mods_t - -ida_typeinf.type_mods_t.clear (method) - clear(self) - -ida_typeinf.type_mods_t.cmt (variable) - comment for current type - -ida_typeinf.type_mods_t.flags (variable) - Type modification bits - -ida_typeinf.type_mods_t.has_cmt (method) - has_cmt(self) -> bool - -ida_typeinf.type_mods_t.has_info (method) - has_info(self) -> bool - -ida_typeinf.type_mods_t.has_name (method) - has_name(self) -> bool - -ida_typeinf.type_mods_t.has_type (method) - has_type(self) -> bool - -ida_typeinf.type_mods_t.is_rptcmt (method) - is_rptcmt(self) -> bool - -ida_typeinf.type_mods_t.name (variable) - current type name - -ida_typeinf.type_mods_t.set_new_cmt (method) - set_new_cmt(self, c, rptcmt) - - @param c: qstring const & - @param rptcmt: bool - -ida_typeinf.type_mods_t.set_new_name (method) - set_new_name(self, n) - - @param n: qstring const & - -ida_typeinf.type_mods_t.set_new_type (method) - set_new_type(self, t) - The visit_type() function may optionally save the modified type info. Use the - following functions for that. The new name and comment will be applied only if - the current tinfo element has storage for them. - - @param t: (C++: const tinfo_t &) tinfo_t const & - -ida_typeinf.type_mods_t.type (variable) - current type - -ida_typeinf.type_signed (variable) - signed type - -ida_typeinf.type_unsigned (variable) - unsigned type - -ida_typeinf.typedef_type_data_t (class) - Proxy of C++ typedef_type_data_t class. - -ida_typeinf.typedef_type_data_t.__init__ (method) - __init__(self, _til, _name, _resolve=False) -> typedef_type_data_t - - @param _til: til_t const * - @param _name: char const * - @param _resolve: bool - - __init__(self, _til, ord, _resolve=False) -> typedef_type_data_t - - @param _til: til_t const * - @param ord: uint32 - @param _resolve: bool - -ida_typeinf.typedef_type_data_t.is_ordref (variable) - is reference by ordinal? - -ida_typeinf.typedef_type_data_t.name (variable) - is_ordref=false: target type name. we do not own this pointer! - -ida_typeinf.typedef_type_data_t.ordinal (variable) - is_ordref=true: type ordinal number - -ida_typeinf.typedef_type_data_t.resolve (variable) - should resolve immediately? - -ida_typeinf.typedef_type_data_t.swap (method) - swap(self, r) - - @param r: typedef_type_data_t & - -ida_typeinf.typedef_type_data_t.til (variable) - type library to use when resolving - -ida_typeinf.udm_t (class) - Proxy of C++ udm_t class. - -ida_typeinf.udm_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: udm_t const & - -ida_typeinf.udm_t.__init__ (method) - __init__(self) -> udm_t - -ida_typeinf.udm_t.__lt__ (method) - __lt__(self, r) -> bool - - @param r: udm_t const & - -ida_typeinf.udm_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: udm_t const & - -ida_typeinf.udm_t.begin (method) - begin(self) -> uint64 - -ida_typeinf.udm_t.can_be_dtor (method) - can_be_dtor(self) -> bool - -ida_typeinf.udm_t.can_rename (method) - can_rename(self) -> bool - -ida_typeinf.udm_t.clr_baseclass (method) - clr_baseclass(self) - -ida_typeinf.udm_t.clr_method (method) - clr_method(self) - -ida_typeinf.udm_t.clr_unaligned (method) - clr_unaligned(self) - -ida_typeinf.udm_t.clr_vftable (method) - clr_vftable(self) - -ida_typeinf.udm_t.clr_virtbase (method) - clr_virtbase(self) - -ida_typeinf.udm_t.cmt (variable) - member comment - -ida_typeinf.udm_t.effalign (variable) - effective field alignment (in bytes) - -ida_typeinf.udm_t.end (method) - end(self) -> uint64 - -ida_typeinf.udm_t.fda (variable) - field alignment (shift amount) - -ida_typeinf.udm_t.is_anonymous_udm (method) - is_anonymous_udm(self) -> bool - -ida_typeinf.udm_t.is_baseclass (method) - is_baseclass(self) -> bool - -ida_typeinf.udm_t.is_bitfield (method) - is_bitfield(self) -> bool - -ida_typeinf.udm_t.is_gap (method) - is_gap(self) -> bool - -ida_typeinf.udm_t.is_method (method) - is_method(self) -> bool - -ida_typeinf.udm_t.is_regcmt (method) - is_regcmt(self) -> bool - -ida_typeinf.udm_t.is_unaligned (method) - is_unaligned(self) -> bool - -ida_typeinf.udm_t.is_vftable (method) - is_vftable(self) -> bool - -ida_typeinf.udm_t.is_virtbase (method) - is_virtbase(self) -> bool - -ida_typeinf.udm_t.is_zero_bitfield (method) - is_zero_bitfield(self) -> bool - -ida_typeinf.udm_t.make_gap (method) - make_gap(self, byteoff, nbytes) -> bool - - @param byteoff: uval_t - @param nbytes: uval_t - -ida_typeinf.udm_t.name (variable) - member name - -ida_typeinf.udm_t.offset (variable) - member offset in bits - -ida_typeinf.udm_t.repr (variable) - radix, refinfo, strpath, custom_id, strtype - -ida_typeinf.udm_t.set_baseclass (method) - set_baseclass(self, on=True) - - @param on: bool - -ida_typeinf.udm_t.set_method (method) - set_method(self, on=True) - - @param on: bool - -ida_typeinf.udm_t.set_regcmt (method) - set_regcmt(self, on=True) - - @param on: bool - -ida_typeinf.udm_t.set_unaligned (method) - set_unaligned(self, on=True) - - @param on: bool - -ida_typeinf.udm_t.set_value_repr (method) - set_value_repr(self, r) - - @param r: value_repr_t const & - -ida_typeinf.udm_t.set_vftable (method) - set_vftable(self, on=True) - - @param on: bool - -ida_typeinf.udm_t.set_virtbase (method) - set_virtbase(self, on=True) - - @param on: bool - -ida_typeinf.udm_t.size (variable) - size in bits - -ida_typeinf.udm_t.swap (method) - swap(self, r) - - @param r: udm_t & - -ida_typeinf.udm_t.tafld_bits (variable) - TAH bits. - -ida_typeinf.udm_t.type (variable) - member type - -ida_typeinf.udm_t__make_gap (function) - udm_t__make_gap(_this, byteoff, nbytes) -> bool - - @param _this: udm_t * - @param byteoff: uval_t - @param nbytes: uval_t - -ida_typeinf.udt_type_data_t (class) - Proxy of C++ udt_type_data_t class. - -ida_typeinf.udt_type_data_t.__init__ (method) - __init__(self) -> udt_type_data_t - -ida_typeinf.udt_type_data_t.effalign (variable) - effective structure alignment (in bytes) - -ida_typeinf.udt_type_data_t.find_member (method) - find_member(self, pattern_udm, strmem_flags) -> ssize_t - - @param pattern_udm: udm_t * - @param strmem_flags: int - - find_member(self, name) -> ssize_t - - @param name: char const * - - find_member(self, bit_offset) -> ssize_t - - @param bit_offset: uint64 - -ida_typeinf.udt_type_data_t.get_best_fit_member (method) - get_best_fit_member(self, disp) -> ssize_t - Get member that is most likely referenced by the specified offset. Useful for - offsets > sizeof(struct). - - @param disp: (C++: asize_t) - -ida_typeinf.udt_type_data_t.is_cppobj (method) - is_cppobj(self) -> bool - -ida_typeinf.udt_type_data_t.is_last_baseclass (method) - is_last_baseclass(self, idx) -> bool - - @param idx: size_t - -ida_typeinf.udt_type_data_t.is_msstruct (method) - is_msstruct(self) -> bool - -ida_typeinf.udt_type_data_t.is_unaligned (method) - is_unaligned(self) -> bool - -ida_typeinf.udt_type_data_t.is_union (variable) - is union or struct? - -ida_typeinf.udt_type_data_t.is_vftable (method) - is_vftable(self) -> bool - -ida_typeinf.udt_type_data_t.pack (variable) - #pragma pack() alignment (shift amount) - -ida_typeinf.udt_type_data_t.sda (variable) - declared structure alignment (shift amount+1). 0 - unspecified - -ida_typeinf.udt_type_data_t.set_vftable (method) - set_vftable(self, on=True) - - @param on: bool - -ida_typeinf.udt_type_data_t.swap (method) - swap(self, r) - - @param r: udt_type_data_t & - -ida_typeinf.udt_type_data_t.taudt_bits (variable) - TA... and TAUDT... bits. - -ida_typeinf.udt_type_data_t.total_size (variable) - total structure size in bytes - -ida_typeinf.udt_type_data_t.unpadded_size (variable) - unpadded structure size in bytes - -ida_typeinf.udt_type_data_t.version (variable) - version of udt_type_data_t - -ida_typeinf.udt_type_data_t__find_member (function) - udt_type_data_t__find_member(_this, udm, strmem_flags) -> ssize_t - - @param _this: udt_type_data_t const * - @param udm: udm_t * - @param strmem_flags: int - -ida_typeinf.udt_type_data_t__get_best_fit_member (function) - udt_type_data_t__get_best_fit_member(_this, disp) -> ssize_t - - @param _this: udt_type_data_t const * - @param disp: asize_t - -ida_typeinf.udtmembervec_t (class) - Proxy of C++ udtmembervec_t class. - -ida_typeinf.udtmembervec_t.__init__ (method) - __init__(self) -> udtmembervec_t - -ida_typeinf.udtmembervec_template_t (class) - Proxy of C++ qvector< udm_t > class. - -ida_typeinf.udtmembervec_template_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< udm_t > const & - -ida_typeinf.udtmembervec_template_t.__getitem__ (method) - __getitem__(self, i) -> udm_t - - @param i: size_t - -ida_typeinf.udtmembervec_template_t.__init__ (method) - __init__(self) -> udtmembervec_template_t - __init__(self, x) -> udtmembervec_template_t - - @param x: qvector< udm_t > const & - -ida_typeinf.udtmembervec_template_t.__len__ (method) - __len__(self) -> size_t - -ida_typeinf.udtmembervec_template_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< udm_t > const & - -ida_typeinf.udtmembervec_template_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: udm_t const & - -ida_typeinf.udtmembervec_template_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: udm_t const & - -ida_typeinf.udtmembervec_template_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: udm_t const & - -ida_typeinf.udtmembervec_template_t.at (method) - at(self, _idx) -> udm_t - - @param _idx: size_t - -ida_typeinf.udtmembervec_template_t.begin (method) - begin(self) -> udm_t - -ida_typeinf.udtmembervec_template_t.capacity (method) - capacity(self) -> size_t - -ida_typeinf.udtmembervec_template_t.clear (method) - clear(self) - -ida_typeinf.udtmembervec_template_t.empty (method) - empty(self) -> bool - -ida_typeinf.udtmembervec_template_t.end (method) - end(self) -> udm_t - -ida_typeinf.udtmembervec_template_t.erase (method) - erase(self, it) -> udm_t - - @param it: qvector< udm_t >::iterator - - erase(self, first, last) -> udm_t - - @param first: qvector< udm_t >::iterator - @param last: qvector< udm_t >::iterator - -ida_typeinf.udtmembervec_template_t.extract (method) - extract(self) -> udm_t - -ida_typeinf.udtmembervec_template_t.find (method) - find(self, x) -> udm_t - - @param x: udm_t const & - -ida_typeinf.udtmembervec_template_t.grow (method) - grow(self, x=udm_t()) - - @param x: udm_t const & - -ida_typeinf.udtmembervec_template_t.has (method) - has(self, x) -> bool - - @param x: udm_t const & - -ida_typeinf.udtmembervec_template_t.inject (method) - inject(self, s, len) - - @param s: udm_t * - @param len: size_t - -ida_typeinf.udtmembervec_template_t.insert (method) - insert(self, it, x) -> udm_t - - @param it: qvector< udm_t >::iterator - @param x: udm_t const & - -ida_typeinf.udtmembervec_template_t.pop_back (method) - pop_back(self) - -ida_typeinf.udtmembervec_template_t.push_back (method) - push_back(self, x) - - @param x: udm_t const & - - push_back(self) -> udm_t - -ida_typeinf.udtmembervec_template_t.qclear (method) - qclear(self) - -ida_typeinf.udtmembervec_template_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_typeinf.udtmembervec_template_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: udm_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_typeinf.udtmembervec_template_t.size (method) - size(self) -> size_t - -ida_typeinf.udtmembervec_template_t.swap (method) - swap(self, r) - - @param r: qvector< udm_t > & - -ida_typeinf.udtmembervec_template_t.truncate (method) - truncate(self) - -ida_typeinf.unpack_idcobj_from_bv (function) - 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 &) tinfo_t const & - @param bytes: (C++: const bytevec_t &) bytevec_t const & - @param pio_flags: (C++: int) - -ida_typeinf.unpack_idcobj_from_idb (function) - 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 &) tinfo_t const & - @param ea: (C++: ea_t) - @param off0: (C++: const bytevec_t *) bytevec_t const * - @param pio_flags: (C++: int) - -ida_typeinf.unpack_object_from_bv (function) - 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 type: type_t const * - @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 (function) - unpack_object_from_idb(ti, type, fields, ea, pio_flags=0) -> PyObject * - - @param ti: til_t * - @param type: type_t const * - @param fields: p_list const * - @param ea: ea_t - @param pio_flags: int - -ida_typeinf.use_golang_cc (function) - use_golang_cc() -> bool - is GOLANG calling convention used by default? - -ida_typeinf.valstr_t (class) - Proxy of C++ valstr_t class. - -ida_typeinf.valstr_t.__init__ (method) - __init__(self) -> valstr_t - -ida_typeinf.valstr_t.info (variable) - additional info - -ida_typeinf.valstr_t.length (variable) - length if printed on one line - -ida_typeinf.valstr_t.members (variable) - strings for members, each member separately - -ida_typeinf.valstr_t.oneline (variable) - result if printed on one line in UTF-8 encoding - -ida_typeinf.valstr_t.props (variable) - temporary properties, used internally - -ida_typeinf.valstrs_t (class) - Proxy of C++ valstrs_t class. - -ida_typeinf.valstrs_t.__init__ (method) - __init__(self) -> valstrs_t - -ida_typeinf.valstrvec_t (class) - Proxy of C++ qvector< valstr_t > class. - -ida_typeinf.valstrvec_t.__getitem__ (method) - __getitem__(self, i) -> valstr_t - - @param i: size_t - -ida_typeinf.valstrvec_t.__init__ (method) - __init__(self) -> valstrvec_t - __init__(self, x) -> valstrvec_t - - @param x: qvector< valstr_t > const & - -ida_typeinf.valstrvec_t.__len__ (method) - __len__(self) -> size_t - -ida_typeinf.valstrvec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: valstr_t const & - -ida_typeinf.valstrvec_t.at (method) - at(self, _idx) -> valstr_t - - @param _idx: size_t - -ida_typeinf.valstrvec_t.begin (method) - begin(self) -> valstr_t - -ida_typeinf.valstrvec_t.capacity (method) - capacity(self) -> size_t - -ida_typeinf.valstrvec_t.clear (method) - clear(self) - -ida_typeinf.valstrvec_t.empty (method) - empty(self) -> bool - -ida_typeinf.valstrvec_t.end (method) - end(self) -> valstr_t - -ida_typeinf.valstrvec_t.erase (method) - erase(self, it) -> valstr_t - - @param it: qvector< valstr_t >::iterator - - erase(self, first, last) -> valstr_t - - @param first: qvector< valstr_t >::iterator - @param last: qvector< valstr_t >::iterator - -ida_typeinf.valstrvec_t.extract (method) - extract(self) -> valstr_t - -ida_typeinf.valstrvec_t.grow (method) - grow(self, x=valstr_t()) - - @param x: valstr_t const & - -ida_typeinf.valstrvec_t.inject (method) - inject(self, s, len) - - @param s: valstr_t * - @param len: size_t - -ida_typeinf.valstrvec_t.insert (method) - insert(self, it, x) -> valstr_t - - @param it: qvector< valstr_t >::iterator - @param x: valstr_t const & - -ida_typeinf.valstrvec_t.pop_back (method) - pop_back(self) - -ida_typeinf.valstrvec_t.push_back (method) - push_back(self, x) - - @param x: valstr_t const & - - push_back(self) -> valstr_t - -ida_typeinf.valstrvec_t.qclear (method) - qclear(self) - -ida_typeinf.valstrvec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_typeinf.valstrvec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: valstr_t const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_typeinf.valstrvec_t.size (method) - size(self) -> size_t - -ida_typeinf.valstrvec_t.swap (method) - swap(self, r) - - @param r: qvector< valstr_t > & - -ida_typeinf.valstrvec_t.truncate (method) - truncate(self) - -ida_typeinf.value_repr_t (class) - Proxy of C++ value_repr_t class. - -ida_typeinf.value_repr_t.__init__ (method) - __init__(self) -> value_repr_t - -ida_typeinf.value_repr_t.__str__ (method) - __str__(self) -> qstring - -ida_typeinf.value_repr_t._print (method) - _print(self, colored=False) -> size_t - - Parameters - ---------- - colored: bool - -ida_typeinf.value_repr_t.ap (variable) - FRB_TABFORM, AP_SIGNED is ignored, use FRB_SIGNED instead - -ida_typeinf.value_repr_t.cd (variable) - FRB_CUSTOM. - -ida_typeinf.value_repr_t.clear (method) - clear(self) - -ida_typeinf.value_repr_t.delta (variable) - FRB_STROFF. - -ida_typeinf.value_repr_t.empty (method) - empty(self) -> bool - -ida_typeinf.value_repr_t.from_opinfo (method) - from_opinfo(self, flags, afl, opinfo, _ap) -> bool - - @param flags: flags64_t - @param afl: aflags_t - @param opinfo: opinfo_t const * - @param _ap: array_parameters_t const * - -ida_typeinf.value_repr_t.get_vtype (method) - get_vtype(self) -> uint64 - -ida_typeinf.value_repr_t.has_lzeroes (method) - has_lzeroes(self) -> bool - -ida_typeinf.value_repr_t.has_tabform (method) - has_tabform(self) -> bool - -ida_typeinf.value_repr_t.init_ap (method) - init_ap(self, _ap) - - @param _ap: array_parameters_t * - -ida_typeinf.value_repr_t.is_custom (method) - is_custom(self) -> bool - -ida_typeinf.value_repr_t.is_enum (method) - is_enum(self) -> bool - -ida_typeinf.value_repr_t.is_offset (method) - is_offset(self) -> bool - -ida_typeinf.value_repr_t.is_signed (method) - is_signed(self) -> bool - -ida_typeinf.value_repr_t.is_strlit (method) - is_strlit(self) -> bool - -ida_typeinf.value_repr_t.is_stroff (method) - is_stroff(self) -> bool - -ida_typeinf.value_repr_t.is_typref (method) - is_typref(self) -> bool - -ida_typeinf.value_repr_t.parse_value_repr (method) - parse_value_repr(self, attr, target_type=BTF_STRUCT) -> bool - - @param attr: qstring const & - @param target_type: type_t - -ida_typeinf.value_repr_t.ri (variable) - FRB_OFFSET. - -ida_typeinf.value_repr_t.set_ap (method) - set_ap(self, _ap) - - @param _ap: array_parameters_t const & - -ida_typeinf.value_repr_t.set_lzeroes (method) - set_lzeroes(self, on) - - @param on: bool - -ida_typeinf.value_repr_t.set_signed (method) - set_signed(self, on) - - @param on: bool - -ida_typeinf.value_repr_t.set_tabform (method) - set_tabform(self, on) - - @param on: bool - -ida_typeinf.value_repr_t.set_vtype (method) - set_vtype(self, vt) - - @param vt: uint64 - -ida_typeinf.value_repr_t.strtype (variable) - FRB_STRLIT. - -ida_typeinf.value_repr_t.swap (method) - swap(self, r) - - @param r: value_repr_t & - -ida_typeinf.value_repr_t.type_ordinal (variable) - FRB_STROFF, FRB_ENUM. - -ida_typeinf.value_repr_t__from_opinfo (function) - value_repr_t__from_opinfo(_this, flags, afl, opinfo, ap) -> bool - - @param _this: value_repr_t * - @param flags: flags64_t - @param afl: aflags_t - @param opinfo: opinfo_t const * - @param ap: array_parameters_t const * - -ida_typeinf.value_repr_t__print_ (function) - value_repr_t__print_(_this, colored) -> str - - @param _this: value_repr_t const * - @param colored: bool - -ida_typeinf.verify_argloc (function) - verify_argloc(vloc, size, gaps) -> int - Verify argloc_t. - - @param vloc: (C++: const argloc_t &) argloc to verify - @param size: (C++: int) total size of the variable - @param gaps: (C++: const rangeset_t *) if not nullptr, specifies gaps in structure definition. these gaps - should not map to any argloc, but everything else must be covered - @return: 0 if ok, otherwise an interr code. - -ida_typeinf.verify_tinfo (function) - verify_tinfo(typid) -> int - - @param typid: uint32 - -ida_typeinf.visit_subtypes (function) - visit_subtypes(visitor, out, tif, name, cmt) -> int - - @param visitor: tinfo_visitor_t * - @param out: type_mods_t * - @param tif: tinfo_t const & - @param name: char const * - @param cmt: char const * - -ida_typeinf.write_tinfo_bitfield_value (function) - write_tinfo_bitfield_value(typid, dst, v, bitoff) -> uint64 - - @param typid: uint32 - @param dst: uint64 - @param v: uint64 - @param bitoff: int - -ida_ua (module) - Functions that deal with the disassembling of program instructions. - - There are 2 kinds of functions: - * functions that are called from the kernel to disassemble an instruction. These - functions call IDP module for it. - * functions that are called from IDP module to disassemble an instruction. We - will call them 'helper functions'. - - Disassembly of an instruction is made in three steps: - 1. analysis: ana.cpp - 2. emulation: emu.cpp - 3. conversion to text: out.cpp - - The kernel calls the IDP module to perform these steps. At first, the kernel - always calls the analysis. The analyzer must decode the instruction and fill the - insn_t instance that it receives through its callback. It must not change - anything in the database. - - The second step, the emulation, is called for each instruction. This step must - make necessary changes to the database, plan analysis of subsequent - instructions, track register values, memory contents, etc. Please keep in mind - that the kernel may call the emulation step for any address in the program - - there is no ordering of addresses. Usually, the emulation is called for - consecutive addresses but this is not guaranteed. - - The last step, conversion to text, is called each time an instruction is - displayed on the screen. The kernel will always call the analysis step before - calling the text conversion step. The emulation and the text conversion steps - should use the information stored in the insn_t instance they receive. They - should not access the bytes of the instruction and decode it again - this should - only be done in the analysis step. - -ida_ua.FCBF_CONT (variable) - don't stop on decoding, or any other kind of error - -ida_ua.FCBF_DELIM (variable) - 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 (variable) - in case of an error, use a CP_REPLCHAR instead of a hex representation of the - problematic byte - -ida_ua.FCBF_FF_LIT (variable) - 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 (variable) - belongs to 64bit segment? - -ida_ua.INSN_MACRO (variable) - macro instruction - -ida_ua.INSN_MODMAC (variable) - may modify the database to make room for the macro insn - -ida_ua.OF_NO_BASE_DISP (variable) - 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 (variable) - the operand can be converted to a number only - -ida_ua.OF_OUTER_DISP (variable) - outer displacement exists. meaningful only for o_displ type. if set, outer - displacement (op_t::value) exists. - -ida_ua.OF_SHOW (variable) - should the operand be displayed? - -ida_ua.OOFS_IFSIGN (variable) - output sign if needed - -ida_ua.OOFS_NEEDSIGN (variable) - always out sign (+-) - -ida_ua.OOFS_NOSIGN (variable) - don't output sign, forbid the user to change the sign - -ida_ua.OOFW_16 (variable) - 16 bit width - -ida_ua.OOFW_24 (variable) - 24 bit width - -ida_ua.OOFW_32 (variable) - 32 bit width - -ida_ua.OOFW_64 (variable) - 64 bit width - -ida_ua.OOFW_8 (variable) - 8 bit width - -ida_ua.OOFW_IMM (variable) - take from x.dtype - -ida_ua.OOF_ADDR (variable) - output x.addr, otherwise x.value - -ida_ua.OOF_ANYSERIAL (variable) - if enum: select first available serial - -ida_ua.OOF_LZEROES (variable) - print leading zeroes - -ida_ua.OOF_NOBNOT (variable) - prohibit use of binary not - -ida_ua.OOF_NO_LZEROES (variable) - do not print leading zeroes; if none of OOF_LZEROES and OOF_NO_LZEROES was - specified, is_lzero() is used - -ida_ua.OOF_NUMBER (variable) - always as a number - -ida_ua.OOF_OUTER (variable) - output outer operand - -ida_ua.OOF_SIGNED (variable) - output as signed if < 0 - -ida_ua.OOF_SIGNMASK (variable) - sign symbol (+/-) output - -ida_ua.OOF_SPACES (variable) - do not suppress leading spaces; currently works only for floating point numbers - -ida_ua.OOF_WIDTHMASK (variable) - width of value in bits - -ida_ua.OOF_ZSTROFF (variable) - meaningful only if is_stroff(F); 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 (variable) - packed factor defined. (!o_reg + dt_packreal) - -ida_ua.STKVAR_VALID_SIZE (variable) - x.dtype 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_ua.calc_dataseg (function) - 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 &) an ida_ua.insn_t, or an address (C++: const insn_t &) - @param n: (C++: int) - @param rgnum: (C++: int) - -ida_ua.can_decode (function) - can_decode(ea) -> bool - Can the bytes at address 'ea' be decoded as instruction? - - @param ea: (C++: ea_t) linear address - @return: whether or not the contents at that address could be a valid - instruction - -ida_ua.construct_macro (function) - construct_macro(insn, enable, build_macro) -> bool - See ua.hpp's construct_macro(). - - @param insn: insn_t & - @param enable: bool - @param build_macro: PyObject * - -ida_ua.construct_macro2 (function) - construct_macro2(_this, insn, enable) -> bool - - @param _this: macro_constructor_t * - @param insn: insn_t * - @param enable: bool - -ida_ua.create_insn (function) - 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: (C++: ea_t) linear address - @param out: (C++: insn_t *) the resulting instruction - @return: the length of the instruction or 0 - -ida_ua.create_outctx (function) - 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++: flags64_t) - @param suspop: (C++: int) - -ida_ua.decode_insn (function) - 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: (C++: insn_t *) the resulting instruction - @param ea: (C++: ea_t) linear address - @return: the length of the (possible) instruction or 0 - -ida_ua.decode_preceding_insn (function) - decode_preceding_insn(out, ea) -> (int, int) - Decodes the preceding instruction. Please check ua.hpp / decode_preceding_insn() - - @param out: instruction storage - @param ea: current ea - @return: tuple(preceeding_ea or BADADDR, farref = Boolean) - -ida_ua.decode_prev_insn (function) - decode_prev_insn(out, ea) -> ea_t - Decode previous instruction if it exists, fill 'out'. - - @param out: (C++: insn_t *) the resulting instruction - @param ea: (C++: ea_t) the address to decode the previous instruction from - @return: the previous instruction address (BADADDR-no such insn) - -ida_ua.dt_bitfild (variable) - bit field (mc680x0) - -ida_ua.dt_byte (variable) - 8 bit integer - -ida_ua.dt_byte16 (variable) - 128 bit integer - -ida_ua.dt_byte32 (variable) - 256 bit integer - -ida_ua.dt_byte64 (variable) - 512 bit integer - -ida_ua.dt_code (variable) - ptr to code (not used?) - -ida_ua.dt_double (variable) - 8 byte floating point - -ida_ua.dt_dword (variable) - 32 bit integer - -ida_ua.dt_float (variable) - 4 byte floating point - -ida_ua.dt_fword (variable) - 48 bit - -ida_ua.dt_half (variable) - 2-byte floating point - -ida_ua.dt_ldbl (variable) - long double (which may be different from tbyte) - -ida_ua.dt_packreal (variable) - packed real format for mc68040 - -ida_ua.dt_qword (variable) - 64 bit integer - -ida_ua.dt_string (variable) - pointer to asciiz string - -ida_ua.dt_tbyte (variable) - variable size ( processor_t::tbyte_size) floating point - -ida_ua.dt_unicode (variable) - pointer to unicode string - -ida_ua.dt_void (variable) - none - -ida_ua.dt_word (variable) - 16 bit integer - -ida_ua.get_dtype_by_size (function) - get_dtype_by_size(size) -> int - Get op_t::dtype from size. - - @param size: (C++: asize_t) - -ida_ua.get_dtype_flag (function) - get_dtype_flag(dtype) -> flags64_t - Get flags for op_t::dtype field. - - @param dtype: (C++: op_dtype_t) - -ida_ua.get_dtype_size (function) - get_dtype_size(dtype) -> size_t - Get size of opt_::dtype field. - - @param dtype: (C++: op_dtype_t) - -ida_ua.get_immvals (function) - get_immvals(ea, n, F=0) -> [int, ...] - 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: (C++: ea_t) address to analyze - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all the operands - @param F: (C++: flags64_t) flags for the specified address - @return: number of immediate values (0..2*UA_MAXOP) - -ida_ua.get_lookback (function) - 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 = <number>. IDP may use it as - you like it. (TMS module uses it) - -ida_ua.get_printable_immvals (function) - get_printable_immvals(ea, n, F=0) -> PyObject * - Get immediate ready-to-print values at the specified address - - @param ea: (C++: ea_t) address to analyze - @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all the operands - @param F: (C++: flags64_t) flags for the specified address - @return: number of immediate values (0..2*UA_MAXOP) - -ida_ua.insn_add_cref (function) - insn_add_cref(insn, to, opoff, type) - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param to: ea_t - @param opoff: int - @param type: enum cref_t - -ida_ua.insn_add_dref (function) - insn_add_dref(insn, to, opoff, type) - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param to: ea_t - @param opoff: int - @param type: enum dref_t - -ida_ua.insn_add_off_drefs (function) - insn_add_off_drefs(insn, x, type, outf) -> ea_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param x: op_t const & - @param type: enum dref_t - @param outf: int - -ida_ua.insn_create_stkvar (function) - insn_create_stkvar(insn, x, v, flags) -> bool - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param x: op_t const & - @param v: adiff_t - @param flags: int - -ida_ua.insn_t (class) - Proxy of C++ insn_t class. - -ida_ua.insn_t.__get_auxpref__ (method) - __get_auxpref__(self) -> uint32 - -ida_ua.insn_t.__get_operand__ (method) - __get_operand__(self, n) -> op_t - - @param n: int - -ida_ua.insn_t.__get_ops__ (method) - __get_ops__(self) -> operands_array - -ida_ua.insn_t.__getitem__ (method) - Operands can be accessed directly as indexes - @return: op_t: Returns an operand of type op_t - -ida_ua.insn_t.__init__ (method) - __init__(self) -> insn_t - -ida_ua.insn_t.__iter__ (method) - -ida_ua.insn_t.__set_auxpref__ (method) - __set_auxpref__(self, v) - - @param v: uint32 - -ida_ua.insn_t.add_cref (method) - add_cref(self, to, opoff, type) - Add a code cross-reference from the instruction. - - @param to: (C++: ea_t) target linear address - @param opoff: (C++: int) offset of the operand from the start of instruction. if the offset - is unknown, then 0. - @param type: (C++: cref_t) type of xref - -ida_ua.insn_t.add_dref (method) - add_dref(self, to, opoff, type) - Add a data cross-reference from the instruction. See add_off_drefs() - usually - it can be used in most cases. - - @param to: (C++: ea_t) target linear address - @param opoff: (C++: int) offset of the operand from the start of instruction if the offset - is unknown, then 0 - @param type: (C++: dref_t) type of xref - -ida_ua.insn_t.add_off_drefs (method) - add_off_drefs(self, x, type, outf) -> ea_t - Add xrefs for an operand of the instruction. This function creates all cross - references for 'enum', 'offset' and 'structure offset' operands. Use - add_off_drefs() in the presence of negative offsets. - - @param x: (C++: const op_t &) reference to operand - @param type: (C++: dref_t) type of xref - @param outf: (C++: int) out_value() flags. These flags should match the flags used to - output the operand - @return: if is_off(): the reference target address (the same as - calc_reference_data). if is_stroff(): BADADDR because for stroffs the - target address is unknown else: BADADDR because enums do not represent - addresses - -ida_ua.insn_t.assign (method) - assign(self, other) - - @param other: an ida_ua.insn_t, or an address (C++: const insn_t &) - -ida_ua.insn_t.auxpref (variable) - processor dependent field - -ida_ua.insn_t.create_op_data (method) - create_op_data(self, ea_, opoff, dtype) -> bool - Convenient alias. - - @param ea_: (C++: ea_t) - @param opoff: int - @param dtype: op_dtype_t - - create_op_data(self, ea_, op) -> bool - - @param ea_: ea_t - @param op: op_t const & - -ida_ua.insn_t.create_stkvar (method) - create_stkvar(self, x, v, flags_) -> bool - Create or modify a stack variable in the function frame. The emulator could use - this function to create stack variables in the function frame before converting - the operand to a stack variable. Please check with may_create_stkvars() before - calling this function. - - @param x: (C++: const op_t &) operand (used to determine the addressing type) - @param v: (C++: adiff_t) a displacement in the operand - @param flags_: (C++: int) Stack variable flags - @retval 1: ok, a stack variable exists now - @retval 0: no, couldn't create stack variable - -ida_ua.insn_t.cs (variable) - Current segment base paragraph. Initialized by the kernel. - -ida_ua.insn_t.ea (variable) - Linear address of the instruction. Initialized by the kernel. - -ida_ua.insn_t.flags (variable) - Instruction flags - -ida_ua.insn_t.get_canon_feature (method) - get_canon_feature(self, ph) -> uint32 - see instruc_t::feature - - @param ph: (C++: const processor_t &) processor_t const & - - get_canon_feature(self) -> uint32 - -ida_ua.insn_t.get_canon_mnem (method) - get_canon_mnem(self, ph) -> char const - see instruc_t::name - - @param ph: (C++: const processor_t &) processor_t const & - - get_canon_mnem(self) -> char const * - -ida_ua.insn_t.get_next_byte (method) - get_next_byte(self) -> uint8 - -ida_ua.insn_t.get_next_dword (method) - get_next_dword(self) -> uint32 - -ida_ua.insn_t.get_next_qword (method) - get_next_qword(self) -> uint64 - -ida_ua.insn_t.get_next_word (method) - get_next_word(self) -> uint16 - -ida_ua.insn_t.insnpref (variable) - processor dependent field - -ida_ua.insn_t.ip (variable) - Virtual address of the instruction (address within the segment). Initialized by - the kernel. - -ida_ua.insn_t.is_64bit (method) - is_64bit(self) -> bool - Belongs to a 64bit segment? - -ida_ua.insn_t.is_canon_insn (method) - is_canon_insn(self, ph) -> bool - see processor_t::is_canon_insn() - - @param ph: (C++: const processor_t &) processor_t const & - - is_canon_insn(self) -> bool - -ida_ua.insn_t.is_macro (method) - is_macro(self) -> bool - Is a macro instruction? - -ida_ua.insn_t.itype (variable) - Internal code of instruction (only for canonical insns - not user defined!). IDP - should define its own instruction codes. These codes are usually defined in - ins.hpp. The array of instruction names and features (ins.cpp) is accessed using - this code. - -ida_ua.insn_t.ops (variable) - array of operands - -ida_ua.insn_t.segpref (variable) - processor dependent field - -ida_ua.insn_t.size (variable) - Size of instruction in bytes. The analyzer should put here the actual size of - the instruction. - -ida_ua.insn_t__from_ptrval__ (function) - insn_t__from_ptrval__(ptrval) -> insn_t - - @param ptrval: size_t - -ida_ua.is_floating_dtype (function) - is_floating_dtype(dtype) -> bool - Is a floating type operand? - - @param dtype: (C++: op_dtype_t) - -ida_ua.macro_constructor_t (class) - Proxy of C++ macro_constructor_t class. - -ida_ua.macro_constructor_t.__disown__ (method) - -ida_ua.macro_constructor_t.__init__ (method) - __init__(self) -> macro_constructor_t - - @param self: PyObject * - -ida_ua.macro_constructor_t.build_macro (method) - build_macro(self, insn, may_go_forward) -> bool - Try to extend the instruction. - - @param insn: (C++: insn_t *) Instruction to modify, usually the first instruction of the macro - @param may_go_forward: (C++: bool) Is it ok to consider the next instruction for the macro? - This argument may be false, for example, if there is a - cross reference to the end of INSN. In this case creating - a macro is not desired. However, it may still be useful - to perform minor tweaks to the instruction using the - information about the surrounding instructions. - @return: true if created an macro instruction. This function may modify 'insn' - and return false; these changes will be accepted by the kernel but the - instruction will not be considered as a macro. - -ida_ua.map_code_ea (function) - map_code_ea(insn, addr, opnum) -> ea_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param addr: ea_t - @param opnum: int - - map_code_ea(insn, op) -> ea_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param op: op_t const & - -ida_ua.map_data_ea (function) - map_data_ea(insn, addr, opnum=-1) -> ea_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param addr: ea_t - @param opnum: int - - map_data_ea(insn, op) -> ea_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param op: op_t const & - -ida_ua.map_ea (function) - map_ea(insn, op, iscode) -> ea_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param op: op_t const & - @param iscode: bool - - map_ea(insn, addr, opnum, iscode) -> ea_t - - @param insn: an ida_ua.insn_t, or an address (C++: const insn_t &) - @param addr: ea_t - @param opnum: int - @param iscode: bool - -ida_ua.o_displ (variable) - Memory Ref [Base Reg + Index Reg + Displacement]. - - A memory reference using register contents with displacement. The displacement - should be stored in the op_t::addr field. The rest of information is stored the - same way as in o_phrase. - -ida_ua.o_far (variable) - Immediate Far Address (CODE). - - If the current processor has a special addressing mode for inter-segment - references, then this operand type should be used instead of o_near. If you - want, you may use PR_CHK_XREF in processor_t::flag to disable inter-segment - calls if o_near operand type is used. Currently only IBM PC uses this flag. - -ida_ua.o_idpspec0 (variable) - processor specific type. - -ida_ua.o_idpspec1 (variable) - processor specific type. - -ida_ua.o_idpspec2 (variable) - processor specific type. - -ida_ua.o_idpspec3 (variable) - processor specific type. - -ida_ua.o_idpspec4 (variable) - processor specific type. - -ida_ua.o_idpspec5 (variable) - processor specific type. (there can be more processor specific types) - -ida_ua.o_imm (variable) - Immediate Value. - - Any operand consisting of only a number is represented by this operand type. The - value should be stored in op_t::value. You may sign extend short (1-2 byte) - values. In any case don't forget to specify op_t::dtype (should be set for all - operand types). - -ida_ua.o_mem (variable) - Direct Memory Reference (DATA). - - A direct memory data reference whose target address is known at compilation - time. The target virtual address is stored in op_t::addr and the full address is - calculated as to_ea( insn_t::cs, op_t::addr ). For the processors with complex - memory organization the final address can be calculated using other segment - registers. For flat memories, op_t::addr is the final address and insn_t::cs is - usually equal to zero. In any case, the address within the segment should be - stored in op_t::addr. - -ida_ua.o_near (variable) - Immediate Near Address (CODE). - - A direct memory code reference whose target address is known at the compilation - time. The target virtual address is stored in op_t::addr and the final address - is always to_ea( insn_t::cs, op_t::addr). Usually this operand type is used for - the branches and calls whose target address is known. If the current processor - has 2 different types of references for inter-segment and intra-segment - references, then this should be used only for intra-segment references. - - If the above operand types do not cover all possible addressing modes, then use - o_idpspec... operand types. - -ida_ua.o_phrase (variable) - Memory Ref [Base Reg + Index Reg]. - - A memory reference using register contents. Indexed, register based, and other - addressing modes can be represented with the operand type. This addressing mode - cannot contain immediate values (use o_displ instead). The phrase number should - be stored in op_t::phrase. To denote the pre-increment and similar features - please use additional operand fields like op_t::specflag... Usually op_t::phrase - contains the register number and additional information is stored in - op_t::specflags... Please note that this operand type cannot contain immediate - values (except the scaling coefficients). - -ida_ua.o_reg (variable) - General Register (al,ax,es,ds...). - - The register number should be stored in op_t::reg. All processor registers, - including special registers, can be represented by this operand type. - -ida_ua.o_void (variable) - No Operand. - -ida_ua.op_t (class) - Proxy of C++ op_t class. - -ida_ua.op_t.__get_addr__ (method) - __get_addr__(self) -> ea_t - -ida_ua.op_t.__get_reg_phrase__ (method) - __get_reg_phrase__(self) -> uint16 - -ida_ua.op_t.__get_specval__ (method) - __get_specval__(self) -> ea_t - -ida_ua.op_t.__get_value64__ (method) - __get_value64__(self) -> uint64 - -ida_ua.op_t.__get_value__ (method) - __get_value__(self) -> ea_t - -ida_ua.op_t.__init__ (method) - __init__(self) -> op_t - -ida_ua.op_t.__set_addr__ (method) - __set_addr__(self, v) - - @param v: ea_t - -ida_ua.op_t.__set_reg_phrase__ (method) - __set_reg_phrase__(self, r) - - @param r: uint16 - -ida_ua.op_t.__set_specval__ (method) - __set_specval__(self, v) - - @param v: ea_t - -ida_ua.op_t.__set_value64__ (method) - __set_value64__(self, v) - - @param v: uint64 - -ida_ua.op_t.__set_value__ (method) - __set_value__(self, v) - - @param v: ea_t - -ida_ua.op_t.addr (variable) - virtual address pointed or used by the operand. (o_mem,o_displ,o_far,o_near) - -ida_ua.op_t.assign (method) - assign(self, other) - - @param other: op_t const & - -ida_ua.op_t.clr_shown (method) - clr_shown(self) - Set operand to hidden. - -ida_ua.op_t.dtype (variable) - Type of operand value (see Operand value types). Usually first 9 types are used. - This is the type of the operand itself, not the size of the addressing mode. for - example, byte ptr [epb+32_bit_offset] will have dt_byte type. - -ida_ua.op_t.flags (variable) - Operand flags - -ida_ua.op_t.has_reg (method) - Checks if the operand accesses the given processor register - -ida_ua.op_t.is_imm (method) - is_imm(self, v) -> bool - Is immediate operand? - - @param v: (C++: uval_t) - -ida_ua.op_t.is_reg (method) - is_reg(self, r) -> bool - Is register operand? - - @param r: (C++: int) - -ida_ua.op_t.n (variable) - Number of operand (0,1,2). Initialized once at the start of work. You have no - right to change its value. - -ida_ua.op_t.offb (variable) - Offset of operand value from the instruction start (0 means unknown). Of course - this field is meaningful only for certain types of operands. Leave it equal to - zero if the operand has no offset. This offset should point to the 'interesting' - part of operand. For example, it may point to the address of a function in - call func or it may point to bytes holding '5' in - mov ax, [bx+5] Usually bytes pointed to this offset are relocated (have fixup - information). - -ida_ua.op_t.offo (variable) - Same as offb (some operands have 2 numeric values used to form an operand). This - field is used for the second part of operand if it exists. Currently this field - is used only for outer offsets of Motorola processors. Leave it equal to zero if - the operand has no offset. - -ida_ua.op_t.phrase (variable) - number of register phrase (o_phrase,o_displ). you yourself define numbers of - phrases as you like - -ida_ua.op_t.reg (variable) - number of register (o_reg) - -ida_ua.op_t.set_shown (method) - set_shown(self) - Set operand to be shown. - -ida_ua.op_t.shown (method) - shown(self) -> bool - Is operand set to be shown? - -ida_ua.op_t.specval (variable) - This field may be used as you want. - -ida_ua.op_t.type (variable) - Type of operand (see Operand types) - -ida_ua.op_t.value (variable) - operand value (o_imm) or outer displacement (o_displ+OF_OUTER_DISP). integer - values should be in IDA's (little-endian) order. when using ieee_realcvt(), - floating point values should be in the processor's native byte order. dt_double - and dt_qword values take up 8 bytes (value and addr fields for 32-bit modules). - NB: in case a dt_dword/dt_qword immediate is forced to float by user, the kernel - converts it to processor's native order before calling FP conversion routines. - -ida_ua.op_t__from_ptrval__ (function) - op_t__from_ptrval__(ptrval) -> op_t - - @param ptrval: size_t - -ida_ua.operands_array (class) - Proxy of C++ wrapped_array_t< op_t,8 > class. - -ida_ua.operands_array.__getitem__ (method) - __getitem__(self, i) -> op_t - - @param i: size_t - -ida_ua.operands_array.__init__ (method) - __init__(self, data) -> operands_array - - @param data: op_t (&)[8] - -ida_ua.operands_array.__len__ (method) - __len__(self) -> size_t - -ida_ua.operands_array.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: op_t const & - -ida_ua.operands_array._get_bytes (method) - _get_bytes(self) -> bytevec_t - -ida_ua.operands_array._set_bytes (method) - _set_bytes(self, bts) - - Parameters - ---------- - bts: bytevec_t const & - -ida_ua.outctx_base_t (class) - Proxy of C++ outctx_base_t class. - -ida_ua.outctx_base_t.__init__ (method) - -ida_ua.outctx_base_t.close_comment (method) - close_comment(self) - -ida_ua.outctx_base_t.clr_gen_label (method) - clr_gen_label(self) - -ida_ua.outctx_base_t.display_voids (method) - display_voids(self) -> bool - -ida_ua.outctx_base_t.flush_buf (method) - flush_buf(self, buf, indent=-1) -> bool - Append contents of 'buf' to the line array. Behaves like flush_outbuf but - accepts an arbitrary buffer - - @param buf: (C++: const char *) char const * - @param indent: (C++: int) - -ida_ua.outctx_base_t.flush_outbuf (method) - flush_outbuf(self, indent=-1) -> bool - Functions to populate the output line array (lnar) Move the contents of the - output buffer to the line array (outbuf->lnar) The kernel augments the outbuf - contents with additional text like the line prefix, user-defined comments, - xrefs, etc at this call. - - @param indent: (C++: int) - -ida_ua.outctx_base_t.forbid_annotations (method) - forbid_annotations(self) -> int - -ida_ua.outctx_base_t.force_code (method) - force_code(self) -> bool - -ida_ua.outctx_base_t.gen_block_cmt (method) - gen_block_cmt(self, cmt, color) -> bool - Generate big non-indented comment lines. - - @param cmt: (C++: const char *) comment text. may contain \n characters to denote new lines. should - not contain comment character (;) - @param color: (C++: color_t) color of comment text (one of Color tags) - @return: overflow, lnar_maxsize has been reached - -ida_ua.outctx_base_t.gen_border_line (method) - gen_border_line(self, solid=False) -> bool - Generate thin border line. This function does nothing if generation of border - lines is disabled. - - @param solid: (C++: bool) generate solid border line (with =), otherwise with - - @return: overflow, lnar_maxsize has been reached - -ida_ua.outctx_base_t.gen_cmt_line (method) - gen_cmt_line(self, format) -> bool - Generate one non-indented comment line, colored with COLOR_AUTOCMT. - - @param format: (C++: const char *) printf() style format line. The resulting comment line should not - include comment character (;) - @return: overflow, lnar_maxsize has been reached - -ida_ua.outctx_base_t.gen_collapsed_line (method) - gen_collapsed_line(self, format) -> bool - Generate one non-indented comment line, colored with COLOR_COLLAPSED. - - @param format: (C++: const char *) printf() style format line. The resulting comment line should not - include comment character (;) - @return: overflow, lnar_maxsize has been reached - -ida_ua.outctx_base_t.gen_empty_line (method) - gen_empty_line(self) -> bool - Generate empty line. This function does nothing if generation of empty lines is - disabled. - - @return: overflow, lnar_maxsize has been reached - -ida_ua.outctx_base_t.gen_empty_line_without_annotations (method) - gen_empty_line_without_annotations(self) - -ida_ua.outctx_base_t.gen_printf (method) - gen_printf(self, indent, format) -> bool - printf-like function to add lines to the line array. - - @param indent: (C++: int) indention of the line. if indent == -1, the kernel will indent - the line at idainfo::indent. if indent < 0, -indent will be used - for indention. The first line printed with indent < 0 is - considered as the most important line at the current address. - Usually it is the line with the instruction itself. This line - will be displayed in the cross-reference lists and other places. - If you need to output an additional line before the main line - then pass DEFAULT_INDENT instead of -1. The kernel will know that - your line is not the most important one. - @param format: (C++: const char *) printf style colored line to generate - @return: overflow, lnar_maxsize has been reached - -ida_ua.outctx_base_t.gen_xref_lines (method) - gen_xref_lines(self) -> bool - -ida_ua.outctx_base_t.getF (method) - getF(self) -> flags64_t - -ida_ua.outctx_base_t.get_stkvar (method) - get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * - - @param arg2: op_t const & - @param arg3: uval_t - @param arg4: sval_t * - @param arg5: int * - -ida_ua.outctx_base_t.init_lines_array (method) - init_lines_array(self, answers, maxsize) - - @param answers: qstrvec_t * - @param maxsize: int - -ida_ua.outctx_base_t.multiline (method) - multiline(self) -> bool - -ida_ua.outctx_base_t.only_main_line (method) - only_main_line(self) -> bool - -ida_ua.outctx_base_t.out_addr_tag (method) - out_addr_tag(self, ea) - Output "address" escape sequence. - - @param ea: (C++: ea_t) - -ida_ua.outctx_base_t.out_btoa (method) - out_btoa(self, Word, radix=0) - Output a number with the specified base (binary, octal, decimal, hex) The number - is output without color codes. see also out_long() - - @param Word: (C++: uval_t) - @param radix: (C++: char) - -ida_ua.outctx_base_t.out_char (method) - out_char(self, c) - Output one character. The character is output without color codes. see also - out_symbol() - - @param c: (C++: char) - -ida_ua.outctx_base_t.out_chars (method) - out_chars(self, c, n) - Append a character multiple times. - - @param c: (C++: char) - @param n: (C++: int) - -ida_ua.outctx_base_t.out_colored_register_line (method) - out_colored_register_line(self, str) - Output a colored line with register names in it. The register names will be - substituted by user-defined names (regvar_t) Please note that out_tagoff tries - to make substitutions too (when called with COLOR_REG) - - @param str: (C++: const char *) char const * - -ida_ua.outctx_base_t.out_keyword (method) - out_keyword(self, str) - Output a string with COLOR_KEYWORD color. - - @param str: (C++: const char *) char const * - -ida_ua.outctx_base_t.out_line (method) - out_line(self, str, color=0) - Output a string with the specified color. - - @param str: (C++: const char *) char const * - @param color: (C++: color_t) - -ida_ua.outctx_base_t.out_long (method) - out_long(self, v, radix) - Output a number with appropriate color. Low level function. Use out_value() if - you can. if 'suspop' is set then this function uses COLOR_VOIDOP instead of - COLOR_NUMBER. 'suspop' is initialized: - * in out_one_operand() - * in ..\ida\gl.cpp (before calling processor_t::d_out()) - - @param v: (C++: sval_t) value to output - @param radix: (C++: char) base (2,8,10,16) - -ida_ua.outctx_base_t.out_name_expr (method) - out_name_expr(self, x, ea, off=BADADDR) -> bool - Output a name expression. - - @param x: (C++: const op_t &) instruction operand referencing the name expression - @param ea: (C++: ea_t) address to convert to name expression - @param off: (C++: adiff_t) the value of name expression. this parameter is used only to check - that the name expression will have the wanted value. You may pass - BADADDR for this parameter but I discourage it because it prohibits - checks. - @return: true if the name expression has been produced - -ida_ua.outctx_base_t.out_printf (method) - out_printf(self, format) -> size_t - Functions to append text to the current output buffer (outbuf) Append a - formatted string to the output string. - - @param format: (C++: const char *) char const * - @return: the number of characters appended - -ida_ua.outctx_base_t.out_register (method) - out_register(self, str) - Output a character with COLOR_REG color. - - @param str: (C++: const char *) char const * - -ida_ua.outctx_base_t.out_spaces (method) - out_spaces(self, len) - Appends spaces to outbuf until its tag_strlen becomes 'len'. - - @param len: (C++: ssize_t) - -ida_ua.outctx_base_t.out_symbol (method) - out_symbol(self, c) - Output a character with COLOR_SYMBOL color. - - @param c: (C++: char) - -ida_ua.outctx_base_t.out_tagoff (method) - out_tagoff(self, tag) - Output "turn color off" escape sequence. - - @param tag: (C++: color_t) - -ida_ua.outctx_base_t.out_tagon (method) - out_tagon(self, tag) - Output "turn color on" escape sequence. - - @param tag: (C++: color_t) - -ida_ua.outctx_base_t.out_value (method) - out_value(self, x, outf=0) -> flags64_t - Output immediate value. Try to use this function to output all constants of - instruction operands. This function outputs a number from x.addr or x.value in - the form determined by F. It outputs colored text. - - @param x: (C++: const op_t &) value to output - @param outf: (C++: int) Output value flags - @return: flags of the output value, otherwise: -1 if printed a number with - COLOR_ERROR 0 if printed a nice number or character or segment or enum - -ida_ua.outctx_base_t.print_label_now (method) - print_label_now(self) -> bool - -ida_ua.outctx_base_t.restore_ctxflags (method) - restore_ctxflags(self, saved_flags) - - @param saved_flags: int - -ida_ua.outctx_base_t.retrieve_cmt (method) - retrieve_cmt(self) -> ssize_t - -ida_ua.outctx_base_t.retrieve_name (method) - retrieve_name(self, arg2, arg3) -> ssize_t - - @param arg2: qstring * - @param arg3: color_t * - -ida_ua.outctx_base_t.set_comment_addr (method) - set_comment_addr(self, ea) - - @param ea: ea_t - -ida_ua.outctx_base_t.set_dlbind_opnd (method) - set_dlbind_opnd(self) - -ida_ua.outctx_base_t.set_gen_cmt (method) - set_gen_cmt(self, on=True) - - @param on: bool - -ida_ua.outctx_base_t.set_gen_demangled_label (method) - set_gen_demangled_label(self) - -ida_ua.outctx_base_t.set_gen_label (method) - set_gen_label(self) - -ida_ua.outctx_base_t.set_gen_xrefs (method) - set_gen_xrefs(self, on=True) - - @param on: bool - -ida_ua.outctx_base_t.setup_outctx (method) - setup_outctx(self, prefix, makeline_flags) - Initialization; normally used only by the kernel. - - @param prefix: (C++: const char *) char const * - @param makeline_flags: (C++: int) - -ida_ua.outctx_base_t.stack_view (method) - stack_view(self) -> bool - -ida_ua.outctx_base_t.term_outctx (method) - term_outctx(self, prefix=None) -> int - Finalize the output context. - - @param prefix: (C++: const char *) char const * - @return: the number of generated lines. - -ida_ua.outctx_base_t__from_ptrval__ (function) - outctx_base_t__from_ptrval__(ptrval) -> outctx_base_t - - @param ptrval: size_t - -ida_ua.outctx_t (class) - Proxy of C++ outctx_t class. - -ida_ua.outctx_t.__init__ (method) - -ida_ua.outctx_t.gen_func_footer (method) - gen_func_footer(self, pfn) - - @param pfn: func_t const * - -ida_ua.outctx_t.gen_func_header (method) - gen_func_header(self, pfn) - - @param pfn: func_t * - -ida_ua.outctx_t.gen_header (method) - gen_header(self, flags=((1 << 0)|(1 << 1)), proc_name=None, proc_flavour=None) - - @param flags: int - @param proc_name: char const * - @param proc_flavour: char const * - -ida_ua.outctx_t.gen_header_extra (method) - gen_header_extra(self) - -ida_ua.outctx_t.gen_xref_lines (method) - gen_xref_lines(self) -> bool - -ida_ua.outctx_t.out_btoa (method) - out_btoa(self, Word, radix=0) - Output a number with the specified base (binary, octal, decimal, hex) The number - is output without color codes. see also out_long() - - @param Word: (C++: uval_t) - @param radix: (C++: char) - -ida_ua.outctx_t.out_custom_mnem (method) - out_custom_mnem(self, mnem, width=8, postfix=None) - Output custom mnemonic for 'insn'. E.g. if it should differ from the one in - 'ph.instruc'. This function outputs colored text. See out_mnem - - @param mnem: (C++: const char *) custom mnemonic - @param width: (C++: int) width of field with mnemonic. if < 0, then 'postfix' will be - output before the mnemonic, i.e. as a prefix - @param postfix: (C++: const char *) optional postfix added to 'mnem' - -ida_ua.outctx_t.out_data (method) - out_data(self, analyze_only) - - @param analyze_only: bool - -ida_ua.outctx_t.out_fcref_names (method) - out_fcref_names(self) - Print addresses referenced *from* the specified address as commented symbolic - names. This function is used to show, for example, multiple callees of an - indirect call. This function outputs colored text. - -ida_ua.outctx_t.out_immchar_cmts (method) - out_immchar_cmts(self) - Print all operand values as commented character constants. This function is used - to comment void operands with their representation in the form of character - constants. This function outputs colored text. - -ida_ua.outctx_t.out_mnem (method) - out_mnem(self, width=8, postfix=None) - Output instruction mnemonic for 'insn' using information in 'ph.instruc' array. - This function outputs colored text. It should be called from - processor_t::ev_out_insn() or processor_t::ev_out_mnem() handler. It will output - at least one space after the instruction. mnemonic even if the specified 'width' - is not enough. - - @param width: (C++: int) width of field with mnemonic. if < 0, then 'postfix' will be - output before the mnemonic, i.e. as a prefix - @param postfix: (C++: const char *) optional postfix added to the instruction mnemonic - -ida_ua.outctx_t.out_mnemonic (method) - out_mnemonic(self) - Output instruction mnemonic using information in 'insn'. It should be called - from processor_t::ev_out_insn() and it will call processor_t::ev_out_mnem() or - out_mnem. This function outputs colored text. - -ida_ua.outctx_t.out_one_operand (method) - out_one_operand(self, n) -> bool - Use this function to output an operand of an instruction. This function checks - for the existence of a manually defined operand and will output it if it exists. - It should be called from processor_t::ev_out_insn() and it will call - processor_t::ev_out_operand(). This function outputs colored text. - - @param n: (C++: int) 0..UA_MAXOP-1 operand number - @retval 1: operand is displayed - @retval 0: operand is hidden - -ida_ua.outctx_t.out_specea (method) - out_specea(self, segtype) -> bool - - @param segtype: uchar - -ida_ua.outctx_t.retrieve_cmt (method) - retrieve_cmt(self) -> ssize_t - -ida_ua.outctx_t.retrieve_name (method) - retrieve_name(self, arg2, arg3) -> ssize_t - - @param arg2: qstring * - @param arg3: color_t * - -ida_ua.outctx_t.set_bin_state (method) - set_bin_state(self, value) - - @param value: int - -ida_ua.outctx_t.setup_outctx (method) - setup_outctx(self, prefix, flags) - Initialization; normally used only by the kernel. - - @param prefix: (C++: const char *) char const * - @param flags: int - -ida_ua.outctx_t.term_outctx (method) - term_outctx(self, prefix=None) -> int - Finalize the output context. - - @param prefix: (C++: const char *) char const * - @return: the number of generated lines. - -ida_ua.outctx_t__from_ptrval__ (function) - outctx_t__from_ptrval__(ptrval) -> outctx_t - - @param ptrval: size_t - -ida_ua.print_insn_mnem (function) - print_insn_mnem(ea) -> str - Print instruction mnemonics. - - @param ea: (C++: ea_t) linear address of the instruction - @return: success - -ida_ua.print_operand (function) - 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: (C++: ea_t) the item address (instruction or data) - @param n: (C++: int) 0..UA_MAXOP-1 operand number, meaningful only for instructions - @param getn_flags: (C++: int) Name expression flags Currently only GETN_NODUMMY is - accepted. - @param newtype: (C++: struct printop_t *) if specified, print the operand using the specified type - @return: success - -ida_xref (module) - Functions that deal with cross-references. - - There are 2 types of xrefs: CODE and DATA references. All xrefs are kept in the - bTree except ordinary execution flow to the next instruction. Ordinary execution - flow to the next instruction is kept in flags (see bytes.hpp) - - The source address of a cross-reference must be an item head (is_head) or a - structure member id. - - Cross-references are automatically sorted. - -ida_xref.XREF_ALL (variable) - return all references - -ida_xref.XREF_BASE (variable) - Reference to the base part of an offset. - -ida_xref.XREF_DATA (variable) - return data references only - -ida_xref.XREF_FAR (variable) - don't return ordinary flow xrefs - -ida_xref.XREF_MASK (variable) - Mask to get xref type. - -ida_xref.XREF_PASTEND (variable) - 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 (variable) - Reference to tail byte in extrn symbols. - -ida_xref.XREF_USER (variable) - 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.add_cref (function) - add_cref(frm, to, type) -> bool - Create a code cross-reference. - - @param from: (C++: ea_t) linear address of referencing instruction - @param to: (C++: ea_t) linear address of referenced instruction - @param type: (C++: cref_t) cross-reference type - @return: success - -ida_xref.add_dref (function) - add_dref(frm, to, type) -> bool - Create a data cross-reference. - - @param from: (C++: ea_t) linear address of referencing instruction or data - @param to: (C++: ea_t) linear address of referenced data - @param type: (C++: dref_t) cross-reference type - @return: success (may fail if user-defined xref exists from->to) - -ida_xref.calc_switch_cases (function) - 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'. - -ida_xref.cases_and_targets_t (class) - Proxy of C++ cases_and_targets_t class. - -ida_xref.cases_and_targets_t.__init__ (method) - __init__(self) -> cases_and_targets_t - -ida_xref.casevec_t (class) - Proxy of C++ qvector< qvector< sval_t > > class. - -ida_xref.casevec_t.__eq__ (method) - __eq__(self, r) -> bool - - @param r: qvector< qvector< signed-ea-like-numeric-type > > const & - -ida_xref.casevec_t.__getitem__ (method) - __getitem__(self, i) -> qvector< signed-ea-like-numeric-type > const & - - @param i: size_t - -ida_xref.casevec_t.__init__ (method) - __init__(self) -> casevec_t - __init__(self, x) -> casevec_t - - @param x: qvector< qvector< signed-ea-like-numeric-type > > const & - -ida_xref.casevec_t.__len__ (method) - __len__(self) -> size_t - -ida_xref.casevec_t.__ne__ (method) - __ne__(self, r) -> bool - - @param r: qvector< qvector< signed-ea-like-numeric-type > > const & - -ida_xref.casevec_t.__setitem__ (method) - __setitem__(self, i, v) - - @param i: size_t - @param v: qvector< signed-ea-like-numeric-type > const & - -ida_xref.casevec_t._del (method) - _del(self, x) -> bool - - Parameters - ---------- - x: qvector< signed-ea-like-numeric-type > const & - -ida_xref.casevec_t.add_unique (method) - add_unique(self, x) -> bool - - @param x: qvector< signed-ea-like-numeric-type > const & - -ida_xref.casevec_t.at (method) - at(self, _idx) -> qvector< signed-ea-like-numeric-type > const & - - @param _idx: size_t - -ida_xref.casevec_t.begin (method) - 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 (method) - capacity(self) -> size_t - -ida_xref.casevec_t.clear (method) - clear(self) - -ida_xref.casevec_t.empty (method) - empty(self) -> bool - -ida_xref.casevec_t.end (method) - 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 (method) - erase(self, it) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - - @param it: qvector< qvector< signed-ea-like-numeric-type > >::iterator - - erase(self, first, last) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - - @param first: qvector< qvector< signed-ea-like-numeric-type > >::iterator - @param last: qvector< qvector< signed-ea-like-numeric-type > >::iterator - -ida_xref.casevec_t.extract (method) - extract(self) -> qvector< signed-ea-like-numeric-type > * - -ida_xref.casevec_t.find (method) - find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - - @param x: qvector< signed-ea-like-numeric-type > const & - - find(self, x) -> qvector< qvector< signed-ea-like-numeric-type > >::const_iterator - - @param x: qvector< signed-ea-like-numeric-type > const & - -ida_xref.casevec_t.grow (method) - grow(self, x=qvector< signed-ea-like-numeric-type >()) - - @param x: qvector< signed-ea-like-numeric-type > const & - -ida_xref.casevec_t.has (method) - has(self, x) -> bool - - @param x: qvector< signed-ea-like-numeric-type > const & - -ida_xref.casevec_t.inject (method) - inject(self, s, len) - - @param s: qvector< signed-ea-like-numeric-type > * - @param len: size_t - -ida_xref.casevec_t.insert (method) - insert(self, it, x) -> qvector< qvector< signed-ea-like-numeric-type > >::iterator - - @param it: qvector< qvector< signed-ea-like-numeric-type > >::iterator - @param x: qvector< signed-ea-like-numeric-type > const & - -ida_xref.casevec_t.pop_back (method) - pop_back(self) - -ida_xref.casevec_t.push_back (method) - push_back(self, x) - - @param x: qvector< signed-ea-like-numeric-type > const & - - push_back(self) -> qvector< signed-ea-like-numeric-type > & - -ida_xref.casevec_t.qclear (method) - qclear(self) - -ida_xref.casevec_t.reserve (method) - reserve(self, cnt) - - @param cnt: size_t - -ida_xref.casevec_t.resize (method) - resize(self, _newsize, x) - - @param _newsize: size_t - @param x: qvector< signed-ea-like-numeric-type > const & - - resize(self, _newsize) - - @param _newsize: size_t - -ida_xref.casevec_t.size (method) - size(self) -> size_t - -ida_xref.casevec_t.swap (method) - swap(self, r) - - @param r: qvector< qvector< signed-ea-like-numeric-type > > & - -ida_xref.casevec_t.truncate (method) - truncate(self) - -ida_xref.create_switch_table (function) - 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 (function) - 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 (function) - del_cref(frm, to, expand) -> bool - Delete a code cross-reference. - - @param from: (C++: ea_t) linear address of referencing instruction - @param to: (C++: ea_t) linear address of referenced instruction - @param expand: (C++: bool) 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 - @retval true: if the referenced instruction will be deleted - -ida_xref.del_dref (function) - del_dref(frm, to) - Delete a data cross-reference. - - @param from: (C++: ea_t) linear address of referencing instruction or data - @param to: (C++: ea_t) linear address of referenced data - -ida_xref.delete_switch_table (function) - delete_switch_table(jump_ea, si) - - @param jump_ea: ea_t - @param si: switch_info_t const & - -ida_xref.dr_I (variable) - Informational (a derived java class references its base class informationally) - -ida_xref.dr_O (variable) - Offset The reference uses 'offset' of data rather than its value OR The - reference appeared because the "OFFSET" flag of instruction is set. The meaning - of this type is IDP dependent. - -ida_xref.dr_R (variable) - Read access. - -ida_xref.dr_S (variable) - Reference to enum member (symbolic constant) - -ida_xref.dr_T (variable) - Text (for forced operands only) Name of data is used in manual operand - -ida_xref.dr_U (variable) - Unknown - for compatibility with old versions. Should not be used anymore. - -ida_xref.dr_W (variable) - Write access. - -ida_xref.fl_CF (variable) - Call Far This xref creates a function at the referenced location - -ida_xref.fl_CN (variable) - Call Near This xref creates a function at the referenced location - -ida_xref.fl_F (variable) - Ordinary flow: used to specify execution flow to the next instruction. - -ida_xref.fl_JF (variable) - Jump Far. - -ida_xref.fl_JN (variable) - Jump Near. - -ida_xref.fl_U (variable) - unknown - for compatibility with old versions. Should not be used anymore. - -ida_xref.fl_USobsolete (variable) - User specified (obsolete) - -ida_xref.get_first_cref_from (function) - 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!). - - @param from: (C++: ea_t) linear address of referencing instruction - @return: first referenced address. If the specified instruction doesn't - reference to other instructions then returns BADADDR. - -ida_xref.get_first_cref_to (function) - 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: (C++: ea_t) linear address of referenced instruction - @return: linear address of the first referencing instruction or BADADDR. - -ida_xref.get_first_dref_from (function) - get_first_dref_from(frm) -> ea_t - Get first data referenced from the specified address. - - @param from: (C++: ea_t) linear address of referencing instruction or data - @return: linear address of first (lowest) data referenced from the specified - address. Return BADADDR if the specified instruction/data doesn't - reference to anything. - -ida_xref.get_first_dref_to (function) - get_first_dref_to(to) -> ea_t - Get address of instruction/data referencing to the specified data. - - @param to: (C++: ea_t) linear address of referencing instruction or data - @return: BADADDR if nobody refers to the specified data. - -ida_xref.get_first_fcref_from (function) - get_first_fcref_from(frm) -> ea_t - - @param from: ea_t - -ida_xref.get_first_fcref_to (function) - get_first_fcref_to(to) -> ea_t - - @param to: ea_t - -ida_xref.get_next_cref_from (function) - get_next_cref_from(frm, current) -> ea_t - Get next instruction referenced from the specified instruction. - - @param from: (C++: ea_t) linear address of referencing instruction - @param current: (C++: ea_t) linear address of current referenced instruction This value is - returned by get_first_cref_from() or previous call to - get_next_cref_from() functions. - @return: next referenced address or BADADDR. - -ida_xref.get_next_cref_to (function) - get_next_cref_to(to, current) -> ea_t - Get next instruction referencing to the specified instruction. - - @param to: (C++: ea_t) linear address of referenced instruction - @param current: (C++: ea_t) linear address of current referenced instruction This value is - returned by get_first_cref_to() or previous call to - get_next_cref_to() functions. - @return: linear address of the next referencing instruction or BADADDR. - -ida_xref.get_next_dref_from (function) - get_next_dref_from(frm, current) -> ea_t - Get next data referenced from the specified address. - - @param from: (C++: ea_t) linear address of referencing instruction or data - @param current: (C++: ea_t) linear address of current referenced data. This value is - returned by get_first_dref_from() or previous call to - get_next_dref_from() functions. - @return: linear address of next data or BADADDR. - -ida_xref.get_next_dref_to (function) - get_next_dref_to(to, current) -> ea_t - Get address of instruction/data referencing to the specified data - - @param to: (C++: ea_t) linear address of referencing instruction or data - @param current: (C++: ea_t) current linear address. This value is returned by - get_first_dref_to() or previous call to get_next_dref_to() - functions. - @return: BADADDR if nobody refers to the specified data. - -ida_xref.get_next_fcref_from (function) - get_next_fcref_from(frm, current) -> ea_t - - @param from: ea_t - @param current: ea_t - -ida_xref.get_next_fcref_to (function) - get_next_fcref_to(to, current) -> ea_t - - @param to: ea_t - @param current: ea_t - -ida_xref.has_external_refs (function) - has_external_refs(pfn, ea) -> bool - Does 'ea' have references from outside of 'pfn'? - - @param pfn: (C++: func_t *) - @param ea: (C++: ea_t) - -ida_xref.xrefblk_t (class) - Proxy of C++ xrefblk_t class. - -ida_xref.xrefblk_t.__init__ (method) - __init__(self) -> xrefblk_t - -ida_xref.xrefblk_t.crefs_from (method) - Provide an iterator on code references from ea including flow references - -ida_xref.xrefblk_t.crefs_to (method) - Provide an iterator on code references to ea including flow references - -ida_xref.xrefblk_t.drefs_from (method) - Provide an iterator on data references from ea - -ida_xref.xrefblk_t.drefs_to (method) - Provide an iterator on data references to ea - -ida_xref.xrefblk_t.fcrefs_from (method) - Provide an iterator on code references from ea - -ida_xref.xrefblk_t.fcrefs_to (method) - Provide an iterator on code references to ea - -ida_xref.xrefblk_t.first_from (method) - first_from(self, _from, flags) -> bool - Get first xref from the given address (store in to) - - @param _from: (C++: ea_t) - @param flags: (C++: int) - -ida_xref.xrefblk_t.first_to (method) - first_to(self, _to, flags) -> bool - Get xref to given address (store in from) - - @param _to: (C++: ea_t) - @param flags: (C++: int) - -ida_xref.xrefblk_t.iscode (variable) - 1-is code reference; 0-is data reference - -ida_xref.xrefblk_t.next_from (method) - next_from(self) -> bool - Get xref from '_from' that comes after '_to'. - next_from(self, _from, _to, flags) -> bool - - @param _from: ea_t - @param _to: ea_t - @param flags: int - -ida_xref.xrefblk_t.next_to (method) - next_to(self) -> bool - Get xref to '_to' that comes after '_from'. - next_to(self, _from, _to, flags) -> bool - - @param _from: ea_t - @param _to: ea_t - @param flags: int - -ida_xref.xrefblk_t.refs_from (method) - Provide an iterator on from reference represented by flag - -ida_xref.xrefblk_t.refs_from._copy_xref (function) - Make a private copy of the xref class to preserve its contents - -ida_xref.xrefblk_t.refs_to (method) - Provide an iterator on to reference represented by flag - -ida_xref.xrefblk_t.refs_to._copy_xref (function) - Make a private copy of the xref class to preserve its contents - -ida_xref.xrefblk_t.to (variable) - the referenced address - filled by first_from(), next_from() - -ida_xref.xrefblk_t.type (variable) - type of the last returned reference (cref_t & dref_t) - -ida_xref.xrefblk_t.user (variable) - 1-is user defined xref, 0-defined by ida - -ida_xref.xrefchar (function) - xrefchar(xrtype) -> char - Get character describing the xref type. - - @param xrtype: (C++: char) combination of Cross-Reference type flags and a cref_t of dref_t - value - diff --git a/apidoc/ida_bytes.py b/apidoc/ida_bytes.py new file mode 100644 index 0000000..57927c2 --- /dev/null +++ b/apidoc/ida_bytes.py @@ -0,0 +1,242 @@ + +class data_type_t(object): + """ + Information about a data type + """ + + def may_create_at(self, ea, nbytes): + """May create data? + No such callback means: always succeed (i.e., no restriction where + such a data type can be created.) + @param ea: candidate address for the data item + @param nbytes: candidate size for the data item + @return: True/False + """ + return True + + def calc_item_size(self, ea, maxsize): + """This callback is used to determine size of the (possible) + item at `ea`. + No such callback means that datatype is of fixed size `value_size`. + (thus, this callback is required only for varsize datatypes.) + @param ea: address of the item + @param maxsize: maximum size of the item + @return: 0 - no such item can be created/displayed + """ + return 0 + + +class data_format_t(object): + """ + Information about a data format + """ + + def printf(self, value, current_ea, operand_num, dtid): + """Convert `value` to colored string using custom format. + @param value: value to print (of type 'str', sequence of bytes) + @param current_ea: current address (BADADDR if unknown) + @param operand_num: current operand number + @param dtid: custom data type id + @return: string representing data + """ + return None + + def scan(self, input, current_ea, operand_num): + """Convert uncolored string (user input) to the value. + This callback is called from the debugger when an user enters a + new value for a register with a custom data representation (e.g., + an MMX register.) + @param input: input string + @param current_ea: current address (BADADDR if unknown) + @param operand_num: current operand number (-1 if unknown) + @return: tuple(bool, string) + (True, output value) or + (False, error message) + """ + return (False, "Not implemented") + + def analyze(self, current_ea, operand_num): + """Analyze custom data format occurrence. + This callback is called in 2 cases: + - after emulating an instruction (after a call of + 'ev_emu_insn') if its operand is marked as "custom data + representation" + - when emulating data (this is done using a call of + 'ev_out_data' with analyze_only == true). This is the right + place to create cross references from the current item. + @param current_ea: current address (BADADDR if unknown) + @param operand_num: current operand number + """ + pass + + +def register_custom_data_type(dt): + """ + 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 + """ + pass + + +def unregister_custom_data_type(dtid): + """ + Unregisters a custom data type. + + @param dtid: the data type id + @return: Boolean + """ + pass + + +def register_custom_data_format(df): + """ + 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 + """ + pass + +def unregister_custom_data_format(dfid): + """ + Unregisters a custom data format + + @param dfid: data format id + @return: Boolean + """ + pass + +def visit_patched_bytes(ea1: ida_idaapi.ea_t, ea2: ida_idaapi.ea_t, callable): + """ + 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. + """ + pass + +def get_bytes(ea: ida_idaapi.ea_t, size: int, gmb_flags: int=GMB_READALL): + """ + Get the specified number of bytes of the program. + + @param ea: program address + @param size: number of bytes to return + @param gmb_flags: OR'ed combination of GMB_* values (defaults to GMB_READALL) + @return: the bytes (as bytes object), or None in case of failure + """ + pass + +def get_bytes_and_mask(ea: ida_idaapi.ea_t, size: int, gmb_flags: int=GMB_READALL): + """ + 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 + @param gmb_flags: OR'ed combination of GMB_* values (defaults to GMB_READALL) + @return: a tuple (bytes, mask), or None in case of failure. + Both 'bytes' and 'mask' are 'str' instances. + """ + pass + +# Conversion options for get_strlit_contents(): +STRCONV_ESCAPE = 0x00000001 # convert non-printable characters to C escapes (\n, \xNN, \uNNNN) + +def get_strlit_contents(ea: ida_idaapi.ea_t, len: int, type: int, flags: int = 0): + """ + Get contents of string literal, as UTF-8-encoded codepoints. + It works even if the string has not been created in the database yet. + + Note that the returned value will be of type 'bytes'; if + you want auto-conversion to unicode strings (that is: real Python + 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, + <u>and</u> the 'type' of string at the given location. + @param flags: combination of STRCONV_..., to perform output conversion. + @return: a bytes-filled str object. + """ + pass + + +def op_stroff(*args) -> bool: + """ + Set operand representation to be 'struct offset'. + + This function has the following signatures: + + 1. op_stroff(ins: ida_ua.insn_t, n: int, path: List[int], delta: int) + 2. op_stroff(ins: ida_ua.insn_t, n: int, path: ida_pro.tid_array, path_len: int, delta: int) (backward-compatibility only) + + Here is an example using this function: + + ins = ida_ua.insn_t() + if ida_ua.decode_insn(ins, some_address): + operand = 0 + path = [ida_typeinf.get_named_type_tid("my_stucture_t")] # a one-element path + ida_bytes.op_stroff(ins, operand, path, 0) + """ + pass + +def get_stroff_path(*args): + """ + Get the structure offset path for operand `n`, at the + specified address. + + This function has the following signatures: + + 1. get_stroff_path(ea: ida_idaapi.ea_t, n : int) -> Tuple[List[int], int] + 2. get_stroff_path(path: tid_array, delta: sval_pointer, ea: ida_idaapi.ea_t, n : int) (backward-compatibility only) + + @param ea address where the operand holds a path to a structure offset (1st form) + @param n operand number (1st form) + @return a tuple holding a (list_of_tid_t's, delta_within_the_last_type), or (None, None) + """ + pass + +def bin_search(*args): + """ + Search for a set of bytes in the program + + This function has the following signatures: + + 1. bin_search(start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, data: compiled_binpat_vec_t, flags: int) -> Tuple[ida_idaapi.ea_t, int] + 2. bin_search(start_ea: ida_idaapi.ea_t, end_ea: ida_idaapi.ea_t, image: bytes, mask: bytes, len: int, flags: int) -> ida_idaapi.ea_t + + The return value type will differ depending on the form: + + 1. a tuple `(matched-address, index-in-compiled_binpat_vec_t)` (1st form) + 2. the address of a match, or ida_idaapi.BADADDR if not found (2nd form) + + This is a low-level function; more user-friendly alternatives + are available. Please see 'find_bytes' and 'find_string'. + + @param start_ea: linear address, start of range to search + @param end_ea: linear address, end of range to search (exclusive) + @param data: (1st form) the prepared data to search for (see parse_binpat_str()) + @param bytes: (2nd form) a set of bytes to match + @param mask: (2nd form) a mask to apply to the set of bytes + @param flags: combination of BIN_SEARCH_* flags + @return: either a tuple holding both the address of the match and the index of the compiled pattern that matched, or the address of a match (ida_idaapi.BADADDR if not found) + """ + pass + + + + + diff --git a/apidoc/ida_dbg.py b/apidoc/ida_dbg.py new file mode 100644 index 0000000..780a743 --- /dev/null +++ b/apidoc/ida_dbg.py @@ -0,0 +1,125 @@ + +def get_manual_regions(*args): + """ + Returns the manual memory regions + + This function has the following signatures: + + 1. get_manual_regions() -> List[Tuple(ida_idaapi.ea_t, ida_idaapi.ea_t, str, str, ida_idaapi.ea_t, int, int)] + Where each tuple holds (start_ea, end_ea, name, sclass, sbase, bitness, perm) + 2. get_manual_regions(storage: meminfo_vec_t) -> None + """ + pass + + +def dbg_is_loaded(): + """ + Checks if a debugger is loaded + + @return: Boolean + """ + pass + + +def refresh_debugger_memory(): + """ + Refreshes the debugger memory + + @return: Nothing + """ + pass + + +def py_list_bptgrps(): + """ + Returns list of breakpoint group names + + @return: A list of strings or None on failure + """ + pass + + +def internal_get_sreg_base(tid: int, sreg_value: int): + """ + Get the sreg base, for the given thread. + + @param tid: the thread ID + @param sreg_value: the sreg value + @return: The sreg base, or BADADDR on failure. + """ + pass + + +def dbg_can_query(): + """ + 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 + """ + pass + + +def get_reg_vals(tid: int, clsmask: int=-1) -> 'ida_idd.regvals_t': + """ + Fetch live registers values for the thread + + @param tid The ID of the thread to read registers for + @param clsmask An OR'ed mask of register classes to + read values for (can be used to speed up the + retrieval process) + + @return: a list of register values (empty if an error occurs) + """ + pass + + +def get_reg_val(*args): + """ + Get a register value. + + This function has the following signatures: + + 1. get_reg_val(name: str) -> Union[int, float, bytes] + 2. get_reg_val(name: str, regval: regval_t) -> bool + + The first (and most user-friendly) form will return + a value whose type is related to the register type. + I.e., either an integer, a float or, in the case of large + vector registers, a bytes sequence. + + @param name the register name + @return the register value (1st form) + """ + pass + +def set_reg_val(*args) -> bool: + """ + Set a register value by name + + This function has the following signatures: + 1. set_reg_val(name: str, value: Union[int, float, bytes]) -> bool + 1. set_reg_val(tid: int, regidx: int, value: Union[int, float, bytes]) -> bool + + Depending on the register type, this will expect + either an integer, a float or, in the case of large + vector registers, a bytes sequence. + + @param name (1st form) the register name + @param tid (2nd form) the thread ID + @param regidx (2nd form) the register index + @param value the register value + @return success + """ + pass + +def list_bptgrps() -> List[str]: + """ + Retrieve the list of absolute path of all folders of bpt dirtree. + Synchronous function, Notification, none (synchronous function) + """ + pass diff --git a/apidoc/ida_diskio.py b/apidoc/ida_diskio.py new file mode 100644 index 0000000..e84db5b --- /dev/null +++ b/apidoc/ida_diskio.py @@ -0,0 +1,16 @@ + +def enumerate_files(path, fname, callback): + """ + 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 + """ + pass + diff --git a/apidoc/ida_fpro.py b/apidoc/ida_fpro.py new file mode 100644 index 0000000..bd773e1 --- /dev/null +++ b/apidoc/ida_fpro.py @@ -0,0 +1,109 @@ + +class qfile_t(pyidc_opaque_object_t): + + """A helper class to work with FILE related functions.""" + + def __init__(self, *args): + pass + + def close(self): + """Closes the file""" + pass + + def open(self, filename, mode): + """ + Opens a file + + @param filename: the file name + @param mode: The mode string, ala fopen() style + @return: Boolean + """ + pass + + def set_linput(self, linput): + """Links the current loader_input_t instance to a linput_t instance""" + pass + + @staticmethod + def tmpfile(): + """A static method to construct an instance using a temporary file""" + pass + + def seek(self, offset, whence = ida_idaapi.SEEK_SET): + """ + Set input source position + + @param offset: the seek offset + @param whence: the position to seek from + @return: the new position (not 0 as fseek!) + """ + pass + + def tell(self): + """Returns the current position""" + pass + + def gets(self, len): + """ + Reads a line from the input file. Returns the read line or None + + @param len: the maximum line length + """ + pass + + def read(self, size): + """ + Reads from the file. Returns the buffer or None + + @param size: the maximum number of bytes to read + @return: a str, or None + """ + pass + + def write(self, buf): + """ + Writes to the file. Returns 0 or the number of bytes written + + @param buf: the str to write + @return: result code + """ + pass + + def readbytes(self, size, big_endian): + """ + Similar to read() but it respect the endianness + + @param size: the maximum number of bytes to read + @param big_endian: endianness + @return a str, or None + """ + pass + + def writebytes(self, size, big_endian): + """ + Similar to write() but it respect the endianness + + @param buf: the str to write + @param big_endian: endianness + @return: result code + """ + pass + + def flush(self): + pass + + def get_byte(self): + """Reads a single byte from the file. Returns None if EOF or the read byte""" + pass + + def put_byte(self): + """ + Writes a single byte to the file + + @param chr: the byte value + """ + pass + + def opened(self): + """Checks if the file is opened or not""" + pass diff --git a/apidoc/ida_funcs.py b/apidoc/ida_funcs.py new file mode 100644 index 0000000..ada3106 --- /dev/null +++ b/apidoc/ida_funcs.py @@ -0,0 +1,63 @@ + +def get_fchunk_referer(ea: int, idx): + pass + +def get_idasgn_desc(n): + """ + 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) + """ + pass + +def get_idasgn_desc_with_matches(n): + """ + 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) + """ + pass + +class func_t(object): + def get_name(self): + """ + Get the function name + + @return the function name + """ + pass + + def get_frame_object(self): + """ + Retrieve the function frame, in the form of a structure + where frame offsets that are accessed by the program, as well + as areas for "saved registers" and "return address", are + represented by structure members. + + If the function has no associated frame, return None + + @return a ida_typeinf.tinfo_t object representing the frame, or None + """ + pass + + def get_prototype(self): + """ + Retrieve the function prototype. + + Once you have obtained the prototype, you can: + + * retrieve the return type through ida_typeinf.tinfo_t.get_rettype() + * iterate on the arguments using ida_typeinf.tinfo_t.iter_func() + + If the function has no associated prototype, return None + + @return a ida_typeinf.tinfo_t object representing the prototype, or None + """ + pass + diff --git a/apidoc/ida_graph.py b/apidoc/ida_graph.py new file mode 100644 index 0000000..a8ee32d --- /dev/null +++ b/apidoc/ida_graph.py @@ -0,0 +1,65 @@ + +class GraphViewer(ida_kernwin.CustomIDAMemo): + + def OnGetText(self, node_id): + """ + Triggered when the graph viewer wants the text and color for a given node. + This callback is triggered one time for a given node (the value will be cached and used later without callin Python). + When you call refresh then again this callback will be called for each node. + + This callback is mandatory. + + @return: Return a string to describe the node text or return a tuple (node_text, node_color) to describe bot text and color + """ + return str(self[node_id]) + + def OnActivate(self): + """ + Triggered when the graph window gets the focus + @return: None + """ + print("Activated....") + + def OnDeactivate(self): + """Triggered when the graph window loses the focus + @return: None + """ + print("Deactivated....") + + def OnHint(self, node_id): + """ + Triggered when the graph viewer wants to retrieve hint text associated with a given node + + @return: None if no hint is avail or a string designating the hint + """ + return "hint for " + str(node_id) + + def OnEdgeHint(self, src, dst): + """ + Triggered when the graph viewer wants to retrieve hint text associated with a edge + + @return: None if no hint is avail or a string designating the hint + """ + return "hint for edge %d -> %d" % (src, dst) + + def OnClose(self): + """Triggered when the graph viewer window is being closed + @return: None + """ + 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]) + return True + + def OnDblClick(self, node_id): + """ + Triggerd when a node is double-clicked. + @return: False to ignore the click and True otherwise + """ + print("dblclicked on", self[node_id]) + return True diff --git a/apidoc/ida_hexrays.py b/apidoc/ida_hexrays.py new file mode 100644 index 0000000..e9d1fdc --- /dev/null +++ b/apidoc/ida_hexrays.py @@ -0,0 +1,31 @@ + +class cfunc_t(object): + def find_item_coords(self, *args): + """ + This method has the following signatures: + + 1. find_item_coords(item: citem_t) -> Tuple[int, int] + 2. find_item_coords(item: citem_t, x: int_pointer, y: int_pointer) -> bool + + NOTE: The second form is retained for backward-compatibility, + but we strongly recommend using the first. + + @param item The item to find coordinates for in the pseudocode listing + """ + pass + +class cfuncptr_t(object): + def find_item_coords(self, *args): + """ + This method has the following signatures: + + 1. find_item_coords(item: citem_t) -> Tuple[int, int] + 2. find_item_coords(item: citem_t, x: int_pointer, y: int_pointer) -> bool + + NOTE: The second form is retained for backward-compatibility, + but we strongly recommend using the first. + + @param item The item to find coordinates for in the pseudocode listing + """ + pass + diff --git a/apidoc/ida_idaapi.py b/apidoc/ida_idaapi.py new file mode 100644 index 0000000..d9a55de --- /dev/null +++ b/apidoc/ida_idaapi.py @@ -0,0 +1,171 @@ +def parse_command_line(cmdline): + """ + Parses a space separated string (quotes and escape character are supported) + @param cmdline: The command line to parse + @return: A list of strings or None on failure + """ + pass + +def set_script_timeout(timeout): + """ + 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 + """ + pass + +def 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 + """ + pass + +def 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 + """ + pass + +def RunPythonStatement(stmt): + """ + This is an IDC function exported from the Python plugin. + It is used to evaluate Python statements from IDC. + @param stmt: The statement to evaluate + @return: 0 - on success otherwise a string containing the error + """ + pass + +class loader_input_t(pyidc_opaque_object_t): + """ + A helper class to work with linput_t related functions. + This class is also used by file loaders scripts. + """ + def __init__(self, pycapsule=None): + pass + + def close(self): + """Closes the file""" + pass + + def open(self, filename, remote = False): + """ + Opens a file (or a remote file) + + @param filename: the file name + @param remote: whether the file is local, or remote + @return: Boolean + """ + pass + + def set_linput(self, linput): + """ + Links the current loader_input_t instance to a linput_t instance + + @param linput: the linput_t to link to + """ + pass + + @staticmethod + def from_fp(fp): + """ + A static method to construct an instance from a FILE* + + @param fp: a FILE pointer + @return: a new instance, or None + """ + pass + + def open_memory(self, start: ea_t, size: int): + """ + 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 + """ + pass + + def seek(self, offset: int, whence = SEEK_SET): + """ + Set input source position + + @param offset: the seek offset + @param whence: the position to seek from + @return: the new position (not 0 as fseek!) + """ + pass + + def tell(self): + """Returns the current position""" + pass + + def getz(self, size: int, fpos: int=-1): + """ + Returns a zero terminated string at the given position + + @param size: maximum size of the string + @param fpos: if != -1 then seek will be performed before reading + @return: The string or None on failure. + """ + pass + + def gets(self, len: int): + """ + Reads a line from the input file. Returns the read line or None + + @param len: the maximum line length + @return: a str, or None + """ + pass + + def read(self, size: int=-1): + """ + Read up to size bytes (all data if size is negative). Return an empty bytes object on EOF. + + @param size: the maximum number of bytes to read + @return a bytes object + """ + pass + + def readbytes(self, size: int, big_endian: bool): + """ + Similar to read() but it respect the endianness + + @param size: the maximum number of bytes to read + @param big_endian: endianness + @return a str, or None + """ + pass + + def file2base(self, pos: int, ea1: ea_t, ea2: ea_t, patchable: bool): + """ + 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 + """ + pass + + def get_byte(self): + """Reads a single byte from the file. Returns None if EOF or the read byte""" + pass + + def opened(self): + """Checks if the file is opened or not""" + pass diff --git a/apidoc/ida_idd.py b/apidoc/ida_idd.py new file mode 100644 index 0000000..ed4fe9e --- /dev/null +++ b/apidoc/ida_idd.py @@ -0,0 +1,71 @@ + +def dbg_get_registers(): + """ + 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) + """ + pass + + +def dbg_get_thread_sreg_base(tid, sreg_value): + """ + 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 + """ + pass + + +def dbg_read_memory(ea, sz): + """ + Reads from the debugee's memory at the specified ea + + @param ea: the debuggee's memory address + @param sz: the amount of data to read + @return: + - The read buffer (as bytes) + - Or None on failure + """ + pass + + +def dbg_write_memory(ea, buffer): + """ + Writes a buffer to the debugee's memory + + @param ea: the debuggee's memory address + @param buf: a bytes object to write + @return: Boolean + """ + pass + + +def dbg_get_name(): + """ + This function returns the current debugger's name. + + @return: Debugger name or None if no debugger is active + """ + pass + + +def dbg_get_memory_info(): + """ + 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) + """ + pass + + diff --git a/apidoc/ida_idp.py b/apidoc/ida_idp.py new file mode 100644 index 0000000..5548965 --- /dev/null +++ b/apidoc/ida_idp.py @@ -0,0 +1,138 @@ + +def AssembleLine(ea, cs, ip, use32, line): + """ + 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 + """ + pass + + +def assemble(ea, cs, ip, use32, line): + """ + 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. + """ + +def ph_get_id(): + """ + Returns the 'ph.id' field + """ + pass + +def ph_get_version(): + """ + Returns the 'ph.version' + """ + pass + +def ph_get_flag(): + """ + Returns the 'ph.flag' + """ + pass + +def ph_get_cnbits(): + """ + Returns the 'ph.cnbits' + """ + pass + +def ph_get_dnbits(): + """ + Returns the 'ph.dnbits' + """ + pass + +def ph_get_reg_first_sreg(): + """ + Returns the 'ph.reg_first_sreg' + """ + pass + +def ph_get_reg_last_sreg(): + """ + Returns the 'ph.reg_last_sreg' + """ + pass + +def ph_get_segreg_size(): + """ + Returns the 'ph.segreg_size' + """ + pass + +def ph_get_reg_code_sreg(): + """ + Returns the 'ph.reg_code_sreg' + """ + pass + +def ph_get_reg_data_sreg(): + """ + Returns the 'ph.reg_data_sreg' + """ + pass + +def ph_get_icode_return(): + """ + Returns the 'ph.icode_return' + """ + pass + +def ph_get_instruc_start(): + """ + Returns the 'ph.instruc_start' + """ + pass + +def ph_get_instruc_end(): + """ + Returns the 'ph.instruc_end' + """ + pass + +def ph_get_tbyte_size(): + """ + Returns the 'ph.tbyte_size' field as defined in he processor module + """ + pass + +def ph_get_instruc(): + """ + Returns a list of tuples (instruction_name, instruction_feature) containing the + instructions list as defined in he processor module + """ + pass + +def ph_get_regnames(): + """ + Returns the list of register names as defined in the processor module + """ + pass + +def ph_get_operand_info(ea: ida_idaapi.ea_t, n: int) -> Union[Tuple[int, ida_idaapi.ea_t, int, int, int], None]: + """ + 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. + """ + pass diff --git a/apidoc/ida_kernwin.py b/apidoc/ida_kernwin.py new file mode 100644 index 0000000..bd76dc3 --- /dev/null +++ b/apidoc/ida_kernwin.py @@ -0,0 +1,466 @@ + +class simplecustviewer_t(object): + def OnClick(self, shift): + """ + User clicked in the view + @param shift: Shift flag + @return: Boolean. True if you handled the event + """ + print("OnClick, shift=%d" % shift) + return True + + def OnDblClick(self, shift): + """ + User dbl-clicked in the view + @param shift: Shift flag + @return: Boolean. True if you handled the event + """ + print("OnDblClick, shift=%d" % shift) + return True + + def OnCursorPosChanged(self): + """ + Cursor position changed. + @return: Nothing + """ + print("OnCurposChanged") + + def OnClose(self): + """ + The view is closing. Use this event to cleanup. + @return: Nothing + """ + print("OnClose") + + def OnKeydown(self, vkey, shift): + """ + User pressed a key + @param vkey: Virtual key code + @param shift: Shift flag + @return: Boolean. True if you handled the event + """ + print("OnKeydown, vk=%d shift=%d" % (vkey, shift)) + return False + + def OnHint(self, lineno): + """ + Hint requested for the given line number. + @param lineno: The line number (zero based) + @return: + - tuple(number of important lines, hint string) + - None: if no hint available + """ + return (1, "OnHint, line=%d" % lineno) + + def OnPopupMenu(self, menu_id): + """ + A context (or popup) menu item was executed. + @param menu_id: ID previously registered with add_popup_menu() + @return: Boolean + """ + print("OnPopupMenu, menu_id=" % menu_id) + return True + +def register_timer(interval, callback): + """ + 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 + """ + pass + +def unregister_timer(timer_obj): + """ + 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. + """ + pass + +def choose_idasgn(): + """ + Opens the signature chooser + + @return: None or the selected signature name + """ + pass + +def get_highlight(v, flags=0): + """ + Returns the currently highlighted identifier and flags + + @param v: The UI widget to operate on + @param flags: Optionally specify a slot (see kernwin.hpp), current otherwise + @return: a tuple (text, flags), or None if nothing + is highlighted or in case of error. + """ + pass + +def free_custom_icon(icon_id): + """ + Frees an icon loaded with load_custom_icon() + + @param icon_id: The ID of the icon to free + """ + pass + +def read_selection(v, p1, p2): + """ + Read the user selection, and store its information in p1 (from) and p2 (to). + + This can be used as follows: + + + >>> p1 = ida_kernwin.twinpos_t() + p2 = ida_kernwin.twinpos_t() + view = ida_kernwin.get_current_viewer() + ida_kernwin.read_selection(view, p1, p2) + + + At that point, p1 and p2 hold information for the selection. + But, the 'at' property of p1 and p2 is not properly typed. + To specialize it, call #place() on it, passing it the view + they were retrieved from. Like so: + + + >>> place0 = p1.place(view) + place1 = p2.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 v: The view to retrieve the selection for. + @param p1: Storage for the "from" part of the selection. + @param p2: Storage for the "to" part of the selection. + @return: a bool value indicating success. + """ + pass + + +def ask_text(max_size: int, defval: str, prompt: str) -> Union[str, None]: + """ + 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 + """ + pass + +def ask_str(defval, hist, prompt): + """ + Asks for a long text + + @param defval: The default value + @param hist: history id + @param prompt: The prompt value + @return: None or the entered string + """ + pass + +def process_ui_action(name: str, flags: int=0): + """ + Invokes an IDA UI action by name + + @param name: action name + @param flags: reserved + @return: Boolean + """ + pass + +def del_hotkey(ctx): + """ + Deletes a previously registered function hotkey + + @param ctx: Hotkey context previously returned by add_hotkey() + + @return: Boolean. + """ + pass + +def add_hotkey(hotkey, callable): + """ + Associates a function call with a hotkey. + Callable 'callable' will be called each time the hotkey is pressed + + @param hotkey: The hotkey + @param callable: Callable + + @return: Context object on success or None on failure. + """ + pass + + +MFF_FAST = 0x0000 +"""execute code as soon as possible +this mode is ok call ui related functions +that do not query the database.""" + +MFF_READ = 0x0001 +"""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)""" + +MFF_WRITE = 0x0002 +"""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""" + +MFF_NOWAIT = 0x0004 +"""Do not wait for the request to be executed. +he caller should ensure that the request is not +destroyed until the execution completes. +if not, the request will be ignored. +the return code of execute_sync() is meaningless +in this case. +This flag can be used to delay the code execution +until the next UI loop run even from the main thread""" + +def execute_sync(callable, reqf): + """ + 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 + """ + pass + +def execute_ui_requests(callable_list): + """ + 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 callable item + """ + pass + +def set_dock_pos(src_ctrl, dest_ctrl, orient, left = 0, top = 0, right = 0, bottom = 0): + """ + Sets the dock orientation of a window relatively to another window. + + Use the left, top, right, bottom parameters if DP_FLOATING is used, + or if you want to specify the width of docked windows. + + @param src_ctrl: Source docking control + @param dest_ctrl: Destination docking control + @param orient: One of DP_XXXX constants + @return: Boolean + + Example: + set_dock_pos('Structures', 'Enums', DP_RIGHT) <- docks the Structures window to the right of Enums window + """ + pass + +def is_idaq(): + """ + Returns True or False depending if IDAPython is hosted by IDAQ + """ + pass + +def attach_dynamic_action_to_popup( + unused, + popup_handle, + desc, + popuppath = None, + flags = 0): + """ + Create & insert an action into the widget's popup menu + (::ui_attach_dynamic_action_to_popup). + Note: The action description in the 'desc' parameter is modified by + this call so you should prepare a new description for each call. + For example: + desc = ida_kernwin.action_desc_t(None, 'Dynamic popup action', Handler()) + ida_kernwin.attach_dynamic_action_to_popup(form, popup, desc) + + @param unused: deprecated; should be None + @param popup_handle: target popup + @param desc: action description of type action_desc_t + @param popuppath: can be None + @param flags: a combination of SETMENU_ constants + @return: success + """ + pass + +def set_nav_colorizer(callback): + """ + 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 = ida_kernwin.call_nav_colorizer(ida_colorizer, ea, nbytes) + return long(~orig) + + ida_colorizer = ida_kernwin.set_nav_colorizer(my_colorizer) + + @param callback: the new colorizer + """ + pass + +def call_nav_colorizer(colorizer, ea: ida_idaapi.ea_t, nbytes: int): + """ + To be used with the IDA-provided colorizer, that is + returned as result of the first call to set_nav_colorizer(). + + @param colorizer: the Python colorizer to call + @param ea: the address to colorize + @param nbytes: the size of the range to colorize + """ + pass + +def msg(message): + """ + Display a message in the message window + + @param message: message to print + """ + pass + +def warning(message): + """ + Display a message in a warning message box + + @param message: message to print + """ + pass + +def error(message): + """ + Display a fatal message in a message box and quit IDA + + @param format: message to print + """ + pass + +def get_navband_pixel(ea): + """ + Maps an address, onto a pixel coordinate within the navigation band + + @param ea: The address to map + @return: a list [pixel, is_vertical] + """ + pass + +def choose_find(title: str) -> Union[object, None]: + """ + Retrieve the chooser object by title + + @param title the chooser title + @return the chooser, or None + """ + pass + +class chooser_base_t(object): + def get_row(self, n: int) -> Tuple[List[str], int, chooser_item_attrs_t]: + """ + Get data & attributes for a row in a chooser. + + @param n The row number + @return a tuple (list-of-strings, icon-id, row-attributes) + """ + pass + +def get_chooser_data(title: str, n: int) -> List[str]: + """ + Get the text corresponding to the index N in the chooser data. + Use -1 to get the header. + + @param title The chooser title + @return a list of strings, or None + """ + pass + +def get_registered_actions() -> List[str]: + """ + Get a list with the names of all currently-registered actions. + + @return the list of action names + """ + pass + +class jobj_wrapper_t(object): + def get_dict(self) -> dict: + """ + Retrieve the contents of this object, as a dict + + @return a dict containing all kvp's in this object + """ + pass + +class place_t(object): + def generate(self, ud, maxsize: int) -> Tuple[List[str], int, int, int]: + """ + Generate text lines for the current location. + + @param ud The user data object + @param maxsize The maximum number of lines to generate + @return a tuple (lines-of-text, default-line-number, prefix-color, background-color) + """ + pass + +def restore_database_snapshot(snapshot, callback, userdata) -> bool: + """ + Restore a database snapshot. + + Note: This call is asynchronous. When it is completed, the callback will be triggered. + + @param snapshot the snapshot object + @param callback a callback function + @param userdata payload to pass to the callback + @return success + """ + pass + +def take_database_snapshot(snapshot) -> Tuple[bool, str]: + """ + Take a database snapshot. + + @param snapshot the snapshot object + @return a tuple (success, error-message) + """ + pass + +def get_custom_viewer_location(*args) -> bool: + """ + Get information about the current location in a listing + + This function has the following signatures: + + 1. get_custom_viewer_location(out_entry: ida_moves.lochist_entry_t, widget: TWidget, mouse: bool=False) -> bool + 2. get_custom_viewer_location(out_entry: ida_kernwin.listing_location_t, widget: TWidget, flags: int=0) -> bool + + The 2nd form is a superset of the 1st, and retrieves + the text (and tags) of the text. + """ + pass diff --git a/apidoc/ida_lines.py b/apidoc/ida_lines.py new file mode 100644 index 0000000..c1a354d --- /dev/null +++ b/apidoc/ida_lines.py @@ -0,0 +1,15 @@ + +def generate_disassembly(ea, max_lines, as_stack, notags): + """ + 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, list(lines)) : Returns a tuple containing + the most important line number and a list of generated lines + """ + pass + diff --git a/apidoc/ida_loader.py b/apidoc/ida_loader.py new file mode 100644 index 0000000..b2dcb4e --- /dev/null +++ b/apidoc/ida_loader.py @@ -0,0 +1,36 @@ + +def mem2base(mem, ea, fpos): + """ + 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 + """ + pass + +def load_plugin(name): + """ + Loads a plugin + + @param name: short plugin name without path and extension, + or absolute path to the file name + @return: + - None if plugin could not be loaded + - An opaque object representing the loaded plugin + """ + pass + +def run_plugin(plg, arg): + """ + Runs a plugin + + @param plg: A plugin object (returned by load_plugin()) + @param arg: the code to pass to the plugin's "run()" function + @return: Boolean + """ + pass diff --git a/apidoc/ida_lumina.py b/apidoc/ida_lumina.py new file mode 100644 index 0000000..a4d2850 --- /dev/null +++ b/apidoc/ida_lumina.py @@ -0,0 +1,9 @@ + +def split_metadata(metadata: bytes) -> dict: + """ + Split the metadata blob into a set of KVP's + + @param metadata a metadata blob + @return a set of KVP's + """ + pass diff --git a/apidoc/ida_nalt.py b/apidoc/ida_nalt.py new file mode 100644 index 0000000..2a5f005 --- /dev/null +++ b/apidoc/ida_nalt.py @@ -0,0 +1,21 @@ + +def get_import_module_name(mod_index): + """ + Returns the name of an imported module given its index + + @param mod_index: the module index + @return: None or the module name + """ + pass + + +def enum_import_names(mod_index, callback): + """ + Enumerate imports from a specific module. + Please refer to list_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) + """ + pass diff --git a/apidoc/ida_netnode.py b/apidoc/ida_netnode.py new file mode 100644 index 0000000..837912c --- /dev/null +++ b/apidoc/ida_netnode.py @@ -0,0 +1,22 @@ + +class netnode(object): + def getblob(self, start, tag) -> Union[bytes, None]: + """ + Get a blob from a netnode. + + @param start the index where the blob starts (it may span on multiple indexes) + @param tag the netnode tag + @return a blob, or None + """ + pass + + def getclob(self, start, tag) -> Union[str, None]: + """ + Get a large amount of text from a netnode. + + @param start the index where the clob starts (it may span on multiple indexes) + @param tag the netnode tag + @return a clob, or None + """ + pass + diff --git a/apidoc/ida_pro.py b/apidoc/ida_pro.py new file mode 100644 index 0000000..eb81e9a --- /dev/null +++ b/apidoc/ida_pro.py @@ -0,0 +1,9 @@ + +def str2user(str): + """ + Insert C-style escape characters to string + + @param str: the input string + @return: new string with escape characters inserted, or None + """ + pass diff --git a/apidoc/ida_segment.py b/apidoc/ida_segment.py new file mode 100644 index 0000000..79dc64e --- /dev/null +++ b/apidoc/ida_segment.py @@ -0,0 +1,15 @@ + +def get_defsr(s, reg): + """ + Deprecated, use instead: + value = s.defsr[reg] + """ + pass + + +def set_defsr(s, reg, value): + """ + Deprecated, use instead: + s.defsr[reg] = value + """ + pass diff --git a/apidoc/ida_typeinf.py b/apidoc/ida_typeinf.py new file mode 100644 index 0000000..1e3a5de --- /dev/null +++ b/apidoc/ida_typeinf.py @@ -0,0 +1,559 @@ + +def calc_type_size(til: til_t, type: bytes): + """ + Returns the size of a type + @param til: Type info library. 'None' can be passed. + @param type: serialized type byte string + @return: + - None on failure + - The size of the type + """ + pass + +def apply_type(til: til_t, type: bytes, fields: bytes, ea: ida_idaapi.ea_t, flags: int) -> bool: + """ + Apply the specified type to the address + + @param til: Type info library. 'None' can be used. + @param type: type string + @param 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 + """ + pass + +def get_arg_addrs(caller: ida_idaapi.ea_t): + """ + Retrieve addresses of argument initialization instructions + + @param caller: the address of the call instruction + @return: list of instruction addresses + """ + pass + +def unpack_object_from_idb(til: til_t, type: bytes, fields: bytes, ea: ida_idaapi.ea_t, pio_flags: int = 0): + """ + Unpacks from the database at 'ea' to an object. + Please refer to unpack_object_from_bv() + """ + pass + +def unpack_object_from_bv(til: til_t, type: bytes, fields: bytes, bytes, pio_flags: int = 0): + """ + Unpacks a buffer into an object. + Returns the error_t returned by idaapi.pack_object_to_idb + + @param til: Type library. 'None' can be passed. + @param type: 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 + """ + pass + +def pack_object_to_idb(obj, til: til_t, type: bytes, fields: bytes, ea: ida_idaapi.ea_t, pio_flags: int = 0): + """ + 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 til: Type library. 'None' can be passed. + @param type: 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 + """ + pass + +def pack_object_to_bv(obj, til: til_t, type: bytes, fields: bytes, base_ea: ida_idaapi.ea_t, pio_flags: int = 0): + """ + Packs a typed object to a string + + @param til: Type library. 'None' can be passed. + @param type: 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 + """ + pass + +def get_named_type(til: til_t, name: str, ntf_flags: int): + """ + Get a type data by its name. + + @param til: 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 + """ + pass + +class tinfo_t(object): + def __init__(self, *args, ordinal=None, name=None, tid=None, til=None): + """ + Create a type object with the provided argumens. + + This constructor has the following signatures: + + 1. tinfo_t(decl_type: type_t) + 2. tinfo_t(decl: str, til: til_t = None, pt_flags: int = 0) + + The latter form will create the type object by parsing the type declaration + + Alternatively, you can use a form accepting the following keyword arguments: + + * ordinal: int + * name: str + * tid: int + * til: til_t=None # `None` means `get_idati()` + + E.g., + + * tinfo_t(ordinal=3) + * tinfo_t(ordinal=10, til=get_idati()) + * tinfo_t(name="mytype_t") + * tinfo_t(name="thattype_t", til=my_other_til) + * tinfo_t(tid=ida_nalt.get_strid(some_address)) + + The constructor may raise an exception if data was invalid, or if parsing failed. + + @param decl_type A simple type + @param decl A valid C declaration + @param til A type library, or `None` to use the (`get_idati()`) default + @param ordinal An ordinal in the type library + @param name A valid type name + @param pt_flags Parsing flags + """ + pass + + def get_udm(self, *args) -> Union[Tuple[int, 'udm_t'], Tuple[None, None]]: + """ + Retrieve a structure/union member with either the specified name + or the specified index, in the specified tinfo_t object. + + This function has the following signatures: + + 1. get_udm(index: int) + 2. get_udm(name: str) + + @param index a member index (1st form) + @param name a member name (2nd form) + @return a tuple (int, udm_t), or (-1, None) if member not found + """ + pass + + def get_udm_by_offset(self, offset: int): + """ + Retrieve a structure/union member with the specified offset, + in the specified tinfo_t object. + + @param offset the member offset + @return a tuple (int, udm_t), or (-1, None) if member not found + """ + pass + + def add_udm(self, *args): + """ + Add a member to the current structure/union. + + When creating a new structure/union from scratch, you might + want to first call `create_udt()` + + This method has the following signatures: + + 1. add_udm(udm: udm_t, etf_flags: int = 0, times: int = 1, idx: int = -1) + 2. add_udm(name: str, type: type_t | tinfo_t | str, offset: int = 0, etf_flags: int = 0, times: int = 1, idx: int = -1) + + In the 2nd form, the 'type' descriptor, can be one of: + + * type_t: if the type is simple (integral/floating/bool). E.g., `BTF_INT` + * tinfo_t: can handle more complex types (structures, pointers, arrays, ...) + * str: a C type declaration + + If an input argument is incorrect, the constructor may raise an exception + + @param udm The member, fully initialized (1st form) + @param name Member name - must not be empty + @param type Member type + @param offset the member offset in bits. It is the caller's responsibility + to specify correct offsets. + @param etf_flags an OR'ed combination of ETF_ flags + @param times how many times to add the new member + @param idx the index in the udm array where the new udm should be placed. + If the specified index cannot be honored because it would spoil + the udm sorting order, it is silently ignored. + """ + pass + + def get_edm(self, *args) -> Tuple[int, 'edm_t']: + """ + Retrieve an enumerator with either the specified name + or the specified index, in the specified tinfo_t object. + + This function has the following signatures: + + 1. get_edm(index: int) + 2. get_edm(name: str) + + @param index an enumerator index (1st form). + @param name an enumerator name (2nd form). + @return a tuple (int, edm_t), or (-1, None) if member not found + """ + pass + + def get_edm_by_value(self, value: int, bmask: int = DEFMASK64, serial: int = 0) -> Tuple[int, 'edm_t']: + """ + Retrieve an enumerator with the specified value, + in the specified tinfo_t object. + + @param value the enumerator value + @return a tuple (int, edm_t), or (-1, None) if member not found + """ + pass + + def add_edm(self, *args): + """ + Add an enumerator to the current enumeration. + + When creating a new enumeration from scratch, you might + want to first call `create_enum()` + + This method has the following signatures: + + 1. add_edm(edm: edm_t, bmask: int = -1, etf_flags: int = 0, idx: int = -1) + 2. add_edm(name: str, value: int, bmask: int = -1, etf_flags: int = 0, idx: int = -1) + + If an input argument is incorrect, the constructor may raise an exception + + @param edm The member, fully initialized (1st form) + @param name Enumerator name - must not be empty + @param value Enumerator value + @param bmask A bitmask to which the enumerator belongs + @param etf_flags an OR'ed combination of ETF_ flags + @param idx the index in the edm array where the new udm should be placed. + If the specified index cannot be honored because it would spoil + the edm sorting order, it is silently ignored. + """ + pass + + def del_edm(self, *args): + """ + Delete an enumerator with the specified name + or the specified index, in the specified tinfo_t object. + + This method has the following signatures: + + 1. del_edm(name: str) -> int + 2. del_edm(index: int) -> int + + @param name an enumerator name (1st form) + @param index an enumerator index (2nd form) + @return TERR_OK in case of success, or another TERR_* value in case of error + """ + pass + + def del_edm_by_value(self, value: int, etf_flags: int=0, bmask: int = DEFMASK64, serial: int = 0): + """ + Delete an enumerator with the specified value, + in the specified tinfo_t object. + + @param value the enumerator value + @return TERR_OK in case of success, or another TERR_* value in case of error + """ + pass + + def iter_struct(self): + """ + Iterate on the members composing this structure. + + Example: + + til = ida_typeinf.get_idati() + tif = til.get_named_type("my_struc") + for udm in tif.iter_struct(): + print(f"{udm.name} at bit offset {udm.offset}") + + Will raise an exception if this type is not a structure. + + @return a udm_t-producing generator + """ + pass + + def iter_union(self): + """ + Iterate on the members composing this union. + + Example: + + til = ida_typeinf.get_idati() + tif = til.get_named_type("my_union") + for udm in tif.iter_union(): + print(f"{udm.name}, with type {udm.type}") + + Will raise an exception if this type is not a union. + + @return a udm_t-producing generator + """ + pass + + def iter_udt(self): + """ + Iterate on the members composing this structure, or union. + + Example: + + til = ida_typeinf.get_idati() + tif = til.get_named_type("my_type") + for udm in tif.iter_udt(): + print(f"{udm.name} at bit offset {udm.offset} with type {udm.type}") + + Will raise an exception if this type is not a structure, or union + + @return a udm_t-producing generator + """ + pass + + def iter_enum(self): + """ + Iterate on the members composing this enumeration. + + Example: + + til = ida_typeinf.get_idati() + tif = til.get_named_type("my_enum") + for edm in tif.iter_enum(): + print(f"{edm.name} = {edm.value}") + + Will raise an exception if this type is not an enumeration + + @return a edm_t-producing generator + """ + pass + + def iter_func(self): + """ + Iterate on the arguments contained in this function prototype + + Example: + + address = ... + func = ida_funcs.get_func(address) + func_type = func.prototype + for arg in func_type.iter_func(): + print(f"{arg.name}, of type {arg.type}") + + Will raise an exception if this type is not a function + + @return a funcarg_t-producing generator + """ + pass + +class edm_t(object): + def __init__(self, *args): + """ + Create an enumerator, with the specified name and value + + This constructor has the following signatures: + + 1. edm_t(edm: edm_t) + 2. edm_t(name: str, value: int, cmt: str=None) + + @param name Enumerator name. Must not be empty (1st form) + @param value Enumerator value (1st form) + @param cmt Enumerator repeatable comment. May be empty (1st form) + @param edm An enum member to copy + """ + pass + +class udm_t(object): + def __init__(self, *args): + """ + Create a structure/union member, with the specified name and type. + + This constructor has the following signatures: + + 1. udm_t(udm: udm_t) + 2. udm_t(name: str, type, offset: int) + + The 'type' descriptor, can be one of: + + * type_t: if the type is simple (integral/floating/bool). E.g., `BTF_INT` + * tinfo_t: can handle more complex types (structures, pointers, arrays, ...) + * str: a C type declaration + + If an input argument is incorrect, the constructor may raise an exception + The size will be computed automatically. + + @param udm a source udm_t + @param name a valid member name. Must not be empty. + @param type the member type + @param offset the member offset in bits. It is the caller's responsibility + to specify correct offsets. + """ + pass + + def copy(self, src): + """ + Copy the src, into this instance + + @param src The source udm_t + """ + pass + +class udt_type_data_t(object): + def get_best_fit_member(self, disp): + """ + Get the member that is most likely referenced by the specified offset. + + @param disp the byte offset + @return a tuple (int, udm_t), or (-1, None) if member not found + """ + pass + + +class funcarg_t(object): + def __init__(self, *args): + """ + Create a function argument, with the specified name and type. + + This constructor has the following signatures: + + 1. funcarg_t(name: str, type, argloc: argloc_t) + 2. funcarg_t(funcarg: funcarg_t) + + In the 1st form, the 'type' descriptor, can be one of: + + * type_t: if the type is simple (integral/floating/bool). E.g., `BTF_INT` + * tinfo_t: can handle more complex types (structures, pointers, arrays, ...) + * str: a C type declaration + + If an input argument is incorrect, the constructor may raise an exception + + @param name a valid argument name. May not be empty (1st form). + @param type the member type (1st form). + @param argloc the argument location. Can be empty (1st form). + @param funcarg a funcarg_t to copy + """ + pass + +class til_t(object): + def import_type(self, src): + """ + Import a type (and all its dependencies) into this type info library. + + @param src The type to import + @return the imported copy, or None + """ + + def numbered_types(self): + """ + Returns a generator over the numbered types contained in this + type library. + + Every iteration returns a fresh new tinfo_t object + + @return a tinfo_t-producing generator + """ + pass + + def named_types(self): + """ + Returns a generator over the named types contained in this + type library. + + Every iteration returns a fresh new tinfo_t object + + @return a tinfo_t-producing generator + """ + pass + + def get_named_type(self, name): + """ + Retrieves a tinfo_t representing the named type in this type library. + + @param name a type name + @return a new tinfo_t object, or None if not found + """ + pass + + def get_numbered_type(self, ordinal): + """ + Retrieves a tinfo_t representing the numbered type in this type library. + + @param ordinal a type ordinal + @return a new tinfo_t object, or None if not found + """ + pass + +def get_named_type64(til: til_t, name: str, ntf_flags: int=0) -> Union[Tuple[int, bytes, bytes, str, str, int, int], None]: + """ + Get a named type from a type library. + + Please use til_t.get_named_type instead. + """ + pass + +def get_numbered_type(til: til_t, ordinal: int) -> Union[Tuple[bytes, bytes, str, str, int], None]: + """ + Get a type from a type library, by its ordinal + + Please use til_t.get_numbered_type instead. + """ + pass + +def idc_get_local_type_raw(ordinal) -> Tuple[bytes, bytes]: + """ + """ + pass + +def idc_parse_decl(til: til_t, decl: str, flags: int) -> Tuple[str, bytes, bytes]: + """ + """ + pass + +def idc_print_type(type: bytes, fields: bytes, name: str, flags: int) -> str: + """ + """ + pass + +def print_decls(printer: text_sink_t, til: til_t, ordinals: List[int], flags: int) -> int: + """ + Print types (and possibly their dependencies) in a format suitable for using in + a header file. This is the reverse parse_decls(). + + @param printer a handler for printing text + @param til the type library holding the ordinals + @param ordinals a list of ordinals corresponding to the types to print + @param flags a combination of PDF_ constants + @return + >0: the number of types exported + 0: an error occurred + <0: the negated number of types exported. There were minor errors and + the resulting output might not be compilable. + """ + pass + +def remove_tinfo_pointer(tif: tinfo_t, name: str, til: til_t) -> Tuple[bool, str]: + """ + 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 the type info + @param name the name of the type to "unpointerify" + @param til the type library + @return a tuple (success, new-name) + """ + pass + + + diff --git a/apidoc/ida_ua.py b/apidoc/ida_ua.py new file mode 100644 index 0000000..745b1df --- /dev/null +++ b/apidoc/ida_ua.py @@ -0,0 +1,29 @@ + +def decode_preceding_insn(out: insn_t, ea: ida_idaapi.ea_t) -> Tuple[ida_idaapi.ea_t, bool]: + """ + Decodes the preceding instruction. + + @param out: instruction storage + @param ea: current ea + @return: tuple(preceeding_ea or BADADDR, farref = Boolean) + """ + pass + +def construct_macro(*args): + """ + See ua.hpp's construct_macro(). + + This function has the following signatures + + 1. construct_macro(insn: insn_t, enable: bool, build_macro: callable) -> bool + 2. construct_macro(constuctor: macro_constructor_t, insn: insn_t, enable: bool) -> bool + + @param insn: the instruction to build the macro for + @param enable: enable macro generation + @param build_macro: a callable with 2 arguments: an insn_t, and + whether it is ok to consider the next instruction + for the macro + @param constructor: a macro_constructor_t implementation + @return: success + """ + pass diff --git a/apidoc/ida_xref.py b/apidoc/ida_xref.py new file mode 100644 index 0000000..26d47da --- /dev/null +++ b/apidoc/ida_xref.py @@ -0,0 +1,47 @@ + +def create_switch_xrefs(ea, si): + """ + 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 + """ + pass + + +def calc_switch_cases(ea, si): + """ + 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'. + """ + pass + +def create_switch_table(ea, si): + """ + Create switch table from the switch information + + @param ea: address of the 'indirect jump' instruction + @param si: switch information + + @return: Boolean + """ + pass diff --git a/copy_docs_to_p4.sh b/copy_docs_to_p4.sh new file mode 100755 index 0000000..0fd3d66 --- /dev/null +++ b/copy_docs_to_p4.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +set -e + +#ensure out folder exists +mkdir -p $3 + +IN_FOLDER=$(realpath $2) +OUT_FOLDER=$(realpath $3) + +ARTIFACTS=$1 + +echo "[${ARTIFACTS}] GOING to COPY FILES from ${IN_FOLDER} to ${OUT_FOLDER}" + +cd ${OUT_FOLDER} + +echo "[${ARTIFACTS}] make the out folder p4 edit" +p4 edit ... + +echo "[${ARTIFACTS}] copy new files" +rm -rf * +cp -R ${IN_FOLDER}/* . + +echo "[${ARTIFACTS}] adding files to p4" +p4 add ... +p4 revert -a ... + diff --git a/examples-internal/dirtree_missing_inode.py b/examples-internal/dirtree_missing_inode.py new file mode 100755 index 0000000..bf140ab --- /dev/null +++ b/examples-internal/dirtree_missing_inode.py @@ -0,0 +1,138 @@ +""" +summary: Add missing inodes in dirtree structure in "/lost+found" directory + +description: + How to collects inodes for various dirtrees ('Local Types', 'Names', + 'Functions', 'Imports', 'Address bookmark' and 'Breakpoints') in both + the dirtree structure and the database. + Create a directory an links inodes to them in the dirtree structure + You cannot add all inodes to the "/lost+found" directory because inodes + can be at various places in a dirtree structure. + The early dirtree implementations were not perfect and may have missed to + add some inodes in the tree structure, this script corrects this issue. + +keywords: dirtree, recovery +""" + +import ida_dirtree +from ida_dirtree import dirtree_t +import ida_typeinf +import ida_funcs +import ida_name +import ida_dbg +import ida_nalt +import ida_kernwin +import ida_moves + + +def get_ltypes_inode(n): + inode = n + 1 + name = ida_typeinf.get_numbered_type_name(None, inode) + if name is None: + # if the name is None, we have a #deleted type, + # present in flat mode but not in fulltree mode + return True, None + else: + return False, inode + + +def get_func_inode(n): + inode = ida_funcs.getn_func(n).start_ea + return False, inode + + +def get_name_inode(n): + inode = ida_name.get_nlist_ea(n) + if inode is None: + print(hex(inode)) + return False, inode + + +list_inodes_in_idb = [] +def get_import_list(): + def imp_cb(ea, name, ordinal): + list_inodes_in_idb.append(ea) + return True + nimps = ida_nalt.get_import_module_qty() + for i in range(nimps): + ida_nalt.enum_import_names(i, imp_cb) + list_inodes_in_idb.sort() + return len(list_inodes_in_idb) + + +def get_nth_inode_in_idb(n): + return False, list_inodes_in_idb[n] + + +def get_idaplace_list_inodes_in_idb(): + id = ida_kernwin.get_place_class_id("idaplace_t") + p = ida_kernwin.get_place_class_template(id) + r = ida_moves.renderer_info_t() + l = ida_moves.lochist_entry_t(p, r) + for idx in range(ida_moves.bookmarks_t.size(l, None)): + ida_moves.bookmarks_t.get(l, idx, None) + idaloc = ida_kernwin.place_t.as_idaplace_t(l.place()) + list_inodes_in_idb.append(idaloc.ea) + list_inodes_in_idb.sort() + return len(list_inodes_in_idb) + + +def get_bpt_inode(n): + bpt = ida_dbg.bpt_t() + if not ida_dbg.getn_bpt(n, bpt): + return True, None + return False, bpt.bptid + + +class dt_collect_inode_t(ida_dirtree.dirtree_visitor_t): + def __init__(self): + ida_dirtree.dirtree_visitor_t.__init__(self) + self.list_inodes_in_dirtree = [] + def visit(self, c, de): + if dirtree_t.isfile(de): + self.list_inodes_in_dirtree.append(de.idx) + return 0 + + +std_recovery_data = [ + ( ida_dirtree.DIRTREE_LOCAL_TYPES, ida_typeinf.get_ordinal_count, get_ltypes_inode, "Local Types" ), + ( ida_dirtree.DIRTREE_FUNCS, ida_funcs.get_func_qty, get_func_inode, "Local Types" ), + ( ida_dirtree.DIRTREE_NAMES, ida_name.get_nlist_size, get_name_inode, "Names" ), + ( ida_dirtree.DIRTREE_IMPORTS, get_import_list, get_nth_inode_in_idb, "Imports" ), + ( ida_dirtree.DIRTREE_IDAPLACE_BOOKMARKS, get_idaplace_list_inodes_in_idb, get_nth_inode_in_idb, "Address bookmarks" ), + ( ida_dirtree.DIRTREE_BPTS, ida_dbg.get_bpt_qty, get_bpt_inode, "Breakpoints" ), + ] + + +for dt_id, get_count_and_maybe_list_inodes_in_idb, get_inode, title in std_recovery_data: + dt = ida_dirtree.get_std_dirtree(dt_id) + print("### Dirtree ", title) + list_inodes_in_idb = [] + collector = dt_collect_inode_t() + dt.traverse(collector) + set_inodes_in_dirtree = set(collector.list_inodes_in_dirtree) + nb_inodes = get_count_and_maybe_list_inodes_in_idb() + nb_not_list = 0 + nb_list = len(set_inodes_in_dirtree) + print("Number of unique inodes in the idb: %d\nNumber of unique inodes in fulltree mode: %d"%(nb_inodes, nb_list)) + + if nb_list < nb_inodes: + err = dt.mkdir("/lost+found") + if err != ida_dirtree.DTE_OK: + print(dt.errstr(err)) + err = dt.chdir("/lost+found") + if err != ida_dirtree.DTE_OK: + print(dt.errstr(err)) + for n in range(nb_inodes): + inc, inode = get_inode(n) + if inode is not None: + if inode not in set_inodes_in_dirtree: + err = dt.link(inode) + if err != ida_dirtree.DTE_OK: + print("Failed to link inode ", hex(inode), " ", dt.errstr(err) ) + inc = True + if inc: + nb_not_list += 1 + if nb_inodes == nb_list + nb_not_list: + break + diff --git a/examples-internal/idapython_example_raise_exception.py b/examples-internal/idapython_example_raise_exception.py new file mode 100644 index 0000000..d1f5517 --- /dev/null +++ b/examples-internal/idapython_example_raise_exception.py @@ -0,0 +1,4 @@ +"""This internal test is used to verify that pc_api tests won't swallow +exceptions while using IDAPYTHON_EXAMPLE <path_to_script>""" + +raise ImportError("Nasty exception at the script") diff --git a/examples/README.md b/examples/README.md index 3ae4985..1a440b1 100644 --- a/examples/README.md +++ b/examples/README.md @@ -18,6 +18,29 @@ with one or many examples, and those should be also put under test rather than if it consists of a bunch of IDAPython code our users will never see, and cannot be inspired from.) +### Best practices + +* don't use `idc.py`: some of its operations are a bit too elusive +* don't use `idaapi`: that "hides" the provenance of the + function/type/item being used, and makes it that much harder to + group ideas by module +* don't `from <something> import <whatever>`: for the same reason +* use double-quotes for all string literals, unless there's a good + reason not to do so (e.g., the string literal contains some `"` + characters, and `\`-escaping them would be inconvenient & make the + code awkward to read). + Double-quoted string literals let us grep more predictably & reliably. + +## Example header + +Every example must have a valid header, holding a one-liner `summary:`, +as well as a description further explaining what the example is about. + +Some notes: + +* `summary:`: the one-liner must not end with a `.` +* `summary:`: prefer the `list something...` form over the `listing something...` + ## Helping our customers, teaching IDAPython in the process In addition, when a customer asks for help on support@ (or the forums) diff --git a/examples/core/add_idc_hotkey.py b/examples/core/add_idc_hotkey.py deleted file mode 100644 index acf3ebb..0000000 --- a/examples/core/add_idc_hotkey.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -summary: triggering bits of code by pressing a shortcut (older version) - -description: - This is a somewhat ancient way of registering actions & binding - shortcuts. It's still here for reference, but "fresher" alternatives - should be preferred. - -keywords: actions - -see_also: actions, add_hotkey -""" - -import ida_expr -import ida_kernwin - -def say_hi(): - print("Hotkey activated!") - -# IDA binds hotkeys to IDC functions so a trampoline IDC function must be created -ida_expr.compile_idc_text('static key_2() { RunPythonStatement("say_hi()"); }') - -# Add the hotkey -ida_kernwin.add_idc_hotkey("2", 'key_2') - -# Press 2 to activate foo() - -# The hotkey can be removed with -# ida_kernwin.del_idc_hotkey('2') - diff --git a/examples/core/bin_search.py b/examples/core/bin_search.py deleted file mode 100644 index 7b4c77b..0000000 --- a/examples/core/bin_search.py +++ /dev/null @@ -1,94 +0,0 @@ -""" -summary: showcasing `ida_bytes.bin_search` - -description: - IDAPython's ida_bytes.bin_search function is pretty powerful, - but can be tough to figure out at first. This example introduces - - * `ida_bytes.bin_search`, and - * `ida_bytes.parse_binpat_str` - - in order to implement a simple replacement for the - 'Search > Sequence of bytes...' dialog, that lets users - search for sequences of bytes that compose string literals - in the binary file (either in the default 1-byte-per-char - encoding, or as UTF-16.) -""" - -import ida_kernwin -import ida_bytes -import ida_ida -import ida_idaapi -import ida_nalt - -class search_strlit_form_t(ida_kernwin.Form): - def __init__(self): - ida_kernwin.Form.__init__( - self, - r"""Please enter string literal - -<Text: {Text}> -<#UTF16-BE if file is big-endian, UTF16-LE otherwise#As UTF-16: {UTF16}>{Encoding}> -""", - { - "Text" : ida_kernwin.Form.StringInput(), - "Encoding" : ida_kernwin.Form.ChkGroupControl(("UTF16",)), - }) - -class search_strlit_ah_t(ida_kernwin.action_handler_t): - def __init__(self): - ida_kernwin.action_handler_t.__init__(self) - - def activate(self, ctx): - f = search_strlit_form_t() - f, args = f.Compile() - ok = f.Execute() - if ok: - current_ea = ida_kernwin.get_screen_ea() - patterns = ida_bytes.compiled_binpat_vec_t() - encoding = ida_nalt.get_default_encoding_idx( - ida_nalt.BPU_2B if f.Encoding.value else ida_nalt.BPU_1B) - # string literals must be quoted. That's how parse_binpat_str - # recognizes them (we want to be careful though: the user - # might type in something like 'L"hello"', which should - # decode to the IDB-specific wide-char set of bytes) - text = f.Text.value - if text.find('"') < 0: - text = '"%s"' % text - err = ida_bytes.parse_binpat_str( - patterns, - current_ea, - text, - 10, # radix (not that it matters though, since we're all about string literals) - encoding) - if not err: - ea = ida_bytes.bin_search( - current_ea, - ida_ida.inf_get_max_ea(), - patterns, - ida_bytes.BIN_SEARCH_FORWARD - | ida_bytes.BIN_SEARCH_NOBREAK - | ida_bytes.BIN_SEARCH_NOSHOW) - ok = ea != ida_idaapi.BADADDR - if ok: - ida_kernwin.jumpto(ea) - else: - print("Failed parsing binary pattern: \"%s\"" % err) - return ok - - def update(self, ctx): - return ida_kernwin.AST_ENABLE_FOR_WIDGET \ - if ctx.widget_type == ida_kernwin.BWN_DISASM \ - else ida_kernwin.AST_DISABLE_FOR_WIDGET - - -ACTION_NAME = "bin_search:search" -ACTION_SHORTCUT = "Ctrl+Shift+S" - -if ida_kernwin.register_action( - ida_kernwin.action_desc_t( - ACTION_NAME, - "Search for string literal", - search_strlit_ah_t(), - ACTION_SHORTCUT)): - print("Please use \"%s\" to search for string literals" % ACTION_SHORTCUT) diff --git a/examples/debugging/appcall/simple_appcall_common.py b/examples/debugger/appcall/simple_appcall_common.py similarity index 100% rename from examples/debugging/appcall/simple_appcall_common.py rename to examples/debugger/appcall/simple_appcall_common.py diff --git a/examples/debugging/appcall/simple_appcall_linux.py b/examples/debugger/appcall/simple_appcall_linux.py similarity index 90% rename from examples/debugging/appcall/simple_appcall_linux.py rename to examples/debugger/appcall/simple_appcall_linux.py index b143be6..39eab1b 100644 --- a/examples/debugging/appcall/simple_appcall_linux.py +++ b/examples/debugger/appcall/simple_appcall_linux.py @@ -1,5 +1,5 @@ """ -summary: executing code into the application being debugged (on Linux) +summary: execute code into the application being debugged (on Linux) description: Using the `ida_idd.Appcall` utility to execute code in @@ -18,6 +18,8 @@ description: * run this script Note: the real body of code is in `simple_appcall_common.py`. + +level: advanced """ import os diff --git a/examples/debugging/appcall/simple_appcall_win.py b/examples/debugger/appcall/simple_appcall_win.py similarity index 88% rename from examples/debugging/appcall/simple_appcall_win.py rename to examples/debugger/appcall/simple_appcall_win.py index 5861e3f..52262e7 100644 --- a/examples/debugging/appcall/simple_appcall_win.py +++ b/examples/debugger/appcall/simple_appcall_win.py @@ -1,5 +1,5 @@ """ -summary: executing code into the application being debugged (on Windows) +summary: execute code into the application being debugged (on Windows) description: Using the `ida_idd.Appcall` utility to execute code in @@ -11,13 +11,15 @@ description: To use this example: - * run `ida64` on test program `simple_appcall_win64.exe`, or + * run `ida` on test program `simple_appcall_win64.exe`, or `ida` on test program `simple_appcall_win32.exe`, and wait for auto-analysis to finish * select the 'windows debugger' (either local, or remote) * run this script Note: the real body of code is in `simple_appcall_common.py`. + +level: advanced """ import os diff --git a/examples/debugging/appcall/test_programs/simple_appcall/makefile b/examples/debugger/appcall/test_programs/simple_appcall/makefile similarity index 100% rename from examples/debugging/appcall/test_programs/simple_appcall/makefile rename to examples/debugger/appcall/test_programs/simple_appcall/makefile diff --git a/examples/debugging/appcall/test_programs/simple_appcall/simple_appcall.c b/examples/debugger/appcall/test_programs/simple_appcall/simple_appcall.c similarity index 100% rename from examples/debugging/appcall/test_programs/simple_appcall/simple_appcall.c rename to examples/debugger/appcall/test_programs/simple_appcall/simple_appcall.c diff --git a/examples/debugging/appcall/test_programs/simple_appcall/simple_appcall_linux32 b/examples/debugger/appcall/test_programs/simple_appcall/simple_appcall_linux32 similarity index 100% rename from examples/debugging/appcall/test_programs/simple_appcall/simple_appcall_linux32 rename to examples/debugger/appcall/test_programs/simple_appcall/simple_appcall_linux32 diff --git a/examples/debugging/appcall/test_programs/simple_appcall/simple_appcall_linux64 b/examples/debugger/appcall/test_programs/simple_appcall/simple_appcall_linux64 similarity index 100% rename from examples/debugging/appcall/test_programs/simple_appcall/simple_appcall_linux64 rename to examples/debugger/appcall/test_programs/simple_appcall/simple_appcall_linux64 diff --git a/examples/debugging/appcall/test_programs/simple_appcall/simple_appcall_win32.exe b/examples/debugger/appcall/test_programs/simple_appcall/simple_appcall_win32.exe similarity index 100% rename from examples/debugging/appcall/test_programs/simple_appcall/simple_appcall_win32.exe rename to examples/debugger/appcall/test_programs/simple_appcall/simple_appcall_win32.exe diff --git a/examples/debugging/appcall/test_programs/simple_appcall/simple_appcall_win64.exe b/examples/debugger/appcall/test_programs/simple_appcall/simple_appcall_win64.exe similarity index 100% rename from examples/debugging/appcall/test_programs/simple_appcall/simple_appcall_win64.exe rename to examples/debugger/appcall/test_programs/simple_appcall/simple_appcall_win64.exe diff --git a/examples/debugging/dbghooks/automatic_steps.py b/examples/debugger/dbghooks/automatic_steps.py similarity index 99% rename from examples/debugging/dbghooks/automatic_steps.py rename to examples/debugger/dbghooks/automatic_steps.py index 9044143..0a2522a 100644 --- a/examples/debugging/dbghooks/automatic_steps.py +++ b/examples/debugger/dbghooks/automatic_steps.py @@ -5,6 +5,8 @@ description: Start a debugging session, step through the first five instructions. Each instruction is disassembled after execution. + +level: advanced """ import ida_dbg diff --git a/examples/debugging/dbghooks/dbg_trace.py b/examples/debugger/dbghooks/dbg_trace.py similarity index 97% rename from examples/debugging/dbghooks/dbg_trace.py rename to examples/debugger/dbghooks/dbg_trace.py index 0ed3aa8..060bd3f 100644 --- a/examples/debugging/dbghooks/dbg_trace.py +++ b/examples/debugger/dbghooks/dbg_trace.py @@ -1,11 +1,13 @@ """ -summary: using the low-level tracing hook +summary: react to trace notifications description: This script demonstrates using the low-level tracing hook (ida_dbg.DBG_Hooks.dbg_trace). It can be run like so: - ida[t].exe -B -Sdbg_trace.py -Ltrace.log file.exe + ida.exe -B -Sdbg_trace.py -Ltrace.log file.exe + +level: advanced """ import time diff --git a/examples/debugging/misc/print_call_stack.py b/examples/debugger/misc/print_call_stack.py similarity index 79% rename from examples/debugging/misc/print_call_stack.py rename to examples/debugger/misc/print_call_stack.py index 441ff6a..1308d34 100644 --- a/examples/debugging/misc/print_call_stack.py +++ b/examples/debugger/misc/print_call_stack.py @@ -1,18 +1,23 @@ """ -summary: print call stack (on Linux) +summary: print call stack -description: print the return addresses from the call stack at a breakpoint. - (and print also the module and the debug name from debugger) +description: + + Print the return addresses from the call stack at a breakpoint, + when debugging a Linux binary. + (and also print the module and the debug name from debugger) To use this example: - * run `ida64` on test program `simple_appcall_linux64`, or + * run `ida` on test program `simple_appcall_linux64`, or `ida` on test program `simple_appcall_linux32`, and wait for auto-analysis to finish * put a breakpoint where you want to see the call stack * select the 'linux debugger' (either local, or remote) * start debugging * Press Shift+C at the breakpoint + +level: intermediate """ import os import ida_idaapi @@ -35,8 +40,8 @@ class print_call_stack_ah_t(): if ida_dbg.get_module_info(frame.callea, mi): module = os.path.basename(mi.name) name = ida_name.get_nice_colored_name( - frame.callea, - ida_name.GNCN_NOCOLOR|ida_name.GNCN_NOLABEL|ida_name.GNCN_NOSEG|ida_name.GNCN_PREFDBG) + frame.callea, + ida_name.GNCN_NOCOLOR|ida_name.GNCN_NOLABEL|ida_name.GNCN_NOSEG|ida_name.GNCN_PREFDBG) log("Return address: " + hex(frame.callea) + " from: " + module + " with debug name: " + name) else: log("Return address: " + hex(frame.callea)) diff --git a/examples/debugging/misc/print_registers.py b/examples/debugger/misc/print_registers.py similarity index 88% rename from examples/debugging/misc/print_registers.py rename to examples/debugger/misc/print_registers.py index d8683f6..55115ae 100644 --- a/examples/debugging/misc/print_registers.py +++ b/examples/debugger/misc/print_registers.py @@ -1,8 +1,9 @@ """ -summary: print all registers, for all threads +summary: print all registers, for all threads in the debugged process -description: iterate over the list of threads in the program being - debugged, and dump all registers contents +description: + Iterate over the list of threads in the program being + debugged, and dump all registers contents To use this example: @@ -13,6 +14,8 @@ description: iterate over the list of threads in the program being * select the 'linux debugger' (either local, or remote) * start debugging * Press Alt+Shift+C at the breakpoint + +level: beginner """ import ida_idd import ida_dbg diff --git a/examples/debugging/misc/registers_context_menu.py b/examples/debugger/misc/registers_context_menu.py similarity index 95% rename from examples/debugging/misc/registers_context_menu.py rename to examples/debugger/misc/registers_context_menu.py index 8692cdb..9f36380 100644 --- a/examples/debugging/misc/registers_context_menu.py +++ b/examples/debugger/misc/registers_context_menu.py @@ -1,5 +1,5 @@ """ -summary: adding actions to the "registers" widget(s) +summary: add a custom action to the "registers" widget description: It's possible to add actions to the context menu of @@ -7,6 +7,8 @@ description: This example shows how to do just that for registers-displaying widgets (e.g., "General registers") + +level: intermediate """ import ida_dbg diff --git a/examples/debugging/show_debug_names.py b/examples/debugger/show_debug_names.py similarity index 89% rename from examples/debugging/show_debug_names.py rename to examples/debugger/show_debug_names.py index 71c5788..0f8c6c2 100644 --- a/examples/debugging/show_debug_names.py +++ b/examples/debugger/show_debug_names.py @@ -1,9 +1,11 @@ """ -summary: retrieving & dumping debuggee symbols +summary: dump symbols from a process being debugged description: Queries the debugger (possibly remotely) for the list of symbols that the process being debugged, provides. + +level: beginner """ import ida_dbg diff --git a/examples/hexrays/colorize_pseudocode_lines.py b/examples/decompiler/colorize_pseudocode_lines.py similarity index 97% rename from examples/hexrays/colorize_pseudocode_lines.py rename to examples/decompiler/colorize_pseudocode_lines.py index 6c6124d..46c916a 100644 --- a/examples/hexrays/colorize_pseudocode_lines.py +++ b/examples/decompiler/colorize_pseudocode_lines.py @@ -1,5 +1,5 @@ """ -summary: interactively color certain pseudocode lines +summary: interactively color decompilation lines description: Provides an action that can be used to dynamically alter the @@ -11,6 +11,8 @@ description: with a special background color. keywords: colors + +level: intermediate """ import ida_kernwin diff --git a/examples/hexrays/curpos_details.py b/examples/decompiler/curpos_details.py similarity index 97% rename from examples/hexrays/curpos_details.py rename to examples/decompiler/curpos_details.py index 775ceff..8197d42 100644 --- a/examples/hexrays/curpos_details.py +++ b/examples/decompiler/curpos_details.py @@ -1,11 +1,13 @@ """ -summary: a focus on the 'curpos' hook, printing additional details about user input +summary: print information about the current position in decompilation description: Shows how user input information can be retrieved during processing of a notification triggered by that input see_also: vds_hooks + +level: advanced """ import ida_hexrays diff --git a/examples/hexrays/decompile_entry_points.py b/examples/decompiler/decompile_entry_points.py similarity index 87% rename from examples/hexrays/decompile_entry_points.py rename to examples/decompiler/decompile_entry_points.py index e363ea4..0f0177f 100644 --- a/examples/hexrays/decompile_entry_points.py +++ b/examples/decompiler/decompile_entry_points.py @@ -1,13 +1,15 @@ """ -summary: automatic decompilation of functions +summary: decompile entrypoint automatically description: Attempts to load a decompiler plugin corresponding to the current - architecture (and address size) right after auto-analysis is performed, + architecture right after auto-analysis is performed, and then tries to decompile the function at the first entrypoint. It is particularly suited for use with the '-S' flag, for example: idat -Ldecompile.log -Sdecompile_entry_points.py -c file + +level: intermediate """ import ida_ida @@ -22,21 +24,17 @@ import ida_kernwin # manually if we want to use it def init_hexrays(): ALL_DECOMPILERS = { - ida_idp.PLFM_386: "hexrays", + ida_idp.PLFM_386: "hexx64", ida_idp.PLFM_ARM: "hexarm", ida_idp.PLFM_PPC: "hexppc", ida_idp.PLFM_MIPS: "hexmips", + ida_idp.PLFM_RISCV: "hexrv", } cpu = ida_idp.ph.id decompiler = ALL_DECOMPILERS.get(cpu, None) if not decompiler: print("No known decompilers for architecture with ID: %d" % ida_idp.ph.id) return False - if ida_ida.inf_is_64bit(): - if cpu == ida_idp.PLFM_386: - decompiler = "hexx64" - else: - decompiler += "64" if ida_loader.load_plugin(decompiler) and ida_hexrays.init_hexrays_plugin(): return True else: diff --git a/examples/core/produce_c_file.py b/examples/decompiler/produce_c_file.py similarity index 93% rename from examples/core/produce_c_file.py rename to examples/decompiler/produce_c_file.py index 1c2ebfb..f1421d1 100644 --- a/examples/core/produce_c_file.py +++ b/examples/decompiler/produce_c_file.py @@ -1,5 +1,5 @@ """ -summary: decompile entire file +summary: produce C listing for the entire file description: automate IDA to perform auto-analysis on a file and, @@ -15,6 +15,8 @@ description: * -A instructs IDA to run in non-interactive mode * -S holds a path to the script to run (note this is a single token; there is no space between '-S' and its path.) + +level: beginner """ import ida_pro diff --git a/examples/hexrays/vds1.py b/examples/decompiler/vds1.py similarity index 84% rename from examples/hexrays/vds1.py rename to examples/decompiler/vds1.py index 668bec8..a3529af 100644 --- a/examples/hexrays/vds1.py +++ b/examples/decompiler/vds1.py @@ -1,5 +1,10 @@ """ -summary: decompile & print current function. +summary: decompile & print current function + +description: + Decompile the function under the cursor + +level: beginner """ import ida_hexrays diff --git a/examples/hexrays/vds10.py b/examples/decompiler/vds10.py similarity index 96% rename from examples/hexrays/vds10.py rename to examples/decompiler/vds10.py index bd57153..f167133 100644 --- a/examples/hexrays/vds10.py +++ b/examples/decompiler/vds10.py @@ -1,5 +1,5 @@ """ -summary: a custom microcode instruction optimization rule +summary: add custom microcode instruction optimization rule description: Installs a custom microcode instruction optimization rule, @@ -12,6 +12,8 @@ description: call !DbgRaiseAssertionFailure <fast:"char *" "assertion text">.0 To see this plugin in action please use arm64_brk.i64 + +level: intermediate """ import ida_bytes diff --git a/examples/hexrays/vds11.py b/examples/decompiler/vds11.py similarity index 97% rename from examples/hexrays/vds11.py rename to examples/decompiler/vds11.py index be84155..ecc856d 100644 --- a/examples/hexrays/vds11.py +++ b/examples/decompiler/vds11.py @@ -1,5 +1,5 @@ """ -summary: a custom microcode block optimization rule (resolve `goto` chains) +summary: add a custom microcode block optimization rule description: Installs a custom microcode block optimization rule, @@ -16,6 +16,8 @@ description: In other words we fix a goto target if it points to a chain of gotos. This improves the decompiler output in some cases. + +level: advanced """ import ida_bytes diff --git a/examples/hexrays/vds12.py b/examples/decompiler/vds12.py similarity index 99% rename from examples/hexrays/vds12.py rename to examples/decompiler/vds12.py index 05608d6..e674eca 100644 --- a/examples/hexrays/vds12.py +++ b/examples/decompiler/vds12.py @@ -4,6 +4,8 @@ summary: list instruction registers description: Shows a list of direct references to a register from the current instruction. + +level: advanced """ import ida_pro diff --git a/examples/hexrays/vds13.py b/examples/decompiler/vds13.py similarity index 92% rename from examples/hexrays/vds13.py rename to examples/decompiler/vds13.py index be9124f..7230bf2 100644 --- a/examples/hexrays/vds13.py +++ b/examples/decompiler/vds13.py @@ -1,8 +1,10 @@ """ -summary: generates microcode for selection +summary: generate microcode for the selected range of instructions description: Generates microcode for selection and dumps it to the output window. + +level: beginner """ import ida_bytes diff --git a/examples/hexrays/vds17.py b/examples/decompiler/vds17.py similarity index 99% rename from examples/hexrays/vds17.py rename to examples/decompiler/vds17.py index 1563920..6ba30a9 100644 --- a/examples/hexrays/vds17.py +++ b/examples/decompiler/vds17.py @@ -1,5 +1,5 @@ """ -summary: using the "Select offsets" widget +summary: invoke the structure offset-choosing dialog from decompilation description: Registers an action opens the "Select offsets" widget @@ -9,6 +9,8 @@ description: through Alt+Y. Place cursor on the union field and press Shift+T + +level: advanced """ import ida_idaapi diff --git a/examples/hexrays/vds19.py b/examples/decompiler/vds19.py similarity index 96% rename from examples/hexrays/vds19.py rename to examples/decompiler/vds19.py index 9bbcfa1..1748f61 100644 --- a/examples/hexrays/vds19.py +++ b/examples/decompiler/vds19.py @@ -1,5 +1,5 @@ """ -summary: a custom microcode instruction optimization rule (`x | ~x => -1`) +summary: add a custom microcode instruction optimization rule description: Installs a custom microcode instruction optimization rule, @@ -12,6 +12,8 @@ description: -1 To see this plugin in action please use be_ornot_be.idb + +level: advanced """ import ida_hexrays diff --git a/examples/hexrays/vds21.py b/examples/decompiler/vds21.py similarity index 99% rename from examples/hexrays/vds21.py rename to examples/decompiler/vds21.py index 3292bed..7178864 100644 --- a/examples/hexrays/vds21.py +++ b/examples/decompiler/vds21.py @@ -22,6 +22,8 @@ description: This plugin illustrates another approach to the problem: if you happen to be able to calculate the call prototypes dynamically, this is how to inform the decompiler about them. + +level: intermediate """ import ida_idaapi diff --git a/examples/hexrays/vds3.py b/examples/decompiler/vds3.py similarity index 99% rename from examples/hexrays/vds3.py rename to examples/decompiler/vds3.py index b7558cb..c65a62e 100644 --- a/examples/hexrays/vds3.py +++ b/examples/decompiler/vds3.py @@ -1,5 +1,5 @@ """ -summary: invert if/else blocks +summary: invert if/else blocks in decompilation description: Registers an action that can be used to invert the `if` @@ -31,6 +31,8 @@ description: IDA, and the changes will be present. author: EiNSTeiN_ (einstein@g3nius.org) + +level: advanced """ import idautils diff --git a/examples/hexrays/vds4.py b/examples/decompiler/vds4.py similarity index 97% rename from examples/hexrays/vds4.py rename to examples/decompiler/vds4.py index 3249d8f..3fdfd9d 100644 --- a/examples/hexrays/vds4.py +++ b/examples/decompiler/vds4.py @@ -1,5 +1,5 @@ """ -summary: dump user-defined information +summary: dump user-defined information for a function description: Prints user-defined information to the "Output" window. @@ -13,6 +13,8 @@ description: This script loads information from the database without decompiling anything. author: EiNSTeiN_ (einstein@g3nius.org) + +level: intermediate """ import ida_kernwin diff --git a/examples/hexrays/vds5.py b/examples/decompiler/vds5.py similarity index 99% rename from examples/hexrays/vds5.py rename to examples/decompiler/vds5.py index e467040..ffc78d5 100644 --- a/examples/hexrays/vds5.py +++ b/examples/decompiler/vds5.py @@ -1,5 +1,5 @@ """ -summary: show ctree graph +summary: dump C-tree graph description: Registers an action that can be used to show the graph of the ctree. @@ -10,6 +10,8 @@ description: To display the graph, we produce a .gdl file, and request that ida displays that using `ida_gdl.display_gdl`. + +level: advanced """ import ida_pro diff --git a/examples/hexrays/vds6.py b/examples/decompiler/vds6.py similarity index 99% rename from examples/hexrays/vds6.py rename to examples/decompiler/vds6.py index 2278c80..541a082 100644 --- a/examples/hexrays/vds6.py +++ b/examples/decompiler/vds6.py @@ -6,6 +6,8 @@ description: by removing some white spaces Note: this is rather crude, not quite "pythonic" code. + +level: intermediate """ import idautils diff --git a/examples/hexrays/vds7.py b/examples/decompiler/vds7.py similarity index 95% rename from examples/hexrays/vds7.py rename to examples/decompiler/vds7.py index ddc296a..2023b68 100644 --- a/examples/hexrays/vds7.py +++ b/examples/decompiler/vds7.py @@ -1,11 +1,13 @@ """ -summary: iterate a cblock_t object +summary: dump statement blocks description: Using a `ida_hexrays.ctree_visitor_t`, search for `ida_hexrays.cit_block` instances and dump them. author: EiNSTeiN_ (einstein@g3nius.org) + +level: beginner """ import ida_hexrays diff --git a/examples/hexrays/vds8.py b/examples/decompiler/vds8.py similarity index 96% rename from examples/hexrays/vds8.py rename to examples/decompiler/vds8.py index 7ac700e..6f73e75 100644 --- a/examples/hexrays/vds8.py +++ b/examples/decompiler/vds8.py @@ -1,5 +1,5 @@ """ -summary: using `ida_hexrays.udc_filter_t` +summary: improve decompilation by turning specific patterns into custom function calls description: Registers an action that uses a `ida_hexrays.udc_filter_t` to decompile @@ -10,6 +10,8 @@ description: In addition to having a shortcut, the action will be present in the context menu. + +level: intermediate """ import ida_idaapi diff --git a/examples/hexrays/vds_create_hint.py b/examples/decompiler/vds_create_hint.py similarity index 94% rename from examples/hexrays/vds_create_hint.py rename to examples/decompiler/vds_create_hint.py index f5326d9..b110f6c 100644 --- a/examples/hexrays/vds_create_hint.py +++ b/examples/decompiler/vds_create_hint.py @@ -1,5 +1,5 @@ """ -summary: decompiler hints +summary: provide custom decompiler hints description: Handle `ida_hexrays.hxe_create_hint` notification using hooks, @@ -12,6 +12,8 @@ description: the form of `!{varname}` (where `{varname}` is replaced with the variable name) * an `if` statement, replace the hint with our own, saying "condition" + +level: beginner """ import ida_idaapi diff --git a/examples/hexrays/vds_hooks.py b/examples/decompiler/vds_hooks.py similarity index 88% rename from examples/hexrays/vds_hooks.py rename to examples/decompiler/vds_hooks.py index 35d6e2e..de9b071 100644 --- a/examples/hexrays/vds_hooks.py +++ b/examples/decompiler/vds_hooks.py @@ -1,5 +1,5 @@ """ -summary: various decompiler hooks +summary: react to decompiler events/notifications description: Shows how to hook to many notifications sent by the decompiler. @@ -12,6 +12,8 @@ description: subclassing `ida_hexrays.Hexrays_Hooks` see_also: curpos_details + +level: intermediate """ import inspect @@ -70,7 +72,7 @@ class vds_hooks_t(ida_hexrays.Hexrays_Hooks): print("### %s: %s" % (method_name, ", ".join(argstrs))) return 0 - def flowchart(self, fc): + def flowchart(self, fc, mba, reachable_blocks, decomp_flags): return self._log() def stkpnts(self, mba, stkpnts): @@ -94,6 +96,9 @@ class vds_hooks_t(ida_hexrays.Hexrays_Hooks): def glbopt(self, mba): return self._log() + def begin_structural(self, out, cfunc, ctrl_graph): + return self._log() + def structural(self, ctrl_graph): return self._log() @@ -172,5 +177,20 @@ class vds_hooks_t(ida_hexrays.Hexrays_Hooks): def calls_done(self, mba): return self._log() + def begin_inlining(self, cdg, flags): + return self._log() + + def inlining_func(self, cdg, blk, mbr): + return self._log() + + def inlined_func(self, cdg, blk, mbr, i1, i2): + return self._log() + + def pre_structural(self, ctrl_graph, cfunc, cfg): + return self._log() + + def collect_warnings(self, cfunc): + return self._log() + vds_hooks = vds_hooks_t() vds_hooks.hook() diff --git a/examples/hexrays/vds_modify_user_lvars.py b/examples/decompiler/vds_modify_user_lvars.py similarity index 96% rename from examples/hexrays/vds_modify_user_lvars.py rename to examples/decompiler/vds_modify_user_lvars.py index f532e64..59f8261 100644 --- a/examples/hexrays/vds_modify_user_lvars.py +++ b/examples/decompiler/vds_modify_user_lvars.py @@ -1,9 +1,11 @@ """ -summary: modifying local variables +summary: modifying function local variables description: Use a `ida_hexrays.user_lvar_modifier_t` to modify names, comments and/or types of local variables. + +level: intermediate """ import ida_hexrays diff --git a/examples/hexrays/vds_xrefs.py b/examples/decompiler/vds_xrefs.py similarity index 99% rename from examples/hexrays/vds_xrefs.py rename to examples/decompiler/vds_xrefs.py index 74d2d77..ef8e461 100644 --- a/examples/hexrays/vds_xrefs.py +++ b/examples/decompiler/vds_xrefs.py @@ -1,5 +1,5 @@ """ -summary: show decompiler xrefs +summary: show decompiler cross-references description: Show decompiler-style Xref when the `Ctrl+X` key is @@ -9,6 +9,8 @@ description: * supports structure member. author: EiNSTeiN_ (einstein@g3nius.org) + +level: advanced """ import ida_kernwin diff --git a/examples/disassembler/add_frame_member.py b/examples/disassembler/add_frame_member.py new file mode 100644 index 0000000..387e671 --- /dev/null +++ b/examples/disassembler/add_frame_member.py @@ -0,0 +1,61 @@ +""" +summary: add a new member to an existing function frame + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we show a way to add a new frame member (a pointer to + an uint64) inside a wide enough gap in the frame: + * Get the function object surrounding cursor location. + * Use this function to retrieve the corresponding frame object. + * Find a wide enough gap to create our new member. + * If found, we use cal_frame_offset() to get the actual + offset in the frame structure. + * Use the previous result to add the new member. + +level: advanced +""" +import ida_funcs +import ida_frame +import ida_typeinf +import ida_range +import idc + +def add_frame_member(func_ea): + name = "my_stkvar" + + tif = ida_typeinf.tinfo_t(ida_typeinf.BTF_UINT64) + tif.create_ptr(tif) + + func = ida_funcs.get_func(func_ea) + if not func: + print('Failed to get function!') + return + print(f"Function @ {func.start_ea:x}") + + frame_tif = ida_typeinf.tinfo_t() + if not ida_frame.get_func_frame(frame_tif, func): + print('Failed to get frame!') + return + print(f"{frame_tif._print()}") + + rs = ida_range.rangeset_t() + sp_offset = 0 + if frame_tif.calc_gaps(rs): + for range in rs: + if range.start_ea <= 0: + continue + elif (range.end_ea - range.start_ea) >= tif.get_size(): + sp_offset = range.start_ea + print(f"Range [{range.start_ea:x}, {range.end_ea:x}[ selected.") + break + + if sp_offset > 0: + sval = ida_frame.calc_frame_offset(func, sp_offset, None, None) + if ida_frame.add_frame_member(func, name, sval, tif): + print(f"Frame member added at frame offset {sval}!") + else: + print("Failed adding frame member") + else: + print("Could not find gaps in current frame...") + +add_frame_member(idc.here()) diff --git a/examples/idphooks/ana_emu_out.py b/examples/disassembler/ana_emu_out.py similarity index 94% rename from examples/idphooks/ana_emu_out.py rename to examples/disassembler/ana_emu_out.py index e7c0741..8cb93e0 100644 --- a/examples/idphooks/ana_emu_out.py +++ b/examples/disassembler/ana_emu_out.py @@ -1,5 +1,5 @@ """ -summary: override some parts of the processor module +summary: rewrite the representation of some instructions description: Implements disassembly of BUG_INSTR used in Linux kernel @@ -7,6 +7,8 @@ description: disassembled by IDA's ARM module See Linux/arch/arm/include/asm/bug.h for more info + +level: intermediate """ import ida_idp diff --git a/examples/idphooks/assemble.py b/examples/disassembler/assemble.py similarity index 94% rename from examples/idphooks/assemble.py rename to examples/disassembler/assemble.py index 0078bbd..84e0c32 100644 --- a/examples/idphooks/assemble.py +++ b/examples/disassembler/assemble.py @@ -1,11 +1,13 @@ """ -summary: an `ida_idp.IDP_Hooks.assembly` implementation +summary: implement assembly of instructions description: We add support for assembling the following pseudo instructions: * "zero eax" -> xor eax, eax * "nothing" -> nop + +level: intermediate """ import ida_idp diff --git a/examples/core/custom_data_types_and_formats.py b/examples/disassembler/custom_data_types_and_formats.py similarity index 96% rename from examples/core/custom_data_types_and_formats.py rename to examples/disassembler/custom_data_types_and_formats.py index 392bf37..7a39893 100644 --- a/examples/core/custom_data_types_and_formats.py +++ b/examples/disassembler/custom_data_types_and_formats.py @@ -1,5 +1,5 @@ """ -summary: using custom data types & printers +summary: custom data types & printers description: IDA can be extended to support certain data types that it @@ -9,6 +9,8 @@ description: size of a piece of data, while a 'custom data format' is in charge of formatting that data (there can be more than one format for a specific 'custom data type'.) + +level: advanced """ import ida_bytes @@ -64,7 +66,7 @@ class pascal_data_format(ida_bytes.data_format_t): for ch in value[1:]: b = ord(ch) if sys.version_info.major < 3 else ch if b < 0x20 or b > 128: - o.append(r'\x%02x' % b) + o.append(r"\x%02x" % b) else: o.append(ch) o.append('"') @@ -111,8 +113,8 @@ class simplevm_data_format(ida_bytes.data_format_t): menu_name) # Some tables for the disassembler - INST = {1: 'add', 2: 'mul', 3: 'sub', 4: 'xor', 5: 'mov'} - REGS = {1: 'r1', 2: 'r2', 3: 'r3'} + INST = {1: "add", 2: "mul", 3: "sub", 4: "xor", 5: "mov"} + 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]) if sys.version_info.major < 3 else inst[0] @@ -125,7 +127,7 @@ class simplevm_data_format(ida_bytes.data_format_t): if r2 == 0: if len(inst) != 5: return None - imm = struct.unpack_from('L', inst, 1)[0] + imm = struct.unpack_from("L", inst, 1)[0] sz = 5 else: imm = None @@ -226,7 +228,7 @@ new_formats = [ ] try: - if platform.system() == 'Windows': + if platform.system() == "Windows": new_formats.append((rsrc_string_format(),)) except: pass diff --git a/examples/core/dump_extra_comments.py b/examples/disassembler/dump_extra_comments.py similarity index 97% rename from examples/core/dump_extra_comments.py rename to examples/disassembler/dump_extra_comments.py index 6205282..7904b42 100644 --- a/examples/core/dump_extra_comments.py +++ b/examples/disassembler/dump_extra_comments.py @@ -1,5 +1,5 @@ """ -summary: retrieve extra comments +summary: retrieve comments surrounding instructions description: Use the `ida_lines.get_extra_cmt` API to retrieve anterior @@ -7,6 +7,8 @@ description: This script registers two actions, that can be used to dump the previous and next extra comments. + +level: intermediate """ import ida_lines diff --git a/examples/core/dump_flowchart.py b/examples/disassembler/dump_flowchart.py similarity index 99% rename from examples/core/dump_flowchart.py rename to examples/disassembler/dump_flowchart.py index dd705cf..c90c4a2 100644 --- a/examples/core/dump_flowchart.py +++ b/examples/disassembler/dump_flowchart.py @@ -8,6 +8,8 @@ description: * the low-level `ida_gdl.qflow_chart_t` type * the somewhat higher-level, and slightly more pythonic `ida_gdl.FlowChart` type. + +level: beginner """ import ida_gdl diff --git a/examples/analysis/dump_func_info.py b/examples/disassembler/dump_func_info.py similarity index 98% rename from examples/analysis/dump_func_info.py rename to examples/disassembler/dump_func_info.py index 4e327cc..ce64582 100644 --- a/examples/analysis/dump_func_info.py +++ b/examples/disassembler/dump_func_info.py @@ -1,9 +1,11 @@ """ -summary: dump (some) information about the current function. +summary: dump function information description: Dump some of the most interesting bits of information about the function we are currently looking at. + +level: intermediate """ import binascii diff --git a/examples/disassembler/dump_line_sections.py b/examples/disassembler/dump_line_sections.py new file mode 100644 index 0000000..416364b --- /dev/null +++ b/examples/disassembler/dump_line_sections.py @@ -0,0 +1,53 @@ +""" +summary: parse listing line, and dump some information + +description: + Using `ida_kernwin.parse_tagged_line_sections`, we will parse + so-called "tagged" listing lines, and extract semantic information + such as instruction mnemonic, operand text, ... + + This script registers an actions, that can be used to dump + the line sections. + +level: intermediate +""" + +ACTION_NAME = "dump_line_sections:dump" +ACTION_SHORTCUT = "Ctrl+Shift+D" + +import ida_kernwin +import ida_lines + +class dump_line_sections_ah_t(ida_kernwin.action_handler_t): + + def activate(self, ctx): + tls = ida_kernwin.tagged_line_sections_t() + raw = ida_kernwin.get_custom_viewer_curline(ctx.widget, False) + if ida_kernwin.parse_tagged_line_sections(tls, raw): + insn_section = tls.first(ida_lines.COLOR_INSN) + if insn_section: + print("Found instruction with mnemonic \"%s\"" % insn_section.substr(raw)) + for op_tag in range(ida_lines.COLOR_OPND1, ida_lines.COLOR_OPND8 + 1): + op_n = tls.first(op_tag) + if not op_n: + break + print(" Operand #%d: (raw text) %s" % (op_tag - ida_lines.COLOR_OPND1, op_n.substr(raw))) + as_reg = tls.nearest_at(op_n.start, ida_lines.COLOR_REG) + if as_reg: + print(" Operand is register: \"%s\"" % as_reg.substr(raw)) + + def update(self, ctx): + return ida_kernwin.AST_ENABLE_FOR_WIDGET \ + if ctx.widget_type == ida_kernwin.BWN_DISASM \ + else ida_kernwin.AST_DISABLE_FOR_WIDGET + + + +adesc = ida_kernwin.action_desc_t( + ACTION_NAME, + "Dump line sections", + dump_line_sections_ah_t(), + ACTION_SHORTCUT) + +if ida_kernwin.register_action(adesc): + print("Action registered. Please press \"%s\" to use" % ACTION_SHORTCUT) diff --git a/examples/disassembler/find_string.py b/examples/disassembler/find_string.py new file mode 100644 index 0000000..1c6aa5b --- /dev/null +++ b/examples/disassembler/find_string.py @@ -0,0 +1,74 @@ +""" +summary: using "ida_bytes.find_string" + +description: + IDAPython's ida_bytes.find_string can be used to implement + a simple replacement for the 'Search > Sequence of bytes...' + dialog, that lets users search for sequences of bytes that + compose string literals in the binary file (either in the + default 1-byte-per-char encoding, or as UTF-16.) + +level: intermediate +""" + +import ida_kernwin +import ida_bytes +import ida_ida +import ida_idaapi +import ida_nalt + +class search_strlit_form_t(ida_kernwin.Form): + def __init__(self): + ida_kernwin.Form.__init__( + self, + r"""Please enter string literal + +<Text: {Text}> +<#UTF16-BE if file is big-endian, UTF16-LE otherwise#As UTF-16: {UTF16}>{Encoding}> +""", + { + "Text" : ida_kernwin.Form.StringInput(), + "Encoding" : ida_kernwin.Form.ChkGroupControl(("UTF16",)), + }) + +class search_strlit_ah_t(ida_kernwin.action_handler_t): + def __init__(self): + ida_kernwin.action_handler_t.__init__(self) + + def activate(self, ctx): + f = search_strlit_form_t() + f, args = f.Compile() + ok = f.Execute() + if ok: + current_ea = ida_kernwin.get_screen_ea() + encoding = ida_nalt.get_default_encoding_idx( + ida_nalt.BPU_2B if f.Encoding.value else ida_nalt.BPU_1B) + ea = ida_bytes.find_string( + f.Text.value, + current_ea, + range_end=ida_ida.inf_get_max_ea(), + strlit_encoding=encoding, + flags=ida_bytes.BIN_SEARCH_FORWARD + | ida_bytes.BIN_SEARCH_NOBREAK + | ida_bytes.BIN_SEARCH_NOSHOW) + ok = ea != ida_idaapi.BADADDR + if ok: + ida_kernwin.jumpto(ea) + return ok + + def update(self, ctx): + return ida_kernwin.AST_ENABLE_FOR_WIDGET \ + if ctx.widget_type == ida_kernwin.BWN_DISASM \ + else ida_kernwin.AST_DISABLE_FOR_WIDGET + + +ACTION_NAME = "find_string:search" +ACTION_SHORTCUT = "Ctrl+Shift+S" + +if ida_kernwin.register_action( + ida_kernwin.action_desc_t( + ACTION_NAME, + "Search for string literal", + search_strlit_ah_t(), + ACTION_SHORTCUT)): + print("Please use \"%s\" to search for string literals" % ACTION_SHORTCUT) diff --git a/examples/disassembler/func_ti_changed_listener.py b/examples/disassembler/func_ti_changed_listener.py new file mode 100644 index 0000000..3fd6671 --- /dev/null +++ b/examples/disassembler/func_ti_changed_listener.py @@ -0,0 +1,36 @@ +""" +summary: print notifications about function prototype changes + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we will create an IDB hook that intercepts `ti_changed` + IDB events, and if it is a function prototype that changed, print it. + +level: intermediate +""" +import ida_funcs +import ida_idp +import ida_typeinf + +class ti_changed_t(ida_idp.IDB_Hooks): + + def print_details(self, tif, ea): + if tif.is_func(): + func_name = ida_funcs.get_func_name(ea) + print(f"\t{tif._print(func_name)}") + + def ti_changed(self, ea, types, fields): + tif = ida_typeinf.tinfo_t() + tif.deserialize(None, types, fields) + if tif.is_func(): + print(f"Function type information changed @ {ea:x}") + self.print_details(tif, ea) + +try: + idbhook.unhook() + del idbhook + print(f"IDB hook uninstalled. Run the script again to install") +except: + idbhook = ti_changed_t() + idbhook.hook() + print(f"IDB hook installed. Run the script again to uninstall") diff --git a/examples/core/install_user_defined_prefix.py b/examples/disassembler/install_user_defined_prefix.py similarity index 89% rename from examples/core/install_user_defined_prefix.py rename to examples/disassembler/install_user_defined_prefix.py index 8ddf136..59a2ce4 100644 --- a/examples/core/install_user_defined_prefix.py +++ b/examples/disassembler/install_user_defined_prefix.py @@ -1,17 +1,19 @@ """ -summary: inserting information into disassembly prefixes +summary: insert information into listing prefixes description: By default, disassembly line prefixes contain segment + address information (e.g., '.text:08047718'), but it is possible to "inject" other bits of information in there, thanks to the `ida_lines.user_defined_prefix_t` helper type. + +level: beginner """ import ida_lines import ida_idaapi -PREFIX = ida_lines.SCOLOR_INV + ' ' + ida_lines.SCOLOR_INV +PREFIX = ida_lines.SCOLOR_INV + " " + ida_lines.SCOLOR_INV class my_user_prefix_t(ida_lines.user_defined_prefix_t): def get_user_defined_prefix(self, ea, insn, lnnum, indent, line): diff --git a/examples/core/list_bookmarks.py b/examples/disassembler/list_bookmarks.py similarity index 95% rename from examples/core/list_bookmarks.py rename to examples/disassembler/list_bookmarks.py index 645e577..0198a5f 100644 --- a/examples/core/list_bookmarks.py +++ b/examples/disassembler/list_bookmarks.py @@ -1,5 +1,5 @@ """ -summary: list bookmarks associated to a listing +summary: list listing bookmarks description: This sample shows how to programmatically access the list of @@ -8,6 +8,8 @@ description: type. keywords: bookmarks + +level: intermediate """ import ida_kernwin diff --git a/examples/core/list_function_items.py b/examples/disassembler/list_function_items.py similarity index 96% rename from examples/core/list_function_items.py rename to examples/disassembler/list_function_items.py index efffa8a..7f1a5c8 100644 --- a/examples/core/list_function_items.py +++ b/examples/disassembler/list_function_items.py @@ -1,5 +1,5 @@ """ -summary: showcases (a few of) the iterators available on a function +summary: showcase (some of) the iterators available on a function description: This demonstrates how to use some of the iterators available on the func_t type. @@ -23,6 +23,8 @@ description: that include this chunk keywords: funcs iterator + +level: intermediate """ import ida_bytes @@ -98,5 +100,5 @@ def main(): chunk.start_ea, chunk.end_ea)) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/examples/core/list_imports.py b/examples/disassembler/list_imports.py similarity index 97% rename from examples/core/list_imports.py rename to examples/disassembler/list_imports.py index 72d974e..f889151 100644 --- a/examples/core/list_imports.py +++ b/examples/disassembler/list_imports.py @@ -3,6 +3,8 @@ summary: enumerate file imports description: Using the API to enumerate file imports. + +level: beginner """ import ida_nalt diff --git a/examples/core/list_patched_bytes.py b/examples/disassembler/list_patched_bytes.py similarity index 96% rename from examples/core/list_patched_bytes.py rename to examples/disassembler/list_patched_bytes.py index af7ca82..c6bb15b 100644 --- a/examples/core/list_patched_bytes.py +++ b/examples/disassembler/list_patched_bytes.py @@ -4,6 +4,8 @@ summary: enumerate patched bytes description: Using the API to iterate over all the places in the file, that were patched using IDA. + +level: beginner """ import ida_bytes @@ -37,5 +39,5 @@ def main(): # ------------------------------------------------------------------------- -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/examples/core/list_problems.py b/examples/disassembler/list_problems.py similarity index 90% rename from examples/core/list_problems.py rename to examples/disassembler/list_problems.py index 054c240..f984aa9 100644 --- a/examples/core/list_problems.py +++ b/examples/disassembler/list_problems.py @@ -1,9 +1,11 @@ """ -summary: enumerate problems +summary: enumerate known problems description: - Using the API to list all problem[atic situation]s that IDA + Using the API to list all problems that IDA encountered during analysis. + +level: beginner """ import ida_ida diff --git a/examples/core/list_segment_functions.py b/examples/disassembler/list_segment_functions.py similarity index 84% rename from examples/core/list_segment_functions.py rename to examples/disassembler/list_segment_functions.py index e32ce57..0a71352 100644 --- a/examples/core/list_segment_functions.py +++ b/examples/disassembler/list_segment_functions.py @@ -1,5 +1,5 @@ """ -summary: list all functions (and xrefs) in segment +summary: list segment functions (and cross-references to them) description: List all the functions in the current segment, as well as @@ -8,15 +8,9 @@ description: keywords: xrefs see_also: list_segment_functions_using_idautils -""" -# -# Reference Lister -# -# List all functions and all references to them in the current section. -# -# Implemented using direct IDA Plugin API calls -# +level: beginner +""" import ida_kernwin import ida_segment diff --git a/examples/core/list_segment_functions_using_idautils.py b/examples/disassembler/list_segment_functions_using_idautils.py similarity index 83% rename from examples/core/list_segment_functions_using_idautils.py rename to examples/disassembler/list_segment_functions_using_idautils.py index c983e46..bf93a77 100644 --- a/examples/core/list_segment_functions_using_idautils.py +++ b/examples/disassembler/list_segment_functions_using_idautils.py @@ -1,5 +1,5 @@ """ -summary: list all functions (and xrefs) in segment +summary: list all functions (and cross-references) in segment description: List all the functions in the current segment, as well as @@ -11,15 +11,9 @@ description: keywords: xrefs see_also: list_segment_functions -""" -# -# Reference Lister -# -# List all functions and all references to them in the current section. -# -# Implemented with the idautils module -# +level: beginner +""" import ida_kernwin import ida_idaapi @@ -47,5 +41,5 @@ def main(): else: print("Please position the cursor within a segment") -if __name__=='__main__': +if __name__=="__main__": main() diff --git a/examples/core/list_strings.py b/examples/disassembler/list_strings.py similarity index 89% rename from examples/core/list_strings.py rename to examples/disassembler/list_strings.py index 8cb2a3c..9cc4333 100644 --- a/examples/core/list_strings.py +++ b/examples/disassembler/list_strings.py @@ -1,5 +1,5 @@ """ -summary: retrieve the strings that are present in the IDB +summary: dump the strings that are present in the file description: This uses `idautils.Strings` to iterate over the string literals @@ -7,6 +7,8 @@ description: this will not require that the "Strings" window is opened & available. see_also: show_selected_strings + +level: beginner """ import ida_nalt diff --git a/examples/disassembler/list_struct_accesses.py b/examples/disassembler/list_struct_accesses.py new file mode 100644 index 0000000..2adb188 --- /dev/null +++ b/examples/disassembler/list_struct_accesses.py @@ -0,0 +1,125 @@ +""" +summary: list operands representing a "path" to a (possibly nested) structure member + +description: + It is possible to assign, to instruction operands, the notion of "structure + offset", which really is a pointer to a specific offset in a type, leading + to a possible N-deep path within types. + + E.g., assuming the following types + + struct c + { + int foo; + int bar; + int baz; + int quux; + int trail; + }; + + struct b + { + int gap; + c c_instance; + }; + + struct a + { + int count; + b b_instance; + }; + + and assuming an instruction that initially looks like this: + + mov eax, 10h + + by pressing `t`, the user will be able set the "structure offset" + to either: + + * `c.trail` + * `b.c_instance.quux` + * `a.b_inscance.c_instance.baz` + + Here's why IDA offers `a.b_inscance.c_instance.baz`: + + 0000 struct a + { + 0000 int count; + 0004 struct b + { + 0004 int gap; + 0008 struct c + { + 0008 int foo; + 000C int bar; + 0010 int baz; + 0014 int quux; + 0018 int trail; + }; + }; + }; + + This sample shows how to programmatically retrieve information about + that "structure member path" that an operand was made pointing to. + +keywords: bookmarks + +level: advanced +""" +from typing import List + +import ida_bytes +import ida_pro +import ida_ua +import ida_typeinf +import ida_nalt +import ida_netnode + + +def get_struct_paths(ea: int, opnum: int) -> List[str]: + flags = ida_bytes.get_full_flags(ea) + + if not ida_bytes.is_stroff(flags, opnum): + # requested operand not a structure + return [] + + insn = ida_ua.insn_t() + ins_sz = ida_ua.decode_insn(insn, ea) + if ins_sz == 0: + # could not disassemble + return [] + + num_ops = 0 + # ;! nice idea to inject via Swig a '__len__' method to the instruction + # object that does that. + while insn.ops[num_ops].type != ida_ua.o_void: + num_ops += 1 + + op = insn.ops[opnum] + + if op.type == ida_ua.o_imm: + value = op.value + else: + value = op.addr + + path, delta = ida_bytes.get_stroff_path(insn.ea, opnum) + out = [] + for tid in path: + tif = ida_typeinf.tinfo_t(tid=tid) + sz = tif.get_size() + + if delta + value == sz: + out.append(f"size {tif.get_type_name()}") + else: + for idx, mem in enumerate(tif.iter_udt()): + off = mem.offset // 8 # udm.offset is in bits + size = mem.size // 8 # udm.size is in bits + if off - delta <= value < off - delta + size: + name = ida_typeinf.get_tid_name(tif.get_udm_tid(idx)) + diff = value - (off - delta) + if diff > 0: + out.append(f"{name}+{diff}") + else: + out.append(f"{name}") + + return out diff --git a/examples/idbhooks/log_idb_events.py b/examples/disassembler/log_idb_events.py similarity index 79% rename from examples/idbhooks/log_idb_events.py rename to examples/disassembler/log_idb_events.py index 410aec4..2e56968 100644 --- a/examples/idbhooks/log_idb_events.py +++ b/examples/disassembler/log_idb_events.py @@ -1,9 +1,11 @@ """ -summary: logging IDB events +summary: react to database events/notifications description: these hooks will be notified about IDB events, and dump their information to the "Output" window + +level: intermediate """ import inspect @@ -58,12 +60,6 @@ class idb_logger_hooks_t(ida_idp.IDB_Hooks): def changing_cmt(self, ea, is_repeatable, new_comment): return self._log() - def changing_enum_bf(self, tid, new_bf): - return self._log() - - def changing_enum_cmt(self, tid, is_repeatable, new_comment): - return self._log() - def changing_op_ti(self, ea, n, new_type, new_fnames): return self._log() @@ -85,9 +81,6 @@ class idb_logger_hooks_t(ida_idp.IDB_Hooks): def changing_segm_start(self, segment, new_start, flags): return self._log() - def changing_struc_align(self, sptr): - return self._log() - def changing_struc_cmt(self, tid, is_repeatable, comment): return self._log() @@ -106,12 +99,6 @@ class idb_logger_hooks_t(ida_idp.IDB_Hooks): def compiler_changed(self, may_adjust_inf_fields): return self._log() - def deleting_enum(self, tid): - return self._log() - - def deleting_enum_member(self, tid, cid): - return self._log() - def deleting_func(self, pfn): return self._log() @@ -121,12 +108,6 @@ class idb_logger_hooks_t(ida_idp.IDB_Hooks): def deleting_segm(self, start_ea): return self._log() - def deleting_struc(self, sptr): - return self._log() - - def deleting_struc_member(self, sptr, mptr): - return self._log() - def deleting_tryblks(self, _range): return self._log() @@ -157,30 +138,6 @@ class idb_logger_hooks_t(ida_idp.IDB_Hooks): def dirtree_segm_moved(self, dt): return self._log() - def enum_bf_changed(self, tid): - return self._log() - - def enum_cmt_changed(self, tid, is_repeatable): - return self._log() - - def enum_created(self, tid): - return self._log() - - def enum_deleted(self, tid): - return self._log() - - def enum_member_created(self, tid, cid): - return self._log() - - def enum_member_deleted(self, tid, cid): - return self._log() - - def enum_renamed(self, tid): - return self._log() - - def expanding_struc(self, sptr, offset, delta): - return self._log() - def extlang_changed(self, kind, el, idx): return self._log() @@ -214,6 +171,9 @@ class idb_logger_hooks_t(ida_idp.IDB_Hooks): def idasgn_loaded(self, sig_name): return self._log() + def idasgn_matched_ea(self, ea, name, lib): + return self._log() + def item_color_changed(self, ea, color): return self._log() @@ -244,15 +204,6 @@ class idb_logger_hooks_t(ida_idp.IDB_Hooks): def renamed(self, ea, new_name, is_local_name, old_name): return self._log() - def renaming_enum(self, tid, is_enum, new_name): - return self._log() - - def renaming_struc(self, tid, old_name, new_name): - return self._log() - - def renaming_struc_member(self, sptr, mptr, new_name): - return self._log() - def savebase(self): return self._log() @@ -295,36 +246,9 @@ class idb_logger_hooks_t(ida_idp.IDB_Hooks): def stkpnts_changed(self, pfn): return self._log() - def struc_align_changed(self, sptr): - return self._log() - - def struc_cmt_changed(self, tid, is_repeatable): - return self._log() - - def struc_created(self, tid): - return self._log() - - def struc_deleted(self, tid): - return self._log() - - def struc_expanded(self, sptr): - return self._log() - def struc_member_changed(self, sptr, mptr): return self._log() - def struc_member_created(self, sptr, mptr): - return self._log() - - def struc_member_deleted(self, sptr, mid, offset): - return self._log() - - def struc_member_renamed(self, sptr, mptr): - return self._log() - - def struc_renamed(self, sptr, success): - return self._log() - def tail_owner_changed(self, tail, owner_func, old_owner): return self._log() @@ -343,15 +267,41 @@ class idb_logger_hooks_t(ida_idp.IDB_Hooks): def upgraded(self, _from): return self._log() - def enum_width_changed(self, tid, width): + def lt_udm_created(self, udt_name, udm): return self._log() - def enum_flag_changed(self, tid, flags): + def lt_udm_deleted(self, udt_name, udm_tid, udm): return self._log() - def enum_ordinal_changed(self, tid, ordinal): + def lt_udm_renamed(self, udt_name, udm, oldname): return self._log() + def lt_udm_changed(self, udt_name, tid, old, new): + return self._log() + + def lt_udt_expanded(self, udt_name, udm_tid, delta): + return self._log() + + def frame_created(self, func_ea): + return self._log() + + def frame_deleted(self, pfn): + return self._log() + + def frame_udm_created(self, func_ea, udm): + return self._log() + + def frame_udm_deleted(self, func_ea, udm_tid, udm): + return self._log() + + def frame_udm_renamed(self, func_ea, udm, oldname): + return self._log() + + def frame_udm_changed(self, func_ea, udm_tid, udm_old, udm_new): + return self._log() + + def frame_expanded(self, func_ea, udm_tid, delta): + return self._log() idb_hooks = idb_logger_hooks_t() idb_hooks.hook() diff --git a/examples/disassembler/log_idp_events.py b/examples/disassembler/log_idp_events.py new file mode 100644 index 0000000..b5c6979 --- /dev/null +++ b/examples/disassembler/log_idp_events.py @@ -0,0 +1,44 @@ +""" +summary: react to processor events/notifications + +description: + these hooks will be notified about IDP events, and + dump their information to the "Output" window + +level: intermediate +""" + +import inspect + +import ida_idp + +class idp_logger_hooks_t(ida_idp.IDP_Hooks): + + def __init__(self): + ida_idp.IDP_Hooks.__init__(self) + self.inhibit_log = 0; + + def _format_value(self, v): + return str(v) + + def _log(self, msg=None): + if self.inhibit_log <= 0: + if msg: + print(">>> idp_logger_hooks_t: %s" % msg) + else: + stack = inspect.stack() + frame, _, _, _, _, _ = stack[1] + args, _, _, values = inspect.getargvalues(frame) + method_name = inspect.getframeinfo(frame)[2] + argstrs = [] + for arg in args[1:]: + argstrs.append("%s=%s" % (arg, self._format_value(values[arg]))) + print(">>> idp_logger_hooks_t.%s: %s" % (method_name, ", ".join(argstrs))) + return 0 + + def get_abi_info(self, comp): + self._log() + return None, None + +idp_hooks = idp_logger_hooks_t() +idp_hooks.hook() diff --git a/examples/idbhooks/operand_changed.py b/examples/disassembler/operand_changed.py similarity index 92% rename from examples/idbhooks/operand_changed.py rename to examples/disassembler/operand_changed.py index 7b96c4e..05a1686 100644 --- a/examples/idbhooks/operand_changed.py +++ b/examples/disassembler/operand_changed.py @@ -4,6 +4,8 @@ summary: notify the user when an instruction operand changes description: Show notifications whenever the user changes an instruction's operand, or a data item. + +level: advanced """ import binascii @@ -25,13 +27,13 @@ class operand_changed_t(ida_idp.IDB_Hooks): opi = ida_bytes.get_opinfo(buf, ea, n, flags) if opi: if ida_bytes.is_struct(flags): - tif = ida_typeinf.tinfo_t() - if tif.get_type_by_tid(opi.tid): + try: + tif = ida_typeinf.tinfo_t(tid=opi.tid) self.log("New struct: 0x%08X ordinal: %d (name=%s)" % ( tif.get_tid(), tif.get_ordinal(), tif.get_type_name())) - else: + except: self.log("Failed tif") elif ida_bytes.is_strlit(flags): encidx = ida_nalt.get_str_encoding_idx(opi.strtype) @@ -54,14 +56,14 @@ class operand_changed_t(ida_idp.IDB_Hooks): opi.ri.tdelta, opi.ri.flags)) elif ida_bytes.is_enum(flags, n): - tif = ida_typeinf.tinfo_t() - if tif.get_type_by_tid(opi.ec.tid): + try: + tif = ida_typeinf.tinfo_t(tid=opi.ec.tid) self.log("New enum: 0x%08X ordinal: %d (enum=%s), serial=%d" % ( opi.ec.tid, tif.get_ordinal(), tif.get_type_name(), opi.ec.serial)) - else: + except: self.log("Failed tif") pass elif ida_bytes.is_stroff(flags, n): diff --git a/examples/core/produce_lst_file.py b/examples/disassembler/produce_lst_file.py similarity index 93% rename from examples/core/produce_lst_file.py rename to examples/disassembler/produce_lst_file.py index 6d54063..1ba1b1f 100644 --- a/examples/core/produce_lst_file.py +++ b/examples/disassembler/produce_lst_file.py @@ -1,5 +1,5 @@ """ -summary: produce listing +summary: produce disassembly listing for the entire file description: automate IDA to perform auto-analysis on a file and, @@ -14,6 +14,8 @@ description: * -A instructs IDA to run in non-interactive mode * -S holds a path to the script to run (note this is a single token; there is no space between '-S' and its path.) + +level: beginner """ import ida_auto diff --git a/examples/idbhooks/replay_prototypes_changes.py b/examples/disassembler/replay_prototypes_changes.py similarity index 97% rename from examples/idbhooks/replay_prototypes_changes.py rename to examples/disassembler/replay_prototypes_changes.py index afd5866..d308fa3 100644 --- a/examples/idbhooks/replay_prototypes_changes.py +++ b/examples/disassembler/replay_prototypes_changes.py @@ -1,5 +1,5 @@ """ -summary: Record and replay changes in function prototypes +summary: record and replay changes in function prototypes description: This is a sample script, that will record (in memory) all changes in @@ -15,6 +15,8 @@ description: Note: 'ti_changed' is also called for changes to the function frames, but we'll only record function prototypes changes. + +level: intermediate """ import ida_idp import ida_funcs diff --git a/examples/index.css b/examples/index.css deleted file mode 100644 index 8478dec..0000000 --- a/examples/index.css +++ /dev/null @@ -1,28 +0,0 @@ - -body -{ - margin: 3%; -} - -.exp-col -{ - cursor: pointer; - padding: 0 4px 0 6px; -} - -.collapsed-entry .details -{ - display: none; -} - -.example-entry .details -{ - margin-left: 3%; - padding: 6px; - background-color: #eef; -} - -a -{ - text-decoration: none; -} \ No newline at end of file diff --git a/examples/index.html b/examples/index.html deleted file mode 100644 index 0831210..0000000 --- a/examples/index.html +++ /dev/null @@ -1,4533 +0,0 @@ -<!-- -Used keywords: - actions - bookmarks - chooser - coloring - colors - ctxmenu - DBG_Hooks - desktop - folders - forms - funcs iterator - functions - graph - Hexrays_Hooks - idaview - IDB_Hooks - idc - IDP_Hooks - listing - plugin - UI_Hooks - View_Hooks - xrefs ---> -<html> - <head> - <meta charset="UTF-8"> - <title>IDAPython examples - - - - - - - - -

IDAPython examples:

-

Category: analysis

-
-
-
- - - dump_func_info: Dump (some) information about the current function. -
-
- -
-Dump some of the most interesting bits of information about
-the function we are currently looking at.
-
- -
    -
  • Category: analysis
  • -
  • Summary: Dump (some) information about the current function.
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_funcs.FUNC_FRAME
    • -
    • ida_funcs.FUNC_LUMINA
    • -
    • ida_funcs.FUNC_OUTLINE
    • -
    • ida_funcs.FUNC_THUNK
    • -
    • ida_funcs.get_fchunk
    • -
    • ida_funcs.is_func_entry
    • -
    • ida_funcs.is_func_tail
    • -
    • ida_kernwin.get_screen_ea
    • -
    -
  • - - -
-
-
- -
-

Category: core

-
-
-
- - - actions: Custom actions, with icons & tooltips -
-
- -
-How to create user actions, that once created can be
-inserted in menus, toolbars, context menus, ...
-
-Those actions, when triggered, will be passed a 'context'
-that contains some of the most frequently needed bits of
-information.
-
-In addition, custom actions can determine when they want
-to be available (through their
-`ida_kernwin.action_handler_t.update` callback)
-
- -
    -
  • Category: core
  • -
  • Summary: Custom actions, with icons & tooltips
  • -
  • View on GitHub
  • -
  • Keywords: - actions - ctxmenu - UI_Hooks -
  • - -
  • Shortcut: - Ctrl+F12 -
  • - - -
  • APIs used -
      -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.BWN_DISASM
    • -
    • ida_kernwin.SETMENU_APP
    • -
    • ida_kernwin.UI_Hooks
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.attach_action_to_menu
    • -
    • ida_kernwin.attach_action_to_popup
    • -
    • ida_kernwin.attach_action_to_toolbar
    • -
    • ida_kernwin.get_widget_type
    • -
    • ida_kernwin.load_custom_icon
    • -
    • ida_kernwin.register_action
    • -
    • ida_kernwin.unregister_action
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - add_hotkey: Triggering bits of code by pressing a shortcut -
-
- -
-`ida_kernwin.add_hotkey` is a simpler, but much less flexible
-alternative to `ida_kernwin.register_action` (though it does
-use the same mechanism under the hood.)
-
-It's particularly useful during prototyping, but note that the
-actions that are created cannot be inserted in menus, toolbars
-or cannot provide a custom `ida_kernwin.action_handler_t.update`
-callback.
-
- -
    -
  • Category: core
  • -
  • Summary: Triggering bits of code by pressing a shortcut
  • -
  • View on GitHub
  • -
  • Keywords: - actions -
  • - - - -
  • APIs used -
      -
    • ida_kernwin.add_hotkey
    • -
    • ida_kernwin.del_hotkey
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - add_idc_hotkey: Triggering bits of code by pressing a shortcut (older version) -
-
- -
-This is a somewhat ancient way of registering actions & binding
-shortcuts. It's still here for reference, but "fresher" alternatives
-should be preferred.
-
- -
    -
  • Category: core
  • -
  • Summary: Triggering bits of code by pressing a shortcut (older version)
  • -
  • View on GitHub
  • -
  • Keywords: - actions -
  • - - - -
  • APIs used -
      -
    • ida_expr.compile_idc_text
    • -
    • ida_kernwin.add_idc_hotkey
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - auto_instantiate_widget_plugin: Better integrating custom widgets in the desktop layout -
-
- -
-This is an example demonstrating how one can create widgets from a plugin,
-and have them re-created automatically at IDA startup-time or at desktop load-time.
-
-This example should be placed in the 'plugins' directory of the
-IDA installation, for it to work.
-
-There are 2 ways to use this example:
-1) reloading an IDB, where the widget was opened
-   - open the widget ('View > Open subview > ...')
-   - save this IDB, and close IDA
-   - restart IDA with this IDB
-     => the widget will be visible
-
-2) reloading a desktop, where the widget was opened
-   - open the widget ('View > Open subview > ...')
-   - save the desktop ('Windows > Save desktop...') under, say, the name 'with_auto'
-   - start another IDA instance with some IDB, and load that desktop
-     => the widget will be visible
-
- -
    -
  • Category: core
  • -
  • Summary: Better integrating custom widgets in the desktop layout
  • -
  • View on GitHub
  • -
  • Keywords: - desktop - plugin - UI_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_idaapi.plugin_t
    • -
    • ida_kernwin.AST_ENABLE_ALWAYS
    • -
    • ida_kernwin.SETMENU_APP
    • -
    • ida_kernwin.UI_Hooks
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.attach_action_to_menu
    • -
    • ida_kernwin.find_widget
    • -
    • ida_kernwin.register_action
    • -
    • ida_kernwin.simplecustviewer_t
    • -
    • ida_kernwin.simplecustviewer_t.Create
    • -
    -
  • - - -
-
-
-
-
- - - bin_search: Showcasing `ida_bytes.bin_search` -
- -
-
-
- - - colorize_disassembly_on_the_fly: An easy-to-use way to colorize lines -
-
- -
-This builds upon the `ida_kernwin.UI_Hooks.get_lines_rendering_info`
-feature, to provide a quick & easy way to colorize disassembly
-lines.
-
-Contrary to @colorize_disassembly, the coloring is not persisted in
-the database, and will therefore be lost after the session.
-
-By triggering the action multiple times, the user can "carousel"
-across 4 predefined colors (and return to the "no color" state.)
-
- -
    -
  • Category: core
  • -
  • Summary: An easy-to-use way to colorize lines
  • -
  • View on GitHub
  • -
  • Keywords: - coloring - UI_Hooks -
  • - -
  • Shortcut: - ! -
  • - - -
  • APIs used -
      -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.CK_EXTRA5
    • -
    • ida_kernwin.CK_EXTRA6
    • -
    • ida_kernwin.CK_EXTRA7
    • -
    • ida_kernwin.CK_EXTRA8
    • -
    • ida_kernwin.UI_Hooks
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.get_current_viewer
    • -
    • ida_kernwin.get_custom_viewer_location
    • -
    • ida_kernwin.get_custom_viewer_place_xcoord
    • -
    • ida_kernwin.get_widget_title
    • -
    • ida_kernwin.line_rendering_output_entry_t
    • -
    • ida_kernwin.register_action
    • -
    • ida_moves.lochist_entry_t
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - create_structure_programmatically: Programmatically create & populate a structure -
-
- -
-Usage of the API to create & populate a structure with
-members of different types.
-
- -
    -
  • Category: core
  • -
  • Summary: Programmatically create & populate a structure
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_typeinf.BTF_BYTE
    • -
    • ida_typeinf.BTF_DOUBLE
    • -
    • ida_typeinf.BTF_FLOAT
    • -
    • ida_typeinf.BTF_INT
    • -
    • ida_typeinf.BTF_INT128
    • -
    • ida_typeinf.BTF_INT16
    • -
    • ida_typeinf.BTF_INT64
    • -
    • ida_typeinf.BTF_TBYTE
    • -
    • ida_typeinf.BTF_UINT32
    • -
    • ida_typeinf.FRB_NUMO
    • -
    • ida_typeinf.NTF_TYPE
    • -
    • ida_typeinf.PRTYPE_DEF
    • -
    • ida_typeinf.PRTYPE_MULTI
    • -
    • ida_typeinf.PRTYPE_TYPE
    • -
    • ida_typeinf.del_named_type
    • -
    • ida_typeinf.idc_parse_types
    • -
    • ida_typeinf.tinfo_errstr
    • -
    • ida_typeinf.tinfo_t
    • -
    • ida_typeinf.udm_t
    • -
    • ida_typeinf.udt_type_data_t
    • -
    • ida_typeinf.value_repr_t
    • -
    -
  • - - -
  • Author: Gergely Erdelyi (gergely.erdelyi@d-dome.net)
  • -
-
-
-
-
- - - custom_cli: A custom command-line interpreter -
-
- -
-Illustrates how one can add command-line interpreters to IDA
-
-This custom interpreter doesn't actually run any code; it's
-there as a 'getting started'.
-It provides an example tab completion support.
-
- -
    -
  • Category: core
  • -
  • Summary: A custom command-line interpreter
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_idaapi.NW_CLOSEIDB
    • -
    • ida_idaapi.NW_OPENIDB
    • -
    • ida_idaapi.NW_REMOVE
    • -
    • ida_idaapi.NW_TERMIDA
    • -
    • ida_idaapi.notify_when
    • -
    • ida_kernwin.cli_t
    • -
    -
  • - - -
-
-
-
-
- - - custom_data_types_and_formats: Using custom data types & printers -
-
- -
-IDA can be extended to support certain data types that it
-does not know about out-of-the-box.
-
-A 'custom data type' provide information about the type &
-size of a piece of data, while a 'custom data format' is in
-charge of formatting that data (there can be more than
-one format for a specific 'custom data type'.)
-
- -
    -
  • Category: core
  • -
  • Summary: Using custom data types & printers
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_bytes.data_format_t
    • -
    • ida_bytes.data_type_t
    • -
    • ida_bytes.find_custom_data_type
    • -
    • ida_bytes.get_byte
    • -
    • ida_bytes.register_data_types_and_formats
    • -
    • ida_bytes.unregister_data_types_and_formats
    • -
    • ida_idaapi.NW_CLOSEIDB
    • -
    • ida_idaapi.NW_OPENIDB
    • -
    • ida_idaapi.NW_REMOVE
    • -
    • ida_idaapi.NW_TERMIDA
    • -
    • ida_idaapi.notify_when
    • -
    • ida_idaapi.struct_unpack
    • -
    • ida_lines.COLSTR
    • -
    • ida_lines.SCOLOR_IMPNAME
    • -
    • ida_lines.SCOLOR_INSN
    • -
    • ida_lines.SCOLOR_NUMBER
    • -
    • ida_lines.SCOLOR_REG
    • -
    • ida_nalt.get_input_file_path
    • -
    • ida_netnode.netnode
    • -
    • ida_typeinf.tinfo_t
    • -
    -
  • - - -
-
-
-
-
- - - dump_extra_comments: Retrieve extra comments -
-
- -
-Use the `ida_lines.get_extra_cmt` API to retrieve anterior
-and posterior extra comments.
-
-This script registers two actions, that can be used to dump
-the previous and next extra comments.
-
- -
    -
  • Category: core
  • -
  • Summary: Retrieve extra comments
  • -
  • View on GitHub
  • -
  • Keywords: - ctxmenu -
  • - -
  • Shortcuts: - Ctrl+Shift+Y - Ctrl+Shift+Z -
  • - - -
  • APIs used -
      -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.BWN_DISASM
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.attach_action_to_popup
    • -
    • ida_kernwin.find_widget
    • -
    • ida_kernwin.get_screen_ea
    • -
    • ida_kernwin.register_action
    • -
    • ida_kernwin.unregister_action
    • -
    • ida_lines.E_NEXT
    • -
    • ida_lines.E_PREV
    • -
    • ida_lines.get_extra_cmt
    • -
    • ida_view
    • -
    -
  • - - -
-
-
-
-
- - - dump_flowchart: Dump function flowchart -
-
- -
-Dumps the current function's flowchart, using 2 methods:
-
-  * the low-level `ida_gdl.qflow_chart_t` type
-  * the somewhat higher-level, and slightly more pythonic
-    `ida_gdl.FlowChart` type.
-
- -
    -
  • Category: core
  • -
  • Summary: Dump function flowchart
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_funcs.get_func
    • -
    • ida_gdl.FlowChart
    • -
    • ida_gdl.qflow_chart_t
    • -
    • ida_kernwin.get_screen_ea
    • -
    -
  • - - -
-
-
-
-
- - - dump_selection: Retrieve & dump current selection -
-
- -
-Shows how to retrieve the selection from a listing
-widget ("IDA View-A", "Hex View-1", "Pseudocode-A", ...) as
-two "cursors", and from there retrieve (in fact, generate)
-the corresponding text.
-
-After running this script:
-
-  * select some text in one of the listing widgets (i.e.,
-    "IDA View-*", "Enums", "Structures", "Pseudocode-*")
-  * press Ctrl+Shift+S to dump the selection
-
- -
    -
  • Category: core
  • -
  • Summary: Retrieve & dump current selection
  • -
  • View on GitHub
  • - -
  • Shortcut: - Ctrl+Shift+S -
  • - - -
  • APIs used -
      -
    • ida_kernwin.ACF_HAS_SELECTION
    • -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.BWN_DISASM
    • -
    • ida_kernwin.BWN_ENUMS
    • -
    • ida_kernwin.BWN_PSEUDOCODE
    • -
    • ida_kernwin.BWN_STRUCTS
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.get_current_viewer
    • -
    • ida_kernwin.get_viewer_user_data
    • -
    • ida_kernwin.l_compare2
    • -
    • ida_kernwin.linearray_t
    • -
    • ida_kernwin.read_selection
    • -
    • ida_kernwin.register_action
    • -
    • ida_kernwin.twinpos_t
    • -
    • ida_kernwin.unregister_action
    • -
    • ida_lines.tag_remove
    • -
    -
  • - - -
-
-
-
-
- - - extend_idc: Add functions to the IDC runtime from IDAPython -
-
- -
-You can add IDC functions to IDA, whose "body" consists of
-IDAPython statements!
-
-We'll register a 'pow' function, available to all IDC code,
-that when invoked will call back into IDAPython, and execute
-the provided function body.
-
-After running this script, try switching to the IDC interpreter
-(using the button on the lower-left corner of IDA) and executing
-`pow(3, 7)`
-
- -
    -
  • Category: core
  • -
  • Summary: Add functions to the IDC runtime from IDAPython
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_expr.VT_LONG
    • -
    • ida_expr.add_idc_func
    • -
    -
  • - - -
-
-
-
-
- - - idapythonrc: Code to be run right after IDAPython initialization -
-
- -
-The `idapythonrc.py` file:
-
-  * %APPDATA%\Hex-Rays\IDA Pro\idapythonrc.py (on Windows)
-  * ~/.idapro/idapythonrc.py (on Linux & Mac)
-
-can contain any IDAPython code that will be run as soon as
-IDAPython is done successfully initializing.
-
- -
    -
  • Category: core
  • -
  • Summary: Code to be run right after IDAPython initialization
  • -
  • View on GitHub
  • - - - - - -
-
-
-
-
- - - install_user_defined_prefix: Inserting information into disassembly prefixes -
-
- -
-By default, disassembly line prefixes contain segment + address
-information (e.g., '.text:08047718'), but it is possible to
-"inject" other bits of information in there, thanks to the
-`ida_lines.user_defined_prefix_t` helper type.
-
- -
    -
  • Category: core
  • -
  • Summary: Inserting information into disassembly prefixes
  • -
  • View on GitHub
  • -
  • Keywords: - plugin -
  • - - - -
  • APIs used -
      -
    • ida_idaapi.PLUGIN_KEEP
    • -
    • ida_idaapi.plugin_t
    • -
    • ida_lines.SCOLOR_INV
    • -
    • ida_lines.user_defined_prefix_t
    • -
    -
  • - - -
-
-
-
-
- - - list_bookmarks: List bookmarks associated to a listing -
-
- -
-This sample shows how to programmatically access the list of
-bookmarks placed in a listing widget (e.g., "IDA View-A",
-"Pseudocode-", …) using the low-level `ida_moves.bookmarks_t`
-type.
-
- -
    -
  • Category: core
  • -
  • Summary: List bookmarks associated to a listing
  • -
  • View on GitHub
  • -
  • Keywords: - bookmarks -
  • - -
  • Shortcut: - Ctrl+! -
  • - - -
  • APIs used -
      -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.get_current_viewer
    • -
    • ida_kernwin.get_viewer_user_data
    • -
    • ida_kernwin.get_widget_title
    • -
    • ida_kernwin.register_action
    • -
    • ida_moves.bookmarks_t
    • -
    -
  • - - -
-
-
-
-
- - - list_function_items: Showcases (a few of) the iterators available on a function -
-
- -
-This demonstrates how to use some of the iterators available on the func_t type.
-
-This example will focus on:
-
-  * `func_t[.__iter__]`: the default iterator; iterates on instructions
-  * `func_t.data_items`: iterate on data items contained within a function
-  * `func_t.head_items`: iterate on 'heads' (i.e., addresses containing
-                         the start of an instruction, or a data item.
-  * `func_t.addresses`: iterate on all addresses within function (code
-                        and data, beginning of an item or not)
-
-Type `help(ida_funcs.func_t)` for a full list of iterators.
-
-In addition, one can use:
-
-  * `func_tail_iterator_t`: iterate on all the chunks (including
-                            the main one) of the function
-  * `func_parent_iterator_t`: iterate on all the parent functions,
-                              that include this chunk
-
- -
    -
  • Category: core
  • -
  • Summary: Showcases (a few of) the iterators available on a function
  • -
  • View on GitHub
  • -
  • Keywords: - funcs iterator -
  • - - - -
  • APIs used -
      -
    • ida_bytes.get_flags
    • -
    • ida_bytes.is_code
    • -
    • ida_bytes.is_data
    • -
    • ida_bytes.is_tail
    • -
    • ida_bytes.is_unknown
    • -
    • ida_funcs.func_tail_iterator_t
    • -
    • ida_funcs.get_fchunk
    • -
    • ida_funcs.get_func
    • -
    • ida_funcs.get_func_name
    • -
    • ida_kernwin.get_screen_ea
    • -
    • ida_ua.print_insn_mnem
    • -
    -
  • - - -
-
-
-
-
- - - list_imports: Enumerate file imports -
-
- -
-Using the API to enumerate file imports.
-
- -
    -
  • Category: core
  • -
  • Summary: Enumerate file imports
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_nalt.enum_import_names
    • -
    • ida_nalt.get_import_module_name
    • -
    • ida_nalt.get_import_module_qty
    • -
    -
  • - - -
-
-
-
-
- - - list_patched_bytes: Enumerate patched bytes -
-
- -
-Using the API to iterate over all the places in the file,
-that were patched using IDA.
-
- -
    -
  • Category: core
  • -
  • Summary: Enumerate patched bytes
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_bytes.visit_patched_bytes
    • -
    • ida_idaapi.BADADDR
    • -
    -
  • - - -
-
-
-
-
- - - list_problems: Enumerate problems -
-
- -
-Using the API to list all problem[atic situation]s that IDA
-encountered during analysis.
-
- -
    -
  • Category: core
  • -
  • Summary: Enumerate problems
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_ida.inf_get_min_ea
    • -
    • ida_idaapi.BADADDR
    • -
    • ida_problems.PR_ATTN
    • -
    • ida_problems.PR_BADSTACK
    • -
    • ida_problems.PR_COLLISION
    • -
    • ida_problems.PR_DECIMP
    • -
    • ida_problems.PR_DISASM
    • -
    • ida_problems.PR_FINAL
    • -
    • ida_problems.PR_HEAD
    • -
    • ida_problems.PR_ILLADDR
    • -
    • ida_problems.PR_JUMP
    • -
    • ida_problems.PR_MANYLINES
    • -
    • ida_problems.PR_NOBASE
    • -
    • ida_problems.PR_NOCMT
    • -
    • ida_problems.PR_NOFOP
    • -
    • ida_problems.PR_NONAME
    • -
    • ida_problems.PR_NOXREFS
    • -
    • ida_problems.PR_ROLLED
    • -
    • ida_problems.get_problem
    • -
    • ida_problems.get_problem_name
    • -
    -
  • - - -
-
-
-
-
- - - list_segment_functions: List all functions (and xrefs) in segment -
-
- -
-List all the functions in the current segment, as well as
-all the cross-references to them.
-
- -
    -
  • Category: core
  • -
  • Summary: List all functions (and xrefs) in segment
  • -
  • View on GitHub
  • -
  • Keywords: - xrefs -
  • - - - -
  • APIs used -
      -
    • ida_funcs.get_func
    • -
    • ida_funcs.get_func_name
    • -
    • ida_funcs.get_next_func
    • -
    • ida_kernwin.get_screen_ea
    • -
    • ida_segment.getseg
    • -
    • ida_xref.xrefblk_t
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - list_segment_functions_using_idautils: List all functions (and xrefs) in segment -
-
- -
-List all the functions in the current segment, as well as
-all the cross-references to them.
-
-Contrary to @list_segment_functions, this uses the somewhat
-higher-level `idautils` module.
-
- -
    -
  • Category: core
  • -
  • Summary: List all functions (and xrefs) in segment
  • -
  • View on GitHub
  • -
  • Keywords: - xrefs -
  • - - - -
  • APIs used -
      -
    • ida_funcs.get_func_name
    • -
    • ida_idaapi.BADADDR
    • -
    • ida_kernwin.get_screen_ea
    • -
    • ida_segment.getseg
    • -
    • idautils.CodeRefsTo
    • -
    • idautils.Functions
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - list_stkvar_xrefs: List all xrefs to a function stack variable -
-
- -
-Contrary to (in-memory) data & code xrefs, retrieving stack variables
-xrefs requires a bit more work than just using ida_xref's first_to(),
-next_to() (or higher level utilities such as idautils.XrefsTo)
-
- -
    -
  • Category: core
  • -
  • Summary: List all xrefs to a function stack variable
  • -
  • View on GitHub
  • -
  • Keywords: - xrefs -
  • - -
  • Shortcut: - Ctrl+Shift+F7 -
  • - - -
  • APIs used -
      -
    • ida_bytes.get_flags
    • -
    • ida_bytes.is_stkvar
    • -
    • ida_frame.calc_stkvar_struc_offset
    • -
    • ida_frame.get_frame
    • -
    • ida_funcs.get_func
    • -
    • ida_ida.UA_MAXOP
    • -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.BWN_DISASM
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.get_current_viewer
    • -
    • ida_kernwin.get_highlight
    • -
    • ida_kernwin.get_screen_ea
    • -
    • ida_kernwin.register_action
    • -
    • ida_struct.get_member_by_name
    • -
    • ida_struct.get_struc
    • -
    • ida_ua.decode_insn
    • -
    • ida_ua.insn_t
    • -
    -
  • - - -
-
-
-
-
- - - list_strings: Retrieve the strings that are present in the IDB -
-
- -
-This uses `idautils.Strings` to iterate over the string literals
-that are present in the IDB. Contrary to @show_selected_strings,
-this will not require that the "Strings" window is opened & available.
-
- -
    -
  • Category: core
  • -
  • Summary: Retrieve the strings that are present in the IDB
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_nalt.STRTYPE_C
    • -
    • ida_nalt.STRTYPE_C_16
    • -
    • idautils.Strings
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - produce_c_file: Decompile entire file -
-
- -
-Automate IDA to perform auto-analysis on a file and,
-once that is done, produce a .c file containing the
-decompilation of all the functions in that file.
-
-Run like so:
-
-      ida -A "-S...path/to/produce_c_file.py" 
-
-where:
-
-  * -A instructs IDA to run in non-interactive mode
-  * -S holds a path to the script to run (note this is a single token;
-       there is no space between '-S' and its path.)
-
- -
    -
  • Category: core
  • -
  • Summary: Decompile entire file
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_auto.auto_wait
    • -
    • ida_hexrays.VDRUN_MAYSTOP
    • -
    • ida_hexrays.VDRUN_NEWFILE
    • -
    • ida_hexrays.VDRUN_SILENT
    • -
    • ida_hexrays.decompile_many
    • -
    • ida_loader.PATH_TYPE_IDB
    • -
    • ida_loader.get_path
    • -
    • ida_pro.qexit
    • -
    -
  • - - -
-
-
-
-
- - - produce_lst_file: Produce listing -
-
- -
-Automate IDA to perform auto-analysis on a file and,
-once that is done, produce a .lst file with the disassembly.
-
-Run like so:
-
-      ida -A "-S...path/to/produce_lst_file.py" 
-
-where:
-
-  * -A instructs IDA to run in non-interactive mode
-  * -S holds a path to the script to run (note this is a single token;
-       there is no space between '-S' and its path.)
-
- -
    -
  • Category: core
  • -
  • Summary: Produce listing
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_auto.auto_wait
    • -
    • ida_fpro.qfile_t
    • -
    • ida_ida.inf_get_max_ea
    • -
    • ida_ida.inf_get_min_ea
    • -
    • ida_loader.OFILE_LST
    • -
    • ida_loader.PATH_TYPE_IDB
    • -
    • ida_loader.gen_file
    • -
    • ida_loader.get_path
    • -
    • ida_pro.qexit
    • -
    -
  • - - -
-
-
-
-
- - - register_timer: Using timers for delayed execution -
-
- -
-Register (possibly repeating) timers.
-
- -
    -
  • Category: core
  • -
  • Summary: Using timers for delayed execution
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_kernwin.register_timer
    • -
    -
  • - - -
-
-
-
-
- - - trigger_actions_programmatically: Execute existing actions programmatically -
-
- -
-It's possible to invoke any action programmatically, by using
-either of those two:
-
-  * ida_kernwin.execute_ui_requests()
-  * ida_kernwin.process_ui_action()
-
-Ideally, this script should be run through the "File > Script file..."
-menu, so as to keep focus on "IDA View-A" and have the
-'ProcessUiActions' part work as intended.
-
- -
    -
  • Category: core
  • -
  • Summary: Execute existing actions programmatically
  • -
  • View on GitHub
  • -
  • Keywords: - actions -
  • - - - -
  • APIs used -
      -
    • ida_kernwin.ask_yn
    • -
    • ida_kernwin.execute_ui_requests
    • -
    • ida_kernwin.msg
    • -
    • ida_kernwin.process_ui_action
    • -
    -
  • - - -
-
-
- -
-

Category: cvt64

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

Category: debugging

-
-
-
- - - automatic_steps: Programmatically drive a debugging session -
-
- -
-Start a debugging session, step through the first five
-instructions. Each instruction is disassembled after
-execution.
-
- -
    -
  • Category: debugging
  • -
  • Summary: Programmatically drive a debugging session
  • -
  • View on GitHub
  • -
  • Keywords: - DBG_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_dbg.DBG_Hooks
    • -
    • ida_dbg.get_reg_val
    • -
    • ida_dbg.request_exit_process
    • -
    • ida_dbg.request_run_to
    • -
    • ida_dbg.request_step_over
    • -
    • ida_dbg.run_requests
    • -
    • ida_ida.inf_get_start_ip
    • -
    • ida_idaapi.BADADDR
    • -
    • ida_lines.generate_disasm_line
    • -
    • ida_lines.tag_remove
    • -
    -
  • - - -
-
-
-
-
- - - dbg_trace: Using the low-level tracing hook -
-
- -
-This script demonstrates using the low-level tracing hook
-(ida_dbg.DBG_Hooks.dbg_trace). It can be run like so:
-
-     ida[t].exe -B -Sdbg_trace.py -Ltrace.log file.exe
-
- -
    -
  • Category: debugging
  • -
  • Summary: Using the low-level tracing hook
  • -
  • View on GitHub
  • -
  • Keywords: - DBG_Hooks -
  • - - - -
  • APIs used -
      -
    • GENDSM_FORCE_CODE
    • -
    • GENDSM_REMOVE_TAGS
    • -
    • NN_call
    • -
    • NN_callfi
    • -
    • NN_callni
    • -
    • generate_disasm_line
    • -
    • ida_dbg.DBG_Hooks
    • -
    • ida_dbg.ST_OVER_DEBUG_SEG
    • -
    • ida_dbg.ST_OVER_LIB_FUNC
    • -
    • ida_dbg.enable_step_trace
    • -
    • ida_dbg.get_process_state
    • -
    • ida_dbg.get_reg_val
    • -
    • ida_dbg.get_step_trace_options
    • -
    • ida_dbg.load_debugger
    • -
    • ida_dbg.refresh_debugger_memory
    • -
    • ida_dbg.request_continue_process
    • -
    • ida_dbg.request_enable_step_trace
    • -
    • ida_dbg.request_set_step_trace_options
    • -
    • ida_dbg.run_requests
    • -
    • ida_dbg.run_to
    • -
    • ida_dbg.set_step_trace_options
    • -
    • ida_dbg.wait_for_next_event
    • -
    • ida_ida.f_ELF
    • -
    • ida_ida.f_MACHO
    • -
    • ida_ida.f_PE
    • -
    • ida_ida.inf_get_filetype
    • -
    • ida_ida.inf_get_max_ea
    • -
    • ida_ida.inf_get_min_ea
    • -
    • ida_ida.inf_get_start_ip
    • -
    • ida_pro.qexit
    • -
    • ida_ua.decode_insn
    • -
    • ida_ua.insn_t
    • -
    • idc.ARGV
    • -
    -
  • - - -
-
-
-
-
- - - print_call_stack: Print call stack (on Linux) -
-
- -
-           Print the return addresses from the call stack at a breakpoint.
-           (and print also the module and the debug name from debugger)
-
-To use this example:
-
-  * run `ida64` on test program `simple_appcall_linux64`, or
-    `ida` on test program `simple_appcall_linux32`, and wait for
-    auto-analysis to finish
-  * put a breakpoint where you want to see the call stack
-  * select the 'linux debugger' (either local, or remote)
-  * start debugging
-  * Press Shift+C at the breakpoint
-
- -
    -
  • Category: debugging
  • -
  • Summary: Print call stack (on Linux)
  • -
  • View on GitHub
  • - -
  • Shortcut: - Shift+C -
  • - - -
  • APIs used -
      -
    • ida_dbg.collect_stack_trace
    • -
    • ida_dbg.get_current_thread
    • -
    • ida_dbg.get_module_info
    • -
    • ida_idd.call_stack_t
    • -
    • ida_idd.modinfo_t
    • -
    • ida_kernwin.AST_ENABLE_ALWAYS
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.register_action
    • -
    • ida_name.GNCN_NOCOLOR
    • -
    • ida_name.GNCN_NOLABEL
    • -
    • ida_name.GNCN_NOSEG
    • -
    • ida_name.GNCN_PREFDBG
    • -
    • ida_name.get_nice_colored_name
    • -
    -
  • - - -
-
-
-
-
- - - print_registers: Print all registers, for all threads -
-
- -
-           Iterate over the list of threads in the program being
-           debugged, and dump all registers contents
-
-To use this example:
-
-  * run `ida64` on test program `simple_appcall_linux64`, or
-    `ida` on test program `simple_appcall_linux32`, and wait for
-    auto-analysis to finish
-  * put a breakpoint somewhere in the code
-  * select the 'linux debugger' (either local, or remote)
-  * start debugging
-  * Press Alt+Shift+C at the breakpoint
-
- -
    -
  • Category: debugging
  • -
  • Summary: Print all registers, for all threads
  • -
  • View on GitHub
  • - -
  • Shortcut: - Alt+Shift+C -
  • - - -
  • APIs used -
      -
    • ida_dbg.get_reg_vals
    • -
    • ida_dbg.get_thread_qty
    • -
    • ida_dbg.getn_thread
    • -
    • ida_idd.get_dbg
    • -
    • ida_kernwin.AST_ENABLE_ALWAYS
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.register_action
    • -
    -
  • - - -
-
-
-
-
- - - registers_context_menu: Adding actions to the "registers" widget(s) -
-
- -
-It's possible to add actions to the context menu of
-pretty much all widgets in IDA.
-
-This example shows how to do just that for
-registers-displaying widgets (e.g., "General registers")
-
- -
    -
  • Category: debugging
  • -
  • Summary: Adding actions to the "registers" widget(s)
  • -
  • View on GitHub
  • -
  • Keywords: - ctxmenu - UI_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_dbg.get_dbg_reg_info
    • -
    • ida_dbg.get_reg_val
    • -
    • ida_idd.register_info_t
    • -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.BWN_CPUREGS
    • -
    • ida_kernwin.UI_Hooks
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.attach_action_to_popup
    • -
    • ida_kernwin.get_widget_type
    • -
    • ida_kernwin.register_action
    • -
    • ida_ua.dt_byte
    • -
    • ida_ua.dt_dword
    • -
    • ida_ua.dt_qword
    • -
    • ida_ua.dt_word
    • -
    -
  • - - -
-
-
-
-
- - - show_debug_names: Retrieving & dumping debuggee symbols -
-
- -
-Queries the debugger (possibly remotely) for the list of
-symbols that the process being debugged, provides.
-
- -
    -
  • Category: debugging
  • -
  • Summary: Retrieving & dumping debuggee symbols
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_dbg.DSTATE_SUSP
    • -
    • ida_dbg.get_process_state
    • -
    • ida_dbg.is_debugger_on
    • -
    • ida_ida.inf_get_max_ea
    • -
    • ida_ida.inf_get_min_ea
    • -
    • ida_name.get_debug_names
    • -
    -
  • - - -
-
-
-
-
- - - simple_appcall_linux: Executing code into the application being debugged (on Linux) -
-
- -
-Using the `ida_idd.Appcall` utility to execute code in
-the process being debugged.
-
-This example will run the test program and stop wherever
-the cursor currently is, and then perform an appcall to
-execute the `ref4` and `ref8` functions.
-
-To use this example:
-
-  * run `ida64` on test program `simple_appcall_linux64`, or
-    `ida` on test program `simple_appcall_linux32`, and wait for
-    auto-analysis to finish
-  * select the 'linux debugger' (either local, or remote)
-  * run this script
-
-Note: the real body of code is in `simple_appcall_common.py`.
-
- -
    -
  • Category: debugging
  • -
  • Summary: Executing code into the application being debugged (on Linux)
  • -
  • View on GitHub
  • - - -
  • Imports -
      -
    • simple_appcall_common
    • -
    -
  • - -
  • APIs used -
      -
    • ida_dbg.DBG_Hooks
    • -
    • ida_dbg.run_to
    • -
    • ida_idaapi.BADADDR
    • -
    • ida_idd.Appcall
    • -
    • ida_idd.Appcall.byref
    • -
    • ida_idd.Appcall.int64
    • -
    • ida_kernwin.get_screen_ea
    • -
    • ida_name.get_name_ea
    • -
    • ida_name.set_name
    • -
    • ida_typeinf.apply_cdecl
    • -
    -
  • - - -
-
-
-
-
- - - simple_appcall_win: Executing code into the application being debugged (on Windows) -
-
- -
-Using the `ida_idd.Appcall` utility to execute code in
-the process being debugged.
-
-This example will run the test program and stop wherever
-the cursor currently is, and then perform an appcall to
-execute the `ref4` and `ref8` functions.
-
-To use this example:
-
-  * run `ida64` on test program `simple_appcall_win64.exe`, or
-    `ida` on test program `simple_appcall_win32.exe`, and wait for
-    auto-analysis to finish
-  * select the 'windows debugger' (either local, or remote)
-  * run this script
-
-Note: the real body of code is in `simple_appcall_common.py`.
-
- -
    -
  • Category: debugging
  • -
  • Summary: Executing code into the application being debugged (on Windows)
  • -
  • View on GitHub
  • - - -
  • Imports -
      -
    • simple_appcall_common
    • -
    -
  • - -
  • APIs used -
      -
    • ida_dbg.DBG_Hooks
    • -
    • ida_dbg.run_to
    • -
    • ida_ida.inf_is_64bit
    • -
    • ida_idaapi.BADADDR
    • -
    • ida_idd.Appcall
    • -
    • ida_idd.Appcall.byref
    • -
    • ida_idd.Appcall.int64
    • -
    • ida_kernwin.get_screen_ea
    • -
    • ida_name.get_name_ea
    • -
    • ida_name.set_name
    • -
    • ida_typeinf.apply_cdecl
    • -
    -
  • - - -
-
-
- -
-

Category: disassembly

-
-
-
- - - colorize_disassembly: Change background colours -
-
- -
-This illustrates the setting/retrieval of background colours
-using the IDC wrappers
-
-In order to do so, we'll be assigning colors to specific ranges
-(item, function, or segment). Those will be persisted in the
-database.
-
- -
    -
  • Category: disassembly
  • -
  • Summary: Change background colours
  • -
  • View on GitHub
  • -
  • Keywords: - coloring - idc -
  • - - - -
  • APIs used -
      -
    • idc.CIC_FUNC
    • -
    • idc.CIC_ITEM
    • -
    • idc.CIC_SEGM
    • -
    • idc.get_color
    • -
    • idc.here
    • -
    • idc.set_color
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
- -
-

Category: hexrays

-
-
-
- - - colorize_pseudocode_lines: Interactively color certain pseudocode lines -
-
- -
-Provides an action that can be used to dynamically alter the
-lines background rendering for pseudocode listings (as opposed to
-using `ida_hexrays.cfunc_t.pseudocode[N].bgcolor`)
-
-After running this script, pressing 'M' on a line in a
-"Pseudocode-?" widget, will cause that line to be rendered
-with a special background color.
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Interactively color certain pseudocode lines
  • -
  • View on GitHub
  • -
  • Keywords: - colors - UI_Hooks -
  • - -
  • Shortcut: - M -
  • - - -
  • APIs used -
      -
    • ida_hexrays.get_widget_vdui
    • -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.BWN_PSEUDOCODE
    • -
    • ida_kernwin.CK_EXTRA11
    • -
    • ida_kernwin.UI_Hooks
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.get_custom_viewer_location
    • -
    • ida_kernwin.line_rendering_output_entry_t
    • -
    • ida_kernwin.refresh_custom_viewer
    • -
    • ida_kernwin.register_action
    • -
    • ida_moves.lochist_entry_t
    • -
    -
  • - - -
-
-
-
-
- - - curpos_details: A focus on the 'curpos' hook, printing additional details about user input -
-
- -
-Shows how user input information can be retrieved during
-processing of a notification triggered by that input
-
- -
    -
  • Category: hexrays
  • -
  • Summary: A focus on the 'curpos' hook, printing additional details about user input
  • -
  • View on GitHub
  • -
  • Keywords: - Hexrays_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_hexrays.Hexrays_Hooks
    • -
    • ida_kernwin.get_user_input_event
    • -
    • ida_kernwin.iek_key_press
    • -
    • ida_kernwin.iek_key_release
    • -
    • ida_kernwin.iek_mouse_button_press
    • -
    • ida_kernwin.iek_mouse_button_release
    • -
    • ida_kernwin.iek_mouse_wheel
    • -
    • ida_kernwin.iek_shortcut
    • -
    • ida_kernwin.input_event_t
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - decompile_entry_points: Automatic decompilation of functions -
-
- -
-Attempts to load a decompiler plugin corresponding to the current
-architecture (and address size) right after auto-analysis is performed,
-and then tries to decompile the function at the first entrypoint.
-
-It is particularly suited for use with the '-S' flag, for example:
-idat -Ldecompile.log -Sdecompile_entry_points.py -c file
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Automatic decompilation of functions
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_auto.auto_wait
    • -
    • ida_entry.get_entry
    • -
    • ida_entry.get_entry_ordinal
    • -
    • ida_entry.get_entry_qty
    • -
    • ida_hexrays.decompile
    • -
    • ida_hexrays.init_hexrays_plugin
    • -
    • ida_ida.inf_is_64bit
    • -
    • ida_idp.PLFM_386
    • -
    • ida_idp.PLFM_ARM
    • -
    • ida_idp.PLFM_MIPS
    • -
    • ida_idp.PLFM_PPC
    • -
    • ida_idp.ph.id
    • -
    • ida_kernwin.cvar.batch
    • -
    • ida_kernwin.msg
    • -
    • ida_loader.load_plugin
    • -
    • ida_pro.qexit
    • -
    • idc.get_idb_path
    • -
    -
  • - - -
-
-
-
-
- - - vds1: Decompile & print current function. -
-
- -
-Decompile & print current function.
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Decompile & print current function.
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_funcs.get_func
    • -
    • ida_hexrays.decompile
    • -
    • ida_hexrays.get_hexrays_version
    • -
    • ida_hexrays.init_hexrays_plugin
    • -
    • ida_kernwin.get_screen_ea
    • -
    • ida_lines.tag_remove
    • -
    -
  • - - -
-
-
-
-
- - - vds10: A custom microcode instruction optimization rule -
-
- -
-Installs a custom microcode instruction optimization rule,
-to transform:
-
-    call   !DbgRaiseAssertionFailure .0
-
-into
-
-    call   !DbgRaiseAssertionFailure .0
-
-To see this plugin in action please use arm64_brk.i64
-
- -
    -
  • Category: hexrays
  • -
  • Summary: A custom microcode instruction optimization rule
  • -
  • View on GitHub
  • -
  • Keywords: - plugin -
  • - - - -
  • APIs used -
      -
    • ida_bytes.get_cmt
    • -
    • ida_hexrays.init_hexrays_plugin
    • -
    • ida_hexrays.mop_str
    • -
    • ida_hexrays.optinsn_t
    • -
    • ida_idaapi.PLUGIN_HIDE
    • -
    • ida_idaapi.PLUGIN_KEEP
    • -
    • ida_idaapi.plugin_t
    • -
    • ida_typeinf.STI_PCCHAR
    • -
    • ida_typeinf.tinfo_t.get_stock
    • -
    -
  • - - -
-
-
-
-
- - - vds11: A custom microcode block optimization rule (resolve `goto` chains) -
-
- -
-Installs a custom microcode block optimization rule,
-to transform:
-
-      goto L1
-      ...
-    L1:
-      goto L2
-
-into
-
-      goto L2
-
-In other words we fix a goto target if it points to a chain of gotos.
-This improves the decompiler output in some cases.
-
- -
    -
  • Category: hexrays
  • -
  • Summary: A custom microcode block optimization rule (resolve `goto` chains)
  • -
  • View on GitHub
  • -
  • Keywords: - plugin -
  • - - - -
  • APIs used -
      -
    • ida_hexrays.getf_reginsn
    • -
    • ida_hexrays.init_hexrays_plugin
    • -
    • ida_hexrays.m_goto
    • -
    • ida_hexrays.optblock_t
    • -
    • ida_idaapi.PLUGIN_HIDE
    • -
    • ida_idaapi.PLUGIN_KEEP
    • -
    • ida_idaapi.plugin_t
    • -
    -
  • - - -
-
-
-
-
- - - vds12: List instruction registers -
-
- -
-Shows a list of direct references to a register from the
-current instruction.
-
- -
    -
  • Category: hexrays
  • -
  • Summary: List instruction registers
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_bytes.get_flags
    • -
    • ida_bytes.is_code
    • -
    • ida_funcs.get_func
    • -
    • ida_hexrays.ACFL_GUESS
    • -
    • ida_hexrays.DECOMP_NO_CACHE
    • -
    • ida_hexrays.DECOMP_WARNINGS
    • -
    • ida_hexrays.GCO_DEF
    • -
    • ida_hexrays.GCO_USE
    • -
    • ida_hexrays.GC_REGS_AND_STKVARS
    • -
    • ida_hexrays.MERR_OK
    • -
    • ida_hexrays.MMAT_PREOPTIMIZED
    • -
    • ida_hexrays.MUST_ACCESS
    • -
    • ida_hexrays.gco_info_t
    • -
    • ida_hexrays.gen_microcode
    • -
    • ida_hexrays.get_current_operand
    • -
    • ida_hexrays.get_merror_desc
    • -
    • ida_hexrays.hexrays_failure_t
    • -
    • ida_hexrays.init_hexrays_plugin
    • -
    • ida_hexrays.mba_ranges_t
    • -
    • ida_hexrays.mlist_t
    • -
    • ida_hexrays.op_parent_info_t
    • -
    • ida_hexrays.voff_t
    • -
    • ida_kernwin.Choose
    • -
    • ida_kernwin.get_screen_ea
    • -
    • ida_kernwin.jumpto
    • -
    • ida_kernwin.warning
    • -
    • ida_lines.GENDSM_REMOVE_TAGS
    • -
    • ida_lines.generate_disasm_line
    • -
    • ida_pro.eavec_t
    • -
    -
  • - - -
-
-
-
-
- - - vds13: Generates microcode for selection -
-
- -
-Generates microcode for selection and dumps it to the output window.
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Generates microcode for selection
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_bytes.get_flags
    • -
    • ida_bytes.is_code
    • -
    • ida_hexrays.DECOMP_WARNINGS
    • -
    • ida_hexrays.gen_microcode
    • -
    • ida_hexrays.hexrays_failure_t
    • -
    • ida_hexrays.init_hexrays_plugin
    • -
    • ida_hexrays.mba_ranges_t
    • -
    • ida_hexrays.vd_printer_t
    • -
    • ida_kernwin.read_range_selection
    • -
    • ida_kernwin.warning
    • -
    • ida_range.range_t
    • -
    -
  • - - -
-
-
-
-
- - - vds17: Using the "Select offsets" widget -
-
- -
-Registers an action opens the "Select offsets" widget
-(select_udt_by_offset() call).
-
-This effectively repeats the functionality already available
-through Alt+Y.
-
-Place cursor on the union field and press Shift+T
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Using the "Select offsets" widget
  • -
  • View on GitHub
  • -
  • Keywords: - plugin -
  • - -
  • Shortcut: - Shift+T -
  • - - -
  • APIs used -
      -
    • ida_hexrays.USE_KEYBOARD
    • -
    • ida_hexrays.cot_add
    • -
    • ida_hexrays.cot_cast
    • -
    • ida_hexrays.cot_memptr
    • -
    • ida_hexrays.cot_memref
    • -
    • ida_hexrays.cot_num
    • -
    • ida_hexrays.cot_ref
    • -
    • ida_hexrays.get_hexrays_version
    • -
    • ida_hexrays.get_widget_vdui
    • -
    • ida_hexrays.init_hexrays_plugin
    • -
    • ida_hexrays.select_udt_by_offset
    • -
    • ida_hexrays.ui_stroff_applicator_t
    • -
    • ida_hexrays.ui_stroff_ops_t
    • -
    • ida_idaapi.BADADDR
    • -
    • ida_idaapi.PLUGIN_HIDE
    • -
    • ida_idaapi.PLUGIN_KEEP
    • -
    • ida_idaapi.plugin_t
    • -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.BWN_PSEUDOCODE
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.get_custom_viewer_curline
    • -
    • ida_kernwin.msg
    • -
    • ida_kernwin.register_action
    • -
    • ida_kernwin.warning
    • -
    • ida_lines.tag_remove
    • -
    • ida_typeinf.PRTYPE_1LINE
    • -
    • ida_typeinf.print_tinfo
    • -
    • ida_typeinf.remove_pointer
    • -
    -
  • - - -
-
-
-
-
- - - vds19: A custom microcode instruction optimization rule (`x | ~x => -1`) -
-
- -
-Installs a custom microcode instruction optimization rule,
-to transform:
-
-    x | ~x
-
-into
-
-    -1
-
-To see this plugin in action please use be_ornot_be.idb
-
- -
    -
  • Category: hexrays
  • -
  • Summary: A custom microcode instruction optimization rule (`x | ~x => -1`)
  • -
  • View on GitHub
  • -
  • Keywords: - plugin -
  • - - - -
  • APIs used -
      -
    • ida_hexrays.init_hexrays_plugin
    • -
    • ida_hexrays.m_bnot
    • -
    • ida_hexrays.m_mov
    • -
    • ida_hexrays.m_or
    • -
    • ida_hexrays.minsn_visitor_t
    • -
    • ida_hexrays.mop_t
    • -
    • ida_hexrays.optinsn_t
    • -
    • ida_idaapi.PLUGIN_HIDE
    • -
    • ida_idaapi.PLUGIN_KEEP
    • -
    • ida_idaapi.plugin_t
    • -
    -
  • - - -
-
-
-
-
- - - vds21: Dynamically provide a custom call type -
-
- -
-This plugin can greatly improve decompilation of indirect calls:
-
-    call    [eax+4]
-
-For them, the decompiler has to guess the prototype of the called function.
-This has to be done at a very early phase of decompilation because
-the function prototype influences the data flow analysis. On the other
-hand, we do not have global data flow analysis results yet because
-we haven't analyzed all calls in the function. It is a chicked-and-egg
-problem.
-
-The decompiler uses various techniques to guess the called function
-prototype. While it works very well, it may fail in some cases.
-
-To fix, the user can specify the call prototype manually, using
-"Edit, Operand types, Set operand type" at the call instruction.
-
-This plugin illustrates another approach to the problem:
-if you happen to be able to calculate the call prototypes dynamically,
-this is how to inform the decompiler about them.
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Dynamically provide a custom call type
  • -
  • View on GitHub
  • -
  • Keywords: - Hexrays_Hooks - plugin -
  • - - - -
  • APIs used -
      -
    • ida_hexrays.Hexrays_Hooks
    • -
    • ida_hexrays.init_hexrays_plugin
    • -
    • ida_hexrays.m_call
    • -
    • ida_hexrays.mcallinfo_t
    • -
    • ida_idaapi.PLUGIN_HIDE
    • -
    • ida_idaapi.PLUGIN_KEEP
    • -
    • ida_idaapi.plugin_t
    • -
    • ida_kernwin.msg
    • -
    • ida_kernwin.warning
    • -
    • ida_nalt.get_op_tinfo
    • -
    • ida_typeinf.BT_INT
    • -
    • ida_typeinf.CM_CC_STDCALL
    • -
    • ida_typeinf.CM_N32_F48
    • -
    • ida_typeinf.parse_decl
    • -
    • ida_typeinf.tinfo_t
    • -
    -
  • - - -
-
-
-
-
- - - vds3: Invert if/else blocks -
-
- -
-Registers an action that can be used to invert the `if`
-and `else` blocks of a `ida_hexrays.cif_t`.
-
-For example, a statement like
-
-    if ( cond )
-    {
-      statements1;
-    }
-    else
-    {
-      statements2;
-    }
-
-will be displayed as
-
-    if ( !cond )
-    {
-      statements2;
-    }
-    else
-    {
-      statements1;
-    }
-
-The modifications are persistent: the user can quit & restart
-IDA, and the changes will be present.
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Invert if/else blocks
  • -
  • View on GitHub
  • -
  • Keywords: - ctxmenu - Hexrays_Hooks - IDP_Hooks - plugin -
  • - -
  • Shortcut: - I -
  • - - -
  • APIs used -
      -
    • ida_hexrays.CMAT_FINAL
    • -
    • ida_hexrays.CV_FAST
    • -
    • ida_hexrays.CV_INSNS
    • -
    • ida_hexrays.Hexrays_Hooks
    • -
    • ida_hexrays.ITP_ELSE
    • -
    • ida_hexrays.USE_KEYBOARD
    • -
    • ida_hexrays.VDI_TAIL
    • -
    • ida_hexrays.cexpr_t
    • -
    • ida_hexrays.cit_if
    • -
    • ida_hexrays.ctree_visitor_t
    • -
    • ida_hexrays.get_widget_vdui
    • -
    • ida_hexrays.init_hexrays_plugin
    • -
    • ida_hexrays.lnot
    • -
    • ida_hexrays.qswap
    • -
    • ida_idaapi.PLUGIN_HIDE
    • -
    • ida_idaapi.PLUGIN_KEEP
    • -
    • ida_idaapi.plugin_t
    • -
    • ida_idp.IDP_Hooks
    • -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.BWN_PSEUDOCODE
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.attach_action_to_popup
    • -
    • ida_kernwin.register_action
    • -
    • ida_netnode.netnode
    • -
    -
  • - - -
  • Author: EiNSTeiN_ (einstein@g3nius.org)
  • -
-
-
-
-
- - - vds4: Dump user-defined information -
-
- -
-Prints user-defined information to the "Output" window.
-Namely:
-
-  * user defined label names
-  * user defined indented comments
-  * user defined number formats
-  * user defined local variable names, types, comments
-
-This script loads information from the database without decompiling anything.
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Dump user-defined information
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_bytes.get_radix
    • -
    • ida_funcs.get_func
    • -
    • ida_hexrays.CIT_COLLAPSED
    • -
    • ida_hexrays.NF_NEGATE
    • -
    • ida_hexrays.init_hexrays_plugin
    • -
    • ida_hexrays.lvar_uservec_t
    • -
    • ida_hexrays.restore_user_cmts
    • -
    • ida_hexrays.restore_user_iflags
    • -
    • ida_hexrays.restore_user_labels
    • -
    • ida_hexrays.restore_user_lvar_settings
    • -
    • ida_hexrays.restore_user_numforms
    • -
    • ida_hexrays.user_cmts_free
    • -
    • ida_hexrays.user_iflags_free
    • -
    • ida_hexrays.user_labels_free
    • -
    • ida_hexrays.user_numforms_free
    • -
    • ida_kernwin.get_screen_ea
    • -
    -
  • - - -
  • Author: EiNSTeiN_ (einstein@g3nius.org)
  • -
-
-
-
-
- - - vds5: Show ctree graph -
-
- -
-Registers an action that can be used to show the graph of the ctree.
-The current item will be highlighted in the graph.
-
-The command shortcut is `Ctrl+Shift+G`, and is also added
-to the context menu.
-
-To display the graph, we produce a .gdl file, and
-request that ida displays that using `ida_gdl.display_gdl`.
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Show ctree graph
  • -
  • View on GitHub
  • -
  • Keywords: - ctxmenu - Hexrays_Hooks - plugin -
  • - -
  • Shortcut: - Ctrl+Shift+G -
  • - - -
  • APIs used -
      -
    • ida_gdl.display_gdl
    • -
    • ida_hexrays.Hexrays_Hooks
    • -
    • ida_hexrays.USE_KEYBOARD
    • -
    • ida_hexrays.cit_asm
    • -
    • ida_hexrays.cit_goto
    • -
    • ida_hexrays.cot_helper
    • -
    • ida_hexrays.cot_memptr
    • -
    • ida_hexrays.cot_memref
    • -
    • ida_hexrays.cot_num
    • -
    • ida_hexrays.cot_obj
    • -
    • ida_hexrays.cot_ptr
    • -
    • ida_hexrays.cot_str
    • -
    • ida_hexrays.cot_var
    • -
    • ida_hexrays.ctree_parentee_t
    • -
    • ida_hexrays.get_ctype_name
    • -
    • ida_hexrays.get_widget_vdui
    • -
    • ida_hexrays.init_hexrays_plugin
    • -
    • ida_idaapi.PLUGIN_HIDE
    • -
    • ida_idaapi.PLUGIN_KEEP
    • -
    • ida_idaapi.plugin_t
    • -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.BWN_PSEUDOCODE
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.attach_action_to_popup
    • -
    • ida_kernwin.register_action
    • -
    • ida_kernwin.warning
    • -
    • ida_lines.tag_remove
    • -
    • ida_pro.str2user
    • -
    -
  • - - -
-
-
-
-
- - - vds6: Superficially modify the decompilation output -
-
- -
-Modifies the decompilation output in a superficial manner,
-by removing some white spaces
-
-Note: this is rather crude, not quite "pythonic" code.
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Superficially modify the decompilation output
  • -
  • View on GitHub
  • -
  • Keywords: - Hexrays_Hooks - plugin -
  • - - - -
  • APIs used -
      -
    • ida_hexrays.Hexrays_Hooks
    • -
    • ida_hexrays.init_hexrays_plugin
    • -
    • ida_idaapi.PLUGIN_HIDE
    • -
    • ida_idaapi.PLUGIN_KEEP
    • -
    • ida_idaapi.plugin_t
    • -
    • ida_lines.tag_advance
    • -
    • ida_lines.tag_skipcodes
    • -
    -
  • - - -
-
-
-
-
- - - vds7: Iterate a cblock_t object -
-
- -
-Using a `ida_hexrays.ctree_visitor_t`, search for
-`ida_hexrays.cit_block` instances and dump them.
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Iterate a cblock_t object
  • -
  • View on GitHub
  • -
  • Keywords: - Hexrays_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_hexrays.CMAT_BUILT
    • -
    • ida_hexrays.CV_FAST
    • -
    • ida_hexrays.Hexrays_Hooks
    • -
    • ida_hexrays.cit_block
    • -
    • ida_hexrays.ctree_visitor_t
    • -
    • ida_hexrays.init_hexrays_plugin
    • -
    -
  • - - -
  • Author: EiNSTeiN_ (einstein@g3nius.org)
  • -
-
-
-
-
- - - vds8: Using `ida_hexrays.udc_filter_t` -
-
- -
-Registers an action that uses a `ida_hexrays.udc_filter_t` to decompile
-`svc 0x900001` and `svc 0x9000F8` as function calls to
-`svc_exit()` and `svc_exit_group()` respectively.
-
-You will need to have an ARM + Linux IDB for this script to be usable
-
-In addition to having a shortcut, the action will be present
-in the context menu.
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Using `ida_hexrays.udc_filter_t`
  • -
  • View on GitHub
  • -
  • Keywords: - ctxmenu - UI_Hooks -
  • - -
  • Shortcut: - Ctrl+Shift+U -
  • - - -
  • APIs used -
      -
    • ida_allins.ARM_svc
    • -
    • ida_hexrays.get_widget_vdui
    • -
    • ida_hexrays.init_hexrays_plugin
    • -
    • ida_hexrays.install_microcode_filter
    • -
    • ida_hexrays.udc_filter_t
    • -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.BWN_PSEUDOCODE
    • -
    • ida_kernwin.UI_Hooks
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.attach_action_to_popup
    • -
    • ida_kernwin.get_widget_type
    • -
    • ida_kernwin.register_action
    • -
    -
  • - - -
-
-
-
-
- - - vds_create_hint: Decompiler hints -
-
- -
-Handle `ida_hexrays.hxe_create_hint` notification using hooks,
-to return our own.
-
-If the object under the cursor is:
-
-* a function call, prefix the original decompiler hint with `==> `
-* a local variable declaration, replace the hint with our own in
-  the form of `!{varname}` (where `{varname}` is replaced with the
-  variable name)
-* an `if` statement, replace the hint with our own, saying "condition"
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Decompiler hints
  • -
  • View on GitHub
  • -
  • Keywords: - Hexrays_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_hexrays.Hexrays_Hooks
    • -
    • ida_hexrays.USE_MOUSE
    • -
    • ida_hexrays.VDI_EXPR
    • -
    • ida_hexrays.VDI_LVAR
    • -
    • ida_hexrays.cit_if
    • -
    • ida_hexrays.cot_call
    • -
    -
  • - - -
-
-
-
-
- - - vds_hooks: Various decompiler hooks -
-
- -
-Shows how to hook to many notifications sent by the decompiler.
-
-This plugin doesn't really accomplish anything: it just prints
-the parameters.
-
-The list of notifications handled below should be exhaustive,
-and is there to hint at what is possible to accomplish by
-subclassing `ida_hexrays.Hexrays_Hooks`
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Various decompiler hooks
  • -
  • View on GitHub
  • -
  • Keywords: - Hexrays_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_hexrays.Hexrays_Hooks
    • -
    • ida_hexrays.cfunc_t
    • -
    • ida_hexrays.lvar_t
    • -
    • ida_hexrays.vdui_t
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - vds_modify_user_lvars: Modifying local variables -
-
- -
-Use a `ida_hexrays.user_lvar_modifier_t` to modify names,
-comments and/or types of local variables.
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Modifying local variables
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_hexrays.modify_user_lvars
    • -
    • ida_hexrays.user_lvar_modifier_t
    • -
    • ida_typeinf.parse_decl
    • -
    • idc.here
    • -
    -
  • - - -
-
-
-
-
- - - vds_xrefs: Show decompiler xrefs -
-
- -
-Show decompiler-style Xref when the `Ctrl+X` key is
-pressed in the Decompiler window.
-
-* supports any global name: functions, strings, integers, ...
-* supports structure member.
-
- -
    -
  • Category: hexrays
  • -
  • Summary: Show decompiler xrefs
  • -
  • View on GitHub
  • -
  • Keywords: - ctxmenu - Hexrays_Hooks -
  • - -
  • Shortcut: - Ctrl+X -
  • - - -
  • APIs used -
      -
    • ida_funcs.get_func_name
    • -
    • ida_hexrays.DECOMP_GXREFS_FORCE
    • -
    • ida_hexrays.Hexrays_Hooks
    • -
    • ida_hexrays.USE_KEYBOARD
    • -
    • ida_hexrays.VDI_EXPR
    • -
    • ida_hexrays.VDI_FUNC
    • -
    • ida_hexrays.cexpr_t
    • -
    • ida_hexrays.cfunc_t
    • -
    • ida_hexrays.cinsn_t
    • -
    • ida_hexrays.decompile
    • -
    • ida_hexrays.get_widget_vdui
    • -
    • ida_hexrays.init_hexrays_plugin
    • -
    • ida_hexrays.open_pseudocode
    • -
    • ida_hexrays.qstring_printer_t
    • -
    • ida_idaapi.BADADDR
    • -
    • ida_kernwin.AST_DISABLE
    • -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE
    • -
    • ida_kernwin.BWN_PSEUDOCODE
    • -
    • ida_kernwin.PluginForm
    • -
    • ida_kernwin.PluginForm.Show
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.attach_action_to_popup
    • -
    • ida_kernwin.register_action
    • -
    • ida_typeinf.PRTYPE_1LINE
    • -
    • ida_typeinf.STRMEM_OFFSET
    • -
    • ida_typeinf.print_tinfo
    • -
    • ida_typeinf.tinfo_t
    • -
    • ida_typeinf.udm_t
    • -
    • idautils.Functions
    • -
    • idautils.XrefsTo
    • -
    -
  • - - -
  • Author: EiNSTeiN_ (einstein@g3nius.org)
  • -
-
-
- -
-

Category: idbhooks

-
-
-
- - - log_idb_events: Logging IDB events -
-
- -
-These hooks will be notified about IDB events, and
-dump their information to the "Output" window
-
- -
    -
  • Category: idbhooks
  • -
  • Summary: Logging IDB events
  • -
  • View on GitHub
  • -
  • Keywords: - IDB_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_idp.IDB_Hooks
    • -
    -
  • - - -
-
-
-
-
- - - operand_changed: Notify the user when an instruction operand changes -
-
- -
-Show notifications whenever the user changes
-an instruction's operand, or a data item.
-
- -
    -
  • Category: idbhooks
  • -
  • Summary: Notify the user when an instruction operand changes
  • -
  • View on GitHub
  • -
  • Keywords: - IDB_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_bytes.ALOPT_IGNCLT
    • -
    • ida_bytes.ALOPT_IGNHEADS
    • -
    • ida_bytes.get_flags
    • -
    • ida_bytes.get_max_strlit_length
    • -
    • ida_bytes.get_opinfo
    • -
    • ida_bytes.get_strlit_contents
    • -
    • ida_bytes.is_custfmt
    • -
    • ida_bytes.is_custom
    • -
    • ida_bytes.is_enum
    • -
    • ida_bytes.is_off
    • -
    • ida_bytes.is_strlit
    • -
    • ida_bytes.is_stroff
    • -
    • ida_bytes.is_struct
    • -
    • ida_idp.IDB_Hooks
    • -
    • ida_nalt.STRENC_DEFAULT
    • -
    • ida_nalt.get_default_encoding_idx
    • -
    • ida_nalt.get_encoding_name
    • -
    • ida_nalt.get_str_encoding_idx
    • -
    • ida_nalt.get_strtype_bpu
    • -
    • ida_nalt.opinfo_t
    • -
    • ida_typeinf.get_tid_name
    • -
    • ida_typeinf.tinfo_t
    • -
    -
  • - - -
-
-
-
-
- - - replay_prototypes_changes: Record and replay changes in function prototypes -
-
- -
-This is a sample script, that will record (in memory) all changes in
-functions prototypes, in order to re-apply them later.
-
-To use this script:
- - open an IDB (say, "test.idb")
- - modify some functions prototypes (e.g., by triggering the 'Y'
-   shortcut when the cursor is placed on the first address of a
-   function)
- - reload that IDB, *without saving it first*
- - call rpc.replay(), to re-apply the modifications.
-
-Note: 'ti_changed' is also called for changes to the function
-frames, but we'll only record function prototypes changes.
-
- -
    -
  • Category: idbhooks
  • -
  • Summary: Record and replay changes in function prototypes
  • -
  • View on GitHub
  • -
  • Keywords: - IDB_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_funcs.get_func
    • -
    • ida_idp.IDB_Hooks
    • -
    • ida_typeinf.PRTYPE_1LINE
    • -
    • ida_typeinf.TINFO_DEFINITE
    • -
    • ida_typeinf.apply_tinfo
    • -
    • ida_typeinf.get_idati
    • -
    • ida_typeinf.tinfo_t
    • -
    -
  • - - -
-
-
- -
-

Category: idphooks

-
-
-
- - - ana_emu_out: Override some parts of the processor module -
-
- -
-Implements disassembly of BUG_INSTR used in Linux kernel
-BUG() macro, which is architecturally undefined and is not
-disassembled by IDA's ARM module
-
-See Linux/arch/arm/include/asm/bug.h for more info
-
- -
    -
  • Category: idphooks
  • -
  • Summary: Override some parts of the processor module
  • -
  • View on GitHub
  • -
  • Keywords: - IDP_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_bytes.get_wide_dword
    • -
    • ida_bytes.get_wide_word
    • -
    • ida_idp.CUSTOM_INSN_ITYPE
    • -
    • ida_idp.IDP_Hooks
    • -
    • ida_idp.PLFM_ARM
    • -
    • ida_idp.ph.id
    • -
    • ida_idp.str2reg
    • -
    • ida_segregs.get_sreg
    • -
    -
  • - - -
-
-
-
-
- - - assemble: An `ida_idp.IDP_Hooks.assembly` implementation -
-
- -
-We add support for assembling the following pseudo instructions:
-
-* "zero eax" -> xor eax, eax
-* "nothing" -> nop
-
- -
    -
  • Category: idphooks
  • -
  • Summary: An `ida_idp.IDP_Hooks.assembly` implementation
  • -
  • View on GitHub
  • -
  • Keywords: - IDP_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_idp.IDP_Hooks
    • -
    • idautils.DecodeInstruction
    • -
    -
  • - - -
-
-
- -
-

Category: merge

-
-
-
- - - py_mex1: Add merge functionality to a simple plugin, example 1 -
-
- -
-This is a primitive plugin which asks user for some info and saves it for
-some addresses.
-
-We will add a merge functionality to plugin.
-
-An IDA plugin may have two kinds of data with permanent storage:
-  1. Data common for entire database (e.g. the options).
-     To describe them we will use the idbattr_info_t type.
-  2. Data specific to a particular address.
-     To describe them we will use the merge_node_info_t type.
-
-Also, see SDK/plugins/mex1 example
-
- -
    -
  • Category: merge
  • -
  • Summary: Add merge functionality to a simple plugin, example 1
  • -
  • View on GitHub
  • -
  • Keywords: - IDP_Hooks - plugin -
  • - - - -
  • APIs used -
      -
    • ida_funcs.get_func
    • -
    • ida_ida.IDI_ALTVAL
    • -
    • ida_ida.IDI_CSTR
    • -
    • ida_ida.IDI_SCALAR
    • -
    • ida_ida.IDI_SUPVAL
    • -
    • ida_ida.idbattr_info_t
    • -
    • ida_idaapi.BADADDR
    • -
    • ida_idaapi.PLUGIN_MOD
    • -
    • ida_idaapi.PLUGIN_MULTI
    • -
    • ida_idaapi.plugin_t
    • -
    • ida_idaapi.plugmod_t
    • -
    • ida_idp.IDP_Hooks
    • -
    • ida_kernwin.Form
    • -
    • ida_kernwin.Form.ChkGroupControl
    • -
    • ida_kernwin.Form.StringInput
    • -
    • ida_kernwin.get_screen_ea
    • -
    • ida_merge.MERGE_KIND_END
    • -
    • ida_merge.MERGE_KIND_NONE
    • -
    • ida_merge.NDS_IS_STR
    • -
    • ida_merge.NDS_MAP_IDX
    • -
    • ida_merge.merge_handler_params_t
    • -
    • ida_merge.merge_node_info_t
    • -
    • ida_merge.moddata_diff_helper_t
    • -
    • ida_mergemod.create_std_modmerge_handlers
    • -
    • ida_netnode.BADNODE
    • -
    • ida_netnode.SIZEOF_nodeidx_t
    • -
    • ida_netnode.atag
    • -
    • ida_netnode.netnode
    • -
    • ida_netnode.stag
    • -
    -
  • - - -
-
-
-
-
- - - py_mex3: This example uses the mex1 example and improves the user-interface for it. -
-
- -
-IDA Teams uses a chooser to display the merge conflicts.
-To fill the chooser columns IDA Teams uses the following methods from diff_source_t type:
-  * print_diffpos_name()
-  * print_diffpos_details()
-and UI hints from merge_handler_params_t type:
-  * ui_has_details()
-  * ui_complex_details()
-  * ui_complex_name()
-
-In general, chooser columns are filled as following:
-  columns.clear()
-  NAME = print_diffpos_name()
-  if ui_complex_name()
-  then
-    columns.add(split NAME by ui_split_char())
-  else
-    columns[0] = NAME
-  if not ui_complex_details()
-  then
-    columns.add(print_diffpos_details())
-
-Also, see SDK/plugins/mex3 example
-
- -
    -
  • Category: merge
  • -
  • Summary: This example uses the mex1 example and improves the user-interface for it.
  • -
  • View on GitHub
  • -
  • Keywords: - IDP_Hooks - plugin -
  • - - - -
  • APIs used -
      -
    • ida_funcs.get_func
    • -
    • ida_ida.IDI_ALTVAL
    • -
    • ida_ida.IDI_CSTR
    • -
    • ida_ida.IDI_SCALAR
    • -
    • ida_ida.IDI_SUPVAL
    • -
    • ida_ida.idbattr_info_t
    • -
    • ida_idaapi.BADADDR
    • -
    • ida_idaapi.PLUGIN_MOD
    • -
    • ida_idaapi.PLUGIN_MULTI
    • -
    • ida_idaapi.plugin_t
    • -
    • ida_idaapi.plugmod_t
    • -
    • ida_idp.IDP_Hooks
    • -
    • ida_kernwin.Form
    • -
    • ida_kernwin.Form.ChkGroupControl
    • -
    • ida_kernwin.Form.StringInput
    • -
    • ida_kernwin.get_screen_ea
    • -
    • ida_merge.MERGE_KIND_END
    • -
    • ida_merge.MERGE_KIND_NONE
    • -
    • ida_merge.MH_UI_COLONNAME
    • -
    • ida_merge.MH_UI_COMMANAME
    • -
    • ida_merge.MH_UI_NODETAILS
    • -
    • ida_merge.NDS_IS_STR
    • -
    • ida_merge.NDS_MAP_IDX
    • -
    • ida_merge.create_nodeval_merge_handlers
    • -
    • ida_merge.get_ea_diffpos_name
    • -
    • ida_merge.merge_handler_params_t
    • -
    • ida_merge.merge_node_helper_t
    • -
    • ida_merge.merge_node_info_t
    • -
    • ida_merge.moddata_diff_helper_t
    • -
    • ida_mergemod.create_std_modmerge_handlers
    • -
    • ida_nalt.node2ea
    • -
    • ida_netnode.BADNODE
    • -
    • ida_netnode.SIZEOF_nodeidx_t
    • -
    • ida_netnode.atag
    • -
    • ida_netnode.netnode
    • -
    • ida_netnode.stag
    • -
    -
  • - - -
-
-
- -
-

Category: pyqt

-
-
-
- - - inject_command: Injecting commands in the "Output" window -
-
- -
-This example illustrates how one can execute commands in the
-"Output" window, from their own widgets.
-
-A few notes:
-
-* the original, underlying `cli:Execute` action, that has to be
-  triggered for the code present in the input field to execute
-  and be placed in the history, requires that the input field
-  has focus (otherwise it simply won't do anything.)
-* this, in turn, forces us to do "delayed" execution of that action,
-  hence the need for a `QTimer`
-* the IDA/SWiG 'TWidget' type that we retrieve through
-  `ida_kernwin.find_widget`, is not the same type as a
-  `QtWidgets.QWidget`. We therefore need to convert it using
-  `ida_kernwin.PluginForm.TWidgetToPyQtWidget`
-
- -
    -
  • Category: pyqt
  • -
  • Summary: Injecting commands in the "Output" window
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_kernwin.PluginForm.TWidgetToPyQtWidget
    • -
    • ida_kernwin.disabled_script_timeout_t
    • -
    • ida_kernwin.find_widget
    • -
    • ida_kernwin.process_ui_action
    • -
    -
  • - - -
-
-
-
-
- - - paint_over_graph: Custom painting on top of graph view edges -
-
- -
-This sample registers an action enabling painting of a recognizable
-string of text over horizontal nodes edge sections beyond a
-satisfying size threshold.
-
-In a disassembly view, open the context menu and select
-"Paint on edges". This should work for both graph disassembly,
-and proximity browser.
-
-Using an "event filter", we will intercept paint events
-targeted at the disassembly view, let it paint itself, and
-then add our own markers along.
-
- -
    -
  • Category: pyqt
  • -
  • Summary: Custom painting on top of graph view edges
  • -
  • View on GitHub
  • -
  • Keywords: - ctxmenu - UI_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_graph.edge_t
    • -
    • ida_graph.get_graph_viewer
    • -
    • ida_graph.get_viewer_graph
    • -
    • ida_graph.point_t
    • -
    • ida_graph.viewer_get_gli
    • -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.BWN_DISASM
    • -
    • ida_kernwin.PluginForm.FormToPyQtWidget
    • -
    • ida_kernwin.UI_Hooks
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.attach_action_to_popup
    • -
    • ida_kernwin.get_widget_type
    • -
    • ida_kernwin.register_action
    • -
    • ida_moves.graph_location_info_t
    • -
    -
  • - - -
-
-
-
-
- - - paint_over_navbar: Custom painting on top of the navigation band -
-
- -
-Using an "event filter", we will intercept paint events
-targeted at the navigation band widget, let it paint itself,
-and then add our own markers on top.
-
- -
    -
  • Category: pyqt
  • -
  • Summary: Custom painting on top of the navigation band
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_kernwin.PluginForm.FormToPyQtWidget
    • -
    • ida_kernwin.get_navband_pixel
    • -
    • ida_kernwin.open_navband_window
    • -
    • ida_segment.get_segm_qty
    • -
    • ida_segment.getnseg
    • -
    • idc.here
    • -
    -
  • - - -
-
-
-
-
- - - populate_pluginform_with_pyqt_widgets: Adding PyQt5 widgets into an `ida_kernwin.PluginForm` -
-
- -
-Using `ida_kernwin.PluginForm.FormToPyQtWidget`, this script
-converts IDA's own dockable widget into a type that is
-recognized by PyQt5, which then enables populating it with
-regular Qt widgets.
-
- -
    -
  • Category: pyqt
  • -
  • Summary: Adding PyQt5 widgets into an `ida_kernwin.PluginForm`
  • -
  • View on GitHub
  • - - - -
  • APIs used -
      -
    • ida_kernwin.PluginForm
    • -
    -
  • - - -
-
-
- -
-

Category: uihooks

-
-
-
- - - func_chooser_coloring: Using `ida_kernwin.UI_Hooks.get_chooser_item_attrs` to override some defaults -
-
- -
-Color the function in the Function window according to its size.
-The larger the function, the darker the color.
-
- -
    -
  • Category: uihooks
  • -
  • Summary: Using `ida_kernwin.UI_Hooks.get_chooser_item_attrs` to override some defaults
  • -
  • View on GitHub
  • -
  • Keywords: - UI_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_funcs.get_func
    • -
    • ida_kernwin.UI_Hooks
    • -
    • ida_kernwin.enable_chooser_item_attrs
    • -
    -
  • - - -
-
-
-
-
- - - lines_rendering: Dynamically colorize lines backgrounds (or parts of them) -
-
- -
-Shows how one can dynamically alter the lines background
-rendering (as opposed to, say, using ida_nalt.set_item_color()),
-and also shows how that rendering can be limited to just a few
-glyphs, not the whole line.
-
- -
    -
  • Category: uihooks
  • -
  • Summary: Dynamically colorize lines backgrounds (or parts of them)
  • -
  • View on GitHub
  • -
  • Keywords: - UI_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_bytes.next_head
    • -
    • ida_idaapi.BADADDR
    • -
    • ida_kernwin.CK_EXTRA1
    • -
    • ida_kernwin.CK_EXTRA10
    • -
    • ida_kernwin.CK_EXTRA11
    • -
    • ida_kernwin.CK_EXTRA12
    • -
    • ida_kernwin.CK_EXTRA13
    • -
    • ida_kernwin.CK_EXTRA14
    • -
    • ida_kernwin.CK_EXTRA15
    • -
    • ida_kernwin.CK_EXTRA16
    • -
    • ida_kernwin.CK_EXTRA2
    • -
    • ida_kernwin.CK_EXTRA3
    • -
    • ida_kernwin.CK_EXTRA4
    • -
    • ida_kernwin.CK_EXTRA5
    • -
    • ida_kernwin.CK_EXTRA6
    • -
    • ida_kernwin.CK_EXTRA7
    • -
    • ida_kernwin.CK_EXTRA8
    • -
    • ida_kernwin.CK_EXTRA9
    • -
    • ida_kernwin.CK_TRACE
    • -
    • ida_kernwin.CK_TRACE_OVL
    • -
    • ida_kernwin.LROEF_CPS_RANGE
    • -
    • ida_kernwin.UI_Hooks
    • -
    • ida_kernwin.get_screen_ea
    • -
    • ida_kernwin.line_rendering_output_entry_t
    • -
    • ida_kernwin.refresh_idaview_anyway
    • -
    -
  • - - -
-
-
-
-
- - - log_misc_events: Being notified, and logging a few UI events -
-
- -
-Hooks to be notified about certain UI events, and
-dump their information to the "Output" window
-
- -
    -
  • Category: uihooks
  • -
  • Summary: Being notified, and logging a few UI events
  • -
  • View on GitHub
  • -
  • Keywords: - UI_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_kernwin.UI_Hooks
    • -
    -
  • - - -
-
-
-
-
- - - prevent_jump: Taking precedence over actions -
-
- -
-Using `ida_kernwin.UI_Hooks.preprocess_action`, it is possible
-to respond to a command instead of the action that would
-otherwise do it.
-
- -
    -
  • Category: uihooks
  • -
  • Summary: Taking precedence over actions
  • -
  • View on GitHub
  • -
  • Keywords: - UI_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_kernwin.UI_Hooks
    • -
    -
  • - - -
-
-
- -
-

Category: widgets

-
-
-
- - - add_menus: Adding custom menus to IDA -
-
- -
-It is possible to add custom menus to IDA, either at the
-toplevel (i.e., into the menubar), or as submenus of existing
-menus.
-
-Notes:
-
-  * the same action can be present in more than 1 menu
-  * this example does not deal with context menus
-
- -
    -
  • Category: widgets
  • -
  • Summary: Adding custom menus to IDA
  • -
  • View on GitHub
  • -
  • Keywords: - actions -
  • - - - -
  • APIs used -
      -
    • ida_kernwin.AST_ENABLE_ALWAYS
    • -
    • ida_kernwin.SETMENU_INS
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.attach_action_to_menu
    • -
    • ida_kernwin.create_menu
    • -
    • ida_kernwin.register_action
    • -
    -
  • - - -
-
-
-
-
- - - askusingform: Non-trivial uses of the `ida_kernwin.Form` helper class -
-
- -
-How to query for complex user input, using IDA's built-in forms.
-
-Note: while this example produces full-fledged forms for complex input,
-simpler types of inputs might can be retrieved by using
-`ida_kernwin.ask_str` and similar functions.
-
- -
    -
  • Category: widgets
  • -
  • Summary: Non-trivial uses of the `ida_kernwin.Form` helper class
  • -
  • View on GitHub
  • -
  • Keywords: - forms -
  • - - - -
  • APIs used -
      -
    • ida_kernwin.Choose
    • -
    • ida_kernwin.Choose.CH_MULTI
    • -
    • ida_kernwin.Form
    • -
    • ida_kernwin.PluginForm.FORM_TAB
    • -
    • ida_kernwin.ask_str
    • -
    -
  • - - -
-
-
-
-
- - - choose: A widget showing data in a tabular fashion -
-
- -
-Shows how to subclass the ida_kernwin.Choose class to
-show data organized in a simple table.
-In addition, registers a couple actions that can be applied to it.
-
- -
    -
  • Category: widgets
  • -
  • Summary: A widget showing data in a tabular fashion
  • -
  • View on GitHub
  • -
  • Keywords: - actions - chooser - ctxmenu -
  • - - - -
  • APIs used -
      -
    • Choose
    • -
    • Choose.ALL_CHANGED
    • -
    • Choose.CH_CAN_DEL
    • -
    • Choose.CH_CAN_EDIT
    • -
    • Choose.CH_CAN_INS
    • -
    • Choose.CH_CAN_REFRESH
    • -
    • Choose.CH_RESTORE
    • -
    • Choose.NOTHING_CHANGED
    • -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.attach_action_to_popup
    • -
    • ida_kernwin.is_chooser_widget
    • -
    • ida_kernwin.register_action
    • -
    • ida_kernwin.unregister_action
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - choose_multi: A widget showing data in a tabular fashion, providing multiple selection -
-
- -
-Similar to choose, but with multiple selection
-
- -
    -
  • Category: widgets
  • -
  • Summary: A widget showing data in a tabular fashion, providing multiple selection
  • -
  • View on GitHub
  • -
  • Keywords: - actions - chooser -
  • - - - -
  • APIs used -
      -
    • Choose
    • -
    • Choose.ALL_CHANGED
    • -
    • Choose.CHCOL_HEX
    • -
    • Choose.CH_MULTI
    • -
    • Choose.NOTHING_CHANGED
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - chooser_with_folders: A widget that can show tabular data either as a simple table, or with a tree-like structure. -
-
- -
-By adding the necessary bits to a ida_kernwin.Choose subclass,
-IDA can show the otherwise tabular data, in a tree-like fashion.
-
-The important bits to enable this are:
-
-  * ida_dirtree.dirspec_t (and my_dirspec_t)
-  * ida_kernwin.CH_HAS_DIRTREE
-  * ida_kernwin.Choose.OnGetDirTree
-  * ida_kernwin.Choose.OnIndexToInode
-
- -
    -
  • Category: widgets
  • -
  • Summary: A widget that can show tabular data either as a simple table, or with a tree-like structure.
  • -
  • View on GitHub
  • -
  • Keywords: - actions - chooser - folders -
  • - - - -
  • APIs used -
      -
    • ida_dirtree.DTE_OK
    • -
    • ida_dirtree.direntry_t
    • -
    • ida_dirtree.direntry_t.BADIDX
    • -
    • ida_dirtree.dirspec_t
    • -
    • ida_dirtree.dirtree_t
    • -
    • ida_dirtree.dirtree_t.isdir
    • -
    • ida_kernwin.CH_CAN_DEL
    • -
    • ida_kernwin.CH_CAN_EDIT
    • -
    • ida_kernwin.CH_CAN_INS
    • -
    • ida_kernwin.CH_HAS_DIRTREE
    • -
    • ida_kernwin.CH_MULTI
    • -
    • ida_kernwin.Choose
    • -
    • ida_kernwin.Choose.ALL_CHANGED
    • -
    • ida_kernwin.Choose.CHCOL_DRAGHINT
    • -
    • ida_kernwin.Choose.CHCOL_INODENAME
    • -
    • ida_kernwin.Choose.CHCOL_PLAIN
    • -
    • ida_kernwin.ask_str
    • -
    • ida_netnode.BADNODE
    • -
    • ida_netnode.netnode
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - custom_graph_with_actions: Drawing custom graphs -
-
- -
-Showing custom graphs, using `ida_graph.GraphViewer`. In addition,
-show how to write actions that can be performed on those.
-
- -
    -
  • Category: widgets
  • -
  • Summary: Drawing custom graphs
  • -
  • View on GitHub
  • -
  • Keywords: - actions - graph - View_Hooks -
  • - - - -
  • APIs used -
      -
    • ida_funcs.get_func
    • -
    • ida_funcs.get_func_name
    • -
    • ida_graph.GraphViewer
    • -
    • ida_graph.get_graph_viewer
    • -
    • ida_graph.screen_graph_selection_t
    • -
    • ida_graph.viewer_get_selection
    • -
    • ida_idp.is_call_insn
    • -
    • ida_kernwin.AST_ENABLE_ALWAYS
    • -
    • ida_kernwin.View_Hooks
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.attach_dynamic_action_to_popup
    • -
    • ida_kernwin.get_screen_ea
    • -
    • ida_ua.decode_insn
    • -
    • ida_ua.insn_t
    • -
    • ida_xref.XREF_FAR
    • -
    • ida_xref.xrefblk_t
    • -
    -
  • - - -
-
-
-
-
- - - custom_viewer: Create custom listings in IDA -
-
- -
-How to create simple listings, that will share many of the features
-as the built-in IDA widgets (highlighting, copy & paste,
-notifications, ...)
-
-In addition, creates actions that will be bound to the
-freshly-created widget (using `ida_kernwin.attach_action_to_popup`.)
-
- -
    -
  • Category: widgets
  • -
  • Summary: Create custom listings in IDA
  • -
  • View on GitHub
  • -
  • Keywords: - actions - ctxmenu - listing -
  • - - - -
  • APIs used -
      -
    • ida_kernwin.AST_ENABLE_ALWAYS
    • -
    • ida_kernwin.IK_DELETE
    • -
    • ida_kernwin.IK_ESCAPE
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.ask_long
    • -
    • ida_kernwin.ask_str
    • -
    • ida_kernwin.attach_action_to_popup
    • -
    • ida_kernwin.register_action
    • -
    • ida_kernwin.simplecustviewer_t
    • -
    • ida_kernwin.simplecustviewer_t.Create
    • -
    • ida_kernwin.simplecustviewer_t.Show
    • -
    • ida_kernwin.unregister_action
    • -
    • ida_lines.COLOR_DEFAULT
    • -
    • ida_lines.COLOR_DNAME
    • -
    • ida_lines.COLSTR
    • -
    • ida_lines.SCOLOR_PREFIX
    • -
    • ida_lines.SCOLOR_VOIDOP
    • -
    -
  • - - -
-
-
-
-
- - - func_chooser: An alternative view over the list of functions -
-
- -
-Partially re-implements the "Functions" widget present in
-IDA, with a custom widget.
-
- -
    -
  • Category: widgets
  • -
  • Summary: An alternative view over the list of functions
  • -
  • View on GitHub
  • -
  • Keywords: - chooser - functions -
  • - - - -
  • APIs used -
      -
    • ida_funcs.get_func_name
    • -
    • ida_kernwin.Choose
    • -
    • ida_kernwin.Choose.ALL_CHANGED
    • -
    • ida_kernwin.Choose.CHCOL_FNAME
    • -
    • ida_kernwin.Choose.CHCOL_HEX
    • -
    • ida_kernwin.Choose.CHCOL_PLAIN
    • -
    • ida_kernwin.get_icon_id_by_name
    • -
    • idautils.Functions
    • -
    • idc.del_func
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - jump_next_comment: Implement a "jump to next comment" action within IDA's disassembly view. -
-
- -
-We want our action not only to find the next line containing a comment,
-but to also place the cursor at the right horizontal position.
-
-To find that position, we will have to inspect the text that IDA
-generates, looking for the start of a comment.
-However, we won't be looking for a comment "prefix" (e.g., "; "),
-as that would be too fragile.
-
-Instead, we will look for special "tags" that IDA injects into textual
-lines, and that bear semantic information.
-
-Those tags are primarily used for rendering (i.e., switching colors),
-but can also be very handy for spotting tokens of interest (registers,
-addresses, comments, prefixes, instruction mnemonics, ...)
-
- -
    -
  • Category: widgets
  • -
  • Summary: Implement a "jump to next comment" action within IDA's disassembly view.
  • -
  • View on GitHub
  • -
  • Keywords: - actions - idaview -
  • - -
  • Shortcut: - Ctrl+Alt+C -
  • - - -
  • APIs used -
      -
    • ida_bytes.next_head
    • -
    • ida_idaapi.BADADDR
    • -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.BWN_DISASM
    • -
    • ida_kernwin.CVNF_LAZY
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.custom_viewer_jump
    • -
    • ida_kernwin.get_custom_viewer_location
    • -
    • ida_kernwin.place_t_as_idaplace_t
    • -
    • ida_kernwin.register_action
    • -
    • ida_kernwin.unregister_action
    • -
    • ida_lines.SCOLOR_AUTOCMT
    • -
    • ida_lines.SCOLOR_ON
    • -
    • ida_lines.SCOLOR_REGCMT
    • -
    • ida_lines.SCOLOR_RPTCMT
    • -
    • ida_lines.generate_disassembly
    • -
    • ida_lines.tag_strlen
    • -
    • ida_moves.lochist_entry_t
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - lazy_loaded_chooser: -
-
- -
-
-
- -
    -
  • Category: widgets
  • -
  • Summary:
  • -
  • View on GitHub
  • - - - - - -
-
-
-
-
- - - save_and_restore_listing_pos: Save, and then restore, positions in a listing -
-
- -
-Shows how it is possible re-implement IDA's bookmark capability,
-using 2 custom actions: one action saves the current location,
-and the other restores it.
-
-Note that, contrary to actual bookmarks, this example:
-
-  * remembers only 1 saved position
-  * doesn't save that position in the IDB (and therefore cannot
-    be restored if IDA is closed & reopened.)
-
- -
    -
  • Category: widgets
  • -
  • Summary: Save, and then restore, positions in a listing
  • -
  • View on GitHub
  • -
  • Keywords: - actions - listing -
  • - -
  • Shortcuts: - Ctrl+Shift+O - Ctrl+Shift+S -
  • - - -
  • APIs used -
      -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.BWN_CUSTVIEW
    • -
    • ida_kernwin.BWN_DISASM
    • -
    • ida_kernwin.BWN_ENUMS
    • -
    • ida_kernwin.BWN_PSEUDOCODE
    • -
    • ida_kernwin.BWN_STRUCTS
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.custom_viewer_jump
    • -
    • ida_kernwin.find_widget
    • -
    • ida_kernwin.get_custom_viewer_location
    • -
    • ida_kernwin.register_action
    • -
    • ida_kernwin.unregister_action
    • -
    • ida_moves.lochist_entry_t
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - show_and_hide_waitbox: Showing, updating & hiding the progress dialog -
-
- -
-Using the progress dialog (aka 'wait box') primitives.
-
- -
    -
  • Category: widgets
  • -
  • Summary: Showing, updating & hiding the progress dialog
  • -
  • View on GitHub
  • -
  • Keywords: - actions -
  • - - - -
  • APIs used -
      -
    • ida_hexrays.decompile
    • -
    • ida_kernwin.hide_wait_box
    • -
    • ida_kernwin.replace_wait_box
    • -
    • ida_kernwin.show_wait_box
    • -
    • ida_kernwin.user_cancelled
    • -
    • idautils.Functions
    • -
    -
  • - - -
-
-
-
-
- - - show_selected_strings: Retrieve the strings that are selected in the "Strings" window. -
-
- -
-In IDA it's possible to write actions that can be applied even to
-core (i.e., "standard") widgets. The actions in this example use the
-action "context" to know what the current selection is.
-
-This example shows how you can either retrieve string literals data
-directly from the chooser (`ida_kernwin.get_chooser_data`), or
-by querying the IDB (`ida_bytes.get_strlit_contents`)
-
- -
    -
  • Category: widgets
  • -
  • Summary: Retrieve the strings that are selected in the "Strings" window.
  • -
  • View on GitHub
  • -
  • Keywords: - actions - ctxmenu -
  • - -
  • Shortcuts: - Ctrl+Shift+K - Ctrl+Shift+S -
  • - - -
  • APIs used -
      -
    • ida_bytes.get_strlit_contents
    • -
    • ida_idaapi.BADADDR
    • -
    • ida_kernwin.AST_DISABLE_FOR_WIDGET
    • -
    • ida_kernwin.AST_ENABLE_FOR_WIDGET
    • -
    • ida_kernwin.BWN_STRINGS
    • -
    • ida_kernwin.action_desc_t
    • -
    • ida_kernwin.action_handler_t
    • -
    • ida_kernwin.attach_action_to_popup
    • -
    • ida_kernwin.find_widget
    • -
    • ida_kernwin.get_chooser_data
    • -
    • ida_kernwin.open_strings_window
    • -
    • ida_kernwin.register_action
    • -
    • ida_kernwin.unregister_action
    • -
    • ida_strlist.get_strlist_item
    • -
    • ida_strlist.string_info_t
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - sync_two_graphs: Follow the movements of a disassembly graph, in another. -
-
- -
-Since it is possible to be notified of movements that happen
-take place in a widget, it's possible to "replay" those
-movements in another.
-
-In this case, "IDA View-B" (will be opened if necessary) will
-show the same contents as "IDA View-A", slightly zoomed out.
-
- -
    -
  • Category: widgets
  • -
  • Summary: Follow the movements of a disassembly graph, in another.
  • -
  • View on GitHub
  • -
  • Keywords: - graph - idaview -
  • - - - -
  • APIs used -
      -
    • ida_graph.GLICTL_CENTER
    • -
    • ida_graph.viewer_fit_window
    • -
    • ida_graph.viewer_get_gli
    • -
    • ida_graph.viewer_set_gli
    • -
    • ida_kernwin.DP_RIGHT
    • -
    • ida_kernwin.IDAViewWrapper
    • -
    • ida_kernwin.MFF_FAST
    • -
    • ida_kernwin.TCCRT_GRAPH
    • -
    • ida_kernwin.execute_sync
    • -
    • ida_kernwin.find_widget
    • -
    • ida_kernwin.get_custom_viewer_place
    • -
    • ida_kernwin.jumpto
    • -
    • ida_kernwin.open_disasm_window
    • -
    • ida_kernwin.set_dock_pos
    • -
    • ida_kernwin.set_view_renderer_type
    • -
    • ida_moves.graph_location_info_t
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
-
-
- - - wrap_idaview: Manipulate IDAView and graph -
-
- -
-This is an example illustrating how to manipulate an existing IDA-provided
-view (and thus possibly its graph), in Python.
-
- -
    -
  • Category: widgets
  • -
  • Summary: Manipulate IDAView and graph
  • -
  • View on GitHub
  • -
  • Keywords: - graph - idaview -
  • - - - -
  • APIs used -
      -
    • ida_graph.NIF_BG_COLOR
    • -
    • ida_graph.NIF_FRAME_COLOR
    • -
    • ida_graph.node_info_t
    • -
    • ida_kernwin.IDAViewWrapper
    • -
    • ida_kernwin.MFF_FAST
    • -
    • ida_kernwin.TCCRT_FLAT
    • -
    • ida_kernwin.TCCRT_GRAPH
    • -
    • ida_kernwin.execute_sync
    • -
    -
  • - -
  • See also: - -
  • - -
-
-
- -
- - diff --git a/examples/index.js b/examples/index.js deleted file mode 100644 index 9f8bd2f..0000000 --- a/examples/index.js +++ /dev/null @@ -1,72 +0,0 @@ - -function on_see_also(see_also) -{ - var idx = see_also.indexOf("#"); - if ( idx > -1 ) - see_also = see_also.substring(idx+1,see_also.length); - var entry = find_entry_el(document.getElementById('DIV_' + see_also)); - if ( entry ) - { - set_entry_state(entry, true); - entry.scrollIntoView(); - } -} - -function find_parent_with_class(el, klass) -{ - while ( el ) - { - if ( el.className && el.className.indexOf(klass) > -1 ) - return el; - el = el.parentNode; - } -} - -function find_child_with_class(el, klass) -{ - return el.querySelector("." + klass); -} - -function find_entry_el(el) { return find_parent_with_class(el, "example-entry"); } -function find_expander(entry_el) { return find_child_with_class(entry_el, "expander"); } -function find_collapser(entry_el) { return find_child_with_class(entry_el, "collapser"); } - -function set_entry_state(entry_el, expanded) -{ - var collapser_el = find_collapser(entry_el); - var expander_el = find_expander(entry_el); - collapser_el.style.display = expanded ? "" : "none"; - expander_el.style.display = expanded ? "none" : ""; - if ( expanded ) - entry_el.classList.remove("collapsed-entry"); - else - entry_el.classList.add("collapsed-entry"); -} - -function handle_click(e) -{ - e = e || window.event; - var el = e.target || e.srcElement; - var entry_el = find_entry_el(el); - var ok = false; - if ( el.classList.contains("collapser") ) - set_entry_state(entry_el, false); - else if ( el.classList.contains("expander") ) - set_entry_state(entry_el, true); - else if ( el.classList.contains("ex_link") ) // see also - on_see_also(el.href); - else - return; - e.stopPropagation(); -} - -function handle_toplevel_action(e) -{ - e = e || window.event; - var el = e.target || e.srcElement; - var expanded = el.classList.contains("expand-all"); - var els = document.getElementsByClassName("example-entry"); - for ( var idx = 0, n = els.length; idx < n; ++idx ) - set_entry_state(els[idx], expanded); - e.stopPropagation(); -} diff --git a/examples/index.md b/examples/index.md index 80e42ea..64e992b 100644 --- a/examples/index.md +++ b/examples/index.md @@ -1,54 +1,387 @@ -[HTML version](http://htmlpreview.github.io/?https://github.com/idapython/src/blob/master/examples/index.html) -# IDAPython examples +# Examples -## Category: analysis +## IDAPython examples -#### dump_func_info -
- Dump (some) information about the current function. +This collection of examples organizes all IDAPython sample code into [categories](#example-categories-overview) for easy reference. Each example demonstrates practical implementation for the IDAPython API, complementing the [reference documentation](https://python.docs.hex-rays.com/) with a real-world usage scenario. -
+### How to run the examples? -#### Source code -analysis/dump_func_info.py +#### Load the script via File Loader -#### Category -analysis +1. Navigate to **File -> Script file...**. +2. In the new dialog, select the `.py` script you want to run and click **Open**. -#### Description -Dump some of the most interesting bits of information about -the function we are currently looking at. +#### Load the script via Script command -#### Uses -* ida_funcs.FUNC_FRAME -* ida_funcs.FUNC_LUMINA -* ida_funcs.FUNC_OUTLINE -* ida_funcs.FUNC_THUNK -* ida_funcs.get_fchunk -* ida_funcs.is_func_entry -* ida_funcs.is_func_tail -* ida_kernwin.get_screen_ea +1. Navigate to **File -> Script command...**. +2. Paste the code into _Please enter script body_ field and click **Run**. -
+#### Load the script via output window/console -
+1. In the output window/IDAPython console, type the following command: `exec(open("path/to/your_script.py").read())` to execute the script. -## Category: core +## Example Categories: Overview -#### actions -
- Custom actions, with icons & tooltips + + + -
+
+ + + + + + + + + + + + + + + + + + + + + + + -#### Source code -core/actions.py + +
User interfaceCreating & manipulating user-interface widgets, prompting the user with forms, enriching existing widgets, or creating your own UI through Python Qt bindings.
DisassemblyVarious ways to query, or modify the disassembly listing, alter the way analysis is performed, or be notified of changes made to the IDB.
DecompilationQuerying the decompiler, manipulating the decompilation trees (either at the microcode level, or the C-tree), and examples showing how to intervene in the decompilation output.
DebuggersDriving debugging sessions, be notified of debugging events.
Working with typesThese samples utilize our Type APIs, which allow you to manage the types and perform various operations on them, like creating the structures or enums and adding their members programmatically.
MiscellaneousMiscellaneous examples that don't quite fall into another category, but don't really justify one of their own.
-#### Category -core -#### Description + +## User interface {#ui} + + + + + + + + + + + + + + + + + + + + + + + + +
LevelExamples
Beginner
Intermediate
Advanced
+ + +## Disassembly {#disassembler} + + + + + + + + + + + + + + + + + + + + + + + + +
LevelExamples
Beginner
Intermediate
Advanced
+ + +## Decompilation {#decompiler} + + + + + + + + + + + + + + + + + + + + + + + + +
LevelExamples
Beginner
Intermediate
Advanced
+ + +## Debuggers {#debugger} + + + + + + + + + + + + + + + + + + + + + + + + +
LevelExamples
Beginner
Intermediate
Advanced
+ + +## Working with types {#types} + + + + + + + + + + + + + + + + + + + + + + + + +
LevelExamples
Beginner
Intermediate
Advanced
+ + +## Miscellaneous {#misc} + + + + + + + + + + + + + + + + + + + + + + + + +
LevelExamples
Beginner
Intermediate
Advanced
+ + + +*** + +## Examples list + + +### Assign a shortcut to a custom function {#add_hotkey} +`ida_kernwin.add_hotkey` is a simpler, but much less flexible +alternative to `ida_kernwin.register_action` (though it does +use the same mechanism under the hood.) + +It's particularly useful during prototyping, but note that the +actions that are created cannot be inserted in menus, toolbars +or cannot provide a custom `ida_kernwin.action_handler_t.update` +callback. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [add_hotkey.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/add_hotkey.py) | actions | Beginner | + +**APIs Used:** +* `ida_kernwin.add_hotkey` +* `ida_kernwin.del_hotkey` + +*** + + +### Add custom menus to IDA {#add_menus} +It is possible to add custom menus to IDA, either at the +toplevel (i.e., into the menubar), or as submenus of existing +menus. + +Notes: + + * the same action can be present in more than 1 menu + * this example does not deal with context menus + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [add_menus.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/misc/add_menus.py) | actions | Beginner | + +**APIs Used:** +* `ida_kernwin.AST_ENABLE_ALWAYS` +* `ida_kernwin.SETMENU_INS` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.attach_action_to_menu` +* `ida_kernwin.create_menu` +* `ida_kernwin.register_action` + +*** + + +### Assign a background color to an address, function & segment {#colorize_disassembly} +This illustrates the setting/retrieval of background colours +using the IDC wrappers + +In order to do so, we'll be assigning colors to specific ranges +(item, function, or segment). Those will be persisted in the +database. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [colorize_disassembly.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/colorize_disassembly.py) | coloring idc | Beginner | + +**APIs Used:** +* `idc.CIC_FUNC` +* `idc.CIC_ITEM` +* `idc.CIC_SEGM` +* `idc.get_color` +* `idc.here` +* `idc.set_color` + +*** + + +### Override the default "Functions" chooser colors {#func_chooser_coloring} +Color the function in the Function window according to its size. +The larger the function, the darker the color. + +The key, is overriding `ida_kernwin.UI_Hooks.get_chooser_item_attrs` + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [func_chooser_coloring.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/uihooks/func_chooser_coloring.py) | UI_Hooks | Beginner | + +**APIs Used:** +* `ida_funcs.get_func` +* `ida_kernwin.UI_Hooks` +* `ida_kernwin.enable_chooser_item_attrs` + +*** + + +### Create a dockable container, and populate it with Qt widgets {#populate_pluginform_with_pyqt_widgets} +Using `ida_kernwin.PluginForm.FormToPyQtWidget`, this script +converts IDA's own dockable widget into a type that is +recognized by PyQt5, which then enables populating it with +regular Qt widgets. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [populate_pluginform_with_pyqt_widgets.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/pyqt/populate_pluginform_with_pyqt_widgets.py) | | Beginner | + +**APIs Used:** +* `ida_kernwin.PluginForm` + +*** + + +### Prevent an action from being triggered {#prevent_jump} +Using `ida_kernwin.UI_Hooks.preprocess_action`, it is possible +to respond to a command instead of the action that would +otherwise do it. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [prevent_jump.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/uihooks/prevent_jump.py) | UI_Hooks | Beginner | + +**APIs Used:** +* `ida_kernwin.UI_Hooks` + +*** + + +### Use timers for delayed execution {#register_timer} +Register (possibly repeating) timers. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [register_timer.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/register_timer.py) | | Beginner | + +**APIs Used:** +* `ida_kernwin.register_timer` + +*** + + +### Show, update & hide the progress dialog {#show_and_hide_waitbox} +Using the progress dialog (aka 'wait box') primitives. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [show_and_hide_waitbox.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/waitbox/show_and_hide_waitbox.py) | actions | Beginner | + +**APIs Used:** +* `ida_hexrays.decompile` +* `ida_kernwin.hide_wait_box` +* `ida_kernwin.replace_wait_box` +* `ida_kernwin.show_wait_box` +* `ida_kernwin.user_cancelled` +* `idautils.Functions` + +*** + + +### Custom actions, with icons & tooltips {#actions} How to create user actions, that once created can be inserted in menus, toolbars, context menus, ... @@ -60,116 +393,398 @@ In addition, custom actions can determine when they want to be available (through their `ida_kernwin.action_handler_t.update` callback) -#### Shortcut -Ctrl+F12 +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [actions.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/actions.py) | actions ctxmenu UI_Hooks | Intermediate | -#### Keywords -actions ctxmenu UI_Hooks +**APIs Used:** +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_DISASM` +* `ida_kernwin.SETMENU_APP` +* `ida_kernwin.UI_Hooks` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.attach_action_to_menu` +* `ida_kernwin.attach_action_to_popup` +* `ida_kernwin.attach_action_to_toolbar` +* `ida_kernwin.get_widget_type` +* `ida_kernwin.load_custom_icon` +* `ida_kernwin.register_action` +* `ida_kernwin.unregister_action` -#### Uses -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.BWN_DISASM -* ida_kernwin.SETMENU_APP -* ida_kernwin.UI_Hooks -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.attach_action_to_menu -* ida_kernwin.attach_action_to_popup -* ida_kernwin.attach_action_to_toolbar -* ida_kernwin.get_widget_type -* ida_kernwin.load_custom_icon -* ida_kernwin.register_action -* ida_kernwin.unregister_action +*** -#### See also -* [add_hotkey](#add_hotkey) - +### Show tabular data {#choose} +Shows how to subclass the ida_kernwin.Choose class to +show data organized in a simple table. +In addition, registers a couple actions that can be applied to it. -
+| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [choose.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/tabular_views/custom/choose.py) | actions chooser ctxmenu | Intermediate | -#### add_hotkey -
- Triggering bits of code by pressing a shortcut +**APIs Used:** +* `Choose` +* `Choose.ALL_CHANGED` +* `Choose.CH_CAN_DEL` +* `Choose.CH_CAN_EDIT` +* `Choose.CH_CAN_INS` +* `Choose.CH_CAN_REFRESH` +* `Choose.CH_RESTORE` +* `Choose.NOTHING_CHANGED` +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.attach_action_to_popup` +* `ida_kernwin.is_chooser_widget` +* `ida_kernwin.register_action` +* `ida_kernwin.unregister_action` -
+*** -#### Source code -core/add_hotkey.py -#### Category -core +### Show tabular data, with multiple selection {#choose_multi} +Similar to choose, but with multiple selection -#### Description -`ida_kernwin.add_hotkey` is a simpler, but much less flexible -alternative to `ida_kernwin.register_action` (though it does -use the same mechanism under the hood.) +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [choose_multi.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/tabular_views/custom/choose_multi.py) | actions chooser | Intermediate | -It's particularly useful during prototyping, but note that the -actions that are created cannot be inserted in menus, toolbars -or cannot provide a custom `ida_kernwin.action_handler_t.update` -callback. +**APIs Used:** +* `Choose` +* `Choose.ALL_CHANGED` +* `Choose.CHCOL_HEX` +* `Choose.CH_MULTI` +* `Choose.NOTHING_CHANGED` -#### Keywords -actions +*** -#### Uses -* ida_kernwin.add_hotkey -* ida_kernwin.del_hotkey -#### See also -* [actions](#actions) +### Create custom listings in IDA {#custom_viewer} +How to create simple listings, that will share many of the features +as the built-in IDA widgets (highlighting, copy & paste, +notifications, ...) -
+In addition, creates actions that will be bound to the +freshly-created widget (using `ida_kernwin.attach_action_to_popup`.) -
+| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [custom_viewer.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/listings/custom_viewer.py) | actions ctxmenu listing | Intermediate | -#### add_idc_hotkey -
- Triggering bits of code by pressing a shortcut (older version) +**APIs Used:** +* `ida_kernwin.AST_ENABLE_ALWAYS` +* `ida_kernwin.IK_DELETE` +* `ida_kernwin.IK_ESCAPE` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.ask_long` +* `ida_kernwin.ask_str` +* `ida_kernwin.attach_action_to_popup` +* `ida_kernwin.register_action` +* `ida_kernwin.simplecustviewer_t` +* `ida_kernwin.simplecustviewer_t.Create` +* `ida_kernwin.simplecustviewer_t.Show` +* `ida_kernwin.unregister_action` +* `ida_lines.COLOR_DEFAULT` +* `ida_lines.COLOR_DNAME` +* `ida_lines.COLSTR` +* `ida_lines.SCOLOR_PREFIX` +* `ida_lines.SCOLOR_VOIDOP` -
+*** -#### Source code -core/add_idc_hotkey.py -#### Category -core +### Implement an alternative "Functions" window {#func_chooser} +Partially re-implements the "Functions" widget present in +IDA, with a custom widget. -#### Description -This is a somewhat ancient way of registering actions & binding -shortcuts. It's still here for reference, but "fresher" alternatives -should be preferred. +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [func_chooser.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/tabular_views/custom/func_chooser.py) | chooser functions | Intermediate | -#### Keywords -actions +**APIs Used:** +* `ida_funcs.get_func_name` +* `ida_kernwin.Choose` +* `ida_kernwin.Choose.ALL_CHANGED` +* `ida_kernwin.Choose.CHCOL_FNAME` +* `ida_kernwin.Choose.CHCOL_HEX` +* `ida_kernwin.Choose.CHCOL_PLAIN` +* `ida_kernwin.get_icon_id_by_name` +* `idautils.Functions` +* `idc.del_func` -#### Uses -* ida_expr.compile_idc_text -* ida_kernwin.add_idc_hotkey +*** -#### See also -* [actions](#actions) -* [add_hotkey](#add_hotkey) -
+### Implement a "jump to next comment" action within IDA's listing {#jump_next_comment} +We want our action not only to find the next line containing a comment, +but to also place the cursor at the right horizontal position. -
+To find that position, we will have to inspect the text that IDA +generates, looking for the start of a comment. +However, we won't be looking for a comment "prefix" (e.g., "; "), +as that would be too fragile. -#### auto_instantiate_widget_plugin -
- Better integrating custom widgets in the desktop layout +Instead, we will look for special "tags" that IDA injects into textual +lines, and that bear semantic information. -
+Those tags are primarily used for rendering (i.e., switching colors), +but can also be very handy for spotting tokens of interest (registers, +addresses, comments, prefixes, instruction mnemonics, ...) -#### Source code -core/auto_instantiate_widget_plugin.py +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [jump_next_comment.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/listings/jump_next_comment.py) | actions idaview | Intermediate | -#### Category -core +**APIs Used:** +* `ida_bytes.next_head` +* `ida_idaapi.BADADDR` +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_DISASM` +* `ida_kernwin.CVNF_LAZY` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.custom_viewer_jump` +* `ida_kernwin.get_custom_viewer_location` +* `ida_kernwin.place_t_as_idaplace_t` +* `ida_kernwin.register_action` +* `ida_kernwin.unregister_action` +* `ida_lines.SCOLOR_AUTOCMT` +* `ida_lines.SCOLOR_ON` +* `ida_lines.SCOLOR_REGCMT` +* `ida_lines.SCOLOR_RPTCMT` +* `ida_lines.generate_disassembly` +* `ida_lines.tag_strlen` +* `ida_moves.lochist_entry_t` -#### Description +*** + + +### Dynamically colorize [parts of] lines {#lines_rendering} +Shows how one can dynamically alter the lines background +rendering (as opposed to, say, using ida_nalt.set_item_color()), +and also shows how that rendering can be limited to just a few +glyphs, not the whole line. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [lines_rendering.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/uihooks/lines_rendering.py) | UI_Hooks | Intermediate | + +**APIs Used:** +* `ida_bytes.next_head` +* `ida_idaapi.BADADDR` +* `ida_kernwin.CK_EXTRA1` +* `ida_kernwin.CK_EXTRA10` +* `ida_kernwin.CK_EXTRA11` +* `ida_kernwin.CK_EXTRA12` +* `ida_kernwin.CK_EXTRA13` +* `ida_kernwin.CK_EXTRA14` +* `ida_kernwin.CK_EXTRA15` +* `ida_kernwin.CK_EXTRA16` +* `ida_kernwin.CK_EXTRA2` +* `ida_kernwin.CK_EXTRA3` +* `ida_kernwin.CK_EXTRA4` +* `ida_kernwin.CK_EXTRA5` +* `ida_kernwin.CK_EXTRA6` +* `ida_kernwin.CK_EXTRA7` +* `ida_kernwin.CK_EXTRA8` +* `ida_kernwin.CK_EXTRA9` +* `ida_kernwin.CK_TRACE` +* `ida_kernwin.CK_TRACE_OVL` +* `ida_kernwin.LROEF_CPS_RANGE` +* `ida_kernwin.UI_Hooks` +* `ida_kernwin.get_screen_ea` +* `ida_kernwin.line_rendering_output_entry_t` +* `ida_kernwin.refresh_idaview_anyway` + +*** + + +### React to UI events/notifications {#log_misc_events} +Hooks to be notified about certain UI events, and +dump their information to the "Output" window + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [log_misc_events.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/uihooks/log_misc_events.py) | UI_Hooks | Intermediate | + +**APIs Used:** +* `ida_kernwin.UI_Hooks` + +*** + + +### Paint on top of the navigation band {#paint_over_navbar} +Using an "event filter", we will intercept paint events +targeted at the navigation band widget, let it paint itself, +and then add our own markers on top. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [paint_over_navbar.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/pyqt/paint_over_navbar.py) | | Intermediate | + +**APIs Used:** +* `ida_kernwin.PluginForm.FormToPyQtWidget` +* `ida_kernwin.get_navband_pixel` +* `ida_kernwin.open_navband_window` +* `ida_segment.get_segm_qty` +* `ida_segment.getnseg` +* `idc.here` + +*** + + +### Save, and then restore, positions in a listing {#save_and_restore_listing_pos} +Shows how it is possible re-implement IDA's bookmark capability, +using 2 custom actions: one action saves the current location, +and the other restores it. + +Note that, contrary to actual bookmarks, this example: + + * remembers only 1 saved position + * doesn't save that position in the IDB (and therefore cannot + be restored if IDA is closed & reopened.) + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [save_and_restore_listing_pos.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/listings/save_and_restore_listing_pos.py) | actions listing | Intermediate | + +**APIs Used:** +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_CUSTVIEW` +* `ida_kernwin.BWN_DISASM` +* `ida_kernwin.BWN_PSEUDOCODE` +* `ida_kernwin.BWN_TILVIEW` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.custom_viewer_jump` +* `ida_kernwin.find_widget` +* `ida_kernwin.get_custom_viewer_location` +* `ida_kernwin.register_action` +* `ida_kernwin.unregister_action` +* `ida_moves.lochist_entry_t` + +*** + + +### Retrieve the selection from the "Strings" window {#show_selected_strings} +In IDA it's possible to write actions that can be applied even to +core (i.e., "standard") widgets. The actions in this example use the +action "context" to know what the current selection is. + +This example shows how you can either retrieve string literals data +directly from the chooser (`ida_kernwin.get_chooser_data`), or +by querying the IDB (`ida_bytes.get_strlit_contents`) + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [show_selected_strings.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/tabular_views/string_window/show_selected_strings.py) | actions ctxmenu | Intermediate | + +**APIs Used:** +* `ida_bytes.get_strlit_contents` +* `ida_idaapi.BADADDR` +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_STRINGS` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.attach_action_to_popup` +* `ida_kernwin.find_widget` +* `ida_kernwin.get_chooser_data` +* `ida_kernwin.open_strings_window` +* `ida_kernwin.register_action` +* `ida_kernwin.unregister_action` +* `ida_strlist.get_strlist_item` +* `ida_strlist.string_info_t` + +*** + + +### Follow the movements of one graph, in another {#sync_two_graphs} +Since it is possible to be notified of movements that happen +take place in a widget, it's possible to "replay" those +movements in another. + +In this case, "IDA View-B" (will be opened if necessary) will +show the same contents as "IDA View-A", slightly zoomed out. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [sync_two_graphs.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/graphs/sync_two_graphs.py) | graph idaview | Intermediate | + +**APIs Used:** +* `ida_graph.GLICTL_CENTER` +* `ida_graph.viewer_fit_window` +* `ida_graph.viewer_get_gli` +* `ida_graph.viewer_set_gli` +* `ida_kernwin.DP_RIGHT` +* `ida_kernwin.IDAViewWrapper` +* `ida_kernwin.MFF_FAST` +* `ida_kernwin.TCCRT_GRAPH` +* `ida_kernwin.execute_sync` +* `ida_kernwin.find_widget` +* `ida_kernwin.get_custom_viewer_place` +* `ida_kernwin.jumpto` +* `ida_kernwin.open_disasm_window` +* `ida_kernwin.set_dock_pos` +* `ida_kernwin.set_view_renderer_type` +* `ida_moves.graph_location_info_t` + +*** + + +### Trigger actions programmatically {#trigger_actions_programmatically} +It's possible to invoke any action programmatically, by using +either of those two: + + * ida_kernwin.execute_ui_requests() + * ida_kernwin.process_ui_action() + +Ideally, this script should be run through the "File > Script file..." +menu, so as to keep focus on "IDA View-A" and have the +'ProcessUiActions' part work as intended. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [trigger_actions_programmatically.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/trigger_actions_programmatically.py) | actions | Intermediate | + +**APIs Used:** +* `ida_kernwin.ask_yn` +* `ida_kernwin.execute_ui_requests` +* `ida_kernwin.msg` +* `ida_kernwin.process_ui_action` + +*** + + +### Advanced usage of the form API {#askusingform} +How to query for complex user input, using IDA's built-in forms. + +Note: while this example produces full-fledged forms for complex input, +simpler types of inputs might can be retrieved by using +`ida_kernwin.ask_str` and similar functions. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [askusingform.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/forms/askusingform.py) | forms | Advanced | + +**APIs Used:** +* `ida_kernwin.Choose` +* `ida_kernwin.Choose.CH_MULTI` +* `ida_kernwin.Form` +* `ida_kernwin.PluginForm.FORM_TAB` +* `ida_kernwin.ask_str` + +*** + + +### Restore custom widgets across sessions {#auto_instantiate_widget_plugin} This is an example demonstrating how one can create widgets from a plugin, and have them re-created automatically at IDA startup-time or at desktop load-time. @@ -189,95 +804,66 @@ There are 2 ways to use this example: - start another IDA instance with some IDB, and load that desktop => the widget will be visible -#### Keywords -desktop plugin UI_Hooks +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [auto_instantiate_widget_plugin.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/auto_instantiate_widget_plugin.py) | desktop plugin UI_Hooks | Advanced | -#### Uses -* ida_idaapi.plugin_t -* ida_kernwin.AST_ENABLE_ALWAYS -* ida_kernwin.SETMENU_APP -* ida_kernwin.UI_Hooks -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.attach_action_to_menu -* ida_kernwin.find_widget -* ida_kernwin.register_action -* ida_kernwin.simplecustviewer_t -* ida_kernwin.simplecustviewer_t.Create +**APIs Used:** +* `ida_idaapi.plugin_t` +* `ida_kernwin.AST_ENABLE_ALWAYS` +* `ida_kernwin.SETMENU_APP` +* `ida_kernwin.UI_Hooks` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.attach_action_to_menu` +* `ida_kernwin.find_widget` +* `ida_kernwin.register_action` +* `ida_kernwin.simplecustviewer_t` +* `ida_kernwin.simplecustviewer_t.Create` -
+*** -
-#### bin_search -
- Showcasing `ida_bytes.bin_search` +### Showing tabular data in a flat, or tree-like fashion {#chooser_with_folders} +By adding the necessary bits to a ida_kernwin.Choose subclass, +IDA can show the otherwise tabular data, in a tree-like fashion. -
+The important bits to enable this are: -#### Source code -core/bin_search.py + * ida_dirtree.dirspec_t (and my_dirspec_t) + * ida_kernwin.CH_HAS_DIRTREE + * ida_kernwin.Choose.OnGetDirTree + * ida_kernwin.Choose.OnIndexToInode -#### Category -core +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [chooser_with_folders.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/tabular_views/custom/chooser_with_folders.py) | actions chooser folders | Advanced | -#### Description -IDAPython's ida_bytes.bin_search function is pretty powerful, -but can be tough to figure out at first. This example introduces +**APIs Used:** +* `ida_dirtree.DTE_OK` +* `ida_dirtree.direntry_t` +* `ida_dirtree.direntry_t.BADIDX` +* `ida_dirtree.dirspec_t` +* `ida_dirtree.dirtree_t` +* `ida_dirtree.dirtree_t.isdir` +* `ida_kernwin.CH_CAN_DEL` +* `ida_kernwin.CH_CAN_EDIT` +* `ida_kernwin.CH_CAN_INS` +* `ida_kernwin.CH_HAS_DIRTREE` +* `ida_kernwin.CH_MULTI` +* `ida_kernwin.Choose` +* `ida_kernwin.Choose.ALL_CHANGED` +* `ida_kernwin.Choose.CHCOL_DRAGHINT` +* `ida_kernwin.Choose.CHCOL_INODENAME` +* `ida_kernwin.Choose.CHCOL_PLAIN` +* `ida_kernwin.ask_str` +* `ida_netnode.BADNODE` +* `ida_netnode.netnode` - * `ida_bytes.bin_search`, and - * `ida_bytes.parse_binpat_str` +*** -in order to implement a simple replacement for the -'Search > Sequence of bytes...' dialog, that lets users -search for sequences of bytes that compose string literals -in the binary file (either in the default 1-byte-per-char -encoding, or as UTF-16.) -#### Shortcut -Ctrl+Shift+S - -#### Uses -* ida_bytes.BIN_SEARCH_FORWARD -* ida_bytes.BIN_SEARCH_NOBREAK -* ida_bytes.BIN_SEARCH_NOSHOW -* ida_bytes.bin_search -* ida_bytes.compiled_binpat_vec_t -* ida_bytes.parse_binpat_str -* ida_ida.inf_get_max_ea -* ida_idaapi.BADADDR -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.BWN_DISASM -* ida_kernwin.Form -* ida_kernwin.Form.ChkGroupControl -* ida_kernwin.Form.StringInput -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.get_screen_ea -* ida_kernwin.jumpto -* ida_kernwin.register_action -* ida_nalt.BPU_1B -* ida_nalt.BPU_2B -* ida_nalt.get_default_encoding_idx - -
- -
- -#### colorize_disassembly_on_the_fly -
- An easy-to-use way to colorize lines - -
- -#### Source code -core/colorize_disassembly_on_the_fly.py - -#### Category -core - -#### Description +### Colorize lines interactively {#colorize_disassembly_on_the_fly} This builds upon the `ida_kernwin.UI_Hooks.get_lines_rendering_info` feature, to provide a quick & easy way to colorize disassembly lines. @@ -288,248 +874,84 @@ the database, and will therefore be lost after the session. By triggering the action multiple times, the user can "carousel" across 4 predefined colors (and return to the "no color" state.) -#### Shortcut -! +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [colorize_disassembly_on_the_fly.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/colorize_disassembly_on_the_fly.py) | coloring UI_Hooks | Advanced | -#### Keywords -coloring UI_Hooks +**APIs Used:** +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.CK_EXTRA5` +* `ida_kernwin.CK_EXTRA6` +* `ida_kernwin.CK_EXTRA7` +* `ida_kernwin.CK_EXTRA8` +* `ida_kernwin.UI_Hooks` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.get_current_viewer` +* `ida_kernwin.get_custom_viewer_location` +* `ida_kernwin.get_custom_viewer_place_xcoord` +* `ida_kernwin.get_widget_title` +* `ida_kernwin.line_rendering_output_entry_t` +* `ida_kernwin.register_action` +* `ida_moves.lochist_entry_t` -#### Uses -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.CK_EXTRA5 -* ida_kernwin.CK_EXTRA6 -* ida_kernwin.CK_EXTRA7 -* ida_kernwin.CK_EXTRA8 -* ida_kernwin.UI_Hooks -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.get_current_viewer -* ida_kernwin.get_custom_viewer_location -* ida_kernwin.get_custom_viewer_place_xcoord -* ida_kernwin.get_widget_title -* ida_kernwin.line_rendering_output_entry_t -* ida_kernwin.register_action -* ida_moves.lochist_entry_t +*** -#### See also -* [colorize_disassembly](#colorize_disassembly) -
- -
- -#### create_structure_programmatically -
- Programmatically create & populate a structure - -
- -#### Source code -core/create_structure_programmatically.py - -#### Category -core - -#### Description -Usage of the API to create & populate a structure with -members of different types. - -#### Uses -* ida_typeinf.BTF_BYTE -* ida_typeinf.BTF_DOUBLE -* ida_typeinf.BTF_FLOAT -* ida_typeinf.BTF_INT -* ida_typeinf.BTF_INT128 -* ida_typeinf.BTF_INT16 -* ida_typeinf.BTF_INT64 -* ida_typeinf.BTF_TBYTE -* ida_typeinf.BTF_UINT32 -* ida_typeinf.FRB_NUMO -* ida_typeinf.NTF_TYPE -* ida_typeinf.PRTYPE_DEF -* ida_typeinf.PRTYPE_MULTI -* ida_typeinf.PRTYPE_TYPE -* ida_typeinf.del_named_type -* ida_typeinf.idc_parse_types -* ida_typeinf.tinfo_errstr -* ida_typeinf.tinfo_t -* ida_typeinf.udm_t -* ida_typeinf.udt_type_data_t -* ida_typeinf.value_repr_t - -#### Author -Gergely Erdelyi (gergely.erdelyi@d-dome.net) - -
- -
- -#### custom_cli -
- A custom command-line interpreter - -
- -#### Source code -core/custom_cli.py - -#### Category -core - -#### Description +### Add a custom command-line interpreter {#custom_cli} Illustrates how one can add command-line interpreters to IDA This custom interpreter doesn't actually run any code; it's there as a 'getting started'. It provides an example tab completion support. -#### Uses -* ida_idaapi.NW_CLOSEIDB -* ida_idaapi.NW_OPENIDB -* ida_idaapi.NW_REMOVE -* ida_idaapi.NW_TERMIDA -* ida_idaapi.notify_when -* ida_kernwin.cli_t +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [custom_cli.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/custom_cli.py) | | Advanced | -
+**APIs Used:** +* `ida_idaapi.NW_CLOSEIDB` +* `ida_idaapi.NW_OPENIDB` +* `ida_idaapi.NW_REMOVE` +* `ida_idaapi.NW_TERMIDA` +* `ida_idaapi.notify_when` +* `ida_kernwin.cli_t` -
+*** -#### custom_data_types_and_formats -
- Using custom data types & printers -
+### Draw custom graphs {#custom_graph_with_actions} +Showing custom graphs, using `ida_graph.GraphViewer`. In addition, +show how to write actions that can be performed on those. -#### Source code -core/custom_data_types_and_formats.py +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [custom_graph_with_actions.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/graphs/custom_graph_with_actions.py) | actions graph View_Hooks | Advanced | -#### Category -core +**APIs Used:** +* `ida_funcs.get_func` +* `ida_funcs.get_func_name` +* `ida_graph.GraphViewer` +* `ida_graph.get_graph_viewer` +* `ida_graph.screen_graph_selection_t` +* `ida_graph.viewer_get_selection` +* `ida_idp.is_call_insn` +* `ida_kernwin.AST_ENABLE_ALWAYS` +* `ida_kernwin.View_Hooks` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.attach_dynamic_action_to_popup` +* `ida_kernwin.get_screen_ea` +* `ida_ua.decode_insn` +* `ida_ua.insn_t` +* `ida_xref.XREF_FAR` +* `ida_xref.xrefblk_t` -#### Description -IDA can be extended to support certain data types that it -does not know about out-of-the-box. +*** -A 'custom data type' provide information about the type & -size of a piece of data, while a 'custom data format' is in -charge of formatting that data (there can be more than -one format for a specific 'custom data type'.) -#### Uses -* ida_bytes.data_format_t -* ida_bytes.data_type_t -* ida_bytes.find_custom_data_type -* ida_bytes.get_byte -* ida_bytes.register_data_types_and_formats -* ida_bytes.unregister_data_types_and_formats -* ida_idaapi.NW_CLOSEIDB -* ida_idaapi.NW_OPENIDB -* ida_idaapi.NW_REMOVE -* ida_idaapi.NW_TERMIDA -* ida_idaapi.notify_when -* ida_idaapi.struct_unpack -* ida_lines.COLSTR -* ida_lines.SCOLOR_IMPNAME -* ida_lines.SCOLOR_INSN -* ida_lines.SCOLOR_NUMBER -* ida_lines.SCOLOR_REG -* ida_nalt.get_input_file_path -* ida_netnode.netnode -* ida_typeinf.tinfo_t - -
- -
- -#### dump_extra_comments -
- Retrieve extra comments - -
- -#### Source code -core/dump_extra_comments.py - -#### Category -core - -#### Description -Use the `ida_lines.get_extra_cmt` API to retrieve anterior -and posterior extra comments. - -This script registers two actions, that can be used to dump -the previous and next extra comments. - -#### Shortcuts -Ctrl+Shift+Y Ctrl+Shift+Z - -#### Keywords -ctxmenu - -#### Uses -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.BWN_DISASM -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.attach_action_to_popup -* ida_kernwin.find_widget -* ida_kernwin.get_screen_ea -* ida_kernwin.register_action -* ida_kernwin.unregister_action -* ida_lines.E_NEXT -* ida_lines.E_PREV -* ida_lines.get_extra_cmt -* ida_view - -
- -
- -#### dump_flowchart -
- Dump function flowchart - -
- -#### Source code -core/dump_flowchart.py - -#### Category -core - -#### Description -Dumps the current function's flowchart, using 2 methods: - - * the low-level `ida_gdl.qflow_chart_t` type - * the somewhat higher-level, and slightly more pythonic - `ida_gdl.FlowChart` type. - -#### Uses -* ida_funcs.get_func -* ida_gdl.FlowChart -* ida_gdl.qflow_chart_t -* ida_kernwin.get_screen_ea - -
- -
- -#### dump_selection -
- Retrieve & dump current selection - -
- -#### Source code -core/dump_selection.py - -#### Category -core - -#### Description +### Retrieve & dump current selection {#dump_selection} Shows how to retrieve the selection from a listing widget ("IDA View-A", "Hex View-1", "Pseudocode-A", ...) as two "cursors", and from there retrieve (in fact, generate) @@ -538,176 +960,532 @@ the corresponding text. After running this script: * select some text in one of the listing widgets (i.e., - "IDA View-*", "Enums", "Structures", "Pseudocode-*") + "IDA View-...", "Local Types", "Pseudocode-...") * press Ctrl+Shift+S to dump the selection -#### Shortcut -Ctrl+Shift+S +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [dump_selection.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/dump_selection.py) | | Advanced | -#### Uses -* ida_kernwin.ACF_HAS_SELECTION -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.BWN_DISASM -* ida_kernwin.BWN_ENUMS -* ida_kernwin.BWN_PSEUDOCODE -* ida_kernwin.BWN_STRUCTS -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.get_current_viewer -* ida_kernwin.get_viewer_user_data -* ida_kernwin.l_compare2 -* ida_kernwin.linearray_t -* ida_kernwin.read_selection -* ida_kernwin.register_action -* ida_kernwin.twinpos_t -* ida_kernwin.unregister_action -* ida_lines.tag_remove +**APIs Used:** +* `ida_kernwin.ACF_HAS_SELECTION` +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_DISASM` +* `ida_kernwin.BWN_PSEUDOCODE` +* `ida_kernwin.BWN_TILVIEW` +* `ida_kernwin.IWID_ANY_LISTING` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.get_last_widget` +* `ida_kernwin.get_viewer_user_data` +* `ida_kernwin.l_compare2` +* `ida_kernwin.linearray_t` +* `ida_kernwin.read_selection` +* `ida_kernwin.register_action` +* `ida_kernwin.twinpos_t` +* `ida_kernwin.unregister_action` +* `ida_lines.tag_remove` -
+*** -
-#### extend_idc -
- Add functions to the IDC runtime from IDAPython +### Inject commands in the "Output" window {#inject_command} +This example illustrates how one can execute commands in the +"Output" window, from their own widgets. -
+A few notes: -#### Source code -core/extend_idc.py +* the original, underlying `cli:Execute` action, that has to be + triggered for the code present in the input field to execute + and be placed in the history, requires that the input field + has focus (otherwise it simply won't do anything.) +* this, in turn, forces us to do "delayed" execution of that action, + hence the need for a `QTimer` +* the IDA/SWiG 'TWidget' type that we retrieve through + `ida_kernwin.find_widget`, is not the same type as a + `QtWidgets.QWidget`. We therefore need to convert it using + `ida_kernwin.PluginForm.TWidgetToPyQtWidget` -#### Category -core +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [inject_command.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/pyqt/inject_command.py) | | Advanced | -#### Description -You can add IDC functions to IDA, whose "body" consists of -IDAPython statements! +**APIs Used:** +* `ida_kernwin.PluginForm.TWidgetToPyQtWidget` +* `ida_kernwin.disabled_script_timeout_t` +* `ida_kernwin.find_widget` +* `ida_kernwin.process_ui_action` -We'll register a 'pow' function, available to all IDC code, -that when invoked will call back into IDAPython, and execute -the provided function body. +*** -After running this script, try switching to the IDC interpreter -(using the button on the lower-left corner of IDA) and executing -`pow(3, 7)` -#### Uses -* ida_expr.VT_LONG -* ida_expr.add_idc_func +### A lazy-loaded, tree-like data view {#lazy_loaded_chooser} +Brings lazy-loading of folders to the tree-like tabular views. -
+The important bit to enable this are: -
+ * ida_kernwin.Choose.OnLazyLoadDir -#### idapythonrc -
- Code to be run right after IDAPython initialization +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [lazy_loaded_chooser.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/tabular_views/custom/lazy_loaded_chooser.py) | actions chooser folders | Advanced | -
-#### Source code -core/idapythonrc.py +*** -#### Category -core -#### Description -The `idapythonrc.py` file: +### Paint text on graph view edges {#paint_over_graph} +This sample registers an action enabling painting of a recognizable +string of text over horizontal nodes edge sections beyond a +satisfying size threshold. - * %APPDATA%\Hex-Rays\IDA Pro\idapythonrc.py (on Windows) - * ~/.idapro/idapythonrc.py (on Linux & Mac) +In a disassembly view, open the context menu and select +"Paint on edges". This should work for both graph disassembly, +and proximity browser. -can contain any IDAPython code that will be run as soon as -IDAPython is done successfully initializing. +Using an "event filter", we will intercept paint events +targeted at the disassembly view, let it paint itself, and +then add our own markers along. -
+| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [paint_over_graph.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/pyqt/paint_over_graph.py) | ctxmenu UI_Hooks | Advanced | -
+**APIs Used:** +* `ida_gdl.edge_t` +* `ida_graph.get_graph_viewer` +* `ida_graph.get_viewer_graph` +* `ida_graph.point_t` +* `ida_graph.viewer_get_gli` +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_DISASM` +* `ida_kernwin.PluginForm.FormToPyQtWidget` +* `ida_kernwin.UI_Hooks` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.attach_action_to_popup` +* `ida_kernwin.get_widget_type` +* `ida_kernwin.register_action` +* `ida_moves.graph_location_info_t` -#### install_user_defined_prefix -
- Inserting information into disassembly prefixes +*** -
-#### Source code -core/install_user_defined_prefix.py +### Programmatically manipulate disassembly and graph widgets {#wrap_idaview} +This is an example illustrating how to manipulate an existing IDA-provided +view (and thus possibly its graph), in Python. -#### Category -core +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [wrap_idaview.py](https://github.com/HexRaysSA/IDAPython/tree//examples/ui/idaview/wrap_idaview.py) | graph idaview | Advanced | -#### Description +**APIs Used:** +* `ida_graph.NIF_BG_COLOR` +* `ida_graph.NIF_FRAME_COLOR` +* `ida_graph.node_info_t` +* `ida_kernwin.IDAViewWrapper` +* `ida_kernwin.MFF_FAST` +* `ida_kernwin.TCCRT_FLAT` +* `ida_kernwin.TCCRT_GRAPH` +* `ida_kernwin.execute_sync` + +*** + + +### Dump function flowchart {#dump_flowchart} +Dumps the current function's flowchart, using 2 methods: + + * the low-level `ida_gdl.qflow_chart_t` type + * the somewhat higher-level, and slightly more pythonic + `ida_gdl.FlowChart` type. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [dump_flowchart.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/dump_flowchart.py) | | Beginner | + +**APIs Used:** +* `ida_funcs.get_func` +* `ida_gdl.FlowChart` +* `ida_gdl.qflow_chart_t` +* `ida_kernwin.get_screen_ea` + +*** + + +### Insert information into listing prefixes {#install_user_defined_prefix} By default, disassembly line prefixes contain segment + address information (e.g., '.text:08047718'), but it is possible to "inject" other bits of information in there, thanks to the `ida_lines.user_defined_prefix_t` helper type. -#### Keywords -plugin +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [install_user_defined_prefix.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/install_user_defined_prefix.py) | plugin | Beginner | -#### Uses -* ida_idaapi.PLUGIN_KEEP -* ida_idaapi.plugin_t -* ida_lines.SCOLOR_INV -* ida_lines.user_defined_prefix_t +**APIs Used:** +* `ida_idaapi.PLUGIN_KEEP` +* `ida_idaapi.plugin_t` +* `ida_lines.SCOLOR_INV` +* `ida_lines.user_defined_prefix_t` -
+*** -
-#### list_bookmarks -
- List bookmarks associated to a listing +### Enumerate file imports {#list_imports} +Using the API to enumerate file imports. -
+| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_imports.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/list_imports.py) | | Beginner | -#### Source code -core/list_bookmarks.py +**APIs Used:** +* `ida_nalt.enum_import_names` +* `ida_nalt.get_import_module_name` +* `ida_nalt.get_import_module_qty` -#### Category -core +*** -#### Description + +### Enumerate patched bytes {#list_patched_bytes} +Using the API to iterate over all the places in the file, +that were patched using IDA. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_patched_bytes.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/list_patched_bytes.py) | | Beginner | + +**APIs Used:** +* `ida_bytes.visit_patched_bytes` +* `ida_idaapi.BADADDR` + +*** + + +### Enumerate known problems {#list_problems} +Using the API to list all problems that IDA +encountered during analysis. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_problems.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/list_problems.py) | | Beginner | + +**APIs Used:** +* `ida_ida.inf_get_min_ea` +* `ida_idaapi.BADADDR` +* `ida_problems.PR_ATTN` +* `ida_problems.PR_BADSTACK` +* `ida_problems.PR_COLLISION` +* `ida_problems.PR_DECIMP` +* `ida_problems.PR_DISASM` +* `ida_problems.PR_FINAL` +* `ida_problems.PR_HEAD` +* `ida_problems.PR_ILLADDR` +* `ida_problems.PR_JUMP` +* `ida_problems.PR_MANYLINES` +* `ida_problems.PR_NOBASE` +* `ida_problems.PR_NOCMT` +* `ida_problems.PR_NOFOP` +* `ida_problems.PR_NONAME` +* `ida_problems.PR_NOXREFS` +* `ida_problems.PR_ROLLED` +* `ida_problems.get_problem` +* `ida_problems.get_problem_name` + +*** + + +### List segment functions (and cross-references to them) {#list_segment_functions} +List all the functions in the current segment, as well as +all the cross-references to them. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_segment_functions.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/list_segment_functions.py) | xrefs | Beginner | + +**APIs Used:** +* `ida_funcs.get_func` +* `ida_funcs.get_func_name` +* `ida_funcs.get_next_func` +* `ida_kernwin.get_screen_ea` +* `ida_segment.getseg` +* `ida_xref.xrefblk_t` + +*** + + +### List all functions (and cross-references) in segment {#list_segment_functions_using_idautils} +List all the functions in the current segment, as well as +all the cross-references to them. + +Contrary to @list_segment_functions, this uses the somewhat +higher-level `idautils` module. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_segment_functions_using_idautils.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/list_segment_functions_using_idautils.py) | xrefs | Beginner | + +**APIs Used:** +* `ida_funcs.get_func_name` +* `ida_idaapi.BADADDR` +* `ida_kernwin.get_screen_ea` +* `ida_segment.getseg` +* `idautils.CodeRefsTo` +* `idautils.Functions` + +*** + + +### Dump the strings that are present in the file {#list_strings} +This uses `idautils.Strings` to iterate over the string literals +that are present in the IDB. Contrary to @show_selected_strings, +this will not require that the "Strings" window is opened & available. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_strings.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/list_strings.py) | | Beginner | + +**APIs Used:** +* `ida_nalt.STRTYPE_C` +* `ida_nalt.STRTYPE_C_16` +* `idautils.Strings` + +*** + + +### Produce disassembly listing for the entire file {#produce_lst_file} +Automate IDA to perform auto-analysis on a file and, +once that is done, produce a .lst file with the disassembly. + +Run like so: + + ida -A "-S...path/to/produce_lst_file.py" + +where: + + * -A instructs IDA to run in non-interactive mode + * -S holds a path to the script to run (note this is a single token; + there is no space between '-S' and its path.) + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [produce_lst_file.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/produce_lst_file.py) | | Beginner | + +**APIs Used:** +* `ida_auto.auto_wait` +* `ida_fpro.qfile_t` +* `ida_ida.inf_get_max_ea` +* `ida_ida.inf_get_min_ea` +* `ida_loader.OFILE_LST` +* `ida_loader.PATH_TYPE_IDB` +* `ida_loader.gen_file` +* `ida_loader.get_path` +* `ida_pro.qexit` + +*** + + +### Rewrite the representation of some instructions {#ana_emu_out} +Implements disassembly of BUG_INSTR used in Linux kernel +BUG() macro, which is architecturally undefined and is not +disassembled by IDA's ARM module + +See Linux/arch/arm/include/asm/bug.h for more info + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [ana_emu_out.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/ana_emu_out.py) | IDP_Hooks | Intermediate | + +**APIs Used:** +* `ida_bytes.get_wide_dword` +* `ida_bytes.get_wide_word` +* `ida_idp.CUSTOM_INSN_ITYPE` +* `ida_idp.IDP_Hooks` +* `ida_idp.PLFM_ARM` +* `ida_idp.ph.id` +* `ida_idp.str2reg` +* `ida_segregs.get_sreg` + +*** + + +### Implement assembly of instructions {#assemble} +We add support for assembling the following pseudo instructions: + +* "zero eax" -> xor eax, eax +* "nothing" -> nop + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [assemble.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/assemble.py) | IDP_Hooks | Intermediate | + +**APIs Used:** +* `ida_idp.IDP_Hooks` +* `idautils.DecodeInstruction` + +*** + + +### Retrieve comments surrounding instructions {#dump_extra_comments} +Use the `ida_lines.get_extra_cmt` API to retrieve anterior +and posterior extra comments. + +This script registers two actions, that can be used to dump +the previous and next extra comments. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [dump_extra_comments.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/dump_extra_comments.py) | ctxmenu | Intermediate | + +**APIs Used:** +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_DISASM` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.attach_action_to_popup` +* `ida_kernwin.find_widget` +* `ida_kernwin.get_screen_ea` +* `ida_kernwin.register_action` +* `ida_kernwin.unregister_action` +* `ida_lines.E_NEXT` +* `ida_lines.E_PREV` +* `ida_lines.get_extra_cmt` +* `ida_view` + +*** + + +### Dump function information {#dump_func_info} +Dump some of the most interesting bits of information about +the function we are currently looking at. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [dump_func_info.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/dump_func_info.py) | | Intermediate | + +**APIs Used:** +* `ida_funcs.FUNC_FRAME` +* `ida_funcs.FUNC_LUMINA` +* `ida_funcs.FUNC_OUTLINE` +* `ida_funcs.FUNC_THUNK` +* `ida_funcs.get_fchunk` +* `ida_funcs.is_func_entry` +* `ida_funcs.is_func_tail` +* `ida_kernwin.get_screen_ea` + +*** + + +### Parse listing line, and dump some information {#dump_line_sections} +Using `ida_kernwin.parse_tagged_line_sections`, we will parse +so-called "tagged" listing lines, and extract semantic information +such as instruction mnemonic, operand text, ... + +This script registers an actions, that can be used to dump +the line sections. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [dump_line_sections.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/dump_line_sections.py) | | Intermediate | + +**APIs Used:** +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_DISASM` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.get_custom_viewer_curline` +* `ida_kernwin.parse_tagged_line_sections` +* `ida_kernwin.register_action` +* `ida_kernwin.tagged_line_sections_t` +* `ida_lines.COLOR_INSN` +* `ida_lines.COLOR_OPND1` +* `ida_lines.COLOR_OPND8` +* `ida_lines.COLOR_REG` + +*** + + +### Using "ida_bytes.find_string" {#find_string} +IDAPython's ida_bytes.find_string can be used to implement +a simple replacement for the 'Search > Sequence of bytes...' +dialog, that lets users search for sequences of bytes that +compose string literals in the binary file (either in the +default 1-byte-per-char encoding, or as UTF-16.) + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [find_string.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/find_string.py) | | Intermediate | + +**APIs Used:** +* `ida_bytes.BIN_SEARCH_FORWARD` +* `ida_bytes.BIN_SEARCH_NOBREAK` +* `ida_bytes.BIN_SEARCH_NOSHOW` +* `ida_bytes.find_string` +* `ida_ida.inf_get_max_ea` +* `ida_idaapi.BADADDR` +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_DISASM` +* `ida_kernwin.Form` +* `ida_kernwin.Form.ChkGroupControl` +* `ida_kernwin.Form.StringInput` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.get_screen_ea` +* `ida_kernwin.jumpto` +* `ida_kernwin.register_action` +* `ida_nalt.BPU_1B` +* `ida_nalt.BPU_2B` +* `ida_nalt.get_default_encoding_idx` + +*** + + +### Print notifications about function prototype changes {#func_ti_changed_listener} +The goal of this script is to demonstrate some usage of the type API. +In this script, we will create an IDB hook that intercepts `ti_changed` +IDB events, and if it is a function prototype that changed, print it. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [func_ti_changed_listener.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/func_ti_changed_listener.py) | IDB_Hooks | Intermediate | + +**APIs Used:** +* `ida_funcs.get_func_name` +* `ida_idp.IDB_Hooks` +* `ida_typeinf.tinfo_t` + +*** + + +### List listing bookmarks {#list_bookmarks} This sample shows how to programmatically access the list of bookmarks placed in a listing widget (e.g., "IDA View-A", "Pseudocode-", …) using the low-level `ida_moves.bookmarks_t` type. -#### Shortcut -Ctrl+! +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_bookmarks.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/list_bookmarks.py) | bookmarks | Intermediate | -#### Keywords -bookmarks +**APIs Used:** +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.get_current_viewer` +* `ida_kernwin.get_viewer_user_data` +* `ida_kernwin.get_widget_title` +* `ida_kernwin.register_action` +* `ida_moves.bookmarks_t` -#### Uses -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.get_current_viewer -* ida_kernwin.get_viewer_user_data -* ida_kernwin.get_widget_title -* ida_kernwin.register_action -* ida_moves.bookmarks_t +*** -
-
- -#### list_function_items -
- Showcases (a few of) the iterators available on a function - -
- -#### Source code -core/list_function_items.py - -#### Category -core - -#### Description +### Showcase (some of) the iterators available on a function {#list_function_items} This demonstrates how to use some of the iterators available on the func_t type. This example will focus on: @@ -728,277 +1506,266 @@ In addition, one can use: * `func_parent_iterator_t`: iterate on all the parent functions, that include this chunk -#### Keywords -funcs iterator - -#### Uses -* ida_bytes.get_flags -* ida_bytes.is_code -* ida_bytes.is_data -* ida_bytes.is_tail -* ida_bytes.is_unknown -* ida_funcs.func_tail_iterator_t -* ida_funcs.get_fchunk -* ida_funcs.get_func -* ida_funcs.get_func_name -* ida_kernwin.get_screen_ea -* ida_ua.print_insn_mnem - -
- -
- -#### list_imports -
- Enumerate file imports - -
- -#### Source code -core/list_imports.py - -#### Category -core - -#### Description -Using the API to enumerate file imports. - -#### Uses -* ida_nalt.enum_import_names -* ida_nalt.get_import_module_name -* ida_nalt.get_import_module_qty - -
- -
- -#### list_patched_bytes -
- Enumerate patched bytes - -
- -#### Source code -core/list_patched_bytes.py - -#### Category -core - -#### Description -Using the API to iterate over all the places in the file, -that were patched using IDA. - -#### Uses -* ida_bytes.visit_patched_bytes -* ida_idaapi.BADADDR - -
- -
- -#### list_problems -
- Enumerate problems - -
- -#### Source code -core/list_problems.py - -#### Category -core - -#### Description -Using the API to list all problem[atic situation]s that IDA -encountered during analysis. - -#### Uses -* ida_ida.inf_get_min_ea -* ida_idaapi.BADADDR -* ida_problems.PR_ATTN -* ida_problems.PR_BADSTACK -* ida_problems.PR_COLLISION -* ida_problems.PR_DECIMP -* ida_problems.PR_DISASM -* ida_problems.PR_FINAL -* ida_problems.PR_HEAD -* ida_problems.PR_ILLADDR -* ida_problems.PR_JUMP -* ida_problems.PR_MANYLINES -* ida_problems.PR_NOBASE -* ida_problems.PR_NOCMT -* ida_problems.PR_NOFOP -* ida_problems.PR_NONAME -* ida_problems.PR_NOXREFS -* ida_problems.PR_ROLLED -* ida_problems.get_problem -* ida_problems.get_problem_name - -
- -
- -#### list_segment_functions -
- List all functions (and xrefs) in segment - -
- -#### Source code -core/list_segment_functions.py - -#### Category -core - -#### Description -List all the functions in the current segment, as well as -all the cross-references to them. - -#### Keywords -xrefs - -#### Uses -* ida_funcs.get_func -* ida_funcs.get_func_name -* ida_funcs.get_next_func -* ida_kernwin.get_screen_ea -* ida_segment.getseg -* ida_xref.xrefblk_t - -#### See also -* [list_segment_functions_using_idautils](#list_segment_functions_using_idautils) - -
- -
- -#### list_segment_functions_using_idautils -
- List all functions (and xrefs) in segment - -
- -#### Source code -core/list_segment_functions_using_idautils.py - -#### Category -core - -#### Description -List all the functions in the current segment, as well as -all the cross-references to them. - -Contrary to @list_segment_functions, this uses the somewhat -higher-level `idautils` module. - -#### Keywords -xrefs - -#### Uses -* ida_funcs.get_func_name -* ida_idaapi.BADADDR -* ida_kernwin.get_screen_ea -* ida_segment.getseg -* idautils.CodeRefsTo -* idautils.Functions - -#### See also -* [list_segment_functions](#list_segment_functions) - -
- -
- -#### list_stkvar_xrefs -
- List all xrefs to a function stack variable - -
- -#### Source code -core/list_stkvar_xrefs.py - -#### Category -core - -#### Description -Contrary to (in-memory) data & code xrefs, retrieving stack variables -xrefs requires a bit more work than just using ida_xref's first_to(), -next_to() (or higher level utilities such as idautils.XrefsTo) - -#### Shortcut -Ctrl+Shift+F7 - -#### Keywords -xrefs - -#### Uses -* ida_bytes.get_flags -* ida_bytes.is_stkvar -* ida_frame.calc_stkvar_struc_offset -* ida_frame.get_frame -* ida_funcs.get_func -* ida_ida.UA_MAXOP -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.BWN_DISASM -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.get_current_viewer -* ida_kernwin.get_highlight -* ida_kernwin.get_screen_ea -* ida_kernwin.register_action -* ida_struct.get_member_by_name -* ida_struct.get_struc -* ida_ua.decode_insn -* ida_ua.insn_t - -
- -
- -#### list_strings -
- Retrieve the strings that are present in the IDB - -
- -#### Source code -core/list_strings.py - -#### Category -core - -#### Description -This uses `idautils.Strings` to iterate over the string literals -that are present in the IDB. Contrary to @show_selected_strings, -this will not require that the "Strings" window is opened & available. - -#### Uses -* ida_nalt.STRTYPE_C -* ida_nalt.STRTYPE_C_16 -* idautils.Strings - -#### See also -* [show_selected_strings](#show_selected_strings) - -
- -
- -#### produce_c_file -
- Decompile entire file - -
- -#### Source code -core/produce_c_file.py - -#### Category -core - -#### Description +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_function_items.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/list_function_items.py) | funcs iterator | Intermediate | + +**APIs Used:** +* `ida_bytes.get_flags` +* `ida_bytes.is_code` +* `ida_bytes.is_data` +* `ida_bytes.is_tail` +* `ida_bytes.is_unknown` +* `ida_funcs.func_tail_iterator_t` +* `ida_funcs.get_fchunk` +* `ida_funcs.get_func` +* `ida_funcs.get_func_name` +* `ida_kernwin.get_screen_ea` +* `ida_ua.print_insn_mnem` + +*** + + +### React to database events/notifications {#log_idb_events} +These hooks will be notified about IDB events, and +dump their information to the "Output" window + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [log_idb_events.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/log_idb_events.py) | IDB_Hooks | Intermediate | + +**APIs Used:** +* `ida_idp.IDB_Hooks` + +*** + + +### React to processor events/notifications {#log_idp_events} +These hooks will be notified about IDP events, and +dump their information to the "Output" window + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [log_idp_events.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/log_idp_events.py) | IDP_Hooks | Intermediate | + +**APIs Used:** +* `ida_idp.IDP_Hooks` + +*** + + +### Record and replay changes in function prototypes {#replay_prototypes_changes} +This is a sample script, that will record (in memory) all changes in +functions prototypes, in order to re-apply them later. + +To use this script: + - open an IDB (say, "test.idb") + - modify some functions prototypes (e.g., by triggering the 'Y' + shortcut when the cursor is placed on the first address of a + function) + - reload that IDB, *without saving it first* + - call rpc.replay(), to re-apply the modifications. + +Note: 'ti_changed' is also called for changes to the function +frames, but we'll only record function prototypes changes. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [replay_prototypes_changes.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/replay_prototypes_changes.py) | IDB_Hooks | Intermediate | + +**APIs Used:** +* `ida_funcs.get_func` +* `ida_idp.IDB_Hooks` +* `ida_typeinf.PRTYPE_1LINE` +* `ida_typeinf.TINFO_DEFINITE` +* `ida_typeinf.apply_tinfo` +* `ida_typeinf.get_idati` +* `ida_typeinf.tinfo_t` + +*** + + +### Add a new member to an existing function frame {#add_frame_member} +The goal of this script is to demonstrate some usage of the type API. +In this script, we show a way to add a new frame member (a pointer to + an uint64) inside a wide enough gap in the frame: +* Get the function object surrounding cursor location. +* Use this function to retrieve the corresponding frame object. +* Find a wide enough gap to create our new member. +* If found, we use cal_frame_offset() to get the actual + offset in the frame structure. +* Use the previous result to add the new member. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [add_frame_member.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/add_frame_member.py) | | Advanced | + +**APIs Used:** +* `ida_frame.add_frame_member` +* `ida_frame.calc_frame_offset` +* `ida_frame.get_func_frame` +* `ida_funcs.get_func` +* `ida_range.rangeset_t` +* `ida_typeinf.BTF_UINT64` +* `ida_typeinf.tinfo_t` +* `idc.here` + +*** + + +### Custom data types & printers {#custom_data_types_and_formats} +IDA can be extended to support certain data types that it +does not know about out-of-the-box. + +A 'custom data type' provide information about the type & +size of a piece of data, while a 'custom data format' is in +charge of formatting that data (there can be more than +one format for a specific 'custom data type'.) + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [custom_data_types_and_formats.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/custom_data_types_and_formats.py) | | Advanced | + +**APIs Used:** +* `ida_bytes.data_format_t` +* `ida_bytes.data_type_t` +* `ida_bytes.find_custom_data_type` +* `ida_bytes.get_byte` +* `ida_bytes.register_data_types_and_formats` +* `ida_bytes.unregister_data_types_and_formats` +* `ida_idaapi.NW_CLOSEIDB` +* `ida_idaapi.NW_OPENIDB` +* `ida_idaapi.NW_REMOVE` +* `ida_idaapi.NW_TERMIDA` +* `ida_idaapi.notify_when` +* `ida_idaapi.struct_unpack` +* `ida_lines.COLSTR` +* `ida_lines.SCOLOR_IMPNAME` +* `ida_lines.SCOLOR_INSN` +* `ida_lines.SCOLOR_NUMBER` +* `ida_lines.SCOLOR_REG` +* `ida_nalt.get_input_file_path` +* `ida_netnode.netnode` +* `ida_typeinf.tinfo_t` + +*** + + +### List operands representing a "path" to a (possibly nested) structure member {#list_struct_accesses} +It is possible to assign, to instruction operands, the notion of "structure +offset", which really is a pointer to a specific offset in a type, leading +to a possible N-deep path within types. + +E.g., assuming the following types + + struct c + { + int foo; + int bar; + int baz; + int quux; + int trail; + }; + + struct b + { + int gap; + c c_instance; + }; + + struct a + { + int count; + b b_instance; + }; + +and assuming an instruction that initially looks like this: + + mov eax, 10h + +by pressing `t`, the user will be able set the "structure offset" +to either: + + * `c.trail` + * `b.c_instance.quux` + * `a.b_inscance.c_instance.baz` + +Here's why IDA offers `a.b_inscance.c_instance.baz`: + + 0000 struct a + { + 0000 int count; + 0004 struct b + { + 0004 int gap; + 0008 struct c + { + 0008 int foo; + 000C int bar; + 0010 int baz; + 0014 int quux; + 0018 int trail; + }; + }; + }; + +This sample shows how to programmatically retrieve information about +that "structure member path" that an operand was made pointing to. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_struct_accesses.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/list_struct_accesses.py) | bookmarks | Advanced | + +**APIs Used:** +* `ida_bytes.get_full_flags` +* `ida_bytes.get_stroff_path` +* `ida_bytes.is_stroff` +* `ida_typeinf.get_tid_name` +* `ida_typeinf.tinfo_t` +* `ida_ua.decode_insn` +* `ida_ua.insn_t` +* `ida_ua.o_imm` +* `ida_ua.o_void` + +*** + + +### Notify the user when an instruction operand changes {#operand_changed} +Show notifications whenever the user changes +an instruction's operand, or a data item. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [operand_changed.py](https://github.com/HexRaysSA/IDAPython/tree//examples/disassembler/operand_changed.py) | IDB_Hooks | Advanced | + +**APIs Used:** +* `ida_bytes.ALOPT_IGNCLT` +* `ida_bytes.ALOPT_IGNHEADS` +* `ida_bytes.get_flags` +* `ida_bytes.get_max_strlit_length` +* `ida_bytes.get_opinfo` +* `ida_bytes.get_strlit_contents` +* `ida_bytes.is_custfmt` +* `ida_bytes.is_custom` +* `ida_bytes.is_enum` +* `ida_bytes.is_off` +* `ida_bytes.is_strlit` +* `ida_bytes.is_stroff` +* `ida_bytes.is_struct` +* `ida_idp.IDB_Hooks` +* `ida_nalt.STRENC_DEFAULT` +* `ida_nalt.get_default_encoding_idx` +* `ida_nalt.get_encoding_name` +* `ida_nalt.get_str_encoding_idx` +* `ida_nalt.get_strtype_bpu` +* `ida_nalt.opinfo_t` +* `ida_typeinf.get_tid_name` +* `ida_typeinf.tinfo_t` + +*** + + +### Produce C listing for the entire file {#produce_c_file} Automate IDA to perform auto-analysis on a file and, once that is done, produce a .c file containing the decompilation of all the functions in that file. @@ -1013,561 +1780,111 @@ where: * -S holds a path to the script to run (note this is a single token; there is no space between '-S' and its path.) -#### Uses -* ida_auto.auto_wait -* ida_hexrays.VDRUN_MAYSTOP -* ida_hexrays.VDRUN_NEWFILE -* ida_hexrays.VDRUN_SILENT -* ida_hexrays.decompile_many -* ida_loader.PATH_TYPE_IDB -* ida_loader.get_path -* ida_pro.qexit +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [produce_c_file.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/produce_c_file.py) | | Beginner | -
+**APIs Used:** +* `ida_auto.auto_wait` +* `ida_hexrays.VDRUN_MAYSTOP` +* `ida_hexrays.VDRUN_NEWFILE` +* `ida_hexrays.VDRUN_SILENT` +* `ida_hexrays.decompile_many` +* `ida_loader.PATH_TYPE_IDB` +* `ida_loader.get_path` +* `ida_pro.qexit` -
+*** -#### produce_lst_file -
- Produce listing -
+### Decompile & print current function {#vds1} +Decompile the function under the cursor -#### Source code -core/produce_lst_file.py +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds1.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds1.py) | | Beginner | -#### Category -core +**APIs Used:** +* `ida_funcs.get_func` +* `ida_hexrays.decompile` +* `ida_hexrays.get_hexrays_version` +* `ida_hexrays.init_hexrays_plugin` +* `ida_kernwin.get_screen_ea` +* `ida_lines.tag_remove` -#### Description -Automate IDA to perform auto-analysis on a file and, -once that is done, produce a .lst file with the disassembly. +*** -Run like so: - ida -A "-S...path/to/produce_lst_file.py" +### Generate microcode for the selected range of instructions {#vds13} +Generates microcode for selection and dumps it to the output window. -where: +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds13.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds13.py) | | Beginner | - * -A instructs IDA to run in non-interactive mode - * -S holds a path to the script to run (note this is a single token; - there is no space between '-S' and its path.) +**APIs Used:** +* `ida_bytes.get_flags` +* `ida_bytes.is_code` +* `ida_hexrays.DECOMP_WARNINGS` +* `ida_hexrays.gen_microcode` +* `ida_hexrays.hexrays_failure_t` +* `ida_hexrays.init_hexrays_plugin` +* `ida_hexrays.mba_ranges_t` +* `ida_hexrays.vd_printer_t` +* `ida_kernwin.read_range_selection` +* `ida_kernwin.warning` +* `ida_range.range_t` -#### Uses -* ida_auto.auto_wait -* ida_fpro.qfile_t -* ida_ida.inf_get_max_ea -* ida_ida.inf_get_min_ea -* ida_loader.OFILE_LST -* ida_loader.PATH_TYPE_IDB -* ida_loader.gen_file -* ida_loader.get_path -* ida_pro.qexit +*** -
-
+### Dump statement blocks {#vds7} +Using a `ida_hexrays.ctree_visitor_t`, search for +`ida_hexrays.cit_block` instances and dump them. -#### register_timer -
- Using timers for delayed execution +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds7.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds7.py) | Hexrays_Hooks | Beginner | -
+**APIs Used:** +* `ida_hexrays.CMAT_BUILT` +* `ida_hexrays.CV_FAST` +* `ida_hexrays.Hexrays_Hooks` +* `ida_hexrays.cit_block` +* `ida_hexrays.ctree_visitor_t` +* `ida_hexrays.init_hexrays_plugin` -#### Source code -core/register_timer.py +*** -#### Category -core -#### Description -Register (possibly repeating) timers. +### Provide custom decompiler hints {#vds_create_hint} +Handle `ida_hexrays.hxe_create_hint` notification using hooks, +to return our own. -#### Uses -* ida_kernwin.register_timer +If the object under the cursor is: -
+* a function call, prefix the original decompiler hint with `==> ` +* a local variable declaration, replace the hint with our own in + the form of `!{varname}` (where `{varname}` is replaced with the + variable name) +* an `if` statement, replace the hint with our own, saying "condition" -
+| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds_create_hint.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds_create_hint.py) | Hexrays_Hooks | Beginner | -#### trigger_actions_programmatically -
- Execute existing actions programmatically +**APIs Used:** +* `ida_hexrays.Hexrays_Hooks` +* `ida_hexrays.USE_MOUSE` +* `ida_hexrays.VDI_EXPR` +* `ida_hexrays.VDI_LVAR` +* `ida_hexrays.cit_if` +* `ida_hexrays.cot_call` -
+*** -#### Source code -core/trigger_actions_programmatically.py -#### Category -core - -#### Description -It's possible to invoke any action programmatically, by using -either of those two: - - * ida_kernwin.execute_ui_requests() - * ida_kernwin.process_ui_action() - -Ideally, this script should be run through the "File > Script file..." -menu, so as to keep focus on "IDA View-A" and have the -'ProcessUiActions' part work as intended. - -#### Keywords -actions - -#### Uses -* ida_kernwin.ask_yn -* ida_kernwin.execute_ui_requests -* ida_kernwin.msg -* ida_kernwin.process_ui_action - -
- -
- -## Category: cvt64 - -#### py_cvt64_sample -
- This file contains the CVT64 examples. - -
- -#### Source code -cvt64/py_cvt64_sample.py - -#### Category -cvt64 - -#### Description -For more infortmation see SDK/plugins/cvt64_sample example - -#### Uses -* ida_idaapi.BADADDR -* ida_idaapi.BADADDR32 -* ida_netnode.atag -* ida_netnode.htag -* ida_netnode.stag - -
- -
- -## Category: debugging - -#### automatic_steps -
- Programmatically drive a debugging session - -
- -#### Source code -debugging/dbghooks/automatic_steps.py - -#### Category -debugging - -#### Description -Start a debugging session, step through the first five -instructions. Each instruction is disassembled after -execution. - -#### Keywords -DBG_Hooks - -#### Uses -* ida_dbg.DBG_Hooks -* ida_dbg.get_reg_val -* ida_dbg.request_exit_process -* ida_dbg.request_run_to -* ida_dbg.request_step_over -* ida_dbg.run_requests -* ida_ida.inf_get_start_ip -* ida_idaapi.BADADDR -* ida_lines.generate_disasm_line -* ida_lines.tag_remove - -
- -
- -#### dbg_trace -
- Using the low-level tracing hook - -
- -#### Source code -debugging/dbghooks/dbg_trace.py - -#### Category -debugging - -#### Description -This script demonstrates using the low-level tracing hook -(ida_dbg.DBG_Hooks.dbg_trace). It can be run like so: - - ida[t].exe -B -Sdbg_trace.py -Ltrace.log file.exe - -#### Keywords -DBG_Hooks - -#### Uses -* GENDSM_FORCE_CODE -* GENDSM_REMOVE_TAGS -* NN_call -* NN_callfi -* NN_callni -* generate_disasm_line -* ida_dbg.DBG_Hooks -* ida_dbg.ST_OVER_DEBUG_SEG -* ida_dbg.ST_OVER_LIB_FUNC -* ida_dbg.enable_step_trace -* ida_dbg.get_process_state -* ida_dbg.get_reg_val -* ida_dbg.get_step_trace_options -* ida_dbg.load_debugger -* ida_dbg.refresh_debugger_memory -* ida_dbg.request_continue_process -* ida_dbg.request_enable_step_trace -* ida_dbg.request_set_step_trace_options -* ida_dbg.run_requests -* ida_dbg.run_to -* ida_dbg.set_step_trace_options -* ida_dbg.wait_for_next_event -* ida_ida.f_ELF -* ida_ida.f_MACHO -* ida_ida.f_PE -* ida_ida.inf_get_filetype -* ida_ida.inf_get_max_ea -* ida_ida.inf_get_min_ea -* ida_ida.inf_get_start_ip -* ida_pro.qexit -* ida_ua.decode_insn -* ida_ua.insn_t -* idc.ARGV - -
- -
- -#### print_call_stack -
- Print call stack (on Linux) - -
- -#### Source code -debugging/misc/print_call_stack.py - -#### Category -debugging - -#### Description - Print the return addresses from the call stack at a breakpoint. - (and print also the module and the debug name from debugger) - -To use this example: - - * run `ida64` on test program `simple_appcall_linux64`, or - `ida` on test program `simple_appcall_linux32`, and wait for - auto-analysis to finish - * put a breakpoint where you want to see the call stack - * select the 'linux debugger' (either local, or remote) - * start debugging - * Press Shift+C at the breakpoint - -#### Shortcut -Shift+C - -#### Uses -* ida_dbg.collect_stack_trace -* ida_dbg.get_current_thread -* ida_dbg.get_module_info -* ida_idd.call_stack_t -* ida_idd.modinfo_t -* ida_kernwin.AST_ENABLE_ALWAYS -* ida_kernwin.action_desc_t -* ida_kernwin.register_action -* ida_name.GNCN_NOCOLOR -* ida_name.GNCN_NOLABEL -* ida_name.GNCN_NOSEG -* ida_name.GNCN_PREFDBG -* ida_name.get_nice_colored_name - -
- -
- -#### print_registers -
- Print all registers, for all threads - -
- -#### Source code -debugging/misc/print_registers.py - -#### Category -debugging - -#### Description - Iterate over the list of threads in the program being - debugged, and dump all registers contents - -To use this example: - - * run `ida64` on test program `simple_appcall_linux64`, or - `ida` on test program `simple_appcall_linux32`, and wait for - auto-analysis to finish - * put a breakpoint somewhere in the code - * select the 'linux debugger' (either local, or remote) - * start debugging - * Press Alt+Shift+C at the breakpoint - -#### Shortcut -Alt+Shift+C - -#### Uses -* ida_dbg.get_reg_vals -* ida_dbg.get_thread_qty -* ida_dbg.getn_thread -* ida_idd.get_dbg -* ida_kernwin.AST_ENABLE_ALWAYS -* ida_kernwin.action_desc_t -* ida_kernwin.register_action - -
- -
- -#### registers_context_menu -
- Adding actions to the "registers" widget(s) - -
- -#### Source code -debugging/misc/registers_context_menu.py - -#### Category -debugging - -#### Description -It's possible to add actions to the context menu of -pretty much all widgets in IDA. - -This example shows how to do just that for -registers-displaying widgets (e.g., "General registers") - -#### Keywords -ctxmenu UI_Hooks - -#### Uses -* ida_dbg.get_dbg_reg_info -* ida_dbg.get_reg_val -* ida_idd.register_info_t -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.BWN_CPUREGS -* ida_kernwin.UI_Hooks -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.attach_action_to_popup -* ida_kernwin.get_widget_type -* ida_kernwin.register_action -* ida_ua.dt_byte -* ida_ua.dt_dword -* ida_ua.dt_qword -* ida_ua.dt_word - -
- -
- -#### show_debug_names -
- Retrieving & dumping debuggee symbols - -
- -#### Source code -debugging/show_debug_names.py - -#### Category -debugging - -#### Description -Queries the debugger (possibly remotely) for the list of -symbols that the process being debugged, provides. - -#### Uses -* ida_dbg.DSTATE_SUSP -* ida_dbg.get_process_state -* ida_dbg.is_debugger_on -* ida_ida.inf_get_max_ea -* ida_ida.inf_get_min_ea -* ida_name.get_debug_names - -
- -
- -#### simple_appcall_linux -
- Executing code into the application being debugged (on Linux) - -
- -#### Source code -debugging/appcall/simple_appcall_linux.py - -#### Category -debugging - -#### Description -Using the `ida_idd.Appcall` utility to execute code in -the process being debugged. - -This example will run the test program and stop wherever -the cursor currently is, and then perform an appcall to -execute the `ref4` and `ref8` functions. - -To use this example: - - * run `ida64` on test program `simple_appcall_linux64`, or - `ida` on test program `simple_appcall_linux32`, and wait for - auto-analysis to finish - * select the 'linux debugger' (either local, or remote) - * run this script - -Note: the real body of code is in `simple_appcall_common.py`. - -#### Imports -* simple_appcall_common - -#### Uses -* ida_dbg.DBG_Hooks -* ida_dbg.run_to -* ida_idaapi.BADADDR -* ida_idd.Appcall -* ida_idd.Appcall.byref -* ida_idd.Appcall.int64 -* ida_kernwin.get_screen_ea -* ida_name.get_name_ea -* ida_name.set_name -* ida_typeinf.apply_cdecl - -
- -
- -#### simple_appcall_win -
- Executing code into the application being debugged (on Windows) - -
- -#### Source code -debugging/appcall/simple_appcall_win.py - -#### Category -debugging - -#### Description -Using the `ida_idd.Appcall` utility to execute code in -the process being debugged. - -This example will run the test program and stop wherever -the cursor currently is, and then perform an appcall to -execute the `ref4` and `ref8` functions. - -To use this example: - - * run `ida64` on test program `simple_appcall_win64.exe`, or - `ida` on test program `simple_appcall_win32.exe`, and wait for - auto-analysis to finish - * select the 'windows debugger' (either local, or remote) - * run this script - -Note: the real body of code is in `simple_appcall_common.py`. - -#### Imports -* simple_appcall_common - -#### Uses -* ida_dbg.DBG_Hooks -* ida_dbg.run_to -* ida_ida.inf_is_64bit -* ida_idaapi.BADADDR -* ida_idd.Appcall -* ida_idd.Appcall.byref -* ida_idd.Appcall.int64 -* ida_kernwin.get_screen_ea -* ida_name.get_name_ea -* ida_name.set_name -* ida_typeinf.apply_cdecl - -
- -
- -## Category: disassembly - -#### colorize_disassembly -
- Change background colours - -
- -#### Source code -core/colorize_disassembly.py - -#### Category -disassembly - -#### Description -This illustrates the setting/retrieval of background colours -using the IDC wrappers - -In order to do so, we'll be assigning colors to specific ranges -(item, function, or segment). Those will be persisted in the -database. - -#### Keywords -coloring idc - -#### Uses -* idc.CIC_FUNC -* idc.CIC_ITEM -* idc.CIC_SEGM -* idc.get_color -* idc.here -* idc.set_color - -#### See also -* [colorize_disassembly_on_the_fly](#colorize_disassembly_on_the_fly) - -
- -
- -## Category: hexrays - -#### colorize_pseudocode_lines -
- Interactively color certain pseudocode lines - -
- -#### Source code -hexrays/colorize_pseudocode_lines.py - -#### Category -hexrays - -#### Description +### Interactively color decompilation lines {#colorize_pseudocode_lines} Provides an action that can be used to dynamically alter the lines background rendering for pseudocode listings (as opposed to using `ida_hexrays.cfunc_t.pseudocode[N].bgcolor`) @@ -1576,151 +1893,63 @@ After running this script, pressing 'M' on a line in a "Pseudocode-?" widget, will cause that line to be rendered with a special background color. -#### Shortcut -M +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [colorize_pseudocode_lines.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/colorize_pseudocode_lines.py) | colors UI_Hooks | Intermediate | -#### Keywords -colors UI_Hooks +**APIs Used:** +* `ida_hexrays.get_widget_vdui` +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_PSEUDOCODE` +* `ida_kernwin.CK_EXTRA11` +* `ida_kernwin.UI_Hooks` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.get_custom_viewer_location` +* `ida_kernwin.line_rendering_output_entry_t` +* `ida_kernwin.refresh_custom_viewer` +* `ida_kernwin.register_action` +* `ida_moves.lochist_entry_t` -#### Uses -* ida_hexrays.get_widget_vdui -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.BWN_PSEUDOCODE -* ida_kernwin.CK_EXTRA11 -* ida_kernwin.UI_Hooks -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.get_custom_viewer_location -* ida_kernwin.line_rendering_output_entry_t -* ida_kernwin.refresh_custom_viewer -* ida_kernwin.register_action -* ida_moves.lochist_entry_t +*** -
-
- -#### curpos_details -
- A focus on the 'curpos' hook, printing additional details about user input - -
- -#### Source code -hexrays/curpos_details.py - -#### Category -hexrays - -#### Description -Shows how user input information can be retrieved during -processing of a notification triggered by that input - -#### Keywords -Hexrays_Hooks - -#### Uses -* ida_hexrays.Hexrays_Hooks -* ida_kernwin.get_user_input_event -* ida_kernwin.iek_key_press -* ida_kernwin.iek_key_release -* ida_kernwin.iek_mouse_button_press -* ida_kernwin.iek_mouse_button_release -* ida_kernwin.iek_mouse_wheel -* ida_kernwin.iek_shortcut -* ida_kernwin.input_event_t - -#### See also -* [vds_hooks](#vds_hooks) - -
- -
- -#### decompile_entry_points -
- Automatic decompilation of functions - -
- -#### Source code -hexrays/decompile_entry_points.py - -#### Category -hexrays - -#### Description +### Decompile entrypoint automatically {#decompile_entry_points} Attempts to load a decompiler plugin corresponding to the current -architecture (and address size) right after auto-analysis is performed, +architecture right after auto-analysis is performed, and then tries to decompile the function at the first entrypoint. It is particularly suited for use with the '-S' flag, for example: idat -Ldecompile.log -Sdecompile_entry_points.py -c file -#### Uses -* ida_auto.auto_wait -* ida_entry.get_entry -* ida_entry.get_entry_ordinal -* ida_entry.get_entry_qty -* ida_hexrays.decompile -* ida_hexrays.init_hexrays_plugin -* ida_ida.inf_is_64bit -* ida_idp.PLFM_386 -* ida_idp.PLFM_ARM -* ida_idp.PLFM_MIPS -* ida_idp.PLFM_PPC -* ida_idp.ph.id -* ida_kernwin.cvar.batch -* ida_kernwin.msg -* ida_loader.load_plugin -* ida_pro.qexit -* idc.get_idb_path +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [decompile_entry_points.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/decompile_entry_points.py) | | Intermediate | -
+**APIs Used:** +* `ida_auto.auto_wait` +* `ida_entry.get_entry` +* `ida_entry.get_entry_ordinal` +* `ida_entry.get_entry_qty` +* `ida_hexrays.decompile` +* `ida_hexrays.init_hexrays_plugin` +* `ida_idp.PLFM_386` +* `ida_idp.PLFM_ARM` +* `ida_idp.PLFM_MIPS` +* `ida_idp.PLFM_PPC` +* `ida_idp.PLFM_RISCV` +* `ida_idp.ph.id` +* `ida_kernwin.cvar.batch` +* `ida_kernwin.msg` +* `ida_loader.load_plugin` +* `ida_pro.qexit` +* `idc.get_idb_path` -
+*** -#### vds1 -
- Decompile & print current function. -
- -#### Source code -hexrays/vds1.py - -#### Category -hexrays - -#### Description -Decompile & print current function. - -#### Uses -* ida_funcs.get_func -* ida_hexrays.decompile -* ida_hexrays.get_hexrays_version -* ida_hexrays.init_hexrays_plugin -* ida_kernwin.get_screen_ea -* ida_lines.tag_remove - -
- -
- -#### vds10 -
- A custom microcode instruction optimization rule - -
- -#### Source code -hexrays/vds10.py - -#### Category -hexrays - -#### Description +### Add custom microcode instruction optimization rule {#vds10} Installs a custom microcode instruction optimization rule, to transform: @@ -1732,270 +1961,25 @@ into To see this plugin in action please use arm64_brk.i64 -#### Keywords -plugin +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds10.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds10.py) | plugin | Intermediate | -#### Uses -* ida_bytes.get_cmt -* ida_hexrays.init_hexrays_plugin -* ida_hexrays.mop_str -* ida_hexrays.optinsn_t -* ida_idaapi.PLUGIN_HIDE -* ida_idaapi.PLUGIN_KEEP -* ida_idaapi.plugin_t -* ida_typeinf.STI_PCCHAR -* ida_typeinf.tinfo_t.get_stock +**APIs Used:** +* `ida_bytes.get_cmt` +* `ida_hexrays.init_hexrays_plugin` +* `ida_hexrays.mop_str` +* `ida_hexrays.optinsn_t` +* `ida_idaapi.PLUGIN_HIDE` +* `ida_idaapi.PLUGIN_KEEP` +* `ida_idaapi.plugin_t` +* `ida_typeinf.STI_PCCHAR` +* `ida_typeinf.tinfo_t.get_stock` -
+*** -
-#### vds11 -
- A custom microcode block optimization rule (resolve `goto` chains) - -
- -#### Source code -hexrays/vds11.py - -#### Category -hexrays - -#### Description -Installs a custom microcode block optimization rule, -to transform: - - goto L1 - ... - L1: - goto L2 - -into - - goto L2 - -In other words we fix a goto target if it points to a chain of gotos. -This improves the decompiler output in some cases. - -#### Keywords -plugin - -#### Uses -* ida_hexrays.getf_reginsn -* ida_hexrays.init_hexrays_plugin -* ida_hexrays.m_goto -* ida_hexrays.optblock_t -* ida_idaapi.PLUGIN_HIDE -* ida_idaapi.PLUGIN_KEEP -* ida_idaapi.plugin_t - -
- -
- -#### vds12 -
- List instruction registers - -
- -#### Source code -hexrays/vds12.py - -#### Category -hexrays - -#### Description -Shows a list of direct references to a register from the -current instruction. - -#### Uses -* ida_bytes.get_flags -* ida_bytes.is_code -* ida_funcs.get_func -* ida_hexrays.ACFL_GUESS -* ida_hexrays.DECOMP_NO_CACHE -* ida_hexrays.DECOMP_WARNINGS -* ida_hexrays.GCO_DEF -* ida_hexrays.GCO_USE -* ida_hexrays.GC_REGS_AND_STKVARS -* ida_hexrays.MERR_OK -* ida_hexrays.MMAT_PREOPTIMIZED -* ida_hexrays.MUST_ACCESS -* ida_hexrays.gco_info_t -* ida_hexrays.gen_microcode -* ida_hexrays.get_current_operand -* ida_hexrays.get_merror_desc -* ida_hexrays.hexrays_failure_t -* ida_hexrays.init_hexrays_plugin -* ida_hexrays.mba_ranges_t -* ida_hexrays.mlist_t -* ida_hexrays.op_parent_info_t -* ida_hexrays.voff_t -* ida_kernwin.Choose -* ida_kernwin.get_screen_ea -* ida_kernwin.jumpto -* ida_kernwin.warning -* ida_lines.GENDSM_REMOVE_TAGS -* ida_lines.generate_disasm_line -* ida_pro.eavec_t - -
- -
- -#### vds13 -
- Generates microcode for selection - -
- -#### Source code -hexrays/vds13.py - -#### Category -hexrays - -#### Description -Generates microcode for selection and dumps it to the output window. - -#### Uses -* ida_bytes.get_flags -* ida_bytes.is_code -* ida_hexrays.DECOMP_WARNINGS -* ida_hexrays.gen_microcode -* ida_hexrays.hexrays_failure_t -* ida_hexrays.init_hexrays_plugin -* ida_hexrays.mba_ranges_t -* ida_hexrays.vd_printer_t -* ida_kernwin.read_range_selection -* ida_kernwin.warning -* ida_range.range_t - -
- -
- -#### vds17 -
- Using the "Select offsets" widget - -
- -#### Source code -hexrays/vds17.py - -#### Category -hexrays - -#### Description -Registers an action opens the "Select offsets" widget -(select_udt_by_offset() call). - -This effectively repeats the functionality already available -through Alt+Y. - -Place cursor on the union field and press Shift+T - -#### Shortcut -Shift+T - -#### Keywords -plugin - -#### Uses -* ida_hexrays.USE_KEYBOARD -* ida_hexrays.cot_add -* ida_hexrays.cot_cast -* ida_hexrays.cot_memptr -* ida_hexrays.cot_memref -* ida_hexrays.cot_num -* ida_hexrays.cot_ref -* ida_hexrays.get_hexrays_version -* ida_hexrays.get_widget_vdui -* ida_hexrays.init_hexrays_plugin -* ida_hexrays.select_udt_by_offset -* ida_hexrays.ui_stroff_applicator_t -* ida_hexrays.ui_stroff_ops_t -* ida_idaapi.BADADDR -* ida_idaapi.PLUGIN_HIDE -* ida_idaapi.PLUGIN_KEEP -* ida_idaapi.plugin_t -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.BWN_PSEUDOCODE -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.get_custom_viewer_curline -* ida_kernwin.msg -* ida_kernwin.register_action -* ida_kernwin.warning -* ida_lines.tag_remove -* ida_typeinf.PRTYPE_1LINE -* ida_typeinf.print_tinfo -* ida_typeinf.remove_pointer - -
- -
- -#### vds19 -
- A custom microcode instruction optimization rule (`x | ~x => -1`) - -
- -#### Source code -hexrays/vds19.py - -#### Category -hexrays - -#### Description -Installs a custom microcode instruction optimization rule, -to transform: - - x | ~x - -into - - -1 - -To see this plugin in action please use be_ornot_be.idb - -#### Keywords -plugin - -#### Uses -* ida_hexrays.init_hexrays_plugin -* ida_hexrays.m_bnot -* ida_hexrays.m_mov -* ida_hexrays.m_or -* ida_hexrays.minsn_visitor_t -* ida_hexrays.mop_t -* ida_hexrays.optinsn_t -* ida_idaapi.PLUGIN_HIDE -* ida_idaapi.PLUGIN_KEEP -* ida_idaapi.plugin_t - -
- -
- -#### vds21 -
- Dynamically provide a custom call type - -
- -#### Source code -hexrays/vds21.py - -#### Category -hexrays - -#### Description +### Dynamically provide a custom call type {#vds21} This plugin can greatly improve decompilation of indirect calls: call [eax+4] @@ -2017,43 +2001,337 @@ This plugin illustrates another approach to the problem: if you happen to be able to calculate the call prototypes dynamically, this is how to inform the decompiler about them. -#### Keywords -Hexrays_Hooks plugin +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds21.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds21.py) | Hexrays_Hooks plugin | Intermediate | -#### Uses -* ida_hexrays.Hexrays_Hooks -* ida_hexrays.init_hexrays_plugin -* ida_hexrays.m_call -* ida_hexrays.mcallinfo_t -* ida_idaapi.PLUGIN_HIDE -* ida_idaapi.PLUGIN_KEEP -* ida_idaapi.plugin_t -* ida_kernwin.msg -* ida_kernwin.warning -* ida_nalt.get_op_tinfo -* ida_typeinf.BT_INT -* ida_typeinf.CM_CC_STDCALL -* ida_typeinf.CM_N32_F48 -* ida_typeinf.parse_decl -* ida_typeinf.tinfo_t +**APIs Used:** +* `ida_hexrays.Hexrays_Hooks` +* `ida_hexrays.init_hexrays_plugin` +* `ida_hexrays.m_call` +* `ida_hexrays.mcallinfo_t` +* `ida_idaapi.PLUGIN_HIDE` +* `ida_idaapi.PLUGIN_KEEP` +* `ida_idaapi.plugin_t` +* `ida_kernwin.msg` +* `ida_kernwin.warning` +* `ida_nalt.get_op_tinfo` +* `ida_typeinf.BT_INT` +* `ida_typeinf.CM_CC_STDCALL` +* `ida_typeinf.CM_N32_F48` +* `ida_typeinf.parse_decl` +* `ida_typeinf.tinfo_t` -
+*** -
-#### vds3 -
- Invert if/else blocks +### Dump user-defined information for a function {#vds4} +Prints user-defined information to the "Output" window. +Namely: -
+ * user defined label names + * user defined indented comments + * user defined number formats + * user defined local variable names, types, comments -#### Source code -hexrays/vds3.py +This script loads information from the database without decompiling anything. -#### Category -hexrays +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds4.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds4.py) | | Intermediate | -#### Description +**APIs Used:** +* `ida_bytes.get_radix` +* `ida_funcs.get_func` +* `ida_hexrays.CIT_COLLAPSED` +* `ida_hexrays.NF_NEGATE` +* `ida_hexrays.init_hexrays_plugin` +* `ida_hexrays.lvar_uservec_t` +* `ida_hexrays.restore_user_cmts` +* `ida_hexrays.restore_user_iflags` +* `ida_hexrays.restore_user_labels` +* `ida_hexrays.restore_user_lvar_settings` +* `ida_hexrays.restore_user_numforms` +* `ida_hexrays.user_cmts_free` +* `ida_hexrays.user_iflags_free` +* `ida_hexrays.user_labels_free` +* `ida_hexrays.user_numforms_free` +* `ida_kernwin.get_screen_ea` + +*** + + +### Superficially modify the decompilation output {#vds6} +Modifies the decompilation output in a superficial manner, +by removing some white spaces + +Note: this is rather crude, not quite "pythonic" code. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds6.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds6.py) | Hexrays_Hooks plugin | Intermediate | + +**APIs Used:** +* `ida_hexrays.Hexrays_Hooks` +* `ida_hexrays.init_hexrays_plugin` +* `ida_idaapi.PLUGIN_HIDE` +* `ida_idaapi.PLUGIN_KEEP` +* `ida_idaapi.plugin_t` +* `ida_lines.tag_advance` +* `ida_lines.tag_skipcodes` + +*** + + +### Improve decompilation by turning specific patterns into custom function calls {#vds8} +Registers an action that uses a `ida_hexrays.udc_filter_t` to decompile +`svc 0x900001` and `svc 0x9000F8` as function calls to +`svc_exit()` and `svc_exit_group()` respectively. + +You will need to have an ARM + Linux IDB for this script to be usable + +In addition to having a shortcut, the action will be present +in the context menu. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds8.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds8.py) | ctxmenu UI_Hooks | Intermediate | + +**APIs Used:** +* `ida_allins.ARM_svc` +* `ida_hexrays.get_widget_vdui` +* `ida_hexrays.init_hexrays_plugin` +* `ida_hexrays.install_microcode_filter` +* `ida_hexrays.udc_filter_t` +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_PSEUDOCODE` +* `ida_kernwin.UI_Hooks` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.attach_action_to_popup` +* `ida_kernwin.get_widget_type` +* `ida_kernwin.register_action` + +*** + + +### React to decompiler events/notifications {#vds_hooks} +Shows how to hook to many notifications sent by the decompiler. + +This plugin doesn't really accomplish anything: it just prints +the parameters. + +The list of notifications handled below should be exhaustive, +and is there to hint at what is possible to accomplish by +subclassing `ida_hexrays.Hexrays_Hooks` + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds_hooks.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds_hooks.py) | Hexrays_Hooks | Intermediate | + +**APIs Used:** +* `ida_hexrays.Hexrays_Hooks` +* `ida_hexrays.cfunc_t` +* `ida_hexrays.lvar_t` +* `ida_hexrays.vdui_t` + +*** + + +### Modifying function local variables {#vds_modify_user_lvars} +Use a `ida_hexrays.user_lvar_modifier_t` to modify names, +comments and/or types of local variables. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds_modify_user_lvars.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds_modify_user_lvars.py) | | Intermediate | + +**APIs Used:** +* `ida_hexrays.modify_user_lvars` +* `ida_hexrays.user_lvar_modifier_t` +* `ida_typeinf.parse_decl` +* `idc.here` + +*** + + +### Print information about the current position in decompilation {#curpos_details} +Shows how user input information can be retrieved during +processing of a notification triggered by that input + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [curpos_details.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/curpos_details.py) | Hexrays_Hooks | Advanced | + +**APIs Used:** +* `ida_hexrays.Hexrays_Hooks` +* `ida_kernwin.get_user_input_event` +* `ida_kernwin.iek_key_press` +* `ida_kernwin.iek_key_release` +* `ida_kernwin.iek_mouse_button_press` +* `ida_kernwin.iek_mouse_button_release` +* `ida_kernwin.iek_mouse_wheel` +* `ida_kernwin.iek_shortcut` +* `ida_kernwin.input_event_t` + +*** + + +### Add a custom microcode block optimization rule {#vds11} +Installs a custom microcode block optimization rule, +to transform: + + goto L1 + ... + L1: + goto L2 + +into + + goto L2 + +In other words we fix a goto target if it points to a chain of gotos. +This improves the decompiler output in some cases. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds11.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds11.py) | plugin | Advanced | + +**APIs Used:** +* `ida_hexrays.getf_reginsn` +* `ida_hexrays.init_hexrays_plugin` +* `ida_hexrays.m_goto` +* `ida_hexrays.optblock_t` +* `ida_idaapi.PLUGIN_HIDE` +* `ida_idaapi.PLUGIN_KEEP` +* `ida_idaapi.plugin_t` + +*** + + +### List instruction registers {#vds12} +Shows a list of direct references to a register from the +current instruction. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds12.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds12.py) | | Advanced | + +**APIs Used:** +* `ida_bytes.get_flags` +* `ida_bytes.is_code` +* `ida_funcs.get_func` +* `ida_hexrays.ACFL_GUESS` +* `ida_hexrays.DECOMP_NO_CACHE` +* `ida_hexrays.DECOMP_WARNINGS` +* `ida_hexrays.GCO_DEF` +* `ida_hexrays.GCO_USE` +* `ida_hexrays.GC_REGS_AND_STKVARS` +* `ida_hexrays.MERR_OK` +* `ida_hexrays.MMAT_PREOPTIMIZED` +* `ida_hexrays.MUST_ACCESS` +* `ida_hexrays.gco_info_t` +* `ida_hexrays.gen_microcode` +* `ida_hexrays.get_current_operand` +* `ida_hexrays.get_merror_desc` +* `ida_hexrays.hexrays_failure_t` +* `ida_hexrays.init_hexrays_plugin` +* `ida_hexrays.mba_ranges_t` +* `ida_hexrays.mlist_t` +* `ida_hexrays.op_parent_info_t` +* `ida_hexrays.voff_t` +* `ida_kernwin.Choose` +* `ida_kernwin.get_screen_ea` +* `ida_kernwin.jumpto` +* `ida_kernwin.warning` +* `ida_lines.GENDSM_REMOVE_TAGS` +* `ida_lines.generate_disasm_line` +* `ida_pro.eavec_t` + +*** + + +### Invoke the structure offset-choosing dialog from decompilation {#vds17} +Registers an action opens the "Select offsets" widget +(select_udt_by_offset() call). + +This effectively repeats the functionality already available +through Alt+Y. + +Place cursor on the union field and press Shift+T + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds17.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds17.py) | plugin | Advanced | + +**APIs Used:** +* `ida_hexrays.USE_KEYBOARD` +* `ida_hexrays.cot_add` +* `ida_hexrays.cot_cast` +* `ida_hexrays.cot_memptr` +* `ida_hexrays.cot_memref` +* `ida_hexrays.cot_num` +* `ida_hexrays.cot_ref` +* `ida_hexrays.get_hexrays_version` +* `ida_hexrays.get_widget_vdui` +* `ida_hexrays.init_hexrays_plugin` +* `ida_hexrays.select_udt_by_offset` +* `ida_hexrays.ui_stroff_applicator_t` +* `ida_hexrays.ui_stroff_ops_t` +* `ida_idaapi.BADADDR` +* `ida_idaapi.PLUGIN_HIDE` +* `ida_idaapi.PLUGIN_KEEP` +* `ida_idaapi.plugin_t` +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_PSEUDOCODE` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.get_custom_viewer_curline` +* `ida_kernwin.msg` +* `ida_kernwin.register_action` +* `ida_kernwin.warning` +* `ida_lines.tag_remove` +* `ida_typeinf.PRTYPE_1LINE` +* `ida_typeinf.print_tinfo` +* `ida_typeinf.remove_pointer` + +*** + + +### Add a custom microcode instruction optimization rule {#vds19} +Installs a custom microcode instruction optimization rule, +to transform: + + x | ~x + +into + + -1 + +To see this plugin in action please use be_ornot_be.idb + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds19.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds19.py) | plugin | Advanced | + +**APIs Used:** +* `ida_hexrays.init_hexrays_plugin` +* `ida_hexrays.m_bnot` +* `ida_hexrays.m_mov` +* `ida_hexrays.m_or` +* `ida_hexrays.minsn_visitor_t` +* `ida_hexrays.mop_t` +* `ida_hexrays.optinsn_t` +* `ida_idaapi.PLUGIN_HIDE` +* `ida_idaapi.PLUGIN_KEEP` +* `ida_idaapi.plugin_t` + +*** + + +### Invert if/else blocks in decompilation {#vds3} Registers an action that can be used to invert the `if` and `else` blocks of a `ida_hexrays.cif_t`. @@ -2082,108 +2360,42 @@ will be displayed as The modifications are persistent: the user can quit & restart IDA, and the changes will be present. -#### Shortcut -I +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds3.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds3.py) | ctxmenu Hexrays_Hooks IDP_Hooks plugin | Advanced | -#### Keywords -ctxmenu Hexrays_Hooks IDP_Hooks plugin +**APIs Used:** +* `ida_hexrays.CMAT_FINAL` +* `ida_hexrays.CV_FAST` +* `ida_hexrays.CV_INSNS` +* `ida_hexrays.Hexrays_Hooks` +* `ida_hexrays.ITP_ELSE` +* `ida_hexrays.USE_KEYBOARD` +* `ida_hexrays.VDI_TAIL` +* `ida_hexrays.cexpr_t` +* `ida_hexrays.cit_if` +* `ida_hexrays.ctree_visitor_t` +* `ida_hexrays.get_widget_vdui` +* `ida_hexrays.init_hexrays_plugin` +* `ida_hexrays.lnot` +* `ida_hexrays.qswap` +* `ida_idaapi.PLUGIN_HIDE` +* `ida_idaapi.PLUGIN_KEEP` +* `ida_idaapi.plugin_t` +* `ida_idp.IDP_Hooks` +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_PSEUDOCODE` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.attach_action_to_popup` +* `ida_kernwin.register_action` +* `ida_netnode.netnode` -#### Uses -* ida_hexrays.CMAT_FINAL -* ida_hexrays.CV_FAST -* ida_hexrays.CV_INSNS -* ida_hexrays.Hexrays_Hooks -* ida_hexrays.ITP_ELSE -* ida_hexrays.USE_KEYBOARD -* ida_hexrays.VDI_TAIL -* ida_hexrays.cexpr_t -* ida_hexrays.cit_if -* ida_hexrays.ctree_visitor_t -* ida_hexrays.get_widget_vdui -* ida_hexrays.init_hexrays_plugin -* ida_hexrays.lnot -* ida_hexrays.qswap -* ida_idaapi.PLUGIN_HIDE -* ida_idaapi.PLUGIN_KEEP -* ida_idaapi.plugin_t -* ida_idp.IDP_Hooks -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.BWN_PSEUDOCODE -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.attach_action_to_popup -* ida_kernwin.register_action -* ida_netnode.netnode +*** -#### Author -EiNSTeiN_ (einstein@g3nius.org) -
- -
- -#### vds4 -
- Dump user-defined information - -
- -#### Source code -hexrays/vds4.py - -#### Category -hexrays - -#### Description -Prints user-defined information to the "Output" window. -Namely: - - * user defined label names - * user defined indented comments - * user defined number formats - * user defined local variable names, types, comments - -This script loads information from the database without decompiling anything. - -#### Uses -* ida_bytes.get_radix -* ida_funcs.get_func -* ida_hexrays.CIT_COLLAPSED -* ida_hexrays.NF_NEGATE -* ida_hexrays.init_hexrays_plugin -* ida_hexrays.lvar_uservec_t -* ida_hexrays.restore_user_cmts -* ida_hexrays.restore_user_iflags -* ida_hexrays.restore_user_labels -* ida_hexrays.restore_user_lvar_settings -* ida_hexrays.restore_user_numforms -* ida_hexrays.user_cmts_free -* ida_hexrays.user_iflags_free -* ida_hexrays.user_labels_free -* ida_hexrays.user_numforms_free -* ida_kernwin.get_screen_ea - -#### Author -EiNSTeiN_ (einstein@g3nius.org) - -
- -
- -#### vds5 -
- Show ctree graph - -
- -#### Source code -hexrays/vds5.py - -#### Category -hexrays - -#### Description +### Dump C-tree graph {#vds5} Registers an action that can be used to show the graph of the ctree. The current item will be highlighted in the graph. @@ -2193,533 +2405,1153 @@ to the context menu. To display the graph, we produce a .gdl file, and request that ida displays that using `ida_gdl.display_gdl`. -#### Shortcut -Ctrl+Shift+G - -#### Keywords -ctxmenu Hexrays_Hooks plugin - -#### Uses -* ida_gdl.display_gdl -* ida_hexrays.Hexrays_Hooks -* ida_hexrays.USE_KEYBOARD -* ida_hexrays.cit_asm -* ida_hexrays.cit_goto -* ida_hexrays.cot_helper -* ida_hexrays.cot_memptr -* ida_hexrays.cot_memref -* ida_hexrays.cot_num -* ida_hexrays.cot_obj -* ida_hexrays.cot_ptr -* ida_hexrays.cot_str -* ida_hexrays.cot_var -* ida_hexrays.ctree_parentee_t -* ida_hexrays.get_ctype_name -* ida_hexrays.get_widget_vdui -* ida_hexrays.init_hexrays_plugin -* ida_idaapi.PLUGIN_HIDE -* ida_idaapi.PLUGIN_KEEP -* ida_idaapi.plugin_t -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.BWN_PSEUDOCODE -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.attach_action_to_popup -* ida_kernwin.register_action -* ida_kernwin.warning -* ida_lines.tag_remove -* ida_pro.str2user - -
- -
- -#### vds6 -
- Superficially modify the decompilation output - -
- -#### Source code -hexrays/vds6.py - -#### Category -hexrays - -#### Description -Modifies the decompilation output in a superficial manner, -by removing some white spaces - -Note: this is rather crude, not quite "pythonic" code. - -#### Keywords -Hexrays_Hooks plugin - -#### Uses -* ida_hexrays.Hexrays_Hooks -* ida_hexrays.init_hexrays_plugin -* ida_idaapi.PLUGIN_HIDE -* ida_idaapi.PLUGIN_KEEP -* ida_idaapi.plugin_t -* ida_lines.tag_advance -* ida_lines.tag_skipcodes - -
- -
- -#### vds7 -
- Iterate a cblock_t object - -
- -#### Source code -hexrays/vds7.py - -#### Category -hexrays - -#### Description -Using a `ida_hexrays.ctree_visitor_t`, search for -`ida_hexrays.cit_block` instances and dump them. - -#### Keywords -Hexrays_Hooks - -#### Uses -* ida_hexrays.CMAT_BUILT -* ida_hexrays.CV_FAST -* ida_hexrays.Hexrays_Hooks -* ida_hexrays.cit_block -* ida_hexrays.ctree_visitor_t -* ida_hexrays.init_hexrays_plugin - -#### Author -EiNSTeiN_ (einstein@g3nius.org) - -
- -
- -#### vds8 -
- Using `ida_hexrays.udc_filter_t` - -
- -#### Source code -hexrays/vds8.py - -#### Category -hexrays - -#### Description -Registers an action that uses a `ida_hexrays.udc_filter_t` to decompile -`svc 0x900001` and `svc 0x9000F8` as function calls to -`svc_exit()` and `svc_exit_group()` respectively. - -You will need to have an ARM + Linux IDB for this script to be usable - -In addition to having a shortcut, the action will be present -in the context menu. - -#### Shortcut -Ctrl+Shift+U - -#### Keywords -ctxmenu UI_Hooks - -#### Uses -* ida_allins.ARM_svc -* ida_hexrays.get_widget_vdui -* ida_hexrays.init_hexrays_plugin -* ida_hexrays.install_microcode_filter -* ida_hexrays.udc_filter_t -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.BWN_PSEUDOCODE -* ida_kernwin.UI_Hooks -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.attach_action_to_popup -* ida_kernwin.get_widget_type -* ida_kernwin.register_action - -
- -
- -#### vds_create_hint -
- Decompiler hints - -
- -#### Source code -hexrays/vds_create_hint.py - -#### Category -hexrays - -#### Description -Handle `ida_hexrays.hxe_create_hint` notification using hooks, -to return our own. - -If the object under the cursor is: - -* a function call, prefix the original decompiler hint with `==> ` -* a local variable declaration, replace the hint with our own in - the form of `!{varname}` (where `{varname}` is replaced with the - variable name) -* an `if` statement, replace the hint with our own, saying "condition" - -#### Keywords -Hexrays_Hooks - -#### Uses -* ida_hexrays.Hexrays_Hooks -* ida_hexrays.USE_MOUSE -* ida_hexrays.VDI_EXPR -* ida_hexrays.VDI_LVAR -* ida_hexrays.cit_if -* ida_hexrays.cot_call - -
- -
- -#### vds_hooks -
- Various decompiler hooks - -
- -#### Source code -hexrays/vds_hooks.py - -#### Category -hexrays - -#### Description -Shows how to hook to many notifications sent by the decompiler. - -This plugin doesn't really accomplish anything: it just prints -the parameters. - -The list of notifications handled below should be exhaustive, -and is there to hint at what is possible to accomplish by -subclassing `ida_hexrays.Hexrays_Hooks` - -#### Keywords -Hexrays_Hooks - -#### Uses -* ida_hexrays.Hexrays_Hooks -* ida_hexrays.cfunc_t -* ida_hexrays.lvar_t -* ida_hexrays.vdui_t - -#### See also -* [curpos_details](#curpos_details) - -
- -
- -#### vds_modify_user_lvars -
- Modifying local variables - -
- -#### Source code -hexrays/vds_modify_user_lvars.py - -#### Category -hexrays - -#### Description -Use a `ida_hexrays.user_lvar_modifier_t` to modify names, -comments and/or types of local variables. - -#### Uses -* ida_hexrays.modify_user_lvars -* ida_hexrays.user_lvar_modifier_t -* ida_typeinf.parse_decl -* idc.here - -
- -
- -#### vds_xrefs -
- Show decompiler xrefs - -
- -#### Source code -hexrays/vds_xrefs.py - -#### Category -hexrays - -#### Description +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds5.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds5.py) | ctxmenu Hexrays_Hooks plugin | Advanced | + +**APIs Used:** +* `ida_gdl.display_gdl` +* `ida_hexrays.Hexrays_Hooks` +* `ida_hexrays.USE_KEYBOARD` +* `ida_hexrays.cit_asm` +* `ida_hexrays.cit_goto` +* `ida_hexrays.cot_helper` +* `ida_hexrays.cot_memptr` +* `ida_hexrays.cot_memref` +* `ida_hexrays.cot_num` +* `ida_hexrays.cot_obj` +* `ida_hexrays.cot_ptr` +* `ida_hexrays.cot_str` +* `ida_hexrays.cot_var` +* `ida_hexrays.ctree_parentee_t` +* `ida_hexrays.get_ctype_name` +* `ida_hexrays.get_widget_vdui` +* `ida_hexrays.init_hexrays_plugin` +* `ida_idaapi.PLUGIN_HIDE` +* `ida_idaapi.PLUGIN_KEEP` +* `ida_idaapi.plugin_t` +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_PSEUDOCODE` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.attach_action_to_popup` +* `ida_kernwin.register_action` +* `ida_kernwin.warning` +* `ida_lines.tag_remove` +* `ida_pro.str2user` + +*** + + +### Show decompiler cross-references {#vds_xrefs} Show decompiler-style Xref when the `Ctrl+X` key is pressed in the Decompiler window. * supports any global name: functions, strings, integers, ... * supports structure member. -#### Shortcut -Ctrl+X +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [vds_xrefs.py](https://github.com/HexRaysSA/IDAPython/tree//examples/decompiler/vds_xrefs.py) | ctxmenu Hexrays_Hooks | Advanced | -#### Keywords -ctxmenu Hexrays_Hooks +**APIs Used:** +* `ida_funcs.get_func_name` +* `ida_hexrays.DECOMP_GXREFS_FORCE` +* `ida_hexrays.Hexrays_Hooks` +* `ida_hexrays.USE_KEYBOARD` +* `ida_hexrays.VDI_EXPR` +* `ida_hexrays.VDI_FUNC` +* `ida_hexrays.cexpr_t` +* `ida_hexrays.cfunc_t` +* `ida_hexrays.cinsn_t` +* `ida_hexrays.decompile` +* `ida_hexrays.get_widget_vdui` +* `ida_hexrays.init_hexrays_plugin` +* `ida_hexrays.open_pseudocode` +* `ida_hexrays.qstring_printer_t` +* `ida_idaapi.BADADDR` +* `ida_kernwin.AST_DISABLE` +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE` +* `ida_kernwin.BWN_PSEUDOCODE` +* `ida_kernwin.PluginForm` +* `ida_kernwin.PluginForm.Show` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.attach_action_to_popup` +* `ida_kernwin.register_action` +* `ida_typeinf.PRTYPE_1LINE` +* `ida_typeinf.STRMEM_OFFSET` +* `ida_typeinf.print_tinfo` +* `ida_typeinf.tinfo_t` +* `ida_typeinf.udm_t` +* `idautils.Functions` +* `idautils.XrefsTo` -#### Uses -* ida_funcs.get_func_name -* ida_hexrays.DECOMP_GXREFS_FORCE -* ida_hexrays.Hexrays_Hooks -* ida_hexrays.USE_KEYBOARD -* ida_hexrays.VDI_EXPR -* ida_hexrays.VDI_FUNC -* ida_hexrays.cexpr_t -* ida_hexrays.cfunc_t -* ida_hexrays.cinsn_t -* ida_hexrays.decompile -* ida_hexrays.get_widget_vdui -* ida_hexrays.init_hexrays_plugin -* ida_hexrays.open_pseudocode -* ida_hexrays.qstring_printer_t -* ida_idaapi.BADADDR -* ida_kernwin.AST_DISABLE -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE -* ida_kernwin.BWN_PSEUDOCODE -* ida_kernwin.PluginForm -* ida_kernwin.PluginForm.Show -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.attach_action_to_popup -* ida_kernwin.register_action -* ida_typeinf.PRTYPE_1LINE -* ida_typeinf.STRMEM_OFFSET -* ida_typeinf.print_tinfo -* ida_typeinf.tinfo_t -* ida_typeinf.udm_t -* idautils.Functions -* idautils.XrefsTo +*** -#### Author -EiNSTeiN_ (einstein@g3nius.org) -
+### Print all registers, for all threads in the debugged process {#print_registers} +Iterate over the list of threads in the program being +debugged, and dump all registers contents -
+To use this example: -## Category: idbhooks + * run `ida64` on test program `simple_appcall_linux64`, or + `ida` on test program `simple_appcall_linux32`, and wait for + auto-analysis to finish + * put a breakpoint somewhere in the code + * select the 'linux debugger' (either local, or remote) + * start debugging + * Press Alt+Shift+C at the breakpoint -#### log_idb_events -
- Logging IDB events +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [print_registers.py](https://github.com/HexRaysSA/IDAPython/tree//examples/debugger/misc/print_registers.py) | | Beginner | -
+**APIs Used:** +* `ida_dbg.get_reg_vals` +* `ida_dbg.get_thread_qty` +* `ida_dbg.getn_thread` +* `ida_idd.get_dbg` +* `ida_kernwin.AST_ENABLE_ALWAYS` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.register_action` -#### Source code -idbhooks/log_idb_events.py +*** -#### Category -idbhooks -#### Description -These hooks will be notified about IDB events, and -dump their information to the "Output" window +### Dump symbols from a process being debugged {#show_debug_names} +Queries the debugger (possibly remotely) for the list of +symbols that the process being debugged, provides. -#### Keywords -IDB_Hooks +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [show_debug_names.py](https://github.com/HexRaysSA/IDAPython/tree//examples/debugger/show_debug_names.py) | | Beginner | -#### Uses -* ida_idp.IDB_Hooks +**APIs Used:** +* `ida_dbg.DSTATE_SUSP` +* `ida_dbg.get_process_state` +* `ida_dbg.is_debugger_on` +* `ida_ida.inf_get_max_ea` +* `ida_ida.inf_get_min_ea` +* `ida_name.get_debug_names` -
+*** -
-#### operand_changed -
- Notify the user when an instruction operand changes +### Print call stack {#print_call_stack} +Print the return addresses from the call stack at a breakpoint, +when debugging a Linux binary. +(and also print the module and the debug name from debugger) -
+To use this example: -#### Source code -idbhooks/operand_changed.py + * run `ida` on test program `simple_appcall_linux64`, or + `ida` on test program `simple_appcall_linux32`, and wait for + auto-analysis to finish + * put a breakpoint where you want to see the call stack + * select the 'linux debugger' (either local, or remote) + * start debugging + * Press Shift+C at the breakpoint -#### Category -idbhooks +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [print_call_stack.py](https://github.com/HexRaysSA/IDAPython/tree//examples/debugger/misc/print_call_stack.py) | | Intermediate | -#### Description -Show notifications whenever the user changes -an instruction's operand, or a data item. +**APIs Used:** +* `ida_dbg.collect_stack_trace` +* `ida_dbg.get_current_thread` +* `ida_dbg.get_module_info` +* `ida_idd.call_stack_t` +* `ida_idd.modinfo_t` +* `ida_kernwin.AST_ENABLE_ALWAYS` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.register_action` +* `ida_name.GNCN_NOCOLOR` +* `ida_name.GNCN_NOLABEL` +* `ida_name.GNCN_NOSEG` +* `ida_name.GNCN_PREFDBG` +* `ida_name.get_nice_colored_name` -#### Keywords -IDB_Hooks +*** -#### Uses -* ida_bytes.ALOPT_IGNCLT -* ida_bytes.ALOPT_IGNHEADS -* ida_bytes.get_flags -* ida_bytes.get_max_strlit_length -* ida_bytes.get_opinfo -* ida_bytes.get_strlit_contents -* ida_bytes.is_custfmt -* ida_bytes.is_custom -* ida_bytes.is_enum -* ida_bytes.is_off -* ida_bytes.is_strlit -* ida_bytes.is_stroff -* ida_bytes.is_struct -* ida_idp.IDB_Hooks -* ida_nalt.STRENC_DEFAULT -* ida_nalt.get_default_encoding_idx -* ida_nalt.get_encoding_name -* ida_nalt.get_str_encoding_idx -* ida_nalt.get_strtype_bpu -* ida_nalt.opinfo_t -* ida_typeinf.get_tid_name -* ida_typeinf.tinfo_t -
+### Add a custom action to the "registers" widget {#registers_context_menu} +It's possible to add actions to the context menu of +pretty much all widgets in IDA. -
+This example shows how to do just that for +registers-displaying widgets (e.g., "General registers") -#### replay_prototypes_changes -
- Record and replay changes in function prototypes +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [registers_context_menu.py](https://github.com/HexRaysSA/IDAPython/tree//examples/debugger/misc/registers_context_menu.py) | ctxmenu UI_Hooks | Intermediate | -
+**APIs Used:** +* `ida_dbg.get_dbg_reg_info` +* `ida_dbg.get_reg_val` +* `ida_idd.register_info_t` +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_CPUREGS` +* `ida_kernwin.UI_Hooks` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.attach_action_to_popup` +* `ida_kernwin.get_widget_type` +* `ida_kernwin.register_action` +* `ida_ua.dt_byte` +* `ida_ua.dt_dword` +* `ida_ua.dt_qword` +* `ida_ua.dt_word` -#### Source code -idbhooks/replay_prototypes_changes.py +*** -#### Category -idbhooks -#### Description -This is a sample script, that will record (in memory) all changes in -functions prototypes, in order to re-apply them later. +### Programmatically drive a debugging session {#automatic_steps} +Start a debugging session, step through the first five +instructions. Each instruction is disassembled after +execution. -To use this script: - - open an IDB (say, "test.idb") - - modify some functions prototypes (e.g., by triggering the 'Y' - shortcut when the cursor is placed on the first address of a - function) - - reload that IDB, *without saving it first* - - call rpc.replay(), to re-apply the modifications. +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [automatic_steps.py](https://github.com/HexRaysSA/IDAPython/tree//examples/debugger/dbghooks/automatic_steps.py) | DBG_Hooks | Advanced | -Note: 'ti_changed' is also called for changes to the function -frames, but we'll only record function prototypes changes. +**APIs Used:** +* `ida_dbg.DBG_Hooks` +* `ida_dbg.get_reg_val` +* `ida_dbg.request_exit_process` +* `ida_dbg.request_run_to` +* `ida_dbg.request_step_over` +* `ida_dbg.run_requests` +* `ida_ida.inf_get_start_ip` +* `ida_idaapi.BADADDR` +* `ida_lines.generate_disasm_line` +* `ida_lines.tag_remove` -#### Keywords -IDB_Hooks +*** -#### Uses -* ida_funcs.get_func -* ida_idp.IDB_Hooks -* ida_typeinf.PRTYPE_1LINE -* ida_typeinf.TINFO_DEFINITE -* ida_typeinf.apply_tinfo -* ida_typeinf.get_idati -* ida_typeinf.tinfo_t -
+### React to trace notifications {#dbg_trace} +This script demonstrates using the low-level tracing hook +(ida_dbg.DBG_Hooks.dbg_trace). It can be run like so: -
+ ida.exe -B -Sdbg_trace.py -Ltrace.log file.exe -## Category: idphooks +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [dbg_trace.py](https://github.com/HexRaysSA/IDAPython/tree//examples/debugger/dbghooks/dbg_trace.py) | DBG_Hooks | Advanced | -#### ana_emu_out -
- Override some parts of the processor module +**APIs Used:** +* `GENDSM_FORCE_CODE` +* `GENDSM_REMOVE_TAGS` +* `NN_call` +* `NN_callfi` +* `NN_callni` +* `generate_disasm_line` +* `ida_dbg.DBG_Hooks` +* `ida_dbg.ST_OVER_DEBUG_SEG` +* `ida_dbg.ST_OVER_LIB_FUNC` +* `ida_dbg.enable_step_trace` +* `ida_dbg.get_process_state` +* `ida_dbg.get_reg_val` +* `ida_dbg.get_step_trace_options` +* `ida_dbg.load_debugger` +* `ida_dbg.refresh_debugger_memory` +* `ida_dbg.request_continue_process` +* `ida_dbg.request_enable_step_trace` +* `ida_dbg.request_set_step_trace_options` +* `ida_dbg.run_requests` +* `ida_dbg.run_to` +* `ida_dbg.set_step_trace_options` +* `ida_dbg.wait_for_next_event` +* `ida_ida.f_ELF` +* `ida_ida.f_MACHO` +* `ida_ida.f_PE` +* `ida_ida.inf_get_filetype` +* `ida_ida.inf_get_max_ea` +* `ida_ida.inf_get_min_ea` +* `ida_ida.inf_get_start_ip` +* `ida_pro.qexit` +* `ida_ua.decode_insn` +* `ida_ua.insn_t` +* `idc.ARGV` -
+*** -#### Source code -idphooks/ana_emu_out.py -#### Category -idphooks +### Execute code into the application being debugged (on Linux) {#simple_appcall_linux} +Using the `ida_idd.Appcall` utility to execute code in +the process being debugged. -#### Description -Implements disassembly of BUG_INSTR used in Linux kernel -BUG() macro, which is architecturally undefined and is not -disassembled by IDA's ARM module +This example will run the test program and stop wherever +the cursor currently is, and then perform an appcall to +execute the `ref4` and `ref8` functions. -See Linux/arch/arm/include/asm/bug.h for more info +To use this example: -#### Keywords -IDP_Hooks + * run `ida64` on test program `simple_appcall_linux64`, or + `ida` on test program `simple_appcall_linux32`, and wait for + auto-analysis to finish + * select the 'linux debugger' (either local, or remote) + * run this script -#### Uses -* ida_bytes.get_wide_dword -* ida_bytes.get_wide_word -* ida_idp.CUSTOM_INSN_ITYPE -* ida_idp.IDP_Hooks -* ida_idp.PLFM_ARM -* ida_idp.ph.id -* ida_idp.str2reg -* ida_segregs.get_sreg +Note: the real body of code is in `simple_appcall_common.py`. -
+| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [simple_appcall_linux.py](https://github.com/HexRaysSA/IDAPython/tree//examples/debugger/appcall/simple_appcall_linux.py) | | Advanced | -
+**APIs Used:** +* `ida_dbg.DBG_Hooks` +* `ida_dbg.run_to` +* `ida_idaapi.BADADDR` +* `ida_idd.Appcall` +* `ida_idd.Appcall.byref` +* `ida_idd.Appcall.int64` +* `ida_kernwin.get_screen_ea` +* `ida_name.get_name_ea` +* `ida_name.set_name` +* `ida_typeinf.apply_cdecl` -#### assemble -
- An `ida_idp.IDP_Hooks.assembly` implementation +*** -
-#### Source code -idphooks/assemble.py +### Execute code into the application being debugged (on Windows) {#simple_appcall_win} +Using the `ida_idd.Appcall` utility to execute code in +the process being debugged. -#### Category -idphooks +This example will run the test program and stop wherever +the cursor currently is, and then perform an appcall to +execute the `ref4` and `ref8` functions. -#### Description -We add support for assembling the following pseudo instructions: +To use this example: -* "zero eax" -> xor eax, eax -* "nothing" -> nop + * run `ida` on test program `simple_appcall_win64.exe`, or + `ida` on test program `simple_appcall_win32.exe`, and wait for + auto-analysis to finish + * select the 'windows debugger' (either local, or remote) + * run this script -#### Keywords -IDP_Hooks +Note: the real body of code is in `simple_appcall_common.py`. -#### Uses -* ida_idp.IDP_Hooks -* idautils.DecodeInstruction +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [simple_appcall_win.py](https://github.com/HexRaysSA/IDAPython/tree//examples/debugger/appcall/simple_appcall_win.py) | | Advanced | -
+**APIs Used:** +* `ida_dbg.DBG_Hooks` +* `ida_dbg.run_to` +* `ida_ida.inf_is_64bit` +* `ida_idaapi.BADADDR` +* `ida_idd.Appcall` +* `ida_idd.Appcall.byref` +* `ida_idd.Appcall.int64` +* `ida_kernwin.get_screen_ea` +* `ida_name.get_name_ea` +* `ida_name.set_name` +* `ida_typeinf.apply_cdecl` -
+*** -## Category: merge -#### py_mex1 -
- Add merge functionality to a simple plugin, example 1 +### Create a structure by parsing its definition {#create_struct_by_parsing} +The goal of this script is to demonstrate some usage of the type API. +In this script, we create a structure using the "parsing" method. -
+| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [create_struct_by_parsing.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/create_struct_by_parsing.py) | | Beginner | -#### Source code -merge/py_mex1.py +**APIs Used:** +* `ida_typeinf.tinfo_t` -#### Category -merge +*** -#### Description + +### Delete structure members that fall within an offset range {#del_struct_members} +The goal of this script is to demonstrate some usage of the type API. +In this script, we first create a structure with many members, and then +remove all those that fall within a range. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [del_struct_members.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/del_struct_members.py) | | Beginner | + +**APIs Used:** +* `ida_typeinf.STRMEM_OFFSET` +* `ida_typeinf.TERR_OK` +* `ida_typeinf.tinfo_t` +* `ida_typeinf.udm_t` + +*** + + +### Print enumeration members {#list_enum_member} +In this example, we will first ask the user to provide the name +of an enumeration, and then iterate on it + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_enum_member.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/list_enum_member.py) | | Beginner | + +**APIs Used:** +* `ida_kernwin.ask_str` + +*** + + +### Print function stack frame information {#list_frame_info} +The goal of this script is to demonstrate some usage of the type API. +In this script, we retrieve the function frame structure, and iterate +on the frame members. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_frame_info.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/list_frame_info.py) | | Beginner | + +**APIs Used:** +* `ida_funcs.get_func` +* `ida_kernwin.get_screen_ea` + +*** + + +### List database functions prototypes {#list_func_details} +This script demonstrates how to list a function return type +along with its parameters types and name if any. +We do this for all the functions found in the database. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_func_details.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/list_func_details.py) | | Beginner | + +**APIs Used:** +* `ida_funcs.get_func` +* `idautils.Functions` + +*** + + +### List structure members {#list_struct_member} +The goal of this script is to demonstrate some usage of the type API. +In this script, we: +* Ask the user for a structure name. It must already be present in the +local types. +* Retrieve the structure type info from the local type +* Extract its type details (udt) +* Iterates it members and prints their names. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_struct_member.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/list_struct_member.py) | | Beginner | + +**APIs Used:** +* `ida_kernwin.ask_str` +* `ida_typeinf.BTF_STRUCT` +* `ida_typeinf.get_idati` +* `ida_typeinf.tinfo_t` +* `ida_typeinf.udt_type_data_t` + +*** + + +### List cross-references to a structure {#list_struct_xrefs} +The goal of this script is to demonstrate some usage of the type API. +In this script, we: +* Ask the user for a structure name. It must already be present in the +local types. +* Get its tid +* Create the list of all the reference. +* Print it + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_struct_xrefs.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/list_struct_xrefs.py) | | Beginner | + +**APIs Used:** +* `ida_kernwin.choose_struct` +* `ida_typeinf.tinfo_t` +* `ida_xref.xrefblk_t` + +*** + + +### List union members {#list_union_member} +The goal of this script is to demonstrate some usage of the type API. +In this script, we: +* Ask the user for a union name. It must already be present in the +local types. +* Retrieve the union type info from the local type +* Extract its type details (udt) +* Iterates it members and prints their names. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_union_member.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/list_union_member.py) | | Beginner | + +**APIs Used:** +* `ida_kernwin.ask_str` +* `ida_typeinf.BTF_UNION` +* `ida_typeinf.get_idati` +* `ida_typeinf.tinfo_t` +* `ida_typeinf.udt_type_data_t` + +*** + + +### Mark a register "spoiled" by a function {#mark_func_spoiled} +At least two possibilies are offered in order to indicate that a function +spoils registers (excluding the "normal" ones): + +You can either parse & apply a declaration: + + func_tfinfo = ida_typeinf.tinfo_t("int _spoils main();") + ida_typeinf.apply_tinfo(func.start_ea, func_tinfo, ida_typeinf.TINFO_DEFINITE) + +or retrieve & modify the `tinfo_t` object directly. + +This script showcases the latter. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [mark_func_spoiled.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/mark_func_spoiled.py) | | Beginner | + +**APIs Used:** +* `ida_funcs.get_func` +* `ida_idp.parse_reg_name` +* `ida_idp.reg_info_t` +* `ida_kernwin.get_screen_ea` +* `ida_nalt.get_tinfo` +* `ida_typeinf.FTI_SPOILED` +* `ida_typeinf.TINFO_DEFINITE` +* `ida_typeinf.apply_tinfo` +* `ida_typeinf.func_type_data_t` +* `ida_typeinf.tinfo_t` + +*** + + +### Apply function prototype to call sites {#apply_callee_tinfo} +The goal of this script is to demonstrate some usage of the type API. +In this script, we: +* Open the private type libary. +* Load its declaration in the type library by parsing its declaration and +keep the return tuple for future use. +* Deserialize the type info stored in the returned tuple. +* Get the address of the function. +* Get the address of the code reference to the function and apply +the type info there. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [apply_callee_tinfo.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/apply_callee_tinfo.py) | | Intermediate | + +**APIs Used:** +* `ida_idaapi.BADADDR` +* `ida_name.get_name_ea` +* `ida_typeinf.PT_REPLACE` +* `ida_typeinf.apply_callee_tinfo` +* `ida_typeinf.get_idati` +* `ida_typeinf.idc_parse_decl` +* `ida_typeinf.tinfo_t` +* `idautils.CodeRefsTo` + +*** + + +### Create an array type {#create_array} +The goal of this script is to demonstrate some usage of the type API. +In this script, we create an array using both versions of +create_array tinfo_t method. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [create_array.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/create_array.py) | | Intermediate | + +**APIs Used:** +* `ida_typeinf.BTF_INT` +* `ida_typeinf.array_type_data_t` +* `ida_typeinf.tinfo_t` + +*** + + +### Create a structure with bitfield members {#create_bfstruct} +The goal of this script is to demonstrate some usage of the type API. +In this script, we: + * Create a bitfield structure. In the present case the bitfield is an int32 +made of three 'members' spanning it entirely: + bit0->bit19: bf1 + bit20->bit25: bf2 + bit26->bit31: bf3 + * For each member create a repeatable comment. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [create_bfstruct.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/create_bfstruct.py) | | Intermediate | + +**APIs Used:** +* `ida_typeinf.tinfo_t` +* `ida_typeinf.udm_t` +* `ida_typeinf.udt_type_data_t` + +*** + + +### Create a bitmask enumeration {#create_bmenum} +The goal of this script is to demonstrate some usage of the type API. +In this script, we create a bitmask enumeration member by member. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [create_bmenum.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/create_bmenum.py) | | Intermediate | + +**APIs Used:** +* `ida_typeinf.BTE_BITMASK` +* `ida_typeinf.BTE_HEX` +* `ida_typeinf.tinfo_t` + +*** + + +### Create a type library file {#create_libssh2_til} +The goal of this script is to demonstrate some usage of the type API. +In this script: + * We create a new libssh2-64.til file holding some libssh2 64-bit structures. + * Once the file has been created, it can copied in the IDA install + til directory or in the user IDA til directory. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [create_libssh2_til.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/create_libssh2_til.py) | | Intermediate | + +**APIs Used:** +* `ida_typeinf.HTI_DCL` +* `ida_typeinf.HTI_PAKDEF` +* `ida_typeinf.compact_til` +* `ida_typeinf.free_til` +* `ida_typeinf.new_til` +* `ida_typeinf.parse_decls` +* `ida_typeinf.store_til` + +*** + + +### Create a structure programmatically {#create_struct_by_member} +The goal of this script is to demonstrate some usage of the type API. +In this script, we create a structure by building it member by member. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [create_struct_by_member.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/create_struct_by_member.py) | | Intermediate | + +**APIs Used:** +* `ida_typeinf.BTF_UINT32` +* `ida_typeinf.NTF_TYPE` +* `ida_typeinf.del_named_type` +* `ida_typeinf.tinfo_errstr` +* `ida_typeinf.tinfo_t` +* `ida_typeinf.udt_type_data_t` + +*** + + +### Create & populate a structure {#create_structure_programmatically} +Usage of the API to create & populate a structure with +members of different types. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [create_structure_programmatically.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/create_structure_programmatically.py) | | Intermediate | + +**APIs Used:** +* `ida_typeinf.BTF_BYTE` +* `ida_typeinf.BTF_DOUBLE` +* `ida_typeinf.BTF_FLOAT` +* `ida_typeinf.BTF_INT` +* `ida_typeinf.BTF_INT128` +* `ida_typeinf.BTF_INT16` +* `ida_typeinf.BTF_INT64` +* `ida_typeinf.BTF_TBYTE` +* `ida_typeinf.BTF_UINT32` +* `ida_typeinf.FRB_NUMO` +* `ida_typeinf.NTF_TYPE` +* `ida_typeinf.PRTYPE_DEF` +* `ida_typeinf.PRTYPE_MULTI` +* `ida_typeinf.PRTYPE_TYPE` +* `ida_typeinf.del_named_type` +* `ida_typeinf.idc_parse_types` +* `ida_typeinf.tinfo_errstr` +* `ida_typeinf.tinfo_t` +* `ida_typeinf.udm_t` +* `ida_typeinf.udt_type_data_t` +* `ida_typeinf.value_repr_t` + +*** + + +### Create a union {#create_union_by_member} +The goal of this script is to demonstrate some usage of the type API. +In this script, we create a union by building it member after member. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [create_union_by_member.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/create_union_by_member.py) | | Intermediate | + +**APIs Used:** +* `ida_typeinf.BTF_CHAR` +* `ida_typeinf.BTF_FLOAT` +* `ida_typeinf.BTF_INT32` +* `ida_typeinf.BTF_UNION` +* `ida_typeinf.NTF_TYPE` +* `ida_typeinf.PRTYPE_DEF` +* `ida_typeinf.PRTYPE_MULTI` +* `ida_typeinf.PRTYPE_TYPE` +* `ida_typeinf.del_named_type` +* `ida_typeinf.tinfo_t` +* `ida_typeinf.udm_t` +* `ida_typeinf.udt_type_data_t` + +*** + + +### Create a segment, and define (complex) data in it {#create_user_shared_data} +The goal of this script is to demonstrate some usage of the type API. +In this script, we show how to create, set type and name of +a user shared data region in an ntdll IDB: +* Load the `_KUSER_SHARED_DATA` data type from a type info + library shipped with IDA, and import it into the IDB's "local types" +* Create a data segment with UserSharedData as its name. +* Apply the type to the start of the newly created segment base + address. +* Set the address name. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [create_user_shared_data.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/create_user_shared_data.py) | | Intermediate | + +**APIs Used:** +* `ida_name.set_name` +* `ida_segment.add_segm_ex` +* `ida_segment.saRelPara` +* `ida_segment.scPub` +* `ida_segment.segment_t` +* `ida_segment.setup_selector` +* `ida_typeinf.TINFO_DEFINITE` +* `ida_typeinf.apply_tinfo` +* `ida_typeinf.free_til` +* `ida_typeinf.load_til` + +*** + + +### Utilities to detect structure gaps & alignment {#gap_size_align_snippet} +The goal of this script is to illustrate ways to detect gaps & alignments +in structures, from a structure name & (byte) offset. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [gap_size_align_snippet.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/gap_size_align_snippet.py) | | Intermediate | + +**APIs Used:** +* `ida_range.rangeset_t` + +*** + + +### Get member by offset, taking into account variable sized structures {#get_best_fit_member} +The goal of this script is to provide a way to figure out +what structure member, is most likely referenced by an offset. + +This also works for variable sized types. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [get_best_fit_member.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/get_best_fit_member.py) | | Intermediate | + +**APIs Used:** +* `ida_typeinf.tinfo_t` +* `ida_typeinf.udt_type_data_t` + +*** + + +### Get information about the "innermost" member of a structure {#get_innermost_member} +Assuming the 2 following types: + + struct b + { + int low; + int high; + }; + + struct a + { + int foo; + b b_instance; + int bar; + }; + +looking at an offset of 5 bytes inside an `a` instance, might be +interpreted as pointing somewhere inside member `b_instance`, of type `b`. +Alternatively, that same offset might be intprereted as pointing +somewhere inside `low`, of type `int`. + +We refer to that latter interpretation as "innermost", and this sample +shows how the API lets us "drill down" to retrieve that innermost member. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [get_innermost_member.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/get_innermost_member.py) | | Intermediate | + +**APIs Used:** +* `ida_typeinf.get_idati` +* `ida_typeinf.parse_decls` + +*** + + +### Load a type library from a file, and then a type from it {#import_type_from_til} +The goal of this script is to demonstrate some usage of the type API. + In this script, we: + * ask the user for a specific til to be lodaed + * if successfully loaded ask the user for a type name to be imported. + * append the type to the local types. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [import_type_from_til.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/import_type_from_til.py) | | Intermediate | + +**APIs Used:** +* `ida_kernwin.ask_str` +* `ida_typeinf.load_til` + +*** + + +### Inject a member in the middle of a structure {#insert_struct_member} +This sample will retrieve the type info object by its name, +find the member at the specified offset, and insert a +new member right before it + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [insert_struct_member.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/insert_struct_member.py) | | Intermediate | + +**APIs Used:** +* `ida_typeinf.BT_INT` +* `ida_typeinf.TERR_OK` +* `ida_typeinf.tinfo_t` + +*** + + +### List all xrefs to a function stack variable {#list_stkvar_xrefs} +Contrary to (in-memory) data & code xrefs, retrieving stack variables +xrefs requires a bit more work than just using ida_xref's first_to(), +next_to() (or higher level utilities such as idautils.XrefsTo) + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [list_stkvar_xrefs.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/list_stkvar_xrefs.py) | xrefs | Intermediate | + +**APIs Used:** +* `ida_bytes.get_flags` +* `ida_bytes.is_stkvar` +* `ida_frame.calc_stkvar_struc_offset` +* `ida_funcs.get_func` +* `ida_ida.UA_MAXOP` +* `ida_kernwin.AST_DISABLE_FOR_WIDGET` +* `ida_kernwin.AST_ENABLE_FOR_WIDGET` +* `ida_kernwin.BWN_DISASM` +* `ida_kernwin.action_desc_t` +* `ida_kernwin.action_handler_t` +* `ida_kernwin.get_current_viewer` +* `ida_kernwin.get_highlight` +* `ida_kernwin.get_screen_ea` +* `ida_kernwin.register_action` +* `ida_typeinf.tinfo_t` +* `ida_ua.decode_insn` +* `ida_ua.insn_t` + +*** + + +### Modify structure members attributes programmatically {#modify_struct_member} +This example shows how to access & modify certain less-obvious +attributes of structure members (pointer size, representation, ...) + +We will first create the structure without those, and then +show how to programmatically modify them. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [modify_struct_member.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/modify_struct_member.py) | | Intermediate | + +**APIs Used:** +* `ida_nalt.REFINFO_RVAOFF` +* `ida_nalt.REF_OFF64` +* `ida_typeinf.FRB_OFFSET` +* `ida_typeinf.tinfo_t` +* `ida_typeinf.value_repr_t` + +*** + + +### List cross-references to function stack frame variables {#print_stkvar_xrefs} +The goal of this script is to demonstrate some usage of the type API. +In this script, we demonstrate how to list each stack variables +xref: +* Get the function object surrounding cursor location. +* Use this function to retrieve the corresponding frame object. +* For each frame element: + - Build the stack variable xref list + - Print it. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [print_stkvar_xrefs.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/print_stkvar_xrefs.py) | | Intermediate | + +**APIs Used:** +* `ida_frame.build_stkvar_xrefs` +* `ida_frame.get_func_frame` +* `ida_frame.xreflist_t` +* `ida_funcs.get_func` +* `ida_kernwin.get_screen_ea` +* `ida_typeinf.tinfo_t` +* `ida_typeinf.udt_type_data_t` +* `ida_xref.dr_R` +* `ida_xref.dr_W` + +*** + + +### Assign DOS/PE headers structures to a PE binary {#setpehdr} +The goal of this script is to demonstrate some usage of the type API. + +In this script, we: + +* load a PE64 file in binary mode +* import some types from the mssdk64 til +* apply these types at the correct ofsset in the DB +* finally, rebase the program based on the information stored + in the ImageBase field of the IMAGE_OPTIONAL_HEADER64. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [setpehdr.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/setpehdr.py) | | Intermediate | + +**APIs Used:** +* `ida_bytes.create_struct` +* `ida_bytes.get_dword` +* `ida_bytes.get_qword` +* `ida_bytes.get_word` +* `ida_hexrays.get_type` +* `ida_name.set_name` +* `ida_netnode.BADNODE` +* `ida_segment.MSF_FIXONCE` +* `ida_segment.rebase_program` +* `ida_typeinf.ADDTIL_DEFAULT` +* `ida_typeinf.BTF_STRUCT` +* `ida_typeinf.add_til` +* `ida_typeinf.tinfo_t` +* `ida_typeinf.udt_type_data_t` +* `idc.import_type` + +*** + + +### Recursively visit a type and its members {#visit_tinfo} +In this script, we show an example of tinfo_visitor_t to list +a user define type members, recursively. + +This scripts skips array & pointer members (by calling +`tinfo_visitor_t.prune_now()`) + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [visit_tinfo.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/visit_tinfo.py) | | Intermediate | + +**APIs Used:** +* `ida_netnode.BADNODE` +* `ida_typeinf.ADDTIL_DEFAULT` +* `ida_typeinf.TVST_DEF` +* `ida_typeinf.add_til` +* `ida_typeinf.array_type_data_t` +* `ida_typeinf.get_idati` +* `ida_typeinf.tinfo_t` +* `ida_typeinf.tinfo_visitor_t` +* `idc.import_type` + +*** + + +### Change the name of an existing stack variable {#change_stkvar_name} +The goal of this script is to demonstrate some usage of the type API. +In this script, we demonstrate a way to change the name of a +stack variable: +* Get the function object surrounding cursor location. +* Use this function to retrieve the corresponding frame object. +* Find the frame member matching the given name. +* Using its offset in the frame structure object, calculate + the actual stack delta. +* Use the previous result to redefine the stack variable name if + it is not a special or argument member. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [change_stkvar_name.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/change_stkvar_name.py) | | Advanced | + +**APIs Used:** +* `ida_frame.define_stkvar` +* `ida_frame.get_func_frame` +* `ida_frame.is_funcarg_off` +* `ida_frame.is_special_frame_member` +* `ida_frame.soff_to_fpoff` +* `ida_funcs.get_func` +* `ida_typeinf.tinfo_t` +* `ida_typeinf.udm_t` +* `idc.here` + +*** + + +### Change the type & name of a function stack frame variable {#change_stkvar_type} +The goal of this script is to demonstrate some usage of the type API. + +In this script, we show a way to change the type and the name +of a stack variable. In this case we will take advantage of the +fact that RtlImageNtHeader calls RtlImageNtHeaderEx which takes +a pointer to PIMAGE_NT_HEADERS as its fourth parameter and, for +this, uses a stack variable of its caller. + +* Get the function object for RtlImageNtHeader. +* Iterate through the function item to localize the load of the + stack variable address before the call to RtlImageNtHeaderEx. We + keep this information. +* Localize the call and take advantage of the previoulsy stored + instruction to get the stack variable index in the frame. +* Set the type and rename the stack variable. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [change_stkvar_type.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/change_stkvar_type.py) | | Advanced | + +**APIs Used:** +* `ida_allins.NN_call` +* `ida_allins.NN_lea` +* `ida_frame.get_func_frame` +* `ida_funcs.func_item_iterator_t` +* `ida_funcs.get_func` +* `ida_funcs.get_func_name` +* `ida_ida.inf_get_procname` +* `ida_ida.inf_is_64bit` +* `ida_idaapi.BADADDR` +* `ida_name.get_name_ea` +* `ida_typeinf.BTF_STRUCT` +* `ida_typeinf.TERR_OK` +* `ida_typeinf.tinfo_t` +* `ida_ua.decode_insn` +* `ida_ua.insn_t` +* `ida_ua.o_reg` +* `idautils.procregs.r9.reg` + +*** + + +### Turn instruction operand into a structure offset {#operand_to_struct_member} +The goal of this script is to demonstrate some usage of the type API. +In this script, we: + * ask the user to choose the structure that will be used for + the conversion. + * build the structure path and call ida_bytes.op_stroff. In case + an enum is found a modal chooser is displayed in order to select + a member. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [operand_to_struct_member.py](https://github.com/HexRaysSA/IDAPython/tree//examples/types/operand_to_struct_member.py) | | Advanced | + +**APIs Used:** +* `ida_bytes.op_stroff` +* `ida_kernwin.Choose` +* `ida_kernwin.Choose.CHCOL_HEX` +* `ida_kernwin.Choose.CHCOL_PLAIN` +* `ida_kernwin.choose_struct` +* `ida_kernwin.get_opnum` +* `ida_kernwin.get_screen_ea` +* `ida_pro.tid_array` +* `ida_typeinf.STRMEM_OFFSET` +* `ida_typeinf.tinfo_t` +* `ida_typeinf.udm_t` +* `ida_typeinf.udt_type_data_t` +* `ida_ua.decode_insn` +* `ida_ua.insn_t` + +*** + + +### Code to be run right after IDAPython initialization {#idapythonrc} +The `idapythonrc.py` file: + + * %APPDATA%\Hex-Rays\IDA Pro\idapythonrc.py (on Windows) + * ~/.idapro/idapythonrc.py (on Linux & Mac) + +can contain any IDAPython code that will be run as soon as +IDAPython is done successfully initializing. + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [idapythonrc.py](https://github.com/HexRaysSA/IDAPython/tree//examples/misc/idapythonrc.py) | | Beginner | + + +*** + + +### Add functions to the IDC runtime, from IDAPython {#extend_idc} +You can add IDC functions to IDA, whose "body" consists of +IDAPython statements! + +We'll register a 'pow' function, available to all IDC code, +that when invoked will call back into IDAPython, and execute +the provided function body. + +After running this script, try switching to the IDC interpreter +(using the button on the lower-left corner of IDA) and executing +`pow(3, 7)` + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [extend_idc.py](https://github.com/HexRaysSA/IDAPython/tree//examples/misc/extend_idc.py) | | Intermediate | + +**APIs Used:** +* `ida_expr.VT_LONG` +* `ida_expr.add_idc_func` + +*** + + +### Add 64-bit (.idb->.i64) conversion capabilities to custom plugins {#py_cvt64_sample} +For more infortmation see SDK/plugins/cvt64_sample example + +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [py_cvt64_sample.py](https://github.com/HexRaysSA/IDAPython/tree//examples/misc/cvt64/py_cvt64_sample.py) | | Advanced | + +**APIs Used:** +* `ida_idaapi.BADADDR` +* `ida_idaapi.BADADDR32` +* `ida_netnode.atag` +* `ida_netnode.htag` +* `ida_netnode.stag` + +*** + + +### Add merge functionality to a simple plugin {#py_mex1} This is a primitive plugin which asks user for some info and saves it for some addresses. @@ -2733,1038 +3565,113 @@ An IDA plugin may have two kinds of data with permanent storage: Also, see SDK/plugins/mex1 example -#### Keywords -IDP_Hooks plugin +| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [py_mex1.py](https://github.com/HexRaysSA/IDAPython/tree//examples/misc/merge/py_mex1.py) | IDP_Hooks plugin | Advanced | -#### Uses -* ida_funcs.get_func -* ida_ida.IDI_ALTVAL -* ida_ida.IDI_CSTR -* ida_ida.IDI_SCALAR -* ida_ida.IDI_SUPVAL -* ida_ida.idbattr_info_t -* ida_idaapi.BADADDR -* ida_idaapi.PLUGIN_MOD -* ida_idaapi.PLUGIN_MULTI -* ida_idaapi.plugin_t -* ida_idaapi.plugmod_t -* ida_idp.IDP_Hooks -* ida_kernwin.Form -* ida_kernwin.Form.ChkGroupControl -* ida_kernwin.Form.StringInput -* ida_kernwin.get_screen_ea -* ida_merge.MERGE_KIND_END -* ida_merge.MERGE_KIND_NONE -* ida_merge.NDS_IS_STR -* ida_merge.NDS_MAP_IDX -* ida_merge.merge_handler_params_t -* ida_merge.merge_node_info_t -* ida_merge.moddata_diff_helper_t -* ida_mergemod.create_std_modmerge_handlers -* ida_netnode.BADNODE -* ida_netnode.SIZEOF_nodeidx_t -* ida_netnode.atag -* ida_netnode.netnode -* ida_netnode.stag +**APIs Used:** +* `ida_funcs.get_func` +* `ida_ida.IDI_ALTVAL` +* `ida_ida.IDI_CSTR` +* `ida_ida.IDI_SCALAR` +* `ida_ida.IDI_SUPVAL` +* `ida_ida.idbattr_info_t` +* `ida_idaapi.BADADDR` +* `ida_idaapi.PLUGIN_MOD` +* `ida_idaapi.PLUGIN_MULTI` +* `ida_idaapi.plugin_t` +* `ida_idaapi.plugmod_t` +* `ida_idp.IDP_Hooks` +* `ida_kernwin.Form` +* `ida_kernwin.Form.ChkGroupControl` +* `ida_kernwin.Form.StringInput` +* `ida_kernwin.get_screen_ea` +* `ida_merge.MERGE_KIND_END` +* `ida_merge.MERGE_KIND_NONE` +* `ida_merge.NDS_IS_STR` +* `ida_merge.NDS_MAP_IDX` +* `ida_merge.merge_handler_params_t` +* `ida_merge.merge_node_info_t` +* `ida_merge.moddata_diff_helper_t` +* `ida_mergemod.create_std_modmerge_handlers` +* `ida_netnode.BADNODE` +* `ida_netnode.SIZEOF_nodeidx_t` +* `ida_netnode.atag` +* `ida_netnode.netnode` +* `ida_netnode.stag` -
+*** -
-#### py_mex3 -
- This example uses the mex1 example and improves the user-interface for it. - -
- -#### Source code -merge/py_mex3.py - -#### Category -merge - -#### Description +### Implement merging functionality for custom plugins {#py_mex3} IDA Teams uses a chooser to display the merge conflicts. To fill the chooser columns IDA Teams uses the following methods from diff_source_t type: + * print_diffpos_name() * print_diffpos_details() + and UI hints from merge_handler_params_t type: + * ui_has_details() * ui_complex_details() * ui_complex_name() In general, chooser columns are filled as following: - columns.clear() - NAME = print_diffpos_name() - if ui_complex_name() - then - columns.add(split NAME by ui_split_char()) - else - columns[0] = NAME - if not ui_complex_details() - then - columns.add(print_diffpos_details()) + + columns.clear() + NAME = print_diffpos_name() + if ui_complex_name() + then + columns.add(split NAME by ui_split_char()) + else + columns[0] = NAME + if not ui_complex_details() + then + columns.add(print_diffpos_details()) Also, see SDK/plugins/mex3 example -#### Keywords -IDP_Hooks plugin - -#### Uses -* ida_funcs.get_func -* ida_ida.IDI_ALTVAL -* ida_ida.IDI_CSTR -* ida_ida.IDI_SCALAR -* ida_ida.IDI_SUPVAL -* ida_ida.idbattr_info_t -* ida_idaapi.BADADDR -* ida_idaapi.PLUGIN_MOD -* ida_idaapi.PLUGIN_MULTI -* ida_idaapi.plugin_t -* ida_idaapi.plugmod_t -* ida_idp.IDP_Hooks -* ida_kernwin.Form -* ida_kernwin.Form.ChkGroupControl -* ida_kernwin.Form.StringInput -* ida_kernwin.get_screen_ea -* ida_merge.MERGE_KIND_END -* ida_merge.MERGE_KIND_NONE -* ida_merge.MH_UI_COLONNAME -* ida_merge.MH_UI_COMMANAME -* ida_merge.MH_UI_NODETAILS -* ida_merge.NDS_IS_STR -* ida_merge.NDS_MAP_IDX -* ida_merge.create_nodeval_merge_handlers -* ida_merge.get_ea_diffpos_name -* ida_merge.merge_handler_params_t -* ida_merge.merge_node_helper_t -* ida_merge.merge_node_info_t -* ida_merge.moddata_diff_helper_t -* ida_mergemod.create_std_modmerge_handlers -* ida_nalt.node2ea -* ida_netnode.BADNODE -* ida_netnode.SIZEOF_nodeidx_t -* ida_netnode.atag -* ida_netnode.netnode -* ida_netnode.stag - -
- -
- -## Category: pyqt - -#### inject_command -
- Injecting commands in the "Output" window - -
- -#### Source code -pyqt/inject_command.py - -#### Category -pyqt - -#### Description -This example illustrates how one can execute commands in the -"Output" window, from their own widgets. - -A few notes: - -* the original, underlying `cli:Execute` action, that has to be - triggered for the code present in the input field to execute - and be placed in the history, requires that the input field - has focus (otherwise it simply won't do anything.) -* this, in turn, forces us to do "delayed" execution of that action, - hence the need for a `QTimer` -* the IDA/SWiG 'TWidget' type that we retrieve through - `ida_kernwin.find_widget`, is not the same type as a - `QtWidgets.QWidget`. We therefore need to convert it using - `ida_kernwin.PluginForm.TWidgetToPyQtWidget` - -#### Uses -* ida_kernwin.PluginForm.TWidgetToPyQtWidget -* ida_kernwin.disabled_script_timeout_t -* ida_kernwin.find_widget -* ida_kernwin.process_ui_action - -
- -
- -#### paint_over_graph -
- Custom painting on top of graph view edges - -
- -#### Source code -pyqt/paint_over_graph.py - -#### Category -pyqt - -#### Description -This sample registers an action enabling painting of a recognizable -string of text over horizontal nodes edge sections beyond a -satisfying size threshold. - -In a disassembly view, open the context menu and select -"Paint on edges". This should work for both graph disassembly, -and proximity browser. - -Using an "event filter", we will intercept paint events -targeted at the disassembly view, let it paint itself, and -then add our own markers along. - -#### Keywords -ctxmenu UI_Hooks - -#### Uses -* ida_graph.edge_t -* ida_graph.get_graph_viewer -* ida_graph.get_viewer_graph -* ida_graph.point_t -* ida_graph.viewer_get_gli -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.BWN_DISASM -* ida_kernwin.PluginForm.FormToPyQtWidget -* ida_kernwin.UI_Hooks -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.attach_action_to_popup -* ida_kernwin.get_widget_type -* ida_kernwin.register_action -* ida_moves.graph_location_info_t - -
- -
- -#### paint_over_navbar -
- Custom painting on top of the navigation band - -
- -#### Source code -pyqt/paint_over_navbar.py - -#### Category -pyqt - -#### Description -Using an "event filter", we will intercept paint events -targeted at the navigation band widget, let it paint itself, -and then add our own markers on top. - -#### Uses -* ida_kernwin.PluginForm.FormToPyQtWidget -* ida_kernwin.get_navband_pixel -* ida_kernwin.open_navband_window -* ida_segment.get_segm_qty -* ida_segment.getnseg -* idc.here - -
- -
- -#### populate_pluginform_with_pyqt_widgets -
- Adding PyQt5 widgets into an `ida_kernwin.PluginForm` - -
- -#### Source code -pyqt/populate_pluginform_with_pyqt_widgets.py - -#### Category -pyqt - -#### Description -Using `ida_kernwin.PluginForm.FormToPyQtWidget`, this script -converts IDA's own dockable widget into a type that is -recognized by PyQt5, which then enables populating it with -regular Qt widgets. - -#### Uses -* ida_kernwin.PluginForm - -
- -
- -## Category: uihooks - -#### func_chooser_coloring -
- Using `ida_kernwin.UI_Hooks.get_chooser_item_attrs` to override some defaults - -
- -#### Source code -uihooks/func_chooser_coloring.py - -#### Category -uihooks - -#### Description -Color the function in the Function window according to its size. -The larger the function, the darker the color. - -#### Keywords -UI_Hooks - -#### Uses -* ida_funcs.get_func -* ida_kernwin.UI_Hooks -* ida_kernwin.enable_chooser_item_attrs - -
- -
- -#### lines_rendering -
- Dynamically colorize lines backgrounds (or parts of them) - -
- -#### Source code -uihooks/lines_rendering.py - -#### Category -uihooks - -#### Description -Shows how one can dynamically alter the lines background -rendering (as opposed to, say, using ida_nalt.set_item_color()), -and also shows how that rendering can be limited to just a few -glyphs, not the whole line. - -#### Keywords -UI_Hooks - -#### Uses -* ida_bytes.next_head -* ida_idaapi.BADADDR -* ida_kernwin.CK_EXTRA1 -* ida_kernwin.CK_EXTRA10 -* ida_kernwin.CK_EXTRA11 -* ida_kernwin.CK_EXTRA12 -* ida_kernwin.CK_EXTRA13 -* ida_kernwin.CK_EXTRA14 -* ida_kernwin.CK_EXTRA15 -* ida_kernwin.CK_EXTRA16 -* ida_kernwin.CK_EXTRA2 -* ida_kernwin.CK_EXTRA3 -* ida_kernwin.CK_EXTRA4 -* ida_kernwin.CK_EXTRA5 -* ida_kernwin.CK_EXTRA6 -* ida_kernwin.CK_EXTRA7 -* ida_kernwin.CK_EXTRA8 -* ida_kernwin.CK_EXTRA9 -* ida_kernwin.CK_TRACE -* ida_kernwin.CK_TRACE_OVL -* ida_kernwin.LROEF_CPS_RANGE -* ida_kernwin.UI_Hooks -* ida_kernwin.get_screen_ea -* ida_kernwin.line_rendering_output_entry_t -* ida_kernwin.refresh_idaview_anyway - -
- -
- -#### log_misc_events -
- Being notified, and logging a few UI events - -
- -#### Source code -uihooks/log_misc_events.py - -#### Category -uihooks - -#### Description -Hooks to be notified about certain UI events, and -dump their information to the "Output" window - -#### Keywords -UI_Hooks - -#### Uses -* ida_kernwin.UI_Hooks - -
- -
- -#### prevent_jump -
- Taking precedence over actions - -
- -#### Source code -uihooks/prevent_jump.py - -#### Category -uihooks - -#### Description -Using `ida_kernwin.UI_Hooks.preprocess_action`, it is possible -to respond to a command instead of the action that would -otherwise do it. - -#### Keywords -UI_Hooks - -#### Uses -* ida_kernwin.UI_Hooks - -
- -
- -## Category: widgets - -#### add_menus -
- Adding custom menus to IDA - -
- -#### Source code -widgets/misc/add_menus.py - -#### Category -widgets - -#### Description -It is possible to add custom menus to IDA, either at the -toplevel (i.e., into the menubar), or as submenus of existing -menus. - -Notes: - - * the same action can be present in more than 1 menu - * this example does not deal with context menus - -#### Keywords -actions - -#### Uses -* ida_kernwin.AST_ENABLE_ALWAYS -* ida_kernwin.SETMENU_INS -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.attach_action_to_menu -* ida_kernwin.create_menu -* ida_kernwin.register_action - -
- -
- -#### askusingform -
- Non-trivial uses of the `ida_kernwin.Form` helper class - -
- -#### Source code -widgets/forms/askusingform.py - -#### Category -widgets - -#### Description -How to query for complex user input, using IDA's built-in forms. - -Note: while this example produces full-fledged forms for complex input, -simpler types of inputs might can be retrieved by using -`ida_kernwin.ask_str` and similar functions. - -#### Keywords -forms - -#### Uses -* ida_kernwin.Choose -* ida_kernwin.Choose.CH_MULTI -* ida_kernwin.Form -* ida_kernwin.PluginForm.FORM_TAB -* ida_kernwin.ask_str - -
- -
- -#### choose -
- A widget showing data in a tabular fashion - -
- -#### Source code -widgets/tabular_views/custom/choose.py - -#### Category -widgets - -#### Description -Shows how to subclass the ida_kernwin.Choose class to -show data organized in a simple table. -In addition, registers a couple actions that can be applied to it. - -#### Keywords -actions chooser ctxmenu - -#### Uses -* Choose -* Choose.ALL_CHANGED -* Choose.CH_CAN_DEL -* Choose.CH_CAN_EDIT -* Choose.CH_CAN_INS -* Choose.CH_CAN_REFRESH -* Choose.CH_RESTORE -* Choose.NOTHING_CHANGED -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.attach_action_to_popup -* ida_kernwin.is_chooser_widget -* ida_kernwin.register_action -* ida_kernwin.unregister_action - -#### See also -* [choose_multi](#choose_multi) -* [chooser_with_folders](#chooser_with_folders) - -
- -
- -#### choose_multi -
- A widget showing data in a tabular fashion, providing multiple selection - -
- -#### Source code -widgets/tabular_views/custom/choose_multi.py - -#### Category -widgets - -#### Description -Similar to choose, but with multiple selection - -#### Keywords -actions chooser - -#### Uses -* Choose -* Choose.ALL_CHANGED -* Choose.CHCOL_HEX -* Choose.CH_MULTI -* Choose.NOTHING_CHANGED - -#### See also -* [choose](#choose) -* [chooser_with_folders](#chooser_with_folders) - -
- -
- -#### chooser_with_folders -
- A widget that can show tabular data either as a simple table, or with a tree-like structure. - -
- -#### Source code -widgets/tabular_views/custom/chooser_with_folders.py - -#### Category -widgets - -#### Description -By adding the necessary bits to a ida_kernwin.Choose subclass, -IDA can show the otherwise tabular data, in a tree-like fashion. - -The important bits to enable this are: - - * ida_dirtree.dirspec_t (and my_dirspec_t) - * ida_kernwin.CH_HAS_DIRTREE - * ida_kernwin.Choose.OnGetDirTree - * ida_kernwin.Choose.OnIndexToInode - -#### Keywords -actions chooser folders - -#### Uses -* ida_dirtree.DTE_OK -* ida_dirtree.direntry_t -* ida_dirtree.direntry_t.BADIDX -* ida_dirtree.dirspec_t -* ida_dirtree.dirtree_t -* ida_dirtree.dirtree_t.isdir -* ida_kernwin.CH_CAN_DEL -* ida_kernwin.CH_CAN_EDIT -* ida_kernwin.CH_CAN_INS -* ida_kernwin.CH_HAS_DIRTREE -* ida_kernwin.CH_MULTI -* ida_kernwin.Choose -* ida_kernwin.Choose.ALL_CHANGED -* ida_kernwin.Choose.CHCOL_DRAGHINT -* ida_kernwin.Choose.CHCOL_INODENAME -* ida_kernwin.Choose.CHCOL_PLAIN -* ida_kernwin.ask_str -* ida_netnode.BADNODE -* ida_netnode.netnode - -#### See also -* [choose](#choose) -* [choose_multi](#choose_multi) - -
- -
- -#### custom_graph_with_actions -
- Drawing custom graphs - -
- -#### Source code -widgets/graphs/custom_graph_with_actions.py - -#### Category -widgets - -#### Description -Showing custom graphs, using `ida_graph.GraphViewer`. In addition, -show how to write actions that can be performed on those. - -#### Keywords -actions graph View_Hooks - -#### Uses -* ida_funcs.get_func -* ida_funcs.get_func_name -* ida_graph.GraphViewer -* ida_graph.get_graph_viewer -* ida_graph.screen_graph_selection_t -* ida_graph.viewer_get_selection -* ida_idp.is_call_insn -* ida_kernwin.AST_ENABLE_ALWAYS -* ida_kernwin.View_Hooks -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.attach_dynamic_action_to_popup -* ida_kernwin.get_screen_ea -* ida_ua.decode_insn -* ida_ua.insn_t -* ida_xref.XREF_FAR -* ida_xref.xrefblk_t - -
- -
- -#### custom_viewer -
- Create custom listings in IDA - -
- -#### Source code -widgets/listings/custom_viewer.py - -#### Category -widgets - -#### Description -How to create simple listings, that will share many of the features -as the built-in IDA widgets (highlighting, copy & paste, -notifications, ...) - -In addition, creates actions that will be bound to the -freshly-created widget (using `ida_kernwin.attach_action_to_popup`.) - -#### Keywords -actions ctxmenu listing - -#### Uses -* ida_kernwin.AST_ENABLE_ALWAYS -* ida_kernwin.IK_DELETE -* ida_kernwin.IK_ESCAPE -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.ask_long -* ida_kernwin.ask_str -* ida_kernwin.attach_action_to_popup -* ida_kernwin.register_action -* ida_kernwin.simplecustviewer_t -* ida_kernwin.simplecustviewer_t.Create -* ida_kernwin.simplecustviewer_t.Show -* ida_kernwin.unregister_action -* ida_lines.COLOR_DEFAULT -* ida_lines.COLOR_DNAME -* ida_lines.COLSTR -* ida_lines.SCOLOR_PREFIX -* ida_lines.SCOLOR_VOIDOP - -
- -
- -#### func_chooser -
- An alternative view over the list of functions - -
- -#### Source code -widgets/tabular_views/custom/func_chooser.py - -#### Category -widgets - -#### Description -Partially re-implements the "Functions" widget present in -IDA, with a custom widget. - -#### Keywords -chooser functions - -#### Uses -* ida_funcs.get_func_name -* ida_kernwin.Choose -* ida_kernwin.Choose.ALL_CHANGED -* ida_kernwin.Choose.CHCOL_FNAME -* ida_kernwin.Choose.CHCOL_HEX -* ida_kernwin.Choose.CHCOL_PLAIN -* ida_kernwin.get_icon_id_by_name -* idautils.Functions -* idc.del_func - -#### See also -* [choose](#choose) -* [choose_multi](#choose_multi) -* [chooser_with_folders](#chooser_with_folders) - -
- -
- -#### jump_next_comment -
- Implement a "jump to next comment" action within IDA's disassembly view. - -
- -#### Source code -widgets/listings/jump_next_comment.py - -#### Category -widgets - -#### Description -We want our action not only to find the next line containing a comment, -but to also place the cursor at the right horizontal position. - -To find that position, we will have to inspect the text that IDA -generates, looking for the start of a comment. -However, we won't be looking for a comment "prefix" (e.g., "; "), -as that would be too fragile. - -Instead, we will look for special "tags" that IDA injects into textual -lines, and that bear semantic information. - -Those tags are primarily used for rendering (i.e., switching colors), -but can also be very handy for spotting tokens of interest (registers, -addresses, comments, prefixes, instruction mnemonics, ...) - -#### Shortcut -Ctrl+Alt+C - -#### Keywords -actions idaview - -#### Uses -* ida_bytes.next_head -* ida_idaapi.BADADDR -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.BWN_DISASM -* ida_kernwin.CVNF_LAZY -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.custom_viewer_jump -* ida_kernwin.get_custom_viewer_location -* ida_kernwin.place_t_as_idaplace_t -* ida_kernwin.register_action -* ida_kernwin.unregister_action -* ida_lines.SCOLOR_AUTOCMT -* ida_lines.SCOLOR_ON -* ida_lines.SCOLOR_REGCMT -* ida_lines.SCOLOR_RPTCMT -* ida_lines.generate_disassembly -* ida_lines.tag_strlen -* ida_moves.lochist_entry_t - -#### See also -* [save_and_restore_listing_pos](#save_and_restore_listing_pos) - -
- -
- -#### lazy_loaded_chooser -
- - -
- -#### Source code -widgets/tabular_views/custom/lazy_loaded_chooser.py - -#### Category -widgets - -#### Description - - -
- -
- -#### save_and_restore_listing_pos -
- Save, and then restore, positions in a listing - -
- -#### Source code -widgets/listings/save_and_restore_listing_pos.py - -#### Category -widgets - -#### Description -Shows how it is possible re-implement IDA's bookmark capability, -using 2 custom actions: one action saves the current location, -and the other restores it. - -Note that, contrary to actual bookmarks, this example: - - * remembers only 1 saved position - * doesn't save that position in the IDB (and therefore cannot - be restored if IDA is closed & reopened.) - -#### Shortcuts -Ctrl+Shift+O Ctrl+Shift+S - -#### Keywords -actions listing - -#### Uses -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.BWN_CUSTVIEW -* ida_kernwin.BWN_DISASM -* ida_kernwin.BWN_ENUMS -* ida_kernwin.BWN_PSEUDOCODE -* ida_kernwin.BWN_STRUCTS -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.custom_viewer_jump -* ida_kernwin.find_widget -* ida_kernwin.get_custom_viewer_location -* ida_kernwin.register_action -* ida_kernwin.unregister_action -* ida_moves.lochist_entry_t - -#### See also -* [jump_next_comment](#jump_next_comment) - -
- -
- -#### show_and_hide_waitbox -
- Showing, updating & hiding the progress dialog - -
- -#### Source code -widgets/waitbox/show_and_hide_waitbox.py - -#### Category -widgets - -#### Description -Using the progress dialog (aka 'wait box') primitives. - -#### Keywords -actions - -#### Uses -* ida_hexrays.decompile -* ida_kernwin.hide_wait_box -* ida_kernwin.replace_wait_box -* ida_kernwin.show_wait_box -* ida_kernwin.user_cancelled -* idautils.Functions - -
- -
- -#### show_selected_strings -
- Retrieve the strings that are selected in the "Strings" window. - -
- -#### Source code -widgets/tabular_views/string_window/show_selected_strings.py - -#### Category -widgets - -#### Description -In IDA it's possible to write actions that can be applied even to -core (i.e., "standard") widgets. The actions in this example use the -action "context" to know what the current selection is. - -This example shows how you can either retrieve string literals data -directly from the chooser (`ida_kernwin.get_chooser_data`), or -by querying the IDB (`ida_bytes.get_strlit_contents`) - -#### Shortcuts -Ctrl+Shift+K Ctrl+Shift+S - -#### Keywords -actions ctxmenu - -#### Uses -* ida_bytes.get_strlit_contents -* ida_idaapi.BADADDR -* ida_kernwin.AST_DISABLE_FOR_WIDGET -* ida_kernwin.AST_ENABLE_FOR_WIDGET -* ida_kernwin.BWN_STRINGS -* ida_kernwin.action_desc_t -* ida_kernwin.action_handler_t -* ida_kernwin.attach_action_to_popup -* ida_kernwin.find_widget -* ida_kernwin.get_chooser_data -* ida_kernwin.open_strings_window -* ida_kernwin.register_action -* ida_kernwin.unregister_action -* ida_strlist.get_strlist_item -* ida_strlist.string_info_t - -#### See also -* [list_strings](#list_strings) - -
- -
- -#### sync_two_graphs -
- Follow the movements of a disassembly graph, in another. - -
- -#### Source code -widgets/graphs/sync_two_graphs.py - -#### Category -widgets - -#### Description -Since it is possible to be notified of movements that happen -take place in a widget, it's possible to "replay" those -movements in another. - -In this case, "IDA View-B" (will be opened if necessary) will -show the same contents as "IDA View-A", slightly zoomed out. - -#### Keywords -graph idaview - -#### Uses -* ida_graph.GLICTL_CENTER -* ida_graph.viewer_fit_window -* ida_graph.viewer_get_gli -* ida_graph.viewer_set_gli -* ida_kernwin.DP_RIGHT -* ida_kernwin.IDAViewWrapper -* ida_kernwin.MFF_FAST -* ida_kernwin.TCCRT_GRAPH -* ida_kernwin.execute_sync -* ida_kernwin.find_widget -* ida_kernwin.get_custom_viewer_place -* ida_kernwin.jumpto -* ida_kernwin.open_disasm_window -* ida_kernwin.set_dock_pos -* ida_kernwin.set_view_renderer_type -* ida_moves.graph_location_info_t - -#### See also -* [wrap_idaview](#wrap_idaview) - -
- -
- -#### wrap_idaview -
- Manipulate IDAView and graph - -
- -#### Source code -widgets/idaview/wrap_idaview.py - -#### Category -widgets - -#### Description -This is an example illustrating how to manipulate an existing IDA-provided -view (and thus possibly its graph), in Python. - -#### Keywords -graph idaview - -#### Uses -* ida_graph.NIF_BG_COLOR -* ida_graph.NIF_FRAME_COLOR -* ida_graph.node_info_t -* ida_kernwin.IDAViewWrapper -* ida_kernwin.MFF_FAST -* ida_kernwin.TCCRT_FLAT -* ida_kernwin.TCCRT_GRAPH -* ida_kernwin.execute_sync - -#### See also -* [custom_graph_with_actions](#custom_graph_with_actions) -* [sync_two_graphs](#sync_two_graphs) - -
- -
+| Source code | Keywords | Level | +|-------------------------------|------------|------------------------------------| +| [py_mex3.py](https://github.com/HexRaysSA/IDAPython/tree//examples/misc/merge/py_mex3.py) | IDP_Hooks plugin | Advanced | + +**APIs Used:** +* `ida_funcs.get_func` +* `ida_ida.IDI_ALTVAL` +* `ida_ida.IDI_CSTR` +* `ida_ida.IDI_SCALAR` +* `ida_ida.IDI_SUPVAL` +* `ida_ida.idbattr_info_t` +* `ida_idaapi.BADADDR` +* `ida_idaapi.PLUGIN_MOD` +* `ida_idaapi.PLUGIN_MULTI` +* `ida_idaapi.plugin_t` +* `ida_idaapi.plugmod_t` +* `ida_idp.IDP_Hooks` +* `ida_kernwin.Form` +* `ida_kernwin.Form.ChkGroupControl` +* `ida_kernwin.Form.StringInput` +* `ida_kernwin.get_screen_ea` +* `ida_merge.MERGE_KIND_END` +* `ida_merge.MERGE_KIND_NONE` +* `ida_merge.MH_UI_COLONNAME` +* `ida_merge.MH_UI_COMMANAME` +* `ida_merge.MH_UI_NODETAILS` +* `ida_merge.NDS_IS_STR` +* `ida_merge.NDS_MAP_IDX` +* `ida_merge.create_nodeval_merge_handlers` +* `ida_merge.get_ea_diffpos_name` +* `ida_merge.merge_handler_params_t` +* `ida_merge.merge_node_helper_t` +* `ida_merge.merge_node_info_t` +* `ida_merge.moddata_diff_helper_t` +* `ida_mergemod.create_std_modmerge_handlers` +* `ida_nalt.node2ea` +* `ida_netnode.BADNODE` +* `ida_netnode.SIZEOF_nodeidx_t` +* `ida_netnode.atag` +* `ida_netnode.netnode` +* `ida_netnode.stag` + +*** diff --git a/examples/cvt64/py_cvt64_sample.py b/examples/misc/cvt64/py_cvt64_sample.py similarity index 91% rename from examples/cvt64/py_cvt64_sample.py rename to examples/misc/cvt64/py_cvt64_sample.py index 11ff7e8..507fb6b 100755 --- a/examples/cvt64/py_cvt64_sample.py +++ b/examples/misc/cvt64/py_cvt64_sample.py @@ -1,8 +1,10 @@ """ -summary: This file contains the CVT64 examples. +summary: add 64-bit (.idb->.i64) conversion capabilities to custom plugins description: For more infortmation see SDK/plugins/cvt64_sample example + +level: advanced """ import idaapi @@ -29,7 +31,7 @@ class idp_listener_t(idaapi.IDP_Hooks): return 1 if name == HASH_ADDRESS: address = helper.hashval_long(name) - if address == ida_idaapi.BADADDR32: + if address == ida_idaapi.BADADDR32: address = ida_idaapi.BADADDR helper.hashset_idx(name, address) return 1 @@ -38,14 +40,14 @@ class idp_listener_t(idaapi.IDP_Hooks): def ev_cvt64_supval(self, node, tag, idx, data): helper = idaapi.netnode(SAMPLE_NETNODE_NAME) if helper == node: - if tag == ida_netnode.stag and idx == ida_idaapi.BADADDR32: + if tag == ida_netnode.stag and idx == ida_idaapi.BADADDR32: helper.supset(DEVICE_INDEX, data) return 1 if tag == ida_netnode.atag and len(data): - if idx == ida_idaapi.BADADDR32: + if idx == ida_idaapi.BADADDR32: idx = IDPFLAGS_INDEX val = int.from_bytes(data, 'little') - if val == ida_idaapi.BADADDR32: + if val == ida_idaapi.BADADDR32: val = ida_idaapi.BADADDR helper.altset(idx, val) return 1 diff --git a/examples/core/extend_idc.py b/examples/misc/extend_idc.py similarity index 89% rename from examples/core/extend_idc.py rename to examples/misc/extend_idc.py index 982006c..e299f29 100644 --- a/examples/core/extend_idc.py +++ b/examples/misc/extend_idc.py @@ -1,5 +1,5 @@ """ -summary: add functions to the IDC runtime from IDAPython +summary: add functions to the IDC runtime, from IDAPython description: You can add IDC functions to IDA, whose "body" consists of @@ -12,6 +12,8 @@ description: After running this script, try switching to the IDC interpreter (using the button on the lower-left corner of IDA) and executing `pow(3, 7)` + +level: intermediate """ import ida_expr diff --git a/examples/core/idapythonrc.py b/examples/misc/idapythonrc.py similarity index 97% rename from examples/core/idapythonrc.py rename to examples/misc/idapythonrc.py index f2cc0d2..160a895 100644 --- a/examples/core/idapythonrc.py +++ b/examples/misc/idapythonrc.py @@ -1,4 +1,4 @@ -""" +r""" summary: code to be run right after IDAPython initialization description: @@ -9,6 +9,8 @@ description: can contain any IDAPython code that will be run as soon as IDAPython is done successfully initializing. + +level: beginner """ # Add your favourite script to ScriptBox for easy access diff --git a/examples/merge/py_mex1.py b/examples/misc/merge/py_mex1.py similarity index 92% rename from examples/merge/py_mex1.py rename to examples/misc/merge/py_mex1.py index c1c6a88..1beef4d 100644 --- a/examples/merge/py_mex1.py +++ b/examples/misc/merge/py_mex1.py @@ -1,7 +1,7 @@ # pylint: disable=line-too-long,invalid-name,import-error """ -summary: add merge functionality to a simple plugin, example 1 +summary: add merge functionality to a simple plugin description: This is a primitive plugin which asks user for some info and saves it for @@ -16,6 +16,8 @@ description: To describe them we will use the merge_node_info_t type. Also, see SDK/plugins/mex1 example + +level: advanced """ @@ -28,6 +30,18 @@ import ida_merge import ida_mergemod import ida_idp +# -------------------------------------------------------------------------- +# netnode to store plugin data +MEX_NODE_NAME = "$ idapython mex1" +# user input +MEX_OPTION_FLAGS_IDX = ida_idaapi.BADADDR & -1 # atag +MEX_OPTION_IDENT_IDX = ida_idaapi.BADADDR & -2 # stag +# EA marks +MEX_EA_TAG = 'm' + +# mex_ctx_t::flags bits +MEX_FLAGS_0 = 0x01 +MEX_FLAGS_1 = 0x02 # -------------------------------------------------------------------------- class idp_listener_t(ida_idp.IDP_Hooks): @@ -62,19 +76,26 @@ class idp_listener_t(ida_idp.IDP_Hooks): return 0 + def ev_cvt64_supval(self, node, tag, idx, data): + """ + Converter to i64 database + """ + nn = ida_netnode.netnode(MEX_NODE_NAME) + if nn == node: + if tag == ida_netnode.stag: + nn.supset(MEX_OPTION_IDENT_IDX, data) + return 1 + if tag == ida_netnode.atag and len(data): + val = int.from_bytes(data, 'little') + nn.altset(MEX_OPTION_FLAGS_IDX, val) + return 1 + if chr(tag) == MEX_EA_TAG: + nn.supset(idx, data, MEX_EA_TAG) + return 1 + return 0 + + # -------------------------------------------------------------------------- -# netnode to store plugin data -MEX_NODE_NAME = "$ idapython mex1" -# user input -MEX_OPTION_FLAGS_IDX = ida_idaapi.BADADDR & -1 # atag -MEX_OPTION_IDENT_IDX = ida_idaapi.BADADDR & -2 # stag -# EA marks -MEX_EA_TAG = 'm' - -# mex_ctx_t::flags bits -MEX_FLAGS_0 = 0x01 -MEX_FLAGS_1 = 0x02 - class mex_ctx_t(ida_idaapi.plugmod_t): """ Regular plugin implementation below. diff --git a/examples/merge/py_mex3.py b/examples/misc/merge/py_mex3.py similarity index 91% rename from examples/merge/py_mex3.py rename to examples/misc/merge/py_mex3.py index dac0393..cb7dd21 100644 --- a/examples/merge/py_mex3.py +++ b/examples/misc/merge/py_mex3.py @@ -1,31 +1,37 @@ # pylint: disable=line-too-long,invalid-name,import-error """ -summary: This example uses the mex1 example and improves the user-interface for it. +summary: implement merging functionality for custom plugins description: IDA Teams uses a chooser to display the merge conflicts. To fill the chooser columns IDA Teams uses the following methods from diff_source_t type: + * print_diffpos_name() * print_diffpos_details() + and UI hints from merge_handler_params_t type: + * ui_has_details() * ui_complex_details() * ui_complex_name() In general, chooser columns are filled as following: - columns.clear() - NAME = print_diffpos_name() - if ui_complex_name() - then - columns.add(split NAME by ui_split_char()) - else - columns[0] = NAME - if not ui_complex_details() - then - columns.add(print_diffpos_details()) + + columns.clear() + NAME = print_diffpos_name() + if ui_complex_name() + then + columns.add(split NAME by ui_split_char()) + else + columns[0] = NAME + if not ui_complex_details() + then + columns.add(print_diffpos_details()) Also, see SDK/plugins/mex3 example + +level: advanced """ @@ -40,6 +46,19 @@ import ida_idp import ida_nalt +# -------------------------------------------------------------------------- +# netnode to store plugin data +MEX_NODE_NAME = "$ idapython mex3" +# user input +MEX_OPTION_FLAGS_IDX = ida_idaapi.BADADDR & -1 # atag +MEX_OPTION_IDENT_IDX = ida_idaapi.BADADDR & -2 # stag +# EA marks +MEX_EA_TAG = 'm' + +# mex_ctx_t::flags bits +MEX_FLAGS_0 = 0x01 +MEX_FLAGS_1 = 0x02 + # -------------------------------------------------------------------------- class idp_listener_t(ida_idp.IDP_Hooks): """ @@ -73,19 +92,26 @@ class idp_listener_t(ida_idp.IDP_Hooks): return 0 + def ev_cvt64_supval(self, node, tag, idx, data): + """ + Converter to i64 database + """ + nn = ida_netnode.netnode(MEX_NODE_NAME) + if nn == node: + if tag == ida_netnode.stag: + nn.supset(MEX_OPTION_IDENT_IDX, data) + return 1 + if tag == ida_netnode.atag and len(data): + val = int.from_bytes(data, 'little') + nn.altset(MEX_OPTION_FLAGS_IDX, val) + return 1 + if chr(tag) == MEX_EA_TAG: + nn.supset(idx, data, MEX_EA_TAG) + return 1 + return 0 + + # -------------------------------------------------------------------------- -# netnode to store plugin data -MEX_NODE_NAME = "$ idapython mex3" -# user input -MEX_OPTION_FLAGS_IDX = ida_idaapi.BADADDR & -1 # atag -MEX_OPTION_IDENT_IDX = ida_idaapi.BADADDR & -2 # stag -# EA marks -MEX_EA_TAG = 'm' - -# mex_ctx_t::flags bits -MEX_FLAGS_0 = 0x01 -MEX_FLAGS_1 = 0x02 - class mex_ctx_t(ida_idaapi.plugmod_t): """ Regular plugin implementation below. diff --git a/examples/types/apply_callee_tinfo.py b/examples/types/apply_callee_tinfo.py new file mode 100644 index 0000000..9c63554 --- /dev/null +++ b/examples/types/apply_callee_tinfo.py @@ -0,0 +1,49 @@ +""" +summary: apply function prototype to call sites + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we: + * Open the private type libary. + * Load its declaration in the type library by parsing its declaration and + keep the return tuple for future use. + * Deserialize the type info stored in the returned tuple. + * Get the address of the function. + * Get the address of the code reference to the function and apply + the type info there. + +level: intermediate +""" +import ida_typeinf +import ida_name +import idautils +import ida_idaapi + +def apply_type_info(callee_name, callee_prototype_decl): + til = ida_typeinf.get_idati() + parse_result = ida_typeinf.idc_parse_decl(til, callee_prototype_decl, ida_typeinf.PT_REPLACE) + if parse_result is None: + print("Failed to parse declaration.") + return + + name, types, fields, *rest = parse_result + tif = ida_typeinf.tinfo_t() + if not tif.deserialize(til, types, fields): + print("Failed to deserialize type info.") + return + + ea = ida_name.get_name_ea(ida_idaapi.BADADDR, callee_name) + if ea == ida_idaapi.BADADDR: + print(f"{callee_name} function not found.") + return + + print(f"{callee_name} function found @ {ea:x}.") + for xref in idautils.CodeRefsTo(ea, 0): + if ida_typeinf.apply_callee_tinfo(xref, tif): + print(f"\tApplied type info @ {xref:x}.") + else: + print(f"Could not apply type info @ {xref:x}") + +apply_type_info( + "KdInitSystem", + "NTSTATUS __fastcall KdInitSystem(ULONG BootPhase, _LOADER_PARAMETER_BLOCK *LoaderBlock);") diff --git a/examples/types/change_stkvar_name.py b/examples/types/change_stkvar_name.py new file mode 100644 index 0000000..0703eb2 --- /dev/null +++ b/examples/types/change_stkvar_name.py @@ -0,0 +1,56 @@ +""" +summary: change the name of an existing stack variable + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we demonstrate a way to change the name of a + stack variable: + * Get the function object surrounding cursor location. + * Use this function to retrieve the corresponding frame object. + * Find the frame member matching the given name. + * Using its offset in the frame structure object, calculate + the actual stack delta. + * Use the previous result to redefine the stack variable name if + it is not a special or argument member. + +level: advanced +""" +import ida_funcs +import ida_frame +import ida_typeinf +import idc + +def rename_stkvar(func_ea, old_name, new_name): + func = ida_funcs.get_func(func_ea) + if func is None: + print("Please position the cursor inside a function.") + return False + + print(f"Function @ {func.start_ea:x}") + frame_tif = ida_typeinf.tinfo_t() + if not ida_frame.get_func_frame(frame_tif, func): + print("No frame returned.") + return + print(f"{frame_tif._print()}") + + idx, udm = frame_tif.get_udm(old_name) + if not udm: + print(f"{old_name} not found.") + return + + print(f"Index of {old_name}: {idx}") + tid = frame_tif.get_udm_tid(idx) + if ida_frame.is_special_frame_member(tid): + print(f"{old_name} is a special frame member. Will not change the name.") + else: + udm = ida_typeinf.udm_t() + frame_tif.get_udm_by_tid(udm, tid) + offset = udm.offset // 8 + if ida_frame.is_funcarg_off(func, offset): + print(f"{old_name} is an argument member. Will not change the name.") + else: + sval = ida_frame.soff_to_fpoff(func, offset) + print(f"Frame offset: {sval:x}") + ida_frame.define_stkvar(func, new_name, sval, udm.type) + +rename_stkvar(idc.here(), "arg_8", "Renamed") diff --git a/examples/types/change_stkvar_type.py b/examples/types/change_stkvar_type.py new file mode 100644 index 0000000..19a0203 --- /dev/null +++ b/examples/types/change_stkvar_type.py @@ -0,0 +1,173 @@ +""" +summary: change the type & name of a function stack frame variable + +description: + The goal of this script is to demonstrate some usage of the type API. + + In this script, we show a way to change the type and the name + of a stack variable. In this case we will take advantage of the + fact that RtlImageNtHeader calls RtlImageNtHeaderEx which takes + a pointer to PIMAGE_NT_HEADERS as its fourth parameter and, for + this, uses a stack variable of its caller. + + * Get the function object for RtlImageNtHeader. + * Iterate through the function item to localize the load of the + stack variable address before the call to RtlImageNtHeaderEx. We + keep this information. + * Localize the call and take advantage of the previoulsy stored + instruction to get the stack variable index in the frame. + * Set the type and rename the stack variable. + +level: advanced +""" +import ida_name +import ida_funcs +import ida_allins +import ida_typeinf +import ida_ua +import ida_frame +import ida_idaapi +import ida_ida + +""" +Before running the script: + + STACK VIEW ++0000000000000000 _UNKNOWN *__return_address; ++0000000000000008 // padding byte ++0000000000000009 // padding byte ++000000000000000A // padding byte ++000000000000000B // padding byte ++000000000000000C // padding byte ++000000000000000D // padding byte ++000000000000000E // padding byte ++000000000000000F // padding byte ++0000000000000010 _QWORD arg_8; + + DISASSEMBLY +.text:000000018002E770 public RtlImageNtHeader +.text:000000018002E770 RtlImageNtHeader proc near ; CODE XREF: sub_180007FF4+1B1↑p +.text:000000018002E770 ; sub_18002E394+66↑p ... +.text:000000018002E770 +.text:000000018002E770 arg_8 = qword ptr 10h +.text:000000018002E770 +.text:000000018002E770 48 83 EC 28 sub rsp, 28h +.text:000000018002E774 48 83 64 24 38 00 and [rsp+28h+arg_8], 0 +.text:000000018002E77A 4C 8D 4C 24 38 lea r9, [rsp+28h+arg_8] +.text:000000018002E77F 45 33 C0 xor r8d, r8d +.text:000000018002E782 48 8B D1 mov rdx, rcx +.text:000000018002E785 41 8D 48 01 lea ecx, [r8+1] +.text:000000018002E789 E8 52 5C FF FF call RtlImageNtHeaderEx +.text:000000018002E789 +.text:000000018002E78E 48 8B 44 24 38 mov rax, [rsp+28h+arg_8] +.text:000000018002E793 48 83 C4 28 add rsp, 28h +.text:000000018002E797 C3 retn + +After running the script: + + STACK VIEW +-0000000000000001 // padding byte ++0000000000000000 _UNKNOWN *__return_address; ++0000000000000008 // padding byte ++0000000000000009 // padding byte ++000000000000000A // padding byte ++000000000000000B // padding byte ++000000000000000C // padding byte ++000000000000000D // padding byte ++000000000000000E // padding byte ++000000000000000F // padding byte ++0000000000000010 struct _IMAGE_NT_HEADERS64 *pNtHeaders; + + + DISASSEMBLY +.text:000000018002E770 public RtlImageNtHeader +.text:000000018002E770 RtlImageNtHeader proc near ; CODE XREF: sub_180007FF4+1B1↑p +.text:000000018002E770 ; sub_18002E394+66↑p ... +.text:000000018002E770 +.text:000000018002E770 pNtHeaders = qword ptr 10h +.text:000000018002E770 +.text:000000018002E770 48 83 EC 28 sub rsp, 28h +.text:000000018002E774 48 83 64 24 38 00 and [rsp+28h+pNtHeaders], 0 +.text:000000018002E77A 4C 8D 4C 24 38 lea r9, [rsp+28h+pNtHeaders] +.text:000000018002E77F 45 33 C0 xor r8d, r8d +.text:000000018002E782 48 8B D1 mov rdx, rcx +.text:000000018002E785 41 8D 48 01 lea ecx, [r8+1] +.text:000000018002E789 E8 52 5C FF FF call RtlImageNtHeaderEx +.text:000000018002E789 +.text:000000018002E78E 48 8B 44 24 38 mov rax, [rsp+28h+pNtHeaders] +.text:000000018002E793 48 83 C4 28 add rsp, 28h +.text:000000018002E797 C3 retn +""" + +new_name = "pNtHeaders" +caller_name = "RtlImageNtHeader" +callee_name = "RtlImageNtHeaderEx" + +type_name = "_IMAGE_NT_HEADERS64" + +lea_insn = None + +def main(): + if not ida_ida.inf_is_64bit() or ida_ida.inf_get_procname() != "metapc": + print("Not an x64 database. Quitting!") + return + + func_ea = ida_name.get_name_ea(ida_idaapi.BADADDR, caller_name) + if func_ea == ida_idaapi.BADADDR: + print(f"Function {caller_name} not found. Quitting!") + return + + # We will need the register number for `r9` + import idautils + R_r9 = idautils.procregs.r9.reg + + func_items = ida_funcs.func_item_iterator_t(ida_funcs.get_func(func_ea)) + for func_item in func_items.code_items(): + curr_insn = ida_ua.insn_t() + if not ida_ua.decode_insn(curr_insn, func_item): + continue + + if curr_insn.itype == ida_allins.NN_lea: + if curr_insn.Op1.type == ida_ua.o_reg and curr_insn.Op1.is_reg(R_r9): + lea_insn = curr_insn + continue + + if curr_insn.itype != ida_allins.NN_call: + continue + + if ida_funcs.get_func_name(curr_insn.Op1.addr) == callee_name: + caller_func = ida_funcs.get_func(func_ea) + + caller_frame = ida_typeinf.tinfo_t() + if not ida_frame.get_func_frame(caller_frame, caller_func): + print("Unable to get the frame of the caller function. Quitting!") + break + + if lea_insn is None: + print("LEA address is None. Could not happen! Stop!") + break + + idx = caller_frame.get_stkvar(lea_insn, lea_insn.Op2, lea_insn.Op2.addr) + if idx == -1: + print("Returned stack variable index is -1. Should not happen. Stop!") + break + + tif = ida_typeinf.tinfo_t() + if not tif.get_named_type(None, type_name, ida_typeinf.BTF_STRUCT): + print(f"Unable to retrieve {type_name} type info object") + continue + + if not tif.create_ptr(tif): + print("Unable to create the pointer type.") + continue + + if caller_frame.set_udm_type(idx, tif) == ida_typeinf.TERR_OK: + print(f"Type applied to stack variable index {idx}.") + if caller_frame.rename_udm(idx, new_name) == ida_typeinf.TERR_OK: + print(f"Name changed for stack variable index {idx}.") + else: + print(f"Unable to rename stack variable index {idx}.") + else: + print(f"Unable to change type of stack variable index {idx}.") + +main() diff --git a/examples/types/create_array.py b/examples/types/create_array.py new file mode 100644 index 0000000..c066eb8 --- /dev/null +++ b/examples/types/create_array.py @@ -0,0 +1,35 @@ +""" +summary: create an array type + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we create an array using both versions of + create_array tinfo_t method. + +level: intermediate +""" + +import ida_typeinf + +""" +First method: +* Create the type info object of the array element. +* Create an array of 5 integers (base index set to zero) +""" +tif = ida_typeinf.tinfo_t(ida_typeinf.BTF_INT) +if tif.create_array(tif, 5, 0): + print(f"{tif._print()}") + +""" +Second method: +* Create an array type data object representing an array + of 5 integers with base index 10. +* Create the array using the just constructed object. +""" +atd = ida_typeinf.array_type_data_t() +atd.base = 10 +atd.nelems = 5 +atd.elem_type = ida_typeinf.tinfo_t(ida_typeinf.BTF_INT) +tif = ida_typeinf.tinfo_t() +if tif.create_array(atd): + print(f"{tif._print()}") diff --git a/examples/types/create_bfstruct.py b/examples/types/create_bfstruct.py new file mode 100644 index 0000000..17a6d2a --- /dev/null +++ b/examples/types/create_bfstruct.py @@ -0,0 +1,37 @@ +""" +summary: create a structure with bitfield members + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we: + * Create a bitfield structure. In the present case the bitfield is an int32 + made of three 'members' spanning it entirely: + bit0->bit19: bf1 + bit20->bit25: bf2 + bit26->bit31: bf3 + * For each member create a repeatable comment. + +level: intermediate +""" +import ida_typeinf + +# Create and fill the containing user data type. +udt = ida_typeinf.udt_type_data_t() +for name, offset, size, bitfield_info in [ + ("bf1", 0, 20, (4, 20)), + ("bf2", 20, 6, (4, 6)), + ("bf3", 26, 6, (4, 6)) +]: + bf_bucket_size, bf_nbits = bitfield_info + bftif = ida_typeinf.tinfo_t() + bftif.create_bitfield(bf_bucket_size, bf_nbits) + udm = ida_typeinf.udm_t(name, bftif) + udm.offset = offset + udm.size = size + udm.cmt = f"Bitfield member {name}" + udt.push_back(udm) + +# Create the type. +tif = ida_typeinf.tinfo_t() +if tif.create_udt(udt): + print(f"{tif._print()}") diff --git a/examples/types/create_bmenum.py b/examples/types/create_bmenum.py new file mode 100644 index 0000000..cfbf50c --- /dev/null +++ b/examples/types/create_bmenum.py @@ -0,0 +1,25 @@ +""" +summary: create a bitmask enumeration + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we create a bitmask enumeration member by member. + +level: intermediate +""" +import ida_typeinf + +tif = ida_typeinf.tinfo_t() +tif.create_enum(ida_typeinf.BTE_HEX | ida_typeinf.BTE_BITMASK) +for name, value in [("field1", 1), ("field2", 2), ("field3", 0xC)]: + tif.add_edm(name, value) + +print(f"{tif._print()}") + +""" +Now let's add a couple enumerators to a separate group +""" + +tif.add_edm("field1_1", 0x1100, 0xFF00) +tif.add_edm("field1_2", 0x1200, 0xFF00) +print(f"{tif._print()}") diff --git a/examples/types/create_libssh2_til.py b/examples/types/create_libssh2_til.py new file mode 100644 index 0000000..fc40f64 --- /dev/null +++ b/examples/types/create_libssh2_til.py @@ -0,0 +1,74 @@ +""" +summary: create a type library file + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script: + * We create a new libssh2-64.til file holding some libssh2 64-bit structures. + * Once the file has been created, it can copied in the IDA install + til directory or in the user IDA til directory. + +level: intermediate +""" +import ida_typeinf +import ida_kernwin + +libssh2_types = """ +typedef unsigned char uint8_t; +typedef unsigned int uint32_t; +typedef __int64 size_t; + +struct _LIBSSH2_USERAUTH_KBDINT_PROMPT +{ + unsigned char *text; + size_t length; + unsigned char echo; +}; +typedef struct _LIBSSH2_USERAUTH_KBDINT_PROMPT LIBSSH2_USERAUTH_KBDINT_PROMPT; + +struct _LIBSSH2_USERAUTH_KBDINT_RESPONSE +{ + char *text; + unsigned int length; +}; +typedef struct _LIBSSH2_USERAUTH_KBDINT_RESPONSE LIBSSH2_USERAUTH_KBDINT_RESPONSE; + +struct _LIBSSH2_SK_SIG_INFO { + uint8_t flags; + uint32_t counter; + unsigned char *sig_r; + size_t sig_r_len; + unsigned char *sig_s; + size_t sig_s_len; +}; +typedef struct _LIBSSH2_SK_SIG_INFO LIBSSH2_SK_SIG_INFO; + +""" + + +def create_libssh2_til(): + + # Create a new til file. + til = ida_typeinf.new_til("libssh2-64.til", "Some libssh2 types") + + # Parse the declaratiion, ignoring redeclaration warnings and applying default packing/ + if ida_typeinf.parse_decls(til, libssh2_types, None, ida_typeinf.HTI_DCL | ida_typeinf.HTI_PAKDEF) != 0: + raise Exception("Failed to parse the libssh2 declarations.\n") + + ida_typeinf.compact_til(til) + + return til + + +if __name__ == "__main__": + til = create_libssh2_til() + + print("Create type library with the following types") + for tif in til.named_types(): + print("\t%s" % str(tif)) + + # The save the til in the current working directory. + if ida_typeinf.store_til(til, None, "libssh2-64.til"): + print("TIL file stored on disk.\n") + + ida_typeinf.free_til(til) diff --git a/examples/types/create_struct_by_member.py b/examples/types/create_struct_by_member.py new file mode 100644 index 0000000..992afa0 --- /dev/null +++ b/examples/types/create_struct_by_member.py @@ -0,0 +1,50 @@ +""" +summary: create a structure programmatically + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we create a structure by building it member by member. + +level: intermediate +""" +import ida_typeinf + +# Delete the structure in case it already exist. +ida_typeinf.del_named_type(None, "pcaprec_hdr_s", ida_typeinf.NTF_TYPE) + +print("Add udt members") +# Create and fill the udt. +field_list = [("ts_sec", ida_typeinf.BTF_UINT32), + ("ts_usec", ida_typeinf.BTF_UINT32), + ("incl_len", ida_typeinf.BTF_UINT32), + ("orig_len", ida_typeinf.BTF_UINT32)] +udt = ida_typeinf.udt_type_data_t() +for (name, _type) in field_list: + udm = udt.add_member(name, ida_typeinf.tinfo_t(_type)) + print("udm:", udm.name, udm.size, udm.offset) + +print("Changing udm from last iteration") +udm.name = "upd_udm" +udm.offset = 3 +print("Compare updated udm with the last in the udt") +last = udt.back() +print("udm at the end:", last.name, last.offset) +print("Equal:", last == udm) +print("But not the same object:", last is not udm) + +# Actually create the type +tif = ida_typeinf.tinfo_t() +if tif.create_udt(udt): + print("Created:", + ida_typeinf.tinfo_errstr(tif.set_named_type(None, "pcaprec_hdr_s"))) + +print("\nCheck that the layout is correct") +udt = ida_typeinf.udt_type_data_t() +if tif.get_udt_details(udt): + print(f"Listing the pcaprec_hdr_s structure {udt.size()} field names:") + for idx, udm in enumerate(udt): + print(f"Field {idx}: {udm.name}, " + f"size: {udm.size}, offset: {udm.offset}") + idx += 1 +else: + print("Unable to get udt details for structure") diff --git a/examples/types/create_struct_by_parsing.py b/examples/types/create_struct_by_parsing.py new file mode 100644 index 0000000..61b7805 --- /dev/null +++ b/examples/types/create_struct_by_parsing.py @@ -0,0 +1,33 @@ +""" +summary: create a structure by parsing its definition + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we create a structure using the "parsing" method. + +level: beginner +""" +import ida_typeinf + +# Create a struct with parsing. +struct_name = "pcap_hdr_s" +struct_str = """ +typedef int int32_t; +typedef unsigned int uint32_t; + +struct pcap_hdr_s { + uint32_t magic_number; /* magic number */ + uint16_t version_major; /* major version number */ + uint16_t version_minor; /* minor version number */ + int32_t thiszone; /* GMT to local correction */ + uint32_t sigfigs; /* accuracy of timestamps */ + uint32_t snaplen; /* max length of captured packets, in octets */ + uint32_t network; /* data link type */ +}; +""" + + +tif = ida_typeinf.tinfo_t(struct_str) + +# Persist it to the "Local types" type library +tif.set_named_type(None, struct_name) diff --git a/examples/core/create_structure_programmatically.py b/examples/types/create_structure_programmatically.py similarity index 50% rename from examples/core/create_structure_programmatically.py rename to examples/types/create_structure_programmatically.py index f4f247e..1d7ec9b 100644 --- a/examples/core/create_structure_programmatically.py +++ b/examples/types/create_structure_programmatically.py @@ -1,11 +1,13 @@ """ -summary: programmatically create & populate a structure +summary: create & populate a structure description: Usage of the API to create & populate a structure with members of different types. author: Gergely Erdelyi (gergely.erdelyi@d-dome.net) + +level: intermediate """ #--------------------------------------------------------------------- @@ -22,7 +24,7 @@ import idc tif = ida_typeinf.tinfo_t() if tif.get_named_type(None, "mystr1"): ida_typeinf.del_named_type(None, "mystr1", ida_typeinf.NTF_TYPE) -ida_typeinf.idc_parse_types('struct mystr1 { };', 0) +ida_typeinf.idc_parse_types("struct mystr1 { };", 0) if not tif.get_named_type(None, "mystr1"): print("Error retrieving mystr1") print("%x" % tif.get_ordinal()) @@ -39,29 +41,20 @@ simple_types_data = [ (ida_typeinf.BTF_TBYTE, 10), ] -udm = ida_typeinf.udm_t() for i, tpl in enumerate(simple_types_data): t, nsize = tpl - udm.name = "t%02d" % i - udm.size = nsize * 8 - udm.type = ida_typeinf.tinfo_t(t) - udm.offset = tif.get_unpadded_size() * 8 - print("t%x:"% t, - ida_typeinf.tinfo_errstr(tif.add_udm(udm)) ) + udm = ida_typeinf.udm_t(f"t{i:02d}", t, tif.get_unpadded_size() * 8) + print(f"t{t:x}:", ida_typeinf.tinfo_errstr(tif.add_udm(udm))) -repr = ida_typeinf.value_repr_t() -repr.set_vtype(ida_typeinf.FRB_NUMO) +repr_ = ida_typeinf.value_repr_t() +repr_.set_vtype(ida_typeinf.FRB_NUMO) print("Set member representation to octal:", - ida_typeinf.tinfo_errstr(tif.set_udm_repr(3, repr)) ) + ida_typeinf.tinfo_errstr(tif.set_udm_repr(3, repr_))) # Test ASCII type -udm = ida_typeinf.udm_t() -udm.name = "tascii" -udm.size = 8 * 8 -udm.type.parse('char tascii[8] __strlit(C,"windows-1252");') # no other way? -udm.offset = tif.get_size() * 8 -print("%s:"% udm.name, - ida_typeinf.tinfo_errstr(tif.add_udm(udm)) ) +udm = ida_typeinf.udm_t("tascii", ida_typeinf.BTF_INT64, tif.get_size() * 8) +udm.type.parse('char tascii[8] __strlit(C,"windows-1252");') +print(f"{udm.name}:", ida_typeinf.tinfo_errstr(tif.add_udm(udm))) # Test struct member type by preparing the whole structure at once mtif = ida_typeinf.tinfo_t() @@ -69,57 +62,47 @@ if mtif.get_named_type(None, "mystr2"): ida_typeinf.del_named_type(None, "mystr2", ida_typeinf.NTF_TYPE) mudt = ida_typeinf.udt_type_data_t() -mudt.name="mystr2" -mudm = ida_typeinf.udm_t() -mudm.name="member1" -mudm.type = ida_typeinf.tinfo_t(ida_typeinf.BTF_INT) -mudt.push_back(mudm) -mudm.name="member2" -mudt.push_back(mudm) +mudt.name = "mystr2" +tif_btf_int = ida_typeinf.tinfo_t(ida_typeinf.BTF_INT) +mudt.add_member("member1", tif_btf_int) +mudt.add_member("member2", tif_btf_int) mtif.create_udt(mudt) -print("Struct 2:", ida_typeinf.tinfo_errstr(mtif.set_named_type(None, "mystr2")) ) +print("Struct 2:", + ida_typeinf.tinfo_errstr(mtif.set_named_type(None, "mystr2"))) -#Test structure member -udm.size = mtif.get_size() * 8 -udm.offset = tif.get_unpadded_size() * 8 -udm.name = "tstruct" -udm.type = mtif -print("Struct member:", ida_typeinf.tinfo_errstr(tif.add_udm(udm)) ) +# Test structure member +udm = ida_typeinf.udm_t("tstruct", mtif, tif.get_unpadded_size() * 8) +print("Struct member:", ida_typeinf.tinfo_errstr(tif.add_udm(udm))) -#Test pointer to structure -udm.name = "strptr" -udm.size = 32 -udm.offset = tif.get_unpadded_size() * 8 if not mtif.create_ptr(mtif): print("Error while creating structure pointer") -udm.type = mtif -print("Strptr:", ida_typeinf.tinfo_errstr(tif.add_udm(udm)) ) -#Test structure offset -udm.name = "tstroff" -udm.size = 32 -udm.offset = tif.get_unpadded_size() * 8 +# Test pointer to structure +udm = ida_typeinf.udm_t("strptr", mtif, tif.get_unpadded_size() * 8) +print("Strptr:", ida_typeinf.tinfo_errstr(tif.add_udm(udm))) + +# Test structure offset +udm = ida_typeinf.udm_t("tstroff", mtif, tif.get_unpadded_size() * 8) udm.type.parse("int tstroff __stroff(mystr2);") -print("Stroff:", ida_typeinf.tinfo_errstr(tif.add_udm(udm)) ) +print("Stroff:", ida_typeinf.tinfo_errstr(tif.add_udm(udm))) # Test offset types -udm.name = "toffset" -udm.size = 32 -udm.offset = tif.get_unpadded_size() * 8 +udm = ida_typeinf.udm_t("toffset", mtif, tif.get_unpadded_size() * 8) udm.type.parse("void *toffset;") -print("Offset:", ida_typeinf.tinfo_errstr(tif.add_udm(udm)) ) +print("Offset:", ida_typeinf.tinfo_errstr(tif.add_udm(udm))) # Test C bitfield types -udm.name = "tbitfield" -udm.offset = tif.get_unpadded_size() * 8 btif = ida_typeinf.tinfo_t() -btif.create_bitfield(4, 2, True) # unsigned __int32 : 2 -udm.size = 2 -udm.type = btif -print("Bitfield:", ida_typeinf.tinfo_errstr(tif.add_udm(udm)) ) +bf_nbits = 2 +btif.create_bitfield(4, bf_nbits, True) # unsigned __int32 : 2 +udm = ida_typeinf.udm_t("tbitfield", btif, tif.get_unpadded_size() * 8) +# Need to set value to width, otherwise getting "Bitfield: bad size" +udm.size = bf_nbits +print("Bitfield:", ida_typeinf.tinfo_errstr(tif.add_udm(udm))) # Print the expanded structure -pflags = ida_typeinf.PRTYPE_TYPE|ida_typeinf.PRTYPE_DEF|ida_typeinf.PRTYPE_MULTI +pflags = (ida_typeinf.PRTYPE_TYPE | ida_typeinf.PRTYPE_DEF + | ida_typeinf.PRTYPE_MULTI) print(tif._print(tif.get_type_name(), pflags)) if mtif.get_named_type(None, "mystr2"): print(mtif._print(mtif.get_type_name(), pflags)) diff --git a/examples/types/create_union_by_member.py b/examples/types/create_union_by_member.py new file mode 100644 index 0000000..e13df09 --- /dev/null +++ b/examples/types/create_union_by_member.py @@ -0,0 +1,39 @@ +""" +summary: create a union + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we create a union by building it member after member. + +level: intermediate +""" +import ida_typeinf + +field_list = [("member1", ida_typeinf.BTF_INT32), + ("member2", ida_typeinf.BTF_CHAR), + ("member3", ida_typeinf.BTF_FLOAT)] + +# Delete the structure in case it already exist. +ida_typeinf.del_named_type(None, "my_union", ida_typeinf.NTF_TYPE) + +# Create a union member by member. +udt = ida_typeinf.udt_type_data_t() +udt.is_union = True +for (name, _type) in field_list: + udm = ida_typeinf.udm_t(name, _type) + udt.push_back(udm) + +# Add a pointer to a Elf32_Sym and actually create the type. +tif = ida_typeinf.tinfo_t() +if tif.get_named_type("Elf32_Sym") and tif.create_ptr(tif): + udm = ida_typeinf.udm_t("header_ptr", tif) + udt.push_back(udm) + if tif.create_udt(udt, ida_typeinf.BTF_UNION): + tif.set_named_type(None, "my_union") + print(tif._print(tif.get_type_name(), ida_typeinf.PRTYPE_TYPE + | ida_typeinf.PRTYPE_DEF | ida_typeinf.PRTYPE_MULTI)) + print("Done") + else: + print("Cannot create udt") +else: + print("Error while getting pointer to Elf32_Sym") diff --git a/examples/types/create_user_shared_data.py b/examples/types/create_user_shared_data.py new file mode 100644 index 0000000..cb17d67 --- /dev/null +++ b/examples/types/create_user_shared_data.py @@ -0,0 +1,59 @@ +""" +summary: create a segment, and define (complex) data in it + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we show how to create, set type and name of + a user shared data region in an ntdll IDB: + * Load the `_KUSER_SHARED_DATA` data type from a type info + library shipped with IDA, and import it into the IDB's "local types" + * Create a data segment with UserSharedData as its name. + * Apply the type to the start of the newly created segment base + address. + * Set the address name. + +level: intermediate +""" +import ida_segment +import ida_typeinf +import ida_name +import ida_kernwin + +USE64 = 2 +PERM_RW = 0x6 +start_ea = 0x7FFE0000 + +_KUSER_SHARED_DATA = "_KUSER_SHARED_DATA" + +tif = ida_typeinf.get_idati().get_named_type(_KUSER_SHARED_DATA) +if not tif: + + # Load type library containing the type we're interested in + ntddk64 = ida_typeinf.load_til("ntddk64") + + # Import the type in the "Local types" + tif = ida_typeinf.get_idati().import_type(ntddk64.get_named_type(_KUSER_SHARED_DATA)) + + # clean up after ourselves + ida_typeinf.free_til(ntddk64) + +assert(tif is not None) + +segm = ida_segment.segment_t() +segm.start_ea = start_ea +segm.end_ea = start_ea + tif.get_size() +segm.sel = ida_segment.setup_selector(0) +segm.bitness = USE64 +segm.align = ida_segment.saRelPara +segm.comb = ida_segment.scPub +segm.perm = PERM_RW +if ida_segment.add_segm_ex(segm, "UserSharedData", "DATA", 0) < 0: + print("Unable to create the shared data segment.") +else: + if not ida_typeinf.apply_tinfo(start_ea, tif, ida_typeinf.TINFO_DEFINITE): + print(f"Unable to apply type information @ {start_ea:x}.") + else: + if ida_name.set_name(start_ea, "UserSharedData"): + print("Done!") + else: + print(f"Unable to set {start_ea:x} name.") diff --git a/examples/types/del_struct_members.py b/examples/types/del_struct_members.py new file mode 100644 index 0000000..572c755 --- /dev/null +++ b/examples/types/del_struct_members.py @@ -0,0 +1,52 @@ +""" +summary: delete structure members that fall within an offset range + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we first create a structure with many members, and then + remove all those that fall within a range. + +level: beginner +""" + +import ida_typeinf +import ida_idaapi + +struct_decl = """ +struct pcap_hdr_s { + uint32_t magic_number; /* magic number */ + uint16_t version_major; /* major version number */ + uint16_t version_minor; /* minor version number */ + int32_t thiszone; /* GMT to local correction */ + uint32_t sigfigs; /* accuracy of timestamps */ + uint32_t snaplen; /* max length of captured packets, in octets */ + uint32_t network; /* data link type */ +};""" + +# Compute the indexes that map the range, and then trash the members +def del_range(tif, start_byte_offset, end_byte_offset): + + udm = ida_typeinf.udm_t() + udm.offset = start_byte_offset * 8 + idx1 = tif.find_udm(udm, ida_typeinf.STRMEM_OFFSET) + + udm = ida_typeinf.udm_t() + udm.offset = end_byte_offset * 8 + idx2 = tif.find_udm(udm, ida_typeinf.STRMEM_OFFSET) + + return tif.del_udms(idx1, idx2) + +# Helper +def dump(message, tif): + print(message) + for udm in tif.iter_struct(): + print(f"\t{(udm.offset//8):04x}: {udm.name}") + +# Prepare type +tif = ida_typeinf.tinfo_t(struct_decl) +dump("Initially", tif) + +# Delete some members +assert(del_range(tif, 4, 16) == ida_typeinf.TERR_OK) +dump("After deleting some members", tif) + diff --git a/examples/types/gap_size_align_snippet.py b/examples/types/gap_size_align_snippet.py new file mode 100644 index 0000000..a3ef968 --- /dev/null +++ b/examples/types/gap_size_align_snippet.py @@ -0,0 +1,34 @@ +""" +summary: utilities to detect structure gaps & alignment + +description: + The goal of this script is to illustrate ways to detect gaps & alignments + in structures, from a structure name & (byte) offset. + +level: intermediate +""" + +import ida_typeinf +import ida_range + +# Get size of struct member + alignment +def get_member_size_align(struct_name, byte_offset): + tif = ida_typeinf.get_idati().get_named_type(struct_name) + if tif: + _, udm = tif.get_udm_by_offset(byte_offset * 8) + if udm: + return udm.type.get_size(), udm.effalign + return -1, -1 + +## Check if offset is part of a gap +def is_struct_gap(struc_name, byte_offset): + tif = ida_typeinf.get_idati().get_named_type(struc_name) + if not tif: + return False + rs = ida_range.rangeset_t() + tif.calc_gaps(rs) + for i in range(rs.nranges()): + r = rs.getrange(i) + if r.start_ea <= byte_offset < r.end_ea: + return True + return False diff --git a/examples/types/get_best_fit_member.py b/examples/types/get_best_fit_member.py new file mode 100644 index 0000000..94ad2b7 --- /dev/null +++ b/examples/types/get_best_fit_member.py @@ -0,0 +1,39 @@ +""" +summary: get member by offset, taking into account variable sized structures + +description: + The goal of this script is to provide a way to figure out + what structure member, is most likely referenced by an offset. + + This also works for variable sized types. + +level: intermediate +""" +import ida_typeinf +import ida_idaapi + +def get_best_fit_member(tif, offset): + udm = None + if tif.is_udt(): + udt = ida_typeinf.udt_type_data_t() + if tif.get_udt_details(udt): + _, udm = udt.get_best_fit_member(offset) + return udm + +struct_str = """struct modified_pcap_hdr_s { + uint32_t magic_number; /* magic number */ + uint16_t version_info[6]; + int32_t thiszone; /* GMT to local correction */ + uint32_t sigfigs; /* accuracy of timestamps */ + uint32_t snaplen; /* max length of captured packets, in octets */ + unsigned char mybytes[8]; +};""" + +tif = ida_typeinf.tinfo_t(struct_str) + +byte_offset = 5 +udm = get_best_fit_member(tif, byte_offset) +if udm: + print(f"Found: {udm.name}") +else: + print(f"No member at {byte_offset}") diff --git a/examples/types/get_innermost_member.py b/examples/types/get_innermost_member.py new file mode 100644 index 0000000..0271d43 --- /dev/null +++ b/examples/types/get_innermost_member.py @@ -0,0 +1,137 @@ +""" +summary: get information about the "innermost" member of a structure + +description: + Assuming the 2 following types: + + struct b + { + int low; + int high; + }; + + struct a + { + int foo; + b b_instance; + int bar; + }; + + looking at an offset of 5 bytes inside an `a` instance, might be + interpreted as pointing somewhere inside member `b_instance`, of type `b`. + Alternatively, that same offset might be intprereted as pointing + somewhere inside `low`, of type `int`. + + We refer to that latter interpretation as "innermost", and this sample + shows how the API lets us "drill down" to retrieve that innermost member. + +level: intermediate +""" +import ida_typeinf +import ida_idaapi + +test_types = """ + +/* Taken from lighttpd headers */ + +struct lshpack_enc_table_entry; +struct lshpack_double_enc_head; + +typedef unsigned long long unix_time64_t; + +struct lshpack_enc_head { int whatever; }; + +struct lshpack_enc +{ + unsigned hpe_cur_capacity; + unsigned hpe_max_capacity; + + /* Each new dynamic table entry gets the next number. It is used to + * calculate the entry's position in the decoder table without having + * to maintain an actual array. + */ + unsigned hpe_next_id; + + /* Dynamic table entries (struct enc_table_entry) live in two hash + * tables: name/value hash table and name hash table. These tables + * are the same size. + */ + unsigned hpe_nelem; + unsigned hpe_nbits; + struct lshpack_enc_head + hpe_all_entries; + struct lshpack_double_enc_head + *hpe_buckets; + + uint32_t *hpe_hist_buf; + unsigned hpe_hist_size, hpe_hist_idx; + int hpe_hist_wrapped; + enum { + LSHPACK_ENC_USE_HIST = 1 << 0, + } hpe_flags; +}; + +struct lshpack_arr +{ + unsigned nalloc, + nelem, + off; + uintptr_t *els; +}; + +struct lshpack_dec +{ + struct lshpack_arr hpd_dyn_table; + unsigned hpd_max_capacity; /* Maximum set by caller */ + unsigned hpd_cur_max_capacity; /* Adjusted at runtime */ + unsigned hpd_cur_capacity; + unsigned hpd_state; +}; + + +struct request_st; +struct h2con { + request_st *r[8]; + uint32_t rused; + + uint32_t h2_cid; + uint32_t h2_sid; + int32_t sent_goaway; + unix_time64_t sent_settings; + uint32_t s_header_table_size; /* SETTINGS_HEADER_TABLE_SIZE */ + uint32_t s_enable_push; /* SETTINGS_ENABLE_PUSH */ + uint32_t s_max_concurrent_streams; /* SETTINGS_MAX_CONCURRENT_STREAMS */ + int32_t s_initial_window_size; /* SETTINGS_INITIAL_WINDOW_SIZE */ + uint32_t s_max_frame_size; /* SETTINGS_MAX_FRAME_SIZE */ + uint32_t s_max_header_list_size; /* SETTINGS_MAX_HEADER_LIST_SIZE */ + struct lshpack_dec decoder; + struct lshpack_enc encoder; + unix_time64_t half_closed_ts; +}; +""" + +def get_innermost_member(tif, byte_offset): + if tif.is_udt(): + (found_tif, idx, _) = tif.get_innermost_udm(byte_offset * 8) + idx, udm = found_tif.get_udm(idx) + if udm: + return found_tif, udm + return None, None + +def main(): + + idati = ida_typeinf.get_idati() + + # get, or add parent type + tif = idati.get_named_type("h2con") + if not tif: + if ida_typeinf.parse_decls(idati, test_types, True, 0) != 0: + print("Types could not be parsed.") + return + tif = idati.get_named_type("h2con") + + found_tif, member_in_found_tif = get_innermost_member(tif, 0x9a) # in the middle of h2con.encoder.hpe_hist_wrapped + if found_tif and member_in_found_tif: + print(f"Found innermost type '{found_tif}', at member with name '{member_in_found_tif.name}' and type '{member_in_found_tif.type}'") + +main() diff --git a/examples/types/import_type_from_til.py b/examples/types/import_type_from_til.py new file mode 100644 index 0000000..07752f6 --- /dev/null +++ b/examples/types/import_type_from_til.py @@ -0,0 +1,45 @@ +""" +summary: load a type library from a file, and then a type from it + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we: + * ask the user for a specific til to be lodaed + * if successfully loaded ask the user for a type name to be imported. + * append the type to the local types. + +level: intermediate +""" +import ida_netnode +import ida_typeinf +import ida_kernwin + +def main(): + til_name = ida_kernwin.ask_str("Dummy til name", 0, "Enter a til filename:") + if not til_name: + print("No til name provided.") + return + + src_til = ida_typeinf.load_til(til_name) + if not src_til: + print(f"{til_name} not added.") + return + + type_name = ida_kernwin.ask_str("Dummy type name", 0, "Enter a type name") + if not type_name: + print(f"Please provide a type name.") + return + + src_tif = src_til.get_named_type(type_name) + if not src_tif: + print(f"{til_name} has no type named {type_name}") + return + + imported_tif = ida_typeinf.get_idati().import_type(src_tif) + if not imported_tif: + print(f"Could not import {type_name}") + return + + print(f"{type_name} type has been imported, with ordinal {imported_tif.get_ordinal()}") + +main() diff --git a/examples/types/insert_struct_member.py b/examples/types/insert_struct_member.py new file mode 100644 index 0000000..2eab92e --- /dev/null +++ b/examples/types/insert_struct_member.py @@ -0,0 +1,39 @@ +""" +summary: inject a member in the middle of a structure + +description: + This sample will retrieve the type info object by its name, + find the member at the specified offset, and insert a + new member right before it + +level: intermediate +""" +import ida_typeinf + +def insert_gap(struct_name: str, byte_offset: int, member_type: ida_typeinf.tinfo_t): + + tif = ida_typeinf.tinfo_t() + if not tif.get_named_type(None, struct_name): + print(f"Unable to get {struct_name} structure.") + return False + + idx, existing_udm = tif.get_udm_by_offset(byte_offset * 8) + if idx < 0: + print(f"Cannot find member at offset {byte_offset:x}") + return False + + nbytes = member_type.get_size() + if tif.expand_udt(idx, nbytes) != ida_typeinf.TERR_OK: + print(f"Unable to create a gap member of {nbytes:x} bytes @ offset {byte_offset:x}") + return False + + new_udm = udm_t("fresh_new_member", member_type) + new_udm.offset = existing_udm.offset + tif.add_udm(new_udm, 0, 1, idx) + + return True + +if not insert_gap("_TraceLoggingMetadata_t", 8, ida_typeinf.tinfo_t(ida_typeinf.BT_INT)): + print("Failed to insert gaps.") +else: + print("Done.") diff --git a/examples/types/list_enum_member.py b/examples/types/list_enum_member.py new file mode 100644 index 0000000..0f4d676 --- /dev/null +++ b/examples/types/list_enum_member.py @@ -0,0 +1,36 @@ +""" +summary: print enumeration members + +description: + In this example, we will first ask the user to provide the name + of an enumeration, and then iterate on it + +level: beginner +""" +import ida_kernwin +import ida_typeinf + +def iter_enum(name): + tif = ida_typeinf.get_idati().get_named_type(name) + if not tif: + print(f"No type named {name} in local types") + return + + if not tif.is_enum(): + print(f"Type named {name} is not an enum") + return + + bf = "(bitfield) " if tif.is_bitmask_enum() else "" + print(f"Listing {bf}enum '{name}':") + + for idx, edm in enumerate(tif.iter_enum()): + print(f"\tField {idx}: {edm.name} = 0x{edm.value:x}") + +def main(): + name = ida_kernwin.ask_str("Dummy enum", 0, "Enter an enum name:") + if name is None: + print("Please provide an enumeration type name") + return + return iter_enum(name) + +main() diff --git a/examples/types/list_frame_info.py b/examples/types/list_frame_info.py new file mode 100644 index 0000000..322a86e --- /dev/null +++ b/examples/types/list_frame_info.py @@ -0,0 +1,37 @@ +""" +summary: print function stack frame information + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we retrieve the function frame structure, and iterate + on the frame members. + +level: beginner +""" +import ida_funcs +import ida_frame +import ida_typeinf +import ida_kernwin + +def list_frame_info(func_ea): + func = ida_funcs.get_func(func_ea) + if not func: + print(f"No function found at {func_ea:x}.") + return + + frame_tif = func.frame_object + if not frame_tif: + print(f"Function {func.name} has no frame") + return + + print("List frame information:") + print("-----------------------") + print(f"{func.name} @ {func.start_ea:x} framesize {frame_tif.get_size():x}") + print(f"Local variable size: {func.frsize:x}") + print(f"Saved registers: {func.frregs:x}") + print(f"Argument size: {func.argsize:x}") + for idx, udm in enumerate(frame_tif.iter_struct()): + print(f"\t#{idx} {udm.name}: soff={udm.offset//8:x} eof={udm.end()//8:x} {udm.type.dstr()}") + idx += 1 + +list_frame_info(ida_kernwin.get_screen_ea()) diff --git a/examples/types/list_func_details.py b/examples/types/list_func_details.py new file mode 100644 index 0000000..d99bd2d --- /dev/null +++ b/examples/types/list_func_details.py @@ -0,0 +1,26 @@ +""" +summary: list database functions prototypes + +description: + This script demonstrates how to list a function return type + along with its parameters types and name if any. + We do this for all the functions found in the database. + +level: beginner +""" +import ida_funcs +import ida_typeinf +import ida_kernwin +import ida_nalt +import idautils + +for ea in idautils.Functions(): + func = ida_funcs.get_func(ea) + prototype = func.prototype + if not prototype: + print(f"{ea:x}: {func.name} has no prototype.") + continue + + print(f"{ea:x}: {func.name} returns a: '{prototype.get_rettype()}', and accepts the following arguments:") + for arg in prototype.iter_func(): + print(f"\t{arg.name} (of type '{arg.type})'") diff --git a/examples/core/list_stkvar_xrefs.py b/examples/types/list_stkvar_xrefs.py similarity index 50% rename from examples/core/list_stkvar_xrefs.py rename to examples/types/list_stkvar_xrefs.py index 49e760d..e39edde 100644 --- a/examples/core/list_stkvar_xrefs.py +++ b/examples/types/list_stkvar_xrefs.py @@ -7,6 +7,8 @@ description: next_to() (or higher level utilities such as idautils.XrefsTo) keywords: xrefs + +level: intermediate """ ACTION_NAME = "list_stkvar_xrefs:list" @@ -17,37 +19,43 @@ import ida_frame import ida_funcs import ida_ida import ida_kernwin -import ida_struct +import ida_typeinf import ida_ua class list_stkvar_xrefs_ah_t(ida_kernwin.action_handler_t): def activate(self, ctx): cur_ea = ida_kernwin.get_screen_ea() pfn = ida_funcs.get_func(cur_ea) - if pfn: - v = ida_kernwin.get_current_viewer() - result = ida_kernwin.get_highlight(v) - if result: - stkvar_name, _ = result - frame = ida_frame.get_frame(cur_ea) - sptr = ida_struct.get_struc(frame.id) - mptr = ida_struct.get_member_by_name(sptr, stkvar_name) - if mptr: - for ea in pfn: - F = ida_bytes.get_flags(ea) - for n in range(ida_ida.UA_MAXOP): - if not ida_bytes.is_stkvar(F, n): - continue - insn = ida_ua.insn_t() - if not ida_ua.decode_insn(insn, ea): - continue - v = ida_frame.calc_stkvar_struc_offset(pfn, insn, n) - if v >= mptr.soff and v < mptr.eoff: - print("Found xref at 0x%08x, operand #%d" % (ea, n)) - else: - print("No stack variable named \"%s\"" % stkvar_name) - else: + if not pfn: print("Please position the cursor within a function") + return + + v = ida_kernwin.get_current_viewer() + result = ida_kernwin.get_highlight(v) + if not result: + print("Please highlight the stack variable name") + return + + stkvar_name, _ = result + frame = ida_typeinf.tinfo_t() + pfn = ida_funcs.get_func(cur_ea) + frame.get_func_frame(pfn) + stkvar_idx, stkvar = frame.get_udm(stkvar_name) + if stkvar_idx < 0: + print("No stack variable named \"%s\"" % stkvar_name) + return + + for ea in pfn: + F = ida_bytes.get_flags(ea) + for n in range(ida_ida.UA_MAXOP): + if not ida_bytes.is_stkvar(F, n): + continue + insn = ida_ua.insn_t() + if not ida_ua.decode_insn(insn, ea): + continue + v = ida_frame.calc_stkvar_struc_offset(pfn, insn, n) + if v >= stkvar.begin()/8 and v < stkvar.end()/8: + print("Found xref at 0x%08x, operand #%d" % (ea, n)) def update(self, ctx): return ida_kernwin.AST_ENABLE_FOR_WIDGET \ diff --git a/examples/types/list_struct_member.py b/examples/types/list_struct_member.py new file mode 100644 index 0000000..4b6495e --- /dev/null +++ b/examples/types/list_struct_member.py @@ -0,0 +1,45 @@ +""" +summary: list structure members + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we: + * Ask the user for a structure name. It must already be present in the + local types. + * Retrieve the structure type info from the local type + * Extract its type details (udt) + * Iterates it members and prints their names. + +level: beginner +""" + +import ida_kernwin +import ida_typeinf + +def main(): + name = ida_kernwin.ask_str("Dummy struct", 0, "Enter a structure name:") + if name is None: + print("No structure name provided") + return + + til = ida_typeinf.get_idati() + tif = ida_typeinf.tinfo_t() + if not tif.get_named_type(til, name, ida_typeinf.BTF_STRUCT, True, False): + print(f"'{name}' is not a structure") + return + + if tif.is_typedef(): + print(f"'{name}' is not a (non typedefed) structure.") + return + + udt = ida_typeinf.udt_type_data_t() + if not tif.get_udt_details(udt): + print(f"Unable to get udt details for structure '{name}'") + return + + print(f"Listing the {name} structure {udt.size()} field names:") + for idx, udm in enumerate(udt): + print(f"Field {idx}: {udm.name}") + idx += 1 + +main() diff --git a/examples/types/list_struct_xrefs.py b/examples/types/list_struct_xrefs.py new file mode 100644 index 0000000..3f31892 --- /dev/null +++ b/examples/types/list_struct_xrefs.py @@ -0,0 +1,33 @@ +""" +summary: list cross-references to a structure + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we: + * Ask the user for a structure name. It must already be present in the + local types. + * Get its tid + * Create the list of all the reference. + * Print it + +level: beginner +""" + +import ida_kernwin +import ida_typeinf +import ida_xref +import ida_pro + +tif = ida_typeinf.tinfo_t() +ref_eas = [] +if ida_kernwin.choose_struct(tif, "Choose one structure:"): + tid = tif.get_tid() + xrefblk = ida_xref.xrefblk_t() + for ea in xrefblk.drefs_to(tid): + ref_eas.append(ea) + + if not len(ref_eas): + print("No reference found.") + else: + for idx, ea in enumerate(ref_eas): + print(f"Refnum {idx + 1}: {ea:x}") diff --git a/examples/types/list_union_member.py b/examples/types/list_union_member.py new file mode 100644 index 0000000..a119b22 --- /dev/null +++ b/examples/types/list_union_member.py @@ -0,0 +1,33 @@ +""" +summary: list union members + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we: + * Ask the user for a union name. It must already be present in the + local types. + * Retrieve the union type info from the local type + * Extract its type details (udt) + * Iterates it members and prints their names. + +level: beginner +""" +import ida_kernwin +import ida_typeinf + +name = ida_kernwin.ask_str("Dummy union", 0, "Enter a union name:") +if name is not None: + tif = ida_typeinf.tinfo_t() + if not tif.get_named_type(ida_typeinf.get_idati(), name, ida_typeinf.BTF_UNION, True, False): + print(f"'{name}' is not a union") + elif tif.is_typedef(): + print(f"'{name}' is not a (non typedefed) union.") + else: + udt = ida_typeinf.udt_type_data_t() + if tif.get_udt_details(udt): + print(f"Listing the {name} union {udt.size()} field names:") + for idx, udm in enumerate(udt): + print(f"Field {idx}: {udm.name}") + idx += 1 + else: + print(f"Unable to get udt details for union '{name}'") diff --git a/examples/types/mark_func_spoiled.py b/examples/types/mark_func_spoiled.py new file mode 100644 index 0000000..3ed2bf9 --- /dev/null +++ b/examples/types/mark_func_spoiled.py @@ -0,0 +1,44 @@ +""" +summary: mark a register "spoiled" by a function + +description: + At least two possibilies are offered in order to indicate that a function + spoils registers (excluding the "normal" ones): + + You can either parse & apply a declaration: + + func_tfinfo = ida_typeinf.tinfo_t("int _spoils main();") + ida_typeinf.apply_tinfo(func.start_ea, func_tinfo, ida_typeinf.TINFO_DEFINITE) + + or retrieve & modify the `tinfo_t` object directly. + + This script showcases the latter. + +level: beginner +""" + +import ida_funcs +import ida_typeinf +import ida_idp +import ida_kernwin +import ida_nalt + +def mark_spoiled(address, regs): + + func = ida_funcs.get_func(address) + if func: + func_type = ida_typeinf.tinfo_t() + ida_nalt.get_tinfo(func_type, func.start_ea) + func_details = ida_typeinf.func_type_data_t() + func_type.get_func_details(func_details) + + for reg in regs: + reg_info = ida_idp.reg_info_t() + ida_idp.parse_reg_name(reg_info, reg) + func_details.spoiled.append(reg_info) + + func_details.flags |= ida_typeinf.FTI_SPOILED + func_type.create_func(func_details) + return ida_typeinf.apply_tinfo(func.start_ea, func_type, ida_typeinf.TINFO_DEFINITE) + +mark_spoiled(ida_kernwin.get_screen_ea(), ["rsi"]) diff --git a/examples/types/modify_struct_member.py b/examples/types/modify_struct_member.py new file mode 100644 index 0000000..97c99e1 --- /dev/null +++ b/examples/types/modify_struct_member.py @@ -0,0 +1,47 @@ +""" +summary: modify structure members attributes programmatically + +description: + This example shows how to access & modify certain less-obvious + attributes of structure members (pointer size, representation, ...) + + We will first create the structure without those, and then + show how to programmatically modify them. + +level: intermediate +""" + +import ida_typeinf +import ida_nalt + +# For the sake of the example, we will start with an "approximation" +# of the structure we eventually want to end up with: + +struct_def = """ +struct RTTICompleteObjectLocator +{ + int signature; + int offset; + int cdOffset; + int pTypeDescriptor; // we will eventually want: int *__ptr32 pTypeDescriptor __offset(OFF64|RVAOFF); + int pClassDescriptor; // we will eventually want: int *__ptr32 pClassDescriptor __offset(OFF64|RVAOFF); + int pSelf; // we will eventually want: int *__ptr32 pSelf __offset(OFF64|RVAOFF); +}; +""" + +tif = ida_typeinf.tinfo_t(struct_def) + +# +# We will want to +# - change the _type_, from `int`, to `int *__ptr32` +# - change the _representation_, to an RVA offset +# + +new_type = ida_typeinf.tinfo_t("int *__ptr32") + +new_repr = ida_typeinf.value_repr_t() +new_repr.set_vtype(ida_typeinf.FRB_OFFSET) +new_repr.ri.init(ida_nalt.REF_OFF64 | ida_nalt.REFINFO_RVAOFF) + +for i in range(3, 6): + tif.set_udm_type(i, new_type, 0, new_repr) diff --git a/examples/types/operand_to_struct_member.py b/examples/types/operand_to_struct_member.py new file mode 100644 index 0000000..4fdfb5d --- /dev/null +++ b/examples/types/operand_to_struct_member.py @@ -0,0 +1,108 @@ +""" +summary: turn instruction operand into a structure offset + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we: + * ask the user to choose the structure that will be used for + the conversion. + * build the structure path and call ida_bytes.op_stroff. In case + an enum is found a modal chooser is displayed in order to select + a member. + +level: advanced +""" +import ida_typeinf +import ida_kernwin +import ida_pro +import ida_ua +import ida_bytes + +class union_member_chooser_t(ida_kernwin.Choose): + def __init__(self, title, udm_list): + ida_kernwin.Choose.__init__( + self, + title, + [ + ["Type Name", 30 | ida_kernwin.Choose.CHCOL_PLAIN], + ["Type ID", 30 | ida_kernwin.Choose.CHCOL_HEX] + ] + ) + self.items = [ [udm.type.get_type_name(), hex(udm.type.get_tid())] + for udm in udm_list] + self.icon = 5 + + def OnGetSize(self): + return len(self.items) + + def OnGetLine(self, n): + return self.items[n] + + +def choose_union_member(tif): + """ + Display a chooser containing the list of the union + members. The selected entry (0-based) is returned + or -1. + """ + udm_list = [] + udt = ida_typeinf.udt_type_data_t() + if not tif.get_udt_details(udt): + return None + for udm in udt: + udm_list.append(udm) + uch = union_member_chooser_t("Choose a union member", udm_list) + return uch.Show(modal=True) + + +def build_strpath(tif, offset): + """ + Build the structure path and return it. + """ + tid_list = [] + offset *= 8 + while True: + if tif.is_udt(): + udt = ida_typeinf.udt_type_data_t() + if not tif.get_udt_details(udt): + break + if tif.is_union(): + n = choose_union_member(tif) + if n == -1: + break + tid_list.append(tif.get_udm_tid(n)) + tif = ida_typeinf.tinfo_t(udt[n].type) + elif tif.is_struct(): + tid_list.append(tif.get_tid()) + udm = ida_typeinf.udm_t() + udm.offset = offset + idx = tif.find_udm(udm, ida_typeinf.STRMEM_OFFSET) + if idx != -1: + offset -= udm.offset + tif = ida_typeinf.tinfo_t(udm.type) + else: + break + size = len(tid_list) + path = ida_pro.tid_array(size) + for idx, tid in enumerate(tid_list): + path[idx] = tid + return (path, size) + + +def main(ea): + insn = ida_ua.insn_t() + if ida_ua.decode_insn(insn, ea): + tif = ida_typeinf.tinfo_t() + if ida_kernwin.choose_struct(tif, "Choose the structure:"): + n = ida_kernwin.get_opnum() + if n == -1: + print("No operand selected") + else: + path, size = build_strpath(tif, insn.ops[n].addr) + ida_bytes.op_stroff(insn, n, path.cast(), size, 0) + else: + print(f"Unable to decode ins @ {ea:x}") + + +if __name__ == "__main__": + main(ida_kernwin.get_screen_ea()) diff --git a/examples/types/print_stkvar_xrefs.py b/examples/types/print_stkvar_xrefs.py new file mode 100644 index 0000000..5acf67d --- /dev/null +++ b/examples/types/print_stkvar_xrefs.py @@ -0,0 +1,68 @@ +""" +summary: list cross-references to function stack frame variables + +description: + The goal of this script is to demonstrate some usage of the type API. + In this script, we demonstrate how to list each stack variables + xref: + * Get the function object surrounding cursor location. + * Use this function to retrieve the corresponding frame object. + * For each frame element: + - Build the stack variable xref list + - Print it. + +level: intermediate +""" + +import ida_typeinf +import ida_frame +import ida_funcs +import ida_xref +import ida_kernwin + +XREF_TO_STR = {ida_xref.dr_R: "READ", + ida_xref.dr_W: "WRITE" +} + +def list_xrefs(func_ea): + func = ida_funcs.get_func(func_ea) + if not func: + print('No function under the cursor') + return + + print(f'Function @ {func.start_ea:x}') + + frame_tif = ida_typeinf.tinfo_t() + if not ida_frame.get_func_frame(frame_tif, func): + print('No frame found') + return + + nmembers = frame_tif.get_udt_nmembers() + print(f'Frame has {nmembers} members') + + if nmembers <= 0: + print('No members found.') + return + + frame_udt = ida_typeinf.udt_type_data_t() + if not frame_tif.get_udt_details(frame_udt): + print('Unable to get the frame details.') + return + + for frame_udm in frame_udt: + start_off = frame_udm.begin() // 8 + end_off = frame_udm.end() // 8 + xreflist = ida_frame.xreflist_t() + ida_frame.build_stkvar_xrefs( + xreflist, func, start_off, end_off) + size = xreflist.size() + print(f'{frame_udm.name} stack variable starts @ ' + f'{start_off:x}, ends @ {end_off:x}, ' + f'xref size: {size}') + + for idx in range(size): + type_ = XREF_TO_STR.get(xreflist[idx].type, "UNK") + print(f'\t[{idx}]: xref @ {xreflist[idx].ea:x} ' + f'of type {type_}') + +list_xrefs(ida_kernwin.get_screen_ea()) diff --git a/examples/types/setpehdr.py b/examples/types/setpehdr.py new file mode 100644 index 0000000..9ed85ea --- /dev/null +++ b/examples/types/setpehdr.py @@ -0,0 +1,137 @@ +""" +summary: assign DOS/PE headers structures to a PE binary + +description: + The goal of this script is to demonstrate some usage of the type API. + + In this script, we: + + * load a PE64 file in binary mode + * import some types from the mssdk64 til + * apply these types at the correct ofsset in the DB + * finally, rebase the program based on the information stored + in the ImageBase field of the IMAGE_OPTIONAL_HEADER64. + +level: intermediate +""" + +import ida_typeinf +import ida_bytes +import ida_name +import ida_segment +import ida_netnode +import ida_hexrays +import idc + + +def create_struct_at(id, ea, var_name = None): + """ + Create the structure identified by id at + address ea. + """ + tif = ida_typeinf.tinfo_t() + ida_hexrays.get_type(id, tif, ida_typeinf.BTF_STRUCT) + ida_bytes.create_struct(ea, tif.get_size(), id, True) + if var_name: + ida_name.set_name(ea, var_name) + + +def get_struct_size(id): + """ + Return the size of the structure identified by id. + """ + tif = ida_typeinf.tinfo_t() + ida_hexrays.get_type(id, tif, ida_typeinf.BTF_STRUCT) + return tif.get_size() + + +def get_pe_ea(id): + """ + Return the address of the pe header. + """ + tif = ida_typeinf.tinfo_t() + ida_hexrays.get_type(id, tif, ida_typeinf.BTF_STRUCT) + udt = ida_typeinf.udt_type_data_t() + tif.get_udt_details(udt) + udm = udt[tif.get_udt_nmembers() - 1] + return ida_bytes.get_dword(udm.offset // 8) + + + +def get_field_off(id, field): + """ + Return the offset in bytes of the member + 'field' in the structure identified by 'id'. + """ + tif = ida_typeinf.tinfo_t() + ida_hexrays.get_type(id, tif, ida_typeinf.BTF_STRUCT) + udt = ida_typeinf.udt_type_data_t() + tif.get_udt_details(udt) + udm = udt[udt.find_member(field)] + return udm.offset // 8 + + +def get_struct_field_off(struct_name, field): + """ + Return the offset in bytes of the member + 'field' in the structure identified by 'struct_name'. + """ + tif = ida_typeinf.tinfo_t() + tif.get_named_type(None, struct_name, ida_typeinf.BTF_STRUCT, True, False) + udt = ida_typeinf.udt_type_data_t() + tif.get_udt_details(udt) + udm = udt[udt.find_member(field)] + return udm.offset // 8 + + +def main(): + + # Add mssdk64_win10 til to the local types. + ida_typeinf.add_til("mssdk64_win10", ida_typeinf.ADDTIL_DEFAULT) + + # Get _IMAGE_XXX struct ids. -1 Means that the type is appended + # to the local type list. + idh_id = idc.import_type(-1, "_IMAGE_DOS_HEADER") + inh_id = idc.import_type(-1, "_IMAGE_NT_HEADERS64") + ish_id = idc.import_type(-1, "_IMAGE_SECTION_HEADER") + if idh_id == ida_netnode.BADNODE or inh_id == ida_netnode.BADNODE \ + or ish_id == ida_netnode.BADNODE: + print("At least one type has not been imported. Quit.") + return + + # Create _IMAGE_DOS_HEADER at offset 0. + create_struct_at(idh_id, 0, "DOS_HEADER") + + # Get the e_lfanew value. + inh_ea = get_pe_ea(idh_id) + + # Create _IMAGE_NT_HEADERS at offset inh_ea. + create_struct_at(inh_id, inh_ea, "NT_HEADERS") + + # Get the number of sections. + ifh_off = get_field_off(inh_id, "FileHeader") + nos_off = get_struct_field_off("_IMAGE_FILE_HEADER", "NumberOfSections") + sections = ida_bytes.get_word(inh_ea + ifh_off + nos_off) + + # Create _IMAGE_SECTION_HEADERs. + section_ea = inh_ea + get_struct_size(inh_id) + ish_size = get_struct_size(ish_id) + section_eas = [] + for section in range(sections): + section_eas.append(section_ea) + create_struct_at(ish_id, section_ea) + section_ea += ish_size + + + ioh_off = get_field_off(inh_id, "OptionalHeader") + ioh_ea = inh_ea + ioh_off + + # Get Section alignment. + sec_align_off = get_struct_field_off("_IMAGE_OPTIONAL_HEADER64", "SectionAlignment") + + # Get the image base ea. + image_base_member_off = get_struct_field_off("_IMAGE_OPTIONAL_HEADER64", "ImageBase") + image_base = ida_bytes.get_qword(ioh_ea + image_base_member_off) + ida_segment.rebase_program(image_base, ida_segment.MSF_FIXONCE) + +main() diff --git a/examples/types/visit_tinfo.py b/examples/types/visit_tinfo.py new file mode 100644 index 0000000..b64dd4e --- /dev/null +++ b/examples/types/visit_tinfo.py @@ -0,0 +1,54 @@ +""" +summary: recursively visit a type and its members + +description: + In this script, we show an example of tinfo_visitor_t to list + a user define type members, recursively. + + This scripts skips array & pointer members (by calling + `tinfo_visitor_t.prune_now()`) + +level: intermediate +""" +import ida_typeinf +import ida_netnode +import idc + +class tinfo_visitor(ida_typeinf.tinfo_visitor_t): + + def __init__(self): + ida_typeinf.tinfo_visitor_t.__init__(self, ida_typeinf.TVST_DEF) + + def visit_type(self, out, tif, name, cmt): + type_name = tif.get_type_name() + if tif.is_udt(): + print(f"visited udt: {type_name} {name}") + elif tif.is_array(): + ai = ida_typeinf.array_type_data_t() + if tif.get_array_details(ai): + type_name = ai.elem_type._print() + nelems = ai.nelems + print(f"visited array: {type_name} {name}[{nelems}]") + self.prune_now() + elif tif.is_scalar(): + print(f"visited scalar: {type_name} {name}") + elif tif.is_ptr(): + print(f"visited pointer: {type_name} {name}") + self.prune_now() + else: + print(f"visited unknown: {type_name} {name}") + + return 0 + +ida_typeinf.add_til("mssdk64_win10", ida_typeinf.ADDTIL_DEFAULT) +til = ida_typeinf.get_idati() + +idh_id = idc.import_type(-1, "_IMAGE_DOS_HEADER") +if idh_id != ida_netnode.BADNODE: + tif = ida_typeinf.tinfo_t() + if tif.get_named_type(None, "_IMAGE_DOS_HEADER"): + tinfo_visitor().apply_to(tif) + else: + print("Unable to get _IMAGE_DOS_HEADER type info.") +else: + print("Import of _IMAGE_DOS_HEADER failed.") diff --git a/examples/core/actions.py b/examples/ui/actions.py similarity index 99% rename from examples/core/actions.py rename to examples/ui/actions.py index 6ce3b8f..cc69fd4 100644 --- a/examples/core/actions.py +++ b/examples/ui/actions.py @@ -16,6 +16,8 @@ description: keywords: actions see_also: add_hotkey + +level: intermediate """ import ida_kernwin diff --git a/examples/core/add_hotkey.py b/examples/ui/add_hotkey.py similarity index 93% rename from examples/core/add_hotkey.py rename to examples/ui/add_hotkey.py index 1ef2e03..4555e5b 100644 --- a/examples/core/add_hotkey.py +++ b/examples/ui/add_hotkey.py @@ -1,5 +1,5 @@ """ -summary: triggering bits of code by pressing a shortcut +summary: assign a shortcut to a custom function description: `ida_kernwin.add_hotkey` is a simpler, but much less flexible @@ -14,6 +14,8 @@ description: keywords: actions see_also: actions + +level: beginner """ import ida_kernwin diff --git a/examples/core/auto_instantiate_widget_plugin.py b/examples/ui/auto_instantiate_widget_plugin.py similarity index 98% rename from examples/core/auto_instantiate_widget_plugin.py rename to examples/ui/auto_instantiate_widget_plugin.py index a0ae3de..8d874cc 100644 --- a/examples/core/auto_instantiate_widget_plugin.py +++ b/examples/ui/auto_instantiate_widget_plugin.py @@ -1,5 +1,5 @@ """ -summary: better integrating custom widgets in the desktop layout +summary: restore custom widgets across sessions description: This is an example demonstrating how one can create widgets from a plugin, @@ -22,6 +22,8 @@ description: => the widget will be visible keywords: desktop + +level: advanced """ import ida_idaapi diff --git a/examples/core/colorize_disassembly.py b/examples/ui/colorize_disassembly.py similarity index 89% rename from examples/core/colorize_disassembly.py rename to examples/ui/colorize_disassembly.py index 283c3a6..892b759 100644 --- a/examples/core/colorize_disassembly.py +++ b/examples/ui/colorize_disassembly.py @@ -1,5 +1,5 @@ """ -summary: change background colours +summary: assign a background color to an address, function & segment description: This illustrates the setting/retrieval of background colours @@ -9,11 +9,11 @@ description: (item, function, or segment). Those will be persisted in the database. -category: disassembly - keywords: coloring, idc see_also: colorize_disassembly_on_the_fly + +level: beginner """ BG_BLUE = 0xc02020 diff --git a/examples/core/colorize_disassembly_on_the_fly.py b/examples/ui/colorize_disassembly_on_the_fly.py similarity index 98% rename from examples/core/colorize_disassembly_on_the_fly.py rename to examples/ui/colorize_disassembly_on_the_fly.py index ebaaf9c..fbb6b90 100644 --- a/examples/core/colorize_disassembly_on_the_fly.py +++ b/examples/ui/colorize_disassembly_on_the_fly.py @@ -1,5 +1,5 @@ """ -summary: an easy-to-use way to colorize lines +summary: colorize lines interactively description: This builds upon the `ida_kernwin.UI_Hooks.get_lines_rendering_info` @@ -15,6 +15,8 @@ description: keywords: coloring see_also: colorize_disassembly + +level: advanced """ import ida_kernwin diff --git a/examples/core/custom_cli.py b/examples/ui/custom_cli.py similarity index 70% rename from examples/core/custom_cli.py rename to examples/ui/custom_cli.py index c20c0ad..3fc74b4 100644 --- a/examples/core/custom_cli.py +++ b/examples/ui/custom_cli.py @@ -1,5 +1,5 @@ """ -summary: a custom command-line interpreter +summary: add a custom command-line interpreter description: Illustrates how one can add command-line interpreters to IDA @@ -7,6 +7,8 @@ description: This custom interpreter doesn't actually run any code; it's there as a 'getting started'. It provides an example tab completion support. + +level: advanced """ # ----------------------------------------------------------------------- @@ -19,6 +21,7 @@ description: import ida_kernwin import ida_idaapi +import traceback class mycli_t(ida_kernwin.cli_t): flags = 0 @@ -40,12 +43,28 @@ class mycli_t(ida_kernwin.cli_t): "bongiorno", ] - def OnCompleteLine(self, prefix, n, line, prefix_start): - print("OnCompleteLine: prefix=%s n=%d line=%s prefix_start=%d" % (prefix, n, line, prefix_start)) - if prefix == "bon": - if n < len(self.completions): - return self.completions[n] - return None + def OnFindCompletions(self, line, x): + """ + The user pressed Tab. Return a list of completions + + This callback is optional. + + @param line: the current line (string) + @param x: the index where the cursor is (int) + + @return: None if no completion could be generated, otherwise a tuple: + (completions : Sequence[str], hints : Sequence[str], docs: Sequence[str], + match_start: int, match_end: int) + """ + try: + print("OnFindCompletions: line=%s x=%d" % (line, x)) + # self.debug("__call__(line=%s, x=%s)", line, x) + uline = line + if line[x-3:x]=="bon": + return (self.completions, [], [], x-3, x) + except: + print("OnFindCompletions got exception:\n%s", traceback.format_exc()) + pass # ----------------------------------------------------------------------- def nw_handler(code, old=0): diff --git a/examples/core/dump_selection.py b/examples/ui/dump_selection.py similarity index 92% rename from examples/core/dump_selection.py rename to examples/ui/dump_selection.py index f6c9407..59b0197 100644 --- a/examples/core/dump_selection.py +++ b/examples/ui/dump_selection.py @@ -10,8 +10,10 @@ description: After running this script: * select some text in one of the listing widgets (i.e., - "IDA View-*", "Enums", "Structures", "Pseudocode-*") + "IDA View-...", "Local Types", "Pseudocode-...") * press Ctrl+Shift+S to dump the selection + +level: advanced """ import ida_kernwin @@ -35,7 +37,7 @@ def get_widget_lines(widget, tp0, tp1): if last_line_ref == 0: # at last line line = line[0:tp1.x] elif first_line_ref == 0: # at first line - line = ' ' * tp0.x + line[tp0.x:] + line = " " * tp0.x + line[tp0.x:] lines.append(line) return lines @@ -50,8 +52,7 @@ class dump_selection_handler_t(ida_kernwin.action_handler_t): def update(self, ctx): ok_widgets = [ ida_kernwin.BWN_DISASM, - ida_kernwin.BWN_STRUCTS, - ida_kernwin.BWN_ENUMS, + ida_kernwin.BWN_TILVIEW, ida_kernwin.BWN_PSEUDOCODE, ] return ida_kernwin.AST_ENABLE_FOR_WIDGET \ @@ -78,7 +79,7 @@ if ida_kernwin.register_action( # dump current selection p0 = ida_kernwin.twinpos_t() p1 = ida_kernwin.twinpos_t() -view = ida_kernwin.get_current_viewer() +view = ida_kernwin.get_last_widget(ida_kernwin.IWID_ANY_LISTING) if ida_kernwin.read_selection(view, p0, p1): lines = get_widget_lines(view, p0, p1) print("\n".join(lines)) diff --git a/examples/widgets/forms/askusingform.py b/examples/ui/forms/askusingform.py similarity index 99% rename from examples/widgets/forms/askusingform.py rename to examples/ui/forms/askusingform.py index 646c876..e8d57c0 100644 --- a/examples/widgets/forms/askusingform.py +++ b/examples/ui/forms/askusingform.py @@ -1,5 +1,5 @@ """ -summary: Non-trivial uses of the `ida_kernwin.Form` helper class +summary: advanced usage of the form API description: How to query for complex user input, using IDA's built-in forms. @@ -9,6 +9,8 @@ description: `ida_kernwin.ask_str` and similar functions. keywords: forms + +level: advanced """ # ----------------------------------------------------------------------- diff --git a/examples/widgets/graphs/custom_graph_with_actions.py b/examples/ui/graphs/custom_graph_with_actions.py similarity index 99% rename from examples/widgets/graphs/custom_graph_with_actions.py rename to examples/ui/graphs/custom_graph_with_actions.py index e03027c..09732c5 100644 --- a/examples/widgets/graphs/custom_graph_with_actions.py +++ b/examples/ui/graphs/custom_graph_with_actions.py @@ -1,11 +1,13 @@ """ -summary: drawing custom graphs +summary: draw custom graphs description: Showing custom graphs, using `ida_graph.GraphViewer`. In addition, show how to write actions that can be performed on those. keywords: graph, actions + +level: advanced """ # ----------------------------------------------------------------------- diff --git a/examples/widgets/graphs/sync_two_graphs.py b/examples/ui/graphs/sync_two_graphs.py similarity index 97% rename from examples/widgets/graphs/sync_two_graphs.py rename to examples/ui/graphs/sync_two_graphs.py index 1a487f5..2f55b0e 100644 --- a/examples/widgets/graphs/sync_two_graphs.py +++ b/examples/ui/graphs/sync_two_graphs.py @@ -1,5 +1,5 @@ """ -summary: follow the movements of a disassembly graph, in another. +summary: follow the movements of one graph, in another description: Since it is possible to be notified of movements that happen @@ -12,6 +12,8 @@ description: keywords: graph, idaview see_also: wrap_idaview + +level: intermediate """ import ida_kernwin diff --git a/examples/widgets/idaview/wrap_idaview.py b/examples/ui/idaview/wrap_idaview.py similarity index 97% rename from examples/widgets/idaview/wrap_idaview.py rename to examples/ui/idaview/wrap_idaview.py index a5acc70..5512f5f 100644 --- a/examples/widgets/idaview/wrap_idaview.py +++ b/examples/ui/idaview/wrap_idaview.py @@ -1,5 +1,5 @@ """ -summary: manipulate IDAView and graph +summary: programmatically manipulate disassembly and graph widgets description: This is an example illustrating how to manipulate an existing IDA-provided @@ -8,6 +8,8 @@ description: keywords: idaview, graph see_also: custom_graph_with_actions, sync_two_graphs + +level: advanced """ # ----------------------------------------------------------------------- diff --git a/examples/widgets/listings/custom_viewer.py b/examples/ui/listings/custom_viewer.py similarity index 99% rename from examples/widgets/listings/custom_viewer.py rename to examples/ui/listings/custom_viewer.py index 8352dbf..f29c992 100644 --- a/examples/widgets/listings/custom_viewer.py +++ b/examples/ui/listings/custom_viewer.py @@ -10,6 +10,8 @@ description: freshly-created widget (using `ida_kernwin.attach_action_to_popup`.) keywords: listing, actions + +level: intermediate """ import ida_kernwin diff --git a/examples/widgets/listings/jump_next_comment.py b/examples/ui/listings/jump_next_comment.py similarity index 99% rename from examples/widgets/listings/jump_next_comment.py rename to examples/ui/listings/jump_next_comment.py index 442e0f3..a74fea6 100644 --- a/examples/widgets/listings/jump_next_comment.py +++ b/examples/ui/listings/jump_next_comment.py @@ -1,5 +1,5 @@ """ -summary: implement a "jump to next comment" action within IDA's disassembly view. +summary: implement a "jump to next comment" action within IDA's listing description: We want our action not only to find the next line containing a comment, @@ -20,6 +20,8 @@ description: keywords: idaview, actions see_also: save_and_restore_listing_pos + +level: intermediate """ import ida_idaapi diff --git a/examples/widgets/listings/save_and_restore_listing_pos.py b/examples/ui/listings/save_and_restore_listing_pos.py similarity index 91% rename from examples/widgets/listings/save_and_restore_listing_pos.py rename to examples/ui/listings/save_and_restore_listing_pos.py index 1feee88..619bdf1 100644 --- a/examples/widgets/listings/save_and_restore_listing_pos.py +++ b/examples/ui/listings/save_and_restore_listing_pos.py @@ -15,6 +15,8 @@ description: keywords: listing, actions see_also: jump_next_comment + +level: intermediate """ import ida_kernwin @@ -23,8 +25,7 @@ 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_TILVIEW, ida_kernwin.BWN_DISASM, ida_kernwin.BWN_CUSTVIEW, ida_kernwin.BWN_PSEUDOCODE, @@ -43,7 +44,7 @@ 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 + HELP_TEXT = "Press %s in a 'listing' widget such as 'IDA View-A', 'Local Types', 'Pseudocode-A', ... to remember the position" % ACTION_SHORTCUT def activate(self, ctx): global last_pos @@ -59,7 +60,7 @@ 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 + HELP_TEXT = "Press %s in a 'listing' widget such as 'IDA View-A', 'Local Types', 'Pseudocode-A', ... to restore a previously-saved position" % ACTION_SHORTCUT def activate(self, ctx): global last_pos diff --git a/examples/widgets/misc/add_menus.py b/examples/ui/misc/add_menus.py similarity index 97% rename from examples/widgets/misc/add_menus.py rename to examples/ui/misc/add_menus.py index e8fcd6f..8ff3fb0 100644 --- a/examples/widgets/misc/add_menus.py +++ b/examples/ui/misc/add_menus.py @@ -1,5 +1,5 @@ """ -summary: adding custom menus to IDA +summary: add custom menus to IDA description: It is possible to add custom menus to IDA, either at the @@ -12,6 +12,8 @@ description: * this example does not deal with context menus keywords: actions + +level: beginner """ import ida_kernwin diff --git a/examples/pyqt/inject_command.py b/examples/ui/pyqt/inject_command.py similarity index 98% rename from examples/pyqt/inject_command.py rename to examples/ui/pyqt/inject_command.py index 43447f1..ddd30f3 100644 --- a/examples/pyqt/inject_command.py +++ b/examples/ui/pyqt/inject_command.py @@ -1,5 +1,5 @@ """ -summary: injecting commands in the "Output" window +summary: inject commands in the "Output" window description: This example illustrates how one can execute commands in the @@ -17,6 +17,8 @@ description: `ida_kernwin.find_widget`, is not the same type as a `QtWidgets.QWidget`. We therefore need to convert it using `ida_kernwin.PluginForm.TWidgetToPyQtWidget` + +level: advanced """ from PyQt5 import QtCore diff --git a/examples/pyqt/paint_over_graph.py b/examples/ui/pyqt/paint_over_graph.py similarity index 97% rename from examples/pyqt/paint_over_graph.py rename to examples/ui/pyqt/paint_over_graph.py index dcd1d7f..17321da 100644 --- a/examples/pyqt/paint_over_graph.py +++ b/examples/ui/pyqt/paint_over_graph.py @@ -1,5 +1,5 @@ """ -summary: custom painting on top of graph view edges +summary: paint text on graph view edges description: This sample registers an action enabling painting of a recognizable @@ -13,6 +13,8 @@ description: Using an "event filter", we will intercept paint events targeted at the disassembly view, let it paint itself, and then add our own markers along. + +level: advanced """ from PyQt5 import QtCore @@ -20,6 +22,7 @@ from PyQt5 import QtGui from PyQt5 import QtWidgets import ida_graph +import ida_gdl import ida_kernwin import ida_moves @@ -85,7 +88,7 @@ class painter_t(QtCore.QObject): if not graph.is_visible_node(dst_node): continue - edge_info = graph.get_edge(ida_graph.edge_t(src_node, dst_node)) + edge_info = graph.get_edge(ida_gdl.edge_t(src_node, dst_node)) if edge_info: # For all horizontal edge segments satisfying the length requirements... diff --git a/examples/pyqt/paint_over_navbar.py b/examples/ui/pyqt/paint_over_navbar.py similarity index 97% rename from examples/pyqt/paint_over_navbar.py rename to examples/ui/pyqt/paint_over_navbar.py index 4b5fcd4..0414833 100644 --- a/examples/pyqt/paint_over_navbar.py +++ b/examples/ui/pyqt/paint_over_navbar.py @@ -1,10 +1,12 @@ """ -summary: custom painting on top of the navigation band +summary: paint on top of the navigation band description: Using an "event filter", we will intercept paint events targeted at the navigation band widget, let it paint itself, and then add our own markers on top. + +level: intermediate """ import random diff --git a/examples/pyqt/populate_pluginform_with_pyqt_widgets.py b/examples/ui/pyqt/populate_pluginform_with_pyqt_widgets.py similarity index 92% rename from examples/pyqt/populate_pluginform_with_pyqt_widgets.py rename to examples/ui/pyqt/populate_pluginform_with_pyqt_widgets.py index 67d341b..b46378b 100644 --- a/examples/pyqt/populate_pluginform_with_pyqt_widgets.py +++ b/examples/ui/pyqt/populate_pluginform_with_pyqt_widgets.py @@ -1,11 +1,13 @@ """ -summary: adding PyQt5 widgets into an `ida_kernwin.PluginForm` +summary: create a dockable container, and populate it with Qt widgets description: Using `ida_kernwin.PluginForm.FormToPyQtWidget`, this script converts IDA's own dockable widget into a type that is recognized by PyQt5, which then enables populating it with regular Qt widgets. + +level: beginner """ from PyQt5 import QtCore, QtGui, QtWidgets diff --git a/examples/core/register_timer.py b/examples/ui/register_timer.py similarity index 92% rename from examples/core/register_timer.py rename to examples/ui/register_timer.py index 13421d8..b586798 100644 --- a/examples/core/register_timer.py +++ b/examples/ui/register_timer.py @@ -1,8 +1,10 @@ """ -summary: using timers for delayed execution +summary: use timers for delayed execution description: Register (possibly repeating) timers. + +level: beginner """ import ida_kernwin @@ -37,5 +39,5 @@ def main(): # ------------------------------------------------------------------------- -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/examples/widgets/tabular_views/custom/choose.py b/examples/ui/tabular_views/custom/choose.py similarity index 98% rename from examples/widgets/tabular_views/custom/choose.py rename to examples/ui/tabular_views/custom/choose.py index 14d9c15..c8af378 100644 --- a/examples/widgets/tabular_views/custom/choose.py +++ b/examples/ui/tabular_views/custom/choose.py @@ -1,5 +1,5 @@ """ -summary: A widget showing data in a tabular fashion +summary: show tabular data description: Shows how to subclass the ida_kernwin.Choose class to @@ -9,6 +9,8 @@ description: keywords: chooser, actions see_also: choose_multi, chooser_with_folders + +level: intermediate """ import ida_kernwin diff --git a/examples/widgets/tabular_views/custom/choose_multi.py b/examples/ui/tabular_views/custom/choose_multi.py similarity index 94% rename from examples/widgets/tabular_views/custom/choose_multi.py rename to examples/ui/tabular_views/custom/choose_multi.py index 6f55678..532a3a0 100644 --- a/examples/widgets/tabular_views/custom/choose_multi.py +++ b/examples/ui/tabular_views/custom/choose_multi.py @@ -1,5 +1,5 @@ """ -summary: A widget showing data in a tabular fashion, providing multiple selection +summary: show tabular data, with multiple selection description: Similar to @{choose}, but with multiple selection @@ -7,6 +7,8 @@ description: keywords: chooser, actions see_also: choose, chooser_with_folders + +level: intermediate """ from ida_kernwin import Choose diff --git a/examples/widgets/tabular_views/custom/chooser_with_folders.py b/examples/ui/tabular_views/custom/chooser_with_folders.py similarity index 98% rename from examples/widgets/tabular_views/custom/chooser_with_folders.py rename to examples/ui/tabular_views/custom/chooser_with_folders.py index f9ad2e9..c719b49 100644 --- a/examples/widgets/tabular_views/custom/chooser_with_folders.py +++ b/examples/ui/tabular_views/custom/chooser_with_folders.py @@ -1,6 +1,5 @@ """ -summary: A widget that can show tabular data either as a simple table, - or with a tree-like structure. +summary: showing tabular data in a flat, or tree-like fashion description: By adding the necessary bits to a ida_kernwin.Choose subclass, @@ -16,6 +15,8 @@ description: keywords: chooser, folders, actions see_also: choose, choose_multi + +level: advanced """ import inspect diff --git a/examples/widgets/tabular_views/custom/func_chooser.py b/examples/ui/tabular_views/custom/func_chooser.py similarity index 95% rename from examples/widgets/tabular_views/custom/func_chooser.py rename to examples/ui/tabular_views/custom/func_chooser.py index 018e15d..c5c188d 100644 --- a/examples/widgets/tabular_views/custom/func_chooser.py +++ b/examples/ui/tabular_views/custom/func_chooser.py @@ -1,5 +1,5 @@ """ -summary: An alternative view over the list of functions +summary: implement an alternative "Functions" window description: Partially re-implements the "Functions" widget present in @@ -8,6 +8,8 @@ description: keywords: chooser, functions see_also: choose, choose_multi, chooser_with_folders + +level: intermediate """ import idautils diff --git a/examples/widgets/tabular_views/custom/lazy_loaded_chooser.py b/examples/ui/tabular_views/custom/lazy_loaded_chooser.py similarity index 90% rename from examples/widgets/tabular_views/custom/lazy_loaded_chooser.py rename to examples/ui/tabular_views/custom/lazy_loaded_chooser.py index bb1006f..711e82c 100644 --- a/examples/widgets/tabular_views/custom/lazy_loaded_chooser.py +++ b/examples/ui/tabular_views/custom/lazy_loaded_chooser.py @@ -1,3 +1,19 @@ +""" +summary: a lazy-loaded, tree-like data view + +description: + Brings lazy-loading of folders to the tree-like tabular views. + + The important bit to enable this are: + + * ida_kernwin.Choose.OnLazyLoadDir + +keywords: chooser, folders, actions + +see_also: choose, choose_multi, chooser_with_folders + +level: advanced +""" import idaapi diff --git a/examples/widgets/tabular_views/string_window/show_selected_strings.py b/examples/ui/tabular_views/string_window/show_selected_strings.py similarity index 97% rename from examples/widgets/tabular_views/string_window/show_selected_strings.py rename to examples/ui/tabular_views/string_window/show_selected_strings.py index 69d3905..ddd9a2c 100644 --- a/examples/widgets/tabular_views/string_window/show_selected_strings.py +++ b/examples/ui/tabular_views/string_window/show_selected_strings.py @@ -1,5 +1,5 @@ """ -summary: retrieve the strings that are selected in the "Strings" window. +summary: retrieve the selection from the "Strings" window description: In IDA it's possible to write actions that can be applied even to @@ -13,6 +13,8 @@ description: keywords: actions see_also: list_strings + +level: intermediate """ import ida_kernwin diff --git a/examples/core/trigger_actions_programmatically.py b/examples/ui/trigger_actions_programmatically.py similarity index 97% rename from examples/core/trigger_actions_programmatically.py rename to examples/ui/trigger_actions_programmatically.py index eafaa55..3de177c 100644 --- a/examples/core/trigger_actions_programmatically.py +++ b/examples/ui/trigger_actions_programmatically.py @@ -1,5 +1,5 @@ """ -summary: execute existing actions programmatically +summary: trigger actions programmatically description: It's possible to invoke any action programmatically, by using @@ -13,6 +13,8 @@ description: 'ProcessUiActions' part work as intended. keywords: actions + +level: intermediate """ import ida_kernwin diff --git a/examples/uihooks/func_chooser_coloring.py b/examples/ui/uihooks/func_chooser_coloring.py similarity index 85% rename from examples/uihooks/func_chooser_coloring.py rename to examples/ui/uihooks/func_chooser_coloring.py index 606660c..0085971 100644 --- a/examples/uihooks/func_chooser_coloring.py +++ b/examples/ui/uihooks/func_chooser_coloring.py @@ -1,9 +1,13 @@ """ -summary: using `ida_kernwin.UI_Hooks.get_chooser_item_attrs` to override some defaults +summary: override the default "Functions" chooser colors description: color the function in the Function window according to its size. The larger the function, the darker the color. + + The key, is overriding `ida_kernwin.UI_Hooks.get_chooser_item_attrs` + +level: beginner """ import ida_kernwin diff --git a/examples/uihooks/lines_rendering.py b/examples/ui/uihooks/lines_rendering.py similarity index 98% rename from examples/uihooks/lines_rendering.py rename to examples/ui/uihooks/lines_rendering.py index 12315b2..76ac9c2 100644 --- a/examples/uihooks/lines_rendering.py +++ b/examples/ui/uihooks/lines_rendering.py @@ -1,11 +1,13 @@ """ -summary: dynamically colorize lines backgrounds (or parts of them) +summary: dynamically colorize [parts of] lines description: shows how one can dynamically alter the lines background rendering (as opposed to, say, using ida_nalt.set_item_color()), and also shows how that rendering can be limited to just a few glyphs, not the whole line. + +level: intermediate """ import ida_kernwin diff --git a/examples/uihooks/log_misc_events.py b/examples/ui/uihooks/log_misc_events.py similarity index 98% rename from examples/uihooks/log_misc_events.py rename to examples/ui/uihooks/log_misc_events.py index e4eb4da..ac970bd 100644 --- a/examples/uihooks/log_misc_events.py +++ b/examples/ui/uihooks/log_misc_events.py @@ -1,9 +1,11 @@ """ -summary: being notified, and logging a few UI events +summary: react to UI events/notifications description: hooks to be notified about certain UI events, and dump their information to the "Output" window + +level: intermediate """ import inspect diff --git a/examples/uihooks/prevent_jump.py b/examples/ui/uihooks/prevent_jump.py similarity index 89% rename from examples/uihooks/prevent_jump.py rename to examples/ui/uihooks/prevent_jump.py index 47bf6a1..d83df37 100644 --- a/examples/uihooks/prevent_jump.py +++ b/examples/ui/uihooks/prevent_jump.py @@ -1,10 +1,12 @@ """ -summary: taking precedence over actions +summary: prevent an action from being triggered description: Using `ida_kernwin.UI_Hooks.preprocess_action`, it is possible to respond to a command instead of the action that would otherwise do it. + +level: beginner """ import ida_kernwin diff --git a/examples/widgets/waitbox/show_and_hide_waitbox.py b/examples/ui/waitbox/show_and_hide_waitbox.py similarity index 93% rename from examples/widgets/waitbox/show_and_hide_waitbox.py rename to examples/ui/waitbox/show_and_hide_waitbox.py index 800850a..575e98a 100644 --- a/examples/widgets/waitbox/show_and_hide_waitbox.py +++ b/examples/ui/waitbox/show_and_hide_waitbox.py @@ -1,10 +1,12 @@ """ -summary: showing, updating & hiding the progress dialog +summary: show, update & hide the progress dialog description: Using the progress dialog (aka 'wait box') primitives. keywords: actions + +level: beginner """ import time diff --git a/extapi.cpp b/extapi.cpp index 19743b8..d6c54e0 100644 --- a/extapi.cpp +++ b/extapi.cpp @@ -71,6 +71,7 @@ bool ext_api_t::load(qstring *errbuf) BIND_SYMBOL(_PyLong_AsByteArray); BIND_SYMBOL_WEAK(PyEval_ThreadsInitialized); BIND_SYMBOL_WEAK(PyEval_InitThreads); + BIND_SYMBOL_WEAK(Py_NoSiteFlag); #undef BIND_SYMBOL @@ -90,24 +91,34 @@ void ext_api_t::clear() //------------------------------------------------------------------------- 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 ) + if ( !lib_path.empty() && lib_handle != nullptr ) { - *errbuf = "Cannot determine path to shared object"; - return false; + return true; } + // QASSERT(30603, lib_path.empty() && lib_handle == nullptr); - lib_path = dl_info.dli_fname; - lib_handle = dlopen(lib_path.c_str(), RTLD_NOLOAD | RTLD_GLOBAL | RTLD_LAZY); - if ( lib_handle == nullptr ) + // first, check if we have global symbols + if ( dlsym(RTLD_DEFAULT, "Py_IsInitialized") != nullptr ) + lib_handle = RTLD_DEFAULT; + else { - errbuf->sprnt("dlopen(\"%s\") failed: %s", lib_path.c_str(), qstrerror(-1)); - return false; + // otherwise, look for shared library to import from + 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) \ @@ -132,6 +143,7 @@ bool ext_api_t::load(qstring *errbuf) BIND_SYMBOL(PyFunction_New); BIND_SYMBOL(PyFunction_GetCode); BIND_SYMBOL(_PyLong_AsByteArray); + BIND_SYMBOL(Py_NoSiteFlag); #undef BIND_SYMBOL @@ -143,7 +155,8 @@ void ext_api_t::clear() { if ( lib_handle != nullptr ) { - dlclose(lib_handle); + if ( lib_handle != RTLD_DEFAULT ) + dlclose(lib_handle); lib_handle = nullptr; } } diff --git a/extapi.hpp b/extapi.hpp index 2fcaebd..852f299 100644 --- a/extapi.hpp +++ b/extapi.hpp @@ -31,6 +31,7 @@ typedef int _PyLong_AsByteArray_t(PyObject *, unsigned char *, size_t, int, int) typedef int PyEval_ThreadsInitialized_t(void); typedef void PyEval_InitThreads_t(void); +typedef int Py_NoSiteFlag_t; struct ext_api_t { @@ -51,6 +52,7 @@ struct ext_api_t _PyLong_AsByteArray_t *_PyLong_AsByteArray_ptr; PyEval_ThreadsInitialized_t *PyEval_ThreadsInitialized_ptr; PyEval_InitThreads_t *PyEval_InitThreads_ptr; + int *Py_NoSiteFlag_ptr; ext_api_t() { memset(this, 0, sizeof(*this)); } ~ext_api_t() { clear(); } diff --git a/idapython.cfg b/idapython.cfg index c10b706..b85bc00 100644 --- a/idapython.cfg +++ b/idapython.cfg @@ -21,5 +21,5 @@ NAMESPACE_AWARE = YES // Should results be printed by 'sys.displayhook'? REPL_USE_SYS_DISPLAYHOOK = YES -// Should directories derived from $IDAUSR (e.g., ~/.idapro/python/3) be added to sys.path? +// Should directories derived from $IDAUSR (e.g., ~/.idapro/python) be added to sys.path? IDAPYTHON_IDAUSR_SYSPATH = YES diff --git a/idapython.cpp b/idapython.cpp index c67063d..ae88326 100644 --- a/idapython.cpp +++ b/idapython.cpp @@ -10,8 +10,20 @@ //--------------------------------------------------------------------- // python.cpp - Main plugin code //--------------------------------------------------------------------- +#if defined(_DEBUG) && defined(Py_LIMITED_API) && defined(_MSC_VER) && _MSC_VER >= 1929 +// Py_LIMITED_API is incompatible with Py_DEBUG, Py_TRACE_REFS, and Py_REF_DEBUG +// it would also try to link python3Y_d.lib which is not present in normal Python install +# include // for _invalid_parameter() +#undef _DEBUG +#define _WASDEBUG +#endif #include - +#ifdef __MAC__ +extern "C" __attribute__((weak)) int Py_IsInitialized(void); +#endif +#ifdef _WASDEBUG +#define _DEBUG +#endif //------------------------------------------------------------------------- // This define fixes the redefinition of ssize_t #ifdef HAVE_SSIZE_T @@ -26,6 +38,7 @@ #include #include #include +#include #include #include @@ -44,18 +57,18 @@ idapython_plugin_t *idapython_plugin_t::instance = nullptr; // Python-style version tuple comes from the makefile // Only the serial and status is set here -#define VER_SERIAL 0 -#define VER_STATUS "final" -#define IDAPYTHON_RUNSTATEMENT 0 -#define IDAPYTHON_ENABLE_EXTLANG 3 -#define IDAPYTHON_DISABLE_EXTLANG 4 -#define PYTHON_DIR_NAME "python" -#define S_IDAPYTHON "IDAPython" -#define S_INIT_PY "init.py" -static const char S_IDC_ARGS_VARNAME[] = "ARGV"; -static const char S_IDC_EXEC_PYTHON[] = "exec_python"; -static const char S_IDC_EVAL_PYTHON[] = "eval_python"; -static const char S_IDAPYTHON_DATA_NODE[] = "IDAPython_Data"; +#define IDAPYTHON_RUNSTATEMENT 0 +#define IDAPYTHON_ENABLE_EXTLANG 3 +#define IDAPYTHON_DISABLE_EXTLANG 4 +#define PYTHON_DIR_NAME "python" +#define S_IDAPYTHON "IDAPython" +#define S_INIT_PY "init.py" +static const char S_IDC_ARGS_VARNAME[] = "ARGV"; +static const char S_IDC_EXEC_PYTHON[] = "exec_python"; +static const char S_IDC_EXEC_PYTHON_SCRIPT[] = "exec_python_script"; +static const char S_IDC_EVAL_PYTHON[] = "eval_python"; +static const char S_IDC_EVAL_PYTHON_REPL_STMT[] = "eval_python_repl_stmt"; +static const char S_IDAPYTHON_DATA_NODE[] = "IDAPython_Data"; //lint -e818 could be pointer to const //lint -e1762 member function '' could be made const @@ -416,10 +429,8 @@ static void handle_python_error( errbuf->clear(); // No exception? - if ( !PyErr_Occurred() ) - return; - - PyW_GetError(errbuf, clear_error); + if ( PyErr_Occurred() ) + PyW_GetError(errbuf, clear_error); } //------------------------------------------------------------------------- @@ -487,6 +498,59 @@ static const ext_idcfunc_t idc_eval_python_desc = 0 }; +//------------------------------------------------------------------------- +// A utility for simulating REPL input from IDC + +static error_t idaapi idc_eval_python_repl_stmt( + idc_value_t *argv, + idc_value_t * /*res*/) +{ + qstring buf(argv[0].qstr()); + // We need an extra `\n` to close the statement for `cli_execute_line` + if ( !buf.ends_with("\n") ) + buf.append('\n'); + idapython_plugin_t::cli_execute_line(buf.c_str()); + return eOk; +} + +static const char idc_eval_python_repl_stmt_args[] = { VT_STR, 0 }; +static const ext_idcfunc_t idc_eval_python_repl_stmt_desc = +{ + S_IDC_EVAL_PYTHON_REPL_STMT, + idc_eval_python_repl_stmt, + idc_eval_python_repl_stmt_args, + nullptr, + 0, + 0 +}; + +//------------------------------------------------------------------------- +// A utility for executing a script from IDC +static error_t idaapi idc_exec_python_script( + idc_value_t *argv, + idc_value_t *res) +{ + qstring errbuf; + const char *path = argv[0].c_str(); + bool ok = idapython_plugin_t::exec_script(path, /*gloabls*/ nullptr, &errbuf); + if ( !ok ) + return throw_idc_exception(res, errbuf.c_str()); + return eOk; +} + +static const char idc_exec_python_script_args[] = { VT_STR, 0 }; +static const ext_idcfunc_t idc_exec_python_script_desc = +{ + S_IDC_EXEC_PYTHON_SCRIPT, + idc_exec_python_script, + idc_exec_python_script_args, + nullptr, + 0, + 0 +}; + + + //-------------------------------------------------------------------------- static const cfgopt_t opts[] = { @@ -672,8 +736,7 @@ static const cli_t cli_python = "Python - IDAPython plugin", "Enter any Python expression", idapython_plugin_t::cli_execute_line, - nullptr, - nullptr, + nullptr, // keydown idapython_plugin_t::cli_find_completions, }; @@ -740,31 +803,10 @@ static void send_modules_lifecycle_notification(module_lifecycle_notification_t } } -//------------------------------------------------------------------------- -static wchar_t *utf8_wchar_t(qvector *out, const char *in) -{ -#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' ) - { - wchar32_t cp = get_utf8_char(&p); - if ( cp == 0 || cp == BADCP ) - break; - out->push_back(cp); - } - out->push_back(0); // we're not dealing with a qstring; have to do it ourselves -#endif - return out->begin(); -} - //------------------------------------------------------------------------- idapython_plugin_t::idapython_plugin_t() : initialized(false), + owning_interpreter(true), ui_ready(false) #ifdef TESTABLE_BUILD , user_code_lenient(-1) @@ -783,7 +825,7 @@ idapython_plugin_t::~idapython_plugin_t() if ( !initialized || Py_IsInitialized() == 0 ) goto SKIP_CLEANUP; - if ( PyGILState_GetThisThreadState() ) + if ( owning_interpreter && PyGILState_GetThisThreadState() ) { // Note: No 'PYW_GIL_GET' here, as it would try to release // the state after 'Py_Finalize()' has been called. @@ -802,17 +844,24 @@ idapython_plugin_t::~idapython_plugin_t() enable_python_cli(false); // Remove the extlang - remove_extlang(&extlang_python); + if ( extlang_python.refcnt > 0 ) // avoid interr 1442 + remove_extlang(&extlang_python); // De-init pywraps deinit_pywraps(); // Uninstall IDC function del_idc_func(idc_eval_python_desc.name); + del_idc_func(idc_eval_python_repl_stmt_desc.name); + del_idc_func(idc_exec_python_script_desc.name); del_idc_func(idc_runpythonstatement_desc.name); - // Shut the interpreter down - Py_Finalize(); + if ( owning_interpreter ) + { + // Shut the interpreter down if we launched it + Py_Finalize(); + } + initialized = false; #ifdef TESTABLE_BUILD @@ -828,6 +877,37 @@ SKIP_CLEANUP: instance = nullptr; } +#ifdef __NT__ +#define PYEXE "python.exe" +#else +#define PYEXE "python3" +#endif + +//-------------------------------------------------------------------------- +// detect if we're running under venv +// 1. check for IDAPYTHON_VENV_EXECUTABLE override +// 2. check for python3/python.exe in PATH and pyvenv.cfg one level up +static bool detect_venv(qstring *venv_exec_path) +{ + if ( qgetenv("IDAPYTHON_VENV_EXECUTABLE", venv_exec_path) + && qfileexist(venv_exec_path->c_str()) ) + return true; + char exepath[QMAXPATH]; + char cfgpath[QMAXPATH]; + if ( search_path(exepath, sizeof(exepath), PYEXE, false) ) + { + qdirname(cfgpath, sizeof(cfgpath), exepath); + qmakepath(cfgpath, sizeof(cfgpath), cfgpath, "..","pyvenv.cfg", nullptr); + if ( qfileexist(cfgpath) ) + { + *venv_exec_path = exepath; + return true; + } + } + venv_exec_path->clear(); + return false; + +} #ifdef __NT__ // for MessageBox() #pragma comment(lib, "user32") @@ -866,6 +946,7 @@ static void exithandler(void) } } + //lint -e2761 call to non-async-signal-safe function '' within signal handler '' //lint -e2762 call to signal registration function 'signal' within signal handler 'aborthandler' //------------------------------------------------------------------------- @@ -888,7 +969,7 @@ static void aborthandler(int sig) // Initialize the Python environment bool idapython_plugin_t::init() { - if ( Py_IsInitialized() != 0 ) + if ( initialized ) return true; // Read configuration @@ -902,7 +983,7 @@ bool idapython_plugin_t::init() // Form the absolute path to IDA\python folder { char buf[QMAXPATH]; - qmakepath(buf, sizeof(buf), idadir(PYTHON_DIR_NAME), QSTRINGIZE(PY_MAJOR_VERSION), nullptr); + qmakepath(buf, sizeof(buf), idadir(PYTHON_DIR_NAME), nullptr); idapython_dir = buf; } @@ -920,31 +1001,6 @@ bool idapython_plugin_t::init() return false; } -#ifdef __MAC__ - if ( !extapi.lib_path.empty() ) - { - // On OSX we should explicitly call Py_SetPythonHome(). - // When using the system Python installation, sys.path will contain paths to other - // Python installations if they appear in $PATH. This can cause fatal errors during - // the system python's initialization. - // - // Note: The path will be something like: - // /System/Library/Frameworks/Python.framework/Versions/2.5/Python - // We need to strip the last part. - // - // Also, use a permanent buffer because Py_SetPythonHome() just stores a pointer - char utf8_pyhomepath[MAXSTR]; - qstrncpy(utf8_pyhomepath, extapi.lib_path.c_str(), sizeof(utf8_pyhomepath)); - char *lastslash = strrchr(utf8_pyhomepath, '/'); - if ( lastslash != nullptr ) - { - *lastslash = 0; - utf8_wchar_t(&pyhomepath, utf8_pyhomepath); - Py_SetPythonHome(pyhomepath.begin()); - } - } -#endif - if ( config.alert_auto_scripts ) { if ( pywraps_check_autoscripts(path, sizeof(path)) @@ -967,98 +1023,146 @@ bool idapython_plugin_t::init() // ... and exit() atexit(exithandler); - // Start the interpreter - Py_InitializeEx(0 /* Don't catch SIGPIPE, SIGXFZ, SIGXFSZ & SIGINT signals */); - // disable handlers - initdone = 1; - signal(SIGABRT, previousHandler); + // If a virtual environment is requested, we defer the loading of + // the site module until after we updated sys.executable. The site + // module will look for a pyvenv.cfg one level above the interpreter + // and take care of setting site-packages properly. - if ( !Py_IsInitialized() ) + qstring venv_exec_path; + bool venv_requested = detect_venv(&venv_exec_path); + venv_requested = venv_exec_path.size() > 0 && extapi.Py_NoSiteFlag_ptr != nullptr; + + if ( venv_requested ) { - warning("IDAPython: Py_InitializeEx() failed"); - return false; + *extapi.Py_NoSiteFlag_ptr = 1; + msg("IDAPython: Requested to use virtual environment interpreter at %s\n", venv_exec_path.c_str()); + } + + if ( Py_IsInitialized() == 0 ) + { + // Start the interpreter + Py_InitializeEx(0 /* Don't catch SIGPIPE, SIGXFZ, SIGXFSZ & SIGINT signals */); + // disable handlers + initdone = 1; + signal(SIGABRT, previousHandler); + + if ( !Py_IsInitialized() ) + { + warning("IDAPython: Py_InitializeEx() failed"); + return false; + } + owning_interpreter = true; + } + else + { + // We are running under Python, the interpreter was not loaded by us + owning_interpreter = false; + initdone = 1; } // add new Python keywords as needed python_highlighter.add_new_keywords(); - // remove current directory - _prepare_sys_path(); - - if ( extapi.PyEval_ThreadsInitialized_ptr != nullptr - && extapi.PyEval_InitThreads_ptr != nullptr ) { - // Enable multi-threading support (before 3.9 - if ( !extapi.PyEval_ThreadsInitialized_ptr() ) - extapi.PyEval_InitThreads_ptr(); - } + // Aquire Global Interpreter Lock (GIL), ensure current thread is allowed to execute Python code + // This is needed when running idalib from Python and is harmless when running inside IDA + PYW_GIL_GET; + + // remove current directory + _prepare_sys_path(); + + if ( extapi.PyEval_ThreadsInitialized_ptr != nullptr + && extapi.PyEval_InitThreads_ptr != nullptr ) + { + // Enable multi-threading support (before 3.9 + if ( !extapi.PyEval_ThreadsInitialized_ptr() ) + extapi.PyEval_InitThreads_ptr(); + } #ifdef Py_DEBUG - msg("HexraysPython: Python compiled with DEBUG enabled.\n"); + msg("HexraysPython: Python compiled with DEBUG enabled.\n"); #endif - qstring dynload_base; - if ( !qgetenv("IDAPYTHON_DYNLOAD_BASE", &dynload_base) ) - dynload_base = idadir(nullptr); + qstring dynload_base; + if ( !qgetenv("IDAPYTHON_DYNLOAD_BASE", &dynload_base) ) + dynload_base = idadir(nullptr); - // Set IDAPYTHON_VERSION in Python - qstring init_code; - init_code.sprnt( - "IDAPYTHON_VERSION=(%d, %d, %d, '%s', %d)\n" - "IDAPYTHON_REMOVE_CWD_SYS_PATH = %s\n" - "IDAPYTHON_DYNLOAD_BASE = r\"%s\"\n" - "IDAPYTHON_DYNLOAD_RELPATH = \"ida_%" FMT_Z "\"\n" - "IDAPYTHON_COMPAT_AUTOIMPORT_MODULES = %s\n" - "IDAPYTHON_IDAUSR_SYSPATH = %s\n", - VER_MAJOR, VER_MINOR, VER_PATCH, VER_STATUS, VER_SERIAL, - config.remove_cwd_sys_path ? "True" : "False", - dynload_base.c_str(), - sizeof(ea_t)*8, - config.autoimport_compat_idaapi ? "True" : "False", - config.idausr_syspath ? "True" : "False" - ); + // Set IDAPYTHON_VERSION in Python + qstring init_code; + init_code.sprnt( + "IDAPYTHON_VERSION=(%d, %d, %d)\n" + "IDAPYTHON_REMOVE_CWD_SYS_PATH = %s\n" + "IDAPYTHON_DYNLOAD_BASE = r\"%s\"\n" + "IDAPYTHON_COMPAT_AUTOIMPORT_MODULES = %s\n" + "IDAPYTHON_IDAUSR_SYSPATH = %s\n" + "IDAPYTHON_OWNING_INTERPRETER = %s\n" + "IDAPYTHON_VENV_EXECUTABLE = r\"%s\"\n", + IDAVER_MAJOR, IDAVER_MINOR, IDAVER_PATCH, + config.remove_cwd_sys_path ? "True" : "False", + dynload_base.c_str(), + config.autoimport_compat_idaapi ? "True" : "False", + config.idausr_syspath ? "True" : "False", + owning_interpreter ? "True" : "False", + venv_exec_path.c_str() + ); - if ( extapi.PyRun_SimpleStringFlags_ptr(init_code.c_str(), nullptr) != 0 ) - { - warning("IDAPython: error executing bootstrap code"); - return false; - } + if ( extapi.PyRun_SimpleStringFlags_ptr(init_code.c_str(), nullptr) != 0 ) + { + warning("IDAPython: error executing bootstrap code"); + return false; + } - // Install extlang. Needs to be done before running init.py - // in case it's calling idaapi.enable_extlang_python(1) - if ( config.namespace_aware ) - extlang_python.flags |= EXTLANG_NS_AWARE; - install_extlang(&extlang_python); + // Install extlang. Needs to be done before running init.py + // in case it's calling idaapi.enable_extlang_python(1) + if ( config.namespace_aware ) + extlang_python.flags |= EXTLANG_NS_AWARE; + install_extlang(&extlang_python); - // Execute init.py (for Python side initialization) - if ( !_run_init_py() ) - { - // 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); + // If loading site was deferred earlier, do it now. + if ( venv_requested ) + { + extapi.PyRun_SimpleStringFlags_ptr( + "import sys\n" + "sys.executable = IDAPYTHON_VENV_EXECUTABLE\n" + "import site\n" + "site.main()\n", + nullptr + ); + } - // Print the exception traceback - extapi.PyRun_SimpleStringFlags_ptr("import traceback;traceback.print_exc();", nullptr); - warning("IDAPython: error executing " S_INIT_PY ":\n" - "%s\n" - "\n" - "Refer to the message window to see the full error log.", errbuf.c_str()); - remove_extlang(&extlang_python); - return false; - } + // Execute init.py (for Python side initialization) + if ( !_run_init_py() ) + { + // 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, /*clear_error=*/ false); - // Init pywraps and notify_when - if ( !init_pywraps() ) - { - warning("IDAPython: init_pywraps() failed!"); - remove_extlang(&extlang_python); - return false; + // Print the exception traceback + extapi.PyRun_SimpleStringFlags_ptr("import traceback;traceback.print_exc();", nullptr); + + warning("IDAPython: error executing " S_INIT_PY ":\n" + "%s\n" + "\n" + "Refer to the message window to see the full error log.", errbuf.c_str()); + remove_extlang(&extlang_python); + return false; + } + + // Init pywraps and notify_when + if ( !init_pywraps() ) + { + warning("IDAPython: init_pywraps() failed!"); + remove_extlang(&extlang_python); + return false; + } } // Register a exec_python() function for IDC add_idc_func(idc_runpythonstatement_desc); add_idc_func(idc_eval_python_desc); + add_idc_func(idc_eval_python_repl_stmt_desc); + add_idc_func(idc_exec_python_script_desc); // A script specified on the command line is run if ( config.run_script.when == RSW_on_init ) @@ -1073,7 +1177,8 @@ bool idapython_plugin_t::init() // Let all modules perform possible initialization send_modules_lifecycle_notification(mln_init); - PyEval_ReleaseThread(PyThreadState_Get()); + if ( owning_interpreter ) + PyEval_ReleaseThread(PyThreadState_Get()); initialized = true; return true; @@ -1239,7 +1344,8 @@ ssize_t idaapi idapython_plugin_t::on_event(ssize_t code, va_list) { PYW_GIL_GET; // See above ui_ready = true; - extapi.PyRun_SimpleStringFlags_ptr("print_banner()", nullptr); + if ( !is_ida_library(nullptr, 0, nullptr) ) + extapi.PyRun_SimpleStringFlags_ptr("print_banner()", nullptr); if ( config.run_script.when == RSW_ui_ready_to_run ) _run_user_script(); } @@ -1281,11 +1387,12 @@ ssize_t idaapi idapython_plugin_t::on_idb_notification(void *, int code, va_list // Compile callback for Python external language evaluator bool idapython_plugin_t::_extlang_compile_file( const char *path, + const char *requested_namespace, qstring *errbuf) { PYW_GIL_GET; new_execution_t exec; - PyObject *globals = _get_module_globals_from_path(path); + PyObject *globals = _get_module_globals_from_path(path, requested_namespace); return _handle_file(path, globals, errbuf); } @@ -1394,7 +1501,9 @@ bool idapython_plugin_t::_extlang_load_procmod( bool ok; { new_execution_t exec; - PyObject *globals = _get_module_globals_from_path(path); + qstring ns; + make_script_ns(&ns, IDP_SUBDIR, path); + PyObject *globals = _get_module_globals_from_path(path, ns.c_str()); ok = _handle_file(path, globals, errbuf, S_IDAAPI_LOADPROCMOD, procobj, /*want_tuple=*/ true); } if ( ok && procobj->is_zero() ) @@ -1413,7 +1522,9 @@ bool idapython_plugin_t::_extlang_unload_procmod( { PYW_GIL_GET; new_execution_t exec; - PyObject *globals = _get_module_globals_from_path(path); + qstring ns; + make_script_ns(&ns, IDP_SUBDIR, path); + PyObject *globals = _get_module_globals_from_path(path, ns.c_str()); return _handle_file(path, globals, errbuf, S_IDAAPI_UNLOADPROCMOD); } @@ -1505,7 +1616,7 @@ bool idapython_plugin_t::_extlang_eval_snippet( globals, globals, nullptr)); - ok = result && !PyErr_Occurred(); //-V560 is always true: !PyErr_Occurred() + ok = result && !PyErr_Occurred(); if ( !ok ) handle_python_error(errbuf); } @@ -1735,7 +1846,7 @@ bool idapython_plugin_t::_extlang_get_attr( if ( !PyUnicode_as_qstring(&clsname, string.o) ) break; - result->set_string(clsname); //-V595 'result' was utilized before it was verified against nullptr + result->set_string(clsname); cvt = CIP_OK; //lint !e838 break; } @@ -1824,6 +1935,50 @@ bool idapython_plugin_t::_extlang_set_attr( return ok; } +//------------------------------------------------------------------------- +// Remove common whitespace prefix (dedent input) +// Returns true if leadig whitespace was trimmed. +static bool strip_leading_whitespace(qstring *lines) +{ + qstrvec_t vec; + lines->split(&vec, "\n"); + + // Traverse all input lines once, looking for a common prefix + size_t min_spaces = SIZE_MAX; + size_t min_tabs = SIZE_MAX; + for ( qstring &s : vec ) + { + // empty lines and comment lines are ignored + if ( s.length() == 0 || s[0] == '#' ) + continue; + + size_t num_spaces = 0; + while ( num_spaces < s.length() && s[num_spaces] == ' ' ) + num_spaces++; + min_spaces = qmin(min_spaces, num_spaces); + + size_t num_tabs = 0; + while ( num_tabs < s.length() && s[num_tabs] == '\t' ) + num_tabs++; + min_tabs = qmin(min_tabs, num_tabs); + } + + if ( min_spaces > 0 && min_tabs > 0 ) + return false; // mix of tabs and spaces is not supported + + size_t prefix_len = min_spaces > 0 ? min_spaces : min_tabs; + if ( prefix_len == 0 ) + return false; + + // If common whitespace prefix was found, remove it + for ( qstring &s : vec ) + if ( s.length() != 0 && s[0] != '#' ) + s.remove(0, prefix_len); + + *lines = qstring::join(vec, "\n"); + return true; +} + //------------------------------------------------------------------------- // Execute a line in the Python CLI bool idapython_plugin_t::_cli_execute_line(const char *line) @@ -1834,6 +1989,10 @@ bool idapython_plugin_t::_cli_execute_line(const char *line) if ( line[0] == '\0' ) return true; + qstring tmp = line; + strip_leading_whitespace(&tmp); + line = tmp.c_str(); + const char *last_line = strrchr(line, '\n'); if ( last_line == nullptr ) last_line = line; @@ -1871,7 +2030,7 @@ bool idapython_plugin_t::_cli_execute_line(const char *line) new_execution_t exec; // Compile as an expression - qstring qstr(line); + qstring qstr = line; newref_t py_code(my_CompileString(insert_encoding_cookie(&qstr), "", Py_eval_input)); if ( !py_code || PyErr_Occurred() ) { @@ -1886,7 +2045,7 @@ bool idapython_plugin_t::_cli_execute_line(const char *line) PyObject *py_globals = _get_module_globals(); newref_t py_result(PyEval_EvalCode(py_code.o, py_globals, py_globals)); - if ( !py_result || PyErr_Occurred() ) //-V560 is always false: PyErr_Occurred() + if ( !py_result || PyErr_Occurred() ) { PyErr_Print(); } @@ -1928,6 +2087,8 @@ bool idapython_plugin_t::_cli_execute_line(const char *line) //------------------------------------------------------------------------- bool idapython_plugin_t::_cli_find_completions( qstrvec_t *out_completions, + qstrvec_t *out_hints, + qstrvec_t *out_docs, int *out_match_start, int *out_match_end, const char *line, @@ -1944,6 +2105,8 @@ bool idapython_plugin_t::_cli_find_completions( return false; return idapython_convert_cli_completions( out_completions, + out_hints, + out_docs, out_match_start, out_match_end, py_res); @@ -2028,7 +2191,7 @@ bool idapython_plugin_t::_handle_file( ret_o = py_ret.o; } - if ( ret_o == Py_None ) //-V614 uninitialized 'ret_o' + if ( ret_o == Py_None ) { if ( want_tuple ) { @@ -2052,6 +2215,17 @@ bool idapython_plugin_t::_handle_file( return ok; } +//------------------------------------------------------------------------- +bool idapython_plugin_t::_exec_script( + const char *path, + PyObject *globals, + qstring *errbuf) +{ + PYW_GIL_GET; + + return _handle_file(path, globals, errbuf); +} + //------------------------------------------------------------------------- // Execute the Python script from the plugin bool idapython_plugin_t::_run_user_script() @@ -2103,7 +2277,7 @@ void idapython_plugin_t::_prepare_sys_path() if ( !path || !PySequence_Check(path.o) ) return; - qstring new_path; + qstrvec_t new_path; Py_ssize_t path_len = PySequence_Size(path.o); if ( path_len > 0 ) { @@ -2115,19 +2289,18 @@ void idapython_plugin_t::_prepare_sys_path() && PyUnicode_Check(path_el.o) && PyUnicode_as_qstring(&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); + if ( !path_el_utf8.empty() ) // skip empty entry + new_path.push_back(path_el_utf8); } } } - if ( !new_path.empty() ) - new_path.append(DELIMITER); - new_path.append(idadir("python")); - qvector wpath; - PySys_SetPath(utf8_wchar_t(&wpath, new_path.c_str())); + new_path.push_back(idadir("python")); + + ref_t py_new_path(PyW_StrVecToPyList(new_path)); + // Since `PySys_GetObject` returns a borrowed reference, + // I'm guessing `PySys_SetObject` steals one... + py_new_path.incref(); + PySys_SetObject("path", py_new_path.o); } //------------------------------------------------------------------------- @@ -2191,50 +2364,21 @@ PyObject *idapython_plugin_t::_get_module_globals(const char *modname) return module == nullptr ? nullptr : PyModule_GetDict(module); } -//------------------------------------------------------------------------- -PyObject *idapython_plugin_t::_get_module_globals_from_path_with_kind( - const char *path, - const char *kind) -{ - const char *fname = qbasename(path); - if ( fname != nullptr ) - { - const char *ext = get_file_ext(fname); - if ( ext == nullptr ) - ext = tail(fname); - else - --ext; - if ( ext > fname ) - { - int len = ext - fname; - qstring modname; - modname.sprnt("__%s__%*.*s", kind, len, len, fname); - return _get_module_globals(modname.begin()); - } - } - return nullptr; -} - //------------------------------------------------------------------------- PyObject *idapython_plugin_t::_get_module_globals_from_path( - const char *path) + const char *path, + const char *requested_namespace) { if ( (extlang_python.flags & EXTLANG_NS_AWARE) != 0 ) { + qstring ns; if ( requested_plugin_path == path ) - return _get_module_globals_from_path_with_kind(path, PLG_SUBDIR); - - char dirpath[QMAXPATH]; - if ( qdirname(dirpath, sizeof(dirpath), path) ) { - const char *dirname = qbasename(dirpath); - if ( streq(dirname, PLG_SUBDIR) - || streq(dirname, IDP_SUBDIR) - || streq(dirname, LDR_SUBDIR) ) - { - return _get_module_globals_from_path_with_kind(path, dirname); - } + make_script_ns(&ns, PLG_SUBDIR, path); + requested_namespace = ns.c_str(); } + if ( requested_namespace ) + return _get_module_globals(requested_namespace); } return nullptr; } @@ -2243,10 +2387,17 @@ PyObject *idapython_plugin_t::_get_module_globals_from_path( // Plugin init routine static plugmod_t *idaapi init() { - idapython_plugin_t *p = new idapython_plugin_t; - if ( p->init() ) - return p; - delete p; +#ifdef __MAC__ + // on macOS we link weakly against python so it's best to verify that + // the python symbols have been resolved before using them + if ( Py_IsInitialized != nullptr ) +#endif + { + idapython_plugin_t *p = new idapython_plugin_t; + if ( p->init() ) + return p; + delete p; + } return nullptr; } diff --git a/idapython.script b/idapython.script index ea0519d..396fa3f 100644 --- a/idapython.script +++ b/idapython.script @@ -21,6 +21,7 @@ global: PyW_SizeVecToPyList; PyW_UvalVecToPyList; PyW_StrVecToPyList; + PyW_TidVecToPyList; PyW_TryGetAttrString; PyW_TryImportModule; PyW_register_compiled_form; @@ -29,6 +30,7 @@ global: disable_script_timeout; enable_extlang_python; enable_python_cli; + idapython_convert_cli_completions; idapython_hook_to_notification_point; idapython_unhook_from_notification_point; idapython_register_hook; diff --git a/idapython_implib.def b/idapython_implib.def index e0b7814..7904896 100644 --- a/idapython_implib.def +++ b/idapython_implib.def @@ -7,6 +7,7 @@ EXPORTS PyW_SizeVecToPyList PyW_UvalVecToPyList PyW_StrVecToPyList + PyW_TidVecToPyList PyW_IsSequenceType PyW_ObjectToString PyW_PySeqToEaVec @@ -65,6 +66,7 @@ EXPORTS til_register_python_udt_type_data_t_instance try_create_swig_wrapper get_callable_arg_count + idapython_convert_cli_completions idapython_hook_to_notification_point idapython_unhook_from_notification_point idapython_register_hook diff --git a/libpython3.tbd b/libpython3.tbd deleted file mode 100644 index 908492a..0000000 --- a/libpython3.tbd +++ /dev/null @@ -1,552 +0,0 @@ ---- !tapi-tbd -tbd-version: 4 -targets: [ arm64-macos, x86_64-macos ] -install-name: '@executable_path/libpython3.link.dylib' -current-version: 3.9 -compatibility-version: 3.9 -exports: - - targets: [ arm64-macos, x86_64-macos ] - symbols: [ _PyAST_CompileEx, _PyAST_CompileObject, _PyAST_FromNode, _PyAST_FromNodeObject, - _PyAST_Validate, _PyArena_AddPyObject, _PyArena_Free, _PyArena_Malloc, - _PyArena_New, _PyArg_Parse, _PyArg_ParseTuple, _PyArg_ParseTupleAndKeywords, - _PyArg_UnpackTuple, _PyArg_VaParse, _PyArg_VaParseTupleAndKeywords, - _PyArg_ValidateKeywordArguments, _PyAsyncGen_New, _PyAsyncGen_Type, - _PyBaseObject_Type, _PyBool_FromLong, _PyBool_Type, _PyBuffer_FillContiguousStrides, - _PyBuffer_FillInfo, _PyBuffer_FromContiguous, _PyBuffer_GetPointer, - _PyBuffer_IsContiguous, _PyBuffer_Release, _PyBuffer_SizeFromFormat, - _PyBuffer_ToContiguous, _PyByteArrayIter_Type, _PyByteArray_AsString, - _PyByteArray_Concat, _PyByteArray_FromObject, _PyByteArray_FromStringAndSize, - _PyByteArray_Resize, _PyByteArray_Size, _PyByteArray_Type, - _PyBytesIter_Type, _PyBytes_AsString, _PyBytes_AsStringAndSize, - _PyBytes_Concat, _PyBytes_ConcatAndDel, _PyBytes_DecodeEscape, - _PyBytes_FromFormat, _PyBytes_FromFormatV, _PyBytes_FromObject, - _PyBytes_FromString, _PyBytes_FromStringAndSize, _PyBytes_Repr, - _PyBytes_Size, _PyBytes_Type, _PyCFunction_Call, _PyCFunction_GetFlags, - _PyCFunction_GetFunction, _PyCFunction_GetSelf, _PyCFunction_NewEx, - _PyCFunction_Type, _PyCMethod_New, _PyCMethod_Type, _PyCallIter_New, - _PyCallIter_Type, _PyCallable_Check, _PyCapsule_GetContext, - _PyCapsule_GetDestructor, _PyCapsule_GetName, _PyCapsule_GetPointer, - _PyCapsule_Import, _PyCapsule_IsValid, _PyCapsule_New, _PyCapsule_SetContext, - _PyCapsule_SetDestructor, _PyCapsule_SetName, _PyCapsule_SetPointer, - _PyCapsule_Type, _PyCell_Get, _PyCell_New, _PyCell_Set, _PyCell_Type, - _PyClassMethodDescr_Type, _PyClassMethod_New, _PyClassMethod_Type, - _PyCode_Addr2Line, _PyCode_New, _PyCode_NewEmpty, _PyCode_NewWithPosOnlyArgs, - _PyCode_Optimize, _PyCode_Type, _PyCodec_BackslashReplaceErrors, - _PyCodec_Decode, _PyCodec_Decoder, _PyCodec_Encode, _PyCodec_Encoder, - _PyCodec_IgnoreErrors, _PyCodec_IncrementalDecoder, _PyCodec_IncrementalEncoder, - _PyCodec_KnownEncoding, _PyCodec_LookupError, _PyCodec_NameReplaceErrors, - _PyCodec_Register, _PyCodec_RegisterError, _PyCodec_ReplaceErrors, - _PyCodec_StreamReader, _PyCodec_StreamWriter, _PyCodec_StrictErrors, - _PyCodec_XMLCharRefReplaceErrors, _PyCompile_OpcodeStackEffect, - _PyCompile_OpcodeStackEffectWithJump, _PyComplex_AsCComplex, - _PyComplex_FromCComplex, _PyComplex_FromDoubles, _PyComplex_ImagAsDouble, - _PyComplex_RealAsDouble, _PyComplex_Type, _PyConfig_Clear, - _PyConfig_InitIsolatedConfig, _PyConfig_InitPythonConfig, - _PyConfig_Read, _PyConfig_SetArgv, _PyConfig_SetBytesArgv, - _PyConfig_SetBytesString, _PyConfig_SetString, _PyConfig_SetWideStringList, - _PyContextToken_Type, _PyContextVar_Get, _PyContextVar_New, - _PyContextVar_Reset, _PyContextVar_Set, _PyContextVar_Type, - _PyContext_Copy, _PyContext_CopyCurrent, _PyContext_Enter, - _PyContext_Exit, _PyContext_New, _PyContext_Type, _PyCoro_New, - _PyCoro_Type, _PyDescr_NewClassMethod, _PyDescr_NewGetSet, - _PyDescr_NewMember, _PyDescr_NewMethod, _PyDescr_NewWrapper, - _PyDictItems_Type, _PyDictIterItem_Type, _PyDictIterKey_Type, - _PyDictIterValue_Type, _PyDictKeys_Type, _PyDictProxy_New, - _PyDictProxy_Type, _PyDictRevIterItem_Type, _PyDictRevIterKey_Type, - _PyDictRevIterValue_Type, _PyDictValues_Type, _PyDict_Clear, - _PyDict_Contains, _PyDict_Copy, _PyDict_DelItem, _PyDict_DelItemString, - _PyDict_GetItem, _PyDict_GetItemString, _PyDict_GetItemWithError, - _PyDict_Items, _PyDict_Keys, _PyDict_Merge, _PyDict_MergeFromSeq2, - _PyDict_New, _PyDict_Next, _PyDict_SetDefault, _PyDict_SetItem, - _PyDict_SetItemString, _PyDict_Size, _PyDict_Type, _PyDict_Update, - _PyDict_Values, _PyEllipsis_Type, _PyEnum_Type, _PyErr_BadArgument, - _PyErr_BadInternalCall, _PyErr_CheckSignals, _PyErr_Clear, - _PyErr_Display, _PyErr_ExceptionMatches, _PyErr_Fetch, _PyErr_Format, - _PyErr_FormatV, _PyErr_GetExcInfo, _PyErr_GivenExceptionMatches, - _PyErr_NewException, _PyErr_NewExceptionWithDoc, _PyErr_NoMemory, - _PyErr_NormalizeException, _PyErr_Occurred, _PyErr_Print, - _PyErr_PrintEx, _PyErr_ProgramText, _PyErr_ProgramTextObject, - _PyErr_ResourceWarning, _PyErr_Restore, _PyErr_SetExcInfo, - _PyErr_SetFromErrno, _PyErr_SetFromErrnoWithFilename, _PyErr_SetFromErrnoWithFilenameObject, - _PyErr_SetFromErrnoWithFilenameObjects, _PyErr_SetImportError, - _PyErr_SetImportErrorSubclass, _PyErr_SetInterrupt, _PyErr_SetNone, - _PyErr_SetObject, _PyErr_SetString, _PyErr_SyntaxLocation, - _PyErr_SyntaxLocationEx, _PyErr_SyntaxLocationObject, _PyErr_WarnEx, - _PyErr_WarnExplicit, _PyErr_WarnExplicitFormat, _PyErr_WarnExplicitObject, - _PyErr_WarnFormat, _PyErr_WriteUnraisable, _PyEval_AcquireLock, - _PyEval_AcquireThread, _PyEval_CallFunction, _PyEval_CallMethod, - _PyEval_CallObjectWithKeywords, _PyEval_EvalCode, _PyEval_EvalCodeEx, - _PyEval_EvalFrame, _PyEval_EvalFrameEx, _PyEval_GetBuiltins, - _PyEval_GetFrame, _PyEval_GetFuncDesc, _PyEval_GetFuncName, - _PyEval_GetGlobals, _PyEval_GetLocals, _PyEval_InitThreads, - _PyEval_MergeCompilerFlags, _PyEval_ReleaseLock, _PyEval_ReleaseThread, - _PyEval_RestoreThread, _PyEval_SaveThread, _PyEval_SetProfile, - _PyEval_SetTrace, _PyEval_ThreadsInitialized, _PyExc_ArithmeticError, - _PyExc_AssertionError, _PyExc_AttributeError, _PyExc_BaseException, - _PyExc_BlockingIOError, _PyExc_BrokenPipeError, _PyExc_BufferError, - _PyExc_BytesWarning, _PyExc_ChildProcessError, _PyExc_ConnectionAbortedError, - _PyExc_ConnectionError, _PyExc_ConnectionRefusedError, _PyExc_ConnectionResetError, - _PyExc_DeprecationWarning, _PyExc_EOFError, _PyExc_EnvironmentError, - _PyExc_Exception, _PyExc_FileExistsError, _PyExc_FileNotFoundError, - _PyExc_FloatingPointError, _PyExc_FutureWarning, _PyExc_GeneratorExit, - _PyExc_IOError, _PyExc_ImportError, _PyExc_ImportWarning, - _PyExc_IndentationError, _PyExc_IndexError, _PyExc_InterruptedError, - _PyExc_IsADirectoryError, _PyExc_KeyError, _PyExc_KeyboardInterrupt, - _PyExc_LookupError, _PyExc_MemoryError, _PyExc_ModuleNotFoundError, - _PyExc_NameError, _PyExc_NotADirectoryError, _PyExc_NotImplementedError, - _PyExc_OSError, _PyExc_OverflowError, _PyExc_PendingDeprecationWarning, - _PyExc_PermissionError, _PyExc_ProcessLookupError, _PyExc_RecursionError, - _PyExc_ReferenceError, _PyExc_ResourceWarning, _PyExc_RuntimeError, - _PyExc_RuntimeWarning, _PyExc_StopAsyncIteration, _PyExc_StopIteration, - _PyExc_SyntaxError, _PyExc_SyntaxWarning, _PyExc_SystemError, - _PyExc_SystemExit, _PyExc_TabError, _PyExc_TimeoutError, _PyExc_TypeError, - _PyExc_UnboundLocalError, _PyExc_UnicodeDecodeError, _PyExc_UnicodeEncodeError, - _PyExc_UnicodeError, _PyExc_UnicodeTranslateError, _PyExc_UnicodeWarning, - _PyExc_UserWarning, _PyExc_ValueError, _PyExc_Warning, _PyExc_ZeroDivisionError, - _PyExceptionClass_Name, _PyException_GetCause, _PyException_GetContext, - _PyException_GetTraceback, _PyException_SetCause, _PyException_SetContext, - _PyException_SetTraceback, _PyFile_FromFd, _PyFile_GetLine, - _PyFile_NewStdPrinter, _PyFile_OpenCode, _PyFile_OpenCodeObject, - _PyFile_SetOpenCodeHook, _PyFile_WriteObject, _PyFile_WriteString, - _PyFilter_Type, _PyFloat_AsDouble, _PyFloat_FromDouble, _PyFloat_FromString, - _PyFloat_GetInfo, _PyFloat_GetMax, _PyFloat_GetMin, _PyFloat_Type, - _PyFrame_BlockPop, _PyFrame_BlockSetup, _PyFrame_FastToLocals, - _PyFrame_FastToLocalsWithError, _PyFrame_GetBack, _PyFrame_GetCode, - _PyFrame_GetLineNumber, _PyFrame_LocalsToFast, _PyFrame_New, - _PyFrame_Type, _PyFrozenSet_New, _PyFrozenSet_Type, _PyFunction_GetAnnotations, - _PyFunction_GetClosure, _PyFunction_GetCode, _PyFunction_GetDefaults, - _PyFunction_GetGlobals, _PyFunction_GetKwDefaults, _PyFunction_GetModule, - _PyFunction_New, _PyFunction_NewWithQualName, _PyFunction_SetAnnotations, - _PyFunction_SetClosure, _PyFunction_SetDefaults, _PyFunction_SetKwDefaults, - _PyFunction_Type, _PyFuture_FromAST, _PyFuture_FromASTObject, - _PyGC_Collect, _PyGILState_Check, _PyGILState_Ensure, _PyGILState_GetThisThreadState, - _PyGILState_Release, _PyGen_New, _PyGen_NewWithQualName, _PyGen_Type, - _PyGetSetDescr_Type, _PyHash_GetFuncDef, _PyImport_AddModule, - _PyImport_AddModuleObject, _PyImport_AppendInittab, _PyImport_ExecCodeModule, - _PyImport_ExecCodeModuleEx, _PyImport_ExecCodeModuleObject, - _PyImport_ExecCodeModuleWithPathnames, _PyImport_ExtendInittab, - _PyImport_FrozenModules, _PyImport_GetImporter, _PyImport_GetMagicNumber, - _PyImport_GetMagicTag, _PyImport_GetModule, _PyImport_GetModuleDict, - _PyImport_Import, _PyImport_ImportFrozenModule, _PyImport_ImportFrozenModuleObject, - _PyImport_ImportModule, _PyImport_ImportModuleLevel, _PyImport_ImportModuleLevelObject, - _PyImport_ImportModuleNoBlock, _PyImport_Inittab, _PyImport_ReloadModule, - _PyIndex_Check, _PyInit__abc, _PyInit__ast, _PyInit__codecs, - _PyInit__collections, _PyInit__functools, _PyInit__imp, _PyInit__io, - _PyInit__locale, _PyInit__operator, _PyInit__peg_parser, _PyInit__signal, - _PyInit__sre, _PyInit__stat, _PyInit__string, _PyInit__symtable, - _PyInit__thread, _PyInit__tracemalloc, _PyInit__weakref, _PyInit_atexit, - _PyInit_errno, _PyInit_faulthandler, _PyInit_gc, _PyInit_itertools, - _PyInit_posix, _PyInit_pwd, _PyInit_time, _PyInit_xxsubtype, - _PyInstanceMethod_Function, _PyInstanceMethod_New, _PyInstanceMethod_Type, - _PyInterpreterState_Clear, _PyInterpreterState_Delete, _PyInterpreterState_Get, - _PyInterpreterState_GetDict, _PyInterpreterState_GetID, _PyInterpreterState_Head, - _PyInterpreterState_Main, _PyInterpreterState_New, _PyInterpreterState_Next, - _PyInterpreterState_ThreadHead, _PyIter_Check, _PyIter_Next, - _PyListIter_Type, _PyListRevIter_Type, _PyList_Append, _PyList_AsTuple, - _PyList_GetItem, _PyList_GetSlice, _PyList_Insert, _PyList_New, - _PyList_Reverse, _PyList_SetItem, _PyList_SetSlice, _PyList_Size, - _PyList_Sort, _PyList_Type, _PyLongRangeIter_Type, _PyLong_AsDouble, - _PyLong_AsLong, _PyLong_AsLongAndOverflow, _PyLong_AsLongLong, - _PyLong_AsLongLongAndOverflow, _PyLong_AsSize_t, _PyLong_AsSsize_t, - _PyLong_AsUnsignedLong, _PyLong_AsUnsignedLongLong, _PyLong_AsUnsignedLongLongMask, - _PyLong_AsUnsignedLongMask, _PyLong_AsVoidPtr, _PyLong_FromDouble, - _PyLong_FromLong, _PyLong_FromLongLong, _PyLong_FromSize_t, - _PyLong_FromSsize_t, _PyLong_FromString, _PyLong_FromUnicode, - _PyLong_FromUnicodeObject, _PyLong_FromUnsignedLong, _PyLong_FromUnsignedLongLong, - _PyLong_FromVoidPtr, _PyLong_GetInfo, _PyLong_Type, _PyMap_Type, - _PyMapping_Check, _PyMapping_GetItemString, _PyMapping_HasKey, - _PyMapping_HasKeyString, _PyMapping_Items, _PyMapping_Keys, - _PyMapping_Length, _PyMapping_SetItemString, _PyMapping_Size, - _PyMapping_Values, _PyMarshal_Init, _PyMarshal_ReadLastObjectFromFile, - _PyMarshal_ReadLongFromFile, _PyMarshal_ReadObjectFromFile, - _PyMarshal_ReadObjectFromString, _PyMarshal_ReadShortFromFile, - _PyMarshal_WriteLongToFile, _PyMarshal_WriteObjectToFile, - _PyMarshal_WriteObjectToString, _PyMem_Calloc, _PyMem_Free, - _PyMem_GetAllocator, _PyMem_Malloc, _PyMem_RawCalloc, _PyMem_RawFree, - _PyMem_RawMalloc, _PyMem_RawRealloc, _PyMem_Realloc, _PyMem_SetAllocator, - _PyMem_SetupDebugHooks, _PyMemberDescr_Type, _PyMember_GetOne, - _PyMember_SetOne, _PyMemoryView_FromBuffer, _PyMemoryView_FromMemory, - _PyMemoryView_FromObject, _PyMemoryView_GetContiguous, _PyMemoryView_Type, - _PyMethodDescr_Type, _PyMethod_Function, _PyMethod_New, _PyMethod_Self, - _PyMethod_Type, _PyModuleDef_Init, _PyModuleDef_Type, _PyModule_AddFunctions, - _PyModule_AddIntConstant, _PyModule_AddObject, _PyModule_AddStringConstant, - _PyModule_AddType, _PyModule_Create2, _PyModule_ExecDef, _PyModule_FromDefAndSpec2, - _PyModule_GetDef, _PyModule_GetDict, _PyModule_GetFilename, - _PyModule_GetFilenameObject, _PyModule_GetName, _PyModule_GetNameObject, - _PyModule_GetState, _PyModule_New, _PyModule_NewObject, _PyModule_SetDocString, - _PyModule_Type, _PyNode_AddChild, _PyNode_Compile, _PyNode_Free, - _PyNode_ListTree, _PyNode_New, _PyNumber_Absolute, _PyNumber_Add, - _PyNumber_And, _PyNumber_AsSsize_t, _PyNumber_Check, _PyNumber_Divmod, - _PyNumber_Float, _PyNumber_FloorDivide, _PyNumber_InPlaceAdd, - _PyNumber_InPlaceAnd, _PyNumber_InPlaceFloorDivide, _PyNumber_InPlaceLshift, - _PyNumber_InPlaceMatrixMultiply, _PyNumber_InPlaceMultiply, - _PyNumber_InPlaceOr, _PyNumber_InPlacePower, _PyNumber_InPlaceRemainder, - _PyNumber_InPlaceRshift, _PyNumber_InPlaceSubtract, _PyNumber_InPlaceTrueDivide, - _PyNumber_InPlaceXor, _PyNumber_Index, _PyNumber_Invert, _PyNumber_Long, - _PyNumber_Lshift, _PyNumber_MatrixMultiply, _PyNumber_Multiply, - _PyNumber_Negative, _PyNumber_Or, _PyNumber_Positive, _PyNumber_Power, - _PyNumber_Remainder, _PyNumber_Rshift, _PyNumber_Subtract, - _PyNumber_ToBase, _PyNumber_TrueDivide, _PyNumber_Xor, _PyODictItems_Type, - _PyODictIter_Type, _PyODictKeys_Type, _PyODictValues_Type, - _PyODict_DelItem, _PyODict_New, _PyODict_SetItem, _PyODict_Type, - _PyOS_AfterFork, _PyOS_AfterFork_Child, _PyOS_AfterFork_Parent, - _PyOS_BeforeFork, _PyOS_FSPath, _PyOS_InitInterrupts, _PyOS_InputHook, - _PyOS_InterruptOccurred, _PyOS_Readline, _PyOS_ReadlineFunctionPointer, - _PyOS_double_to_string, _PyOS_getsig, _PyOS_mystricmp, _PyOS_mystrnicmp, - _PyOS_setsig, _PyOS_snprintf, _PyOS_string_to_double, _PyOS_strtol, - _PyOS_strtoul, _PyOS_vsnprintf, _PyObject_ASCII, _PyObject_AsCharBuffer, - _PyObject_AsFileDescriptor, _PyObject_AsReadBuffer, _PyObject_AsWriteBuffer, - _PyObject_Bytes, _PyObject_Call, _PyObject_CallFinalizer, - _PyObject_CallFinalizerFromDealloc, _PyObject_CallFunction, - _PyObject_CallFunctionObjArgs, _PyObject_CallMethod, _PyObject_CallMethodObjArgs, - _PyObject_CallNoArgs, _PyObject_CallObject, _PyObject_Calloc, - _PyObject_CheckBuffer, _PyObject_CheckReadBuffer, _PyObject_ClearWeakRefs, - _PyObject_CopyData, _PyObject_DelItem, _PyObject_DelItemString, - _PyObject_Dir, _PyObject_Format, _PyObject_Free, _PyObject_GC_Del, - _PyObject_GC_IsFinalized, _PyObject_GC_IsTracked, _PyObject_GC_Track, - _PyObject_GC_UnTrack, _PyObject_GET_WEAKREFS_LISTPTR, _PyObject_GenericGetAttr, - _PyObject_GenericGetDict, _PyObject_GenericSetAttr, _PyObject_GenericSetDict, - _PyObject_GetArenaAllocator, _PyObject_GetAttr, _PyObject_GetAttrString, - _PyObject_GetBuffer, _PyObject_GetItem, _PyObject_GetIter, - _PyObject_HasAttr, _PyObject_HasAttrString, _PyObject_Hash, - _PyObject_HashNotImplemented, _PyObject_IS_GC, _PyObject_Init, - _PyObject_InitVar, _PyObject_IsInstance, _PyObject_IsSubclass, - _PyObject_IsTrue, _PyObject_Length, _PyObject_LengthHint, - _PyObject_Malloc, _PyObject_Not, _PyObject_Print, _PyObject_Realloc, - _PyObject_Repr, _PyObject_RichCompare, _PyObject_RichCompareBool, - _PyObject_SelfIter, _PyObject_SetArenaAllocator, _PyObject_SetAttr, - _PyObject_SetAttrString, _PyObject_SetItem, _PyObject_Size, - _PyObject_Str, _PyObject_Type, _PyObject_VectorcallDict, _PyObject_VectorcallMethod, - _PyParser_ASTFromFile, _PyParser_ASTFromFileObject, _PyParser_ASTFromString, - _PyParser_ASTFromStringObject, _PyParser_ClearError, _PyParser_ParseFile, - _PyParser_ParseFileFlags, _PyParser_ParseFileFlagsEx, _PyParser_ParseFileObject, - _PyParser_ParseString, _PyParser_ParseStringFlags, _PyParser_ParseStringFlagsFilename, - _PyParser_ParseStringFlagsFilenameEx, _PyParser_ParseStringObject, - _PyParser_SetError, _PyParser_SimpleParseFile, _PyParser_SimpleParseFileFlags, - _PyParser_SimpleParseString, _PyParser_SimpleParseStringFlags, - _PyParser_SimpleParseStringFlagsFilename, _PyPegen_ASTFromFileObject, - _PyPegen_ASTFromFilename, _PyPegen_ASTFromString, _PyPegen_ASTFromStringObject, - _PyPickleBuffer_FromObject, _PyPickleBuffer_GetBuffer, _PyPickleBuffer_Release, - _PyPickleBuffer_Type, _PyPreConfig_InitIsolatedConfig, _PyPreConfig_InitPythonConfig, - _PyProperty_Type, _PyRangeIter_Type, _PyRange_Type, _PyReversed_Type, - _PyRun_AnyFile, _PyRun_AnyFileEx, _PyRun_AnyFileExFlags, _PyRun_AnyFileFlags, - _PyRun_File, _PyRun_FileEx, _PyRun_FileExFlags, _PyRun_FileFlags, - _PyRun_InteractiveLoop, _PyRun_InteractiveLoopFlags, _PyRun_InteractiveOne, - _PyRun_InteractiveOneFlags, _PyRun_InteractiveOneObject, _PyRun_SimpleFile, - _PyRun_SimpleFileEx, _PyRun_SimpleFileExFlags, _PyRun_SimpleString, - _PyRun_SimpleStringFlags, _PyRun_String, _PyRun_StringFlags, - _PySTEntry_Type, _PyST_GetScope, _PySeqIter_New, _PySeqIter_Type, - _PySequence_Check, _PySequence_Concat, _PySequence_Contains, - _PySequence_Count, _PySequence_DelItem, _PySequence_DelSlice, - _PySequence_Fast, _PySequence_GetItem, _PySequence_GetSlice, - _PySequence_In, _PySequence_InPlaceConcat, _PySequence_InPlaceRepeat, - _PySequence_Index, _PySequence_Length, _PySequence_List, _PySequence_Repeat, - _PySequence_SetItem, _PySequence_SetSlice, _PySequence_Size, - _PySequence_Tuple, _PySetIter_Type, _PySet_Add, _PySet_Clear, - _PySet_Contains, _PySet_Discard, _PySet_New, _PySet_Pop, _PySet_Size, - _PySet_Type, _PySlice_AdjustIndices, _PySlice_GetIndices, - _PySlice_GetIndicesEx, _PySlice_New, _PySlice_Type, _PySlice_Unpack, - _PyState_AddModule, _PyState_FindModule, _PyState_RemoveModule, - _PyStaticMethod_New, _PyStaticMethod_Type, _PyStatus_Error, - _PyStatus_Exception, _PyStatus_Exit, _PyStatus_IsError, _PyStatus_IsExit, - _PyStatus_NoMemory, _PyStatus_Ok, _PyStdPrinter_Type, _PyStructSequence_GetItem, - _PyStructSequence_InitType, _PyStructSequence_InitType2, _PyStructSequence_New, - _PyStructSequence_NewType, _PyStructSequence_SetItem, _PySuper_Type, - _PySymtable_Build, _PySymtable_BuildObject, _PySymtable_Free, - _PySymtable_Lookup, _PySys_AddAuditHook, _PySys_AddWarnOption, - _PySys_AddWarnOptionUnicode, _PySys_AddXOption, _PySys_Audit, - _PySys_FormatStderr, _PySys_FormatStdout, _PySys_GetObject, - _PySys_GetXOptions, _PySys_HasWarnOptions, _PySys_ResetWarnOptions, - _PySys_SetArgv, _PySys_SetArgvEx, _PySys_SetObject, _PySys_SetPath, - _PySys_WriteStderr, _PySys_WriteStdout, _PyThreadState_Clear, - _PyThreadState_Delete, _PyThreadState_DeleteCurrent, _PyThreadState_Get, - _PyThreadState_GetDict, _PyThreadState_GetFrame, _PyThreadState_GetID, - _PyThreadState_GetInterpreter, _PyThreadState_New, _PyThreadState_Next, - _PyThreadState_SetAsyncExc, _PyThreadState_Swap, _PyThread_GetInfo, - _PyThread_ReInitTLS, _PyThread_acquire_lock, _PyThread_acquire_lock_timed, - _PyThread_allocate_lock, _PyThread_create_key, _PyThread_delete_key, - _PyThread_delete_key_value, _PyThread_exit_thread, _PyThread_free_lock, - _PyThread_get_key_value, _PyThread_get_stacksize, _PyThread_get_thread_ident, - _PyThread_get_thread_native_id, _PyThread_init_thread, _PyThread_release_lock, - _PyThread_set_key_value, _PyThread_set_stacksize, _PyThread_start_new_thread, - _PyThread_tss_alloc, _PyThread_tss_create, _PyThread_tss_delete, - _PyThread_tss_free, _PyThread_tss_get, _PyThread_tss_is_created, - _PyThread_tss_set, _PyToken_OneChar, _PyToken_ThreeChars, - _PyToken_TwoChars, _PyTraceBack_Here, _PyTraceBack_Print, - _PyTraceBack_Type, _PyTraceMalloc_Track, _PyTraceMalloc_Untrack, - _PyTupleIter_Type, _PyTuple_GetItem, _PyTuple_GetSlice, _PyTuple_New, - _PyTuple_Pack, _PyTuple_SetItem, _PyTuple_Size, _PyTuple_Type, - _PyType_ClearCache, _PyType_FromModuleAndSpec, _PyType_FromSpec, - _PyType_FromSpecWithBases, _PyType_GenericAlloc, _PyType_GenericNew, - _PyType_GetFlags, _PyType_GetModule, _PyType_GetModuleState, - _PyType_GetSlot, _PyType_IsSubtype, _PyType_Modified, _PyType_Ready, - _PyType_Type, _PyUnicodeDecodeError_Create, _PyUnicodeDecodeError_GetEncoding, - _PyUnicodeDecodeError_GetEnd, _PyUnicodeDecodeError_GetObject, - _PyUnicodeDecodeError_GetReason, _PyUnicodeDecodeError_GetStart, - _PyUnicodeDecodeError_SetEnd, _PyUnicodeDecodeError_SetReason, - _PyUnicodeDecodeError_SetStart, _PyUnicodeEncodeError_Create, - _PyUnicodeEncodeError_GetEncoding, _PyUnicodeEncodeError_GetEnd, - _PyUnicodeEncodeError_GetObject, _PyUnicodeEncodeError_GetReason, - _PyUnicodeEncodeError_GetStart, _PyUnicodeEncodeError_SetEnd, - _PyUnicodeEncodeError_SetReason, _PyUnicodeEncodeError_SetStart, - _PyUnicodeIter_Type, _PyUnicodeTranslateError_Create, _PyUnicodeTranslateError_GetEnd, - _PyUnicodeTranslateError_GetObject, _PyUnicodeTranslateError_GetReason, - _PyUnicodeTranslateError_GetStart, _PyUnicodeTranslateError_SetEnd, - _PyUnicodeTranslateError_SetReason, _PyUnicodeTranslateError_SetStart, - _PyUnicode_Append, _PyUnicode_AppendAndDel, _PyUnicode_AsASCIIString, - _PyUnicode_AsCharmapString, _PyUnicode_AsDecodedObject, _PyUnicode_AsDecodedUnicode, - _PyUnicode_AsEncodedObject, _PyUnicode_AsEncodedString, _PyUnicode_AsEncodedUnicode, - _PyUnicode_AsLatin1String, _PyUnicode_AsRawUnicodeEscapeString, - _PyUnicode_AsUCS4, _PyUnicode_AsUCS4Copy, _PyUnicode_AsUTF16String, - _PyUnicode_AsUTF32String, _PyUnicode_AsUTF8, _PyUnicode_AsUTF8AndSize, - _PyUnicode_AsUTF8String, _PyUnicode_AsUnicode, _PyUnicode_AsUnicodeAndSize, - _PyUnicode_AsUnicodeCopy, _PyUnicode_AsUnicodeEscapeString, - _PyUnicode_AsWideChar, _PyUnicode_AsWideCharString, _PyUnicode_BuildEncodingMap, - _PyUnicode_Compare, _PyUnicode_CompareWithASCIIString, _PyUnicode_Concat, - _PyUnicode_Contains, _PyUnicode_CopyCharacters, _PyUnicode_Count, - _PyUnicode_Decode, _PyUnicode_DecodeASCII, _PyUnicode_DecodeCharmap, - _PyUnicode_DecodeFSDefault, _PyUnicode_DecodeFSDefaultAndSize, - _PyUnicode_DecodeLatin1, _PyUnicode_DecodeLocale, _PyUnicode_DecodeLocaleAndSize, - _PyUnicode_DecodeRawUnicodeEscape, _PyUnicode_DecodeUTF16, - _PyUnicode_DecodeUTF16Stateful, _PyUnicode_DecodeUTF32, _PyUnicode_DecodeUTF32Stateful, - _PyUnicode_DecodeUTF7, _PyUnicode_DecodeUTF7Stateful, _PyUnicode_DecodeUTF8, - _PyUnicode_DecodeUTF8Stateful, _PyUnicode_DecodeUnicodeEscape, - _PyUnicode_Encode, _PyUnicode_EncodeASCII, _PyUnicode_EncodeCharmap, - _PyUnicode_EncodeDecimal, _PyUnicode_EncodeFSDefault, _PyUnicode_EncodeLatin1, - _PyUnicode_EncodeLocale, _PyUnicode_EncodeRawUnicodeEscape, - _PyUnicode_EncodeUTF16, _PyUnicode_EncodeUTF32, _PyUnicode_EncodeUTF7, - _PyUnicode_EncodeUTF8, _PyUnicode_EncodeUnicodeEscape, _PyUnicode_FSConverter, - _PyUnicode_FSDecoder, _PyUnicode_Fill, _PyUnicode_Find, _PyUnicode_FindChar, - _PyUnicode_Format, _PyUnicode_FromEncodedObject, _PyUnicode_FromFormat, - _PyUnicode_FromFormatV, _PyUnicode_FromKindAndData, _PyUnicode_FromObject, - _PyUnicode_FromOrdinal, _PyUnicode_FromString, _PyUnicode_FromStringAndSize, - _PyUnicode_FromUnicode, _PyUnicode_FromWideChar, _PyUnicode_GetDefaultEncoding, - _PyUnicode_GetLength, _PyUnicode_GetMax, _PyUnicode_GetSize, - _PyUnicode_InternFromString, _PyUnicode_InternImmortal, _PyUnicode_InternInPlace, - _PyUnicode_IsIdentifier, _PyUnicode_Join, _PyUnicode_New, - _PyUnicode_Partition, _PyUnicode_RPartition, _PyUnicode_RSplit, - _PyUnicode_ReadChar, _PyUnicode_Replace, _PyUnicode_Resize, - _PyUnicode_RichCompare, _PyUnicode_Split, _PyUnicode_Splitlines, - _PyUnicode_Substring, _PyUnicode_Tailmatch, _PyUnicode_TransformDecimalToASCII, - _PyUnicode_Translate, _PyUnicode_TranslateCharmap, _PyUnicode_Type, - _PyUnicode_WriteChar, _PyVectorcall_Call, _PyWeakref_GetObject, - _PyWeakref_NewProxy, _PyWeakref_NewRef, _PyWideStringList_Append, - _PyWideStringList_Insert, _PyWrapperDescr_Type, _PyWrapper_New, - _PyZip_Type, _Py_AddPendingCall, _Py_AtExit, _Py_BuildValue, - _Py_BytesMain, _Py_BytesWarningFlag, _Py_CompileString, _Py_CompileStringExFlags, - _Py_CompileStringFlags, _Py_CompileStringObject, _Py_DebugFlag, - _Py_DecRef, _Py_DecodeLocale, _Py_DontWriteBytecodeFlag, _Py_EncodeLocale, - _Py_EndInterpreter, _Py_EnterRecursiveCall, _Py_Exit, _Py_ExitStatusException, - _Py_FatalError, _Py_FdIsInteractive, _Py_FileSystemDefaultEncodeErrors, - _Py_FileSystemDefaultEncoding, _Py_Finalize, _Py_FinalizeEx, - _Py_FrozenFlag, _Py_GenericAlias, _Py_GenericAliasType, _Py_GetArgcArgv, - _Py_GetBuildInfo, _Py_GetCompiler, _Py_GetCopyright, _Py_GetExecPrefix, - _Py_GetPath, _Py_GetPlatform, _Py_GetPrefix, _Py_GetProgramFullPath, - _Py_GetProgramName, _Py_GetPythonHome, _Py_GetRecursionLimit, - _Py_GetVersion, _Py_HasFileSystemDefaultEncoding, _Py_HashRandomizationFlag, - _Py_IgnoreEnvironmentFlag, _Py_IncRef, _Py_Initialize, _Py_InitializeEx, - _Py_InitializeFromConfig, _Py_InspectFlag, _Py_InteractiveFlag, - _Py_IsInitialized, _Py_IsolatedFlag, _Py_LeaveRecursiveCall, - _Py_Main, _Py_MakePendingCalls, _Py_NewInterpreter, _Py_NoSiteFlag, - _Py_NoUserSiteDirectory, _Py_OptimizeFlag, _Py_PreInitialize, - _Py_PreInitializeFromArgs, _Py_PreInitializeFromBytesArgs, - _Py_QuietFlag, _Py_ReprEnter, _Py_ReprLeave, _Py_RunMain, - _Py_SetPath, _Py_SetProgramName, _Py_SetPythonHome, _Py_SetRecursionLimit, - _Py_SetStandardStreamEncoding, _Py_SymtableString, _Py_SymtableStringObject, - _Py_UNICODE_strcat, _Py_UNICODE_strchr, _Py_UNICODE_strcmp, - _Py_UNICODE_strcpy, _Py_UNICODE_strlen, _Py_UNICODE_strncmp, - _Py_UNICODE_strncpy, _Py_UNICODE_strrchr, _Py_UTF8Mode, _Py_UnbufferedStdioFlag, - _Py_UniversalNewlineFgets, _Py_VaBuildValue, _Py_VerboseFlag, - _Py_hexdigits, __PyAST_GetDocString, __PyAST_Optimize, __PyAccu_Accumulate, - __PyAccu_Destroy, __PyAccu_Finish, __PyAccu_FinishAsList, - __PyAccu_Init, __PyArg_BadArgument, __PyArg_CheckPositional, - __PyArg_NoKeywords, __PyArg_NoKwnames, __PyArg_NoPositional, - __PyArg_ParseStack, __PyArg_ParseStackAndKeywords, __PyArg_ParseStackAndKeywords_SizeT, - __PyArg_ParseStack_SizeT, __PyArg_ParseTupleAndKeywordsFast, - __PyArg_ParseTupleAndKeywordsFast_SizeT, __PyArg_ParseTupleAndKeywords_SizeT, - __PyArg_ParseTuple_SizeT, __PyArg_Parse_SizeT, __PyArg_UnpackKeywords, - __PyArg_UnpackStack, __PyArg_VaParseTupleAndKeywordsFast, - __PyArg_VaParseTupleAndKeywordsFast_SizeT, __PyArg_VaParseTupleAndKeywords_SizeT, - __PyArg_VaParse_SizeT, __PyArgv_AsWstrList, __PyAsyncGenASend_Type, - __PyAsyncGenAThrow_Type, __PyAsyncGenWrappedValue_Type, __PyByteArray_empty_string, - __PyBytesIOBuffer_Type, __PyBytesWriter_Alloc, __PyBytesWriter_Dealloc, - __PyBytesWriter_Finish, __PyBytesWriter_Init, __PyBytesWriter_Prepare, - __PyBytesWriter_Resize, __PyBytesWriter_WriteBytes, __PyBytes_DecodeEscape, - __PyBytes_FormatEx, __PyBytes_FromHex, __PyBytes_Join, __PyBytes_Resize, - __PyCode_CheckLineNumber, __PyCode_ConstantKey, __PyCode_GetExtra, - __PyCode_SetExtra, __PyCodecInfo_GetIncrementalDecoder, __PyCodecInfo_GetIncrementalEncoder, - __PyCodec_DecodeText, __PyCodec_EncodeText, __PyCodec_Forget, - __PyCodec_Lookup, __PyCodec_LookupTextEncoding, __PyComplex_FormatAdvancedWriter, - __PyConfig_InitCompatConfig, __PyContext_NewHamtForTests, - __PyCoroWrapper_Type, __PyCrossInterpreterData_Lookup, __PyCrossInterpreterData_NewObject, - __PyCrossInterpreterData_RegisterClass, __PyCrossInterpreterData_Release, - __PyDebugAllocatorStats, __PyDictView_Intersect, __PyDictView_New, - __PyDict_CheckConsistency, __PyDict_Contains, __PyDict_DebugMallocStats, - __PyDict_DelItemId, __PyDict_DelItemIf, __PyDict_DelItem_KnownHash, - __PyDict_GetItemId, __PyDict_GetItemIdWithError, __PyDict_GetItemStringWithError, - __PyDict_GetItem_KnownHash, __PyDict_HasOnlyStringKeys, __PyDict_MaybeUntrack, - __PyDict_MergeEx, __PyDict_NewPresized, __PyDict_Next, __PyDict_Pop, - __PyDict_SetItemId, __PyDict_SetItem_KnownHash, __PyDict_SizeOf, - __PyErr_BadInternalCall, __PyErr_ChainExceptions, __PyErr_ChainStackItem, - __PyErr_CheckSignals, __PyErr_CheckSignalsTstate, __PyErr_Clear, - __PyErr_Display, __PyErr_ExceptionMatches, __PyErr_Fetch, - __PyErr_Format, __PyErr_FormatFromCause, __PyErr_FormatFromCauseTstate, - __PyErr_GetExcInfo, __PyErr_GetTopmostException, __PyErr_NoMemory, - __PyErr_NormalizeException, __PyErr_Print, __PyErr_Restore, - __PyErr_SetKeyError, __PyErr_SetNone, __PyErr_SetObject, __PyErr_SetString, - __PyErr_TrySetFromCause, __PyErr_WriteUnraisableMsg, __PyEval_AddPendingCall, - __PyEval_CallTracing, __PyEval_EvalCodeWithName, __PyEval_EvalFrameDefault, - __PyEval_GetAsyncGenFinalizer, __PyEval_GetAsyncGenFirstiter, - __PyEval_GetBuiltinId, __PyEval_GetCoroutineOriginTrackingDepth, - __PyEval_GetSwitchInterval, __PyEval_RequestCodeExtraIndex, - __PyEval_SetAsyncGenFinalizer, __PyEval_SetAsyncGenFirstiter, - __PyEval_SetCoroutineOriginTrackingDepth, __PyEval_SetProfile, - __PyEval_SetSwitchInterval, __PyEval_SetTrace, __PyEval_SignalAsyncExc, - __PyEval_SignalReceived, __PyEval_SliceIndex, __PyEval_SliceIndexNotNone, - __PyFloat_DebugMallocStats, __PyFloat_FormatAdvancedWriter, - __PyFloat_Pack2, __PyFloat_Pack4, __PyFloat_Pack8, __PyFloat_Unpack2, - __PyFloat_Unpack4, __PyFloat_Unpack8, __PyFrame_DebugMallocStats, - __PyFunction_Vectorcall, __PyGC_CollectIfEnabled, __PyGC_CollectNoFail, - __PyGC_InitState, __PyGILState_GetInterpreterStateUnsafe, - __PyGILState_Reinit, __PyGen_FetchStopIterationValue, __PyGen_Finalize, - __PyGen_Send, __PyGen_SetStopIterationValue, __PyHamtItems_Type, - __PyHamtKeys_Type, __PyHamtValues_Type, __PyHamt_ArrayNode_Type, - __PyHamt_BitmapNode_Type, __PyHamt_CollisionNode_Type, __PyHamt_Type, - __PyImport_AcquireLock, __PyImport_FindExtensionObject, __PyImport_FixupBuiltin, - __PyImport_FixupExtensionObject, __PyImport_GetModuleId, __PyImport_IsInitialized, - __PyImport_ReleaseLock, __PyImport_SetModule, __PyImport_SetModuleString, - __PyInterpreterID_LookUp, __PyInterpreterID_New, __PyInterpreterID_Type, - __PyInterpreterState_DeleteExceptMain, __PyInterpreterState_Enable, - __PyInterpreterState_GetConfig, __PyInterpreterState_GetEvalFrameFunc, - __PyInterpreterState_GetIDObject, __PyInterpreterState_GetMainModule, - __PyInterpreterState_IDDecref, __PyInterpreterState_IDIncref, - __PyInterpreterState_IDInitref, __PyInterpreterState_LookUpID, - __PyInterpreterState_RequireIDRef, __PyInterpreterState_RequiresIDRef, - __PyInterpreterState_SetEvalFrameFunc, __PyList_DebugMallocStats, - __PyList_Extend, __PyLong_AsByteArray, __PyLong_AsInt, __PyLong_AsTime_t, - __PyLong_Copy, __PyLong_DigitValue, __PyLong_DivmodNear, __PyLong_Format, - __PyLong_FormatAdvancedWriter, __PyLong_FormatBytesWriter, - __PyLong_FormatWriter, __PyLong_Frexp, __PyLong_FromByteArray, - __PyLong_FromBytes, __PyLong_FromGid, __PyLong_FromNbIndexOrNbInt, - __PyLong_FromNbInt, __PyLong_FromTime_t, __PyLong_FromUid, - __PyLong_GCD, __PyLong_Lshift, __PyLong_New, __PyLong_NumBits, - __PyLong_One, __PyLong_Rshift, __PyLong_Sign, __PyLong_Size_t_Converter, - __PyLong_UnsignedInt_Converter, __PyLong_UnsignedLongLong_Converter, - __PyLong_UnsignedLong_Converter, __PyLong_UnsignedShort_Converter, - __PyLong_Zero, __PyManagedBuffer_Type, __PyMem_GetAllocatorName, - __PyMem_GetCurrentAllocatorName, __PyMem_RawStrdup, __PyMem_RawWcsdup, - __PyMem_SetDefaultAllocator, __PyMem_SetupAllocators, __PyMem_Strdup, - __PyMethodWrapper_Type, __PyModuleSpec_IsInitializing, __PyModule_Clear, - __PyModule_ClearDict, __PyModule_CreateInitialized, __PyNamespace_New, - __PyNamespace_Type, __PyNode_SizeOf, __PyNone_Type, __PyNotImplemented_Type, - __PyOS_InterruptOccurred, __PyOS_IsMainThread, __PyOS_ReadlineTState, - __PyOS_URandom, __PyOS_URandomNonblock, __PyObject_AssertFailed, - __PyObject_Call, __PyObject_CallFunction_SizeT, __PyObject_CallMethodId, - __PyObject_CallMethodIdObjArgs, __PyObject_CallMethodId_SizeT, - __PyObject_CallMethod_SizeT, __PyObject_Call_Prepend, __PyObject_CheckConsistency, - __PyObject_CheckCrossInterpreterData, __PyObject_DebugMallocStats, - __PyObject_DebugTypeStats, __PyObject_Dump, __PyObject_FastCallDictTstate, - __PyObject_FunctionStr, __PyObject_GC_Calloc, __PyObject_GC_Malloc, - __PyObject_GC_New, __PyObject_GC_NewVar, __PyObject_GC_Resize, - __PyObject_GenericGetAttrWithDict, __PyObject_GenericSetAttrWithDict, - __PyObject_GetAttrId, __PyObject_GetCrossInterpreterData, - __PyObject_GetDictPtr, __PyObject_GetMethod, __PyObject_HasAttrId, - __PyObject_HasLen, __PyObject_IsAbstract, __PyObject_IsFreed, - __PyObject_LookupAttr, __PyObject_LookupAttrId, __PyObject_LookupSpecial, - __PyObject_MakeTpCall, __PyObject_New, __PyObject_NewVar, - __PyObject_NextNotImplemented, __PyObject_RealIsInstance, - __PyObject_RealIsSubclass, __PyObject_SetAttrId, __PyParser_Grammar, - __PyParser_TokenNames, __PyPreConfig_InitCompatConfig, __PyRuntime, - __PyRuntimeState_Fini, __PyRuntimeState_Init, __PyRuntimeState_ReInitThreads, - __PyRuntime_Finalize, __PyRuntime_Initialize, __PySequence_BytesToCharpArray, - __PySequence_IterSearch, __PySet_Dummy, __PySet_NextEntry, - __PySet_Update, __PySignal_AfterFork, __PySlice_FromIndices, - __PySlice_GetLongIndices, __PyStack_AsDict, __PyState_AddModule, - __PySys_GetObjectId, __PySys_GetSizeOf, __PySys_SetObjectId, - __PyThreadState_DeleteCurrent, __PyThreadState_DeleteExcept, - __PyThreadState_GetDict, __PyThreadState_Init, __PyThreadState_Prealloc, - __PyThreadState_Swap, __PyThreadState_UncheckedGet, __PyThread_CurrentFrames, - __PyThread_at_fork_reinit, __PyTime_AsMicroseconds, __PyTime_AsMilliseconds, - __PyTime_AsNanosecondsObject, __PyTime_AsSecondsDouble, __PyTime_AsTimespec, - __PyTime_AsTimeval, __PyTime_AsTimevalTime_t, __PyTime_AsTimeval_noraise, - __PyTime_FromMillisecondsObject, __PyTime_FromNanoseconds, - __PyTime_FromNanosecondsObject, __PyTime_FromSeconds, __PyTime_FromSecondsObject, - __PyTime_FromTimespec, __PyTime_FromTimeval, __PyTime_GetMonotonicClock, - __PyTime_GetMonotonicClockWithInfo, __PyTime_GetPerfCounter, - __PyTime_GetPerfCounterWithInfo, __PyTime_GetSystemClock, - __PyTime_GetSystemClockWithInfo, __PyTime_Init, __PyTime_MulDiv, - __PyTime_ObjectToTime_t, __PyTime_ObjectToTimespec, __PyTime_ObjectToTimeval, - __PyTime_gmtime, __PyTime_localtime, __PyTraceMalloc_GetTraceback, - __PyTraceMalloc_NewReference, __PyTraceback_Add, __PyTrash_begin, - __PyTrash_deposit_object, __PyTrash_destroy_chain, __PyTrash_end, - __PyTrash_thread_deposit_object, __PyTrash_thread_destroy_chain, - __PyTuple_DebugMallocStats, __PyTuple_MaybeUntrack, __PyTuple_Resize, - __PyType_CalculateMetaclass, __PyType_CheckConsistency, __PyType_GetDocFromInternalDoc, - __PyType_GetTextSignatureFromInternalDoc, __PyType_Lookup, - __PyType_LookupId, __PyType_Name, __PyUnicodeTranslateError_Create, - __PyUnicodeWriter_Dealloc, __PyUnicodeWriter_Finish, __PyUnicodeWriter_Init, - __PyUnicodeWriter_PrepareInternal, __PyUnicodeWriter_PrepareKindInternal, - __PyUnicodeWriter_WriteASCIIString, __PyUnicodeWriter_WriteChar, - __PyUnicodeWriter_WriteLatin1String, __PyUnicodeWriter_WriteStr, - __PyUnicodeWriter_WriteSubstring, __PyUnicode_AsASCIIString, - __PyUnicode_AsLatin1String, __PyUnicode_AsUTF8String, __PyUnicode_AsUnicode, - __PyUnicode_CheckConsistency, __PyUnicode_Copy, __PyUnicode_DecodeUnicodeEscape, - __PyUnicode_EQ, __PyUnicode_EncodeCharmap, __PyUnicode_EncodeUTF16, - __PyUnicode_EncodeUTF32, __PyUnicode_EncodeUTF7, __PyUnicode_EqualToASCIIId, - __PyUnicode_EqualToASCIIString, __PyUnicode_FastCopyCharacters, - __PyUnicode_FastFill, __PyUnicode_FindMaxChar, __PyUnicode_FormatAdvancedWriter, - __PyUnicode_FormatLong, __PyUnicode_FromASCII, __PyUnicode_FromId, - __PyUnicode_InsertThousandsGrouping, __PyUnicode_IsAlpha, - __PyUnicode_IsCaseIgnorable, __PyUnicode_IsCased, __PyUnicode_IsDecimalDigit, - __PyUnicode_IsDigit, __PyUnicode_IsLinebreak, __PyUnicode_IsLowercase, - __PyUnicode_IsNumeric, __PyUnicode_IsPrintable, __PyUnicode_IsTitlecase, - __PyUnicode_IsUppercase, __PyUnicode_IsWhitespace, __PyUnicode_IsXidContinue, - __PyUnicode_IsXidStart, __PyUnicode_JoinArray, __PyUnicode_Ready, - __PyUnicode_ScanIdentifier, __PyUnicode_ToDecimalDigit, __PyUnicode_ToDigit, - __PyUnicode_ToFoldedFull, __PyUnicode_ToLowerFull, __PyUnicode_ToLowercase, - __PyUnicode_ToNumeric, __PyUnicode_ToTitleFull, __PyUnicode_ToTitlecase, - __PyUnicode_ToUpperFull, __PyUnicode_ToUppercase, __PyUnicode_TransformDecimalAndSpaceToASCII, - __PyUnicode_XStrip, __PyWarnings_Init, __PyWeakref_CallableProxyType, - __PyWeakref_ClearRef, __PyWeakref_GetWeakrefCount, __PyWeakref_ProxyType, - __PyWeakref_RefType, __PyWideStringList_AsList, __PyWideStringList_Clear, - __PyWideStringList_Copy, __PyWideStringList_Extend, __Py_BreakPoint, - __Py_BuildValue_SizeT, __Py_CheckFunctionResult, __Py_CheckRecursionLimit, - __Py_CheckRecursiveCall, __Py_ClearArgcArgv, __Py_ClearStandardStreamEncoding, - __Py_CoerceLegacyLocale, __Py_Dealloc, __Py_DecodeLocaleEx, - __Py_DecodeUTF8Ex, __Py_DecodeUTF8_surrogateescape, __Py_DisplaySourceLine, - __Py_EllipsisObject, __Py_EncodeLocaleEx, __Py_EncodeLocaleRaw, - __Py_EncodeUTF8Ex, __Py_FalseStruct, __Py_FatalErrorFormat, - __Py_FatalErrorFunc, __Py_FatalError_TstateNULL, __Py_FreeCharPArray, - __Py_GetAllocatedBlocks, __Py_GetConfig, __Py_GetConfigsAsDict, - __Py_GetEnv, __Py_GetErrorHandler, __Py_GetForceASCII, __Py_GetLocaleconvNumeric, - __Py_Gid_Converter, __Py_HandleSystemExit, __Py_HashBytes, - __Py_HashDouble, __Py_HashPointer, __Py_HashPointerRaw, __Py_HashSecret, - __Py_InitializeMain, __Py_IsCoreInitialized, __Py_IsFinalizing, - __Py_IsLocaleCoercionTarget, __Py_LegacyLocaleDetected, __Py_Mangle, - __Py_NewInterpreter, __Py_NewReference, __Py_NoneStruct, __Py_NotImplementedStruct, - __Py_PackageContext, __Py_PreInitializeFromConfig, __Py_PreInitializeFromPyArgv, - __Py_PyAtExit, __Py_ResetForceASCII, __Py_RestoreSignals, - __Py_SetLocaleFromEnv, __Py_SetProgramFullPath, __Py_Sigset_Converter, - __Py_SourceAsString, __Py_SwappedOp, __Py_SymtableStringObjectFlags, - __Py_TrueStruct, __Py_Uid_Converter, __Py_UnhandledKeyboardInterrupt, - __Py_VaBuildStack, __Py_VaBuildStack_SizeT, __Py_VaBuildValue_SizeT, - __Py_abspath, __Py_add_one_to_index_C, __Py_add_one_to_index_F, - __Py_ascii_whitespace, __Py_bit_length, __Py_c_abs, __Py_c_diff, - __Py_c_neg, __Py_c_pow, __Py_c_prod, __Py_c_quot, __Py_c_sum, - __Py_convert_optional_to_ssize_t, __Py_ctype_table, __Py_ctype_tolower, - __Py_ctype_toupper, __Py_device_encoding, __Py_dg_dtoa, __Py_dg_freedtoa, - __Py_dg_infinity, __Py_dg_stdnan, __Py_dg_strtod, __Py_dup, - __Py_fopen, __Py_fopen_obj, __Py_fstat, __Py_fstat_noraise, - __Py_get_blocking, __Py_get_env_flag, __Py_get_inheritable, - __Py_get_xoption, __Py_gitidentifier, __Py_gitversion, __Py_hashtable_clear, - __Py_hashtable_compare_direct, __Py_hashtable_destroy, __Py_hashtable_foreach, - __Py_hashtable_get, __Py_hashtable_hash_ptr, __Py_hashtable_new, - __Py_hashtable_new_full, __Py_hashtable_set, __Py_hashtable_size, - __Py_hashtable_steal, __Py_isabs, __Py_open, __Py_open_noraise, - __Py_parse_inf_or_nan, __Py_path_config, __Py_read, __Py_set_blocking, - __Py_set_inheritable, __Py_set_inheritable_async_safe, __Py_stat, - __Py_str_to_int, __Py_strhex, __Py_strhex_bytes, __Py_strhex_bytes_with_sep, - __Py_strhex_with_sep, __Py_string_to_number_with_underscores, - __Py_tracemalloc_config, __Py_wfopen, __Py_wgetcwd, __Py_wreadlink, - __Py_wrealpath, __Py_write, __Py_write_noraise ] -... diff --git a/makefile b/makefile index a0ec24b..d65daf0 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,3 @@ - include ../../allmake.mak #---------------------------------------------------------------------- @@ -18,8 +17,8 @@ include ../../allmake.mak #---------------------------------------------------------------------- # default goals -.PHONY: configs modules pyfiles deployed_modules idapython_modules api_check api_contents pyqt sip bins public_tree test_idc docs tbd examples_index test_pywraps -all: configs modules pyfiles deployed_modules idapython_modules api_check api_contents pyqt sip bins examples_index test_pywraps # public_tree test_idc docs +.PHONY: configs modules pyfiles deployed_modules idapython_modules api_check api_contents qt_bindings bins public_tree test_idc docs docs_md tbd examples examples_index test_pywraps +all: configs modules pyfiles deployed_modules idapython_modules api_check api_contents qt_bindings bins examples examples_index test_pywraps # public_tree test_idc docs docs_md ifeq ($(OUT_OF_TREE_BUILD),) IDAPYSWITCH:=$(R)idapyswitch$(B) @@ -96,41 +95,17 @@ CONFIGS += idapython.cfg #---------------------------------------------------------------------- # the 'modules' target is in $(IDA)module.mak ifdef __EA64__ - MODULE_NAME_STEM:=idapython3_ -else MODULE_NAME_STEM:=idapython3 +else + MODULE_NAME_STEM:=idapython3_ endif MODULE = $(call module_dll,$(MODULE_NAME_STEM)) 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. - IDAPYSWITCH_MODULE_DEP := $(IDAPYSWITCH_DEP) - ifndef __CODE_CHECKER__ - # this is for idapython[64].so - POSTACTION=$(Q)$(IDAPYSWITCH_PATH) --split-debug-and-expand-libpython3-dtneeded-room $(MODULE) - # and this for _ida_*.so - POSTACTION_IDA_X_SO=$(Q)$(IDAPYSWITCH_PATH) --split-debug-and-expand-libpython3-dtneeded-room - endif - endif -endif - -#---------------------------------------------------------------------- -ifdef __MAC__ - # use a stub .tbd library to link against, see tbd.md - TBD_FILE = libpython$(PYTHON_VERSION_MAJOR).tbd - # note: this path must be compatible with -L$(R) -lpython3 in pyplg.mak - TBD_MODULE_DEP = $(R)$(TBD_FILE) - # idapyswitch must be told that we're working with Python2 +ifdef __LINUX__ + # we don't link to libpython anymore so allow to have undefined symbols + NO_UNDEFS= endif #---------------------------------------------------------------------- @@ -148,17 +123,18 @@ include ../pyplg.mak #---------------------------------------------------------------------- PYTHON_OBJS += $(F)idapython$(O) $(MODULE): MODULE_OBJS += $(PYTHON_OBJS) -$(MODULE): $(PYTHON_OBJS) $(IDAPYSWITCH_MODULE_DEP) $(TBD_MODULE_DEP) +$(MODULE): $(PYTHON_OBJS) $(IDAPYSWITCH_MODULE_DEP) ifdef __NT__ - $(MODULE): OUTDLL = /DLL /NOEXP + $(MODULE): OUTDLL = /DLL $(MODULE): LDFLAGS += /DEF:$(IDAPYTHON_IMPLIB_DEF) /IMPLIB:$(IDAPYTHON_IMPLIB_PATH) endif # TODO these should apply only to $(MODULE) DEFFILE = idapython.script -INSTALL_NAME = @executable_path/plugins/$(notdir $(MODULE)) +INSTALL_NAME = @rpath/plugins/$(notdir $(MODULE)) ifdef __LINUX__ - LDFLAGS += -Wl,-soname,$(notdir $(MODULE)) + LDFLAGS_MOD = -Wl,-soname,$(notdir $(MODULE)) + LDFLAGS_EXE = -lpython$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) -Wl,--no-undefined endif PATCH_CONST=$(Q)$(PYTHON) tools/patch_constants.py -i $(1) -o $(2) @@ -194,7 +170,7 @@ ifeq ($(OUT_OF_TREE_BUILD),) endif # output directory for python scripts -DEPLOY_PYDIR=$(R)python/$(PYTHON_VERSION_MAJOR) +DEPLOY_PYDIR=$(R)python DEPLOY_INIT_PY=$(DEPLOY_PYDIR)/init.py DEPLOY_IDC_PY=$(DEPLOY_PYDIR)/idc.py DEPLOY_IDAUTILS_PY=$(DEPLOY_PYDIR)/idautils.py @@ -211,9 +187,17 @@ else endif ifeq ($(OUT_OF_TREE_BUILD),) - IDAT_CMD=TVHEADLESS=1 "$(IDAT_PATH)$(SUFF64)" + IDAT_CMD=TVHEADLESS=1 "$(IDAT_PATH)$(SUFF32)" else - IDAT_CMD=TVHEADLESS=1 IDAPYTHON_DYNLOAD_BASE=$(R) "$(IDAT_PATH)$(SUFF64)" + IDAT_CMD=TVHEADLESS=1 IDAPYTHON_DYNLOAD_BASE=$(R) "$(IDAT_PATH)$(SUFF32)" +endif + +ifeq ($(LOCAL_LICENSE),1) + IDAT_CMD := $(IDAT_CMD) -Olicense:keyfile +endif + +ifdef LOG_FILE + IDAT_CMD := $(IDAT_CMD) -L$(LOG_FILE) endif # envvar HAS_HEXRAYS must have been set by build.py if needed @@ -234,12 +218,11 @@ else endif ST_SDK_TARGETS = $(SDK_SOURCES:$(IDA_INCLUDE)/%=$(ST_SDK)/%) -_SWIGPY3FLAG := -py3 -py3-stable-abi -DPY3=1 +_SWIGPY3FLAG := -DPY3=1 CC_DEFS += PY3=1 CC_DEFS += Py_LIMITED_API=0x03040000 # we should make sure we use the same version as SWiG -DYNLOAD_SUBDIR := python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) -DEPLOY_LIBDIR=$(DEPLOY_PYDIR)/ida_$(ADRSIZE) +DEPLOY_LIBDIR=$(DEPLOY_PYDIR)/lib-dynload ifdef __NT__ PYDLL_EXT = .pyd @@ -269,7 +252,6 @@ MODULES_NAMES += dbg MODULES_NAMES += diskio MODULES_NAMES += dirtree MODULES_NAMES += entry -MODULES_NAMES += enum MODULES_NAMES += expr MODULES_NAMES += fixup MODULES_NAMES += fpro @@ -284,6 +266,7 @@ MODULES_NAMES += idd MODULES_NAMES += idp MODULES_NAMES += ieee MODULES_NAMES += kernwin +MODULES_NAMES += libfuncs MODULES_NAMES += lines MODULES_NAMES += loader ifdef TESTABLE_BUILD @@ -304,15 +287,13 @@ MODULES_NAMES += segment MODULES_NAMES += segregs MODULES_NAMES += srclang MODULES_NAMES += strlist -MODULES_NAMES += struct MODULES_NAMES += tryblks MODULES_NAMES += typeinf MODULES_NAMES += ua MODULES_NAMES += xref -ifndef NOTEAMS - MODULES_NAMES += mergemod - MODULES_NAMES += merge -endif +MODULES_NAMES += mergemod +MODULES_NAMES += merge +MODULES_NAMES += undo ALL_ST_WRAP_CPP = $(foreach mod,$(MODULES_NAMES),$(ST_WRAP)/$(mod).cpp) ALL_ST_WRAP_PY = $(foreach mod,$(MODULES_NAMES),$(ST_WRAP)/ida_$(mod).py) @@ -335,12 +316,13 @@ endif ifdef __NT__ # os and compiler specific flags _SWIGFLAGS = -D__NT__ -DWIN32 -D_USRDLL -I"$(PYTHON_ROOT)/include" - CFLAGS += /bigobj $(_SWIGFLAGS) -I$(ST_SDK) /U_DEBUG + CFLAGS += /bigobj $(_SWIGFLAGS) -I$(ST_SDK) else # unix/mac ifdef __LINUX__ PYTHON_LDFLAGS_RPATH_MODULE=-Wl,-rpath='$$ORIGIN/../../..' _SWIGFLAGS = -D__LINUX__ else ifdef __MAC__ + PYTHON_LDFLAGS_RPATH_MODULE=-Wl,-rpath,@loader_path/../../.. _SWIGFLAGS = -D__MAC__ endif endif @@ -352,9 +334,6 @@ endif # types will not interfere or clash with the types in your module. DEF_TYPE_TABLE = SWIG_TYPE_TABLE=idaapi SWIGFLAGS=$(_SWIGFLAGS) -Itools/typemaps-supplement $(SWIG_INCLUDES) $(addprefix -D,$(DEF_TYPE_TABLE)) -DMISSED_BC695 -ifdef NOTEAMS - SWIGFLAGS += -DNOTEAMS -endif pyfiles: $(DEPLOY_IDAUTILS_PY) \ $(DEPLOY_IDC_PY) \ @@ -369,14 +348,14 @@ ifeq ($(OUT_OF_TREE_BUILD),) else SRC_PYQT_BUNDLE:=$(PYQT5_RELEASE) endif - DEST_PYQT_DIR:=$(R)python/$(PYTHON_VERSION_MAJOR)/PyQt5 + DEST_PYQT_DIR:=$(R)python/PyQt5 $(DEST_PYQT_DIR): -$(Q)if [ ! -d "$(DEST_PYQT_DIR)" ] ; then mkdir -p 2>/dev/null $(DEST_PYQT_DIR) ; fi # PyQt5 DEST_PYQT_QTCORE:=$(DEST_PYQT_DIR)/QtCore$(PYDLL_EXT) $(DEST_PYQT_QTCORE): $(SRC_PYQT_BUNDLE) | $(DEST_PYQT_DIR) - $(Q)tar -xf $(SRC_PYQT_BUNDLE) -C $(dir $(DEST_PYQT_DIR)) --strip 1 + $(Q)$(TAR) -xf $(SRC_PYQT_BUNDLE) -C $(dir $(DEST_PYQT_DIR)) --strip 1 $(Q)touch $@ DEST_PYQT += $(DEST_PYQT_QTCORE) @@ -407,7 +386,7 @@ ifeq ($(OUT_OF_TREE_BUILD),) $(Q)$(CP) $? $@ DEST_SIP += $(DEST_SIP38_PYDLL) $(DEST_SIP38_PYI) - # sip for Python [3.9, 3.10) + # sip for Python 3.9 DEST_SIP39_DIR:=$(DEST_PYQT_DIR)/python_3.9 $(DEST_SIP39_DIR): -$(Q)if [ ! -d "$(DEST_SIP39_DIR)" ] ; then mkdir -p 2>/dev/null $(DEST_SIP39_DIR) ; fi @@ -419,7 +398,7 @@ ifeq ($(OUT_OF_TREE_BUILD),) $(Q)$(CP) $? $@ DEST_SIP += $(DEST_SIP39_PYDLL) $(DEST_SIP39_PYI) - # sip for Python [3.10, 3.11) + # sip for Python 3.10 DEST_SIP310_DIR:=$(DEST_PYQT_DIR)/python_3.10 $(DEST_SIP310_DIR): -$(Q)if [ ! -d "$(DEST_SIP310_DIR)" ] ; then mkdir -p 2>/dev/null $(DEST_SIP310_DIR) ; fi @@ -431,7 +410,7 @@ ifeq ($(OUT_OF_TREE_BUILD),) $(Q)$(CP) $? $@ DEST_SIP += $(DEST_SIP310_PYDLL) $(DEST_SIP310_PYI) - # sip for Python [3.11, 3.12) + # sip for Python 3.11 DEST_SIP311_DIR:=$(DEST_PYQT_DIR)/python_3.11 $(DEST_SIP311_DIR): -$(Q)if [ ! -d "$(DEST_SIP311_DIR)" ] ; then mkdir -p 2>/dev/null $(DEST_SIP311_DIR) ; fi @@ -443,7 +422,7 @@ ifeq ($(OUT_OF_TREE_BUILD),) $(Q)$(CP) $? $@ DEST_SIP += $(DEST_SIP311_PYDLL) $(DEST_SIP311_PYI) - # sip for Python [3.12, ... + # sip for Python 3.12 DEST_SIP312_DIR:=$(DEST_PYQT_DIR)/python_3.12 $(DEST_SIP312_DIR): -$(Q)if [ ! -d "$(DEST_SIP312_DIR)" ] ; then mkdir -p 2>/dev/null $(DEST_SIP312_DIR) ; fi @@ -455,41 +434,107 @@ ifeq ($(OUT_OF_TREE_BUILD),) $(Q)$(CP) $? $@ DEST_SIP += $(DEST_SIP312_PYDLL) $(DEST_SIP312_PYI) - # And pick the right sip.so now (Python3 only; for Python2, we already put it in the right place) - ifeq ($(shell test $(PYTHON_VERSION_MINOR) -gt 11; echo $$?),0) # ugh - DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP312_PYDLL) - else - ifeq ($(shell test $(PYTHON_VERSION_MINOR) -gt 10; echo $$?),0) # ugh - DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP311_PYDLL) - else - ifeq ($(shell test $(PYTHON_VERSION_MINOR) -gt 9; echo $$?),0) # ugh - DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP310_PYDLL) - else - ifeq ($(shell test $(PYTHON_VERSION_MINOR) -gt 8; echo $$?),0) # ugh - DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP39_PYDLL) - else - ifeq ($(shell test $(PYTHON_VERSION_MINOR) -gt 7; echo $$?),0) # ugh - DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP38_PYDLL) - else - DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP34_PYDLL) - endif - endif - endif + # sip for Python 3.13 + DEST_SIP313_DIR:=$(DEST_PYQT_DIR)/python_3.13 + $(DEST_SIP313_DIR): + -$(Q)if [ ! -d "$(DEST_SIP313_DIR)" ] ; then mkdir -p 2>/dev/null $(DEST_SIP313_DIR) ; fi + DEST_SIP313_PYDLL:=$(DEST_SIP313_DIR)/$(SIP_PYDLL_FNAME) + DEST_SIP313_PYI:=$(DEST_SIP313_DIR)/$(SIP_PYI_FNAME) + $(DEST_SIP313_PYDLL): $(wildcard $(SIP313_TREE)/lib/python*/PyQt5/$(SIP_PYDLL_FNAME)) | $(DEST_SIP313_DIR) + $(Q)$(CP) $? $@ + $(DEST_SIP313_PYI): $(wildcard $(SIP313_TREE)/lib/python*/PyQt5/$(SIP_PYI_FNAME)) | $(DEST_SIP313_DIR) + $(Q)$(CP) $? $@ + DEST_SIP += $(DEST_SIP313_PYDLL) $(DEST_SIP313_PYI) + + ifdef __LINUX__ + ifdef __APPLE_SILICON__ + DEST_SIP = $(DEST_SIP313_PYDLL) $(DEST_SIP313_PYI) endif endif - $(DEST_PYQT_DIR)/$(SIP_PYDLL_FNAME): $(DEST_INSTALL_SIP_PYDLL) - $(Q)$(CP) $? $@ - $(Q)chmod +w $@ - DEST_SIP += $(DEST_PYQT_DIR)/$(SIP_PYDLL_FNAME) + + DEST_PYQT5_SHIMS += $(DEST_PYQT_DIR)/__init__.py + DEST_PYQT5_SHIMS += $(DEST_PYQT_DIR)/sip.py + DEST_PYQT5_SHIMS += $(DEST_PYQT_DIR)/QtCore.py + DEST_PYQT5_SHIMS += $(DEST_PYQT_DIR)/QtGui.py + DEST_PYQT5_SHIMS += $(DEST_PYQT_DIR)/QtWidgets.py + + + # + # PySide6 + # + # For PySide6, we'll be producing the following tree structure, + # for every Python version we support: + # + # python/PySide6-python3.13/ + # ├── libpyside6.abi3.so.6.8 + # ├── libshiboken6.abi3.so.6.8 + # └── python3.13 + # └── site-packages + # ├── PySide6 + # │   ├── __init__.py + # │   ├── QtCore.abi3.so + # │   ├── QtCore.pyi + # │   ├── QtGui.abi3.so + # │   ├── QtGui.pyi + # │   ├── QtWidgets.abi3.so + # │   └── QtWidgets.pyi + # └── shiboken6 + # ├── __init__.py + # ├── Shiboken.abi3.so + # └── Shiboken.pyi + # + define make-pyside6-rules + + DEST_PYSIDE6_DEPS += $(2)/libpyside6.abi3.so.6.8 + DEST_PYSIDE6_DEPS += $(2)/libshiboken6.abi3.so.6.8 + DEST_PYSIDE6_DEPS += $(2)/python3.$(1)/site-packages/shiboken6/__init__.py + DEST_PYSIDE6_DEPS += $(2)/python3.$(1)/site-packages/shiboken6/Shiboken.abi3.so + DEST_PYSIDE6_DEPS += $(2)/python3.$(1)/site-packages/shiboken6/Shiboken.pyi + DEST_PYSIDE6_DEPS += $(2)/python3.$(1)/site-packages/PySide6/__init__.py + DEST_PYSIDE6_DEPS += $(2)/python3.$(1)/site-packages/PySide6/QtCore.abi3.so + DEST_PYSIDE6_DEPS += $(2)/python3.$(1)/site-packages/PySide6/QtCore.pyi + DEST_PYSIDE6_DEPS += $(2)/python3.$(1)/site-packages/PySide6/QtGui.abi3.so + DEST_PYSIDE6_DEPS += $(2)/python3.$(1)/site-packages/PySide6/QtGui.pyi + DEST_PYSIDE6_DEPS += $(2)/python3.$(1)/site-packages/PySide6/QtWidgets.abi3.so + DEST_PYSIDE6_DEPS += $(2)/python3.$(1)/site-packages/PySide6/QtWidgets.pyi + + DEST_PYSIDE6_PYTHON3$(1)_DIRS += $(2)/python3.$(1)/site-packages/PySide6 + DEST_PYSIDE6_PYTHON3$(1)_DIRS += $(2)/python3.$(1)/site-packages/shiboken6 + + $(2)/python3.$(1)/site-packages/PySide6: + -$(Q)if [ ! -d "$$@" ] ; then mkdir -p 2>/dev/null $$@ ; fi + $(2)/python3.$(1)/site-packages/shiboken6: + -$(Q)if [ ! -d "$$@" ] ; then mkdir -p 2>/dev/null $$@ ; fi + + $(2)/libpyside6.abi3.so.6.8: $(3)/libpyside6.abi3.so.6.8.0 | $$(DEST_PYSIDE6_PYTHON3$(1)_DIRS) + $(Q)$(CP) $$? $$@ + $(2)/libshiboken6.abi3.so.6.8: $(3)/libshiboken6.abi3.so.6.8.0 | $$(DEST_PYSIDE6_PYTHON3$(1)_DIRS) + $(Q)$(CP) $$? $$@ + $(2)/python3.13/site-packages/shiboken6/%: $(3)/python3.$(1)/site-packages/shiboken6/% | $$(DEST_PYSIDE6_PYTHON3$(1)_DIRS) + $(Q)$(CP) $$? $$@ + $(2)/python3.13/site-packages/PySide6/%: $(3)/python3.$(1)/site-packages/PySide6/% | $$(DEST_PYSIDE6_PYTHON3$(1)_DIRS) + $(Q)$(CP) $$? $$@ + endef + + $(eval $(call make-pyside6-rules,13,$(R)python/PySide6-python3.13,$(PYSIDE6_DIR)/PySide6-python3.13)) + endif -pyqt: $(DEST_PYQT) -sip: $(DEST_SIP) +ifeq ($(QT_VERSION_MAJOR),6) + QT_BINDINGS_DEPS += $(DEST_PYQT5_SHIMS) $(DEST_PYSIDE6_DEPS) + $(DEST_PYQT_DIR)/%: PyQt5-shims/% | $(DEST_PYQT_DIR) + $(CP) $? $@ +else + QT_BINDINGS_DEPS += $(DEST_PYQT) + QT_BINDINGS_DEPS += $(DEST_SIP) +endif + +qt_bindings: $(QT_BINDINGS_DEPS) GENHOOKS=tools/genhooks/ -$(DEPLOY_INIT_PY): python/init.py - $(CP) $? $@ +$(DEPLOY_INIT_PY): python/init.py tools/genidaapi.py $(IDAPYTHON_MODULES) + $(QGENIDAAPI)$(PYTHON) tools/genidaapi.py -i $< -o $@ -m $(subst $(space),$(comma),$(MODULES_NAMES)) $(DEPLOY_IDC_PY): python/idc.py $(CP) $? $@ @@ -643,13 +688,12 @@ CC_DEFS += MISSED_BC695 CC_DEFS += $(DEF_TYPE_TABLE) CC_DEFS += $(WITH_HEXRAYS_DEF) CC_DEFS += USE_STANDARD_FILE_FUNCTIONS -CC_DEFS += VER_MAJOR=$(IDAVER_MAJOR) -CC_DEFS += VER_MINOR=$(IDAVER_MINOR) -CC_DEFS += VER_PATCH="0" +CC_DEFS += IDAVER_MAJOR=$(IDAVER_MAJOR) +CC_DEFS += IDAVER_MINOR=$(IDAVER_MINOR) +CC_DEFS += IDAVER_PATCH=$(IDAVER_PATCH) CC_DEFS += __EXPR_SRC CC_INCP += $(F) CC_INCP += $(ST_SWIG) -CC_INCP += ../../ldr/mach-o/h CC_INCP += . ifdef __UNIX__ @@ -690,7 +734,6 @@ ifdef __NT__ endif find-pywraps-deps = $(wildcard pywraps/py_$(subst .i,,$(notdir $(1)))*.hpp) $(wildcard pywraps/py_$(subst .i,,$(notdir $(1)))*.py) -find-pydoc-patches-deps = $(wildcard tools/inject_pydoc/$(1).py) find-patch-codegen-deps = $(wildcard tools/patch_codegen/*$(1)*.py) # Some .i files depend on some other .i files in order to be parseable by SWiG @@ -733,17 +776,16 @@ define make-module-rules $(Q)$(CP) $$< $$@ # obj/x86_linux_gcc/wrappers/ida_X.py.final (note: dep. on .cpp. See note above.) - $(ST_WRAP)/ida_$(1).py.final: $(ST_WRAP)/$(1).cpp tools/inject_pydoc.py $(PARSED_HEADERS_MARKER) $(call find-pydoc-patches-deps,$(1)) $(call find-patch-codegen-deps,$(1)) - $(QINJECT_PYDOC)$(PYTHON) tools/inject_pydoc.py \ - --xml-doc-directory $(ST_PARSED_HEADERS) \ - --module $(1) \ + $(ST_WRAP)/ida_$(1).py.final: $(ST_WRAP)/$(1).cpp $(wildcard tools/pypasses/*.py) $(wildcard tools/pypasses/*/*.py) $(wildcard apidoc/ida_$(1).py) $(PARSED_HEADERS_MARKER) $(call find-patch-codegen-deps,$(1)) + $(QINJECT_PYDOC)$(PYTHON) tools/pypasses.py \ --input $(ST_WRAP)/ida_$(1).py \ - --interface $(ST_SWIG)/$(1).i \ + --idapython-module-name ida_$(1) \ + --doxygen-xml $(ST_PARSED_HEADERS) \ --cpp-wrapper $(ST_WRAP)/$(1).cpp \ - --traces tools/collected_traces.txt \ - --cases tools/inject_pydoc_cases.txt \ + --passes inject_doxygen,return_type_from_cpp_wrapper,pydoc_overrides,proto_overrides,argsify_for_dispatching_cpp,proto_fix_known_types \ + --pydoc-overrides apidoc/ida_$(1).py \ --output $$@ \ - --verbose > $(ST_WRAP)/ida_$(1).pydoc_injection + --debug > $(ST_WRAP)/ida_$(1).pydoc_injection # obj/x86_linux_gcc/swig/X.i $(ST_SWIG)/$(1).i: $(addprefix $(F),$(call find-pywraps-deps,$(1))) swig/$(1).i $(ST_SWIG_HEADER) $(SWIG_IFACE_$(1):%=$(ST_SWIG)/%.i) $(ST_SWIG_HEADER) tools/deploy.py $(PARSED_HEADERS_MARKER) @@ -765,7 +807,7 @@ define make-module-rules # 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) \ + -D__GNUC__ -DSWIG_PYTHON_LEGACY_BOOL=1 $(SWIGFLAGS) $(addprefix -D,$(EASIZE_DEF)) -I$(ST_SWIG) \ -outdir $(ST_WRAP) -o $$@.in1 -oh $(ST_WRAP)/$(1).h -I$(ST_SDK) -DIDAPYTHON_MODULE_$(1)=1 $$< $(call PATCH_CONST,$(ST_WRAP)/$(1).cpp.in1,$(ST_WRAP)/$(1).cpp.in2) $(QPATCH_CODEGEN)$(PYTHON) tools/patch_codegen.py \ @@ -799,11 +841,16 @@ X_O = $(call objs,$(MODULES_NAMES)) vpath %.cpp $(ST_WRAP) ifdef __NT__ # remove warnings from generated code: + # warning C4100: '': unreferenced formal parameter # error C4296: '<': expression is always false # warning C4647: behavior change: __is_pod(type) has different value in previous versions # warning C4700: uninitialized local variable 'c_result' used # warning C4706: assignment within conditional expression - $(X_O): CFLAGS += /wd4296 /wd4647 /wd4700 /wd4706 + $(X_O): CFLAGS += /wd4100 /wd4296 /wd4647 /wd4700 /wd4706 +ifndef NDEBUG + # Use debug wrappers with the Python release dll + $(X_O): CC_DEFS += SWIG_PYTHON_INTERPRETER_NO_DEBUG +endif endif # disable -fno-rtti $(X_O): pywraps.hpp @@ -830,7 +877,7 @@ endif # See Python's dynload_win.c:GetPythonImport() for more details. $(_IDA_X_SO): STDLIBS += $(LINKIDAPYTHON) $(_IDA_X_SO): LDFLAGS += $(PYTHON_LDFLAGS) $(PYTHON_LDFLAGS_RPATH_MODULE) $(OUTMAP)$(F)$(@F).map -$(F)_ida_%$(PYDLL_EXT): $(F)%$(O) $(MODULE) $(IDAPYTHON_IMPLIB_DEF) $(IDAPYSWITCH_MODULE_DEP) $(TBD_MODULE_DEP) +$(F)_ida_%$(PYDLL_EXT): $(F)%$(O) $(MODULE) $(IDAPYTHON_IMPLIB_DEF) $(IDAPYSWITCH_MODULE_DEP) $(call link_dll, $<, $(LINKIDA)) ifdef __NT__ $(Q)$(RM) $(@:$(PYDLL_EXT)=.exp) $(@:$(PYDLL_EXT)=.lib) @@ -840,44 +887,58 @@ endif $(DEPLOY_LIBDIR)/_ida_%$(PYDLL_EXT): $(F)_ida_%$(PYDLL_EXT) $(Q)$(CP) $< $@ ifdef __LINUX__ - ifndef __CODE_CHECKER__ + ifneq (,$(POSTACTION_IDA_X_SO)) $(Q)$(POSTACTION_IDA_X_SO) $@ endif endif #---------------------------------------------------------------------- -ifdef TESTABLE_BUILD - API_CONTENTS = api_contents$(EXTRASUF1).brief -else - API_CONTENTS = api_contents$(EXTRASUF1).full - API_CONTENTS_OPTS := --dump-doc -endif -ST_API_CONTENTS = $(F)$(API_CONTENTS) -ST_API_CONTENTS_SUCCESS = $(ST_API_CONTENTS).success -.PRECIOUS: $(ST_API_CONTENTS) -api_contents: $(ST_API_CONTENTS_SUCCESS) -ifeq ($(or $(__CODE_CHECKER__),$(NO_CMP_API),$(__ASAN__),$(IDAHOME),$(DEMO_OR_FREE)),) -$(ST_API_CONTENTS_SUCCESS): $(ALL_ST_WRAP_PY_FINAL) $(API_CONTENTS) tools/py_scanner.py - $(QDUMPAPI)$(PYTHON) tools/py_scanner.py --dump-kind $(API_CONTENTS_OPTS) --paths $(subst $(space),$(comma),$(ALL_ST_WRAP_PY_FINAL)) > $(ST_API_CONTENTS) - ifeq ($(OUT_OF_TREE_BUILD),) - $(Q)((diff -w $(API_CONTENTS) $(ST_API_CONTENTS)) > /dev/null && touch $@) || \ - (echo "API CONTENTS CHANGED! update $(API_CONTENTS) or fix the API" && \ - echo "(New API: $(ST_API_CONTENTS)) ***" && \ - (diff -U 1 -w $(API_CONTENTS) $(ST_API_CONTENTS); true)) - else - $(Q)touch $@ - endif +API_CONTENTS_BRIEF = api_contents$(EXTRASUF1).brief +API_CONTENTS_FULL = api_contents$(EXTRASUF1).full + +ST_API_CONTENTS_BRIEF = $(F)$(API_CONTENTS_BRIEF) +ST_API_CONTENTS_FULL = $(F)$(API_CONTENTS_FULL) +ST_API_CONTENTS_BRIEF_SUCCESS = $(ST_API_CONTENTS_BRIEF).success +ST_API_CONTENTS_FULL_SUCCESS = $(ST_API_CONTENTS_FULL).success + +.PRECIOUS: $(ST_API_CONTENTS_BRIEF) $(ST_API_CONTENTS_FULL) + +ifdef TESTABLE_BUILD + DEFAULT_API_CONTENTS = $(API_CONTENTS_BRIEF) else -$(ST_API_CONTENTS_SUCCESS): $(ALL_ST_WRAP_PY_FINAL) tools/py_scanner.py - $(Q)touch $@ + DEFAULT_API_CONTENTS = $(API_CONTENTS_FULL) endif +api_contents: $(DEFAULT_API_CONTENTS) + +define make-api-contents-rule + $(1): $(3) + ifeq ($(or $(__CODE_CHECKER__),$(NO_CMP_API),$(__ASAN__),$(IDAHOME),$(IDACLASS),$(IDAFREE)),) + $(3): $(ALL_ST_WRAP_PY_FINAL) tools/py_scanner.py + $(QDUMPAPI)$(PYTHON) tools/py_scanner.py $(4) --paths $(subst $(space),$(comma),$(ALL_ST_WRAP_PY_FINAL)) > $(2) + ifeq ($(OUT_OF_TREE_BUILD),) + $(Q)((diff -w $(1) $(2)) > /dev/null && touch $$@) || \ + (echo "API CONTENTS CHANGED! update $(1) or fix the API" && \ + echo "(New API: $(2)) ***" && \ + (diff -U 1 -w $(1) $(2); true)) + else + $(Q)touch $$@ + endif + else + $(3): $(ALL_ST_WRAP_PY_FINAL) tools/py_scanner.py + $(Q)touch $$@ + endif +endef + +$(eval $(call make-api-contents-rule,$(API_CONTENTS_BRIEF),$(ST_API_CONTENTS_BRIEF),$(ST_API_CONTENTS_BRIEF_SUCCESS),)) +$(eval $(call make-api-contents-rule,$(API_CONTENTS_FULL),$(ST_API_CONTENTS_FULL),$(ST_API_CONTENTS_FULL_SUCCESS),--dump-doc)) + #------------------------------------------------------------------------- ST_API_CHECK_SUCCESS := $(F)api_check.success api_check: $(ST_API_CHECK_SUCCESS) $(ST_API_CHECK_SUCCESS): $(ALL_ST_WRAP_CPP) -ifeq ($(or $(__CODE_CHECKER__),$(NO_CMP_API),$(__ASAN__),$(IDAHOME),$(DEMO_OR_FREE)),) +ifeq ($(or $(__CODE_CHECKER__),$(NO_CMP_API),$(__ASAN__),$(IDAHOME),$(IDACLASS),$(IDAFREE)),) $(QCHKAPI)$(PYTHON) tools/chkapi.py $(WITH_HEXRAYS_CHKAPI) -i $(subst $(space),$(comma),$(ALL_ST_WRAP_CPP)) -p $(subst $(space),$(comma),$(ALL_ST_WRAP_PY)) endif $(Q)touch $@ @@ -889,19 +950,42 @@ else endif #---------------------------------------------------------------------- +DOCS_DEPS=tools/docs/hrdoc.py tools/docs/hrdoc.css DOCS_MODULES=$(foreach mod,$(MODULES_NAMES),ida_$(mod)) SORTED_DOCS_MODULES=$(sort $(DOCS_MODULES)) -docs: tools/docs/hrdoc.py tools/docs/hrdoc.css +DOC_OUT_HTML?=docs/hr-html +DOC_OUT_MD?=docs/hr-md +docs_html: $(DOCS_DEPS) ifndef __NT__ - $(IDAT_CMD) $(BATCH_SWITCH) -S"tools/docs/hrdoc.py -o docs/hr-html -m $(subst $(space),$(comma),$(SORTED_DOCS_MODULES)),idc,idautils -s idc,idautils -x ida_allins" -t > /dev/null -# $(IDAT_CMD) $(BATCH_SWITCH) -S"tools/docs/hrdoc.py -o docs/hr-html -m ida_pro,ida_kernwin -s idc,idautils -x ida_allins" -t > /dev/null # use this one for testing (faster) + $(IDAT_CMD) $(BATCH_SWITCH) -S"tools/docs/hrdoc.py -o $(DOC_OUT_HTML) -m $(subst $(space),$(comma),$(SORTED_DOCS_MODULES)),idc,idautils -s idc,idautils -x ida_allins" -t > /dev/null +else + $(R)ida -S"tools/docs/hrdoc.py -o $(DOC_OUT_HTML) -m $(subst $(space),$(comma),$(SORTED_DOCS_MODULES)),idc,idautils -s idc,idautils -x ida_allins" -t +endif + +docs_md: $(DOCS_DEPS) +ifndef __NT__ + $(IDAT_CMD) $(BATCH_SWITCH) -S"tools/docs/hrdoc.py -o $(DOC_OUT_MD) -M -m $(subst $(space),$(comma),$(SORTED_DOCS_MODULES)),idc,idautils -s idc,idautils -x ida_allins" -t > /dev/null else $(R)ida -Stools/docs/hrdoc.py -t endif +docs: docs_html docs_md + @echo "copy MARKDOWN files from docs/hr-md ../../../../www/www.hex-rays.com/public_html/hex-rays/cgi-bin/themer/static/products/ida/support/idapython_docs_md/" + @echo "copy HTML files from docs/hr-html ../../../../www/www.hex-rays.com/public_html/hex-rays/cgi-bin/themer/static/products/ida/support/idapython_docs/" + @echo "" + @read -p "Do you want to copy files to P4 repo? [y/N] " ans && ans=$${ans:-N} ; \ + if [ $${ans} = y ] || [ $${ans} = Y ]; then \ + echo "Starting to copy html & md files" ; \ + ./copy_docs_to_p4.sh MARKDOWN docs/hr-md ../../../www/www.hex-rays.com/public_html/hex-rays/cgi-bin/themer/static/products/ida/support/idapython_docs_md/; \ + ./copy_docs_to_p4.sh HTML docs/hr-html ../../../www/www.hex-rays.com/public_html/hex-rays/cgi-bin/themer/static/products/ida/support/idapython_docs/; \ + else \ + echo "NO file copied" ; \ + fi + + @echo "\033[0;32mFiles prepared in P4, you need to manually submit them\033[0m" # the demo version of ida does not have the -B command line option ifeq ($(OUT_OF_TREE_BUILD),) - ifndef DEMO_OR_FREE + ifndef IDAFREE BATCH_SWITCH=-B endif endif @@ -947,7 +1031,7 @@ ifdef __NT__ endif endif endif -$(R)idapyswitch$(B): $(call dumb_target, pro, $(IDAPYSWITCH_OBJS)) +$(R)idapyswitch$(B): $(QT_BINDINGS_DEPS) $(call dumb_target, pro compress, $(IDAPYSWITCH_OBJS)) #---------------------------------------------------------------------- TEST_PYWRAPS_OBJS += $(F)test_pywraps$(O) @@ -959,7 +1043,11 @@ ifdef __NT__ $(F)test_pywraps$(O): RUNTIME_LIBSW=/MT endif endif -$(R)test_pywraps$(B): $(call dumb_target, json idc unicode pro, $(TEST_PYWRAPS_OBJS)) $(PYTHON_LDFLAGS) + +ifdef __MAC__ +LDFLAGS_EXE += -Wl,-rpath,@executable_path +endif +$(R)test_pywraps$(B): $(call dumb_target, json idc unicode pro, $(TEST_PYWRAPS_OBJS)) $(PYTHON_LDFLAGS) $(LDFLAGS_EXE) $(F)$(TEST_PYWRAPS_RESULT_FNAME).marker: $(R)test_pywraps$(B) $(Q)$(TEST_PYWRAPS_ENV) $(R)test_pywraps$(B) > $(F)$(TEST_PYWRAPS_RESULT_FNAME) @@ -977,17 +1065,6 @@ else test_pywraps: $(TEST_PYWRAPS) endif -#---------------------------------------------------------------------- -ifdef __MAC__ -tbd: $(TBD_MODULE_DEP) -# copy the tbd library to idabin, and instruct idapyswitch to create the symlink to libpython -$(TBD_MODULE_DEP): $(TBD_FILE) $(IDAPYSWITCH_DEP) - $(Q)$(CP) $< $@ - cd $(R) && $(IDAPYSWITCH_PATH) $(TBD_IDAPYSWITCH_ARGS) --force-path $(shell $(PYTHON)-config --prefix)/Python -else -tbd: ; -endif - #---------------------------------------------------------------------- # the 'echo_modules' target must be called explicitly # Note: used by ida/build/pkgbin.py @@ -1000,48 +1077,52 @@ clean:: ifdef __CODE_CHECKER__ examples_index: ; + examples: ; else - EXAMPLES := $(wildcard examples/**/*.py) + EXAMPLES := $(wildcard examples/*/*.py examples/*/*/*.py examples/*/*/*/*.py) GEN_EXAMPLES_TOOL := tools/gen_examples_index.py GEN_EXAMPLES_CFG := tools/gen_examples_index.cfg - ST_EXAMPLES_INDEX_HTML := $(F)examples/index.html - ST_EXAMPLES_INDEX_MD := $(F)examples/index.md + EXAMPLES_INDEX_MD := examples/index.md + EXAMPLES_README := examples/README.md + + ST_EXAMPLES_INDEX_MD = $(F)$(EXAMPLES_INDEX_MD) + ST_EXAMPLES_INDEX_MD_SUCCESS = $(ST_EXAMPLES_INDEX_MD).success + + .PRECIOUS: $(ST_EXAMPLES_INDEX_MD) define make-examples-index-rules - $(eval EXAMPLES_INDEX := examples/index.$(1)) - $(eval ST_EXAMPLES_INDEX := $(2)) - $(eval EXAMPLES_TEMPLATE := tools/examples_index_template.$(1)) - - .PRECIOUS: $(ST_EXAMPLES_INDEX) - $(eval EXAMPLES_INDEX_CMD := $(PYTHON) $(GEN_EXAMPLES_TOOL) write \ - -t $(EXAMPLES_TEMPLATE) \ + -t $(4) \ -e examples \ - -o $(ST_EXAMPLES_INDEX) \ + -o $(2) \ ) - $(ST_EXAMPLES_INDEX): $(GEN_EXAMPLES_TOOL) $(GEN_EXAMPLES_CFG) \ - $(EXAMPLES_TEMPLATE) $(EXAMPLES) + $(1): $(3) + $(3): $(GEN_EXAMPLES_TOOL) $(GEN_EXAMPLES_CFG) $(4) $(EXAMPLES) -$(Q)if [ ! -d "$(F)examples" ] ; then mkdir -p 2>/dev/null $(F)examples ; fi $(QGEN_EXAMPLES_INDEX)$(EXAMPLES_INDEX_CMD) \ || echo FAILED: $(EXAMPLES_INDEX_CMD) - $(Q)diff -w $(EXAMPLES_INDEX) $(ST_EXAMPLES_INDEX) > /dev/null \ - || (echo "EXAMPLES INDEX CHANGED! update $(EXAMPLES_INDEX)" \ - && echo "(New examples: $(ST_EXAMPLES_INDEX)) ***" \ - && diff -U 1 -w $(EXAMPLES_INDEX) $(ST_EXAMPLES_INDEX) \ - && false) + $(Q)diff -w $(1) $(2) > /dev/null && touch $$@ \ + || (echo "EXAMPLES INDEX CHANGED! update $(1)" \ + && echo "(New examples: $(2)) ***" \ + && diff -U 1 -w $(1) $(2); true) endef - $(eval $(call make-examples-index-rules,html,$(ST_EXAMPLES_INDEX_HTML))) - $(eval $(call make-examples-index-rules,md,$(ST_EXAMPLES_INDEX_MD))) + $(eval $(call make-examples-index-rules,$(EXAMPLES_INDEX_MD),$(ST_EXAMPLES_INDEX_MD),$(ST_EXAMPLES_INDEX_MD_SUCCESS),tools/examples_index_template.md,md)) - examples_index: $(ST_EXAMPLES_INDEX_HTML) $(ST_EXAMPLES_INDEX_MD) + examples_index: $(EXAMPLES_INDEX_MD) + + EXAMPLE_FILES := $(addprefix $(R)python/,$(EXAMPLES) $(EXAMPLES_INDEX_MD) $(EXAMPLES_README)) + examples: $(EXAMPLE_FILES) + $(EXAMPLE_FILES): $(R)python/examples/%: examples/% + $(Q)if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi + $(Q)$(CP) $< $@ endif -$(MODULE): LDFLAGS += $(PYTHON_LDFLAGS) +$(MODULE): LDFLAGS += $(PYTHON_LDFLAGS) $(LDFLAGS_MOD) # MAKEDEP dependency list ------------------ $(F)idapyswitch$(O): $(I)auto.hpp $(I)bitrange.hpp $(I)bytes.hpp \ @@ -1052,82 +1133,31 @@ $(F)idapyswitch$(O): $(I)auto.hpp $(I)bitrange.hpp $(I)bytes.hpp \ $(I)lzvn_decode_base.h $(I)md5.h $(I)nalt.hpp \ $(I)name.hpp $(I)netnode.hpp $(I)network.hpp \ $(I)offset.hpp $(I)pro.h $(I)prodir.h $(I)range.hpp \ - $(I)segment.hpp $(I)segregs.hpp $(I)ua.hpp $(I)xref.hpp \ - ../../ldr/ar/aixar.hpp ../../ldr/ar/ar.hpp \ - ../../ldr/ar/arcmn.cpp ../../ldr/elf/../idaldr.h \ - ../../ldr/elf/elf.h ../../ldr/elf/elfbase.h \ - ../../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/arm/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/fixup-chains.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/vm_prot.h \ - ../../ldr/mach-o/h/mach/vm_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 \ + $(I)registry.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/mach-o/../ar/ar.hpp \ + ../../ldr/mach-o/../idaldr.h \ + ../../ldr/mach-o/apple_common.h \ + ../../ldr/mach-o/base.cpp ../../ldr/mach-o/common.cpp \ + ../../ldr/mach-o/common.h ../../ldr/mach-o/macho_node.h \ ../../ldr/mach-o/strtab_reader_t.h \ ../../ldr/mach-o/uncompress.cpp ../../ldr/pe/../idaldr.h \ ../../ldr/pe/common.cpp ../../ldr/pe/common.h \ - ../../ldr/pe/pe.h idapyswitch.cpp idapyswitch_linux.cpp \ - idapyswitch_mac.cpp idapyswitch_win.cpp + ../../ldr/pe/pe.h ../../pro/registry.cpp 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)lex.hpp $(I)lines.hpp \ - $(I)llong.hpp $(I)loader.hpp $(I)nalt.hpp $(I)name.hpp \ + $(I)ieee.h $(I)kernwin.hpp $(I)lex.hpp \ + $(I)lines.hpp $(I)llong.hpp $(I)loader.hpp \ + $(I)make_script_ns.hpp $(I)nalt.hpp $(I)name.hpp \ $(I)netnode.hpp $(I)parsejson.hpp $(I)pro.h \ $(I)range.hpp $(I)segment.hpp $(I)typeinf.hpp $(I)ua.hpp \ - $(I)xref.hpp extapi.hpp idapython.cpp pywraps.cpp \ - pywraps.hpp + $(I)xref.hpp extapi.cpp \ + extapi.hpp idapython.cpp pywraps.cpp pywraps.hpp $(F)test_pywraps$(O): $(I)bitrange.hpp $(I)bytes.hpp $(I)config.hpp \ $(I)err.h $(I)expr.hpp $(I)fpro.h $(I)funcs.hpp \ $(I)gdl.hpp $(I)graph.hpp $(I)ida.hpp $(I)idd.hpp \ @@ -1135,5 +1165,5 @@ $(F)test_pywraps$(O): $(I)bitrange.hpp $(I)bytes.hpp $(I)config.hpp \ $(I)lines.hpp $(I)llong.hpp $(I)loader.hpp $(I)nalt.hpp \ $(I)name.hpp $(I)netnode.hpp $(I)parsejson.hpp $(I)pro.h \ $(I)range.hpp $(I)segment.hpp $(I)typeinf.hpp $(I)ua.hpp \ - $(I)xref.hpp extapi.cpp extapi.hpp pywraps.cpp \ - pywraps.hpp test_pywraps.cpp + $(I)xref.hpp extapi.cpp extapi.hpp pywraps.cpp \ + pywraps.hpp test_pywraps.cpp diff --git a/out_of_tree/parsed_notifications.zip b/out_of_tree/parsed_notifications.zip index 1c0835a999aaaaa81ab2d36de4b8d856efb317cb..5a88d3fd1f4aa7ef98958e1658a6b243a55443bc 100644 GIT binary patch literal 4992697 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

DyZ7O;U z+AmSEDijv_c1O3`B=afwdH$w{IAIPL&0tdo^65_VQBqKpb3>`j8v08T)f*^@Wukib zIjzfT_FvCIF0mLbmP^Q#^CRWHm0zx#WGgP7?I4QQ<6IRi(u87u6cAm@UB$yufO|o* z4>nR_&!YM57uJMRY(R*NX+b87k(P6F1^8~4`x2kPm%}p*yG2}jhW;&a4^blG8F8>V zA}42&yVN>S;vCa4AVlLLvsSj#lic))rh(Xe)gg6&mrVblG{LY8C07)>K6l)>Y`@qD zKK<~Ua#@qHS#y}1zp|dI%RfXLCXGc_Uv7M(`1ovN#O{ecrtQbbrHi|y&+ES_b}&jE z_XnD`Z@Mw)*%;4;=8xM%Hvw85e4c7L*y-tiLdP0Zdn2RnM0G>0mLFGJFMXSX-YLLV z^&720FtsKm0-&NEGmdboNY$TwU1(n^$~rtC^j4lsq&OseBh7 z!R#Q6_-Vw2-rl^(EmB3h(K_GH7K9>Xov& zkG}$OJi@N`kVYpQr$*qG)j<%ufA`=v8u{^IXa|0_L#g|Wexm_U!)+}{4* z8^u3gMeZNZKg(7%zT&c^FnocvIL{QvEqz?QlwcLA>T8mgt%^*u-I}`@M(K;W^?x`6 z{Cdo+dqcq}UZ<1WvtOSDU)|rlGm4Etf1?2888>pBq=i|BLbBx;g?yiGc{|A^ zq$x_v6PeqSPi~&?3?~*GIl!fVXkl@Ui^^7cXdZC2`1tv4bv$|jfY!i&0C%}+w;Fkj z@3f=}zks_}A2BL^GYDV6UGphDI!T$`kRg@SO2Ex#!}j7L&-i(aXSa#$W)a3lqwr5Z zZ#y|A7+gDXZgTOf2nueKQF^#T58DKw=#Cnx61xpK9dA&?{m${6Rtp)!OrZtYs@Q0K zm(!1}p*2Y6-BOn3MIC8Vn>e-+!|9IFgYM=_jXk9)$$FxzX;^-)t8#1*2+)|YZeTlJ zSb&6M^;krTx&v*x39TX=XMIrvjB+~gfQsIUAL}$FzPwjyq33I-?6_Hdt1$n4k1oKV z?m=KHX;K(d$Fs17Ka-Tsd@IYS>^nh?Ra%r*Jl}jy0ZM#q|Gl{g|FZJV_%P*bC&V9Ulx$f=xp^M z?Jhw&qqK6jO6UnF1S&shjZ#R=M`jp|Z2IVzKuGQR%53ZH#0KCv26m@?PVy52=Jb zG0Z+`9tKBGBv0V>0b#Z%PzIu6TZl>BkJSA-A`VDKxnTNf#2t^ny}5@MA!5W;r-%Si zhl$&<5q{v#Krte8k|RlWkVlsyM3P$a((j07%{YLXp^C`RYPXx=gwN0>W9?fyz7B7!bs*1dbgUgM zoR6zh9q+W!9V!mBD-X*@Z}IQyrs4qnT3$``s%e|c}b{qW^*P(6rP_gc53}4 zSqlKBn)30w?VlIs<`GD*Da9cf7e?Y+^?I-Q^9GikH7y=^C2{y@SBf7O0485SRxQ3o zuLBH~hRhX#OTU`?Gu+*N?-z_H|L#}JFiscY1sA3Gu7qJS^BU^C%4gHK@`Op~{r;7| zqW6PHVErLyb4Z2zh@|C`p!-s(%}W$)r-uJ^Tp{|_Wz=h`w(g;HqUkF`JS&DR8s zlshZnTK9OY2XjpyS@}@Cl;@QVWBj4^S|00qd@4a;gUKOa9tQ`Xwqe9n1!?JeswRrq zKlfeGr+$iOLOL|H)f4tk%8Jt;h%{-fzkSs9Z0%-grY40aF~<(>P)6GMdc3e7UZ1W3 z#MvYWOyX)a>zEfka``h49xu0uy7`bDezV$u(BE!-KHYP*VBt9uiD#ms|B;>ai{9}| zj2S`e7w7q~nvkk#X4dGG-mw`Z`pIT{mcmvA{n^LTG%_4deUE^;@%fQ;eP_X$bt%;r z-{{X2O|Q^OuaJAY&$?oIy6-rUHol%N06pV7pKiga-GBzaYbW$>Jdwygg)P}oY|snW zg7_yv=|TFIZkfjRd7U4Ju2eZOV&hchxZuOmWj2_`1;z^tz##9aROU?V@_<%!LK9i& z^}dxF{3nUBvJ8%tqMf1yqh_$Obv1YuZXY1i@<1eCK$Y}c%-p(tN~ zQv5ZkJefsceYjhQFiM-1730CdBCVdm8YLQHxb9wNh9Uo>zKoy%=cS~DB|d=rueeuv zn3JVeCX}dSLOr{b7H|V6GXF;^5jbka!maD z#%W()JKO_8hyy~%rJa6Po)&97C1IQ*DKrDIzeeWTi7YZB(hh(1N9cQrNosb%EWTKs z5dz0xOHLGgAyIb4tv{h8IqGAg{pU{Y6`64YBLla=(J3g;peU=PnGHTcWKq&YFC4|| zinYui z^8FeN)H%U!1x-2jE6eE#MR6EaG>1A~KG8^bFp7BkJRI}@w$+d z38iznr@O1;6b_XE9SIhbVb+O+jD%)o9w^k%qsfg74PwEK*j%xOk zLsZrZ^bl)){nJ*WVsXZUgEp^SDEqKI+_ z(?_r#%aF0&COc-qgNyXPTrOyIb74`R{Y)#LO=mAJuu#YN#LHxIF-5Ym6;lf1JpbOF z&$R&tg5OlOIbhQci66>Sr(z=8e(9h}@LJ={qGShS@6~3LFcNpamd3s9EJJx0#>wJ>wob*%scFg2)9gejDqGg&SQixzf}zQHP28L><3pKm#-3v1NR%3l{e5-H)2yMP%b_x;nJq0+ zfhx2M*|*tA_pDOxoN9*&`$ts}Q1lY@M>qw{gRVJGIQ*I<8gZ6#K3LS@Gmi65|BP+? zA_x432rAE?e7V$($l=r`)61zt18D^%K#bx@=KOFi&=Li6o_Im>HhdI$te^A>e$cl8 zF*>Rt;6#SD#|oy)l2ZD}xM6U}@XW)buiXb>xr2mi^$2T%@!b`-pjT~THuUjV5Hlw)#7Pt+-sB) zs~%6pS+FH^nln)u$W?;Rb9J5@SZKm?kx_k|OXsX*%}$B;LfRrFaTzcTTxy$62)XX8 zPmC@itoR7|&(jQun05yVCdXxXJc#D`DRjM-Xm+PkzEkr!XjNTBFXR}xq%Cm00S!Ky z&rp1R?(229Fgh0R$KEvM%GF=gFAqR1nSeKYn&$AGv%7g_C8#<%VFql|DYoN}E;%*& zUN{CQCw6Woa;~4!9c5#78PU9k#i~BNw%vJ9D?g!% z!-n*Vs^H7tEzaMZt$^Bffe{|w)Z`$EIx03fLKc1BS*r2zKt-?9J~@84yt8~m{XW^w zW)gTo^?)ZmLB63dedJp~KDxpHSRo!alJ2jQjeGF$Qhm9nMTbZQL0=Pv0HH>8;6Ij@ zCx8t`gq0NV?PLLJWaImI((7H=UR~+RHI47{y5wwc&Pxd(+kT5#bkT?1s0e2|_0X}5 zRdqSK&r~$E+0@3ZKI+}tk5+1WUQ4ZyMCtn)1zfN4EqT2={`@~J)XUfLR*XvMVC>8JYy%4d!uYRRsQ>MJw$QWHbNYJp{{4{q z|ComCr|Md*F=K>YzS0HTIxdVf5bzB2tZY{oKs0!%R(-_g>}ru9o4e>m5Ia0 zqn(>PTf>EjgR%aHVNqWFY3kKiWMp7q;Ep6?HJ`)*L-FQ$cc{57C^pBE4T&725T%Ft zA<<>qlTyD_PowWm0}`v{^n7gOcvZTS32DxPMeZuyai-x1A(WG+S4)ES!br zU(>qE?iwrItksZ?KSw{as0>a$4p{RO_n-IgO>`59y3hMNA8e+@o(BNY6r>9ce^QL8 ztb;_;gQ~ex>&7v2n?S!ZI)CjlzZLc9*vsMlQO*>XHEEB$jh5k6Sjd)S8EpTNU4c{R zTi4zH9@(n3?U3Jzg~{of$6h2baj~1_mRAFCOkY)7lJuI?dPfX3X^J(M&h_INycP*c z+#dY(>QDe0l#BR{R#2?2D5zcER9(^?GGZub~^p{w^PLM&%? z4`KKeUDVWSU9DPlArmL~X?+=yIx*_iU^v&&JxqN>!W$!Y8e*fa+uP7=b&yV+5NQp)qTiDn)44h=38oA4(c1MKC$N@ajKvNgNp$ zW*+qWYE2Pu?-E4%0M`sDzO~Hg(I3i+ujs5!^>OeWxs1XOy?IZs;7_3@JGv%&7`wU- zR<9Ym4oxwSNi^1QL29ub(9ZX}mM6Uhe!u);TS686{wf)?9Q2>OcWC-zzogP;prd& zBI8$%dVD0v|HNQo>1tr@@&!QsZw)5ry5qKFTv!{2bPx=)8A!i}9t(~5z!8`$C#+dP zP0g+>)JfGx6VF`jZq5g2yQsBOr6ZKwm_vSnt78(CmN`jnj>{|#0TtYK`wFwBDoVP& zp@jn7z}2(-H$Keid1Mm3&-T)Vo+f zKa1$hR_f4__AGYf=JzM|#sQ8tk~eCh9RuzC(t5b7(3+2{wc3HoOQ@hIRjkvuUkzyk zE8Z{q2R%X+*FhcKxyaCdD)%oB_R|M`Ke#R&pW=x8@R2CzOnrH>`Hvh-e%}LipA*MIaW$jntVZs>Z!iK*tFtOIq5rrA(Z}4G)_OtBW z?^SSP;lRLOZ9(;wwURt&p~LURd1JF3N5X;=cj3+y>k4{RM>o14N-nZyC{<#x8k=xK zsLWxXu61Mi6t0!XuHo2Xzte?{t(p?J9sR)HXj@ZJ-&ni1{@GUHV${=_=(06%owy0E z*W4pr=tm^L;wVsa5>|SOXH+vF!Ilw6TWR_bHzO`*cJZjG?AMti3uaJB+?_8z5Mc2K z*{%B9w*B;?>kkK;Kf)=;-ioGP$6A8E{sS|aRfQbd$OlZEP!7cP60=|22IFYZz^)-A zso1}LZ$4#fCF{)lmngkH#+xa=uV@6{&m>?YI)9R1SacP+n8zU2Ui(7Da{8R-UbLQ$ z#$EWJascS)R(;itMDwqaw1$fRY8lGsA>xnjRiE&Xy)LhQg@|mv{Jj|QZKWe=UOPv7 zywkb=eFo9R$Y)S{iW;cIyAwf~3cg)#=&y)NiMUP^jYN+qP|672C#%lZtIsY^(F#+oQX$`re1L&)6^f zX^;QfYpprwuM=76@h{ocNIi0J#Bcyiq+pH`EaETebgl7no8R8<9!tF0FpFBQ8#zLdir>X_OJj`C_9OZE_~v=tBJoxki2t(Z@+C;5q0L zk{9!=jGP}c?ymts#>6=$O+&VYP2INkq&#w6hy&`s%-(qz& z6wy_P>SPG+)q#qq$sQ+psQiU-v!*nd}jO*Mf;4RFM$t5E$@aeV4G$@?z8f zIL#y9b8P9ZJQJ1nb8On%ZOC$KJ4d+G4>X}44e|Ya%PPwT3ur639ol({G**@?;$y?| ziliYE^0=U-Ax1>rXxt;Nvi6TY8dEYWWkW^Y1%hM7nZZh(XAI{Me4-z}gJ1R9#q_DW zBIjp4Df4>~T-rMJdTfNT;U@Rqm<*gP_dY-CgwlT&o6WAV=3u@uV6pv8`yIFX4ZHAN z$Rq0M30QV*r=*sr2zkaeM37|Qq*M?r-lJ;?5G(-ub~}7E|D*VC)`s?LEnb*Dl5P@( zx3zLebj>kBd$)9dO0%{dJOQf`budl>5=!NS@Xc6x&DX>}U;H=%i#ydo{M!7zF+rq^ zUiq0uzcEMbDS~py30s?lWg)>Y`e<7dKvt@N3D+`Ov%zwM!y%c&>Q+ajTg}ZsuxPxJ zP%nXXTAJDZCyRYyGI?sZXdYz*_2}P;gFo5a!QB^gl<`s@(s5#y*Gx-b21f-ex`YBa zoHMNPUMf3wz^^6ubv~&l2(YEnk;TuOHn1t*yD8|JbCUB`DEY}zk7iRlNO>6f)o?p|zl)R9(A-BgKO(%f}F zAea0yE~TWPAg@9gU!Rx7O&WndC3nML7@RqH;*TjQ<9N7PlqyMG+VqGI!9Xr;Uy`fH zUZkv5*>dsJ`$tYy_FI&lvryO9M7K&+1`egY z0Dqc+JKByZxF3HZs9!1LD+3MoX%!;awyEc19VU83Ph+nIW5$46%t0EHUCg<(;t-ca zBt{J}vMJ#+KvydMPghD3WqybDX~Ry@!h9xSE zp$Xog3P`tm+dR|?ZnP%K=o(TFm?LuHE=mNcUXgKV`ajq~d{1iH&}C{^->yt3PRSBr znen<72K^})jv0%8)1k=`Avpr1r07sozmbCynL&~mQUpc|1VjXl>hCl-&0jsIE@Yew zvvgMw4ursmI_pJx>lU7K^d0klUZj06J~fX(d7Lw#GL`5A2qc3@*y14fU&dimo@{|8 zVPrF#JeLx21n4lkOWRkzx>{$0+tj{h5=%2nZ-S_Bs*iID+-M_{*?T-}L!O4rI?%_4 zm`wGGhI&Ut^Ffy5zf!iftCgm1>Iy4NNPH~&w0ZrM)iYZ?a>$f*ySCsPxvmzFZ$T9dN=cTH8pVPd!h%pxsNx0NIeSSZuT$ljWG|{= z#*0{-WDzVY>6S6p2cy5J3V=pD!Zg|jsRDXNG`0e64kH1c+BS~tEs|O2UY1UOe*fe) zT0SzZaH+%L7AzgjTSS#^*!jMTLbddy0(1d;>}>%BAd@8~VMCA^q17g~Bq_-RV#Jh- zwD`hNmAwMe;~t;SWT}ohCRR@4)At9=B}SA~dQjb^8@joZN3Ue`R&&?v1{foNAsi6# zPw*iv3f<)#W0Ahq#7Bk`@@F3Fc2JGf7H7$Y%TV2Gl!ue%drI7-qteq=y3v9#wxJ7I z83Tag(2$b|Psw&eoB)Wb9Gf3vWT~B$PfzOt0IyYY;XcCFqAp7LXOCzQ`fkxc>OC@{ z3@Ze@G!5xL1udw;kvtr;oOtED*lyO&Io?_Fsgf;|PnD)s6(R#RN2jb!i!ne)pcEpw z=CshGn%Y&ej5qybqdS6HRP!6_W)by&J74&4`WbEpw?>(tcBEWXWiX%=!0 zF69vzQKEaHMxm&tG0=fI6wng?Snkp^uBco=az$A>P^xCFlJ=Qbxt7g3{o|IZLL(<3l?hjGGYqLW?pU!nA@zgDvSNEtUQ8IE*nZ*0@PO~$#Sko@AJW*x2(>e+3)+iMh+-FRlggIny{+YF1%7%?P6Oi z(;w&4A8P>vzDqXoWyO@K9W{W~-+q}aE?Ua$dVZ2OhGlk}4$>?$+wG#NxnpJ+#nZVF zS?5kWUL@TIv1to?A?#XmmCwCMkvkTiS5B%sot7;xIs1b3d+@90dKADfo!{#)cx2z0 z(Ib=1`9|up96e=rW&R$rEIssB z0`23KzQzVyV(Z2RQ~xA(937W9eYVa`V{E4Zyt%}~t8Xrn=FQ|p=fV*RMDyUuN1LM{ z@6+#b0umQt?xb^-2Sp@xOiXnnAVQ2sY1mvs-1jPD(FvW1S{84mT z*xNh*G-hV5cE-;C&oJYE5#@HNqxl~ygHgbMI5? zt!|>OULQZ1(|)fN+vc|Azsn~(??$hy-ah3iuH$rkU4750V71gQ%d1*B@N-Z>;!Wf;;nfbK!3$-1G2+FNjM!^U zopzrVsN|`(5Nqj0S*g#m>DcOof1y}1TmRwU!l_Fs2iN|S^1p*g5f9vu&&)(Mg+Q57 zS^&=~EdLUPKL}@U*)=6r_tP``!75 z`JMgGiOx+Y^1Ok+!Mt;vuRrBrs0g-9Sw%Dl&K6$@Rsv~*?BsjRms&0c7|#IEm4 zzNSAL{B&T^@oK49sX7n~he3N(1$54xM4x1~H>}i!;B8m;L9^eqeucUD9 zoEAOUl{Tjz9@h2LXU?qeH_vaC+^#)~!~MhkD$446DeI)EOyt6e7uR5xtth8PAZjBw zIHv?KwPpRvQkKdT<2fW%UsuWzMkB6hQgM=HQO$Tsu)*Wv$0vQqrippCfV`H6Z)82l z&e1f66y4MaE*V2>lhDTMt`D&)?;#`A2zRPOBJ(tmf-dYBSq|S+bf0{AqM>`&(N_#3 zfFIzFx_3M+j+eRYyRGM0+9jpcQL$DFuYM#`xwUHufY4;6nsi(-5gqFn`7Dx~r>y>T znDh3Lvd8G`RyDleFJfxx>K%ezMoUv>nFMk17 zHs#QL7uI+aOv{mn3@eIHOTLHn3-EDlhH$~i4%`r@m-7W+@X;~z%nvxk2@P?=+5%^= zz^_7-Q87wsl|!P0DVH`(gSt9$bwQ9TuN-k{L>)0JoJBc-ioD6cQM?H}r!buFZU*rRjI~(rM!#{8->$E43qO5B4-q7j<8* z8;<$2|Lsf;vczYgdc{9mFzJSaQX}|w+-T8OG?_l!hHIa1Z=5gfGr3m#vMd=M$qejy z(P5zXY9RTSjv_HicokyDi}!5#)|Mv!wx+K0*b5YJX*#I{GIyeq{r9T*emcV4GsM+q zE&glKN7M9kv(ZskWoz+@E`uuSV zeGwrxDtSOZ5;8nNCEC5>B+^0A7>`5)7G0vY%9rrN-hMPLb6}Bb=?3u8)?+n4I(#*(+w5aiCPQ}Gca+Y zJ)mAK$HP0C|G6sTmmbBHQD%PDRV9rTy&cD?MbDEoco5opial;SDE!6r!yGKfP+gCW zH*NOW0a?5#49xq%%B(lZO)Bq@#XZDYijO|oC3S=EdaN(qoL!uI>l(mUAVJ5`tQ5J! zEKRWp@?^}aGSkzpxr=D$Nw(7q#jFRRbesHCN=ucWBxNFWQgO)3~f#Y-)?K7haNtHc;H(A+L0$T^(@;juhua5C^_ zLicKm!J5?An;T7Qd4KB3v_3IuCT5cgr8ObYGEHkTgA64I%9Id)ySdHw_3=YSAD7Eu zbQVpnjR5JD>lAbf7gs)#lAEil?Xzo&Z@%cbDBIS*L-Y4;{`f1cc*-P(APM}aLXz2$ z2mE;6!_wr1M82*!2a;&^{c<0V;Yv|f+12E6O|SRXK{nxCzpSSqLV5edK0&6pMw#y6 zE?%5>qjQwQb&5BUONi*_CDKAP!!46%EW*LGLUOY+PHtX;013CiJ<#YE6HKE=`De=Y zM4M957T5zu*A82lZu}ixrZ>&t4!$G#v>M0Kt^)xdG)#kCpmFK4u6I|^F*H++RGcUr zO+2E@BYseNcF4Azx~I#=C}X@ZPaM-9h&i5b%NgqzNzY*8^~3ASXf^HE`{1nluLktL z+aU%mg=t7swhrVgIt~|eS@)@ElsKmovHMn2px^onYM+*ldsU}dn!17k30V1|kgA#p zOPw@z2tSe7JoonrlSMSlTYiz;VhzcXF*fw)lBWTteJ_}}=s@nW>F{0D<=LoheMdO< zuYlxZoag*y)Ncab!b77^78m2${*kPnG5+FoaruH#B?a-UF?^Bli4ODX`xcEMcSM2*ZxFvp!?c>?`b<_{YO|QZ7%QXKU2~4JMA#H)E%bymgOL$ zJRBsa3B;jg=@F2&DFDt`*Q|Y;hpQDQZQd40b}8WYm8dNYq4CSdTdYmbK53~YYT4i(#nYia zoMhCO#!MFTum+xf32Aq3kUsC$;l?_%7Lax zgzeUmoz{_O+?cUT|IqqtXDZCZu6Jmn2{7b{aRH>I2_VC|vHllUh{;JX`f;VoI!Zk`^ zZ{Vh|82X!X*H=I>UHwM13X4mjbx|)U!>?-o*;l1JR4gW3dMzG5K%cXZQ|4AAU^AX( zn<)3Jz5TA!9`FLaH=~d7uJ8YjJCnOzh)MpVxuwJVKU%Ta+M5`=c>MP(mc{>x?pAZQ zZvQ{2j`~PP3R*RUP(*!{|0ON2G73thCz=dIJ6fR-3;GuR8K=hBA(Zb!Lo6dUVvn zuTvaeI#S4E|Ckd#Wyp09{U@SXwrfKI2V+S{FEh=IQtC}8{cRPi>7NEc&Nl7T`(yU5 z0#a|l1c1kZCwmh2Xh}4+aEo|mEh-2O+3KN)l#OO7iz#D9^4KpX=7j>!wIO{VX$cE2 zwShAU7g~K{ruxGf`E&ye6yzFof@*DBJ6LpKpWq=e?p9FIn*aqsCp6rD1!aEMrUp`i ziBKM{w_N`v|8z7%1yA*D;K)+IitUsls=D-K$}O|Tnhh>d5?_mgi5KysH50QfAceM) z{ITlnzv>(HS%~aqB#|xN=FCGeLn8slF=yp*80ln?B#>Z(TF!Oz$R;NwuAnbTCp)@= zSRkctObqhJ=5lKSSk|u6e#fL6_0Mk>{Bpb_{VFYX&5E)q+c%jXEju{FHoJ8rL4Xlo zAytxBRuXlPF_W~E=K~r)EG)%=$ijih+nM?p6E*xb1~S=H(|{vO=}09j0o=zY{7#{wMREH9_^79&lyiZ&^t4DZR)3B|Z3tz<2g( zp8*6MWrN$%8w>K2n+QQi$OK>056a#gd|Lz6f2y9qV|QXlrD$vej?1KY@Oky^nA;wz z!0rCr%5|?!)$G{rATHw@YQwnlwJdW9Ky1fk=G*SfSD-T|)a(@H~J9ke=duCu_} z3~E~Ez-4Hc0WY6-wghKwveV>T<&1D4kO`QoT!eHuw(hads{lyOOO9-8K;baRr;L(NW~ zP6K@f*ZXpt@%jq;Qsl*@)=spv{)${JRL|%6duC~!|LJt%`3BDE`I=<%{wlwt3_EGm z+nD;|V-YGnzZ>25C(QpV5c!Y)p&#WNV(7>6<%spafqnj0jqT6X-O}y{_37&H|2>fZ zSB@`DY3Kd_;+Sps!Gu@dr2v=(aM~>W7k#a&cd^MIxOK>J<4LHCx}7Ib8%RXLLxz@) z65{7`Wp{t2#Y`XFx{%vnnlq_6PdR~G%mPXy?K(2v{9kW91Wz$KDB}?d$Ys2Ly!6cx zP|B9G!6ZOyO!@Rqe5~kNY4P{!%VUdHI z{$!q47hwDI8LRvi<;u5S@Hlj$V2+)a6hvoW^?(0ZW0{vZ{ga8_u-ojk?)V$&tomG5 zzM5CFW`+z6EO>K_&{6?1@7%LpMmZ)N2US^_+Iblg{KePEw#JI$A31~;dC{hHY&-Z8 zg_b!Fo4eOFD|ylbQuK^nWvUGBUxOhbi{*Y7-X!S>kee0~Mg8|A5JIDT5+a&D z)0SWx8fcvl`qzbmfgBIyp=-aMySLcUNM{dX!zc>6hKs9dYdANe7?UY8WveHo&r#b( z$ms9?R$_aTVa7XZY8|0e6>oJCt`Uo)*_gWQXf|VSbh7EKE2+)rgCX(kIh1^Ct-f2; zc;+}t)Yq~coB}hQ$HWAZ>i}^Zdg@J?R<9n1oN^XgteTT{)6_?OH!KJ8W9XotzXr{7 z(y3I^&PdGQ*T{hy8$0u0$*{A)Rf;rF|B2$EHQw5-W*N$xbh&KM5n9{y9c^~YwZGK* zjx}+x*&n%OfZQJgJRyW7PD&udLOJ`eyIcu^KLkJkf#36T-xP(APa)WZHwFOk0pW=U z;c_5y;pC5IH#r`}`^aI7Uf~ZKj#L7@vAEgr zJQ{EYA;X|}g$jb`B%iqasau5K81l-4Y>uU(rg4`u3=T)T%f@l)a@2M7gYYT02rDgKBmFPBp^Ria5Y}us184z4KBM{ zL$%QhCUjpN6S(Lc@1`+Nd-OGvLyCZpKumkO{dRoG{Q!k{;-MghmsHJR3?)+reGo(Y z?$#$>-Jw$7$$05gYOapwvSe?t+-f)MIT=p9GLNLBn5ka%MQSF7W+r@KrQ$2%;$Ma- z)W82G9D%xMVe#brUORQlrCR!RPbyK}NPQF?Q!=?FR$`=p2W*#KS^-zY9aF*Yg4*uG z!@5$><>fLCR%OI8@$zd%fQ6*SENJKmnMqH6pcAf{*>0h?ZQbx$&*(eSpm~B1>T{&x z_1m(rPp3W+P_O-UAefsjh+t-TVuXh`k~^KVF|CuBEXuBF0b~QrjX8~2_UUG+H3_wS zYt}KUP4}<+=;|&7$CcyUbK{qslxZp=k=1dl@UWL}EhIb7PM$}kDD@h>|B&)#j;vGV zJjT%6+rd$M?&Y{M-iNjQW%e#X$Ag`)_htPld9(L@)`o-Ldr>>o$==Q(d)dQ;;ghTa z!tv0%#O($5VE(%O*!|9e{gM;vtFr!KND|Pzf`mYt$$Hroi zc;C+}`hM&P^$Km8duUjYpgR8QDSdyy7Nt!KvcF4NDsL%;lihgX?gS*OVHWWks)|!7f zWqyX;H^P`SRgIZplc_Vz3s#q>w20@vRdzKsnKAj(u9Gd5hWDL9lrPU9aM+>fQ_S82 z>D7aZis)@$mZf(NwspGk$4@SGv}U2>>gZ>&RP;mUcZMCqpM~Pibxq16;xBGY+Y&C& z3SgCwe$Tb%9}9w=sgk{roUq-vwYb*@yMvY&w!4xYtxe5QpL5YN-52kV2AV3`yUu0h0KA2{*&pElVQLUK%surpVmxg^~pMWlG92RUxGz)Bt0;m?N~vnel~^ZJZ}_ z7u)3X+EPznoCXfwiGvl%JsX$q1#hV>s&G_am@}0|T09*S2#rC6cTnm^WdOlq2NxWGW1jwjvQ+y0^=7 z+kgkvz1m48ezYq;KmN@ouhvSU@J>JJDR&KdQ9u11&b^)VcL4Bgpo<24i7$M~Hw^q= z5l%DX(P9ncnPwT1EU5_FC@B6G2Rw+6`*YNP&m0zT+_=90rZ$v}4TEwl#Bu8x+7zMD z5~Rc@@n7`o>9e{necKqd7`+_!d*_CbOO{;cB}-C1BuLN-LSD2h9eDFd`gr#Xh6J){ zl}gY2t-v5?sNg|Y%CSN52nzOMUzH}Bd+ioM$G}0NYV<0`_&zo*>9nj&g}J9xm6NKb z1^7fI%M)GdeBgc&5EYG2z1Dhvj)vT>MJ)@-*w2-zN0W7W-S-xH&TGbhwDa~UUVP7L zdRZl-GIrO^+cwVL;5V=PILa7=%mV>xTm|nu;c2wm892qD0eDQle1E$ z)7Qatr$^8cvT-`h6qx0G(f!rz-_Hecl0^;4Of-lnl^do}N)9lwY*3tAC)FxYeq>;n z1S2REzC22sPgePbN9vC)NS(2RE~`Slc;GoO`OXjUA|r9h$sd9 z4FRpDL6coxWq_P(QEEfX8b%HoA%JOhgE|}PFua2S3*1z{0#?!Dp*G+m6}pfm3595g zCxJN^gM*F$!t@)vT6FbA4q!1Gz>ZrSnK*M4}PhLg^;uLt-IOxj`QCZLM1B#F(?Qiplksk zAeR5XjqHDI8-C2w&gMTQ(8AQv#Pok4|4jc+Mmae<_Elo&qdV97hPO#qYLVt)uUKoR zLzSs&on7=>QomJyv+(0-!J<0YUHSJhhpomLzw0r$;w&K~2JGd$GVu{`4B;}pUwLNA z=Gmy0i}Ljay6>79IqPPy=ug@Ez0D%DeV8e+GqE%McH-_EkIufv=bMtb{qQurk8GPc ze?Q^M6_1xy-j*-V=kx7+N8LeNGKvBUSor?>NmYNFqdT(Af)HO9L-GIe)%(z4I8*%7v)HmwRTX85A4!@1(R<&z&GBwQ z$Q_!|XU^`m(#7#eUO#gn5|rN1J-=0BlTEF(aNeG$ORZ@w=N+d`rM?Gs*+)jE3}g`? zG5!USV<{PkI>Cho8ic8scC9P%@|mSFTihK%KB14f%p7rd>e6dhyI9oiGSgHx{SNr?$WfS;cphbb>BVe=Nmwfp--+!r9-v$ylb@ap)kjbhvXmdoM@|-m!1!9 zNN*Sij2oX-W!WR9n{C8jZA@AAJ?^dH>ouh5!p1>NfCdV{tvl|`y6|S(s92Wf}p^G7#oB(nWS^orI4T30Hx(smVaVxCBt)`^`WsJx+vY>D+2~D_RQSY8vbRsgu=b>Nj5{OW*8{G;k=G1W!-Qi{ppXz!4X_C&2vo_k zNaTxeUD8VfoMWa5n?6hY2`|!<@1wEV&fA3SBpk4DU21~#lmw+hLw*TK!KY1#^?5>r zVXC4*XbID`-(c^!5ppIgiK$XeRp6S6wNGhTF?ifpGZdY_yA3IOh+%Y!@{|No28$B# z3>>(K2GPzt@%gKQ^@yOkS9|)xg`d%osd=7WQgj%0=6-kJGLCAD@eR_aR?1coY3xSxfTFYz#}x z9{@6TneUBoMJ5vvu}>76?xE{~-TKKqd-;}LR@)F(YyP~IFH0YsHs8#4z^h6~UYQHRbPxim7PEAa&bXZ zEB6nJ)vT>ccsOse55Ljnc__fo1rMv*7}V7#K@RpWrKo7v{g|Uwl$*1`pdP?Bt<+VS zBh&Qq-;(!pdiu$UhpPyL9YT{9#!;Yr()v(1wWFTj#kSRZZ6lmYSDzHChW*awKb@Y9 zVWaxP-n!kHv~FKtR-X*-TFTr~PxBwD)ow5A9w-hy6aI#@!c+Z~cDnlD;t7 zwTc4V^16GEMZt1#H0@Av`^iZ@sOYs{9H)l$j(Q1b3%+*?$4BH!lbAKl*2ZAj!2CP< zEkepyCA?qzYTorXcogr;nN9t_-kp6ow9hBy);;#lJc3pD6rVFBrfmF)thW5Wb>%pI zVSm5O1H=CtkmY~+&#sZ>BB-Cu$>vW$6Yu}N?Aln`nL7Wc0k!+7y8m}nlY{I3fJ6D8 ztx`0koqw{LezNWiJRE|E~q4|Pcf#yvL?I;oAwF7?Zc8(b%`;0uEPG?Smfz@K@@?fU%h(d`klY(*$1 z5zC$Baa56%9R^&ID9I_65fzgh6xGNjW5V&sH+`jjDnO+{z!yjpOcrPkkFCM|yZtF-T8nfJh)(OfsSQY(#Uf?JEA(m#LP zd0V9XbW39K5>Lq;5@fzy#OvZT*gl0Z8(>MN`d@E!QiL~FxrZU7H$>70&QYwsH{2ut zmd=@;gAANbh=`-Dz#MWs#<05tveANz6wQj~zYJQ{?8Wo?XifaJ$LrKLPARkH)Q0!5@IRl7^FvOq9}$4dz)L$11{luB?DW&Zc%orQ_q%STj4$E z-hiAGE;vlw*6M<1dut~Pn(K~SG^VAhZ$OC63ep6Avm$4bIS&lsutEL~qn@UmC=t>= zP!MhT*N2~xjGi&@lA6HzN|DGJCzJ%f;J`$t413dUEG!lNqZAD(W{ABl9V1n60C&AT z&6$%|kYJH?BCB%ZM!FzbV&u#NFZw4;Ad%al+kwDK2qre_Mkc`RMfb~Ge5j+pS-~e- z`VW6c{}y*;3u}nDoUe!DplWQ5p=%v)f?4cV|jm$Q^8qQ;+kaNvUj_ne=D zvc7Eo)=n2Vp2onSYmt{33Jj`xYin<@S2&w>zsCEi50BiCpB-Jp0y!a*$viN;y*`S>NnT9E+G#aE_X{pmGbn=MJgNUlid!zzJde>~k zk%q%5JU2Rg>$3NRy8jw7iHzRjQiuf4<3^1I10@x}dEO2N0^7=J?(5%aOO?C7b#~o^ zm1oz~WSMV<@Fwah+ra+gbkaT5raoEztE*sAHz=a~Q$Tl$d8;l z1hg6t1jP2gKY#zDJ^h*cc{=>)P)!V74FCHX;PU_2_*~?k+iyrD_4i%t4=jXBnz2Q` ze~zu{;T|(Q8=9NLvv>VSmLLiVme|-ED+()y*ZRIHMR{r05-HcuH#r1g6;0eRy3W;g zmrT-UzFoYTsriI>X{&BWe!s3v?-@%OUUMOhvI=3*-ub-J%LrG z!|ye={Ca~N14~C2p4%4gj2yODlAq1Ze>xzq=g7XQvnpmWNZ$ABzK;j%_As31R@{>) z5LoE$ug~_kwXJ@aeURo8|H>fiM$}-1Et$$Sj^3_Zz<^Xcu&?>ft)SiA=UAZ!C}!X1 zMqThEKkCS9qeO^G%B>ND?U|;?U3;QSxA z@xew)>eC|zO!vi1Q`XxR-Z6K2GgUb&9Ch`a{2N?bX*YJzlXcc9kl*HogJZJgeZC=o zRUUK8qT)?s#Sg4L*!;6P=60PNkJyWk--+4J&#DZSeVmtk{Qca@Lq)reIAY9@$|k{^ za*jCQrXNj$+M@7yCTwBpFetY7o=?mtm2Am0;M8&2e8vh~^x>gwIMKW5}g6N>u9m!CFKxAp--Me?4q%3yxS$Fr@diXR>xAK8c|h z6)U6|FzqPt>2BinKVL75>B`Q|vejy10QmCvV+rBXPt0*3&VOsw zSX60L^?xkdbHtcZ8}=PnV{iA`==#vX<-I{HrelDOgSLDb`DWHhOK|uU(owjV@O$s- zgaA@WBDBqCDQex)PjI-rRn?ou9XMn-?2a5(_k&NCQ{d_Rhq)(@qJ7*&d%JjiP%5%# zL+Nq4N2-e`XS$!@Zl5OV9lv{{@~=CZ!sX)7(@G>vmy;*HKQGiG_bPB_?ZVZGU~dbu zSjM!6g>!+Q(Q(9vlRpTy4c z@xjill8Q5NR=wima-Xx>8whIh3LLBj5WpO&4@4DOt5IG;pbO{!LdR(~+ax8=ZJr1$ zBXy)UJruajzlK9!RJb^Mx6sVt1xi0kefJztrZ`}#JMhpt9^o2nR2tlYVXy(kTt;EI zkPO)4aySu%45Jnqb~b9hXCf1_3@bx0s0Vk^Y+#g-k(8&}A1{qd+AB#bBAm$-kln|j zX>n(1&+&CB7Ur<3+Yp{>eoeULfGbud6L)H+Ug?rwy<;0WkD@+Ogd%{pv2p`FFw^SB zSC?hX7NVJO+%rF-gjXN*eeWtvvR9DwDoWy?W;rfZm$4>HqE2S1FW_Cuv&a;A=#eot z&6xs~w22EcNW9JPxLXG=$l(I8KpMxUXI<ZEahF{^%+a$$QpSNKwXh%OKvfk7}f<=RWV8ngpF@ zr9pQ+TTQct=>~UyFAK={4%qHd`yBUf=dbbC7w?}PP!F??yu z|NgkA|9-r0Jc!F~3dSiM)GL&W=O>=%qhQyplVsx!td0kIwdp~88)=!V_Ij?1DI0-a zOP3W$NLnDwOedupC>0&m5)ZVP7ZBj%NG=YO$$lc)l)G{1;GiD0P4^2s-A+B`KHfK0 z1%%(soIFoYv}@)O{~RcH!xV9xPWZHawgb-Ne0sdl^dUaW{NLEs4Nk(vWe>xZrvk$(V9{N5 zkRE1BVE`0D?S|Wq?m#2XYVw1t>P!EKV(wpgG1C|JTs>WVfyQ@Q8~J`+RW_2W>85%^ zQ@o$|4?M*OZvh7Q(BVT~N-D?!5_EVH=sin14(PfpEK%lhL+zD6nv-x*+fmR4$`_&G zAV_I1ioqmW;+va>2uLQdn-~2%OiiP-h=gCR(B<$~i_8>8OjQUTbnb+Rwx*-^f784N z3?o4=2_QOShZ123!Vdx%JW6vKv7mm>xeoScL7wrJ!-IGpb2RTifDboz9wcg{`2-q4 zft?flgh_#U(@-`a3^Kya|mULn`to9%e(@ zZ-_9c_?7@g5ecG@6C|ZUhF^{%WvukL5@Au@B0#*K;JRU;e-0W#hFIf=cfx^qwLlSR zmcuePeh^g3!S6Ws4=A4%5Di{-b7)>0T$8VNR zJASyf_$QVe5n3$FOO2Etzi}xN><}6mEJ7l0JIN{5i!p(2Zkyhd=&)NX9(vPqsQy2V z`MK{Q$F5I@O}_OZ$D5f-6IgkwqCfI<43@d(Y2$~4eA814xp7t0_Jvo;ak1F(<;KM~ zFnF|hNe^EIK6*!4aXv2+E*f+(cQI0N_hHc>DJB4oQ>?Jp8J=eizqda!pPb6tXl@={ z?bPo<0OZ(hf~?u9O_75+{48$-9hf6dv3n4o3HoB~Ae1PDD2~@%yTEUEqDk1Yg&~ef zX}DxfU$9%*ME--nGboI>$Wzr?oNPIoXgqhWhrE;IBY>`w$RtGGL=}drE(vpYg4bj^{w`GT^`y^4)mRNN!CxlhPg)Gm&zx0 z$@%w*kM0TCPJNQj47BCscGq8iG@`zhP_u2K8*rsgZR`!o&Kg!-JGg)f` z@|H>MCuj1M=jiW!!-F9!P&Rhzf^oGOC_0HE z#oLS+nIK3iCAp(!V*ti;-|FYhmT)VW_diD26|uf+>oUBDc)Mo$ooV7}kRGQbEhFl801fm35o*_4-P8@C|ye z#~f|^>M!TTu^*EfV{@~mB@|JB~xLDiXJJj^Z zeRqsaf66_bNwsFqm*wLs+;g!{QG5?(w{mZ|UgQ0_3~|jyIXtHlaI`OL>K5hq#P-|| zVj?d!T?aKCU=?_sSao;pG6v>X$k8M2sFTYh?vJ)gJ@r?*e$-JnFOom9+W@1zV1)*iA*ymM}d z_7Yx~{WGH$x)R*u+T4lN`fZjlA$pt`ZfEkF|75MVj7j|c?H*T^z`FMA^>TAz&Pcu0 zb-Rv!qD7AI$)IjxS}#|2YspO92slFhZ>#Eo>xudKL3pRPzVz8{no*|t_>fkoy}{%5 zjIdRf9{5uggpq#ehl8$$8TUmk{C)=DcznOJ%@p3wI<@+Q<#hTuDfNvbf5$9caHNJt-3u*&<(Fm~}0^vFo!JZcaz17o`1x3L#|{sa$ZB5On-h z3JWu3Q8C-4gzd!l{bV8?@&*zYRWZ(hLaYEA7K(F(YLuf}{57n}@pS{1E7H>SW;eG0 z9a&OPnj&@)p7;w2UiYha*oG@|w5NVG5n9NBqZ>A8ISq!OAI5TFCg>66$GC-ntD!RB zjR(spiCj#AkVY0=yp`^;9g2|q3zkLlfW|`DmjPrcF)_shL{ieJj6I4Q29tJ9&Ko@f zj+6tbcsENMygxMA#QdnbDS)%skOC@JCC6b{@L&}?TS*}h33!j-xDv_|Aq$e|Lmz*wT`eZ2Nf_YBQJW{wEp6pl7{NM;-cPfAytwoT8D$-~% zGB>v`cLXP}id#~mCW4E29GM4HGQiWCvO$g$N9015>Lfa22w9i6ZF|hAq(ahqnv{r* zUid!eSR0&Mzd4dKQeVGF4Ab>s<51>v1{wGNV(cA&Wa+we;kIp_wr$(CZQD9++qP}n zw%w=A)3*M8_q5bD8{>0vNcy$n4zmgtn2RMPyh@c~9DmH0FpH$BEvvo@TN0Bb}{113sR8uOK3q;;fsS#$iI+@ubqS}*X;k@ zh4c*A8?`0mmbkIa7YP&fUuMK&R+<3DFcgrl?jlpT+fjw7IX_=K!}YwRn#nHS{$2k( zmdu)IU35AJI?kM-I#EuB13&|`v9;|CtP|Yjx_yc4Zoxh3@r&6rht*HOjv{|e77Ikajl6%1P(kE&l;Eq}rayAOufPz7U&H@INw$yi zS(VKtl$>hRog&&J<%Xxl522KmKy*NJjtCRwMgAB?FlugUb?I-1 zBL&YLm9F%@6I<}MZ``7ssla}z&Y)6+%?gnfjhv4Rw!cXNFAy7=bf&*do# z@}R&?lNJLJHWaFhgPB~x--twRcOaJXqcW|SQ-T(yQG@!0@s^|J_pZI6U?O8ViV`N$ ziphh(8`DQw!G>c`csBBvj)_COC1jaYaY!XVL7T4y4zIhW6jvKKq2Ls+~Ueqi4?gWPB_;tl-TX-Fdy6-?&_(<&S4lP)>N2v--ej zY!XbL_G}pMsdrnOmt>Scl&yzZ5i!y4_Qu3r{KaU5^(~$fJ`HD^_+Gb-|3tXW?o0Bd z=4oWW*Q#sEQ?Rx+!7akdZSiVUxIEcLlG;M@?3=x3pST>yq*`5VUR}cd2cY5~9Cm~# z+U3g+4jT{Y$A05qR~GHG5CoL8?h69f`T>R8WAyV9cKvP}edA6v#p&r7a0@xqMFTcHIq^5>)9VE#)M1LSx}<83(>Hjk z`H_-R-fT;U19q^Lc3!_+J0Dx}ODmH3enkU)&&J~M-g>Dw=Etcbf=k|fWGnYJvYaM3 zls)s2&qRp`v}>kX5;578GIfB90oxr1FJ*L5VGI=FhvxFlA4bG^P$dY+3b*8KC}Z17 z7Ee1u#^T?eD3}{4H)~@_{tDW{D;ToetV5+frL)_SS5%##HgA`J?x!%I_+^Bnmc!3w z1b$515ywu|9KRBh{w^kFNkQOIKhB>BLImj7Y!DZ}Ljq&+gI|VTFxKRV86gf?XX=XIhBCXVc8M=Ue z?A4r^GaAlx3F2=Yat(d|BhjVg7TR=XTrmINwi7W0j$5dZCx^iZ9%m4{97*wGj2u>B zb6BCEzJ*h?hH>^t!>|_{gnM_Sqt`SM>a>wU{0gTCMQBYiKT^#|I(;SoN=VOHb&BI2 zrg@Daen<*yzXULNi$g5Ph18wSPOmN`Q0mU+m~nX7Plz5zElh6df-wcnXVU1RErvr=Gq>-W?}$$mIgK()dif=u57 zx?myUKn;aD;A|e(lEC9CN9MfFF!)xa^;k8x^F(;-$bZBWP!XKq)6BXlU=-TD2A!Se zuoxAg3o@cGMcFG6WJMRq+@@?iWrF(nk05rI=sQIdZRIf3*>1KvVIz2aJ67iQ+^^1! z|0vgyfuQXfj39a|6h-l=+oAmZ6&$h*SlMSyc}C0F-h+{tNg69Q7h~}9)2nc$_9TDb z?^}Z7LjQ(Fza(*IFikP30Wd-x9cZsdS+Ud6WS&4Mv8u?Odm7!ok1dOW)~uQYvJSO% z*I_CmaCMZ9->?iVXxuHgh{oBu-HGhlMPpQ1UrfKVw`ep6qf02f16BFytkGuZFDGPf zI}X1h=_y-yUxspe-DCoShN7)51=9c8+|jdMVK0m(I=>b}^yQ1}T5v`ZwV*#jo)Pq8 zHc7mt=``spu+NeWKrEumkiB$YjUqE6OEi;)|Fn6s`i^_qj{kGK0AeqCCMOMO#+;oA zqT7i0`F)1#_5cSYSyhauY$6gDnWEXu+X;~J{r7P{`nI#a_ciJ?_NIMI&+@x>-SQy9 zcyld^FoXwSedl0QN3F6&oukupx#{t%#)F3YhV%7H$i-!;jVe?xPqAit%l*(tf!SyT z>Vi_){PNAd$GSJI4sA#S;*ax)VOz8zZ%#k?{=qHvbg2VQh{tZwx~0zVNmsA=%PkM5 zwaZK%nHC_2;=LOpV*i@;r&&j3R|?6O;jNXA9d`3r9MxB7wY_2L7`TWBsyKG2SP5<$ z3GP-{g`-n_To)h3w@vAur%>}!%`?~Mbfm_-Jk*Rqa}@c%K^{v#)%O(t)O2M7Rg`?LR#o*(}vifV6QWcBX~BL9sX zs*8ev?EpPO*L_4X9S5RNdy@i^ZI-!8IN@W6wihyWf{QU1@u!as5UTib^ zH8y*p%Z7YB^`Z!n_yW0%OZ+7t>-`Bx7J8Ae5kzE=bOWtfJL7>{G>Ac__78NnuJBoB zNukyUKmUuH{Ju8rbAXd>!mt=U=&R{qlJm5+}Sze zGsS4~fkdYsBb|kC$w>VEGbWkI@1v!l4yYPRRcp~LRLGu>f!(4*0R1sLM=+GJ!to10 zhO*Wt@W?CgHHUN=MCKuNS)Iap;hdJWci;n0J0HD6;IZ#8yRKmCf%xDuj}gsKv5haN zQb?}#j5_0&PF=6HcH!4U)X=toAVlw1W!C3^(Q{e!LfsDjne1Az{{;c`f2-0O>e=i4 zOmzSLC;T@uE=TEl|4eUvyYCbb-NwLZQbpvFjF%`B8K?q_#NtZUK1eSohxYXn0twh= zxxdLen;TglOZt8@e&|cNiTxVSy^c9NeKcex(aW=~ayua642ywazlwHAyqz!I+>LD{ zT4-9pF^cTNS8ZO&^#Z@CN?sl!NX} z$dN=iYmro^>@WiYF27}-&S+5tlvP;qbj4nFY-#B-SFL9C$Zr38o5Z!_*YWbZLL26u zqG`5Gb=F32K5w|_pT*JWgbJD@c5R)_3T!+>`Ekvhvgs}JvoN3qeksvEifs(=zD;_Q zFii`x{oHi0t&!DAJKSGG&YAXa$?S@T2M2wXy#v8}!%H2n1!?9wdx5nZb6D$XULTBs zofS|JlzE&o6boga&b$|UMSy3X=j+O50h21NyBim}{G&q*umddge=^ci8Iu~3+)a(C z6R2g(r_um{nUNJNgZ!$a}?(9PiOkZ=o zhSG#{`dlG`ZgG)Ep2gCnDU3N}f~Lxp>+_p+$poX+*4ep{bGFbElsxG|T1^&)6adDg$A`3@KpS9y#SKuQ{^MuY@$@8uYDSod zRrwdGO)$ru^j>|Qd@{{Ydn`x!)4}Pt*Arjegl^2Tkc}3*bj@i@dx2L~x$p@87~@JG zVGb4TgmjAJ-pUO9@OuuL_fN;R8?~&9PX2yk3=OKN^z~?!fZ?}?uAi)hc?OAcC_l<3 zgMziM@Y&zQVTlrp42(ol4pH(r#8sq8m*wZAkGF^Ibzj`%#T~PwU4^4-Um_&*Z3GEQ z4*$SEmZM}RRkPzBZSA?Qo}>34A79oxxw-etZ#(>4wYdGTYdBbnZy6Z!_v0Yv1-Nka zO)JmC&sHCcDjQp3G&&;P%hj9XmH(%Q$v<4+`$xLU#oz}i z@c*V;l{syDz>45^?ExhaYT9Z}t@tfzbDiIp)6#8?emb2umOm(30wN)s)k;S(o?uP< zmr?-$bgtij408s?EabzGO!qg(CDH-lonVopOEmiF27rVT>7lF3=fQO?+n;8IBw@yc zA|%yS#_q3%9?gb_n|TpL!eeBB^xR&P2B1FUDkU%|^AJCfxE8dN^jx)yZR$O_du z5sdziY9y=qXssi>MnxcjO9#a&RLT>Q-F}w3Vk(_0DbuQ5fjTg+<;oYCbk_!ft&~Pt zUN{cthMS<9(cyto zWk8v7d3O)^cb1wvr=>g+8)+_ZIgIL~78zyR=cBR(u7pK%TxEwcj;t<@tdQXX)n^ng zR1!Tj5sYd&tzXK)=5t&L*uCdV-=+^{lvKH?s&*n~CA9lax}8|65t!rSHQ0D=%Wlp+ zotD1Lo@CQ?jaJ#1zbgw_&AzWGWo-+1b;aBK&wVcVi@Oz6;ZWQZ*ghM>)hqk6qDW-6xoj_B8leY1ad(W z);>8E98TNg!jPS&Zp-Q?$``q_ETFvEot&BMdN0yo7viwh+scT@Z`~i(gDr*x2T45L z_As=NiC}zSY9nfu*psHs_FY=}JPoO`5;eY4~>{P>egL;JMKeYjhdP$ZA3f6iZp{ zOCyr@X{V(+=ys)(3-bZ>&%Ax*TOJbGNV;$iG9Z}*2ApM>po}*(XR}^CW?sf{vzd~o zW0-iMc7mACnutJ7fj1JqW`{4RPz>$xn%S$BVyD^!fvjLMVczor@9vIn3 zMwktz!_x5$H&QTz=|?4J{V)MAE~DWwY#PBaaC)Hi>4TCO;QH!0i_UKh1wZKtms|)X z1IvL#$#-iDBIAnl(c$?eudEEY72ey7zteIl7=%ZefsF$I$}>$+Je66{tV>1_JlDQn z9_CoR9_k9+@wmhhnqWa>#j{F>WZmA7HH~EcxgUnd&xf zhtwVaNS5S`20|EcHN;N~oh!-hWdb$L1rQ;W%LOXPLyKOAPY;?I*ImAO7xpez~n_?$H-yY zG>T!u_s-&30}$*2?;4z^8b<+zN$?k}8HG8~>Hkfl0KSZl0%T31-#8LGl*+Ccp9fw0 zm@(OKpO0qxrM=-f>x{{dPKT9CyI~qj+w)25?4a{lGaQMtzZX_F=c*&h-|cnlut#Xu z@a_7952f&p_2Aj3%nH^WeCGA3A7#PH#WLcInGMJ!(AT8H1f}meoO8zLM+^9G7xZ^Z zr&WFC$?*Ie%(Y+q{%2wPMvM}VA1V$dil`YXu(X{a8@vCMZ7Onl!N;I{B5|Rzx2U=2 z?Y|@TZ(W-hC;q8n|79a4|T%Zg+NqA%V z!;Cvt?{NGnH8Mgwz^aL5QI{RU6XeGjGt+T{>;0>p?{EBwQ=z*FthCq2(~}ujdc))e z5{!V|;w23>Pw~mls#lbbjt*>1fxin0HkiQJ?;IT8#FM%`ADa$-ByxezocdC4K$&Th zs;f~|$6XVFVx6TH7Rx$olxdAsG|?$XzmDw{AgjvYDQ?MAMbCAVCSOs0igl^`hV_5ObjNF9f*U8 zB*YLQ2*N=R8zGk4D@(iMj2@&VY-sQmyHHWmSg>i=9wlLQN&qdould*NF}76ukSzT8 zI8c3JZ&8n}ZC|JoXN3T95oFhNE+FP)aPc0fh+Kk>ubsCnH-^GtX9CT-fSx;0dF@n1 z*PXvXuAW3K!=@GW?I~Ff)3rz+bS;$V92X~X=vrT;t9B`%SJ|%>_j~9l1t2+xkqJdG zD_;Q-;Eu&wqo+P=?`)j|fHp zIRr9C3nvtXgXD~{$JK(`{I>UWenDRfp%b0X1=dI|QzLSE5d|v9d>+*N7^xcmPHc8y z$04atpcGkf??0G#S1c;WktL=}Aa|#+Dg`I=6{7J(wM?5SR?QPf_iB9=CuYNQx5<>t zfxy?6EaT}yen?;wrSkyvwC)_(uJVs%dnq5`+j)4*JK57RvyZRRG#B@mI=q6eCfJB; z4(+2jAaN4s`}&K2oi~K*+`V34(kZ?eDn)5qLY}^Ta5Nrn*Sf2+T&7j~-I&eypKAeG zg?j0zKXrh)pPl~y_Nk#v8=zjDs{{5l*?`i_^JaU8d2qDj3P?J(6Lliprk_)hq z<@_S$L#FLdEY0FGDOU*(y9aS8@Zq$-c4F_HIvhEiXHMWHBV%%%}lSlvZ>|D1AnPNF$~G?DGHvWO*^&HupVe+2NN8xoCE`5|^v(XrWaTKZ zLGCws?ZWhsc8n#cC19VxJ@49?54(13E{&7KMu20@|>&56byYPCoF<=I)Xm~JFCC0dE zsU#MvUVMFh-Q@f_9+sILO>6pk{Y|gjYDx{4Fa@bNA|(G!J~=zQmV}%yt;0K(T((8d zog7Q{%DfobsOUA>?{OH1r#S24kpzX2W7ZG|FLeEaDtIM=Y(p*SJlaWdcV^6tRX*?j zRW3>dzfH1UV7_xM(Frr+=zaIw*^$w*mA6x4wK9P+7>ZCvfI<9doh-4vzeUSsybEoK zD%!DioBn)bA_-=7xnX;yC%o$edI9t)*`p`6a%-gM!qXxp}#MipKzptH&=R8 z9(rK@EIV91s^&23UHNRaA;_Qzxkt6M`ReU?=v~aRyK=LZ{RKwSKBxL4xLlTTxYCqS zZ4GV3@@Eg1_o^*VdA%iRL}o)3)Es-5w_|<9?T~eIR`U4qkyARM%$H5X0o*_%)0Qny zcWVVjKjr3wIYDsJvekS|D@tt0^#+WEQ zTWRBbv?5X47?}z*jOKY~J4?dUuK)`kkmNiG90vFj2TokBI&b*)nXdrmRTxrj1)d1! z)e)I1;Qi*5`<~{km)#Jc`mKpIgfpd>`hlT7v#8>H!muca7M$R(*U`Uuz8fI0QVLdn zeRKc?Jcz;UHMWUJK1gRv_%8{@H!Sn|`yPL0;bd+=ur^?r`$zKU>0OA1DN+njgySQq zj|4>s=XjxU-?d<;L+{;A(0jAl0H+m~u*}CI^V3b;G=BfMG?#)7)x;sQ%E`7_I7TrB z?5D-aYoQqh2uT@58(9-k_QBh5aNyCsm2OwI%EUFIG>71PcUJXU9$zwN)(+46C~hAw zLiGztkMiTX(?r^egx{U7pomj|{E4QTE-_m2H~1T#?T&Y`&RK~IYg&0im_qMz~gp%f_rO@qXeSpafxKo(NvNn&-MLk#A zv5B~gaxenuK*$CyZk;v~PZvEP{lX5FHp>ueh$%G?w&lw287T1WxQ55tKPI_?CA}8O zps-Pf@`;P7z9J(T7U~*=vB1q>eD5INM|k8!t062%q@D*+PfAL-peWgVGz3#CC)W`u znlkx);dVyE#`@tDI}Ym9 zZGx#AQgsb+%|OW)o3ggBp(6p9iT(u8iRwr-*OBeHW5|L`QgI7RsPoFTm#nu9eTinM zzIF9Ml>1g6f7caUUA7}T)rJ*$6raLD51z_ZVEPqq1MFF_arUqvm^2WwVnI_On&dhtB`Ia&0UNzJo$o?E>xjDKDwd#O zSY*|cFdRLuXtjHfLiYoY!Z~`d-;tWs;ZN1YiuSl5Kt_@-;w?PuoFCP`uG`{G%Fvp? zXub^UwV}`9pu(z~E4G;(^vg|S=OC9r)kRhMHf@W3EV;T7Y&p6S;Vi!~^!aYuTT&DZ zf%u-vZ_-nklQ!YjjzoOttPYt6eRNF=B&;z_N)#l zcM)lrw`q775fMpg3KbPeIA*v++mUu}H-_^p_Ba+DadrONYHH_9>+9-AiBo20(%$~G z-Rga`-6|DSes<hJ1e=ly~<^3N=T=LQ{qp^A@fW_& zyz@TDyvrXzh-c6X)>N0qG{OqS5hFC^PI2GFoxEvqTeybvoUXz^Z&<;1cr!e?Q zh!91D!#EA=pH;_~F$WqfhE+k(m*DscnBm2Ct?qj5FV>Nwxj%k>dmVXx3y&YN&oz=^ zR|P{b&@@5W4_trufdW)YF1!{!gz1 zYS{2z@w4N$s@u8a1FnQEcnj=OesquPVGiaJ_69w0p|M zDN)3Fm@K*cY0zmRe$YTwQz3+)jz?nGKQw<0g`}#W-^8Ujam)}fG;Xdtz3Z3_-v?LJ zM62?u7V+>;=A%1Aagl;0ug-OD92}fsPvXTIv>K|1^lOum-FTsNZw+nTnSwt!Z{0`R zN@sl?3!ZD2PBu2SZ0uI0q{SMe&8GLsv+>}z08B1%r$KQ)k+_~zbTezP(*Z!km7HXoXA?v0qw~Orz#%U+= zR6%jb^Bh7*Ipu+bA*^53a7ZOC>36|k1J}$Cotcd+OvY;c2}>9%7rxVyR^42In4ykV zOeWky-!1O=`ATSa@__8h97_&DaNKbW!DG+dmVwo2BF85A;49w!jVL}Le-_Fy)IAL1 z*9Eb6CPfPU9bh?)$f2UB&kBd5myaDXDv3KXW|1cZ(V#cOJucnr@e0XrP#)VZI+btd zTrO_**8NqmO<-X|g`YcL?8A6j4OtcEkD2A7tyCMVEbmMcaCCBTpE{o*SWDG8swp2l zctv8K(Xb;-rdFj{G3z2|7>zaF$dU#D>+Pq`g0B= ztrAs=4RH&qqZs!B;oDbAkvcm8ux+jhsy467jBT7ZX{r^*Mo7|>(x7KJHibJVJ^w0~ zC*3&>lWS(?Y!R__`_*nIM5&>qu3hItQb^u+P9jnyIO<|ZQkV0GaL+*sE>c5D6=FjW zWRj5@2;^dn<*<3ZomgBa$<0_*d`y+{qhx*ApMrUWX8F2Si+R&#UF%#eKsV{Np^pX0 zxAKNm6AibWM8~+QqOQgSlu)}h#I<=7f_y20&#}XF9S9lh_91HHPe}fi*Qr_TPnL?{ z2hX79f8&$cS^p`1g@N}gR@U=X3o=JRFw=ai>FQ3D=BFIB`91B26`{J{R z{>BroJn+Hb^|%dVkwmuOaw68+Qky{S<(%($s6lcQ%Of^H$^2-qpA*2-8xsUq21qH3%Z{@4Nf@*v!6xzG#wU7uThHJVeWpI zsIRo{vf{;q?9oQU+Q*v{Dm0R~(O>CZuPzOeM0ak42ELQOtw+!VGm`|x@~L5}qxw+u zk-^}guhOv7+H&@}kpdzxgd@|AyGFctj210P;B2nlS~*D@S+keBSE`!7HSJ0{=nl7m zb+(N%*DY%ZC|N$8`oB+iz;pvzXZBgsq2l*|uv=+$t&%_Hbc)@;8#f8XgT&|?X}a!J3HR>#$Z2l@US?o&E|5PkM}>Ytxca+3MK%9WE)0GXHpdW zwVArAryQpVd)YEL(&|&h*dA1DL#D<|(Sw%?!-WKdwblY%8k_->s)_PB0zs(-J@>&= z|FKkL|_~)sEtu$V~P|SskX2ia;=Sb~GGhfB)sIt6Z!0 zso(ula$FSl_m{~7ll;oIcb$e0f+hTx5TFlr+5xrH2`U)u_X%hT!#e8D7_cjB}%hnXPDtnV~vWfdAx{Os{7Vd4pVF-~<7cE6M7uNdoibS2Xz?DEUY z*j>@pYk)Rw(|E~1Wh_J`)fCV8@NwemrK+!1eHC44(q#y5nMRWg#JUEwOHrNZ-)~>< zh-v5^E-V>zFU+XTmoX1h=H5C|)xkB!s;LLM38ZQn;b(#sNGOt8+14YDg0?44N@eAj z50*(sg_^n^w!gb^=$x2=qQVp*H;G$Rqi603yN!}LjZ{>MyqhH1m6&QGTspW^i=yOY zw0f7YkjK)(+Ka?RIg4Pw;v5G0YjlqSJBQ$;JwUk@(N@%M&Mf1-c zYHH|Yrc;}*Pvz^KJMzV(2V8d9t`>-|S{fyseK=~0YoVDQWgC}TmPWMol~Q%IPbs@` z+!|_*>i0{iWq{4tN~&g3T_Q}0)d4TyYVkhY`b)}Xm!Ikv(6;2-(E1{kEttTB<7aZq zSaxouDYYy}S`W8A*{9uU@mh_yAMG~`(N34({IkBzJ`fJZnWxd<6R`c+_l<{`qoJJK+{iMWAU%K96uNtuWvD^SgQsUicI*s*Hy8FdYY;4Rxy z;sL=+*!u-gL={7s;VcB(4&^IO^_R#^!QY+;Y;)}}7b4oD%`?CK0BstxN1S+a4j$b} zc|)AI_1R-rj}1dX%V{>#Y3w>*>*Q=&y8RHOK#hui#-ixJv{3OffIciyd|@{hJf za_c0ou;evzbL^?(D*eXCXOm8Km)z#*7m58|EYWeS!hHCs1US*FRsmKsge7D16635m z@gR17<`8zYh+rH+3z!6!JYT{x7A1}wi<-vSJXTNS;hL|fgIT^G3y$6$1hCfW0Jka6 zOb^A@4+*Apcgo(g8!pzX#)kS4eB*Gx zfhk{R_#ilAggklCcyam!qzl<%Y~rYz&0jh*S6XLe9hwWMkJ4&QVrmaz&Zy;S!IZ?z zOX?uRqRfAiCj3M&tWd;u18UrJ-J* zH6L2P$@t74;}tF~4I3k=TB7rm*qg`&LxsZq16ksxT|c1f2MISL759{m!-D4fFL6Gys89M;-Dk9Jj4MgAU%K-`ioJJ!?2{~uvl2rmIx6K0o*1SAGT8EiC^)RzT<2-O6EB;6anxb2YNI@@y-T6}#z+`R4IIW$?7 zqvoQeE$r*j_xf11bjRt(b?ixrMnJr^7X=ytg=u6oE7(s!jB!rC1#bUWvA68Jg=z7GFdjdq%*YQ(g4_t)gnt&=ZcWR5(1^C{r@R&50^x$hAT1PbE?68yC;?Q&^^BxT zW}+U+YoLh6+ckh|04__ru~nMh$yLNnS8ZTt0Sm6Hi2+6dK_nUIXO3l`GL$bVEL}(r zNe^jMz5`Tbi<-EDzYM{JqA2qhxoC?Zm|F z4LScdvraKV<=wjD61-e=EkDlEF&F;`j^Ywiu??KUTUeX~!73Q@4}sW-A*3`WGu3+^ zbv^y!n~Zunb?tfO_Ktotnmc*Z3X<%NW2o98rmh0K?kG3RugNfa0dlzgAO`{BMGPo7 zL_^M$ek(T>b-4mIH4(8jf7$88$^q=6j~%hvBNu#BJVZt600)F&C}iTg08OeQkN^f| zRVjq*E>Q7TM-}HFT&VJ&&!ZQ8=qlsWpZ(bMf?MeasE299*@GbalS85sMwO9=1WCT4 zJ?(Y1Q*sW#1uu=O{DD^dO-J){tHyC2OQiXQ5idkg(o!4~mIR3=kcBz=C-?>b1gu9J z71tnC@cgji29#o!Oho^>2!i`q0+GT&5K>qf1fno49TlZ8zlhveUhtI^|7cO=R(LOe zjz_+@&Px55?3hSNN_{#84|syJ@*n-*Lao66=1KuY3Fogt=*UKE%{MoM1G_k?9i!?1bKX^F51vP{W^)XOTujw+gs6r_>bDoDZ0DLEdSy z3{)`i+PHFg`u#d6X7q{nX%#VZ>b~;Q^33OL zz1b6AB8lAxv(ySGl^5v^R`S}da>3f&4(j?Xn_NuE7x=EFl&rdLdrYX87F6w*K{DkB zT2*mGdkd$miW)0Z0jm(FOXK0WL&)Dv1LQnK15}L)DTD-qAe01wODIACZCEA@WAd`m z3UMj_*dj8A=!$Qa(*n^YFmaCtcy5E3hu#8_Bci&y@V2S>8@>437|TpRM zpuOcV6U{1KYQiQOK64s2b(6uz0L(6aHw}?PX0qaUwcqEu>&jy>3!u_{D-g@NdL24b z8Pqq5%efsd}ZO;pxAF`a9v z?s!v#PucgjR9EmvS#fXo(TQHI^!6;cG@vfr( z$!G5_%_}N~CVUmu$q&=#%`5G2IhC-}tWNt)70p$bwW24CM*A=lMO9rUa;_qrOml6s02xB#<8-dNR_4{rRG z-8jEpl`2`{RZ?wMW2rj^U%bK$ciN)?e1sXUakE7$KgXn?r?j!1S(<5cr6ZrMxAO_i zS*0!Mq~d2=yCd^Fp13h49q$~{R)h+BIV`rJtBy;a<>gu;cRI6rY@0DU>W@p&+`cI3 zU!qlMS=2!hofbXJFLlt9J8x~an|^(a@Q^jD)s{Ocd7gUZWI6Ao4G58h^az}&s2Z9V zX{Sm$56pK^@GzSuMJ{BMOUKag(1Qe5E^K=t#{m26H5;2vbHy-@`ZL}-&{=BOOgmXd*Tno-=^>xUddC=viZ%u)I#WkOyJ$+V3WmF^iUYL@<3X#R~EJ`CJ zXT@dpH(E1fC&Y1O3%ePHXXc`+UC$Ep1&Rs%YV{iUpYPmfDV9x^lj10(S9Vz8`iv@K zn*q<`uwV501`}Gi0PNEpBHxMA3p*jj4X~h#jbC((>tHekJCfOZqKW% zuzAj!UAde)EhNgpGW^j?(p>V|T`(OPqsRa6#dJzcas= zYOfhmG*>VBjyF+vqY-7(q^wi2q`C!T+9YA;OF2l0_DnoGL7qojd){u=7FOB?=r_DBKW8u+fS6({(4Tx^liv!t+H1nB*ic&N~(#hu0J}9~S2w zsF0LoMY-v&ye3g!zPZ4;4C+uG#!Oimu5Bl5*$6td&|8-n4FIlq<>*>b=r%4JnFfa?HS(&_GET8wx|7XlDq37Gw5Z^StqAoKNoQH&pTL zZ@!ax%;WdyZBmnfdMf*EgUnw_EaOe&?I`~|`Ti_&H!eF;J!Au!u7{q-;C{bsyydxe zT*ld$Qg^jVdE|DQF+|dG1#&Ury4Yf(oTCmdy6VwTrIJoXeg^esMb6n+nu>M!N3W^&$pz=bt^EYZ=C zsbj?x7;3E%gG>Z{Z?JVIa5D|UZX^t0Qpj(1zYL@g!{=i{CVoHM=fmx38UGdhNbBh@ zdJz2`!v^PFAf+@=gh*&g91-U%jA1BPSZy$n9~M&D;cPpplJo2SoO5)f-amBK`BGDm zY_z74_joNCEbd|aSnaz~*9+v0v7fo@Y%)^ak89KJ{<=%b1{!B@H1+BgF`^|W_6ENO zulmT@@$)w2DHjKFi*h+O7MOP#oeKu5psbHOf_M;3;i77A!=kbp3YUbE6AUX`z+C>j z$xTXJHlvid`pVrdGVtIS*bg^wWn+3Z@Kveo%@xpxfhsT^og+AOy%aAHhn`1tO|qyL2RpswF>zhOxJ;>iraRG5usQN8JkF3L?!x2JrU`5Ov5>##Km`M@7H<^-evoCcr#8nAYg*V1bWoP|G&)@{u z1qU_9dSe4cD$<}nQ@v|shttKo%+OI`MWL#x)!RCc^O+vi3i`1)2rN*WF0~Pgy-zR( zLV(f&4C*dASmTLgNs<~t@i)ql;7^){h;tR>lh~@RG4#HCk_~Q2z2MlNw4tdXc4ppv zxZ*=B2QfI|^-9&GZU3C}OYDFO?lrD$CV3?(S29J*Bj3WpY^Ffe=u1V}`BeLl_`#48 zN3E*k;?lWN2Av8PcmMh#M!jSP^nn(@V#?+-NuEAyA)5Km zi@(->*YSjN?RjZQjBI^)n;%*Z@s`{_G zWI5cr=G@k2N;%t?dB)R}6$m^7NLb@U8%97TXK)Sc7qQNaXgftDb9f@U(3h!Zddtxb zUtNOI-dh%4NYs7lena&1POF-LC$Tzm0XB_u4LJY~l#AwlyduCu|yOVYX1(LCchgp zUD~nP6eENF-pMBN&fL5x@(abE?9RM^7oc6Vdf%Rz+N-be>e`HP#&lkdo=!Z^#93|E z-m%tDRa*v|(yr{#cSGPV4L0o*9$KQ zf$zu`@c$8ZPT_%eQI?Kv+qP}nwr$(ClZtKIwry2dQN`Be@1AMQ^mJc*=i<9R&)Vzk zz1KT}%@t6JZhCU$qnAAR)I|MwFId$NF`f!Z8&z($sWgNUCb(cx5)zHmy{)az#gHuv zl|$R+K6PH^#gaJ65)=*UQ$pBG>DY*JV|{ZV0^1%gwU9-bBQR^w+Rf{=Ac9Q3N-Nap24^h@M?e z;Z0>$TrnW(X&O{QV>wFlnrpclSm;pZ)2dcyyk2^l90)+T@k#^&0F4ngrA5ksAg4s0 zrPCypyb~v1c6jfqmEG`*3hg~%Wnb4VUYg}5e%*3L!}aov0|Z1W)O3bir%Iy|qLW#b zS`J+BVM_uy6r@Q}5>=UMm|w>YKrA6Txf7lF8=MRgtnr{QCoxLUhiTC^5tw7!Obis8 z`g9j%I{GbgdJfkWt3#m|xtou?4NJ;hIZO1ssux`!8}cnrT1NVJe>~^9^NhB-5`C{$ z?n}?^D_5eHvsI`-P^fBH(#aNuup^dO1gGiwc`DQh(5X7~NRNF>=3SbHyhg)$@K#+?dP1uV1bEgMabYvnbiQ6 z1T<(!8Vg7?oMpKmp3ca41+SC)ls1hp}a_fF4XxBd1Y zyg6sy{M^nqShq(1uFKcgIErzYLWKXu5Zngms2>&xaV<5Qp*of{29LqxgG&ek#tDVL zHn4aKizc2O?&$FhGfNcM9#Pqtx5U8$JOl>0Qwxz0UEha89E{AA9SvXQXv-U^ec~ZI zJXzXT-}}J-&t@f1sD{WI?}vr74FEv?-gC9}8VOvI{BbOb*Rz?0GIDu5F!1{N`qj~u zXLbl2guwUmd73wSBqBc&P0Aog$^Uu5~%#!XzF-M8nHMUxm?AItUGN^?9Y^S#hF)B%!53X zY&+0_aiQ*Q|Mk??_($nC2$hRU+IDzQI5_obm3EQHsB?)k`O+vKIijN?KUvt@m;>1k zccVEq;>;&@)TtNGiez-i+aMXC)ZFN=4B1L%2Rg}AI_$XTOlJo+w1T+!#hX2F^z66; zieLIMqe^l61UabSiAWu9KK087mHkNp6tCOMt`*YoX?BUp6l%wZ7w_YEA5j)O22O5T&N zXv4JgTeh|)!7QopMWWavQoee2$x8Swwu<)+6GGmRovJbnr-AXp&~F$nW5Wd*@W2K= zFklW11!BSl88IW^|2e@%Ob9O665yF&q9zz9$UYUj7fjyQWYxid1L45Bx@~84>>rr5 zeXddY{kDSD#DMgNh_U8>+c?&X^2jxnXUME+^+<|EE0f;on2)f28zqBmFTOXnXP?a? z1sK&zDkzqkK1(H_kxz^lM{r9!Xj2)UL^fYb4(q-bmT(tc)NYO*(7HwxS*jfEh&ICr zl>&{TH+t*0!qAo)>Bh3DO}04+E;O*%Q|eG8#&WysNk0dJ zl*m4_uNSTm5J`1f3qxONLGA>u-$4lo;DqjIFKni2ro?nXS=ff4&f|{Ty0%Zl-w8b! zq_y?}5T^b1DmRUmLtSv;7Ec2#Ux`>UOd;V)W^{NM3_#t`K~qhzC>9|UD>9l3{H+fd z-0z7Y?o=05qlymw6N0fI`$vR?YIQ@bW9AV%A`U6pE=60<1`+CqnS#_5%cZ6`%DG;R z?tnq6Mceu2P#C(nu@H%>F0RacoKpAqCck%m8=3_5{8Gw@)W)8+l5^jd6w}+qe_ID3`P>$=Es3^(7pFRcA z%T2j9x!JTntm>SPT;>9`^8=s{fqsqNTPnrvUIlweH-_%(nu?On z;#on5pnGh9>h>4&JMf70Bsj7!=R%UW#oqa%cmyHM>KKd1e+CA>x*a`$!kxs!a{jF! zcf1DTOo39jh-?sxFbqOi1bQD<2kYovY-e|xjq~3Q#BmZn3L#nx?{9iN+NY2kOGIf< zj&GQ>o?X%z>)*9}x>W3shJ&W}Lcb9b!wM57$Ws6ercNKFD+=syL4 zc0^X&48&PQ=WKRr*0wYSRgE87e;pc}?1R=ApqNpOzz|aj7}zAVrGN?*>ZSIbd_!LB zTDmG?-$hqRw%~E}0q;)+_QILQ$K(VZDx_$KMv3fy{@Hrq8-an*!9Y4uf*<{^6)(Sg z_ddFobN7(hjWq~)1rn$8)Zr+!P{7f296FRhG-Tlr&afGOGKD`99@vV z{_e<$`{?C}TDljX7DIuLCh{S-F==;m`MpQTihJKa7%H?frl%`Al4~0-cm2l*m1wfav2ev02mv2W;DZhz1Xf%I z8z1|KQMkoOaNkl8;kG~E*S?u@BR9e__oRk6Dn5Ql7_9OVH>5K7xT=6aE`7V0RPZqo zL)>YGXNtjqT?*Vm5-!3yu5xwoLOi_CP+0Lzx2c?`fX@Z5HJVh+uP4aF z9>Rx{rH!#?e)~{_&KtyY-b<>k0l2;BNVg*%`bEoBx#JYbt$091oAr943uHB(_DOH; z?2B|L_w4C1E@XxeL@86Qx!)@};v>V9)~D+!T{c=zb5qusPE((n1HZ)y5TikmO+6PR zwh8J2#Z>PY;!B$}wkFqBW?dNPl6th9)GOw4Se(DU-mWg%?D=Wt!9SZ5?BX+5@S=E>?5UG%2dHOr?0iUfIz9j&WtAdUsc0RfOK+ zjaE`G6k(gK>fS0U(_fU}<>t}gY8mCTRa)a1?~OiNaa>}ce$!%xTeZVu;XK+!h9#8# z8?S3s+#KUQ)fk#~v@t~btLO5EK;6GSL`XJmzMeXGm}!KXL~tb2&d0h{%J{d$isY>@ z-7JNvdA$P1+NtX-jIOCweM_-bWV9rpGVF0ceK9wxL>>S=&Q_WKFFkcBbk2z4?!3RJ zo&A}X${$PJLY~%|rsujm>a0GmldKlxixDj?qEk&XWt1#89n4tR61Y`rulhwQj)j3i z*FT+jV1K`uH=P=<5Ms=ZcMyv@I8q2vw-qD@=DqP8vIw`!)*X<-zJ!gNHB0-pL5pf8 zKBXBlZIx4I@4uTiV>N1wpFdkNXfZN2g8Zi4-V+V=$`e)p&=ciel+AI)eDTQ@Zc`%T zBO`LdrgMe9zywbY!Qg4rzhaqJ=w6zV5pOxPlh?6@2TiGG$z9?4W|Ipr$@xzG2Grqm zib8n<#A6JV;!b|p&c#?8nsosa)|_8!oP3|9OwfZPH@AfQ6Pn4XOe>YBFuH4>^^?_@ z%@Vuqe#1;o1<6Ezy{>nGhzETYN_VG2I536^0xF2%aDrT!I1G4dRbjfK-PtPj_jrou zt*$l;T@P(uv(RdeAuly)5E7Jcr6UZ*Q56Dqqh|vrg*zB1-g7l2JDB$!%>y0Uh&Cy#jO~PoDK(Z>-8; z4r3I@)e^bWL@F|AS0|7U+n_91ETl4`=#LU)K4+Ue?mC>eZA$1N`2+qsuC*_|W*_jj z^30P=!Cyl(ZGBLT@Yi&;UtJz?b8RCTguNq;@i_C=%*xOor;& zB^laX=8Dai=I%q(Ga462CIV-wySaI8QuLze&donYm$87Ozg9*>3~3uDlu-7X=5*cu%A&c+7yTLFwKE}jM$ObROj5b*{l#zaDSX9-MsMX~#Bi{i0ZPflRzQ}o=Szwm^g zgZWeqwh$ ze|I}1HJ95p??xh*t&U!EldFSsGAMGzrvmQ|nh^y5UdqiOJzj(kY~zKeB-P1lSMtbIq_rT5xo@xD~Jq!qDM0oLI>FAc*zYcj#4$c%T=n;$yS9)P?bBs1CB}DGG*-j2M^6`$V)>_4mUzFK&Q@gX|>Q(;>DJqVM(l;;-$kmqL!AyQz& z_Zs;OXkt)qzy$tp$4eWxTRQ@O8&ZrIkm5!mVX7ws*Uq-qxCg(eCa-oYPFHBg%x@B1 zY&bDKrsy}B99RKU-J{00#&wmUu|u=YOJcequ9>TO*+7;n} zK!#;mi5D{jI>0E0I1-mVLKNBm^q_p3Je&;OUc~F76g+2sKuNImTO_goe-C&8C@RTs zYS5(K?uaMEU%_5*c)0)NfGBKdsYvuE}a?Xg*&fL0|)EEb6ffe239(xK{2VT%*__bW=P)x0>M*_SOr{a%M=6 zAVyeFU$|&jaP&0rw<~$Uehgnu{>!ya%-Ud$*tkIT)I`O3do+kzs{i5p{^4rOoz(9+ zM_G9QeG?{5z;Q#v?P5OH`gG6Dt9JayVO`Lo4dNj%?F8m%KEriyfU@xh!w5%p>b&Nz zW^WAR#AgAV^{W@sv+Z^Jd;8Rl8cmJ!e0qG`|9NR4mCRZuF>89cJ8QDS@7(q(7f5+( z@^?%6Fib4CfbC9gVqcb{q)kxPBOrB*4diNZ#yY|%gX(DLJ9jj9&ANrMyK>E+AG_!Kv26`EsFpX3vu(sC zmGuCkYh$Xrytg+w!v(j$Ak8TEBGpC-@w9>&aV5i_F#irXclN#`0EnXHCESh$46-g*q#Wg~(m5`kpKf`sx;5-bCFvh8!cg>9uBjB-YCxqcb@M$u~t z*do;Ta#)_utXlH#oQ<#6S+)zUq%~v-Zn}JMK$1LhJg5%mVFv8Q z1GT$Pp9MP`w&`5gNxQ37BPJ0-LLh^^tT9wDAtrc^1$G6+Qq8o=Z!dp;?rmF9(;E5M z3|Br&Y+J>mQY2RsTivgoNh2(t*r&{oKBqSuQvvxb%2}?w7O15<^0u!VjM9?zBuP>m z03uDcifL?`V^lD87-&|D?@@A=!$wrIjFr=UUgBp zX8h5F&8IUWQ*$eq@#QP!l~xz$x8enAAha{6hVB85)LOYTL=muUf@o_DHmNd_wLpkQ zataYCB2+0*LobgPzcjm+wD_63)CT43_e3soxu>MVt*72=GG=?(x7<^w-m$g`S8mOy zlf1Q_8qve*{|=3n&TYm%^(}ff$zh<-;Z>7Y(%>U#R9Cy8Jr?eBf!=TPF)gKj)rf$u zHHLxdi!2G8u1;Chvc;E+=-Iv_UZpn`M>D%Eqx||qbzDKU>i`pYZ00R)|OkS22bS3Ty9RL3j+=R&TS%bxiW&?LOV_r0MrV z_}-Ocbs4+8wPt=7OBZ+}p8ub34@93&EtVn?kO zyUb~l*s&bBH?m*?3u~(AS_;y~zH2(TsA9N_02I!%=$h#Eh8MSn_ZoCXG2+ps_2(v% zBRi2I0{ztD!Mnek(6N(ZU9OOx(?r;Due+VPZi29ReWqx(^kf2UjTzo?fJt(m_L#SqKv$G;wYjW|VV943QwD)Xhw|x$dhUWH&Ay z#8B4JWw6ax#`m`dEDi_?5_`uwOnr2!w;y6VuW$}JZM|8$GV!ieAYoRekV0~x^i3+Q zW0G=n-N;5 zz06zWN6N8r(PnWrkTHZSW_R(${A*h0W_K!FMQF!x|7Hv#l+MCA zhvWxGy0q)0=Yev>v*ud!Cy0@8qROOi_na%Gmda{7E&bL?t z_1`_203jGom!o&FkRrl^bfep0MQ0gW0i`!& zcsu^3zas)uY{bpV@Nz2H3M)L;o1i zV$pUi8#H)b!~7~$Pwg69d^npQq&@U&8K#~C&;w4qmM<&(IfwPnVI7LQk1c49OKl1m z!I!B7^Xf{9NuAyp++8maQGXcwW~pZ{I5Xa}#(kwQXU}fNUPvGisA;nP)#=pkbze78 z0Zyvn?LuHWQ=Hx*^~6d~Cs`qIdR7q)@C`VIKRNIP>i{2Ewh9y0d>w}AY71=DxK3MF zkKS?v<=Nh&z>0rjBzIs&Gsa5qps%CVAx+L<19d0^i5s{)Ykdgv+}{|gM5D7=1ZZv{ zmTJ<-P&+Ek2hzY+uYE#DcW_(9EkwFzcl)932rs*XH#|ruDU33n31%!%$?>365PNZR zuN>|UHb717&MTVody1P?^utc)K;(J8+s*Lr2e{5)@ZVM{C4>q^`K0}0DeHrLogrBR zkFjq+a)(ts-a(8qqPhAt@%}QP@P-7sMM#Y`n>fisBBiy7>wnr8X2e;ZD>a1*N&JFe z)0#XTiux4#KJa(ea~6mn!nu^B_i$$ENSKx2CL<jU3~GD=~Sy}Zp4Etk)}LZlRuAFrpq0Ci@T-o14`;ID#RgT8ED1N zL20;~*<*+z_XZSsg3j6|C3$Tt+=l>7~Qe?U_75U>%tkZeYLw&nwn^VpHb2^FjP zw3!8m!H7|PhQKQxBV|wv%?gtYNwq@C>sQ5>ZOB^D2yN2X2t%FcfyO|Z zc_=L&GZvakLL3je6PTtV?EW?DB%8J-;NHvHF-jayVwVsGaE%0}O-;56c{OjIB2e<9fBgpK%25IPgHdu-?c#=B0@8Lcr~mv=~v=n~sn`%A+G$591ckxCm#)03i{W?`T z$cK}XZ4i8B^HKu9W=3!BZ6Y)7JN~L#eeg`lbDZMKphQN}ZPk-}#%MUyIhs;e-hfPy z^7jg=jyYWodsm%lL@J;By%|O7bKzbdfhqL8WD>$b2Ocy?B&H^6f2WN2Df0qb12e z;~7%krs)+}(?ZXcVXOVm1C8SP;`tKjH&A@IQKsj=tTZXgr|>+6>+=;TqOPtGT20x( z%%`Wjp4T5AjaAJT%wtyvxQCddIPx0eyHk?zl~l?eJ0q2RIgOZwb=G`}bNocT&QiQx z0!d!pz)372roY~Ev6IH1n+T+k>7f7xp$LW2>k7H~xl&bheb1Tm`7vgMs_;0xSln68 z%MJx)d2QDZOtkuHNj@GUp-le_1t;?@Z>AF}P|KH_#%}3ksWy%@dqyVqoG)@wU3oZ6 zV_lUot4&h2tv;RKjo*I|lr&_GVL~${f@FtQq(>6m7m*ZBSycGmIYgt=PRYA|^d(X6 z{_>%baezN3v^ve^x?TX_PSj+uQ%*p;b9ddtnm7&>&vy}~Qyr9^`HrgyV{ns7Tah_d za_;g3TPmDI_(hLE>Bl$$Hd%^3x3FYJ(W71L3L%P;kC-6WGu1Yio9-^JKmGMEOHXfh z{pHkk_q~R{{!$jbYv0G`uZ0ShtgL#w!qw7ZrS$*~x3WrJ3hGSj`FwYLsV-j(9(dND zHHv)GPgmpj{&o<*NdQ|GtOnipnos@qWaa>r>iWbZmLYDtS?#$RVpxz_zu&Qm0lU%2 zSB+I&R)c!dE$%{mSOJ@`7_DD>iZhXA&;!S$uu=9gdKpeQV23XAT1lJy!_=E4`mHq z{}cQ__p(RR=`25f5)Ld#0RR~PyI%IctX2M#(dlIB=xXZh@6aw|dqJ8y+Y-wJSw(Bk(8m*xRfCCkPeUXJ z1ds-U=2TU@{bz3Z$lPJwsTugwpG(@SucsazO&>h10Pa>w4EliggCzn!bIvf}r7 zwcV_rUa#ix$=7eJa~Suv&tqSGy<_&Fc|Ej|ot>Q#+&+uWiy%ayX#bC^tGeG{b~~P$ z@j*aGn6-V?S$$pFf3(pJxW8K=?JyLN3Oa1FTyg3DzGv_UO`V1I?7w;(nI0qP!9Biq z>E9n`(P&?`iAZQ-DvBJx`RUfG;reI@^FLIrB$!`MdGV*47sa%6g;jl|t7fS;3_;7h~ZU6J+W)2q=< zrDwnJD-X+S9P+Fpe0P2tdc0XG^l%&gyWa@6!X?zlf6MFgsH<5wExUCPTxe8vo8i-u z)!u(A+OXGx8f2vKU=g4gt}Scpm|N!BqYhcy8LADxW4OS$Gywz>+*m&rfitC-F`0`dN4e$YwL z<_lNs7IU%_r-7gK@9{CSHa;!SrQ43{9y~7CBf2X1_S6NWZUl2TPLEPEEfL`qrC zvZjWFe7D}b_^!Tq&|PT*9lh?>#V33}GVI@n1M))wcdz8Zha4!#Jw4tQ7xJ41EKTl_ zwYF)HG?AHJe`Q|P_$Pk40dE|5?(jynh(iV3gC`}@$3tHgVpLhFJ^iX;GYiOg4Yv_k z&=8^i!}LRScly(GQY&WUq}+OVP~hyEmw(~#I&YJPPs~|6hH;f?9AbTr%8U}TlF2Ad zBRTtaq@f~C(PlN1?f`Gd+kZa3GnS7vF#EpG9hbI~s+#IKPNc#>HSnmpmoI(r?Sz5v z84h87p0V@WVFv~xUz`qo&7y^d6?c}kJeuxe^>GR4;n(^=`vC1R*r@C2W|nw-Wfnvh z&177%`Z14+{(`Pzo>C$r<3b(Y^=}E%w8P8eHR@vFk zC2I?Y>zL(~2}U3XrmU=9 zo@a$@gxp(1rAvy~cjkIb6QhSj#3XjOmoX#{tD2;B@+z}o@I_-Tz%185!(5Do1RVu( zesDU8Xj!rGWOx3;x1xg z1xF$uq+u({YQzWE0miA8dAfkRAOsnQNoUhQD#2I-Lp*5O3xX3rom}hY_w3kpTO;D+;OBM&JQ1Jwe~rq0t*(D11}gw zgsP-~#1T6z78!U2VUXR;B{1)0Lje-_hZTK*BE-5LD|ndeVBH6xY*V8#K$cke<3V6(9VHIU?jr$@-(|TQ?qyb|Rru;p}zKVl{0Be#WI%kqn zA&r%FwG+{#2n+jtak`zA|0wSO&R{G73&*8hDki;SzZTf?w6G+35i~-LiyWeHC_{qC zJYI%u5|qg!b4jnAR+%B}IVF*AdO%F5sBFWCLW*INwZ`3V)&|DEF_7yX%tAaKh7^X= z+L%actiK;=*5B^*mET}&noEwry8OX~?uJntfh$5%WwHR64YBnhVflxp>OHl$*;Rau3h|T$K zJ)<_o)oTn{dxvt8GJ!!e6I3v5s2kA3NpQ^s2!Yu8Mdl8p`uwebzkHz|FFE*a>_#6f zryqptgWBqO(M9dd6{p#M!Tx)h@lP1|hxuOV84v)#=1-|X_urKn|0nO&M&INoZ1N{g z>ECLM{}1_KMpf5-i2=oTude<>iEM$xvB{5;QivgU6bv`nqY3A|lv(=9psV_D&6r)6 zTZA3sATXRFa;~TM`2|N8y>4|1%oq3~Wx+<~q$hcwv)z*y2!SojmepRX0tTwFqx?J|k- z#3WKZjV3EhW7y>B#!SW-yOdsVHct3Pmp>+MPi|jvs7GZjbko#(AlnX*Xe+S#?LjWq z*gPT}2n~-KJ=Dm(DPY~u8iS2M@6dkj>S?s?IHyi7LYy#QPDy1yyS$MgjJ1?8l=9Ru zTGl?1KU*0Tfkk3^kx14})L4^$BWL92==Az%$8%T71T2qH?U&u_n_P0h2B7X7Z1FWU zL0dq`tF4IF41&_M`K&vQ8wjR_!g0c(ur0z)3E5}%b2ZT*`im>Ybc&raln9S4QlKX& zONb6F%T&hc9o?-w-26Jp5dt>EKvWWBf#1<4>UjS$K;~9~9T}$Zz*6gCdOk~>EB_=5 zuv8A6kg~0yH{zXCD|)q2v5uw`rB&-(BQ@@XGT^ZbObo2t`0%so2=C1Non!#HRErD zzm8<>ZKZv6*naQQ<@`RqaV@dA;f%Kd;V`GU15*vac>$@wdbK`QDB*#kxAoESk1Qmj ziF!W3pjDqG9>^jSvT1|8cc<-^NID|zK{ z8!qZ6^HCPk=R~0B`n=@hyjvS`&1F8_#L#yaS?x)BFC`_ZoEbj`bk~XJz=gB?Sa91a z`@D4aYq52O2QQJSug;AJ#qj5?*HyW{p-S< zgY^$Y#KG0(XKT*Zv;d z>p4RzGnCBfGL?;#a2ne>Y5Vv3);QpypNZM_f#r) zqL~vMnfia){s92|aT{le$(qY)_va823a zHFv6|yXWaxYA!1)+amYDE`y#CkXZZrxLPvrMWOa0E($_KuLQcdE_`wCMA8)MC_mvJ z$vz21ql#CT?2h}`I-OQ;o2+=F?HI8lyrV15&!sBNqR(4-XOCjqN_ZhsDCSph;`!Mv z^&ID=*9t?`+Y7Hx(5EnQ0m&$L;qlp3^?NjI$XdA!4|D!Is!S2d9tnv{O24Me2y z*1NCW2wKa!tHQ2 z?A%vSO*vJBz*Am^6lZv7ZLly@u@Y9@#@-^gEU9A4mAb)*$Tp34QAG(Ys7$Y|q)Ztd zd9ZyhQjmchLpge*RvIQeqjZ*Ga}Om%kj}G#R#mg+UPy^^{SPqKF@0ovUW?4AaHgp~ zzM-(ARtG#;rh?-2(4&;ta&)o~D?A!n7-bCOl9U;&{d!r9iD3pEQOQ(?yL$o>QI;j` zW*DI?Iwl6B5?DwJ*h~}?i4~fxM~brkKm}7mA%A1*pnEzSjRut{0JR5IGVe-rAgBJ3 zO4#6a0ZwijV)SP^-eSQ-y__>?Lg<$9Q~HxlmL5gXV^iDycCcXfQRai?3BN^ZxLvv= zkR=shpvpme<)Co}fD8iw0+i+$Gj%xuLi7U_Cz`P$$oJ3c*VgoWYXzffqk&wapiS*h z3o~pMRs^HfWi|mjBM|k2d;+PO`0oTo1h0S_y~M~GYyQ{NdNU@;wPgPJ+AqpxQzs!L zTTA~^#Z<9kNn##ZtVH5P3G1k(s>jNRwl6EyX*3gJWCiqL(#~tAV&bf=G`NXV4zdC? z_l~+OVaRb~jv*EP5oe&KM!bpg#`EZLuIMMfMmQ36_Xjt8PQ9s;DJ8>_s_CARs-xi3 z)DqL(hW)#9-xgg{jxB3GSGO5(bbUQtSX1|BJb8&nJ279+y!n*c%-d1%m6I~gU=_8^ zXRkANytMP>TnZg6{|#LDS@p#(~hg6u7jtwB?;XG*t7W323r zlYQ7CxSKl+XR8qY(M5dZg*lMz3Zd6F48+|_QuGzYBQCwuYrzGdCFagbc?QN9 z<+JDl5sOG3!WZpjU%))54k@7qB*omGT?in4t+*jjVlp?`aHwINb|x)0W}9S0y!Eur z)sC6ZM=C!BGIp`;htVgh28FA0F~ z2KlZR`AGAS@H+o=*|?fd_z~N(U%()n)I{d>p+&;7ak~Qfx-E=4O=HE$#7+pvomx=o${ffr~++tR1#RbQb6X7G^IJ{Rscq38L-p|PZ(=!)t7;(d)QwxAS$ZGO5{)-6`8u%zQSXWYvuW9SxJ?FpmrL4TmJ3CxngZ7qU^Rfp2g}n!?{&;%0p) zgZnVfx+**8UH(}Ja09wT4nqJ61tbOziwST>tjR`F0EhPVFwTVg2?})3e#9 zQ~Gq@{mk)RN5+PnUvrS_Kp04V>nfc{sB zVp`JaS!^h~r|Jl3IY%UH5$wtiXuMZcS7bAsJFgJDJXZB0fbKk>kEsZ39zndLWSpM1 zW;8CYkGf}md3Xuk8@0}d`bugtHxFRbSJ=T0Bn*dD4=0~_eKUpFMU{kO4CvX#>^j@s znmp3=>wMJ^>?YQFJ9gA*neMK-+ghuipPwJQInhq0oUO3ceSZG$a65^t*^IR~ghp74 zUun_&`N`g%P~v4tqER%lr? z=H-sN&U2(kqK7T6mAhMR3M9z zIPp%500c+By3;1hnshY`UGn89U+k$0I*Adrtf;6A#2WvmT<2vl(b9-cg5%&X96TI1KVWDEi2?pS9-6W8Ew z&hv~Kqu0wdxl5RWZs$EZ!Pt_&InzGE%E+|NA7fR;YT1u1gb}k7>qg+zgQ-tmz}O%u z8ZKjT34rdlPi2C2E7BG454t!wCH1Uf3mH|q;_2fMt3b8hNp%-48*2CATq)qkdo#OH z+!fGZ!;Wm7H(n+d7z2RA;eqSEhQp9|zsa$TVs0tr0M9(|5t0=Q5ZFpH0&);hNB{*S zP*M@X0!IYJ;}KTII&PO!AxWJ>Nb6atZ>Lxt&pG4}h3) z#OSTTOiCVOa?5Q^;m_dj_h}pRv4=Y8@;#Aee07D_6uJGA-})H65um{ z1obb1w{~>Dr-di|?&lM5Cn>ds|5F!A$I8+67 zo*YOJ#=0iX8$bZTgVEd!gR4}J<}`4&ZTcb_m}o9&4ctPh5}CFou^;S5XLjo0mG_ zK9^_CKu2dR<70kLj-YqD&luqu$5D*=X*+8yGi(BM({I*ABTe7`K^6W$?EinCmD8&CoAjyiR#d1~L>ZUDci=F{^vaA`< z+P@7GRcs?iB2_{$maESnuSMgjd`Ut(FAU`9`To31e0DY_i&Vs#%qc%|xr(RN76F;0 zM3>gIRj2QV57I`VuAzWa7Bpig>hZ5&P}0I6k!fN{_{Skx*|;p* z5T0CkZJy}b80H*P2Bz1K?Svgd78_}jX!vY;Je4LwYiWciS%-oQ9ojS>oX*V}Y*7ZP z+l2YBt&1Djlu4DDn0hcHImt4-20-<+zs9h%^ki45C5vfdEryL6$tAE)Ehl2kM!$gf zm&FWej0hFjTUCDpBfTV-QoN`Rg|}>N3Jgg4_;JuMsHrEh?Fbu^{k>@YB$ET}*6_51c+~u~ZYFn$+F=`cI=CiD|=5+jzne1Gscn)Ys71{DA8) z5kDpe^2uh4w3QW8^!IS1B?f4#{~y?Zii2VmY|_xh4{B^HS^@Z$nRTDdTP6p9EWr%y zm;ioE!^@6b)D4%TMT#5ZxjP^F#XoDAz(11*F^ngB0`}u=6%{*NtkSzR6bwIs5j{&b zBDy5IdsQUR(Gp`8Z4D)(PQTPu`a75{+*1JTJen=&)_MU^Jcc(Mftrn;pPQQtj%b1~ zkSCgeOQv&KCsDxWmzYyNr*uLncXA1@v|}y~f?Wn@Vpu-bwqv?Qr$rkyX&^QG31(6z zC}+=tHvpLfvV{#!WxCTJHrE6_a# zmV9Sq&;5Y8mgRi#hvk`RZgo(&N-1LJqYTRjNLQU6)WAts{`M?=_Zz!2hH(3bujZqO zY7n*<&5u`*(aNqklF-ZvrY7CbB`PJem5kOUD<)GjP1TD8MJZf+RDX0%ZOc^I|!O2r1zuR#*co!==06dfyUETQB?l6SfL3OMA1+@W}mtVFmWQVhr? zUdCJK^$Yyce)o&$t@en^BoV)X9n&Kapb~YEHbSBfW0+LZtQD4BJ?5lUQ4=UJ%SsyB z1(CW@BZq`Q>jWu9`U?IqyaE7wiQwdDqZ9I)&1kdMX((Q8z_G47{|tBTqPU*h#gV~D zdTOn_lS{we$`!r>sVQl$$IF0g_gpyo1F@cY}j`N?3r)osi-cGpf@A(49r zcQnr5G?-tRa8@d>VPIW^vrlAbIuI_bp0+wU?yX;+jhDwDqvTL6D!-P}CJ+*oEF zsg&hhj{K~*uMK0pZDzg>r zPz~v)X;0wc2o^ZgMjv*G12p~f;+G5HjJ&HfXC{*fBkK7}pI>w_ZFwhY$t)rp$b)cC z>H1JzRX??SMSd=e$~(kPo9%H1w1)^CbGabW)Yskl_QLy_WJx!WocMebZ5uQ z+0zmg+Z?^Sf_Zz_t{%VrRMtoD_0~n9hnH8U*MYjMyE=oA#qFN|=N;$v(5P)9*}Ue!=zWTIb#oJC1njihaY^k*m8zn++$aqY1xts$lT{%Gvds z_`AHB21P}4DBE+@se9_KeY$edIn(@d;i|o_c;T9Fj$qoYpJX0fliL}b{R#NLo%{Ff zuI;xf*y1aa3pU~&yjVGQisY}VSEK%>(N4N9IQIw`e@KHur_C$i35;^nc++rqS7m*8 zbsqKO)(?`Nzb{_Wn&DO$h972r1E$xT=mfCPH4x5kSDZef#eWWLM@@ia3)Tal1KT4r zpr=bOK58G|{I((3@jC|pO01^NsGrUV5cJnO%4%FI#t*RpRC>zV1euldY&~-sG*i6II`pS$-77*x?XF`GOhgq*0P` zsR|!yT2yUAIOC8QaGnpggvnykifqV0gacy^JS3eA^Sed+-r|SBJN~3KP*Cwpd|7U& z*IaB}0jRLJ`zq_v4ewa1-(e6VV+s6DQ_->$v@En^+d3p)hIcxD{FW3-7&{eZzNsk3H zTWq2689;h07l6WmP4zyVP#ll|^`;K5z!wX^qpOkA9&neh^HN@K513xrQSzm7@G|HJyb$s|GhxX*RY`$-Eld@ z@<-_gng?L&3JMIP8f1%KgSs36`4Rj(ZeGo^o z4}`9(VHT$-1n1fgZlcr+CpT$^llAU+$TTY}Iz6zbl&mwolXdPzAqSt85?*H65=X&f zi5vqW1-l7WauLeFzn;Rh{?BGiZu*nvEZE6~T9FNie~D%c<> zL^Z^J?aGW&u(vozlqpHe%-J9C+!ALmeoQrUHn zWYs41^)=-|V~=6M_j(lGb`xHBaVUoh21oRB+pq-{=Q#E&@YDbnh~Eh@TpmaG`Z$?b z++mxA4B^s6sk4F{Q>f*+%4IxfW>NDsCBp?+&W5n5_{`T#l*5~$P#x$i2&ufn;TDnz z_uqInTTS&}rVtj3Ul<8&6LLVUUH9NIkyNO|CE*791JoDj!W{)TA`ZnYPL!Z}n9Wu~#aKpeF_3C8IjruZ@Q0ptzK(O!DOJbw?SXym*gLedDvz%j!1Ln& zd&PqLkW4fGC%h&8W2pT9@UEN;?f#>@{jXvE|10{V=I{7TcEo?n78JKjHkfs!m$fyI zWG9pY;Z>n!zz%E_?z)YMbYY3Ey}z&2L`zc~nE(!|Bz@S}J})QBu7gb6ZgpDb9Z-=8 zSN>K(qOUO!1(&H0fBV}jpmXzdgpy{8YQ_mZ87FVIE3*f4(dUU3(oWJ&Z>L6@oe4u# zbxU*Q@bK_-9`D%5j;kg1pZMne6G&?iX^*8I1eFn{<3IYadxty$f?{!c;~Yd|8Y*>f znz))1r$)xsI+AID8n2^V*)>_uIt%9aaTmGYnb%kV|GtU$2)vR`_Uni1wV+STy>Ea&O_(l0-dvTe@asrI8H| z=aBRdRZ3WZ%6fA^YM=ZutrlwN5>0E4tV~|^BAX#8V00zy4-)ZkieQTM(lz!Z&Y_*7 zDs)=Lrt5DFa>5N$1P#Ub3PKHo;;A!!+QleOz*uyraj; zaMy^88Ya6EnNsPzPum(0`!puKIx}ZsGp7WM)L}~cGm1Z;Fwp4a7x8CrV=Qn<=1)p# zV597CrB|?yQL-m>73|E*V3c!P#ETom6C1+kT7 z&-_9D3Wemt))Cp9sdPhWY7J<%E#&Mfx}sNoqN`GNAy<9Yg;S@HMnX1Vgcu4Mg%At! z#|9Dp{mOVZbfB*SqH%dF7M}m87d-z}SOA_A3^wh7i`W4!(jn!Fp)_aps0nCHa5AP1+d(fIo_@D&I${g#ncgLPaD`aXz2VAOkMPT2XzZEt^mrZC zaI{>=T*)P|iPN~(^zyuJG+f}&0vWaf<+y<4MYJusLEq~l91@P;3ubXj0Z9q_ay%*r z{BRv`R##z-Q{e`73I(`=<$^ZCdlRhnbd$#Qs3C{%c?VtqD( zHu}8(fh})A3nK!;8qLz3V06G==zw(y;(J$@3c6|e$D!uf4($~hkT{He2N)UXYm zj;17n?Yd8*F0$gzw}HqLjrG&?Qgtx-q4j4_9G$jU>nm%O=~%s`ho|;8Z+M(k67VT5 zcUY?NpWHK(UA5~3`Wp}3cei~`S>(O#`IT0^e0%vjvt`-wFRv|pzA8`|2TuipaR*Jm zv_Gb8@Yc={O?bTxt}omfSauv*7yeu^41)D1LeMpVjRQw( zIPy~dX{vb#wAK^KA7gVd@ghf99Q58Z+m2HAMK4^XMAthZHWTOVX89Y2I#zA~px&iN zWuDJynO)mr2Da~|*3#%0|7ULJhE4gd`rfJg=jV?D8G$>P6XMQI>sWx?;XQ`y-Nr>xo3ex1_CM$1_Gk_KW`|;#)i)SWhwd34Z{CKIJ@H0wLj!c zx_O|16_DAz)*B@jQ!H`#EOsmQb%b=)4-SBt#9UHP5k?T2#Tcz-ta zznSxEvO7L__3ceGEBxAmfoTZuCmH43J2~H7fl?f-Uz|bL_Ip7=3}#g2`;g++Mdtfd zRn-Z$^>GwudSMF!4u=D@S;a~xV%e|kKD{5-BFfz|ck5OeiS~5QAaeZIciIAX?J+vb z!-NblF*okk8Y~UQ1?MH^U1f;?vko+kNoDK7d=X`cf5FzfPp*-nr&vP3)x&-hL9I%K zaqWX)$$={d_2vjr3aeM-?X6oawkJZKx4s4jU0d4rY~eeoq!!uwdj~)-O%p1#HK?b( zrOPV1#sCEz79DO~6%m*SkWZCYz>Efn?5(SH<@57JI2mtj4g+s}8_sVvGdeQDV!rMf zA{Fb^`rWTt z(XmyXb5rn;IruMSbImlTZeBl_aSeGGb3l^CkVj{BXT$uF|GdI(72u{^xp)G&?iiKJ z$e%_fgO+BMXOwf61tSu5sFoGh%qwo4l3(6S3m2F^#J0oO{8NODdG`JM`UfNJT>;~r z&fEFrC2S?j?(B2Bt@3Mhg<>^>+ix+6p&46m^p4`8poCE7WTX4cM*Smi`5mG!%tQ%Qy} zwG6qCw$Cn4#(ToyUHdR?5xw`Neb{mnix9pVvKEvUAP*XAuO%y>R51Kle}h!Lv8f!PBAhU)nt5wiaCRuhR z_BVUmGQlK#&SSTQnZS;#K)0;9{sM!${QDWN=x^R6uyFV?rjbPaMRXULlq1QsY_%=C zD1rj8qiXdm06$mj$CL!6!^+*RCF(^$?F|c%%poS_x$Qe$9n?!$NU) zR3fVm;X@+s1Q?)H1O^hOK5z@YA8Ti+#BeLqx&$n8ELc4KWo{t(8;ar$m)OK+{7*}+ zgvUUf($A_%Bqt9LX2M=3LH8u+)zS)j?DJ7a*(fnM++>hm%Q3UocKx(fMo#dn)ljjV z)@Y&7;UDpsy!#zbr((`v_pI>u-mnd>glcx2Pw`XTKhXm9)b*T7tW3 z%VU)lSEsPm`&(EpEX2L4I9=7<3yJbb@W@W6_(2_bZTlzpS)Fx0LK@K2EX+!a+{xDpoOKYGL8+m%vwT%GJIHaq^34b<5H ziNB-TqEhLfKPcIAo-Kh;N8zlbyLAoqPx8?hW_vvryl?Hhsq5TVJvt}SnbF&zIO4AT zLbs*p;n%u>|7V``eS5P~KX?j5;S`pD9-ZDV4XauT(~}Es9&UE^v@Mx?2HId7{P2A( zOfC8`9vn=Xk1eJ(D-VRi!D3MIp1F&ROyGO2nXi7`3+;8a^bvVN-@m%IMxm2d;X9;w zUoNaf4Dfw)&{xr~VRw%WB!`Y{@kNlsYkPnLuWiZIP}=M}PF_VuK3grJv_^$9%lyIH zI~_1tnkaD}x(yOdIi3*J7I^aT<8U1-x=y#--2}6HnuSG(b)xslV|2MBZJ>Y*Fa&ku z=bgPiUV*fKa!RF>7*Z}vF?jvmhb``hupJ!FJ$pN3OcsnGB8NVh7jbR@r=yK8D3P6| zzWy4(TMN$l*GAM8ql5i=&mAEKhP*4bxy8|1Vm~%7@cHy}@Gub9T9`Q~FVwjDmpdB` z*0S*M{?#uR7|DlhC&bDp6z`QFvAd8)tO zl%Pq|P}~+gp>q@vS5-STf#oF42umX;%*kmR(Y5HyX`8*~Ln*A`x6|60Fb9#c$|`Xb zW+B$N>0iEgF$WeLDA2Nr%TZ!F+G(2nMMNn7-o9=!WPp1FNxNi=i#le9DKEQuo&7DP zblG3gS=RLdlI{kkG{HDzhXA)V$|2mC;B|A-`FkLsMu*O`RZi9l|8cW6HV?1AJdv)!ATAXD^dte*S!kq z-YM^jr*N|g&aBB!g_blilBbaw<)tEgdrfqXbVVfhGVt-YlT+)&@DXWaKNS#tIL*tqjN$P? zmzxe~r10hy^|8nAg|<2+ev9N$B1UG;(vFKg0FbGL(y3_&Q`sa3`=mZg9qwn*fhp+>{lnGA%iIx z3=$}j`LFx@L=npYb4Zl#K4Y4tI9~|C~qzT&kN2lC-KXUV0vQ)5)XAJQSSsr3VSb8pV#C95rkKgKN>~`wZ zYuXi?9G_tUqE~i1tV>Ro;rspLgRVI&9YdM=SDjSXO#|duvUcnCsw#6)Zk$lTDZ#T5}4uZL>(hJ}445{s>oND6xNvX);JP;RlDE%{f%ExEukHy$z&V3ZT zoM-nOQQhlnf_jhfa?NiqE1s?;LfOV2!4U`FYQD|~+O2SUr=nyqmJ#U1kV(;UW|7Ro z6;jyt8tY<$_cmMAZvNM@F$b<3q06Z+JNK}!YupWm4O-b4HE7}~>J(GalPL>vrWqwW zmew!AsFr=Pj|WN-DWlRv9Rur9Q&h#sn35stT$Dj0s!e==Bf4#bQ39cKsiEhLWL(39 z(j;s@RG|)_p{X5|Y=$_76as+NAPh|$h${weN~)@2%Jpe%42?5G#ud$Kg{j^?#z}#7 zJfx6W&q~y82AeX+Hgza@fq=mk{deg^_}Bo_Q`o@@MXVjH3|f}1MbM7cbg&=Yd_ox@ z34)dp_)0p-g}xM(BQ<1U+aPmHs+HA=M*?Vv zr!k?gWUT}PHwLo~ju{U$9#FW#{ro`Tz>VG)h51Y*P4%n=n?@2x#AF7;j$kTA#4C#2 z%v*Lu2dE@LX9>azg6T-m6Cx5yg|w)ZXPv4Ov}Q=_Sc*1l=1b*-%t`h2I!3#ai=~0A z(vnHhv$2a;Y8((MGF54BjAWGB#Jq0gNl_X{O0v#mq*9VplEFBqk|tT_nLtOwy-I{s zbp+iT{XA7voH}$#LUXNlRk?r zwrj?!P>s?z)r(4Jk?(N}?Ibt>50mq|1KD0q-Cr`=!cMlKYAnV8z#2t=Qwlqzky1%n zqSqvLq72M9Cqp9&_g^VgvyN~BSm%X*{W?}k%eLTX=b^pgond0siHx1JNlB9qMk2`u z<*D3fk8g>;($qCiBiNFrlPN0QCKL<3C^A*OdnT(8D~FuU&bJ!Sb!qU z8g-5)ub5|&La}reFCaGL6|$_g5Kfd*LEl`ZEV@^Y@w7^mv>4$GBjpaYiX;p%ok26> zRBI8`**+~oo?cu?Qw|={>wpEz6tNn}c$m~YIp}>@CYCo%8&3x|Qj%VXp-Auv`ZLJ2 zf=ul~1q(JIxq;nC9~z|Ou9fEgT^>xa@N&@DrCgc)9=KAubS2==ty-H2ygd-(WXxDP zQi5pSE{DmSWq3HB8Di&G8odZK#Y&5Z*D{u-6=cI z_eAQOXOEMZ&##+t`p_%OotPWG`wT<8ByYXk}^h)@@2{G^YgS|likK*(nPrThU;T;DG z2%>VyBsLiqngUu^%~Y9W8`=o6iaIIprNR=AhN zVR&!y83bO_JJ<&P>jE}4xuE_XM>_hC$c}S9oTP8OE`haWvC4Pl!|*lXN#Y-CFn41!vdPWe{oNnAJBZo3!)E>cf(7=EN2zDso2J ztA8>d%uf}y-fc*W9^D!0n{H-2$SiC0`SCKVKLl2G$u7Ml3gQAcx=V3JU<30O16}bh zP#%N^6H32uMw?4bs~h!-zu(_a5^A4e94l^9u=E{RiY>b^?@ zof&3uzGANVMsb06g^i5g+}PtEarH-U)l5^1_q35Ko&VbH9|$iRlTF3c%S z$NuwG1>>tP$c#l)pSjI;YiIlyHSIHJvjOwd`!`MD*6(7sA6s>E;=66__u5g zue2y{dIE>mGT1X^#*|r`Op`^m%jw|#9Uea(W~?Y1uw39GbtlcDs#+D{PS`^U6J%W0 zK#Ir;yi&Kc%&z$jk|DWa4;lnM$`qgw_HqtRN>GNL>if=N6aN%Pj8wWQOLAVds;)lA z&|Rgqh%|2Q*Av>2H=RbXSlh4_#9*MJUz0qNUy3MRgBSU|C~)@iC;W|LFM*XfesoO#793jX>&ld|M7>jKSm&d%azprKvfs@nXw1W-$oo zsRyMUkQdCgs=@l!L#TOXAw`M75+re@L?Bm;(_+;CWGVjR1l;4kS0ShfmvQr!t#>*) zhGV3ClgdgB4xNVaudDbdKUZw8JTXKghe+BiThBzt5_#eNBFrP;@xyJ!0p)gXLa%C; zS}gTnj`xs!$3IMIc`O5n*$fiKMB;0b=AlSZX_Gf2St1FV6O@m%MMi9S@`<^LnW<$v z%2Y%#zGxH2K2>m02E3CCv20(M*56#&i6y3rRNaD5!nV|;U@4rW1p|(mkzh~AF^?(Y z_n0)5el;l9#{kw;3dTjnGD`qgs)bgh2(PoOKEt42#As^9Xf;r*rL=%aMzjG*BIYA8 z9>u)A!nZ4V%y&tIWd zgv(*ph+B_#tOXzcpro0o2I~Lwpj_!Op@zGXj5AH@df6LA3AaHBSBq5IFP;Li8mn~8 zl+e-y;(%)?MF6@4A3@`ruN{Y?Az+kpk|2gj;@=N#xDhd3uPL}<0^|B%f#|-JgFTFw zn0F@pQX$6atXSPz8Mt$_d_2EVQugj(9$Jq7x4CaJzX|Q*GbykrZ{m53cvv)4R;$HN zq^Ivw`}bfPUP8@5Y>Wxbp@g}c@1{{6tPB-sq}{Y{L79lpsu?-r>TYrtrQz^#={PFz zmBlF*JrDK@e}fuInP%hVs)%)qudY_(6@8821!WDE?ee1yk*eZS=u^tAi6p2x3VaW^WHnsl?RpHGxij%`U61*3_!NcSY6fPyAoRht@t1InUC zHlW~dI;06br*sw0nq28JT;Z>Xr!2OqPUEGhFrVq;)jzd(^0ase0qQ$GHqRULFJ~1- z50S$nXyB$tl_Qh*RTn9GrF*$0c_Ix!GK0}#RfYfN%E`o7#`rp;-`e%5&uC)bPZ#Oj z$M*N{nHxi7Cr{@QJ*zwXGm8hsD?U{X*n{o&@8ehEvml+MLka~xPoH0M0)wHf-8XJt z!y#nGm;QVdrH4%vWR7(XDpk;%#mI{pG`Ojnk0E+a`$T7m^6!K)6fPk8K*^+!pjJ`? z7J`|RE8!-kHRewRJ^H;Kn7V&P2%Z@3B^b1ie_jg@G`CCct3v4{&$X9Kw+ux+3a6QV zLk2-2kf8f{36$9PD46na7dPR3^|pKwL~?x`Wo&XuKWA9++;Ap1FFo1idTrU_0>Z0( z)&?Z1qtkK=%G1>I4`ZguFP2FwLy~B#?FvR>L_Vi<4cN*^P{?)>wt3uOt5C14C^|QI zT4iRd&bR(z=Qv zUR%;2(Y3K-8+8u5tu>8EcQ5pvZ0MZK1lVlp0>cF0ij>0sX=`clAG5ki;B#9GAL7D- zuC-NR#2+L(-%4ICRG&ILP|*!(+gfcy43A6XHeMG1D-G32mI_;*Yn=jN&~ zk(*`D2Un6z z&OjBGDXk~eY{P$UU5atx_JFuG(+ zQ}#l%E$caCtXz-xZg3P#?ixUdf04i5PXCWNqW@&uzqX!Ks{frcXp#IM29W=rZMV~R z`7g=#|MbE9PdZ_av$W;6I8g(3KWM6XX{*6V-L75Cs3!*Ksne?hRPu;N`SH7^*A$b0 z%X6_qe zgU*7sdHLMM98hpQZ2N=>M0RQIr~g- zNraM%2_ zot4c>l_n&XM7_dn_jbIEMxZZ#>$=ljNraqB)k&qfWrYPLXn2~cOrt#obH2j6RE z^oMf_nn3;<=ifTCs5ak1QIrktse zVF{%|i6~Ai4;sOebI5oJ^-fuYEaao)7~*Cylv5r{EAnKWbZuM+$FXIXhb|pKfwX>t z(>nZU%A#E5{d=(I4vvG->)=^Od`Bz?GANXAp(83Hu!u;_^st$*pCGR+m@IY{g}nLc z5J=ty1RK3Wdc?HQSRN1(&@B|O(6V~XvpxU#E&83h&>U>B0LnZ24tnp!Wz%{Ulb3Cm7}3_MxquP`6_SQL1Dqqe zLhcgCz`X314wGMa%H<yqan}IdW*xsyg zLGRLLvVD)MJbo)1n+xZ7`2EY3!XS%-lw&4|LeYxq@9m)rN@kjZebyrJN1|^TYP$=R_Yk zp}GnvTorG>_iTtk^|EtCS_RRxe;b@T7Ww2leixVs>Qmp7=oO^zySt>Po<&3kZs~_|iSdU~Gv&Ns` z%+@7wcj^48rDFPufH}UGIb;96A6ETTi^$v$Hw0CJE11=csefcuDL!JYoa+Yqq+kE$ zCC>fde5!xXXbE4$lxXZ}3Y1bswh-g$2l{|cRm1Ks=Z*lcz;9h3zWSH)5(^qqc@Qi% zg-Lh4YWUKf%>6CAz$7%hpvQ5HcaQg3Bqz)=2LPfR!HfQD0{Yt9yzyf;d@*|XG$~y) zT^HoTNTU?4$~;O}O>4Yvo13HKxV5C2Z;dPTk`%DSFMU zyeEKDDwz{rMBX6J=m15=@!(}fk@;dDE;Tv=Rxe4iHnz}aE;l`2U+UZMlTJY5Sv`X! zIbol37zx^OC4h(0o$t+~A%J)5Lhkh0EL;z`NV4BGT#kpz(%PoU zV7_Hd&%ZhwQ}MKVea8=|`o^@5A^ABy|LfKFFTu+-XiV)TlJY~wJAwLFu~qMfNy*jH z(glAER`=WgaHjpA7vYM_rsLor?PUBP?c{&ElK%G>!CBw!zq|-fUX(_m3hM>1jsdU^;{LPHO zZt3Vnm1wI$E;Ba{*x)=+Ai6j;-zYI~-#MYH- ziz}5d`>Zm4Vv}YqICU3`%bbv6ML|D5zHUSgg*%Z_Z3z&@`*(?roI4nuY4FE;WfG4? z@xahZtHvd#HaBGZ;K6=IETt`cPZcKudtkjozfaCGQjx)l}wnz~9$R?i;0LqX?Z zHWl8Lzoaeuv_oO4a4%8bdipdO0m*lgVL2yGSpZfHMI=S6u;e?^GDT$Ba?IrwR;=1| z&q^@6x<87?;!b)*h+H58*Q33J4VnOf-;Aw)b&viZQpt7!eDmC zNQErhAQ7Iieu$H%rx!}hM&r(2HQR%`Rd(#?Gme%WJg7{ILL!~2{V{CiFl!R)-5(R!ej2U|L}P-wS%%&pyr#Y80?pG#k!d&^An!5t?KPq#2+PHSD26_k zxBQWDfpW)t80_&{20N{bZ(;%U&#%xM%ZheqLL~R>&8zo&J{Y~ipfa&x!rioqoM>?B z7_rJH`N5yfm-_LLn=smRqVKBHUBC^wXi=@_!m}_@8kJbu^t1N09tp>ICmh4?W0c0^3_i zOOefW9myP(p6yichq9D~(?BqRmZaaF&VVJ6N+hEQ8~)~2SRokAh|jKW?;6BK?{4qP zCG+U3X(sCT^aD<151h5zXnT8n9_|L+&F^KEmbu-%w2r>-W%at=wwKj0YTNwVo;^XD zAI`UZQ+4C)&b^-Pc)vg29^TBo^io!hgAnn54(t5i#&=$|ebbH`h%O|cQ~c901WvW} zr<^~<#j%MOvK`c;_N%S%1Ja#x+}vS#QOL>-<8iVt4ldGR3G?A zGDFJBxT-F%+rUiAlRr_ur5sNlDI))weQNH-_5GOUC^k_;e>%2c=UAL#|L5XN361?R z6?q!=pzEfyayd>PCwoNjClJ$su3wRIN>9B_!FbdBWLsUFUpB_TxoYkf6iC2+LeX#V z&2DL6(Ooq)6OTW(`>MG+u3F2bXR$3Sc%jS6G>}c)lPlv^Fkx+o;=HO@-H{FlEq7CP z!yM*rRD4%-;;A!UoE}sHLM-&lc>5C_$6OE^*%dg$SXOC>41VTv-X&dg0>P8dO`T%U zgGW{2%4M}{?7}vCpOqBtxHLT6X6dzz(q)!ruE-GWG=6B%?X8{?V9eKz=`LMUb$*Y{ zstB@BxIQyjCCV}uA6p&PHU7yFqlM1g3!ErdcR{AchNDP$A<)y+Au~7JmR(P6Ht}zE zrO`HPgqt7rzR#(1Wq-1hnEqPVw1au6FFx;?IvemxP7vcnJ<&h(&XX(C=(6(cewPeiL7dI3uB75@`wQImJV#8J2vXH-8 zK%0B8`mrY873bpGa!oJ|H%ls81<&tz){vDBA&oW-F2EUbMXQ5eWKI|S4yJ6@!3@nE zNaK-K+~cLRw}|4BZ(Wnm4UNoAS5*|hxz9m!{q1gBDa$jRl4gr*B{g{;j*)u z;9<;bYLKtcQGi6Z?8-o*@2`dBag!{-!)AUzsaeNA?l2&ov?JE&%4J-#7#%|%@7H?5 z4Wg%hke-WaD}@w1%*Lw6ub4rv*B@tl5096y)opF=YVU`6qZsoo4OmW5x$uBYvk5R` zP#DOz){)5Eqg@$AnU}Y=jNRjL_dV_{6T_leu_v`D-?-|!sP z{F>l=xL;T=*HIOR-tR!HtR7W-$93dnGyYRg-b*as~FH$B68D z{(ZRbM#U5S2l>;<<95>ZcG9qa7OOPLQ-(1hkMK-MJXI)&Q7+i@Gacqz0re?hPoI4i z^mCHBZcjf*9}dB<8QzbLaa4+nBnI2GDUtMP1qwlpFriS``D>E&6^PG+%U=NV8KdSY z;Javq<{o1#-NNB$@`=ISX^+7@PlF*?J!)-_?s>%0P^qdrh2Ovv3gGGJhQQki30Q}G zxBDGF(4!4Nd;PtaydNmP5-1-A?gvF&x}z8q<1ms{03s2DJ<~iqak*`C>kRVa(DQ(M z`=OL;m#eu6e9e`z@lUhYuMvvyLYyV>N9}__1hI~OLF_iqz`}Y z%=us4`9PE8<+*oe&;FdGE&r89o145K*>(6GoqEj%K$ZLp+6$fZRJeAvr;ZMDj%PaZ zXec1f&=6RN2yt)9F_DS>PC&CvGe)pexKaP$7}GYnGju99PmfN#3RuL4--->uC8VVS zOFow1_t*2!AB7Zys^hJd#7p^tV?jzS&Z|$ zy}fcQLaPQW;UQ19#o|^MqV>qHD&r1RlrF43Fxx}4Wajptav-?DgCcO|cXC_GBJt`;x_mp}|AZ5h zEmb6SX_!!S=>1tMI=%WE%9LyjNWA5)i?Kq-|@@DqseIh z0z<=ZhM*2MaadDU&n?Tp%K{e`PTig<s?7u9HP zx&){X)T?Z)v#{Sv$WN7mKn(d%w-;vdjF1+lP}wUVq48NFBl?5dYGlLV@}X!b6xp%_ zjZ9IT>^mqm6^Z_g0ac+5DGl#h=agy(N7>=BA3);9cC_PQz-np|WvFH1) z73{r5+C_Ei?f92kI=Za$9){R+3~&>zWc z@!?p|3BHJ%e$I0y;1AYwb+q8sTz<_2ObvR!S??~~yn4aCfngB=V|q;*{}zbmk-P8k zay=;Ly6Y+F95ber{l4Ar91r*Z{`w-=^?zycd_5bCC+Pi}`~H3%eDVJ%{CfKikN1zQ z{zM=ke470MjnOG&7#oW;bM&t>76!NKA4CG1+Dcv;LXg>y_RsaPLvlMK!M~MvKoUiRO~2iFeJx$t5`FVH)bw4H!T(N zoqlt9DA}}oP?R37pr6wEizW8qjk=7igDIzf+qZa|=*w3XqqOIlLAYGsc==mHb-LzB z^{E%pm61E=Qh@8Ebe3_z-R(h$qsw>%1vn&Yj9WBe_c#o^wuUr`Z`6Mgae~JEEr+%8T2U zu6x5EU0Z^6=U?M|Yerd&B?%WZ^@3z!TMBUru`hF|edfN6-urS~Z1e(v}=U%opGki$hnIQD^|{!9eMT11V}LJ7RFAq9U`<(Bg+o z93uQ!D1AI?d`8=#yu|=xp@zaR9s*%4#~RH*98cGm%|FCdk#{L=wWU~b*u$J zmx13)sPnxJTzu@`mLhoewsbf|anp~7oe|-x!LyjBvZqZ>qYPpU6_C4fp!Q8ke@eV8 zc@XNx+d0|K-a&rm>v4|>vCba;c&N-9m5EEN_l_v0_~g}~&R{6Z!Hh)xP1d4DT*Gw7 zf4WF(eEziEAR0kCBbbHnR+Z3i)DlhNyEm;7fdw_1_HU=fBz1J`NO5;*(a1) z2u41u0ebeZrJQwu3J#eA11Ff^?7wSn=D6S*(rwu4SE#=`9=f7OWmx$PR+`~xn~)5K zO!sN@ZgRGAQ*%a@Yr>gVe!KH4n)FpBBo=)H41yjp8}IRYxI~2U*bEVuQHEBsN^k&m zARJLrc+3EF&ra>V^Uy?u5G_9XZKkYG0i;myqU}Bc`ur8~nVTki(>e|bo;sLBd!{EH=GL&_*JFN2O)pf`kM|wz-L26_R(I;g%P}q4ZsDA-I(t>6=C=paPD@IChfJp?Ll-6kJzDSk zdGG&Y-v37_X;voQUk3vMl12dnV*KBk_y1ifG1Rxwx7T<0r=b5I$*{{A`u6|we|@_j zR8V}hbcnx;Xf>6rI-xe~XtK(LvW>Qr1rsT<|H#0gE^~f7@<_)Wy2u8*NYw+i7$&)o z3cT>#kDWz7RgvrWH!1yD$A22+1BtRGS~hBVIeT1HY?08KOfhIyW875sx*7f)S2=xp z13?wCUB<80=6Xn5VTTlQaC1A!kM*@h7eWnVef_*X{l`*{iY;*pc#dG8I*KcpR{#==GSF%r z89eu=b|QN&AiRm_)_e!X_I@=i7PAil+jQ*w3AUxB3VDv|ww#+aGRNxSSGxk! z7%rS2*l!Ag9o+n#5dTMqSCVkP;N39b#<6m2HmFQfQ@B$u;MftRPWg!$c%lHMxZyzO z9A1#|bc-}&IL|0po)I3h+idvr3OVWCWUj^U~iM&*G>D8ZP8ReaWw5 zOj&5aMzdA#?r9Ie!2-KHE!lsKq9L5=j*58o-YJ-(L>Ot6<_KY%vX&vGs0-&4SgZi`jaDKN`-m^;yV%R$a zZM`H2%Vcq64ne5uIOKm4ImTb<@DcNDc|n!+*Z0Y~jRIXKdRhB$a6A*Bb-L$D9=+s9 zM$ncvMOD$l8tdIFgrIWGh-HX+VvXF@tn=}5dHQ~yLpT*flD76jBWp}PALxv*yk-B{ z>p7G~N?)fA@va8jd797NJvoJ^-(_I8C){=4aGm)~B*9tf*otn>F0p$EVn)@u z4O?!riMUPQWl{i2Eb~&g11^!IykVN6;V1!@V7OhDw<9;g{??Fga;l-$Omja60N)Kb-%g!8MOM^* zFldMF?0+755@{wm1w1Sx1N7jLWf5N8e8m&aH@AaOp|xkai~al#1?WWlNItON<(APiA8&HT!ZXnmk=9F z7W?LS=G-S;ix?M1*o-Q9zE>580VjOO?Zz@!QkM zErs;D(@d&)gcWnF>YsP%1DHvbu)>4pIj2L~zAS386^)ib))?bHQ(bnmbE%o2+D&k3 z6pZD)!7@eeZM=eYIza)$-_mq3MS013^b2-+(NQ?cszOYTBW+_<&MQk6)!6JV`&sMl zrtQvtEx4;-g1f)e`aJTA0<^aqP%~AK(tlxX*vXiY7MXk}2gs8Po;5HOQAMKdi&8~E zFA^HF)0uQJTM_3;9RyfIp_=bl_YB@yTWwNQCAyddw*)u0w{*#_Q;$b*nl3sj@`d`J zmi3GNYRr^mO=-IBPm|1C?sQapd==$d1nJdkUMn#VB5Ux zoNFQ5woNs?tDj$^ZD^yMKOryZ47lWBZM5(cemkNgN-$;3pq~l<3RH=#wW;1|^0-79 zJ27RamIU!bN~;5GkwjVZ0)GN@vo6cATTSItRhb_B#l2|xpsPQqowHxD{>0ZzCdK#& zhyW$YrV1&de=MmJ%uDb``eCx&KYU`?aa3dAdV8hQ~*Ccqt;%r<* zRpZNn>aTtS@OKbss6oV%9jNCah&3M=fT5kso_vky8BIUj$e_W%z-vttcXzMhW% zN=vhZ%s-)amLpq#yColeL)s?R+KG}LvCb}CGY)(!Mp^m~PNljKx)tdlf0!{HS|&zagx@h3jH9jQ80WA>^x9)EVwDD40&Z_Oi1Jbk8lIjzeZa@ zzS=vF0Wv41WUPB~MoMQel3(7GJFx3ct}~~vVIpCmL+A;_fs_>KLwGo0>5m?#VXGjL zcx0UR+kUUEOEY0X({r-kg+6xy-k>uGYV;o+yr`~$+iQ?;6SBn4)gmBacz+z}g&WDG|o!pwqqU{Z_x9gGe294O$|-V29#s+FvE|lMlL9-_Otce4+_)v9&2D zw9U0RkKD~k)14ll&hOCLgGU1}T=2>7hZ#NJlsHSm+Q4#gamo$GJG;VHJ;QXoi&YI zS`)mHdxo+5H*FD*cgDPvmM50*O#KbYd5uVL7qg$QvOH@liG$B+*;HMOF~%*`@r1eO zZs8(onnN`OSs%3OE$#T#+{3;tGBq1UHxDEj7c8bPeSAx~L45hjbAgy)rSB$95@R zm6K}4lsPj&;-fNvne0`X4L4cpCd5jVq@Ules-^AY1Kwr`pd$U&Q0myjo=!<!?P7zIu`LvjOWGIWj#Le^uvovB zOscg*2p-)eT*AQ-(LL)uhr5D?vdE>vMZU*&|4irVaKi_gzj6D;JKEyy6X${UjD6NM zihLF~T#OPkD1(GLW6J|)MGqbo>c?%UCM@kXK@l!|&v(hzyQ_*A^#VOt6B;b%+cV?v zrqoV={DHeGkIE>XTtJWk96g>Wq>U^jg8^~RN*bU@_N3`7s9wI(VhOFpCF8SMadSP}{!4;7vA5(V zFq`KIu4p#&cEc!J#y}e46Pg-tKy-4L@npZ!LX>yx4+QD_i9os0BY#8J2SrU1l zjFFspG1DBRB;yTeC_u394xx0U#eW?GoeyWES$k>h;8Vee9=ULVsvi83^u^abt;A8( z8+;#m26J^iJ0J(bL4Y~HwBEJ-LXrlOm>V`$_4gu*#u za43{Yi%t710!FPCH|)=$XAkDS|0tsA>fT~eY=bJC^v@2>w8IArO$G zaHXr)u{j)xeQ|Pzc2gS^tamspsySj6Ns7Q^+c`?atA)qPwLoFws?wbpM6~`ml0@ER ztJ|T?QA1hmGQWZiIpp-ps0Hq#==psMv4w1;w8=cKP}X#}4r};Lz85L=xB)D#i{T zui5K7T1UH5{?Wf{2IBWi`98BxQH+Y?HR|*!9x_ORdo=N+ zv6MUf(q9z8!4OhY3idyd_(zDGEgnZeUF?hO<#s8|QWJ~y%)jjQZz(AewCRrV#^AdJ z37=EJ1|*K;S>=ppl67Y>O!HyM%)GS#RA19vU?W74JIB=FpBp_X-auwYGC*{DRrv&F zK7u)DcPobF=#+vC3tWCngGAcBLh}RR>Iv zx6Grt(1!AIHczIfON41KAT`Ee>~XTvC}B^A6N3oqT*DHqvdm}?oz#9a@Tso$w3p_F zU7gz&_RY$c^4(B}oF&py&DCcA^{M{e5H7X$h5j50xJ}i;8FEgO3Xq{10Bn3;EftQO zeJGDK4;*v9Jgyu0cQIHBOp18ill)2q%!Qm)!9%1$L^Kxz;}z~b0-T7c+}RD)+t=@X z(|+r*m(bp@g@z-1g*YB|Na3m)iBtL3q>MG{b{fM;9m)1(U?q@NLeS~Od!;H#TcWkA zM)P>-n7bBqea-Ol{>t8GtJ;!j%_}MO;{=Ws;lgj7Qgz+1rs=*wa}zz#xSzaA>C==* z6?%>82JuD;>RFD8i-2@*_Hzp98ts(n<`w1e)82=E$=;Rq@=G6y!*bm|>&p>ppbxWu z7&Au7M}TRN=gN@~2F`-H{f{WJnbEqm!{GWgo?&3);FXWFQZ}wGlY)NZ&&Hxz>ZoS0 z!P12(cFRZrp5YME1)R_xYm!65fw=CI=TGI)g*=1$N&oY#c*%zAsJTg)Y_-^V2hRge z&7Hj8lXwhUSAWqGt|$DIxQiRUDt67&EVj^g*s_ovx;wrmJdgAjZxfz3>Ux4De$A~s z_>Z^`8}8bH*KxpTj_5hpR6Lt~*vHGF%PC7nkxNd#IyfFDZpC?R5aq9;c;BGNjlfC4 z3RK*Z2b4}&2c6hCXGS}#Gxm?U&x1wvOTk8ZZ)=axjRi)P5rkzr&|O7fb#zY4XrH9_G?Y2`WHs>SA zE455MZ|il}SJ1#AWE-Km!Ga^ghzo<(kXeTpT1Y|>lw{B3rcb`8+;iRvx}n(!;jt0>Ebx82{UG( zwn!OQc*oaz{CWOhuKV`5e>T6pw)Vx1)>*03svv5fUR6XtBgW`aSlUoDvnKiS&J@$M zt&?R+$?6o#w5`ISA&3Ez3UjFa-s&_lW|wR{ySml9DCqr1ra~v(^j6a~1j3))2u0|$Tol1Ph(!pCGK(C*1y*+& zT&-6Z2c8dRI~Tqs5Xd%Q$COk3xSn8^nOeY*tDasTq$n5j93@a%36kI>6j_|Qz@?=W zl$tNkT2INeJRdFvl(ODISzoF=e~7=YY1UtWD5s^*Xs|hc`h&@rsWNW-4S**G>P%iE zKM+d{v^hAk8PXm_kQUj5LM@(?46*l;BjeZzqQCDL%j!aFiaDYoWwVXLOVbI3p z@bg!Q8Xt^8fOtRK;2IN=a;~Ru>7&Uc6iSpUA4ni<94Tew!J)0jJG(j4@(M{fdPvx) z6j=-q6jC{xL5pmTPbee-S6%>@l1drtCm6K#2~tXs16Y=jh(1xY69G&>s9sMoKCx?B zZmKM3Z}1CCcs()@CTYN7;xF?Eg@60=bYugyLM$M#F^}?gFn&l! z@zr%cGag_<3lTvjWWyMHj=etynI^+8R*h*oT3mY1@qmnV` zGHAQn5t)!pXny8)MN4?41#6qHxa2zYD5eezY#Z2=3el>)p^bK;QoQlvdj}uqE>ib+ z!P4Qy=kepS!lM9xl;GjxjX?Na6m4!o{yr{fJ9G&AW;Y3o*PV{6A^za$%W((}imy`+ zR~NeRCQl=8>|-2~Rc|Lwmlx-JP5)v}I_(J{cuxz(w#yfuc~is)KDmr8TYg{KYqKlv zP{?^V-(Z#fMj08u6&ZaRtJXSQ2=@iuslMtsO5|6w6dKWrR_h+g$?^T~4%(VacS2uR{PoZi{M4;K zhrUx$;GpnXe!~bXF4I;w_e7Ppm!andb2{s+=w5Q4J__ApHRUEtk-4Q)P&I{{Q?)*1 zA=KAB5el#xOrw?-!JFwN@1l>_{io35&fJ)5^`kUn)Ya%YG_#iAc{OHMSO?v9H^~Y&o$&DP~?^drF0TW_Gc!8>NzdB(ZJkIiN)S4!T`= zmT7KUtbjYa&**yCNZQW2Da5NA*?bTo`0gF~o(=hO16CQY{VY#SkE?$Ij7!^YtiE@s zzR-U_|5sY;KlD?y^DQQ71^@u`b3g#H|1);6HTk~-E|)sLz@??d_oi<5bdUH<)*4_a z@jCvDs zt(l8b2g<|@<&ZQgo6!goJ5dRkkADvenK5uvgPDC@Pgm279l36CwG*IOG(Z}UE8nQY zC!uL;OKZH}WXBqr5-Jk7 zF~>8L3&CQP?Fk}Z%}-9*zkMl(zf^%85Xl;dwwf5N@~Vpa#Rt{B`o2WsRFn}m(kJ`B zYwV)V20j*a$X3ugR3VE&cT$K1rjG+pzy1-MPQ-c9TV<(C=Ay4rvtfJtZJB?6^_P0I zxc&7cSQvt7)FfJk6c0zHT!c)Sx?2|^u@@w976b)iGtS3m%(5$#Wwc#Hb_Uiz1?!)M z4KBcj5n>|xo33D+IRqmeS@iz(x!%UBsbPU$eR z;UtID(WBwRY5ECs5M1I&!J{J{rq0D)z!!<|d(X;uC5RiPc!yeHKT`Ryx_l8$(yxru zcwz6IHTC6gBPa>(h>1czVBDUiVC+_j$27sPI*vUz#Ma~hI850^;)%Ksq`nu(;`0W& z2V8ba<+Vn(vr}!!+&C}jI-$?dKuFY&I{i^!X5#%OzF01lu##E)FkC5p2x5mtKeU{} zNtyDUH2xD}>VR+l>;1isRXWL@0NK;T5JE$j1+a|WJk1cKI zX)>Pd)JhGx2v>}ZX6;GEIpAZJMm$EB1D6gVkFZQlvV_0V%M*jl=Y%nJDMPD$@pUPo zD&;(f23b$S7GX^Fu~E=2DGwKT>^4}osn8eq4J!`D$ff9auS5(#DV1T04Y=z(ti}%h z9kC^sgQ=H*hf{;!u-Wxb59!Ytqs~+hr-i@T8YiSzw=^V@y}CqpN%a;q+w+P~^nfaj zux@t%X(x4S#+vu!XM2>?nYLp~Ztmd?CMRuFvRYJ0Ys9i%IL%8}tlEWufYP-ioU$hP z8%^dNglfRl9tqH1KwY_Ir3P|&g;c!_v8dQpBNe(ck_+|V@wgRpH(wxzNtYr!PPZ!1 z%ok4XSErW)a{`e?B(8^%+?OaDrpDJNdT{&9Dz3=rQJOJ@lV*k4sG@V(QV--R_n+RD zeqEe=bYk1gGvg;kXVj9044l>LQ&}uEl3dH#mw{=5kP{s=JQY$h)+=T*E5qDyv?y$x z*SBLB*WA8*L?62pIrphfV?rW-jmh-~$b_T9!Lt!5 zfkgg9hxfUenof9(tN$v=u?f~jYJanPxO`t1Lh|1FYxY6GZpB!6>h=vn3zU@6$aP`drS*@E^tdZyRcab6&xekNG@_9&e15SH z=N9jizL|H$usjzeYle-Ga#NQLLyeg5LR1qm^R>R#zyfNsOc#q=gCCP6%y|>pT4$8d zu_9^MoZR^6Pj{nxM#D2wa(89F?asG?O*!`t_APjrxsEL7i7Ft-ZOazCEdpNQ+D#6pK2;U;q`w4$no3$M zn=}jIu_`s9Q=HBz{+eW7NK?!lZznT&jYEuO-4qTm>6*B+Z{!s~W6S9_LI{NowY`Q^v7sOD$v6 zFh-x9$`aQ%Hnb|TdnC3NNg7$-JbQMcOc|x@;Q@G@r)4%|T*PZ?Vv8SNxy9QZR%ui> zdR7kh|LG2PFv?H{soGVaubti=x3(!Kg?c`1jSsf;epG9IZ^-#}JnY)G!hO>?nYzI6 zJDCLbwp-dDc5GSrQRH>M&T!YGm?sL+0mtCqzsseC|fb z#K2KJ9gvBt=#q_Boq5V!g|qFgsDfjPmu~ke)lEhl$~7u_RCH8>*0bq%e6;pi;Gx_Z zXOd&rvWZWra7-+KRfd`HD(O~t8R+S#FGqSA;@KfK|5c;~RzJizf7@YT|k^0yhDE-BG zikY-Ba&>KErV-4#`t7HDqvcz<+8DM_H+Ot_+)t7VKS_HlARTEAiWD***86uF88X$! z#}bZTgN1gsa|{mFb2RdUmD-UwRoYUwqDS-g&Es3W z9NN0v8<$;g)s$rw$9_N2?KDlEU$Sv=-2F;Hq%15@ts@Pn1aS=+fG$y)W+N$RGel~e zyK8~=f7RsL+RR&7`{M-K9JZl?^cHA3p4-%PA{w>290;#e**li1x;>ztG>*76Ub9qg zv@!zVV5|+B$|Hn98GiskEc(j*GbM?H##O}A<$B7HsjXZs1vELH;Z^pO>fVB{K`KL| zm%^-Kbi9<+94Nix6SU;;eKN?K5%*>ninCeYmFA8 zfQke2@k<*~d*^{+fMVb*ku@YN_f(mlhk8nV8PrIt>?>pq(J#%1}c?bzUTy0F#q z%=+an%y4{{Dk86{3DSQ@Mniw>S4bqUIu~?MuIRdG6o3dJ0DzP%V+i1ZPQnv|i~xuY zs1XvKdMO4jK|3TJb{$kIz{jW${ruJSabo#5G%nY@PVvlHN9(~ibLgBq|B*dB|H0A8 zJkg|BRC`#T=UKC+U7~MidYgZmpYi!cVDJ`G7n^VJuet7tFgT$$h}f{3{`aShc4ehe z99N^GS5alw9Im`~r@fZLEA!g?c2$>=0ke|QY3{SHkr886GVA<^hI`Ot=~zTk%Tskz z)z}C>0NRAdUVUnV2)^{hcOu%_4U2;#p*qjfpnBHU zwc6;*S3V7?WS7divHs!yc^xIJzqIXsn;resSh~Zn4@XjG6M`k|lK{z*HR~e0HewCh zV8Mtzdd3*d+Bel#RO7kqO!=S{?C`SyDH!tQoz;@i#&M-CX`zTo+5O|1x#* zdT+ub&J!mqfKvK_n5jjpJwJWVl<+>Z+s0V9SZeG?MQxQ_k z?DSqb^cX`a6d-l596yQyzXAe(1ra%jj!KBvik$fi;d zu|9ZAcnTxs5KWLd(i^XG0UyWbLiqBpI{5RS+@%mFwHl;0GFEB&IsX_W>2P^)NEzGj zmWYbatPQRv6^R#~einP^75yyx5M>42;CKgVz!4xMej&p4DZ_6IlLds(VRW}OlTgpdNjod0j%Pt6R(dd^f`E+v|Yjh zNUixq8z89iFa#n1zyo4PVVp#wOak~J{^BhP+#bsdAGHc0*#+aTvs{2wt=Dv0l^@vp zd0^TgIDka;azsD{#_CX$fWqF$e*4vBKU#z1ZlG1NbgpFf$ImLNkA!v&no&%`(K9H0 z;q&8^l#(dI;$g({2w|?5G7c@v4mA#;I(ydFzO1sxvILVh#=@=0m@Js7^aSDe0G9cn z0GSFHmYDVO0RR+db(|B|vC*-yaXWc=Io~(`B-2&MMl)(9EptDkbFHD8m=mRHV zr8)sj!+pxkYfsyQA3Pk~EGP&dnDT)m38MqU&1qPUvBVM-A!<4Vn}sd#^18U+UoD?5 zh_Qz~K*2_kMsf0jW?jXBSuXXfTqY9Bp=hTPe!7 z^FCXyQA?nuVWUa6tL~`xqBf?u0&8X&S_W*4pv5Oa1JxD8MF2z)0C6km5v0Ktt&M|D zRy|(|*jm6sQErx$@6PRLsBMG!a@7P@k!-bC8nMw50b2bVA6uZ=K~M(+;sh`hKT=^z zDo_FtKthQ6EcsOrPY=RcyAj#w+t@RE#q?VrF&(moYEEs?b%mk(fwPXyW`%1M1&a|G z{#Kg`93IHPfuk#2Xw+$6qY@0(yJRjuc^uEh=0kCaqONmRsw05(y&CvKLb1m&_hBI$ z7P5-4Zx_cJUN7VOxH~<1y5x5Npy8e_&yXfr-K?rh-o#*kotmTr7{NY32ns@lXwV12{45{p zA0`+MSaxjo^YFgXTK6tMg#%XO_B=lneG}h$^lXpZL3@26Sx5==m(E34MBJd5h)56w zaW}q-9w)z1_tW>W2fs2lwBUSLB;~w;4N}qTZ%xNWit*DUq&9Fc(JdN z7IiHUKTl*XUjFWK@MD3k_X&8tZqVOVwHMo=wcwaN=%(ZQfp-xD5)w?az~AxEs3Zk# zo}3LqSWw)LAM9spbfq`wDSM7gYv$DISS(WvYcM`UQVelV z+OQ@g9>S27K<#dHW8t9n=H1}R9b@^s{>8VkV%&q$4Oo5A;W*cp$7v>gF#rYtT4BiB zpYRTNtRw(E1q0sUMX!tROl8&`R2HnmWGYWXrCoA3b|@hhx~|}2{37;}5)8`nqt=-M z1tuUCrW}M>HOXNIBnj9Nr90rsQ9p3txZ4$0J$B*Q`NG1BrW^tTo+V_g?JZd0qZFkE z^o0XZX#Blq3iZ?%c-~CT9EX`*}$%reWMJ)2W^97_2sCP8*PFx|x>OcfQxVR!|IZQ~vx1kQ z+B1S8Ob8C9N-z(6uA=92njsSc4BZ=>c#djq@~Ls9uDImT^1G>8GtHrbAG}2)CGbE3 zMF66jr}1xu3Euu(KOYu9_jK&_pBFEy)IOTsfIe*g!#HLaYs-yKNT9^C0YC;r>5t7Q zfk;yv5GlbRu(MiqvVK?a)d3-Tb^GM4vMc*brCcBkqaI!@UtK(qDi8#yf(!`c7C)OX zs2GrlpsevY0DoKQ-i5670avLSxDK^Lgq|y( z;(ZP=n2QAdJPDTe=8#T%*2y49-pimpn~8k|WhN}b9_e{KhyoqxV#GRuZpP`{)eQuA zE_vo}a}+kaL<1hp1w`tKqOy<$5-~Ol&_9{m{X7=udfAY_aW?pJpN9*f#!go)7d_;* zHOVYecBH#T;SmL73tzyV#1gI%M6UC3)p2OskY8vPs=~gF{j~~G+Y9fukP-+6 zIw^9*UTnO;*TY$QXo6kRn@FC^ac&uy^Iq~~-oe7=UN}WT6`+LN?H=Th2BB-;)>n8o zz5S>oEBn&?7G*;T?(XN~jTtHULl#$QkD%9#H?*Q`PQ&4u<@>0?jcB+ysZh}t+$MnV z<19}X6K+fX$vNycC_$UJngbC+i!-oN6L!mhAzejl5ER2Hj0x)~I4>&{SSo2PkFmRZ zYIAjqz9oO@VxN=saU?0dnu`P{3n^>8tJrbsFS08tKp)B8BOtiGw(H`v zvMzt_5_(fgVzlZdT)6`;5+4p zj+WP;5FwN`Ls9dL>;gB$fYl`p4tBSi1!V$;!#?SL6jf1qab>*FUWdD(!mVFCn>Tt^bthUIx1~X#)qn_#3S<3k11rcVj%FCOPP(h|b@6hP+wDcYQhQCL=$d9MS<#U4`3HvI z3@7U#61cBP2#k^&na&z3z+7?P9L|pe_dK&Q8T>E9{Gomj^_{|1SjY~lu2T9;Wl7Nv z2$`o0gs31FL(&i{27;WfP!QGRfi^1)oK8;%r_MGyB|E~V%KkcB2~}4*V?L^)M0U6Y zB2>a;J~bX`JXuj0+E8en9BaK?aC7jlENe4A_^KPQ$acZ3gF;lS8A7DSY67ev!{N&Z26Cu1%ZD6 zJmMo4N#l^R<*O`qQIcUqnJXqg<SN9edPIewV?F`(v-BZ)cR`2Lp&~c@Y-kUQ=7ah9{ew0`K*@CcW zv*IqURHq7P>Kgh|2r2fD2SevGx>KGn%WwHyRo+j}bqrSiQ%bAX+v!zL9sIa#kUXoj z)*2P0APcjOZt2cs z2RAk^dTflk-tY4YpVsrGxG$TC#u+*mpP8jhkQAdx2c%-;WzUFpkRog2_P>g>?cZc% zc~&v9v1WMNQut(B0S4PwajZZ%=Z0SsYVoa$hq^WVzp+BrEJcpK50|qtBFj zJH$3}Vs2~&FBa@Re0fa^HhJ8Wt8v?hQbBw^Pehh_%1>XmJ_<$HmobKR*E}yTFL6D2 z$7**A=sO$x5hwJQf_p49%o+>d%>9-hx3BFpa#LG=@1r!OVst&6>U6rdPji_N1O!fd zaup$RAC9%v_xYfA`ovWl6MVfh=z}KjVrlPRCb3>(G|ab6FKiZy@}ddMx(s40lqhp_ zm@U_zUR=2`>ObEV4WI5^8p0KRxq4c4o^R1j6BaB@bh>wMd24r_|Du!BW-3am3PX~ zH1MxpFO+G<&wPB?;^oi?fmkSImKZf@7v}w)?1&mg>BXTBQ1zc`Z%Ws`6~`<8zC!!G z#fv`64Q35(T-gxW^33@WUH9LtFtB+&yiIt?Dc5YotLYJZLHh1MmgZ9{ZIn}5GJsA85(`)$c1bwFo6tI?q}uf% zSyx30bJLYR(@x7l2|Vdr;;O{3Yj3!^iQF$Z-m|%-YccW%OYg^q!ECkaN zvcFh#6a+wnS^PAf7r%J~%4e78Mr&aQyeO8>)Zo^_rG=q_mTEKK zZq=WNrXO#=N9~SIqmmzeB>n*CXFJ}JdAu+m8+Bc@N@r{p*kB8k?$2c=XOH)klz&eja#*=eY zPQ%CFRtLYY9j>pCHja)Qug@8EX#(UF0FZQA;J`J<&S11_?sU8K#? zJ6FneQ&fS_*H8g+8%QG4*6cAd3}!F|NMHl)=|Xi^BCJ0Yn*2E5R*s35H8jR13p{X6 z0zTvnFl@it3eQSw0Qy_#0O%L13Tr|E#M0w}YTA`BF9JfCs*-r|(5b$MsGqGE9xaJ3 zjc|@gYQX*)0~1Kts}>r?Dn$n-ZnDsDP_0!RR^m$(w=00U=Taaj@{OiZv$l+h#eS9ny$FZ?B$K{M!um(H0 zGvAc@DZ$RYwq%n$$Y^-?uNf~~+1LVz;RF)_iSc;JQ_83jh{`Sz^LBIh$Rdph+K~ik ztZ#}_1!N znRojaIkmCKX1j2<4@a=o@+!{c861^V3F}ofJ~S`Q{}sCkf*(0u5t|Va7%XbYFvzdw z9!dkq z_&m;=A2q=%UQWOL{NSNTm3q)O!)1@0F+T(@Y+2|?k5dBZSD`^aEgL0MhAXI}CRRZa z!;zzJ7V7_tJGwT{frr;k1v>tnpFUREJogpRDv9$r6p((EDH4m3X|z63n8%4SMEhx# zO0=Y0kz?+SEXMAwaW4iZw9>__MYf7lI?ion>+608h^&SSfb|k{k#0{TI>VI_wLBJu zyIlK91n!x{zNpwHrv0;AB+WdYbPaHsL+Vtuu>TBF0Gxo5Dk6ZE3s^-(g#eKS#E7J+ zH8Vyq3=u}LBxHMo&D=wv>CI)ipZuY?lYs>;V~mp3Gij1@i5mNL$R0bo^4BWrZ|BP2 z2_BO**Aq&TiN=!;69_f|^0q5nP61JVUI!iH5M6Li?Uc~0!Ayc{a+ZcTSa71sBIIH6mqdjqF)sCXsIT;u2Mpj-;JK739(g3257V3k_J zTu5#~y(oa@3WPnH3IJ&!s-Oq>oK;y${(uxI$y&}sW>8UU$+Xq)-U*dD z2u}4sU72$a&ypBJSpnz!*!VlOyuOL2%hT~kc@pg1#w zeE0fzaOzYkP1#&t9Ub5*4Jv=}U)MvLg1J$+=nw%Bqyq4Rvl~eEFthm+ih0woTPLA` zIf?W91~U9b$8%YPgF#7sbDd2@jhXHKBO+Pfj?w1LTxKljN2HmWzdluK5G?dZl-3Ia zXr@6xAUDIHbus8BHswXMo8^}Vhzlxj=G;2I|LkpVGzugDJp3`bIJL;uZRG3dXlO-- z`3(&q`bI7Jw0~0>S#zJhsk)Xz@8U@kH|w!{(!Q56I|qYGgAyJ48;^gs4}XEm zqccViwyf99oi8uQXQP-uBW>~f-!xxDQTFz?tZrPH?-X4VzWs&|)(<$k1+q#-^6rHI zM1grI3D4=OWS>z)ZZd{LO(VT_E3!J>DO-)3Ww-@(=g<4R?(`ATe}497ML3Ty-*=C{ zY2rM;wYI04Sl%Z4+uRnst{I8?XzVHwN*SMZTk06I1JJi`^hH>xj(I6Yv%n_d^q&%G9r*lW>I#)GGj=9 zCT3A^1sd%!!kh8H92GK~@==u?p~$^Gi`|zuge_tYI-6ILOJF|iDRjN&sWa|Z3n zsH}WbQo(w3MXzU5eE&Ey|r&~EP$OIiLc$9&N+?qS}(soLTT*1@D!o@~0%V?;- zlZM-PUwgQ_@pS#=i@qC|W%w*&>u7&3B4Vuyu)Q4J>%;`Q{@Lhk*&eYW`TXska=4eT zW6V~3Ehy(SyTCOIU4P}ppD-w_uHoo%NBZ@YQ(!FNiZdL0xaGo17a=V%hza*LWzSyB zn?1aF8cCg>S()h3H0r552nit&1J(#q%k@wJq<^ZhE6wTE`%!3hQ)^#3sSPEodX zO`>huwr$(CZQHh;J8j$6PVcmK+O}<5C%?b$JyoY}ovQn=W?K)dtu|jqj1eOudS{<# z92wkp4LYi{CABFYcHEV=ocemRg28v2-4uevl8gFs2Tzmm(FP$7k%0vqF!1KZK-XTt zb1RW%?yO5fHAzJjX=)pLsn!UhL`IT*`sNEG#D__Bvax@QhyNwb*%xT$W%IJPqMZRd zAtQ0Mj^M1`u>r?}FAL(1sm$fj{6H3?-|px0VgyVhVuovvQg0 zC-5hBoJGC6$mPT`tqt$YBaM5;X^U;AiV;9?^(i zjXFUOixkszzAl)c!T-s!Vz0-9@>uebs= zm^4*dgd=+=;}sV&W?5{a_-tY*AYu}V9uLLIzMvvWHr2C+#E3h|vSugv#?I@;7vHGx`l0nKhs2m*|*Im~ENNsCtWaVa>ravy&a#kAH>%m#T z*-bjGR3)q_n8%@Mz-Sn)SFoTBd>EF8H?z@^Dz!T&HwpXgY!u9&Jz?ppPK3-5KhIAf zB=aPDXChIvIjqh8d}Y1|Uxmf&I6Ok~7s@Msj`+-F*(AxEd7c@W|G2sVEKKb0%o+s} zCuh-;Nz{f_v|aq7-Z`qo^Q^O&$21S{8ru}6Iz`<}l+wSW==oA(tG2d9$(%8^=Z=05 z9mXtt8P8_?*sFsunrR{hN%ga4(QbVJ- zCU5OeF8d-6zlI4o7|-gILk$#`4f`TlYah3kMwzKT5MKT3^()?5QE1BhEgG0}KSSdB3lMl* z_OIdX&>QeK>UEOSMSk$7ZyA)eu6rj-zO9~g zgQ;v7y^osSZ}h3C9g*u5h^h3V4CPax~nFW7IY7ULFJKHBT%ie>0vM*awSdW zsj$!>U3K=5Ia)Hp+$O*XS&-ycAVSE@=KUvH7C_fjjE^FIu&}XTXp+wqJ{dGgbme#kpv4Z zMVl5{Vgx(NR9z~G0$bnTTYVm#pc%Xf*gVSz`-ufG2v9XxR*C|Zh zLz8?{Z%^9uux$6C?FJnsQ9id7^v?Fx)8gOC9nY)V1@G z2=1F7CrvxmH=Z1{f!uZTLJzT*O&qz%Ahn6LmykDY3J6YMLCo|w4&L3zjHwNB4zc5-O;YtbPdLQD= z>ak(5N^c1^fO~HQi9?OY#j4+dxX&8U9W>u`pDMf$s5vCZ-l-#*+k5BE@am5=*J{K|glpxKtTrv`*|*R&HtOCnKEmfK$AiUopKt9kmMn0A4?cVb!-AnjPH4mjeC1XJ8= zxA+#)CmgXD{@(itqI=U{JZDV|$E%ec#w$>u-sjLIDB4H5bsT;9fRw94?_MPRX?QB$ z$zuSD`uJ-I047#km94Lb@6?e|V?h>XG?6gFzOJq<_^ahl&bIFQXzJCPp;TD{l|YGi zh$mJP1(ujOyL&}R$}yxWIm&RT)|ADY?)sYNf?C$4n#>ZzPRod<2}p+<#e+)xAXE2f z0nadY`x@+IqLKp#EzA?HxYuXn#0ZuyYh(+Gp!fXjASB(y&Og0dYdVUNO1En&8-95g zxjyi2ePz!?MQh)B)wZRIL~6;~TLoxzJum40K8*1X<_NeZ+fWo30N@km|0m|i_=gl{ z_w)H5IdO++vOkDNJfq{p&AHf2j{Op@-P8Wu2O_E$WK;OcxzIj~~M73l2<`IK^@p zm^{)acN@Vz(C#ygrDZbjH}vYT*XU6*Zax8BCk?n{%9yW&c9v(z!UuDGy9A?~|HIV> zk|GiPRV7!q&NJ<)cRUu0Q^Z|y1sXi5t~O@Y;L+2mbwugOz+Q=IX{E8C1h~h_&}^ru z*;pw*N`cu_tp~q>y5ocqyh?8!@(cyb0_w6o5@()0A4$px+Zq1Gk}h5?5dfY5@zEQX z7(d;g!D`EG%d}A&rR8+tHYSm4Sn@1ryCUql+`5cUuk2KA8!t^7W77Nq-9Bg?skeAk zgFWJ%lvrm99#xp60CnO?uC3lcT4;)^ts`8-56py{Ev=2mvb=G@dqhYRw~2xnRPMLm&sZLU0) zh!0=Xn8FQ-p@Nts<~%0KhB~W%5T+vILAhaG{(~fx1k@J-3$!xs$ z0z5GwL4RQ}bKW2zx}yV?1wNnN=iAralYY@rUi2F5@7Owp3hp1sI@2agKFpcBY=Je% zlkb|X+6-W#m4buzJ+#sqLCqPiky$!zexj77nm-=PF@4<8hj<~T($#S8O`_6YQy@tW zb0VXJ;k}GJ4K;bu`%`L$OB*-0k1(*_MKfL#4;plSkCPgM+vg;~-0t@{a810RY=`o% z>jiOod0!Wx$Ag(rKTG{M`g`MXf1lIgtQ+>FX99%tS?Z;;uge+GxV#Zc7K3d)6Be!@ z9s713`sK)HI8Lph*kgj<0i*~FhPzS0zac6lki5a-2%e8;ygN+&KFva|`b6I-P{LCE zG?1#;zuYymKY{;!vHk-DDyADtU4aGw&=dL}7VEzOfs75E%x(Tf1p0R?<3A{%jsF4# zq$BB!J&fA@u1>(AaZ6PAEDCliToNYEnlbmXUKKUElXw(mwuaY}Aig&lpp|`8%FFF{zrWq%jlBhfCT+ni zQ%Z~5V_9b3&HHMTU8asdU5Llnyv&_VG^H-%yCL_h7`P+x&WBl@P}5Anb_}_wXC< z)eZ>8UgB~c-yb8_hYcgTF3p50m<%5tef$+F4dT90vQZ;9mo6+gFVl^k0cQbM%|UE< zpvUKN(SadLK5ckll}Z*%=i1}9`8bEXn>Oum5jJpE8zh>`r^gh=i+pGxvIfnTJ`!Eo zy>=K3T^8qd^Zb)-msX#NM?=o*tI6wRKAuNAj*nlEI~U{N7uWb9?5% z@Sr6}-sB5<0}uIQ!0xEqPIz9N_;M9n)(u;yYl=7OrkEIZh`nK3HoN7YEO$Zlh@*GQ zGzNPDS&h7BsSlMPBt5GK6BoAdH867EI&$Tavg|qAgx|h2*gD2|I@PJJ_ml7|LIw!q zam-wp+i159mg6pErg*E^vo|KpBVJXB*l|nT7wjfHvg;~eSg}3*8nrxG>HYTu0Udz`xM&b;*3PL!)Ic}^QE*v ze#hokihA4T)(3fe!hfWDnZx76JTngmUW7IGGq`LsVAY;U1OGOR@#_z}-*(dFF#5`u z1-@i13|&ew9vtm5%G2-V6`T~(K(b>JT{5A%9ES!F!lKwG#=1UAbD}Ki_RL#{#xCo% z7z+Nmy{#7?ZW!J@y)ZYwbZ(wQegCgLMtJUx(^WgSKPRvC2mTxC$y@J{SHtSbd^ahN zmr+E6^K5z9#qnK@OQ_(a2#Km>sTz?&Ge_>$_tp-<=MU%3f6{%G&lvULt&*vdjBhPF z3&mohK0ljb*c|i|LhStZY!z!mBa&n(x~4c=pTTn-p%;V+t|7nK;nFu+-^KFM7&sBF zn-{CZW54$6f1T#BPRK4X_%{Ah4YU*jS0v(;01@LXkW3cpM+=`eh+$>lkjH*}vt0U< z&GyQ8RKCyNFuUqw+au33{60CjGd_N5_4){Q4N#?!F40~6?N{&lg5hri@6G0FbKDcp z3ildBI;F}*Ee;;0ln>0X7EaVS-v*)`&9IcbM!o7dDt14RbSb~ZG@2I2>4`d4C2>GE zZ%b=Ky9-`!NBwmSP|chNeiJ9oYA4TH@H2laCVHM7s1XERJVPu(m`p;W6EauV2T5No zpEnM1?ppO~)BfV+5K(q+%F-i8O=sSN$>%{NVDC3j)%jez-5}tG_kkx&BK{K+r+;aNdaE-Hrpq|V^8MkJK@%jb+>5pUTUx|!_n&= zZrr5ZnRXY`f$QUn{uSKyGVC`VcJZwJX>^tA4z(U2W^;Iq?T; zx2e~pfw2E`ynOQ0x8b-6R06V&h^$Jgo{j8KdFGdh)TmR=eYCpGKB$~IyEa%BdDaX( zr#mvk`fbp zJg5Iv9XM4*NS2CQX4Dv=Km*Zd2?KTcMX(c31L&gynI(A;Ec_r?1_LH52dU&lNG%em z037}jhE{yHk35v9P=J9G`v(prvKD|k1I)r@y(YI3)C<}sZKQ;*_O9#VioU;>2q0~gkmF8<;)zVK1IrIqNAjEJTA}f~UYerX}jG`$>HAo-|0-o@=6&zLl4pauK z-rXzi2CUinJO+gbJKxwc8#qXzIoi8h9cPebITvFnB$h`ArB+2Jr%}=QG>1YjxVj?D zFm7{~ldpNMjG9d-m&!v~6dxT2#c*Qc3l9mPJCQq1*ZP~Yg18u@Z}6Zm#L98xHJdRN zmu(#Hck||5d-Q}O4jGUMZR3Lhw0Yj5aCoy!9s;H|FEZ}DLjom&aWsS|DJYyE>3VQQ zeHdLkY1UkznJU(pq=rMN(-c?o4u^3V$+b_yleN(R76OZAQV26(u>t`F7h4w*O(h?T zS93P7n+%sRR5+%I9ARca_Ov7rYO^qQ#-UzZEekH}RQ&N+6%wRlIsushR6a_;p@x`m za_Dr}(lELn?hUSw=c7>3xJFal5+ovuuyFEg)1{eH26O2F5ay6s z4XPBGeIa2}tWLc9meNPz%G*nKGjMMfer&f&YoFo+8@L;2TDbIpgqT-a;)vR_0(tIa z8GgGfDaZL_A~3bqAt|-;I0*|Pw$V)c!w%B%%p@Vj>d$e5q2A6|1PZ4E3K$GqMU7X4 z{s^i4EHw|ATomp%Ny3UTuUVSU65y76T!F>%7HOT zq7?jYl_fgMHAJmM$;?UW5K0im?^fz4)g3_z_2 z+Y78)y7_Y1sJV$eiGliCB1}m(R@}@^q&fyXS06TY!`f^2A~m-}#8}_~haACiBwZ17 zU#*{5;A7<@ksI};frQSb=bVrfBik3~2q`1UyRr?Z&mItYKV9C)(C0KtT#cA5>?oyx zw2WNr)zs_%Rh1PrV$rBH(ZBXW(m9?wn2sV=l!0+8*cm7F8EK8eBie1>j{)-pfxhpmn=g#lFU&34oT<5RJgrMMuo5)b7%| zw?!+vM_|BR57xrm_o-ULWlb0aRS8B*EL!d_-dk?n-!cS^=8Q+pJN@B)mS>pI0hbCSplik-_9AXhus4eWkI1bqk`3Ypfig`A#O zff@S2KNH7MTB>P_l^T{rj`0KKZF1CD-VRZmj$1yfHE(cmq2Q$P_vUV@sLk=&@{qBe zKaO-^^~hOPes|zuR0QSl=~j{qmHeMGIzvT@>c=EJg zchr3PhyVU^bLCn4Iz}MR`}|MIz6U+6x9d-$j}!|4!1Ldc7ychCysM?YzP*E~oxZ-2 ztEG*L<zz(rjrpSBd{&9oreb+1%OudC7iHF-iOn$bb*Nlr@ zl8x8@dA*LmEA2X{K`BGgGI#afUGwWIEXsaL#?P6%SreeG@oqpiBRh_+%IeFIr@OnG zudB4olMxp=NRzCBZfUfuJBI2DwCHg^BWJM1g8%VU{9S{+Pg&GsB4Ia^GbBME z!H|fBXNaaDoq9s7uXCj8e%1%EECTPdF@@OEoVJS|2rwYq9*9N&%?jV6XqAG<{s=CN#(dL5dB0{Wj4#8 z8{3vt+h}d1rKTF_%gJD?nrvln<@MB%wmZAzIlOD#!6bP#@|0?US=M<9tlmfMTQeY6 z4XDPUtB#&cag6)loIz2eoca>F#MfBXeeqmO?Fy3S(#NKy$GyC*$x3N#8dz;Ft(!|t zKs(^?&N80{QLtz7J14$815_#@+LQ$6gjn3AUq&=UHQ_~wB`hjIMI2@lP7yRrQwCRi z65=8RMCFjW%8mjrujP)jvv#ta*aP!X*K%p3R@B$K0Q0P-Reec@EUBH-Z;lNAC^Qr zK6(Ol_r5S}4{_M}c{z%>Z}#rpU69JpJu{|7FCg^SPAqbE z2uXD2X&XMMk99ub>}fESyLd~JH|(V}GM&g-kIAuHtkmHF@;NmETGshQ37kPOiE$Gg zX;~pl#|?F#plO$oY28s^K5!qnmkWTrLSUarHa^ki7ZeT`EJqy5agG8lsmd6(bPPjJ z85#ZC({n-e8=G-o=9B74tX|H5M)aLz+yLd4KFSU-a}*{t=HZn2`r-*p%IJe^N@JX) zKdn19FdTdw>rUG+9N*59&r0WJWR^a5C}0CVNAbLH0YNF+8Rsurk>D@MQK zcQi0AK%!XHJL?E+HC}v@b3q>A%VA{`zF&vq`29X!>LzXVZ^pCajosCw=%Kf!QFq_g$*=0v3v~5{{tMf$0q2w48lrC9u7@r9As z4!v?1g!aPxq3H?8Li$d7pIl{-azRfUh5%P!4L&{*PC#mnfK)e_gAN@EljfBVZ>@!QAf}-aYdS+_&5FdXvtpJ{{FHoq}NB_rPdJ| zsl_tzdMrW+hvChsF%j%A3L>r+Wig_X_J+0;$-GQp9k03XU~c*!>eprmqncNMNWDO! z;$iU6v^LPlcy}16F^m)rCLmy9nZL9ROm6i};R4n|4{qQBDaGRABGO0Hfx-T)940yx z@yq~)`T+(9F9A19tpI%*!vQm7B2>w#%0$tQJkhj*Kpo)*H1$Njpddc{c~6+}0O~Mz z{UjMu@;`QTDo5llim}f0fSsdd&lZV!PgS1DByOsUVU(Hudc@q4NO0Li_9b4R2n@x_ zws2w_qUyGSAA^9di7}SZ)wAY?VXvDeE5M)ku9i!SIX*tqE}Ap+T$3jX3F|pL@ZUOI zHbwFK96?&47$q}o?m7e`K!WM~uo`oV8cS_qlL_0U7s@cA7ch{lSOujN zbmc4u)%H1y6+Y?V&7{7Yp@CO_5S3qI4^?>$B1XhbBhouZ5i?zQNrSUgQTTY0*1HB_ zM<=rodPFP5M*eQ~-WRCiXl|raa1wvWDi|GW*m5+{Fnn-DVi6i9FHdU|oe6j2C51o* zvOF$!%^b>h!rdLwGGgQrBs!xO-1j7h-qbeQhT+`ruatK+#o6KPZA8B@IeEFMHnrOs zRam|u(NUDdjT0(j6%K;xBVAUY4aYx8@(ne2g%n^I)>o=0erm3+v{<;p#q4q76T!V9 zw7LaMszo=m!lJBD_-hg#fSUQMKsAVQLN&y~9$UR}gJy2OZfpbfUFzkxiuaCi-AlmX z?dy)I-EH7bZL2#&AZ-&0Ng_rjEY25nsF)DrHDg0h<4EY-(+?Cebw<4(tnNXr3u|Qt znhn9xhs`5H+a|xa7^hwXAk?b5drwm)01~jEg^kK?2lq~ z1#7;Y0(Fm@`|;r+;6qy;5nXs*jUi!k%i;_N!awkllz#vNgc2BBx;Bmcf$3HTdu_F^ zvM}2gMfFm1Fk+nky=PRqL2qB-3{4XTGhj$P3PpR|tPXK?E2 zmN!wMYe*x8u{eflKSNNon;&v=B9^rHwXmUXP!%vD{%X52`fZeW{2O#_@BT-o%pXqK z+MQc3&n4^_vgTnN9J!?u5EAtaDSQ9#Y-gany3a9xIJSI56dipb>_STwmMG^Wrt~r? z?fd>&2FLLv-d%56`A3jN6@W(?Mr?A`jEZLcqjt5!GaGShIf8OP*KCbVJe|R99$UFl=(^K`+93>w$p(_RW(c9l z_@d~MinOxPUfxfTO^zy@>-;w?9f*%5R6*BSGD&aK6SYrvOW?ZttL@?%-*nI0ZEZ#4 zet=fm1;aw4Ee+yZagb!RF3l|;fwd>4CQqlaY^KZ4xM@`7J(`fs&|?N0-Mc`M`Ttv$$Ki93dYd zut|T7cv>7J<5oMRT&mVK+^g2EU|6w`X|#n~U};t-B$F9wS<88KL|)Eqr4QQpd7Sug zF!>}##WRh7K`3V zwAxf}F!MA$KEo_Be6P7%{aIT}uQZESo4@DPr^4WdXbP9oLB)0BG(`{zlM_Zl5s_$O zjWF*i77UApF_Bl-_c8W)zFCw9%gkvWG^PJ+87Cd#-o7X72`X#F)S%-}>18c*7vi+# zxP}ZZ);)$8e5!tKJUyBg(qE$(WiHuyVts%}Uc}sqa9e&|WT|N)tOI;~uMgvY!@@Qt z0nB}{YEO){cex?0NaexRGy_{s+}>(iH&4)F?UQR+|5O+ahTgV-U0({`-ZeHqrE_&x zX>O$-mXMcBFB5#r+xuFocuvU7_ZJl`bcN#SdfIZdJf8gjy;SlKWNuGJ^6>o!kP9RO z06_cSr8@ssDseJ3v$Qj_|Bupy!JjJ0)PGSa$=0>sXG8mSeXI`AzA}+7D-%gXYG#YR ziA(caU_HtW`XZ-yI=ZFdK+1`1Rlld$R6Eg{yRb$kCWk=4;CBB6bu=ujSVFePTgzmt zh^ne-#GL&GZo`8LJyhmCY<05k`)%0PXJ3_doOC==XVUI&@2KOoqk<+k7hmNnW5d(+ zTcw2gTUnR>nmp-;lDq9I<}Uim00|I~ z><4_PL9^;^lu*p#i+ zwd2X}9WKz#JC!y`ybVmIJj|kACk4nOLj9B=1p)DfArz=m7P6G!2_yiPP0uGSmFFte zk6ux#wzlkh>`>9a-aIRgB3BDFzHN+)yPU1?O>nO-p)S9=%?^W^IJqR(e8_5<)?|~i zS z0LO$Jpg%`r<455V?h7JBWWu8z2sm~S0SE(+=n)9|6|04BO7eHBmC^|3H87xLlGaes zv&N~Hd~AMu_83g#sc)6G`IFl6V06TQ*R2i(#{MYD63Nt1r(`6YjUue5dxnfyL34i#EjHC+JG5paj+hdks9-1sOA!t# zKoo>onh1dn$vox*~yKC8$lK`4-ed35qO zyhXobFK|Et8}kN%fdbH-D8+$jLeAdckh`K}RWYX5Di8~#1{**&;0#U!H%fu9r|xi? z|L9qd*Kj+@Siq?#5RP!DDh`+wh*_-_7zWay%$aZ$oY;JA)v2}j_inlI2Y(2YRYCNy z0n-^HCKsHZzDc44jgeH!EpH|Trh#4BB@h|pJd~wtip-IyQ5tX}IWk)=_PI9hm=XVS zmUc&aK0=JNLiig{R`F3}JG7>ims@wsRqfl>xvvQ;l;hg6V^eV2)2Ch|FFEA8gd_9yUj${W3ohJfSh{NByl$^T+R4a)bs)m2^eCO-w3wh>JuaG6UA2;?ooQ|I&g59m^gFbVbQ!=12|GhAq7w*f!WR@AZmz!$;0u`J~cZk)Ou+$Fe~dj0dm$0 zfVph**nDaG%y&+Le_C}AVlLf7e8Z$!foMPo160H_9czOa5SZfi%?LkneCEP*Vz`%A zGhGDDlMZ3C$NM70!N{+Ik>gfIRm-NDLojK{a2}yZkL-G;#6aO-pK!5_m3*#_~#doW@QKg(J z>fgB7wnwkEcy6tyCwhKoD4)XwnGZv;MpI3tpgkGe?`8CT-Mf__THFjbYde zydTDs70GtO4&i4RxXYO5 z2Hyx{l;vpw7A9cDJV57Dw~5`8)D8bkEgJO60Vcg_tGMQ2+-t9O^SH(NTP`j|{xmek zlAOiAim?d~>LP`kR}q$}YOV#EsjP=Omyaykb!Y_>Bd|k>890AC#>ir@c~;8(;}K%UR<$q6tQyI zd2vY_`P0v0=Ctmg{&p6@<8wT$U3^@KZd?L3SDd<8ij7*HqIy;fo!(i$?GT)T^2Wb+ zTt0q#g>v`Ztdq!#hyK$(0 zI>#`7E|mXUJJtW|7!F(WI-@iyQl-kdMXSpXHL*-{`O$&bElOursQlhdo!2<7#1 zSw1wSJtg4*O~%BxXFSzzeY@&B#owzyS4RJ`l+W6VTAdY1Uu*}A32JsDrzS7+xbk%u z8gXj7pug{~haF8MA^q;=>^X3@IIUlp{XyddeMPX@TSC_s;k4X24^+fy8rZE((KMaZ zW%qU*IIQ76JL3rFQee#u=3Q@n=*o_;4{OWPcR^9@D56M#qAfQS+VOGmAo>ku}Z_uVE;tcnB zj+SX;>7F2bWN~eOI(s=fKE1gJJ-OO76{qSck@5%UkXDgII|+63ty?ou7ohF@NztX@ z-kDXDHmB7kMlLlk0We8kVV6By%ZFUGxcrR2#=SHF;(;yQbE9n2r(tC_@(nxn6?z1f zQ~^I$wpkHxpaM%t^s2AKnyR`n;F2%Sm(xM+xgtnj%5%pR6QoQpE+XkGaA>vw?lX=y z`VHJE+Q=Y#Zm%;09DaiH(>(Tvi2Ju63M*8vsG126eUw-B?{+g%YNX6qt6U*QK9J_t zWBkg-W%#7jPyac%F!OPWV+%Q4Cas!T{3hnBHk9>k24{sm&O2uTv}|$d3KXLN9goj0 z!GbuKf==jxX2Gq{W!{SkiU_m<&X^Kfqd9AbE3_4VQ$-)-T~$&hu@%yOqc^-Y*|h> z4=b>Kd~QXKFF;W^{j~?4WDPDVXr@$=G75d3WN^J#i(zMHcMp4pXJg{ZW&9b|2;nuv zW>1)VD%Sh^dW|y`4w&mBTEu8j;Y=za(~sBv+c&4L*nC0!4LxjrZT4GRM;&Ya?&sGw z?_a4MkXR2b&u^=<|0(r}uo#C#0|NjcCISFp`=3*vp9ILn(#%X>-@(b!&c)Q}Kj%RI zy!luP2ofh;f(bQY{A z6N%|K{pY1_JQt-RlWTDf8FPyWPRGip8~O_9qCYF{@B!W(kyKJ&$tp7)Bnc0yq7(O@ zkB8e<>hDApQfZK=c@VHPNv~Hck6HB7hg&qHpan@sUfRMyH}%xj=30Ipo(H@Oz0B>i zRKxVQ<7amK7u@Jo)np1W9G0N_x}*nqwqHcXIA^z6$&E^q1-CBQB}pO=rJ*xu{g!6* zC##uScU)!^xnQG! za>#Dbz?YX%=vbq7O*j^-B+&wR|tiUFU0O~swpH`q&m~~^rFinHijM2g) zX-Nbb(aoCy(K2Wu*_m`n3oYfy4$wT)sj=p33(Y$5osiI(_0b-r%zVcc4WWttWT0aO z#aK^|XV$CQgh0>n$xvmae2Y8FkWs{#g3z_g%h3Ig8Paf4tKMkxI~Jjsz*man1#?BY z=2*WB2%UMRaFQ^)cLjhGN)ViBi%6)%KVlC>l@+rQj}RqT=%$NgFj4m@jX8x&H1!gt zlwkPhmaDc@rF@fIOjQI%3o%62|8zSG>FWb{;3@Eu!JrY90@;j)O#V59`in-cfURRs zU;by|4|92Z_&0rV?J=kU*e~gnI4P?j+UgnBkZb9AkQVegAbu_ZFC4pO!7*+ED@`TZ z_rwQB<&6!Dl&8|^z^pk49`J9Q_4tD0_X1Hx)$JrG^yR`-c(|aQ!li}eKuO2SYpuE4 z^DaD1_$DvogUF!-SlAEIbK8(^@<1t`GoAU%46q-m<$H=^!HJbT}S% zrx4>G4!A)?xAVEDhiWsz3Xi)ILhx8}6rg)GO@{INc-{YWO5X0eonPNYZ;npz2^Nyb z3>rh9*7kX*Eh9!ufNNoWmB{OwhuE=a#M*J<8xl`S@gh|t=s$=e7OUoR&ge`pK*;Zp zVpt1Qe=kVoXi^qZb*X(+x5JK&>TJ(Fh<+B+LzSB@H{7jhM~_POuSYSmR*pQOo1~KS zg1e&%*2KT5Az+o7gY-WV{N@?9PsO(e)jVu?B$i>ui8ZUCsJK-rp=pb|tK@D|lGjkU ztlLsRR9&Rlx2u?HLFuOkk*1^Rp>?1m+aEBWet(l{R3x`ETxmAi=r62s`{*VbbC<(b zjNFzI;p`wjyZPgwJ9b;_2zppRPdo7-D8*0=Jdxaun@vRr7ZHI8ySf+VpU1<|;&_3D zyYBG;5l6*y!o(wUk8&%xyce8H%?Fbt$wPdz&QMHCW2KD$$3=6eZNed^Xiu1Tc{f4U z$%2>tYF>heRBoZuwl9&a=&bY_l8~tbk;LJ?GT*3&p^?D_LtEfJzc7=(fj&`wyO-)(&Xf3N8rp znA-j{9{gBMt@ZVPo`x>=|Ht0+Pbc$#bw8&e9rv?0bzj#JxSU)OS&!dYn=ZQ{pui#! zoEAt1Y=K1LtX@bJQz>a)m-KWA&)reC?3=h}ft?J-^9*?2X4y-~>d{4I`vgfrla{3^ zb~sB4Fb#(O*beypJT@cgBiK}&GN~cwr7P(4r|8IZXz`B-AZt^-Iv0$vXrd{H4L$t* zx4W;KRaxOXa^z6HZm%xATLOYwLYjVIfPg#>D}9PV&ybq#9NME64T&K#s3upYc6KfB zXn>=OTq<^;YozUG8+ibZEDb;RT?EBTHiig`f#iX$sjxDGsyIs^$-&AZC5cFqz@SJb z9z|}FO4{*OLWu&lAv<-^5G?u09y7rDdEOEcn3hbiP@J=%(-5$TvX0&4fzM2RssSJ+ zWqS5Z)nLZu$X_?yT9EBd0oe;nq%PyIR1h>udNAJ>(l8R~WXJM-{=r=+j{fp$rN24>64}s`o->LJ#M7{*Y9$^8}@R*O>Rofhje{lS&6{R&|ZT zhAgEh{#`Mtb{@V+tiP3i>j7u>cnn057oy$524}&#tU-T~y1Lk+c!x|omIv)8{AZ*= zq^jL09->FBQWJ$^g^fU&Qj>MJTxG$mJILDsGI%DZPPVwlOIg+eQb!J+JHXKX1HW~(4i;P z6VI_(i4&(3>H4BLD*CeZ$AAqS+-zDug)^WA+@|WgXtaIc%#Orc#6$fe{F!pIpK;Dj zYeI@ARR1lN>`ehDKf-}Q<+Q`Cgx(NJ>PSJ9Y~0*Lral=wCP7AZNf=urGXd0j#VUzE zlA5W^09_zCAoRzyw6^%EP)t=rwI6k^NaY0G0dF!wF=Q-E6@~BkvJ(!h2Ms!d>dT>+ zq%7psO2sgilPOv18zybQFUUugK8e#9vb%gPBuIJkx}VjMIEGv5+>J=u$5VHu9u0gq zGh^TfrH`#CET+kYaVJN9Igb~+y+sfMND%Wr02lN24W?Npb$A@#yvQ9@%_>y-;D1hD zd{(VASnwUwe%pN002K#4qfu!P8{5-+(s9d|Iqg3AIej$UdxQqX@AM(YOXU^!bcw@r z|3^X%)&Ycioz{s?%?H`HuJ34V6h0-DF3^yfvG|Y7?#ieN=-)8$GbC<+j(0QGhLLl1 z`|WQlan#syP^b~!#SmJXs}FH3`QU5zTrnCvH}7D$L2A)Fp&sjv@VTs>-K9}!%7VUhjY_S-=4<8&x&npC;W3lho?!ryJ8Ur2Gu8)f? z7epbIqPff#+kH<_zTB$@yGL?8Z*mTQ{tip|XP)p0h6c2($BBrNBH?7HSJEZag*25} z%Lm)uflc3KqNIM3h&BwUQncWbbEt$I#h~(B%pYmx-`@HaI1#AN+!EaE@^*+o>M2WRx7xMzn6e@NCH`xIj%MYqLO7++;zrT=-vMnPb@9SrRl5d;^j3A0>6Th&)r&<+wRhQi^<5r zvhJXi>ldEc^pSNXiQqlsm!GEl0{r({%0FW#eoz8)ML%bMMtA@Kn*T188`~HJGe zWu5Qpwq9Z)?W%Q$V>>9+0a+sR!0v>PFxBTDYS5KAEoV~oU<(vDfD{cxy5*|Av~7R9 zDR2R75=bPexkZ7>zTpc(Qma;dWytE5h4Gvt>K7B4W|*L~w6xiAkK!{|gfK&tkK6OI z>6eI9i;)uM5K0g=Kgvb>^5S-(bhh(66tN*szxTIpDz_vH*#-^`XHsg3Hi7S8!Q|aEa0V( z(iPlI&utE^MV}}bTq0vDz1|`N$?>42oDH-^9Mt}yhyIFt2*QaI7e+mXrtm$Bz@pLg zkilXJG@JfX6nyyY3vk_9*x@Z>1-t0R%|F{-2EGjMk!BjJHbDz`uMRdnZQE?@vYnSg zX%l1sZIZy;If270H*Q>wPYOCt=)aach`%9XXZ7i*$>#IPS1gOXYMNtGbj&Shuw9V& zjJE{RxO;Av!62tNc*k8k)=#a}DD%D1#o zXte_z)8th@FfYuKbR61N53Qq}xfN0%IRrC#z=xHZK__S*8FHrxd!=lohIe6rS{FB4 zvJ-3S)|$XJ)7z==#27eIJshfU?JD>8!I*Nl3x+?b=>}#GRf{$ zl#m&bXb}t!PY%_-=!i3nk%~hGoOq$)JOt#EQu%ovyQ7R z^J_6`SEx*qRc&#!W?e?7I~v~fZV_+m6W*aUYP0Ii?)b{~(*6CZG&Hw89W0G$`}5fI z#wLROyJK}=`~M6C-noMkJ3nW-NL&B_rvEMw{994g)Z<4+Z)sxuPb~P4w+jE4liQ)@ zdhE~1&39TI!RrJF(k7x^b8QVSvJ?=i7@Z)i#U4mhi48kLiPUQO{TVm1g|x0qj^?^l z_MI%^Cmh^lXArXbcIh3Sq^dVl99%%fE*IbX26ZS$6#WIV^v@HBYLakPyFyaEJ!< zYOVPpqt;0Wd1&^bD;P1Sr_rR5B1*jKq04N2oETo@J43aqvLLcfH4#FrQEZMx5$%oQz-~rpO-dNe$ISQpEG2ZTQh~Y3W=>~j$!fY5 zME`hgV<|Ip&D&T^Ms#7ykpM!KJx*~WmK4AvUqj&--ud8U1!7AB4mKC8pUDFBzu>!B#yainrY#PfEODaN`86$xUXG1+#+I|G? zHQ?oow8I)A3Hzqkh>GLL8EzT;v0n*N8a2k3&(bgzSi*UiX;}q>I4oUVkif4ar&e*s z^o$C2Trpz)Z8B3E92cP`jwb%?^840H6#q0ta+{MaY`-1+!)PdcVCspO9#(@hd?BsQ zO|a`Zw+aJmGSy&HogMN{bnlLl4`(WbmJJC*$5MaObhx-;^f*L~nlOA9ZUeem7(u=? zH6C4ME=eNc@4zD|v@TMLU~_EVh#bgNcak9beYXVGDKt}G179&YfbU%W<2jk`K^E^9~CJD zVo3`h8rXNO_H#bQ)DN?x2Dx46!TQ+jv1pJ8P#h-7JYhrnn1qbgn(e1|5-1O2?r#NJOj1amh7%t)?l925A)Jb^Tym){^GclG$AqeK~ z&-AU!-w2PavoAMr7t2K6FuISt zY6F@6tm#*}M-+nizQF@Fh;AqJYeHRx#Ti%e4(Ypg^ z0%-$$hXiz$&iu%Tq)DAJ<9@eHcDvj)g6X?Z*UCd9Iq|XBw|aNCR?DZN6UF_iZ0kah z`f|6Pc3m5bhHV~1e*Z>rHl<4o<)?DU-RvEkx2H`P>U#vWwB%0Rr-jOOn5UnQE83Sk z+Md}D<*PAHr{tg~-Yx_$aY(094|~_`UDi$>kS*lLSZ^kOa@*GH1e`2Yj7etTAv-I* z?|hJlKRlLCkcv^FZ{X>FiiPNJg4ss z+rN6rKkK8yL$)SgNFbnh(*KK=`9Ic2-)>&tJ;cGl#_>PL%73#sy3n-zHXiu-nWHCg zJUEXKZlXgo?rwxA+W-%`hM=x#wFMW!-S8la46YD!@$rf)*+AEm56G_S*USqZ7sAWQ z%sG-jeUPhUCyI?5mnSK7EL`Rzk7MW`G-l=ey1z-4y2={MBFhpb@}F}j`t6IAtK(R& zIYU6$#ucwdjTzJAo>QvU(W6c0DOE|{kZ$w%7V^3L=K5rXz}O9kQXJ+lYWJZ+#5;>& zEQy(P>l!ept&z|8qtr0|dQ;M&npO6f$6!uzIdLsf#33L~+oxlB#4JeLw#5!gd`xVO z1|`yoGnpY%_AZJ{kr>gS;RmXxW+!r!an%yKRPDoWuXbj{JE)N-hDgG3iF!J!so{g- zD)mrmQU;b<8p>EWbm;GhRk(UY4Yi6T%eRXhtX~%FWG28YJP0j&TFlonrwcts@StqR zN^-;ivfKC+x_1iWj0rWohWHeyXoe;Rdfx#m5qtIM0TLL-{Nbxn25QqpsRv7e!Zq!K z7tUb&F@QA6F6@u|Y^R70;grHN$(1UR)&UabOPmz}ilYfGv|#{s#IlE_Wnrx8FUmW( zNc(q)V`lO;wC>4USVcIajFLY4+l%H+&2YJWa$Cxec_9lqzAIEdSi)@r4fGN%#>Ln%_I>6kKi8t*@jd7x;mZ`?+FK}x zu>$!+6_uZkYi;qt97D+!hE+K7XRSw?bLYQvt!1oiH;o+f#ZnUe z^&qEjK?fF~(s0QD`2+KYvR2>%6;Q#v^QEW9 z@rcS{QlIe~BXgI(s6A$u{v}Ws&CoWd1dB4<%p4JwMSWK~zWya{r_-enxDYLapB>pC$cd4`ZD z;<;y=qqT5z1rmUUCoVR+KG5T$NlB8xcA53`&UGq>aEO}xpL$x6wzR@*YlAV`N^J;} zM$Bvo;bPZQ@a5O-`WZ05>#R%>1Nsb|^gZa^vVBnreKle0n}zxZB{ahdbq02XKBMV& z?r}WT^v`{ue7b2SscT)hU*!msjIy!vzdt5g_U$;9^Xr<%6rnEp0e;;X)XE$*Q7h0d zgFaN=v(sh^6R1_@vTeK0e}`$=C7`beL9lY2EsIB|HECx{-gQGRpv%G%`@vMt(Vpr` zoX^Ii?o{T`40vb9kq;3n_Xy!`@8puc7PZee*lVkE?x>x@8)Z4{=ShZMT-Eispr4@a z-n`gp_zL{Bs?ioPh|KSld@#j|IALI=ok^SV z#SpfmUb;=EX>{9;(ruaI`oYXg`^`U@i0+}i7ieyXp}m(Xw}Z--8YxmYocgPDpqEeZ zORaDIXN;F_e{KSal{=>quE>35u6#cqKJNGM6A_=T$nbsNJ_bJ!SWxeUiD|N}&R3{n zr=KxIQy#Du&?L|&Mp-SKY>GNn9+l<2;U564HaSAkWsN=j>1(Roo5`Xq5Grh`BPfw~ zK$W;KpNy<;B>vRWQv@PS$}iTu6#1k?TEtAGhz(+o-U#H(pbcdz*9=N4Vwg&OkxE?n zrAVVlpNGu!4C&!jEAq5TwRscWr?`J+lBUlJGL<9*|I((63;9 zWl8nv#QIgWjGgY)#^u$=Qs(hN>ISo9V2 zTR6<2W!Uj3Ftm!!656ig$yAR1#yQ7&{T)j&;1xspGtx;WgVKPy8c0)|$*`&WhtKwL z{K|tRJ&8UDJYS)xLwt+~3}nDHT0t6raO+K#Ac z_e5(p8@kIHm&d=(kALsSND_7h0djdXJn0~?fzG96nn71WI%>tBt*5xhhPD2QzYUJ3 z!S*`LHe}2;T(-%8UBE?<=vs)w9?y*%(WcTIR)pK5%&lSFL1W{}@V;04Rf4eyqHc+P z1yB`hjI2~!32!bNgI^-EJ+tp7|5T}}2*odcU=3(qqV1FaGoCAd!1{z!bn*<&^t6YUG zh-Jp7zio9}xl|uYdA6G=Pc^N$B|Kxv(_f}kZ6M3ZU(S|ZkBI+gn@^ImYk&X7j&2cv zfY|=KE8~B(d1J%xHvd0GhI)F|w#Lp@CjaX9|4wbFCS|+Mj`Zzag2Y{w2onD;zQG>9 zs3muyI}h>=BC#~Ir-=I(8NO{@#U+rg+h>7YfOsAYw2ZrZ|H^t17Rzll5y;`k&fhm= zM-UYPNvM<_J1~6SdrQsiBxFn(k3y3iFr-+#cH|CYYTlp~KyFGo^syWYsHv*H9JFg( z1 z^Do@f$CECHb=PAE5);^bcPqN_i!--P5Resa$&;!+rIKiHN+)rrZI?(;{I;L;@4LA03X?;`h9+Td3jj0|wqMH9}}X*zwbxoGxEl0ADJb*BjiE zNw-0P7kfsZQ&tQPcc0kr<(Lll2vh3H^sbYGG+EU}ppugotn~7_Y8#dcjZ}N*2Q#06 zR=#=@H6g5jsg!FCubkkUwfmmWV%4!STKoD58d6f+fQe(7Xo`NK zwz<)|cEL4&eXFSlAZl^N`$pxYgF!8v6n`yuS-~xDR_n#c9WS4cwpN94dcvn$j%?ly z;kj+T@F-*5dwYm=I$)rO67Y8?LNIA)e-Hrgh32+1*g8SC;c_HTy9ja%2e({sn|w{M zCkEsIb=GXd3%tTo9QreO^N0W@SLDnRB?tA0qXBdSwgHX?1>BfkUH2OoudsRwI3YEd zQ-mC!dkLtx&$Z*~l&LE{vu@bu?hmf83hOp+a1L{ZQ&ka>Sh#N-ABq-LNEK&F{6R`L z%f-WilEuu%zL~8Rh<&kYEIDX%J!o_53;T1wbqwgvDdA?ES#Ae~ckiTBi+B9!jxx9S z%ZM(n?!&fxo1zb&?0FE()-WKpHx-%}kFo!p2_@*GI=|Z}i~dT=gir6bB(|ri$}mjD zt-n%gb_xXG8Hx%+kAfM)D|rEfV{OMkcFZ~A%i;)%?nD@6{W5Vi2bx|d--7OQp}BFA zd-(ur-^Ihe%HGVAsPn6;86q_s0$~^03r{)&{y1>Nw_nOFf|pwojV+3Tx(YQ%KC=}9 zj$(aiFAEJKY)nTvsQ)@Xg1{EgMz+D?5L@7ij@WZW)vw_%mRE5X+Nj_h&+&q_?gald zrl(2!BPZ~11+lgkvkf7pFj>6@#*1bL{MU#=D;=)o7geiB3C!O71-G!lPf{1PJ=Vu< z83qLFTtKx!s{-dFY;(SS&ArLR@6te*1HP^OO$Fu$`Xbk7wX@-Mw`XhD`c*76$4*`6PPd~u=BVz^;c0G%} zCJ$FpA2Rr=ZnpLQRc!tNswdYQaAke~0S$)%0g?W9#YWiH&D|7WW%8d_iGLuef1dwB zbm`W)_$Io{e{J>(#+LrF@szt@2fW=g+1n7nw4_~&97O8nOu~nfQD)W)pNg-kmNseWuzH2mbFL600ZtOwfsFyhU=zf3HUzB_mOI^JINp&u{cmTf%S^WNfm zd3pNK)d<$Wk-eqi*qpij@a_7#)XAFZjarbH58TywanUUq^<-0F@$__izP`4*zCI+N zuR+x7^>B7_Gr+QON|YYVU4V-(Fs_BXw{83jQ!2p$TUhkj882oKY;{gMi+E_#)w*wU zb-aBAY5Q0=(VB?#ye`#{>+O2=;o7~~=@la4+0D$miNEqQmAr!x6aaYSZ2v>+4a9L87tK-40g-*bDf6P^MGTvFO@(`_)^2%)7l=&7D`H z!Em)YZGhqYuCLW;)}p*A2DHer>LUY4Zd*4Vj6LJC{;iexH?Qo#rW=!peb3Vrc< z#M#&n@n@}yHB80(w;1k)`YlZ{pr-CMF|aSHM_|4`;0 z*$O(+S=pBPQWNaqs3bo0KWL&d?GTXRP zf^Af@qy0(1fCq?ag21+9#4hqkh7D#1Dd+~4q}US>W+(*WeYh<~zqp%FgLPgM%(COX zg5B;)$p9HV3{0900LM>g{f6Co2hyGlq6HmltFe5f7}QEneW|0olll-Jk1e&t)~#b+ z&YBs{k znNRN585Ei%Re2tPpcgiN#rFk7zJ$0)k|H8vN=!_cB#8$wOrK(5zg+lBgOAjPPuT9% z3TEshg`jI{FR_K6Z81d1y^YwzmU0h2-B1-2Q`~L1rHbykbj5<+bsJ$3Pt1#6DcnGH&`&FKa`LVZmboR&|BgdH4HOZ-Z zzH87|J8}D`8fzmu6z5#SOPT32Ky^S0Tg~aNU9(VpV{8e?^*S;rr?>~ zC+IV)X~J!BqUs>Pt1wg6=reL$VgzdK@mF_n_qKF$Z(jy@zTSYFw%R|x z_8|DshxPs9BtY5s(`_<6?#iR9%2Nk^0H(pl^(4W)O3-Kk#m)ZcLHvDRZuCa%wBVjr zvqN*Ti>28(9e<$(N=Co&@CK9Pm|UQ$0)zI#5_INJO^Ict#wG^g1 zCge@90g(Z@T6YmU>zgqflF&xvu?S=FLPphq?j{6Th0wo`qcBxX%&ZQ;mR1@BvD-g3 zs~g*gg#Ya{dI!$dDfrgL%GyO)b_OkH#smc`J-8G!XAqG)`kb-R64sJ?H}VFjM&t6j4jjgbo)rm` zsOOKC&EkD*0CiUfu#H$}fBfXZ7qQFU=Pi7jCR{2taXR$Rci)4wl^l3#RXObWE{h3d zeoe*U6CO{XNx=j!O01hO*vd$q?Z=M=oj!#9v3RU^+rBV5+BsWRex8k%C39?^H9KH3 zfhQ*eznLpAb7Cl)*G!i!Jxqx$aM@KEdagXI7G=5EfQp9f-+fE^>QFsyonr`0L&edI zgU!DVS+_G{_5`ndrB;+l-v*aS31dWloVVLmne|sr^N@nU-Y2egKgd8MZ2F;Lbeo>A zw+u$W`1nWXgEui09mA{C`I{_9BDdtl38G!9398o?Da+d>>EE7~Jb7*zIs9I~A_t^& zU3kZ?^LQrJ=TR}AFKk3HZ(zO9$Hpwl>@{mR0B}-nE)3ZHdy^p98a38gA%H1;p$wZl2*07qt*It_z~B$y6;pK|(`>e$^mdQ(C8Q7!bhPKw+vO>?WN8UO~k`GXxBt?aI<_ z0w55rp0}C;b{^eb*)n0A+{Ko0Q{M*~B`S4~uY)=vOaHm^6Ho2jCc~6|?0sEfQV0K7 zb)ABE$6y!S8gch5<;w}F85&ZYg87cazpR_u@7UJYlKd5CvlXxI{e(aUni+LO31*Kn z_=Y(XDa;T=L7H%aQn)&iEKc5>B7r1Il%PO7VYaU9A&D-mKHJzuXd5%khfv`|GQXk( zm1P_X)KQWEI&z)e*PJI7E(r`E1I;qRA)sQaN5PDEA-vbyTY&U~)AaomKKR%bWbQ|B z7=Oag3*jfWARkbofZrP;U?rbA$YJwg9vvI;8CPwum|C2*6FBQO%RRu*f2B}j-Rg>$ zm&&qDond0V*H^Hl%c4Fm5c|K)C=NQ1n#~k&8_`cn*bm}FFQ_i5U`s|!=1U=_n!Tk5 ziw-drZaH&-?ikKGnHV4^#L#W@Vd8#0G^EKQ+oWA`J+@Ces|@T$MFkvAq$#^ zuMaul)i~9dbld^`V!{PLNq6sYqRr}ec7oQ#9#d*GlAcgyUt6tT-~UL>QYZ|~QFmpn zuLS#Dv;gU!A!EVuGj#w1UPRBsBfE$v?x%L>ye#cH@EH(KX>EVeT8Ih4>FlrQpNWy2 z_&`8;hxb-&D0fo}UoPMeEcTHo%^Osl$I438DDO)RHX+tm#tll_HLlQi^YRlhxB@l& zxc)?{3pEkcad7QLFfxts>k9ASLb-N|HxFlzUI#~gmmTK=uHL3!=J`Xs@J+2c`)1p=*@5)F_8fui!xhxTiY>arZ-g|7} z`4=7pTCr|-vG&MT+5#2gePs(Ogo=rKZIAV9vo21%I|nRL6AcS9I-g8SUvs8Tg#ZlE z?$+j)$Ef{wW#xlbXWeVov#GnYA)L7+7D5fHzafIpdTgMNkhRT9a6G%#g><8Wnnlmp zc!wWG<0N`NXG6H=>Gf}Ju77`X3hPD=x%u4OMa_O9OS3d%O}qXyNQ8%*Bx{D6(Q1`k zYr)F8an+qZ(KE0rGVO~{yG`GMkk3Yctt^q=7*-0}U$iV8%#BGh>)=`fh{ zS@yb<6+|_IR5G7Bva7+9GXL~t_a{}AXsCcCOS!46Ml@S?!JZxGy{6*>PLJ{Vy z?^Rcm*M4s&rK0D72=VTCvwMBvRftJsjaonQgRc~-phoZ)k33>N zqgw&+f;SiQu|zUg6?|-crB+wY!wdSJJIQSEpyjQ&SLlU}PWAb;wWXGYJME^<1^1uh z&NYv+IrmlwRYuH52+_bqeJGtP`8$;|&jcXpMFkk+jdR}3Zlkrcc_-FiuG1T4pxM@H z-3F>x%iWtY^`?mo)5mMWU8!?rsQ}+uJ+F{3E~afaX}MoOv!W2PB!o7kMrro^s~@c2h}X%e1FT8T z*kkiL)@2K^uLMKs`~A-Rb4Z!6RP9jHxc9N57Ef#l#A5EdSWv8v3>tujhsV$VP^F<4_Hck`EZ__gfapE1SUg;l2#A%SB(*VLt&Q(C(t#xRo_;sv)C+0c>;v z{|@xO%x7%I^2qM>dsE2W+D~OuHD{?P_I6fy~0~h&NM`;)rQOw9PmL`j#{uQKA@d%CL5=lF2Q5yj3LDh{Vh={<{jnBYn6vOiWa{lV3E3f6w^~;MR3fH2xM7i z|K?j)rFZ1mz4=}&L@|qnz%;njF%<=xKQsg=m10Rdt4E=z1#(2eiF^2f9SVn{CT9G@IQdzZ_9ar-nUBWKOvic zg9axn>)5Unpn6}`@^|f1j*I|M#9Ar=O3f0hc&~&P@CJPd)DWxk)eS6Dm?*-MzToXgb zTNt7`WgtuoE~cgK%=b95!~G-^1*joOmLlHn^2aZOxHR-YV|oZ$opAW^mSE8%5MM@> zKS`SXQ1Z~MNzb{y+ASpJFL!9BnghI?7`1nk`v%U zFgeCy%BGX%$+I=z9Nr$@4%e+?WV3OB6s5?^6MTbd_XrE5?%olaaIA(rKGEGn4iJ@&(zSMZs) zX(Ew6*bu-Q4e3cA#qBp8#hP2uthwNV;q76vPZQ{iUTD@z`ofie@~P^-lxw)cVO$bX z80GLYk3-0GaHPv>a#`HJqxjz6ALV*y9SYI2m*oi9bjyGI{Ikl{X+)PKE3OVCh$C?f zVwSF6jU4eSOI4#qy4FyY_S(c{oMH5)?c0wCcocoxAbbSMrdxHCd#+JZOh4Zwq# z?fLf^g^K=vC%^u4PI>E~;r}_K{mB2{&guW;DVRCf{pUITH!Ouk^^I?q0+R2{H%q}l z!f&|Yozko&!azL`cv_PNc9sV^$t|H>vWP&jzPr~)OrphjSQdNvY&I0^y^U-0>0|#T z(>WuKd<-qs(EjB9H5E*l0`uq1?(NM?E88WhLI#W|3Z=e1<^BQomErGw50pTHG1@;D znm57Ce>gjvFBUBpwctIOVlM=GuU7D{ws?Z1#82RVipoQw3%qI(`j%3bMTN+3^d=H6 zio#MS0mxwcJuHW-vK>+uG9N-x+;3U)%W}YX4{!Q!>7deWH86yO8iUb}8pgcz1kT^= zb2Ro*ey;B&6b=*1BhJVZ?fl*3s)k}&hIT_lDkWg1G%0J>$xcBPFC<`|$b70SEf5S^ zy5tOI_VfB$n$-$zddN--Ip!iSN<8`FZ1!P~3Ll`b1syVYLgKLT*+-;7_b@OKL9ml= zVp!zfRu|MHPBFKzh`fZUd*?AKGQb#i@EU$}P~OH^89>Hm5IzS}HU!Srf@4Ym)1-%4Mj${x?q$=Oh9$uqn>^29n&TQ=)MM}bNL-%s{N-WO zDvs5|=`*7T5LBNxVJ-zUZe?gpTxF_qQNOf>KvWmoX0dO{b(2UnvMoe08;z00mxlrfW@NK88}` zls$cre!$|YEu_h(a2ah7(&MT6;_`J|;5d80r9aHNFZwhQwg%$Rtb=idQZvRqiZ#@$ zy81E!iBCO~q{9HG&X*xGIG$F2Lu2>KUz*sLUN>j{9ciXQEbtku@}0WC^X_r9^>Jfh zvsdma^O*pyAf-X_JtaGWzxbOfet-c=*cKDCIY?H_+b)maGRdeZsj#eJFp0_K2Sn)^ zPwe~0BFLek{gU$MkfRN_#qOe2;*9PfOky685x|;y`p8lx1zLR07Ta5n-n{wN#f;vD z>**HWD~&c3Hq^!D2)STE`vlOi%@$j1bUXC{FJMjf$b-AlpZ7|B2f@&s~ShL6*<(ZD7LvfeOmmEp;N`j$t^_03itH3dw0NZ z%9NYh)5|t7^V{3Xe)yPMdRYZ_Z*q3wlJc~3ndm*&`DUB&U$&DuOg|Q<$RC(UE(@cM zRH(w+3iRDYd00O^<2lUXvbD1}hPj`C8HB*^nTcvp&Ykz~k44{22y@T(#BzMK?Zt9- zzi5E0 zpla+fL3Hmiw(Y#o&B;S49|6RHNsf5=KZ-aZWyLYPX;F)0eFsx>nbDUu5K_GA#LzXC zT8WelJ=ioJkiHR5 zmzNd#dk_bt6fvsigx@Xs$6^VNo4U%f>JBOh#OZdP#8pmR9>WyOLj2(y!aXb9ayxtm zbNLYLeg^y3B=yhM3yJ@{eBxX0efO>R{%`;K|6*lZ*}59p82?v3_RRl#`Sq>xj$LO* z_L-^OJ|@iWx6*oAtjE=d#L)L!1r>)_Ve?P5vN2YSFXMe&wpB1lhQ)K$onk`5WvQ+*T9;-L9eY@p+PZwhyz2B^3fo`f@5+QHglQ zCRK8Y&#Fz7Mthd|rdd^0y>t-$4-%M1y+zRUSMIxR z1yomQs=+S?cN8X=q_@nP5r!_KGu>f#?NFZ`<@z+pYfyGKOoX5Yw7imGk>+VXMcmK( z+;=3RCZNObu~fL(Siz1o7;B~ILugZ}rYJ9A>C$a)%x_A$CK`B5m)oxsT=BcG*VHd1 z6D$$5?r{xNDx9OMfh2;Y-1!ZrN0wuYOu0NP*>Wnyj*f5?A#;bClqOSf5lkYhxkY1Ey6F%n6L%kk4Tv`J z&&}J6ioriBp`kpnpo5!*ie2mt3L+2V<)nL9)g5C7Iv6}k#(%9nDa4@(vOcYb%){X+ zms|JSP4ljMLkX(G=r<$}#e;vMPb0J?tBg3Ao^P(#(TQZ zyy;?qwNFAtdW}jE?Iu#hB>tJ9G>A#e!k(1MJI`s!12(seBK_fvi)DcG><_9+oO>XV z1}TdK(f;CtIm=*a;_Rb-Mz3>DXYJO>D;lF~H-PwTlybq804FJHJVD^gsq_0tK#Y0( zO4NlGX)E~^_<}u!#UoNmrMLE3c0(3prQ2E~y%MA@(;2i3yz)m4dk6SF9Hj;~LA+cT zwFOD?CEQ<}yqnyls2g$7iM|ZltPmwuznAGZm~jhth;dfB=_Tx0p~(~fi)*->nHJFzpRZh5k*IYN?hLX`w%aoYjcr@=oIRXylu%w7~ z^NG{@YjKo~E-%0cG0cu`PWL19iZJ|{-W??VxfbKDK6kedRs*M=;1P%ZdV?S~o1h@b zfu6H7DzM_ijWw+#K=b`-pr>fT&alXJz_HM4J_Z9^=-^>cFL`+~jtoNrMNc+E9|CZG zQ`N!u#@p34L;G5&;CiOcX9x5`ZYH%7Oh-B|;U9F<-g^qSwh7v@ zy?)GJijvO@`uHf5n7*YiG_$7UWIW_%WH;GwH8Gz+U4-LoLcP2yUcIn|Viw zfKrGapoON2wHbk5N1n5C+*W_I+3`NPb-Y4YC5Y+mHgRO<#S?-&ZTmJfD{+2`q{@s~ z&Ro7=W@ODZZNY#FQ@LAz24)Ov(py$coE%s`y*sOQ%{Y+@WqM+>V6PRfXRTfzwwN{U z@LZ;u?qzy1^8DPgGvdZx{oAmLD`62V`zoclTXLt5X!vg_@I|Bhx{&y^q|J5&z0N<#?|2;rUM=Eih z6}jg~tzNHRzum`zQ3@8M;$qX-)uv|ap;q92TNt3H+w*Po>Z=2K3(Gn17Nb~1 z_Hy%Zcs=*BS8H^5Zy{wL!jrRhi)ZQHrrt8+cEjQ2nkvt=z4fAEuxLks(={}#9Nk?nV1>t|lI$_T#6IULwFCpfDkR(r(3u9cGWZo`4R&&?37D54Xw{j!92b zh)bhBbAL+z!Hf!PA8oaD?V`2Hbs6P*r=0NiAQg>=HZg42DqAw3ykZ$=IsNR@jT)V` zX55|6aj_m@&uRkB3q-M{s{P}B%aRWEO6TiNK0k-0KzbKez7s@kkb%qV7h-_C){P*1l z-`Y-6zK6c~4A1*l9;SiZ`}CM6@spe=-fx3_f3pry;-9G&&3$tYmowpv4KPfs?0cY& z2J$O@=i(y64o5A52bUBUx8JQK*)|RF^(tiq&xkc|WyUq^| zg(9EW0E5VXa4VwN)(=M~H%2I>@Yy~R7bcviQ@zql4camk>$d;I%a*S+hj4B#n{z2s zdjXUDm-b~% z%4EYkQT*UGjPpT6?Jmy7*XIB=bw`((}( zCJv+a0U7&pxCT7W6vVW=z-fr1wFuO~$J|oJDf_MLlzA(MNz2Yn9;_3U5DTp8Y(;-m zi)fTq(BYX4q37v+I!a-4Tt=7wxH)UlJU~n(9uyJ13N}2um<~_^H-eAn4<^ z0w(|ye%(VeR4SqXf(bo8!!dO?-|O<6a!j#xmkgSh!nr$sj>a1cCKfs8pGpc-T?y<` zLG06<@R@$k}^brC8U&x*?#x`-o zaAo^Z4h@%BzpW+x1<69v>MdjI=quSHa1hH%Qyy!}Qy>yfK?NG=;Ur29!zI6ySL;D? zOmEPg#dMi`WhOu+pZemj!UaSi!|`__h4Q{jfKo@JX>OmUot_ptvu&Sz5>wz2G}@-BUTRk}O_UXFqIK59UUrL*frH^1OC;TV zF_FfNr#x9_8HOeta<{_Y7)&r&sUom5gJ!-WXYE>$R+2I^Wf=RgKQjJw5tFC(FX?!R z&1P)KyV+cZt@Plu3Hq#0e{?KgN`R+IqZg$KQ3(w8P!R~#AJ@pPO|vL+DN}XH!sHnW zn)-S6wKAGU$yLfKUq+W~hi0n6>kC2^73C>z>XM}s`=4Ky_3kJMOZD_adqMJRDbI(h>X!10JM#;f`1 zAzcz`VK#Vg0A=nc8Cn0nLQPK|vAP8lhj_$@{ZWyp(eM~=z^YN=&eR@S0)8LwfxK|d zP^86Wzs=Gg!CafRdOs90_ogU#*B2qwDr04B;U#9PWBz%iR4 zN||o(xIHlFK0gc3XC%*6)agJDv{Jw62{abs3{F30IGWN&Jy`f#M%Bgd9LTa0d>sX0 z2F9%bWKyX~I~PP6*bxzkrWsZ%K_v$6Q&tYbBVWv5eiCPjx;+|`YCgvJg-=PtWYVwF zD#kT>BJWIUh<*Y-Vo%~lE9q8-Ex@AzRC5xs5I0WQq+Ob{00tN7j|FZUH!$TsSLIAS zk6@9ZH`B4~RT`(WSH&bu;<|QaT;=v?a{>%x4)v)?-?c^3(h}Csp1+k(Ahg=Hno2rq z23)5W9>V&r$_rys zsf^vCX70_fM6$dq_yMaBJzu_2P?%%Z)`@4Eqy@YMCuv>|By<#rcHTI|D(~!%n-bD4IF1~p3?cTJc_(cZ*dpS zQ0Yi?iy(UEwS_hTk4*@n@mQagwC)3UUdgC>FyYHQ9(@T@WT%JT>7YkaxU^vOF+ErOCaRyHL>y?aIBJ z5Qr!V@j6TEp1f8n71mRyIFqVwezAziE!ARR#cEEBQ!uYf=)D)(-X=mGy@dS!9-7*D z^HH*L5wPzoH1CQ^#n)0{i4?PWVU~4swPwiijp#VGoOSjJxP6=oyW?<9H*(LQzZIR0 z+>#FPa@?vYQV*R}wInI0?L8KT+1WX;C{=vJQNFwk*M_-nJy$RF2Ojy6xHCcs4m?~0 z)R2Jjr5x~E%E#hoN>M3IT_L$ZAcJlxKs~~c8F#5;V|37ze z|7K@=p{?PF&4&DspXDtfuPWIQFRDa&)kTr^8L`Q@>}H7_^Oy#rS(~GLg6{__gOGz; z1S+LS%Om03wgofRbB`!!o}5oR7MU@e`wz2|6QxE=Zqm40=^?<^{mD_}mM(;xgu=Y? zEQ!?4Js^YUEO6+xwEV5Tz74Q=IV)NkipZp+t>9s zBtsGXo-*|AETQ@r`!w$?Au91iKAmr>y(SecCpUIX0~OjvrJz&Eg!7cmN;6l*ow(BkTTf;*88ho6OE7M}-5jz~Vrtniun6l^wn8UZS=}X*qTQ)gfoLfPh21xKOq) zjZ9%^vXX*|tHRoS4O4|C-2F&8wY=cAh|RJ`LpL97KwuQQ3TYMfY+g$|S_-2kwL;1@ zUNe&|f{aXyw4?l2b%P-9qdbt>h}wdl9DUJZ-7i|afjEI4d5=NC@F`xj0Vg3)oLF~W zHqt#+easevIs&J^vx%^4R7FXQd>2LOufKmaOWt@Egle)b6SEH{=YM{WR~-XBmMB!X zi|l5VGHQyFdl6;Zro*;NSpm~-`jAtwIunBEl7u{L4BUyH{^ala_CzHf(tmiq?oTg7 z?sxV=*&;Ix;ZsHlz)`tl#Vict{s&|46x~_dZh6PHZQHhO+qP}HV%tf@HY!#n|B7uV z6+7uX-J`#Ee`CLU_dZ!i>uimCjq9G*oWIE;!B%0Z{>nbXpz5*!nD9v1a>>!C3QFE9 zMn9kQ#ih-?FCXn@4K*18hlHaDvu8{g8`+t&VuQCt1>N(^@4C0U7 zg0sRUDgz1LW1D`aTLj!K6Bc+dyUOg?q>2``$sS;Thjj-7rS8@uu5sala5kVS9bf8< zmFLpx{#IElIi9Qg-5f6K!|C~YvXpzvVb>XLP<$ozOqK2XZdjz->r9498)N-(m!IPl z$9i>>ed~LBw&8rU$=@+dbV^xCj77O6O+Eztn!-bA`NEP4`60rR2ca&>P6(pmg9T{p z835dZN|H-1hUQ9Ah-Kh*EQ6X!qkmi~FeXJmgkJsaRD1 zbIdm+#zEuTSQ!4iCd%awS)v?i1YYZ)T?ZJvAzM@$DaSA7SyN87DYg`gbv=hu0**2F z_Nd^DH}nAjS){YWdM`-|(@YQic@?r!F^<(5KkAdOViQ){V1LGNuOb9uzZ_t$)LYwb zGc786hAbKAl=|DBxno_mFIa{}VL1kr*DTFED)#LDsH*ZQmu^NkQb`L&4^}OM^-^W{ z*@Ko;B)`YD1Y6FGoJCXARe)MbmgF&8IlWk&7n30{KNrKe=dI=l#H&;86z*Y3lyNm*c5TF)RY*I!yXrDJ^96yjF) zL{6oW8D_DuoE>dL-9{uTOTseL>Wh4{n9Kv>oaZwNMu*71 zw`%Z0b1s;5G^EfLImmwS_qFU)*+~ZQ!Erqe9X(#9$e9VEtVBRY*n0^!z?V76F$Jxq zLzi3X^8Mwr&PFjdQdwVtZ8P1lufHpHU-jG*{f0bx|JE=lk~$GOq0`uKsvSPW{JG=u z{05bTnN5H2@o+2j>Vg2p=viKpg%>yq<{N*$|q7#Cok6hBpaHDS%jUU2EH$Qi_NlEMh5EgBHTQyd8f({$#>v zo1@&-d71Kb0~Z%*TwFkks*Jv zy19r)yOrW!A_Uc(tYpTNJbOWtUTDEtD(GM+-)1TLFd<#6C7AQTW5xYLVPOT)gU`S5 z2T-11!@K1#m~y&WQ}HI~x;DOb`#Y3+Z9{HEeuHA{y;5h?trLb=XzZFf#&%`?ZOWGN9R>m4abXqdL2v(5g zHeG?`we4dXZ~B6BFVACFQBI=>><9y_!kSimnzHMxopm-gP{8KgarJeMK0~&Nlq$=r zh9nj3R0f9K`dyuaa8mvQ)2chPF4q=}v9YdL=O!r#+9t*Ccm!vI&#N5!7Be(Bl9cT7 zOD0YxGongTA~&vwOzHvTHo{ki+MOPqReLPN$YxA!Dp|W^#QW>D*{_5vPT63pw;EeF zxYuYPjfXd)KP-nzXkhT^hs&E5UT5t7A;?0ZaCytzIcZh2&k{WfHNsV|vEHrf$Ibb4 zW^`@3%puAVfXW2gCLg4SdVC7F)nv}?wswu}pAVYNZSAixi)g0Q#D8R;bWb*Oa?qwL zpFqx}nzM@ZAWde_@{Ey2kA1V*t_%|lTB)m}oiSW2%@rb}`?-P}EWN9A_(#+y54!77>t4hZI| z=L^5>9ITUmDP_|sP!X}8jUXimsMAplU%CyZy#`+GnPET zAidbV)&7LCWtOFyFZ+gO%Kx}l`loR$$@pE!7zPL^gXez)$8&S>HZ-&{b}+O1&&d6M zhc(ufcf_4Q?!B%z@^TIdANl-bBD*FQQpnNcfCYmBDemgh$!2F4y%SA;O4`oHNk*}r zEG|Z?t4!)(3nZZyQ8v zmK?&Y!8O;F#cJ9=okg~9=N(@??vuBY26XB7b?S3q?$<2Zd|I%){M{X1h4f#dXP}gU z;(l4)4t$5MKfy8Jv=>BP@cOmC-LfgTlb!A=w6^utD5~{9HM*id*X^D&=aAv;hv+~z zx0glmB-@t-JdCUQ_Ig|}>e!DPKYL9up(Y{UhsCHF%U-7un+P~X4=tEC;n9zmyv~07 zJo5T8*AyY!h4uCDc0E?|Qmm^VcYMxf>%@9K*h6pXzpm)Xxqjw%JJEaj7fiP6?JlI~ zZ$E!FIHM$I7%o`>9Y>cnhTo#c<@skj`}C;ewd9?QB;X2Ts>RBIO0bI{616_RZN-DC z{@!VplA*1Xl3@{%uMvrHr-04i-Q;)m6^$9CqhwdGK z_)QW}T$F4b9cvK~X63SHP>#;VI+@7l{ptZIX9)B=m{gMau9P7#B)FqnQkC9$joS*j@Mc-5!+76g~nC5!( z`@Uko$)35sx8f;YK{It)4#;xv2C4iV9kpuZq~X%{`>w18qQJ(Qj4s#DlQHh|&+Rww zE1b$8|LYKQZ1(r+hoFjA&X94zP@fD$q@~$kGsDmR739gTk+C=7!1llkx2uvMG$`b- zT|xuya}f-Vm8j7%D}_S=4?63%{)Nk2N6zk=^38}_QhLF4uteW6=w!UIvmX#ID9WGj z8LDdB*%#cY+&=e+XLgV4QT*<1@Ml=gLil}N8aIJBz#`BbR>Z2~1a7m;RYF^mqC4T# zr?yBt<+iufDECi^y5O@=7>Y(hUl-CC7Zg4UkJkj=bmzwnLFXS26YaTp@SmH?5?9oy z)k+csDx>_(>wGAmV(g}uDSYhh1$nbDSV&Xl);6sM5EQnzn+iJQ{$cyZ|Bzyeo(JcaDLeDH-pm? z?Mkg%#f;_!q+8s}grghu9JYKzY7Fz z>mEIaKg8bk6q-=LREBDzCaP6x&52J`e@BSPOz5EJJ9T;X{c`vm(6amLP}fbmQ?T89 z*ryBu1hhkMNlp$&1PkXPVB!t0Y;P(_k5fT8DK0^!tepLt`4 zAHw3NkTEhVC4upQwR7QDIwFM9Ssd)Z36rNpdt^vL0ZK#oBlw2W6y8_&@L*9Gz8g!=9)0~Na!rhto3Rf<+|Bc>G(R*Gy6oj;`F zdoEQHLxZBQEa^>%k-}}*8ywtYa&ud43EcrdZ~2}3mEX?xOXYVFN`y&J61<cuZ1GqsAjM0G;|Ui2Cg*;NQ@FS3XqIb8Gkasg?Y}$M&j>?qK!a= z2RW6K4l(`Q1{LqiGGntsyV|e>Q&ybtBRx)bV%$(C^Wxx(qbAjM$1GKLXSu0-2(XL0H={`;7;n9ehmB zJ-Ku$JeG)gI!Z}RWd}*E$$cR~cFHC5H3fm~x~eEQ3|y1yxVF=V7h@sGEDwYqj{rhs zX>N&ZR}P384Jsx9&;S)%y|A>^L_Zo#!&DxWDSU)h3_X4(gHl-5M%L>1f=oEK&7!Oa}(RHWAHF^a{oMoXqRjjQm zL9t8EjWB}S&Eto*i=}8y&w-P5Rv5+JCW1}|&wFpkAyZL-om4h0q4!lkGPTn&Ra_Q* z*JQQAwbA3kC6O0h1~9&nGzl{|pGAgWV4ra@pbLdD`wi4?d)P9WrojAB!1JCPm>(Byde!C+@-Icay78-hKixR?i{KiZi_s|irHV6@mQ zU1S)qrDqoV{a>tc%q(lQXqZ;^ekfaqpHjrsaT2bL)BWIa+6N&EvgPcBa~BsZ&_&`c zLl)@`>P)lUFK&Nds;}-4R^M%ab&4s0ljEsy(dHJV-guyvr)qYQSar!BPqu_bD)_~e zh(`*|f1QZA^@B&j405NGAc;fUx0(=&3zO(pl$zrA^}vz5af{NmC9xCJMyJkaewtDe zg7Ln}%$|Py1=UDB(c9f%9XM2$5zU&|LrWhJqWw<(Z8QM6M7nlTGG~a1l4npwQ`ruC z5Xj@lKcfU)1ph?Q)&?R*;pH=DrkdgDwn~q2kC~ALYAS52R97_l8IwkVqUjiyjW08= z6-f?jlIF#F0Y}Y+Mvy9`5i4ha-kL;*1Lm1VR9fWLpA1sd6}9$G;|yx^(|UP0ezS3jo)LYaoe0YPPtDZPdgyUxF8;DKU_6yh7TY< z^%-h97{HyADuuLUJz6u;C9cKK9MIaAA&7J~%s3#ZIYx2t32fx5Ode`ZPdlDNVrCMo zTXC{6U?&gwj2#|UBk>uD&q_w6XuKfF(sH$x;x>9rLqPcQt!~d%6nKg+{Rk}D@cVf5 zYkD&*bL@X3{QryYJjdbShu`U}c32=FrvJ_(^?#k*u7+0M`78%R*Z+{v`Y+tvhw1u? z>r7}7*DvVlj$QgKvyuRcN_rC$)D)N$D!C2u1pft}QV%p<+b%=F?lO8*G&KlKJ@QBH z>lY^iZcC?yY1n&Q8v0bcw)cc(5u&U;5rxQ~Ip>a-9pNoS$p8^)thQ2{yto7iJ@zST zDYHctLQWmHo9WEk%%l;MdF?QKb$RI>Z-LHUEX5VLqZay7*k3@T=Ye#KVLsdv&;DBE%-%>`SWt69iym0ANcvBq9MA5{D9 zi9E5Nq>BqFDh~W^P3yfyXIB2~l6cQ;>WoM|Y5$j4W0i5?zRQ}}Y_n8#RHa*~jQF3H ziE+5>7zTGsjdUz+N?Pb*rh)Xr;(Xn5)HuB+O)*!NH)+~t=u?h?M!+NUYKVB7*$1L+ zFWCfSBeM{k(UU!6YzfZ_86F9A)2A(l=MJ z$>~CoKbeSOx=)wR=Y5P0A4GS9u(wnYuo=fU(;!&B&VtdT^##w6`y2w@A3m=r4mY-r zjc@&AD%><)p@r0&3p1D}Df{y-8cd zQTV5c?ccPqxhwPklaAPYL0_WBMq*A4S)+m$EmLTL6+gqkeuH9|<&Hs3{(R#>qM=Ef ze-e1V((gHg8CKBZwx@=+*kv=4TA-2lMzIq#pi~5QZ6zX)BbNhd8l=G=ne^D^M!B!@831T5Qua=>5q&1djn+Mv?;`6Lf0pQc9o?8{d;lU>adm%2cSDj|dAikiCQG5L2EXMY=T@p?=Zr8v6zM-rOk$_Pa1j8T`%!P(|-P zk|;2I=iYPf4o+VPOhW!R2i&Dbwof)uE#$0T+}zx}&UYv@y=B!^uU%vWe*KN6Hx{oS z(qb|xM6wG+rTi+Q9ao(!to|Z4Zb8zaqSG#$;5k}WhWj|&5|0^<>r#eBAC-wzGtjwv>AK#&F%id`Da!}7C-z`BweT#`6~+zO4c0}VjM z+CAJfFT8J|Wmx@6bcth_97#n`1h>Pn3Y zCz~s4ZZam_txa(qJ2E5!`R{OR^XD1UBkHGLSW7)ibvrLgn8^alSAR3*x}KPEPk_z_ zYukWGGDdR}AU80dJr+5`DhjvJgbT)4y2W63_Jl?ZD*1>kYI3k=FXHEkyzT0P-aN9Gk7&(m zo(Fq3N{#mt&fWea{{V90i}SF-G9d(zYv$M>$kki9P4|v-;>(6c)hu5@mIon_R*1v5 zS5uK%BhsBZuBHfe4)SpbzxH7F%Spc2$1T_{xfYYlH=dJ9r!*>Nk1gU;&!)GCNSk;M&($w*tD>Mv+FwR}9Gk z!n>ch>+rd$QZ4Ak1n67@(vbHIPrV**OaPdxu7pet;3^Vg#U?k&%=)Alr855AV->Z$ zd;nn4mdyPH%>Yky5?Pc-!Z(c+JAYTO6^7lS%Uaoun)!2$9^G`qwEGO3%cNJ2vVneX zX>gChUGKf7I$<|E;j$|M-YxaPC&Dl4<*ZqwyMfRsUuF)d(xb*8`Bl4LJravV8kNl6 z58;JP|Db3gQb{v@95nvwPt)6;G{JL4_&F-nweY28lvTZW3v;mPzB?W+omA&3rIQ0L zfobsU;K6iR*VPH|llz>L+-4*DI$_Wq%1lYn6{YkaNDt-h*Lx}qOa9qN(a&|6MS;?G zxk%w&dqM7{G5dz?5>F9Uq7hS;*}PT1&KbsNMc0i~WW*7a@uMAo{=qH1s`vU_KT!bL z7f{P9p?O9zl_dIIPxfmfdk%oWZu)9)ly8?k@T>(=9Dv+#rQHbLWq;NA+Bx+5QD|2r2=QFU4U+8&0KmyeiJ2H24w| z;bOe#&ga<%h-}UuIw+5L?FO>`tvn`JxmI|HYGYl9%yRS4sxGumC4Q*Nnvh4B8Ih10 zw&GJqD-0dz;c1ce&l)z^4$+bV;r-C`BCUmxLgnXS5h-mbR~=Ym5Bf0fs_-3P&CW8H zhTefzyNs9ga-HfKs>=Lhcy6w^Pocj_VLfv~QLhQxNWe1?T9I3fAnYl@0m6$~k2E`| z_rZa`m`V$@*^yIO# zu9uo$2l-jf%Cnuj3K6sid{P4wd6M4noz@PK3kas)dI=oc6(9&0ptsJSXe))o;_j~i zLBDy)KCKsspYeXS1m zRW!ND%Cg=eQf5AME+iC8>s|qm8N0$1{q_L!Wy`?WyVeeV)Pi~m(za;st-dWE)DHJ@ zejMJ-l1AR2wnoH4>by{J7Ma1}1i@v#b!EI1tb8`V@4W6S@L%-<1Dv$B=COJJ`F(0& zTd<_peeb{9+AgOU1_IGQIoCGymO+6|{KSa6^xWApy(%_Z-Hm~3bX>GCKF}{cx7GLi zKF&60WA(d0^H4Wsmc+Xlmi2+OO+R>g+D{Jqy&jO*I19QPEVTIpwxg|sU)*Kni`eNcQS{XY8XGQ*b~fbR2_&R zH|VqDu?8&?8*4E!3*EMAiMN=8hR_op!RkpKo}l9{;j}=tE+i2+zTF#2nnjS1(4}7^ zg$_A>!LleAWb(fg4#>*9&E+SzpknM3ODv0aNpxetX+Z+7ShE>&yrWPN4j-#L+v}oU zk=V84)T>l+M+*=sBxZTyS6Je_CVCyB-|Qij^DuPAnmqoT#T2mry7XD4Vb{TZ)44tp zezXoGTfKe%V0wCMOi}ah!tM6XIlc~W-HzRSp9XBM$b#?(3buR%NYPb%n7hd(_zNkd z=~oLQW5Q*j#zP z66xiL>MlGJT`JU$fNj^o*PQ=h6JB%OJtqf_FP?0*ZjP?GoyUb*eU1U8oc5kgZb|v2 zg#NUT#o@55v}k5JYOcPX(3iTXz)}3rvo>KcENipedz`K=&ta;m(dvNn^S(hkKqqbS z=i8}@2Ip!Hx%8%oqm9{O3jATJnjk@^7J)2q$@*pmKF zIM+yp>yO|!KBDa#AMxLgmH)dt?Yn^4)%?3O>0e{zf64KOdx>&C~cI$XM;0lso&5Dj1L#9bwv3hIla5%Sm({_^V`{ij5a6>NI zpUqk4eLX#J1`?oY6?KAmK3CWMem*3$ZKM7S@x()TV7IJQ0VB2=W|<8xA1NeSxM&E< z=W_OB_!lr|7lYheM0jy{&4+SELB~w1U+)KWgh<)TG^ylKs!YUA%1%|VnS5tzVwO8j|+gbHxMmvli+z`4wYm4aTjLFh2 za_ZqRW}AMyae(?>hkXVOu=!-1A-X;dD46Fp9I|B9hMye=dh_|L_wzuu2(T=6p z(07uVh-xc4rm7%=*U*J_2uFl5pVAq-0J*xhr!%ApsCG7oyv>um z+op{2&RxP~2ZI5RZ(=PpwLu#F7IxZy8R-^+5clKe^m&(~f@t+z_C++277wy!n(+GM zcb<~td1e8{zlo9<`blYXO9=PmZ%M1=2HRg=`|i!J+DdUz(^D1+-~}%i3U&|`xy~27 z6DzwnD$TjZ&MovHi+_1y0po&_)Itx~zSl~`3qK9)b>hpk*IyWgIjob!OpORg~SDSwS&!*t!}h;CmW6UG?qtwLzFBHZW(!i3sMRaAY+ZUBvrKM3QAj7&CoP z+WcMRfpEsdF#>qhxsZ0 za2su1iZU#p-qb^e15piE{YU-GQpHt(9#iF8a}^e~-Nv*|XkH{}JN33t^Sy*Y<+3PV zT*=s9;>noHQ|R`V?Vx9F+6!63r_qM8niYFUsN&hiXyE|!tltRhU|l06#3yz1ywz;< zG=Rq3^$mpd`@;In;#3+-Y2#K^uDFH0W&@U?X;1ockN%?g!HZeUNg$S(qEYd(6nf&k zCJ+_E^Cu}@qy`LDnLu)ewi&NL;g9BhHKoJ8x3Jn$z+1+CiATKvjbpfnqoXrp%h6IF z=4x-^h3}8n?Q(s)fo;@ihfjw_O@!Rf!vck=$bO)IsT2P=Z2$BzVG(`*qcXqI*);#% z)%X93eWr%r%EbR?s{JoyzROHqTT)K6pzS-_Up-vG7FU|4zR={b;r4C6q)*oi*H>&T zN{z|B9oYVf7AU;34(CZi#PFFbJec_LeXa>?DU3Pg674+zk%?0(rw`=4WEzSC6P~WV zSD);}Bn~YWJ=%#1(kcl<3rW;+j&<-1sM<0D$CgYUS<|(~Bx?V-skXwfR zfjIzj$G=rcOUQ=^ARmotm>s)aBdLhDjxi>tB~Fz#I<3jmn^s2`A+8|pPNZWB+;z-h z$4=fp{GJw)Q1VyuSoKLps+RLr>bmLV^o~;t!ki*oh>x#`bYx=8Zx3@Wdml_JRM^Hg zN!bamZnP~-)uQ$lI$K%vBts|BoR#-yMupt1whhK`u0x!}oz1FNUZP%4QlDHWELuBM zicsX@yOQe2mfB*jg0QzF(R)GUsgVirqjGs3;x@wg-O3Wbt4J3eL^5v!!VTw+G*KP< zy9}sGnLw8J2)Ab5;}HW)?ir|x2FUe0U7Bby!r!Kae%KRRUuV`xRy~RqBP&Aaj ze#1O|SazBEQK_LVyBp@)Bsjh(wN547HHs`l0bFQ#)#{f zOgmyeXb=#F&u;w!+&x}U%?=}zzme$11J3@7e;rmx?R=KvY>>BG@OehNLXF|?6hz@bI58)?YAU9g<`^`{vPt`i1<$KKnUS%TIG zSCWz++7R_ z+!DQma5UbJQT0E52sZY{%Gft`1>hgnju^t+xE0H46ut6NBZf&A+q^v|4xNwie!00jgz!|^|I z&zM{?oYhZ#e#!y1I!uH_O_=>FlfTa$Jo|hk(2Md-V2RbE}3@NB+6sa~r zB&(v+8n8^yMr_bd*%+!7^9;nbF8pqln(a=*MX=API+`b!A~WDiw}WEHFsCVxLG6{T z1e~1KBKP5ICk9gk6BOVXLQ3@*HYG|=?Jk^fiT1b?r2Ad?uq^invEm{3!4b&`dSv$peLeWBAXqCS^_NKz zIQX}B!?Y3h>&jdQVgi}@{Q5%u8DtdpiHvc-XI`M86sF2o!r?+YE=1_GBxa*Zh~6FH zy+HtumlI*R>H`jcAud5kG zbQ482AK>#iupr1gz9M;)4q)Zt!}Eu?VNrVNW)uY0%;GDAn9$BtS!-K8?Rau&r7=wM zGfu%P5uAPmwheb=;%{p`0?sci4M<*2;}0lhOI8LN@FMU-*SjSA6&j6QaZ$34kjmdM z*rAVlFFK};z01!OOm4k}5NyNPry&>tg_*XQeXNuTMb42*A-&vys$(xW-IY7`66Evn z!^tyNEa+TQsDjEa0@Y|N6ip45cwlZ8Phgt{)TC$pt#*!@SY`^y%YNT{x%+S!8bb~7H#jr6bt@Kdcf-p}~YAgM85hdqyMTQLNQ z3A2SBKz$HIRY`1TQ1pa1E@nxQRf|xnmngNXHjNhN+$7tJ{9_O9!vHzi5{`;KYu0L1 zo73r?{3mgee%fG;eSvM91d>Gi{fk`|W5XC6)ThIwjDb1O?K;pe5=nCp+N;asC|`$x z?!67jwj-s)*H^tUge9Wg^P>%yOxLC8Wu_qx_H9S)Cgbx_*SSO2 za^R=DIrwe%JcP&fM^#R62bXS(uVw>~?vf(zG_O511>Su=hk*;l+%o)-Ls`J`MzINY z()&QXlhk1-u+?;Nj}63NWBip?Op`9eoHg18bIc?oK@{bD+i^poJ7LLN!;VuXZK%1% zYo<9Jv{*Ji!uj{*u6kW;w5{yXTl-c0QLv6Trom&qrXiubIae zc-&Wu5PBQht3nd=buOdZZe{E+=qV3rEs0&4jfvDq5{7o3@osBS)Q5}Kq+v8eU~*>m z=8+M`zm4?Bo?NDwFKZUVy5*31qNaa`q`BKFO9pc&+wo)1yQXNbl&4?##>7>*Jb%O# zC&3G9FszC_BRnuA0poq#{Mnb5aJ`p`xw-$u%5QxO)JHqY@#$r5T{@rXP;(hluh{q_ z=^QXUKaPTtocl}2YVJ2-JBfHP35OEpT_+ipRxuRzj4*kBei35Q`LNs$k(Urj%Kq0D zu<9TcB^^;AyJ{clv=Zyf6WtPs9=egBj7xBIH(yzR&16h3e13Crm`w?1Cpz$qC2b@Y3?KL*{jPotr=0a} z;ygTUIo*}{(qT$(+^hj?Yj(FHp>2b}qI#imO5SaU^U(eS=DR?m=N8O~dk6Q15H|a9 zwk1DDeGlcMep0XCXL8rX7GlGb(|j#!_96L|gO&cyYXM+KHlyQ%(-ChsGuySnikMaI z7x5k1M01~vL8|W!$8NC-B%)3!Sq!26E;Wtf_7%6;+mF`-euKPH$Gdlz;(XJ@VTx1l z+e)kAg%a<3Y#l+9d{lRWw=%Ef$%?)xg+JaGGufxz;vIftFd7M=Sl3a_WE+HB^tMgr7e@_tigTfO&1$qKWUwE095M%y0z#KFJujq!wz4iP=)IvZlO$q;;$yZ6hMb zPR6|k5X%~B_28zE&z6eG@?-@1ziFf|&`}?`=s+M3qXQ7uvBdO&+9R}?zbiycJc3-- z+$@Qt5=&Z)v0L`Y0(Sak&?aJghyc`^CfP0{mXidb+4M!&>q-lUa9{rP+Iqj~YEt<+ zX{PHdLUAIe&(*c#N|Jx~XxoanWBW|{d#05e@j7YzdYO#%F#`EuEh|Ei3xcQm<-Q+) zyo4FTUsyb@MRa}i^OUDho7X;+B_aeW)hAAYqcTz=0gA==$6$0MlW90d_O!dQh~ z?I|AkMw3Y|n*Qfh$Q>rnAC(}y5mgz?W>8$tHNr5|X&X=v%Q%NZr$7{_ins!5Yk zdRHkDcTjsC{qPOh?o)ciRC?DWgd~`E-gplQ^qky2_=V~(+F!u1*!*#}je3DSWw0y~ zqJJ4?wYn(dSXd;ifZwUPMYsi~_lSrUC8fq7N_YySi1!^7LIP8N+P@;lPW|lvwGt_j zi~&PRMQNC-fF%@=MPyqVZBQ|03wn^eMqMZq9qa`F{L=iuq6Cw0cF)fOuWG02Ob zW6_s2nG~Bv?ym$UU+ndlhoRS`_3rjyjWCePP`1OZjpZh|!~mv6CDJxwk!2Y9#g^%$ zZFansG6YCt3}iG-vZ-Y`E8C+>)}qz9up?G85m;RW1U*DvEL^VN4QE1|mXTfI?4f?g zSxQ2Oe`UVma)A$q)BceseG_R@)@E-tnr4K;ZSKBiy8dRmb1M5MT@sC^N+@8!!cg4h zhbCs)49=i)+@P!I0sZi6bB*%xhq2{7r=rP_W89u3A~%h-L|pnw@L+@I@=~A_-QX!6 zHN0Zoi4+-T7 zq|dXa5i(&6o#%Y0;b=aJnjE*X3Y#%KaajCs9}q*x4mtz8-o|WNcK~Tehkr*0ra>2? zS5dVEMnAiwCkhm#m};~dq8E`P#U;Tbg}b~mEAL+Wz5wnG=Ch4Bt441P18ZuXhs-ah z%9@>@oxhkcA`#xAkA2!-+lM+-id|0Cf6ui)4Ho%m>5WtXF45rpc5k@0T;Sk9QE4wgfUn9~ z=PdsMBu4!tju>5)IJT^tvY!=f$3l3>x!|r|rk;0bIjroZm)zbo3p&3gfmTL~j<5Jo z6KNUi@fpFk+!U^u+p3hvI zAwCbmH-*u0Za@FqUMG`&r~&WGaotOh2XEHrmrHZbZL6zKN6UJDecsgp74q!}G~5X= zPyhu3f(z(>;lg;b8J&%{$AdofRrne@YPTz|4uNh>4x9$B$)WT6F&E?KU>>L~{YA}9 z_?RN_n3IHw?Rxq$nXfqdc`|(mVT)STVtMepApNCB3ZPc%%_F$}!TB$e|*AMwwmVJ@sRbgu$DvAty z9l_irR+T$VHbj91CyjuK>7iB=?=>Fa5QR|{7G0y88z6p|%(9Zcmy5R|i*6tFapo+? zKY29H7InsqiNuRtW$(btWW>I)?Z%r~`x&B9o57%BDoC=S;5nUkQ9>uCWU9o7⁢9 zm~}X*XP6*lUz9l)-rA5N*K+OzL&%{4(I@5_(ia;cX zQHf9u#)N{AMG*?ZrL2oK{PtN52YG&?f`id$n*SxR;%EF;mvi|Vs0ei#gtSIa%u*hP zj58F49JS###B>BL6SN0KRFqhdlygJufU&>nH{k#BY*WoW)pM>{uK@X@15|9!0XcdY zie*{}EgUE)EQt&QtNWC^cC~ygaeVOs7|A;KLImtGc3j<{EAZmB1xuR8i0m{Sd4S2d zQANf{uJsS`GRhcq5gsdph}(OdU-$c7AL78o+B}2C-@aNu(^lEGB0U=5d z*<2+mZ!w@Kvc<5jF%KLp@c7Aa%6cn zQ)rQ7(l{tllzlO38TS(?o&deND})mbZ|6p|3FmE{t$4aUV*YE2{zo57pCsC21P20Y#r+>a zj;$S?99{mCGWc)&d579l4*MKvo5!?J^rM$>cD;t!tIbx*g##`6a*!vpg;J9iq$x3C zbLs> zNM+lGOc~sWhTy;+mqk7kG;3*?j4z)xr5hHg;7ByXYr*qsX>BeBupi0tJ0cXk^Gt&* znV3I6XEODPQ|KIg%dhZ$jkb3k3XGl$2%I*<*NS zxUKgdNMMAx*TGbxJC`?gT!e44n_$xD0G-tJ4js9YQ^i4YOf`NsP}b9HpU`fUM@tp( zz```;yD;(n;cLa%re!kuIK18Hx@EN&(^pOt&e_Ao1euQ;qY3De8gii9x1tz6!ST*G z&k1uXyijzEK5X8-%P}bsOgf7)kq+~YKtNy*N)6bs)_uqX^_v!vrUuvvTwMMPAX3b|lzqy}jo_Tq#%6Qr>e4Lt` zX<7?gcpwH#P3;iT5)n5Ur^QmZpEqa|%42?C=59}ncEnu}CNTvV&?$@;z;onhPqjx2 zW~p|UE%whi@69;YSvY?UjN@iA$&-k{D7g=J29qM@e*0l}Zdk zg&p6fC}a}_hUHytZps0#lP>0Wq?vtf`rRWX9JIV(acnqgr;S5N@h~kHVQRbrh@v<< zADkEGQl_rDRYAt1Xvjk4SFMo`a2rF*i*ql8q>z`#{m_Th3V#&{3J0eq3(0|<&lB} zG3Kbcxg~5%IYIE;B34*;s6MV*bY6DMR%^bc9C+oCg|-G|Zk5MQKm&0jvexKD=>+BF z1jR@awgZ2-!+TR?rfFd6XCh{I6f)>u3yb5Z6JLjksq7xF{BVm_)-*IikaiB^U>u?^ zal$a3R(OR6p^qt@>lQHqS@=O&+6PDcX^2K0@gwUvgog4u_-VJO25A>)DPxoW?`nms z8m!a1QI$l~`dmBBod|Bjf~zs-Lz+BkdPp8(2X+Ed!bPH9I9igGf4wX4fDd3VUv~&n z4f`ZEMYaX&T)%g$L}Kb*0vxHsyVFBXUhv&RT2VKX6@8IAv!?W`g=0?+_e!i0`MGg7 zcv{F2?<4k-axNEe zEU3}o!?CRcBXDrWO7c@D9})JEn|XaMn;nzWn|;;id{v)0>(o-~&2lYvr38iFFNn?C z&1B4Zt#Ad47vg=K6EW8{1hX;)0}o5LmP6AS`7}K&W)1cOxMFalNC13r4J3+DI0bCDOT$md7W$b9%6X$USo6Uql2MbWz z_`F$ytgnGvc%N$g$eQOpZmjj$^%(`5-*%*LFFVd|LSvi$vQwV$CFXBA>lbJG|GFvv zqYKyICFqAxfq<-w{)f8IQs4c1OXS<(`2UB;{{@lhB1_vDccgA)`<`0Cr#8M^BlB%2 zIWeDl+$e-Zv-5|a@#Cb6G8Y9f1d!~h&tJem#es*edBkdo>{vWG1I7us-}?Ra>oc6* z$Nv4{&;h3oUCI6GIp$rF2Xmk1_vyWOe~bboxNnDHCLF?;fioPj`g|C1_}~8K^!HRf z%IV46x9K;ZNfz|clhe2N(W;+TlFDiaP$PnzK*?~Vy(17!}av@WbesNO36tv-Dhrve`V=jz^&@j*6n@0TRhsVTOYY4O-Vf`U!c0ui~Zur+8y2p zWw>S8-4l%ca-1~3!*dZ|5KI2feAgM+CdNTAAzRVC`{~dhRV?GGFP|EvbDo(ur5`Qh zHoWdf-AxGS?o2a=K}t}L)NtffUq2xOR$bUbqE5f|_NMd?Pq(%XI-(YTKRzFz>pOK_ z)ELX)?O!m65G#=F7BV0(NkYm6j1yz1S5ClOZFvfOJq~X!et+fD{ZC~gpMxn~B!BOw zS63|gzM>(tvKHhsV~0$Ta7++8OGZ8+qo%0 zLB6aa&)0d!vmE@+))H@#_k$YFqf>tlL0)G!<}6)*0p6L{=r86TEn7KQx`~>Mo;@Qs z)~v2~7uP1{UC3MNao8s2vHPg=pWWDd!-d@|tl3rB!-;fii1M2LztD%T4~LIP%QAkK z3J~g%Dm99Gk>Qgh7{-gsG?V=SuKh+7Zfzn~?Z(XUU^BH@B*e*S7nw|>HJ}zsts!_2 zf@*?pogTLCEMD#|2KD2z6d5&2naomx7YgNvgx4SZ>SDeATnfudKEYta8XK)_bV`45 zn<272hb<#O+XwC#LvfcH zi5U?~Wro0`3(teo{?zyQEg$Rl>~9yrh>;P(GLJ3_5}cA-NiiaoLhdC~47xocv=j$7 zu^4z>f7^S$HgFyq%xQfH?L1eB$VaJrgAg*uB5fV)P|VrMD?27T--gBxmJn=|RDs<4 z*Qg2|Wj2z*$=&Z$cgq)|&BHIE0l7?fn?P5PtR1;W2+#`_5KRK3vc7qrLBL+g9+i186n8bAP=uK z^GDqprDQ;+T4B_T0oseX$xc@>HkajHB}RQTIk|kLTQBOi{tF zpqrtP?p+8MQoS~ z=%l&wX)qtmVJ+8nCoh4Z#YZE)1_ULxk`{qOhXuK(GZ`Hrri-Shr-(BZE?qb{fh`)s5{*wy*gw@vX1@aY~L zvM9B;pBodV=TXbwf`;Kn4V=`gr86}gA73bl%l)g=)77-hW=}gxOp~Lyj0*ra7L9-z zUDCAuBLeyOY{-^Im(8?*xj(jk>C3}iDvt@HMIUgBp4k>)a&Wr=9492q@SHpqCIKnP zu1XN%>@tR=pi!hexg=HaDoCrMgvJZijc80C_}UKu*NY9?d{WE8TPRNeCyMIjPWfV_ zHpoSDas)AE8+)4W7R2YcjCH6V&BxZ2>tTVVl_eIfTiZd?5OdG<#vJm>=cY&U>q?iG zU^Ay%_jYwssELiDMl2M$9aJS$S3)Qt4(T(oZIbLlzke&ps%oJJHakU9ay$@~n@^Z$ zc0ysGY7!Zo=HCDQnWwVq`5FaIc-(!V zc|jD2a`+mhaA6WvM4-%pxAj&+LDl6y*FV_I9`9S=nm7TG5b0O^5-tH_yBFYUK*PS; z2-uT{H|L#WC}ZwseXBSjXw7BqjjGREdJSi~FV3V+fJbu9*>$^Pq9pmve1uYa{mX`X zH@WFZn`R-K4Jk7!BsTaU-zXjSL@>?EBm6M?U<+v(JIrhDb$O0xmprP8d}65qU?UYdJ)OGf=JbMD{EWUYDrm5v_t z5M4Q_r7n`<;Ss)1>yk4^1|0PsVXUpEA8o!T+|+WmkgJw8i%?XrwJG=Jytzl1KJmLfMaF__&d(^_^qw^uPc458PUPe>O5%XE;MZ_nX9P={cwe3gL5Q8?Y&Xu;H~<_l&CSO(S9#w?lwkP2-R+|m7|HQYfIr}Uf|g^sh}ix zBIVMb;i03)sYMalxcoV+E9G1vq>Ts@T2e&0N7w7~K>P7;2cjmg$4FM9xXe!g;tmWh zwM9yoK7qaNJ006Sl@fJ>e@PvqIVB3X7i*K0It63SfXk9iL3FGvAUayEs5oD=n6!DjyOQPs)Y!i7R4A^s9ODub~93yP|Vsp zL?c7YT-kktg`7|w^_uGy6!DULp8G5i-E=f#XOJWqQ*!_PE81MhZO(XDI?E)FheNX3 zmQ&=ei#_ETH~p59_w?fdqW!GiOd6G&K7sw z-0}bf;n*udW5CRf9+XaV{W89U9hSJvVxD2zlKWis$QN!?kSs0*w+zp;@wC_hVJ)?o zrP(gRApq61woX{PU@9)g-`sKq1hw1sVG&EBvjsL_lbh@8pqW=HQo{oDZ@UG#xV9|Y zeoO~zr6ETMx$Y_$Wz$m{xeP_L|NN11<_l#4?tP7%SH-FTYlOOP4B}1c$}9Y+G#Nf|moWh6zm6z69foI*C8{fqGN& zYLrx?K2b-%x^QXB$$t^pvSVEKCcUWpGl>d%Bst`!s(jWk=Hz#@p&8UZRFQMG97XHe_Ff9-Q_^L8 zQVZf?`Dun}Ae#EAXQfq_J?e+To8)&c9j7>QsEJMK;JlKcnncv}fp^fZJ64SDwmx^R zbTgMm`qdcD`Ext#TRwoGbo(`25bc&owWULo2$?B+9tUvKrt8hV=~28+Z}(0Bn!X5n zW2LqZB+T4cVS+n3CM_stR`&$oCr|R%-rHAyOBZknB>PUZRjR$ELV$QC;!Hpwf0O~p|3)q#!PUz(+gwlHiklGv?io-ijN1(p|H?HPF$+K-qO(+ zZENqM6`NkB-SyC^a2MCPGtG$-4LMo~n?FfC89|{fb(zBT=Gyg&rS=5zvYlStC%SO_ z)GCH4^~g>k6t$au|2^8cKl4?Dqqn{sVh3JzI+y~ldt#_b>r%-e2}oCcgwXSLr<4El zO>I@;XlS8w{grD7RqD$+0pTN~?7e7=qHe`Z-qE9D*D+j^oZH4fkRpQ2`uk_6mJ6N)|*+y)-%cTdcAB z+o|P=#rM0VEZjMtU`zYiG+}t2(Xwh;Msi9~IwF<5J|42_tNc-cC$&Ls`)z_IyGtoD zJSf|G_R5e572U(M&Y9f4mHDR1lM01wdh(YT%^fFhY|W_OmiCKj!d2~OTg5g3XVR{u zZIk;4(R>yag$fZ{YMZ;a)2Hh}mq9J`DIPSSdd$5(15$)co@QF<`O)D`Q(e}S&o#!L zSDj!znD-O3pHLFUb7@Z)S=bBt39QxYIp^x9(myT4Pig}#>uFn`ZO#iW zPN`_>Y1|s7(FWvnk_CzV3(%a0(#sUcJ+LK#@0B6ruKJ5T+jccP6q<8eMXW*XF2W&7 zuTX*K{x#qcy{gJLD*_N$}tt0l*SibE_wrk zKdlzmt7*dgyhTQre#gvON4fdUtHGH;w-jUEczOqF;o5hdhop^%AOtDpIi!JRpzfTr#MPluoP%jCwmq~FGAPph&hT-=}4t~r{r*VpG(pj zmpzy4+34$W_c^e%tEuhUcMBE^Fat|m^&~f%Z>bO=pD31F6@R+b$n)*gf5hM-#GAIHDV|vT#^D}X zVAX_#ufj*B?xrRS--xWyJL^b?)1MVW4F z0kZZdla1(XC4T$mtTK_}9Y~{W{R+00fuNsCJciuyptEsKClD~mI%#{3EL;+bn+p0fF+Hb&S8FOJsV{Kbbo9l(ook)UirLP0jyDu*;4jtbrv<-yTlU1@0Z(0W1%zm5-A{dcKrSf~@ytrhI~LkHO(o}UpRU3In}?^utG&9+kQUu6c&~+aY69p4h*ZEPQx>y3VR@tC-7!K;ra5d{99rtC34#mo} zG3oK-ODI#U|K8jV9eck^XlJ)!$?X4F<;SO7pLHxCvB8z&C#*@ zfgs44M`i93muvZXbh!mwL9?KkFQ?f!n!1f zj4yVV9;uu6eC*d8pV3+KDtjs~skZV|oHgWB3(ENVela1cLUdF--F4Gf-(^&5>&a2* z_xN?aNHd<92@pf=jtPD}P1Iab&`o+Ok_$5&U|053p7msiS)>ey_UL=? zRgCLzv_+FgxUdMA@9OSvp*` zRkRJer@Pco^K2dW|GXXH)8=q>PhwPWrrXfk${vJK(6a|~1&k%^`W3O;df?gZ_`GZf z8BDBgRul7alXuYKv{sy*@#$8{r0Lr)^;6IMutT7sQLpx~Ae3)~eva|9Fh4VE3pNM& zNRl%0>q=|=b$fc?sLlvB`0J$bxUgK0mcP&$;3{i)fBB6hTA95_-b^cIY6g45pS^*@ zEr^TbA|i|VLt_-J%A{pcUAWJ&cZ>sMe*)7Yo=LB!i?TVe4Fm+WIl!VL|D1Rx4QSTC z+JQbR=A@Ci;Dc~Uy$OCZ1yJx)Y|2tvQ}gEC{18(mL+8`X;>UTtbK+;ox}e{<$xTLXDn^YJ^7&fwEn_M zfF*X#Zfn<}N4XTsE&@P=|6K2#K$-JOvm_$Z7Z`apIX_9LD!C4IBYS1A-z#?-(M&J{ zG#ghc>LKBfh>jQhDr!+PK*4tw(KsU)9Kul-mFyZP6v;5(5nWL(_pY>MR}Q7^aQg4l zHvnS-SOokD%5oQ-BirGKz7Rn=6)yYr$Hui2k#1~$udeQkGMePQH=0FH`XQ{&m!s&@ z99?owhI|RvY?M#l^>ftk*Y|lgv$_t!L@7iy$(e-H<_oEaM*q-b9xdy!Bx@kq`Ozb< zncbYcS3wgpPjB(~lIX;mNpr~P+NbpMoP;sf(gro#)=2?B&Be{*CR`Iild(H&gK2@s zeN5bayB`G1TaE)+OgLB<6l_E7hN+xpo(;Z<A4(q;%e)`=dNpDx}yi|&}ajSW_w8D0qm4rv~{vMG2Tx4;VusTh%3fE)5;QMAo zfBOM;E+9USb?m>0o-TzmvhR&oeW#msjmOXLukL>$Y&BL&bbh9K_sFu6Kc|;*o)s+s zE(!<;ZPL+nB&bH;@EX0(XSe;W;iZHLT8iuw~drR*byApja$;N^_g5iA17Ea#uz>%P9uNEl);=n8kG915H3t z;&I5J;#Jn_&>X|J5TIEwJw0U^P#1JH5Q7j^z*$5M8r01PTH_btA<|ApSphNFVl~Bj z*W#I`))HkMQhAZK5{uM5_mgASOGY4ph;B>}k;aZwow>3x*UtTQGG&@V;@vAvn%9xs zZvxDTO_PfCiAPi2JJMCxYPcbau29h%Nn1zrA?t|kVu|r|c}62E=85l@zaz02!Rpe2 zG52Q`%~?5k&XCk8L01h~&?1PUv!hOHi~IqFG*;Td0$o9pQqXg8VJjbQGz4N0GSUEY zk5~J71}`=#9@=;yLmT=fsk5(d*n_jNrMN0OffQIuLx;{|&{u0T7~}T7 zvY^Tdl=8Smii+N}AqiDS!zEW2J!(06y48cpFpG&WjZ+ODkI+fy)t8xaLrBCJBe$;L z8fpf`R2~l92S!U*o$mIt!OR5Ms#4S4Zj|dnX60H}} zfEa(NPb-)2k-MKNL>v-*nLU9)%?G<4G;B`Yg`Elzw$68OTqrB?8($ zd{zdW{X}I5R4UV?+P$h?_`XmbGzDfJMiOELDWVz?qS$I|)AnDqRXUmR>t;-o~d zPy^_ggB2%mD$#0|;h02M}AraCh;yC*_7D_X@ECQfaR>h?cfr-Q1R-0e=<{wkvPFPngCX#X636*|ODeJRxUq?9%UL0V zL6u|mPYY!*sI&(IS4s6+xxDgYrNZht8-ppOGlREnN#Taa;<27+4~I3HY2X&2Ta1Vv z_JJ;l4*rDuKt&^*ZK6e~@}|@X#wp4aizG4$GKC=(sXSs3@iJ124OztaBADN>EPdlv zr4Wgj;EGWZaykyQlq+;H^;V7r!7Ti9GzEnf*wiCKGjs1Ts4xGH4K8$4f#wBF4p~x}Eiq zW^(>`n7D3v_ZR7c7)-m;U~bbM#2%h8f|fa%1n;hYEM>^)!R*`hW(~x0j($nPR1IZ~ z;QRlUO*t0vT(bDireu-;0SW!z;&K0$@V5QVr5M{-n%aH8{x1OZH#N`3()s_$tNdr1 zZ0X->hXZNk`i&Y)ciss3XW>@BB|qAU<@&@GNEfyboGnLvVbZ~1+lBeH9mH6}0vb7=h)rC}r2!PbdW`zJu;#*Ter@dx`SXY;kD=23b^hucpLr_txBY>jH{-^^Z=)7Q~V z(}{N=S1fr@$iMQA7#<7v3@u>K>Xxr||57!T;<3dXmRE*Wz-lW}Rrrh<{Kcm=)b-TF zd~Tvrr)z;*lORTTL=TuQyM$!uXU|AhW7Nz zrG_>nR=Pq>OUp5sR||3lfs)sKi$A7NIl~7=UdVU!^Bzr=4kg8k@NNN3<+#;Fkx6SN zs-fSDs;GdqDhKP9!RMAImrm$tE%JQal=9{?Hw=bs6y%6RMlNuIKSVH=SR{M`pkk!+ zVNsII9ULjO)3sXm(ma+&PvDUSulwj)zLJks`&T9}7`i?0YZK}%yHRQ99Iw;6p`!LP zd8}}udawiK3lqCYY``mtlE^>}Nwl`)w`Kb%>ePq90Wg_)7VW`>vN_%6fZrL!i{`IN z#eZ$OMVkV~?fExGnN(gORbE?4qWftMxk!wFv$!KUp61p>`B8V-H4*I zY!egw`U!3~G!=8y{P@M1E(|N{kHr=Q$`-U;#AN}jPU#|NUgur zXLZPf`rFvusk7HV2S9MdQ>D_-1`#cG_G#+~L&sHhRtI50GSYcBufsXQLkCE42#9dD z2oxdR3nL{ETy?^DCySctxnN7_sgsb#P?4&HJ5v?2i*Ko;)h_>HEe_eVMgHWc#pGs! zz9ZAI#*_DZOxPn!1PWM{% zJZM#l;Gt|p)*Fcg98Gi&`Am8}q2ImFESQz?SKlJ(5_iUc!e44G1IWn+Uvji=*!Juy zk}z;XBx-4c7xtz(!3!Lo=bc@eN<_Wm8U!JzfCrKVTh@*5ZX_Wrlx<1|E~w7+x?c>5 zpZiZ-Id60OJpR)Y3azl*cN!aCTKQXn`_*l)mSYbC|89rppP-Ao+dTyjC=d|#H{bt% z6o59@H`RCf#-aYVL6^hiZTt1_`}y|0I+9OnOPGe>yQmTcHCC+~)@)(l8qlU5SR~(= z4!IIindWx}y5MjPA-(W^78vx&?DooIn^dsd*o(gz{uR`Vv}xR|ZzBg;K?k<%%*O5O z^U;)#beM%)qX6B6wa9$=RgC80MInd;t7>x5!bF^N$xS`GWz+6>eMslI3G=Vtj&G~y zeXM=1X^K)?43|RSr@HiZJ%-E(m&_AqI_tTLLiM^FqV%K$>4`8N{Lz??u|U&{q~fey*Bx7?ym z2QqH3NP`ksrOyaCg381XNqPQp&8!i3T-@o5VM01vu?SI$`LeE`@aoFX`*C7@ffu9o zK2BO|4Cj^dp-u3whijR8yW0buH*^xvfcI*fk-W?nEC+D%7{nl{^;%u_Aw5$_ud1kM zqZL7TW%wqLBa9RxI*3pu1)TLcq+J-nQLrmMm7@k}Qn0uT^4p1}n0gZM&q892;BN7V zj%dpGoCQ}Wx*`n38I`yAy4C$?9-Prq2LI>b$9juGoZM5w;Ls+uQkl zu-HvFJEEpj*+O3jX!hC_8T=glj*_8j92zLnXe^Hx4xN(3uz$gB#MeY=J3-iOIZ9qb zz5_@KE(6~{#O+3pDjCUC0|?L@2j&z5(tR?zt>-U}INjadL`%SFr;WcjV0j*=4TnWqPz(rze$I!LMcRDIO^telo)%&#AkZ0Io zM9Gpx;vt0H`{HfQf7PZ^oX}3(X%q(0Hkj)WC!+}OyYRLCeViES*nv3&m!p>ZF%F?# z*7}#pXSu}amd%VhaNg3dXLLV+gF14xt6ES%;ECWedvv(n6s!1iU0=YL0+nOP-H`?y zxtMs=KPR$hk9xv9wf63fQrLmGX*N7{dXTTEOH8gwi+k!KgkL*Bb&C>f0ifaad~R<0 zf{^!F4`qrsVAV$5^d$$3_Xx&Iw05pa?3RV%Wn!hTPm%01ky(qWv;YSD>#5n;FrcU zC>9?saiTVOTvkrc81id=i0>z|3r_;P0X7%VguNnj077wVZ_EP0-;e@IW(jIzvSEo4~n~IM}~&v8L0a}({Mu;VS`+gu#K2>d*l_cM`A(jg#Y{N z#EdWgd>B<^6oFD`28#kqM4z~6O(~mg>t75^8yJhy?IQWn_Y6zX>>bCg`uTQZwu z8#j|QKE9Pt@%3amn5qPF4W68OnLb$6^3vjDm`dt;y|V6A72hcaSzBB;kl%kJ6B^)5 z-3-WX9mEILDy&>`t!QRdOyH#KMmtVowfeRCBC(}^>(@=jLpNq+ax9qWuKB=R0l z_c$cjB(pk(gLl@@qxo`wmc@4Y)(6ngdI>h^>}jGD6x@NM9A1yk$-bmswX)Q1xCJr- zUC_~U7A81iNp=Fr&JPoyQ2hbH@e`I&^A^byTy?3yLu2yCbC*U5(Q#R(7 za&GPRBp=>!5u7244#>xR5PbwPm)}v0cuPseP&+GMK2kexrkPh<|6naRjf{*8s=wC> zY6Qc%O$;8eKRZ{0;cHH3askEMEqwDemCUSXed8qlkXtN%7}-|;v&lnG#sOH5+tjlu zR?n3B$Lp*&>ifRygrHu6KVFIPCv)2_q__q1`i+p=|(shkpLa zX-PeEh)a4!Z<zGH;h~R4FFg_NR8E zI(hwKB5fqgh0VbjjlZjRa{oyZeZ)LZTUEv9E%b=PZ1!|K5Jlbiz4~x?NHLXQJJbt1 zH5-K*55zJ9YbUcQfIJ6h4@(fq^)xc<>=3dl0X9{za6I)bchsy?K2H| zg`ov|x$a7ZyTU`soJ0m9zJcsJ6bK{TZKBX?Dn^i3`qW+na)^*rjx%9;IkmG9IwJ5h z<}1drm*5L~;z%pSyUfoz4;&xBWYK}pDiCs*tpU(@h9MA$AG4frDQkbwnR41PFKz<3 z({^mytebM+RGOQJaqIQCENG!A5!Y$l&jWC!iTf56v%r=q)eJ}dgnb5V+FzK1-?%)h(+2LdH>e(Z;%r0ad)j;1M4}L->1)MAG0$14gIrx z#!f>%o>PIunTZ=&&$B7e4n}(B6$m7wt9_(?N)l*Lf6kG}P(A(BCD=S&8Js>|6cByU zu#I5D#ZcVzbDkKlLw}t(hL+q>{JJyc29G}?e4@Pdi0}OZL59k8f}XP}x3j?0h+Of^ zDs)7a4q(bT9T0oyu31)vJ47!l-*cxtou%tYIuGFIkBq+i!Dl7PP(RRSou*V{{diAy z8!z2xB`KiU?SVy?zvWzwoh06E_R?%K?sl{KnAei=tP0r5*&6(bQCW_$Rk~)!;8^gb za}YG%SwRSy1vJZKYMBS`+I9D(N4x;Y`YZJV#^=w`88`{yqj%F?sU9s~&WSB%<3*1* z>^ZJazz?_IesQDLWPe~eLO%tm4&H6cu7icpFta6ze@!fp6Q3iGNt_0?&|s~#l1CF5 zOGaySB`WK3CTq^LI%Q%S6<;Aw#HgQQEptMNE|3!$glyM8q@p_stBEI^OB3{X@PQh4 zj!qeK8^$5$^8B7Xac86t_Pksz|*F|P?)Uq&LMdaWEdE>CoMCNSa??^H3e0X=_sLmPfG)XN)mnJ>}8S=6;#&CZe#B?J~G2s z*9cLmP~9dOQ|?m%kJjGmElqyf&${d9D^GSaX*^53W0&kU-bY1Up(!ghmkdVMmrKo0 zYv;>P2&UE_9KUH=)ax#VZ|rl8)-yHO=>YxRgA5_iXl2*3S-_%Dt7&ji(HK5sYjnT3e7XJZ8V-@JQfi4amgF$Mn)TNL@Br2gy=Z=d;i0ubNg1(%dJUw$ON zh8PDvg1x;xWXluLR81HupfR-P>+co6c7LQ^a1-+i%8ILg81LQb!@U3DH}qc)8F#3X?;@R|qKYP0X{NK%Oq zeJFcycSKZhPNeZ~2oQ>-Rj2HeF*#eE%#z6^LmQ(@hIFaI7U7#z1L?eRMfvIFV7rW0 z>=$Tg4ZFhL)PW)>sp%PkC6CtVDUDQ4$T-g*YPB%LHSM+*3>H`gQ(ori8ViVRr#u^Q zw$gou1+&Mb8QR61cUj?{mE4>Xg?}jo{8w|Vh&oGWaND$%=NvvgzRsh3!xg-!<#NPm{c&0;l{CwY-+gM35 z6f0T4P0j9-bD##jYYs7tcMi{*o{xk&f6fMPz8tsgrt zs8+GM8FCb;+ZkNN014t`BNu?aVTNJDO45&f+j0`9RVY)K$B56DUsk?k>tl^|7dgp9 z4_MpXUwOYBZAr7oyPBEXHC`^~CaUHpcu>1GaJt5g82hs266T=zmf1%NX5C~a#L6`a zM)ws@qKRR0q);Dq8_2Ye9ahDXm}HH?q%A384P~pmaf8UvEcSCN1p;{w$&l(~9M<1r ztLq6DpIf|~e!v%6x4h9**{f@ZTj4vT1;aSWb?WIH>@jH?uOhzf~nAgB*wP0jW2OhaZ(wKSi zqi`ChaY35~`u;D^6*s>%=U|5{6&yW5CWGr{My{}Ia@J7Sqcdk6b(3N~w)Yz20_f~& ziNlq>2FvnUm7)rXYD}lywp-~4pnGMfNV&y7jR~>kkKU<~!3=oKkktS$!LGNjFpCoe+SS z2}N&)kY;lQCC35R)q@AyUi7lROxcGKl1g zoRmM|RH{o9yqagE0cX7RZbkDhYi?^E_|VpX!4CRv&f@_wF5ETz9uPw4(C(`cyWk9D zR~wEz27-cxj>tpLY~I-XI(hB8uy#(opzep1FBQp=C+tKZn?UcBLCf)GrcZK6;~F>k^K442jxAxPCj#hU#4T=~ z(g#^v;nkH%1k!2G`APA4t^_zl4qL?T z_B=}U^_n+Sp&YO8YD02oyt^gbSaTx5NB(xxV?hLuea{!{IC$0)gGp5e?Rs9UkC*h{{nTKMm)Kql2r#*tqoQ3 zPiD@6Eik=UGzJuENtgYLge2o?-c#Ow+}T)@dc= z@ykaeA(!rGL;UUy-fRgcs=3dPQ3q2JVoK@Q%zS15&qO^(P~~X(qzTIeo>R$#G*^qa zNtq+t{@80x%Cexj=yOH~tXPFj1df7AE`6Cpgi{k1^Vme4|CYNfe*vp$sme(!1ewQM&eX+Mw)&{7GHfDihg$&cxvA%IO0%5aS(91+y>ga~K#xugvnD!HbeqD^>hOS)a@ZD4b3Nx?AQBVghwUXmM2C@5Q*R zmTK!%==aHyC`>_ZVd)jQEmJDgf7wcTuT%L##;1l#QuXZ}&Sv4-Z**+G=}(Yp6idg+ z|J+O&l6EE~%x3nL(nwcbntL5(erI$SAE;FE;+cRUW_dTZI;R=a@;qiJ+32aV4$DPJ zpZ&%2Bh^WZc(F{hUBjE}e3GdvM%U}&QxtN(?7G!@{2MRvh0yuq1^Af^w(Q|9{4S3C z42RLK!lYA6QK*)pheP-9LWNOFB+;lB~-3r*A4(fuZt;{wILn-!vT%0nHuw3P;z5^ zj?#L#l&4{q{i2MwfeWAn^L$gvj3~sjTyT571Zf&=otJFn9rFv1$Y8LT$&9cuX5?wj z4kCqf*BZ8Kh!}*q_MwdrJB39xvN%PGlY4^+c;}e#d<3k5`Oy)=XvHj2Po%a^-CctB zU0H9eqK$Qf9EgMIre9*kH~|Tgnh{g9PA?n^uw9}BOP)Tu3s?e#&WJa>JD_LI#3axH zVkq-2zYZ>A*A^cS9|@1OrEo8V);?D%v2-!J$9+OP)g|tRRR*^}(il0IGg@E{T03fX z{iwCOz2o+)ixF^j4Bz>*)YvBLBTwyw?{y?2ag!9WZ*+n)4}156rL$j%_FQi7!kx+ve;Gb~1T|duaJ>1kAQ31qKn6Bo-2@OQFcunSi^jnj zwM+QFyq0WJuCF5c6TNAKOGT+~A|@ND2|a_rvqqhlyVR`!|Ge?1`hEwAt8M!+q#n{6 zbb*Lb2D)V5yKpw^pYfL>Nv^i9Qvn!+?%#pezK}x@9J;$kAK6S#rK&wP>M%Ty@009rlfAE+*drVtC5UwmX&$_s5dP~P_K!n7 z2jqHa#qiC5+XDW-cYyt`f+SM@((&+47HTBMuvLvWv23JQhzAW{88JmR3%gH{!YQ zw5mEUZ{zGuWmKwSS&6nh2~ps$R|U+su{xW(hmEhX!$-K&lyx18l_uA`yp21(j zIHD?rNmQUJCJeoqxT4VQ_Jy{b{!_ru_xC~wKCk!cSK3}(He6;*CJV0ge#VxEo67rQ zdm9!^7SDP|W8X%_(|%*OK8X9clbd*`y+1H0%CIhFA&ZmZ`U3RxMv0#H$5{!!&-c?A zP5P5Rdr_0HB1qIQ2GJxVVc3W`hP>Z|_uJXX%@1ws<*Tnr0%gv4Ss2VPXOmux6Rjt^ zHWn%meyHAy($`GI?|k8&erKzkZKOnhiW6fGmO4v=UUh%OjNZq^OoBu$0$AVSnb4#} zkJfCa6{>yHGT@07XdmoTI%7F*@hk?| zKR1?5&)~?T-|PXZKX(q?(jiP#?LtEwEBjLhDm;I)qWWZ0A`;+!DCr*Ey5>|?F{=Ih zH$FZ-pZJCbtuM&ErjcRi%CZJ&p5r#KRp>$F=t9NQ!EY^m3wh!Dx>r_}_ACJ*+qT3| z28JnD5-KG@6Ob{NqrP1Ux#{`1KA8D!lfS>FTtZp`NpQ`AIBFpW)-*8-pp5Kkl`+mH zgBS^89N|JP!+=Xm9pN01(|pqQ(cwOq#J^h_!VUp!5fV9SA(bp*8fq z7PrtoqO-agbzSJ*(ANpxz)G-mr3K}nhl1iNzt$IoG0rzJ&(@DHOg$W~Y6H!3rkF9W zNPnLP*8OdANSf$8DH`zU_o?=W7iMvZ#O{MpR*2WC6n>?C6x9#9^p4GgA+#$oxcxF0 zoIV-Tzg%!;r)pdW>3j#ZHmL$q3kLfjTY+?vu>wV~3*2A4vBuv(upM zxUzpuS4Sq(LoVw(y5L1;)vM#M-f150$;e!f?&bZ$%)dk6P3oWHZ)-e5}uVqucJVoQ*Qi(;KHxj%m0~ZrTajEG4WLeUfKsC$Nm7_yg??oOs1gMeNZ$UkUF(=^lNW%)G#>>o@6V zpav5jpJXH00Dh6f-gnbU1nVZ<`n{LJ%47|xkuR7W0K=|V>?0g@UQto6g~*f;qt9;j zqwSc+*p~h`ht4E&4@QRRrJi6j7=UD{HbHGLz!d;cqfJghCKXW~>Y~2(wZsc!1=-K(H94SKz)?#dyWZIAn+yHaH>Wo$A1L0&fI4p* zW8x8CQ3{(iPqI^}Zr1LZ-}Oi>vw{-Kx>pUNWykv2JBR@!bUNgHv)3D0c^TAT<6=5B zv_DgHSiPbqf1ydH;9etn44$Ela6Mcs7rcJSzE;VdGs&>4UrK1T?8j|C?f^6aC2%$X zJshTQrTi!{A*hI=Lw(BO<7jV^N!ljo0#R=`$qcYYT>l$CwPKsE4P8|cunrk^n+9qx zS!mNdc6r%KtcO8ZVZUVshCDy^{b*nEm7|$8hZUk7m-0-&CS2TuLW|HTP^ZqW!5ZML zeb%n-RA9a8b6{hiJV@6l>TxQ)AqF9g)G2C8pu0mq6m3K-3R_@3lPN>Gy)_esXY)Fw zheG&%ufU_lnGp&dYGbp8apDI(hr^4U$-nUzH!v ze4^V}M+|KM0RuZ26+zZgAE9L(x&$Pk?>tc^mkF9%A=@stWfib5J})`X->=IqI2icQ zvUi{V#_|;a-MBKYuY(`#1`BhZ0t$dYT?5q5nGqv6ntHg%0Zn`f0MjgR>uZJo-wTNMH zfWwN8^M}9T89Y+%ONw#_Fx{kwYZj{nBYJ+srAX?&U#qg;T%Xh@CO!beV(I} z_cb4H0755^u1T!#Q97E$&$%(JICJ8JpUh-mqUWm;FO?P5tkYwGK@plZNJ6^fprIZJ z$2PAl&=n(}1oEvdTD14CB<)6snby<#+4AZ9x&0mp$x$m|qifaN4{y5hD40HIgdsj? zO9o;pqRi!F-^=8J)NuO=y-RLpx6IC)fzQg}#LdKy-x(e%o;Tr@XL7n$ssNn(noiN4 zV^N2y+en5RFlOdj7SJ_>kApRg*Zji`7U_;@O?MI|hSu1I@AirEuc_c+jqoiCq2hhN zU$Z}0V4Ee0b8gGI1R6{gqqp^6kY5H#v`W9PSRXS$u(&PeE+ACzU+^wCSuSOy?+kr_ zCVxODIIvkzU{IJ?IC}neDe5tewyaAeza|oaA^Nabh3;?L4P20a?+kAnJ3Br?|W~60fM`4;KJTLPt z^@D@Kp7c^!&d<8ZI)B2nPL8P1C%HBiGiiy}9Xy~A!tKE@{1*{T{J^0EtaDSev3sXS z#@z*u>vA|(z<`<|mVEnEd!!oM{y>R;%pFIXkDNtJGupKoEt(@o_%jT(vZ2Wr)Golv z%V+E9sr_=Ax0kSkLTDFnJ{xN+|Ahgr0e>0Oxb2*dziPBoQSTI+9q~ctr9Fq zCmTLQIakhBFp;2_L%lU(D!&PS*`RBQo4cfPLX!hbO5B2wGn#R%fU&p9JH+uY zD7u3qoQg#4lTu)2r&=lpGVZG%2%&5cE0I&m25fNR{!B-4Y>^$fdTV(LoX~HPYXbXx z=F&r%@bIY*Xl17IpuN-T3K&)a=nojMt&`U#M69IgWfz2V>nFI4FI6h3wgf!HV3$<} z-|4ovoi!Lay7Dh!bxl5axqk+y0%>2Psk1HZCTlRzB$T*vPd+(VoX8%N?uL5hVwV0j zId*JW;TiHKb|h9MV48y5e-<940QtMbFyj;Id8M%}I59}Xe|#bh-7@>Jg(HM8!++N) z$4izs8HFm`Ao5F>xlP;A`Ha%ssBypg)0tHfk_-(j(@NxIo@;*cV`$etAHhc=I$ILf z)@2gi>e>^7MxS`%6kICDZwHL!JQbCLAI_W;EtTJs+w~Cp*lu!%!Iw*ALCu>AH3mnn zIlTvvOdx~M7wG_`&f5S?{DFaxLL?Zpgw2Fs4j^20xB{3H1kRP)44S3%-I&1ECVY|q z-o1C(;9|oe(;Gh9Vuzfe4wTEGn~Htinb^LMj{m*s9>c?y)0)tr^Bd+VSG5Bb)Ui$VxP0t2?n@ zB7u)^mnW?Z!hjgvOi_R+08O?(LSm~+4AH6g+z5gZSD8L92}Ba3>H@->Wk3yD#9C!Z zqqe$fQ#sI6ML6LA$vvA zHV2^q5ajTy742Mt_{WCz=X5-11!2t&iJx)F>L&b&?3mA8c7xVptYW`lo=wZjn7rF6k{^xlQ)e z{g>4q>iu=@lE21ImN@v)ynm9?)d^;FGc*`OEgo>ScTsp^>ukNdsK#sAkdvtj;wrS` z_LJRct-E%Qm!|P6T0<|i;aJIYwz>-nCgqBFfUXH?04(b4)@G$Tx@h}m`+2-aJo4wX}O!e(+C>OJ<-@01y{JN>Zv3-WW-1ZWR3~N zOU~TMhC;M9Rc7L?JzEvHWGcx1c_*&Vt>sn$>2G(RxPQD%J+)X{XJ>p5E&N$PZh%;T z8?+W}A~2OeH%vB&Dg)3o2WP2+AU4P3R}?3%^e=%5`sy=WjzSY+si84__$o(V6IIvQ zd#_hp&813e+(;-Vv}oaKCbqb+c~6>Ha^{JRkp35l_H?kS>E+*_K}Sc#+zIhErwgZA_wM32a=1QKwm} z9i2KKx{j!MD11=o5CPDbBv0Px6rwSk@yIWbc~!9g;+NadNUCbP;79x9G4Rk8m7Ev0 zuBgFPb$vCwOkLt~a2{M_HL$XktyndcVmLB#a#6k9YI9OI&pIbD!rv zYWIbqC+kFf#Gs#bSq5zBe+JP>AgCZ)6(lZU1}MrH`ZYp*q^7{ngHds|V(EFl;Wu@; zk-=uknd&3U7+1qu?_B^i56S%~rYu3-Ni*%iv!oGw@}oU@%rH`%;?t>%M&iCU;e8Pi zr1Mpzh|p9EWhSf$-G!eMZhoG{QbPZWN-di7*|>@IVDI z6lmI?MX-$w9(CGMKaNI|RXiE6;@L$TUB)_SXh_+7LfM?U(q*m$edozb#&5j`kAPfr z7Ns=-qR4TY(lQhgjDr%QL6Oofsvk)FRUUDiDV#ZKam6@s-R~!T@>tJSrHJ0-uJi>n zEDC(MlJE=u(bl!$05LP&TloGSGMtcx3qi>30)>K%9A?=v=@^X@B7${%k^v00P!kDD z7t&8x9HJIA)LwwTAj4>VEfm*gBl)V;7JZG@tAe1$k$GrbNx-(UP?-_)=-CT)MYtBoQSO*f+>Zw^}oRCblteT<028H$>dwXMSFd*io8 z#^A0%I=E#VT46fP3K1O`-BH=DbV)TmIkfsdHDm@kcnHn$rW;h;T}e#XJ-6Isxxzws z2*p#Fgq?ltq5HMIf6)^o-?aBsXFm16x&N(A@V;7bQt|0Evk7J~nR;ev@h0=hVW%OK zjE*d|vGa??ZVRMcRcR{4hspZWXN%L&yG|?FPz3c#@E1b(j%e@w@bUY=)Ovf=?&khe zzoq>e=?In4j6rFJ0LKtFWrtjshd82n;WX!;!5eJy8N^(>aAegon8Lt>z%w=6GX8$U z>eSYOX`{izKQL>sx`kkD!LP-7K8Q@phCr*-Gi(Eg!E!qasd1;4%^ziau?Dv3zeE{JNyya0yvFpLp`%DxLc5a}GcDu}! zx|fcf@uc%-*5xEzTLPNE&9_ed5&ikAp4`9C@5EG+F6g{)w}%Akf>tCs&9B}p`!74V zT>lGiW)x*q-L$;B8~TQ?`}p-P2DR~)$O8V_8&LlCd!33U6OndQb5R7yy;Em0{>SJ> z(_>RK{!#DF0xrtdsT-e(2byM z89Z#-kTF;SqMoqvaDWGWXnV5zIHDD>Ya)YDk!y`#lUio48o<(`bVq2@%xH~Fsw%X> zj7D{eLQ`4?T`}tb7y*@cblO`gwHRq}VF5G4n2AaZ-|Hq7T(6rY(#>h9BAu`S$ue!h z`Bty@j{O7~1ZyeYy1y20kOekM-M9jAs6L6NgwuZZY^oKq#P&J8Pk?=gH`N-ZI-7on z_j<_2aN^eo-6MjHPhQGib9x8es%pTnuV!D^KC6kFO5l5L=RqR>qB2H0(UtGIGsB`P zwDW|%XVcv}{|cQ`FKZt=yQXMA7l>jt8GvH-v#+wWg7hls?O=p{D@iWDFS95YT@?6{ zP@-L{0M{hc+D5L8^kRVgw46h8lU%retL{9WS8lo74+n$46%QEo1E4&lZt(mXa?UqInggr_~#PZUx8GjFEL0|oa? z!>sV-xu2y;^cj2`X|y|p6VEloM^aeD<&#l*Nl44rvKXT9@Al#Ig8&n0Vd6TJJRCCu znQ^7dnJr_tX$Eb(O`40%(%!iysh9J=VwgZZ{DI>Gsg8-Kg8`!83dj8DvQ8qxXOr8Q zR0Pjv6bCs)I{(vMOGR}4#{JAPF019w*8=kj*HY?r+<4KA1$OgTW{J%JlH|V@fNu8l zB!pcH(e^c|dt(A)8rmAJg>kMSe?#(AwCPUtsF-n^@b~5#JPAJMRz1!7)#3#thhu`P z@z<04pzmf))^aOG=*&SQc`t$Uw=oMAHLrj#OqS{6L`x9hu;_)AJL zTcCsIz$sNz?nS_08<9Ej?na}#cBTT*{mRZ|XHO(WMNkmK znDBk&jo3>fv0_yz1t+a`hgk50Y5gN!n=q)m3Gh`7794mcdRnl>1X$^HV;80O^RI8o1Wp&Qio;}cnrlW zy16Dln>j~>nIa_-xbc<5?kv)A0>OL8&{kt z0b#D*iP5dBP_Cxbi3Si7>363BJHM?)FnfSVs?7j%3!z=+Fr_T-fmkF5?osGnf8FTp=jY1I!xdnltJsSRqLxf&(xotSHWXTDgJ`O7fl9Wg z9g_X8qEF1VonjV;GwQOQI+Iru;`BSf)A#zj*YozIB5V|-FUP9}?az@%xQ#s|UZ-nV z!9Z2MBr5`H;b`BAF2oPj^g@QPz3SN7ZgPdp+}PF84S z_H+Rf4dF&Z=YnzLER}m!48vE&AP)1%T~3OgVe}fGPprGsUsqYVkewsNr( zyLPGDE!|cs1)G@MZw08Q))wF>Z;|QZzA$h+kf@@orhPkp3N(+(9y+9 zmcet7vkYL!ZQ#ckz}SWJneMhokW?6Fj}?P11Uc2mw@#RtFSgv9%41zARD0XoPfgeH z9y%}mDf{4RF3j9QayeN^3v%vsxNswuKi*<}H)xmnsU4`bl^6N@aGkasWK>tSop?km!dbdzwq&n|rK!G0FeBbMj=WdME2X>c-VU2K~j_VX9W*v<2({Cw`j1-N5IV z=|A-qZx+4%t>`=hS+9GYdas(w=s=rJK%x*G!VeSYM@1XOGA7k&TKU{!IhdR1^T(E| zdu5wq<+U1Yx;~pX0_#e`gJ0Bh)uxI24~5TnJ+o^ZH)*`-{v|z;qB5nZ2nV|AQ8kAo z7A>Vf9!kr(AKxE@TZbdoI)nU?8Mz0=vrU?e$yMu+9Mo~-g~u@VYw!Ni{B{l5^r5ts zvp;#{B#AQCp$+<3zYFg%ZVZ_cGhGnOP#R3xAp64=(?8QEY5b{-GY&jTmDAHyubOE? z>s+hgT7`Iriq%s5CrRzH=pXnTOupf|uM6C`IZ>)wFMEL|K-eI=ASo8#r*pY}H*IKr z2ET#}Ze%@I^tQuebO9(kRmqS7F2%t()d&jk2v5X1J)uM|pRfy?XpF%lyXK>BUDYnsTDRp}2wqH?;d&9Y{ zsm~3N=FeNzoJ7luCX)DX7>1m9UX@U<-3$a2wvy z*11%jUAR|<5Yf9Z7%og#QSxv6&Gh@&tqqNPq;A0buoq*@N~4{PZ9VeRag1WV$BvI}otsgjIJN>aJb(0`Y*f4dImr8P{#?}f1gYr6 zL;L`3fhL--h^U_8HHz=db!4-gfxag3F7o|!yJgShu$CH@qko@qSl6If#10g-3I^fu z?u#uFisgJ(!nI!c%ReTE8S#ZLzioF_O5Oh5h8TCv;)Au|FF%w%1PNl<&MG))TL^9o z4|X*d4lT>@VGyJJCKnHgu)Y)+a(adpYSl|9Y$5 zdMU;(-y-L&=&tDX9Ebq2PeC^8G#}BvpB6`uFt=$Pow`X?kxm1#uK*X!+1t2$VB{{g z+pvr*I`!6;Y*~rkE(`O-wRGj%??RdEx}oiYbCllPoCHNnGuS+*aDoVS%=e#F9vK9M z6)6F?n{UEGYvX@${4Uy7xk;GPTx2Nm^w$ON(}8bwopq-jJDW2;UvaJ^F>$>b^vKez zSh#R9jq;w@8vk37e6EA9di&@gHfxA!NZM3SOYP>G`GZ}_XO><1GxvUQu)okvG{#26 z-?Gik_v{Ae%pLO4TvlGz`BbgS=i})}@@CBV&X{7yTo*P&<|&Pq zI!K`5ZhwuD6=lXber=SYfrpnSnOd1U#=D8e=)qK&>5%ASZr{~9f$>qrc_iZx)jPCa zeOsGw@Y|iX`R&J4j)@Y>i>~GXw;}ouUMWz4r z8Jw?&(iTr3y$+lqi#?3V3S0w$59?s~y2P{{~@ha;ltbmCaRh4p<4rRl7)e271L27k%1D;2n`E79x9renv~E_M&k zIwdr0Id+Xgw0_^!&gK)nN3Xj@T%Bw4b-jWzn`(!vO3E$%6>h?~>+La+*8%Zvs;guf zl9Hnio^hNvcKhO-MYg-3`Qt1)+(z%JrBk9-nm%VGL;7M1d*z4M2LYT&xQ6gt+fB?o z1tkh6)LyaS5XX)sPRCZB@M!fqdTMEB*}Dy2(SN6`dpU7q>dOxw9loK{Q(b4xHvEaW z#kKFCBJ`>h)(f|7no5M^$&V5VS*?w0h7Rbg8a7{7=2QK785&SdDGgEHBwo| zv4UR$w?tt!w$NXgCW*ln(J3xQ*pe&C2BE9#FKUS525(tg{NImfi_Y}Jg6|+TAcne3 zDd^sS1hSGbt}BR_aLjC+R)*NCU3M!Bq!%719KT(})qau!r1G{w7I0h@{nlHFHi%M< zX#h>W^f^f3*j4A-u4vU@Ls5mfGk$*tQTcS`eXzPz(`&MWN_*RQ25IsK5ay#ou>WiW z1XWQ4igNq3LPw(VYVwg`r9TN8N>qe_E7pmyMVp3CFtp{N7DZ1$o%`;^L6VXQcw>xS zUsWan{g&KWCtt8|bi|tC6%a*)gSP+zu?9FyFtZyB78T|k0G1+Nok79_3br+>af?dt z;*;Y*K6Ah;XiLVTiY~I%m;w*pSmT@_>fL1(Brsq@5d|S@0_8X7LDr#?CPPu+o2i5d zcoBKzP}a?E7=_~QGyi{bnJi1GQJ$#o4w z%QAaRQifR+14`5)^FJWLqz=Oz+JT;Et*$frYV^uv1KXm%LK1qG_Tv}^=u#>|ta11! zA>SunGBOv2x~BrOcQ2(qwO4kp8j_CNk8sw-56A-a6rM~d?-hmtVTMNA5l3)Dfo_Wd z_bgL`6Lh%uT)H1EC6wt9$BF2ebeszzbhDHJ@aF4X%fpFP&2Fb?Ok-Xgn23}_NCA!o zfs7Jjl9ihHyi)l_E8N{y3>%5j|!EuC>v?QfNNR-v$1ua zk;V-6ds5c!O1@k%%4=!sK}t_PfjpE%DgYJ*B$g&`u4ED?#IHLI6J_$wUMYpL`CNjpH%sk<9WwF7S0RW*h z=H5sauq#~4G@|+7&~C_n0iX+DY-nrng)tn>YrHbh-$^xQnhkFE32YYncd`Qv_P2B0 zj(aOi=1_uCaN^#4#)3^P?AbB>*5&z_`Xr46O>zJjjpc5e;Ob)M+Uj$i!0#*ZE1j+P z-|H5U2}0Qb3aVs+{IqyYTWutlsX}!rBxILY5(utL_5Gd!4u!_ze>HCGBlI6km4z9R z6Gp2}PY35haSwctOG`^^WdbArnNF9eVTLBJp3B={9^ z%Yo(BJ)CB*)WPe|?q)DV*Y6VaGtqEh1sC;c0LNAMrMHki0F*UW5Y;4z7NZ-O zz7Ww2w%GxfG?w|v=rhGg)fGkaT44KgxpL!Yv~)LPB=1j-QrKa@3sE14K~2E`hy%lm ztIcJV#K|eccIx{=O(Lel;~VAwDdMpI zC7vPrgvfx)+Uja(S!ubA2G-UJ7{Ba$g>sIewd)SF&7B5#MaF}_GKm>uGMl6>XVJpW z1sctw?lY6B)GxyELgB;m585#LRdzFNbO zf8SrMJv^{z>0F&_Re8ty6Kg==I-r|!POl!xG|L7yR52VdM6IBiy_QpHlF!FT&THoi zc`C; zshC2ZpS2?(7pcdCff~XGvxlI}hq>~H!&||E7`dhYlXrJyed13@Cmzv+7)^CjE7E6tzclkmvw_K$PofO4*DSCuMmg9g6t(n=$uPhd)Ws|-RN{Y z3bB)xZCJd%F=NB0AN+c{GTcxtk5U4ceWB;lVz6gBTFjpphRfL8H8&9hS98j10@2(X z^l$aGMjTc~G9C<0e-<~7QH7&?lS@!(5C|?wTqC3sZj~Is-lZ*`4yugNv3N5#8MqU2 znq?(%EkwwPD^Qv!)M;ZEjob(b`F(KlfC)^qu@gmjABH4Rg%(hk`DS;Sa0xT%VHJ`6 zyQ{u_%H?#eF1~2OI+sTK8~|xrU#b}r8vp7lz0N(dk{<3BFt-&nf(XEFt$%b+9JuLp zR1d7NdKdJNjasF2H1V=A&mlaz9$zqS;19=B%GwSeQo+(@JnOu=rxk6hvA&zzyb9pu zM|P^K^Yi^$OqKU(uJNWPbd-8!Vr)23&rCKIQcKCZgR}dcSJOM7FCnm}Or8DAA30F< zDzNPIerxE>LyjGI5e-B|68&i2iP^(?4-&LP;XzyO0#y?^gg3XBj}KUrz-q`JPDuFK zvrNBjPa`IfQ)57_uAyZu%Dgj9{i~gxtz}x-x!Ym!-vz00f4m+iD39)#!?owae7<{*mDW)Jkv#||6P?*OAu;dzd*9TvK~#=fh$89&?0-It=-&m# zYRJU%OS&<_H!6?{*#;?#(xp&N)u+~19L<9qhDVr+@zYeqSL@?_-rt+>Ly=B#Q;f48 z&=4>W+a&HyqBSNo5=#+$i_qrB>6`9tgUJnmPK<*vE5vGgL9VE2{~^D~=ZA2+x5k6O zr1|uMFEKNaInW?LhJ6hm{MgL8)|-!fLC)wsnE*LbGHRg}~KL4c=_ z5q(6}9%k;sh+IP;D~Ncl_L$8MW(vuq4?BL!sim|}QzQPv7@d8dd8N#E%?x+CpXh%sI6I# zqyzI2{jKfjelm)FGAda_@;mcbfDB;=&hUb}A^XIB_Aok%u1tU{y?(W!u&-wW#YCv- z4nxvpMo;n1)qmgtrcn|+0pNpUO+N&5{AI1uKDT1#Zdmt;$3s?Zr7NrHRQLVaCvV)G zXr?ToVq&T?tEkeTD$I5xGQoYHS||FAh-CWAC;E)0U!hS9Kd`|H>vF>ZBw3O32Fy6H zN?Ns*Ap}d@x3b7IR9TaPnL4rPuCRO3eT*SvR#WF~>8oM2TofJho<-M&W|&Lw?_kjW z%3QbS!?h@+|`iqd#^KbQ^3A4Bkpnt#-Y zPx45T(JdarzyE;W+CDwKiYQ>I6@>OB$QShp|6B=^Dn4|M_PW?7El|=IAtkNQI*nmq zW#rD)ftjXvzTNJf%-D_5vRMg&p52Ee+t5D#D13-jK89K ztfXI@@y=jwI~yw7bf3CU{~4R?H}&xOkfVG@-}{B0AbZ>(z`=|Rh$ks6P)^QsNKEmi z>+{UDYdw;qpg;Vxm?>PKoytZo2cTB*`KoQ-ymmd|`=nX}R`g+xMH;UwZ0drL%9?D4+x(IyoF)W-4wC7LWN|HynjRud3ji4zj z&A*LDo$z?JGss*cqJElS1=Y691>|-51eC209nFrz`I;ZZFNx#7NE$Z}m}lJ+WU9*1 zfPQhcq*dr1M?3sk6E1&uT@})koUoFXS|w1GcJR0=t|>}-_3G+Pn|BVIn~!8;`b%%$ z#zo4k)R2g*yJzaJewBiCSrhI#qwRcsd{aMQ8BfS`s9g;E>>1&A^(SW!xy48kd% zb}%wGj1BAY&%x(hsn1K(F&7aV5<94HJjj#G2}66X5y39fbRcPXa3&+sFUe0W7W>a z-rB_NzpEzycj?b`8@U5^1mB*Un%g7b#`*a{cR7m=PBeBx0S#J_7V^e$oDIr0nJn#n zL5{7M9tWlMTB-?$LUAWj-SkN}ZaQzq=%wwDH4+iFPKpHSM^}fDRT1skNK(Vioh}^Q zo41bAL}B`PQ~wuNk>(GB+v<_}wXIZWkOGmltRxA&j%3E0^Y`BpbFzGHJfzMB3w)tB zElYRGk`vn{Od*tL1@YKHgdGn__gB!Jly8b6Zu~d&m%yC?wVakDt;JcgCp%lm%wobu zx|=;bw0#uB>J}n@;|+1ZAgQj0jlRYVFN7JAhg9TMoM#u-nlcH#6bxx^0x%A}mHo{x ze>N^$>}5Y1aTv@*a^tuyBK0N7t_HFcuY?-rSe*VCjIyrCxt9=%4j%{^rZ_s`F(brH z)-8p5{px4tzDb`Mx|$tjvk;yp5hkPqdn7{kp~)LHA81)_%$WC2#uzJIx`>glr`1(( z2pAE@985%@3nr2kNfZ<}Ni2|ex%r^H64IM0voT}h_OB;2N*g(C4jC&AyqmPj5}b88ehUw3Dxx2LV;yDOe@ z`qPBxLi_C#p$d4aD*RMSr7WoDKA>V@)nl+Z(2|W0E6fQW!p20GPMk|Bo+iiT#(~A2 zmKef%iFz+LCfu}do=HT?CJ0xt65TP!?v-zKk2c4+`1pOWI%4Px+%r%d_+D9&H44;c zx6_`DOvxXktUx7E<)sr;71UPZm_qU*`v1CF1&6g*Tzz=HoW8ltVbHgGE2;O^M)peM z`?w$4D#5)~9qpTV@pBIEZ4vi@uZEO&%6>dN?lTJ<#njNtUhakynYFIiFF-fc({B>#Szyb`@%fs4X1Md zj@J#+L(gb%l(70mlBIYI3XOLjMVh$etzrF;U>N?%1%MPTgqx|m(4&NTTiRO*|!B7S{iUG5+$qOqonTG~1mh!4$f?lIVL1fLj9Fw?|1 zoW7$yu-5@aSc5C33?w`l01MMzas#4xi{zGfO=)K9-#j+oGGvU5Y|`@%I$o`Y!JP7e zS?3rX3zNCjS-r0UCpQ-oSe!u~R;meC zdmM#S-ugq2BTCqf>AY>t^=1H3n&TDf4-jC&B&@nfpBo7RuL6K&3IjIavbjia)U^N< z-tHPZc{w_HyzT?{C*_rF7ewpA7f{44A?i^hpW#Xl?z5LhRlA61Cw=776CSZmmrtDU z8m(1yFQ@A&5`oFosQ538BSg}uoiMdVeJhALn=qmQT!RNHpkrROEL~2%PtV&1D*RpG zl9F`jt+jdGq?b7!>Mg}o!Wmg4Y`(GsE||@SidFI~;iQ`Hr$?OEYuL8X>|1o4qEM}1kA|7?ix@T18VomK9SW~s+|3h-LY?^3P`}GC8``0# z&c1M;e395y*f@c!HB{ex;5f-X>!8^tQq}IDR81@blf$;GY<-^Tmz?FMp5c(6Rof9O zzvj7re^-CTpZP4%(EAr)$xC^vqKARq`SCw+!vB*1UU%*(4+RGRC}aZw;QBumvHz9; zb}}$CGx>ETTU*$g=;{46F>r}3ol#mc{MYW^;P#6mehy|dg==~229%>gDMS{PXZP`x+1E&2WBm1rWWa#Wg zu447Wu%25oVGXtum@QjExxB!bqvP$Z#Amx6n~qL6UnG;v)Fq*iZD)p0+WGyllR509 zFyZr?GRE{Erd1byL;QnEG}R6-lg8 zc7q{~bLw8uqS&#dDNW9`vuLQ;`hM(uT-&AxeS@$ZZE_=(*rpgy)^fBUI{59ibC~_T zUf!_brPy9zYgzT6iXwt0@pIIXq#=>el=BZ!gT(mq{nVN6Pp-T?krX|Pq!k>=J{st- zCZum1A@q`W#3ld*kxKK}i)u!GqcUo<8&3YdyUnq}{<qHxhw{W{k=_{&R> zI~Cfr^f8JPi6#q?)^W9tt=CLRf^6Pb{`G!zb~9hayPl4mFe@YZaQ~lZ9Y0kC&}o&g z72}6ASLl+2>x^fvG?8J;gbEtXnzhO;o|o;u}5W-&Dqrkg|)V_ z&zVC?f+8PQxrib~Xf^SbA(DBbl^pUMnPhI!v8@4*E4R~3_6Nkg!53vLJJsl?%@;`{ zHFN5ra=g`Y8ogA<#2rDOdqKZ3Xz*b}&;%4KNSG!N#&M@!dkA)hP({i(I3IG=*5a7n zFv*Ff$kM`{H+xF_(^s$D9$b8c22KLO2LMovxZl+;E*=m|Nx;Fja-YY#$#(oR-LGWr zuF_f~$%}3pr;h9nQ6Pk8f|gvvaGhbNx3|eqq*i~MTK+QFK#F4r86viieREqyrJFeY=TJtR9z0fJ zh%`m{FHll&F9-}~Ut^%zZL#49!Tu<7lw4d%<;{fr*}8GQc*EKy%(`-DjMe=&k?KW{ z$R{!g-Ls%oeqNoPMS^ zi{I{n9UcTP91IBl4shR(0)hSkI8gKNqZwd8LcoNvM6tl*g$Ddkq0*y?pfDXlr}(@G zUJlZnMh6cWOc>jx?ZKN-rytU7dm<2`Cn9C_0};3VQ901=gnp2y%~(=Kpe{we@)iC3 z0vH4~gDZUzB8izhcwj1{0Y1bGWb3#y{&qI*)3gYV9 zU^amuNLstI{;PFeX8za|R_A);LB?bB{*=bJHWdusNxZX-H7`uf1rh)OFcL?iPKw|P zBmnw(jhtbdXSs*zwoCh_+(Pkrimvzhcz?}&Q(7Y)Ba2=c;$S+Vt+mP@RDJHpxMQ8$ zTPPdd&2-l_e@!1)ziHyJSAUMs*t>M;DX(PiOXZ#aJ|Qr51{Q9 zKDz+<4|n$F6FJ&d)`wn0c}rc()bQ&Th+Lwnj1lZy^h8}88Gm!8e8;6bJbtD|8|b1n zztPDY4KMx5VEAI$^NsB+v@C>TIq6Ll?d_V<*7kyBgbml#`A$YRFovZ9r)#8>+ZlM; zPp)BnxZ`7I^6Q^B-U)MI!!Y*6BjU9vT;o&XUt8Tm)jwZ&46sBY- z`7%;8!d}4MWC*INKm;w(M)p(%_$JikG4a8BkUSor*{)mZ*fdCN&a zZ0tsA5@14PHbN3j2kK4pWPbp#vSJvlAqr4yZN3pQ4K(-^0=zp6LxlSP*w2a)7B&n6 zq*nHR%;f0MVGi6N?Ia^oZlh2)L(+mHGOBE9UnU=)wTI^`th+?FMBOylD^!s*DBqz} zC1OkxH1VQ|iSuPe+eb{JGZ_yPw+_Kv3UXUjTuoy3V+?^^JRKzccp-XAJExjKcwEsG z+fo?d?JXmW@XvWIpMcmF*W=*+?nl){`PHtK=wQ~vdFmc@7M1C4`c5XUR&E`YsWTLoUGV(vSM2+wr$(CZQHhO+qRwjdH24mzS{e$|Eqm4 z=iwaVV2-Ev(OU2AUYFfT&RT{6-@^5{&~t|FCp1rdy4GK08FrZa7_|D@_5N4<$3IGG zm?N>#7a{Ax%f`WCwO_SQE4wb1{gjQ)4g)LiD)>n%y!$I1|2HI}n1M*=9L z7HO-U_RT9mjPt!tVVi@4LOsTLl~k|dcDT>W*SSR9^6QBfr1O&D7zK5rxVUl0Qg7`YCZSDx{rUcpA)B3( zX`*u+wKBJqPSa--dmR#J8>rd> zm!rQf7&e9dJta696c)ohK5khuEGZSR45H2V?f!o?F>4-W5 z63y{>8e3y}0B$L0r5zKi*NL4Qtbm)$(>oK-NsK?S*wDG_Uv)w4WFJFjovqS{`cg|Q zox_kFdRx=fIfNm_RiGkUUce&24sYaJqtwfc+;^8iH))iXV*H#nPy#QxRCDkYxPIJR z$V{hH%!*7OHWaG|n1o2bBcu8{H3gl=E5Z%#rJ|rxFTJZPJ3~5p`>^P^(^t*MPe-Mb zU@!~&rdLpf8gD3QX_Q_LPoBh-%sI*Cg|Q|;8L@cPQ)Gct0-4YV{b1! zyxL=04(wc?b5Pb@f&|Q2tFa0E>b|u^(l#*VZtrYiIs)=SnRm-jQ(TqVPwMqK_OafI z@DUe|C9hirDFFQwWEIp4N$uk|)&~5`tDQHu`qrf5_x7!y*K@8(HIijvK^h%jCI1vD z`d|%I7-Tqqb+qv80UL@Gm>koq^eix$8g6{vVZUqxBf5D+>OtrZjhqIVg;<|Z1tQ@Z z4}sA9zAO`t;OqmZ&~vegUzF%9;EI53!w+CS4?$k|eZbZVWO0Hbw^fqJK3a74)|QL| zS8(>$ISiL~_9X=+5?uDdZaASPO#ie)WJ@A;M@98| za_iSPMvJulGvsfdZ;(vl31||4hTll8qr@U1sx?Ugz$hK2pX?@&MhkF&8x={FJDaaG zM`@Kd%3kQohn+3t-(@W&kFegEf$ZT>JkN`H$0w*>LRuMu*T2X>NN0W8mpL3^O@n^1 z3cZ#(qE;_7hTjoT%#W83@dT7k(rP9wDLPcvrK-F6XtUnyb>&4J_)e??xI;J+A<>ml z&B3Ye(=n#dQ49Aos+pGR!R0-bO+XK?3NQZ!Jva&#&!>vb`7}^Wa zCqbI(ZCqz!M_U#$J64!ao^6+f``tNIk!Y`8qkig&TZNg~eZ3agt4s|=%TjZcEkUR+ zoh%tS+N&Xj7gV0e6bf!A4l1N$Ygs%Ss<-54-Ny zl*-k0D*4?6+P~t3-vdh=+08A=q>;HrW(P_;!i-*vJ6cBh9J`)*t?TO`vx*e4>>_vY z7yQNU>nmW}-|`|NC;`(u3`Y~A%HvOr(H_jyL}(@yX3FV42*f|lY)})dQ5~#jb-a*1 zaosGu1s4_R{j-XN)`Bbr>b>RW^WKzQcEyz!eWczA(wx*h5$ipnM_SdHQ;n_^c?kym zmw%H(?-iQaD8*(UUKaGoPE~1^`m&K83md8`fI!!|U;ysC-#lo-=66%n)y&WAj&MvY z{gw_pCzEfk&g(v1PrkS|x8YHulcKAnt^s3Np@D50XNUB?o?`|Ah010v3YW1qo?k?N z3MbXC33+kZ5(d7&7sN8mqAzpIE7;3oM=*;cMu%~kLa}|Z6;!vaF`;}5YuckkvBU$2 zu8FQUqk;L$o4w8ui2`o~l0q_ai?bsO_mP^Y}O@RiFsr!+sN?r4zs2E3ww@#%t&<;-3CJ?7kY<8V z5fC6If{{>b^@b4e*Q8)%W$?$8jSETx~GtcT@ATb#Tjf^a%bl&d1XG%F)sK8+64yi}vG_%rB)n znennHgJYM8X@7?_^e_0fs;e2*MR!xp)`@PQ&E-L0UHKzNj^y7fH}QRK@xrGx86i5! zBJ*t#Uq?l6#KdSEm9%P~ug@nWpvt+mm`yND0qQM9DS9H2y(^HpI3Ge3MMwtCBym!ZuBD3r$om!3q%`E|k* zq?n+<_;R8CTTFI2O|ZIK_-O4?W0)Jf84oi{Qk~N1iC1@Yati<__#tU->pv(CI-RbN zH39n?@7>qeC-lOo-m1{R-2^wYP$r!nlSwKOxEIl|Ncu6bYHLDnQFLxSj~d@61dkz* zK*a%hz-kPNl!8CHLw4XCSoZbLwP8F7(?!aKWpE2`_UK$KmRgNG{g*Ni>Z*-GdT7HW z0q6)NL70H$m6^l@N+AG*q*DmBsrtwI(D&bFoECZ5A|y&+_$Uf8DPhQ^=zfk*FoRx% z7U@d!7P@=^@j1>?9*p;L?&8d5!>ca~)C7wk6DCPsb}~Zy40eCTZg_*-^%4$*O>mJX z=zwjnAa7wnI&y|c+=J(hTvJ+-6uw~fo8rT-7d5#_f^F@gbHQnwQStoayPfh3CGrY~ z2^lI;P}2}CY$Q>WZIK8mLmtt^4oBn`BkzfHG4&Bd5^TpIO4zLR3liv5UZk8pVLZ~g zIVUVTqyAudpU}Ns@IL&WsXE#}O>>vtcf$Fdvag};TOdmx?T>+vJrrj)^GLOYaz{Zk zH)>#oNJCH>sU1ABK!8izR|aS4Fd-ZJm2wcbV4hdD+|gIlt`0HEGH5NXuVCMiIBD zzwM5wt<{eGWv2I4Q;5}Zs_`$44O`tV+e9mVsDrH}ubM=njxkfM6L6N){#@yV#`3hb z!x-0{YHr_>X0vw_U=PI8!4iL_ljhPKm7uJQN{VQc-b+eRwY|{?c!22Pz=l8)~kPeK4DAj*}oQ${Kp3 zc~J*5`|JA@;d(Pmzjy7 zi)-S*bz%8L^y+@_PNA1Ce8oU7^MG7^b48P)Qq7Agu$mrrhF1(T7_W_# z=M)zXyn~hta|lqfiSWu^eL+^gJDR&4C;K%kAcBAn&}rbf5IJdeha2vJ8iH%?5n|Qo zta{c3U^p!b9k4lL9DcJ!G|0^DkB6oAqu2oF1ix9H!A4eeypPk)TJvNIC$?KSto50m zf3)Cmz`>xVaD#qz{|?o^(WcT1MJHPt7%-}r4=kp2v&doX1qiQA4x;(7_|GUF{Ha0klw;{g4XErj~R9<*Q zaAscFEyf8xUb86GJbjxn2&KOS1{JHxBN=O++$0Ik11S9H!H5b!Pbz&QDxS=VX0aj8 zl*-g}+%&wU|A4u))mi(aAc1#)qNB;pos3?MXXc-7GpAgENt#<(qhzB#HI?HPLQ)uK zKd5tLi%dcO`p)X7jpkefeStxNiK?p6umbk5#YV7_;*D1;dz^U21G5u9yvPL02r6OR zhCE>v34ap;NsCAWCNOY4Yxyo?kx@XFWQ{*a4keSQzaQ#a`3J9A&|>%SEoiDSjwixu za*HGHh5cU#YxpoZ1`@dZCQ;?JeMntgnj*nOr!}yoHbs)WE~Qd!Fl3xDc9rZpxe{S< z!cGt`eZbcIH8z$ZoqM?pSCGod_oEaN5TXS4sOLrMfFZ2DuKsk_7mji~;tis-z?bvT zday!7jS{#Fa*>?4G>dlh((lQeQ6klVr67fv-6SJdyAnKce|1(JKweoRAar>A`H2&O z&duhlA&lK@)<=+yaK{1>m_rTZJXnuMoutjS?l=fQ6u}n>Ztx=|Q`!lhMYpHz!Q1D& zRNQ$ev%=fFL#^J{b=PzLm<5KoWl*|tm=NkvJxCaqno8v03j?0Y!ZKXb4=jq7oBoa4%kG;-dD|c=L-GVWfk;7_&m=Wahmle%ck_{YS`9mRselK z`+k@EYB%G1!LJ_+d-%S^`t9u`d1q{XFdZfQ1u=mW+S|-jYcK!~+5;iwgA8*^wdET2 z9sT>eq3y)+@y?a)S>s8^kG%(1gRZ(Q5*CP0CaL>4A6W7Vz6v92bS*qbmu~YON_Pvm zDSY^sF#@O2J6K9M4!ylQu*Il`#m=ig&cxu~iBRx$aoZWXJ`)`1QOkz!$0(Q~u`>OA2AmZ{H{_FatmhQ_(URFSV{Z(}s`<7zcnU>VdhnKVtHUi zTwjt$&8l9013aE1L|ymMSkxkO&XVAV8=SDIp-f`<}P zA3UF_$_a&=7)I4_Z`&h`Y7P& zC%8d#*9|8KB>{M&E8oSht^S#5E?7P*8A4AJyBd75N|F^!14Y=5^*`vvnv^TTP*bwJ(99n~;oDC__P^zy{YOH!{!co#wvB_`f4WKk zf8!A;{|h+lbNz}60`CaT^a~G(*wvCY>{si>5LW@8J2DwJHVXr}=-tq1H7)sIZSx9| z)Ft)?HjE3K%+!rPku;B$66#A{+7cTl)-F9JpkZMA5RGyE`8Lf|J)#Mx6>)WjVtuS* ze)N5PsYCjEVO@{=x>KF$B+QnBCRb?QPmJs>4orTrER{_$HoeRC>cb@ z=Rg~%c4^ZQKkVDI^bO5lz(DmyE6YQddGQw&?16m`NnKI)(iU2H3U@D0&|_l&$z~dP zQ=J1C8m#83@H~XUGP1KO-<_qEOSkK~V*^k8`)peOO{O<9+nRGp<hBX{HOw5v>m?DYl&)!Wv}99V9_0r>w5`8kNL%@dP>FW^ z3^5c7#a*b_#plrZWLc}yd)+jZgnQ^pr$R6q;QSWbpnKhQ)%jN@JS&g-UR8Ze_a$z- zV>U|JjCb)-?n8zvZnn34(R$#aR835G_XD<*=q+`2Kaoj{KD6dmSAXeT{I`294w zyEXNtPR0b5bf7(&X}#Otm?EDRIPtcq)|<>fFdlB70x}1k3nDMq}m~JIFh3{1xZkeeGCVnHzm4)yP&*g7*Qi>{HQvHEz(g zmBVP?LXp6SqHSpl{~%L$U7zk%;d&AX?7?zPrs_q2P_9%4Bn9FVeZtEFW%XW2yTUh! zQDmDvMi-7A=5qUU4UP~~q#`?((nmaQI~AzJw2OfxCTT}>LXK?H`O@(6_&nH)@Mp+1 z6!_tqJ!Pq5_r9^S@oMT#^=a=r6Ru7KoC^-;K%Ga z3n6bMXxCz!Vama`{{+TQO zd&j_ac=EwZ2a)wSw4!V1Sb`DuJG@KQ5HSsEq#=KbbHNPWNS>Ja;$@+U6s zEjR6j=WSoqG_*S??d+A?#jerix~5mzyNvVKXw~)A{aeA7RZB}o_9yJWB<6qoWm=Z8 zy_uhse7&DxT&jO3G5>FW+0j7%XA1Yf>dgNb${YWUp{ycd|3ii8I##x^2}v6j^-#zo zU15PnCljp_gQo&cm2C(%y&1%D|D~?1Lqr9Dl4eKwN>2t(LmK zy|ukPp{dg|=14M3|NeNrh}JEiRc&+1i7OS!zg=%WwJXp+#o~3y1%GDGQciGB`K6cD6_a8t@SCkYhOEV zWg_kuC+uNFU=0ZT=%QCAuM{jJhm_wfhiIr@%VtN((}6sBfjfwa$uoBM0reN7XnqXr zX=Zt#7B|^@50y}2%Ne=rk7@Iji6408A9hFT8f(%id0Jun%U`;5#R?~iHb72#D;%^Q zM8!N}Q%LWO`g@%pFd*w(bz#Ui{B*21>+lsqUjrT*KjcT@u{&3kvf2qw~ zfkApGbuA@n)+D}GtDMMU0#Je$JY2K%wQ#C8@3@4qg!y5#f}DpUg<)*O^-A6TctMMT z96gsIw?yX^*?0mGlLV+PVFx;H-(V;nCYvTC3UR(@1!nB8Tm6CdJ-W+!!tGhhCVoR= zI29U6f6c)25kM=_tRxGN4){0#I+;Ydf0+~(`q&!f0y%wXD}MvWB6wa5SF`VG@79IQ z_nG+bs6z!x2+e6t)fsrDu6{L1+S;VqR>>y&>k8{W^c= zQM{mAF%JVY*=4+pvQ#o}Kxj;UL~VezQabx+99zbeJ8VU0)Mr~%!ErY1o!ph=mxx~= z9pOWIxSIyUX>v$_zrsDpnjrfD3G#=x=%g+f5LsGE)vcN|$}ZSCn+$wZ4%e zK7CN3lSkm@H9y>LqeSJ8ycwAAYF9-;N_kckAJ_N51+aUpUPfZsrJoqliqQM)Nmbnq$cf!OJZb!fz)c7dGyEP^&&VVPFOBDr<19p z!trm*gO>)d8yP$W8}XjQjq>f3b0pltx_a)<89dZ6((as9rNdr5KWv!a2_#ymB zYR&SJ97F@Y)YbLa2&KhRPypYE*v{7c)l_+4vz<_QY_xf7)V@BT$hlc~P=@i|n)(H3 zFflc+jAq{x{6sa_7#gG+MF1+6PMTd7z{x;I2@0`=Xeqhf{{EPw#ZjrBw2@A|=$y3< z1IsGI1>Fgg*4*mu;tzQhS%v%MI!m*zG3t>-kk8=T=J5VZ-q{s%rmVrH#b&@lJa)Hh zp035y4&2~*=(J6em8#&0g)1JPnaB@nHF__^6ElqW1^lm5^PkSihfQ6`8wdbk`)9oL-=3QP(K-FY718^j$@*bozrT1JhhxjF>bM=Fjdwu0Yx%#>#}jl?mC&0KtTZKMfO5+f z!=N;p7~;o9VkRo7NfKz1$EWI+XAQ;MvySKA&sSly^{3Y47X#UlY~DiWvQ?vsbg-9i zQ;#N=XdsqdbJ4^dC_v%myYxN-m36)xk zh6!beNuNC%5W|Pgr6*OL8g*1(({5`{83AreFGCc>Db-1S_1K*$X5r0j##hqN5R(AG z(i+N5w<70N4}hqVFrv`r@%4(cG#)}#1R~D4Wds)OMHO~>ItN8Hs^Fv?HR?PCl-kGYiaLB`D)oCMh&7hvCESm2 zo%G3*ry#;NV3ab_LIFwdAx(YK09MrtUB%!cmvG`}mPy-Lw>QW#w?YA@n^k%wD#l+JmB%0UiXs_B7a@|<`itRdq*Igr{lpN zdV6bKN}*WYJF|$C=fCXf{PQP|W|FBu`FTC4fc<|2nColXYn%SSb1eSz{b2Z~G5F`> z=mHG@2y*iCWB=>xGI`u;oed@E*%it!{C0vMiEI=pF;)Zp)Iqk#)UOD%jS!C3jxAP{ zF9FLr%ZrS%QGp4~CGDaPf%o>~SojARxHnl;I;*_MZYjl%KX2ogfT(0vPeGc^)5%$c zeBefhWM=-Co!;rr$m_3Y`)iXtn5*@^G>dfdOWE~${O^|5*3_*5h4o55G8nO&Lkm~( zs=vU)YcRe6eIw^G5uX5&cGM8eYspHyJb!%yE!Emt?AmORuEY8b(q#1i6#OaeO%6_E z|MCbu7J)$B)+{KCNg~#AblPMX0D`ZjqA^V{VhUD` zBaTyoL~|g?i_u$fYNEAmKWhBtvQnTGj)c`NaW;R&sUIF5-W)CyPO#$KlxULg4%_&p z?09dp-wYGBbG4y0%2`QKnsMU5>EJ$$@<%Ve3|y1))#rHM$g(AI8`s8jLS=g|fC8^$ zAn6;~VlH5Dt%B8p804O|=@OW_cl4as%(?RNq0Ey04)dCC1cp%e+;M+(oE}pi2iN@O zPJRBd88FzH8Nf!;rY4_oW%u^mH`g?7fI)grQZN(*)n3||!9U?ZjBI4LhiX~|4P1v% zs}`d+cRCW*Q_O-NL--4eDuKWhl~gW~|Br+yl8`G5LY#kX>x;|R^Y9>s`}5BX;9>lV z;3*}Gx&^`A#0m_cHeC820w9JQ)r43kX}$0IF?~h8U$%%vzrA3woZP&eoW6EV-CiiU z2)Rb>=i@twxOxaj%h^yA|IRWU#{@AUqXr6w(Cy!tKX~Mx&L4DS*;$Q_W~FCb0ND9` z_P##Vczz@CG(0@hy3g{1-$UC-i-Ev>f>k~>76hD0O%S302KeOE&q=Kqpxl9KbM!w zj7x=eHq4&xYwg|9V9HEN!8l@xD>JL3Fgk+1O(G_oh>nABMch*2E8)xIg@pT4Q<`l)nk3$<5d;5B4?islp(VZ>HtCyGrzv54S8@hI(i9wB9yb;10CwK;Z9@ z#f5e-VXE_bd~ zysqRql(IOAK>uree}Y-xtV35wAsq#F>gQl7Bh499YQFcScQ7Uydu1^&e@9>Q7A0Aa znD3u75Elx|5W+D&peW+V5dNz)@hL=PCFou5{*IAyW&cS?nD3g^&LC{@~N+Ld94gX4x}>)OR#Tgb71@_^kuD z$i?DS=%--Evro@{cx#Pgj1q%5zgL&5o7)Q_h1S;hfy!vZB8eHGa|&hgW#c2>m8qj6h@&1Z-65=kZ0m&1g~Wx9IA?B!ceVHf`ng6 zpRPgZPFh38RJHUlX*w+5+b~S8o9sdj=hPgy(^>r+n^rT#uM~&>1OnI*JO>_7H8^0bc$q|@Kig)GsVD;j$#@4-%EJSuik#& zS3^14wqmUZAub=(5lB2Sbbh5){GP}G7J0!{Spjw8Aq5@`oXiMT0qurGgDJ(-Vp&g= z(Cz{xA05!uuJi04zVE1jpA1vBQAyl zzDeOo8iT7>@9g8nlLxfYsUufPsPE@kuE$0OEtMXIJL3GV+DlTy%hHHq8`sfhAKpd> zrq3huT`|hJA+bnA3sB~jzB=Os68d40y1G|rT%Cb(lO#~|s54aw1G6(h!W-*t{&MO>P1AN^Nks_{ z2TPByhhW`uh8+%o-T8iKsI$+hKY)tv3qE4kq0xvKDL`CRW)>#*dWxN1z_Wh$CKJ<| zK2s1}N(n`T94=w4OmJMr==qV0N|{m#2-ZZc54Nt6-fqtofH$2&5ujo{080jq*_Fk|&t z$}2@uB3C(&RmydnJeP4_N-a7ERm}GJz#)c+0z+6N!e%BgqGSAY-OoOjXJonEzI1eA zjh!Bj)m!sh3+^GAt7IlrE&+&ad}3^nsCr5SdBko&+GzRv;j@S5QV7W1fVDstfQJ^9 z_Lk5ZoA0is)?QkAmIIbVjSLCzsIb(bMPZP}Yy|u^oGo9T9kHN04pmEkU5U9`#L84} zwuSPxU*XEI6=K8==^zY@fYQ%}POF*&7=t*ECzMy=jYl9%F@9eiQRe_iJK0*+^sSY? z#x-fkygc8&6gS6@FOv>O?+5i)!-b(zZ=PRNux4^G$ph+5?5WTNRVGBNBXnp>1oXMj zt`fXIv^m+_G&j5je?x9%UuHFfGL46ur-E^g z;$Cz@$Oq?66$fTaBT>&EUysjWZdmr#xI@Q38tLj;@dZI;oYB(vW=P0$juw z_2X$}XGf9nWN2e^U6HKgXV$tfj&Dl3#G@5$=-sqMd+K!#as$$*$dNDsQt-o|n+utu z4~6|EwisV24$2Ilea^?j6QQ|)X$2~>X&E;k(N#?~#$bvs))vC~wS%=rRPl#;ctECH zs1R+@zI#{%40G-wP)4JGWQIY?96YyL=h*eLIZjKrV$*L2f^35>^*D8V5(DLR675$7 zmLqLv{#OC(5mga-2%Q=|WlbRmQUZP{jC_OPpN(c^(&GL2dZ{GRz3R2CIJ7O#8q8~I zl}KSsMtr8mI1&0#0&2*B2r*;MlaPjugw}&YVEGS|Zf+Y-v-6077dVTm^wOO-g{MJj zy|1Y3ZezU;@Iz%n{YcGc%-`2izym}m87%ImY%36g75WGo!jh#3%@GFbh_#`un7GbB z^LERvR9NiAzr@ZO`X8ZGnr`s&H=wtQ!cF56DRoa-t6wzfyspQVEN=ETtK)CKmPTtL zT?GkvMSTNDDEc6C*b4YLDO(E9uO4>~4^9sBJm}vlJo(dn?s$xfE0R*ZtF@7UrMul* zMiqVY*nX`%R zPm-NRx0Lve1rK^m7`-tPZg(EXJRh=k`nr0$KTZ(Ew1#iWA`^*x+5V`tY}qH}V7(l&b%A+Np&d!Dqx095 z3mLykuMgc=mrPK?I%@dx?7<;lRmx#>jXS3&|w^K!U+E_2hpabZPQc zba93uGTyEpobdQ9@GV+(&h>$&Xt|roggJVwJSnt1btF^K9-*rKik+DS*tzSRZ^@%{ zs)k_`h3TW(6FN*lG%+x-;RR+P}mo0<`r+F)ZKNLNM|Se>S^{Y)o!;Am=OX+(*Lq^m^aF}unH8@IlF`>d|D zX=I6VJo8Z$@|4&YvjfbM7PT@>?q)eEQyo2m4H_Dq@>bvPu#|Su;aP5Uf<�?(BZ5 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 z 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 z≦?xL@?~q=|(85YxDbY{p>1O!ud4O8uHC3=Q!Sy}s(TDGnRlKSPMySi8#Ys!-`M zZwUZ9SlmY8-srssl7UidqN7=mdl$p{T^UTgBDcI2T;mb?S{xWy;2J8csgpW^{reSzi~etNyN^QHQt z%bZ}QKg}s^zi4$2#~av*QjQJbM6NxdXhC|PLqU=RDffd99#AFGuo%O{kZ9($e2A05 zy=A~F%XjM9D^jWjVPiq zf~PMAD2$T+TWkF-(8N^o1K6`Go?xLs2rVS49Zm z6S0^nPO)NOJ)i~6)ixT%Wu(%IsIIbcgzeWpQ<-g~JLm#O(n>rJv=S*3Wy&pTjA*<> z-YL3+bdkE9sqpMdnDfQ${1cnb6g9jF$Cf-`W@BP~=ez6SVp#8gaX|e?5DSJcbQI_p zG&6u>W78-!uPf1mxEq=(NFxvh_jDu~zn1Wd8#Ywp>O_UfmL1mT3_e z97F&U7POAUV$x6FKUqYI)pGvXWs&BR&>^>t=S4^8ZuF~$;o4G_xj!kSy8#XCNCRP{ zb$owgRX=Thpp0}M1T}Ecqh`@5VaSpPO>B*^-ZkrwVT~rL3jI zShMBr#6Guom%Bq)dZd|HCLsTDRp&F-t%(k?B>S_mPvV>g0IgGrC9CS06|nTszdMi` z{WSgpsQeM&XwqK4?|6h^zYsFNyE?G>BA0v6h;N^ zzP<=M@=rz7U;X)J!0`ayJ+bHV|-B!9U7J@xHl$W6uRPDC88L zwngiTgx02jKY_)62972Z&WV929hv!q0fXZ;*6w*g3=P5nOE9`o%Il$w%J^~B{zw#Z zqte_yjK$f&i^4TIVGPVQc%yDcSV(-~xPR4DAU2WyHc$h=Vt=g3WnT1VFW>hjf_zU zW?P+Pgpu0vd6zjg%F5Sy7ktWxF6)fCsP~Dhmtjm*JEzm$B?T{bblK*SfF0nDcb#$X zl(~hLdJj+JTXXH~e_jn-x{HB}BcALkOu-y$t}+A0H6D`7ggSkBS)n(ecJ~=Nm3%e_ z&vi(9#fKq8+bM?F$RcBzpij{1X+}wV;)G`jhbD9L%7pV{NnCIFELx&~qj699^QH`a z*3r3i2`@4hKYQDzuiK}6fbAN=H%rtTLq8r+K(G2n(V&1=r{ga;k`4CTQBMX@bBPnwh?)MJOTq_Vp$53^iY9^f`6Fu!$nUw7Bj5Dkixa{9qE4N?~Zl-Wf zh@0^%KRl+%&%fTG1=iB0e1o6`T-2CeG#c6rno&5ZB5NF;KoxP!$FVo%b5HNvMhbYa z-?m1Ehwon1YG-ZfET?C#0+Ei*IbLR1xCi@}4?v$X-*maSJ11+q9#D)QC^eq>`Ct(+hJKlQ%w2|n}mZ`$)#>;FQJ`5%c-V|NQnoByTK|KC_jw{RvC4_fZ7YZcCR zIor%g_(*G54}>d}QmDw$M^iR`A>UF{x28x-7S6Y=rGiRYmZh9Fa7CKjVcA+ru#dno zzWM#r@?kXDSEj1uqTe3oyfimvOeY}{_g4p7wLhO1U+;Em)Tz*^XzkuzlTn?yIXxTU z`?r6nA26e5F66_w{$$-GQ}NTH(bLnz)6WPi+M+)@S<-%gz2y4sasRFVAX!Cr7N2_kH~p8CDAM&P8cN`z!|r#nG2t zE0lD~VG~*zeRIE8sGoIh+fE^M09lZJ3Vta44g>e-)x;6UwX86K)muIL=7U`f1;22U5xT3uPjmxv>l$%eZle_gC^W?bv_<- zzhyH`kjZTW86I!e={RZJN&0-Fwsfx}xE{8=4$1jsCByD_(E$J|IB1}o>EnP6_VXhPa)v@H?KckAhS(#2B2n;NN48J2(~okg4qU4k1d|R}FR*fiDI0ue zt=+Tl1J@|MQGPmzzR_U)@U8Uq&UDUc=zxnO9(5fQHJPfQy{u=%Y)$u^V?^vkXR@=Z z6F0Xo3`WuZM_379*Z6w>nR=_J0*9F*VI?ZcO2Lnwf}f7soW_Fr4d!1_2Jx}x7eg(j zLW>G14=+`ZffpEY(F_)W__B@YDZ|>8GX5<5@(@`C=$PdE)Sg_TwF{o!bskMc?T?eR zX!Qpg`ob_+yskJmqR73@c<6(jaQg*eUogFa3~8r77U^au*kkG^Do}zGz&BmH({?U! z-QgZAHLQV&Z4X19fj)&4mdom>#`e&=A>0Ys9&1k4a$FWc6Ag25n}Ua+kTcJMPJk~i z=yNq#Bd%v+3Su@RTKq;ISp_-kK^2EN^hlVT+u~fbZNyqdaVE*fdGbm zfJKn@JWb>-8#-FME5m}w%DCUI%3862;gYJO3op%&xNGK67S6N^Zh z_m-VA>b9Oq&^#q#>7@_9rsI)>X=70xbNEn}aj1c9xeQe;*2e&K>L1|2U! zPv=^59U<)-LMB3jW~k+&kZ?h&*}rh1)AQSEe%e!$q@BoK6a|x4uI$ilmWtWtQ3JZJ z-pV>O=DNwHF|1zl0iiVIQaMA-x=*q3MvwQkxRi)Smf5oFgO@~nu1XlB8QPV90mQP| zxI?fovG4&>Ig`nfcm}qF6z3$j?c<#X-_?%&&WH^i=AJcgY2e2nN` zaBR1M08e#Mibv&IKwNkt6DM3d+!8P%7RdmXydsl!J_`qkNpGaJ^iXUbCJhph+g!pg$^Le;KrkZgbdCqw+*B?I)#m#nw`% zJ0@@fUH9#=E_q57_D%_kqy%|=PyvYCWKdL(9dkF>089w0(8Fv1(weBiVS9WOvOvbq}#>0Vn_pC6R2qHN(f#8BKwg5re{thq*{PpARCHo7)@pB{bVdBiTXaP(0Tm#U4cN@}fCLW8;x(484z$)XYr5{#8s<{9tS~*51Hslsc!WRM? z>4O0@r-_7l`$vbejoIZ808mXFI2jAyH5Ih60$s2!)UC zohs~GO>>1X7`Xf}O#UjStg@uiWDIjc^2WPYAVq!LmGm#q0COl;gDuw{qf6)`qZ&E! zo5x}yn~-js6lD&l^#z)Qp?Wb)R@IJYqupk!=4VdKQm$K&U-^EK&@yzmNi9NR#T1?^ zs`96Ics3?~Y`r}7(a=>#!uJN}zn+XoXpnSyU1C@9Zm_U54<#BYOoyEi&+X+X&YSZO z@)jwS)M=1JUStKXzJ7YIl+U01oNnU7Xs$Trd?L72)Wt7|1A7E2k+ZRPbqPtAYj0b& zvR2cWk$7^5x5o#e7mp$<{ao_Bx1ED|8@aBQ^&I%9-7iE&!< z*O%+pB{=tRs1MZ*)%Cjg28p4z)=hMo+X3yM`?qr57NecPr5eV@Dq0F%;mwya$|~YADq+cqfA$ zRPOjM$CB_)znt5rilD~MA{Q6MvvJ1=DxK1he zubl)*D&L3fU%bnCN2v$$hmGiOi)gPXo>S#6wPb2&&!pTjKfI4Ho)U6-n~DxBImEqL4^G%oTtkAqowNP}H8?emmF>J8F-Q#`!+DEK3nJ z4vD#odVfCdR5$Ris2m z<*1=9C~QPbJ}PQV08V2`mU9A?hTduT?55G;9W4Lu0O5iM$_;7y!b#IqGu0fg=Yb|_ zPL~1?d&O8Un#zE5aWZN$?w`jizH6qPt%WmtH&hHJL8Vr)>OuVMau+5%yX}SVT%%*j zhEQwdw973$3Z3V9odfjMIe&9+&vEn=DjScX4noq95XlNs5Tv41iCj^=8JUo(Zc9>` z);W&=WNaI(84~KzViCjD1DO4`IXXN0!QR933a$|1uQBtMUS0kUc-wo-PPJ7Zpg^fPLks-SMO=A+D3Y^cLZN93D8@RYK@1o0$;n4#TAKy02Anqv_gnK? zIn%Wos=cwc70z!H2TFH+**)~TjB$r4f(Ig3r1<;fmT*rKFY-v3jh!q=NV9p+K-KuB zBe&mHRTP3tz1ae>ei>8o}#&O z!nTFfn1ekFYr^8Zx|C54Qynrbi}Uy1Eru9Im~8%dtl(_*A!;;4_zR^R%=XIq%;!Ms zu)iy@sM2E7doQvDFlr;Pxf^~Lvh@jSdWJvI1Vl*U{({kA=4FDDzYGuzrwe7g z8q{Pr$&`kevAIPehqRJB>_ZE^qTkQw9?yqM3$|JpxEg=lB-)r9s2fipk;n_6kTz^M zTcK-J{r3;VDLuWme#NP5-vds;>6A1*#{*eD({k$ABP;F~O+Idn z4PZyxKdX!0sf}L3yNs1Dd{W+j)Mw*_lC2`-Sk4Y`G_To|ZgdG!l(c=|&FOPJMSdI~ z=|1f}e_pN@<*K5#sg_d9DEehuO|KLvDo8PIOmhmQnp+jbR?d#R;RNje2pxHPIKyD6 zU8Zn5N?dc8(hMs(=2|3i1=wOG1yiCai}GGgZ(UAyX8tR^$lf;#^il@@pzepXfl_5{ z_21$3h_CK&9#+(_Ygey16r^pv6)H|ts@=S`Bveo(pDlrbN^lUK`a=iZhlaHLI7XLWV2tc3t|osLZTAY5YgW zbN9{T`oiUEeis{C-c1&D5JVOgvoOOs0Kq0DX)rm&A=xQKgIwWtQMxnJ>)YP(?a%|Q zT)?l4P_*6N;lQco@}kFuBA$2>^^(CB3!lMehT~jabtqN59Z6?<=>sD=&>wM9;lBQQ zZ&r$e|El;itl;Y9diQHzAX0O9Z-s5n3@dSUeNZnVr10qCzo4_oM=Bp6GQH9gthqS^ z&m#xCX`TY3O}$b&dV^{QPomGf4cmb5>q&U)h2%fzE-5?UqdebxxB$%TxN*4U1@nFU zOp9rhsMQaw% zDT}cqSEu*W#!2orSgnHMe)1lP^xIJ-i`UcEGCMj=XJ_smir`g~hr9YvTGB;>PFJR! zy}kXc{nZ0at}N{!L+Q`^+fD8%Ywkg-BNe0~pP<6GZidg0^Kb8W^!~NO94S3M9BlR= z+9LDsO}C$n`k3takB6PSNzx4x%%!Zy`*W*&Ql&jYM_DBUox+sANMKaKm}OQZO(fbM zH)Q4Xs8cRSsU*?^(24f=O-81uz>8s^^)NZ|v?P{Ho&G^*4>!hY>5B=4?p+nQ z=*vtqJ?2-mG*i5!@ruo?S;*PdVLJyr3FC~X4%{a1{hH2 zc2f@%XOmswR7O?r!ncOxm{U2GDgfrAFQ5_fZ}>Fh0=tzP|6z_8)7%QA(>;M6FY)o= zCPgP*+>=J29+>dc<>4mBM!NhFy%l{wkf+ZVQaK~U2U~r4_I0}E8rl1F=vM}oIP{F- zDA1YubKnUOs@emfazin6}y}#QWE1A?TTy9zbYQWM5+4p z#6LOPf8>&f&hF_l6tVhcTPR8y2SGoWs)vw8*uZ!h>M!Rq2r@_~+k;CO1sjS3icC-u zio2@L#=&(WueF_-bjP1uNY}s-T$vecW|?tDVP!@UreI;ucm0vjI^--uJ|aD{u9KZT zwkQvY`Wub1veZeyqC8dY%bN84kt$LD(afesQA9>sAVyFuOrUO8yS^TtE4NHhiZ}dG zVW+1@>M&rt>Yvea1Qh# z6lSi2K;m$8HD4>7a0@52@*3CM`2Cc~P{r60t0R zsCH3v-RWBfJDR7pwHoi%zO4J!hOM6ZoJMP+*xEguP(UK8bz|uj&isP6;xey3y9B1- z`Yj80*)YtoAJsMTL+TG0N8Mm{ZgsDn;}~Zlc&Q-VbvK0#DVtfOj1y?2-7IO}dKR6+ zqacP*HrX-GyTVpF#*LoE9=fHWZR2sP{MpXomv|G$!3*bsb=RTZ6!Pvf3JWHahApO7 z-0Azj>!w(#g6_(a53$Ocz_c#E6eDnV@=FlkhXQ*CSn6#)PZjfyChHG^2 zmI77rA83%2jcs>_^Wpi0?7TV`fCg2P*FnP_*Q@F1>JnWs$QVDERLm}!NBX-xU23GK zOtYM?)QrURz$w>;if1i~XL!&lLL7jQIz}8dH^u{Xll66FR{&I?9NXlArp)~S)1v*X z4q*CggXs?d9Kazr!An5g8;vskv{A2y#7}vh{OwwS%4nyX19b6~M%fg(cT5!xv%C)5 zzz4K}L5kZIye#q05zbA-&d7h6VR|CRh2(T(XmZzT7$`{zTWEHO@mjiK3BMoXatr*v zUoT4Gd%dH5zrPoE9xZZvA;Q6}!^6P+J?27R=d+YI+;9h-91#!}>mg)%)OY>x?-5t4`>IqI(umX0EtxJ7afsuKY=|HTl*NMuz6&rQ{3PU0 zAuTDjPb~s%lY{b%=PCJOqYKdK-^2Obi!=vrLCoOKda%*X8sZpVauE&!x`mIIVPZ|~ zq=AukG-hYJ2hofJca1HU6=1)|XD|o>fAe6*$B8}Y`@Cihl0LFGyc`fmFz!YBcaAD(J{9gBVdF)O_*yK zIfzUfY#{*b0Z>3W1qfu<$n5yGHf807y(#k)+m?C;BL#m(QYCX=b)C8NcJJR|9C1>@ z4J=FdJ-?Vf{|x0>u>C4OE!6lDISD`5tWwhk8!7=gjS8{)wkF3jZO4%GC;eaJD>NIA zu9H{WKuC-DaWhOwrI@BTxW#ibhxdVs|GEVF>W?@-TcMd^p=7O@)X398OAO8xOz zWft$U`vz1TX7^)3nPRHv_I)kVTOMHY$qOHp%y(X7A+N!7gEsXd0xPZ~76Lwi_Yn!U zol;a(k}$xT!6KW@23R^%lqsijn{V^qkR}3Vr3{~wpn*7&SKOIcA^p@up??K}KyzgM zAjeYa+^WtO=dBCkHLnG`Yy=paK&X>O{fo3*d*wtM+@KA*MB&o5xgB6FHXDG++J@mi z8_z<(;M^~fI8guUCsTqFP6q0a2k%4U-a=Ww)F9n5%wEsc7QqKbTa$A zf7i~B>hpbTfYVKAZMZ~>R`Ap3?(0U@gxZiB;sw+ZRBsE9C~lYS;0 z{~oD!)%W&X5H&~x0s*42Qa#Q4Pc-kg;o@^99lCZlnBTJOvGZ^)zUkf?u0ng`&*$LM z!0vp#$BzVjA;;#*H5p4|e-)=NF2V{b@$SDZp#*CMn68Bi2F^JO%ezQge^|TM4q3X1 zM+}yI^Q2PSL;hQhL@p1aTcN@elc>=OK?G~oJMEi8&ne}Zch=0Rc#Ub$apsGH&ORzP zZC5}(Xqby|CyF`DqEGw?BCjsuh?8TL(2acPXe1v`w1|&B_VyVQewvo+_X-KWlVmW! z!mC^>Fw#TxbtkON*RLWX{Gr%xxqiG^fs3mIkLEnWG24$f7D~VP7l1&A4u`t?fZVvq z_5Sn~HalNB%kQ^Rae%vK<}`8aOxL*bbXxnDkLV+IoEQ8PYmuSsK!cAsbPsW=9sfNT z!H@cb|N8>Jw`NVg*p?7fpLUPi5?n|c0vvk^D)=}09mWNeS%Qi+gxWK2YI_Rz`M5Fq za&ebSx=Tq;wNV06E>6$#x3ja;&-ceV2xO3SrQuaeioAEQNd3q!7!^K0NA_R{i* zi?EZt|8PvZF$>uVPN~60xM^SmiZ>GG`W#1fD>CJ3(QdH}c$uprHNM5s@-EUBAbrEW zJkCY$glXbnshen(1*6OCBy;ooxi|du6G8Wf4o+NNJ?{XYR^$>RE#7WlX*9#^AfB@@ zzVejL4g-y2hQsj>F8rB?%5ZU$zu%oL;iFI;iENs)599*CYT8Jn17ilhDs)~+33r>R zp@=n1MQs!FgLb%a4WY8J-xSy*x{pz2rF+IZlP30sj2%@B)|Y3qfV4Y=t{%}rRiyM; zo`UV?=~|l>x84|~K(~%V1&Q<-pQw0@ccu(;Ua({fO^P<5HOi^$GTl_~9nEw_vB|pv z^IuYLzP*y;d6Ut_cM%X@2|+`rByhlkAuA6CT=(@$jxDRU|Y;eKd_Msv+^cHNU zSm9as2*mV&=nUJ{cd3Nv<#$@5&L+NTPKh_O!XUM?u?{6f9W`oPe8s0NTDXvy;JBU^otFVAN*f51x`Zb@Dqj=$Axh7B~ zdbDw$<~h1Vd+-byZg_+X0zPlR2VpF5mKeDP8^Pzi$hm~0sw1gxHEsTx73!#&3I_8# zun3+^cJ%vgJ#$cTr{?CzCYL3-?XyZ|NH5LzL3lr3Hn=qFwd!V3V|QU{&x@_O`)3Vq zN}u$epm-&GomPQ#G7e!tcNsH8b^oiorc2n&ceas%Ll|(OS2VYJdEB|#-<6)$RzYt(FOwq|pO8p(Z$nsqkzD}xWJ_ZnsnEf4FI z#qzk>6v3J{nkB|+@RvKd!<})Kk4XKa%WR?umw1x*laUCn5A%gEyMNYn(!fyWPP2Zf z1|G-QXPd{EOD)W|Ae+@-U-0LMd++f@oN3UQ2S#+ORw~@y0 zM>iPP^Wgu$V{o~SUxO}#>R5L&#lB!wm^hI+Bp=f#*p5G2wB6HTqji;^MFks0Ulcpu zr&D=-n?bJnpB3Ou2X{^<@6a}UK@NodWJ(T1%5tV^efLa3T7?T=iHnTI^Ztl{hlWm# zxaUzfF&6*}zwE`F_61ej5U=6ALj!z7{TYS)B!0#71Xv2+yXNDu1i2Ab_lVo|*#PoK z+=SO9yKid4Kc|X2{tobB4}A;heQ)B|$lUlN#=zr(zZ^cl-GFWh@*v#m9&6ImF7FiW zgz52m^v!gCi!;Xf@Y9#%@?!4w5WbEm1J6t3hq4GilZ|g&1;ZoijdF0c*gk5J6wtfd z%)c5|uNaEwz%CTP!*gOA&CGaPYW0kNQq6z9aI9DRciSazm0zi%00VvT{6wd==Z*e9 zrzZa~tB0z|0#p3mqf0>s0HFRqO-=sitlmN2iRu5v)~0QJz=7hw^FbY~&jg&b*5C~* z8ERMBh_Y^Z3i>>K>XcBm_*zC^ss$D9$;S<-LOf`VoF9 zX31)E5V$r>z>&5nBgX5+edj|Go|RTL5KXJUt<>e_;?RWT(TEc`B)ZuuG)gQs`_G1& z@T!l82L?}kK#h6L&7ZZei}U-`+594(@+x9DIHq^uV!t`0j7TSqNqW}O>X?DOjw+YZ zA%l4cbL^}j@H2l7w=qLOSr53f@2_fRPC<*uNfCkAA`I?EEqB#aQ&qJO&EvdWr7zD; zCJ&PW8H}W}nB166^4b-xY8z67=`mgE|Hjxmc4r#3 zTbr?2v2EM7ZQHhO+qR90ZQIEmJE<6zr0eNDdUWr8_jtSi!L>eIYpi*m^O&^s8>iUVL15&w6>{;jJP z9TCRDy|%i0eRy>An(NZspm>W`gK|tg&;0v1}<6+XNxW}fF&HY`=nXU`I(SM$b!=f?3tP= zA@RY=2&Y5B`j~pwr*eemBi!?e?9AEP?KqB4xbzHu_Z>Rf+w^jd2eD+{G9qwnMj;i3 zSEp>1Uy4Ios42Pl6YHZLR_=Vg+c6A3biQ_#*~{h;+Wl35)4I+r$J7}u_4*EZ`dSak$#oZ0)Wl%qdXl6?Jd^#=bTc%oSZrk9VfpBdhycO zs>A#nSAj2fu4907c&&%4rNYv8&>G6)Qw7szBN#K`7cOSex^g_oK7;G&%R4x|!?%AZ z{GvQ$KWaNXiWA00V23CPk=}_FFcTyXlYo>{K8rc|SvU3a@^^Lbfbm}tW?j3fw_MfA zuGUf&r)=VEDbzgvmK?W@2vBQ%f2JwnmSsjI0{!v54~3LHpbX~>WJGm82$|^W=bN9C zXPCF2V|YE77RYQ+$k3xg`-;U+TcNYcMehk8YD~XM7{KJBHaXtKL;*g7a~T?@eE1S< z4E0)3_$7`tMk&zH=`WEH5($R}q630c{Iz5$W&PuZxd@~=}pUlokBZS2+fQ4cdD2gkwc$N^T@2UDU z1iIkj(Lt7@lW~UeS|%1y2j0JLdsNA8n$s}qm8a9btCrq|RZeRL=NS!3FhmLe`vUxn zwa^MdN^&^0;Vv;YqNyc6sO4(D*`2f1YAV+(Zs-`Aj^Xz8w#$mmp`@cvB`5bUsaFTc){_+o&xvEqT zXVV&2J9~Z`$}I;qIp4E-270s&;YP3KZC$;+eEq9ub{%?DM8}r|0beH?J;gShHQ7$Y zr6aXh5|^?Ym4so_mL3nUMKC)In>5| zbmIMNdd7N~cyfeV5lbN7dseGfRy-eb z{HL4%kxS28aHzt+;`YIKkf@YNsKTTosj8;ZajUV$y&%xQ??|^CxH|hmqyF#9MYWXO z_kEg7zgsiE`$Ms+$@kXN_T^lboF3a}_bj^8Fwc#>rW)4AUwgM&x%%~JEb}T~P5Q>V z*Y%yp9nwhM#n50+wfsgz=uoUjnS0GzVz9; z%6lBEGfYEe4MJ`AjiJZ$TcKRe#X{$UmBVUc<#*`WZ2}*b3fmoiNWUiQ?IC zZ@fk&nZv3?z5w$qN}|GGEj|N(*;z^NxP@YYz_4WQOv%p;Fn{ssYQ`;#`bUQGgp9~6 zOUEui>ziOFYVb=NwP2R$c7*8R9rv)nF%sqwVD;woSwyF}{;K*9i@JO5M}^i$3rfAG zHg2v)wJ}lV2e*?fO|4Y}AV!9|CEVPqNI3^w`_~2MCeW;c&VLEn5)P!yTPk6qlok(A z3XL7M#0vG3wi8QQEFFh}4h~L}@_`2(mn|$E$!@TJmV5VCNFkMsi$cf7s)`CZ3_@H5 zG5?4xSffV{lUj0TO#r)wLggxpo%^kj6OoyiL@_|oRfT4&x@RVjGs1`?`>tWCMdbpx z3dsgMQU;1l-(iw`6QM%@4=Tl|dK1!0gfmNZDT61Jyl z+b<&I*pOgD-HB%odo|P}Ei(;U%}A`7q|JyKspeZOO{*)OB__^ULJ&`w;r=Y$NnwSV`l<#BQCwMQO`UslG;!pvAS(wS7(W;eX?jh3 zj9|iUnR3B)nP3<7`FKXF@B~Rv9Le-IAkoMAY z&kQO(u|v+4$&7gOB`58bkv6ZkM84Xs@5#5s+S)cByMfd_B!`rl{mPD1!E2>&X&pg( zT7I%Is-4{u{=WYNBRy(#<=Dtbo@G*;HEuF{>n?c z*xJ7&O80EhdDLqDRLv2pjc~dN_1FY8d5Tt7myOR21%Ou7+DO{-Y&vObJi;tVCPEEi zVYO*7Fs*E8oHPlRAw5SN4M(PFjBfPi8c1>ffSLqFOlYHbz?89)tXksOjaf<*IChHTG*u|YxNwh-PUSxG@c$KUqDm#WEFr=c83jC1v#s~B{pZ(}8X4w?od$b0Jj6&8JAk5rkx|--b zaDC=Q@OI~*^yK|qhG-zaKZ4I+pwkdf0Bz9s@&5uTn3|vmn*LR1dBXkwdb62ZdAd0o z82s0g{=ak6v;V`JO+zkWn;oh5u7S|gDP|!3_?g4@45_f9l`;|He70~RX_i*3nzZfZ z`xAjoXNkLA=U=mZPSv|NZl6Sa1_9!4;(5b7R_|3A2&aU=Q*p^&z30B~XPtmGk~tQ- zOlE9#K09xMbwn8>1O}Z2u#z?%++5woyw_3U=$Fqg!yisYcO3X5&ZzJ2uSbl&klg1o zgeXqM;BQ#FZ$qxmV5iEP0(cAl!or>7Fse38+}uKV&TP2T5D9E)dQ=flRM(#?j4ppd zQ!g0gL}V)U6)zp&1zGBtX}5TJ!Ka)7{?J|biozi7Cj|Hrky-(B|FPJi@<;I8C9`-AQkTYLP%pA zwryO+d`|~+S)2ia7fidGkGXoYs*yv(jekm`7Q1vr0`X~z7kTrdE4y69FzRUwmVy^I zR^BsVZg)lxh}^?c#NTIxcuJ&*04hUxTGrB!O>Lx{6=vJ=<`nx^bXddb%A>__rfxSV zf{PA)@jS6BB{trXj=YAx9~EXY7U+Efb-mlR-Z+`MP`LR(9j)A;DEkdCPja+Knxu|d zC=rgKF{GVWyha8;uBUBI2yv|up+4UGi2-2c;gU%x{s|qqqygMDbgyf z@kqi^1FDYRRJn1jxu2PUM$qFa?};rn@D|y)80_d`c``o#A_U`lfW6~;=ej;|;?F7M z4WsioBxY8poAJ1=Ug_)x4BtP|f@0gb3j7_a!C*V=q?$XM_}Jc5b?M^14e`8_c}I_& z?S8~2{`Dd3u}$^6>rQd}c|ZJlxc|TFIkRT*%?@TDpp*t+Am;yXJ@>Dk+r-t=z`)qZ z<$pn~{s*M^n@y(C)U-}8=nt^m6FdE;vduQo z?|Hi+xHE{skW#DJsji*a9gXSn{73#uExdav5DUNer`d)$J50% z3O~)%vQV8a0WG9 z^eTM6{Txosx6-cG>s7O;^TPT%TiVJMo#>fd)wQK_J4T>j*`Br-jUyp-?E}Ql_qo~r z@Q_d1Dvg6=$EdLhi(TgY_IY)$Fv`uA7wEFRo!a(?nO`qv^upNF>_gHfWfyvoV9WV= zzwsJ&(i40eV^uIIu}x;ZBhN$deKfyZ8Q|cEHo;IQb znoS7^yOr^~e1V#+p1Gy5QPwLjD$+BXa_v(qc?6xWtx?P7@_{@7j9b;i`nW(|6h&wyb$fB*N34_?=41vS$^KF?jnNWi z&m(Qh^^YYMOYDTo4cF;$SL!qvo_w!6F4&L$jxux%#ioubiRG-XLYD`V^aLX$RYv)% z$OuMNcb9bNt>Zkbm<=h#E$8Ww^^~-)Q*42Jic}}2nM*rp=?a~`qKVKrgrsPNJS?dV z%w_}yOhJfc%!!Cwe)z9N3)Y;FQI;wg`hJ1gwzn`JNH{7%ec*<0-+%Uaw_lsfF5*=r zQM0czF50mQL1v@bE@A?NX0&uABLfSk?-Go-w-F#e;cjCc~vTZwj%d zc9BYI?>oEH6=_|v7IJK4DSa}nh8blS;AzwZ&Y=?8lX>F)oN#!6(jpLo+!DsTc1$wV zXNFNB3e{LK(MmjzY=ZeVvnUZqKJ!(Q2^<_U@dj8+t?b902ImrKBAvlLq}DY97}JXD|8m!2$&pLImqJejJfXeAoMzDX1#pj zywI?uBxIKJSE+&1BoL&2#hX~yfY#j6BgPvA7mCw#0MgGz%(1}{bX80 zrvK(D0$FD`vLKe2ojV#eIFkk{X=IMlM9k49*9b^x6#B$cF-@$h4Tv+42t{9oQcy8L z-tjC*IQ)U{*D;Hm7G6p7zoVKw@`+afw-_xzrojstNY1ffOr(gt>5Te=RFH&agw@EuRH@r~cd5}dAJz8wCYe2UUE5q%9Wa3(uR?#E zcHET<_`S{}{^WJe%mzz5quTN}1#vqvUyhttlAtSAupLh@(kCTjQbQ0PL<5nQefYBP zOAA(H)X!DKJzzml;)Npy$wmx19RT+lnbQzlz~%><|>)WUdRD-FvWrq z495J+QLdJ}F-k+*-%!#Vbf>ORU!@QqQM8aewPZ%puJJdG}&np%xkt!N0w8UGtTSDrDlUci4AylLznscC>Z#k#@HoJ* zFqaq6pDsc?*N#^DgU;WM5M6nn!=kD%&=EcSTIUd^5RQc<@Cz!*1z)&2EfF6QPEwqd z1HxGj{+OlXix>|l|vxm|qjll(P>2DQ~`9u~O>-WqrWv6t;(>QJ@UL!$FD9RC0Bcob; zck>Hm=6K@{*|R2M3UU!w%;zPgoKQcDTy!Z6@7vcQb307SVY>&B=EBHbN*ygJ5Xli3(Z!!rhDHX@b-PT>%Z|0>?~!=5E#~0 zjRlLH#~Le`g`;sSXiD@#jDf-e4W%y`auC}@?VB)sKX()KeF7p3)L)G690j$x zRUpU761$g9#x_Ma6-Cv^7;-LhyCmuLZl%?_NqrA%8VuSRi7-f-{$P+0&9aIlds1}% zL2{z&dDImaWJEh0EIMT%V?`>xJsy>$!RG_sbzxfKo=6`@YNaw~dcJ`sG+!tav;A8p z#uQCniw-0sjC&HzB3=}>#S@AJiWnA4^-wK8BcX<$-=W*z!QzBfTAzi%tF(oK|F2uP z2+Qq*`8J=b=M()VW`Db~yM zTu-z(;7uHaG>E{<8M0Mb5HlH9Lmt(gA8}^2%P;lVPL?C#)2_S;(n247jdXeVn5TQk z+nqJ18t6xR>3`7cySnyj*!7A&ub;K2(>lM+~^2*Ey)KU%=TRQVPY{}#hEvTp(kt&C1{ z*M{&DY*;;LSOY8+RSM}+K%n;5PYIiYEeucco8$c%cz}GD1%xvtgjmoWiBLiq=x|WS zDHb#c4}1v%90+<~gHs+sypRA5xQO`l^+N5EA3h{d&cC-^V587S9Ox{>zIu#<0`q7U z3JPg~TM87S&>~-ZuJ;8SHY|;OhUI0Hc%XchSA}D_GxjvH>fJ=JakN>3+&tq63nq71 zs0fHh@f@q0`xnf_SSd|RB`F~{u%a_mlk=8i{NNxPy$t0@0R<7!)VyEJn7eCGO+^NM zfqupuK}aaN+`E`1#Or0D@;UQu8AeyB2Y?77-TdlGJpf*RJunC1vO0^VDqfHfr}RRU-4upC)!`SSk18VHHTeVtQRYf_Vm!iRC*ko-DPthjEg7@erc7f=py=*|>|vc2 zfo69YW`SVmOXr)KoUWDm>L?fPO6y`g(FG=?LDUyqO5oqfD_GKTiPV|)*pzaG0+}^` zCn6WD^k*U|5x=`oHP*mh#=V_8J0~)Yl48o_bh><|VQUIhJ%{ks-6O z5t#;uKtO{Ob&2p=r!ruQ(|njPBik|gM^?Qc78wb#U9$^3%HQ89m;a(NBa#j*VOmwT z4ylNO3+Iy<6AF+|pC}2L?#iBI2qA<=EF)Y+0NF%LvW&=wZWMZf^`uA)NKBFp$iv!z zu|^6J{3Rf-3J$d?50)5-&ldAzjigKQt8fBdN8YeTpXYL8=;^ZkJgk=4MN#}*`>}&K z-*WTc2JWJO=VG!v3_d5Nk5u}Ffhs1=e4@IO28tz{R00BHS67@KY%&C&0Kt_5{<9aZ zK69hERXg0wu*E$xzjY-_37`E&$Q^}foH_zYQFIDp86P~POsg3g%Peu&N)t=Jj*$bp zVz0cXskhvNNr`43VbvdJ+a6h9;-L$d?M=vC1!p)*|h4 z&M&i36hOL-Q6_(*dg7(TvFoO)y~F3V$b;*1Dsi_U02&+<$GJ24=^81IDIcHgW|)`y zi^eFHaEov>k!kSl0fyuT?cKNq;cy60?7Dp9;pmO!q*hgPFvEcg322(`L*#U?^3m4! z5s#E(usEX0-_4@~n~L)dN#VFk%yR|hk|x~If0JJTJ}|uifs! z3HtN;1;h*1w`=0KmN7n#+GmH@3{9us(cdRWj9YPo6@zg=h}ki9-Im@W^C7ty&a-j1 zs~`p(MVg`si$3cbExAL0t2mx%jC#itd);pJ+Tguk>y*HBWF)fe>Zg6SYo&a^B~i^| zZYL@xvG@>;b;h``WKB~>K0#C!G^URO&M441d7)@B<0nyQ57qu(YH^bNDF>AByVCqo zfPl}mt>LbgE1|*w9M8{b1ZnMdwmIUW2KI^>W0?~nR_`j!1Pm|;uk17MOmsSsY>uPwv%XH>$?@=ewh7U@ z-KyXypF;Yt`Ho8}Cm9BWmK<$SwjemxBE4i+A&4XhI9I3HuA=?9b;%8=j_uv95s$8X z&cOk)&QkBr4$=(9iR|ireqP?L#rNLBoz>^w5}#z$^?rM;i9EZ3V=^CB-}j?&-7e(C zv*HigT?UB$Xdct5FTU?+sr$NHPi%#CrkGY2dnv}e#S-kDURDoW2H>pbxI0~#%ua`$ zVzsp!pZ+4l^=7u^*e-4EG%JP&nhsgL%UkI*#p5PIEZG;C3G-DgMz2!#X6j#NQV0Ld z$IW}TTF=%V%;hw0bU3d;A;A4=AC^=4fwconkhHKu-5SN#(Sj^mhuKMpt+C?d9PW1i z=jQXSLg4RLcfXv#Nbl$^-kf%kA0Ev75}_G24`;Gl)+^R@S1O-Giy0Xryy+FRVm}-JhHljY3*dGY(6cNrooJQbs{_E%NFFkI|l-Z{{2mLphnd@ zxSyQI8)wX{rdD+8F`GAosE}n#{O&!2wXuMrll8Fx(Y&-dv&ou|zx*_#^^ovD zKGubvCUco!l~x;wvrp4Z?oCs@G9;@+x`si zj*i4>w#CqNHhq6zcbq=z&S5`>c(M0SL>F-7A?q3x!BvjLWR#_durKBOokLZ{L4qcqgMsVaGVcFt(;X2NlHwdw{H$AK>eMn zZYQTZxb`!Yysbk^pX&HvPVClo8xj{wtJeBru8i1omRi6tk zs&NCUxM^qvg`RUYUm1$E-A8rtmB9b+{q$46|NF@>1LAGVHyt>HL*+^>=*b1Vv_!)kD0;R1rnWAdWHml{V1}7 z-4a3qI&}^fHuQBz3s_vi5(~Xe2{&Pq!$D}fi}PoGFYTq>&i1BX_*f(fRi67Z`9x%^ z6k~K7zW0WXUQsY}6}?!pnv!Ss^XhIUF_|)}Su&~hWP>ts>X*ey?pdwN+!NtVdT%?~ zZu91@;;j>mv>ih4X=9^%rh_4oS`C!2dOL1_>$^yyCKv0dGbpVi5(zO@VkTD^Q&Kds z3|;HPn6-h27XxWi%Wvj-=&;i=JC{R*<+JMLwVpQH^<-fic!6vs3#l2?oBuZXSZ!?c zJ=x?%#ln9nMC_VrF&-?#u4eFa=hBO((4rOYQ#~tb95$+y?Jk@N8}Czo)cU6ORq^!% zYNhe6C8uexmmTYeK>m%qJ`rJOsx2*2*D-?wmwPmJJ}6iC#pGaS=VGh5n*YU(3uvjO zQdW(y3_)FW_ahWrukPXas# z@Xuw`OVRhWOEz9~(V^OE=kubsdVt*zaORrhGQvVD&OysaEzq_O>O-WtGvNMx`8Gg= zgCV^^fg#-u4i@qa5+$SwTmdp61S7`vp!K z8XY2iOv-+$_#^nvuMQrY>AoCv3gi|6@I|9qUAzIEsO+AmiD1|&l7+zGI;5a}z}018 z_)r#9xF6rf^G&{^dGT$?*ODCjfb+f&CvAz(RSy^M@b04voAqN2{jMljx~Hqvt(2*} z@okCG3mSa*z7t`?Q49?g#A(T_xg+pUjjB^^VZNyn&31y=8=Ir9|XLDxO$@2&l^R}*tC)t-xzpao}9vyal zx!oT2(5bnx4-{8rFn_Sg>--ir>C&KF$_Rl{mBa8H@r8>d4W!x}AnBf*%drbbPtvl% z$PVT=hw{;O{EDvM3LuyyMuF^rOD)?F1<~nuePUk^a^Y<|(({!|xsJ05!MTRPNX%#- zc|mwY^_3(xQl?Nnxa}->H6^gQ6EIhiyhWK#(uob@I!G-ehXw|Wtt~q?wujY21g1F? zN_uf3fY^JNRQmRM{lZ*%aH;e2udDDCRu3Pw*jZ%QxTc4c#|VxhU|;83LO0AH{f63_ z;eI=o7J@H1(z7wKpEJ&>6mprkr57JV=g7_9;bOx)nt$ZZVP~p52G7=4 zD|%||XM5h=+RxU0Mt+fFG}QcvG>01iDib$>N7?P%I?MD-`a(vkg9gHzBT<1Bq-q+#4jSYClv(5T0VHn=dgwJe|RQYUKM-+kWKWe%j$(I`J;?D5*5kG8w(T{Pp_Z7(pRhLuaI_G95dwIO?`uKdsTK&wTD7kd9> zh%S56;*>h_sy)29b}fjVI`Tn_V1$|39yKD$_vg|HRkuV&+H>x&6Gl#7fRq?%SV%W3 zr+F|abnap}^<~HoSkdtc(5dHm@Nfk9mg-OI@3z7R&pcloU{locCEgxK8lvqkLybVK zJCiY!yM5o!m)&iTJAWR^AN4VN8ZeD)f3B)62zo;GzG9q~!FSNf1M6p~a1-3Hrg#XV zRZl};!3||=PNB7AZddw*37E{gH4x+wrXwvFVU6S^1x76$If(8z?42Pwx$196fcv@= z%`a)*MA+%pg>>{_7cN+n<&E5p$1rCv_asaaM>P7=@t7Ux}Me z_U0L|Znw=&sj0EiSlGkkj4z{_EJ%&)1 z7yh%+GyRK|Ml8{hJEMN4Mb}CRot~y9S#2AG;qqPMpBYt5V=)Rtq-~c}C4&mhy6=*T zJX9M|5p%0f?u;&XNtNA>`TKxfWTs>QWo4Lb!nsZ~5}H7!1mWzG6tIF)_o$Q=>T&`Jm-_>|#Mrs232OsOKS z^&zUd#OUXOl2m3_?(=WcL*>7Q+5u#;Kbi^WtO8^X}9wk=d zS-Hs6#LDo>PvJrlGs_y2Ht>9jo!>3mucK=M3{Qp9PIP86L1pqjmz!q))GptfoQcGw z&E?ngl!-lT-7YECyb+d0;P|LN~`|D+}@dLWJz>c@w=q#Cl{_%7gR&6Cu zDy_NBu9$}j?~uvWA)l0*<`)0lgQk@ozs^Xq)fF1WBlpg4EJkR19TyiDp_^(e0C-E z?;^`JC#3n+H7#;NmGSWtv!v)qZw37Y`-P;dw;%f2n4?QKLBSQcLCqM*g+q- zeU;gy%drBo76mW`wwS(3PiX0^d30AV4(x8@o?P20lQ5>-DN;g@K{9^%oi{SAMhO}p zQ*@m678>>diWUV6Emrsh{^|hZx!bsTcR=dz&NF%)D8bQKoI2vX9St!Ln;$eVN2G0p z7uLN4Lux4QSkXlZlZ3EekvK9tUrcZk7ejuz3<4azJpl_0J=-QaS`}L_$9%)!dEYkR z&{nr(D!cU+Ru=TY$6{~_*bQ~~WHfuN(j(o-D_Iex|6aMBe(C(Wm58fFLkPKZOOTL zg0PytLKQfCq_aTBImj?X%L-D_JvBbOQ)|yo0?d%Nbv(||a zjJR9a_HpUt5a}%NQPCLdaKR9UA;^NM9x?W~8`yil-nxkNFhY6oH}Qf0k;VV=2p4Pk zU}ETeP=i8DJ$c^T6$qT;L37FNJ7%HAhi0fkX7ISi);?@yaWLk^09u=(m=wX>I@|L( z`oIy|LJ+hVtht7RXhYdXXrZzYO|nKlKJ|h9Uq`P7eV-SvX;+mNZk-lqL(3LrK1Jsq zc2JQ~oR6AGJm=r5e!6;93H<4QR%Gexbbk7zmR_G$nX)kP+0MAx1wYI{O>^KCxg~MK zod$^H(9BaEB@#{0p~30eiT50Nt=JiJWLJ0*wXX(d3@vg=T(9b05@G@An4oF;j5UQx zOO1tNP6WS$1<@ISI`<9o82^4AZ5#Z2eeaUkc$&idH9~}Yo591`H9@dTDr=ll9SU+= z;tfP|I#fPxP!XF9qC57_v~u?hAS!V>Op*)7%y9pzoh{1?oZsbOV|!yx9hm~g-Nh3 zOlcCOF~ZnX%Xuasc|k%$L{?GosPu-|c>3w#?)mfW@&XIgI=7L-_@No{S0Xa8d!;B+ zU4M|beoix-g9Tyo5+E_>Q-MIKp)!#ZhHL=W_ewxOOLPIthip-|Mb)vE%>6RO@|aPa zfTy6H`9F;cN@lAFo)k#&_3 z<06DG(YGW)fz6mM$}0A9{(YKVoKk{TeEp)cn&)}F+xRWDw#Sh7Gr7{2xD~7>4YLe z-UucQJRO<3ifqBPe0za2on|ADY&ew|Bk(^xUx%?G5ii!`#CF%UbMl~PfRZRb*tuY; zjtGM-*1ynsQ}Zk2IFN-sQVu`H5j!a(mMDyfOwq~4k(P~(mG#9YDfV}3vIynf6@pyb zczgP|_4eGv39G0&wo%C^S+yZM<;DsNd>%l)iekO|lk(cN;+(%`3~g79${PtIWN--+ zk}yeJrxKLR#qKx!6c6mU*?p+Q*QWkq$*2~78SE~+SPG3rv1oDmJ4MHY#!H6jM0e6w z1LAu4UPH%i31)Jn5yuWA7%$5j+XjrRPF)NQ zn(10UKevD5?DZqx)cIw>7h0WiTR6aWQbK(sD9E_E{7q<_TsK3-!-yS5-?civeWbBF zN64#M2XsY=w~2A~EYq!>#S(y8(s=%z`l4(S0u}XnLaW{hy{9Y!fye{~RSPx(Cd6}A zQ3*?Q#!|T{7D`Z_?d#j!JVZ$=)vdIAd6W6Z)4}_wNGX1PTycMY^30OctGEcK7&(uP zPpT#xAIuPn8f-`ssDBiyv!! zzBIJ`h&klRgN4cu#l&goxMtt3PkS^0ybEfd>yuY`D<$5Q5=(KwX%yTv6zGnOEt^Z8 ztQ9{;?xuIOk^*;Kixf*kg-5${qZZNMvv;07)UEfKq~S`sXgI?bNa(}~CQ}f5#YzyX zRmcL?R~m*i^h){{JTL4Q7O~pYu0ZrNk9dw@DSDCNB)ua^)C&A!xa8&5E9TA4DCXOM zRNU)@kmRn~$&}C#Sr03=Nnsm_PzR_u5P2OM0wopR@wY#6LmLSiyC>z)?nNKk;%%!R z>4plS<|4yjv|TXXNEAU;nr1|;aQHa0)E-N5T}wW7>DL$WhUHc!Y3j} zp<8cz(Q4OAg0rQD_SI@{epk)X7U8WMQJa`7SF9DPMV{~YEm=dd0I2!Mlr4DK(5y;M2p4U>&@pkU%yfRu)e`ajDfZF&b#m| z!`gDzT&)Z%d`)TUg6}70-*@?2^TUGY2Vg8$el;%gNS6Th2CsG1Gc9Sz<#SYpnk$0XKz)ke547Y7{3qUGIq4-2%=wG-uOHfi zL%Ss8_iK4YudQmp(~$2Ak^u+*V9gZ5^#s{l{2TZ>)tdhJbO%cVc}lR_F%R)ZQK=X2 zIqQO!6&3VMFs4yaxIT_J+@HW{JpqllH!1NdAP z)lG^cDhN<2BgWv3zX-1*Q<%=bwROLgEY@Vr0n-m-ejV?|^L+o;;+7yja3I=HifPmb zLFDS4UYseDs0i?*-JQNW;f&KYKM(g@3MLBzhVn$1bBqG>ON=eHsRq0Kvu(2Dta2+) zs>0T^p41c2RX^KAFP1N&bX+WFdXp6QBs;5Crr&KMH-;5$x;(r2in|wK(HX{8*gl4B z_o9a)!?EF9Wpidb(VeKg0si#rG~a?ALr_DG7!vyclY$Bj*OgF8f_wMr;=p4bwu$e}87 z5iIEM+0iiw-m2P0ubpN}6W67TYo0pB_23N5;Yn6eB!ZeA|2$j%djI>!2;PC&u`Fo& zoNZCWBpecxe;o}e1mB^aYX)5n@$oW!Rwlfo$9ol`ZZ*p3^>xQ9qpSmF> zxB{+ld?3?jCBYx{*zK=P(oBvHR=3g^n66wct~a5kQ}u5y=5diR?!B&06`c!yGvcW; z(CXcQ)(<^6P3Wxz!ymy122p5+R9|jmh*iJ3!TND@Os$HHz?^AoEMKI&jWXc>b&|2X z|NXsgpz!1SY7b9uw(o7#R*DPg&J=2EzVK{L=e;A+=^y?YKa}U$FuA*z_o*Y=wMFIO z{9}!9HCtIJ)hh9sqp&$hQ#WK`bvOu(H0}7qB5br4foF@$i}==d+uhOyI5;k%Lh*OO zop0UYW9M>)d7Aw@D%B|Apd*_zO3>BHXtNC&k)rT}A|U&kk9LC%;A|ZXR56our)%3# z_QMH#0l@FNBb`^^NhZ8FWD0vPgBh_iC$OThmKgzSWFV26DH_y;ma+LIKwxJOUG2U< z09faCF*@+0Vm4t11)g+8ONC%@0`O|-nyH?7k%pV%()NJf&+GP~WBv*6>SbmUH1m1> zL9oJYJTi$s)^Y&l13tLG0K(&LYo|oR&Wy1>>Gkd~!CT>+1wjfMR^Nb5aQVD#?RLxJ z?OYss-uj?AT7=wlTs}gI<0>TdCJknYGkhdWmDh!)#$U+i_Q`|eYW}>8l(`)g)zEYx zwb8z>Taxz7BEwt;dZ`*8+vf}c3vcZu~oTj;P$}!8ErduH&{pY$-O-E;wp@r++CLr3EzDO*LKbQF`5kI#{J=o?v zhia9jXhhZJ$7HTLDV;-$4$|iWu~qO_wzxi0lw_PL4{*Q*l4>aum0@ff&Exv>8S~)X zHjMXpv`ooP?St}avg|=c5j1VLEODhN*HX6$d+m%7-H#BHD#S0DB`{74%)T{hIW$5g zY7?^KKBuM2Snr*x}_T2hC+z~J1 z*bAF~$Ks(Hj6#lK!iw>z zYbb=Er~xFhEnt{Mx){xrtA4?>7O9#rC-Co2 zwOWXcN2K__H%6wVY_R_d18&zU?5rVfEDtPuA%Ewa@xfqd<)gZ0MNQGWF3GL#sC0Lg z#IJTr$i_14|J)pHL$fZVp8LRsjzqJcIRlA6%C_=K03vYgP^J3_>=00X0$1IR>*{xk zy##?HN%FliJ7;H4aj0Mo3edaUK1_uQ8(`%T!lM?WRD48B~VZO8DRi0agZ!}lk>?Ly%;sQ zq{y6Ap8RbXsA_%>(-bc>7tXE&_1Gb9`u(yvw`GIUpxm!a6kuWEB8`TCF3WbzF15q4 zRoaOm*T;~mU% zgyl;>Krl*_Pmz7lN?i0FHx&1wT^x?VU9agswU|w<{w0a`MAgVcrNs1G5^zB6E+#sZ z%g!RSmaQwKdpR*I>=)Skt0y>bvO7G~F(HI28{u5e$|^2u$&yJ*_@y7g*o3PPmOhr8 zJ=A;GyiTYB*;Qh(+hb2duxV?otXYEXtgAcS-TLW#CS5$Z z+_e>T24E9hu(iKQ2srRNMVpv1x0mOe?Q6~N`A%$Y7-gudajF>;$aSevwXwR~KYMEU z_)Q((7r#t_f_AF@GWxT}OcTvwTez_dcetamjd%i-M+$HmUV*l5O%s)mg$rLh&(|C6JRsSa#R!sFAr3;r`7YC!=Hc0F z@nankU#{8T*?sL5cy|yMcEQuv78mAr?rD#LMn!0KOxXP_wociE`Z$L3NgNgdi%q!Y zN-Pg(i}N4TfX&Uv>%A_sBX1Ot-0%JBa~n@UN%yJ-hk;(=621jviR783L?QBSwhVRj zpyA0nHfq|pb7j}}osJrv2ZL#8&I*d)V?W;R*CXjE2+T_qnh%BxU?<)i_@zvpR6Nu3PLO)r8OjMn3}ODz{?b3m__ zcKS|^26Q9>npIT&?;n4Eahxz^%macV0Gb2@3L>D<95WUILYu;I!|e4r^sdyZRI3)Y z9J7s4@jm?^W)%J7 zO7@-M2@=h|t}tKN_+-M3Nt`aWWjJW>1(a4+gIEn#cKbRBv0M4bE#nE0vW)f*5N{}! zlM+R69UQp_Fq;IgudaB+Tw&rc9OoWio83Kgbi&q1i8jQFB%;KN<;G@6AchMJ5KQlp z#0>+ob-vt>FP{!tgo+Fk83V!_3#G%#tqJCv9Zqem>oe`nH`9$8lcXUnq^;8BnHQniE;sFlwmH zlQOTMNm@6tldgYLI3AK0Q~S`jx%NiTAdC0bGoTCjw^HL7GNQ}>*a<8|PwLm7F0WEM z2KD+Bmyc^}oiW`R$SY@L)a`XrL=ZskDe^<02=}U{45=l~M+ON7CgQu%zkj{Hoi#@I zID#1392fN8>*-lp85EEd^$s~SItD$G4-sgJ)#93kgi=T6)gd?e>PU9%QA#B*8kaA% zx(Xt4A%*<1j?LHhwYXJWjC)9V`=)P~vo&|l9Nsow=4)ttj=G)4{>DL|@3o!R50-Di zg~fyYXu0=&Z{2G;rx~xapdFt}A{^|)Ghvb?$QRF;V+jRL8UgUoM-yX_ZCA$MjO?_= z-0})&yVnm9TJAB}kCsRPN8pC;*x@sBUIm|I$EB^Cex(G>sy z#lH(21~%5lW+plurna{K88-fL!v1IdOW3&3I(JxSYx>^m2FizzO8CVl;0v%zwk1AS z;KW|r?&fHHe1!{_#e^Nc5T9sZTsgYz-f%Nas&b6}Gk z0HS%)5nBIn3hcVW1Mur_YWV!uJUISVw>u6mfXJxAU;@peEPlaiKsT<>y|7WTidQC( z#xL4vx`-FE>kgU_v5=5#Uawy-fpB#lJ|`Y{+#lKO)!U;EJUcP_3rZwT@GBo;X3k^a zZ5Z~Y=f~B|qmp7Gvc>^=Y!ZvTM!D|Dd+s;BxH(xCcNDux9a%E?KCa7LKe#ONeIf~L z1Zou#^F42rEcg(f8%7zc_%P)425Qbdug`|(z4q&}I_5$J$yqzChn^%)d)G^WOm-O~ zCVBNR>R5~YweZCnGm2WR-&s#{6)qWJ+wk;|(eWI(TB2T*#2yK-u_YIShrq+}2H+U@BNV2#&NNEVKR#%brnRwz49C@153U1=c67O>i2 znYZx`*I}cybt*1}V@+gyW*$^j1=U4)Ki8;w9#m70MpM<{i;gUq)Dn3_*oVr+l_V6V zvaz3GQ~O_T`rm)uVFy})>Pgq+PHY5sZE?$jEkXg!X~81QdovdVf0YI~%S*0^(^e#? z=PajI`D05N*r}fx!gjP;Ugp5F_jog54N&Sx%VbvL@>K9}wq9Xd99QI%k*R4gnFX}A zjTF|mD9SqVAlrcblZ^_g}O63`&B-n_4aNqV_;7 zR!HQ=Jn@@(jXKV0+N+yo2+!k?pJf=k;FF9rFv^z1N0I??$K4d!P{ml274KjySwlYU28YMf&{Lf?Ju*5;MK+yC*Xks;xK|u9jz3&F zvam=ilFTE81&__4@?vJ=RXyw8ZMebc&Mel^w_F#$#91; zb@mDAe-%!7XhGNSYio)?LWlyGx3Wx;n4*v5ddcYYwmT^=^=idv^f&era|K)LhJ@-G zHs$xQF3~zTvLcMb86lB)PwfNCk_1vX4?L9=@Eo4hwCol=D6%;;8DjGLjs&{144B6f zN*B9r9&Ue_HNFheIe-LBsIP=Tf6D_3(nVXST)0?&L1HLExR0k$_gm{$f1-0@bBCG*RjG$UV7*7= zzi2`9q9UoVz78u-0)s{->0aUE4n4iio++r?-*Vr+I&MsJpd&C8)BAZ;K;ie6i4+7Z z9LJ?~RzP;3(a{-~=}NE~3An$rNc_iR1_52&X82b4fMjW)D{Yv6@AWmhdy8`?K>P?GT+kQi%4 z6#zGR?z~`LwA>=Zl1ffd+)8wnbd}sgPI2lS!`CloW0%CanZKhoH;s-YP}{6?=i>4` z%ktoRY*t5_GTJtrrcR!TB%ks8I|VIn2HNTjT$tl+l;XH;DXqH_v>5N@C5SvaF4=Oc+hIHigXxTg41u zE`vMX7zG4u4<2J87o#zE7IP@yOz{fpPF=Q7{bS*!+l-MWK5~13#63Y%jJH^eNL2f# zcK?AtR^$^;4tvwxUE06M=bDt0`psx7b#2g&omP&X&%{wH)Bqli%+w4%x-d*i3<&Zr zff!>PVMW7XpwvP|AjEgd2@rS}et>JJ%qdp7IhmhclxXvE@i5~Zv_$nW&p@Ir`=MxC z*1{G*#3Zn}iTr3#Xhge^I0X76@lROqzpW8MU7z~5b-tQVBs`RA?q`KwYG~6c;&R`) z0r4Lfi)mDzfz@$`n{S-=HIPk%q+W;0NGn1Gv5?9d$#QoV?zzJVw;|N8eclfb)mQG= zhm;TJ)b`7=M6W^ne!;ozUIurNLEP(^wwSQ=`?nDasH*CUi?`MhXl; zMiDNln)*}!>15deUkU%wZbn4eN1lMCJ=6C%7BpBBibS*o66FpQ zLUbqe2Vyog{Y_~e)26ePCCu01`FPQPen?oiM2~6J{X#)WD`1y2e2D4_Bk?7-E;n8; zu>VVi*p;3@j4SK+DI3{bQ0zRCdlo(w?i-jsA_F|qfd^pm8a(3mj#FH~hAcVX*TNrg>X!?e-+oxR+RoYc;t{#f%F}8BR4hbH z^DBc$A+(ps9D)PvKn@wcjxZUSPIPcP@qB77R-YbHOK~n5k@Vz1AiQ+k{Y<} zVkg&1kmC=*c8H8Q=c1}Dz{F#)qtMC*-gHkeYBTPi-4hPES4{2{`@EwXI|7m*NrcJ zTA;wfMO(rUgmYcynU43h%-o zDP@y??w?jqW2kYa)U<@0OU(WRw2Q)SL7BH0tJ+I|!h6XQA^m~ILB}A@pgy(Y5b)yg zYUVXQfn$a>Zqs%RZwsH-8J0r8Ajy$s&|fhT)iW8jUgil|vOkyx=`HZiw>Nj%^YY6Q2 zbwyJ4V;0P@4Wtl^^aDbVfYB{PxLoJ!WOaHy6@gkhml?yPSMgj=DI-tzin<09!M`a_ zV({^k=>lONaw=f#+X5@yAHA;Et5h!q!@#)2nmH4ktocDT9q`Mc@=GuT3A^#K(4YV@ zO4UGCwg#*T`|EVP%?cdhv$IM)A}-b9N-FUD2DjchJ9n?_-+7vtdl+|KU0=W>Ra?_Z z@w|a*ePT7h!LlqE1|3q516URBkcKIbD@vH3Pqyi%OT}s^_0a9|G{aR@!%fj3 zLG@%$;H@bIu20xH&+c)agO&g>3RS>E7{i2w(1UQZs<=YG-WF{H zsYcRNJGzR9W!qCdBHR7c_Y$CZ)J?gO=fbYsvOfQ8_OhsI{CqFA%2|^ev%>UHxhSbP%qr_#vpJ8PCR_S?k`a5ccQ4EPwPkJ3 zIv=@QAyRzui%0qc=wbYsNby&9?W(4La=}nOwzNFydeXUH7rCccq)V{zi<@MZP7KT zLh7dh{ow;z*V!xSpII?I>OO4qS_b8UH*tKc%Uj&c=>dg;esa)zBPQN^<{I< zTekVJ>=wcxSsFT?mg`~AWj%MCsWNNIHFqojTIq&5V%i+%2jywa5QjjSPio}vY7N_9 zYO~7y9d4OcQV8|QtOBtp--28$k#RC%Z+qfIDC@{|-rK6n)H4z4YZu6v5IO6M-M!`u zJ<7Iyu5*vlMOM1Dhm<=_Qk`CbxHfuS@!^bXn7^)OAPsBCunapBa|_B||oaUN7ZFgHGzfR{W) zR{{nx5<<2F!2^q`#d5Q?bE>|9k6wOizaF5<`v_!GkSctBwgbmU?2*ZypB6z(Vsuot|grSL7rR3suOd!a@^19ij+({(_GQB&sFU63c^Z(FNVTX1I3glv^4-_PdP!oxLVw}kFUQ7wgXpOs7h+#UZEE6 z9E6yF@2JTe_TZKt$~1*zU2s6IctE(84UyJuWNKZ$p_T8p_(bKN%Y503MX~Bu%()NG zo7k0t!!|B<8ibAWWjk-ch#L^d#&@SmrqH+hQtsD_I8s%{S>8)|SmOHk%jMp$R?fq3 z>}pQ#axCVWCi#>C2T!?8av4?nRa`f{;7{P7mh9=L+)(rI3>XG4oEze9jYT)EGJ~3d z}=5fZI$?hwF(_k5+0&VclEl(q^lHDrM z&JPkCPi>SAE9(fW<>9QsUmBJ1DVczsKxZb2bm}zCpgntKs?Q{=e_91x$sl9xg|B1= z?~*l$avrqd9Gd0hMlXx1IcbhC6&$wNhLE%fAz+tW2240}eWReSWj3+nN>Z;b*8bJi zeZ;z+hC5H(uruib!w#OfxVxN(v&67Z*6K=LCGuCWGCk4Wm8fjFvy_SSiowV(x1H?N zYHJipI}!IfDbG9@A|LY?8$Db>qo|Mh)%bIC(nz13##OmA%n2rr4y$z&B=ve;xiXes zhj+))w-_1FuabzHmV~4S#vo77)U%8fE|qK4&jEsUpU}vn%6+9M@I@9wN%WK@<_J(RDl0lZEg$~YgL<{Q6#wGQO@n|L+2+38KTm*IhgP>71oL;5fd@aE><_rfROSgA%9z2>Hi$#3?i z_`{Q08A}}w%jkC6g+(!&i=pJ~1(Ws`x|;`N7o)@)DoM%XAU1Z8#b?kw(Nt`9sehSJ zs4-b<>9}|zD{d;%LY3QvBOugT2y~ww#Xp-I$T;LGmz@qoBxUuoPkUYnp4_&SHWGe1 zSC@JF5)SOdA`!``8#%UpnMP40$u8#k#&45_kdF)-eIdq?Sa^!WjgbS8yvho0-6(hu z#;AB#fWvuDe_Q35QQOv2B{Zbp#vhVpJ^e%oYWe?otUx0;kiW{GB94yEHCEuBS91n< zc(FFM>=>%Y5b@%Wsa#I_iOIR)p}R1G9Z{;vhHR2`TA`uQs?aM9Ulr)l$R<&R+=gJf zDC)5mCpR64>Joh4zxmgd~z4#H$th2_V65U$%Tuz4wOMSDLk(ms} z6A$c_5)kad9(wqai zSYTxT40NOkipkRYW8qQPAM;gkDjm&8YvWy=ani&^`|mS@cnj+9-Us6fMe<)OU)?X; z-|3#xS#9s1*bxjp#FE3UZ{JTnLzw}H6WW#kwAx{q|*=v_Vw$!>mO70bIsGH4EuR z(2poZTfl{ApxE1o2bH`6oINzCygkq=Ky{W>LcTrdWN|xgPXk?L9_|HDrBzbWfB`9e zkaZk&nz_upWetSDDA_XaFv&sG7B(;PFG=5JhQFj>h`iMmtWsH(6?S95F0%f7|C`$ zLc4b}%?T^cmfO&Re9p)!!oXLpks)j`Ak}ZU8O?TXbO&@jkuU0?{ej)*PTx*(%P$r( z@H(*Vll~WZ#4_OSxF=3I%YIwhIp}oFnz(GUITV`Kt!Jy+4k_p>QY#zx@qhr@6X0?? zVTKrYaoDgp>k%<%_cG9T=DQl;Hn<&5H&0Q5Q#v5jc^Vg3K~-{=d`99k{d;~l{B(I> z2@h(9D3m7}KAS~zOyw~}+F?)gjfMQfEN$3u^O08cX*pa0HRAsYE z+d9@;TIy$g)(Kh_@tsH!-z~qG8=1!!*caNVlBsq`lvYIbCqzPYZM9Mspp$9NznGRD zD4;GbNcV!C-D@9*&9Pi%=8FKMS{Pulyl{_*ZjpU-;l0qf1QJPZo+exIIsEn+o6Ar> z)>FZXbS!E2dkz?Jn$2$9sW-f$0tWq^iUdrs9E${k%x-?=P=Y88|MvQdzOh7Li!uqY z#heZnaBxMtW3a=;v-9A10H(J^%B~G0<@H37bJf>dhE&zekxVp?d!)8#@?AGRMxx$> zekeO{(JHQkb9VBTZ{$yhHExo{xD~Q^ntvpxTJ+8*RWcDi3NvH1oQqu6z9r&L075>c zK#x|7nO_CbdAz$bEnBE-l&eDO(6=U39eG&9BRjJLyo0exWgca4m?~JML}3iph2%3i zCKdTC!scR6Ol~vck)>*OjuSB{39*t95Rtn|wBmsP+n!|lRHE+KjoV7EWzva+K{g00 zSatA*x99N?77#-fvTth((7M}UB!M4O3k=^qxPRuhS+UFlfORe5_A^9zgFJ4+_!W&D z$oS0TauDT80TT0BP)2 z;cjhl7RX}W8?ja%xjP`dEy2j)yI=(W57=AIAr?C}R%tTTeR6V%HL$H|%u|R`{Eb?! zBT?ikVei#%277E#|2PeJNH%p5YtGnpxc#Swpm3#agWb^7XLQk5#8n1`FDG6^hPQu# zlS6?k9oqu|06hEv%Kxp^wgKuVWQeZ%Pl- zj0S15G7?iP0z!dQu-_My_7~|(#Er!3xs=`BGElV0iD6bY9$`q?4p+%B)_eQLYI)!@ zq7zpUREv>xy^4vwVBLQr*P5Uv7V6|153~(9 zw$MU=>Fdk|*#$~+5F zYO$WaUhH`~rwtw?&%@3_X$VpoQj!>o(5~*1D<(Qx>(}}HN+ZV7wZgZeO!vH+G`mTv z2{eLxL+$Fmp-EBLrU%ID<$#KDWu(coWq6>(k0wvNWq1&Zq^h*^FaJdk+J9N7){8{5 z$W|-)SvNl4o?dU0O)qOucV0&fNm-Fo=n9hg7IkgSNJc;HJfR6q!GTdEviNk7Atxt2 ze{U^;(`aBmJ?oD}QXybYI!nlc)=*HGp6#5tgGzeSEO*CCV_5a# z9`nFc<7rP$rFjEV{sC?_lt0m^#=e?SJK!@F~!sd_TIjUBbkXO_6rMWtk`&@GuMYOo1o3T47#Ucs1VT`mXVoE zjqoxD>Qg40^K!mF++Mo58l#ZPWssC2B{2WZ>P+Fqx_9(qMjr#PP|~b`=43=SO4U+b zdVG95S;H=T-LSV>ul;iUz5><=CFM+(0A|#~vi%Y)?2ap>VCoa@{H8N1SddGh(K0@j zxSeg=Ib!3O#}px+UZA5#0@_U#%=CHFmBGgxay94^vHZ=;n2a;s7i6X>0a~w0wxfhy zIie{wp(2~DY>X=e+AGy--hiReymV$DUu!rBTFfp=r+-PPMq5aMxm3?-z?@Q`W+pBJ-XAbcqWFH2;_%&&m$Si)~ z%(6a6%Jr~`b3ctiB5lCZ^a9MliZ(jeH9+nyB-Py~Fm7Br=fH5)G_VfDE=TPp zvAF>vqQ9jWfuLX;auV8ue4V=3T6JMLxQfkqMDr`_xNa4Y8*d3djb$Edw`C4XU)ebi8?kbn*G$ zu$xb0M=Fq{4QP;;Kd4``8Wa-s=k*?zhGYSTHGnzl5X=6SEU3(uV;PmhW-}g!+1l|S zbg>kDZ19Cg$|r(JkgZF?#vSn+!OKVC=5^8sb!4yf#vx6a~l|UmF#Uw3?xP@CQIZ%ViZs!0u;9<^Z_97=<9r9P+-NLfKI${ zC$ROpRB@&I!eJGrYURaNyvpBoDyICi@g*9dz`W--7>%XpNb8V7G!(^%dK|Vq2XbQw zr&`m!5RlUis3X6A+jLHNI(fULqGwG3l%G|!waPD%CgjCW zIly5HrJexil2J^Md{}h~p7S19bAKKYtKpj!1B{T|YvE{o5yqxCF$NZ4dPDDYRJ}$zc zdJPK8SQou*y#>2-YdU@zAbI)(LTAgg+`uE!ExYJv2La~$53E3nUmzg9kHBHryM7R8 zh6J7)$S5Kfzus94NS4hxz`C+|isooeHh5e8E*yWOJ3MoJhkLZgftSNsvm1fjBNB{! zS=a@#gHMEs5IR#DbZ_>2*_y`GYzIza_r&uwCL;MfWU32sv0>qVAYT+YI7u< zc2DPG;Z3CEO$MCSGm={*amRvp?^B#4tlsr0g-fLL)Tt(;sazl?Xw#-shR#_TUT-h& z0GVn^QOv>f-20#qduDVMb9ZM3K;vbpusr_A(Y^l39y~kB;i=OX#VU*p`wODfd#(KR8y5TPxMpzf0v;@H`hs~t;YlK@F{6y#^;{<1^nJ>>$_u;x8u z80dH~Vdqfv5B;G*c)E%;0J@PS5rH;nLgJ)Nm|;ArI(v%Km2VuFTv2CB@mM7j1zD*^ zeC1lvv%l*GS56(x4sG4EOGp2xD*xi5w~8@_#0I_8XM_EovZD$*U{~=mv#xJNB`!P= ztfZhd(#ya^Zy8Yci&uy~E+nnbuzTciPAgJgX{Fsv^~V}dtiPRH4*H~9c!{UY2|Ib?kC&^71pC{ z-CuW4G0oZ6!{dLW1HxL7Rt6`AkQX2D>B&b`Qp=BlpM#90ElhMYUus7$8xNj75^C1p z%P3*P_+7Q7^p#FT2zMA@C;*5C=#(&{E~U)2v01;pzrXf7TU(Xw890}bLTZt@=SF5m z_&B3JsuM{Dx%1l{@~s#3+aW1XzJ#KMf@_9>cR+ihct#BT0l|K^yqk}KT^_~JLoL!I z+b}WTuhcxqCrut(=47M5+1M;RF_c9dU5P%^;qmCi{~;q2=&X}MO^3)({uty7nBKZ`s}J~tMV3h=*zNq=rT<%Nf3+#|WX7;F|^;p7quM1e)O7%z#|0qS{U+Rj4%XT1a&O8``WpM z&r8aBGIhXx_5<@Y@7=6wWTse1=Os68Kd@ zj-Eu%mdzF-ZFQKan@Q`3HG^cNwHFBKFIr(c(>wei2#srR1j7$ zv~;Fxm11^>9yh9#);sk*l+RIIM&*v_UP)9&H~q=)l#zL5jFgUnic3?U&O|ph#G8q$ zdYeEx?L?F`S8_^U>kjWsgCgqiw6Nb%4ZLmRsBT z`g*$toqfPJO z|C&|)0qOl8m4jqLJ{v;Ub#)HM1-J8X2kgY!mPBE^BwIq|+NOkkULc93QLQllgzMco zG2yx|enqd0{Robx(d^mMa^+WBP)dgmt->YZF{qxSyHV5xHLSu2Lhk+PV)8WK7O0AP zFQ5p45sGXzMY}tn2djYPBloZ(@>)ZS4ys`pJ;(GF?EdMg*~3AkDlfa`d_&~6_ty<1 z-3`(PA{DGag@yhXj}g3XSOg4z#Q{DBh-Tglp@wlqfoTI(Y!_&;M!xOAiT&t13WV#g zA{QOr(|VOOw$&1X3{w#4NB?8e1I!(qW0r7;aH1*;9mvfwM`+O!&Mj8{( zG83Z=BvnkSltQ30O9N?)edK)7GUJF>(BL`HFu}^giA~7KjDa`jEhKt_jOBSe0U7>` z@EIInd^LjLs-O%KNL<}txi)URzL0hPjQ-9$F_XCH2TgWB#lMW&nrK=ZbYR&iK;XVI z7QILP9xB{brx7V2N#`mvQ`MOXo}ce_2Y$>{qO?lH2+NZ02 zgw$fS%So8Fh94n_>h~~NBY;3XEdCxR&DCufVTv0TMo@UR)L14!1`_|vzkHzn86{2| z$HA$ik!V1p@GvzOW%Y%%4#G=c$b+HUlmJ5J=n2qQ%M2&93?n%HxKGeKI+K`n02J~v zTBrvVPUL;`g4l0`icr@!by6RtYSeTizlb+5w4$M@}b@=Fw|liN*j*m?#Eodny3`dzAZaf*5qoCMNbv}z6bNwMfZ zqE|B!lAR;wQYB5dAXp_IEE>3ze~00$ldnQ%3X+<)J9tMBFLPOum3>L^c|UW$eY_9j z=h4IS@qFB!_iG%6DkI;qsv2MC{hrfr^K$ocm=|edYrs3OpvEKC1GBHG7%pzyph{$@ zl%hN~npuKhtB)6popL5t2vUW@I#>s^he?4tO+8ew5^h#Ww|CnpXBN=h&Oi$O)`)XF zCvr>0I%P92F!A`Df*}9<%Wyp!KP~HekPt$OSxR#~B9rl<_7E)W*(R|~O!SXRYrbq|~Ar%^J75Tem z$m*Kq$FTjRzaNzV!|cr{>|-G^PfOH~xwe%~U@;*q_vy9Yg6+d^X|?kcDY*zayKkBS+o!S zSU18QUi}c$9DCJ(<`iqIS5A+$)_HfVKl!<`P-2bRT@24wxBfmBi9P_YKF2ab9B8}X z1vg%2o+DI%R}qK!UA|+nfm|5%tv!32Ak4iD8DfldZEJ`4T6%t22A~|?@ROGC38>Jj zI!ZrEdq17o{8wi9XV%D4I}K&!2MX zn$0=~!are+qR-dCx`aRdDFRO5p7sDakw2pf`{fhiu1Qi#rw_c=Fp9qr5%*#RFTbP z?&pUGt0T+f_huys4^?ZMMjDX`303LWMW?H)t5cZkrRio8jAW-e;O}BrBoh`T(m1jcC(3cx63=P-IQ;wZzVdWSY{tkBpmU9afi#V;eoHZ}i16h$>Kf!HZb&rdkerLh? zYt8;8KrEX{q03QCyirOsZv#0NBWuP6ogH#h< z7)2eIN7dGsIM|(=xls>rv5pmqCe|C#Q-i&appal;PSJiJT~A5o)xehE=ndQpR7fydXEeP!q`T#DUq7 zBE{R`)!n^}%`CC|YKSgPpKNM;R1#eRJFiyKh88vV*L@kRKu6tn@kq!-H|%q=@^m>p zVr=QlQ)s!GH3?myrq3c{;VIjZ(p4L6Q9o5Sb9}cb%f)P0`doItx1DQe1H=#JK{uX! zWbsfR3^5;hLDuQH_Dvh$&%74Q%616eqE&o>3Qn;Kfe-$guivmJ1hHU}S+L(ZMPb~p z;FG%F*FO{3mr9^LGUB=#`O*h8qbO~Q+QbC7qzu)YCRlOITP;LBH|2o zqN6!_?QBG89(tcgJ2%)(mR|{amxSLc3cpKa!%S~ygd@br*Ek0|e!Np)3@A%tc2<5v zPU1{sw4=|y<7;ojHN1`bc5M`UNR5$;GGE@3SZ3^C4L3oULMJAbdV}_!rw) zx(_P8n~XidJ|Qw~YGGN`77kcxXB8!Mi@U*fJ&DnBT-agvkqD)kxp8Jg{Io;$Fn1-P zm>19c}3<9m#3u-8w6f^x9LVBv|`!e8zGiq{4BVY}t0Y0}ZeVV)AaQEIl zVpI7vEh8!9V{gA9I+iphX%_`Kb_tTVsAIZ*j@rY9euv*(i|3c;J&vN5g>yUl#&LnD zx_cqm+XdR!N3gek8ULWdeOPEO5=I(M*qN)>`INyK`$^A0jdP)4QKU?nL*ykUK$l|c za*>ueIHoGV_reg^^u2(M`IWY~ZeAlIq&+h8qHr{`$tt-4?fZ9E4_5z0XQCr~e?kNY z0Ki}a0AT)i4V(X|GdY>*=r|ZS|4^!pe_+)P|Jj-Ue+AL>&7ZCfLeKWQ3WB>h7fVu! z4QO;ko=|OwbsDJ&3M#8K8u2N8;N~IcKXzTIUSmhe5`i&@kG9(tMgNxS2 zxUggKs*I|8_VLtlEnU5{0^_Vm@6TuUHlNp#3xobLlafD&Dai76!79Ebh|v@W%Y8P} z6qQlXP`zAMl)`NKUqKDb;@KaR3QOS~nVxAD*y-c)^x6(8;pZVOkUr61B^ynh9bT{j zW-w{?Mvxx2j9cjs>P%~DiQU;+dNu=a>rZuc^7CV3tFaqtIS3fOoi?V%76LC_xuq}} zQqiASE=MJQwC6`-Jul=fWx-DE)#a5O7Sr-m#7H8FC6h&Wt7&V&UxwDY8gUi?PL!l4G7>c$s#6o|@SmV*voXQXPDdJp%$p46Ymlvjra-`|7;_D^tH)v{(vc$PAt>MfV zAge9(pEka+7>|yb9!9#s1&EV@TB~?jn%Gh^{WXVv^kbK(l#s7qc#};NA8jYXbaJJ+0O& zdigkqOwGlUe8XElB(%9Z*0WGb+RSXz!qd!qNC{UGu6gt%=FrmvthJVlyNZ+cd$@K

eH8C4~St8AL|#-1MS0-SAvt$Q&?igM~2Vyo^G1h+(PF;SEU}@`H*H z-L7uO*5b{BU1n71HgJT$se}5ecXKwSTAU|Tvw^XZT5`I00$FF=-<2-MHF{@v&7Xl^ z=cQ|j*#NfVJkosMEZY#u`{=-A_!06gXi*`0;m=s(p746n=Gx{YHrB3G(bkpwnrjwBJYX4y5g;c;>itm0tXmBPsm)4{Q&D{U zoZj~6YuX00Z7_~0zf3RWi6H6Ftx!LL&7?Hu8wd38>tUDWU*`}g%&^*MNpXDO!aKE}+}W3$Guctqi?HsW3#^AUp7L%;aeG zJ$5;AeNkK2%h89^?q$5S3GR!kd5Ye(; zB(yb{R3>u-Cg?T;tsYiW51XteO;}*# z%Rc;)A(ZsQ0?M&bPtrS66}K&y%QcTdHPe7-&tT>qR|`(Ep)~^z0#Mfj#(1PKLSd)x zi^khJ%+_OVwAq{0iNY=*luhvhsx>D8hcC_je7h@S`0&)I@t4ahzYFD`fy$%;lDtB9 zXLasww9mNh4@-rD`i0OOR)n;L(j~?OH!xd zf|qDY!xn#JWhFvroI++92|N#$LK`NTW#`IBnuf{jX8hbGX*9s@i#1$mNxNeZ4l?56 z*r(eBemq3{&p{-^G1;%@Kw|3{wx zvj+cfND2QWqHbHQssGj_`wv2PWepC*bUd=Nj>u(W%&|EpTs${PXtk_mC>8$#&vSM7 z{>j!Fg(OTRTroLerD%ZG09p9GJq->AKYg~N7S1+NOcPCMd;L0pWsI3~vPk|hA7;X$ z+UVcd6f`EL$64mCr|cTPviy2JEccGt+R|8~yf3Q1?n|Y0Z?#ocj>md>;_&%yeTTa| z96G`P{Jr{mxp>#qTxs-3G!Tk!WRD+z(@)49t*0WETP65rTdD=AU7dMzkC&#ecau%e zY8|-j)vgb79|MZYYWHX?lGn11_7E9%&j zvnHiJ9nYTmeiYKQDYD*Qx}iYbd^)~+z~i#AB}$hn8cdYc(JdvaTYAyx*V=e|I+9Mf z>IR#3s=j+Xc3nhfj8}U{8ci3McXZdww>}RYSvn=@>J)$VOrlgYIzIAxuq8z;5@qZ} z(=_A0;=C1a-V00KdA{rv`hz@uL|*@3b9K-hA6I%D=9zRfv?M}qXYf76DOFg1NRp}? zq*!Bn%ru2?OT2t`LqBHAEWO?i-+{hYr5J1~ZrGSi!TkxbmRbpZ^-U=*P34;k8;<>D z&MB}jjT+H>y^XX+3ff>W)VE{2au%Dfymij)ICkuM$nA)Tt<_brvy3c{JuNtM@hg(mB9C3&Kkx1H7t!|HTLt~S7$yTj|TkB6;Q{;4g| z)4tc6Z)hy3t(WSZq}B4OqG)M3DQktk^aH^Kdo8~*c6=LlVNvSq%H4N3&D0b1!A#RNyU|&`f)&)v-oOh{ULvh3B3+I}pN?cef zTnokHRcTyF6_UufXwA9f=oM8BN2yf;TdMu-+R7_FKeZ zCmxq`ZER9&G_f~Ho)g;MN<}qWCUmBe9G?*Nc1=^dJs`qYuuMD9n4gth*3B1cPdHDK zign0M6i;k!a?CQ$&S6^zQ$0L)Dx>0k)3%A$qv&jI1VehrXH1hSUg`AS@+3@Wb`bXZ z8W-0OR}5Hjw**yLAB=X=qK!{D^kk^DZtrFurlZ{J1UC+K|88q-d9+WMfRMI9P!gkr zfQ+hR135?s=Z}wKNJ^%5qP{#SN7S}O3Ukg)R=zJqJxxqpt0jh%1fSkr6_@9k(huq> zWzadQ)uR{;IMFnj?^V4TV63vqQRgEh0yyGnnIy+^nnEB~CzFX*nr6k)KRcFPJkC}{ z`Q_o_bz|n>ck^uTJyOzI=`@N6H0ep2}z)g$bu9$@jDKJdT)benN~H=4{D_1y zK^qRqgC;_+{=4J<3j!66I1o-*9D#40oTSbLR2>kCt)H^5N1@LQ`o{Qt4pXl^h7R-w z1Hlg?1#s8^(NB0w0DvVqQ1CZs%2G6Dcu+m0d_)gIpBd1&NuocG#2+7T9KMiManP|Q zkCN2d+N>y2=6U+hPly+uJv?xbqa4C3`?gSeLa0JH1#klb#VU}YMf)NI6!;4I?Zz}u z(xC3|^LCT=75eS_AkXVIaM%gndYsqG?GRNSh6P8PN^?44=8_twipLWpy>A>Z*~*F~ zj;R|dLR0wxmTg_EwzAF!SAv4SY;v*!tIU#w%9niEZrmYLqDVMF+@qD1tB+jbJxNOe zUsEnhYbM&pth6UBtzG4~lG9#m7nIxC9}y$!9(OI2j=JY7zEY3pxzjxj$<(#$#N(yL zRHdl&fX@{*-8nZI$i7oKEryjL91JWYJT9<=h=>Cs)&^uSVE>%`T>rlGpqbPB<`y~j z&Zp)18NA@_Kd|6Z@#oFn=1|$-Qtmo{>ew=ak~2HjgF%;U2{z`NdV`lyJU@fCQ`fPF z0z;ZD?PK>eCH%@U8Xl(68 z>+SwrR_|u1y@R|E%(zxGgeuX9!+@ru7|@`M!6PU(`gtb@_D`qJ=WqMRXA1{)=+s69 zcnM50KWkh$F|Vg#0*_+u9-? z49bfJq3pr_hw8)qF9B=x;AUrIVs-FhXJX`h`1rQM80~-n{k{E`r4$Mm6}-<*xO|dgF{n)0F07_fG`y|8IPT>C8$SJnaCKBc0(?K z>zjt!ijJ0+UbhNBKLn@dT52ADO*TcBswEfCi(G$z_2@)xCsivxq=jL|%!mw%wTj!Rv{ovd9g-hQeYKd6n%H@JK?$?h8#zoLj_~+#*_)~y| zidO(8#d8rGDAf zO@;kw_I4NIYT^e{s)R&~H4*_SMqvV=aN5@F&tLMfcR7%`o|wZ{SizPT(=eg08I!TN zNp;CWum>DO5)2+1ULx`zCqg$8ZdY07vxzdNp}GEgGh)SMOMT|>M=1hbf*Jr=iaoHo zf+^XS1d7fxk~d;OMj)192~w57#UAi%*c&;&xxW}VwV=6$UTU+rwVI|YlE^hy5o;C% zGy(xhkp!lLCE-U3!C*pT%nxK`D_Y?tuO19&;OuV6HCUmD#R>B*L=uYXL8dnf%qSGb zxa=<4gRlDK;Ph=mtSshI=EKEfj-Nw^xhfIUSYF#lZA&ndsmrZDC6Ai2U{BJz6-D2@ zmclh$w7Jj~&J>*#O|s8ja0fr2CwZM`=ew^%E_|TMD=l^P_HimLV5Fl5+aQ`p>-gw` zqi6a1*OMhogxDb6Xp)(HWf>p_wg_!l)36xi3Kg{-Bj@Ky4_i!adkrC*75bqC(A~ec zzUM^)!G)V4@o-Equ|<$M2!;U8u%dil90?BdbvZ_&9k?`2>HgsOS(IX7mvZ#&gP zT$V*CoAs=X`bl{kDoaA}Hjn)x{?nL4xgnv^0Z6c@Bw;#1zc~O*lc!Fxoo~rdr~aT4 zFgc<1xJi=cc7C?07+dbjwmIjd>6BwXMR|KX2IeHma3^ahg8CSXgAbZFykE~>r||_j z@Uyrkz|%Mj#dW4ha@MHmYHq@`xxjmflAypyIG!mjz!YUXp1{uu@8|>}6mw7kbt(cu z4p2ToW%4q!uq-w154u-hPF+(i1V^n^fwfRUH?yhX6k4*M2-?Di?igoF6Eqoe1;rE> zdYfaFBy`qAChLywC&)ax_>_5rjTm0eE=B~c0#cH2O9aj%PJ5+_}h~oy7#15G;yEK89ySAb>F|)I*j9IgfyP>@wC(oDCFvM@?^zR);!J(MR zA%kKxHg-{v2+&bRhkit?R({AEGq7bu=`R$47meRnVdXnxKF=l&?YoF`XkH**G&wC; z|2X&Z@ns@j77<3Z1~7!NL9adG;l+_{2OyF_&!uO=tG^D8yqs@y0~@MVD_&wtJ8i&v z<8cT2Hn@M%sQOyF<_LLZj|6NKX>H}{#pB3|oKM4*N{Y!Ov5rvA04(n!p=W6g(1_Q^ zem%Z_+@DVWxppz9nT)H~nEdzA#&3$GW&v#j~@0tdf$EarQS zVtd4eFk%RyY~u`57_L&nQbfZ>U@nhJE`)Ugjq+yW$Hv0@a&q7LH|#E>+E)HxY&vO- zJ1Fbz{A1K}0b0tOo&nYgu*I@H;6dv$8bYz3QKZfbz~DGyAnlhMigVt04qiPSzqK8Z zJ4BsBIn^@7tNJh$WH|J=Gw@L7fscdj2<(nu!8FRADcZ2&*72oimesObvaSka8w4{& zKCGKtv48{;6&DOS9_iGXs2m?`O~4mu;QQ!u*zV#S>UKiAE339u=m^-FTObeIZD~qe z%5**V5CAxqcFXx^q*AF)D_Ev>Iq6*tMnBISYz4uOQ9G@c5I!?$w(&PO@HTo_TVvyH zjg9T*JcKGx5Ug9qMsVzQ>^DjhT~LjweWb`u7VQXa0A*oaWfDr6XDRiaogfv8g>JiUuvw(o ztz2*+NBnmsf)HV2ow2rENfx@2N7U$oGGz>iW-n>6a^W$msc2N+hN}qf&!#w)q?Y4Do(O z3SkjqODQt{ULI~QAD0d!XDx;E4(~x(iM(;cekkyj87UB^M946Z6)8v}kaOcB`9DFH zb9-Zwi%8y;YZEV}k0#$#lBnTzw9zmDD)b>_iq=?ms<%hxTIC%4S(w>YPN_>4dtNf9 zgEYfK_;M@(EJleq(m%`fGdCwqkc-lpYn;W-%P4t?EY%-J(SNZEqHRG0V1E=tEI~n< zJC@BL&bBToE4N=BN*|-aiD?z)v$3|&o%OWykq>bfJqs#@JbCT

*VqyptIB3cP3&8igLO-z?z)?3K?HU@>dLnVtlvulZ!hNu zQx?76?~At9uFD@^;s-g3X}J_g_=T{)H!u|>fT_TCvW$Ee!m(e z@>PGWz9%QRhbr-f5Y7UTONYwSV2I%D`5P1?6ER%5Jy#gM9xM*|YJIpK3!e>xG&G&y z4z8L%&VroaZt#1xo%ja7*XXZ4uX=l7+=6TSsN72<%~u2EUkj7vyuL| z=@!uzX%bGfHZN&X>eStY;7PH1L)c^=Oh-(816%@PiMK4!Z2L zytVuYiKI<4wM=#W+PJ!uxU!kVlN^5#qdqpSvC&*K6*umyYd_r1<;VNJu2tlhuCZ>q z%=Bn^)alw2q%*f3&~6vs`Ce*U#$t}vef#%%s|B4WO>-y z1l#8ulQbZ6NR0tl5q4Damjhf_Tod(qSwt`s+H3Rj_#Mut#TCU3ZzUm&P^TM@JVB)D7B zVyGz9^E#-nCS*V$Q)webL_hC@F%}k*5;1WQqJn|uJ*rV8DLktiL0zYb^#h&yzK4B57p~SDNKHN_s}!y5C+_(zYUyH>=vY)hex>Jmp4vz(mBOQy< zRxTqfkibYnsJ8Dox>@-X1^yHNecw5u=g0HX5$LMR=W^ggUEbqctJBIVS5;10Bc%0t zPaoOdLJ>@znNC8(nxJZt2_-sC<~Fxs9CvBW z<)e;Qxq90NNDWTSPWd2L%!(mAKW$>ZZoQFi24?%LAsP}gJDUV#ee zD*u-#R=0tKepF92!MN=#KO4*rxa%MwZ$&JNpnjKkNQ?TtJLaO@g%{Io?6g+U;$~Up z9!>A{mOYhG;?Ic&75kKO@~9|ja01OT6Jf+U3c`D!k*`Dbc^u<*rW--kv2MIIZK4Li zW4K=H*c?uO;ySs1L9;EubTAkzi?l}WziPtIM}@Z-Z<1{e)8YTfGeJ zZo@j{I#Nr^yA8H^8tI{B^2=JNc1Z==j$Mz7Q%%97O^x*O1ujwDh(;6H;<2d18>B#r zfX?w`iN6WP#T}K`N1p zgjG5mP9wEMBFnn7)<*%{H<_IhV116z?ia49>-ux$GGVPfO)zSZ;*q@#1d(O zf(#YKewYxQjz}Wso{kL(`Y^&(gC2hYXS^-3yG!A8GCIKYL_@P*7IK|p_nD+?$G$7M znw8>h%KoqaPRO*$PxwEVPQig7W$y;{5;5yw>1qzge**%oW-_6(G_Q^rFr zFihcKT3qVd$5louLiGcpb~6yyr1)(Xq0bsgscpk~PCCwArWy|K9Ei(B4HV0+s+qwy z2Naw^DD5Bu?$B^_Rxrd|T95y=32>(8lF$QNA%VWlmoYhMw)c_mpuN7^m%vc{?23#( z+oqc`o?{&!vzVqRApr>%dJ(a9tZ~k4Vn8b}tV(wfthh3TT$%3H4_M-8BcAO@PX5b& z99SBWID9NUf>@&6q`ZV`vR-9872-S>h|;q+;)8jv$D7k}mo3Iy1CzWOlR`*b8_g<_ zTA@rSEt$d+NHeYf;;6QdG`ej9*7%&|ygf$FjW19d*UXgc!N z3L@u2UiUXoznkh2&{6>tA-{Z^>zwnobTVVBe(m5Jm&|Z}lwc3iINHttZ*t)8Zmh37 znok8V_v3Q?pJ93^9WW0EAGt0_j{^lgoL2gtwt~tp#>f^JRg(wdCE)ORfjRBM12U$F741 zZu*f&JW6dM6gt`30X|2K>x3*?%{)cIq!y>B8cntFf7lujfTT5K|HbrD2T~)Yu#j{3 zU#p-Sb3rsxR)?;@1J*_o=`p-iF+RmGc&pOVax87OT+78w89J$Ngq`}vv^toleK5P( zq||lVy-f)=zAr6nhK##>TAR}|Io94JvDDJ16kO=U^E`M0XE?b6XH3dT5JO8U=KWu? zg%zxolSvd{bUsMLr&xPl2Ku}II{Vw61_5|HT3AS38wqTI8=dzA_4;S9VjSFzNpxI) z=yY1nsgs1j4Xq1PNtBPP7>h%YMMVz@pBg@^e8S`VxqSb%EV9QmiNwxb3TK!=NoY8f zMy3+MIl4R35)%@y~|63@J_t zVlf^2r>kWP^O{D#O^_Z)#}Xi&LrHH*JSIyb?6jwpvzMlCXN&VXxid5etlY+a8wB0E zWZ8rWxkMGKAFZsClHEo$}lm;Lu~QkKUDN@{)9{ur=!P(-bauRXF+dI}~P9?Zqi zV9>mhQeVXopzpZ!xWEipEzVEKx5!31-$JCTzoZoy?MGE%s}D(~3u%i_bUJb2_ zkAc+(t4umnn29ivosdkKMwKjNL)e~IqNh;Kuc~5jD*!_CUH#=e>nh{-s^EG{@6S_d z?&ad9ZxgKNh<`tnM_I$V0Y~PJ!ko#mnf@1bwO`jFUq4acjHk$R`b9il1hp$coNb1c z2%wW(zEcO|c-NWbw4uC?#voXElOs_H-PC?}2e!fSGr>aS)hP7fBMGVm$S-A%8KhLg zIdUk8WC!9xNVu=zGu0?6xwu#nQEbXX3 z#fbQBpo_YQmhH>2+B&VzQ+TYZal}od);0-Wr=BTsBz$)9sTB3|xv0PJS$mCeYbcPB zT6k{uQ~W$HUkKy)2)jJ+P3+v0nYJtX(S!X_BW~hWkVC{_CnKE_ogtA*Aw*Q8cqGl@ zv@y}xcCkYxT9UO+^ptG$)C0zmV+>+PsE)y}Is@ZWj?DCfLuR^}QD;u#k%6Btl2DWP zap-9nGG->cZJq`+3=43W`xHo-|o`P6ygJWl5^CS~f(Yj|?n`F_da3 zG)xf_biv{#>6t1^tFYZwccLSQab|vrm$&1ce9}{!CkqjYIo~h#x)C~Yamf-uqQs}E zIeXA+6()?K9WGg$XxXDxHw7|uI<`y2=qtQ{O<9PDd`=B^I(Et_SSo-| zc>f96P*shPiXokK|6~SRuMfI_eHP>1SI*`FVXFym_F9@>QNO$@+9uUvR0< zhm_Zo+NdYS)5jPD4DjEjf>}>!x`EhY7%peEfoY!`e{E`2@Q(fN!^KQYirUSZu%Vj+aldO`@*5=u z1{;QIT%T)93sp~TIDATnWx4>UEMgwqdD;E=RL_h_nn9S*)vc7*#yYDJC3sS1ajN{mPdhmFMiy^! zVQnDdZ6E)I1{KW5DA-xj1Epb2{M$3xDTJ^wG~vBKah>pmgk?DzCtE$HB4HVkA|!b9 zv=H9dLDFBdcLOZk69_AJb*HrnfxiY4A~q(pkugV;Gt?_V zc7ekGa+ey+GTFF4kRW-zKU;PVX^ZKB-GA!&vsBUZ+sYbush=AuOsT+ggQ?cRKNbkR zj596w!1$&|i`pU^Ev>Tdtp|ON)c4j`HEJMJu?m2zT}H!$U$-mZrgXALT)tR);uyJK zSJ~%5d^+4ZF8;IeluSwNYJ0MP9t2WXk^=7_Jp_*`SQFu%A{Jau=*W5sW3PXJe1ffJ z+To3LUzZIXzR6Z-qBgsMp7C#~!?=9t4|kP<1)(X~t|syM{dOv=P+u8nLfSbo)Dq?rg#xbn{*UZ%YAp zq)59^G<1n{uRnKu-)~qPYkxDSqA5vk_4AdDwbdV-o&5El1Qy@W zDz*eDqv7;%{}DK@{|KC_Asg#h0Oe*AjH9F}^=*ub?r# zT+F`J@NFeIdzbcJ#ND|ujpzt`>U(ri?^w{M?kVfXyku1!)w*?G>AF*7^%AYDAmhX> zZ2es<2B@^XRglZ1QprL*Al|wVOPsBEtji4Vxei4e{}Ei!)hhWnS|AL6r`=P`ylu_lS=Q@>%CXA>-+jDtNMuh&kTMS@%`E-_Q%R(=Cr|5b;K$-qU57v<7Mfa%Uam$Qst&o z)3W%pm^aGF#(|#i=liIu@5lT5+YR4$yT`$cwIkDe(0|8duVCisBVE?|DiOV=cGJQK zSJkUqzHE!&ARnMw^b@MwM$hWnW#2(-d<#lpo4i98BwhDj;`1WeQm~sKZ-}DTawfTf zZtQj^^v9zmpTPT$J=>JWbBs|br0FgY=Xy&nj3j!u_XxnG>gs#+6ZG`?5OtVh@;ia|bX_;)o`qxsZvt0M3aj0)dc`aEVER z5q-pjV~+l8^t1EGQ#ZwXkhYhw^`*%u>!nQ?P@BTVPjX75`xT6-v3Y}Yf zxnmMG@P|PT1899zqnblSl$;Elzkq61V$eV#n*n~-S-zY{E)NaA zfdj1gNOVB#D7QbP6E#JCdKCvy%FrzcH@Rmy5qC9I=^F#Qhl(A6Ay6sCS7jUW8K`DY;-iida=M<~quyf*%VPZ70sbh}9{5mCZBvkFtustj_Es9u8nU~IOWB#f=v0o4$ z$@Kp7tbMlP+HK)VXMgpL$~ybUS#DF*{No|lLZR0rba{?H3XR4;ypzIPG%T0q#8BTK zx-gapS1IXohB(EHC28}F5d~pL1tQ{qLThqNFMVuoGvz80#b_%si*Zu9bjAdIB54lD z4XB_7nkc`kp+jf2xK`R*piBzS9v(FH9^SD5wazw&655H~y++&FUF!s`cvEtq)?1$C z-p`&ZII%%>`OW|n2>%1v-(HyBtGy%4t!4~qNvW}3O363Ds+T#evApzXa5r`Cv*C#?V|GuQbYkV?x5?D1~}R+WSvawCpxEHXHEmsJDgEEyI4Ee{+ir&P<1_ za;6i}QMgD$aXslF$zjJ~V1kn*BuH<3ex1rged+u1fMfT@THKBh6 zcct}e>QUqGW90T#pdQM1H~JU&7Pd)EH(SkXoKt|LrHow-ir3GUdW1?h^4h{VKK&?t z&}&nXq1D@gkGZkLK@ETQh(C(>K9qAG>mOj1@ZEi|(@`^>S&(pDj&ivyo0heWxC{jD z6AzrmdHWg(lq!k|X73Ww1(jXdUPUPx zwcFfGpjxk>jDXG4Iv!+YnJ>@]~A#*~DG=;G)}`4fdg;tGx!gCdx$GZLR$E_e0I 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

rj#i;R+_vS{KLT!WauZr`-` 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%0D!uZ@laiYB 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ⅅ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 j3koksRDq6GjmnPqKZz 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 j1uaNM2fB%S=p8>2PN=Bq*gMi0~tV5>xAR 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%0Ah3_KkG=CuGu&FAXr6o~n;{Lkw1 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%0A&3|Pg7g(3TY&K+ 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

1+X$4y{{2 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͔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ȩ^kIU;!#;)!mXB3-xgTWB5h_vXx_9 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%0D@X|59T-oZ`c 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%0Ab^EtuY|!1^`(i7N~b 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�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 @N34#5r_Mu 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

0OU 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

>IZDzB@ysQrYj#Z(LrXxJ?a7R+ z??&CJ^q5}PR)K95KWwFV0*2t`IVV5R<<~D)?)t&EaQsR`dhsnW4Ftinn0Z`ew-XD5 zQ8#vPPQW|34(LM+UyC|zW}%T7BuAdiYW;51jcXyTJVfIeqNpMsl%=JN3Ca~OC4RV9 zc>QwaRw(Z*G9(L+G-BLnkG{RZ$b`k7=$iax)7LAV&AcjTaqZq$r4px&uv#sHm1^LH zqfs|9-xM%CoP9b?|7mxR*@7$5EYCy)Air>AkN&F-*dJ0*&0tGe1AW6lQeI=R%J zAJwlsAgyL#qPjsDLb|sRs6;44dGCE5_V0_m-l?z>Z&75gJ=IoSgQ2!Kd6jz&1%$I% zH%cdJ%is!90X&m$LyQNQiaBCaXL~kr?Qg3tk-!3g-i$|#j*a;PNP8VX3*1!80TMsf z>V{d9yU!5+>$BAy<(I1sr;Rm)sq~J;y7B}cBR{N_#69)hD#F4JaVYnkT0Mc{hreGb z{Rdbm2u<*-7@h}?3IyW-$2g6n$^lkA7VCytS!vqJL~I~gl2hCdJ(6L}_B*kyFzZUW zYI=;|$(dzG$3$&|Hz~Lvv+~KRKki(x6VBX5;0%S{jQ{KozLnPCsdT4>9QA^~LR!a`vw`N|MBkKsU_tIB66fJzcvsM(9FbL{-P9p(u$le=>VZ54Xe=@k}uWEmN`S|V1 z7Ul`IfK=E?9;GJ1`%letCzZe+ai z$OQ_q0q<&2oW)vKl~4vHWWb&6RQ()lb)~*4*Fw?cnT8NfUrwvmxEggvO0;)$SKhFy zvnTQ~`@=F_NlQXtn4x%Xa_Uf8ufP9{!2kIkrf*HifwROtL*L+FaH!~lTLyS_2v{#4 zzuYNsYy$|dSMTP|>Z4BJQ?lZFtQa0~G|N6-!B?KZD5O*gnNFk}fCcg`WdQb#!yyFA zxl<66%?7m!6#5{mE2pw}iseP%)BSYq_%Q2=fQyf&ng)5i-Vg)9)B-e5X$xTUnG{|s zi<#5Y0HbNZFrgC|c82R)L2fOZ=m4~hc(4!M`M=&#piu`mcXC% z3Hkhnca4=QMOZBcuZL|hq^>)~9gXc{9rUMPZWKLIgUh#pBba6dqQQqvyVNObc9+vt z)}J4*bRkHIj%%YKBZWBMFn}8HvJ_niBnMpTFIRM@20PMBFS+Yx@UZ4%lmXhxUi&`P z7w%hfzHs-sX;v0lV9t^|;9w626VlVG^S*RLimbDvt)-3J>+B;)#Ry4n2F2(noyC2r z#ITKSeacp#zmV+=1<$}Zt6Bw^ILTQ2_Hlokv~`EI0*lgYk~wPoQm6yrm!M#^r4Z6Q zJm|dW9jg$r44Ha_`lFJ#m-0|R#V-+7{Se>xC94n9bx@(~U{7+GmZ)7CaLm z4&_ic%gPm$<5cnVi|tF60W9R%k(GBHYphv9kDQ~Y(RYltJXkir*(Jj^f&`)h&4m4& zx)4*N>B|7MK>7FK)jm?t@AFD6$ljH4{Nj#T37C|Cnzuy(BG4)@&vU~r88tFn=vQ-% znJGxtp*q?MS4zwD)amv5^3RV~B*10n5c<^?Q~g>&DncIG%V-ues^_M-mtU`F@H_}B zry5R4z8pNdFaUmsyDM(qfK&0)*L7#LmbFH$ECQ-qYXB_A7cKR=D0s%Xw&03cpkhfC z9u02Mqgg=f%8qfnz0Sq##o8eBH1q%DBtyzjMk(bCXcN%TMz5#09(el=qsmB~Y;T}v zg?Bd(y9ODx=(+TF%*eUI5jEONhJ|dbj@j_nDAbUp!LNtC!`bi1$1+Tj)mA9rkDg;F zafpMntYqz6Hg;vLmXj@H9mUV-321S9Et;nmKdsmDU(B5IF5>8>}oQ z-aeUl`0vnurDO%`6s6>8;UCQ;$jlR<-E$77KUGafY`-H4Nn9)@9CoKFr8;Sf#+cBN z1*v{VaKB=fMw8=!RWlbb+?Z%~~j!V*e?KGu#3h&kpIK&`lNwo?OUIQ$i>kdITKV!)S~Moc}DQG5W#SZ~LM z3i$gKZPqNHsM1<0T59%2Jh;HqM(%l^wAI4hZ&*deCUT(;x831g$&xYgQdJnICqiLY z-clZI0)+F&F$9>wxU$8VisY5DuJdHX->y_7h7LlvDciD>?0|j-gk>>&O!ZV=@Sv(! zL~L_PrFGX0_4CfbqybpwgC4SqD`0id8#=3^UkiZ^n~4M@NzLq;ZvdYOZ*M_bXYa zBNa=E8@`yOj-bvkG$jW7lE&}2oVj9Fywq_{nis%vUI-?|q%m;me&#I<0Hl zAQF9h;!;;3>iDn}^U9}YKKT2UzSSb$u|(DoxIm=6iI-|B8xUfpcktCKQVCHCk{%0{ zY6#(LRJ>-B1~Nvc_b_<-4Wpc+>OCZkW~oy>HY)fz<3!eVYY~ zv-3d47ObDvm?O3LB#!*)AO7G4Ls8Fha5s`7o+|PLmTK%XQ^pC#RvH z_tat-Qc58gyFo9IBtbJyl?6V(%#T+p?F67o%?vm&*Ax@nYEN;UJX*1SRQnCHuAum) z2U(r5--ED=sACM=U_nr-$rb({)c|1#@J#hn#+ zJZtLFL6b7RWUevRs!5RRvt3t$YRHLgBXGr)dy04HR*|$rPo>+bZS7&zjm6rT)@A^A zHXKBxL|HJdu2HaV^H?*fzg;Gp4;=Af)s4j} zX^z@f=yG(#bxygFhGZl{N9U7To$IGRKfivy(m>i%47+PuyhNzVj|ujzP$@obpE3{( zyJJ^JvYAO(7nux0mNv2MR@!)|be!z^_T}Zn4gZqXErE+=fWiXL=Mh&nt$0lN;c*OI zuHXbfe{Gq$UezK$8{ypefI~dX)&i+{FH*i zsvC=?m7-pMg5QtKaRI@Ma4MR`1%d2f)`#Ezxvp>^r0Hoyvo^D(s~Z@Q>Q0Xd*w=DL|)g!{5ViydvEB;kuaA?<|-Ej)}G1HeoW~(sV|1`D>V_fex(B%3uH1N?+1(zYJwAp5VsT?zEmf?7++u5gNED5X(ZNy*DjM;sAWU3n){ zsrW^ArX6i6SU$oj7`7>fpPsT}n04i~dh8Y=;vlb?N_tcoG|?TGV12CzGr#rmdoy1}MRp$r0BU&RY z8l=^84P`CxAaGla?!=K#&B5R8y28xHS^~dE;2LZ08M9g}?g}d-3#?QAd40J81~U%? zPwAGU{JSHJ=`7tS>e2H)J@G%Rx^e{wi99>4*n? zEsc?PCQ~x&84eHb0pPqgBY3>WtSdk;IV0F79x!jF>Qs!RS#e%+98Tn~U)L2Nm`16- zCUEMuCbhJf{Q;2gxJi=wC2b{cz0mh3&t zld{`~Q9mc#bFwMV7IP#!Y{RKi`13}5bSxTJb9&Mw`exJ5h#Z}a0=%@*2Y~NGaeBi2G8wpW z(MfA!k;Z22vN~ASk2_D^R_aDTphO~-x317>1QFfZ(n`5;k&>U3Vm*wS`)9NXPBytz zWvw*k@V3NN#Q<~*jRIWhKju?!HYr`OYN>HWsETC*cS?Y6q0=8yRcmki@$1OnR`HFH zU{P2E7K}IrzlU$N7~U;4uhB_=eB1J7)lbRvoO7QmJPXkPY#0=@0Ef>eAyEq8`()Jf z!zzHv8-Z%Kj36lmfIBxuiW$0w*A%n0_WUt;d$Z||SFr&bG`Ksb7`KPyhs4vOwaFs~ zovpgzRT3j%;yrQ#RdS7b>Cm-|OAV)IO>%EmUGb`Ey#q|naH0+}$7^*%gm7E6$&;(} zH(&q##tz1elj?b7L{Ydl#h47ZJh(8>@H!>HuWr>7g3%fb?FbTO9d1SsiIJp;3s?im4|B49BG zVTEE)-Eip7_a_*%soqn-gJX+GJpu*jga03eOztfH#FHZQ3txV;(`Bh%!EM7Fw!t6~!AE@!cY7 z8rgvN;z;um)RBnHUi!AcOGU&cTwp832>*0ryBaz42dWcmm1XtGU7%g&^l>n4l?m-$ zi6HhaO1vIX9ogzqvrpY@pl=;wAyM_9m&nhCE^;qFynjFc_UnlUs5x@9kvhnr4=*qg zfw1Dz3YaSG_!Fp3JV24s{QAHkg&UL|*pzEF@~kfe=Z#KqR3~WNM@tS*U>7PlXBTsPlU;{s@A3DO?c%loQokD?{@JH&4(}9pNi@8mYsjRrMi-iz0Q3c&1C>C~S8K>adQGdz%`-4y)7#J_W{- zBo3(X;qCICz6yQZ??={Z;axKUUp7jx@1q5gx=N(x-7Pi|2cS-@)QtF1hi@bTDFhgb zPQ$O#w0QrBEvOU3Fau4^m8E+LLT*^AQkQv?-D+1Q#gDt{h*=H=;n=Wyvib?5m)_7^ zxz6F$5_?`a@%RFyfhe0K)n1F3;UGeFfi*ib9$XBN@ZFEGL%5hg_TdWY2&RM(tg*^$X*N=+omZlm zvuX3*K$|P&*9Y#?y(9mC<_yUj>KY*+vkWMP7#06sBwjymrz5YP0+f$ek)efvEZ|#S zB1-~lhnL@@I`Qgx_MH{HdJ%N4U3 z3)Tz%p>CoKK%H1ASS%kAKqJ^PnEB+>6D_5-7UFW>bOuq0avtS}Q=207}T5$a;@0m9_9Vt@f0mX11(wLc4?{&HDr<$i2e8-&Y*vR>5!7 zYO%pbS<2~0izM%%m6Wc2D=7L$VJj z&@v}mzZlDV1NHXx+at&PB^VX;>2<3~WS^GUYRkR%Kzh-&=_9DS6QIcJQy^hHjUuJK zJk>;n>rzOVaM45l153TAhrl+-sOIIBn>DZvmkY28DbW%Ge_eF0zG1pMf{A;YcyJkJ zA!3p0EYq`utAXcjTx4>7#B^ep8!h~4`ar1MOEx^Zsy-=a;g=eBnJ*7#BtnfveXOPW ztYFU}thsRN;7qU3=M76asw4RvI;&qCC$+dhS<@SVrILMS0z&iVj_vNyT7?lUGR%AQ zwD=httY2uJ8W(+>c-GGsv}t@%|PWK%f;;V<fii6LX8OkXJzhw@U+Rpmn`JDizanh}j)e7|8 zT(hfRWI?g_l&o!NL4H5+@Vvp6sd~{7rih(Kzhlj>FuFD98~o~^dK?? zR%Y5<0`u9uONVXzo}4Ja@MCKCEhRtg{W z+0q#z-D2J4Bgl(725?(8{0L?IMYUZr=h&aASiUG$Q;VfyDUC!$@8Og0tZwV-C z)e+i)Fs7Xp#$WZX6O`ahQ9WBxiiu#6ieI7Crkp7J%BOCb$bn~lP*wY1*db?t$%?o({`iOmqE>c1Zt6T2Y zbS*#1Bd@-g>7r%Q$CWx!+&<$fl#3+DsHSre34YnM)Mw<`_Ws&E#2t^+z z(rCJpQ6*g$lT|-rI&s_yb&!J$V4IZJN}Mu?T%e6-gmKlm!IEgW9&s3_u;}C9zgDXy6q^bB532 z0+$shQIIt+rpVn;*?&$rK8tl?mxo+NGff_j68qDbYh{*uZU;Rl!k<< zrg-ZRhhytZ%yYx%zn@vDPC0vFy%y3oN@fj3YqurADk9Au)QP1^lB!AJiLV>$$mR{6 zC@wfb=+Dhghe&uhaSnvgN1?6kQpjH85y_eZvSTINRwK0Pi`P6X=e zle`>+)3*KM4c3Wg$bM)bmgCSKeOT{UD-cACBaOQ205{*C+3-|yAAPo1BV6)inb>J7 zL&7YBHQb!M++dwpt-{#nOyB{y9Lav?7lCFlMQ=~AVN&1mNA}h#x5Nzq@NTgZeVn8C z6eg_Jlx@b#@1dLk75vg4Z(VFyGmryZ#Dr!Ke#*{qQ~xjbXHZ4&Ea=^eYD1Lfn7ed^ zXjouTAN;z@TRZ|vrccC9St7xZR*PYIfcA38Sgs~gKV~i-LDf^hdIbpxhIoJjgy2Oz z;0IXyuq&C7`y-&jYNb(`HF9x^mj(hetXzwpBD71-eRBp>rmWPv`rzk)_-q{(uvYEC z$3bmKRDL_N(-XT!pz4Ef(#lB}H&wqNQ3<=dBe_3=szRZ|G9$Vy;?=o8CL1q9_^}pu zrdi${0X5@f?DRr|JO>B*j~X6io)FDabaP-O_h(SC$`nsJ<>lv8o;j#ktXg!^O1q*b zxjTa@5Dc=FOvWRqR7Uc?hKR=?_(6z!Jo^Mk%-U<+G3ebH zRER32b?U?WB4eX-_p8#Ge3~9x+l9dYIr9Wl4VA$Fa1yon#M|CWr$t}}{Jgstk-LX8 zsEW^biq+es&+aGx9YWN7j%fymZ8I7VtyT8(Y|D)hUjp2X4}7j53m@s)o{?2`hDE7o zijY{4dm+@&D^xKjawRxrcc6C5t2#pt(a&Z>hOJQVGaoZE1jAgDqK;i^qn;9dpe(;l zDq#ilDSu$l#w-bR0X=asjOtTv)tR^hy$~DInql2i8>a+HP2er!EN!P74ynpviR_M^+g>BE;X5YX1{s6M6wTX}7N}l8h3E0=){di*kH^_syxW(q(Y;_pp(?g7yVhk6zIA0(;vH#(a zbLx>s19kWe#!3=0-cZOi3H*1UCAN?jSx^J#bS3EH=>POO=hRzhBRS;WSN zR;vYHgGDS75#pad!2KN95eWoh9qgwNbC#|_BSS(@?+~0r;O9gD06Re%w=viQZYT7< zn6y{KQMjKz1N%pwh3o_{vI(!FK4^iwMiySS#L~bXef4?KE8`1bM|4KYHB#l-W?G6> zs>N2L+VBT(@6#ssb7bG0;MuV{59~1b*ibypbyP1L3M|b1qPx~-z>Y+7YZbWGY@Mgq zawOu$%&CEERh|_9zWedNPrR5uMNxz})u6XSdGZP4A=Hw6@bl9L;a?y-vCH!C3Eios zj`a!*rZ9-?S#ou&c`+&Y6SD9B@?U>Gq0L6d#-D|zlPlTklVw;N*>z|422+c}P ztO37Pi(c?p6^^r7Vb+}FInf-*PCQK?FDGLJ^0cI^L55Ee)Rv-i#zmK_&yfA_Zc0(kq^_wY^v&-CH`ghBNX zXW)AcA4?*6j>Hcm?^q}`+)f*4Y=$QAn@t&arY1cF_U?o?n?&8`|4fcPNLWjPNC9yy z#V2^)X~Fdr*$K{=$cv0E2*@JS^b%SMi=EzvR`1mFeFOIP$X=E_;bp~#ulJ=eM^W!j z;3M;XHmWGy9cmsj!vhg5Iww_Xm&- zVVRK^SoVS-m~d#T<=9$)bkQvu^!~$%AV4E!*KcZ5y=g$PG((LticKF|wFm5oK#?F- zy-}n|8GyHHYXd?rPYQOYx%*ROCxBIW2W*)uObNBt?u{({!3l@o=AAZQ&ww3SvSK6< zaf@pUywV)RYc4GfQHt(lF+4%`{Skd40p_S0D@2LmM_PnGpi3Y@XD&OpE$@H)(+Ra% zOOcuh`pN69T^Czxm4=w6y4DU001eer#EBK78zhe~JskF0v0@`^hV0Lb2*IA|8( z_=}{TlPn)=6?M{LuV6RHbLUpup`F;zN%b~|1wjeFLZeH7qKfQAI-}poxp)rkh_mhZ zFWP96Yx0Lpe>&6xl}BT?u(P2b-hVi9O{KLXF6A|6pg6-&P+REq3|-9gPQ%`B$o_tW zpQ&iGfD?{?_JAw22SO50s1IYRaZGmEhWXvGfA%JRd%%jt^d+D3c z^C8j^Sf5;!4F}p9vmKtgW~uP&^^x1T-;GNc07g##|uk*gGC}h`a{Tl6T^O zXGENUMlta05ekzOgs5aoZApW>wW59N;{DZMU!On*B&yPKpTp!MEtHe{^T9Tf{Ynr<5Yd9 z^wvGv+y6SVpU}RZZH6y!*GORvDTMe`86ke_{proS6ToU7noEL1YqVyUQGMi#hX#=}qyR+#a#dvT_R5n|G)-sRg#mi1jj4=5=S{ z<}-GCE^A+*!6CUVncGT=K$L&kmZ9pG2S?A+$1;y`fZHJIC!$M+D2zLcNl<)=i@~(FoK) zx?34u9lM3=#H&S|y@=N_CKr3&^OZBCiuf!d9e2u5pOB7MKb&~B0DTm`H3`j4je?Ox zg^*u4Ls*3!di(C}8Cg6$?R_;L6jMy7wwQ_+^Mg!UyEDb@iM##VnS?J@XF$=PcMv*# zQz^_2XXXu%w@&{d!;}Ed5fsd$;%M~(f95mZ;&2Au@62=i2JQ7JY^xGe1`5ByDhyTU zm!k*>g)@z|lk?&>aLV7dIk17SN&Ifi@UTqqzIk{vUAfbw{YeCU_v-B-bWnLITMlq+ zYM?<=yL!%vPs|-5ZdvJfA5Mh>@1@PH)fqjxgq9}^F>E!#8-x08y_S9V;r$_WHZ?=J z42V6>IUqjemBf-473ds0w9VJ<#}n}iq{y;n^MvVS!>2y+2x-=mX6`%JSiW#4poLjI zL8o(QAh(Tcu2?`w2JC7EN7_ni`s<0@>BvN^Gbs$T#gG;y9^|>fA!&*`i}siQ{O|8y zpC}+`D|YydQ4!*?n;>gEwdCP_j(~2*5?)q#I6!q;qY42mxfqyj3rlHcZXGP`8Nv8g zc*y_%e^JLjdV~=Jaqu!wQh`5>6Ry71xXR@v2Im(R9$q4A9O>2ot}SAT6FX!a%aFW4 zfUaKvfUG0(A3)ao=uyV#nj>^Lj?n-_AN|HL>h+O+MD~ITic4fQED+}uV~dj8@(eH7 zzYkMMYt(${1|E^UK)qcenC)gXfX>AmXH#Plu1lUeHtX`kV!ywuIyE z!zv-%h8l#pMPrM}cGv9F0c2oWr4IJ)$ly7i0WlgDFIB7l+H*+{ACbMFIqD@cDI>#0 zTJWhV&R6lX^sWia+Ap;?kUji1PS|E*A8+PO-Mz`C)+|XT~Zy1MBR*$LY$#Y$+Qq*y_pv(J{7MdA~|jpFs=`6IFyv~|Ar zXC2-`mVnB5iQfSGO5Mj_6F6bKt|EFwcEW3vwMr;rF59TUizN77b}>#C?D{e15!ngb ztf@9|oiWY#FcU~VBRI{e;x|;6!VSni{qnC97O=`}K4%CFtajLA%G9ii%{i!T@aIQl zCoCZJnwQ^0DYu|*oGsK=d1b`(d}mtXGh|;*ELsY_I0L)7zIoz> z%%1N|vUm>d$g26o4;N0&y8DX`7L@!+lf7zx&)N3bPjIw2BVzdkX^carcCa<`E2z;j zl=`j_^b;Fu-jP!WSVk|J&D$JgnH7#MIG5ZJ0}k!PhKhO731v>8|Ih^jjWP*-77N<) zof)3bp?x{AqXQ=k5)-^5_z1{Um^o(>c;kI0UAj_FlbWh{j{;9E(ZVcqJ07p_U#W%17M&`zwHL79}5^H6MI<~VMj z#nO_fNZyO?4@aWA*Ag*~o6mO+bL7+z))BNs)rYI^`Lu^K(cRnMFAyO?kn-UM5XLh! zI20H~pq+~jhjwB^d$Un*ji`h((coI((Ik1JV$U?+gmxyn2NtMwlj1{RO6pHeSupQY`GWfL4YzSJ77dUv$_)ABE zpyBIh;NNBF3GL1!n|C@_IJVw|xIuzuHOrnWbX_dq(7rtUcH(|{c*E6*v!8Uq;SOCE zs<_k&z4q%83y1d5^~9=$Mq$GLd*k4SAZ6VMN(zR%aOm!gJbnu8$f6Zj#Q`)ebjX6m zIAv6A7PCl*4m-ZXk)2qy%8;QoTh9Kjhtn^*ykWfCX>NNjX5)+%gb}H9AD9xQO=(m# z#_AVEc@+&?&y3^YM0khyYW_Y9UkmGmmxU|K1X6A~tY0@#c|>-?--4M1yLB6urlb1R zDI|OAf*3LPuI1;aUp}5#G_5QPPIm;qWFDZmh@&us=Hw`ro$YjJM{aVJq4(g{ylaGU znIlD;2|H?wn`{Np^|Al!#H~VMaJ8nH26;Oi*lWk<5rJOwy-CvFpslYbE){e(!B=LF zD^)nMnN~`n4g(SQXR{4p_R|qMw5Su00;h&RVAcw)6%n@}NhcJ|4ziD*j^qGPBK9t# z0-5d;ilYkooq|)GGWHb9*AsiW>L73-#Lvl63pcXi8Nam%1lCRv`1I4yCsu6bnJ3QG zute@?o9E^m#NIH{u_M}lUjI0v@T!v55sHKqiy~Cb^mv_sSRc~PJ3Ek_dH!tKzedu1 zz@J5^s$l^RBzvyfR({&&FP}~OwM#}g4CWbRo69CE^egf?@L71Xa05Y+F?V)};c%g;x$ z`m9qEhBCI5{XV97JLEMh6Cy)SJ7fdMj?kchuteV5$W~%VySS#Ozqb%lZd*3+(2sCh z5tZ)6^OhNECCGyMgcdG1ct%_4IsZIEw~KiZf55(F?;grE6mKKMAd#?(>#-G1YR{ar z)x=ccSLdoeKn~p22Q9}mZS0hRKO#HgYYp_U=Bx|f^4?ynCa~-=hSznL9jXCjM;-}A zZSWJ||DyN`gr?8JBp7M3WY@KvkH}8sXd1Q=j$=X!-^$ZtDXpy_gg-dSb!{$?eLiw& z%LZtUtb(G!tuZxj<}(#p2VHj{z5zRuqfFS!-ZO!3z(`AMBlz%}qCU|6&Jgscz)l>p z{1_%H=LEyF&fOoPV)Rx~O=X9kA)KGM+Y2j@cff=ghFDsYAvz<}rq5u26>I?edghR& zy3B_`cnQU-tHF(RGM-bbA-L}ZfUjpx85GjW$`o23a9ss4d`Vy4959c(m7MnV%rT=H z0@G-9^)-miPkm{gwC{cRY{!>X` z>NSY7Fyy(+A?72jW9yQa_ML|m0Q>bs9x%drt=*MVWpIB;yljogQVTQaooS0tp`FMy zREwcoDT%aMtUbh>gd)Ovn=c$Js+1E}u2ecChjWVczij7KJWvCb-2CxDpCvfnsoL2kw$b};a zMXb4S8?$*MO4d{nuS%@}@nNfm%%PpwPp&#MM5hn>%@rYDS8;XTz(Tz1%m%da(+Pdj zt5?bk_LadELmCDNm3&G$e$Lm;gC2p|2^!Sqj3E9A@v|aa&M~<%j+sx2;Iv}`Kz8JH zN0w?Qh3BV*vlgd$IeKfb+PoLj=civzL{9B<6i+wEc~0{<#jW7$tqkv4wG-2U>_`~s z-Y%CiAH<2A#G)g&m zU2~n;HC;^JC05FSW|7TBJ5mU;yax|EW3)cA40s8DoM=`Rs%5L(VjQUhi9X^|Q;ut> z7c^&GYl*B?;{YMrak66`xj4hRz{kcpm!{y?dBYdWCz|pIdnx8Xc7)G*(z^(=uupq*GYqA)l^AXO26XlMU;BGWN|>U#|Xn8o7Ry+aBQ1W%tG4GOYj0gmhl*=V=Q0KW)Yu8EhA zBy2O43L{-{M*{%bi3^trKcBh795_&yG$_Vl-BQRIB4Ecn9odOR^LrNa^5Orb?b>!E zv2EoqQPlnI{7E2*6k=p2Ud#+O{`^$+?Ak$IT4@};tUc3hFQE%rB~eweY%DwLK2+1g z?Tmh_N1FaY5^unC;brXO5GITMqzkIXPTedy$FSnwGAsg^6$7UAq!wLw=|@decj{(}6R{X2#d>02bTj;72(Tc6UmfR(!qWbfiABZ)LPl0Un#s@2Qv7GXfkuZ%5%8RgYdV>`N&v zv%xX@=pjZcbmGL!h7dztD&@I}-LKHDRL{CoNfw+^tATDjS=L@4>b`QDC+FM0{qyt2 z@c}-4ywLKp6kr1+1#nW=PD_GHd(tHgqYhV;J$d|(bRmNd4u=PGub z&v(Caw3m|r)FM+Du$k9FWD6oHZA@&`ld}y*b_H?h!+gO|KD$I9$vLt1M-r+OhUZr9 zKST2yX)V!qB-t2%Yan!E=jyox-d&XRTuJ&@Xg7wf#fq7X9k?6cvEd-;sTw;()lu_L zE_v3Kw|1#(TdEP+KR0${_F&WLXfb3wcdvK^cB8U~4KSOkcW)`xOuZiC38Z5ndpN4> z?^nQ3X@PgH3CSb$s8fadV<1u#yf}L&^S-Y11@TrB>7GJ-V8)@3whgGrH15i`&S#Nb zx!*}kENx0|D?OUWUR7oSaO+#OolWKynC2F=xNItMcx(^r4^vAeBJGwV+Igo2n3z@6 zbeUEk-rwK^DTlEGKA(P4oi3FC<1Z}$qB-j)O zQrc{7=Mtp?aog%A#pzZ7087f=mA*wR_+h80#A>rQfS^!%56}INzaqP$dg>_O2<&kV1o%U@ z#L!DHpd#9&oJ98V_Zwq2J1RFoPw35!`azUYw_zKk#n#c49U{9iW?oz)ia`Q-0yf)N zcv68iK&K)G?u0!3X5Vh?0IPw=KZ6Q}F;dhb%~2HKTiL;JrX6wPWMcsCbnqw1M$F+- zN(0aU2`zQ5c7o9U`TLE7jaV%4y@z2c!2$TjFNF!d8Nk@*bN}NhYDEAqRx@Rf zMn^Hva}Dn(pwlw&?n!7L^N$A9VB90b{c&m3%81q3wG@^vjlRk+!a1_(4H zVoo*LX79ww{`}+0(Z=Ab$OhmuS{|+eo3$ucA8J*KM?EEf+_~p*np2dm*rX*Rv-Mrp z0uG8OrE8r`rd>JSZoojOmV+`DwQXb$#3VE^MR{m)LIl2DIdY*}S6K~c5sXe7<(oSY zP+fdBwvL)GzumbQn*eA#_s-W8Gql|K*cCLO zV^0YF^(e3#2x#&xN=*&SN%oddLj{@3JtFJ2b)@9-&92;_2xaGc>z31csM?u#FN_K` z;HcB_o81sAY%%k;dOupW3#!v7n8UuQI@at+mgn1*6Dk_~NufCYjCIDnJuV0Ao|LJt z^++%1%9~R9lR7S-UtkvvUqQ+l;P3AF57r0?17(fOPtip_4fUS zd`q0Z3W||vHmb=0!={-B@)+es^LGmtO z8{o07wq!JJg;J6?0ePA!HSoHy;&YqJU%}l-AhQMCj-3f6OgkPF^dKrL*Fc6xtY;bkJaayS#$97}E z6-5G$F$x=NC&HurjQcKtAJ`8^QaGQtcB+GTE_w`a-?DN}hJDah?T-$VGk$Purw-Kj z8dsnRNK3qdqHo)j;9Y15av0qAD{_U=vFKV4bD>^gl_do@=dqOz%k5-R-+o-lA?$Wk zT5JqTMkK8%mCWn)7&={F&LaEAm6o(ZQ@|=igY$BjGhArcuuRg?B^e^SfyH@71*}_l z3%tL^9?cY5|?sC-9{r2M@R~ou8WfP^{ zWdrBh=mSt`Zp#NbF-F@bW|AHzix~gc$Fi?4xQBGPNlfTjjypIpvSYmv|%^if^>RX zr(IJp2cVR+GsaAP@s2$oonrm#{kP96@9vCU2%6UbQ|WU$C{->yO=$#1C!_Y7w|2_S z3tKHq>C`;)J#_5Z%k=u+c5%P{&i{+$|Nk!GN3HXs?qx7@eswa;-2%#{GwI*)5zjBP}+bJXqoC=z2;Wp z$|WtNwF8y({GwI*)5vmOn7%Ya_Qkg_-qQ+}hXECqa^OMuh%8-*3~XCiSCBElGis-5 zG%BLIik5j`E&Pb=$Bl(Xx~QH9J&GoP^DG#{io(-Sw)cTM;#X)lR@%w|c{S8Es!U3z zS3at1*cg(4B%UMHM`-U?hAsMvk&-RCH`tI^4I7oZmmY#nJC5zfxRpg;zqGZKO*?Cu zQI5HN{))%Vu5D9F+&~G0w=Zr2`hip}Q8HhKkbUR^miT zn*pf9yQR8Xp%VCWBJ$V~be&%}QgEH4TE*NVy)}t#u`~c?E7&lA_w%#7zrxEG!jq}k zo&ZJ^5%m=3Zdux*+B-^rc#isig{QAbs5}kNg4xdapKr^tA+Q<5)&NrK4Pf~B9a(L`)ktnkQC7Q-L%ALl7wi+$!rS(VW0pF2k5(Q~ESwNZ9 z3L?~P>;sd)M{w8HA8n0V_u0UCv{9ZTnF{I%GUBS~jFEj@Tz@)K0;#Qi^G+>z=%hWU zyNkZ(2UmPw<9BoYq3%FEjsY1EU;RZ z6naeEW`+_nXA;-l zy|DucdjtH##$onj^?j+u=lSC6^t+ms_gd6zSH%oVNu$i3hn?(=pVgOtUI=j3kXUie zX|%a>klla}S^`8Z(AKk7Huj3 zD$so!1Ngp$87tz(HaV`och+AFihswSuH}7GMAs?>&{~R@(xFn^Yn$+oJ})?fD9LuuKKyQuaXQwWY?Ds;K=yPa5qqsJxJGSRQ zo}S5(1{GVSWMrQ6?DtBa=)uliIz4MJp53k%kz2~5wP|Tl5Bf>|%6=bLCYP=Gh1-FC zcDY#w>;pCc&{{xS2W?;fk^Md{oxNyRK2_|RmJhx@MUt_YY1=u?k2)B>HpqcM{;$JtVF&j&3CX9KJgN`a&{Z$pQU*jj?90fc7(%zS};#l;p|eozm;26l6OO zbMTq3APJ_Bc1v{UIB0Zz1b40U&gN{oNV?+c(;7&60a>3FgPHcxJ^h38-mAUQRt%|3 zjZFnaom$4D)SgZHj)#+b75ibo$}Wk5eXi73u-av91-8mw=jjHyag9{~={3Yc_izuW zbfpHqY8fF{B*7Elw|{&8xN}!jJk%Wl`|xYW$Dm0YcxpyVEvEyY^RM9UT(X5#rHfKs zbGJcMKPz?xHNIC`2X1ALb@%qSx8HxWuKf8wsmXpl-kPVx;1KJS68xGTR>$?z|lu{yNvGE;BCIp zugx?GTWkd57-n63LZ>BRCA4Yd;@Vt$+hu78v zJ=W&Tqf*JS&sC1p+aLG#x3&d%SxJ>|lc!6T$b%p^bH0U-eWSiR5=)E=6S$=E`LRM+;>qXzi-$!DZjc1775XMZ53 z&>Bi?FF^8nE1+?+e!68Zja|z=>u8wT-r`iOxe9a=`UC~yo6>{mzP;Tz517%T)zaqP z8G%sN4#6S8G!USqC*9_6;}zM&=g0&w4opk{*{P!9hC&9ejh{f%^r(6vvMVn^VvO|M zTybN2Ww$S&n>I)EX$47Gw=x(F5YCH|N9P!^m!oSp`L%#bir} zSZU(UYrUy8(7xrs^E*?c=LTV&Wm*>iO$QuDsj{f4%5I(FQ(Uz9?#sVPqBu9Wme0|p=q*;jVW#Xo3?A&tpmrgzoZ8xO1mCldeMv7 z%nuC2hq?;o*h%cn#m!=vUp%G^i7)_~$)u2`0P)XGea5tkWkGT3BNF^|%&L(^JhSY|qNUN6hDz0-Mg_ZBuwWxbjH$JCgww*bE0L3^)Kb>y za2<0SmP(ooQg#XkbC#;Pv1rljF;=R886_l^ltwE}wP~dH4~BLg>Nn(1B2->EqLV)j9KbPpzIPd(f~#F zD4T6Ez4U!B-{6O7chF;+8AK1Bb|*yh*_c47SS2BFofTlgv@1=qS-Wl(l6X-_t>Mq` zaiMlFj21SB7}UGZ%kmBQ>@0MKkR zZB>q^XW5-jR33lWM(K(R8D;avT3LD2AbQ_gV_7;`xUjJCQJJxAQq3N|#)T@KT zPp2pzDQ-GL-TctHZ#Qf+&fz+`jc9!ZRx6>Jqn+|3@V%q_Rjk|<<7Ux7X}()Y-pa7m zxu+^Ii90i&7zZT&0r{+hN{qyH;EctDEW>VY+|XT1DAp{SCtDhp-AIC~R?w6oV9Sm_ z#gG}N(9*(TTU1Xk>IY=^eod4?;ek5f%Dl}I0=5zT6MkU#q=6RET#r==O_!A zMH;n6`JW2+xRQU8+BZUET@UJF{xA70{; z&1#)My=OghdIcC+AAoE+vH^bVG>qbfujE|vuyNRLs9$faTCH0;sEgRxJ15=Az(X~U z#E1y(aMiAmKKGvRHK~KV$MK?UV{-JkBDx+Hrsy9xRxQm5?OA*l++xds^){S zOFv4XZn)g2_iztYN5rLKp;iBA?NSH&kRx@gFzv>U=G=T{N-=W}p=y9yg~)%avxDH% zQT79--Pq89uGl*x3nHxG_ZHVR!swotTk9YOb z(q+num?hE>xOOO6)w0J(MS45Sxc#v1#@fZGlF&@e+~Mlrbhq-*Xggmm_0wqo=>vng zf9-!q-@93)KALRnz6F+1C`XXWDMtGA^@eSvyx~c5j=mXMm2n?-1)M7$!%$B)6(r_L zL=CC@F;guJV7X1na3`pzm54frV&O_u0m9ur>P|tLO=G?g>^y0K57VxM zEru&Iwhdnkurx{V1BE;-9ifqTmN!~=!q(Kdjzf2;J)~T@%~(1vY<09F>EO5tSLgyx zn2jhWmJy@*G$xlc+|V+k3;rx~6t-RA3kaSSab2Q!ECKN6D+7OP8z^|@QFnm{VfUfD^azZ+ez_u}U9#4l z2>gAl3|2a_MmgXByyWR}mU+G+qb=53AFwO!ULtl5Sn1i7xs-V@isoV2m7H7aQPb8s z5m3=4>IOD1#xW)VKX8@~e7)j#TMC6B9Jtn_W+u84*J`G~N(7>F)~0i1KY`qKnuu9@ zME{Fz*WCkEF5usBq+1Egu4Dse5-ix1kdy~mE|IUt|FN?%p6m?p-q}u~o!7wTB~5i^ zCg7umOADwQFIi`#`SntlWTz6dWZQ~L;@x>_#>wNHefPr*&FdY^rouWblsYJbur?%bL(&SOV(?C-~7u`Vmx&wG(sU@T%HtOV#oLb)8v+BJSvoGDNQeaD1&h+3lfc_b8s{oBD|M0qf(^{GcX7?`q1xQ z%7WCHc&uu9MxA(Z#yzc|F0)AuUVpr+cPcF!cplq=gCq9go*C@QqsE?cJ8NbBVcm_j zqaE_1EKvnjXh#KJ#=qp!XBmDpnF9FeN@z$?8{j>y___)asNf)YUy6oTK6_)n6B@iU zfHfAE6xDz4+@i|CJANl7|)W{NkiYW|NRC}aIk~g5Cc{UnYcROhb1IEQ^@ij-2+&5WeUp9 zW14iZtL$7rPQ91PGIpLyNAfhE*7F<8`+lR>ibD(&$U_~z1ME)~2Ird9Qr~ivX}Dw< zcCXtb^Xx#nMht=lv(}ohtDU6W^wa0{e52WlaV4`S#HgX2dx-9q>ex&LiKz!e`+nMX zqel&dpjeLqbQ;23IpF6rJxR)zRjtrOvlCZVct!XeXf#+?K;O6G(p1yp& zv23E=thHH)8~NheLw_)D3g~3(gwB6``SyHenpp7!%c5*xWu9bipb+@9Qpei$6Tkbg z?aGjhXgCCZb9GK67Fu-y&zAv^G(O7EthXygZXgD2@nq@n90&vz_SM}%Q9Y-l1Pv^^ zlAy^1N1-_K&T&KIJ^-HAm`liAkMPHOyOVHxtW&E~8=@1oGZb~luZWq-zg5LPq=TO2#b|hfP8AoPgWdiiMmSz8#z}Z9ggvglTuO z^*ClYZ!z~)5Zsemj;ecH2`TvuPr|e-19rGoML6GWuf}=Sy1JE=Vk&wlM;#T&hHY2U zM^(blT69coaMF;8umQ3VvzO&avHA7Ool&6xk2(fE-EY&EQ*F0n<=NWUhkNJbtUucJZdN5R3|P$eGEijihIyU(xVRCZ*nE6 zWx6Z4fE5_jN<74Sj9xBDR#bbQS#~8cqYk$*s%~3AlM3(+f=oX1u4x|WLCGBeP9>(O zA{sdOJ7DC7jj7>;!OrC41Q5yo{`mv*pAWVZcW~EGArVWS=S<*!nrKzYE+>8irhR1A z_^)F-0%g~Sp4<)q$*qNA)u!YYa&CueK{rS;gC!Sm7C;Xj#!29A(-iMxW%r}~e15rM zS#!^ZrDAn$f=FtKXmu|e_;Ma~N{BvP!9yj;umGs#;y}0+QM6Oa2G2&E`DoEz{R+VC zd8HmgsGFwS+PyJl&D1Y@9S$cVpc~0#ymw*3hD)#cL#6W9AqR!t*5G9L8Z+ zuTZ_LyCsCFkV6IG+l|uzive|6^GN0{jJtCg%osc%`das_!i^^|31^qd|vtNpNqVF^38`SGd85My5WgGoVo^t56R~bk830ttWu(^UG&> zdHd~(Jda45xoD;8mgkPN))dRjH$FQF@}FOSyJQ@Ik%>`BrKL)xZdZwQ1Du>~9cAf7 zpKth&s$f+B8rG_Xql;N7&82}bV1v^M0D)t>aSw5>v*_1#mkW?r|q8={>9{k7YO+m?Av}DAawjmEZ5|WwW}5D;CP5kfN`+5Fu<%xSs6@eSg2RnNnGM^ERSD zCJo*p4!hT!*)3#t&n&xA5|9ajGRk8DZ@~3yDxgxHN4%r;qrCTid%9AQg~PO#r%`wE zoN?$v5eo6#b>)4QAcAQ(R;|R$AAngI9zs>U_U+im4g^955_9x0^>n59Z#sZ&X~Ygn zur})+o4v%O1Uk~D`g-LFG^%jdjr~z-J#}~H1DYC zgf%f@-#QK8c!QuWbS%#(LO zBJVpfo$7*9x&k)}Be1Kf33KA|cm<+9TWWLgkzBL+)4DOE_>tlWF$375G0La5?FgWw z2~RsJ0|z6%lHr)U=jPr-750qgK-)Wk80%y@Vw|w-&UPx+sPqx7g%!?2VC~+u#}50E zE;xw#jWydNaV<9X%27G5eP-$G);z$jALTb*f4fqh&~k}?qnMY%*(RVLG=ZG0Be4{4-HF^H*Y*|?l~n2XmN#X~qsM5H19$Lun(R=JIdYY`&9XD?+p z7Hmi$Gho_OwrpxSKFB>r&geekPKsZ7WivrhrdVkTI-Fq-d|26Y#Hs<`9!v_bW@L#k*w5qm?*n_^hsMTx1oQRgc({>gV@Al+3vO&wDI(hgU+F{8+pfbyVKy1?e*S zP>=31lkL44s6h+SqO|6Y@sLMF%P;s%{YFS<5MTi9$*b3pYtCSG5;b6;c(#wqAwR## z(+e)?4bRqqW)TMB%M4o={sIakIDVvhL_A^M4cMJaaRTg#F};u3a;*(q1W*DPd^F7! zmR<25*};nIsxCAs5$AZwSaX7i8lNczz_c5_!%9Wq9IT+`6rC6=MjQ`7A`?9tKo7(2 z4Aw|XxLQmiw-sZUWf>KLd9-&+{Un(N+wP3k061GtCGrQ8#~u>%KU(r48)Q_EHq`H& zwczP3TOG5B$9$y?Ld?69xUX`yrB`16ceMBtkVgnnSfvh{CuD`X{F<{v5R}{qn zYIBBP8^jG9zy|puYw&1Q(@6^Q_vb5xLnB_Q#g+>8vv9l*D;Q|oLsR_o(VE>U=71eE z`vM#8;GN4;O&&F_X@Fm?BTV%6^-4aik&N zF!w{|Sme>bfK#NKYgEppd(9DGE#R)hpva<5!oZ_cXo#wCwrLn&H2_hk>?niq8EK=R?7{`Jg9fK z6d0mPXui~uu*$@^=zw-KB_#jBvi!>VV=z0HYF_Oq#P zKbiKCqJsB*Y^%|ED-3QiOww9lwbVi`%3D3b*>Ghy?8?jFFBaffwoo=IQ=|62;D?ci zJ@RBXcu7V0_BOSQl|tQlE3qBAEx;o_pi0s7v4%%sMTH|4BJ%vMV# zq1|m$o;`{D70G}5<<~FvfyBwX#wEkuw4QY>P$c#_T5ma8s|kPc*&NqDvFvA)w-3DY zzR&0ALCaIwF4n>8Z~-zXRN-YgJ?o(RYeU~|cr=TbRIHdNa9OCZR!|jAl_JTxo(+Kc z^KRZTtXIw+z0>Nu?FN#Bh%g-+TVl};;Qv4V=k@y)W)drvrG=(Zp;BAlgv;t>b+49A zI8&H*hiQVqD%`6L0w#;LIjg-CfDDzD@-sELpKZItHMjGq-~lTOTXe+3-O?fsS}gO# zwm{oA2ntLgER|cLR+o{g>!?|!is)zumc89UwK-xERtXmXxVF~5T^nsgQI*_I4ZE>q zbD0%i6O7ywB0S<0*nq5};pI6!iWxg6U!P{@I+eY=zh z%^Tq-W7-D3?$a)=GHbM`NnGX>VRkqf&Cx|yj{vR zD*kmJyoYX(B{4)y#X62&c2eMwvkdJOgyu0Y8ylC@67QKJl`w#}5!dCJmieDcb}4ln zlQP>Pvv`{rVb0bqVs=E4N89aV_TsS7o()a=dv@>T%WpT}W7THhn9V0h zKn73)M=wn#(~K&cBkS&%7J0px_?!!3lXT-UatE90ZD&t@u&1x~`$q}|-v=FKz=7oi z|IdK6Z2_e%+|E2e4)mGI-Ve*ZPW`|2@9%cQxivAJV--o+;YFy;Y`K9LH{peIcV=Dg zpI&b~4{)9>3!;JX^tn4FpHp{c9XTWcPp$iW#ky!zwoyG4>b32dhHl`bX_SWhF;5W4 zV_WS8)-Bz(nRKVBoGgPY*WHFpk?6%b$;8|tkdXXr z-+r+>hYs60Z1oKvB9GBgH8tO?`e@>LCZqT_nYpHMRM6blcbc_ z^zGQ|eBg#3wq423OQq00!%gs&6Hv%PJe8uED#zfhBir8Y*cPn;$*qIV4|>eIXr$a$ zjrJm7rn7as^LnhcfFgs|3n}~t8*R_EN3VSL`mA~F=XJYdo8hQ=2m|)0WCHb~N0{Il z3PPO@yhyCuew&}}?5jD#DF{p%FmCl}lV~UWq(nCGnU2szu9wn`|OLqewY@;q&(psxks?%^FmiI0EC+_V0?UyT0MAC(8 zYbA$p$_A*@v>9j*--7QPM1TGC^7T&MW*Eh@ZPdGh^-GA7Wdc&+m~CPvmO6(@ zNe{tCu$!?rz+A4=WhC84$*wT%#=~08+!Ddv)s9$!qqk_O7)3U7JncFC=|%qK#%rYg zaSL`O27KEc-{d%ClCwp%`I!@bT!p>gu9Uy7wW^oQi)KZtOdYrQ5&hv)b@;LK<5;RigrL;|1j>#GdPuOl(=qQCW-oDte&TmWCBao14tL{ z_nIqle3O<&aqfa=lSvuuKd#5D-0FcV3G=SG6V@#gZa2B+5t@q=eBXhMYt7cj0R;GC zYu`TI;S!NLoCBnP4;((Ym7a6~P~o%1<)kX=&0oIVDI_3mk~rqov{A5h&Lt1Cl6#Y; zbP~WGw%yoQ=^fX!Qdfqr6Ob`;!~X)pci{Mgb$i%$g@l30=m4=EZnML&SZ)gZ9wOQ$ z@ktF**mflm7QUlv1C(P|P}tFO)cx4bve!E4DS5kPnv;sA4J2O5zt#i^)7d&wx!BnqYQ+fyj zV`ssg`yfEMM|+MAFzhwTfo+eBW*B%Y)9)!&z4FmkeLKe`~ZQv9qrw)esr}@i`90XV(sHxHfFZ9Bcdq}d(BsJhtKFH4b z>pwptcXCh(s@>w%m)Rqa+1!9Y60S%J{fQG#7na>xxKNf#D~WIhy#d|o2>76bF>o0F zdr}Vyx_ZkxaQhTt3tO6S)|8nnGB>5+KFpIsCBKuEW9eg+4C>c}dF0&^rMbsm(rBGf zhA`~bvMJ%*_Z0o3HC{Gb>m;4M5U>*P@X4mG*WW%O$a3(qFQNS-!1Q zUY6Xk&Chi8{@b`)%ZJs%1#TT2wo+8+bJ@G5IeN`t+$V*7_m;0?KVvxI0OhG5hz7za zk5*kkfqqil`gVEw%JvOLrhQUvRkil+0whJoyyi){+S{$BvPb`E=2@e&URY|B_oZk| zrKW!J{`!Y$x0WueNyxcd?~(ymhVqPb9?N+N`jS(^}hEh@D(c?uCKc|?d z7y~v=Y9$_~UBjS=4ciGzmjv7_xrPXzyTuqBKg@An+*-gDtW~LMV-Em68zpeEwqQPb z)Xsi&{c!w4{Gt`N=qmsqFr8qJ!6l2Gyga?#N!Ka(V(3k5k0B&J)>yc+E<0wm`AJV# zbisYT0R%_}csA!K{Q^c4cv56IH&*CPgmL@K>AohE(VcdbRf798kW6v#D<`W2UUkJ*NmIH#T?eC zS*|%hQerI?-a@+4-Uq?-o6Wtyen8IleTW3VYj7TW?X~7=wZgGwYuif@oP)~{w!L1l z&0|p89>rAqh{Zz?P55kvC|!Q0r2n&RU-k80H;U7IBMP*LQN?3Wj*T(2Y46JMH{Unz zU*BH7+ntq*0dBL+X!i=a$Q1Q*1z~LOOqou)4IakbIda*TbOFcDWa2&5mP9g0U`*W7 zXF}qCGw#y9g1=K)jTQ__i1uzE5W+>YcCIJ&%lh{1nk%6Ko}g>a6y1A(m5%@7x)(qk zqV7RL_kt)u2&q|tctHcBM}KghqHaLuCpnQ@mL=Z+cnqC)^11EyKeep2l6a>+94Af(pUt}qNZckfhsua6{> zP(HwKFwAeTKV$7KBN#n?5QBHEnT$OYv5QUwu`XHG6BX=abWcUI7fJFpDk;srXdXQ^ zd}!|a`=AYBz`}93OTZ*xxa6v-^;WY#(-HqObM*50M&f8!@}cSti-iau74ds)-XY39 z$~ehVUQ%{7kAWprB%T91sAyl+aQsu$%I|$72)*UTX6}c$$Y8D1>l~&r`vsR&<~AQk zrI?p2qtO0L%{68%7EXqc>11>H9x0U;2;S&oe02|eE5=Z$W> zfs+QLu}cW(t(o*uxjlxHM%(nkLHo8}zt8V)S5h7ekgTv#9V16Omsk8zL-#eY%fajX z)+-IP1yL!)D8@GCZ99V^cM3r^#~D0nihlWmU%XtAI!*|l-bR%Ur_p^%%`#?*UTMVC zgIn+w|L_&dc&*T4VUnDz6p*`Ib~W%615ZA9;S0-dc#ev|q@(*tx&{}TSt3=rW{!-9 zAG{reWq16owyr5A+Dvv($HTN68`?vC)}o^l_ixFQ2EaHv`KaMX3i#$HwB?e1LiSCWtm2ZnvI z8wfXQWY&806KR%2@i2v@avf$>(ji~DVVFCjC%{i#%kUKr7igY^!YcQ1qG26@{YptT zei~JNW5l~B%mSJ;%c@}P`fMWh55r#V_Zw%dIjqP6w1JqUk=>5bZ@8n=yV!|@duV=N zN!o&=a9;5g8%jUnBnsRu;Ls?1QZ9K*j67RPnKwxcS#Lx0vKBpA-auTo90bmgBER8c z8|U=@v|U?|W;bs9OAjdfyFEm(6U(W5bsq$*)hb$KL4%(&q>Vk%57G z`s+a#D2c2RDH0qAR>R`u#B6Fx@Uh@P;cAxWTVN+l1|b)*)u2@hpm<|)!;j2RUVmgq ztpEJWiQSJq5B?f8lX6__jdEv(wrfRdhSS}`b;Mv^LP}PE%ZHdHw&j(=Lj@5EM_}`^ z>PV)OBIFbM;iLo>o6`WKM7jC)-zlCy6D^0TkAqhx2;g1<53T`7?c4j#J&!L{6 za95UBmqgy$Reg5_0JLgw8gRB-$WEB7$fQ}cVMV3(GIHx{#_4erhjb_5|7pxGN7AoK z+I@6+4NR_7@`Pf~y&`r>+PS9sbf{zqek^esaP&!f&G@YJ;&-AUBVg`y1NnTUdM+W1 zCj{}F34cVjig(?@st#UtXAH%!XDrqi1h7{eMu5bBAR9fx$-d4b8dnp;-vB#du{Jw{ zV0-boMEF)Lq8Hv~@&Xv%VHoR>#c=ePb6Yr*xeV;C2Vy&eXK}Bpt8|9s@{{ z&d_RDxr5Jo_wk*~j__g%t3zy8r-{S6Zv@RITppGTd(#%pR2eXKI}6G&mt~w zZkW98Wg!B9JWAQAKDQr!`ss%gECTOK}< zSEqzE!_cxgub0SUbOMX&R9 zLy$E5XhAualD$fmO5v4keY`aP^2a}Xr{y2N3lGQA-y);T6N0A^b)9uJ5I?L@sR)Z+ zknwT2`G)NKA0Bjxxdj$ju$QV5VqYx+M};F-duQ?~nsdiw|JDEf0I(6@!%Lrif|yR9 z+B2s~inV(o!T6Y+zO&c^k9mtMl69Y5)e_WWsFBSS44VDIdgw({qIV`cflR>xt165n z9srwk9}Qyu(9V{Gk3GOQWRH3_-vTRfl|Z>TQQ)EVwHub?q(ui}&dx3aum=g6`-3U$ zL!lTHi!7`NiY0l-YoGt57m2`c$R0JUxdpadVr#~tR-JQMTHfccfGor&vweJ@^A6Yv zllhRIpitSJ+~>AHK5$@Rb+ZVh?apF88RL8lELG|;MWZE6Lg#8ezq}9gx284knC!`H zocm*`KHE!b>fL5zK`hE?!FsLrJ}+K1y>S>vfPor#&!Jo!Q%Hrd_oF{gAfLR!7h2;R zu>Spngzhb{O0hz@4(ET#lSjI|K~mSYR#M#o27htH`4@wB)QRwnISeir zPnq5w%OlP|mQrfzsmvf{g_M^UeL`tK`+04tTTolf{v)GBXB&%W6h&ZVUU#wX~VXuiJ+RNNxj4;^=WPua_@?fbT zX`P@IOH!{Rn*u+#W3!)*geD5)wb#{XvM!^(ay2Y%9X-Q{d%#X8x!$xy$ZQ#*6@R>{ z!mpjR8Wq!v%jtI(JF)*`^*b*xFzmD(L1xzynH2oaX_4({OqlEhGW_WfyQ$;`T&cDg zU)%A^^id>rhnT@;e1bA^iiqB+gYv`8`ush3-o!pKIrob`(C=(^0-5_UTh>GeexRo; zRdZXp%|Zl5yG4QiV(kDlgn(hTS_U`kE#j{}oPxR)?(no*0szn+T(sVwPKmKG*YMiK zHESsd1e6VOYOSlOzwd4h9<-?5aA=`%Fv>J~3V@Y|5=BX~C_?BKrTsEaAcK1_pIQsq zYp)GRLK6z5Hk}!AV8^5V@Y4xk!7}wm+_g}um9UVpu#W{S2!|J=G2iK?6Ub!x95#az zu^CG5392NmHW%W03>Q^nZ&bj1(g}UzJ`a&o22JdKV2TrJ{Z*JZN?b0=#@?ua&qr+5 zGxmN#v@DQvwYCgC>)VW=G$EdLj^>vij@S(RqL$=OR=_*^LK6q&v4$j_g4h;62+;rTf#+kQ9ml`WKFDMxG^RsFbxM zogCVMd_(JDL2}Ln*AaYhK?A9U%V@c3=yuUw?;AAx=|7IJ?Eov4l*+2Z8;X|Tv<<O#0c(@yXIW_j-~^!6W5^0<4_&qsb+i=J8oq%h|cU2 z0CeZ>49Fg&+wSkECVWPhnquhE*g8J;BOxS#42_XoJw4a2V|6@&t{ZE%sD94(CNT=eGy*gu#~j&0ZWbtSqov zNj}^!>+q(R7ju!`;5wn3n!Psr8&rySp-Apntw)ejc4Y90N=Zr(yC;IR@FeHLx!yfDNh<5_rZ{p-fhe zqXvk9N+PRr__)ye4X_iAzqVRdqw4iMB?as-ZvGrd;n>=+ErXq47ehgNz*&n#$hOWi zhS(SU>y!YPJDS9PdDKtj-id+mGuEv6d`38}=nrb)S5v2$;zfU?H<_3&_u!+S~o(>^{64*Xw}E2`dGIeZvCt-D}uVq1b-3GhdMd>Bx)ebiO1yk>F{rL zS@r+_7x{f*E6bljQ5jy$JqF|>rJ`P(**56H%frH~duVXt(~69)+(ujEUu~ zY*5mdXF2d&WOG^WvPPa{P>j%IEqY7)S-Rl=8!GnYS=qoXvO1{*HC;?NTC&>ArN%rg z)s~n(uFQOc>`?{CEiy>#JQhTLgfA})-WN*cAuyb+NE?3hvGl?6q`Q=#!)Gaars16FF z(@o@=NzVx`!)cu{^0+cMzKElE&Xd!yF4E$TEBgQx`y2HOW+7W0anD^cr z#5j;yK~P&{^($5!*d2}i@~}eX7Fvdm9o?9dG<>Eom5m{}O`n;#!%trxmi631vpKjz z%NB!58{Y2DmJdsi02ZbfEz;hHffLZ2Ec2k4V=SV&Y)$WgAU=vsu9|MVf%d2p6PFpXx35p^C@YB9#e1mtHaoGL zbMYKqGC>g;!sQqNd(EIg{CUGpvf<@nG045cEh`gX%$ymal)dgw*H~kKsIHyThL>m6 zAot<3d+$#5A?iMk0~829l7{!4p59hy57`O+m}e^^j5ra?Sv!2cK%)iq_DfbTI{m-5 z*@;6iw0p0f&caQqSoQWjqzoT7xm^r^eQ&fQ&@vVd2LPK263Bdr`j}8qX=d@1!P%ziS!JX&`jWY& zqaG!Y?j5er-(W7-VuMmFFdXdXC!zJSc1l8C9_DH8eFvgIz=u^7n{0*{5fT)hqu5Y{ zg&k;*-rn3Iqhh5m4x%H|j6gJUgXXKypwLrW%lYW>&HW)jOtMs@2O6A4s~INC*k&b; zVtY*O*&CPpotAyF;4G5ZsOJP-4CdCvpchKqd9d{Iu=e8qc!uUTJqQ9embBIk!PE<+ z;Bz5f_U;lM6<^$2jg4m#3T=ARHiW9-o!}=}h?j0{N%m*e7xxjgLw2&4xCzz5MN=Y# zhZshPay3Wd4YX&8)O%=S`55q`&?-Uv9w9cM)ly0dd8e4>F7&D%qPq^%M%_~h1Bdy?h7zZ^o#f!lqcra=un@cmbv0RIjs>|=z|XL@vc!vQwzk=$Jny|nv*l-#dMs%q z%?c0aTnJ&Hkz7pYeT(eLaM@eEURN#ZX}2ELb!bTuq#Hk#jC5={jYmni`;)2N2WV0* z<0r+@XQ)&rIn{v+TLtNV)d3=)Vy;sDI*6@+& zo(Lbr__TJ8an|7ZudT58ETekA|2a=CtC@*kY(Sd?Y&-;kQ0f>vrLiv$Tb|x-vy_8X zFrPSJx5UnI!DjQSedSWNXwZ|?<^48;YaQMoXL%_Zc$p!t<6E<7X;in||C8M1y$%>& z7PSz!g9=0n529698L_O@+m`!(mb|==OcW`DDDv`QOHBRsk(Krlyrz<}IiWvEl7n#G5PixcsJn zBL1)x?L|IL;Jku*)FJm4lRuB;v;t^qpR&LNi3TVkAwti2ali8w)03RdEv5#EU6+R5 zeXIgDbzYGtwlZk5Qv8@Q|BmTF?7Ib(wZt0TKOz{n5>>QR9K3~gmzGZzl}aZkjr zsGg*oZ!xj2UiLwQTxSba1IWvi45{cNb8oh}odMOckF>BCj=naeh7N1Zi@-oajV{^% zeFgQXXzmu2#Ra}3(H}z9FnaJFJ$X)$Vy<%0ndd90@B0x`88QC!nyJLNAY99wKEQ_Z zP^R)RCH@W7pXY-|>G!)z3@g~gdjqeKy#Ckxr}R z7ro1d51de~7o`=yp?cDj?iQ4HcJgT^Gy@D45*Um5$Pfx8c=M+_P!IZ+-ID~bz+C=1 z5<5Klh%K)}9yS%~rd>3N{0-CRc_R4ft7xbeQYtnflZO{P3Y@)SSKS0Z`~HUmm;%^< zK$8}4+d>F>-Su$|p;?}0A73u~_4J(x$ilst`h;DJBWh5a-E#DSf!JBM+x+v9!)I+w zqT)l4>++}PMhYD|m?$7h-uX&T>J>dz1g$#lorf((nK_K3+wO%xs{_FWW!HAm) zua*#7R*o?%Ukxo8d;LcQEo>Xew z(}aL;=a#9$gAzl+3?uKYGpW$Jm@oD_s1xgl^OwjbiH!<;0g|uA28I>vb+qpts9#Rp zUo^&6;$GKl>zqVgJGNF|4Kg`);T!E|Umg|r-g|}E%-;?MnSR5*bhOztMNeev)tJPu zsLpIEkb+v{1a2d*CxG^mw@x?&h!0BR-I9EOb&du8$P^YQKG zUqPL?4w?ZhQ=&BP*h00GAely6DSd3_z^JIU&%b-yqH|TfB<}^fR_OkXH zRA*emTAd-aR%&%o8L1W;jI(F7;9BF2%6jxV;y(Cs_K7ROxby;FkOV}}N6D|aLbz!3 z@``DkxndNdFc>kA%@U$b(6Rz3saK(|s5fzDoVm_hiik2Pn8n(?H#%samk&$6 z(Y}IuQlEQI(skgtX#{Oy`ug@RfLwLXYJo3$Xn)1@=|MHt21ifhe`&kg9XV_q`AU)~ zO5(qJ6^Rr#_SxAWWAEB zP4*M=3>m;1{$SAZP!#~x^A?@pS;5%>8mLjTvr#XMf&2u;l9)*VPqk)mOF}Ffejss* z5cEWv>fNZf^+LDEIrJp~!-5B2T8VWd=-9?_2RtvfPoC3WYGFC&Vk1SS04l?3YQtg{ ze1KtQ@ESSgV)ySq_6>i&GvSZeu_15;j}b@{-aY2}tTs-sGy6YZe%$a=prfg>rQ|h_ zo(LCmCQpN-a|P`5WYv{;9C@i|QpvLlSeC}1M;6#OQ;8XA&yDgs$@Ec1&%3$Tv5M>s z#Ln1JxcCa@z79^o??6xR&lY1!%tpzCV+3Ei8s&!sPxnLYd#OR?9QqOs(^kOMO9oqy zjxsjcHQoYwAAG`>SH?k|FJB0sRO{qb7p&=tqZU4;wtYxBPCed=6_))f;l zeZ?3~FTle25M;jIc$q07Z`gLOlbw`;fA(7AG7iUGJT23ehZzytx`6Rg6eYlolB}j3 z*HP*;Ikz^T3IBrcc#YvWRm2^y}RMbak)ZbbRe{pP!qsnHJ>GA zL>XUyUn2W!>#kh8kWG`K(jC-+Jv87OzH(Z^arutt>B>_PBHol3{8k6J9-`k~6fJ$( z@VDk6=6${LCPM-aB}Pfy{d65|_x74?F6)rJ}x2L=x;{9z_J0&%~UU`s#Z)$VLaQK*WJ2E~ZeWw^TTe3e9 z;{LdKHynA1Ua8EUqsGiOf{k=AKg0h=;5(hCD+wt$f>yoB95Ll%b$IsC`-=2_o7_(8 z^!<+)df(2V+_$kgrQ9rWci>>&fnczEwd=_leE;JHr}9){)DGG9fCQPRP(&Eh1m8)A z%;E3Y1{WJv;iX*+ZrVjyr@2?U0+mnZ#;A2!|Cy$}I!W$oF-rlqwk#n@enzBiF4 zN@E{J-PpZUoZ^+i9#RgjkBb*CkRS`8?fBfNZ&&iJS-^ZX1TM6ATa$*jn1BZ-KM{Bi zcMmrGxREB47C;5DB=2mytc6ciqmtU}lTMiBn_Z~`iX6+L&~F4mkes4z-AV_2->uT& zCGDGmf8NNG;rGuKDY4#Vhg9^!`uOM+kC6Fv{b1G~H!7Gn`f_}td_{(%twm3$aTSWg&0{&$(~HN`pc>thl&K=$pGd!s_|N8 zt&g6p^e&NjNFczfZ#ULzZ;2n0YK^9l7;FOM*9`RiF@OGS)s3}UnR9O5c}AmhA1xHA za#UE$5_{4Z`EJ$EEA1AJfU>GFz&VG)OoQKQd6TJt4<6#*Yjdp5hst^f@ubjFD)G2h zgD|8GV~Nu#BmDdR$BoS+xK8dMF=i>`7i_riN6oIcd^+eabsh6}&^d-Ag8+<2}0tON7isF$P^K2bwb;JQP(e>~>KNA0)q zcnpp^KhK6yH-O7l_yPbYrUV4s7h%&Tr_k$&`Kt%u5?0+fRd53mnesH7Cx43X%}o>sYnb~!#TUFqOE|J+}$IM3oqdpDBQ;6{`86hhpZ z$Mk5)IvDl+j~k~7N2)t;xu|F^30JO01;DJypO3D7H|izHtxu$aQi-8mAwb&K#FZDLAYwP7(P|lu_+Do;=zrE-a7X?7MWX z;u9|G;1Axe(9nsq1Mf7nbl{e>BPY~cBsYzQrvo{D1LM1KrhvxlOja!_1Hsb4UB(RM zD$rx!Ph^t+vg%5cHat`U{2Wy!4~{;IQ3?MP39*;cnR@$i1EV);W0k~KqbMG{52OZO z3&7nrwc|m*Qd7NR?8H*bqwbXV`yhpdxGat7n1_W;SMsnsnvP+R%+^vKIm2&B0CrIa z_B%YWzx}w9hxIBXK*5bmjF`ixK_n29GXU{A6`Q{OxZ*n#z(AH9&mNvvAqn09FeMHU zlTOdHZ$GX))9y!iJ$z^9;W0SS6o`1OkltoLU}4yF<3#Bm8hUkFW~dV3Lxkwpqq2HGM*ZSM9ff7= zhC8S_ctwjL`wTIuM!~XTeh@1l=c$$G%Mbi?-!N>Ewo1*st_^;*Dtj#jYld%E) z{rSJ;25%q--!$C1((^RWp|w#2PTgSYlR2>O-9+EM+{i9caveC~Km?IUkFOL$9PnQg zDCQ84_4^+;wr|GMM@#?@@ta3a_ObLb+WVw@xKNqXbmt{Zud7W4(Ue1~kq2Dxeym$53F zZE(X+*mZ*}C-Bmomv5#fCCB58P6X$~)Va~8%(}6SmbQ&GMjR%9njtZeW0uuz12CV` zLhp9n*v87UtJXHs1i&hLfOqk#*xW7!PW}^iy`W6|iLOH$%K?bDk0{pNaHu8iu#Vz`1TJNcsJ#F^= zOfmNTse9gtiPRjiZ^wIW!Sw@YF3G8S^s`bPr}~#KH~I>85we~U3gJPybuL4-J^DiG zCQP6O5`y%1=|+^ zF**^8j_oJ#_ojC`jRXNXBv?&rAGJmWMNcJip}lT7Jwv?domL~S4PX>d^x-p;isUE| zC-IiRH%{3!z0_;ec9lwt@X6?N-wkjp@y79r@ua8RhhAwmiYZiHIti7rqdYxtk<{_E zYLv^JjJl!&2fXgJXBh&NI*zKqZPpM)uXSpMBQL#DG_^KYd!k|e*O|J~a#U3F!1p;h7Y%P7WeXY={#e38 zQUu$oG0cFOnlu}jP#GOwz0TW+wR9FohDlc2Ta)o7eS~qY}qMA#{Sy?L%*=hgwCFQO-;?W7rF+aME5Imb;&YUJ#VbYVv(w&Z)M@@g|BU2%S z7Qpk=3eH%H631Q+{&Qbyslit%ea{S*Ol!liHU4Xi?*Q8Q;M#GpZaC5EYdg--rdk_dOkV096YUoMyiNkUFzSY5;33vF z4;mJA;yNaR_2@k>##KC36aM+nJGD9#8BpUf)fp5%SI#55P+*6#p3KtwRs40O5eW+- z_-;@L1!&65JYs@1s1DJ#QG*(Bmz{4 zpMscES=FR#J+IU&#NcF9W*6LT{0rR6GK?ONXjnQ!?ES<_{p-g5DUYCH$X^LhMM%+OWkVrXvHP3~y4H27w{`eV~0e>ZRa+bW>~2PeF|VUV4u`pQkkjw+OQ_t|&ABd^$)uPB=g7>-(_jmB*Lk%|m>_ zugBFJy1RzlH@rK*9Ie^2{(Va9-Kc-;8%AXuA@HUcnjT5$66#zr6w*VGdGx=3x&CF; zOEsP+qgEX;Loi@A$N&|q1SZvX+Y?8vp0@7>K2Xr3*5;z+v;;JzWds%i6IUR&Q-oRH zu58}a>^(UkH)th%Rf@?e8aQfdOou%gb!GFCfcMrO>N|k8OTl@2>A(lNy<0x{gO^g| z$AzNIMF66z?GD&2I8(5bTIe`DOZ@(_=@k-iT&IU_gcw*s0ui9StTlxn4>couB6Ip- z(~ZsRF;G!$gfc;#`b2GmL3yO^H9x5|eK+dQSK3!kHaV5r;f_)a$aJYgVhs8YC2eZ@ zge^U6dTsp2$tFY+-=X2M$#oXOnc^rQ>%!dElZ4ZUO*c?5lW!^70XwVrj5C!jH?64y zuE3QZjd~@Ic`|C)V^nTpU2qJF1m;GU~=sX;2oYknQX;La5!_(p;jB zYqTewDG#e&dq_B*b6XD$);6M~Wy3*X4;P?ICZqABDE`By8{0QqUNHl9HzyuF&!$aw z-`z@+XENFkqrTn<#ezeWb+1l7qv5_1(9ekcfTLbhUp<20yo*|zYjv;iQ%y7Y za8t_8igWecrk9HIk2@DN+)Q0c?imO#-Z>Be7d8PZ38FOy2Wu}+;qed&=z*Z>It zpFP#BTk1nQ{$$iEO)}?p?;W#NJFKgtq(nJv6i|1WLVx|>&yBVUQSP?vxECIg8S(YtpizDM; z1SB2U{u(amLROI!dD9!=7pN1v7pu3Tgyt-PJlts&93jLxsrx|YjdywbE>8vqZm(WS zGmYYgvc!@>dpj=|qG2@yt-1&GZOCsY4%H~0V2OSBHH6!Xxv=@XanNH3^^HLQs<$WA ze_I-CygVBIFToqo}yk7b0x441zD5<|CQx+PG(wcTnhfZDBl2#xhKw~CtcndHc z*+96sTCV2HVg;M#&kM~~rB$0h_t>I3vVW4IW9{6H;owKp1CykceZWA^BmTZ)hY%1=Q?Ys_$;M`|HVXHC(pHZ9_QN$<**<* zwGk}3PB>zt4o=LLhOh)$WnI}P1aa4%_nY|h(Bbl8(w04p-r1_x#a9pXF}TdIdQ*1(A6!QcS1T-q zyHA1)U5%EP+Q1_^NY9aMah=%296K#lD%BGZu&ahW1Z{Aqt;Cy?^{hejR^yNif0jK* zhhh%7&yd0purJ(Cx*28m!t|)PW=|WU^u!aQnFCg)Vug~I0g;hMB6pY$6lRRMT)Eq* z>KVVz8T51(teT1HDMf0RGuA{g9wp~c}`;Q~3QEwlH zuS$MRkY7ap9(tzc1`sIwS@t9o0Uomj+LtfwPHs0Mm)h z>(^r@5Guia%d>&C$KYXW=)u-*id|oz){`#C`)%)Y`QSP=?~W$ziil zAM59d6Q!v+IcI#*qx+#IAKzD7E+OLBZ@9t7k;=Eh)1U15D=_!P42$UxFN;DDwtmw+ z;uoe9#yrjBZAhlZ0?`bUuB&z*Ud@tx1nL&l5yt64xk2THSXvV`e}SS^!9Ba#t_I-a zNOE-L-YhD&A~6N{xlYZ8;7E#<%dSQcn2zioxDq&lla^AT;FIO(3Yo)#(aIYZ1yCn; zZ>>R#)~po0=gvq177UK)WW6~@8i)Rvu!9ZdT4PHHVw+fGksIAT*0TAS%@34{&B?V z^&G^z?F4cEQm6<{6LwT7X{4KOTrW&V(nd|Neb!4oH0+ex4K!WpFhS4 z3Dco5qgLh~!COS(`=F=+eTLX@%K|Hwh%bsJ8*X`QpO5RS{9g!N!h+^c-FCY z8~Nc1hhjM`$c4t5rLIw1^1+5P?8*Q>&uH};(oiocNj}gUu$GlRedrA=RZsW(_xZOe zC!8@9rwK#?)JzIq;@Lsbz0YXs-dp?L#e90@;t5nyd|GY_D!CbWK^)oVD^c~z=6utV z@`Xyiy&tKt1_Fsb#g{bZIt5k>l))#Em+Z5Q_OMQrFLKILTdfsZ2HOb%YFre6mQCq; z&xSv}hU$pw3y_}`XI*gnQkglGVI-q=OZe0d)&Cv|2$CK_OQ=i9b6iV=d62s!8=IJ3CrKtjyKP{>^ z&v^e0>qw#@rOY&I8nIc+>6*q`rDpLa(qR)b`#e{rU>vH|F+r#pj3#sveA+;-iu;`} z?BbckE%a#13nmLdxO&=~Dt6NY>EH}E9V!39b*Ls_Wfdzd!!j^II&*-f0P!R9qM>`z z@Oi8#VDyk-85D$=g~Vss#ujSuNVY%V+`~F^xPKBVK-E0J}?Dvu@+PTGZX?P|x<(k=hcxLuGRj9G9ZOj46x?izVDev5R z^e8QKq0HLAX_R_dT1OshePP8;<-9GF2`lD(BtYy3h?kW?US}Ay-8H6r0XvgZilwnn z#pykk1&aZzKeMz#)aH_L9}D?Bl~htq%c4&8uI>yfXla3AGyzK3*4@->6RbYtEs%LnQ9( z)!4xcbW+w3f;Y9@fO?1YnJ2Ul=xOMyN)rj7@HDtYoG+b}e7e_;rGA|0Vc>7aLT{eo zq6ELqg^R`37Edm7^UCc-2LE`{F=$VoRit~Hvl?SuGs0rw2P@mqB5O+qKjslbs@{k( z7!Xvd>P<@gC1q+p`mf_Ue1Y8@S+2p$EB5Blh7DvYU6^b4E^%Q|`2weZ`|SiSotdn3 z9IZheOweVcuGMKJnshVP`L9EN!tcxqxq7`N@j1oPHJfG-R$HmC-t->*3)2y4-D4P& zmru1U7O+||`IW4YjVrgCSqfJe(9ReK1-rUNZ006q28e$3VGonk%L#VrFFTVOD6L5H zm_vkN@16Z)8Rx8mbQ$f+j_pu6d(6F>hNu-}l;QsbpJnfo?9sPP4#mzqSZopNQERoC zszfybe@_r*Gg(+`m*%x^XATv^5tb1x3y;Xwowa)p^#$bvVX;YA*tavMN^Ahm!iRF0 z*@q%V$z3Apf~~q4`*)%G{pa^5UAwmTuSE(YQIp}*I<)KTKJOg_9*op>X_PadW(8TN z5hy^cGK@kB!5?rm{26(dF0`NDkAwh;J@}qy0wE2VyyaSDIO;I4ig}ak1*j+UarO;{ zinm(`J$0Dy1jgP=0#C*&`H+sy_Su=2@s#u635^3gYS8r*YGSJs60r{)u|230)nHdO zg?Bfp!bYQcE9c_HYT#Me*j?|Hk99&xq_#+XZKQ_Kcr5ElyvHX~m}I+V3-Wd%Us!~2 z1gRpS%udzV;vMu}+gU*1o0}R*8rbWl!4@S_9C6F&n?CrOg=)|04d#M z*)L50IKm5XdO!?B70l5)>ZUS5Q%t??bKX7pePKFbGvS3-xt`0^X1N#laiJ`g;57hu z*>%SxZx2E`TTDJg&D6(q`b2bD27S_d#d)70w!7|&FH9%)E>pqT=2&En!JhkMSc9zB zD@0A3GcHdWQSI$`Db_kfwm0_<3QL)SW!y$^yv2FL3*^ajf-NTN6{b7Z4Byl=n#hIE6)D zHGylwil$KXF28bNdJQk~)qEV7cW=L$P<>(g{YmqGnY?ZWlwFt}^%mXpacO1x4AbGU)0>{qcS$|*3==t8hc&0%C?#1E4CK?ohL6AL z30{DWir{lS_iKPl8I$Ys0cuKcFn0~#UYJhYyRKnHQUy=((_LbRhU&e0=cx=?wZnAe z-g&KG2RR5WYARYGJVVW^fe=%*4Oe+Pa>k3n|Jwl96a#B16`n760HMJutgzX;M|B`y z;Ny+`xpi3#xd`@8NM(b z(VXRKO~iBcVMMT$)u+pW*sZB|<5Vw9Kfa%^1>A#Dvh43*W|Ha63xjxz{RLHg*K_=Z z>4eRU{=&p;&NOo7E_HTq3(MX&sfW8JTo*S@YwYkak)(ip$193bRxzoEMYMWr1&(|tWmw^9Cw(@QR%Lq zg=6|SlIJu5&DHLWbF;^L*mKm7c3pk4<{7hxb+V^gLI8DYK8heIctO5v zy!^s+Bu>{U*R`q?;pPJ@+`H70Qx&-2yQcatOeeHdtF5iNpjk*(i*t=Qh|S=DwS}_T zyPxC4I>GaLcZjvT_2p#FKB=ho0c|xqoZk-9iFH~qN(q!@6q?H>HV=xJVxQzO`@GRo zj|v^XP_JTxy1y5>W^$YLMBXG<6$F9qn(@6b9XaDAvqYm(2HBG2EhjV9tgjTq?TCg8 z)8`TUiu>83cTjL$pM0E>_K+1Zh$*r?`0u$_`Nba5z zgY(~k`WJ22wqwbSBY%mMD2eXbX6WRel$ z?NyCx2&yiv3Eyux8%P0jZ3GI(r|7BWX$kK)s25H;1f`xI9Ihmr7h9+eVP6tXdQPLK zzTYoUZ>m(|w=aA7=RnLLo}N(A(-AYWZC`99(cAZ`Of?3@-B)U{Ajo>=qJrusZQrN!Dkr7m>E2;AwVCih7@q^>HMg(`)SIHv5Y#A?yxrdB!e?OP=3>%k zGBI0;-@Z3hp|PP0eCI9;CUoG_hpdtk&jIOcaH^r9zbOliJ^ECi9>lq~<$b;fpEl+~ zbCQ4=M4;Z}3Syhux#gXOWGD?trjjZ&Y$7RvJK@+k z`P@xz^C|iC0rjRbG!8RfJ3o7_g}fWfccogF!8O&qK^sC)H~iF4zXI^-ewEYo2bXAuN9y(-9z z4ZR(0En8tv1t*`~rI|DImd`5Dr;C&?P&Xc5>W91M3s={(&dH~kw{4IiCd*^B{}-qm zkFTmPDXoI&M@f3hWt&fGEOoP;r=130px)GE#?BKS0OE>sscRD)ry}C^qQr%SrKh zh))~VKcHTfX2yn&Sd2fnn!EUR*_~igzQ}HG0AuHgW11z2p3G8@ zd2iX%^r>%97w)0^ZV-LFvDNVf8-rK0al1B*Y%G)Pk!ZVLPd=3_IOR}I(p#Xc| zOeX^MUsp)pDqfo1Kv)JJ!zVLAErYhy!Bd}>oqU1%pMT!4sZ+)Tmtw>fNI!^$Gmqv2 zfTi0HK;7`@pF7UcrYh)4O2wF4<;pfa4SS+6^Qyi!=IAVx5SH;pRW73Iz;E+nO5&WBZ-*814- z_66$31xJUH!i#6wC;YC)Sy=~l9NbEKJ(m4`fx6+RnCt8Uy*G&J#2-j9RUgM_N6L&0 z{Z)Z<9Q#VPR1Ta|l4CG+Wgo7vN4F$HB9`#SZ#Qo8meuat{w91S;__~3`Hbtu5Pp6^ z8-lu#gao%k?Crd)XMrb>y`*?QUTXuOBIo(XZ!h*a$1Wikkx$QQHs8}W_x7=238K9Y z_|Fj36_5UzPz(NvV>x+(txFTUfWBkB)f4)u-)@jRfdXa4$so>E5QAL&)=X#JZAqfo z&~K2uOtZo-=&`m>InWJDJvBl+=YE`<`3>p@by3YL;Sa+Ve9j;WK3Cq(%-#BY8Xx@y z>P>?}>^zTfNrf}MR@>a`qh}Uk&eCl?w5cl@hsBF`_6er~Z)qiE@hy8G!m{QJFZcg= zGx{MGqZ`U4x8ks1SzhwfVfyp5ZF6bpJg?lNr>q95GC|cvlFzA3gMH+oxW);E!yj*k zKg6ju!ppDlRtvH(H-=QlmrGaY5Bk`6`UUFBRgf>&B!m=vFnPJHx8&5+)Gz$?ag^Q{ zs2eV!Q~^1squ>hG70R7_<2z|xo@xt0z1i~~y97#SJbi5LTt4y)hP^0vf*R$6&%>YZ&`-T; zrTRg_$UB!3Top@J5*ITY0tfMMPkS8S@dfGzM~91Sa0LF;n3S5QACER4y@1bZ#HU_0 zF8#oHj(LbzMl|Ls6_lZ~`QS(^zMwD!b*22xcS(4y%Q?H9QWF&#wbYe{b=fhf8+8eZ zH;I?tS5nBChU4n&>)OVaF~Y?5tA45&R09P*peZH$-sxWZf_x}j(%dScY=6~I6?^oP z8B)E2()m)HrU}YQt$8t{>0`s^7pN;qNb0pJEy-YYRpCi{H7FVAuH*MEA*dT~pSHBc zedYEUp_aoXP(s4LftX+n>} zTdn%(m#;xf3)GctJ55~! zLI$$#Hz^i>Zrb%Chl? z&&08nCfCZz2Vi%wtjN%RjVrQ!)zW}uR9Z#GoXw|kH!ndgB4I)EuPc@N)9cKdOTAvF z&-;6mU#0u;m_ z_dq3od59EU?*F<{0qdD6_!AK<5MFIQfQgH>qI=>n;Ye|S48rD{dMD{Kr%PHIF+HQKDGi3 z{ge#tFm0{ya{pCl>JRdLd)9V9RXh<%bB_joZV9wSeK}(U>P>5E9Q!f?o$oPA`LHiP z-0Wmw?9~quj(YBl3|AO+7E7qmTPnPG7|Ddoex3I_I*Z*G0I3Si-ZBTgRlsLIBuR2#syYhLQrSS#oN*2q@@s5@n{~*IY71lb>)H)rtNc2>{NrvCz{Ro`N;%Pu8Ao+E1-I@hB!Veyk)fz zNDOW2K5`4<$|@zW^--QPA>~s6cjK&tmf|h!-YA+gG?pj1Cy_#dA^t>{9Pfq>OsL$$<_C|6t%hyUI#W^#%k1PJhoIgs{Tf1hM?g54xKvk%v~0E0AhX;TiT&H0WSvi zLXn54e3AW0DfivB%nCn!@H+YGC+}c?lyvrXK0^qK24qu8rD@vBw^YNFI{YN12Dp!I z@f*~OxE7;IK3;>5*F}L?`fMg&-|HELElna@2dWzna3ZiOjoOBKv#PJ`Dlo9@qxs>Z zp1AH8sw-BtsqMKB!ibe2o&1*qJ;gqe@G%$r4eG`NOomXg)+#<>et$y0dCQLFEbBZb zW4}?|I4kjHicX%R;(8!bO7UCrTDg||JPr68)r;Iqd{*Pk*>z3CwvFGUUJ!Y~HSHWY zve1PB)s073c{a{?jA?19t(dk12IYfqXWIKo8vG6G#xvY$vfqvqe8Vt!_yIxO8>MCY zz+=U*ZbY24XY(y^NjcjxQ!0R!vM*QIpe`}07eXpT#UuOT-krNoC8J(Jlja)Td{)DL zY;O8S^+KJ8sJifHL~t(|4-k3^p33_gjzNL0*tx$M2^2p-)t%}&fJ9K9GCxDMTCKxZ zkUkFF`v!I69h6k-l+49M*lEJ*KsC442C?2l*YM9P4og}d8D}-eSY@KH>el=L@}4iJO{7TXo3MUBUq26BWE0- zK5z8;MzwChf}Nk7D{E>~&p@y#Qwpc;T`Bl)2jRYC72dOAa8`8iX3V}z+ zruYf|dE=;Z2dL9js!gg0JJs*;K^^QggrQJ*{q^USC%A_-M84JdvzK_4Gr<{r*U26_ zTSWX`%~p#E7CvFkR;vxqQCgXKI)~_K$&eA56+qqaqP|r~68!t9mEa^?@G!!l`H-&h z*i~e2C%(l;HQKRV!DP(mJ`bgosZZYr0q6SI6!s13%29#c)g;gnByjJ8%qxY-^C8n3 zN3Y%~GjD zYw?`1r+U-U9)dcE#0YcN1{mKo*mynQ36Rk?b%a;60CnT2v|Bp(6hd%bDMQ(81)SMI zJxj}Bq>aF_X zh&4m^c|~d!-%#q8>>^`OA01~kbd6rK&ln7i>aQD=N{X%`G<@a;tqtetdr84Oj{>Ac zTKUy*(fC>c$D|!nJuT~}pY3~5K#>poCYi@-pf6BY#6xY>7f3OJo##ucz`zjz{VLSE z*8))U4*N83Q_HolS&r|Dv7EhIhQ$Zv$>Ua}zfs-LG>}zYwQ(ug*O1|_+U3ycpV9XD zaY67GtSbQ!FWvXfJN8=yjSeWrv&ZoyIAIIQORWh%V3?=Q!>neXBAU1g~a zyp<8GHxpuGtz~_0GtM^DU%Na3juUvh?D=mM3;z++4O-7Ts=$* zFJ@>~ZzjaX3})wy|9zRDqO+C86~r%XqEU|N<9y~XP%m0};$Ty?G%MS7&lP;#+Tl?V zpZ%^lhg5z3ej@_r(xI0#%t=;(mWOaoeICR?5-*yML0!pEp0rX!2=1+w+6l35EqG5a z+Ls@=(BJ>OlFr>$MS-JPW*;KIr&j3;zZ|v}1!hNe$C>ptjO>&^;!?fq&~;i#e9hB z#Yom4WZe?ybj(_sefPo3*hgv(Xh5Uzy7<+U<{#wTN}Zk~#d93eN><%<7aR0$I!W3^v=X3@iAFQ+?rbVXJx` z$Jc(Ny5X))o@CjtiIXWFS%!u$zHSb3l@EpP3aD;8!add*jDrG8*V;ZEQOfY3#aEs` zPM!H1){SS_%>BZtGQg~=zmn`VeGTjwyq&|B@Xb{6I1c*1Dxyi4y@IyR-8=LI;j6Sl z!+JBYGG=_O(ilDz5~RV8spPX)@eaCHAKdR9J7?!ACrK^2HQfkHc52zc* z9<7avn$xQ6)hZ`dV%@M_(@F{PaqQX$)xYm-K&fjD6k@g%QaX3fQ-|;k=f`CD1nYnA zz$!>em1f>$LNOZ>6pC{%wIXHtK3;LX8hC$BRx-fxW`-!N_}Pux*LBTqwZ*a8DTe~o zjnW+1X*m(#-q$EW(x%T@P20ngc)Vc-svA6}3F73*&A%@3sA^(AOgU5tEQ*<@HA%jk>G|u7xFA#{0?0#IWSFfSY z@m@>Ril}l+BUr8p`_M;$_W79CeSzx6VwJtJhhE8$ zl1QmTCx-*{oCW)GTM3B&a{7F)OghfTk41oGX!{s64rI|>Cx`@igJxf+ItWlVZgs)d zBZ7V9j!IKO7uJfTTI$YW2B!`9$~xq{RB1!;%>Wty8Q5GGJqJrgoFy=c(}4^?-B>ED z4T>Hr4iXcxmGQMkvPwsEwq~9(=qp2$FV3zClzZ+PifYHNwaIig3T*5B*aHnvHwc5p za}wpy7@I67+%PRNMDV3}joH0GqEO zIiUW9)T6eU#?<3`4S>3G9x7HXk0!Pps;ek;d@ejS`WUkvKj4*OGc1%a=TzD%=o)Ja zvlo&=8rqMCw12tt1|g3kWqG1W>R8@5WO~myTLmfAM`MK_R9BK!Z1}H(8aFGOfj_Eo zPz{tJD&l$^@<&*I{rmr1xdTsyPYy=m3meETdZ>dSul6};J3g8ssw-76mxd(XH|n9s zBnwGCgS!VU-Pfa=`VXud@!pX*q2pJ^SCcpsK#Geyol3(P-=Mm3wTtv_(`1Ux1-4Kd zb5-FxC9fz#CsaUxjg8iMsakFjr&Utgo@Onw#fCXHCdbO2LEX??D@zGOV_7?(_H885 z2&Mo&V_*$-DmZ`h7xpygllJ;~F*SUbIi}#xIjN>|oH7FLakS76s4Gv>Y0}YknMPhA zfq-(rfI@!>=T)6T{gva`SqQG}MbtzZP>o!B&%K46V_ryAr<=-Gj$>bJzd1cJu%Sg8 z+f*~Bj7b!Hqbt$7~FtUOcwquMf_W*`x~ITQJFKX3|cBnVq2r` z!0h0h{WZL&%9bjRW_X|Af=BXGaRSbyz;U;=XJjI-k_mP zR_tR~XA`DJkcY6Wo`l3JFS{>Jjb*luT%drlC5N;NLcU1$gfetGAA03w_f5~^s=+&R z07AS%GiQ!JG4o7)aRzlo2+jo3>AdV>@6`^df6~DmnilE(MAu(A?0xY<9!rC?sU>B4 z%7)1EMzDo6csqZN^gA;S%AgeO)oj*4Vkp38X&rkpzbv5)DHeRW5`k$9Zs>b!d$AlyjZK3U;03vY}LE3@BDThWZ=tsxOZB#_~BiG@0h4!oC5h zX7}VFKTjw91?o;Gdn}w2Q&EW9r1Le~Ps-#SYS(o9d~b~ZzIchSBfb>~C*6;_l({_4 z88*kjuScJuA5b?ERWs)Bl&e(KJtWROKw?@~i{MztSNpH*2+v|!rJMCq%7)OI8lvd% ziXSfS>(Tk|7pN<*_Mt@S)2Ifim9X;yGG|N1)2d~5q{MIR2){TMY7%3cl`~tBE*HHY zG88Hjy!xY`-7ipAx(a7aoV*Ka1rY%T>YKM);0(5k%jq8Jl^x+ZrfQ^hj__W&rdM3i1gqnVYT6E!5!vbQNzd~WUzsGHB~9N^XmdHR1NX{x zTh^^pP5a)DzNtT;uH54WC*uw)a_45WG2dR1t;Et^E5``w zo-x!lB&mSlQ?a`L=bZ5oh8N3Rp8j^*Z`zh8-U8cNpQYum14;s=Ja zaR~JqNb@?a)hn;kFNDopt$8j{f|jjdqB9#G4i8G36JPlK&WyWESG3~6on^Vk=y_)~ z&}H);j~6yTb*IN_bXg^L)Ee;f-FT-Q_)c)8)gFyOKd7!eP4czlN>cjF;C_4IQ}WT2 zZ{9-4kubcnP(6n_=UnoLanuRP97Bb`Ne${I81%&{S-rAQJu924gBBivj{?D5QU+=8 zluH6zmv$=5uPju*crO+3KhI!#HWZLJnh*-Lgg8#_gB`S=crOEi*Ly|{dorG z*=)_JnCw2wvB~(A-Ru`Fj;JyzdoUio?A|zV&%s~P;47|kRNXjP*ePyQKSiafjXf}} zVtt0UnO{QDnQ+%-T9l-@BhwiPROqfc{? zzAT(4d`zEzj4MT1%Ph!M4DOO!8PyAR<0OL^`_UWp2i1-J2L(Ei3Ytn16vL)F=mP7Id8shGKpbq`>Zx#l=e~pvvse-i_w<$L+WJ zl}?y4Ys=PGvXycVi)PEg3!ljc8OQIp#+6W~qgon~V*b+#YE?^7+k1S5(;iXX2=xtZ z>~%xG&j!)}4qDTa)H#$h?_+)bX4rQNz1Za*hK`YoW^l}_no);ZdjZy8u4>=%izE?aQG5JMY%pYeZ2BGKT|zd zWY2B^>Pl9~!edeBKpw=ZdG3qbzeo{8Cz;>NuUNzw$W$;%0Jy4VTvVraGhI)k6CbNG(^I=N>@4@;E;q z%x=)TwrvLFPd4=T5>SnmuWXte$;&H`^Dh_`qAHf&w!7;z5IjnT0i<*vKEB6&W&0d+ zgd1LIStF z@DmT`C_k8Pd^%9G$vNOTA(kefrPw$HpsYOi({PtxnAVMTf`k<1V@!!#Bf`4q++mG| zkJsXZ3(OCu8|xHnu;oKhzc`pUuU{Fma5RXH{pV$jm|l5LA0bta3;VQg2{34#8AQ#Q z6|6%8{CR5rfplZrZJs*MIxT|6#?(b{!@7Q9dU1z-hO|r|l}J4*V9+bB z37|#qyN`#9{U1m-mZ=Z+*@ck#Z~#GsxYlCWaV?i<51uB(^y*sboCp+xgzenBBC?PJ zyz=rOXx44x;bqJZq$|-Bd^bx~wYcQI`9>58i_P!@!sIz&zG|sCLqd(kTII}HiwL6@ z(g63@fL}^{a4POdCQ*@>>o%smMLjQVr+=+Ja)H+T_`0co#0agit-WDn{LuGA|F^A0|k$r zLxR+OEK?g+I5qwG!~OlY8;dk&8M};-pp8<9(|MAbnXuGHe;Cm~NdLaFO5H$7d_vrE zj75MFLU7LH5!5-4#Ib9%k+k(m!9^+GRrLUd!1>V|l#tqQ(b1P7;AdGB?GnDYYDe1O}hu( z9yuM*w$iA)AUUzm{RHX8GC_x1@CES(+O4w*sQ_41@Z83DXtp4xSL5~1%Tz)MBU@BW z4oo}Mr9B`mOxZ)8Qzal>iKe~R8np-;Q|7i@O7m>W(Lb#`Jg)q(xHr$JzDP~tAa4*% z(&O+t0I;RK>U5uw=_g2cWQul)E!HiQ)}rRTwrDeQFj9P&1NOo6W`@oA%OMx7fIt$P z;M=Wsa}e+*sqCB%g%^;nkbw|5!^Va8&q$JUHsw_>61zYSKhwD1e!C)5;&Ko4cLIak znNie=@0{D>!d8veZJ|AXlY0~av3u-SVV z)`|<17eYml8shFV)k8GBc}jWKya=1Y-uhvjDjxB3_G>J4mJB`jOn2Yd^qo`Fnmui6 zqazn=@ipTPq`Iw*oDN5+^UaX#Bc!z(Xp>`swsLx-;Y;#S5>V2#{dtvs|5v{uRJ4UG zyv-F_++deM-hsBvHA0*1Aj98`qCRJVEFiidDuvb~F_f8T+c`RNg6D?^utfBaKi<4Q zKPT|Kw)fz1ROP6>?q#=(u!4lyB|QfdF6(;qj!9rP_^0H_m0FKzIU$~z>B zjeviCI0gTJx)S6{lKC0UYao_@NZmPxc?@emJf{8$@*67!W$9R_Kx!gT1$<^hqdA>3 zLX$rq?jWSDVB#Q}&;}>wG(>uC3FMB$zQ8(>7LJ&%obf_!`jQaY)S+>KjFaK%Uigyc zhnwjC`rChBIpJ|hASFvViehj3JRiZ2<15lL@DbA=f4hXL;qQUH*EMnqXx)X*=X`Rv z@&;8nuGEc~D!p;OdMmVB&L8)$Kwk)yVn>d6&IrGj>IST}H)FeSrroS<%~CD3KJqI6 zN86R`=y@Z_SK^jjj(zJxALb1VGMQ}Kke87J+mAmHf63DHp-ACF^Wd^d^$Qi?k{OZA z1c?#IRic2T#B^fQUR;z9@cVC$9sF&;>u0+vbW)+m+TJ@sdnuX48F+SbF z7=#ro^VTGhv7aE_uujW`Br8gk%7@LBCjJPXt`c1yn~K}lQ_H1wN-}C|X>^6=td81~ zjn$nrX>K#bk(hq|s5j!7!q~3HlI95Bm>r+na=Ik<;m2l{!3)#xS1?uF`T~>b3tQZ} z>LcXLoNY3x$2Kh^-!R>X_bg5sDy~OZ^9piT%uTJWuu)vuwB>k1bmM?`=v~%YH2Ale znP~{o8JnxJuv&HRezjl8Gd3s!3B_Rpqh=hc9!-2`Y39i~ts|x@e6E2ndAK_e@!0t3 zQNdF(h$ic#4}RtI&+EpmYZGhYGY^$9@|0XQ9bj`Mx3QTO@CDNi>*Nh~v4Dj80{d7> zEdv|p8~&OVwudO|&%ZvHnfe|1AW31si^J7x;7*VW!AIXy@CjD)fa%XWprV$PrP|7l z$vbHk_KHl!2RJ@C1Q7N2pVxyHOWzS0gJA^o9;*t66$EgCV65|FDU{nwDS&#?Iqz%_ zW-T4gF2bdN8c1g16NJlhJ}{oK&%@FiQE~=(#irK=yC4>u2cr@w;#7;9hvb=0A8$Ap zPP7Fgb}d?t$urnO&^v5kH-B<>faGp?mr|N0tdt*+bgFE@h_f_SE5+@q+P`4(SG%m{dL2P#}QMA zhVPezxW>e8$tn;E-m?e(9?}gf5E}e1TyC!%rvieK#9PX)g8br$?ODORf~Y1Kpyqvm zXkvR-$A&kq_F0)La!3i$8;rnvC#&Jhj50VkXt`t%45|}$bJI8MrJ=4sf;{PLnu2wj zt$VkU*VXFccvJ@>ymu*gRwx4zJU{-$;ElcI@OBcQd|6 z37~MXYMEHL)DG$W^9H2CcH=^GWK3Caji=hf*S$)|4$;C#)6LF?(k+Rc!!ena=^{wD zMy3|6%*hw~8o?&`!aY#cDAw)98!Wiofb^)8mGae(X<10DK2KX~X-vW=uVm z8dC-Xw^m^-Tb-K$tuN#K`Qw%J3+V1R#KaoNWrBHPU;uo{GW=W*dlGJULMikct4ZqB zQsr!!B%EvALV@}fJruCqDQWGw`Q~L5zc}1!Fte}W0~svApX&YY)U=X_*mT(yPD#(b zMasG|Qe{i@gMNBgiM>X1EexH;3ZofZ9sra28UwfOKYr!6N^JS>|DrylH`W!w*a#ec zbe@SZ9o%TfG3xtfaD9AQh<$>@?il8L?74z}r0%dMp+I^^rW0?-86Z6?2|Xdg0j)E8 zn47xHfl1?xG^`SMwX1m(Cw)T{EI{a01^)ReR47&iSM-XJ}RNFG-y zJIz|N`etdaJi4|b5}~m(!&?VP51KI@A;nf}$T@lq8RWWJ=?zo_f(VG#cwfkVfplZ% zq!@@094JT-)W#fsIw@LptsLSetOZQZYE+MBDMcI}9~=&J9IPX7YnBpY$c`!e2Shi{ zQcdtwu+(r23-m+H z=Qtt4Z`FvilS*03vjmGnYed zg?sd3dh{lf_iU5~Z-P6<;ytUS1-JSvQ2qx*Pr_@*ed7bX8=&{Oz}rbrDMIlBV=pjN zr$xG90<1}EoNnUAt7&q^F3#n=g;+w~jDG;6M=!X?+ZK}(uzUFaI)cnW71BD`tHOZF z``q;f=*F(i5Sm7;2V9#)X+MVmHApkzIO>IUzoUoe|c zv^zw0W!DreTby+>T`^L}j$%bjXX$Zn1}nTFy0L8`8M8T^qXi!k{hJkW}CTqtJNv(xGwx1+a5*1KaN{7 zIWF1B=3HGVs6-|Q&Wvl8ms_zIjAz+2XeFlKKHgZS+PfRYMNX$GjdN2Ai$di!Qqnf> ze{Ya(tP&_ubFf1}ClIV+p|XbGG>q{WtX0*j5i8Uk4=d{?MQ?{~leE#%gK-Kw#_tH|Up3!1XURo^e2a&TiJe#(j zFkQKIroI=D%C+3QbcT>>%Z+2G><>B{+@%7=F00ZI%PFAh3$&@3&+UbYsT zt8@d?0#BN%9b8g9KG@-arH8^MKiM`TWPxe^^oM(r>T>kH@E-y@WFA^&1ok3NYeZO0 z&rbJSjzUZ~j?-`nf=zIi9gY#3dYWgcOdh_av?)t_!}R1K`A9CM(wVOaE zRBahDD%h3}08+Yfz~R_D`1VUKX;dH#YMv5`jT$#C%2k-YB}n-?Y|!2nId z_pO+>gfFr-{k`81-B=`uTc4|q+MqP6TMX(jp9B76g|&|hewaV~5O07AVG5i+EenA5_=_ z>l`i*?&RQ%Avb-=hlRR9nK&yYa}ecZ{dLQhaMA&AD*I|~Dbt5}g~hqTV%=3B3qZVE zbumOu7F>0-pC?E+LMXa8=n;PrIB1v+4vJ=cKhjoy2NA$PvuySB?J1)`s?yy@WNKuh-KVY?gD zTPeLS!@b8A7Pl$?=9|v5f`#LAg$wGjM{o$y%r&{x&R$MC06Si*P8VfV!!+j!LX?C9Fq zlOk)*oV7JQ>pQ}P`|oS=8Fe4e{q?sSbaJp?2NQAzOn1<#u3DLyZ_h&x5oY_}8;Dki z{#RKo7jao&lWe)Bigg>V?Sr|$-ZSj&V)g_^{nQEAxGt%~mZpd5MBNy29 z+(t@Z-4Jf@ae2`OKrw9r-SD)_b^K7-e$mQ`aB0a2=vz)MvDN+-&TALH!g;8?X zj(fI7HC-+QTOsXp%*MZO*rLj4mX#1nC{S)>{e4uZIH+#zn{4~n8eOrD!LI_2?IG6I z;DoOL&mXZw05vz&%C9xL!j6EXxHOBT3A$g@IsB~mJn_$>?04-^z3Y+FcI6v{KtooK z{c}Sr#9M69O>m_B!`qKnxKXXCRW_*{6JMGp&Ik68NmEkT+sAoF9hIs~D}%P3(yin0 z47l0p6Pun&+D5hr>B@^zgCEn_$71dTl^fiNzUGp`X6kn1i0Ou|mFNeJ0F#0;Os0SJ z(3g>0Ya@?+v?t}nG%5zC#=}oW( znLQh|w+=Agx{tR3)0Oy^OReYNUGX?_gTaJLYguD5X(-W23Cr&FU&$H#Ije^Yqh)Cl!I`#DFkD7#!PH za;^BLn^x9ya@6P8zb(!A>BfN?mYf+*H1?@R^QAQig2hCNoccb2!v1*1w zjZ)aQC}CxS2fJJKeH?pdkhTxiON#_z4s9sC1czJXLJSoqI+qOBU#eUGS!epK;x+&G ze^JL`h-b@p{Hexa3&+H1V6FRDrM|C1{_(H>`R6|#7QG%(4R&wL@LjRK8W3<)RFpWt zvzttLUu(ai0{?i>O5%v>)h8)cDMd{)r~bmnuWX}(vV~1f(pOafzJMyh28Yr-TU`m< z>40xF>?#MwueKS?_!ZTS9ZcZ&3}+=4;zssWwAJgHF0fDieE&{;L-oT0m2||_TCQn9 z+zvBM)1n&VIeFp=gt_UH{T0`PN2Mbwn8WCDbJ>y~(&7ZAgdpgG^^3A8IQxd`%4&tS z3K%2*RA$0*!92pbVc8s1c>4}q4VdeEc zd;0?GNg3+-78X?Mv)MJr9d zt9%1Lxt#ISgE!tID2dQVmCplKG7J`6vhsNah9Z=_$?*Cc)D2VB7pO}pV76MEh>r?W z&-~aXOp-ZKhVkLa1O1s^!LYM|D2Lc2wqO9^)4^#(9H2bk4~Kt6bz`kKrFb^bt1uIL z(=u97`IJ~ftfL(7-;?LVvsE80>huu7)^mwbSmdP3*HBunbzERUzNXsVqW79zxNxY zy;fNa%DD!ckVDE5=PBY^7R}406S2}?e*5E!XXa$2l!toeS#|{@7Us#f=-I1%GwkXc zt}D(NKR2fnK6#GRUDCn)naogzkav9#t{e6N9l25!pRnHVoJMoqe9@xM z8x?JD9eM}?dkrs7+$aCWb>%ZkNM2T=;Tz4m0{tFk?oQUqL3*#?y73(m31Zz=7vF8X z2bM0f7d|&v2Vs2y*Y^(;cb{*!_9_Ti(EDA2a=Lx+;IXb?30&uN)nW;%a&_itHz>8wF2e zA#g=SwyvcPOS#mIm|@YI)|Jx>0pk5efMAMwjMsvKC3o0h@bxj)9Gh$$--HS4#@=dK zyp}038I7bWUpzHOfa^2OClg)&gk}Hy{Yrh*3=0P?56QY{^U=WUA+s0u*VJ}Oi9mIw zK1wn$=!jmC3rmdI$^`X7$iOe^DVPG)l^PaN1spS07+Up06V(*L*q}Olz3>HZoI;b8 z)di9@k2E!GB<_-HfuPMXv{PNiULPpWJcEikKNIaeAgqY_jw~j z`-Z@$aP6XeO>c;*ZTIZ48?w$RFaXv^JVIZH42c7~N9jqbYBIP2gsx7oSSS3~Js@Cx}Lk|I~wIlM*3w!Iw z9j>eho1#>zo`Yug=&49rP5jvevp-?^oyxn~Q^Y50Y!CuNrs*4^n3DRH>gn_i{mz@+ z!-&Jwc99lqr0JY!t8wEPmhq%x=_jfy{9O^(Yo3~R+1q57G*oL?Vh|WlW`_L-)t#$l ztdHmvB%Phoz<$p$v$uLlUV5xD^*eP^W$coJMC9n15f*Imu?GZs^?+YGX&t{)D3vQ% zXcLY$r0d&Mjt`VZdn_sTqYBYs+?3jcg(s2pn=sJbtatW+62r z0fuNJRp{zfy|(7bD}w5?aj^dl>`Kk|-t4znNYI;t%xi}LVgZ%!g<$^*usct7YIS(v zc;OjoQBwja^W0)FWKA!9$}2~*7T*4qf$zBy-X{kViH#`i_K8mnz5WZ>l~V~~1x7Pi zSrd{)^?=RAn;Qv(j(;a$`~4%s$6u(JDk_|12kwCUlO_#+a`IkWS%&=ztY1FRAO3;> znw2%*h5Z;JQy*M25mqt-29vsfk*bmiLf+e0wFV8{2;8 zhOan#@7ja6QEC_PoXIy%z9}AH{qxh8x8Fa~B6==-s|lIMwk<)>!2jq?zAYf!FRG0b zuwTDjQH){AOlc0|!0+MG%2dzHL$pnP;v@AF))mFrVouoXNZitC|LOF)UMYBAE$w}} zwIQq;o!n&duar`PfR~}P~cp<-6S#7)YrYZU< zb`jQ%)j}Yc8Zt6a?|TRO69Q?LRItfpzp%HiD8@1(UpF1Bnjp&+t4KH|U!%_qf3 zST|P7=ERRRWl(0Lhtmk#`8)+;UvoHq#P`pBna z{tfF!`q>+CEA|)z&YuL3E_eK0+iX3GpRyuhU8$6cMFZ`(k$zlrGpL^#q?Y20dD(zMAdms^(P#MehM=S{k-fl|IS9P67VyirGRzN_LxUFMw2J z>4gZ}fcoVItd8^FR)r=@4=GCLSyOT!Vw|h(t{{HUWal$@rGOBYn;ZC-LgEXa>{D-ZBlT+RQkVE2$r?7KrOdz7ZS}lrz-V zv^FyIg_~w3=g?;sJ-+z>*Y_*yRS?W;E(@RU(a|}EA?>soa72S1U&x5-%6e799*5o$ z3v@bDPX4vY`lN@2#wkUAx>0WMDBi4+K(stT4MJmdVR^bOPH#TlYJKuw{L4oSHD3TW z)Nv*^uZ`-E#7^eWhSre#JOksk){V{OdsW)Of#}hcP3uG~qa%yZ3PnyjjJWP>t{r-_ z(w)Ovu)_q@A=eg)vCiztOxd5f?i@xIBdz^-*&nOU5~_y#e3Jw(} zeQ}mcmj$*p4Aj1?W78yIU8x*l+f37xwR`JrMw6~()zv1`&`C}M)|Fe+)ka)=2~5 zAjncjHp(?0tz$lYf4g#96VHxSDA4mPX?hK#Cl=1?l>#b3nG9h7fAdzu*o?B zPIAxIXTpDQ#&ttk^TxYp1o(yRw2%eWbjacyW;Vc{E=N9H>JOfx0it^C-u9f`G~ypv zr?lB*b3*m`>#v`$xZnkvPeZU4h@R@Bal-M?vgw9rPv$}W3G2)LdLzJR*$@*eeLP_OUSPTmJU_ij>}srhJ;`$~cPyM8-mGk1OU9ZJc=W1J{l9!k&lrf;@e^ z(t(q1nn4z9GlhzMGNI`&TzYAL#o2N;{N49PGSn=^Q$}QeI7}VgA0N1GtQR%&?mkE9 zMTKTWy%z4TQDlzebI&)uw7*(pksYfi(_l&4nmK@Su}U4O@mK`@z;&llf7T&`wSN;i zC*v^k%B_LdN0!2#aIuB#PW_}Rr?fmukpd`b(HsJn%F-xDx=dIWUYsVyE=#>4 z3mM(r#wuQs$xnIlPBmcC*cvS#dE=nHf^#uRh8%M3EgnJr_VxXWGet1&Qb5AGA@W)2(>q69Rb-y9Rs)j=aX&g?cRk(I5Z0ACW)KJq%X4cX$*yI^ z*udg>skP(r?t!qb5J9>?6iCBC+YFH98eO@$A~)ER!8?D!`pDSw^F58Wrez^HXUMQx zgCr}x6{%~DdhA>I_Vvmsw7T+YJ*v%#ZQmD2{9Z`ji?x8q0DmQnf?myxzqE`UdxuD%!wvwT3a_lKR{7%LUvqt>FT6&D^?^l>|H>(*cH6aMpVtc0C>kbH7 z-6bBC#rxYYH^kwB+yTFuYgdHx!a=sRbV#^mJiz|kO(`7O281B7a2 zDf6=9-7P>}St}1xhU52RRU;3D!hzPAW*mxlEZ`)pE5%3P28A6A4Ww_ZD0Kb~8e**C z_2@VB?Menz@l-f2kWTV!!A;-~P_B@%f;e#$6jyktWFLz&)Vl0uGfmF$ofChO-8|3-&`w)5NsZ2wpHdh?)LBV%B#-krJC!|x^*Bmm(sJ+2dv=`_9KP4 zqX)4xNfU&9=L3b)t)}I@S?|47+v(|^sP4Q|AUkVO(3d^Kn3?69xh_`hLn!7KzTu5H z%3|prTTGr@L#P@>3zSYLm5}(tH@x$zQ~_NAq4 zi6dv61J8jC>a;zc&PN!p?5!(aLwOA0Ap}`}SWdQGr_?{k+WS7CdjC4U+@Q#neXRks zxb6(Xm-%W~!Q2}J>n!>7s`LHR_bW9t3&$=fJ{*1wDaWLeszJG8?ON=o)%yPHmpdg# zm31kKZ#SVI!g^R@+8FdTg}^@!?Rnt3krA=$@d-5#vA8qnJj=xj8++P9#y*|IAOBNt z)QzR797F(lGeNO-;5ZKUbayE;v~*gnA6Ke4@udp*OH4Gsj1#iit?=!4r)H4S2T*@} zzVVDXABM}(_QG$rfIm3$^o1}FirT_SfBoOM(y`VPbaNZpR_Gx$>~pXh!OmhSK|IN4 zfV%S%-8!@lMA#@=1tM{3lh&tI$2y+XHiPoHnl(Y-8;I9dEOe1#AuLRSG-u50CRY%20!_YDEIkzl&D zNROJnM@utK@ENtvdb@QjLA`+L3MM(PW&c?&usubA)r~Fr*%E83c-Gg7lN6E0WO}*A=tg7!d(fR){h8 zf>YQ!evR%40pb0HZ+J%)id2wx5QX9N3N4LupIC#@@LTEF^#NQrZf9lyVHXY~EZFsJ z^qgozrYfTBEIOn5f7-5P*{&P6{t{mRiCG4jWtLH9E`lVg<=E~nNlxeUv#@<-9jBtr zU8h11WZ!d7S*!Q})*@a^r2!qi*-cfv>}qXKr(ylO{X@?-7^za z_{g#oUj4UuXbZi22^NNC8jum#!(olhleul__I2&QPbJ*qg!kGs6$5q1S6=IaboC7R!s$bUDo<{8N1{wnD0w%9%;FMehBbcKVhn1v8$oNN%o^m!MUMtW{WDOm3 zO(w4OrWfM}s&~BG9u#{bC|n63)#crHjiHG<6msmd|M>am1JqmZihERWZD8Fn(hMMT zlv1X&Fhdl$w>>KFi+TW71CygBq2V(6ytHdrEPf)NfhsrYv)?Vl30SfyV)rr(6&zq{ z_KL14ZhN9Y{n#0Vl z8ZJr^UyCb)qI=eTYO&nB?|(z}PS)2JRjJVB(%n=I#;y%~j|UEx!vg0H|qD! z>*5ww9t}T65Qniw^918{ja8gRFs(OHhi|CfkuG~aO5VdZWszR6RQQiC^PgEydG`t>;R+^-c5iqH}>8L&p!n`DB z{a8_bNA*UQ@%~`JHcc|WjByPC-%G|mp>`Q0`%MQlC8!1{7w<${-BKz@2f{t=>GCeW3bfp16d?vYEom1RN&{;DAgy z;a%__7qgzmh)ZT`-p-wU3~Yya$W>~uUg)(|U`J5(lv2e< zIP(P-ekwOlXYXDHXYnTR@PX><-`@xw?M)WJJW=r3A`v#L_*27F^KS3G*S#VAdc?dh z?AMAFV3yasMX1-7c;XK9*z~5|{0FMHx?JyfFpv-vI6K#nrqAi5&{wsrkQchOSZ}qt z-mle=(0qhW9;*u64M-@g!;%QAI&R9#zM=ZJqJE5PO>Z~o}H$k}J%oi928#5NpZLIwU zo&Xh#z(|3u!#34bYl%}5l^NTxvThpw{<%~q>;mMC!B7qIgyS5rPE9-&EtjgP$yR&) ze8gDk44!0}grVhmdXqPAs8&+)+~cjg`EuT zSDLSUy-ab~ES7rJmP*K_6-fGkm7 z)@c~|RNujSVgH|BPAr#>Jj!L4(L2Bqxnj@uXub|}F{%DPDa|JM}Tf4rF+u!WTp z)vN>@_^nA+hyyUp5o%g}-td7BSp8S~DZ~T7U<$RCfL}yPgjI_(0Z(43mu`HMuKNNk zp8z(xc$!&Zp107%y`WWgeP^S=AIA$TSL3+h` zSH|)J?1*`Vi0NSKlVY+VJzS<1_dq=O)o$|WUx3L0U{1|V&C*(gKc@FB%){H_Wzem? z-M@gn5yII53oV)mY%BNTkH;Nf3Y2BYSQ)nV5wJJXinhS=#3^TN9bAxi)UIBssJIi! zvuW?T&AkA7LrXlkmE=8E#emM+94K8`&m4S$9Ay0?U~i;6?GOK|1*-#t3MBz;=mqI@ z@Cu=+(p{gj7hrEpXxpz?Yt={WwFJt8(@zadhoeAE7x?vOTlvPL?H1Tvp=x$>c9l0L zn6o)>4ag?e@~-UWJFxgh2JL<;tEUds=qPtcy$$LRiq1+!5DOon?)tljF7sOe2H_zSQTMA4E-Yu-!) zJfqJfaFw1|8e@jhz3a&O0_+4I^Y~>cp%!EOBCR%c5&Wk1LZBEoS=ukaPVlj|f*T96 z!Mr3Wt3fX^%^rx;c*J1i5k4k{gC9y`^SOJLTaa|kpfHf2{>bvj6MU?%RWuYY4+>-r zvKnd{q&kh7sOU3bNBEf5oZ%cxUQsl!GQ3dT)`%&Ud^dgN1=tBbwiL|AxN|7plDMpx zOUcf)y}$Ihsq}gQc7l(sIk>FGm%r=~;Hs0o7#f=ya(rg_Pw=s5KBd~qm7mWQ%jHpo z1P)7e)cWjY?^Z;~B6Me2icjrg0oTJ$f+kOp<`Z7JO=0-8%6L*a<$?%<{a_1xJ%nrU>9I$-=4lu(A$R6H+`5YS3|8qIdy2!N+>6a6(aXocPA@@iu1FGfpyN z1)rU<6MQVH;3LLeOu}7Q1cI(ZEA>e5n$Lip;A1vvG^ZFYFMU*{D-azM=0ibk_niNi z-+u}x_}FC0NfhvmXbiGKHq2YE&}xJBy3&E2;A0j`f`!OFRU>tLY-z}#p24kKZu_?j z2X=yw1s!Ejh~PWWlwgcKCLd~%xcJE8XTVPIu?RgWxpZ%vPuwE4F;n+Zz@7y&_s>uc z>;xYJhA3LR9qy!7JNYx21dc_^EO!maUVxq8V}a|!;VM&$PiDYN0N88WEB=;(Wzs`KEm871#+r z21SWovkEy`y>CRJ)~lVva_kAR)vV_cvkxpLu|Lj%PK4VE9qZSaIR--iVq*a$Zc5|{G9tF;3=!N&yJ zXy7)gDXwRRoxmjp*@!r7%Jtb+p5SA#RaWVodM?^=wDfABT`3qykL_bg4(v$0GWcLf zGKQYCRu{NMUW-Otg>WtQ4|fji2p?lCR`sFISSE>}U;@8XU~UCFNssKnGSlDb{9yXrmw;lNJtvAX8Eydp1VZ;3FIcbTgbzN)mc4?sAu6MU>xd^o$b zWLUYJTT>amLI}`ei;p<}k$5Gk&kJIWvn=(Rt5!-Nm{?v?^4#b4IIt6ZjH5!q!PtAj zI9N6XrbXUu*rLt762E|*;A4<#t@|LA$^^{1ndMKgQ$dB3(5PUH_+Iw+1es09fS*r9l3ie8q6qYiU1U{u?H zObr{V4`9FcaU}RAv|#RQ^cS z42St>y-u)->oKQ$Pn^OO%4#t9acc0n3;6C-v0zP_WEcJHZ=yF?nZAoh-DhbFngvclnmjhNU ztSq+!1OJNc1j)z^MuWUUzFF6)aG0geFoyjaIM3BZUW80d_6Mx*+Pp z5Fbgt4?=vyc7km99moof?M+4;(4>lMTB+hzW$j`%d#|uYjE;@4~un`uV;BJ7LzMh6wHx`WQp6&(gNNBuKPf0^@iy>F}+gdhy z9bTWbf4{qcov>zOviN#s9g@Xc>?r%#(IqM~t*vLjfSoX9aOzcay#z_jIb}};#Muh2 zg6~>hy#hN@%3B~oqEC8jkx0O7VLnW>b#6s&S|PszJE58?jK6|c1k1G-vjwkdoTkSB zO1_(g`U32PYywdnUYnG1^z=Zm4(WNC^_ZYs_5qR$*a_V>L&FL6n3w;5n=bC}EA4d%iwp=`_Jt*iUj zPvmn+rEWlv449DIgH0@s@ZorNdS%xf01~@FN zzFX48#fzaMWL_C<8^UEC>G#rZ7k0NhJ8WIZMe~Tu-{l4bXxo~;!#YC}BNX_;VJspe z4za=(z234y%feYGe(G$|gPRo?RbOYPS7HyO2=m%OFceBkX; zAxMe%%nZ2ku7{KD{tfW`Z)jg;rYjjdtw8* z?+g5%z+5xOV6MOsmVAcfpsoJ+_I=9lALPn_#Qll%&Ko{GK)HL$UG88y1Ug-;vh8`; zr)RZ8&=x|rXSNxLSo4yR1!R@UhgBdtZPn5D=P%zr{QXFmFNWujtFLGgA7=L&F^H|o zqnGXd^$pmCeyI;MZzy4{1s;J_V$W9$gQ@4pRzP02z@9!MR_c|(KMz#1gdW|-x}@9^ z^ljAy&+k8CZ67Lc(CqV(b_C3z)m(DZDkT>zUlf6E8*|QZZ@%Q~5qMhvIFSuln-}Jp zCbj8FWC=p9K`tRIjXbt~L!W;zysc~ABgeBB1>H&DjGi4b$Oel)VFrVWdZ_Qku^ZwZ zsVwLbUJ;*71am*JU88|N+G7n9j@=UHy1*4f;Vd!q5<3Ed|90W$hJ}6A%?r3ANxQ>o zHpqVp4PmNbe?1d}y?ZuPz(dW_&fONbF0H`uBpQ=VZe=D$Y?TVg>!Ai6$8L|3 z4->LkyEov)I*!n3&n_=caBkl8rK(Rs1c6kG;;Hn*hu{QR|KcNF{=)yD3!Ah1izd$u zIxSvOIVgiVcJlj-={0Ag>ihrw|MQ>!{o%j9eYrZqd50_d=-N37H-R6BmTW@YSuKGT zGV}f5_=4-p*XJwk^|$M_Vu1qh9&suHkb&t>5ZZuv3D5BU%fkzmk=d*Ql~!gefsqR>)I6H9jxJrGrh1` z^TE=@5_*-9U|bU0oeB4^t95DS^$u2_G6s0p!Urwn63GF^0v=}6?i2~W!ut5>!}o9B zFA(W1w&|(qLt+($8;8|$T41m}=ekN8({8VU~T7S^>H<~vyG^QhQ|w~k46n@**}4?&y?sBIEA)s)$D^z zrh5%I4I$0zP9NAexQ=iNO?^MMR7i%4=+LiL#eCX}-AONc1M9+l#GbJZ zDiEq-6UIIi5h(Z^G-qcM66cZSI^w*9S{a^9O{GWJlU80nHI;e_RvuZdk0+KZ-xR6@ zP_E!z(hCHl4;qV5s!Q_Td3`;?S%tILGyAifRd~^Ao`97>@_n>I-21Mt&nI?q`8e0? zZC!k%4x0};cfvz)`1|P|mV7*N7Q0gQ?j-HjP(F{5y(TuwprrXuZp90%PtSUrSM~L$ zouK;jR$Eg#-FmoN9g9lz#<>*ZqC2zWURC#{IrUp3^NS>yzfYaWydb_)9oWwtN>{#9 zhW84~{&vF10tjo3KCXV{{;N@X&B;@7XUY72weG9!A5pg%Fh+>ty#SR!YQHRMhSE+P ziVxoF-GAM$)|V+KjK8uEKZ`}{N?s-sJm;^ZSfMFLy)%92&6zxc%gb}&Ad;|3Q@B;b z3a%MMs+2oLWiPm%E)59Xo<#xgiphHm`y?ds>a8*H1C?1o&9<-*?oWhmr+^fvPxpb1 zLuXjd&_RB|!xHwZCC^_jyhd(ug<;vTfv!eq?baK}YlQsBje5S*p5ZUo_4U&MToC`B zOu>nZKY9yjSWf^n7H2@-pGJN9d1XxK{vvbIYJH9F$$edXK2n?7N-IiyXL#u=&$%=- zal2g0uTv$OKt^h@kgK;Ei0XqCf@jNj6rkFIa3HD||u?|o4AS!oWSzfLF zx6da+5FA%Ylf>Hzuh0>>;mv}n)#fkEd!Gu;^78<$Td5rYdHmsOK9S7eF{-C{D}X(4 zo5QE>3}I6_C7V86Yh)ZnW}L&;V>XYF@4wRi8@3a7hSiulcukPu0wk{ig+w}ps`mE4 zenQ)x*iSflpCnRi!X{SuF!0#qj&^wx^#h#Z+Ydg0%STi82s%h5gw&)ZI9#sqY(6la z_jdMa{&9kXHTR}85iN_5z@K?*mtG~5$Ti)WN&5!Z3G_y_fTC6B5bWr0@MbVEs5j!RmmF4K=n!1hTpa=P-LE zLrc`tou0UV0XuQO8Uwa4N^Qf;Z@;LvoYijvBrdS)ht}(aeMKkJS%Tn5f9F?a%Xn)n~gjIjFPC-Orx4uSkiirDaD3Z z)Zs1m58ZGT7ivKEJ83O>i2Y`n5{zEbHUaLc2Ap>n5B=H_ILR9$BCEs29vUsy0*-{NE*~i z^-5QeXi%U%&H40vf-J~CZ}Z}^w8Py2x&$q^i58Puqt`lY-G%BnKLa zu`e9HK&DwNkC3scRA_*D8MyxgPqubsAG_*+tAKF{VLz+i)`1`9q!n^)@4xu>Gr&UN z&Y%>WytRH6A}XStxJV_K+aB0go4+5q!!J5LJq4`IR7?B?>%$3hZy~Zk zaC90F+W4jlRv-Ls8gT%W^^xT|0!%eQm%&T)KC=s=#GJgmi6~a3{r$wX4i$U*3Q*Y) zu~NajdUrqH#mf&3(gREO5Uw*1ws4-IXcU~m*`_zuuSAVp+BSLMk{o~GiJOx)3Ki|9 zJZgtWC2xT;;<7qDnc@+Lf8_B>a?8PI+C>X&%(*x%gwCE(>jPOGfOW+3d-2K91A=kh z`s3X)DZGdjI?~#mxj1it9m#mFUZc#Fp^B#GuF~>1(WE`#qqKJwz;%M)C(jBU(+G#s z``-@lf5l}IRBdB=XuY0}>||}$8z*chk+uK}V+lDRe#3X@okqrQk)7De5d6&pChyg8 znmG0`t2Zhd2%qhNL@)q5AtG%s1>)7XD7Oj%3yJ}buNi+xeSf7RpTD1YAwoEcUR9AM zPNr9;HG?K92;^(|HR}Uu6ep-5RrOhuAqC5AcA2R#MQ;MZmE=xM@|(oDBk7NcW`(!# z+i`piAK;@%rLHDC@AO*uE4$iJX^a3spHZ2B;YewS+h@b8Kuxv`Dhlf}Rx=mQs-AD`!uJW(G#9(c`|Am;0;a8q-AX?!yUY>f2CNjg|p>KcFX23 znz4It-v|~;2^_hYXGiqdmy8Hv_5N+h|Beu@R?Y4}P0vWJT)@<^Ut`rYC#*Pm+m}%9 zbbh&k`gp~JcaSR2k!^?rQ*kcE!-UG5wEDc$7Vu9<7drQBF)4#ch2>S~i$etw;4+L5 z;}HG$&V=9_ri-_cTZ8fupFud)nSHQ0H|>jMOvzP4d!G!yf;zEOoO{V8#WeWrvfder z0j@G*omSP*O>(;f znHg@WvT<$LzvS5tuq|l7b*G-}&&|6cjCYu*aMF^!=5$6@e4ltd&GcMY(y=wDrxPcS zKp-jLl+8||=i2iMt@JV=4`j{F?g7+^-IG~|Kz(|9QmPb!wO>vl$trYbyy7dU6HDc< zZg10_`y1)LcM<* z^@8cd_Dwf%pJtaeYFM1cf-k+%^wHr*cc4xjzIJn&?4#QUzAUh#Tkf)X;{Mn%VPHD3 zP=x<2d~HRNf%67po?;4!G%*d`d8up7S+<_DLAH3wtusw?f)2j`^_LKNVD0a}g}h)o zarC^ls0$nQ4EK~)_2CR{U<*6sjcmNs)GN7aThG~3g-q~9l{J;I3Sy1-APT0#nr$o! zn2wNhzb^5{{dG{QFeec58EaZArzB&uP}dr<>@a~Dh(Ni_?0GN{?OGxN;T#I;m*@N0 zCoh;zEL7?fd;p$_;Fq$cnj8H4fT=H%aHli(FHn5KqH?t58ScqjB;i+;SlGM6AVOoM zHb)PbPApU-_TjS{JB^g`ASi`WZ+*(7ggecg|8$%uAc;2!@6OTZXn733w97tNAovyC zMp(%aRm{DIzG4C;PkFLfpY1k+B+-g3Y;J$975r|=!Gbg5oGOV=0cDjG5Lf`#Ny43m z7%!NP96azR%3&15nG}Q)9F#vpIu{=0P7|vesB0z2+k*!xP$m0#Wiqb`Xw%bjl26|3 z;m%;o7feSajQ5`U$zsxRxcOy?`mTAmoaxlTNS2}>kCR>T=5`*UpIRT4;f_MhF| zX~>roj|-zO1N&yMso|H@*vK$aN8lM=CA5jdpMIRcl)Uo{$J-uO2D^)+S@N6n2(@r0 zQ{x5G2_v@{!BMo1DjZjaQnyxMC=_sgRS_CT|%C564$)aEy4f)X}i|l zymB1*N}@*hUIEJY*HcOJ*;CHr92@ z<3F5@a7=NQp}q5>D}NvJ!j2UFtD?mUB`=#)B3$zxO>UYaWW z(+WCdbDjVHsGf}QI;y>pM@mss%fqKr`6!$W&pE;N!17LJ1>$n!2~u9ZM{bx;ZG=e2 zd3l+Ej<{%o!<S%enCXNoyD%aB-JF<(K|Q=AYpaHyM!DZen?V8av9#kbJZsJ)Z` zIohXpNO9q2wCO2(fqFEl?&#FljBpB>5_pRb?wTya3l;Oo!A=zK&nr12e2Uk!b6c<(KJOd$5y0oNBu~)x`^u4dAm+uOw(7>HQ%We2F zF`v!dYw!&`T`AF~{QQ@tUqJ=;)EjH8HV4;gIGx5*1+SiN=X1YM-NB?|^q?))mHcbG z8t5?oO=p8Y-!wpdS^6E58UX=V)o1xrHSe&1f%)dCRc1Y>b{turEu}1m3yF)V^P+hOF=b!~E_H);=P6?kp9u zOv@)IZ}wk(+4#I6`i!H}STlgk)xpU}aQDdYhr9%!4mSR%bLVK|X;5ggLeDGL;UlRgbx{8+0?6PHJAgl{(yI7#*G=gT}0=noo4|-#0K3gfFZqE;4UZ@D1y5 z0jUj;<3O8r^e;@`>e~%x&|6*%Nh}f?!F8IH<||=h?p5ZALA_lmKY&H&ra`-J8Cy*p z-hk!jT-awtoiN=fFO4FC=j7Gy1e!_JO>BYN1;{($!qjET8PevH0S^Pe7gZ^8iNpc{w^0E5G4ufGYDDp!I=Hv$=}8m{u?7?LJDzG zUcJE9OIEn8=ADJ>bh-Ea=M}PvK+;Mv_-wPB6Vw5W93R%y!=TO3>R(s0H$b@pwuWF= z*-P9w*)T{wkiEs{y8O?6!ylxPHTIa(T0SKtt0ss}{8a138!iqE`0WNJNMN{0g;x1$ znRO{Tqb^#|G2@gv0H%N7zrW!UeDn-u!E?l!B_0vJ(|0-;^g{g)aQ*uduqAOWSUkLe zCG{i+yp(s$_(X!C2gCaKxbYBscohYMsff3Mdas3n75CtTCY+o)FkLz;%Dz&fMUpXL z<(XmTfw@3E0OhF#47hGR#8g7ZlVcwYmn97$A8KFmjlPVj9C8~UH*Sw%KqFe4zAaIg z74STxutG^tr+VV(A8(gVssY)`uG%}Ox=pyQ;!H2Y;fLLJkiTKwdV&#>Mk|%rgN&#% z;;g*uNx)?A*FpSUX_8r?b;!}F%?D+LNsFkL#UK)$D#%18_g&mos?8o!1vW!kJQ{)OvaG+eN#)Z;8Ar8;!@Ji?(q zts1iRPzvz*Xjk0vA$A~0-Cbz2Mjafq#_7$EU|YSMYIHwtJw#vDJQ=YyNBn3Fs z(dQUG-1wAG|G4%L14#0~FV2}QMuxfvQH7)s8$K2BWL;OnVE~v`LuQby;TZ?!8dG8L z(^cqHk^Xio9{O^y7drc<}ldGT9AZ3(*??+n6wE6 zyXG;KeTCDM99n7#0#RE9iCH-r#S+1CD2!vP!!=S9dTOu1q(RxM0Tiz!_zdD>(PpQT zj?a6nCg(sfr-4Y=eJ98OGZi>jgh%n21t+$3qt+yHv49{A>D+Z@pS>yB68kGq?PORV zA2%?C*;%}P!f&}kj(96QjZ8j4GJt^XG5xra&z79wGT{oqw4|vwxX%f{YOr%noAKs< zL;6Sm^Gc}@RJ54jQ7xU|$}$y>b^00!{Bxd%X!zp>QI24pY;1V>z~B?udXZVHw%H5U z&3dfAA>BHvLinnI#01vH0H#7S`JVWdAY2c={l^s-+Ou!0$aRsk1f9OL&Uy&05%H4; zSqMzG4l7vE0>4lt%_^&hOzOJ_@C>cQ&EV;;Ysz|sHCXkwz7SgQ0eKu|kY2>EzF8M- z)&&0ob!Eszb6p=eBQhIEJV;fa&DT(sjwg6Hsqy3IjgAaRLa-QLBrsT`?>&G-tvIQf zI>g2yll*LE<$qBBS(awVdY?}pLn++-Lbu=@8dw z52qxhotoXBExkVJkX38XOl$?AEN|zzC zsCQ|BG2rJ8_e;-4mU%<1KtN^gi;@7`YK3wyc-u1lW@Oou3iQK&R6%T0@8aWQ!t_;( zKEY)~M3se)H?`jX#pUV5vJ<8SW^>>x^Y=-zFGx@P&IuA+GW)9g>J2C@#xzlQYk4FU(>+jsr>WHrI@ zmGeT*ERliDCNJKCLZwVWqNF-)ScvTGyp6xf&vXBN^bfy2SP z+oNp_$AA(73rDHWtXGn#BWK^1pq|-jd+*)al~eNBavjDrAZ?pzE9UpICAQF;rr)#1 z7o;G z{hph>AkF{20LkZTwQSx#h`^v4tZafSr9RIPxM;H{smsrdZ1uo|?;+!Rm0AYBQ&K3kfnk7$CKFCSIf zEBT1xpps~FvHybfsC)hdiE8np@@}tz>ekW(af3mv6ua+Z*h6}BX?Jv$8K|iHkkD9W zXiLkCU~wszk@BYY_6yRJ0>Bd_NeN+p&M+4(A&H;>3=U8=q&PR3(-)+F-Efuc1D(t4 zsc30}6SH8E`*hZ#n)ZCDJ?fi3zHyTgXNQi&zOFnKaLYoWt8Z4TY0m`uqnftkDS_55 z@8s8JAmUUsg~kMR2eQ&PHx^%zZpeX>q_0pT1g~oo0j%hgYe0R6NIF5f;VQlQ9w=gp zq_5?t+;WLry$~vy{k{+N3(}Lp5GP2p22k86M)2K5LFf{MxW>XuYu?<;eL;HCgnEJm znw_EA3cgx9ymtWQZHj*k)0bTD14{qn$xYJGdzX17)Rku4B{!5RKMr7qkL-n&2An0^#ZVmZgP;`D6$48gC(TNz-$S!8n` z=a9yup=d`}sU4=wskVwRGNNxJUz2^)ZyT~{Sb9NvG*;`V<1{62M~`F%E$r&j^GU5iMJVT~+gi9198J=f*wh5NYl%~ zD*TZe`?{RH6L>aW@A$@L31!-f$rlEs>9w^Dh7N6)N$38-egAnQ>}F+Hwv;|x(vhH{LkK|2&Bki&Fd|i7^ir15 z^nK^b3Yb;N>)FSiocwq+?fL|%@gj<)`{d?T3S>!H-gXMF-eqhSc)uWBd2p@uY}BJK z#;J>q1}lSU8c0Ds+0u_I8Qr!dHQzkrZ3pbjTcbAwb{p`UaqdOaTfK2gWK#$ai@oa{ zE}OLDi&j@jfvN5T%3HmWIRQUnljuu$>u6zAMtBRx3;MV9gF<<$H_UsDF^F1FFmJO! z1ED2I$~p!Z%VuH77o?vzY>Bc7Sa%Ch-%_K+jBl#1^#E#{N{%l`Hv&onijH19`J>;sxo^`kAAvWF`PG_{VHZSNENjIJj0ky}R~VxM!`nNApfTP^ERe zVI@G*;oC-In>n=J@c9AKjj;PNni?72D16PVgKqMjM%E(d%@+C>r0+N0IEk?nh<6Ag z5^L~epan>j#6HII;3}_pZ>uTA3Q5uf$kUVtTLSG}cye>vp?2ZzuN&sw4BXB747pFZ zaNor06Wk*_Lx=0!pVA-iHz4t-KByTMC6I4C7ieY6vnvbU!Go*(<4R5dVGOE?7=$3^ znZ#3r1`!t#jm`2tzw~Te^YK0|RZz(Wrj%;*J>UUPO~9eJH-anQLwYos|v?Oq|=sR3$irxvLX1eHO#MI)xn&SP@V#A{V zC%>~ujPT$5hA`D4a|K%UwBk)1|uB!Xeh4;4` zP5}C3f*)01!``8px{os(5n8i}<#jrx8&1F`Lr`|Bp|7LTT7<}J6JmGImp&eC0XjN? zGP5nOu1*X>8P#*BLMDV5gWp?7pI6eSu}ac4p>1{L*az^9>{Sc2Ab}6}ai3Sbcemur z1$v>#)N18wTohEivbDMCfct`U<8JpQn!vc1x!3Hb(3vsYoCHtR*FKW_^499* zd$A#PYgNT*%|q$J=eHZK5+rhhPj>a;0R!SvA_(38(RL*|cHBnrmv}e%8~Fn^o3y>q z;docFlCMwI+rvlz4~0Q!3)1TC2wUJZn^ny|*s?6Lrg^jDj)W+~nbRMGi~IETOfFpMuCC!BynQf>(H7@$ za;@UU5U>ZNBShD&FdI*j;b(LiE}%icb+b|1%z91Xp8q&;-Rx&rQbXuth}LW)v0~SY zgNq`4x`y;}L^P$2y`I7Z*&P~mN=ef>gJo5di!Mm7kWRQt*iTcJTJqxSfbT8=2k$Zk zk4rMIrRDR>2`AtO1#kAQEq`kvAX3l#Vo(r-s%m6dzT8>hL#L24{BE-cd!o_HJY z{qlUmmRL^3-nmB#<=aINK{Nq$NnzEDXShmcq7{E4b7QDG@ zNJlQ^E%&L4t*^!x<*_hWCy?$C0{r;q#r-%z;p9<|wm>5t8F=Us9Ct>Xx^Y4sY|Q&# zCsrxQuhthAFk|yTJVgf zIocec*HfEbRpq^*8YkAOM`k8<5ZJ_4$&7I=s5V|KkEK^7XYZ&^tW^sZm^a~_WYByE zo>U^;H00aLSK|MH>dTQG$eM*2@tf9US%IlPVwA2d%k8S0!5gR(D;4QBHFOK$L#!U2 zY#oNvW@KIyTu{gdsOMjg?7%ww5NH5i=&r?7cv0W1ikUUL=w$YR>c|cZzSS;$j+lkL zxBZ+9H5XkG)O+JXZ?!epVp4jABrfv6x9XMY9K6wyiJh4@mVT>Zf4}=uk0FPwJdt~< zu7|>0(;kzb@uKJAE2cXgDYlqOo6J})e!`l(6@}0xeXs>f>sMJzub6JcmbaKjbiQZh z08NMITuJI$u1Q8>lJ(A>?j)S;36+9I;_cxj;+;YNuViGJaOXbyzHw6e>BPHh1!^tL z-ew8IM(Hjyv17tXc`V$<8|W_w7;Z1Kfb^@S#My_lL19+WCJ9Q{tG|flzOK`WeK#Do znkq~h*x)QV*TiugYVx+~RcPsfX`Og?5ZNnA2 z4-%3FHW!2Ir0B~<>(#e+cO%5SU#G$5bXp#54_EM&cc^t@1Ev;&?tJE*`-=T} zx7hgK!4)Mhg$-&$0#_&&w54{{sqS^1PV76w$)-zsiv?c?BcEffvscS0=berJa$?`r z0mH6Q)k|A`DS7ZQUOuAO~ez~jLU1A!ae?P%AhvwzLf}MHiiZ7bM48ZRkC+fMYqU$$M zCx~WnSR9Q_JitjVFs9K0j4MZ3IqWvx{O6r1s9RKvb9izbOF+*#P9Ab$B{!yH7v`&? z%Xd^qNO_;mXVCJPl!ptaiZ#Eg<+`{9wy4~RwQ>_bABuAU8jHbMn$qCWv4E?jwlOQB zI~GYM^$TuU1gRtzH=9@-s$ zKy}1l#ZZHr&0O?O=pQT_8^&P&(UD!Fx-A@8rd~E0%>DbP|XR~$!wVt(-i!^aZyi4Vj5*gsZ72WVNdv~MtA*U= zRWknr(~+3QT#lWOeAk%SE7c2lFl5yTV%1&D=X%9-B&LBsk`9PXC{B2W0~gKJ6zD<6}z9i|V5x*;u3XJQ&FK)hHJNX{xH%;G)ZB?v2c zuB&3&2c{!2jmqA7LsQK7C_0eyB$c;mizy;Iz4vq^rXgu?@M4}-Bi(mvb&5Ks8wm*V z=5TpB64P*gu*q(>!Fk9Lo)Q*inf)%|KF7{y9*Jqdgt9UJD~xHiH$2ht^00i}b-9=t z@wQGU_FXVqbaGlUOL{uCov(4=LkD7BcI$K`rcpelLH3Ofx0;>*oH)v1a z?(}QgI|I0=3Rcqa882wrx~0H3)oE+!*d2IBq8i{Sb?O+o$HAgLXuL9tWa#5u^kV4M z1JkFk{m5P8g7GkZ4_;s;ttZS_qr|{I= zHgOH2x-m5HC&Ix{1PcmP(&x1v6eX8}zelpCD z?vMPwD7$1EfckM_sWR9~o35CLH)q_gCfE|rLDdw%g}12weF9ZuFK)V~n%S6u8SF#a zWDas$eRo9!R5uEL_WLgwNN}3H7FLZU(7GPtETcgnJGXHPpTB)NvQnT>_L$EX8A`}a z7^Cu)NhHN~@mGL4V(OVQIx`!ljnG#qu1ydZxUMQS?rzor>P{oYpU6roahk$@8jfI# zmc>}K0n1NC#zxB!)sb8&h0AP^$bD#I!!om(N6CYou)ppx`eo1B#qQ>0+DF+l(eyHu#B+Rek;AgiU#NQq0x4 zmUA1e^u$cOSVx3gn6inteEs9dkqj?Y!=p8j7MwP%G9Cmcy0WlI$2F$kzuoCFu{U!U zf#ET%BbB}a480^b2SppHN%Wt#sL%XWNT`z`MAe)YmVq%JS?^1 zT@Q0T=4NwfbuT)wN^Z>QYGluY~tBc3g|B*A!-W-);Er7^Q#gPAxR_VRorP;J<8 z(a%0zc37I_qEQ=jjPLT;1RG380@Y$Xl6#7IgOlNC2Rd*Y-idR1!vis?kaOd3Mx-(s+8gXu`1S^^6=VC9V$ zL#$aA2;;y=W5FYvd$i{xfof$PMPky%>NO7RJz*!RoGT8UxeF{l9|=^~!ihB9ufA%s z+Q1F8#zM_rcsI zU`RHnhgZMqI`N9>#JX8OLAaP3VjTzI?aujs&W`geK7`2YPo6#>RaC zOkJP?;XXI#@U3P6KM@q}E(afy4rT<`2_IUzE7ROyW$tdBPV74v6HeY)gb5pql7aWv z%zkeGd@&yW%@-WGAc_I{w@r4a1{cm+XHnkyOIs<)4%3n7-RcpH&P`Cw1aiRf=Sf@u zCoYpol^aYiXQV=c^}w7KIB;Y&Q0EknnG-v&vd{P))tQ(u2aA=d18Nw%knM4_=g4uN z3Zl11bs{DV5gZjK+^lM22s}crtvYE%oq%I)P<_)g33vs3fU^%5C!Kp0xPvZ`Se88e z!xq$$P|HwVWiht6s`q(59EV6tlgNLBN24j+IMOt=;W1 zHVEoSSa{W%JqUuf6=P@q$-Bs4iGlICRz(#I&nv7>Cv>6j(dE4W`;4;MvbF&YmXhjYEJo*8XQd z;}|OEYkBFp#m=T8i>Dv{4X5p;vN>+%Z--zd_geeRNMeNw3CPUh`^12_;H3? z^^rA0@qtR^%&Hw(z^B>jgtyw2gZ(%|t%ibk`hX+HML1Hc)rZ=RQP5b*uIBMxYlvxM z1@FMUVKpGZfVo0n66a`I{<~k^U#%hH|NjT|=4627`qkLt%nh7vu|!hL9Ok+(-_Kt_ z5^nZ}*rI|?!GCybEtSamgXVSC#%{y(OMmaHUs2&-9{^>^s_)*Mjk$VaLNK0ev-YXJ zUQ`QxfVvSW*rIY)4e!pN>9ACsXYG6_&JSCw^@|ClAE>^p1F)dP1Lbb)kNJZYvZaE( z1s~Ul;8HtScbW`uLG_sP3aw=C%w_n5l6Xf229-k(b8A+2=KO3yfrQ7#jG8D_MM7|@ z_|QhEX_oN!4B!>it)lBKs8ZpemD9c%RS^=)o^jN2vW|s|%Z(3EH*Pof&I-~XbzzBD z4b^iBAh_J(sOty|+ZmOPPbXgB%D&8z@WQ~vD~^0fD3_!7m7VVwan^TKHv(f@P})jr zc*aF_4O}40Od>91I8eBZzd!#!K%IDjRCS`!Wpk|N$ZT9&{jvxXbCAb7RCn&DwxF^r z)v;Wc3W4(^^HR|iIG;Sp)>Q%2iKVh&k=+i4xCo{T?KB?6;C?`Y!sG8y-3cS^Hz51@ zPJ_Oyxv_<1Nf5!T=dUBVv2&mRbz-T!dB}06(7er;FvVltgx7nVqg1Qa_3FM%hRkEgDu`r-MP@) zAIpq^u^=wSz{+q}@Ogr2(UMs^y9ae*sR9Fs0bf^;P*)4v#8qk*oI7&WhxiTEo%^%> zQUx4*$#CQtlsQ{n@%#%Sh5PX$xcLF<#8Oqy(#8P4q^v#xQO83jU4!Eo?5$h4b0xd? z3KMFf)sQkyXLv3HM{tuYUh9&JSqUGYPApY152ZVu(3a-R(`gC9!1=P_FR~NgQJwHr zon370QAXGskcn$WA(N{gYvzmK<_D+~OSQPs)VZA4_8aH&umV|wwd+1DzjX_DX1(tj zOwA*%xH`V_#jqcn_&T*$C#hV_;`#t}VyP0o6Pm$~*Q`A(oomekeA4LHw``*;2N{N*(ij=GKQ201e1JM)Rcrbbqo$a0)W&jbo0%!EEijjIi|T~0nx(UA zGYha=sMYYq5a44q{VZjBEPpxTt0I(pi^G@2DSa)iFgVFPL8GSHF6Lprp}I3~W`EW! z5E!);l=MJh=Eh+UtHiX_E+)^tfqK4^47f+t;h-`vLj7n{?a}4RL4d{K*sXJi>g7Zf zu|v(2xrAa_gQz7?Wnp*z#tD#q>({@Z@Sy6Ux3o9EurR!UsnL37{2Xv~{sgEKwho&r zuJ_iRG#of1#vIuuI5UwtT~r#sqdMUhz+Qwme8o@3q8FWLbL@2`5T+N?%sxOJp)fVE z6;L#(uEXT%c1Pg2Q}nnubqZw}GFU)cIGDbLYz}X*l&Kd9ov)zmx9{Ih z*gDK7t^}V2D2=uL9XrzF2x=>|i@SwaRP)Z5<1Hu&kny|&1#M{fe}<$We!fhm1^S&^ z2dEQPC5|n3a%`;(roux#R4uV!Betfx+kixMtmBNnoX_X6m<6 z{^^KsSg}ELF{yflxS%LH+xgBkbA-f*JJWhP684_~!ae3{)#8IqRpxxM-*`yuxUm8C z=?JI=-cnr38d&C=Y7wwMDCf{hirIE6_4(`fBQ^zQo>LOAD>p)E71W(cW-JB)W7vZ_ z;TYh;O(G6v#}ZafWo}+;1WxQezkPp1bz%dW*EDqKRM$iN4{g`BTZfG#e~I@dpZ5pm z7kKI37?3;}Sp#SD^;>l$d$12Cje})^2$6J*RCwvGYWAhpQt7HA2c(O4^EVdjPS`Pf z&N^ia$}p|64QmHmW)s%B$%*|5>c(qC zgJWif1gydG1;3Oaxq~5lCnX%?{zUaeVc1#ByJUthAGu`>Vl`Kl9(ps*{5-LC!n(1C zHgOXtxJ&URWph}kSfJ#yF|+EZa9Edl;}SM#Ev(LB;L7_FU?vt6YWGqr4%#WH;+ZnK z^TC4q%Q|(2mT)2YGFh#<#%zn3Hsfr6fV!ekA7w-X<1ojl(r5$Tp2?KR`V* zWcO^W79Snrghman_8w(qfsl~q3+GE5F#Y-06)n%%k#lk=QjCIQoM))ET;p@{J_23*G5VJvAixOpU8n#f5`0P^du(pz5{i1j(v( zH_q-8)H4I^&RHIjkp)x4edg;tPSq*y|I}3CGpL#sYLHE}VLuBerR6Mj z4GF5wpWO1dXQo>GhNt0B)L<>oS%M~fl9iC)fU^&Xi!-PzaevqYhVnclgD|-=_1wD0 z21+k>MD;$t{(Zy!se=?v5D`H=J~#{xnt4}DVrZLQGe1z>0OdoO>_`WXlbq0+$C`1- zP5H1iPtx?SJ4V4n=oQ>NU$97ixBvq+atFD3Hv z-G?<-lK;a4{*&gJ{{R0&y+akqbTJIvDJ&GsG!Am}b#`{b{Pq9-KmPGwPbPVuF|m|C zmr;{~0vJ@eE6t55DJb`Gi|MHp&m*MC%D7cpa>eJ;IYcT zf~QGguhJEAHV&+tYsNeVTYYRwi$5_v@w9iuRMll)okZ*w>zlLY5g3|=jshY0HEsLE z^n`~!V#->2NLjIAr7hU$TG^n!_6T>j8_oCw(~Zqr%mXYB;e?wOgE|(`r<`1$VQd<- z`~dZY+dp4CDbh3JJRsh=l@>#)J`VhPiEavcKS90TI8wr95W$wZwkmWv$cgm=E;5Uc zx~Xvd1oig~P=0vEUYmGq zTaRv;x7rotXbVV%KkywutGeN7yqhz+sjgID~A3 z9AOOts|H{%)u!9j&VNF>VFy-BaJzZ2NLLwfUZXpWo_&AX*o^-B#B_uCmZ%_1(t2cy zer4TY@rwf?7R==)we$z38w(ZJ1cO?t%7={7a>}(ym~*i$;HGWx1Ju{|m%negyJnD+ z=4t`739UPzU?Pk}WZ&$$X+ZQ7)e|*?XHM?>;uM{RolBK1K5_`sSY8AlvuQ!}K=pQq z8I<6~B8aa^)jCHKfeZAruLjRcDoNuZ-zx^mE!WneAA1(!T>X1O6*ac(tY8BYuKRM_ims9K0VEl5vlyw3Lv^{uQDAt3yw z$s|Fs`^^PRfaA1PpCpx5L&;F=4jRUTs=IXv9stu5<*Mg(Vk_kqCp6S7T{MFbgE}b3 zMJ(O)z5K*sKf_r2!>s2iBF;9M75CT3yaYs{6CM{*0$#s?QeOjlM)M_y}yLRAlz2b(3he}0Zo z!HnC1|f=)~~7D~M9Gg)^q3a*7R;Q}?uTrD;Ao2Cc^rSr@8C(@06Lo`U% zm6<`=D^R{l@l)6$%qS%d70&2Q=Xd{&ksm{y+6~G z{!H#Hr8p#o=}KW6dSS;oF!2)S3a56MoFPQSE^YX+sfDY<-rn)pxN zc!c4}3Hbeh1()eL-qQEza-B@0*;{j)uYcY!oXkFEI}1?E4u$SV@vv6x_u-5gl1ETC zoN)jN^PiPon^@RcDh4K`4d>U}(LJdTaJu~1SVu4K8PK7(tf&RI6YRb~VM*B;c@ zJ8U>ClNcY=*L(muuN+`AIA|-op!*<@ebxWI5z&wMkj#>6nh93D1(>Q9$1F|w)^@;j z$#%x7I@)B>nQ-c!7(l^JF&7zR{a~fO-ZGwGC<1TX1_vRvXb|l~M)p$&i18sK5U}o; zDlh?;T>(p23C`F%*Ks3DhMkD1ZiWH=2i1+ms=nE3vZSlDJVdQ2h!%8K4OTYOhaRxr z^om(%Fizl5ZI#g+1T$REk_ACw9bWpt)8D?`$lZW&>6*0T8m2L2PU!cNd`l1!zMjtd z+qZwcy9x)M+rI^b#&JJqL^TAPzY>SGvbtaNy2 zw>yR^x57y_l{5xx!~sC?dl72XOMpH-V!E+VQ9N94T8sua6DAC=4vJj)4iPu~M+oZ6 zod?KSW19-Y6kr%ijoxXS18WCs4)wLCRA0XR&od3Uej|0GUMl4t}5aj*E zd%2?618yETolcQlqeiVv&GV3fAr8L}>%Xl2c4L_yv5W#E-kCj(4}{<{OlkGXSty6C zyYfbxiomxpI8DJ0oyB~OBHADT;h*=K0g$eoCb)kOMpr`Qc;{Q*L?4=TRcjT1gNUtPd2oAQkTl3g`BkOcpDUOSv{yKEb=pPVP+T zmX0!#1HrUds9InK`0(F&%E~^P@$$!w48>(Nu89?D*etdKGCzWJ#gbgkorkn4kSIXh9{ip_#anZKuf`Q*?e9L z5FkBe1T2)XmH#>v5(3hVL%y`KuuAGk!Mg(WOjjJwm%(xw{|EQR5^ zHH_6mlXXP(5Y&A6_Weo(gPDJ_d@Q4ID(~=7#eq+m8W`xo34gni2Urq2&01VlQ%kT? zNj`=;Ls3Ea9gfrY8~$z*3p=zG*eQ;4_HMBmLLbe8)*Wc(_dANStSD6gZ$Oa06l}$O zsL*vR-}9^EquN(J*n;nu93EUt$i;@Y1Z56G*|b!gCm7DEhr%y_x{_ErId~z}D3IdQ zW)+So8z$A|;q|mocN|{h{NzzqsvIvpeXW{(ohE}1$EUE$l{^-e0AdN935~8zTrCSs z7%E|!RXgt86^A#=h%E*Ov(#)lYdykXLGp3(LOB`D?{^&DtW?t~k7068{A|Hbzg7>28X0;7u*-tM)S#h%X-XDE#yBTSpp#Hj%Tf^o)%TkE0`yA6y8mHt_tsYnp z$Nbgim70DJRo+;ijw{IadJaDU%`;I4IeJ(qyRvy4mm|J5%QGnZm`9eTV&kxCP7XEw zulD*(Q{eN}>oFt`Sq@FiLKy8`)|{c?Z=ANhIe4{ie_km|?ZYzr{bX@`YLS`PjIBC$ zkV>+DSOlmWn0zhTADlPVV6pTJmZ>$Btel{@f0`nuFJEsMgzVX?RSWnpj(i6+2d1ZFQo|!NG8;QzMiUdww2_b?bbZD1Z5(N7SH5|_Q`yF$xj(zZ#mmy%jy%$&0 zs9-JXUFe4@f!BBYHry4N4m;3XVmlUSg^^OMe&wQxnfYliVIHXb4OBQo3mi&1bG6{^ z=#;~NBCSqq-zx^9y0L-TwY+3WvEJAUQE`~m!Sj()g|HXJ4^THWC`n7{Am=NGRvN5% z0n5XWCJa_RWU#!x-?8bvEp3YvaGNuMOLi7a)koOXmJVfm4^UU~?V2r40L*!?#<8)F za)1jg9LE_qQ)fR=-SITwP)m!f<*cses#?`y3Xu$c91f3F0Cj~=iH?OI4X`>58ah6? zl532@gwqo-FfbMa+}J_GUu$TK-nW#RE8=`fV+L@V z(Kda{e}cN9k%ttu)vC){9)%|X7Fhl5@C_sf-hmO7)0py-Az%N+K#_=Z6bl$Qo(nJmvz6iEYSU(Of~5;G>S>v- z^w}Ar4(n0{lyfP=K!ML_)=g!>NNpiqK~&hPl*u*FpnTuw(9{gI&e2uHm%YTg(;+E( z=sp)_H1Kh#bXX91}^PtnBexdxCVOVgYUi z8q~Np&{Wk*qLl*UjQI9Y1^RYH!;B=j_w1?cbVc7X!wKeGNz*si_sZ(+PFeU$Im1e( z(P5g@wHkb_;B_{zk#a~ae|uT;Mri;9C!`CL%Vluvm}8|v8^bxX;AC%_2k=;s&tBO*Iuu%>GMyr4XmXHqA`RP)IRq+wi!2|-2F#dYrPgfgHFjyL>NTDqEl zu^~tM`(^$aqVsI{wOC4sY?RJ<&(wOWdT6V=eq2I|5L8r0Nk=-4W$uCl*ml>131rOW z&BpEXV?_*;_sJMuNFmK_M?|~>N~u*VD|p{~%IPshpl0TU#eFKJ2Be~sns$s@9Sg&R z!|xVU#N^4Gr%K5=cTb(sQ7q#)A(HcSw24^rmoisMV`0P+)g@6DV&TJzVY_um#GVR za)c7^b3nXs1M%&>k~?b5+B+!vEjoY%&o074fDoi14PrLZ0c`1ss9sHND3~fFN;8H7EoWmATNk#c>9`a$`{Ohh14+F zdD@D(y%muj$f`0K^s^T2>+)8GkTfJc(R&P~0vONra9+0cxa<1fv&)|EZ&(mi#3Ijf z%2R>LrhxL6`}4X0W(R7JFTOe+Q%I43+meBt5V#4c3~B^^py~-YyUT?byg~}AY_|ox zq^fj|FwKI`$`O@()>;=Fe}z=)t&#mnkN7~Y>y*@ho`d^j2nM;Bae7PqiTfvx!Cvm#5 z7N+gAg0nEWz3WOB?eaP?{=CUkriB!k4#4c?%v`6JT(-`T$+vSaB=wH#DGYA1d}*&` ztc|<|94ZDNamk4Am_mwD^J=?*H+fOjsROf?H6?YMY)+RP#V4qc{NOyK?E%@j+t|k% zj+>khK%w`BgXS7lNV!0h?8e3EOi#6`?k^{uG7%Y|^actM{=Bsa(7=G03)&OnE(ti5 zG*L1q47ZSCGV`q*FoIUJ&9o4el-i3V?bEXZ_igk29#SmZ2#R?4=-|tp4`uKxZ=_K@ zCF#Zyevjb@2ZNO?YZWo9sOhDuxol-`ZdKo3n#;{EkxO9liuK|jPGFNdz( zbUt4pg1*yfKtVBH@;(#7 zgNpH`-xDl_b-Nkhc|3U)gs-nr%COstikLiLq)UW}@i|#X^XsTI7gXRnE7R@R3#uM! zds3p4ePz+0&LrowETAtNQ+r!dKSIP+0UK|A;gfOp?J<)9(bMADdr3TRdoLv6#}k9y zSzYVgy|}9tHsL(AY)?&+8*u)J;Rg*!lsohu&c1P`JXVf=sR$ikE{@L#DrEAE-Ji7Q zfg$o<?uR8OJa{eN|f6hUIckhM+>41JkCJYCR-na?4ZH@!?fXq?AS_}+o zAHWn8skswbKP;CN8;>fakurfYjds9TR1SWpjR`o|o-(-$uX|J>os?HuMHT1D-rl9O zc!yH1t0o1a=X$|}7%REm7$T}o@?O|e{g)tB-Hia9w7+M8m@_Mi(Qyh2`vQrc9!NipzA>+W6fSx#2X+tBCtV(%67B%8C>5ZN5UJP!U<-+5ET zcCYoq?p{Gpva|8g3>uJ$ORm8LUTe=)jW2kcB+*&#T!)2cF}q< zts7@eq636rm5TLUp+zx+VnPk)p}a?@pE2o@Q+2S`F$W|&6ie&mjW=Co9W4L%`|f8@ zzT}vv$RsX`xV$ByBw92(I6^5aT}-Xk=j%VRK0^pXb2mV&s|Gp%GG4rn2vn~&@xG3i zgjfCgXUI|~J7mOTcwqoIT{E076{KoI_|dxbzC}v^vko~S~QN?P59N!(=As)&US20oL!GMs^+aPIWH+_c4;9MGl0|MjsV z{OBe1?Ck_9AuvdUnGXALg>9ZH28VqnS4n)@8wcFJheN^qs6cU4p%SH$Uz6fSW>C?)e&1#5ftaoj_w1 z@Rn1~Ob08f@GQLN+?SiO*N<-zF)@}ihN|f4pmXj!l5DlkI+t;y_YcMomPhad9KjXB z#d?7N%%l|p0-JBRt()I%+`&Ag)WfTF(`jBC1Dz!mNAc6v6+Gsgc^j+!S4b+ZF&%{B z?Fb=2E!8>Fh9>P(_vY(D|80j*;SISr4m zc&n3jsOKU(jj_4Rs<-1fX02=PbWEKil$~eGhEwLbhQa9rA$Udfko!(ITJ~8Jqdhd^ zXK4e6v3t|EOU9H#dPq=nctxn0zZumz`3R)w99)>YUX-X~dPq@d2QKu?WRj<_Z@R^Z zu7D(4xg?u9sE6RE`&Ve|AepI{V1!b`NI}eWY{E;n>C0jmx+jp8)z?{G%>ec1P7&TC zw5VVAU+9#@Fm%}v$hH>e;Y|)UQSOrr0YRAdOQGD$LKwOT5px*{ik)>qBRBUn7CQ^_ zX542lf+z@Y8(^4>r6q-HPOI74c`NYYto!VRyz*t&okZ2wLB8<%ZY3u z%iIY%wjTBx=y-Mu%m&5vs}X|8ws@Rf~orAzfYGaNZ`4A`D2`98eEdB|Iz&P;}Lx2Ejt zn}F{Vyq%^u71s;Hvml1PJaxq)}UEEDQg9`h=r zCVh-`yYIA^HD!QsHVEYI(tUWczBDj(k=oos@Cxc7pn%cI$xJhyNjRTtKs z`|bDbd&pbE0ZQQ~fWZa?Y=TNod4q9cS>3MnzkLt6Kldi7_+s}(3c;Y>#<=9!Pv#+) zipQ@ZHqa;WNvjrbA2n09ISz3GDu5w~Ug|>s4(U(|VYS5jNgjZw#zHwWB`;Fc~Op6WuEVpRkckt9(^8I;a!+SL!40yyvZpyB7v>(U}E z1P6%B(gsCQADQi?w4CvM$_4A{(h@0TkgP!yW2UUo7-uwWwe0<)hH3BZmap;gxg(Gu zQHJhZ1AA5kl$gwt%+>|Bo1W@PPINV7C1vFSg)=ivU&63a`F54`m)bILJXi;({8zT_6D3ZyYcA#jG=|OTDm!9 z+lmOvyuk-TDYLHvj(!ju;t{dltX_-@5!8-2jjQ)g^;EaIf$sHGtS;=r>E%~GotL0K zKRzN{{REma5b%2qYDo`&wW3}T)5QfBe^ zum2V?SQ|&4oM~fEDCFEpa`C7d$mizEliIJaB1X$yalJQ7>YaN5BG881B1W{B%ZpLU zudqtQTWtc05`N+DR@Tis8RJ-_(Y^ZOqOX31MIl+bayEDB;@LKkHu-R?0~iXrZdZ5s zmqge-jxv{4KAxo1Z6KfoK|u-pyYAp++N?I*H=EmV=U0=NfL)h!@PrTsuqqtPRsmY2^@fwLwUUbr5E*aNaEU2~ zFr?l(&>g>_v?*H zChpkPYl_?=6RQay@qmnQ?~PkfA%tONOjPzNx<%|YGZSM3`oPB%7TRt5MG=NQN=lM; zT{7IZdVr7?XAjda8*g2lf(XN2Skhy8Vyt(4%M= z>9GNY%4pzPVDbMZtccMX-kof9P%HI*KzV`dbrAS6)tmwTi?Bin1Fu@$JimLvp`{H$ zIH)f%EjljU&VPj!K^Xe*oDwDo(?jMN0o9=5buBEqeDU}8zGV@Fp#waWt0$8#ME(rx~&eK+s5<~Qg=fq?hL+uYXam!Marj_)B8(ov53h76X*q6bUITf&q39R@WcdqaO~UUh0NWQ20(g@i)LLo zy1ddLriiH%(0~GtF1>pbB23?z)OEJJ?c_^RmxSahvEq!|RML<=XLa8x;Wqg+fC9d} zgcMSA;R(z*M%Ymk+}Ah{&H!_(em#2`rI5TuC)mVWpqYieYhWr{snWQOQcP(I zS8%tQ+>gC;CMmV}4T4|9;y)J{2+0o|DHp9?>bv}l*^_p*3O4LrcP@?GBqYUbdk&sA z*+FbFcPn#O+JiVz1_^%8edY6e$kW>P^lmL@gHz@)t!|vdUU{`8Us_4Yx0trnJy}1}Z?w_xi@@%)O-|R(UtGaczo2jj*v!WYwUGj1f)kjEFE90a) z5a_ejk#DPR zL3h70Cnvn%3WnK4V6}h>U!w{!Bglf41U~MDhF&MH$Rx4&Y+e+F?HCw&Ylq_$BP$;Mq1(BR~f@Q^p723;on}NCV zShY*7AyE0ORmo{J;Y%9adV#MJX;#=)t)FH6^G8Uom6KgHnH2|*ZLlV`u&~J21g;8u zTSod^#GJjii?Ns8?W9#UoG3!!5d3wtd0L7&p3nXI+3)Hy;wH1g$u>-@Ds<;gg-KO~ z1x64Mmt?b-?Q_kt+ksox0=6*HX2lu~q_R2sfSCB)*k7EsFYbkdhxk%rDd~(+Icusy zep<4ADPeu_+P(u{zJ$X|n?>d?juuA%^E|e5LI*N>dniD7~I?(gBmn zt6tmCy}Q)VRWJj%@eQrTNktieAmAaoKxy<=^7Oh~TE=GuC65uxJ(y|cYb3T1;V`i^ zz-53TK>hGosWK*Ph$T(~FgTBIOwi%lL9%q|=MQ~9-v3sYYD2cV$ww`weL`A+`9TZV zl1>Qa&mH;$luP!v2)KDlSgX*+?6WmEQ80zN*skPrqngV@Da%{{B7+4_^B~@B*!SoK zLOC$Q@?_1&VK!Hsi;lKpwAIqIME_-9%h4<2(9jY z+PQ#w`R*dG_K0VNmRZ_6`9$2oh)r6m;On3JCqVMBaIhy%1;k$MxIyb$0jJ`X!dgqx z<#Fh|c|3Wf)@K~~42gr?ch;^a29PNbPqFd2BLE~9WySc5?{io$xbK7?&;z4C%B$G; zIa{&!kN?7vyOdopRU|HvN4xPE253}XW6=C(Y@eId7pL*!62`3kOz4+Bq4unoLc#!g zJ78d+lY`ff?J@@sZYt(7*?SzpQ#LSwQpSKYw_L7_jgadr5&DYLjWs zo!FgSN;$XGGJtwQ5gQl{wGtF`Ge;jj={p zc33$oYk`S=zIT7U{k8ve86m18>;yxSg`nJOI5vBMgGa2vzb;*P-ls>hV#JwCR(ZW2 ztS#lVEBFCO~Cd$0q$9I=0-kd4U2feM*#md-_GDTaEG-AlNVdpMm;ZtBuUuv95 z9nxTLZ<*}Vj$Mtnf~WWQ7Y}=iD>2uH-ED*t**4TmD^j50^Srdy|9D+r%|+~GUGV6T ze7uE%J@Lu~R4TQw*a_=0D&+yogLw8MCACu0I*~>HC!gNP86sHUxRi$x*55AuWkQAb zUO0ujoe}wh3=f}R^clzUk`Vae)4WrcmYphMOyau(D1y$ArP^9LF7*R|_{w4qN76P~b8*Au0ZH2EHEM$kXj6az z3#4-uD2PElb9v;OE_)Y^-9Ac9?7_t@7st4BkCAU0!evU)`}Dv>msBE$8#6mU1sGS2 zfL1OE`Pl9;c0`v0@tGTooGyO+-NnRPOg)a$*rdT~eVF{1yc8;6 zEtf|BAMZXs6Z)XriBa(>h;$sdJws2@Hx6FbOJ|aI7YCI!W{wW+ZKTkLaQxP?bXMNI zM7fydb4mb_+2< zH+*hYMCIbqTb&Si)7S-8#t!%Z_S1A1>6g?%qWbW`HHYz8VRJ0}E-goFsc9}| zU7}uU_+Fg0&|)La>p{WrTHbB8lC>^4QT%p0gI-(6mYriZIk5(rSgHv1xs5$0T`E1Pjz2FFsEWBBA-qtQ1 zeF5s67mt)-SWpF30Brd+n+) zwZ7uq#rvzNcXDGX~DAWUkPq70v^i%U)_|Nh5F-cBlhOP6#_Y zrgH=acRiSYy5xKc)CImc1H4%Sptg38p_K^2Y!_I7tqoIa$E{xPc1Cb9C;M&2N31+3x@}+KmK;fgE=uX!)ta<^(-s3 z31!huYcFG6h710K%cDU-Ya*k7({#bAEv5#*d*Nj2387qCSUzyQx~!K><;~GxEn+;a zv2)KD)IKe;j`JB@9_tm;2n#x=Bu;w4x8srwrUL>N_pJ^Xxc&s8_wZZ?aA4Znb4vt?! zI4re?U~6-V!Irfy<@f;ge}8{?Jke(y!crSM0|?@vR($H@JeSyJS;P~tzW7w-59>Kh zS&hAT*U7Lgs|P>S4g94cce;+!t^s9^oD3?S`vv#mpfTx`o za4KW(urt$)5F&4=zI@S-zh0-u)pu=uVB2y~u+&^r=CGla!F050npfZO3z|#CO$meL zfo-I9L~~p$wqdhIB}2VML|}XS@LIQt18M6N&85V(LPPY9K-&%{Q^+j>{fo_G;R464 za27=Ebsy$zrY#VEB|C`owINu8x;qnuK-r@G&UEDWT-{`lhM!A6QUWrMDkfDeRPAH&LaEj#6Uz0diD%wy4jDksY+ zg#>!mVeS!Ul;h!Rthdr8Li^#hXt@UiK?Jo=2LfE!0wmyonsAC*xjTy=Zi~kLX>ef{ zrNV3UJ__%j&IpOk#xKpP_4`+S|3km{jGoJ^=N(`^k#iA3Ve_)Yi9GSdOa0DoV6QH1 zr$Bh>W4sL3Z%3_ya~eS$OJ?2prJK@EXfD7uYsPmBY>QWvCBN9rnsFW!tVnMH;2&Tv z+sO_NT|`JO`e&2S}7Q6s*To+KN*On{HnpjDA9UaalF^R1;o3DGmVQy40X*c47)Z zd@0}l7n;Yaaql_@V_`!Rl;*Hvz0X#l2HM&;cS~sBoK|hXzB(4F#$2mt=dk;OK$`ZE z3KsGtG>=s~i8o{`aPHX|h)kKySw}BgL(?l40yLZgk6R6;^N<;&juYcZgY#e5T`VIK zT+*9<;quta(=*~^(-|i|35HP-(!tW=u@r9Ue7}LYyyj*EOE#-I8%(=u9zj^B1PQP> zK<)`|`|xNU(CW#lEHS7`3s7>x$dDmcgbjzTPr46iF0+b9)VU>01oF1vKl(PE%SM@- z+1pRy@-VZ2n7OUapa#KtGN)n3u**TD=iShAz+B9135Un!R8xahSsDxnLE~=qtQl|j zXa7KRF*8kFSZ-SR_dNn46$}q*inU$mQZV=v+J{TuV(cZ3CGQJr4`A3>Dyw;d8F6Ic zGfVd2;?2UGdsYrzfDBN0S_IC$`jiCzf%x&DT)k zn#-zIaM9t$Scpg^Z}%h+QOZybT=fVr4itGPUSW{1*Pp{DHi*fW-~s-8>ph~Lm$ z%#1lb!NNiiZyMw2Q9-kXjWRnt?=!3BbvOf?W<&a(VucBAx|_8M-vLqtK6!hj_y?NH zs>M?lHnOeNYit>ct{(QX&M~jn<-TffZc4oXyq6V?k%VCCoY$g<%k7S z98konXlH4IK+ch)Xe4UC$MrWir9N4)rF0WAqYc&y3!8}Gc;*bk`y4cvKp>HwIt1ce z&g_;fEx5J9flKq$>nr~QnoHMKEKCRkE`P$q=EtQK=M|UM>OvfN3YQB@Tbn(!K>mx4 z2$Hc8O4%-BjB-+W%Kp8IBFNAnG0TK#TA@!pLKmlb*U;i!-MzUf^$K^PR(UK(4s#Dd z9Ke1q_6mMR5x@B;_1t4+lNxCqAG4sOku{ad7A@ncCG%10EDb!d!Ew|u3rGDmgIlwx z@MZbZwf{FT7c(>Myv@c2=G1WxRvn-lX9ruY$rHlv%}uFiZ4umdP6Q)iHSvboZ>V7w z`Jbm8t(O>BNoU|xrX`4y=~PGpNT{%D4SV*dHq_~Gu9k&UT2^S#n|XEVH7^K)(%4}9 zu2bH8l)5cy^9goQ;3$+?&=ny*@CK&HWw6yRTpov0VhAPM9(BX~LB{Ib9h=#$^d6oG znr=$HW_Cr|9c)o){23nBCUalldqcfnqrJH)^#SK!gU;BbEww&3sZfwDtPp+TuIkNA zsVkeyloWF34ECZEzYI*RJoG*i=Ht@Vl28S*vqxra2=q!R9Uon#=gUM3Kzn!L z+Qs@P7P8^bs0dI~dq6ZD>@lHNKl|g0k2ncwN4N(lOeW&g1b-0(c)&H{?)|!t4_qD# zwmD;CWkjT5gHt!+9$39{>fYGktM?}`m)TAm+c>tAl?Kz?D=!V$UmH>d3ivr(F3Q{t zBrK%Brnw0*J=MT+t7F*IJ+Cwyz+4Dpv;<-iTRU+}&S13(`e_WN#vSX|%Zvvu7hM8+ zBSS`Jmch0~)wJ=C1r~`#yRxz$UwndiX$irov$k<9s{!XQs?%kB@=KcTs-+5uZ!)-*N5 za<*Wr%#CIyejDq5v|ZbhTsMyVC4yJ*b4Y+#E5epF>egyzzJ3#@X7;gJF9=!TZk0NO z;04Ge!OU`T=6FJj*_;DNhy4&cVZDty&MEVNrz49D<7?0AE3Sym$$j$KG?Q_~xYjcEHg^L6sImXwFQVBWxImiNQs-1yf>Cv9Kv36tPRrZ#^Ah9YSgI= z>1@~p{hn+83`5u*h!t?ZAS!0}xumkaRby6NdtaP8{y(&kQDZRP=T&X>3yGyKW3~>Q zrW0d#Uu!W~*0o%<pB6?10-EIY(pN(2YFWO zzP=!O#TA0F^KNGzN!n8Z7k8zOI+mXvgRi`i|D&!Afht;2eBQ<1D7c)$VOM{cyXQ&o zj984>UfB#ZotC7my^IcCt_>erI&wez{2c`S1v3U}TS0j<4{y^G*Z67M+kiywz%1&H zwV{LyC&HisYs|Kh9mbHI3{%;z4|ZOGMJzDN(|xvD@0s1yW8yPFf4^~}mM(6_PhcTj zsdy_!9mV`P02x&`*^+cRMzH~>y%SbQSG&zp)v-Q#zk}ZtKFv1Aue^49Yq(-ESUCU? z1;jh!3y_o6c!OSgztX7}OV$4d7O}wGyA-Lk!JJ;ue6$ODUkuL*-i zq(`s|XY($&Jltw^pFWXA?v*>LlM6)TjHD>uRl#vf9ivUx&jvA>bUh#b9o6sPHm|6T zrkm9L0l5QAE7hfzxa$4%BC6W~MW_&uBMbN|k3Nw23z+yYMHRTx%I`5EV6&Rkl^i|L zoN`)r1<2A$a-)swtAy_-!d|Mb1NcB7K^wD(TG_?Z{5p(*YuD?y?|(*m2Jw2jP8C&pnX%u9~uBm}#k5nZ$MuyOe zq&hREGvg<(8jnA}hv=_#9r(u^<_rIsx`6LUO=%@|(c#;wijhK}E+T5~bhT$%T=oVW z+>By#fFv%Ka|kMARgJ1y_bJnsGqOTh>8`1mTLXN$R_7qwddmQysU8D925hL+hU+wPkHB3&<=$ z%y4&KEw^3@gcUJZbFJd{$i=!91jDD4g*}-4v0%M29z+!)>o|E8E0j0>&zybfmq$L= z?FlYEC5Y-XM7E7;F1gRseXVOL3}||KuLkT~`o0xIk19gLVU*XJ%3Y|Gy8Lom$f|ez zq4-?W!)J(a8<@RlE486es~q>}YOC#yl~yxdyP7mo6bB*y4A5N2@26_KA&!7dsPK|!V1}pE*&(?d-wL1ZED`^coN~Sq@izY z#@`XEtF4qraf@`Kv;0zJHl7%>rW363c2WF<6|%a(<0tXSW|%{)_f;9`i?HYzEaN(j zzqW;Sari5&ymA)a?db6LPkvICx5#zc(y8jd;CUNA@}@X9AFzm{SJ2MoEeLZdFIoK@hzXe!ird1-B2Gv z9?t;RpNMNWWLI-(o+Zez_qcvV%%Z>M+w+mFLlJWK3&Vh!?9GLkE>VUX{JZZ9xGZWw! zlIoEJl+P{=4N99u7_{?tFJF2@bA5Coy zD`k%4UEA-36|%h2K)$Nki4U#Pb&c#7kFG<7T6q&^c?A{`S3@cgj8t#l%VI7+IC8O_ zYVizm9WebCVd8^I=%P}VO%GC7CV#@J?%{U4|K@T!Zu-}+h|6NZk~-bJakP7XIE__} zObHl)$L(I-^m_~e5^CaIZgtIxV(mS$+SX>Ed;rCp`53|q>9(0IwKP-3;x6e(2hVnm zK?dIt@Sy zk2UPHzQLT2c$^8@_g z^JmGWW^VxXBj$i)N-e3joOT)35`MSdc1s%xqXMShXD|dd_W{TN##(vRo~@=lR`b48 zKi@s`hHE~8jv~f%y+u@OkPT8D-g`RR7zLEO>+Sf|!wNxx8I^`LEr&C?^bNq3X!<)i z#ysBKtDdkzG?0!z$g11lvV&;v$|kP9a-YN?YOPfjv`2Pt>euW32znj@*%m~4 zg*6{h)SCQ-u>(@}he;^ftFdvCBH-0+T&^0QxI(hLH6VuMw|VVQM?GxpfzlYQQ04pb zilNprT16^It;@Ogz5 zK{2d0Q0tAj7A6wAan{_Oqet2h2;!ZB!beK2ik?vwXcb_y}UK zBVkny;e}Mc8+cFFlbpV4I$6paiz|jGa_*ujPu0w**;Es@fw}*Z`H94(Db+q=h+;Z6 z22I0w(OkT;(M%<~JMKArZfDLPF+>rpt5d4A%w^eqOZgx{0CV--@Xa-EMG-}Y+lF-tAT3QVel{}MOr!a;n`nB{)ZgnQE zg(G9~EXzcN>p~&AMHNL9`#H8b>zaV&fXb-Sno4(b@0G``3;T&H=5!v}p`;?U3aFxB zg>B5MVyKe2vfLYS#XyK{KsBwV(KA5&*@+Qo=I#DPgKs?%QJm~3N;RKqwRaLKiQHMk zFY-op37UIYA*3udx9$S{%8mT4taU&`b36@%Be#p#{|#ehm_HGgnL#exU3}Tnb{aSk zu*A8V$%N6eL}j}ke(xO|_GBHKd6k-x_={d8@xyqT*jO@)3$2Q2&PWm+)o^wHk#v0l z6h_QiuX%$Z4v=YS$4wV#mNZTQ`%hPKsyJp=`g60d=1S${Q4TZ8i%s#9_Qpg8QL{;) zWOO=KJd3!|f*{#T!%QZG{Km=;;$};Bo79tRab2FhvJ&!a5q#~%^B!2xz31}ToLp#O zP8+7MF>7`kHp$#??Yv>^Y$Jp9#1%+>%r!OHO67pwa&Io|^;TRVz#iFDHqyQ$iKZT5 z_eUhDPL+D~j|t;v>bH0#&Sldcew_g9LtM82iq(2AkwFB_pKe&0`J}3)0DLi9CUS@4 z!bfhMjByN&TwKp@4{C9pn_LJuCoRvh)lieJfd$>=^<>UG`cjtc&o->05H!vybG=G< zMR7Dn3EFLw+U~;06OxN&ohX-WwX5fH7)dL_1iArWG5ypgyB~UT5qz^e^3^#qilt%W z4eUrKib(W5gCT9j3=%MFx|{Sy(X>sS&Gko2i}!w_g8OysI%l4-uTRzEc-kx@`HPKH zEX_7JO_%SIrpT)@uD#fCM9tkt(@4@sQzWrE77qcKuIrR+>-LN{j;VRKC6*GQCK_rF z>UIMA$LB5)nlJD4_K)-PuLwpoh+8=T&>PH*6(l<|5jF8Hxn^Hydn8nic!PsDYCGo7 z^S~P)C+dRi-|M#0Z>?}oP$92U>vWycKB%9~lJ+j!ZMd-JkCJ>X!tmIFqHJ2Z+9iUnyMX@5j&2e}&NOiS)#KW9M;A4L>@#S#g>8uao+pf5ZeuK%?p4&oNm|7Wf#jO_t{AV%LlN>5spE$oJ2X zhVZk1-*s=oJhq+AD&|LCz^62heU0B=Va2>E+sh`MhQt7%HJwd>k)>LYLvK3Nouy?;XeQZaFrv`}%IyKxcuSzrH2=_}mimc)n|Ob;@ScT^a9r!^;yxB_#nWUxNB0 zBq(t+BV&z*W?!%=@bvlCEzW4f7vyr2+lbj@eCo~j!)%hzfB6;(*bY4!f2ZNO8#PE4aeG_9FO>$~0@t^F}g z#A|ts6rjs4?1F)(G*G|N5*v97M6$1&44$AuxIC9Jr7giw9bUZJkXCGhP3YMdWaUvs zz&&8Q+^qsgEu5rSstlD&!tTds{k6N!3v@IG0Ok=*F;tZ(SGrr~U|e z6av29s3Q|(_c`lF3;=NLJnP9fye^+Hc|o}fWiF;5%vP+qhNodacC7ew>3euZ6)}TN zas}elergB(0$(P3NeIxEesKaqSpWDD5tYyk&a!uXv{zXY2Cf&PWRl#|{-VyT=X(s^GhpBa zMpGuapaFF)lUoJ!Lsi@t`NvmO5rf4Y^roObw{*_-23YL9JVi)|?V{gZxk zP2CKmxv35#eTsoOv)%d}Jf@HuSiSrKb7F0`vbQ>V*+>)G^X73$>@l}pbMP{^(#h40 z%R2SMl-t=dR$7;ic#kP!psKnu^g6>Gfphj(MJa92!L2gJr7>9l@hikWw&!w;0Mkpt zN~hwwZq?EjL8iLsF?&oQy#t$jt>V5`JCDta+?`Lc)?KlET`nO!sE~C|2g|8@;@tKq z%@rAy+_ntm@A9P8ql#Hm;Gi>|Y9wp|?hLrFC)PP)s~7P*{iz}7g-*^=kl4v=Wi@sd zA>O^|$7r|I`SaWN&k*VOAyr9_OC2EOyKT zsb}wTXcfM&Ee|WA(i~Upt?qvzH2#maYg>-P#+AQBkOVKE!y97PO5UtSu}|gePxr{r zL%$&9xMXQuMv)-UO#%(;77-yDr$&uccGEwx%B36_7(sF_@Gt>s2(fEAI|CsDC#KV>WMqfA~W+MQrpd`{+S*N z#rZsaYqPxDh+&)|Hg=4gq5x@KjQV_hZjVV9#iRxPxwQB!IssAcVeHU3fkQ6a_q57| zET@LBRKSpXhPMal1=|>8fnC_S$a_D{@~BHI(m1;D*=@C~A-e=*pH#t40RwOM3Qwzi zj$ndYovo!Kay7Oo0R6GyBaN}=-LrfYn88U4tA`ptn`*Po5y!Ld&9d#weaF)(m&?74 zfSDx#Nu^y7rYKh}F)Y?wT|o@Yaw#NlrHoCv>Uvttv9b`&;Oe3g%XWJpd0OQHV^|Zz zi|ncRvm`xj^2WVLs5@QiR`>t8_|++Ant~m7P>TW!?R09Z?tO9ghs!j$*jZuETKjU4c)y5Q7xov)qz?VHbRi=9RWMb0DDsSFM)Q0^JH+q zj!1FX5odO}|8!X>_>%4d@FZ1x+*>$!YRzInYl)YE*WX=C>eg4xO-G!~V3Z*FEkNT# z0r+XJuc+R^^*{b`sj3=nrJ|g|s(pn6^pX)t8xrCmO}(4t0;ZxwBa&0F-~HG^jfSwN)A|=(8{!EGR{Uk2ypYWVyUl#!qY65^!L3S3s!0rgC-D34AcaIM!=G#H@Ts<}jdi)=drd+ut89wG&4<)Ntl~QrbWX zp{4;&N>x<8-MnU^ANH4v*wkUSPv=WAP9lgOYnQNf3yiPCOO46<~mf@JPX_uEbw(mhgA=k_mI*S@^OI$)ofB9Zz9ki&h0CwT+-hLx;P$h4`qha za)rwWNi`-Uzu7xqA{LhJ5)@$7_^IN<|6F+*T=OCpkd`) zH`7jNR!R@OMLS((UZ?83?S1}sxu>eV^L8o(IQ}{sYHdpKa=8DAx4{|D36(yE^`2U_ zv28}-gkK;A%N@pcq{Dcr1^vF}cOT~}ocFMhf99?NSEFvT$CU#=v?8Drx4R)Ht7eiwkUmW6Y-`nOdn`+b5{&V6Fn#;xqi2_14PAEVBcHM0Z_M0u>GiNEq_;Ox^Yc`aM3Kj^I?nPmYzd-e6Y( zv*{~SmS42y*CF)r>2wB<@ujV&NiMH7SU#NDfmpSzj`o^)eOcvk2qlA5sI>{mCoAaa zdj$OO$k=UON<1E)PNz^(2AWEol(z6|FU_?8%_MwN^W~QI&B@zCXE>+&JrF}f!ZBo> zQu7{Bdn>Q=4RDN)RVCClS*2=Oo?WnjGLgf5Yl%R9mkUw*``v>R;G73~#NR@NQm6Nr%GGDK=spno^qnLO5bTTUKWn*aUr=5)$kt-NR zT4z2rAucQBV^pc2r&KaPppu1MJZYZZwTBk8UnXIGzRib^tVoH83gA1;vQBJ^-?yb{ zCIpP}y79mk{z;cnn0zV))0#*;r7xVhL6y-dyVfHYjpnCS9-WF>CTrp>CveoTDuROK zT>!XtKRAwmV3msm>x{iljXCd_o}*tw9I`C}j_SG0xwG}@vshzfYAf0rL0V?{-kuZ= zv{P7Re_JeC<)JNC>y~h;Bi+}1w1?$EO zzZrL#mw@$UmB(U@%%&Ppz&K;mHIbszf={KiC_{YltWTc?yiFMc5ui_Lr_Gvs164ho zH3T}pU*lu@eEjdjN1hqz69*B?1v-D|Q9xQv72$$ItS@Z-`>)~DvJcBbl{jj%0T@$r zOH0CLo9^Wil~(=h!f?*yJ#y-?l+_A0bPWSKjmV4VTohN|%%`=w!j33$O}4v*WT%10 z!^@}H?w8IM+T>E~fmE}|=mUKnj+i>39(8g_mT|CT8!MGmCf^4Ek>i}w zJvsAGAiq^@nK#bS6*;m7V6{syT>vuo0eyaJ-1!N*m%>*Q*S7j za06B!-#xajr>!*sUYwbXsRkwaR|sb)U~gL#g}#w z8-h(97y;Nbl-45qYyt<1l@fMuEGW#UT>2E>$6DV!WVNO)4Xx6R&Z!|6V9<6}?ZI%cA>;^Qv_`PCJEhI3B4aSu?cynDI zNWSdyFe~?Bd2GJd(cBEv%b0bmVwhG5gffU6#l;BT8b}@bYNrs z6RSLYYlGEfr9NmjO^Y=<%kX(61nid}`r9lY-{N4U78OW6aSBbXIgOM;Ke?2C^{sC{ zzNK-G1&~(@t7E{kPN|fEFoapk?BC3KbMdWQ_Qp}12nHgIRl};ZrL6(ZDw1z6ANF zRW4#_`M@l?edf^TG*_))(Clq)xn4xiVU|zSIx%ocL*+XJoV~H`qpJk`jTz+fIQV6i z$702e@QJ`6nVQCI7}U+n2D1d9bAj+b+_33Dt_Jj*fD9sQQOIiMP!YHKY^l7yg8bnK zPGzLSd9EFRE2b*Kcay>%h1SmH;rWLf+$z-)b_>fj(;2hQ4JeqAfOhSDm)E4{hacXm zU^ycLmr9u_j1K;jv-K+M&g++!r5|nxVpK3ya4HSp@!w|*{a zrekM~Dq9evIPwO-Pj(z~kc#3ZW<5S#1S?`HeCI`)*>$IsL?eb2heDkKK}jvVvXj%ge+sC#wL? zLpfBR1s^nRnH7h?3V_S9kP=@9&*5_CmpXXrsVo&Ji)~ePaoTePYzXHvH}B);ukSzp z^X75_J7`xP6gyb9hmJLYlWm3wQavsx=J7V|cvvOKD0NU0uyjLYU%}2oFhvfGIh9L$ z?AviEKkm_Vk>udWEtAa3<5oE4sinDZOZ7Q@e0_#2wg9Z~$IJ-`5^D~@?5Xi~X`7%n zi;tM_m<KyD=W~-fnss_X;q(#{)kP2Rmdbo(bMh5fFS)M9vWdyv6;0!Vo8+cz|Kf)%D za=t*Z6JRSKC=TA~l7RR)274k8p7XjI^X;cg^GzAZewI1TLak1GlxTGAYK5JsHhg_&fX6j;Y_sSo}6ST36fqpH@>+vFtYy0#TgKw$S0VDaT0?$gPt z7HjLRme6)v@fw8{Ojic|M|z`@~jEC z1BXMf_Bo{~rBW(>RS{}Qy^aes%UrrpK@>Xcg<1!WIRi1OJcVSk4omCx4$`WJ%Ya`* z@m&+pri5LE5)lBO2kgPN902#bS>If0$F+sJ*>WB5`z**nq2#~<%{cASm-jTw<^I!F z5+s~*YT?*9Wa!^Rh$(7XFJhQ9>!0aSdZig#D2ew8(mPm<;4n(=eD4KJe$8yY%yL;R zn9zb`+g+4HMN=nlhKsde<&vPEW_|NmtzH9Pkjfb+jLLx)Id=G4&>m*FTrYf?<>T^Q zYiy%8teF8On+^n1e`U|C^v zgzmxy)&{F|_i>iYeW@t=Iez~2@OZPq$wOcmXRvFc+C*5;7Fl`487>zEwWn1cf;&6S zNWo)(EHJ|swR0{jb?4w@_pAe}Jn&5HNPL<*yr}L{G=v-v;)Tr<@~!8LR=G%Mx3np{ zV_|VLrKA;ji8hNK@QRsk&JL?Qb`UVZz#@RtS;V@Vw!Q(h3{*9aa4EKbTIEx0*r?1> z67aF^Fm^mA*%3rgt?klE{BzmENBTe$HQibkj%~NX=E{gf!=aGv@|FvuT(rSzD&yyfcKbs>4zgJSspEYCM3YYi7Bg}o7_LmI{$OAOLWEA zW68Av1h#;6t7Eoxrg7%Rg;YH4atRK4#-t!#NYp>qgk7yb4SU8`tMm(&`LfF+JdBjt z{S6K#6sH}$k

jvA_8?xbL@J9sy$G6ei)g22R7uYPA9eS};~ahRd5X?fUEZ_?NY{ zCpItjdJ4!zBkH2CAl$6n7(VU#bg>JlFQiCT(Ly{s4OJbB?Yr1iX_qknw95t70PEpP z77qZFjs<22*0TeWVnfots15(N%SB1>`5v)C1;bGU`+%KfYXEXlVyFF|*yU4mc)%ul zYQ4mux$hx^>_$=|bxAIl547 z(YOh`W7nU5X104?Ex!;b&^B?vvKJ^!Z7b{ruf zoGPDMmAG$Y;`f^iD*Q+qTVv{T@n;N#wG15iE#UL^b@%VPef;|E6YFc`i_o&FR9k%? zgfQl9P#jv+-HJ#*embR~hM=J9v@><`v2m;PlrAgc+}l_erTF4i&J7_V6-rz^rLeJ+ zDUFOjRYHQyh*wx2KB%lJh+i2?tzq*m5y=dZO~!L40#1_myzQp`_`+Sg?aq zng$)|;+gV9<O+Qh2>>#H)(C!VAaD-~m(-PZ>Au00F z%_I5!<%ioPVjeA(l1A%0uLJ_P6C_y%=L#C?<lve4_GsW0jj79QaWMz&4#Zj7@jo zU#ngWjEL%o%f(pa#?f|O$0`|`r>>%L&s<^-m$_a~R31ARPiRo6$juNEIPn7{IZb)G zaDzMCI1Ny_R2|kHD}g9i4vcI#NqMBX8#XkRbWPBYx0e@}c8ta+&qHVta&nVQbC*3+ zuri@~F80k&To0F+rHjw9k3FyQK_8kaqE%Y7DxdRWWb_{{mpaW{+G3K`u%B&bHk)@G zx731g*w7u9Pg~7t$HYLGJ9J_S5n9#q(wY#_w4GZ@BrcbIM8>JKgG)zijTMaWw_!_>#4{`6 z;W8ra6PCwnS(u2NC$NkwOQUe6>y8WR8Z@HcBnDvll#u`idAjTp4x(!Vm!CP?Se-*w z=Z&5cmJ2^U9C5jkub~b{?J-UpTld}#V)k~c@(%*4PuIbT(JEbl17VFiBi$UJ$MzIX zn7iQm>EmCHNT4BV?BHCSt-KnCpKxHWO1ON7E|Atan%Pyb*q&jz=n65<()!{!%nN<^ zWv?#!5Q&*mI_%LcR`z=zgainUgmitG#`*s1Zyzht71$PxPtX!HnUt_%;$3GwyUMr_ z(_eps{(10*)Jk7X6sKutlNe4&kxtH`_F}jD0m5>zn__W>T$LHnSSPKeDQ4+q;#v)p zu&iHyzy0~<@*QT#)SlOZW|g(1YVJo5fNrpwafw$?ST60$Yq9zfb;gm9XHp7vjoD6* z;D8syO~U%uWwmtWs%v%`$S?-pN88P)B|fJXUIxp3!tz+HMPuNDu-@tGLMN|k6NFSt zF6Y`<{pxcu4c+|N3@I z^YGzS5YNnsstuGK8wTn}hY4+^Xt{X=A{^>Do zIS$!F#wmy6Q*ClW8q3J^2m#Bwu!M(8L^vzplUs?LGn6>2Or+yse0DM7#fAfze!3Kg zuq?aK91AjQ?roF437t<3_sv`om^`9XkdybS@gz;P4`{$KO4T-Z3Jp2&g6Y?f-!A7o zY_k@&fZ1&b(IU^&G#cV&M_jn0@;FmV4n2YzNJ8USlVLfRp0`zS(Rw3OMD>?T(NX6q zl<*m9p07V@MpVaQA=4BEm-!AZmyWs?wR6Cv#+mmisRmjuAwDGQ_iylt%jKRBvC=HB zxDF?TmZ=s;)0U6{Q@K$+;&S;CccvYV1Ob6D1&PTeO*-`SGtb42+sO{cGJbt-6TelWAFI-61Xwq zLXx&Zpyj*C^@T_yxRKtco)&!+ho6!3S^7(TA_IUN!J#5uJx(9S_(TeOURIWwiT>% zjS#}R___m=%XvzvV}0`BjcMEvHYXbBRV+D7y$m{ef4of}f0q(YfTjwANKR87923lT zkeapa+fq4Q)}#sk31KX~pH{(*t+SjE5*Dw8aVc^Dm5;xR;4G~LAcrprv7y}zdj9Di zl+VSO{|U>d7db@MJP$ZkO+h5oMAOe*!A$}57SsXD$5o<)ks;z&C0oy&lUV9WRly!| zy0u6HmQN$fPPKAmDUB@--M1;UI?me|v^2V0=RRS1tQIHQSwC`QV}YJ5tAdxV-N0q^ z_9}p|d|ESAi{yro9t_zh(C{Tgf-Qw;9eNL2KHV|0=_vuy0zt2!qb2b{hb#_GGp+Y8 z(Z}CKV@9+JRUzaTeh#?6L1S7XSisB7y-!#!Um|kf8PI-6f3-t50~V6=>awHU72(@U z@`(^BLwqfSf^*DC!j=AqY7SE;DrP!bd6_NmOZ>EobuIx1VqRA*fh4Bz7w)(@9W zES!_UvA6^Dt5f82{$A*3BmD1k-^3p-n|Mx0QWMhl8PB@I^Fdn8#+k?U=H>8&<>jETAbMs!u|l{81k$ZEakzkb-^t~$hj3!qJv6PO7LKcy6CsBp-|F0kW&@Rr=Tbnx z%(={p*jWVUE2mSC6kCm>CcTXD_;~+Ue8w*4T%(vB#CcI*%Fp6t?q!W|87}hp?R2hs z(!qx(YxR!vlx?kLO)}0Dh|RbS(eXN1%~E{!{m!mo5Bw?{J~(N$<=!qc#tF-34_B}F zooLWs^k3txjvh-?L3?Qby7u?+81vyWXZ)lrtF*TJL|6c&sdREBbzWm?`&wN9*4{3# z!ZIe8Izw1mIbd~xncA*7BRX6xfy-V8?9FG*Mv6hSgPOAWcTp@N!mc1C zDc9{=$XwQ}^EL$wWHcxk)1p>3(8z)E*zq!0ipU4yQkunani}h;RS(uLL&gUBR@v88I0Acf0>)P;b*Cl?+GiDxWv;ze5d{O= zm*F;`V1K>4z>+luxPX9ucAQJe6IMdbeB@WZu6KPr=)W|4QWE|pg}z3DWGtz$K#nv} z&zTMU=WBZS3GBsZ#c;fb9=>VnkV8XbJaade0mPPm-8DjBA1<)^+*p_#C6*Oy!>W~a zux8O@R%y2w_VSlc0^R|t^l_wn*AjB^YQ2_S#!zbcrUJ-NdJx)0& z>lBc&DhLuy+8Vd){g0Od=}{3{A#mx}ks}Af=GnogW9FuQU7i3g`@@M*9}!TS$gAu) z&eG1S{yHYqQN9eV1uVb7+EU9^H3p6YpAP( z^g}=R8bB&QGA?#LMCKMOHXR(TjsZ%co9Dg+jk~tl_dy!}4lG>^vDc!&?Zl!i}J z!F%xU*;c#-*3YR9K2Guh>Ney)V{Bz;Om=FHG}OT^U#7nRnA>epHKFAl&U`PqOzdb& z{RlpWV(D6=_yp#%Vteq+*S2@(^Qk4sOZa(VPr#Jh)yKQrHC8BWRE>L=jNg(#udPtn zP)H|@ODpYvxO}c;WTYJ-(?Gzaa|TRps(d#AQZ4ItjrHz&jaAEDtb}p&Slgw{T*D}F zXh`WYSL+j*(=}Evd>Y%q@nc>F39@uFS`Mr*MK3SFsJ6-$nK-8K{=2S&Oi)enE$E$C6PeffkGYp=wM5m<3(~`Bogf?usq;3S z>Ho-ly2=qR4$`LN0UR5g-vp;_O$%{m{l@usx|KYtmg``z4y_g!NDprvw6d%@F8+r9 z0rO%0lRc1;@6c+CB}u}rmKAfg(ytvnPhkK06!tCT9p|BA$^bDNb(V!VCfm%)x3=iP*7m=O&fhwm9z!jL+&3D+^_;9sL)TXucTz2BHvKj*D+Ld4vn9GWd z#YUnG1-H&9htuT@(Jk+W=s(kUfccy;OZkkD=)s|g5f)BpNCW5OwiC$EcYwL9SmS&x z`UCxswrg9?^Tv^{#52LCnIb?S>l(@SO17e%r{Bi!%d1}ifc zr1a5rHzZ8SY3IuU`bX5+nD;ehqXPOrGeXzywQr;;MmA`4X>$L76{E#xp-R3RcOsHJ z%W{84Xn-Q=*3IqnBkl^&4P)!x9eTHL-h>R)WSIBTAY0>h2=xFK6T`fx2bP$6Io8^q zkX9e#>?%v~Ru+yUNJ*^AqkKmQGR8_UPDGqk$mPhaDI$ZCsrxW zcaSDmS$ghkET$Ue2i_4lCy5!dgEYnz#EE<*3+($13-3 zHZomPQB;x4t}9!^G_Eu&{@HnE2IVi+%Twq&iQi&QEpjd(`36>lm_W1U*2Yj7B(-@V z+YMIOb-Y68=EhmIdy{4*dWO9$?hJ>WOaCFpi2S6A7C*#5|p_$mBuV5k)#fM&~IbS;awSSz=Eos zHXZdA#JyI+Hb@Xg72#g0AM@0D-I2dvV$KnvubW#yjjjiK5Ypp_4e4Hfd+VqB`4Lux zg`iNgx=|z9P-H~~8LXqM19)wG1y_uUq?5_*+0Mh%+y4c;?$2VniJxzCB?cL1%Eh2ZuPAnfz@;!(h)Hp!pNwW zfk@w>bjwUy9p=}N#cY%Km>RxxdK}WUpJHwCWX-7i2-TkvV6iqQy(V#t>#1G2af&f~Q|p`{J0#qRCO*1l z@Tl5I%-mM@uGvIx9$KgqQg?k+NtR2)yg#raY9qn8_F7a9lHzIpCLU9`5icZR&)l-3|@k z-eaP}=}3cVE{NJfJ2jRxwx8J1nOv^x{XM91x;?7Nt<5zTYjw6-6|1Y{j{jbx!+T70 z@RpT?<+P>JO1(ijQpLU;_+u9O${dCeoTRfODriA0c-*OJMWC47G*h#$OkzZIK!z@D zcuOFV=m{pRoZII4c&w5xUBf;<0&A4#HZS>|X?Xvs(%m!-1j4+cq4LFv`M=0wcvtFJ zSJ;do5^SmN+8Web^@7PP7uWyKkFcs+_oH+cy<~twtBsA|s>w68vgX@Kx#NoA_S|P4 z?!;I5^p*}r$%B8R;oYBZ87Qi%TUIHC$ez4(VR~m^?97!hk2(kC!I&e{jW|P$XkDJDGs8=tx z%^4fOTT)r)mXcj&^7CbXKM~x^4@qba?M=@>@LFes;(G;W@;=I6Ko!AqxNL6??yq-B z*)uapb4>`RbvE#f%PfArM73nJ4Pge+58X(#=Rr17w@ROrrCu(rK3_sWZA!=cgPgSG zfVGac=Js}C-fVi@wDsppjDZ>m;TRnv+Nk6-1YdOT>5vpsk#1S>GpZGR-R`N-{J2+m zommY_UzL{e?9du_SRuVa5TSa-0_xjetU(Tulxt;8|~-u3Xt&Eg_JlpAW5~= zZ6|qCM$O3#3458?rKaS(N6cLwD}$z+6e96*y|dP)2Hxi{D(E?X2c!s0%cvvoH7G=P z?1Xw1EO5vSOzCQuW}3hhGEi7Hxpysw98)srXkl)MTqk2XZC?i}W~f}v7>Fr}@eZ#roCqH|t8UP2rd{rtoHA*Q*BVs#^ouF&+DzthX}8x_YCvGr(x>meqHW)`U_ zZ}vWLwrW07E;qw3A8#S{p!jliFtmH! z&EN_;y4-F;FUFJazhagY@!`-@7Y;L&A^FpO1nJgc@Iz#Lp7<7YS??y@qr8F z;q7P+vtZCJc@L;U78RCs0>fiK+U5^8IxVkx%Xz8ni&O3cRK!pnNgW{pId4>`EPoT1 zOKU~Fegs+YDXNViJ3{UR3?Gb^-Ci7GwDhrRCBN4^zSy5HE1)VNpc1sQ5fp?+rivB5 zv@M9#4578g^F;Fi71CBhH?KKL%PBYYA`Ex81OH@1FuPRF@9!}~1tM2#={Zlb^EiIV zN%|nb?FFjl4l3k@nStT?iTi?(_uc~}0)2`_MiXr7`C*5={)}1cy{0l`ZmXq9H_lwF z7q6YKAb{g}TnDNMtM~%h$GP}p;;b3m0JOo+sv7=mX+PIkjwxoSu)OmS_nX;8b~;2` zj~|Rq%BK8$SvjnbWV5^}a_W0?O(}!1C&zQnB53;cT=+de#SGT&dCXkN9)--Ox?weu z-|Cd@_G~v?L9nJk?bWU7Ee63yh0WID z07hz~g1A2g71O31X!7tH6iHUKNN-MIO7{+WkgCrEC?JJ!g_Vk1%RsC5LpFehIqlH} zqI6u`f>~bPB0#O&kF04aFYxt_fC>I)2U2iOO_#nT{Fi=@00rLSURdg*B<8*cysR~U zs^yOC&u5Qc_xryiP@M`<%yWv{qBOs;1TqlzIryZ0@yF(O{T0Kiigy_3t$GXYuDS-o z6B0D?wXt62@7H?>sI|Lgp6u>dQ0}talXqwBE4j7V^PH@ozy1@^fyet)8i?j-YYP#XY3RQEJ@>-u!H3$cTH8selv0s$F7|KVUS9OC9l>87DFuU7=P+<# z<;Hd9Ey5Gp^wJ6I)pp3OmLlVgfhDzTo;EfiNMM~eX$a{TqWAhM2Geee(5)pMXTkN6 z@UZjFOw-%0J=gEQBbIqRiA*&kBXhD+tp}c0SOi?q~Rrx zZcd*zHsCEzy@cFG9%AYTat8bygHzfj%U-fTrR7`aW}tctK}A*aQfLI4lTxQa)Ec+mPxXF%P%{a^qJ3ekLP+tk)Vz2v*R}lCuewE_hX*K$ z%X7^4nCTNTWI#i_0&9U*w=!25_UN)Z&!q=Y&_Zu+$CuA(O77IH1LHZ?JJ$000vo_^?`%RJ{|=LS?kp{g0e)krjuh7UKea|Cus2;to2a>?yu z6|}Ch*RWI7rK45?WzPrE-p*jHLYEVT&+k7%3PRoIViotIVK!sT8+g{SjKSJ^=}PfG zF_?~7TCyHbK_Bl5U5WZ-Qm$_5^ZbzG2wMbCuMKgtpW)?=2nUdYL&V#FBR`*fX{7rA z72=Pxy5zD3$kZl9d`eusWV{Set8}TG1*(wC_beEo%EMoCZLF`P{sv*K(%g>kl9U}( zOie%s+Ygt|L=Q53Ft_W@5L;OH!vuD?37m4S;Qm# zrGEYAFAahP9Ia*AmPbK~5ol45_9s`_SaA1xs<-!#2w334hx9DjV8WEDO+I8jCEerX z=ONT#eS7^G6CIcmme-k(T;7HP!5#E-fR3g)E(h59@fx9+hac==odXO+DfD}1nd03} z>g=^&)Xm5D9}%07IA<>oV1E=*{Bb=Nzlzr|kayX>94$yly|XEwmS?J?`E!Fl$?uns z8*+NH=9~A%kC-B4f1%I!zxU4wSZ6>_tc;&X&$g0v zg95{l0VxLTdDa1Q_)jhrQRE>V+YZxa2g0;s9w$V`qxPRgE_(j;*X#S6YDhBN5b#*% z)RMooY%SSIZYS*1X_t=jVo`>@dlWZRQqEXY12d_mf;%^oDzjhAc^p@eDXt4~g>0xCYfx!`;VM$1CXd7%E7@NX{bKu7oF=U6p&L#C!nD~u2M9Ry1(FOxIo z97DWYbm{`-(-fqO+r@FlhtS?=O}hRMYJZVca)yf2k=A8#+;UPJCF+-h^R<{cDM0wiL0Hy-OC0rblwvyb0V zgJo%fGNcG5tFMt7p{)#{Z|C6wmCtpcId>E5kz^h)niM< zTH;G{VN4>TX~Z15v0oXDkDe*UowmQe-m550V&)3ZeUFC)P53p4)Y|1EP5_|{=}__v8vUZjBDzwULrCZ z;U|W4L<3WLOV$7SV_Fn(v9i3duFMSffK-hoMY*xr?(V}ro}ZukaK-Gy?e8mB$XvSeo8Rb&u@M-BuRKNQoyl0$oSzd(dz-5c-Bpqfm); zWF+WT4t|6WDyZ`{#D5POFZZyRB@@CZh|Mg>*8XOdil64}OEtzHKK~BF3tiyzzayBl8~S4-*2D*i(0k)TGmghCHG3nFFA(||T;A=YvVUEb{X1Mr(&l||mTZXln?Mqdr{e@_@l(SHwLTgDqgdFnI`A)>~eAO(e$2Wm>t*4Bv?ngJplpH<7d5 zgn+#y<9IW|%EvkVRV=z2e1yuVbG3xHV7>6!iL$o@tJRMx{2Q9gv(c!zWoKp9a3^|jwF9jpJyd+iLzQY`n4?Ng$PTTmMhn)$Q1MUDT`mPPms-pVDl{whn# zYrCx3b}bw@u+#c+di1Bf|B1lRUErmYkrY)}4^3$b_QPxBoYLdv;QxgfMY=a>5`X;c zvjc09;6xIb5D$BJUi^k6LPP+jY+=Fn+7l4ka`TGZntWbEYEQ?}fkec%Ds_x=hF5Lj zQ?Lx6)NBa;-ctS`$oLL#A|eE=s3yd^I$~+}qLSj(X4%!>A1-&#zwIpuJY!#XO)wx4 z7I35{E?en}{wzq5PjyMKE2?$I^$tmG69EIZmZ>$+vQDy7dl;bSb~%>~c~Z|kGZNxP zT;F__c->$f-XeMC!=wneD~bhW^CrVlq_na@eL&HwH1?^f3(Vu8Ddc5X%u4cDH2m^( zlp{-$$h5I%Ggrmv{NoJtZRbbOjjS6CyPpnpsD4f8da|x9i+C|WaG%Zk^?xJcL>b!H z8|?@3B4U;gVJoGyo;MD|^Lg|O-jH?F&D4ZlTa4yf1yMuVVNJ&E@pQlHsteB9&Y5myDVlk zLHx6{IbGIk?mf7RriNr7d~gJw!x;8{NF0M}_Ue>tb~%`m^lar>$t9Xreoja@mN9k} z7Y!H{ct^{YEZfTz_9>EiKV0Yh704n?13DGKxs*D$2Ux(IdiL<^!bMN7LVrcFkY{aV zr0NrHN-lLDuC!?mFI6b>aRBryEBzT#1;C|jU%yP?vx6FQ$p=^r;MMwC&#?@4MZ7G` z%2+`#BCIJ{AI*oweNz~xW#`IYzlTJNM(Zp-_U+7S2kN&h5{L~?Rv5j!2EF`X=ipjun%U`8qNgI4c}P!qnP3 zF>s>4bU)b@6HN;O7536_ZdMTLmusBo>0)KHVb-HnA;Gk6L{lSq$)g`Wzjta3}+>6%rcG|rE=*4rOpc6qO7?@EJqqN%xJ z;fR+^1AHA1`bcosTZ~zw^u;P;*rsfLlgVT*L?Q(-jUUu({s^-x+sy2`EW?EgT?A;B z-4!r@l!W~F=&pZ-m{m&3Otbgg*IqjvA4omQa3N+Y57V(m#K8+WTE=K`nY^B^ka{t7dUxK*Fb;6)`z*D&x} z5Jvye^Q80-hiQ;qfPk=u7SKDGBB@uu?CHfPDQ+UE4R!s$h*i zXz8i%S%3fIpa0o!ZxJmMgQEd+?58yC(H} z^1i(3gj4g{iielczr1D-qu)`JB?>%JR3iMI3|WQ`fj}Zl!K6 zK0p#ny2S5J)`L{uyJ^47x8EXcORObV7*Y^L@Vg;lBDvex8F~Ie3GUstuTjR0qm)-k zn*ECZ)Jf_Zf2*c5GTYUfzHE!wa0&+EbxoPPf4gjW?Kos}n~y#yn0)eFh;N#u6xH9f#Tg0le^g^yX543FyNedrP%cWXgYdjPgeezsL?H}L}8}JZehb_Th z2owRE?oe5^--h5{=llg3Ev?dk2dZ ztaSr1Jm7~5>Ep=bTiu6L8)ILZB3_p_7pMbrFIHOj@cA_!S{TgYYF1AG=+M^!z z?xoYQ;;S$|uY>NBZ%D3WK4#vCyur>8lXB^WUFlgD z(rqIjD?p2{0^hf^8-#3&LL}_JO#yT5oG)gqep|(GNK{;$Bk=fh87O%Nouq z(nRXV%%~;HkJT_A5^lsDH4$>G--@jY7kagA+2g=m0O$752l+YOhG=#8Yh;-_C!AB0 z-cEL8?~j2z9_CbkPPQR(WZflvkpKIV>XTN}Igaj+qf@!cWMAXVJ6g`Rvx^-sTmzhE zg)0+ci|+DRy7M8?hBP9&wtgp1|0J2Es7;>=TWIEW3sb_Z0}htn%P^k~Er$o}b5%n` z;!W!+oV@3-kY_lSh6JH!@8)_$iW7Xw0C>Wm$K}2YGp|o7C&SEhy14#Hcd@s==kN*# zxgr?v>^5R)nJFbnVwG1<)WEo@8mWlk1cGnv%qR$Abw4q^Q=Wu1uBz@M-M*^O-sl#^ROdTK(WJKf!E6 z!f{>X4Y5eJEL^9af{5M$puDHk9qY{9BUW&)qxU}p!XW$I&}mD~5_*Dpb@ zw2~)qRP&_;-;oN-0FM`N-myL&hAe(F?jOHL88=*S0?`;QM1oxck9qguN<2;0gV@SP z&qX}26irC2yQ|M*9rbL|R#O=Q3Yqw!tm&iYB8)Q^d=s^ zJQwo(PL@XUSE1E0bO=Cj;L`(oI0jl?1%3$+)^; zeBW~sPg8Z)zALxZ)?^@o)HhL9K+sjYJr?7C*mM!rCDEPo+TQl}y8mp)bb!w)pvx@R zyDseMtV&5@>ux3Z=52d(l? zyD!Kj}`W+P=9z zevf=X1~za;(_T!=%1v>C?QjB&ABfU?6`J3pUyy+^rq7<8E-O1u16n>~d5di7($B-} z*Uu3!$U?G$KWI|Rz<6v;C(g1<)oU(r@J~d+APW~bQ1ZIGwPa!E4eNYLcbv~GS0x1B zBVouPZjEzF{dF_CI{>r;eARi_hn4(97>uY-1)#6wGSr}yETBg#S%=AFYpMNA42*aH zx8hTIe0Dpa%CKW=~SqTRd&{e}G^VqW%k zG|4-ylhtYigFHGaDG7{332yGEcuQ z0InYs@YI`R;L?H}`RY&pDc~26pR4_r_lq(=Xa`y!rQdY+pA zd_aT0JJ^SqOs&b5E#~f0K)pV+sr()Gh1C5Fww&|IrnErX5L;3!){#D{)EiR%0rf=~ zxLl=j7_dOwObqUkaGJ;LFA40M@caSvMd0S*g{;TeB?V^9max|Fq(3G2O~;J~=bs@L zX;f25^I_*`>4TLw^0LPt`qz4ZbknLx!l{?CnZ+}-yUGI1<0wdzPHyAfLmNHXozXa zN6QnuF?B|Yl}eLn{=({J`TNMEj8G`f{hx&Xub9OZ#?(Qo+n>l}pi zOC5rHe9jZ6xv4II&7?l|j0B5(<+rz(C9P_E>MA&>iXVyYNi~HcIOEPfGyh)Hfl zP{_{7h3-#EMGv-J_4e}1GaI+M$Pr5Z=)Lk9b;G#r^rHDwpXBRv8+A6gcuSI+S69eO z#xU7z8}4hZU2eWV!>*5U41D+)7FCZV@qw#==o6@TxJ2I-k)3h3+a0_bx!#a!aaPl? zQAK>%6%uV*x4A6Nebo!3@Rbi|mX`ZA&8zlV3V9dxO|iwdTpMKHmeYh1Q6&JWwxrSa z=9L7066w|QzQrwXLFQ00^UAW>09w3?ReD>i_qy-s#9N^I=3vdtDXrs@S1Z>sNkAGC zl|1$(IF7k^Pd*b;y)>nzAsL}$7Xebq4LCHX+pQO3+b&j*Sn;w36_b`MtyIq_+c(}F zxqb_BoVUWAgyh<^I@(L4;YX7IyAaI20(luQ)L~C(fbVOiR!_#Kvlvjq)uO%y z+16bVg0}Z`xtd_vWg@U-!57DM2Cg$%1VBE>tkWkJ)ggyi&(WeSw+5HyD;7a;(+w{`#_hgi^Lh$h-6ze zx8k^%dPBOfhV!vkE2*7!wd3A`R&{P=@A099s8)B&bK`%@s+Ih4_C9q*K%( zr-S#Fc&CmK17LS~BEp=9W!*^=C)RDtTcbEz+Wtb}`Qj3=hjk4cWCrmb>6NBUm7@&* zl`?RS_f^m3cdi%`?9TF@3jzBoom0Viea#u#-nma#MEfnwcZ6@L_x9449OKN{4``Xf z(qr@>+4h+!hP)WpQEj(cGSjNSaq1OiJ0r0boROa(iV-2DWUnw92qVTiK^9lSz9Yny z?K3=oh9^cq083d{T{SnO&P7+LJa>~sppfetat6JH?ap(0e_l7((WxLn)Lrm5#*o_X=f^0E$;76nzf*tt_ht^sHnU$QxTpV?Id%pTb z)SYobFDXbBEREzGm;LRto+a3GyICtoA4YP2G%mt(z?#|?b4hzq?kaos22$2~V}O;L zOi{ml4LcGUv^s-RluG|k+qLc3b>qrkl0@qEIig6##z`DwIz|Wc^;6v4&dhmQ@&g}o z>D{{lLKm`%B8#bxmdyp=myZzZ>Fy=v)4Gr*8eCJHy3r<=F;AOCy^#it$A$9R%}am; zIXZufmA2vBN=};qJx5O>>er{_)J+Dhz$me)-(Oro5e zQJ>|MWUf885Wv(US?O)S*QIgiV*TTKmrwXbT}J`q5W zIuteH4D{YiS8J*Cl_)RKRWJPVYQx89rP49tXtO zS6TrcX=Aj~)^hy0Q`tU78arICgh_rvfgl5M8QMCFVX0)mfL==9__iE;Y&V5~KhZ#t zi$Op;TDrds;K-daiw*Vyd`dtF*MK1Ed9nFi6Q3`S&t^3sdP@r8t-B!f-mISlK5n0p ziM?3MNw(_RF)mi9q3?oX@geJ z=HnKC3r@{*ta3Jf^giWZzy~n~9-q8x4fL@r*EmSYwUGMJI!)8#Y}EgS2ocMdC{f|u zIirR<$6SJksWfk8;`QG#*Vyhz5!r+NyWa1wXxi`V6){X6VlxZr!ex65>_R!Q*SdV>>0W0PT0~+-LLMlxo%>aggH9|D?s_4C%hhRsOw7a>aCzK zdpyob{QpQGL_eiAZ?QlW^Ac|Bv`$)U%$acVuHNGR!2uChLP(p4dbI%O?9bj~o6VUW zoL;5P{z()>Y_7lOF=7|sNwSXMUshw;3YOtD7r&AxhzJ&yV51~pVjD7nN6V>n3aby& zxoXb;Z<-)PFlyOZV=Z8(g@q)_+=tJccd4eUvZ#Nu1R=?I?b$W9j;x`ioJR)4t85K` zYF)kny+!SAst110`cMIZOf};^oHxG5Dly>nXD?moJg z^NT5h2!?x@!7*%Bm&`v!q^KU@@*z-ro4*Y^ed_w}45X|>Gfcuiyhawu=6yAH6gTWy z{&?kat^4SfKF2Pav2F>Ddb@z`Wz3DTPQ)K=lh>9Zww;zLh}w|M_?nMQ_?7fPM0RhV z15cN$v`zyA_rRkt5VGK#^W5UlFwY{c;d1<)0N*G{B{fncpyyHGx&^@02AFqi zElcxe20JfB4gC6U*|G6$k|@=3l(r(U?jG0u-5|&b7fE^IEO) zSfCUjk>zQ)_=jylZ=e><&et4|v=F9=LQzOc0t8-L z3N;3&P{prsC+<#Nly!*_@rh=w1LSpf9-|xQy|}na%9Wgd+@p8z+05r2q)B3vYxU7w zb*cafOudpVk9*KVr0OyU5eRI{KFGvqH%ngOQ`6l%pTGz2BnIy>+Ze)LXR@r zYs?hFAWGE=`r3gtO9T5tkjRQaroFbY?`#W7c>;&Ho;AF#;Fyi>=~=VVMxGl8`F2x- z^0CtpW6J<##fJ#0j+U%bnc90Ly=ibQrP8n7c0OTKNIv4g;~qPF$Qu`7qAG&KcGBPZS5Q;LncLm( zrEjcvR|1t(Vg*~}<1+@XCW5?0EnS(;Q%j>G)!&E zc?J>j3Lta9nT*7v+)ZQ%OK{>6FyIlOu#0D|Iwnj^1jf&_Q@xtu6PNqz$~}3arW2;r*tB7QQ2hhcFpDTpQ@jh>enw3JKFagf^S*z zXT?#cj{`fCX6iKf2?M)X5`lfYWo}2{aa(qkmcEni(ZF8uQ+px~Z$ISgiC8Ys=CNl3 z(A}x5lqq=yrKNs6!mg(a@Ukmnz1oy*8z7fx_&YUrFd>?%fl(u*KE=@`ZxL1jfBVZ| znH%v^$%Slo<$+&}48H#qqhM9U9#(3I>~#Wk=bUure=PJUimTYyKn{DUT zTd5rcrF#KgS|IQj$Nfu)S%`%TUbEr$!QXFwN!9Xc1ouVb3HA8NiZJV>ldX_~r5lx$ zguVG-91=4C+NVwYX1~4v8S$<$r|bK**$qIulX`2UNd`F)>HCS7z^stSGYgP@^F1VZ zh;xqkkix^g;UYdJz}>2l#bU{lTx+Abut3Fjx;n!tw0QzlJew8aN=Yj4!z^Cn2Nr2>po_IEC1-}4w~;3Jqr!`-PlCH~4iR=$)y|_abK~y9cvcuL zU-v$nfpRYHVT4&pGYxQwUbQP@KRd8Z($>ZT9e+%FzT88EU3(OnU>CrmZBO$**m>;) zfP=3-4juNJ7_wZzF+zjUw*u|0A(w>QhrdS#!bv{6Y`0qIS_!tMXG(?SMOz=SgzQTF(Hzdkr zJh4=WNab-XAIy6H@+0Ch_U%K0{ef#Am$97!NZ-@)vLzFKI`uEZLP#0VyGbi%U>p8W zX~{)(B-b$Y70d7ZD26{|D5b|@@q1}L#6lbtb2UV~xS6P9=x7P4ZmTCVBET;nj; zwsm1|J0d2%`VVf7e#nX;4h=12#ml=v8b@BO+Onluj2@+kUWSFN7{CpF*$)iKr)(|* z0G84`Dd%eSDH8eN{}$o$^8k|u4cpCo`{$~xWx=PqGHmosPc6BRj0EM%=pn0AXKL1g);bR{|j()1!CtLx6 zrQux!bB&r<*YE$1@Ufodo%yuf zYFUT_r^1~LhGB?S^r%Abc7-JFbM12jTAQi@BA$b2v~?QpL+R( z|Gs>cA0aAC;w^$$GwGQZ@6uhn=Zse1M(X1m%%^D~b>lrx&1nqXOj~;LuI=4@0+>tV zKK4L;nD!-P)j)~7{V93r6Jcxlcm-KkK%xS>?^f+gOtt;)QV}o_06hJRbAQZ$9DQC% zE02A5ZrbmE#+2_Hsrn05jOM9`hL=s}^M221+c)`!^GpecGwRKv}3B z>bSg5w!N*t-tzL>{6}=&_ns~lk0dH7LxsJ-gscLC7HJnr-bFB z3cAUBHe$hrVPAekptRl8q4h4aZ>#3rYg4Oqm$_T3Ji(!tVIgHQ-kN5U*VbwP7)KG} zUC#S(?LJiY*{~n)KOz8k5?sS+F{T;ePC9>N5cl(BbfMHpCv zw4PEF*s&j7D?Lsbdl?q8Vm9HxMynv@i@mF4I2o=b1{H;X*4QqnYwff;)L$+6^R6$?Vq|3%QjpTTe1@&ZiC*anCP; zNVz*D@RX}t84@eU8fng%X5vx%Y<2m#AD^i!fJHZ333#Cq_@Yzqd0E2B&Dp`tyLK+r z1|bw2z6nYa;xN3_yS3yJTQ+Ec*{KK4-4M%tiu1)OizzCV&L5-SO84~Cf>1@mL!I!{mF6CtIt&G<>DKT9E+86j-d&8TjmxW4;Uv@njR8-eplHAWy2+Dn3w9 zUs~Xs{5bpthP{9P5m7@1KelJpoEFWJSrq@OHbK^<9eEV5dKnf{zN`QdJ#}#1IzV?z zb3s9EyR4TC=o20J7(vj67<|k5zXs!$NN5D&+v<(*)Gn zTWw~_o|oFL;&vWe-(XnKtyI|?r+rP{a>!BvM#BNqmKKOpdh}y%SjerUh6|Y~HQt14 zSyDj+&(o85aA%LGABF|pN>|7L-|eX-J&oY?y(g8bb71+SX%hUai7 zRz}a>vMsgo<4X?Q#UJap_n6mTCWP%&*e8E^=h4oF#adNy1s>II-+qtq`j$_Yi5~`F zbz{bv%81-v*t}^zdHuKFL)3p5?j0vhf zj>=q>6_KgnW>Pv*q{4-)$F8=QWg&QHvgTU-xp4O(hj$&uJRA0s=cBa!r(qFGmbW$< zfD!}S%Eu=@HBcr%*I`{AixxjDi*T*tLoymLp}!|#`|`|tl8Dxc=$-GDETn5)(#C%Q zD>QfSy#@i;baKv1TzuuuVT81-A8_zKeUul%ICb37bQ&QY{s8*^3bBsV31r49-tKwYgg4>+h%P?7Mu<|#&g>Ixn=7pD zMk!Uv%U_ac@3gM&!1)@{G_~O9eG*4)2$(zV>|-%~9431vJ70O)6B5u{hfiZ1|8l$^ zwf%>-tKF?b)s?SgJ`DJAFqo4qCCa`@s+`Ba1@uFwTWVukHt}xR zq6MG0-rxPUEW&A=0ba|`b1$#$&-fi+2#FN1WARe}?Sv$CB!P!Oej%JvN+gPHHry`w zaXlB(PRyKvfsD?Hffs=wwV&Y)vjQxs+4Y*Aj2kgBIj*a@G67_RV)Cd6x<`AaO5PRv z*51)kjb3|6S7tHrZ|y__{Q@&D&UbLB(X0r-o%p*yU-z4bmOdUOT7T_-d}xx zAJCYg7K*%183^d1=HF62oq%Vx1*u(q_Vts& zBV@O+0d%-tb(UIYX4e7W)V&2+%DS1h-v0g1*Zvg&huXlhc~y<5UtuRIwD$Jvp@y@2 z!;n9QMce|7GS`;O1=~w^Gg2G`WYUeZu-o-=1BSf@d8`!R*y(Rd!$pqIaH%=3?F9p+ za(glSF)YGk_=M}Y*OK-~fN0oQfRP{uh$Ew2Rq$Y#{a;At^oQ{&__KLmNA-2|x4L{7 zdrq%3<$M0CFaNwoz>SmJqYO2fG#|QfY)(H38E|cktB&TwwAc5Skor%pG!qcoYAa(& zfic);1^`xeu6D)TFzqGCYstHO_W;vO$;GScSqVT0d8;9s@D4-&Pv4jj_7;^jVtp%+ZVy5Haw};VOJ`YTkU1 z!OhtLkGbL9wu8{$4Wm%A5ZC^%26(5mrIwQpyPQsisnV zR>81Zu>bFqCmw(-q(*Qea1E|~&qAParebY&2SXrD^b{=#srCdXN|H|QNSC`LL#zh@ zD1uN6Vsd+s#*YfQE|5~{1R9$@$f-$9NJ-r`ugc8*R#>oJKSEwiNd1{t)C7yz_VPZ= z4MZ)i`e4@EmUpv4u6-uFMfn^AcYG{QoJj`x1rtxX@{Nt-B!&pvsmS4`h*`VMY{TDu zIr*bGBFDA+0L}{8Szx-gb?}X3N6inAIn)}HWpKdHrEL85u!mR+GgsbcIv0MQ;(N3_lBU6 zy#4KpY(Dg#m^%~faH&){&nCbOt5%;8A!|0$YdgD}6(Y*nDpKL1x=e8%f&Gvag=KEg zv~}$o|9lNm#@(<*&rGLbL-`oee0+$IKSIxR1%V$SM)irHUaY%diI2+I;ark(yb=oEqPdvhzbi-lh_R}<#9kTg2y0J(%-P3MEkulmMDz_W ze}23~9Koc>$^Z^RO#vRV3y*DbS&6e(yDFE!su^wdAwUGbbeJ>kBE&3ef;eXYwv!UGUTz3s`1o!xlS8gyUQ@ z;cEnlZ^W*}1_LdRtBg>HQO3zz#-?LF0$yGKq@&{i_*+8j*L%R% zkju8^FJ;Kkx?~RQ_L38i2_U!$(ZX)n{UgSzX+GGJyij^ewXuC%82Ann^>G=R>t>HQ zft81=u}Lj`<)lujcTJ17ca81qP|(kh5WS$rg*!kp)5vM)8Rlxjw%cmVSEc38kC7a+U^@bQ=)kjEAkx#75T7W)DH3KXFh#Ha*CC=^6aNa{U)-hz2 zk;SBGKfa}k=q`J0dfmiuUr2cLA;h*Ri$QG>OGo3G>h@Kk1wXH!Wpazxgxbk|HN!( zA$T5|KH*EK9-rHKo#y@e^78XC5aF<%OYz&|#aaT4fY;`N( zCypM77vie=Xuw_Rp+>88UCVEMnD!mvHWNgKdHnWoAar#tqxa3th+MPr1_J-u7C|u( z>9gqR9$Tjhj)4ryx%7sFetk%P{eFpa+tLMud=>!BQO@S0g2$kxhgYL3f&FV+MC9lN zR7bK+1|w@MLO8P7pRsovbfZA8`m>@TQ7t8|rE&&@?$tXry~q3Tnb}9A+0|`-Y>R-1 z!;7S80n?9Mqz*r?=kb77jQcfbe#PVguzVlK4nUp3$p%p`AZ&KllC}yfEn-v0G>o8Di zWK18v+IIz9@C2Jr!`ZTPEuR=^^9E+Sf9`FBFnjR z$I4Ni88H=@7BoajuO#v-=qx_k^UYhkH&zp-Wq-pn;4~ylV6tcI3aRIUNeB+6Z0v8s z0%n;NUl|TSy)rhK^&a6aa{c0MZB@l*T{s4x8=P}Rz)x4a|FA2hA=qcUn-6XDUZw_P zY!zKS9gw4Sos9^yLN?c9svj@u&9^-vZVmPk7@d+gsy$&=1O-8omT~G>1!1dIWSr`f z89Z7wxr!`&e!YY^t4%;tkzg*fhX~GE{>ZOv9rq7Mn3p#)G7FsbVRY{ zv#d|ASAB)oz2737RjUs-@=l>VBvZ%k2YcJiPIu*``)xo->H0FDdYr^o2f)^xdm?L( z1p0_<*{}D{ulqa3S%5TYAxLB(t6!-bb>%ZVho3b--rcE(}&vWyQx_w75|gk$u&}gIOWRaMiP^hyg{^mhc^2C9hc# zMrXI{Wy#BnJ@{+P{+fWww({gUvC%T}A}?=~GhiL9Ph5cg7#H$}ZI;;jPM|^AZ^@~Y zLqK3y%-*ibFn=%SLLBGw;y@P35Fm_C0k8*)osJ~-ym#aOH7@2gZ6jKM`hW@f=z+zl zcFOfknSS|tx9$B`+?HEDx*=KbtKpo2Pp*8BnikEuIA8Sy|7Tr<>%j~pN<6Jjpak4#pp4O;Ia;aVb-5%|HD?PF4ep?seIwM#0a8XU6oE{}7 zMu@{s2Ijf8@V$P&ScuaKlGJpRe@c>Oh$!cbvHVq+YP}A&ce^6o)s8L%wk}{rd2||i zDBw^zt5uMsC$61-E`vjSW&mV31O2EAbma{$j%2{#x?QoxPd`3{M7It!%cO`Ppt>$4 zvxkqr^RB}@udVr5&-Y(3z_z5FT*|BfVGq!^GifG&?5Y_c=^A$3u#k#@wO4+;A+4#S zfef6}l2;_J2J&>jgF@5@aTu?TgdK zX7(Y{S%)+&e3jyT{r-+i0l<#PO1*%~!9E`u4QA(BDC{lN{h9)P+ZF71gN?B( z?NZDIu-3FGr$7Jn7UH)=c5o71*Qu_IPb&|eDW#>W-^Y^uH7*2n@t@>>^^0bsERC2_Y#`lwneyYZa@yg-bxh=omOf` z)@U*Xflbbph5mULjM;BWJ6Cddj+d zKx=RJj+C#Ui!`LpA{{gZ2I1f9p=hv>(Sakg-TQ67Vs6qXO*?D!WQemxovSN*i~dG- z2Y0!f6~owvu9J73MMptUo3yd{sgBeEzV-V2>~=-CYwNBsY!%lCMyyCRdplNLO*Kt@ zri38GT|V!ZMG^A{c&`D?TE@PbE!E2DTnq2MVs6vaM_tsqQ|e_LX`}f(R*oBqT`cl-E_g>0wxe!&vFKM7CFjsBM`o_v&Gb*Y2?InFsqAK+!09 z$5Ub=LclNT)jS2PlX($8RY?#+$BlR*n)Z>gplLL)C1gxlt&35+$BC$WpX311Mp?QS z5G$WqoAipfv5_kI{;(Q!@ngN0*1c*UD960&uH?0kB3d{LzURlN5M~L9sA?mB@tU~~ z>jm~C+5VuipLwM2AI8_O^QykSzhjOh0(_^&EItzl=n&Yj z4D7GAKtJ}q!P^ZB$&#$iJ8@GR10kauJl422DhsaECma?7TE#Z_;!dsana31tF7}s9 zmx%PK(ofhGa@X(b^+?i8@DmtFJzisqvp}iu`=y;PW6XiHI!87T$9@=QwI!Y^vn{DS zEkEI}?~ntz5V(BuHu$4<*ZMzM@}{ajYa;V~f4#))ueQ9WdjkxrtYwHBt(2LYY?idI z<(zI;2nLf}W-lz9!ELRLJiLk0t>j*=qZ8j=e#MLe2lL-ZkHCX#4SZ%N#r|4W`FLgS z)vV7DvvO7k6|?USP;q4RDa93@ff(i9g$}b~+@&>Rce!Gd6~y~pG6^F$A=Hmd*EV!_ zSHxh#S^#R~6zX+=Gj=PAGmy{TLOvP%zPa8ayj3@&t;n#d5oxb$uyL(&alK6Aw`TU^R@ z{+U0vg&5}jJcP`hyKE_(`|P%nEK9|4X!kK=U>zZL`RkCm>S^x8{x)w2vUSODl{dK- z$>S$~hS=5GECq~FaziYWatgvK(qs0KlXuA&w=2eB<1r{}RL~z?EtRh} z&As_uQ%D|SzwYI{%&R_HC2y16$SP<&98JqHh#|ls$h+E_i7uwgL6(BlnrL; zbqtQ%6}0pH#w3q*(kN9QmFZSa>-Z;9!L{o2cMOYARtNlZ`4d;=28lfVB!7wIgjnGf zA=g;(6U1WV=-1-T%O^(Y2Ioi*MS2Az8D16pR1^!D&SPnqiSMXBb-Ga4Ww`wP4*tNmOima_i1)gM!elFn@N56Bkn`j?72`D zGQvV=HZTvQCV#oYe-qJ}TM#g+UR%oEz5(__rpn_hpQ;VO3WPrthX5uuHN>`>+BJ)R zf5zA~y=|*|J9;gHT-G*gU)pPzb;k9X^zAzeSnEy`>F4xKgZAjDF)Yeh!$U3I2Md4O z%YQ!KLQG@OT;^8$7}#2(X#iHY%+Bae-Pf%2+q8&tS^dQ$6E?ma;(c6KsgBc%O)rAF zTJ|31v|51>6@+9y#!Y6?x>nV+GLZJX_C@?LE#%(9_DQ1J$chzwwyd53f_UuC`#L85 z=Lm#MSejnpv=HmhrZ#dRq0&J|6gyAs=`#=l&GyluNSVufHs;v*R6F_qX}h)^xo#Zz zOOmJy`8g6PB>~1Ub{((x^S9VN<9*b5Aq+e5xEmmJA*(2|c=9$sY}d5Pr)?o&Ga;5Y z=j!q!9EB23!|kmPB}{y zmo&j;%p$HufXi@5+D=zh0xVjDZWZK4}BsvjY0j=7yJ zmHnkFyTA2k-bvNUHsf|xbHql5jA{VT0G}JGw7qJ1AKZby&cWI0Qm#+pZdS;8b?KT8 zD7mur?Go(GvG-8N-}73{@B0{1XSXYFU|8No>$W03u1AdtmvR-9k@8G%y zn`#FyA>i0_xJX|;-{+J2MurrrtOe(Orn;Vl0=_13+fJqfs&ap_eAyMUVu*-s=S=LA z)4hyeEiE3~D~9!4r(|I(L*@?*!^SNe#I#p$ZCDkfUKc>4UiER^s*u%M{s@=A!hw3K zQ6ghtoi?hBfv-IYL=nqn@Ti%vTm!6)XQ}G*5fC-^7VoZkVphm{ZO+WoJMR<-Y*{+H z`1@OFh~vo~fY%5Clk9R!Bra90@L=#6VmM>|yyX4Gw`8na6|!2jpJuw&$hdmNt4#A~ z_%stZX1SIx`!+@_m!@5sX3v&Y_|fbMGV+$FECtc~Nzjg2udcQ>Xl1TNi03+$apFz1 zH*!7S2Y@vQP{4C8pFN8MpH3T{OSUy6WySVdeSp8>Fon%YW{5v1rEPk zezKiGs5L3z&Z=kgsRM2`6>h6~S*Q0dUa9VvWg)BPQYNXVdMd!;2D|J))D7_|=Xu(- zF63)RLljrch8fic_W`pKiL@k!9TlHYehW&!O$%AK(GuK;?UAf|p6ArETVDQdzIML1 zxqa?wNUJz3q0+}$c`$k1H)v%}rzYDu-AkIkObc1J&16KJFmrx z4uN6}V;p-r(Q-w?xkUt^q6HgHD=8`%wvt}swgPP*<* zHrUCS6|*_~fe;_W9x9*A2|+1q=DG$yikm@8Hq&banh|a#HgHl+U{4434I1CPsMLr`bNaqns zD{f-M${pY{fAxi<7%bof!y5>F=+AabpZMChZ85B%CKiKFTO^0T(F;i3$XwK?Kk}30 zR8WNS2JBN8T))mis#FW%mKyFU^MmyIpD~xzMQB`~oCgr20nwHtISt*_|Gu6)NyMxe zDFOP-=3^?VPix6_&px;+?!@em42xN^w7~C95^uJdgPC(P?`X%>sNAj-hdoBcWDrbt z@K1ao6uyV^#y@Gm3u`HP+ z%Q}j>64L2X$5{I)EFJP7gYYW`{DR*UUtPKvghu(ao@$Yo5AO(s_r?xhJ@Bt(eRT6M-+3NL@O_# zAlm?C+j8Z);bzxn;Qwo3(wAj1G_$65fXcw(boU`^0M4$oSMMML^@+pqOArBoq-?_H zW*G%|VFP`WccgXCI+pYVWQ4id3<@U#GUswzx&SfAUdlq`8HH=U{cA@<5KQC`vI#9yrTpswpgVhrh}GCD~))7ZLU6CQ{myBhBOsg_MzZ>y5XmN z_>>^cJ~z?_l3q1Of14IV25?C$KsLO{ZU!FUarCq@awWy}y_F};h|)nHhKh5a;4WI7 zrR=@WLLA`a6L_xE=YRbC7NUH#whseBFc?-?Np0}R*&Byo7d^9$%Ah-MurT~0x+z5voT9gTn1oJI_CgDF1cfD*cIYpm#A1j8%Stp z?h{9?oHb54R-PnVzLgNAs0H|y_mHiC{HYR`I#RC+yiI=0p4b%vuqP#+1AY~jbXSR8 zpd_i|nvO~5_TprJol{~aD8tQH0PNOOy5ya4GfB)m7+4;3l~3>$iy4<%^v&QjeTiNT(2xpvP#VQLAuDv!7YK6##^o@AIc$UM!>r)$3}qbX-E&K-oS= zLS0dzSKQ2NL(Z2Q3#k!@6I(#{ldIw9B{lU{ro9T_nOq6xrymPBW=Y8NP{%fbZJw%;3mEO8$%ZKxO#-=H2ZsG<4D`hd_wIOztnN?#UtyTchIl>}hlxSgxc= zhD*Mm=B2yO(Ab<2ycY)zS8!sHT*wD5e;)Ps9Nxv-bsk(zcV;1`F#xQ!UX;Px@MEg2 z8R&Vf)9J|rKkM!+#I)R2tB8`l10jwE4w5quQmPC-J|Dz#cW5D|&7O-&_L)mAKtJ>p z@ZEOA^6})8DUpaM0Boau~$7D;Kief z0L@%-p=S1lAqv;? z^h2+i&<_&-`;QO-A{hvp4OS!qQ%dVd#SX%?5$~SQla~@$7SfRkR8~PPwNBiDa)4sJ zIyEN{O}Q&&yz+`ci*}d+UR@a9WglDSHpPyMIO`^Ql)Z~uH9BlVXwyD(Y#&Jd%I9UP zGEDZ9{rn!YXahe1;Gdm0d(9ixNyT+3yrl3xF!9r}5KoqBUA+>P>D1gNHP+S0B|Y%# zt{Usx8MJ8S)O1Q-H6fJS0z}JJTqX~kisb>}MRo1Gt`O*L*^daz62Q))G1ElUOgptRK#9HS z%4f=53zS|Z20@FKjX;%{4Die~4h86OdXak?;_W8SObb~xPP~e1IV-y!3kz_Wip(Zf z0URGZoB#RoJ!H{{;VP=<)(2N9h@YUwUT?ERsa#d2-j;=|S?hUgpHoDEW)qme#${0R zzSf+sI*hOF3|h3h=PHW;&sNVX?L3nD>F?aVf9O%2P0*@QTb)$83mBYP%tg5r{As08 zYZ_NCt@#pM9#7ncB5b^(BK9X4~@F=-XR>+wR?^^9IP? z1`VkA{Zu?G#5SwN$A9;=;mNX-&y^1_LSkjKrNtkccuXFE z-*-KfwO?Br(o+PV{~9S;a8U=GS;;b``)sJ8jjzXT?H^I5F#!1LvT`?1pdr8?8T(b> zxE411iHKN~ZD+Y2yld#;e-|Hi&8|Ib0bL$+9l-4}Vo|2ydbTROr}u|#e+N!$97&QK zxb?f{=J&82?TDUrkk3DBLlizZQOaeR66bM!MSn?&McHPc0Zkh~WCcgqWwlX>Iu4wV z2Ye`18e^KcDsN}X&AjPEeNd0TMR~Va9oH1hx3|n+h-uR$pT`6|OSl8+m}b{unAr`( zx1Ze6DBHjWz(KjX@LHZpIwI(6Zt}sh*|mA+Q|d3~B3K7bYpFC~T}#U<6+M()TOiMQ zOOSqw{e_r@l>+O`$(u`GW!v5d-m=2Sb>=H<`;z+$v8~QbB~#mpDRpWO;|+}{A|e=jgHvt@pMXU&EV~HdOmJ{==!z+Sef$Wst;4y^q73_VOfhdDwjv1m zKGRC?LR4?nvl!!4vOm!3rUQ5hDhjNm3m>dN!23F(<854!Z5aqHey2|+eUbu)vTbZpYxyUMG{kArcKcYJHHp5wLnqr&a8&k2EP>^a#}E zgF6N;L%W~1k2e&Lxu<%hxFU(p)@otV)b^O(3Pp|XqM;u@!fdmo6{Kq7jOm11!%Z!D z!PKc0uI{b@7^N>}$wlH8=sTs2;Ds1J_n%slr&0l&gD*_v0Jls0LCDxWRNnXUHT zeLmQDs!aIrm{r@|^?Zv^pWuHA0+`I3ds5|cA1U%%HZe${xs*|~)QT8Cu%`o;LSP*8 z+1DBM|JO~7Fpg8!hDB=?9=De?VV1eZFBoB)avcEiC7c*i76v>dUcSw6vZ^(MB$Ml0 zoYTDZ|6%Uv?~rVuv19^hqpZt2*B6hJf#V7jpKHm^SMDgpHajP8ADcP%>KpMLNIaEX z82q%;zKRcj=8i&a>)zOZ>g=`2@=lt}a}L6tkmHhM4|7K`>y~FfB3LMCDceb24-bl8 z>hb|3clqsC?&$9jWfg0$K@|v1SznUdx^O9IjRbJX4=D4GDAOo8PgrBP)HVC-W8pq) zFGjh8&_B!_h1fP;5;Ub`2FE(dwG=COGY$BWl^$dozK5Ac)b>RbkweXOPq z0zI#e_nkWmF%8R z)yEqeMex2VfNnc`Bd_gQTJFXZ_tUm@F6*vJ|H>W3*rxp`7(r`ub7OCR5G~+YK0<5O zt9;;B3M9rj*UdCoz!$CI~^BDQSjp(zyR*Y#or|!IJ_(Oc(;4RjY`?tFA&8uGc zXYMFwOUcW|au#Yl3{bp*Tlsw4d``7mx@M{H;^pL;NO1Mo&5z{dKNwj!JxwP(|CLJZRbl$*M1hD=?qRBYuGI1ykaYWHWg z-?^g@<2kz=Fq@j14inx!<7fFKZasB-%_vm(-+_>R zeTjb?7Scy9T9>hpxI5al_r)LsAj+vOz@Y2=b~h|U+rfp+2hP)$X22RLOKCD{^;&H2 zm40Mci0V+@3BEKfII_a5{*rvMDA;@AbRHP?5wl{w5HPmGSD*GhnDHU&Ef2W;+4zBb z{fJqy%yl>1MiBN|GVQVIYY+Y18xZort^A1bW3ov(gOGS<<0eNMr1dnvrB$!dY^V1`G2%s+io4UuKXoZ7fSjZQIwKkCykpGyFtJH43~ReEx!;2lGt8G2NFfj zNW36I&H~rAXYp%EZx#Hhtqk#F39_6}u;R z9iDer^t>9~Q**wb%4s3l=_^fzf3FY$2i|l-3ag57K5%AJt|c1NVk$=n{43e1b<8T| zbe}o{2R8hQG|^4P0akg9V2HJgWVOYIlRW!Z9SAtEu=Z?Ja1E2d^@zaLDS@W;x;3+R z=Fl_-3lZXy*t|D_pO#)jMr93c6}y-hLCEQ0k-EL#9HMvu5BdbIM@R-;&fxVe`@GOx z=GwI0yD~{v{MIMd>-C?I4ju3Y4e>fy!2Sfeh(0RG*0?eXwP? z)PvyTx7*1lKuNmyOn9Eika2%NWLn$wDiJ7;#V{}*M!1Cw-Fx{zk7Nk2mAEb0z0B-W zwcF7m(!|r{0q@$$Qy=#2gapY6&E_pbHh$Mqk@rzpq(DM4DN*?bG36sjbzEi~^RC$eV9fzUj9A)+_>Cg0^%6qlFe%>)qhblrs%T)Qx^jaaE?a9XEKm?DDzyG>l^ETaWf_b-fhZr zrgKZ6Lfd-v%M6I}Z3tdBkM{Dv$Jf`8i4cv8(QNW4}aTJQPdr{QwSqZ@Yc@4Q(q4$e10^uiwChDMNrS8G2jj{JF^UQ%g zVs3oA6|uCorOn-&q{hv-!>O2=y|L^y~X2(18ubKszFJt=+O%(~@v# zy(J|4uGlQ?nlkc)7G-a%0tR{4#k~_ghA_aDX`NCM0{tD^E7)z!K;#U0-sdTsyLC#* zJf@nbcClWcG2izyAZ@HGmr4g8yWXHVte-Kts*C(Cuk_Q-tnd=1 zuJ9CeQp@!M4Y&%D z(uLnzTb)0_h!u-)HgWPJ`JlgQiHezqGY`{y=HA$kYk;GPf%o35?+>Vwgqp? zIE#>&xm_Exx?_!4F7FmQVD!mK>Mb{rvuOjHDvS_$ZAoTP4j;;QpEcX|7EDaw(|J%O z9|h8Z_vXHUD`dGcxE9W1t7=fYgW=6G#L1}DJM~>(d@blKiqgocT&Abnc|U>UX_Rf2 z1LD(eBF%UhwH)=sa5^PKEAdHvYw`#Ci66R<+KYNiQ=2B{_sTFrW!W7R^5A<+3= zUN!%Oq#Z5qsRaMd=lQ5Qn5H(>Hn6oy_p%7U3K`o-&0s>((p)}?3al0OrKcXv@cGyB zp!p{x<>;Kk+$M8{BwD;0SDz(wD*Hp>bzG^#3Q0IB{`kC3wbUVfmd$)X_SM@`WxhTQ z0+xl0csh9>0fQ*nC|3l+F%p6`HGML$Pr!;vnjCUY-SA)j>As;KJwJp8Xg+NJ2J72j zA$}`o08xC6K)AadORJAE+2oYQdd=boteBbT1%by5zN-208^!0XAvkJc@Q6>qib?zS zG7%RW8)tDP@YUoIJWYZ+OV?ashZW-G5eLC&vX_PE67mLK6%iaR))xM_!-`4yh8yU- zhI$9WJxU+uz3^x21dF@(g#)Y*zXc8h_O}%7YAXwa*z8Ggsb1thueFT$VMy{a^hDp_ zG`hV_lcx$UqWmPM5at7 zgqr2`#@1SfulGKtgoUJQUJ77^tk#e^NAiqPANY1a1AE7BbqBPatD&CJ$IKN%0B5suk*- zI>=20iBEgia?ZAOt!#5xA(!D`M_0-1!-&93QD! zR`-sK$#So`Eb901kWa@Ifs01lg#Z6o&b^vcwd^yVA%hOz>$9GoD`dU;CJ?{T+Dc3i zJbm<4K_y7UyUTvYbw%KsDMKml1D4bKqI~2zD#qW0@+7$?`MK{3*~eN0;@U^nFWzI% z#=UxzmEDuID@A=euaJEd#{MB#=L9)B(>dZ(TO0n`yL{$6TF83M!nRszd1xm}Lu~k{ z)QP>#&c;6Dz9MivR-pMWZS-~h4jDn8R0d98%41anG(pty zmZIEODd#eWW_|yqUw=j1d~5RtfZ}Ptxl{93L^uZP-h6WO%LUSp*_7-V!1m$7MntfqhbeteGr)mQgsPcU)@dtb??1lHvZZuZf0$@Kkk-X6a!#wjH4 z9i9C3mrIv36!^F~F&*h+Yk#8p=idmwa7YR``%G<1;+-YW)?xIbpf&AdzwqOC*kXZ3 zRZ7#em{98pL|J`?R?`YCeMc2j5az8X8c008NCrJUawhzjT{ZTrxkv5c$j!%)_>e*> zPhRR5@=6TCQ2HhL=luBfWrx%cDacC8Uop|hEgkg) zq%spiPC8^-mCM=+wVy9Tt>1G5Lvk1C>{NXc6-{_|=|kYONfn zEwE9V0>6d0e7c$yZ#=Q#!=QUEk56w=UJJHOK7#i61P_zb#%en!d`O`P%f&y0d9A9O zck6^r>u~I+=E}KM5p1YjW@`Hg!dHthc$=Kp*jlob>c#FW6{>w?buu_F=g?vO9RZ6L zq+i0vq<8EigJUU!WWm5dz}m&K0BgtKDihyMwBYJF^(jUN)T`7YxvV-qmd}oBz5X3i zv>8eYt{gsSgt-pP1lt^Rka^+ACYFS}Tsj$G9G^8e{a5 zK^HcI%P8d`I^Fm=Z8EM-2=A~$j0+yKA|?tn*;Y@7m7d#K-s-t`y0lAkSV2Z_;tK4* zlh)=f4Ogd;8PRc%H1skO+Hu7gmu@}YYt(t*N&bLN00cSasp%tM{Jbw$3@-7eFQ8X8 zC#)-Z1=0M$Gn;eb6$5YEkem;&l)haR_~`Rce>B=&(XotL42bVzwP9 z>f*Pf+*&$d&%DaI^sjPQum41N2pAWQ>8*U&JDaDL(mdXTvK`OvyqWy`^N6^D(6q~; zs-+5eLt*bA!fKv5VhY>8qI!)$wV-ZFbNREz(bboC`s(1!R@Nz(W(l5;5wcdPcz?oa zn~tRAE#S*;V}RdSYxDB%G1tCy3Kwd_wBAK$pWtsgJ@?+{$W zi-^4qL0LJQx25qmWP_cw_PsxTGk08HeuwNL%xKlJye78PE@u-ZZ0O2!HmHq@Z9Q>? ztQX~7YsELbQ%HB}oVfNgeT?8vpj| zdx)V|zty5qMor$It+YK4w8q$nv+|89hhVA@VIFRV@)m@g!*fm9UB>XVvWp0dxrI;u zBu8L)(l)H9!OPFQq%fa75c@O0{9v>O$(Kr=xApDi>yCIg zY+Kguv#nM|1w_lB=&_gZqDu8L{p3Gb-{<3ZNP+wTzrqPzmaFszc6#PWbD$ z*ph)D<9oKX(dtJB1Q=Xt9p3BPMgOO81+7^t$x)j@Wj5ZrSP2kM<@WuFFemq`(gf!hxDqPb>I`7jQyatmKuQpMVw8P!;3>6n>nRyUi-iM`4`W zGC}|6elh$ftdL2^bm~ezPA7R{7W-pa_6KV2*{8x>VC`Q&{``z^thr=}9H{$2-b%v- zw)t!DusM6Xq-ni~2Mo?dVzO27~N0`+ZYNXZj$nfk| zl^Tr6Mf3zEy!2=M4_C+;q%PP#?UtlzueOsuGli}C3-K)&K5>P#W04Lmn3F7_$xNRA z03TMol5L)O;q>pgLQ+^Nh+hGJ-+Oos^&t>?zpC*!eO?z*ukPVP-Y(Ll<0H?#t@!Zn zQsiAqhrxkukmpO{q`|?3yqtp~!;eCr`Q>*(Gz2X~e6C~z0_}$C5z>)Yr0l+i=SZz0 zYr=W;Q(*mTCGh!={nqzCk8l6X2r6Gw8`KE2>Qwf|vNFUNUzRZuB|r9Dfc1EZK&4w6 zP9mH8(X~Kgd`j^={vcc@e|*#ST&#a1U^TKf%6^X7^?8(t(csI{8LAP-^W!M}`0cnN zU}1F#E_I~YN2``dM?#ct8^0>&V(<BPUU2a$z2PIUxv^6&mpZmT5Bv5O0&9D-xtz8)`O)G82c(q| znLrH3?a}Vfus`!oK zhGx8Yhy&Qqx0tBUUh=RY#z2=n_yeRNa$uwCT9*T*-yh%N*1q?BmEC*YI!CqS-V1xs z;o_Hh`?kcs#VvlfRuCffPN6jY3>DHFiQ7vB0ra&Ra%5qvzd-MItHnBffhq(PShQdAH%uN=!(!ij+U5nNO$qww3hJ--N6c{HCm<3asBaf`_ghS51R+6CaPiBm&eK#JqTVh!9qJ*4ku9w+2}>E{Ecet$%z8X@*XPIwLf&x6lyMeyl*v zvOgCFiG7VqLsmMCRlGcq`YuLoAdqhC!MW4&2NAEM=wt2g?-3X3mJtR{Z_3_^ii@32 zhaelv9LMJCu<(iMSHuqNW44|fRDZ+&*0E8^(@i?A{pIy($^URgJlIz^6D?^RU*#=R z+0`WxmO2r3!^K443G9S~tmG0Kthu?1_2?%4&cH(!25#}iNZ=n_5d+p03yKA+>(hd0 z_)Eo=lORNZoL#rhKfnhs@9rM&DsSscNO5}ay(MZS zAj)}x!I;~)i;UAXT^=Dhu0Q|tBcwp-uymwpOk&SgXjbIvWq`Y8-JWt9ym%g#O^iU;#^H8(ycH9E>C8#e!pp@Kjav;bz&)8z@{UY6L(fftbJ{hBx^Tx+EqB|D*Ys&ET@#9AbY3TIqVbZYb!QG({vDya| z#YvpgrHcQn#ekB*J$of{N*E+B(dFC}!&JQyHQ*XuU?#;Y;+LR7;pXTmO zFi=GOHh~res|<`u0tT&}$S6@b177^7>L!Zn`t9u zUzWPXfHEj$Ylo=iV+%~CQO{eZUq6vtyvM(O`S>0&dpsA2!EU2yOG`_o)EK#krfb8? zK%MVjB0zb|xH%4G+hdKAyO(zoPwxJT^J3`;P~Rg&L_t1Y%$!>33Sl}D!lon|G?ZF@ z4eIYN8uH?(oS{pw{e--Na?UQrG`nxWoabT-z0TPoMo9Ql{FT_=5HwnZ7DV9?)ocyY z{&naCsy{NH=A3 zk;_rL&tQl-6FWa2r9d#~fJ#n&tJDjdw*$ZR{PP(ML6tC7yB|Feq$ziAlYr#R*?M== z!q=?IXD|fSptS8|Erkw-%U@k+fl^fjd%C?K`1TSXDjEw9Q5RwW&`Z99nW zcA+pBs}NM#Z*Q>gz!y4GcB`R`pF?yZ`3$~X;j9S7Tw9&Ue&8&a#suXjh@smJR|S;x zQd|1*b6ZTlsXc9-ebSz}kD0gXSo4{AO!eaCE1SY*@=;rvTX% zR?Hr3hy6U8hqwMzJLe!7&WWJEd5=r)$mb-+_yJbsA)tN)I9?|Vq3RBSYR!x8UWbO~ zB*tXIt_z~M4IXuR_j53s?%(s5DqUZn(LN_J1l9rN+tkEBt+v1GMwoC_zrh)b_SYrx z2o4`1eK&SG&DBJeiSK(hEZ)a>c>TvomkWBJ`Wb@C5<@Oamqybc4b*1itU9yt0!h9^ zEg!3pwmhd+^BRV(sXzx}sAhuxT6Ih<7o*ANScSBNJ6n!!HkUtG?lE2q$&iK{5rk^RLG;0v@6%l(0)1RWM>E?FEgeUA1(8~ zszQ3X7@}rJDy)^5p;5EPt3zEfWX8JHePC6EpsEN|SX1Wpg_z2GG*5C@RRnja``04p zIaVPp>S$u>jB4s0t~$PwiMT#6m0B-%sL!#AX+V`4#-}Z}>F{@98w)-4HpS=ka>nO7 zFye6^5V?0S_8T-#$H1}9u5Bc+VODU^H7boWX3tuAUaEF{2Sz+& zt$yqXzP@sSAjE2-oMC@ z@ZzAMTD>38(5B}g+c+aWnVkO#K57?j^E7P?DNh5(Gd4d!JM7IFpmChixSPV^`g#)r zRY+4HL{QGXvCtZ7*oAG;vm0aaI=XxT_3iNpaSEwJxhR6DbO;LGvtbq|QgR37vr7tm zq6#qs-K9tp?hQo2G_N_lk`+=~Dcg9xtj>Cms2&%y)g-N9jlGZAIoAD($qN43FRjb; zx0BGfh&%}KfTewE_qHw5P3*A386u+XN_H;g3x0(YF@tBh-?XlIy3XM*wd)|p&OCEb zx|k||q6%p!eF#x$DFVW_Z0-u52_jIvSbMEItdPrHPO8n8nzoKbm3Q+JEQ9!}UbcFf zLV5ok^0Fj}Hz?{$4xsfki8o1iW44u&TpoCRXh>y6_u4PD+z)kN(B!%hU+@`1e5u0x z`u&7h@#?0n4a+^Pl113<^g#Bc^01l8<*w`d3Gw0GJ1KMo(p|#N>rdOpS-g~db!@=< zNQE@FNp1_`?<}#picU9oUH(`QL2J{+dC*5H#4O97?)I6U-ZvQuhid6G{e}IumM$^D zd%cAOg{8|QsA!f|4yA_7oZR@y?+e%Ei2bwITZrkP+W}i@#g9KmUf{+8WzPa0llpB3 zKD(-gwB)J;1=tR9VAiI?`&om)FCBgfaPd+3kchXHBkkJ6Px~>61z9FzBQAs~a&NKy znlQXu45)e_m-8l4^&t+U6E_3?VU18=`VFmdt%(6$u8%4@8exXW{~2`&mw zb-7`F#0(U)x|-W+tkM;lx%9O_&xd!#vz}g8)qgxKK+Gd zzql63kFfWrB;vh=Gi{!AjXB0hZL?YOu7R&7@YnkCs43)uV4k^xpzFwpPF%bL(Q`qy z+?6kfppTEoheZfL>m{G2pmnViL|}Ha3P?b&j2^cJYX86rc`;>Waj)#B*1N5`jwQhy zo|<%w@>emS9#5=o~S+|mb>+heBU1u2A6p|(>~aX(|G$^ ziOk4AWlV(Fz3W#M>gze`S3gaxj{??k;kQ@)3kmVqf8}C04SmdH~In zG{~x77VgqkzYP~yO%N_^h!PFyuP_9C-V?#gpH~ueS<`m!HTO+J`YwojXn4DC>Aj{> z#LH#sm@|t*mO)*x^$4uUb|olHKlb1bXmU#iI4*6Vrt&I(3|-paU;BL za4s4R$-7(|dptrG7SM z91KzZ(xOjd>KeSz0<3C`Jlt2q%|=V^ek+y_M)4Bh_4ng_$s>esnSsOjogAdbLJArt zf(@B_fug3HZOi|Vg%tlD*ZOh# zGlFR^p!EYm_0sbGA7mlTJxZTg@QC()-;cXm0$zR{j_B_-Dv?$!=~szZR)v zD!>HNGoELx%^x`2as3Jzuc5_8?+|JGSR0z!(a*rkggev`h3RFRch+(GPc2QZ$M-GxS0k-y2SfWToF`9`b1Q<31tfw zhEJ7|&Lrq<#Qc71zx|0TA`g{bcXGd{i5YuY3ig+2^kzwbyUQ&`d`|vcF77<*S->v0O4^Ufzew! zqwcotGf#h3wsY(J+svPgmO9|B^13M^9+Mp8Wc;~^? z_Gn=IW5VqpzU-mjL5K7sg{61Xy#c2vL*n)_cRthKgXq$=?)}@3xBsjVYEP61Qe&rC z6D+0tI?&jdn|$3Q&dMlELpx#3Hxt)u!Hkq%^jg*sta z2tNYhV|n=CMVYYv2A^?5Wg%-tMMhQ?f*M!Rxe&Dm%iNZk1r7!y4zOUl2fU&L@g z&I6k_s(H8RTCsNCQ0S86`4Lie0gc)u`{kq$s7wt+hMX@mc$dk#&Wep0g-70zpzoYI zWa|_LLs;6f^xS-y%?;G&6*7}`HuWJ*1JT(tJYm@~Yw@m#r@|{-5{CinQwXfKDfe3G zIRq7)y{v3lzXMNiM=rgMzI=pOx=%NKzNecH^6XOx(PnZd^~s*EnH3;`<%dil_6zyu z^@nE))D9UuXYOLKDUi|EiUP1cNytoH-MaQ{%X>}8_Wsw~JA~T+cQ2P7LO>PKRDCUm zvOj*yyzythT+S(jz#r+Jx_`wK0V)rmTEj0s3|@-07!;0yDi^r>`C3E()UQW~S0Jie zsI_V1G+w8{n_J1Lg1kVp-cW^@RPri!ZS6eAqxI@jqkYi^+=QN6>V8b9!O>5$QYzfN z*L7ZW@E7ViOA?KA>0aU^tyjnZaG$Txi$6(o9R`{(S2v@TmM-o0wfg)i)!P_0W}m5;|QL0t1#jMx>DtL5;H$7VxqL6`kfsvjz_|mZ8iR)*~dU-c79(w}P*y9}D z1*b5toKjDh+gjlALWdAw35F#_7mq_uxJI4%c&7XTS@^&8j2B1)px^ZHl~ z%zX?`Plv_(OGUMU_-Hp5_5}7T0vMJhdrpYjp*_X|pT`E8Dje;g%YDdiU_V1v3@#L6 zRakB6)J8009KkK3kLT}izXEJKJ+?=1#vL4>t~5*WRxrJnTr^`7eFkd=q1c(yYhw8E_!`A_5Q9?Q znNyL3AO!E_b=5)$=mbx8GyAWPpDQMI!#RNC!_MW*l3MWwlQYq(vuy104cE^vF|ZH} z8%gmy<>>=~&feaJZ&4p@T~e+;9)Cu0>0I_+y6Rc5d>P8_%Sxa4F65fMe!Kv#{YMBa zJ3j2Awl024(yS0|FJvCuQ~WP;qX8?-?4gK?%vA-Bivw#&2qQliTG}0|TKED5Wi}9=0B@goXrudaWt-a6A*`tCYX1=-msO5s! zTF{WKQ5Emhlw=jdYJp*&G%ww@J{})Y?q2Y#_g!8m_tW|sJ}wsiY(aR`bGcyxuE*z? z11SX_KcAY*f~P;ajset6nJ)7kuKXv^h}>ErR^ z`?rq>Sa4RH{ms++rkzxLj%P*~C+`zoFB!2l!A>yEW0!3Mr%}N>}~p z{a-_b+AJOZ%ZG;HD7MqNESOpb<)N(QF4UfPCn3n1l-d*g#IAN&X@EZW1jd@1_p`s! z`>)^r*df4J@Bs!@wdr|o!wYQANt>lK?-BbifW3tPqc$kP$0yHZ;RKsoyJpbpc_jBs zC$8U2It14msg{=7PGcROTI)W3GseAVwM*+`XVM=UvylfRN3-{E8ilg8m3_(#nRt!! zyxBf*{a*;KTGdlc6ZD78lhj+Pm9upA*7f$-4_u%Bj9IU23q(hDYiDgN-bpo&M5EzE zta5G?47g&}YjYAi;DO1g_XMh%7|c~9XQ)ywEnB5C)QAKE6X&E1uZIB#bKlOQy ze^EqFTph{mdPt)!($0i>JtL&r~`Dh(qLc)#t~D=j?{GEFwOjhnYI9)F!AGBWxciHE)6X zZ%{>K5_iw4gqdTd%F&)jJKOU)df(o+>k^1Q9^byaeU7MR(T(k!%rws^-exUVr~3n* z&CA|y9RJCsLp+5IQI@_77{$pdQyBpgs?A#}*`;gIKfppHr7qjtkv4< zWcb-j{o==a+=>x-mB>z~cZiUc;TzIKd>VUpD(kY9?{O=3q_$=&!Nuq0T6cMhrHU=w&ER9xrrg9lH^cz>mdieyv<_`+h$L9<|=IWHjy zpd#vjKutaUMQQia#KR-F1b!Q1EZdhE=ME~QgiH3GO)Br>xxM+E)<;=s`wW47>2Le- z?!Gie2oX1g=dxOVUVrVG#^}jB8)nXRJA?ZEh>1PV>Q2ZDa4zqSy8YVZWXlLgkZHF$ z3y(j7hLH8+&wFPaxYF!xEXSBQeqP|5p~0_1$aX}kTq(vnts@*R5Qi*2B~d~3r+22m z^$`2|`1$pxMM$%8OxUI@hDAwA!~0)@PFI0_iM;lsU(b1HL|^>p7?A=2J0XR3@$|IS ztq+-=zjt1MaQSrSHf8;|iG>#kHM0KxK~CpF+UW z^7c1!sKSxmMxFpz$a;xcuVZzP!8}HqML-@1@~2XT}D?2sioS-(WZtwfP z3MjPKDpj^iQIO+`Nb&7wV419gpK{ll=or44@@~_wF<-m+FUvHhCP6Yj0*9Ijeu}!z zJgM3uzp>w!)*4?v1)*Y)V{gJZHGwMUJW}aCXbXJ8U(_zBenqWSn)~DqB@H7|_wn$m z*@vI&-Z1)0l6KS7SO*W z4zqHyb7_w9c#GOZ_e%;Fzhv|dstkJLQ#rkPWQJe86j7}hQ00ItJnfv$9)8OVMnOXj zBo)8jPGJlvxTwvRJNI6OCdlZmAYNKJ{$9Bh@qhUh1FBb;&@Nu$+;p=K>aE3#PhFeQ zzLjsRUvD9{K66jrO7QrwbI}fU?-l7DffOYEb_8QkorWze+!Ln>X#pbRx~F#k0M_kw z?hQ_0463dx4*^w}*u3WJbEX#1WjUk4xxPeYk3Th}!_w~&Eb@9Q!H z;>-7tC$U@>guSX^ql$M0Cn}r4-Ww$KWvapBEd*1aZFue7;x;oq=aA(h&|*jC8keG2 zSW}3JC$1TCG=U4(;dOcY?6dIwhA3Dr&tYFI=1!(i9{5>O>y#_V3Qg7wD<3fYacc@; zzhY1k4G=r=-J;F|-`Z)Dxz9pqzTDRO(fbuKWJ`T^PAhN-P%`sK?+HQLOIdaWlet-X z&<>6aF1HfSAFTd>oM(X&Os&YYu9w-}zE&}?st>EFU2^yP?V3QN;G~+eEF8>nF|6-F zi^U#{*P#M-;4|b>@sbChzI`~5H95im3G|b7l=cnd<@iGXkRi-;n!ybD5d3Py58eH zH}>n$CCl&7#&ETIQ>2K?L3VxsjC_bzFRgN3gs^ya)ln`T+@@IsRREjY5TtVYu#n{MybPQ^Y8EST?k0$*s;*-L?izuk6HURmfh4KOayZv3bz!Sva#T+cNS@ zCHWlcx}Gy&t_$@kVxd6Dm-@SMgYbjOs!dDlu>0O125(&|ey$TTuYhTK=@Wx)Qm+Cb zKl>^p9ZihLa|ab-Q)GEm@T#5lIp`HE1~L>M!=CP2>l2`gFsiAeZ?3hru?QTh)Upa= zQ+fUs6wUg&kgPeGMZ?^vPwtwvR5bm;xq6GA`znxJ73uMqzI#jN-e zck$vngqdVZos8B?)7O7sMLgL+WVPe3fVrGAq1+F4b5`@=P->UnR)77lxE0eg-ON>1 zOEz!*@mEMn36e3nc%FG%qbLvzT=1z&BnWnM}e{(5}XkSTJt7s8?y zf>+3{1$SMlUA8~-+NBin>$jgjBA%SLm%^9See&gMU7lgv`#!qV5qfR+0QD;Zl({Sg zBR+M(`Z+0kO?6@ruO)J+LIkLw3=5^^lQ|$K27LZ`cIj+%)&M-Q%NW3Y?CT5}=D=W| z!yB2FF*=#0+Dgg^+!_DZUY|op^*Q1Rytn7*x;ZE_qBTTV0h4d%(DYt&uURQjdEsq@ zo39xxX0U<8dlx)uInU#R_H5U7>5&9j8p3Q+Rjp3mLHm3P-~rDOkCJ^^8<(m`M-?)~ zAuAjHlVjdUn}j?W8RxLA0lqq3KPmmaet4x*2;r(A>{&o#xE4>T5QSr9-3oVqd8qtb zKmX7eT&idZUYtx0MbR6eBzr=IFT)b=*=;HQ_SoqzjGun5`!Ptd9IWbeY_wRC!_m$fGG zn&8)5<_YQ%u~uo1wDa@|NO9$=OhcqrXjfQ2zrJ*T!U~x%4(6h*E$mi3d|={I=~(GT zt3hgCR_i_JlBRBdA7KdnvG6@19+23?;G}%uy#58MkWB>l#Ba>lJ+YakdV>X;8`{iY zpDuCdi7R9m1#zb9t_GFpu(AP+`Ex+an=cboe&Y&BN12+OF70qz;n*Tv0N#z#^;Xf50~}o zan9bPvH~M^_Cb9lBRj=t(SB!PpZ;)JFHML(>>iak+AdTO)odM_EwO{szTl$q`xHNf ztgN6}5tLOCpeDj(x6=Y*)umnLUq{jf+2+N0W=TfXCF>Z6Od?josp-1pQ~yTh;wvo8 z7DK^LvN{S}3{i9CQUa)B3-ZsG!?dxt-@cj$uACr0W|rrHEeNbBhkvtMM$mbAH2s0g zBh9s z`S7u#)(;C5lW-u#%(;ze+9pIvdnJVX;7TTtXe@~kQzoJ<1!fL|<{F_;?#tyu_aV+Y z=Z!afP_u>tDx0XlV_)o{`NDF!;5zX6kR6Ln=VDCtY_=q71I)4Hb7^4v^T*Sy%;nDC zA|ke|mbI=d0gNnT7tbDSz<7DC`QZBPn@g@~&#*_*Sx$&>Sb0TAOPjeKIM;fqB>4r* zX;82J9?c(OaN&ps&Kf5&r$d;{3(*l8K;yQj;#Pzk>J%ryII$N&X?cLC!d@}t~;x=hC`V4EZb^8s5E>m zp`;t1{y_Hm50@K;J#!gQxDECNic@3hA#^s0VJ*`?-}HT8^FhYU^qi$)BRe1Ir=3Gj zwb!=$zRj!n8=1?F<}gTaPT2!$iGA@JG+SsR6gJDh1*PB5Z!Uw|M^9__cn}`rLV7t~#{%CU^DOYM z!BHp%ht>h?6Q4Yt}&GD=Zpo9k5)U^MC=5n1I5xZ?mDx4<3g#&vWeQ}(0y0vtE2lm|s*en6ZFr*aZZ~cA@)qe*3CEbtp&etXP!= zbk``FP()M;HSWjOoPe?V@80Rt#NiV6o2barw1vWql zYI}^;XU};ER?B9D7;od!J@W&XODDRKje{!YK*R}w4+{I?fB_B}Z1o~@f$O`E;n!y> zsxnhIhOM17VOQ%gB_^u z*dkaUn01@h$B3zH{+8-)myrFA%jXGEY^egzkH=znDt%5J z^k6+3^8z!36I%}2Za$TuJct*f@}7L7V7(Xk`on%eX=~OXYhUjefXap8l%}>$JF?iN zOHN{r2QK57^>D5#h>PWdYs?yYu(&xcIgeRP_O3o4_U1*=FAn zKuUu53dAK+Zs{*BmkX|#GRW%bwa&3KB}Z>#ffH7+{BXOE`TE)C-j;)#Sm|DPyS*XJ z7W}+w=e!Su%3HMl{N`g@D+dD) zVTNTxQyq)9k+;%hpz>I&4vNM3BKU(NSu9Lw#mE7EhXtEgRNt35Jr&3Zh8qMK(qeFG zrtO$v`0%r*m0fNrxL?S8I8LrzU|`jPj3e5xbRyQ)o+-|9J&zyQJSvlOjcJt5R=b1k z%ku;|+z>|su^lcmu>TL5Q}#=jmdTDiAx?0fr;r-Daj{JKR+&s}9uJGGfy=Y}Wq@`` z*H(hnT*k?ixapS4Au1onDxl0YbI98%S*PVW*kM5>T8i-%TrL3||M==FAyS&P^t@o0 zS!Rs`^3CEaKEow3k;6gwmcr^Q=ncexX}przh)Da=tK(TNr@HqfoE@lrhZ@&->LL{<4D3yBv9(ygwMIRwi9-O%P{=hE2i(_E9%V0pg(qQt0D^R#&;F_ zNPlLpU9&k)s~Q(+1pb_jt!7JIZN(8|TB|mE6YMNqIilAK9`HZ}p&~P$H0Vy<$Y(}VhWyM@fOp1-Nrzl(EN@rQ?Ig29)R)ZF~6~X%f zOQFogdj(x}?Q%ww0ka2v-QXDWmO>;hpO7>gqqu@ohgwtDBYDAn;Pb&rVy`Ti3$P4L z*>vUI5X#t4AvwEEX@_j(`66{`;T* zW*wb}8|z_=lMDd>YZXh&WADhT$Oz2)G8y{=nhP*G`V}h7UJ4?S1#7MGQM$5fbKHt` z-hp|zF;!XZKqQ3@eBjnSf(*sjx~{Fa7i{mqT>LBeY8p#H_n{;^KFA^01t)?vi|v*i zATFm+2@ZW4bJKiey0jK9m*q;U!_Qs(*nhvd^obVEBT!}cANW>-_un;2G6W|0+;z#K zfA;CnQkWQkc?sKX3G^;)oe$$RlyWOD2PTgUCrkGBN+X6T;5MTTpzBgrF>GtP&}o2j z88V}#*Hl-4H0!&cjo-*Qi8AR_F0IN4>OUT+`r6PJ{J{qKC>%mnG;3p(Oo*2$gFxj{ zKB05gz1bp$T_EB}4eQp|f~`jgq$?&5n>sDDW!m^cTGM3TaS-PQ7Xh${L|0HAyEked zWtp(Cqt&oMwhF!x*0c%+c8NFuU&xkel zKTg_LZE+t9&18*@-?}AMfyw12#spfL^{OF=o)j#{)DZ{QN;B3wD3=Lc>|j3w%e`V@ znMt$4N6H`(EnlyY0m{Xu5LGPi%!!)ojGl}`lPe2_&NCeHg361F+8HpO5fT1)FFQ}~ z_~xWnA0^&iGQGp{u&j{d-U-eeTPdY7^yFZX9k&a7*(EXlj>~1T;1CG~i)DNXpw<%h zG9}nmz;50u+-PmRbo~#>0^$W0EI5I4$Zg!l2^ePd)YAoq_f>OvB z09HV$zn4*P@335Kivxp3TXo>`z-a(^v+La6s|UMv`hIYEY$AuvX9a!Vr{@x}N)U#b zxzoiPpcgjry9cbHskP@39E`oxvXj6))D;CDtei{M=z-nx?+dUigrd^kL(OeC;V#F}BPv)EoVbxl-bm)X+9^;E{W)buW8kM9simI;XgHzA9J{2182gW*>f+&G-yxt z;Gp(?qx2uhe0&&(aU&Sj!=Ca8Jyw`M0*{8PxaS|3{_{v{A>6Qg$*5J#L}h4AV1eLX z0@`CYW%j^wajt2!R6AU};auh(Tdmn_>69$-)|KfUms5z;S`wWrSZdoN1~nW8 zjKcW9tea&w?-^Ofe5D$;t_Oub7}}9(m3F%H;4b`lHWSIMh!s0;V);{Y%D~FMXd7sQGW~`R&tjnfp@U<(KWT@K=DTyXC!88oF2#abK(B z;<4c0sdnl(h>aOR5;`$}=Cjd@f~md$%VQ5?F1b7z)7qqgKFrQ>Ric$ilgl`}cUV4o z2)2t$5jHNnWtvX=9$MgzE*A#tggos+{=Sji|EDlr=KrXi%XAkWr~sD1!* zx$TLov(_fDFTsGhDbFJ!qbP4NZn>@xWG+$hXzppJ-1~?%4}`|vR^z3A5V+Xakh$1d zi~;uFI*7!exuv=fG?I>5%9eH0v~SR~F4u{WXrmbdPw8XlWirBm4x!uzjlO#ez;c;X zDB-|msm{K1vlk8D&4MDflXKZGEtiYCNNcbvZ}ytzNFmPB1&da66;)U^=UcMto*ml|O6kQNgpA}pK&js>ipwf6gdA_2=~yrUKD zSBr>@(V_t2R8TP1+Sk!;uS?!>d2A!rq@1`Hi2cqJ&a7Kvqn92Bhm+k&1#tOrFlE)Q zrv6l-vafsyAl5-FK^9$ea&PaF*2Bbhg7UYtZH+@#R$*Zp2mHR3GV@(=yd!hDZ#-?D zDAo3geK%eRwGa@TTCY=I;P~&*T<-VA&<0snaX?QpVVeoa4sf4_W6@q+HJ=xMu({aVM$oju zaRw#eNQ6}uw0O@Y%mE&9b-FISX;=hWHL&KTWh@!EW00l*mzUfIyaAI-HmtF99QL1k zE0r17ePp*I{W%R+>vyT2V8`zUswfsUWdO-`>|oy-2++Ax44?Xm!MBaIaYoXt8vzm= zjO8%OI$wnOD=HtpFEUGowA}%U#C8U?&gsOnyK)xmOR!w3y_91oVvIP9+M~$Y5F#Om zu(QQ}yTp2MxzK7!(2*O)USLid6(=BSv8+~c1g;VM&5Q5PG@(QII!-!{pn$f5FoLCN zms)S7Okcmb6sL}5^ixd^Vvj-|9m(vc5SKLA|0U5%P#(5rfh}@F*%NXt!r+e;sU>q9 zMP2dsM&g@Oc`C%V_0UTMJ?s&h18T%dh2R}i&c(qKl@HGkup#Ut;@`9#3!E5^AH)&< zliu!jSPb(&+O8zYt{Vql3E+(5 zkRWLFLQ;e!cU`{||5sVPDsFZC7nrbh0hKuq?Qm23;()7CwdE{-SHWglwZbR`LCOU!|#|fRr0Fcp51|lCw3(9 z(t@P8>uz4Oa7Pugt}2x(ji(6~dsFqFAMW1hj-hm)!jL+`Gx~IQ6$tCq{3sd}YvzS@ zHrlE8v5Ki9q@J}*scRrF3)WT9;~wp!8Hm>HG{RAZ5M}5bnjQMEiodHtdM4Sex^Xtx z`|U02@1Q!u1WoV95ToX`R%WcJDhJxai>lJCP6DtZ8YZNSC5;e;IBwN2NahL1kM8@% zzPuT{{*Ea?b58_dDBP13!Ybq1lXuw?tgCqwV2&!}B$drg&>C2>*M{fZ(^Oww^!eDcSlD}hyJxZ!gft>Us$1{8J)}UQ;Gfpro37P$V>9kK`HaEdO_6WD0}d)A zUY*jEQw6*a1~~8?nSSjlH$TbWVRaHax&199^Va-o zX@s?&HvZIpX1_W!0NBrv`|Cq%_(Ae%nSJ}swW{C!596J0z9es0A==RUJq^mGF|u?U zpjl#m$AW3K)UVmcafM_><1D!pwz-C$>hED87Dr9$eF`5$`kz7f*ZB-LN@<{?)y*2~ z0p}84)g1t@%@KZw9Kx4cIYFxyQ~XtskEYr>y(by-0pE%_g)cdknrl8q>M5Btxpia5 zY&IF`_Qb_eg`7M11IFTIsJ5q{7LD#rp^l_c4&5&8990nCVgnWIQ)}`|f6zeAHfyiQ zOXv26|NA!!>LpAd@CXUe6snNb8$qI4SAPo%dU~lpa9AP66%{PPA9f+6FRZQ&sX+ zRLM8;{Kgftzz!I*cL+V%+&qkJbngmXPA{Bq&h>9#AuEi_rYags=S)p$GC6sBDd@^Zzq3YH!oZvtLqeGMvR)Q0>R}2*mMz8#_=A|kQoU5S){Un;@}V6ZW2F%{fH>(N)-{*O>HvwtwPBYKw02E7{OZ| z+&giHjF=jdqt!hG-_+6ln3ov8=9S}Mv5$a7jM!}6J%WZi{d*rtMfSFV?^H-#Ae)Z5Js?vw9? zjG1_OvD1kSAvCS*o(_3`HcK>fy&O<{A&VF@KYMm}!O>bjwR2ZVduc1=ZB=jYaXz_N zOfbVX>}e7ou+`Svgu*rLZgFp(1D+v^7&9J|u{*O+TO+NSQ>|{pu~c)tUI~5j#F%il zPdVaE+A&r#{HZYyWB`9`();aU!WXiLG3&=LTu>x#QVppqYVMpWp#O7TjW519Y{;PX z)-yA5)Jg@RVzyqrMD>hyEZI|f9WrVlip1WGCO2=(=5GrN74{OLMw;#k{byK6D`xYo z0;YJ>_BvwC8y+8sl7$HTXhMTx8nythUDz1^>y5Ktt(~&GO>WKFuDc*Cq!rs;Pp+-l z6fZcd333;?$t^_ItzPdFSV-oymJ#@~=Se+vZYf*!oYZ(_B&#RFBxJ-Yc#oEpkJhyg zaXJP`lE7xYS7*AevbcEW&ycrd>`f;=t>uP*p@f*xS#K?mKQ&XxkZo%XVYbx?L<#gZ zZ8!NMcX-Xxo~gMQu2CUOwm|@op_219_A)uo?^X2nJnd7@g^U@MF?!cpGDx;N$|W!l zo7k3{{d(&evWPKD-b~9IF_i*6+_G&1T-)3aH6Xnwr@uaeM6h-RJFC02?eCFUT??lU zeZuS9k5~}@gOH^>dPX95bKFw$^t#Yq7IZp381um?OAs)(iK1-Ync%bxCFdn5DM5Qe z4JW=2*$dd;5$k_?W6XreiUnqU54UdP)vztH>~ojFKf|ECd{$_I)3$?6AWILW0y2r5 zFtIN z4+H+4&lrtTGMCMhm${96$!5Di;T86}i>KQ&CJi7ybd1x|F;fz4I@3gqbBB2v^f1_l zx0f(-mlVb4l#dbGy+@QDU*(-+`wXG888BzAd6ZVx3-4=&S(U* zyoiwj*7k>Bxle+mYa-YKyCV2LI7WL#k03SBs{7We_r+*ZbAmR=ytk}ob}PdD6Le!D zh}P~5*926k5tg0oT-EIusFwMFMaE&9b5vE+Z0gn(*b`oh(GHE-u~8oe-oIn^sgYI6 z*psPJ!^A>P?V=bxfA?^!`1!v{4cQF`pVs4MsHI~wq?$Jw+s4H5wQBg!q=sA(%+_Rd z!!Fn$mMpD<@PaNOH+b)n>%fILCl{TS)f*W=fD&<&`D%4Yw*0>5LD&s}l?oPrB?6Ky z$*p)iA*@zeuq|%yBr%aOHq)IBsBLQaj&zw^DfR5378FVMJ)r#x;b~wRT$ejLnXO$g zb&_j>D&Q?zpC>HdCfoax)($vnm&8y-;IVhTIarpuBd;Aj=Y z<*)Vc$ubI&i6iJfKET=JH1bF!md<>D>bWsk@^5VfU_C&he`KZ6ReiCDY zVg|^oztk_Kff*j40>SoD1WE?Jb7vNgEM}pNw!I|PF+yynvd^sPWcRH&*S39M(-{J- zw8YupR?l&?d1F*;S7fGPLn%GD4hTb5yt)1PX)caN@z9Ig+5&JO}xSEW2fQTel7yn8O%U$txB?Bf9sl@Wa<* z2mV#upLI86K*RraG()0x`08@BqZywNCk z5X00`zB#zQ;%Nx3wzagCpt6q{6i4;*xzhHlol7hC@|B>=dn;RP4(@5uk<7fwphTwm zdv&|#pVvf&RDBk2kT6~ z9~{mF6+3V%W0{RgSuk>24w7|pM<6IAsZVAy2pPD2%ibFTL}zVpR@Ye#gSO{#kBcYi zF{VC5_2e?UKyR#Mf=~S!yXBlo=)sUhm4}=SPAd3x&R&Smu@0ihXIMT5^!nLch8*gj zTHTg`kSx7_MA=TQf%7bE$_IDQQNV;+pHjUKf|*yB?M=u0sc{y3@lGqEN-C@7(G=X- z`mj^|NGxHAwIscrn@{SS?!?@=HS*B!jq_H4Si^stn^iBT0l&DP?nDik8%9*jAha3A zsCb2lTZ-%4$(jF?i3}-o8({Z4VGi90OIMcc*KS9OvU@o^n#hnE?6UGIN%zjRtje9I zZd+-3otxfku%mG8skLQnztTlB#F{(95$02lDP++j?izBc)4^_*UuDg)yf)VBkQxgk z9r^L=Gx8dNERR!ntz}wDXAP>hRk*q{wU&B6qz(f{-F!Dr=h8}U*){z+g06CS+pS03 zCw&b$a20n4fo!AXuV%^L{QC<+Y|G?b*`D#&kWK1b#j}cdtCEu4Rqqjj zjX6Ds9?AzpwYP!CF7mi>yti=~=fNf5i;hJgL)hAYakzT7m*I|$V6g5z%`6Wh*(Ze! zxjs^8$Tkat{o2B%`Sar?W~5a zIHwd(qvTCG#nQb5BnntL$w0#d*)wZvg;n{~wnip$$MZ*2HY7L6%)KYKz&&10oM|8f z9E>Aa_r7_pd~w+jqT$|bZF$RT6EH=Pj#UxJGA#_^efft0n^^i@3$Dvm9A`hV9_@AG zCRlfu1n}SQ-+rA4=RMh4kQ&RFe&w)Avsvbu_ywtX-Fkb!VEr9|%bG3*A#3Di{RsG7 z(nw5Gyz|kx+#tPh&G{{4BK@@)59pJHpV*ZRY5bhl=}fSqi@tm#`w@bSrWeWVQjvzh zH+pNc@qt7yDOCiyCvzDzXuKJpinH2AyWsOzF(3(2Qg64q=1*ubqgL>(+-lv4yncX1 zz_o{)pd(|oTVphb_MeCiz*_|5qT5+DeKq|VEq$SO6@ULgtED0%A44s2Y{72mTM!Yz(>Rc+pXU=@F?T~;wK z0L&_f^5vrIa~eZR0J$K>j-=k@sF=G?wlm576z6Di2Nr~j5%HDmG{I0U0y7iole<}` zy2pb^0Wub`!pIZ0bHZW}abCVTbk3y%dCEq=sFC+f#vrRlA$g&|o14Jqo##He5U4*U zIX%coQNWDxAwp`Amn?7Y|KEv7E5y>cd3C(!@<#|TOyOiY)>`k=%P!I?^^}dsU)Fw* z!~Y3FHq{$3lNr9ihTNSI#0J*cG{t^+5?*6~fg$de{E_kM(`BxESj(mijiPFokO``~ChA5N4tox7wvkjeH5Jn9;GH3H%s}(;3EmHa1x;nmbh19B~=1=|G0QYBa zUL(CDLX4)MLUMh$``(cuDH6JE6-C%b%6JsG0ImqFPkuNRi71Jd^tVin&6#&W9)`P`Ht&mG3#Ovv2sWJ}u5 zYQ0D*-g=nzLEMiTvQ3M4f_0rVd!7B{N_n`CTOWyTvhs6VhAe--*F93*RckEj=B?B_ zxiw{#d@bYu2=cORX+x|f-d-n9HoTIOCiE|rg2i_$@Oi-sF;`(*-h^oBo_k6oLHrn0 zsyBqK>%r0w@(3}^)!Yh&^gr6JZb#A_#lDik;Gf6wAG0fkG%d}hCLVteQCXEeSD)ts zRjVs1GcJ&g;T#({0E9^ZXIFh}$@sP`299Z0WJ@h3MK`(b!5)>6)EBbAQ$_#3 zU;p~wkXQj@s=xnv6H=8XlU-`Ad4cX0c?4rG#Ql({zxdS6U>~x16p#9AjnW8#g6Qcv z5O&3wHG~ELMW4GAn+U48F2Pp}Ms|^#U5uHOJPz-)N^xPgdcche!bUmSUscEB?6%J~ zh8PBs3wRz7?O$E#N7+POZId zb7!xDH0edv%cpz|IbM^lr2xi0Dt!Dpks&o84Lex!JV=i?l(R6)^2>eBAWZu)6}`f+ zK0vf939iw!Cm(~53&GZUIuP1^rbn+ZM2*m;V&EQClhy4L)j7k*kkV~Fw$T4Nlp(jl zURJl}NwiagLC4lA$vIL7HhYw7`975)38{#N(m&lmB)!2|Be}hQ}L&) zllA~<>)VfHN!FL&AcBNE5|F5oE}06K!N*!J{@@IrL;yM`RS3R@N0#v~b9L}F;&hP;MWU6D?MUm+%&NeN8h|ZRP4jEuu zr%QH&ofkftpIZKZye(v|-QGG+Q(AsNna>`ra?eRP%k0lZNAI|GTMO923weNII}?uW zAaj$s*4m%OVE*`9%=}RE6L|^}=22G?$1b}dLumxhdzzm3<8Uz?xF8ZJb84yU-b%cxQxcBv;xpAd*}0fT3?~o5pjlL+KUehcY?RqX?H}x52{*HAq z59w8!38yqvVILTLqf`-@JNG@GVaYpi<(LkS-L>_xsV@bhORH%v4mI^+TmQtmkS2H* z*4gkyd;}@Y!T{^Z=kEI0tLGE(inK0c%@T=MLjW?l(#6>}fm8NLeLg9H|2@`)T%BSo z{SJP4F*LTct12RK_Ms4SU+nBVa_w}~xzFwiRHq`xD)q9bchT*R#k|17zYoP<5qScr z7rZ{_;Y<*zL1&)3BMdvgp#LJ+MOfzoE4)ifX&$6}p}he0q||A9_M1Y?uR!a(77duL z0iXcLnSi_Ym0Ja+-3ejvKHNoE$91~;KpPWebskrA1~-&Lly}Wf)mHxz?;^}|)yz?f zl2IPT)h3P~-ah;)v)i+IuUPX4x#F}m7js^&hBx4ZfCZL5vn2kDh!WPh9PJzfb+cJTiIMKMB0{toDXwh+?9vLh?UL6BT4ENDWEU{Sss+U z9h_*Kha$gk7YljK@^WQ?1ulCr^G=C$*969zE0?FHhHoE>l6CkcE=0)VeU*{cPO=XH ze1I`L&A<8fvZzrO;zMSRBIc`%&cNoYo`d*$5Hp_p`Q6Wgo&nF|3YwhF!EUDm*GE<- zzv6fDb>(S6h2Cjl_YQ0$ppHVLXvybHt1b?3(Lnj}wU|=xT|53&LG4v%2ZLF<0L%-3 zu8oWS^jDZ^69gV;*87HGjIzHwe5kxv-0{WZ(Z|&e90WZsv<28PYtw^d#f=u& z%kyRaJ8adA@Xs>`G7r^_Mul*IWqf0h;z%)veK$|_i_j9n%Si0(&VqvgCp<{8Hw-k)w#94D*|}AZA*oohM5$#_san%rc#Ber8CH11 z%e-bDU~)B9eCKqec&<;ycYpjXW}X)3k!Q|Q$O{5n>pFdm90(0JS-1WcV%r`qC0Bo7 zUK8YM_*Lb}q+ou#+}u-sh1oXc>il)A}{>1EhPB5WcG3$^qorek?LUctd?CmkH%ALC@p2Gb1EF9Fk`>e=Fj)m%+}A)6k!f=R0U0%WlQn+WpqUOII>$={*qxR!Y8k zD-Dt=TE1nCldHcuN2cEG9FeWV1)pvlEXFWUbwEaLt${@iBv8d7_Sx0P4wb9y8DiLK zz}g@IVo6UDF>kOc$A#_{*!lI>`uhu?O zU58Q9%(A2v#n)_=mFb3q#)z76I|Wb{>tlJD9?m{5oIwYS5Nj_yEM~m`T)l45m5Q)J z_L&lOim6zZb8$iR4%)}I&hojd6Mmk^hxxchaOq`dq9-B0?;IIa5-1m4U1a&Z#M_Ec&D| z``gb#I%<trj+dmD z0WHL|Y097@Cl#w5pLl&<`VoD5-u2=}`Io1K6gMe?7ic9_Z@K>{8Xq89AJtv=SkDRl z9kyzl0cg!(V>+a}JL*=yx02G6rJLTDs7CyW14_Eqp5m1yy7E5$9-Hk*=k^S=Uty*p z=pXMs&cnRQpO8Wc0CLZawFK9^;{Y)Vc4gMStC4^36HyX=FztYTx_;Ij3y4`YB?Crd zOABPB4J=yrbmb+Jqwbsf$T)dDYSz5NDtX1GSE`RfO;c&)wG)@V7E<$y{}(~>oL1oY zO$JV9O~-maMd;!N=qt=L+x~c0S8u27PdokqE}GtF?xT|~eJw1Xawg@3ixm#aawy7;1|=@n<2!R?tQHWcpW{WrNE1sR>L z{@tHOUj2Amgl)^;#HQ0Io`j>h2=Hx>S<+a&-qol@*`|87d57G_7kPC`z4f}_S`n8XEjYT$r=b9yk_Sc#1=Kb z()f5Y)dA(Jr6t}8Jc>30m?tVXS7}k{T@RdV<*~(b(w)FzaAp%IV4v$rbLqFAh487v z9n2G8Xkm$bqLZGU04(=PQ~2fqDoS=T`zR+ZI`KUpkbQuN0^6R?O#+ zy8fyU7EqAB+6I=7+LK!0A4iKYtsAmZ+NC;e*|~Dcz~Iyi7&G?z=C&isw4KaLaquO? zkF(1b_Bp+Y);6DFf9Yx=-8I0FuAa4F$LfVZ;HNgBTwJdFX@c0F``eJW;g-&Ef$QE9 z?UCl>!;SsYd(qLWGPNivxtzo_8++Z*N~zi6tw!3n?RwR>5@ni>Q7WK!No`uP&P4qP z&D@uIXV>KwZp=8uS+ci-2nZD@%UDZrIstZd3G3}0Zb*5FDKgb+RULEtNa&nrCD_($ zlDikru+dm_kfQd<75~9D%9E`lbPP%JNl)?5-C9W1@)FnsG<3>Xl)#a*nMiSI-74wo z)icPnv&g%9OQ{6xO|wYd0Nuha!&jdso&DV7hS)}X>Re|xB!F}l+@Cn7K?Na%E|AA7 z&Ne_F85w__sxS@a)Gf_;!8$OP%g7eAZb()=d7VV=iWmn_IZB>c2(*4&^oqRW)@^2P zopWX%o-H^Jt)BFmL2kWRzw);*wPXP9q%3J@q12>-QMInFye>Ww?e;P^rlwl!;JS)W zr7{3r_1I==pSq@}L7_jlxiKT#L5HOj;9XFaE|c;?@~VAJMuNR8>WHyzo_3H1N*^qr z?l&2r^J|s0kL@Qh+n+nO5Og%QcVzfh`iuo5@PqE1Q>nw|CuNMEJGPKL?H@(vd6eu28Pui8pa-U{v2 z{GR-Mf(y`QZsVr5@B98QMCA}c7XbJ4s{MRejDzxu(?G69eO2%sW}KC6jWR-QnO4iG zt~r{$4H*po*wx!;m~jJ6Cyl_IOHIAYaAL*Ph8JVqwD`UQS1z${U>gIN(%^4NB{#pe z?5f<;O^k~Qze~C-GD`#QHA#zBK9)BU{>b>o<;8AD^!3@asno2~--Eo}ac1xbD!FzK@vdReXY=PHJeY40H0cG}VbhlZDO$_AGio7i6$vhZ_J+xN1C zbdFT^hA!l*lo8!*o7brve~jPWYyJd3elJ^yZFIIBJ$V)$0a$A$^Txq zpe=P#xV+bzB=f9YnOq2@XY(hmtCR4KGS2n9fjAEP_131Giy{sq)M5EZABPkEUbv7k z-7ZeT3FMD}*=pVOcsk&Gu+Mou7KZ;>xR}Z7CCxon%K5nPt4!|rM%UE=mh!$b&SOYS z(ZK#dxN5nxfNimYk#^e~E|};^4CHSSE~YHdz!z4s)0-)^=DHFNfxYg3@A;Hc|HQZ$ zH7M^Ugu}r^SymS_0b-US4OwILCtCj#i0>mmU6u`Xy1 zyZk?G*S4f*tt($iKHHCD%Q8?qu(L88QtRn=_a8`R-;6&l1f&?|pD9$fC3V}9dbR=z z(>eGFsXu~7N4B3t>vpYjco*$_WD7gzeKawaj2GPq$}{h^8oQ~l;(+hsol7ZF%awn1 zJD^QIGWlcYYL6zPed=b}JEXsxN{%X)pgdxQ|DE4%wFmca@7MgOcCIr zYh{ChGi%IGkDXh!HUK;IFIHXa1a`ykG&xc3RpqWvL9y4+?vr{sH3ear>=l{Cb*LJ2FdhQ)CWeox7v;l^F zy$k++-dv0u2P~C^53M2DPd0&6YrS?5wA1S&s`EN=KB(y^$YJX^c;NhvBH1$12+5FL zld>X4lQ-*{p2Vq#Uw1On}he$uXe^gm9WiyVd^*kbh*&QJnJ^W->XOJc`j zyuRD~ICU=l*8si+sUcdPh;yvNOl@$IYy^S54(Wb(>RfQiI5tlkJ0hdzvq5kAu1)to zGS|bz|K^ohIjBJd#Bc&5*#HDaMw8eYC3n_U>F;ITd^;}hH@%%~wd*3cUNwLu#xz$r z6$#^7GyM&dIN64C)lY1Lg;i@&O(%@n*xnWgJmnD}foWe{9!bn%LxR|!<7HVjR3-l0qPlu8c?=Bv9EQ_1DatYxT`P3+FYa691?SlU*mAbXc9uYFaA+ z3}44FeP21J;l;Jr!YYVT>&cBZBsx=|cum*y3^GlxX}2BVyl1%VMhIC|a0JbYfQnHg z{a-AdkLt1XmJa8mQY1YVfZ)<5?{cuq@v0#5-Ccb)Hdty&ki@J>s#{88|6L!w#Kt~@ z#}4as?$XhaM?t#EwFaf)6dZ(&vl;vR^xS!k)7)%SnNye4Z{22-Gdo5KAyojX=Zoi4 zgur2>AYd&tVB?xYXM0&12q|F}ee{Ir^SIgge2A1E2Ur-q7LH-k4M-TY(XQI2e=nR5 zr#^+^W=Tq{HIAM~4>5E4?M|FJ`|QNIywFMHEnS~G;BOtg*Oa+gA>7Tb!_@vcZ62l# zY#i|AX&_zFtn3xKtTQ(Ut4X@mXa2otKJS`|;<=-Y+593Kf5=XbC)v=Zx{}vD)v^aAzwgPwxrm zEp))*^QSrPNtDALk&lXm}e`x^@=}54m2zLp9 z7(4rn>i_YJOGicwfiLA2fi2rEhf?bqEFX4By!I7*_f?l05^BDK(10h5vPT$3A-J$$ zqpo_@&iltzT}oV=g>V2WlQsmkE*<0{lnR`Ztv_8hAKOkpHDtgL@KR%UXwgK0@SzMV z^Rc74tXm8^+Z@=vxeM>+h7>;B0IPFG(PKY#xw$dWh87a|gJ!`8y3?p_azNt7zaIl& zm-d46Dmq`Q4$}olQeHtWbFSoW<1tBfY8lxGz69l6*Qp8~jgz-HeCmK++oQXO={0MC zx)^1$vzEiL%HX^w6HqWEW7TK1ByQIAA~tn~lBtx44|<7!c9uaRdU3E>(6ur5fZV0dZkIt2d*40gF|#fA>f zkBNh`Fku#uI;QhH}cEXhyIMh-I&*Jc4{|4^!m@~lt<}ldO2@2K zDnE9SXAdK9ZhE4tHZf+|Gs;2Z4vwU1ob+2MOPuD&$gR^(D^;H{SD)MJbvox?Q*Cn33P(+(7FB>YYb@6x z41cei&vVjV97AFw7=p%2S8>H*D-=btc*MV)Y7G&_K!Vj}|L)#;)87xBq}g&Lu-&W6>&9CZ-ZVvqc4;VQWPeM?aLsSw>JG&1d&=Z+fS5Qc~zPFR;~P(Q=9jR4f(#{BV@0j+No?9k?#lR#jl55N?z7+#`%N?fYh(G^nlCE zUSrZq0n}$T!QYJg;<0vNFHrn>`YuV1l2vbONp*Jo$isGEH}k-tHOg2ig6P{i)UR(- zSi1~%_^bi#n{_^g2RXosz}igBr!hkK?dKgaxFmNKRW%#hE{k--|fZE>aX?4k3g zznmH(L9i7uS!Rp9XC&Nxx;1RAay(vp);RYv&Lefym&US=RLikFQns3N2>>6|s2lw;jQjk_WA92puAH%Kkie6S2z{-R zaoRPUTl>%FPshWi1T=K=ENOCDC1O8Y^O2xdx4GNp`3N?-+{5(}3`v_Wf@N|_#ldb? zZ7gECsUCj*^s`H5q(CGG1@=)xN_!#F?~zAuQ~SOsbigK$Bi?sg$Kpm_%yNu<$Jn_( zIG3mH@bR0+=THCfz^<{h)Xot2c(Lydj37uIx8wAe3*Y3s!3tB@L5>`~4EecF z9CjIC#~;I0*yOQw2#ng-z;5-~Su+4WT$fsHz=XNqw(jejM=S_AZ)Dz}M#-i4QP7>Di~P zWeMTy77f1s=^}axP5~o$B?>N<1~}x{hgEi~r*^3-`uywHKe6@oC;JjTAl?Dj?ynr2 z0W`w_tEEhLsu`JPUtr5S+kSK56}(7pBi7jv(MwoKC9p^UC^__t3fcd&&SPIG;2cNW zE2u6>Y%tYRCJfBYu7~ZNb)Q{2CzNu5iOnW)#31;U&<^5StP3abUs&g{cFjyqr0`u| zF}9L`Q$aO=QXA)Tetg$R>-=1Tn$AqwwXC#HNPeTO67Ott(NyLIS!81uM;(`E+zG}?H4zQM6HOfr&G+r zIBv741*&b-8adJTscA0jmRBAFNy}u+u6x6@5?d@UzC14K4DXC{xk1|zxM(ch^_W!B zzk%Qu>?m^oxLhy1v(07Yz^YQ@puyQIwVrbTfta8V)_D(kk8r=x8M?>IW?ShXm6HDD zQg=`Iae&HGsj4!bTIPe@5MRMy#zGneiUW_f8N}cSDXksvvG8*6L<3EXtjr3#1yFJ(vKMfc!`Z9a|=4bTY3DlZ_m zLERosb(e0`_D+`uzt6w@uZK-TQ_OHnkv`Y!kx6^mr)fLgZt^6b-+o^nDQc7ev^Emk z4@wllzGn7l!acj(9x2{__qZ$t>M^q8LHVo`Hg#D+5kiA^O1Sha!6uj2oRY!Pv*m)| zZ>v~RN{Y{AlA4r!xn_e=E-x5?Wn8eEO+F75d&{Xr_htpa~gwvpk+E$|%B@iq&#AIAW89tTPP1)l-ibcu%8Tz_avf$BK#t!%;$n&jQdI z!FkOt5O95Qc?lQLjLi{1L+fZ(gS50(hELjQm#*ja#Uo0s4ZN zQRbyLYklzu2rHhbIo3KSn05_y=qzRh2Y#qr9xnC#@ss&f#Wawc8df-yN+22sWre91 zrpqpeTz~uh(|`A`K2MiB`JHg!$#6H zHq{vB*%5$&{TzAZi=xY?uYdlJhf$#Mf=`dGQ(|eHnZphpzy$*`z9{uMy+Fec%V1o` zI&GZ!xnp>#2Cv>*(2qkXZTjlL01F|xrdjwB9yzuLU^oU9ouRLfF)@t#vOKK9Ds3Qh zUUBi>V}vbR!m10usdABIr&Zg-s>vqcDJB~AHM+g7rXx*BRmQy3|I(_TJ*;9;1@?<| za_p8v5S?{#h%3ILTK3hdzdWqM0q?;!*fLc!2N(@-d#D)%nydA3(c`bb|M~W1c?90AYqArxEkL{ws23w>>k^=o!NTQS(z;-6S#XrA?k7qX64|(M-Km-ZK z_B-&2F65zjIU!gJ2<$sc&@vf@H3ov$IW&V@us(UfTDX1HR8Gk>SUSEa8fKA&l`EBR zyXXtnuO6^2X>P4HBa;x&ho%|Ss|=f4Tb9uF@1h11U&6y~Lm28C9#F8t1ww1E1FOm@byI*jt(nZtk^b*sd@Yz{uvaofPvfP#$?$8Q{e!MeugYI7ez7#xZFr zby~sL3DtwkTBU&~OB4K!5>_qNn4>U!bD`Nl>py_XW3fW8#GDLZ%A5^fD{$MOeKvjN z&=TwQ$j}-4hU-S)?8+tA+DZY#vf)U9<84=Xf%4!DoEbC=7Rm(iSaY74xg_B++subq z35LptkOo9vsy2O#Y+?f`b6mZJ7Dh_pFf-(W<-$n8it7gVB&^L^tPR*~^md52h2Vu} zST2;bo8-c**Dxe|@I$Z@)0zYS#7^a4vYx#-skN{YE@MnqtG8>`wu02$rwZ$#it5$v zc}AkD4eP6nLnXQi7Cujc6B2OLa649gop+CS9$6(TxNjM!D`p_styf7_=xF_|eI10B z4Ar9ts%Z1kNouU{$}pv&o532^dJ>YJQTaR>!AFy}X@NvDjSuW3b)IbxIB#9I$;|7# z|FV94ad|Ro2%ljSV7!v3YP0986|5tzgEQZD(uV8j=O+(b2zFvC2q;Fu0>NWr<+5I? zMS~D#d;pirdchD39boTSOw5)!3>DfH5f6OiVT7CEa#=09GJ_PGy>&NQlwp!A6bN@x)3j%#jq`TeLxbg!Lb!lX)X}rr6CRESHN&U^U5VUI)x-$tA#1$B|4T#IofFwq>YXdX9(9ujn0&X4Tws zkAR5#h#(&z4^JW&Dvur9B3x$3p>9O`)KjEFCE7Pur9(2)P`TW~$jJiL6iXEZ7eqFV zDjLKsNL#~tRj&a&VAp$G4JaBAd z7TNn0^Q^Zo{Xtz)JTau+Ezw$YY+yIWuW-ylCKlduyDa1@FcIhebJU zol}=uP4&TQy#sSerxb=Y=U(7$axOq-Z#HXyufq4p$;!V2b4jR7o1;a0NQq#AP1Cit zx;J&$u=t^^bV;c&ei~P^s#{ZjXvMe}J`qhZejL(>ua>>g*E^TAE9aCirTEqKN+sgI zA?IER2KIa_4cMbgMt_GM0@qzr)iMz&;$l+EX~BQX`~a|*;j?5D@uG%+!(JFRb>lCz zog~bGg{ucKlyAsf)(l4-#38oOEZknP5U8{m(cc{6VZQ7;vQIv11{2Xa7i+=`9Ey~> zVk*rl&c~?fcInnPWG-u#lFCB3pV<1MV05vUBiW1x)1;~&+0Ea4)+~YAXvL3nAOw%I zf>iX_bHd_rKJ;3AL*}w(OA0t*D#9{zPgpaYyEalnyeoYjB1j;6?DN^hm#@`=b@9Lr z?1*R^Zj&@GL`pV&Y@W}VA@gzO=CNB}5xZGHGOP)2!lt#kDk6dN-85t_-khv`IBU~t zWi0|~omE#_h~*HtogOj2B6D%)!x|`uP19Q>jF=a6f7m#O(6MHRjN>Xrk?NSlSY?ERu&V488BU?W}9vw#(-BUv?H~{$i&y5A3R=ILC3lR zO3?xuYh(9=u7S`EOrwrNGW!+3X}Flz5m&M|)<%=T6Y*TpGt#u=lvk;I6RmjRb#$#Yj5I4D1<{%N{nECz~}O zF_UiXGE#0f#RvF8J&d8bV7Y9eAtP0WQQdj9WNB=Pvf>=Jore?*e$yu(0|DbnDZ_k5 zd?Hs$QLjPfL18EQflC-Hm(>#9HE!Zcum>$`lmW`ajcaVP>Uk5LD1Op5%$91P8rQC~ z3^D;V9k`lws7QUs>-?Tm&VM6M<}~g%?f&2K=FBwg9OM0%Vi69E_qjtE!G0wCvzdD zm9{~mIrBjr^@8Q(6L%SiFowyJn5OsY8cKyrYGYehsE<=jRI?4zU_{&ut~^I*ltIB5^s61tyrFXGMxsbFcEmlnf(-TthSNb* z+aLrRr_vHbH+7RWmKFj?Nd`MC9p|TQYr@?4^%Gc4mjp+Y;?q^#7u0{Lub&@ zw!}dnK;^N6dObp$?wQTmD{EMj+p>r9ofW%yM&*)n)EzpONkVGYkGrkLQ6revihUmn zKws~lUhb#M9-7>>jhBqz#-%KjTHm(?mEw9IvO8^2k~B#tKUwDGxuOM0?dFL$4OR;!PZQVz`uyn0hfaV9G- zmIcq^2(!MKX-(b_Wo%R?=;!E%|ZKXXCAV_5_aSw+$g6aS<{ zt?brM*7W7>7nc*?SD^vcP^_bRicIPy4#k&UV>zWZ43>|5SY-2-IZ~KyYXYl>uip41 zOe?K}mG|nEk{N2vG<&8@0Wny%!^NZ6JnMYuD|_{7mQq@&m_pArs%e4EQ!G|>DOUe{ z%IH114A>vB;?IKLud~_I>LfA3j9D{(p+i@aVRC8ithy26Z0U%5Qbk1F@Ut#hwr-LB z;jjbMgHN}j&QaB>`far5wmOLdJ4INh98T{cPj@;z)+!>P=^H$>BEA=C-Q=G#Q!|Z( zz7E9U$>mfbSltvBRwl)oH_w!24xp)>EA7KH)YqrS?ovZP6J;z2J_t)XdyPAHobzq< zOX*bG|McjyeJq)JutU!O_a1EuHbRKj3YWU5q-umT z(J9P%dVc&o?mS2zGlDIN;Cs#9<1PFm?$>At&W9DuRd}YlO`zXveAxIl?qdorUFhUye=M1d*?G-?m@xz+PN{;Y``B?1?FX(9Bt_&eB9xnl&k%SM15>?Bn;_1XF~F zR9dQ?1fhoJU6w@{`?jqxTrWD3Gq>X&SHT{H7*-;v zb><;BSN1HwCLlI@hFG^>H%NWTEMqJ~X4;`i zJ#?+Q>KV0R^$8{96jGW30upnv8oq{bMGlj0UDb@NJq>3?5Hf`xTaa0$z>M@(z7-~Xi^*aaa@Q7B2R?qxT+Pdz^+D{w=;f@ zI!4PH?XA8Fk(^0WbD$CsPw7so?T}k@RWXV}9HgcwrRrF?mi88lt)&qI$oR*QxjY?+ zX=#}EY|A9ZXi%6V*Ij~2ISe-URWKS>aG$hGrqz_;nL>ldGzoHCi=zYZ(=VzEQGl(K zjio{KWPP@~St)+9j`!Qo#GdL!_P)6H%z3lMwQX<}*pDS^Vkqs9YV*}Dl3YuiR%;@# zV%GdVzJs_&EwYX{%2j2u0X~3KuvNx`pMKfV91wTtW(du*PVx0?q zKG=|v<8FE>7KN>SVDnP6_%d__Q>+7y6R7%WcCV{mkuLnX1t#Xf2nZwvo4r*UxbM3=5W?(k{Lzzp`zjK_4)3}Wge1=J5>hbX&tc>LX-iHwo{wU zBmoZfVQ+8aZawI$2QbBVTF#+rOhj)sN(qs%w-6~jJ+2dtu+t@Yc7b& z;Q`d1;gg;=@+&ZpVNI#ZytGPGMVHO_87oaL4K7OLM1Q^l^Qe3(wXbfY?pCy6kF)2w z#h8ZHHAXwcC2tGgbEyRx3qetfv72TB^V~!;lxR8%xgB0v-hN&WU*@YzS1ZRoQ=BQ?@+&fz-q9#6_T0#758){-QQmOyux=Li#l~htYe3wLQT4vL5eUn!^Ud z+|o#_v0`!+i5ik+QubK;xLQxkmdhi@id{2jq>O`Jz%4ZGMG@|DHhk;QGYw#0?w&uV z=rVj*A`hHzs-QiokdnJNAs zv-$0}egBvL5~hEB_we-m_%feA|MKwv2xU*dxU)S+Z^~M;T7rJ(0W+@6v>e8~VbH(A z`~Dw){i_44CWyo;4tB8)0UOI4#tv!~xWJYFIEwuW>(4*@dy9<$`UM$fzvr`-sy ze~0CPN@``HQC8V-dZzOSqnWe4-{)I{q`?yW11W|0XEU8*tUFOtVbG3hm<$wxQ^m-oLO-gCtr6$~C zNtq9Vs(p7xr`i>&_>uZ8`we$F>}*)qw48@Vg1WvwfYEoV(YBFV=+Ps z8_5AKpITb1HwJV34(q=?PW-=VyVe~$ZyWeZ)PPkc zhsR#qDUhRs0z{j%Sg(NrKZ%^7cqx6RWrKyZ%M287s5ZpDZ8Wj}+yLu$2UroYy~B0DOn_+JiO^ z+c*)TjlYD5t#L`Qk@A+;s=c4X_1#A&)|IVEt(K5@R@>7?bqDYoxYZ4gv(5&)AoCDF zr6}oy*1>UKTS8n2K`enGY4Lw=MCL(MWhBjHwXBHOwkeT#q!uD#koB+K0POD7D~~$~ zPq8!4)UD)e4hcAJ9jdli3cB5J%3MyE6y0rtaBV@@2_@_;1;3I@Dc9zFeMR;3_|fBd zg}SFrrCGE{wzS%7vfVTte~IgriPm3X`KbN@`W_2DSY}uEcl#fR36?- zZLJEm%3W#hDj~OI<3xtUt^F7mKm6k2>j6O`{sFt$#WtJlK|9+x*w_&(kAV@eJV?YQ zoNtEWpvrBD-A3D4AfyuI$`kB2R34fi5{NZ{`$1R9BqKobOWs!s3149S z^4Y~)!Y$)?gVw-XAq2H7JPAZ>B36ep>jJLFI~TVF(KvG?#KNHx78CqwnTwl(?i{Zo zaCxMiA<8m*dbC+9i`ueu&KS0bT~?|8+~DyQ)w@?Nxtk&>2(D!8+R{=>*lXT<))3|_ zS2hEDgXN+YqXe?318KHr$$9Et_;ayR_qEzF8{s4ta}r4CR$`B>>4+oNRHfz-2(kLg zoR06XJhY;!)&ZBbI+rDhqK&Y!>5c=m`Px9OudsghI9UT%a9CY^#jzj45I)UXg7FvO z@Wb)V;OF-qv8N0n8nDq4QJcHMRjEklU4pV6&->4JPaX>PQhGNxU@Xd(chF#&({59% z0QY#_-`u_P;14bKkg_#yfG!KC3Qjs&Pl0$M{2ckiqet9fZc&?c1zFn*IN!2vD~X9A zD_D;2E3e*uc1Z|U8~T@q{RzTyvYJ3bc%;4pL-C(sc~C8xO(80Hg|TtOcc`QG5Ur7~ zTx&%83hKe-63Wstb`-IxXz-gm6#%jw2?V9c$A`OzcTXN19w%Gz6|>E8Tq%wjTUZc2 z2#Foy=a{0r_uvh%)k-E+2_iA2K3jmLU^cBO1U>4Vdlz?wBb8T#b+#tKH?yIVTCxTJIK6{{TEm7lo%N~n=tJ*6c({cUH#d=K^9X?gjsX7LCIB`o zMX2XP^}!?GkgW(e+Hwo#-Ur-#02*Fg7Z4w*yG!@6jbE|Z8Wo^wU_KY94j9MbBRK`y1Y)svK@C8Y!pf#1E- zIQA9Q-3J$P%sYgTJ1KZ^%+hSorR8YwT^VxqsBQquLv!t=vkt4u2e^?6+ng7+ALbtF z*;ub!j71zG2{im=BB6{HLe+?14Pu<>N^AOeSRSZSg}4z=K5McVVcAkY%c$*zqsGTi z`273Zj}IQ66y_Oy7sXKu631##Udi?tuNidfk&OQNheukiba+qrf|#1sI6$1XLR_2e zB&m_l1!O*`8duBEW{!x?kXtS6tRY%+4?gb^)t`U3#6rS-D|Hqy7jWYobLF-LM0CW} z`?-+D1yyYe&QyjyNyB8geRGsL8jr9`UNZM^LU`M!D3R>D%&V7*|yPaPsww0246kq9PZw^=!*rNlS3^laRlX3%dpv? zECeCikorfP-8)t0+7Pzg=CI6~CKf6plp(9*8c@{7OzErpr$?8ZWTy)14lf3M(RBn0 zLGiOifj89a@k4&}!4+*^N`TynwuzBu(=z6c%r*4YuFPThR`BrbQSFoVwztawJSi>P zvVp5$Ji@jl#BhAn{PpSa*Sn|3zy9-o^zoc+hC^=C5u0uMq-ouMl(=X7wbJvsNaO|F z|1s$JeEw~TOGd=DWLxPW6G_4mgGWm#o^#*tKY3){WXzeY`KY(3fvOq<(+u0~R<6y5 z_>St6heo^1>rz^yW?X=>qwdV3)*UwWD^qfR$jSfp@8qG=WXjCYjw;F0Bn?+Iq#*e9 zG6&y;%)??fL3mk9ylm*QK5-9h`q@mI;XlsVO5pNPYH+8M(w;WhCUE2c`>nn~I(Exf zR?B`zm8@M63gemOVZQ6lwv{b+` ziSyu7mC;k|HhVTtYg^GAV}a~m0o31S)SZL2)jxQg_-w^1CWOLN+PRNKp#9cYX8z)a zo*Juw@Bn7-!8q}2gxG8%OSJJ^4TK`juo1s+DH!p+ZmWpVDrx*pA z_m+wg7kfprR$-~D*chNjA=^UPX?=lV(a~OauRK^`4J9e}rA1pW!YL{hoUfIEHk`@* z8yD9#Kv9Q;Cb}EA^ia6=eVNW%gXJ=h8buvD~ihpdj3aq@ApW&)xqh~1gWIU)D( zhCFz40(YNDAT^>5sSYhp7^?+q6jr^mq2~u&9*>@pm{p3^8Ys+0)aqKcxVy=&dhSLC zuHa#>3RN~LtrZZ6q_hzet{}dvmAUjQGf#fN84+Uirg7t>9QrgCEAu>V-?XBm4 z{c!h(OPvig{+^3$uUJlCt8tXsxP$bpvd_mJy!khe+X&_k>)0EMbrUouh{w2b=!fia zlPvqq!*|Iv!`N=d0FSByms)Z7^KOgkD956f$G1+or9>dipz>|h#apV@ptc!GzztJ4 zl8D!jPPi5VAzAIW3=$c=Kyt@6;pP{oeGH7RADxnfrLur`jSN@S;Kl||X@gVFrKcH> zAM)wF6R^Zwbxz#FoEKb0(E&+IJH^DS#iKTRdh78#OIyaU?w&AEC)~ zi};II{nv*FmvR!Z){8!EBQG2l+t@i9MAWT?_}a>zA8@^QX(ChHz$vy&r6YbTTal+A zhR-hfOj8Y)%drP_ShMp2osb=ZKm=*$Bm^C#=Pcawzn<+q!Glj|O|!NR5>GRvUe=0H8GxXJO}HY`$iN{Q~ep2vP3wc=SI$eR%LeCX1|)aat}( zLvLYJo^c~&vMupG`Y#u6mhaGBV~l^JT^VYws#h`KGmVJnVZ(t>5kla+)+4M{mN!;eocu;3nwG$D}r znxPkmz<{D@AsjKwx%lP&`So8Og(f+VZJPzaSm#PBw*~2;HP486N%^QdF2FpT1RSY^ za{0Z$g9R>3R_eXZX}@#~k$10N`B+8m5<%^C zG2)Rz2MHIBN`oR>>FNzt3ZH!}wo``A2mxXnK3==*ol@9EaZ#t72Nqp`d00$H=FW41 z+AxR@`0Losc1MJ?bM>=XZMdLX zwL;!TAhb^Hk!Y{9Cp^jdG33*|kIBGu^010lE7IYZZMlYJ3pkBX@;bjB888atw52XkVdu9ABDLj7J4EUf1W$ro%Mc8g_I ziK@kx&1gi70(-RA6Oz!z&8N-9ZUr)P;}&e3FzwZ5lPOvFjH$M8&i}t)b2)D%j8Vc$ z314=Ns#C+T9(h~aN%P1%9zK6`a&4WgN+qTQizz^Xc+VVKo@XQYjzR;??2p63>Rh30b7@C$7D zszQToYe7NuEQ4|m%AL=*-~!D9nJqX9tJa-mx5UE|XmMv<_^8U|?AHw0I}h^BYTFAg z^N?zcHf}4=M$0Bw=!!R#4quRY+<`EJ=N=OKG9Dxo*HZhS)H+z)c>%=**|SUXoj|cu z6y{du2J>DcttPf9Gc3Kbgz0a{Tnfu(v1Uq0sW>%Dj9P5~-O95L(R|beUy!-@jZi9( z!Fx;zGfwD(R;}QfC5fynTigB)%_XvH=&B8NVZG}wZ8uofeqbHFEVhh(tQ%?uze00)BUsUT z{i`(4?qFNMgr+X)phB(0+jyFb(QL03lPyQnK(_sag6iD4MWS>=0o4~|9ySBjDB35P zYO$$(JW|3z6O-~;&ix0k-~IB-lM}lI3(DJe2yoOT4EB+tB|c&srS^S{QZLv%{8|dE zy(f(;jFl5)F>1A^tWg;5=~Vj29_GRzX-rRypt9`3BCVoiNmmgOzMu zW~EAyE{!u~jdjFuWy$XUd{r0Atqdp2y-b2X8KdQbuiI0x&1FryrlzEc>eQt6 zfQ+b>TjCV+Xy=yHzp=TrG-gl@DESU=lBePo5csNV*KsLS)4m zE53lialX^R*C}Dgie*5IYPRupI1hD0_oWR-qS%LL3G>w{l>&Iis(UDu3y+AR$c>t+ zO)gI3yvts`|KT#8fNHMBaS;F*`)fflLnKU_l~}>g&y&6W`}p3a8(vhRqG2Y8&`D!i z9MH9(tnf`f<9d90`ah3K9;o)XD?x_VnV@0T7BJpL6s?x?Jcs7p=SP=($ihl()0%J? z$u(URDFMXanS?t3W$+*`+}&HGstYk$4RtCz&$q&cybw#Q`82pgIL5= zXI${IOA^FOoMe{^M-TSpgAem5(}qhxsDvii>R7+oEiFM74#Yn9P!Kw4=)Jx@eRIJTMyN2EU4&Xbeh6YMY)h4aeKy;@JK9e^ zxuUyn@Y6ueCcpF<;mzz7YDZ9t^DN=F*BzIEM={tusI_TR;R2GM7D51ml9VLpEWSU! zJ~$;lmY|zsLkz0c!6qh7qq2bb#ByWg>mOge>ahw@ve`mhQw<|0xCnT!Or>RO8h!-! z=w&jBaawb}vG6^xFW4?>3TgC0i*8)uJ$l)!wpsE2l)RyBtxkrD6vdkML0yj?_QN}K zW-e_#EH+w8!?~oftS(LSfYY#sDCtHIRG0E|Efo6Z9%3dHXugM_&(!*u1&%rpnne9+&ErfvB#Q6LAccA6!tSl1p25Bn6vkPD*8~NhF4ByYWim zwuo~>-@_4>D8(0g47W}de-g%!5jj7!*?{)I*IcpN5FhbD2qiF$wkq7( zd8XoJvu_@44mft6*!H^)rP#8B%J%jZk`?CWb0f_cFJy_7u%%|@wU}dA_~=OR7S=Am zos0f1o4K5T++wQ&ScuxGw`?_7B(iC)skF|Qh%a8q5WU&%o7S`o;J7tf8E)UHM8WDF z6KyV=y}H;8VTl*^SxK#cf@x?F;)}Z7j@?KGy=>-!3=W@is>5n>J2Xg-o5lczv>Vx8 zj{fZB%ex1cG0hUJ8y!4avSz#RA1p&dtsojA=PWqjaxs@mFbR^o4J^aAYF$C3+EZ^{ z=XNcCiXI5%Y zmK9g$@w(tQHV?a1>jm1|f?pd~(@ju}Va=XL>)4IQ@bnv-Pj=bp+--P7Xf~(OazLY4 z+nc^u7;<;VIVFcw4QURBgX5jlo>i+A*X?R;3D0u)%ZIN&UB)P5k5y~@A*%uxJ_u=? zc-tJi0?B@Zb2|aEh94R3gG&yu9d;cw6%l+1NuYF2A^-CE+fR>4W7;&6YO#rbSIdoI z+2nRUV@n~P6UZ-M9vyLao_6aG(#^%%#DQyX(6bVuo@zOtfD4(+3jlKnRVCMGN!eOB z?``w#Qj2n#tUaRj%BAz{XL~94a2VbC35>equ4$!}du}#OWn!N}*4-Gx0bDL)0I^!uw_>Wc zXxVKxN}_P5v6fXiop8PS%r3Q*s2yl&P|z_bU3eYXG}d&IK{iRJG@I?o<8x{K;o6Qx9#GVyzGd z{KdAe)ic&+tz-}?kJlL&Fb|6n)qn-1Il1V6-+;NK1@5^N2eZUb zatjm^;!&!bz|7J*59PRkxvZrkVnf?%=u*<)QK6J@R9PX?;n&Wt?ETZ@`-c}7%9Fsl zX3j0Ao+ngMl>urURCX{_EADX^mnB{1s*7BrHTwOZ{t*!EG3U)cWs z--+Og2d8JZkvKCk%-7o#n7B{wQil6i}k@& zoA_`Cm&^WIHf};YTv+IJr_i&_ma|@e3-0aQixaq9+(p_%P)PVw8rOVgxG+Y%oL1$9 z_BF=N!Adf;T2kBU@_XU(GFnWlgVNT9(3G{+4b>EaTA!i_sdAR-0Ou0TVH#{LT6TTc)7rcs>N3@~ zvrS6Ah0DumCCuD#26*O@ByY?~@pjwYml?YvRSL_|l_ zI#b6Bn3wmM&`KHc6BIjJ=J-T-f;RyJijk<@TGJ11i@H@neORemaR;~Bz`n~~A_A>& zP6_%K9eLOehchAyjE>cvc4QTzm{Yd2WboXxDDV-+0=luS8k2;1$I=TJ2OJ#mrm)WS zLl-WuCCxT)C&(C+)G`S}RuyQ_H5bQq?oe*vJR$-qX#e1v3qG6!M+Pmbp?32me4fy9 z;WDHBEI&Oq8$_L!Y?J9n%Pr){)Cs3{ODkD!L{i{$xgm;WP1tF}y=h-N*g3TT%c4Wi z*@PD^N4t^LUTI`Ymg~Vf_zEII292w+lHRzCcd7-(iuRRL*(u4&gr5~%0@h}pIG(GV z-heq;E|n3Qy{a&UL4(KGpqIIBkPuntz8U`lWRG=)SSWRr&WHmE(Lt=wHBm13uim&b zwH_5dr9~=p!}U%aO)F$zweIB`CnKty#|b=rc=+J)VS?XjkaH0-2H!U-045?A+ z+-da{uv|QEyci|mNz7onWkD{7-bdeXBjudMcL8&GVhL8Y3H_-=U_{rbj}}!e1&k3d zZUJ-g9THf3>Jm9y-gX+02Pt^zfZX;AO2XD~||RdwCl zWzP>jq-X@h%mR}JCPDqL+Tn-H3I3>6AKnXXTCV{H6yY%aHdaQ2V~4V)2MPgZCngC*?}wC8Z{ zO?$1Wi`6t*u4>;1lPvgsjv?({=3W}cyg}72WG*?$EX8OLRH$UI+Fq*_IVcW9iv5mg z!Fu{UV+0$(Mm9NHwJ7HW<^eA^XX}=Sau1o$EwjW4rQX;Se8%5cJ$K<~@;#nADZPIE z;gbfyy{|$zqO-5g!Z?pi*lfvWYpi&_Fg0K5Rm zeEeAx1ah)kyB$KHl-Gj67LkA$?Q?GJ8#0%!?jg)xLfn*UOZDm~10e;M0baDmnF#^e z`+r=FwruR$UM+8grj`H=R--=4E`!(kx$GA-7yh`{7EL9_f(VfMSS!kGc5|f~Zg`FN zU%!3)j}PS-K^lTmsU!hsbl@+vI>u~6Td(JP+&5@0do6J-aaQa(wj?lc$i+)j??tWe z_8n+W2NV&Y7r~cm6DAi#p2mvM0LdbwhqF(6gXR)Dp#n03B}At(+k}=@VlRX+k3b*J z9MYhD^x13n>cfO!pkNshYshQv6v9sJPFKBO&|KOIC)O!oLpEwV4*ar8iHW4tY0sl~ zpgsCnty7d#u0cQupc^5y<528W%S2>2*Qx)4=98{wowP@pV|CF!>d02r6YVmA>W!4J z2Pc{~T4N5@yd6Tg<WV!l2r8a1UySG2Y0!L}MuOAYGIm&q>Cgi+#gxF;Btfh5 zjpx~~pC6rKXTiowQ3mMjAkehR`Fhdr_=|Dfc%U_CPF91V=JgD?gF7ggPNK+Z%aul775Cnh-vS62XCo%qQuemUe6~ao`StF+@DOVHikesRQ8R&e5hNSp}W{zQ~`jbV7)O14A&O|yNzX=NwgU1JJ`NI z`eZHFyh@;8)ik>xa9Z+Jm`es5@Ee}(g64A9QAV19dYfBwGebe8Sbt2xDed!y`*{BG z)#rL>bA^CPv(!?+IIba>Bs#aXe#tkyhaq!u9vrPFrc^4zt=crsP$Wdw7*e=%aRp=# zPLFt?Yh5Ex@HVvy;?im;d9`BwIBvWY{KDpRLW{!JrrE(g)}{#^4*}01!I0s`9nppD zyHAWq$TSmm1qlxWK_M(_8Is1f1h(@q$A8he=unFA6$qu4turDVoDI9yrgfK<`R=-Y zb~>w6;o$HmtnIY9F{F@vQ1impS>lH8{f*A$md!?YjW7Zj36SPaP=T{s&yYm>Mj6nr zmGub@H48Bq?<&nk$;6?xwjm9$t%=k54)EP)pBuncgi?4*wYGk?_*9c+&}=O7c}Ui` zzkYm{&(S04qzty6&6KS@4a9<#9nUqbfSeg2;|vYBKIi1IoReXrA{&50>WKMpao{49 zp`ph-%F=It{U_3Ya&&2$Gc?yty)J9+mIH`yX&Tppo~h@0gUf3FPusQa*mdLBUy?*! z-^T5@CkA{;`__$qF+_?=d*C>6oMgK5^|N>!JEsEp>^%Ya;DW2_0JR`df+fVpv_vX9dK_@%cYPGN^wEYR6Zo+7i_`jB=lYS>=XLf%BQBy*$bNj@Pdkj zaXj)J*lKb*3Mn(B@&=tA-D@id*ma~ zaD3TPjt5{qe){Uw>%V)X^V=_UH=El9Vq}k^(ZLnlQs^?$-^^wz}ZJSe)vW@D&kD^W4E4@{rRhqThKkmEbRDjub z6?{AA){>ctH8EO?AwY+v|1A&KGEmdreU{SvK9ehSHDcUS8&eI=TP2%N_;$w~1_`kw8mD>7$elaWD=e)4jjg zcq0#Fm!A0q+PKwjf)p~nj5f2C9m_nX+V{Tt$_ZJdopNb=;E48UnQI}#>EhFARno&X z`|9BrClbxZ$9qx^X$R>hu=713)b}CT4~~dZkU!m zwG6qWgK5Tx4zWG|+p`x=*lJsiAk!1&zQrbhv+~lo*Qy8y$AdWhph;V~AbzHzopVVo z4EVQba?0*)kDINw-X z%VfPGsn_Gqhrdl!bh$u)8W@NJjMbWLQLw%kS|C$4;#E4dG^_b>I|ewEHsLxq3D)a@ zx^*d_Mtv+um*d7iAHjJ=QE4_ycS9E-hSrGvtq@TfLy`are%KNK(EJD+Vgl_JMB5U$ z*(qs=)!x@sdp=Pz^%0!c(&;EVs@SVk*mV_BZIB3ov9Hv_8KUdO+FH3J&{-=#NMz`P zR(ERykxQlIekeo1jl7`2-Ih?`LMBz!k{MA|SJEA0=Y4$Jfj#wtwh`kK4k=tP_Ei+$ z=c<<`0j1V?tf@YpR4;fnz{`~m=b>rha7x}q16yu|-MJmchL7;P(4_=Dnq}88N7Kvn ztqO;1O$dibKAz9<@vOR?h>$CpUWnEdaX^z=t5Dun!Dp@R&%yITmjNTg+)|5{R}|U^ z5%e-NR>X~C#QYWrDk< z0AiveHprZESVRJC>IDtt8{DXLD_LFK3T#Zke#>aZg2b_Ge)-4?+5&I0qM)3E)=*{? ztM9^j<+;*`hpUE@-~}xN3Q`ADmI9sz2z%=xwjk;4wd&A^+<)-!(Pc1_4;h(ovX-V3 zI*9LHg$3VRQ;1ddI1%>mRctvVeuGIJ`d&*?U){7dj)y=wU6UP*eXk= zWp*UcO>56=GjKVT~&KYf@TBja24?^g&?jGl`xjc+;ZXbAVin@`z46$VRXcUI2Gh_%+}$RH^cuOmq5OF z_T;{wlj9lc&IQ4yzd|hnEk(f%CyOtPoSXL@UtD5+H4AhDbH#HI8}j z{l{Jx<&hJ?qsfF|jzzO*71*EJJxRxx!+e2z&tJTL_~iMEXD{!+c=+_m{~uyxrCzah z1cy6jmAGb0rH3$D8h3M?KK=3kDt{t(?&uFq9KC2mbao=D6bU*Ylsy(!BZYk<4eZ6U zhxea8d+_?*&u`y4;7XQiqAE4)94pA#urj^Yq;wn0@@4D!glqB#2Uw7m;MHv;hC#Kk zVqP=DML{qDDSz2jUBPTmdF&{`ZO)noWKoM_sP*-;_u^`ub_#tt=-kETaXjH2C}?2# zdg~KeA=G8&Fa{Td#`0zM`UhxECjs7U&fKciyR`;ZF~`g#xfkj;T6SE4^H{WyTa?|Y zO@h}*HY}c|T~1lGWe#5shu64VRty1qHK?M{76A)c43_~9H?h-$Pas>%<#^Vtkl<9I zb2)_|V{>Zox?+zS@kS$sYhWHeZTD!+bjW&>T6$BTML49H^6E3*=p=Ft%w;P<#8!zx zaR30UfJ3jiTdtBieA1-jtNPuF*V zx!70*r!8{nL0Z7gip>^}P?rI^wv}~{Hl~KrZ?vzx0{3r^6S~DFeoD7$Hjbt2L@HGnggb^C zMfIO?y<3-m9_AK9(M)~BZMBoJ+ABbtEpF^@NjLHh{{Zft3p$Vu8{`V($}1&nE0wH` zu&%iSV(5u21v-82auO2!2K4!|AkZg+)`ne+3*a_l5X)G!ycl29z2?_A9g)Y}Zb`!+Y-kJiWdRwbUz0sWg8rxeBOUsw~yJ>AA z5uJAIBZ+Yixr}tWksfpxnaiq`2>VL1Y8b{HBe4y{XuL=u+s}k6V0-6bYb)XqR-1uX zW8)I)CMl&)6MCks&LR8$M;GT27}ie+Re>|OcbKUW>sGCkKrGK4Q73E@yV_z3lcxoQ z2!LWqn=9=S!;PlF*VsIOl^zSE`LbEA?b62*D`t}!x3pYt428J@=EB)hQETV}JrxiW zsBSL(J-tvbZ-oA0MvmOd$iBwBXu5~9EKZ0oxvT&7-W4cWFm(JH7_f`tF zZBHkmi;c_fcCBolgtyI(ywTR}57_?KgLUuBl4l(}ppWyIBdN`@w0qJ*C+=ZBVe?qH zOTUJ(s<9v)5qx7aC}e7ya!7hihQ#Y8K1}Oq53g?%EF&C;4RKvbdX~`X#uVIZWG>Dl zr^-Qi${cS1`1xma=D6! zbOL*XMrnZ4jApD3)f867(c~MG6MhHglDQFLNp&xq=}Bp}pu>1B90q{tI2Lq(<&}d# zsnrk)1Sdo%KHSEZEO~^|_X#id_E!&Xrpuyb+Kf0~UBK7p9h?Ro0(4l0fDY z#Uprxj!k9m+^jV#Tl?Q3ffVPVoiMWResIYrk=px!b>U+RaZ_nzolTS@)v7l-%Y6p+ z;b)Ho98jIjiBfE!VA{>?mkDXUv0AJ*=4W2x^0+l1ki*4&!+V8H#3@!*-BM)qMS7gG zv6O%Q*2T#B$RqWhE*BdW$8m!OWozXFX$~cD4w_FwNy&-fWXWn`rm-NqORz`c0ate; zkNtOO|NiMmkL?`0?6pQ{u}j*QXJG+NWDqjt8>2!#1AFsf@>`d?;|U=$x!VE2=cZ!u zi1B%w08r_e_^da-`1lNP!q!Z>;pbMsBL{~-Ui&QB)KLU! z)J2Hk;2jg|Hpj76TEEQoKOW?ITiI>3emEUr6GTXwz|k%drgY-vb^Y?@oy!%FP%1V$ zqFn|@4XQW?xu;}F<-Ol1KD>*}B?%LfG60!nU+UyoZT@2l=`u5?%07OLa#S+xKcVx!KZ)vC!TaBa;Rdd5qx+Hty^zH%wZoJ=5wlSwcyTcG*pNW-#9y-3+gA zd3f9bhOH?sp;EIM*(OQ7gxaj(%Z=jTD_kB9&AdfJbV}WN^MT%$6!DA2bLEAjdIp!r zLjW^q|EP$ck`Xh(ZDCaQ{t8v6`9=e`-*NfK&5#+Uq`f9yQAQYSCv(@j2u|+!VMpKl z+wH7O03)EF7*ta#eJ-$28_w(I za$EUJl1SY?M;9t^r`w%)>_KwA{#5M_a(VI63kQP%#%{xfC5fz($fB)QrRRRp9sliP z{P9;0U~&-Ui*3Glm2IYU-?JHlEe-QIQ1CBvsTnB-6?y2ca9Rebp2(cE$fsFcxwy)} zUuHi%kb!l9+N7y*rG-o$$EqCmh>%g|E?3B$slZMen+qHO355mOn#Ybd4MIc^)U>j~ z{Sn%mi+tNSi%TKH^K0^75BPpvpyA?-1(2U%`KY(dClZlS#weg-W3F08(`|WH4bRcy z&4XGjp+j@P?vKsD!1ju|T3c93MAwUg>^G-No??)@2nsu=hRlt%!{>^2RGP~AjSJC# z0dv`2xhB?xYd>8lL`D+D{oM6FqdoyfRSoQ2+MsbRhc? zK0>z$UL)A_gO;CX)|OU1Rxe_{OL6Dah5g+Zt$AxHn)?>~f?3%KlI`Y$ximX+raXuL zaCn|fXf}L5Ng?xert+*m-kdreSqmO(kR?J}g+3x}v|mG=_OuI^9RTy$U`RwQomY?_ z_--6|GLX4r2SF?GH^YhkjqJP6)l;>Wz`E9ovnfJ6mJ3HhwhIuUVx(M_{PY7-YAWGIK#H z=Xc}${s);?k2?!2khwF*m_RAzq!lSWf@_=$UFmfIHtS(mZF41riq!L>?V9uic}~)C zhs@<&L_&`pD|mLY0s8e52J2Rg*m*EpmSpQ|kZ%%yO$ zf>T8BYy85(kB>w*_!ii|9q4m@1I)wehp#lC)pZt?9ZyR`M*+>2PSdO3jG6rpE~f|^ zC+iZyvd#9vwhv8W7yLm@v~_yEyLcgUDIY#qzZQ3Y74=&IO>B`ZdN>eujPx90U(h_N zjV7OSS7o?o^DL{#1XATBtf`FOjFR{tWFFOa#TIKVhS5L)ibU}j<&w`?J81pQc(?x` zb4p9G>EVcy3W^vz^5$UcS>uiI$ac{`{zB%m(UdN9NJ6_K^5+ENgYe(O?l=rhFPw~D z&^$I;+}g9&)ebb~;!SqJ7CV}3L8D&X zeR(`TkD1qMJJl$=r`Cs<7VV~3RmoS2`SFK~T@#<-rrF?A7e|9Y40G75?zTX4Zw|mO zmoFy8v}Ww{5%V0%;hxEMfL^aP?u$z6cXKHKKPA`P<7x~V-Da4(1VdWt=SX_K`+5KT z{F{&8gp}1vIx9?0&9rk`O{}=)Loc$y6*8A=DX9=_6~ESpfp274?5U#5Np2&TXC+5u zE+H11ENag9wO!b<6m!df$krA~7gh7`KYhefMxZ#n{?ryBHwAl4#@q)I1wrlk&i~z~ zud6mgpbz03#Enx@7CtXYj|gvZ$^|WR>gj?2KP)3_2oh^$8V#{&s_q;(faxOc`}A{x z;0Ml+=}WCKu%`?!Nzh{sXK;w~ z+I4X_O&%#U+QDeO@F;u#>C@64WY5ui1GvNYk!YtOMfOF(G;ThakK0@w21e1ttY?Wr zv+bDc>s}Eb@FL`YfMj|^ijnA-!_LL7d7soLxW?r0^@HH?e0TlfHMqojz}G>{SAMHB zO5F!*8}cx*cu~;&;WoKs<=)ajXax_;R?bE)UpS!bgO-b0l@~IPn-yr=c>1id<*Le{ zf#|jKuHYKwCV{_@xx7QCFd@6OM*};ouhOVUrDMbPMc)9JHg%RQGyy`cH5Xj!}yUM*=(Ef#I`Le2FA zzOjm_h`(dE42go5_4oP`{g_j<;%LCEyGz~m& z3+}^hkO_qE>U~0>tYDFK*DEzi#o9y;)n}3U1x{C8TSQ%Qw+!qdE{{rXp={6uxLq*k&^I5Yd`9K9y7>y3i^IvXs&hs#+R8x$te6U$Bg#TQab1Kl0&_W(6@(|{-cHV( zf6a1|3L;b!?dvbR4!v4eW3xFIFEnzWaTc306G-jKmNnnpzkxM7TQLs8xX4hSf4bZ#OIiKUdoi5}K09maS>r(fj+{4ih0CWVF7X`-jC#KY%FNkD z+N=nrt=hifXHL%IAvb{xXUH%+NjOv)(wD{Cd^x_tJZaf-%*rBTv}IpnbCxkTo3$6ZccG|6VUrLfxrT3Gc6GAStJ z9Ws|EvSDAnL=fbXQ!7xu%|^|Tcp#4#!3@ZT&y#0H=o-~PhLEVTA(m<1Yo#9O#9MB$ z`P_*LXJ3OZPNaf4z_b;Dvqd?apoU;_3(o28tmA)rr9({OBml@wN`$lNzF%$v?hBpI zo#@Ja?8RwwTH?-QXQY8Ta}FbSxs18P>#b}xULPa69Stc+7+VYYNUL@9elrB)3!M+R zysMe@ttKb%w{a+pBX=vJNs_y?;Bz3btI|0kww79twU){DncSfnvW*Ly%@;JE&lVad zR0`iLDsq-WET;|?lXY$Cmn&>OhXGl%mw@fYq0@+#M zpQdY02h3+ZM_#)Re5R;4 zk}b!T>u9GUe}&SXt8Kraxy*=fJt2UNV2}xX9f)1EMoqnDFyLEgF1J`6seR{$Wepl; zWJKE~wv=~Y`C^vT$4{5b__9}1^@WJ5G50e|q~UID;d2pcj~ENNR+#EifRhe!rce^wT6Ca-|Glr>?mYl>sUP}f1c zh(*slQb38;%>)qwbLmZFMq-Q6(IQ)iY1UHdtq1;AZfcr-`Hb~^Eha}VvgwH#>0oIk zYaDI28;=h7ry0*o(^|!%N`N#5<47Qo7v$`h%XH6Tb%Va1Rb z3U_KRvd4a})EM~;lI9ogTh$|uZcl_|haA!bs@mF1- zJQhxAHSEFIwv#}NBrsVTTRaD}7cd`B?KrdOI8pb`km7+xE}?d!0ovMk z7|Nb483&S|za)P!(5P@o% zX=ISIRYAHJq~}&%W?yu7I^hyqMR)0G>gXKSr)k-cB7OEVF1)EefB4+7*h-M&jh6!; zwJauFIFmpHEim(QZm@r0Kuc@ke=!P-^TJ7Y=x~J7h*!9SK{HX8bN zq|BHAtdCl7FhjghOn?8w%%`ni3ug;q`$GbpzPXaM=$z0?Y4!a49`VC`q{+eN8l11V zH1+^dhgi{gKih4@by2VfU_P~>pk*ye-8SnPRUqs(O)iY>V&`H2#gF6TN1i&%%@q7F zq#eP>K>1Dc8MBX7_A@C1Fds2zamW9s?aFfGN|NK1JT_ncB$9C1S3}^53NOiGpk+M?REdxMjkp72qp!9jJJe{#-z-`& z)*?hc1sitO+i}_`IBi?VPQ3W1sWajVuGoiXbj^TO%-rHk4AyZ^eBRE*?i&m|C6CwF z2@kmxSCs&8t&wqKZ=t={5AXYWq++2a4=afe?a(+o|v=htLGl5ba!lHcB8}xC9jnbF~0M6nh@|{#EKXv?F=GT|F;E zqIWfltOnh?IC*oZL48BW0h>2}J(6FOx;e`j-9XH6Q`yS$B3D36;ht*zhIZt%)xJcb zp7510yty#!h>!E|2?Av!Jn;+LnZ~p;^Qz|47No*#U_S%n1X}mZxZPzta@rQ;Wm3iQ zsu|a^x*P4YI{h9qZiJ@a=ZSe-;9=6VLDQ9xw5&1>;P8hGMU`peg3gyC^4#Yewgi8` zUErD|hCZ->o}`MKd+(**zZ{DLfcux!G(|XcpWPSn7nb_`!Prl_~BxPJx(urqOh)r)An z`ce%7sjUVx(rJjS-ekiMd^r^dz!#x?n@%`_Nj|c;bt>0*U<+WFJJ3!T+BM;hW>M1t z!P&Bc21)gQw5e?bn}F*`d;%Af`WQ3#80?mr;xvlTdqlMG?;fxtdzrK03pMw)a5=HD zMBb)+iFoVW4c-lC$5KaD?cUcB7zsLEyR<1j%hd&Yo*M&P9o&h_*Y1usBd;F9y-bNR$3kAh$sv}J z#@HAj31CNdl1sB_ov>+nw7^9@kWNOWq%}51vIE$m*R&!o3I+=?ejShpEp{v%WJ27S zItXA#9@C6z`qTidkxSs3Jfv>Xd!|4cY~cDh(_o`reHT`Shy%-xt$-CZ=;Ky+g}Pz? zKh6y4TDf^we4#iRR&CLmfnxM_ziq7@g7$HyurJIgWs+q{gsW&da1NjtQsAS?)`Fd| z`5H#hWMptf-cM{vlv=uv8=T&^d;{01DTpLZ7UKqH4kdYiJsxw7+{I%%J3D#kt#+~L z)s`w%1bQ`r zm7c{4cFjYkq}MIb0R=@a*GP4z1CR=u@q-55}PDvVwd;eU)%HYVI8L~xtl z1IKzUSA261*b(zD)QbzG36j|Al;&A+MW}g);j}{-4+Z$S(bWio-J84VYV1YRvZxZ) zZNo1)urn?*gebX(Le;?eO+p=cWE?new71d85zzXPM5SSzLKE}OPegjXtuQVQg-b`;RsA*RQW6~;L5G$%U5FcRQWvr#VQR8a;fVrIf7hP1G*BV(N1tMB8*lBW z(lw%YwaMOzt&#U}$JvsK@AA_ZWNhRe0NJ5RwQ9XjAG--r7o#YSU2XvqrR&@Y1OwTj zS%^}^JIQM>n2SDmbuezLI^na%MilI`onRSKhb|DrxqM=(2LgPMFudsORI_flrhgpD ziOUi^dgIDB`xM*;s}`L4H_LTn=HUB3>+2CJ3rHbCoO`>tHhjvsXS74dX-QHyiu>OG z`@Q359ti>~OllyTq}3;4#Sz_hv|M`xZ@h)}@zTcpR$q@eCvQSHRYsbeda$c}6K5_$ zbK1s$1z=k*pYLayUk(>2lB}~7O`2Nl8S)&ggCzBhG>!j5cY<;!Z)crm&%xbh0M+)H zPa!358Alr}fq?GJt||YE16YRr6DYh|B`{S*?zMn|^wZ7m&-E0*2 zf#P`@BLP=3Uba(*=*Uh03!&83yxZ!GR4TrM6yAzWaU<%6TL1ihs7ywDYH9H7)eL=} zLcK~V1_gCOvXLJ5`8w7KpCF|#@%d{W*6|@4p>TkTu?Rw<8`0{|Gc__HPAk#;-2epF z2EGFXx5wCQ0^t2tdMx;ap8`WGA;ahov#<=ON^4C#8cvvQzGJI66Yn0K~ z(%BZJs+Ph=9Qfy{T5s?l^{JAy;5oeuc;x00G1e@DH~PZ;JXP$SU`l5iVR+L^!e<@` zgKgzHL}X)7#m{rq-f@jE%}6sGyS6+#^NeX=Go^-d&pCdcD)$~W*J^`048FfXx}h)# z&ss-=kGkh-KhM>Bm$ItYdlyjK5f;c0EN+^`R`OWq#{E21@a@w)YM~fdU~6$(!Od_b zV0%;Wnu{%DN3y&?yfss~lHOB-5Xh-O7*Lin+J-y-d8l@oyt)ZTzAsNvg(0(6)c=kO z!TfGnv?FqTLIC?aP+8um&KvZn%CUH}IIo?&_vT=CU*^{%v~j_P4XG_!8~%PqEdgX9 z5O1xtk%s&m+mSF&tVIeN@CobHOp;?;i@`OdZ#eb8u$@@AnRU+6a7CHgBv6kzo0f*7 z28u0!a*!Z7Ym=*H zawDFy4n1=SoHuniBzS>YpoC+}qmNX;a7*5hbr-NB$q`c`f)zt60jbLY2g>Gqe>)hv&LC80+K5*Z(3Gtq!wn%>ED zqjUkl{+_}SXwi%7sChkZhTqInar{eQ_=XJ1u>F< zlyZg@VIKE1=%4lL5q(071WMB@Df-A_+H8f2TOcrTc3+s@zr7xd4+OY!FHN`X58Ia% z?h4MfvaTdMi5o!n?ft*b5Hx?o;3{4prZs086aJ}n`1LHjF|q49YDXTq$-7oiiW<#l zvDK>Jji~~f99cH+mNngg;n0l;ckWe1Y!VXGOSG+JJ5es_a!Eq=@mPJR zH$fBgW)@&>6T5qV5#GOiuJv-H{aIAFP8&&M9^A!NhwJpmK2UAlC;@-{@!G$C9NEs) zL!4{DSip{z3f<{1X(7cNTk9KbFkil$V2?TVJeF7V*G0=a;=uOC!ZBet!$uQK_|7jU zqCBnp$kIhVuDUN=)LA-wdRf6|*lkd>FRy1Fk+E03d9cD~T~c3~U_?OLQkS%LI>5fv z_a_`ww;Tzoqxs8-2C+u|D`-Zp6`B8#n~Mxh6pNeKAk3+XLK1A zhTd)uvXTDv-~a7z-#?#`XSbNVy{GEP-dO|`W?>^Vu32nq<@z8d=$KxfD2up9v6|q`atYlh)%2#t~PuaU<5CYs&!oR8N8OO_M#6ui2qt6aP`08 z$9=qg_K&YWzCTe0bc=8#e>d_z1>neF$KdR+PvUc9@#%xSen+@o>VKTr#~xFs;gyv> zBU54v)6)T4sugzg@v7A`8@Zad{-TmP=x|>m3k=@7i5nXh>+$tF0*R8Y2s?@Ign0tp zGy`QHWpURr9)xSJvo(J{L4a>D6~dq4Y76XAWac_rWbIJ)S`t0znE4yi6HMtIlR#O? zm8A@-)cx%__bwSUAmvv7OniT1dLn7_{?=*q=jD;8&Y+2|S|n8!AR2W&_Am42$BDfQ z5XE^FCFW>hW05Qdp1q%G)ym|9ewVe8@<`mnNqMD;{%#8E2m&Q()R3Lwb86 zVfq%5@7FZ&S86bt_-qtg1T@}A%hF@(bmDk>GHBM3R)Gsv7RVsmZ9GAj2>^= zf1Uv3GY&)IN*v7x7l1(FLmSkztorB7p9|25O>3HGve@BBpaxhVYRP-Hp5586{) z++>`P23{Buz2y{>=Y@cXGekG7Xt3q=jxLQ8w|}H^6~-AS&s2e8@!HXq)MhE|!85?+ zbDx>PeordH$|9-hh$D3JF=ZMi@qpnJk{d|R6qVd>+=R?utNNs`rZTd@vn+pe_43eo zvvJRih`JZ!ke1R|CtFXgF6kBaa!5yfo6P(x4&Md#U{q`t*i)ST2HYFn z*zK<;_RaE0)#r1<&rY}EjaXqNi-LXU_Sh=@JhDo)VUYsEBu$XD3Y$d!GQhLKnT-CJ z0et)ML{h-Ld%Idn@Cd0G!f&Z8E0j z9Rp?kIj-?b#hvgcm8Qb0F!XJ-4r8R#M;}9K&XMbbQ7#vCdpU8uTZG)6+FBbXlf7Sw zKk{(vUM~2c%h7e?-kwNJzJ(M+=H#_mnU>G{kig#NE@dF}cd^ID`(@4(r>Xm3P?x$E z@M{4e&v`WPxJ)@d=sb3TdL}>U7Lt1H@MvqLx+YIg1(u*a!!#`)E_U;Ba^irSiRkdC zevK3r)GdywrI&!OKuA5dOrI~D4}kJ;$*=|4#7b6HBuKeP4H9bN_T8Av&zH|5sEj&e zw+gKwJaV2h23RRJ7|s#K*TZM6V#yv27gf_V*0I-rORwy-5c)glS@IT9A`}FIk8mfSAObR{99N3HMi6rFDUt32DZ+zcco(G4_ao1!v1gxPNTYZ*r8y)Mu$Ps! z#QgYGzCJUf;GR6?8f_8xIg%5C>{VTB;XJ{9PP>6L#)Fg=l%bXne;(59JILgz`JQOsavQz@~uAx-u&C*pOZXxUgm+@GY_ism3IZicq*zEvYV5SCY znZ$=l`wWQ(y@h@Sc}@_5FeN73`do0bn)d|cq9AsrB}aX{NZ($cm=w1aoom9;3#@aS z?SE;z{+&BdoOw%t!I;b8m)mIHCfOvLZSVe@IZ3|#@8MM>s;W)TIh8Ch_6*o#Cr4iv zJoSXg@En_9(v9?6$fBlrGI&mQU=#;PQQZiZrIzQs0-J82-n1sC`nfu6!=EU1w6!Zj zyT|g-Uj1vGexnWLeCRYy1;GSh3D`lz%jjdY&08MPhmjD!jJmN>8_QGKAs>}}MJpki z3;hYf-NQO?;LrcuSg0cYTAQT-`L^q3gFphzo8SiH0O&sME5#^ay@*Ew=h-;@fN>lh z40OlK)p{ti`1t8cu0v>QW8_sc2yejY2g6&_DGU+vLoMU$&hSnUUy^dw$RY8v0MEe9 zm-QX2u`%pnM#jsgJ5N4CK;KfA(N~PaHuCOpq&Y3sz@wh;Q@(ur@EbM7@35(Hk^)ty z%C?0x2ltK+Hl>_O{T!dDRd?g|q6UQ>zI?Y33gW`_DmZy1uVRO{df0S@A9zu#HKi4U zZ7N?LOuY zFVFZYXlzI?#mn=pA#J)*2DSy>v_o1&7bT~&cmP811`<`GJmV)Cb>;G@VyQxjGqGlF z)eVcZb@%8TDRHa>xv_f=hti^q=)KG}GTV%WB`Z7C_R#eI%cgZ>`yxkE8I>d&)`p|0 zKv_f=+d{Cbr+VJE8!I)311;q^T0l&fRsbeAXXxiotL2G4$NWH>CANZ`41nBo%lntY9ER^v6skRi` zjr)JY~D)O0kHgL6;MquGV-#Jc4gm5OHaR6Vr0tLJ_lJ zYI!tCyftfwrcPLO#i$xf0b?&CB%??q2;j(7!Eg{=&5vbve#NReQ%JcK)<+=~YF(i; z?K@4*v>MMW3(kJWD4-Q}3;4HI=02aER_53_)&U=b)t#jZYYVcl#|{#+<8te8`{pUW z9<&c$)#smgoZScf2fUO*ngUPirLVlh1ojJJ57V`NnRRCi71rSBg<5Uy-1-M3}Mn9maw;!KP-Gn`u52|KJebSuFU|ntQr#5QhSOl?`0yy&=anZ>%W5Ij(yVmQX2l1~B8Y_GyK|w` zzpr5SoXQXYVn8beP3HK$pzMs3ShJ?XrQY{H{(a+ZErA`^EG$kUpBNK_t6EwvEIU2m z(D~M{T&NE)1|*t6XV=O}rqQeN?Dc{C_*e|ovjn!ItT40;Cb8uYqSmFL4g&8EL z%Hc)phgmmPYYzZp;N&8d-0QFeAuBrIdkb?sjG1|vwf~-PHx_GC(vd<{i$o_UYbjf) ziDPC&!}A5v%c>h|H4RCRou7_aN|m;TzoN}dz2)L`6Uq3#$} zIIYqGYjk3W9O;)CRd?{NtsY7S{7%_ri=fV_a9($etEB;k*y7yHOw+XIhj9OT$EaG6 znO9Pf2rq4hFk8$9=8AJi2K#K(-`}o?He_UH?{l&7x0S#G8KA&gccL!n^To^uoV*)G zl{r%fBkTbw#y9{kdu*XCPCGB=6tu1u$6WLBs9R z_JQTt$SDpMg4^u)79eH-llt(JqRi)i-MN;@f!>{vXLf3g411*El^5JI_;Wn?&n2UL z%&DCfF&=C?#5UU6aNA!6ojzE3oph$LC663bm*<=qkQ(JE^&syZOWfFUsfb&w8SvOW`!M@u;8}GT{3;tO3-}$_0tJp0PR`66A7)nkH0pN-{k@}LeMr=i=TfkST^rnc)a_-!_4Ode1*3jv zX5%|5o^#9uD=TbgnQ`a{-x7N2IqOlI_uJd28@L>x&O}&YDFnS+L8fLZtHwnYtdmiH z-gw+fsV3xKcZ90mfq*kY#G0Bw+B>rHaiwl-pQq+~g`&}cQwCs)G<+Tq6TF?U0e$L* zqc15f?`5lvDV1YSs$s=!;OD6wg6Ee{H`r$eKL-`=R8!3yhZ_=%T=uG@Z-)lEx3^Ef zGsgJr<{a?J4eON^L^(~cytR;Tgvua?C^bLb(N$y(Hj8vz>I|9{gn@+}G4tB296jm= zKv(C6#QxL11yBL-pL^|i&mm4;XVWU<=^gW9!XDiQEtXUgH4J7$l3*h6o zeMS7edfqsEqA_d3He%hx)JOJKu(!`{zWetZF-m5#9c|0n3CULg7WQ(EWWX<%9bS!o zXAI=IXEVBo<-$UkP8~`&PX=Dqz#i72j}#`|=qTU3t;6B(z2sg7TwP_Gw1)rExerlu zU#T(yD7P9j^2!{cQxDsE8acGJONa-_$Nkrp#{16Dh$LqrO#vU?Y$Mw_+T^3(NjUJ! zl?ew~1AFV1an!YJt$W431r~y=m+=f(@WCG+(+#fIY_YDfC-1Fup02Jm@k8xWLLY}- zgZ-_~8;!sLu)I~B0r0MQTsFkgj_T9|I92xl)vxFqrKETBv36svW>-q6B&q>0nnwinDpC-;WUa%L5nA>2 zidkTvWl2P^qe8Ke(SV@zLWQE%eX4PFc_gU?JYbH~XTUl*`?4}O~PL#ysA z7C?H7vMJ{o5T05A2xgI`msysMXRz?v!%OSs-dgElQvRaHMip(6Kc_NW9tX+OpN3sp zvYA&~k>eRU#TDAd|1+eN-hllM#UT?lbinJbcIY-GT0LbaB>}fCO5wHD;KO4_v$>0ldSi-&70onrwqefI08IQhZ4nP{{)UtE}=|@$z%Eu8ahs zdgXBZNXMY~(k@v&th`oDS)MP`zQg11pe@iGi_)ajW)jz$NI|tBm{tU^@E)tK_!ckK zr7T4Dl6RnPY;bnm3~fygqE$c4x)MkcrwTapM2;Snoo+xmla~-xOFles{amdZzGcaP z*PA0zk1T!ej6^tUn?X#|ak=R8|Glw|tuz*_BeWaX1^E5s?-vkreg~-OU*GOP`50}< zvdkPkf!>jxsR9bN(R9djWe2Ug183}|+fM8rQpkOc5f&0OtNju453lhs>&q3Z6jX4| zh3~Vo4I&EQgzN}X4PtGl>#VO|E@8jgWZ?s_!#vs8B{75P?+&2j(+({0?b2d_x)J~y zNTDIB5B#EX+&QP5iJYu@-AG=st6ES_rZ;4q)TKGjCCG+$4?u)XnUJ*?bEFGuS`m6taWvxn_05gH@lqt-TJhPs@bFx9fik&I-m9;|V>D)ra zMlKJV@Mbm}d=xk9CuI8J&ZTl5K+3V^j~jU%wdio5cf`;fDtO`fs`O5JMx?~<;mZwb z4@g?r*&HYtOlE(8%AfoESNiixeYj(zfYx_wIi>>gtTois<^cbRdLTSM?7Hy=hDcds zS1RoAVYeej)io!xWGwyA!2jCDE4#QOkwZ!`Q}Yglx|alu<9sCO2VvzOR^7m)9*2zx zMhK$1fw20HF>)fs3@)}0Z8k5tgByH@MVP^xH~<5OQ4}gFvUD{Jg#Pzfb)|lNg<3aw zK2}E((zLcJuXo?AQ|2K-f8JMSF%_yocp!s@S-g+j8qH*3y{sR^<;K@b<8wmaBGR#c zg1xK=T!>>96CZu0meT;c{`p2-!_-A>m?GO1dB&y{Yb#4CrMMiD&fC|wEAn#HgdG_c zf>h~DKP(2DGC1Wv9i}e;B405o!J9JRFqjS{n~F4xoEh0Rs82m~-}OsIl_5EYHM_d! zs5`bLrKb@oo$c*;rC^lZK*wWFOI#M0o?>aS?}aEDswY;CpLXwtP1+iA%|-x-#8`l$ zDNWr0Hr8Q>LMOQS4V$8jI;BlBt)meZ$AB|Uo#ph`5egzhTR(WFv4!-k1P?)pC z*gPv|4INCnqOk1A@plLH3mX7o4=_G_->b$gB|m4EKW>%Dh?kv_-PWc?Q>hV=AqSg* zGl#rA17d2=UNS4!GTA(4YEc$q!eHY~VAq|_eH2x_0`N+h4B&MGtRNE;D_GzlP)kV< zk_JDy!?;0eBy)fzkW<91{_U!Q~9QoFLyrK&4j*d_J7sy@XBa1Mxv zlrdo7^$J0iQ{jCiyFhpN+gjULLd)VH|`{k`O0DH-Nd|* zi;QTRG$nd!9LgrXpRXIXf*p*ML5|}+AZWxESlSr={KyCXspEBp+~nva$AE@wC&n z0A4_$zs_2snD8(m;p@1R1=Vt>z!kQBC!Iq?X{9|om1vKCdYZGBJFw=O0)o?9>6vIn zGNLAn!Z`4G_5-Q-35LL?zGiJ6910@30oy8i{YL0PN0zV1E zn&A-ZYyw`r^vJ-1tzLmeQ+-JTlP)a#bYGgfYse<7^uBU z29vI^q61u_DAhwV4Pd%LYPiFEro{{s1x8a@2c#k^2rCZP;r;97;~iPna)(XOT8Wb7 z)*^X&M1y;W8SRI6)ktr+18Yuj1c}}?g|m2M;^KcW6%hj5heXo-as2HLtTADiU^1IW zU@aA%BPFYS?p?rZ4z2A!uMam4Rx$SoA8&@DrY5PDN3pR_>SPDyGviI?)0KCMS$5ld zMY&!S>(n+HuLX{ZkG0H0_2sp+g7n4kC+KTCwEqcMm!5SpNPLY+ zJX%L|sm&9HYgrbGDRqaE?61E(vfytVulV(4*RgAsKBHKm$1n^vV{LqhnSRH0W5Ikn zuO0o7Mi!pEbr8WwYIE@Dxu1KU*Nwb$@Js0q?}N)H(SX%pxl)uv!Yk%2hw_gZ?}m49 zZAkv8K*<%@=1L%hhV$0E~2B+|C!=T5c**s2fzhhFlWXNX*eISpf(Xd##f^RLcd5S>99E=+@kUG8< z{HAb(Pd&Q2z)Nb6PWOi@tiW`|GFYa(>mHz^lvpB9EZTsNM@y`EXcYz%eb^}}zl=-gPLhbtsUF4+zNVVrv7p$fV(>DuV8iP zZIe}(K3a&Gspj+Gtl$5>Z$wMIZYLEuLyyEUZfik>B`E2z^M@`tkAYrSo)j5`3PN>M zD10@xnsEAO6R_t(eCjC=(R1ZNaf}v^DqhMQ+Y4owiV|HOcBlC0Ct%$OEH_i8oN`pe zSRdZ7ixB*UY1h^d6-AE>yF07J1!SS*$YA4Pg;$Q@4z%&-7-9Squx_jtEstKTU{?kD zVp`1lvjheY*^_Zkf9fV)X=7qhQ_fkEjASETV0$z344OPo?N48o{x5f=e(oA0Z?hH6 z0#jeL43Fx8NmQTv#cBH^fYB8aQLvLSR+hKzNE@^GAvv>Wn2Lk#`ts-RSKgm^Cz<#p zdWp>h7P0UrvPIg)@_eMrcTg>bV@tEaLX76|Y98^nk@w_P^PwK)u~t|5l6MdY4Hs0c z!%bJ)wb0&L5*EwWu}=CDtOdRtVO(x-MH-!10VtXRoDeTcZ#!}yTbZM<>lNh3x%rIN+q9vgX@(CT@6 z%+5K?!F`2wB?6u#`x3BZo0LXfT4TP65)@-!his|WZM?Bu%3GJiboGSuCEn}q;Pexo zu_Qk=27iThW4T}yW+j?Yg}ibsmhtMkqhC}%^>cpU`sa=1YN|ZAuSo-9Y{1~RN*z2^ zBMxvHNd16y#ni{fQR_u2;~M4+W~xP_geHN}=L4=d^;edwLaJgX+sr9NN0ZuvO%Hs& zW$ptRe1&yqx`}RPsa00IVu&kcSbGAwhz|YhVCrAl^9@_CzKSho0v}w7NG6YHo;uUS zzxxRtd&}5!PdMk@tw&uE#Z!SaPcW!EvmR#od}Gh)1~9YKOKA=6sPd%F(T={v=o(I* z^tle&FZ0S|&b7hc^P`@eb{c(V!ND5bh=!dM_5;+FdcP5AG?4k&yDU)Fjp~Xa8r4QL zo;;xX<<9UUY1p->?t#0RIQ`jRxw@^|WmO%|bs13I8KBdm@?JGwp0<&-7@ZMCZ84WA zIu9LC-RU?xyp#+%28!xqXCYiHwa28Wt(p!qndaBu@|_Wd(|dN=6cZt&R~PBft$^A1 z)R1YvTuS??lgr=~@%d$AZ0DNVF13RXsvaEmKR({*_S^izCtZ=9wAgI-pY7`YjamDCMl72UK7bj6{Q*2nSk4oop=+DnByGXno@k@dd8>SUHV z=l^|h{{Gwkt?2*%FB&te#$@o;InQZ2MoLj>?;z!BPm1^c^WXo2+kbuf?~m`Ga7R>} zo6+JS%UexUr*%_MU0ij7YKnbf6RB^K>hZP6uKj<-r!>kIU7DH@MF8B zRAX9B3?+SX)xW`d40m}V$*5)6=0Q2f=tJ|Ky5uJU?=M*I=(l!+l`8yw zjDUeChB|5ZI+5j)WPuatkD1aNtQ(8ft6{y;7(H`d+pEB_;BNv^6*IBVsBWwkOPGTy z?nN{nl_=hrBMI2SOr9jh{DtbqVvR|rO78e<_q!}|3dY4=A|AlqPU z)tw73j;58)nQKdP%(0&c^lzx%Gj8R4uBc}|C4Xd{UtB4bu4Z zKQ}mEM8vl5!c-}XRGIGZ&D8`u`J@!!JE|K;eKk$kESwW!$h;JlQqo{^kr#s@*}|Be`i4?0tUH za_SA&XZyzu8`_u4S`b-n<~-s(3nz>gSRc!J(hL7PuJ*oR&S&Z6VGxGaVtos4rQ|5i zX}c)p`eZJ}8?ZYYNp5725S)fZAsPYUUbvBiU{LwT(StW!cQ&#_Agb09^|I6w2w$UU zg{9VehebW%`uOV&Q3&ed6(TjJjVk%hiHNo<$}9dT`=*IQdZo=WM%b{Pt*^nZrCic=t2y?vs*Lq1Y4D1 z^(Rlm!7s-he7Qp1Gi$5f;cix~JaZAs8)gE+0`&c~RLgJJ1yBSP?HSZG5 z=LK#t(vIho23g-xeSXLL)!8m2wi3lIqiTe(Kux3MA159PY&;pU^@_^z>ps6@=KB$s zV53UvC1Tsr+#T*(7yg@qOQ27>?0&JF&W=b zT{`ceSWm65e_jQV` zJ#eKP>(y$B`J2n45kbzNHojUXTSFx2eTp}H81EUd{1ewOEgcRm7IF3-WqBzYAkOFy zu15#`VZCQ&_c>%FL!krPnA&%Nwg+bi$)ag7lJ+R>KfvwW;8?0F>NWxu7}hHM$O8aj zZb~tq>m?p9o=pvSMfLH90!vmk8JI$}I`m=@dWQmvl-?{dP6q4ajWZ?PTjt2_D%#6}m0E6E zMh?ld=4tmn&KpN63i!eNTA5jc?&U3uJX`9p68lLzx^JL9fBteO`d*>sqkX3Kh-*h! zi^7^(Ov)HfIz0V_>jtc@i`ZKvF;;-f2}C(sJ7*|EIP8;U|M=xn=(f+*i~weAjVOG_ zcb4Y487zzY@x0%$46|yC-y5mNoS_*hmm6+|a36cjjQR;wH^?81fQJn+b@PdX2LgLQ?N1yX@C8sXxT5!s1uC>6RL*p;! zn7B7GRP>X^kl#_=I955@>}D%TqWN1iBSmbwv^42N6n+-p#dGs$*Kx(wU-5iJr{pFISY8x@1qGB|rmrf??lN-VMS|ln>ggF!3{oQAyi4DKVE~fKHfo~ zx{>FH6~X!GI9fZw#YELY2{I33+D*oZ_W{-oscK_Dr#6KeT(zZD76fZ17%`}5u+uZD zE6KLlvOJ+2B%;YB=`NAjFe=3yBze-F^$pfLnn|CnJGcw2vSak#ZZipiLClhx&K~)H zXH+-Vs=P*L!Pp&~I19|g);3KOrO^3jR5#uO1U?#8l}^L9R>*_*y)Ory0+^o*E}y0Gt9E0_GG^?P7pG9L<>e5T?0HwziQlPr= zuxj24OnYx->WqehFrdRq%bZ{&o(wT~Lv@4sEg799nk7A=>@W|H6r)sdw6Kjo;RtU; zW~kdPuv8ngbht>h7?9x`PAH0okEp)Cl87$`HUh&KiEI`ALJyH&8d+ zb6+u=qXC**-BaBU6i7CAljBvXOvh9A@vwF%&NFbbum7{8)b)vOg^d(x-n4b=^E z1v1JRi(t*>P}XMI($_pXfwwzNC83Z@Tj{6_KBWS4KV9Uqay-g zt)5aVt1>f_*(zbjQgjX4f7y5GquPe#M0*})A0Grjfa5loONG!Y^-otV648a;a8b%&}0AXmm7Ie zH|$ZxPkM}zvqkEacXAL^=O6 z>&n~ZY}H!;W)LvNW=dIl_Bmr2ez(N`AZXl^GzWut}8_zy{*wY-U=k=3~wK zpV!L65<$)KRVJTMc-}3gkOahHZttga|NP}na?Lk9sj!17tZJ)sSZ!P#L_^!LX6^Y3 zcu>uQx+MjNX~p7QHM+!vOlI?XDP7qU7BiTIjd5%;AGa7 zwxOLl{&gq}%MAp_zz;=dE@9d}cKpAX-5~Y5N-814Q;j|%^_TDgg{y0TWgl3n8$HKm z#RR%MHV6eE`(Cy{pK~z2h`lGW@{dthrdxEMYp0%~FZ^!A@{nEFPKD3C$LfKXeT6)y z(55Z8Z{J{DeT0E^vOpym!Cy|{=H*v3L(WDeqJ;o|uyuPeG=@i=FZezchC8Bl-3|OE2mA1d(a2`j*; z8&>(+6me)HRL*P&o~G6%0vxDT!UvY>SCl!-~fofP!Ez~rO<%jMUc-syz^*Hs z2>24WV$GJC2_QRMx&toHq!P=~xqq`8-hHbzn@+%@? zsunhLz`1YPgr&UzFyPa4dgX;#HxB%qrKMH2HrF*$1%(c{nUe5RNylct?Em>X%e{u5gul96<}NSrrAanj$7-dsTNL2=<=RW{ZF&5Bp}z=ot>5)9v(PUv6nG(yuDSCa6VXLG1MnGTMpp>?f+J+%XN< zPX;J!n}f40s4+W-*J8TU%JFo@VASiEC#hHJBUx;*SH~Fx-571894Jbqps+Z9AGGYs zWakMQhI`54NOpM4reHu4s!el!M=$&Tn|9}<6_6lRT*4|GEE{TOE3!%(v$gi2Mf-MV zKSz5!LUpW=6ut5Qdu+;QWSNRca*ynU(gAywFe6p2xi7IS?8JH(;}kHI%H(n#9Vc_dP|9T_D)W z*DrT0n?%yd5j8_r@S_f-p&`L<%<1`f(w?}Rmm>NsHo>t2K=qERlEm%2`T%i?z#->8 z?n@E9WO&q_ImtCQ(Wn3z3t>HWX-kiV`{VmPyK+dp0jxI-HVVK`t0gJyJr-F1@$~tQ zU2tO7*DO`q9=j-rlC8F8HTIIm(__#dU*7J7%sz@&bGQf3y=x84EiQ|WeVj)i3$w1Q zR;JKYH>?#Lmgleygd8z_lVFzP{0X*_-ocBjb_1t$#O{(y9PA5`83Gn9>am0bcHKE$ z@C+$y1+>OlD!rD4FW?@w3Y0yM_!@RST^cf!7<6U@5VO=er8WvjjVD0G<4YqOH(zhe z2$j9yRBJ@)bjHd&R#5G-<4eD|)Qf{d(nrRtDdJYKcrxa1LJ_@LNENf%@%o ztjrs4H`c05s~Zk~1O)DwQ}jLS$U356*^ZU-FZz8XQD9A$*#Y~uShVTm#ai7bCsE0gqn;>s}?Ba zPOI+|tmljN>kYetb%`Yf3RY%He|QH42Xi#)XdfkAzFp*KGD-h?i#eLr%4q^CO$C!o zMbokP?At|>R-z~z)dH$fO+DvaQ-{yUnVl~Cbol??&tGoj^Ifn?+2JQDFiv2Lpe`xe ztN>J;!ZxkCkvj*PD4f0rvbd8NJ_iKz>N$l8Xz_u$8S4(XZy~`~05|h`X5hmau#b5w zi0ur=Hdun_8&fL4r+2L^&fBT6`z_AK_blAeR9udeV#f44jR%=Zp9qo6A#wzYfTL~j z?j&mA=qiX-??~ZT+_nr33jp6!8}2O1QI6Kp{f>_Oe{Udn*2@g>TGe7IK{j~gqPV4Z zYTd?j`vD^46}u3eL4t;dE>20VwpCW>IQu!o^VlZ7&D_~XPG?GKQ~=jnE3AsuBPE2E z1BrcLSl}JI`gY5dkqU)Va2T>I(s9lJQlqm2f~0Jag?Rm}-;J1Z|>G;FCa%93(O1a|i$mR-t~Kk_A6amHH9%;LbOCUWr3A&|!* zPCqckox!l+WWgw?XMImrTP+ym(N>QfO!6_fbH%hsWRYsXpF1Z4cTPvg!bNJL#pBz@ zx`qp;vKLRk@FY^?zs)! zKspNlpUuH|0cZHs47v;4O@*JcW$Tt{p~G=lDLCz+V*3hyWUaTNCQFX(R;=f_V^?0d zm=PYA1L;Z_MXTXQY{j(DkK=;&ZK+T0#+ku50l9PY6PtUx^#C5IKLqC$3wE#pV^}UB6#(14);fB!w_7jZ zbo&z9YTYX?rbPfp(_x59p88Q2;_ccKI2Cn91D^vs=|fj2y=01=PC%`B?00{=l_uMO z*HdOi!~_qfG-h~cOL6?>2eh?m*WWj;B)CUOJ_0C-)iugaV@t)Cs35(LO_6W69-Dm= zBJP;HNSDMm#K?Mm77i<}z{#%X&+Cidc!B^76A(!&uqqAHf(w8EpgZaEe(X|t7$%AAVqlEV?cTtuXh%V<4dv@Fx=9ZzqTD*o2YAskw?V;FzkvR z-bSDdEPCzcAmyzWN@Z?gkN!LkwtIWouP?t}X$Y3Z!5Cq2!a|zT3OKI>5XxBqHqHx1 z!>)8-EGF;(!)DUJL5a?u*M;Aa7U9T_;d`tbO-CGY#AjU!K~iKxdLAI)E{K(W)?R zXSA_MTAYS9*W49YutZg5z^q!T9ZTci=AGFvh(g&~DB2tK)Qp2hh9>u+5jWv%*7MZg z|L2Crb=fopwjm&{2#TBO(X>xXhB$S;j40Es!t0}edYQXk@-R6?yTHwfP{)$=>}(^k#)Jg40v_|`=k#V z7w@cG6x;$Y3k)(K78H1Y=fw?k4r;1=(6~D*2lzUt1ud-yDsV)PK{h8c8{3jjj}bI3 zU0OE-pIiX|d*z*53w3V=jsLA|5dfIUh}LsTwQCCxH7IzIV<>=W zcZQHy0^HDDa6>&6I1ga%WHpu%7lQintUbNjA6KeiasG=qM^U!qOnl~!qXxq`r{P$g z`>-orN%yl;OJ*1$KJvt%b@@>n0!mlrkuN>HuHS(hFU8Q5L!KKUA(e$oSv}DCX5sj$ zc#c#w4wl`)+uf$P0cJ0sqmNM&o$zoMl{$`tVrkr`dn;#aTKDETN5kQZKyOj8(_V{? zW267WxN9p1=Ic)Jf?Rf|Abja<7hF=ruPNgLcj5P!eMOE_v5As!;+8ry?4(o^d+a-V zJih+Iuupdk1In&FfI3<4uxrjzD8jcW5(=_#JZrDF^8c1`&~g|h00pI(N)<1-1yWf` zf1IB8_WC^LjRNe+sUUkrZ>3~VCKC?CH}=nhOWU?H_qExoTesHEpoGEFCM@ zLDd`L=aTFmXFIkH{s2U`faH+eHaLq~cB%>B*ult|%V-%$^1OIIjJpFReTCgNm~nG8 zABKpUqxTtgga6HAmJi0od}rO7)eM{~!@vw2v?{EcIX?kW-tW% zQ3U{R#HyzMN87dS$YCSbUn;VAeM{n104KYW;am32U=>-)7^BP1$b$3tIn|cDGQ86q zG(f-)a;rykz)RIRWU)?+SotgiOYJ#9_x;cl4aTMV<1V4;@AtfqV@OB^hFnnU%xfPt z?jPPAf)-6pLl+DjlwJto;yIP5c>fyP+RR_J<{@Z0WJUFdj&5aEpr<6xDn0t`1-C6H z0<=@3#yxn8T*b;~!Dq%GY3f~tQ_o4aw|2e@&O96HMmC^7ho%8ZKoikz_-hj^x4vyx z^YPbr52x<<-NC4dw~Qx-9vEq0D?q!uV^*(yOC`tS|K1;ZeoyQ)*KO*MFDcaNPkjT= zIJ2y+S^=4SccuNe`5NL%8Wn2+QQr(_(+@G4u*g?A$N)vh0Uz|wf7_l?6 zV96EQUlts?BJ*_=!LyZF+cNxp9w~Q7cU_XwK5HJjBg>S%jcAC~%?4L$J-g}BYQY-M zXIu{JnOpvZ1TGMroL5hC>QwiQ^Fz`K^1X+3YC~#XK|^j7lUs@<31u#ULZ&hM_TjHz zz@E5M%%H2(yb_{;Pgq6T>?O`5Rc7mTU!jLMaj4lAr1%IE2@+F^EttV75LEkOj}`lK zcf^S!z{1pKa}^E)i+* zJpfETRN)*|qHJvVrRe&&hoZa@WBg@$EshRsdn_bAnww zL+k?Ak!!G6z#EVed#eRIlRdWNb^kcaNBV>v-=n0GtjB9}X9@><^K;A$r{WL#|Ce#~v)YZ7usR^8s1T8`~mxcZUf zx*Q<18J`qIdTc93@!aV5=zAxM-{R_treyw*JXzG>&!n*v;{=nah_hv8e`CG__S%LX z(L;kGNDUFE(1X^cZ5A`<_(+#qFFD6G=aI*uW#y(I`G)m0n|X)F$^nYVu+a9ENw4kh z?GY25zFP4j`jvP=(MF54bf(NzD37&Gk*^KP_QZ%Kj#P_XqARi`Ru+^9Lyrj9hK21R z1%SQ(za#Iq3%fVXs!%`~>!0!8^tX;<^xU@XkUsjM=8*v#)HNxE;3CbSZacIjmRlcw zCbq5lc~~Eh_^X23fU|}MRtS2ST1b$#B1q*^!nXP9M`*}5M?9^>Uy>LV?xlhcViE&^ zirLIGb=%-F9wn+2R-AP7Gb-+NNeiS*qSIW98haRV^U|uQ`4$x--2+ zTC41}vfQydrdtSV_TE>eg%!8`=e_`UV(1`x8`a=w#NFSzaGm~=yJ>|;d5#BaI@XWg z257dF)fA$$%rR2NP~>TrtUSjDH6Cipl9n)0mH?T_oc)Q;^wUM4v#k7#&b9}`oWH@h z01kxwZgH0B!n3-md$R%dv1=J{79GSAw-_T>h})so33Az1i7}-_W$RG#<}A91gg^YL zdH0IO-wyId-G=lZ%JTrJtETq|8m|KU@&AfWc6d~In zSr!8Dl4L#g5OPaf$APoxN<-k#*2#T0K$XagxZOw+6s3)}L-#wlBjE%ps-{aT0Ux?x zB~(`Jd04dwb^7dyJ(Iu~qm~pBJ~gl_!dH&fs#&F%aQev1XA-46@!Bv5ve%blZ0Mn0pn{R354DLJ09UY#6sR zL!o88rn&8?^mzC7{V#_+9C~n@y%_M%W1kLZz@VAN_z`?_CsFm?<0)iV=57q#t3URz z#uQ?snTOvO*Szg4IX;YIgC?fX&R*V#xkC~KNm|6csacu4eVYD{U&bNFJ19UyKm%XX zn!Uq7%r$y_bQ?7H{hsdDukYg_hnyJPP|J^MB!I@w*6yVr++xu3n& zV2ULrQfJMUz|aer2$YuWZt(8MEiT`yOkL_{$r{y75z-hjgb2C_-eZ3_f%*LV{w?2d zVY2&0gETW+CpOGUg}SUMHq`}L*JiuYhxdn<-+lAb+h1;Jb+rW*Q?72-BA6~M*8P^r z&oN}WW!IHr*bAteZpOEmF6Ka5K%*Nk@&gwv60YFV%v$Qxf$|fk8!k!qlV_o04^1pp zZaD|HtgkaJZ&Dw}63_zjbs7$+^N zpvE++H&2$n!m5Qv8X4cd78Wm<^vw;GVp~km)|jVI%**{SE{$ht)w}~;>+?!O`p=k7 z3{=hBb*6%}F>SQc%n}W5$-5U=*lfI;`eE!bNuV`X&$C}FQ^$(EAU0D|*V~)P1Ev!L z#YnQiz>*_Z&e~fI-776vC?Ka@2X&LD`94C8=I=baW@4H60m*E!_(?T>?#i*!1=Ibz zTdc#kpfbq!3IeLD0THwZcfdlr_HA` z{%?`|?U7;1n)<>Y5sh?uy=Ih9`ivEED_*e=xL|T)mII)AEV8PJN6pzIMk)}4C#}WJ zCCnz2-{#x2MOErlueTCNPk*)E8p3FI7unVP*~OL|{PcJLl^=z(Mw1w*VX5Yaxd{@K#h{&acH=cIfF71VCm6-x{SaB`S5K@qY9jac)W zh2>P?2rS@%(o`&O3y@h@0UdMk#MyO*m{B8K3?k_VO9 zOrg_-Gutp*$&6^Vtj89Uv*cdFTrw2P|LKE*PlVwJsJ4V!Vz0F)jWxOR7ccki%qw1d z)BTw;oIy1^Rbohn8A)5R3D%H|vNU(idq^&! zf6|6C$tWqueYc;(PAe-BH?F!8H*nCruoXk8 zab4*h^BL3)U3#~mR<2pc@^@b=`&0iSWsh|MNFHNUBB8JG|uGR3A%8AG>8%}170a<|uDwYhPx zOn<3bA-1&46vmdbuU}7K3hpYbZpH~pg(>6YRnTgIz~HHGR@BcYPV~sTz^4VCUc8}6 zZw22PUYK3;q_#Qh_<5WVffL+`4a5$yvf2u64~<~HELj9$-VM_&)t=8d>hLE9UYrH~ z#31ZmPNtGs%vP+M)7YO+gaReYEoJO}ZDc9LJdjyvj=7rEo&Njz?TKNckT_H89CMcv z9h=>(*J;563~1f)=6=aTzsUfvu-U3%pa#BY$^pP0JUyu1lG;zC+k z6{*HcJYx{)(9XMIdUJvo)J0)Ru@Namjhwj^b#&Pftgf`^`4pUvL;@{tgQ%0S$*_E~ zvD@FK&{hrCUJ!qZPA8TVcZ8#X4VFqvH1YY2AnOWsm1J%7-p}_ZhH063T}xV|)Xk7z zdX-XC+*+KkSPp&)m`4s=W~flX1A-;{V{0$2<~BOl<_`onkUpL`*OxACeKKrRf5KTL z>6+SlWD&d8XYUiHBc~b=>8rVkxInqoSapn)#PE#{p|u;QBez#xkY71yV;*xzLj>)9 zudJE3rbu|>BrYZ<0bZEQsVE=+@-W^%$vx4rr zw-shCl_&v2gm5}UMylb8dH82g|2VfjWhi+d8AU1g7iw!-KWKMVysvf7aEA17Yigw)4LxQO{U7-HbE5g_x8}u?Ii5Q z7A;B+$jt=31qR_QuU6(Oj(itf^03B<8Dv6a68BwMNn;;=Qnn&TH`58JY-Vsgo+t(g zwbh|Dup1K)c>`W=SvF;4mw~(6=FyTmYscBh^C~F)9cQW^xt8C}=<|G+K&*+MO%jA6ZkC z@Qa}rz>VYT1(BS*J%B3sl^4HkF`Zdc7>;TQf3B3gTR}vSNDWjptdL}L-}mtD#F}a~ zKpETcL=4^DA`OiaSEbIgUFpX63Db#j5-ojs-}mL@WiS}R0wb>2dEP8-!$ChhemGK9 zS+ZNvhDfV}W;sFjlj@GmsP0y{OUg$;5i)P@8n`pm&D0{4riiGleS4B$K>5u2|}!{^5xHpEc$;G{4#XqA|UGg>;0O*q?!y4%p;eD~rn2Y_+1SXzoPiCZ%wW_`qLiPV*KL0xm4kUmZRR z+5dd~mlJd9J(d~>CgK&uU2w}Vx0zb0#N?O%&&GCcVsluFcp-iwy(pGoFmtDP^Sl3g z<%<1J5RbrHHr+2(TB~JxBW5WSvF_X)POh=yFX6rVkND449hep3v5e4 zxMH>;{`B=}Ci-V|=VsUs6+}5}jnNjqmFlEeY8R0e<`9yC42~VvZYet)UQh2d5+iIzJWBCQwQ#ucukqpV6HPGu}9N z3`}b146PBoOs(kbBPnv*m9EJD0^+f~f_%{emt?iKNrvHT-JM*lT$bb0n)^$TFaG}3 zi*LUF`qj%5n>ipVx14D~R6<)?q)hk@7z`)g^MY?*eE-9@FMs;+)z>GuRLD@fURO?q zrk|OM31jr|l}i`d=b<|?Y!FY7OW4POK&XOxr_ltNUPBsJ&cgmUY=^dnWW^+kDWJ_^ z6x^x2LkJ^E553Y~{g3F5?TV7Bm$cLwr*bO`>~F-B0*26{?1S@HuU>xl{ZBWvZrDd< z4lQ}B{4qmwV=r&RB{Z!4KW$gL8wZXfUr8U7DE;(gJc(~J@tp0<%-)|sq@?$Mge!KO z#M#BR`VJrvB(~EA3X(`xQ4|?A^zqRgz9Mr87*fiGb%rTBVmpZfhq$2F?K##tU|gU% z;NrZ4jVO$lVX#=ivchN(skKw-{l+Ex@bLbF50_$WrsOYuZ&vy z37#X@TUz2J<$;(W0;vxI52rT?u7$3=VgGl0|DUJqM|`O&0)C58DFiJgLd_a89rzVk z@Qt?W~&rL%-#mOv zE}?G_cMvGBgE;Zg(u&pS29+yAq+Ze8Jw4t1^UKHkPw!tocr2d1(&56=xoDb{n@F?? z@-4U2^O3TAy8r9@0(y{m8l_3%)DxU>(~x$llvl3!62Ei{yvquD(1K_kn|aN}Y8_@u z)^07E%NA=I_n(UZUa|f5@bTmQudWbd9IfnbiK-EIQxY6TGn1x^=at7Z{{iBcr@K$@ zJ@&a?$p&c9q6~HPtklTzM+_2IwoqU+-S-JW{5$R{*jxSPU;H-DX8#9S1{x z8+iu zMrCKPI~yo3b|HPd%lPB&-9KQh&wo9T5IebI3>oB>ytpA3V1=k(gWe`%KiHI`InDA!697c z-}E3kPH@kSD8>r$SR(P6ykC~i4c%DT`d6gT190xB_!DNAl^Kq%9%%s3efjw4BOF2N z5VsIUjdP~mYU3^pIljBrD@}O5G2`F9-2b-+bD~0{Co1q8iipK?hYkJ&m(pnSEx0~; zY^7>zI9s{{9Gm8390cG>iOeydug!qV<*G-;2EN)=p7l7*WFOmQ=4`|4#+4~(KXAFQ zHj0VE(Sq;>G6z55wi+Yi+1x=D4Z^tQaLt5U`03_N#}^M^MX4rxMqpzZf|Z*PS4cmy5!MLpH<_ddFh)$I zvTce*66-NhYhH|qK6R~eWtPfYoAdxStU`A|hz_>#JXRq)7z%+w*BW;9CZqHKMl?5* zm3RhAS+-~oMXYX3Z6H)WZspzkdk-fzYfGdA2Ai$;dc-ANvV?)Q8XO zU96wA_HK#&k*!t!Uf^h@@1t2>u({n`!kJckZw>)mVVNL~RjSNA8#J<^jlfkhK0A#DC*I6W0@*N-Igj_17i>;Wq$r|SYZm88U>uGU*@Zcb#h&LyL?rV8b7GKIe!Ye3%G+V)b#L9q(8uB{JVn-%2LRuM80GziIbi3H#pu{yp9#g&2-{LJcHzyJ_4C*Nr2pC8#lQ7I+ zO1!N}kec~W(RYD2-@+djRLaXmB_$@;4)S^rZFx$l;2CRx1nZ#^=R2S+B-2@zmMXa#t-4a>Cb_vCKx#%4Mf zP(8RZ5tt-V46%S1AsXbM<~{(g=A4qAU7Rly+0mXPN@#8G4UrWxGz2I~pq2`N-v-ae ziCnto6oJ3(yx>j3vW&B^4x93IWq#XRY)(#Of?GDwahpQD2M4OD$!f5ZuC&5A3GT{7 zG%uJyoCN*c2n>Ywuw-u-W$byr>hobDwbjt(u)o6U0+*r?5in5}mUT{UJv%ZHgifgV zYIzWBEqLaX5(6Ab*wM3JZ*G*-%o%w41OwIS~Odx3YYb zf~y&ugHFXJtBkhzMuYHjB2l34yM$$}8SrE7C2HYKqEq-v$H(vW0xnEs&p3LDDH1pv z;=2?9n!*DzddF}+Yo1Jmm7~N_30mIf6d~dxR>{~1U-im}gtyrIo=REGUFo2hyT`5& z^;%4r;3miNO7iFkq&EW{D|FjAPkv@ov)Mk%>HeG7;v`!HYO85a1mV=`ET7 zM?kp0${1tf|Ig)G51;;g{Kx&5KOdf6KHq)xSUt=1rW_-02-cdn%@t~KT!!$<`Sr>x zz~|3@xKx&lR-+*Z4>hf@N$u9YZpKO~=t1#2ae@R<>$OsbUkaXCNTzc-W~ z*F0E0QtLk&L$PV76)H}qwPZ{2+Hk7xooZg3koCqLhEisq%Np{-mQzp7E|AlzSNbiz zSu>}yN7`#=Nbn_kd05qVO~wJ)-dM+RLwlbWFKAhDzEX$7wr+#6YYd`=5~nI8d?X9D zYFKv>-k5iP@rOWO7jau@udu)?;_ zkNCdfbK79e(b|1?MNC6*3wx>9gr^B!x^h1<`>(+KcGw!e1ei$dK6 z4$kc+U(tDG*hG3NRI@!8?P0c@v9;FHsf`Loc&>l`^;ajmt=4P>l48eRbIVg~@MT>g zTfqQa;4v}z`4_L4f%w|M`N)bWnOAC&OT@9;#J!y_y?_7w(FvJNj8iMAx3qjq@XTed zM6qyB)|Bh$N*?}nLKf@=8WkyJELtOhz-L6*vRg>tD>rls``rndU5+wPg_33=$VHs4 z2u|89X+iB=CHu+C0-|+jvL}VT#1Y|hvklPZ1qRx&$wy?5PhO@u#~eW_QK-EXIJF#N zp7zoZrg3G8@GG#t-H_P}QR(1C;7tgpDOm$%DJ@s1vvj31{5PlZ!OJuW9K_@n8Axld zF>wB^EY_Zmu5(Aa=MP?MHfpsOzcz@c(wy)i4Us;~tU+vu%L&O&L<7w$q8Bsmc+&q%~aKL zhx78Z#AaMr?f>m3TEB z_AWWiNdqB$L{Ow#B9s%fS(BBAw=_kkHQY?4KxpA>hH5w`4lP7EL0ht*r5HqLE$c-m zP%SgqBuh$3;xQB;5;!3XO+>ME@UBU9uDGD1VW_-~i*2DT0PWMhpA+?v|lv2&@|2e(yA9Q%$C#+T=FtjS)h zk#y2TJzW`b{WeZ{Igeb&XgFx4sTJ3Conc0?(RM`f$_U9ffyzt0wiZ=WoHv3)>o(;iJ;FhgS5i!21^$U!7ZF9vM_Yioy8P~aQn;C-}xK_5klHkArL5e~vLK8dP z#70T=bEC@7j*WO)#XlqTmKP^0#@ZC^Ju~PVL&zU5;mjP|z=fc8Z;2?s?Sf`aX+(3S z3Qdz`9&>ByQ{S>`&v3Yi4ii#& z&r!62k*D0+xw7+Xrp*oChF7z@^1R@9#fIVu51YEUt)XiL8z zr)5I$?aVQDI2=7E@V{o={MHYY96mV-S#Rw&#$^iQ=!HR7>bZsWYwpbrpX|y*0IJV8 z(q(qZE_F$PxX^Vzf3F!hH+-Q-0zXGM+f53ymAo{z9_neTsg{tcW;(y_{FbHjvk-ffh2v(uSL&>DakH++i>ZO0UYR2NFS$Cu2oiEuOILI) z*j31Gs`fwtnu9>LZX$lJ0PCKum42ap*yjW?nA(y7#bLePj%l86c{?|N5JWmljzU`` z#5j|^iV6)s?sdDR(QFIe6bcQ%0j$HsJl)5;Mx)R4M zRs`Q-jOXI*9~nVEa-Co+y0L&EE&|;z8>%ElyFOa`%w2!v1^v9X>i_a~wLNy;Huf)x zdL_TDn|KkUiJi5bBK>4Yq7)nTdV{9H?*98dyff1#X#MDJQ3gl=``#ItkSOvTiaJDE z)-k6f(zKd^Fq_H^TAC0h@2?K}r9M-_No-GoNe1D7CVZRgm8frDMyFG+3Bc2ED7UprnD&Xcy*ZUfj67iCMtpG>)Ih5OnaJeSUTd&f*9 z*&chx9A=YlHP!&OlFl;=pUQ(?_K}6Wx+HKOMn5@sKv(Q`%PXbx4AiIcpqG6yZB~2B z3io3`X=J#;B}_75q;l@Gc`6Tj*@wW_DS^B50AAgLR-6^_8h;2)&w99zm#!<@?^*KFu+T#x)X9VCG(jF}J9JV~_O4)~l3m zQW83nDUieOxT>aE=`8p56!^UC3!;DxBT(JKJAGKM(VAlDaa! z?>Me&@17fs3ubl~IX@lvMey@5Pn+q@;w(%Zg6}w4&sWjPeXqfHj931~)%lQM4g4W_ zScmf1M(AqdAU2&MozKQg*Rw&E!{T0H1=bXX+P!OtrDwMGiQ~<~-y(~Lby%q$w_V1y zCdEDj|ESg=oLX4%xVPW?npbX013<_`IdbST)B!>ql%lpfUYR|_G*)>?#s0mxLD9!{tvIVuLHFsZ%cpZ(_hiR4D%uLgT zquge)xQtvf!nu#`rV{#xS6@GS`@*Fsq0KB{7Sgyg?Fwj+Ob9vK`}EMxoz*u1LPz_! zn4&e6Y7+}VGJu+A-Emj7;U8xO*f-AW2i)E_&hVZSaVCOQ(&{)P6r|P^&-OX5pM{ZS zieeSKH_ftutZ-!dlER^!QPnS`kv+|<0i0vx%#=*9v(TPfNbxasj(4bpJZU<58Y$r9 ztCTS$NnfijlhPl{B%O1f^FFaoZzEN}cyU6a3|Vs{ew!$KEHuk7qaY?e5p z3E(p095GljR{7Y;{rdUa?_R&exqk8GyWc%~{rZKAAYKuZ-XDo$44qbP2t~WL5`ZiK z#qXPD@E_m3_~Q32S{^*RJ!3Z#V7E|6)IsHTrB{1D%iR1mgnL<7rs|-g1kxO~O6{7g zF`4Snn$DA&e~Bu*Y?L&{>|62@WR_vrHh~;OwdSdQhajHi7`Fwaku4){8wG(?qcnDp z9S3@~g#>;-l<=|;CTg+{(SUV?*I{E<1ew_&G7`&qw%y-EXx(g_sRr02y7$aBXIez9 zjLj-02Y#Wba>wh9zc*;T)PQG6LWx zre4!rfNZVt|7Wa(C)mxi<|=z5RCdgzv#^Xm1tU%80d zuFbKO2<9cTQOAd23?thK=EpmRg#Mk8ZiguJQB0J}D1PR9+P#ML(e>m5RtrpLwY_I={)wVM$3LbZQ3JeXa<}Pq2q-Eugc>ORD)>G9 zga1~;zy2TUl~Y_M^HWAY% zfu<vd5s>!H?D;6XLD`jA=}b^Yb+BW{^5qG#7^|IABQZjMS8d zu#B{0(*?Nv`7rfh(ePL#%H>u^T`W5?FPH~bB-ptc)5XK@N0a{Su}pCiFQPpc#UZjO zBucU1^hcA4JlN!6QeUaC*tE(v`|36g9Z_etoO!~pPRsNc51Tel*_;T52|T-Ko_Pe| zn}sypYhItn4^K9E9J)HwjP@E}!rOsetAbb~w;_b5MHd$dH=~w=MPUK@#Q-!o>oSF< z(Q=~Ph>%d|;(qtRB9B8?G$C;{K!McylAHW=wZQ?QNniEzmy(Yrd3cjnD{ZP(ZAxgs zD%?Tl@NvtvT+K##u*t(D>;E9W2@-SX9mGb*wM8m5#;6Ae-ya-IYBp%c2v8GyZ4Vw) zkb{w5tYWSE5So5)uxO<;cc#sn1-T@(5d=9-Y_=nDKKRlP+rzzwP3Hh7TrCA|3Ro^P zZ(y@{YY9D>0RF@F@NY0DoGqYj$^w`aQfy1u zG@AlGzG#?zu<5_x~a3jFZiW9t&aQ7eVPl~<3&OhW8# zYXB0!tKVr|$vhL4Uz#fcpiQr&KgLovw&4Hh4SS?L; zbs2N(g=)#8Ngm78c&ZqcQzP(NQnc`(YuomQr%3{TorNkM>P zsitJVWCDd>Oa^{5$>Z4760#TSosvYx~>JJisyyq-h)m5>v8IuiTh?N+XQ9? zCbwJk+GK6o6v#-S&YS!B)?2w}2U*_>zC3ykyN;T|=VI(qFBXXKrxCLqm2_Wd|LFmEccrY(ELRgh4C z=xUWgYXeS6xlo#avdIO_!HZ*wGO<+@Kv?>%EV+xT!)Q%SizYV1NOeec71fp?29ndiYbGvnwEOvmuDmY@|Eo zK1UT@abHZ0el*F0M5WRL{0A6m+K7j=X(Z8Hb}&|#j?3h-cLWJ{tA@Czl-DhHTi@+6EBkhFy%N z$h&5u$n#=O@1t2BOI0dTi$(^hwAs%&m|9xs)Q|<&JW;8SP8}KuNCEG-83mVk5D$~ z)J_VYUl$$FPgc2r@f}^Trw>#ifK%CgrUky)Mk!dMVs)`{ zF>Cd~CYQqp+A_1$P?79vREA&GRKf26r25PUJ`9^Y*utFlCgLVs5b6ZLOD!%LYlSsx zyXg4-t5Kgktm>e5D_N&}t6hQkBCXy^q>^eIr=@aXdO!qV3)r|AtA%j_eW^S1M&_ye z0EB;Zun7BOGtp?kw5WTU%fl{Zvhr9x&|!~A5Rrz>e|q4+5fQ3e-xr6mcT1d47P$n1 z6%(-Crl>{{T8N@z=p|Fi$9U-y2fE-tdsCf8)6Lyp36ySqdo6<)9}46@yW9iIt)e=6 z#SXF#?jw>!@N}e`a5!#1yTISJI|5RYJgj6_QUqQ})<;&B>Ipvmx5veF#G07TY+5yz z4A9bJoGAmNrz?fH2a8;4*>9tj{J_LEI6VX4u=7KH*vkTg#&Af9Yn2Re{)H;wKzK^T;JwffzO9(ZKkoC^>W^$iG+O6()!)DhXZ zcOFHq%g`Q84veg}_u^av5-=gFF|g&Nwnif@*IZ@%mq&HAXX{`d_JWxe{G?S&zaS|? zV!hCRzggsgDVGWT4CJ>}G}blj$+sz-*f@@v=XInUpFVo@%aAq90#9-lD~#nZ$nJZF zDFgO(F;wnmlSftDrY2HlL7t1-o^JpTV69}%&Oiv)5nz0J@3Bg=)DhAagrH@!Y<0w< z)81tT8drKM53A&Ii&%mADROF~Q#NIJP=H!*REqbZH)VYCSfy3_x^?5v%`|}uHiMW* zi!J0u7vh6AlRPZSZO1tQ9!))-?Ok7P*iBQ202RNG<$OGG9vf#5#VJupICx9h;n1$t4H~vTK+^tW8=XtqWdNn9G2Z9U3mi zCy%rnQdv6+2eL;5d)Ndx%4?;9OiUMVeII~;3-lh<#DdpQ8}+spY3LK5#FBvL_=E&p zuIkuE-ZvmxX+a1ya}Q(RnmR4L(2aP40v<+<6cwQ;^dtkPE{#p2B}pyBk@h%jol6bX zR2Os*$ZkNy92tMH=MdW-98)>8HW(OiStsj6t7R>l?PeE34H+hZU1=Zu$;Ze0%#q{F z#PA>-Len(@cfy~-KtMep-cK&Ufafe?v@#XSb2Z&7fOEEtWwUWhCrse7PNv4!)LOq{ z(!^=T#fYS;jF`!%b#n2iF*P83i`{$`n{FpmU{%BhS_A8eLAm7MSen)1XX>Ted!Gn~ zkdcM)YcTMHdi$ST&Rs8h8`4E!cVop;Mlg8JYg)tqA!fR?gxTAWh%W??MJWIy$ZAZW zDp5cJ^j)|I@{Ev`3R%`Y?ywp7h{@F=5CwnHrWb6F#kn ziypJd=UQdqh}Au{;G3Xoh79llyGq66+*na5aW0-%B4cD zBb#VV&co_E6!8bW!6#Wg%|lZ8;8UWnpqH@;g%kz{8=JQi&|KbStR4=H##kqpCkH#2 z_i~@`Oc+_T!Og*8t`z;8EdJDe$mDU5n7kB%d<9UHO&}5hH+SaVtQMJ*-r}*TtP>~|O+Q@m5Fd1k#o;J@VX3nCV0xfRE#+WeRB}ENM z3ZQ3i=K$r>OVsUY-3Iklom>IRZ}(F&)YKghK;?r^tv*VRT!G*UgKz?Kg0nPGD#WUs zF4RLGZ1SK7i+i41Dg{6~Mx+dlt37W=ytHU_ZPJe}{e;rVDm#k9msYI}Y>IaVQ^?k3 zcz^{z{@KGOU?(jxH-&4j+3HSliLC#l?Mikmv2o-tX{Y!(;-aeZ)M1c44H)zF6MWTk zP5D9?wsUz25E4a3NMx`B(Xp~UyeS9t()0o5+si0UagzZETzivh(Te}DDCL^qMoptK z!*g1@q@ls1W9`)x2$Nr{bpDm{vZ>p8jBTq5#5+nj*gd0dxlwKWAi!T4hYlW7;mv@& zAvlVFNiHBQgk)E75+8BkOEZ>9xgdcw8wg8aC_qwx11m11<#^qXQ}>m^%6s`pOKgFY z1Fy7B*gmsseYIly<>N`T++6vV-X<1_yiyZ!0b*$&48Y`1qf#EG?;RT^$SP;d5>5BR z;O$bCuyBt%!>_+HY^u?e994vM9t2M5GUaHf-7$FiH`BEL-=-8n7b!sq5WCIFk}YMZ zV&QJg;-D8S`1(5qKdr9qZsa|Ux*edo210B&hM;~;&LauKsEn0DmeX5mH-PUp`=ABh z*=Zr;A^Clynffv6Um10w*svNh63l!+Hy4M-`3U3^l#IxTNhBkD&ijU#AKZjH)jPy{?@1r_;kiPU?@`9ui?{UP3?%9RKa3gzo+Gz zAw9VP0WNr4^V>VvlY`;$M_hcw?7i=+u{A|{vdA{+@Eqe7WrcMh9@WtW|AGrYO-j*J zgc~W2yGM_$M#bYDO?+RPo%wN}qIOe^iebN0l&Mc=pJ3(^W$ef>gkRbBmxdpsGEyC> zu3AYKgRMx6dl+nPCnPwqQr}k^!m5;aJ49?*Vl~JDd)%^ujvKxRRoaIX0BlNm{E0>} zZb05(3L*F`fmH^ARi7tXv>rzNNbxBwlHT(fG&iFsdeiBBM};4#@OnJqe~ilTDVZj2 zfRwF;4uA)Tf`hS6U)aO%u`jGjspk=oAv!&Rr|`UGf}~FZ`J6gmbt3 zAM9q3;iCSL-1GR#MYEs#N)z2$>{>}-X?(;HGOW|&S zDz(ws2efkyP>1>q3cqurLMY1=i@s4pAn&xn^t>RgeMZQw?_oKt$_Wd*`f1nnj}R4L z9Y|;0J|cdWt}nm(o#X8s`*yY7TL;o{)E`nGQQw2?w;nGqYX6;a^K%UhU2S{R)>Yf^ z`HARNqLN1Fo57BMY)aX@JvQyD++dP|&HywBO{%j?v~WF4%D8VW9uqzF@wONCgdqB^%c*N9jZSC00rW`O;KZAUFOlI>a&Gbq@FV;il|2`e+ z-zi2-xDLKvr~C2{dFi*b#^ne}X^&fAwg1hj7o)|bWwm%H6XqKBEYZ;H;zujDW?UWI zLpN%~>TWkmkii)Cm@zu4c9nk$0ecDjF1BoK7OkLx*4BCy*J_RsJ8~OM zu=N_Uol^GP6)_zgW?mqJ7hLh2V>iKDLOpETU0W=qFHG0T!Ko*`*%SNDs2g zW)kg4Eq9;(c=?1?DZPR7R2ebbV;neAbOq9C76Z)?6CM)7>Pfr`(DL5N`#9sr_!(g% z0TEgsr|38Hng3%|j#t%aoZO?wkgZicoWGTZ^LKSdIq<`(l!$(%fw*v=<-(#3Zq-|( zm>wK6tsgfCo+GQ`+`8^HXzHPOAEKx|0uc5Y`uY!_x+zk_4d)Ax4m`ah*U(snoS8?( zfxHiOQN1}g!lA9!HqmZ>6wv#fK%BE6OM_QEv|&F+Wke}!?TXngT8kk#ShVG~wpZ=L zDu4f61*=lre9bo7r{aDMzjU3YPC)>Tx0!Dym;T456gRKH2OanvNPI<`{xXoMJy+4z zqZH_2RMM=S-Q>)np|k=fEPJ!=>tv=QWWV1=r2v=PYT342I`T^qIsgreV+?KRZZd*p39V@B{rPN ziirBE1>^XPmke14~ueg@!%Drre?flm0my3MAY=I!R`#-DnVUOt;cY zj26eQ9ys_%N-iD%bprrzwOwy3@ut>mxin+)wLB!VU{i{h3ykU~Iu>cKwRSQ7D4w)7 z5K$l9`X8fGr2Iyx<8-z*W9H?Z)UEkgcLZpkFQ>{u2of(tbB+}Q%dOmd?i~y(Ls54; zYF$4@r7RWk9!FKz7y!dj2ng@02<^QceqFfyNI?h%{Jad_pAL%X>#&&f8d~IQb`bc7 zO(~-rF2X=W1F%p4mf3EPo0e8av^DJq5KfwZCs%Lpqe<;Zz_gt&j}6f7-t93gRC5M5 za95yk^{9nF`~*^mb@-b;W|Sztocw-eRGGVgtAGUqhF4Q|FwoN2%XM%G{P$s0Mr|Up z%cnheU8*rBMO#A>Y~X!ynecjQ%o)lTlb*>3ken|5v@+}NI|Cu6UeaY5Tld+@P93CD@`{S%_tx$QrG5q+I@$TWb4?o3w z2j<A{7AXw!w;9pW5W{Vg;je+K5|=2je}D zmuR1`vp_mUBC}pOU-tK{Q36xM1t=#Y!P#m8Zv3j8VOxqp9UI910Q=?-{41lX=OG9Y%3 z36Nl3^M$8={go3KtlHryp1c8KuGFY~V}?xu)*r&;VOCCHnCJ5r^XH}tl#gQ0slns9 zd3nrC_$*e6S#1;d+rag%?n^S6i;Rk}%Js^lvG|W!8H)u-J`AgMnWu2fi0^ARBRe-- z>%E03Jr>>JKIihfS9J7x+NaTQ$4%p1uM34=8RaCW^vcmk&!tp2R?I#x0PJ_@*~Q;B zr6@8OH@cM(s(4Tv9PP%!CQc;hdGqq?e{uo?VtF@42&a2SZKERnv}i|(DNAENu03H^ z$_XsZxmOZyy0CvkOI=`I7QI-uAHrXs#mb3SJ*v>*TcKGow3fb_Pj=&dwm$mS|Cp7L za;DVH(Py#mU3FE~I?YwaJzif$9I=Hd8AoRX&aWQZ|P?S=ThlGx4aBjm|UN;KA&5N;qKn*%b)F838ezmnL^yr6x9Cblw$po5?u z*cUBF+DPA?l@hC95ZhI-`cNrrE2H3(fK5Jrsd}XkkEA50ZiW)5m#VdRp4SpqF z-3q;U;8zN}SsyiXP_DKN0TlStV=hgLN+$A$G*K9pq@Kp=Z05s^rg2#w)0szPzyfCf zC>exVIT~EjmK>0F=Iy&i^%8*lx=ksHQeSsOUrFqylJl8x?Kz6KkbRY1-8N!=cj^CN z4^u!)3}kKRA~Y$2MCr)LjK6c>Qa*3Eki%}utpt3vK)vvZWh=DZKnTmC7IQyeR;64V zyOeH-12OdsH0Lh==o$C9n*$=hY|3CW95|K;ckQ5!%I&lsEe;*(6Q0Tx*7!s2kzXc_CUoVEbr@Tlm<6 zMWnnX#W=eW->3nN64jVXsxWGY@YG}Ter8m5tTtzmhH}cJb?0V@F7g5M@CUD#_@6nm zJ*E}52BfDldDlAu97f2iDNbU2q~xDDkKU~WWT_NSS~zI;xR4beF=Bp>7syMgSm4S4 z2cfShj`e{}F~x!%D_F~Zh<57FltCI;ChH~*E`93Okncst3H7p7)L(b9IYkrzbJ2&P zv>OPG$*iIl!so1^2Kzd8DemM%-dzy^_OcKZp1UL46pxhb{dMj#nxn5Q9~*AeD@}mT zF+|6Wc_;^r^f72pQ>r>ZKdFGNXhZ0(JeqWx_*A{OweiZpIYk{js;x$TYt_C^PO`nAbf$E{S){+ISe1Bf6?`qslYhl$Y5tgwDFBht4+~?qO2K9c(0F zZ2}YaUf}EAXD>24_Rj!bUaORH1$%{tE^^@>L)7W6(~C3t`9Q0ek0;&0ddQRjHr+Mi z0&ju4gxt(oe3Z^(;GQOxm$=MQo#qW(XJuR8R;4fMHnfh{$xFI_y`TjMo4#osps35f zi_W^vJPR=970+|7UxnIi#^Ve*0jX#K>CxPBKt!p%5JJxFYuxEu!I8W0@`Baj(&G7u z+5(|@-ASdCmb8uRyW*;hoo+$QaL<_ zR;mm_vYSPAeEw-u&cHO1g^WV8&)Qsfh|P53vG1ruA07^){+$sE5R^vOfptQv+abIW zVyt@tuJE(l{&$kvg;B+iqJLH9a4J0F|Gt@!dgO)9en8tp+%qrUR-UAft9yaIna}E2&sf>U$X^-ZgW(s+(LmhB)i^r z<YHKR-4Drf?Hwl1J z<9Y_%{Qe(pSF|hFt|EU48ynl7V}lu8sgD%heRFi?@2BXQ=W$+$q9nU}MY3!bRADF_ zj$+VkKzsOL@^bC32FdR!rew|rQ>Q4+o#nL*Jor1ThoHO|FhF7QCDGv+GBjJ)zJ*iD(kQ==c5ZYX*x&~Pa{ zh7`Yk0Y&B23;f9v3!z&thlmMPkCG{w@K^2fj?oFProT^;21e+$Gs2C}bC>SY7J^R| z#|yx2dZ#YePVjgF;A`Xf?9C900GOYPN}1&#dn`JOxW-uF>%F&Le1y_qS^a5K zIYJ6l2-^im(7*yGtSh3m>a6a5?4@Y^Ns zMZ9ttNV!P}N=Mcs%5dJRN^1HG1^H&t09Bmqs}H~n77v{4O<#yFO($TH_fmnY+Uk8T z*nQD>D{+V-uQL8mnoz(768;VoyC;Ueby;m$jP8*r(Rs`f`@eOis0p#CMqMl+G;oV3>Y?|>z3>7-F%nO4OqTw2;l?UzrB1$ zf{hMNN~Xe!e0P=~tkB3`AY*&_eloEv@qnm=nKQ(NSYyg`n`P466D|wZ z{wkyWWT^+p5UixT7w^ZHke1_q>xdQhm-y``O+Fyn&hg8pAw0wGht^T?LyXxQPZ_dL zmVN-7=$&v*(y8ImXoZ*VdQm*UVTM?oN} z>0<`>o{=yuG5@+ZTBWn@N0s!oQ3cJEh2q-=*of|+PtV?D4tK#XCrXs+A>br*~Hb*5n zU_4M^Dbbi-m%cibK3OsXYPL_z45yejeL2P#lSCiCw6gf^wsJU67?fIzE<6?xL-ABYjQjQhv!8fAniy{gw5%ty$kGy+x9`#}oWZJh*A53JTuR6{HKUh$ z_a{qC06^UZArJ(k62f7{_v+D5dGPeBaQl;{Ca@@mc5|DsE50knb5iu+z~FhA{K0nR z6yF14#hCRyMy0uIbbQep#}GyQr$2ZRQ=HZuJfcNtg^sXkmw^|+)B(UM7}^str_|p& zuXQQ3Mcm3QGK}ya8n1I|lA1Z=tWtz8S=g7;gPV;!rN zJH5BQt62k<07I-%Ch}ZXQZnQmxCI!toV)fKbzM-PZ@o(N%D*=&NB^X_*@%kG!((y- zs|dXj^~qare*%Xb&wvQcu6kX<({ou(@3cup=Gb1Io*}6O>K0b)6(5BeHQK5G4tAqS zc7S2LR+Ur&wYJrD4ww!+Lu&vw{+*TG>WNx|=c-a_Xk3g6_oj1^^>Y;bs}>t1rQTUz ziRBb!2z+`&a|pD44c2-suEzjITLrXvR?y@~L%?$G?hLjSgm8ttfQr^BJY%}s>jg~G zhB$Zw$ABB}tBwuYRe)!VX%pgdc@p~^B?bp%v1;w?8ygh;0ilf>b3lZgUhyWWSOsto z|9~Tp7R$(e9O~eL-2AM2UT7g@`W-Fpo9IwXo$Ts$tO9FlZQRwK4FV~JDpJN};5%8c z>9Z>>oTZ$0B`RL!<)w1!R8Bo@)}hK&qd9L@`~mZ>1itFeO0ldmmAD}9K36#sO|#wG33 zbBbo7lhNodiEF`DH*EbBos;&leP22epR@@Z{YH1yWGzJXTThNtQyl;>@Cxs}$|+rI zzQ7z#h@OYA98Q$aZfy77J)eC6Srs#&$uMy}afLcSoMU$3x@EK_Q)xWiLQe8{?RHx^ zbxb+ZqYc!W(OzQRro3jie3I&A3`d9)Lo7U#e9Bgj!708Cc*b8-p+Eo15R{^rD-Ibe4v|b6?}HJ{fJ;z1n0kSJ-*f?3@tdI@Jo;7pUngukcq&VrcmqQh@PR zwE;JPh!=3ZNNvO~RgKSI8Ak_*ZXteB<$DDIB7XzB7eh2$^SsuS!Do0cQ;jM^p&bb; z{gzg2L>{~CdG(f3T*1Hu1HQBISaKAOpxy(7*8`T0r-#a^t>}D~(ek>wX=K(rlQjfF zY!x1PB@?nrD~f_uRaqCnz=1WplrQ-zAn;dST5g}D$_lvh3cK2+4YzBR_4vIU;(X`c zCr-~QtSIhm9V`Z%OPbRGu+mlF(R*D!pYLA|P9MZ~s^Pg9wK!Z3aB$I4nPVW{dsR7e z8EQ;;12S(2eSOJ3H@X8rmBHfqDXoz+m%)bj-6W=z@eN!+je08vOxpF?Et^wRVfZvu zpX;tMj(v=E__R}Y0X#nZV#--H6_dV=2=E9*?&T_IDwfl>myle2<@AzDDjN5*hgsAT zt+Nr69q-?&;Dp~B`uAq#r~vh7Mu=|W8iVVB7zo^J-DtVAU7!9c2NQR>#0Mnw*d=cb zHjg0Gw+1CV&r;u{dWv59=&K?mhwxpgF<`L((2R1TpXs@(oLk&I1fXH|!r!54LyW6$ zpP+*GnJP}Hrts*VT7@fitYAqF3Xf=gztg_|z=5V*m#T4a<Zs>V`2NaRw{462Yv?UpAkFUa&f|<@GPV*_cljNtQt4ry#`dOhB);vbW6E!}rTun5yqIYJ|1asUUq2a2hSwz2_;_wcv?1=Sup_Nk2N!zT z`LC2)nlgG@$cDAC7W25WU%>N&Z;v>vX?MbQcY{{#sL#+K3!qq*ISh zrYdyH{YsUc>#+IyGJ+ou zhCR)(sD_@7tae&eY+skMUSr&n64kn@n1nYs<6wF99#Hk>J+#nYH?}ExYNMF49A(YT zOc9q|`M{>AfI{5YFtC&~by>aQ-S3@fdDK|To!!ijU}5@dD9FiDGa@lwK46qn>bP4- z`QkU+#GC*MuQerMsToRb?**{SI`FGawl z1hoJNFQ0eHm1X5PIOuLW#9^k|cSp0KV*$ou(~u}yp8w8-m; zy2U^VwT2RbEAz~-y; zQ9_L4xG!%ESk?EdVDTp-F}=nVU9u|$G2Z8Zjo#`ZSuj9~A1400)Rej;V7S!@sKuy( zA1~fBy03H(8Ttsqze~&5C!K{C-Q5PF+W{gUg*EDw9Q5kd!1KG7l>TGk-u9Rk029x0 zx5Z3tFcmBETvNtAH5gI-_KZu6;H<#CIJbI$?{K8^aU1))W$aVjx;QB2GO*!-P!dAs zCU6nlz4L>){B9{WF49K36S#ceJ?vDPW@KCKvb`|*@0<{1F;|=`#PfoMcwdJ=K(W+|Hm_?NR_!suOi0T5O}8!l76BVY4eHN z^T(pFs+9W|Uou)W?senS@Oe~ITLa_s`x;aDJ1687t`0)Zg-a;|J`=S3V$ZyTP3>1H z#NQd$9rIdDwAxBMV|4L|qUucp2r358K0@B#Cj&y6!zsZd^g>^qjqNcI5DpGD#XeXp^guz@ix||;F=^sy7RAlKpV$0y5Ri$iV>`{31)nvTd#bZ$!x7HV6e0j{E zR~=>67$iU??iETv_1E#GOgrg4)SCBfz z7jhB~msU-)1o zGO+ptkbEs^bE6`*4~GqDW%;YR7enE9NX}y$7%9uTmB0Ua#e`26VzNBO^8Ts`ng{2?tet75!;CvcfsToq$gLLzL6{Ub5;PP&`7f5k|IviS%zMqD_fcsa{)*85KOvFIhPwE)zo7Rv8xI`9t~xt61oz9e#-Hz)fm}f4oqSMA={{W)9ux$s?KM6)fYiak(o zmGY{qEVB%NVsb83J`!^+J-Uzcm>G*ie&-4T!(JNIyN|iL%#(7PLip5M!F;UFb7kRC zt9PhY&69e~@(fZWM7e=0Fn9;2Q)zk51Qx0bpbp4)mi&AvjXW4q1iU~s{jwJ@Gw;5& zw*0>lk45uk=&Qtt?)s}ab-%7FyAIk?c=-T}18!CIGBHgw>prPWvKIA|E^Avh_W479>E*lsdC;5nR^P{cpQt*o;0cFvWe0LBbh%Tw27Emfax}z>ta!aJIy7amR@_21PhaC!N{g;CsC^x zS|>3AT~fM~Lar9uR44&@FML{h8=ClBfu;<#bUtSBwV~{u3r%3$3|fH5P$s4KelBDw80h1?Hl zuWiVJhv&vF<>^x;E5eoQ9*pPr78n)M;VHyjM_bAKUBCM9_ac4>=k{?{&o%`;;entu zpP@RqZXY0!k&cr|>uHkB3poh6n6un{+@4otO;9KN*2e}^{JFPLTxOL@%pDkjq#^T? zcL~p)0hVYn0Nq)8xn$DSrVzfeU4*h{200(D{5Y%HLFhzmm)f5BukMgchl92sHPw6R)a`&{fx z)w1`at}KU7>8$4#bk&$ko;(SWpmu7djv_JuqzJynAjcxNV4y*-8EJFXcIYrzOY&)n zJIOWz0QGw0XQS*Zf|j!@$^jd+jb-u{#giJXX=f8~%jMEgzxGE+gaS6`dxDIElY54UFWoE@P9VlYIo*#ipR@b{f=>b9Jd}8s{d{)wC$T z<*fPz+I?$CrQb2j;8cfFn(9oLK#q&{LJKVYlJ&lSN7#hSy9vQtKz(h|l;s_|Le%Y4 zDVMkz)H*e#rgnNy%azxa&&ZW%<-;_&U*3T9_pbJUMvb}()T;d47b5LwXCP{k%ZL&Y(X%f3nsUq zD|=%lHapyK_&oCtrFSuw1yO1--cB z?h2dab9a4Qvbqktu9C$k8)$xpQE#I{3P-^U8Z2rcpJZo(9D_L^o)4F(Nw@tAdG8z@ zoCTD4x%yuQMP@IAq((BV(4`jHK4LC6b)Ti$T5mXlrb}9BbP6_g9I^DAVcteXY+v>} zAIK5?_5bW0Higf=+qg6h2&nfOSaAvr+#FiRUg!(;L-l ze%tDjgxeaJaspRK@c(C%Lc&2F3s_+6H5PaFG9zx3*2xT{zAtU3|B4xrfwT)Wt^`2N z4Fqr31G{Kd06t{nX9n}JBQAby7~rm7sBCG1@0DeJPck?^(80x|2#bZwGD8h9kc+1vvN%}Q(Z&wtK39vurjTK5X$4y$nq1T;q^U3o!n<6N>>yx)qt)8RRYYss`g^KHh zCrb6=q=vRq$X#{H)llZtnQBycd8kGtXdC3@Bhg06zEvBDj!t?!cQ{XVJ!& zOKI2?v3CG&87q>eQcrW1gsAB<543joSx3({eMP)4iVs=wX#wmDrMm&gF%WO-NHBEi zi2wMCfCYv#2DX%ddVR*&HY>>`CtMrAD-SLvh2$0xfYRNMjx_S4=8Co{I+~`B$T;0-X9R-ewRQ;U^nB!EhBYJ4?%^ZIT~<)`^m0hXX%nxGzPus){1r3& z+e+?AJS&(u{Au_Tdh309Tj#id-k%{e(m^X(x@&P9q`cY35YB?5_m%^ArkOzltuxKJ zO%>Q=t9Q6nkv6m$*q+PMT~;Z=nF?=5132qkecIrpai*C~OKQ3<5#U#d#;7hrirY&I z!jKNYCic!2o6RR2Jwx!HA>PfVb^zkMb{w_{xUX*Gk_}Awa#I*3PT81y@d~KavaXr{ zP3rRQ&C&r*F8&>(g0+3Ji@rw=gF?ZFX!Tk|YjvHj=a+++5#(|v4|ozNlck=6KzXzKB?v?{*{rsEW$KG?%FO3e%E$nf%zR04 zKOz zNwW909|2i$m6=|Tw@D)5nbD=+9qSY_%Kj|CNS|8dUew7}hM7kZ47gRfMDQOW2!(5t z=_S#*`nA{e7DWYiDz5dNF8ZNAe}q7kY1&I=AAc+d;mB_Xc9+IlI&$9i+=Va|8lBQc z)Z`9gcZfBw-Yg^cb-4&=BR++Q%CuZuHq8s75y$tMtYd+cyW}_wye?Eke5$i_9tI|W z?MkV-q&J*wsd|CI1%&?yiJ21?G(aY<=ZMS2_vP2Ty6_W9mkM7GP!Tq<|JPqF{O zS0`#rsW%17Y|mFsuqh%3+h$h+11P{z6Kot}yN}Z@oPftK?d6{#GeW%5$qbaKoZfxP zY0q^-s{Iq1N&w+cxG{mFvd6sf0UNeb87jN?~q=y)?DwrAwIR^V)24M z%Zqtg?rA@lUwy_riup`mp|+0q25<692@5kkSHzYt4q01eVvkg5-gv0}SIVK4Wp16j75>W$E^Jxx5l1@wGju7n{|e z%E8JnHbs~usjAOVSW?+I7nL;!U`p1c4xVl%#T3+&rX)TkY!n&VAHd6$wU6Ny7hcilvZ~8ly7?Jke#R84 zdhZeZd~T{{-KBeLGp}OLh1}IHHpMhbmR1sHoW5ph@seJBgwdG9+f{fTZHiz9JLR$V z+Ih&KwMJ@Gbk^y;5N%x^d|wg4vbMB#0l<_arlQn*reQCo_*k4v&H8Icm}I&~g~yy; zxpbAD3azfX&n{_Suq8~2xGn77g@Lbe_IrBDORK=2PTj1lU0$GJQ;0L!IUOII3`EjM z0V>M@sI#2}iSN0F-ffClD6CU)wRikRkloycX7|_VGIK@Xo?{w zR3}ibJHS()BNI%Ds44_-8fz>r66$F4<8Yi%ps+)=61c7|c-AZghPPI_+=0Dz#B^g_K$T^Ty$X1Fl2JE#Ym{*+=Ui&~ zUpu0!m9x!3WMlS>80o4XIC{lpvKP-w;{!~J$-akLVK5XVUoZY>*^3=r%F#usZyp{} zKhML@SmK23>TRdpD)`C*OtHk5DSfYq3$UE~ISGla_*Fp#c1ki`Uv7{|x(u3mors(8 zL$d+iHiT~l-}Ro5Qa7l}XcM&jxlZmCGd>ijZLIo+x#VQYdU0_puOa~6e5SoGJ`p?D zj&rzzZ%Jdn+Z{;{jgf|wl5fkz{5v9o_vN>hMYwvWXys!?L1FM?nm{*i3l(!e&wGvx z%3=kZM#+%s`sl>uHTCP#V*sOK1{!vt0dU_kPFv<##RY$|44!_ec_DTj(s($nF9CA1 z(YSay;h^RT?>!1&Uj}5pIOaOsGSve<2kt9<=@y?CL<7hdpY?Xzy^wZDA0Av!a*pX* z^f^zj!}7}F1vHf}7X=(MB2)Xu|F$i=aLXCdv%*Y1-InCw63KD{Ic2~N%*U*Lg17p+b$0jD|Mao zke~~jGVqh^4z^1l0XkSTw(kxK1Ef%5Q`zf2YO)y62jYY`GUyJ@MxVVVj(G*^EzN@FV)4mH52xp7EUL#7&B&-B1M$kU>f#M6}- zt^hZ^$qnJ`Q+Cyk?*_=X9t=q_Nr$H~d43%=uP!uBU=`N04o2Vx2Z zVH-5Xt=j!e`q)u>)H8l^wjY21D+t0+D;+U7DpKb*KqrxElb`n~rJ!Mc>X1z`4PgeJ zy9L=R)yApZ9%5lXniB6Oz)Fcw3}W6ETv8uWVjyZ>@AEu>L5}MAHIU4q$L@7oU5?qp@zi zMp{!kA5XO%qwRB#N?XQRgGI(@^IG*6nX(*yKD8sB^cm|1L--LNF>v{HYSv8tdtcbc zs1&8Qi-*rP{2aPEy)hiRhOQHZnCBzBSc)%?l`&FD7tCmI>Od;{G{U9txLND*@RGDH z6hCO-=Y_%pki{-gAUFcxbO&l_{lzx!Jm&&DNnC=;t|?h z6a|YNW};D4pm@OS|a^vK`erbn#dj*GK?<~g-I>Ml95^&a#I-bkmGj%!`H1{3b* z82NbUx#TSW(h6q2NXo7YJ}FjzL{lctO`~J`VNuGL1MWV2;JaCBEGd>?dNvkE7sM(L zT<|L+kD(#b>)da-mwG>XFCaQ@_%aK}`7$X*F)*guVlOeytG8AsV(|czvVx#DU#Q?$ z3Vb>-doZS6C5<`m3zx~0v@dwhQy%CyW!aX*T0}g(XktgSo9k``nCdY%-CbTc-2atQ z69yFs`Psf=cp4v2c9DiKv%Brb_T-IpfIFRmrQ(co!bQU1$wbIx2^E{`NewA7d zkX+$*7z}|sd9hf@%i0Kd>fyvw_8+WsE{O1qjtn^S0R|k|u-a=GbYCUBl(Ff4Z)gdd zgAenf(}t8%_KDmymH7a^zy8X&;`hWZb+7nokz&9n%5)~3O{O#-3C&-B<#?yL3YP=V z>FW+FT0j*xNgo^{_D`Eqw99}3M(mg_wm<&_WdZPnUzn}#SG3D1;4O-VHJcR?58tiz zMzk;Rz-Z@r#Z!(c_Q{Mtq`3H z7Nvu1-^avz%FMJB1hy9209%n;=Td+Ip)v;VdG3SPrD#3IE|wdcH_t5W6-c+?7xt_O z#|$U_Fe$?~jb*?|A-wJdZmGtmttgwf$c*=gD%VenYm#hH&?#+J2jLtK7yeg@V(;yB2V-i8ZK~wGfd}g*;3&}GhX?=3 zZ~~_|Zqe8=p1gtJs_#KD%wlJVy%N4ZDZ<^MNMBdxI0^|B-ccGxkdp#p{In@0QBXoAi2B6C zpCR#9iXp1>Xf^QIY5ue-rF4f7+#-1b2ZcKYH2!g%l^5K>OULXdi%6|QRVmB4_iA2zM70yVTZ_6F=T}Pd5MK@y6XC|AXb^O`4i9`s9Ev7Sn^HVgjnTv&v)!R}tijD&MfV zTR!@o~>%d<#dTiCf|0-quL95;FN4@X*av$}cNuxKNTlG9v4TMoSl9|9wH72=W z$LU0SxJ5~5I~dk})D?en79g~N%ZyuodUUpnvQTTY96NP49NNpMlnn@^xZ@_itCeb0 z0QukuLe01PvWK`?7?tt)=AH1Cw=Nuv0D$tWQ8g2b)iz_jjY>(CvrfFYGfna7ba3bg z(Xp~~H!o@J`7ZH-^;Vkv?FV--Fz`5NC2Sd$&#rNkcdc6IGXBJp=l zv)}3UvqITFf?{=+vaB`M+ZbG7K5o8s&u^1%7d01%u;^pS+ApNlpVm z8KCB3#--9014{(#v~3a5t8e>vPM)O$TncOPAp{rYuqt$N0AHjL9Qn(rlv@sDM{j3m#v!IyzW3j4`a2^%eQ}3Ewg>P;FZJPG zh1{b}Q#!ro1OL7mN-LFGMP!@SipAuqA;3_qA|WdGS%LXGrQEScv_fq>FfI+y1q_N# zEwwD2q!0OO*p#Ci4|u7!w+dPZfOq<&38x-eU_*3yEG2_gIqCr;x}s-r@}}o5sl1xA z?NP=2(NBYuN>SDBbiB>GMHu(`wjp&cG5E}IpZY*7IH{C8utfvnoXdeXSIm=CZh*rr z(m?&8Fc?RbaZ+4|30}VT(RvrVaO`?~R{I>))2Ixaq{UeE4H+S_-6I3#d>uzO?A-n6 z%!t>Q(g^_vK6&>oPC=%q=>lkxdK>jsgu&}e**ObXIgH$WgFl0OA_0Z8Zg;<`dtq0~POiw8Z&tEy zdPHJ=aY~KQ!?5%jZE#vCuKk`^J$t3zxofCep9%a@LEK}F*-MG^b6P23P`%U6d zBZd9kFC0V)rjZ?E9z$Zz5$=-_3=d#mUvv27SAp$gRz|3f8tDOC2a4zip?S21W1@~1 zieULzFM#I?cY91vtf9^b=-2)@lCd zyi(dIPRu^v((ndr{RpX1R|cy00`l?AbIjTBHvyXQqjQ;jb}(wz7^xjx@PYXYpZZTq z_Cdxy6s-$u-=;l!DN3x@9o;74_gC*Rg)N@4%yFB{0HZ~FC(uX0z=6Nv`x{4*v+WON z;pY3Tf$IUnc&|{r0b`S~<`*dSpA>|{yVN$KrZd+mwZxte!{@yP2M3z=&3jBaF9m#P zZOqPntwJ+Y0rb`#Yxdywzj9z1c^f&~tMS4gE$xwIzQm=nvAgz1=fEGkGUB!|pELXN zUI1!FFEJ+V@Mkx$AwTmG8I2!(@J0ObO$46Z!%>vIC}!;10>ORSlyOiUAE{g0&2U!R z#^H^42bZ2y_%?FHLU8N7 z#1}w?1JJ({-zf`=)rZD{CavUGCY3T`u>6io&hxSJ_H$M#4xShUF&2M$^|~Y~nYd7Y z)Zb{mwt+ z=PWO_SdwJDVE9o00(6ik8OvE< zd@pcujIx-*jW%$@YW2Wn0mApEH1o${WqiTVe=D-KN6}T_9LAWDS~@H8TVGg}5}m7W z9)O@AUZfheFlr@4^D3OGz9UY`kax9(2n|M|XHAViqyb(Q+kie$;tQ)X4y)Aw3$r#~ zyU30{n&R}?H-rD^Gsg_GQd(#b?he-iOat&I)`__@pcdS{-TsBg`d1E|i9!WVhsFHE z^p%c>be#zz_ZLZK7?v{Ya_B}`r!L;O=`8K?I96scxHJ3acI7}C+;7rRFFvE{1_11* zGv9f1T5T_(`#Zwg5ptFx4j)WdB?HM8Z#9= zmJL5UN5Za@CCKG2i{h|FL$03!X93qrk?M^_gHO9s_AZ?n1K@tm2TzGXdWEH*v_w=n z-bQ5{m2#QQukOVFtLG!r#018#+CsnSZB+`wX}tk2{E^%=x_(B7BOQF%Vn+3CRSv+3 z2IabMUo4;&H6;5_u{&Ya+UwnSo+Gy80Jpz4D+v?LKN7~)!3ug zOhRp^NZrgPTt+|l8~>2fHxeUGF)q+Ssx9yr&S*EaDL%gFg8h|LhKeKvB4DgOt1R&B z6LnfcQYo`q83uZG}4x*^d>zBQ&zVIj)Ri&u-D(*+M=TF|n53 zV^$oTsI*zio5<$Wpqf>&YNG%!Z&p_u))0vBS3rNtn`h*dpb-8*TD#QPFf#901)yFQ z9^%47%F*U_}Mpdb)iT$Ud0zRo*h;CrPCkFhI z)4I`UZ2`WQXp;a0#=9dO%nM*g=X*ZmOHS*inUndgylHgB-|i6XjK2fTs4r3R&#-ck z&F-_Zhb%ouD#6T{vUQT@g(-2^N{}k_hX(|18y>hTk zsj}ie3`f599&@^JS3OxtxxRD6m#o$e5`&3-R-Us^u+JrHp_M5dP5M7su#_9A$|rPX z!Yu+HW^q9JvhE-iQ~#rbpL5OP+KqVj@`?UJtTMFPkLq1O`hWC2rr?`1La{IQEJoG! zjuk>;_uQ`FM^DQCC8>2&rvPW|Q2M4a+cm<1RV-P%icp`_`b$#l24^d*BebFnHDt1j zUDXjo*C<8(JumeosddxT6gaseoWckUcp_eB08kG`?*F3$mU3_1&bE2=o=`-O=~&Qg z@(S!+z#g9r`%6;m25G)IhYt@M2qaY$%<3kG25`?yZ69%EU>q(0__j8o)n4>uPaE#OwWyZy-? z=D-`deOHvkbJQ_GUaLo4H*x@&-PXafm zhL~mL&XW&-`~Z5;b`KSxoA;%94z|HJha3;^P;SV5ZV5QC_vyt~I2!%QmzdLk>-Wxv zVk75-*x-nJ;=OR`A*(U}t=D#&Nb9AcO41@^eW&(*ewPGmuvOSIF)*_*_?@lj zL^OqP_))IkusH|SfPu9U{>((;T4^^OQ9Sgc)zmYFy8ke}a$p4lqrBFdtZ zi{oy~*SulFb~S9%8x`mM9^g;8hg!B>s#lBGG=-2qTl92wp8|sMmV-#ThC=ZJG{Avs z-VRm?Y5s=#rb_fA-q%n$w@`-CXXS1l2#&7}K7EucGq6m5ztPIMgc>2**5V<$P47OB ztR`!E#UVTG<&z%YV9Ly*aa96P-UG$>ZsT|gRXT4ReR_|7=UhRBTYCfjnlaWkY}l-2 z^y=Va4*vQFB`2jh!`+K-&}JmjrDBLlC@xgE*`mixQ|-e zWtTf&_vT+SG=fLSyn8QomU^tqh&Gms6fD*C*PFkuIa0Hi9o2ZrrdIp4J_OKstaGRm z*6g);Ia0IYL#z8_U!l`4tXl9dv_~})eYE?&T8f-+$~RzMda` zO_9IdzDkKfmC|GOZ-%vWtK-gcC_2iIm~!NAFYy$1*V0X9<#_Z5nAe3j5LJ2f9>1oH zBjPl%fb)eY8f(#dku?q|Dm-ymI31##qW_q23wE@-hhNYn8tLJEP!n zrExx=peVjR(+dpR1nB`Fv^;Ce_kX91G`M~a#_Z2IziqN4cvn{X6#LeCG_0fGxK~INKZ7Brx`c>&0pa0NR ztAQq9OCNANr=hrJX|Z)Swl1=}6zgQ*SBrM*kJkCOpDCBN9S|I6Dy*B`%R&M_6$GXg z)E0XbmTx~(zPb*qGLf^1d?|0PAbAbgrB$lsbp?r-Qo#6>JKOPl!hids%v`{i9+Gu| zVP41SXG+g?P4!tfQqkR`^C)-R)jO&(gRDQ;-M619>!j6scr$)#@*tH@vk)7+tKtKE ziLZUn>8qfaU<2>rR(ojSqpFM*lFky^Ag>dZVa&Mep#pGey^MJ5-{N@nfdsmG2v9#F z%4w^dtzmN??t)^2f#E{9HN=Vl3~WCd(?3#5OOp}u#6AJULjYLo*c4VG&99VKY58F( z4wjw3<5=-K={QhyfqfBR4@6f_eIVZ-Ni7WP_fw*wmBq@l0|$FVDy#s-53uqhr3gz| z6)7Oz3J&GCXGeVD?5Dn>$~5*_2+rgabq7bT_=d5t4nep`WCC%_7r3y>;AtuM; zfm;_EBH&bo!8&C>{lIhFY-Nucz%Iyw`#xT7(~WHEe&_3%)Q=n%TqJydkIcDRkpd30 zZ1FAw&d~NCmh^M|k{i+I(%Y41Z_*V`UzNjjMotnFLKc|I@`)TdW zW7oMoCNzF!TusIFvfSonOW_gyDb0wk|$AAcBId6eAg`%shzR zF{NY!VqZokb@0&Obz`Wl;%$vEw0-b|Un$c*<#4#4;vdLLQ$akD*VXv)K`DHFcQ@mZ zdx$Vg!$O5#bO^hJz;C<-;W9w|o-w8LprUEfjul&Vq6p8JUjZ47w^_pSz)-((dQiQB z_sSWe$%mcO+R8qH3`GK_{E8_fB;;yv0n*SLY6I17PP?tf3v}W&9~>{Ep&7m#XIi-< z#G#GBhX;cV<99tIJAWV1Un$uM2MEM-(Z#~l9p-D;H0Qo_-NEfqTK-BoOe0j~#vbE_ zGdh>L>*<6VbNk%q^{n-;ZyCg8RljS5yyOJaL{=(&ht&R*c~OHmSD8#}g@ zY`J-e7@*hyh8Sr#>iptU8z-P9 z5V;6`+e+*7`ve{_rF5Tqw=w&yWBa96*^oX*NN8~(dbFYuR7%363r4;Wl+meGy&{Wa z2M;iLJ>&O{o{yCxNPXhIr4FFXfGZX+bTLh4fM zI{WlpV{G#oQ^wu_a$~o4tw7#~HnQZIC3>5a57_YU;T(d>X+@VZ+qt!dcJMs~&_IyO zL*-xTA@}!@a`8$7g#~fMJ!@wMesd1ldT?R^?tSgue{wwh_QXF3Y>qDel>s@2VC&8q zy*#e(BBmUOIYJK9aNLLVLo%_4z;cE^1hRV7mj9&arp_9^zG3Y-dQ4`XEx;;g-cPOi z=R&1SVU)I2#@QS)UJW&6BcTJ}IqLDD$1EL!%9&!tl7wOe$?)5d!9(PncF6P&RGr_) zl;K9+bOJktsI&L*rCg#~i>^IYaMB(%I0LEFxo2m$8AV1GKDBtHr)5o#C(y5mG78HK zrxPqrM@nketD(?Q&?=R<5^4y3Cnn-`7g?F$b2% z8iNQ|B&8S_^APWUgp|_6Y==B9#tO9oCU@K&pkO(n;!%H08%9hScN&h`reSUxEtQ2I zHU!0W$IJP+tonUWDX9Qlpr5&B4JIz)jqeDrN3%N*Ka%)OQE(bmzuUay!z&GQg;NK-DKtkgJESPsEhc3M+9By~EnE6$O<7HV?nT z8b;*U!&gu#;};aXz~=T2JQqF?-j7KMu~_5v`?k|ZN=P@{*$(x2!gBnCA|+@haMS7K z@Wb=r!!tOPJg+a1|yEbzJLX_oV_w);qF7f!x0OFwOvM%HbVD$ZT-gOC+? zM3kaC6rc?UyMa8w~j6BQ;Y4=kr5u(D<6OR z_V*MtcdUCbgUWqWl-)Zktt%l$p^uLEN0QXtSwuijcbwr}db_pPImVKhZhu6SB5E3@ zM!k(_sN4xSe(B7{#^9RO`GMrVq}=#0%B&xmL7PCx=eRzqE+0C}bKg>Y;u?-owO*KS z(FrNmrx=?wwp8t_De&rR+gf`ae zwitcHdbJ>SvlgWA@yL}aJrv}C6BC6)_x0)ZHbBc6O0=M!z8|*+8BhOYfTOsc%^Qqv z%oVoufN&>F3Fu(}^^tO6&^}*`9%ROI5EmAv19PM7mH5vCE`86)0J~5DW^?BOK*Fdb zu1vdDFBLiS5m82)N#_;tIGv5I)>^<*P;7Up8+Zj6uS}E6s`9(GK23 zBd!i#-`n?$-q$*2vv4JQ5vrjx>OY) zx4!1qBc>ESFbZ-&{k*^gm|WDO>%3a4Tk&VVp9DitIU@w)IEwG;1}eAjYT7FZ?7ycF%)Y|ipmd1|!^WU2(HgfpR{jttMocNwM7Bf*aFX86y3C~V3T3ku&LiV>#Q&CZ zp2j)8PrJT1g`{ot=v*a)6xsoNdIpuFp~5I_S_aZ&4JQb}@piiLrknO_w&8mUIVi~6 zGaM=|n7|gJy0Lh2#^~U}uPZ3T^!JQ&J~uM<4sSU<;7%J*VU|AoXr?kBQm7x_QzlhW ze+!T%U5b|PWK!$1N@$3Q&KDfdS*I@Gz8!uu?F%Gp523g@5s@_dO8LT67(lPQYkCKO={*`f^;h~nIG_LI; z2gmz(yts=&jJfs$vHU#$%xJD471T1qmd3dqMvNDHhLJr(tn0mf8BMVR@J&k<6x0bn zA7|+pT=B(-IK#3w*}4oMJK3d_~yZjZt-Uq6YG?<|Yjz#FNh z;}C)mAQJ=<*| z{)`zRmzEC|%1a77rpbaiLRc_5rJU3*S)ZRFHo+mZBxxeB&<49Y*13#~6V|2Ie0kjX z8DY{hEt{rNot+O2v{lL0SfZJb7M?Rop)-o}&dmazL7 z0a$DdUFuu`bQqYW9b&}fX;ONscDr{Ws`i?@PpUtzHFatNmK%92GoeZKMqYkCBl0Wa z#n}lMb6G!g!)K=1s^C;D7s0ss@vjhpm$nJy0PqAH_#|Dmx8v!S!?PLl;hD%H7rS=dpdxh~=ff5r$E_%tOicj&Yl_N$U=ld5L`NP&4?AbChzdD*1Z zij6(NH!Bcl19T~p)A1*~iyw$-E0^kSJR|=4+jL&)3Sw|reX`5YTuxI^TX_ac(Nq`+ zpu!ri1iG+yhp+5s-!jrMZROZ2Y}TuSzNIz!9I#Hrm!+i;KDyWxlDMB<7}kAUYXhvz z&2^Z;)?F|!?|y;fF|rqXY}U@J`XC8!_R*9wPE$uy(i zARcQG?@mm&s=f$FV7OY^tO&cZ5?5ax>)Qcd2d%mUmXMC0o{x_u!v4W|uel4zI)i(X zQ{*x(dAgW}AIB%`BxMf#TxJ0}K?DY6XJGVO)l*2nPs#q0kqU^X4KVb*l6OwCbnbo) zZzhHGL*#)I)fU37<;2!k=CWM9&qscqORNj&_QAiuXBGpOs@o|6VoMh=sdRjT%liW! zfq1b*-ZKgoRjq?J0WBrZk&QIWh3nrN6p>yn#naFRWZ5=AW$vb@0yc5u-1~TcxF0*F z@^KabU6av$?9Zz*Tf5j+EjoQ1$;GG;n@({}Jc3gK8-T;Ez;w*Y#(=-`qUiF7;023Q z(wY`xNAjAi0_>zlFKK|4FYfyh@<^5zuqE4JwQ@E-g(H_LF5tPxxw!8~%wfttg`s1G zvd~MezK*lS_3HsHrZxIjXa$4!L!E*~>LBZ+5r;IObmecs+Ex&&YnQN*Cf0ZY@ z1oI30674MYv@|s9)usqE0O%%GaoqruwhLeBI4>|TIPtAb>+$_Z#NI7kUXIz@_Tk=~ zdQGHdXFChj{L+f}h?z;dh+WOaaHiU9-A2iC)K%L)X^~yL)At`Cd*|+nnz#tpZo->~ z7qq5wRMWXol}AXX5a^Z#_uq9Mafav&94TNpI7{Hmi+JxN$cqD&>`l{lGZ%Zzv(kWH z@&PDYZNJa%JRTu7wJ}ON6%mfJW%EKB{O1(LRXHwYzK@R}?38=K+16b%x1MD60-o7D z6)lM`x#!16#Os*Q%m}%C97>(p>ihWnD@1j9CZK`kCA0!W4)4U3a!Zcvv}(B^ zx_@FkL9J_^Q`&MV{p{yyckWd)nC3c{uAj$0F<_i@WtRj)l+9V-6NqW9yz&>Ke*;y7Z zc^+yH8AxtrAJa|0#2$HWuf5RSdt2{2M?NC>xKIUi(tQ{_ zB>^W**S*ly8t}Nvdq?>Z#K*nDkbDM&Pte$sQ^o$B+J>!ex1EdO<4j<5#iwv{?XYXo zN&t0BeF_RZ*UhE~PUkxCr-&>_p~iCmOk3xbH^{AFpYQR5Ky6^isy5b~fA- z=UQG`DmR-V_U^C_o~{l=xpy8culEcA@TG;|aQnSLQH{vrg9b{>D9LNI7f~wYlh<7U;4M77E#?KrA;NX>v!Dj42-UkQ^!3bA{w z{OwP@*`H5)Mx3Vv z@{RTAr4leWxfh=<{M_oYwbSL^{U@ZUX3(juFs8EtoZ#Y(F@cv#Bc^ew+Ijxx<9{Nm zFWD#Fds1$8S0_mM$gE9hb1TG`uJY#}Aya*SBwcFglN~`S2xmm-iU5YQCKO#dmA_ z#O9d|!-=+1uw7bHT6VO}QqLed=Y4i3Y1&%LbWgwn#pVfP`vA``7KN~J{4K#3 zbs65^o^hgeGAFA(GLGL9D3}yslk%xfy9L~d;F@G=5g<(7bXvI`0FOX$zwf^zl3;~- zS{_x;K4&Ecy<1}%85~qj7p1`G-yw8mup#)D{wlbn1*9u3mXI4l%9iu~{pqh6BZ}*D zxBYF$rJvK>X(n)V(=z0cb$Ray{+cmW*n~6Q7g*(*BbyHtse6v(-B4gr?Xpt)@6U)M zWv+b*7~ZC(dT{G{8)f@oU?bTVR{qylgh{)l)GB;YNz^A?6+CA(m&arCs`a-feeQ1& zPxeOen*FHxG#G!^JU)(8vox)JUS3&0zkjWef=4SA1TS+16qo9%GgU;r(ICTjzV}cs zqaql>OIwO_6<1isCu#d=f!f;YIPI62h;G%lh_x!&yZl62XLzQO9o?<$vl>%PJHH3N zZdHitBO%ri7RxJAN+I___u>5P==K3Abu%KI4e`4MB3 z6dKuCXRXP4F?<5Z0{5vPo#VpsJ|jHmk(QG`xE@zlsGbE`3gtC-jOVay{=I3WnHybZ6ainZb$Ii8Q{$Q6hPw`n~?@{n)jC3bsX=Xdx zVF5UK^9e}sQKR-o&2Ap*pBQJ5Y*`bRrao{CfOwSw$!lrD%A);#p(4~SRyW|wEXk*C zPbD`9I2eADgs_P34Vn=T2`8=61%3$Fq!B4~DSagu%tj!-jL(2cA#Aw$U`-k>2Jgvo zpLmj|xQ7znmmv&aGekSZ$HR0Q!XPm|c;O^5Zo2oN(Js&BU-Qq>BHlRhy9|Q9*~c3I zKbgsC2c*+=mBxFb0HbOSsW)D&0UA(Ree2rYdq%P;;ActaGV%aMQN&7hF5m^)*_-Z} zu|CWjd&LZ8pG_UQ$uONHOmxe9a^o;Q22CogEltISpaCp94i@nw2 zhyPrXzafI&E|&nj^qO-!ZKuHsyy|&L8vH`!;o1g8raIkBJt=fCL zz?2xVi;_y&jU3SFuEY2>X(aESeKh!`^&m#g+jM&s){u#t2L$EPDbhM%C&*pDbZC49 zMTl<*R>2Fosv6C0y6eN1y0m3`C3IMK_9SwAK5tU;}`F*`ZkmmWJ;rX1= zs*g)wyW}jwN(q$aMzm6*cKCIqPP6f;4 z(ip~M(niVv4^+lQM&y@S5uw^UI?q(s@=O8){mnh89Q=gvcoFl1S>L{esCfCjtIbW* zhDWV!^6B1mmRCu6@xI1HH!GywvuZJNA)3>{-iO=7z@!FbAzN|eto?9z;Qh!x|J z$m`Oj(l{k+AEZt1pzznNjMz%mu{KF=#{~ukKtvWmorQp@S}qN%|Mg=LOUB2Q1!l9c zav6hh($?|^f{g3AFY^Naf5{>+YaU?y28_6E2@V_8qy(4m8neIY`9mBmXBTw`Pn+GV z2Z0jLp(#GvYnQ%$(~(8Qa8Oyw_{1Ba<{DH|^B&vG)L1ShDE~Dqq^@62&#h5sS9sOF z;4EWF@3`m)9sfYS&hAq%n zE&?K{>&mr5pw9G%FA`Pn_qF6>n#&Ml_%C3KdQIa5;hZzt^cry-^o?zFK~5iq)RXJ1 z*2|C~H!Eb6G|mu0wloFjekt+M-af{87;tpEl8z{Z0~fISa6&t9s;GEnzo)*W?`r36 zR!oDt0oRf*5^e@?X_4DYefs#RGJ8WM?%%kBApo_kdR!(D9ux}%PSk<7fC7u+u=l$Y4LR*g z^Ej5h^L|m9s~j4uRAFJpRs0=?74cxlKH1%T|2ZxT;hiIx&zq>85Naa^^+g7-9K_v!(x=j zjc3EU2lh*FoTdR0Pi$y=>3DynFq!EguR2y4%}&|aG!SF_Mmy>-9t1fl^BxZpQAbd5 z%M6Ez)qvN*9~ySCzjA5+_(uvmCSpLQ-Kzwa`)b{i9Yv5=HS}s9Mx_kjwO(h)uWJh- zXyeLl(`qdqPRc_>^y9Y-@Z`&C9lZ;vFwAQe2#P{}CiF0-JfiP!KQhXl{GOOT7*iyb zJG)0(s^5L<=|^6H?zbN)^FM9&38HchsGtI>lo$+wf8mJ0-XD4F6wMhd&@q--W4>P$ zg|;E3S8J-$AMG_CKQlHCPDo+PiqOUY2kX)--6x0wkipAc{@f}0m@xsVd%2A+V|_$v z?n6KBh=h{^(`vk2_Y_Aty;Z|*URls z&(JHda;B|5XN#d8_)yQ?U}noIN@| zr%{)jGGf+kkLk$|IG$Bmbz9%IJlZ19E?}EcrQp{(=nS=orhizKLhuHB)C4$~ed}%8 zeV1l63Se5C4!SzsWfs}@hOM`AQ$@f+maD&We4C;a~FGeu^64i_1%#|t{bOQm?A!v48b z_4P<+rYJsz%9?eJ;SiM^Jh&98Hy;654`X&g;$f&y4Qm z9xqTQ`Z26haVOCw)1N8r$ujKj(7BK^-D2eR_FfN|6gc{t4>VpUWnbLVXEBsA~Yc zh$?l4)I_TjocLi;N`|#m_yYC|FxU1`$B{YbaNANeo;jv^48PqEX7?*6J1*mnZfyvi5q(V-Br|w= zh(yzC?^2G_*J#A19JD-SiwveLwssi*kRI$HrDQwWRztzz0;}*L<4fCm!Pk$?@(_oH zNhxBYMSKC594|5XUMLVj48Cmm!tO5@o|1NIy_oL{ShwPJvvC`vR$=L^T>Q08|H@!? z9h}8_RnZGPew)u3&9p;j+`v~p1vX_My5VL(0cWY1GJ(}ioU9RYZ(l!t8kOM-3=~t2 z$_W|Kp*9sjSXYziFrmk!%a0T(Sezc9CG8+mf=hS}Xj~`vM!f0D%cPHtWulJ%^mggT zN@eVuI2XW#x#m3bNMypMj7cpQ%m879DTZ0B+d$3N1svuWY=MjUFe)XJ8MB)in8XQO zyu{o68i>fX<9zY6yx?R1mQ%GhaR0rEuHw_c=z`!$IWdZ$^W)~_2pg8@LLd-eT(+2u z6v?M*>x2Zk(MuC6N1irxV7DIb<{G_jKHvg;6`8jH9XwJ!AODlmh%l)i=a4LFh$cmN z^q9VP7(lp}M=tXtBf0>4!wHmw!`++UXD3D|c0lwxqYmo-Hz_A=xaNwM8vybs1z~f9 z;WNt@JAZND&z-SKYi$A*Sle##L4M$9d(WJSL1vQHG$oAv~X_LU4b$i73tz-S9jab-TPGeX2?Y4FM8C~r@)nHxBSX7B z)W*5WinS7sg8wVvEMPQ%Q~ikz^w)ngjOvq)Z}7YgCTuwE#yIKI4_0fwL`FXKGiB6H zqze7s#acqmmq9pZ*`3-1Y0w9yf>9~8M(m~QiFDyPk#~&-jy=n&Sgh6`>EBOH!7N@{ z48aclZ1y>N+3UDRmkVqv4_VmHj0ac?>|`Nuau%>0hq4=tLzofnWj=B~pZ4oN885I7 zQ|dgc#BheKN*9=FVx{UK-Y|l6UBJX3Fo?t=t&Jx@m0e`a z7$Dr2FKRL3@o7_vmhW`p0}$6qT@Bu#-VK&OI9dpY&xJ~9Ha`@%4?hmYoUe+kI}vZ% zl4{nT>@($UQKGS2Y@No4Fg6_E36N7KtDa{RPLe$KJ4i;0fje{>upE{Q9^4pqK4)2c z{`kn)JX|n2tTIW#u1ctl7d?Y+v{%24N)ek>yP@WVyC-hfnv7$Y#@A@6dtNv1A1S@m zbxP{hE0W@w+sFyoKU-z=q^m0f!QVq)Omqq7RTwMu>10iSuDs0>2vGyz!R z$whCS00VpA(3|qca_!e^_2)lR-eITAXv`H}eXeMEjkwZ=7e92{3zDaB^rJds@CP75 zD`FHXs$64=%o+QfBA=1(PiGP3B3|%7u{Elu#_ZU9_ zaCd2LR^YwX&#W&D^?OPhSSlBs=DTY2PaURK#`0k3HAdvVQm(&ij_ROpn6;N#2+Rhe zs=X}cO-mJr?d3Rs*OY9AJ1{RW`CK$Fyt-~NW`k?DQJ>x%Yn7tI7NQSo4iEhfi4J&3ovU|s;{cVuf^g#sUxnP=m)@Jlc-S7=Qf69Zb>nf@7M;515{`S>}n;1ZKliTfO5O$2~5>&S85|FAHPct>9?+7=yL8W=j_x^@e8H?2b z^Wy1o;T{?ta*f3P1jH)$z9v-vZC1u=t#Y?oA7A1S6*zBwO&wTUeHxDaH_Xa`GpvZx zt*?qLtA4;Fz~GI?1ejU;l4|@iEW>LtRrvGKwHA&c?7L|L{R&y&gNyl{GoJ%#Rs&Fw zyAKd)apx%^23iY6?Qr=9{KI;sgv2E=>Oj5%^u!GqY7N{FNN0oBzp^o33zj0%jX$32 zZGonG47{;A;9Ey4y~t^=+^swz94hPFEosRrMW$;J;E9j1-3}#(V(Ftg)g$^fp=7WHp)Jb6^=E+sZ+>Oo8*;qcR@wokMxuK{1G3b_4E``4TDnKL?h@$nDN0tWbeGlj}$z(?6R$W&Mg%SW%Dq>)&^8`Gx}_;3L~FY8k1G(UAwDWj1_ z2mag5|Hy$i(T%x7x}~>hvImT&7%PoGO3ZTo#)(gfihI!7HSR2@jiFEQfcxxa=JfKP|fn)`Px(pZTKZHj!0QbblJ$WV&?ahXR%5l2WcZF zU4vfOm{ER#o#b9le<{Cx{_$rDEERaFJ8BDMb``ofQoi~)0IO183zZ_#b2=bR<>syv zF0@5I%l6*CT5$adNmDd>X2E4sRsv9nq{BQFh+!xwtYR-;J~T(Rfcb{1k|XBWMMNYp zvbhSVnUd;D$@4R(5TskXg$qD2>GD!Q5M^r2+l5nob=`fY)IMstaOS=5P~@pS(jem$ zVt6V1@Y%fe>pv+|NL>1kn-4hE#*AnqjlUOLAPQT~Q9wX+!chl#h zJEf(2jp`#j0Lvu<0i0`r!N;63vzI#ie^QzztKAhvqPNLLgribDMg~r!(5-y<@r=Ho zCM5)DK#>=i9ySb1WQPSrp1QsiVgH+=^gmk#|5QM@m}eT&O0`jxJ}s=v(z_!9IPeKHs-;L%{IZ zGYt$O@sL#_S&T?3-~|*srsk7r=YY)}e>aIzTH&=FB_ezqH+eSzsOcXiQO&YBU7j1M z)c)DSzt;ZOUlFY3E^gwih}UBeczH5P!g^|)xtZ(dco`!QkO0M%`^ERj+{wN{)4eS# zwka$2b7Ra`h$u%dm(y%_O_gaGc*#=6kM6eE%Ko!AeMN`{U1tITKjC7~?lv~QLunmR z6c}&*{386dLlit)y&3U(bsUK+{JaXj!wp!z=g9hVbHLa35ThzmT^7WEl6|DI@8Y9= zstR|~@z4o@QNR7yKSO*RH>VZZ1Pr|!Fv}dUaPGOZrbnIoZ>u7piXZ{&^qm_b)M#LO z-D<1byCRxCc4U8@5CPphuLFK7kP2&Qun#HtZke(+*Wo^F3K3z=Hq%I>sxG9uLliuU zXTKG&${ue$U*~^ggoaz%tEEaYj(I3-CU>->zDVsJVbe~Cq@W=HtOF`lMj0XqS~eB_ zRDoFhJT@r8C=b!1;+FMWjLjP$biL|Ekl@oM=x4o;Xl^G&Agc=3JAY&a&8RV4tB`57 za_4T3=I1Z_E#&%SC8U`$Zr$m?z*2x#wy=Te?)s=Iz^IVxvx>|zS#)H(I8Zu^$uewE zsLr20^;^jGosJZ|&u8*pvKBxW^>N@>TIR|>1M@HcXT&uA66exeiXQr@HhZ7*tlqOE zB*F5)2)|p5Ec23-+9Xp4v%1?6#}Unw1H+g;T6tkq$X*0Ofpcn+jDWSJ=8wC>!SQQ7 zKNG!>;Wnz(&M^@GIidGYVjxlws#PAs22?Xc=HGIu6CY>ME+ax3skDt)Y~a%SqJ5N#lWmnrRGQi#B) za|h>^YkNzR>Q>dQ%(2=ayGK|J4zbBEI@M;bmojlz2)oA2$N(s zuwQ5Y14#Miex0^czj-@LW*`_+gegjrVA+;OhF{=*6|<3udK(06dDy#YuSBx zp}4nt0&6LI`#|oi=j6s0mzPn0mXHqlmOS4^2nHwX3C}j^?^_UC!`YXbtI&N=B5hBfs6QXDzfH~r(=VFf~1YdvsE257EP?rl` z2gk{^a5rz_TA(G|X|eqAx)Kwha)aA^gpYAgeQ|9tOskm;l#5&*Hbt1UHt;R6@5SY{ zNwM!P2o9_bQKbE4QiMCfaoBD&%Axi##a*hlVHYQ~xhe2vQ-nJeT+%t#)~2{{?VV}4 zJ4gMvcIUyP{)#EOz@_s&y#bhTmw09a?y)qfVf$K}Mw>#iOKlyO1sFA|;b1lw6Zoat znihSmaDq`GPVT#a6u_roMoL^H;mCeP;cD|GWd9W*1qr8~-LBl#3s(|ZZ^XY9@Dm|o zJR(6%v&urUOPY1@%WGpgKSI_whI_q_btM1(=bsTGx&rF7@!9W_`?*~v$V+K@VHv2* zL!5^;Mbs6KdZ$X}%{Uz^Tn3a^G3u>V9rp8UG>wYr!+?8N1G$?DVz=%*rWsIW-@aUQ z{fz4V9nuZi`8rT$@{{0IDR-ti<)jV;KK19^@*Qz=bGCWUIqb(UuZPkz{kV+8)mM+E zhwl|q#FOTw0T}eW7g8PNO~=kQIvarHWm1UXjDg94+W~;v64|!!t&KjBl>zS_2oolS zRHe3CYJ=@X(#%e`u3D!r1Oa<>($S`fyF0h>F&to^aq4(VP3*4iQ>IIKjD*sth?ByR zly>$3s$0sAb^vfDz1cX#CqJWtk5Lib+GCX3YlcY&*aXQ};O2R073D74pJ4&5iqQDp zW%bq%j;vJxCouB9_pQCCmoAUx?=&i;>rm$38y>g2?wjY{a{9@hd%OA|Q#2|98#vX^ z`6PGy0jmN=fb-XF!o?f+Q7)rV5k6(WP#l?U_#tFqOB{pCh@Oa?vpqmda2Hz`0$sULR9L4>%bdpWP^ACXGUMWr`JWL8v7L|IpH$SfV zw5AA{1-z==HuZS$>9OyZQEcru~e5zeARP9Do5cL{3D3 ztg~$e@vJ)44F}~v^Wg6l;oe|Ndy190fHF@GMxi$m?qqNLr+t|~nh)9sZgAukz*8vz# z-LRaJHSWf|Hs%W&eE$}rm)Q~$uy7Z(vO~lW4C>XLCh#48?`c$sHcBpMr6DOB7=zwY z=FWPLY_?}Th68C-$OL#fW>&a5-1Q(VA%<%Q>yz6-^Il09MumW2(7GwC+usc`bLC1_ z?&H~@5n}(3ql$2KHi%6=*-;4siT57-uMT&s<&N{>3$QA}*PHX9J`Z)Ug;^?c9<^Hl zh?{tRD64&}iV^rosy$0Dp+~DiWJO`Ya)DFdQ|D*%2FC}jB4FJypYij5 zevde+Hs{H?j^=*wXH+z-gfD!^wpTCr_qic63o^cZFP;9it`ti!jxpu+t# zg4XCZcC#qR)tI9=$2>eE$+!>j!3P0^Q85MDCVW#UZ6i?GIK@9r(|fEv&to{}`}`Ks z%PriyQ8v&NN>+IU*pO zCbI9e30G&47u7LCooI9mg)ixt;UT-eU#iy za86kt8ulNfB91B*1ccELsH|`H;O?4dO(J|blgD%wtqLiH)WapGn<%B14M+D35SsA$ z9k~7zP5luPKLI!q#naFt7o(c|0M)a?_5f$jQpz{^T{(S|>6L~R>?`E99{>IcbquFL%mjX?eM zeIHZBFe-##Apry5jWz%{YcDQ+jk9t=bnmX?d4Dks3m%04punKY8c3bxj&@znE(l%y zc~t+2NHw?Eb?rxP<$&BhW6Bt;v8~z1D=7T&pOBYW6Ci|Ys(>!pujBgg2Xi}B^dEbD zX;e(jJzc8+E&Z~itL~I<{XE37M)@j_!l)4LP+9_YSiMU+vu*J8eR~naczl)*Wjh)b zk!ad9j;E4`Hqbwi(fbjzso<$xK=3dsB1(;Yj59L$&OYm4IX|mAvDGEvyL{AZ&##cs zsm9s8SvC-;-ja`5-i^(=M`7ZNI($XMgQ}E5k<1-3US><|%IkL~kWr2hJZ*}I2h%8C zgL_(5>dxh=*g@jS`0~blBA2g_c+jl4PGfJUtCumgB2JY$yWRmB_%td;(Y4n(S&XUN z;{?j!$Syb{+CYusp6cynZs9HqxffPARp{eA6pReMdm4#KC7VljMR!18cZC z>uQKtqu4X;eTTGfz|F_8tbMF;NlMi=!odJ=NPFi;O*>?%_Sm^sd}0cpUVIs5d-W|& zumCFhpnM)OK(N*2$^=qb@T1BBqHg5~La2FvlpZ}~(ju?Y*ad$!C6UC+0H}jMF?b^3 zJlx4crU&{>ZqsVrO)Q-y&DPG~Slz*xA96piDWpLOG{q?ybC(a?6}a%ECfK=M%es$u z4G$^D)a+fl+Tikl)+?9Cb5?cnacaJ*{vNXZ_+(&S&I#a0Yr;{rJG3Ix38MRaVNKW+ zqTZ(9zxdWt@|({!2lxcz>(}~d{nbeVqawT<)Tw9VR&V1tLy@r#C}>N@mF=(gTo@JM z=66)i&ZcF0a&GtlxtIBH;1KcPJVR8-L)iw)+a=Wm&`s{4?F7+_wEUF@G1kjhB>c^^(kWR%tq4dCXps0~f8FvmD>1sdzpjNahgsfX> zW9`Q06``n=Uj+~v731vFL8Lw# zqqqruj)C=9YsO&VyAU735O>e?TxLMETq1+=PX1MUfK5nhJd+>Y2@Wjy5g{x&NFtpiBS3Z&kv z+d7D;OXtLoj-sW%nu0!Nh4jgDKMY8_?M6}qIJ`<(X1-lkT`wd2v0 z9n<6-@}X#FmHgO+^zFYQqC21h@cPA(snoISY8lajy?Li2yuWVnS4eQrUe-B-4H5t~ zfDkjYR}lVnJ_5N6UNSzkvS%6GZ&|781h(S}Tm>fB zUzq(@$dVR{BPeTG$i%tzI%H=)iC&?c(W@RpqavKW>9(9p29#>!BLR>({i=O@2urOXTS=SB)}!3&w!yzHNOaD({vT~um#o)rDyJlY z5NJ61!{zd}b8?)AJN(;x9)SEpDs|#`?^LKI1lYq~9GZX%sg4$21yGR{-A1+(eZs^w5%{L0j>s4uoRT=JnHe9K3A3(-*4Y+1(T+Opb zUt`FNIm4=)T03|=knuUCAZG1N&JqO&u#B-EYKI@IQZx%1j*R3Kp|b5G`A>$Fz3=UF zuUAP1R%L{DaEI7dhTJpR>zQM(+HD|2kjs2*+xTNu&Z4l`X>%7o7&1@&k=~kFG_J=a?goY@ul{JJ_?VS~X9yIzUe!ZUTwCydi#64=Iui9u zYVc!L&gzX=4K(`(ZirUw8&c9Si~;T%D*>oXUr2!E(~`yyZQYMi8IAoEZ2{s4=sk4z0kMWzEM07|&E-|qhE*An zibD5dHjbxC>ux)GzTjw}iEW?1IKPz1ni3=CWnb@o*AWbG-6IMo2hks|mqA#SQaSE2 zoe(ou@6@@~Pj#quKrW~GD*uO3DMLtI&pgI^9yk0pMSq3Rsy+(-{K$Z?Dy2bnv&AI0 zEd)>GyDcRi1sQPW#v{(7r1r5Yk5wsyoB-@FOV>ccn-cmHU=)J;7khMHHJLCg;}&X*tw9po z!iZXs3EaRNEBvI>vuWUCRmR6!F^pmD+1sx;p+vheEv>p6EDg^kVDxB zXb(8_mZdT}I2WJ!I>D43Ju+fhy|n>Kh@>~b0uL>Ao}~rkd)kx&tynkmUp*S^YkO?= zK1)b<=MXG;wC#MXN*Tr#V_v}pm*D6u1de7sEyCBhuWm4ymEu<7O)k8v(gw7OLL>qL z5c8Ih_Ii=7k5wsB2A#aA%xPeBiTK1x>~t1=D{1YZ5lea`UcpgV=N8Q~6^ zjL{x72AGwy0m@DbA!jWUKbKMp5VA(YIQwyV^g@SGDMtu^)pv;3$yqV^!{Dj4_8Q}g z(QNoPW@Vh=UK#`W199qpG@*bYaCCE=HeyWaZC6gn8s6GHfv3)=6nUrtEKE}k5tbLk z`k0lX(AGiYcPJ!^htOXcxB;YgduT`9_c5k?tq@a={>Kn+m07R5bBs*fz1-zhME+Qn z!V1mCWK&yxufjnnTB%pLsm}45t5s-HP}ba2-;kRjE}E9smRpThmG7YT;|TVM$oD}#FV%Aa++^#vMkMr(v~tM~v^4poDfqu-R`75saWdC>vj! zO1jRg{&;hWS7t>0_R!FAjfeWxdErM42kYAZ;s{eN;W|o}B%ZuhyVjy#d*a&x{|(pI zwwf?2;}%xgi$%>^1%$B+mNV*+wY4)S_1{>P;#uZ9paJM$xxg{;0%x)iM?o*7JRSa5 zN^)KlszWj(sQ0ty)iQ!!oU)K2pTYfCN_K7yxO4B&?f?NR(bUJ_UmkVHv+4C-5>};% zM%8Q1)JQ7Gmf&CgN-y|?j!61y)(*2$+CHx9(NK*GedpVNvQ$B*4S@n*>*?;lauT#o zL-4G1hSW(Z#<-S6lpKe;4?SVuuapc8PdA(1*JOd)0~^D%JAk%^gM9skzvrarab+{` z%R&V8Ru{e$SERw-0l5Cg;Zt%noC#F4YQujG2Bzh5JVn<#I$Z9V41XmhY0-vs2z*RC z)x&zHPazif0AAS%UFAi{Lof;v4F8K!`K1hq|HqVvuQ3)YKwm?iIec*| zcdIvCtj}?u-zn!cZh|M@vgWOAo>mpVYmHW|GLF60m->&KLUNR<8chy0%oCft+XaD* zMkmtN=6^*D&bEs+71@ zSXvjY1Y}z4-rWkt3wZ&|ny>vR{dQ&dT84}24v@zUfZ9NmYfGho9G7W@2CUn!J=ZcOIv zb_<+n0cGJz7Ep{a3VV4a!>?Z{PPL+J6k9cfL|pDtX4bKUHtc+DMSxW~&*BJ6go_4t zx<@H{8axS@VT<~lF9m!5`X>jH_OpBIv=BAbcL4ULSMjN0K9paO^y{CT2TYHdfZFE{ zVk+Q-rp1=++LiR#{`>WBMsjvv#<37nKPs7>kbeY((2s=r@zbV^H*s5xoI<7gIuzU8 zG~RdtPn@?^ez|&vR+uRA9SC6o{VJOe{s6|)5VShd&P)Hwe`buBaA}cFb~Iz|c&}_B zy2uq6>)iTmIsBP3V-n2^Y&gT{k^yH1U&cRd#D;MZKxDXjp!KrqaNvfwQ7I?b$&u{90<}pjnHxxffTK&- ztmXYe0kd+#Cy-0&f)r!tHt$si0@vi&^8`-K5x&Iu2OZ671{c>%UR}L&L{u*4IV2yr(gP2=bYsxWBzW^Ubd$#87Xa zc3sM82ba-j?8jtUytc^YS785@1R3Rgu6z6RRa8 zDns?zi2VD%In`NTCUh0F@5rEo$Te{T;q2bjUkhttRf?a}x^ik=V1l5f3g8KfL)sO& zn)`f_uAKN;!2HUHMcRegc@+Ew6*~R;1}c3$DgAF}^a~&d3V6JA!?BHyuhW=9=5+9u zzF%bz7?o3>y^H6)$jt2yI5^O90agZIy`PDbw^=Di=>5v5u~cG8sH9ko58^mObIRL% z1gmc=qnJjUaOsF+LBT8~-sjCejbaPn_@x>BEl0)zf%__M-v$^i3ecdR!GOxqp?n`v z;oD7-m)Z@;E*_BVoYTwZTf}jGK%{NH#7@7Z6heuk3R8Mt1|W)XE+^K9kpYOV#*f$B zZ#k9FQA+@I+_w;}zFzv++Tx$J`g%Phg;6Pmg%xiPN8CrRb5joiT_hO5sS^kLwkpHX z@v+v9_Oup)k1Hn6!A$ww72{_25!1t}3|EIOy4NOmn!G?tZ*ea%*jRz9&I753RVkYs z`Yn5VG}||G;oEG{Z7MwY6rzah_Aeio6Kl}d>WN9NOb_H zqTSJas-9UiRJFk(X6#pUJjMw9&odzD^^rKc;ENm|I2vk<_7PU0Y*?Kow|s@B8el`dF1x4_f6o@GldRaHtAs8K=7W)dkG(NHbwp zisZ4Ln4@&W^Ib$Znos7AQr@z)UTv2jt5OCKPK_Fw8K2(vZt<#wgB-1#vg@n*nbCuG zM$3fgpoxIe~_P0Lplwgs+uTqZ*fS(V9(TU8;(l$E|l#oi?8~rL+nu^2vv_E66#^&L=09w`+U@9xxo7_5@AV!4B$L2?Y>W^6|s?ZuL+JnZT z6N{Ro?ztIBuq54$opNF##IHkC$m@W7B?2#Fogt|BEe;>)C*GJo4KU5!g;W2=Hr za5N1GSuf|+S@o5&LD~$5*EklY&~(4i6&@1p%3IoBe5VXIp8@f9MY?Mt?hVAS&W&e4 z=_{m8UpA%a1D+dd)rI&o>J9InC+Y~ejNr{L8Mm*KA-q7bcWRAVyKXNQ{i)|3LDm_k z-~GCFCr5VyhoyVU3~96i_I~>|TD6}Y>u(;-?xhL01DkU-p>#LIYz zx51_qOog9zrHQcFVMh$aS0q58ZX3V+s#}LuDXRw#j!j2&3mQ-qfddxav5sd%pT`S+ z-W*g_06qO07=#gn3YHdN^qxJdU3sY@ecg=qd1410z9uCIU#KHdNC+S(fTlht+rEzRJgXreNADQ`6)mqIHqYtculqg4p{5f+ z6MSc_RRKC#XFF?cc>6l90x^tAd0e|lFbL-qI)GY0MxF1)$D1Q0kDsUaJ;SAz9yz0M z)Toj0Hhz3F7j>f4QIE$(Z%8wiryIY44l3Zmd^79+`DI?b z&9~ge7t)K@L34XZBh7DT)nZKZqh@_QcU17(UlFcX$1;$L0DnM$zwSKS)oY@sZ#+EU zs&aPk-d50GA)Z$if9ZH8ua#w-O6UIKr77M#z*$~F_$$Qm3NNnPd=I(RwHr?z`aWl9 zzdEO9m5HE2CU82E2nY&bQ{Dm_TLhhEACOK!``%9C~Ht&gLR48q$ zR&ONX8yUmDBiI$fIg|EMO7w#Ina9STD*?hhw<3JP3i08}L(5KM&Yqu;!)R;rPUBoG zu-~7=6|(2~fbI|+uiAl-cJ$_27n+WZO?j<9i7TQs*h|(b_%Ownc4;FKfxeU})wZv< z3O{j$biwj?DXQSDwQ+OHl*quF1?-~|pP%*-NuPvA?bPSUU^YgO)d`Y!8yo-HBk$j0 zBmlMM`wqCnQK3P~q$uIbZF3mz{=rg=(ZfB!zi4~(Yp)5#9`v-mv`@G4w)u$_lJ29A zvF9+}y|}mMmZZxqpcXSF{n}R^#MeYa0S4yAwGSLd8b-y_LJH)Lvvu?_f z^lpB<(q_kGpiQT>X*}$N6*1#Q37V}aqqB0)Dy@`0;|U;!2XEDx==c_a8PdnCdaTy_ z>ttQo8X(qcl^pPSDfKf(6$-7m6(n}TTI)qG9+;LZ;}K4H1U}@{?+V)8wg&1h1<8G^ zfHmv3p>_4?70-|pzq9CHNPCt>?U0HTn%1k(YYG(AO{a)r0GM*Qxo_`tO}P|2uC0^y zzOvLa+6j?Yd1K~e1GIgnW`ovueYUNYwqWAP(|?OO-3DsfBD&~yr*DDZ0P%60xuwP- zem|&?vyfiPhuu^|PuU$GL%vt6LCf29R{R!p;@)%~WpP@iWV?g&Cd)eNI(LS=sljhS z=j~Pdk(Y+byhG1OW0YAR)%^2w2b;eIown~W7gijxF?zAGW)8VLf-g(d9T55zK>};9 z0KjwV0IYh?GOANyuD?o;Z8xhzs)CIvz;mT9HQ-HPkChtOPc9|f{?sV7x{1t-FL5$H(q}4J9 zy0Na53%Fp?gMZ`A#v-VY4cTpai_i<=Wu^8@|N26lR`aELIf~|6=h0ID zA276^gf*Ew_fP~C(fzK0y#V=wr}uPUty<^K1je)+_qyL#hzB}I!mVY9Eqf=OLuin# zNae9DzURgivP+yn7(ngl<#DB!(;D!mR$!__*yjcn(vKS!9nlnO0&OWM(IWzmoXVjA zxf@i-m7dGHqOHH0kn*ia0fbrYy!ws~PuM8t>RNlqn=Z3SrAhpg{6SM=+;rygMoSP= z$cD=lgjHWjR3Ob|f+ZtBT6*`}ll%7m6*2`dcsROff<({4JZKf4TH&0f`@IkH*qM z`9!lz2@5Xedh=|QrRu|B4U8&c`6Wqpl>Mq9!#njy4P*-#RDeORH=V$!Lb#0NX9ozX zqK2bl-I*r-%{Yg?eBF;K;!)B1XeOyCBaFB2);;hQ-KrNQIozN^p43%fg3%fo@hl&U zm^y_Dc3cMz9A;1<9+>DfQ7H@p1}PCq@;9 zc8hN}$*4kl%}E0M0^T>;yp`pu-lj=q78U)2H~7C1bwTgg1s_T%?1D?^EwecPp8>K_z_9}&rJyJxdW^Gj7H}N$P+LuU2ZpQAXvC zGAU<7DJUQ(~AWpol$K#_pE4s_+h}Ahf4iR)fiIlX{F8OKVB`gAi*Bjyk zN*G?z3_*CMT&=xo=?8QVjfD+x%cK7b9-!BXL-1W1x;3Rbm2$r*=rr&dsv|E{P;*~h zh=x(+S&W^BqK#krN>016Xtiu>{T>u2uM&i8Bk1meKPw*BkOT??;s=(X6O<+cf4VV+?BP8vYb#yQ z#*;mpA*0R`UOPgq^7imzHW9{2WoxH0o!}+DevRvm(yX~}7i-4sA(WOj-j#tOT;2s6 z`{4;aQ*icNVkz9Ryje0~qwm$?w|RZiZ|E zbKyAUaVvSu214T@aVm55m-eIDQ%UrHnH{rHu+AJg5bpP^-N2&$N;<79qs48yZRO)>4u5?QnVN!ApKb{cQ*Y^;_vOelX1thOY z&sc9YrIql3eQx$H`hIODXUrDdvqAMc_lVu~47w3{B5|6M8z z#b9?E9iga)O7~v!&zEu_Xu&! z{p^}0y$4hWc=hVFL|0t#Zi@V z#xqH3+DE0n{pzQ?i!TJRv}da(5OuSp3567tPe)0-1hV_{a_V~Sj@jT=+QAUuUldn-cucocSIJ22HPH`Aidod^6K(TpD|WwxD9%>{4;MXS&( zs8IfY7V%<=upY+K(0i1AYI}BY;!~6K1Xh!eT+ie8>z^n!JV0HoR0nz=$6=&7(&`=B z_qj2Ja4Jr(5F+f)y^5}vW(gC(GiOzIIQX9sJ*T3pi&Q+KIX1WLvw){h6bLPSy3Z+O z3J_%zxbhWx&-H%LYBD-td97+qo_fpIKOs8@ZFO?G1Y=m=LBFm#ybpoSoV%%{|V{CjZ$2ob>J$cT$@|Yp)*ibu+b-eP$7M|%4k## zZO2dm@;QpQcnJlV1wVF!3ZZ)723g)d3V;rRE=4=~%{(6+R&RVPVh=cjm8YBxkQZU4 zlPMjaY0BK*JLhigx4a#n?-4sbQ`f9$c~sx(K)`3>)4bO>!KSviGxq(*e@9d&QsGt>iuM3l z(#NCpOCL`?t9YkD-y@L9HkG|ESZ`6I0~d?t%lW002Z-_iA5zE=@OwR7#TV=LMgv2W z^{g}l@ob(s!;gp+*EbTHaA~h1ZI0CF;)L3rJBW)nTleF8#PrIms$eSz#ATj5mJRuc zfq@VoJSeAB{7dVnsaSpR6az0x+8oYuR&`O%;ESA;Z6Dcw4IKQ*qZF6F`X z0?*?C8lrT9`a9y?;s0)cB>N6A=&xs|p?GAk&cUPvLEVm!OkvoDx9Fr0E~Oqooh z;j^Bw)z7~}RFT?#t5d=sMd`G0>6CN_$S}B`dTPBt{|+(!0j(>5lXN7Ku1Z-sQ+zbh zVs1LytUv$$7Go&Yv~@hJ1zdmxw>In*eEOZGc$a=qA!B26H2?x4@*xA6{b+QBT;Cm4 zG&#HEpQs`pRw`&G9f@A*uB~R?*R6X!p+sl$E-x{xkp17fK`i}tBRo` zda~l5s6sM}$HMbU8pH~c_1=~9J%{(f)BS_Y3Ylr6Pj9=N2yXVMG?xoKT6(7Usy7Mz zi7F(s@I8v5WLcbQP2+rALlgJxY`FdJ?~oUmI~U=d<;lr&Y`)2h*O+C}u*HojM0L3~ zUbv5@m&G&h@n$N>u|EhZ;!z2f9MCzp5O+@O#$`*gWEGFgl|sih6a0Njk{g4HcvK^2%5qjKNb@&3_hBiLTQ-LRvs*zU1Vi6^t;*Szj_2>x zH&QQnncArZ?QP@#{PFWd&|`p=XZwuvK#E_z6&!xZ8=^~Oxh;@Uh0JLPzOD!a*k!d2 zW}78WGOQ5k!iP*ElPL5P%_X1w zMjj?d=jFB%??nH$KNoSf@`BV0Z|$Q{#2YwWC?|F1ri|!J z0=DD16NQNv(uchqK{HH1Q+MY@|C2u ztfHg~^=JZN)=S2Pyq}3bUUsYM@#NDGRK#XgrYgkF=NK{_$kR{-4t-z+m`kglQz5=P zV)OB`j+Lw%nRH9u6(~kJXvLX+QiT}r+;flOr?U#^XrXs+Mv|3b>jJYo8=#CT#6BVe zp#$bo?7VS?gi-@*Afk2gxEy4~s6sl;6Rfo=tDVuL0JZOl=vI1a#57J+5jDM^mKTpf zGJRL)D0b3pujHC+B~SA_W)G&1kJUH@9y>s2+3z(}_;Qnqw<-HO1m>km=d>i?59xu9 zTA!AhB@S$uH;(%oi#4K3Z5eVB==%ZVD}W0dq=9>mimV#b+2;R572z!06WzG1o}J$6 zSvzfsRMN;5OV7JI`#a`QA)a|#627s-V=T=)O1gx^=Qx`RzhfR$q0Y_(LXb|i-ep#( zJpzc;YZ}+-GQVSzs&9I3jj@4OGC`eEh6~hd*HPWGe+CsYpp=QC9+rQ}qoN3ucX?zZ zcv1pX>_-)HE&`&LcG)1MHYS+Xs-vN*bFh=Y{HQ{F43S4Q;oB9&<{3~+H|pA0SEJFf zA63Y>a6{*BvdZ;5w&{is4}6+#-^cu~Ac)XZ*ur*`C`O?OvS>h}pU z$D}wsm~q*O;~Xci#1ouK`MK;C&=ca02{iCh6%=vh7GtlusqA(4s0Dq;ArHUpKeS!l z&Ym}_y(Qy+F2@+yGip+el2+N8tDnW29>+PMs+u<6Qw7-=*0N!dfnEAx)m3P6OwyLh zfkhGM@#&fUdH!7K^6-4_^x_#KE-AXwHA7s%|DX)Hy}dkj!3BtT>r1k$5`n*dp} zGMyL}|ELj!Q7KP=3khbfBZHM!>7S}WJ=aJ^fYPT?DSA5u=7NpF!Rsw_${0ot<|7Sw zT^|)D-z}#Pb0fz94#%xo+{6}B2P-AntMW_TKjo1|eC><#58ipqP(t$3!f*CWY3okoY4!8{9aNtgRaI2iBNZT8~Poifbuh2T709~g{AQye+ybNEe z*9Q3JDmsREyJN*$$XWay?^19ggrltuB!70~xD8I!#G z?R(0;ZBlf{gdhnJF#ro_I^9qAZ}A>Z{-C`?r(Ai5KwYtZlHx zqbSm^6Clg#4EtV9p|B}u2p=fHU9wpbwgG+ZR$th@QX2P{e9ZT68RssFaZimI3}EOx zx-n__t?+JuC~WATyNT7hxaS8wK-SO3$hk*}X zDGyeqs940Y0|ll!z<YT#B_CbJ7kH43@|wG>K^FLS%nBdx~n|K%4}b08We1q&l_8)d5n6CQUjgbe&2FZF?sSt-{C#+_SCL75&GQD?2;vvl7v>+wF_-E#b0 zi^+`Fb&#utxL|PjAj>?LA@{sqiT+BtCksr#$i+M43yGEMv37`C%qX(+!Y_ZN-2a43 z+3CAdu^sQ(Se#4ib9sG3hVp4tiW2Q<@GA>>w`v1C-C`Fv7sb!Gw+_e$+UK`j zo~16=1z1X#~zlU z4Ls1*pOw~OR*JY{lY1_)ArFgyF^kcWG6>ku{56C9V^zjtO`N1E37z4m*!U*H&< zjx_WdfEQ+^JV5F}Ccc|#i64Rg-_Ptc2_>HKycPfX9Z(-ni1 z&NDTCyZ=p@K~h8K(WE2y%}EupG+t{&`iN`w-*EW3W7bh^fN!=cg)K1t^v;~SQ{8Jn~v@=vS>w`CVAc% zhg~UjB3gbaEg_sx9Y9-oqV zLK+C{t9j^qhvN7Ru?cRch_;tvZ5Wj@OZYQEAg3?h@zH>{x3g@EN>nu1|fO2{JX zSF8)@R$OTNI_e{253k?|zVTnmlW7^9R|VCHas>xNW#IWuhKNPH%Jcr?+xL`o*h_?k zX^lTuMhpK=%lB{qc)Q~_7Aqy~tZv9KpPA!;sI6TqCyMzMjGD)@QYg$yxo(I@h{@+x zEkJ;qJ0MmYK&QUjc_}S@|2u<&@$92g?K|dtw-KH2$kzC`4P1KL3oHNqH6=2@oLO}q z=eZ{=17u)vmQ}mf=MC21UsG<}=?+_Mk7i2?!nyEn#iDZP2DNw_mBMv^7rG6Q)PQ-H zd{w>YsKQ0qF`J*FUXf1ajnYU3XGN}B43m~dd$EXt;Hqo8~bX}^mnO9Xi3McnU_&14f)X#(&lv8wZuGtx+&!MH;o#A^l?M<_kS`t z>GDDU8(frTblcq$(jfrrO&(YnMy0SU23P1YwxLF=(JcFn22Y1$dB`5UjY=5=>9k`A zNBo8@YmFJ?J^EK9o^u}e#$i;#Rjn`0->@o&C!ZPxFoh3@ z!#tIGmp}-ojbZwDCkd-EX1_@pAIdI`VrCd)y|`Z=z@zubs}~o3`tz%7=)NcJF3uP0bVvrXf4>1}T^(DnBAeHDc$7e(E595RN z;er6ahjKK$eoc~p+%GvxRS7Ya2%g>iAVgI=ZO;&QUKVYpFROCaim*;halt{$CpPlP z+RaNJHDqreYvm`!s4cCYc$utfOM!|nkh&m0t6w<}umGb{-fFDPJuGftRDt}8Vd<)e zCZc$y$NW_++v&VbGLTIY*s-zcg$PKB0tIfUTkw zlS7yPuBS;U9;I=Wk7Zf&&{9P6)!l9g9+|2@p03yiiO~(5}&Kh_A2*+ z5#Cp%3ac^}D~801-O>>phQ~vx;q%t#YRzA0JsIShPCmY#7VBpV8r8IYCQHgiz!ffOQ~J?$MQdv4J#@avn7c z|Cp7rTy@!+2oGv@cZfDBt=bXA00-IIdlz%UR$M*;bW$6ua_Ei`qAH?;RHosN&bNQe zO7SjZcQ6USDR_C4fsEt4_h(EhJ#+{^cI5=Fxj4qzvd-Px*tRG-y1-a9!o-76{4^_N zxegc(;-{9{M~PeH!UX`{=K`Z|zrJV)yHcEMiQ1iW>F&X{s=6=VjiRqZ<#E^d)2bAm z=ZQ_*vZH<#UxHDHF`{dy?J)!CX;zAB0YB_`u2fzF8M_lvbn&m!w3quR^ZjX6O5JJ? zF`wB5VYIc~X{{@Jw{d`+&qF^PW~De5HzY*!hSZ}SQHn(ma8{kAuXrMO8I`hub(AuW z->NZpWS6^pLEeeCuVVEX8#D(z)PXQC#vG*yFdyP6umi^>7M1;wg@I8i+ecm$Muh&- z09?L9wwH^~LQdy3p9x0ga8(fbj$mN5+uk(yxz%;y4C>|am=*H_e`3nZl1=dvgNGt! z$*o8`il47D4i|YEm9u@k@C%|6wb`(X8qht2q7YAuy)Ll)-znR7b-IDg-&5_t$A2QM zR?TQAcJN_T#zdqpQ?(6Zvrx+49urz-6&u}bysp&zj}(uJ+ZdALg4Hpv#Ld>4?erFi zMt}W+3ZrsRJ80=5>4%Y1Kr0I0jh~fvqfeF}3c)|EO1Wy7RHxRlf|vrd03!6d=eg^S zD~~eAFe?XERYQm>p)+eS;u6%pz&PU?#o7IplK)78>{I70IDYu;koUr&Yy8Q_(?xVix-IbBk8Ik znwt^HXJ@GmrxHJ`pb)fW!Ra2wDF2w1a_1K`c_JD14g50qQeOpV244mFdIr;^tA;XK z)y|Hf;AM?5YK;Qc%HXJj{5O^>DQ?9WhSjFyG|m{_4P0YPi1V{edgq>`tA=BfNN(w@ zF>UtrYx|UAq0>_DL!SO0vr<&fX-*`+nC=LcDyr1Zo<&aI@jpF*R?bz!p;AXo=d>GH zPzOxvQ7Og%68@wtt~_$X0;PrLUQE&Ll6-ow|up%1@bkG)@VUNLdZ{J2H&s+=*T0V`Mh z{M?v({!noWtCHBN1IMfDkcG^H&{=1}FL3>sV(~)DUve&sP7KzW@N(=|J*9&2D1|Ox zX+-?cI)_y$+M#>}(V$P$+A4@)Beih@)#Gn{jDZcKGNMA0n2vjPoVU$!wbnMbx#0a9 zy!!Q^^X1PR><3%oui-Y{r*w(ZJ59Bf-~dKP{Jb%D649x)R(muixD|NZ zW3(cyN>NoMq2(r*`&g`}(yVZ< zM|aQ<|C&>=2K=U^xec$0=NHT`x7ZZzO?dW~I2D4H&5&zX-O$FbwO(BEV`@tQXF`B`eV>Vn3WS8)~e235F;1}bWNIl z_ZZWTNOAT7C(`?#gX%(lhL7#g5`3GLQ=Gzb%P|i9igQitGzIe0 zcYaEq;~ zby8VF?c`Z6zu&oDV^^!(;M)Z}-kRhj5Uh+p8Xfuj%kOul>F% zPNf~M-Cusc1MtMV!qpRtMbcqbZ5eLnVD&QdDem0C(H$A0SgB&1W2XE_fUg;o6si_I zOkIRgS5|6A%|wJ80sl)3Zi>At5Q?M2(nCT0U;B@FC&>>CRM+YSO9r~f3123VK;}_= z$T4vgX5C3Ma{Mk>sJ?PEa#8283-p&%^M0!64YMx2ea(`qs=3pM=^%T7B@0x=v~p?+ z^w)d8Q)nzwMg~&#q>(m|Cp1P48CDHAddN_De<`Vsq8V&k6u(9qIf&pC^k{tNvMG7RTVQJxCdT3!#62)}d{%#5{d`0Wq>=l}iR{^MW&^S?fReoL>hvsJYtJm464 zRYVBJp>Az}!lr0}^rS7uSF7HCenUt-8pR3ZzSU&iR=g<2YeGxA!Iyh&PwsKP8Z|z@ z``a5x15C0*b3d6a@@mw_b-^g2XyCjEKcAO(kRgy;aF9|p`Y0b)>iq>!9HEXz-*MJz zgG8!v*-QD+{4YOy8h$nEmm4e9TQiP7DI$$oqZlI4Vgw&zzmy+qw(l$T`38V4R&S%^ zB_qeIA0CFohbUOEi1uUM_I;^tSjC2&n@y5z?iGRr0;LvcHyb2t{g|}9!ulJoC5|>l zTE1#R1dO2~fPyG|nq)c)6o4N?%^Qg1*(M>V$wc5oU~e@?v!fXED4Kw!e)6gJZ|F&S zw806^X~Y*qN}+)nREAT?`}AhL_-2Cvqck(2DuI7jNGk7pmY7nn3Hdt zcg4${=g?v15JxP!;O97zZ3b`1>txhhZcooBl{_BsquX=?=_a0Or$+}+d4ul@6|SQYZ&__k>r*FmWm_zB`aFf0;eLgA zQjDF@mH07!q7Tr|4hS``dyXfwpI=w%{U0~1YH_zzz+DQM`hvL19Nl;`b&qnV6LN-C zH;!ML4)AVK6Eih}U5nb*rMudyqn!Bgm)}0!Sgah4HrJeRdmfNj$%{ooe9{6SeIhcy zT6M>$jg1=+RIbe=Di5`EUGV%utF0&ZIUvX=m4t8H722f;8AUlOCH+%tk3PMRiCa{g};D!cCdmxckxl8ZI4a{ZJ3;& zG*tO!)wp3*6zRAoj}{?oIAYG=M=3#RedZ^l7QUnC1)~d7#%8iNr( zsoVJu>^A^(RzUzPi{pYL53rZjEvg@9;~0+ zPd6W54SPen&spR!4TS1Bdi1dbwW^h!6^uftLEaxP9&d0g&{6mpKy+p>QJ?Uy)gcc} z;b8Mg_U)@tSK?u*9sg+oJqB+#!!qUB#cH$3>*(?~Y=ZvtNYt7mrh?|(O(bTXkk{6G zJ*s*4cQ>xo21p-ACmaZ!wl|a(K1DGF(+wXv-N%HSzhPEWo(Y)Fz|_7=W{uEj3y5Vb zd{)kP%&NT%YehD5iXzbwMQf37-d1!iI8lcX^f$~RThULGV~VkqIk263W!*D+vyCIs zf^Xfhsw5E6!di2it~(NxI}~&(3p8~-842-S(qDNgS+J|i09&52C7yFDYoTh2e>sW@ zIQ$K(R$;4}0pe^s$5Ya_y>;#AO1h815c>HFIMmtph=-A?UZE zPqW_8KQVDAZm9?2S&la1sv5)xB^!*q=xy) z<-@K!DMe~+d%*&ET@z<=ilvlG9&urM!c%|u=Z%;+Gy%_BUkK7RL1b_sWmbG$qVVu+ z)QzQr+KMIvoOZ7^!NQJjg`d`k8;GS;G^QHVwNpzF_3?ZeX{?XbnUh<= zs5?sqA>W7PRaAi!U|R|}rLso=#_7fZ&VGf$>%w1|Be{u3@&y51ti<@V&P`8%1-H5) z!juS3K6`KmOCb>FqGdG$>!qGzPB{Awv$B)K3xz&T zcZCw`&J@jVp}fk30@7S0YRP}X-EWxHVN7o^xRDz4bD2QYJ(50}_Ry2gDzBGWH(s13 zOv=1>Z4LiS=5wla>2pF^bU!9y-Qc4mgZXW2VJhUnPvZ*b%0{5{P!*?#@$uoem%rXp zzw#3>Y7T7o#8J%V!1V0Wq8lO!`!SIRhTTbT(1^-1he75v)fI0$xk+WSmgZ4O!>&t@ z(aH&=s&w&^3})qCB~E9aZT2Ta$N#xrS6(#Jh)iTmNV5AQzSaC_$*$-X&x(K%xjYZ1#9`3`h`cnZ75 z8;ZBiI5GFM%vO`~gsy)SDL|QRTM4@C6sfmF1)M8216Pj8O+7~QS$97sm&33*Zd{BIOW^zxAbht3AA?nbP|1oz`lQ3& z>-E+ZA~>2L{>01q%C;yjzX2FtL|I3kC->S{l9VT+&CK3`R?$>s;dXpaaED zL@=6YU9oE~QeZp49g2|S2@#?r+FvRNYCW>9M?bq8+gMiIzE@=g9qi=fHmYw>`DUO! z=WFIWR$1;*(Ild@8EE=wU#yb~XwEEtdPUrK_OK?X);2wI5!=Xpmf<;ji|)9pPrBKC zbNMURZ2)pmQQ#>Mf{0;JO(C_oLrX+j2y$un4X`e@uNDtX~f)WmiNBhAEhYJbwR z>eZ_G=N~)2p&83h)L4`%(SkkNTngZ-5NUDzj%K%OHHOYt*Xg8VQ_t;jqx+-@?&}-DjR@EWVU40$y%vx@t=PTcHRm-t z!2J|xuEZJa)hyP0Ngu+tKAu z9V+9PRQhq&khS-FMM+%=xoB zXV52GTRF!qOlwq2p$&HBc^P>+-i+G&J66Gke9r6}2=7c?t@zkdf$tR*=iGqmhE<|% z^kT!ai#apmaZHd#7|Ns5kulgEyaG?yz4qv8yvmR$XJ1*x37QMc;iMt#4qm||no!EA zuE*Gz4yDE1qarg#A)koMjZ0BThzb=7Xkc5-GLGO%V1SdN)_$BWu717oU>~c|HJZ<= zW=js{pqs%1@oBYVP3@(U+R>s>&~#Vcj%d@NZt`lH62wkAMZiyvANI$ky4p32AVLeL zGE0;RG_9qlN_~`E&Zf=3&nwp+nFY8R<`j*b)}Re>1bZ4anr0mh`{Uh*8+HK^5cEM(_ zGzE|X_F0`&CEBzDWzX$;zV7A?!%{_1ZqXNdm%U~#h~KM3c6TON{WAp(chZh3b2QG2 zMzR3@sC0^#a$*9z|B0%UD|J{Beb9H*Ry=AU5xC11#3kRVbUc!<>PiJqPLL6ga%4z~ zcoL7YZ7%Wn+x~~PE8C50$AQ13UE=3RTrvi-T-Zq)n6IB=d-8hKFMNsPP6r@#c*rV> zWX<)$yi-KOq|K&>^*Nzd=O)03oVEelZ$Q&)|DQj>h`Ld)RGa#a|K>sn&Vi_bxQg*4 zskc5(e}p09JHGg=96jRy8-=t+XLufsbI2eI@rJUW(BP~8omf1!R0GJ)>I_tq&kxMR^=q= z7UO^Kw~!@F17|cQfGKTPEYdT;e>Cmk%T4Yp=>PnPxZBzIp}twYthRIJk$|r{CD62H z_kp#?hyH#L$YEMt#PR;BtV13myYlG@ge>QO zQD*&nS`j4iAPnTx=UzG!vNWPY_sulk;ghddhmV+s(w+D6ZR&Y9tdP+#&InOn&)wiWwSe4r*RbSXG7wHB;5@%>Ho zPXq|;lPDbFsB@kY1P)q6~@X6bu~zEstkSA|(~p9Yc!DBs6qpJwZ}?2d6F zI`2lQKBw9GJiAy@$p~P+@;o2>daZHc8HV(DD~S|q$k1u)Zs4?>SQ>Y3I_Gt{0?Y~# zQ}ejKbIND)9zH`?^bDD1jgTn!-L-<2*Ryl51jp|U24&r|_&i$%p9M3!?(Kcr6;Tn? z=A{S$vH^p2y}%(L{SC=zYq>6}akFC7%hdaoLGQ~`GpuKC!UNbpz!-I27a%?D3YzwN zZl@W8<%sG*#%Z-C5}=)Hzaq@~7UEsQ3iB*u&dS6YapKTM$f%{$k@-TL{}$4JkXKq} zc$5aJw(#uI0JdJqUA~yODV}0{DWcur-E1GKkQ=%z*&dhhc+J{L37IeX!lPL zw?_BgN}w9x(+NzU_r2!);}Ief%cZxefXzrm0)*w`wt&(uhT7=bpz(;2Pbq@XuxRyV z6_0Kg1d8KBP+2LZ>%#FzjDCvYBfo0p*=eP+R~eag;Ez%F$yadt5p!54PxY=0oB7$4 zk$O!V;eDxZN4m~Gxmh8%cjkM>i&5=8t&Imt?QE;s*YdXJn^`}DlzCtiNWZ$=A&yBv z5KBjnZe5V8uVWZ)R>Wx)UEn?w`B^l%?Dt_jLj1&Wz>>K zHkutlbxTzQkCK}v6TK#&|C<&ODyrq>EeK_k!vv@X#5&a+`fpSxyWSNT3AG}~#(ES0L{%Oa5BoDR8;9Gb`Z&^QM?4PKW^ALSbR-LRNjG-M(2ZoH-V(7`>( zWUE6-U?8V!4*#+&gxBhH9W~ZJ@M* z)4GQJ9i>z1>nE3XL<`@*PzJ#D%4xPuct@|8=XocTLoU;j`8GaZxaF$hXO%)?4uxvM zTX}yYzf23duY!Bk>e`YuFF&r?vnxO3>3hq?u1Sgi3E42fLV27?qe}8df4rAMQU}sf z_baQLS@!n+5i&eKeL#H-q|EG9{470XJXJumO?VOR6@d`#ZmpySIAP$m0{*=V_2T2Z zhmYNn#eZW4)iZEC=LYt6YQxXXT<|)IrADUro1vijc@TdpCl%K&tqN*X)Rm+1ntAws zsTc0|LUv1m+~(7}rFmSEGqr>xn;ThtD*pLy)~^t=_I@tsYisj))&qJ*+HL@e!cty1 zt+xoXd^6av4p=d!_%i&CgAymdxplgCD7^jp9Z?hL3qN-*YkHX#0MRG08x2mpdcCe| zdAx<_?pZzwm~cw=HEMXA)-!>2Ti=tf1K1D#_2Zv+4OyAgoPA8u(N?ME1L0>>xI0jF zI&_tXfBXQ2j7W@3aokJ(A;a)$w|rl7Mr?*d+^~3!!QQJNpWyP27F)2A(eP z^SU~Hkh0G>zAFp>N3D*MyotP2--)%!d{XEIvqDO8snVW@!Sh{@td^`t#~7ug%I$@6 zNlevOcWvIXCq9@;#Wm%?wYM+4$m`xn7^8z!flbw9HMrOjfn~cqE96#yb@sjMB}!kb zs{nBw^__3Nb>N5@uyY{-^SBDqK4R`@XPcY~I3b|2Oiz$tKwupml;y{Z}{D#zZD+EQ8-nYpYoET>Wt_!Id}*1bt6rrd=%s;M+9 z25NzvV|%VDc$ohG`h8L&Y6*UJlze9E*6q0iq_uv87eK{Ugpd1iaYQpHENaIm^Z@90 z;cC1V>B4Dw+2)=Vaa=pXE=4>QqQu(R_jJj`u{HQTQX=@r)vnK=BJY%b)WF4-zkN%* z3cZkcEF~&DuTkPN#_LC`lY5dmM+4ayI?M5m5=A?L$8~M<<1?tpE0y`2GCKFdgRQ|X zHCL_?*FC;oI)28yjKDKKPCrlS)yM$lxioS^Yom454*l}3kUb!Z$XUEPPsND6Dgp4^ zyoa3;Ca$RKGf02@B*UAB=jPkjv{rCe5;#2{1H0xczzV-D<|eA;6k!GUW5T?*hPr% zmsByJ0!eYYjDhc%mPxrGXM=uwr(p+Dygo{MSNRjuGqg)NSxu>c)b8z4Bh41vt@zzX zy;9pCl_W6kY~UKLg80)0lsI$O((w*xNqmj^eqz6Zx~#UbWlDS33Z|V;#|ywb6T-jd zJ6#LXjcLI6jVc0IDtXnW$@Phl(2>|(>*JLZi?OWaIdD)eEngP(+D;`=>72$Gd~a|M zlC()#rwQT}PunByHR|#9WbMt>4PSDx7|W`+-DgC49<$;tWT3F=&whdu7^WQ@Sn z9MoL#Co8fM4VdW@nG29dY^AH*;v-C9%D3MFNi#gmg&6Q;*V)_qfNSr$+#h9>#8lOh zPT`_$Ey+p@tWyq9g|Fi5c8?W-O)w>`0f(32YcP`UPe?8_IvNAn)))LgvZ(vbh4QYTuSKD3Y%k-?RBGR#q>+-p96G)+vIF92?Zx zU?9)MB_*?#U68x=w(iq9_8DW>kR)dTf~_-hYQ}@vwJo+cY0h&6{q{4)u5#GG)AB|< z>j+}N)dk=p0sr77NO$iFQWjiF#-}SM6-~ZXa`?JEyqZ}~F8A|#cf)1`>d9oJP3Dqn z&$0l!yqQv+=gb#E>^nR&0>3Wb^-8`709?r&{D=X*E_MohzibGTo&qIGxf>$t0p0cC zus$XTis19quiNYqz=E~|sJA*=gG(VV^#$J&X6v?*Gx4gv5LrV4>#U7)T4d)8%T=il z1ln|}BJ$sd)qccCz%@#%BJYq(7v_?VdmAl*N#+brX=80X+56OqMfC@C1KK*7mJ6WyRMRB#nq6{n*?qq$wV--Fi~_(K z8L) zfzZ}9b0u2`x$|yU+&zPCfYzkox5s;smm-$oH9+|H#+3W@p9M8Aka;)xs(|)Fr3#tB z(GGaXwAJOFCqLtE8npC;k4tL+(Z!^tl;LLsi0qW}LWM4>iGd}1L#-wRwOXse$=IK$ zc?-`ucZe9(EZ}`~zD;DOC3(#yYo;Spb>u?r-e7J)m*3BFTwPYcx|b zq23gA$!yb=jzBt^Uqw=$2gKu?^e(ipHW$J^? z$C1TE|Gbv80t_uS4=DI4NS}!QTA6v?cewkJ#aJed8=`BkQ*#}@$jxZf?mE5%M0Q0O zLBgD_GnBkPtl64}jP~+=+v?K2dSA*CRGOYfdAH%sV0E(V0)i}gtmO&*R_<*wFe_yE z{j51^nwARCVfA|j(%b+#ToZHLSH*-#RA&aVhoA2)$l{BiyMC!01M97tuJkCVj?XR> zD#a^w3QUH4y^3qspEAIE@B5mAv}o}js_X=R_h~R6jzJuIz6(p`733Nt+>7VdmY!A$ z&(qX*B7=)7bC+H6y+zZE#V-O>df<<;|!V1F+f^7oLPZoc2@2)8n3 z_6`qxgFA@F|7g3qBsp&!c_sdXJPrwv(Tb5}jjCnO?&&wPJl4z`zkPtiAzRg@5CSBD zOcFrmkXm}sTk&$y!W_FGnwBh7kweA~0M@1L0!p$*f6}Yw5+BMkJ2i|FRXMejfa@fa z9w`-Iw}a@^Gg_%%Lfy-h&WRvv2=8H6Q`X?lYpPyOJ4-A4(^ta@EG(Jk&{a!upJDSp z@R3%zsOG4~vm(%FoY`^;fX#pqJ86@&ueEc_XEeYLA-CP7u$p68Z%l|g)V39lJ2y;2 zt6YS9GPuTjQjQp~A7WLmsUjV&AZgXBv%Y-u2&EacAF+V*nZwjjh1!lRg_JBa=|tFC!B>(gUjS*Zu< zna!%ax5<(+$OXqUbFBPzWEG6^aMj#rueeMq5X2HmksW+hGr~Mz%`NRX&D;YzKB9~V z8a8>)?qw_md*v0)jYvC0Q0DZ=)>=a-}YCHD5$6z0FKR{fz&uSsu81#?*NB0Pz(**RZvJHAAJ2^~% zzY!#)z3;+HKYn+aKAvGx*ki{^p&S#ystlNrTg%O^;&Cv_BY>VhIGbnG$bJ{#cI~yq zc#!{QN!OP4A1+f~8juR-!W~vA;SAc&Kw4R3uzmJg`UazXgk49J*z=5>w_mXH5f1te zGY=LF-Y^WUa!G+53?87k*T|X-No~Zcfx|Cs+qFmoW_egO5DDH~rb+6op9g=&R_i5% znpV1D0*>m&Kt6+5u{yR5RuGtR6CqlNND zCMkt${o?B*``C4m1c`{Nv@S{U&*91+QYCY4YZYop;G0TRX~u9Fv+e*lD4|rt7`!aUsuA8{$A+%11ApKG}vK53B`1x{KY& z^Lcp~#bIY>Var!+DGr+L0~{h-;N!`@O1ymd2*Wo7bQ8t*mdeU`l)^{3Vr|&D?eq_i z*PMuGKp6>S!y~2V-D`_tZ=DHb!W+DLeffq@J?sJ(9G%lrM?Z~~sC8}dXJkeIExQ4% z*V*56ACG4_Dbf(x8|P$g>Maf3IkjkO?gfT;TSYIA@#=W0?7XC!PGxbKo!L`3zz$cH z-tY70%cBsyWMz+Aj0S#j0)XFUF%s7Ctg*&z)9d=(;6=axMeAG9tgN;*@|WB@Kud`)&bd=%($CqOefsyFxMN%5q9;tKLHXzfDUXP7BKClM*B^*d!`*#ZY6g z0%CSOmdlCk=M;6bBt#`|ik7yO`$Ce;2}rfw9QJ+cKU~TutCa<=kxGh(`Dn667k?nd z6~^rfiB@?8upF@MnHNhbiXXLBb*SYxOXbRpo^sU?FzA<}qrRR!+IDBJ4tT@W_x#HN?d63_0Xe8qzon69h1! zO76|B-?9sZt>diIBcJN(46P0Pfd#0zfT6F#1FzqT%V3h&Kvvgmt+dqJ8YyW^iBCNb z%0qsB`(GDPHqMs~0a!kU9kNCZL-T5RBmdwq-hB11@B4>~yH<)+dM>6luLAU7u{8W7 zAN@}$y1oxRKa)y{%O?KjF z*L_0~fBtxV`}Dxia&m@mW(2;OxoaKZ)~6J>uu8fLO2V#}i(MMn8iKV1t8K<7X;!V^ zY=*uBo;ZC-nPOuEPt8F90F8E4HA+ciqwwk}J`{HBXr~rXmX2kw# zDexY(l-PK|6D9213HaMQC+kkfmg~C!OSCPzcuA;QdoKd+c9j|X<-G46@*rchpoL|` zEwurH6c~WDSFG$P*D9d@tgMT5yCkDl`yQcovnrz=ODvB752)8^w7(YC#W>y`#sf|? zI&~#-%2e?gNhH^ruakv;x$X}S;}AYri;y`OXKfCi8Dop#%pP!bx!vXeXI)*aV>4); zsas?~wz;vGr`YJ)Lps;@zF+I=Vw?=h331Y%4$j6bd~RqbmrhxqdIQ|QT=()|164YE zsETEPNSp@5zSVa$z8-0_r=d>2xL5~EN}heRxU69VP4)4*x)_JJv5@cA z8k+-jOF4bxT%?7y6}yW4{#P9S8eIk{tU%!a)`wQ!{?FA!k=Qt7NUwT<{}oPL%wvH^ zAGyy3deEZffvp&GtP1iV4|41m&m3zRaU+ApY+iccleVL54p~Uabp3y<^SJEO1aBSF zv*5bisa`IoW?}~NcP$Y6Wu6ZN=y7+DnS`VfkX^C$PNHCU*4;GU^Vk>1U<|Xi3^N?n zTsMwFw5pjGZ1|;L>)$^=z9v^-%nKr28W-qSt6}Go53eN^94zSFcYmAbbS_w!rJ2ef zI?qtCI(N@;#Bkc4S0Sul_Bok1g(`kvI&;^y%RKs?i^@5&D);$#pC5m}8cdH<+oh}` z6vj>(vLJ(rwZl8YK5=C3&U^jOHy23@pd|1dsRvYyMJ=3MvChhAgqcG~6Pu*sEU zL%cDm8U?Zx`9d1tT@MeC6AkltH~^6_Bzmmq-eGi3A608Sr8pt;`oj2c!(8MB6IM=< z?x)p((~xo)2boKFHMp)iRG%Ny?BxUM`atb|!Eqv~7ji|Xs^ouXQtNo%r}qgK1m4g35!CwR0yfE_Oo zQR{`KA&pmLfW{B{3Gtqh&T%0JeTOp_8GIS#tde4G)V+~ZTev>teSZAdE-HGmC*VYE zA#CJweEF0{jpZGxPP>&zyv=f9$t#3lbF*qtB*c;18NH`{M!~kfpT*DD=eOn2Dw3J3 z7oYPM5|XY}_o1{H6Q^L0J+aK?NmjIi&4rmp-wTwE*SsrG0%z{)G>FfS-~QPD^zc`( z#@UNWW|0xV>dvsOf%BXiJ4qfG_HDZ?q}A5JOISEH@}K~r0g7=3merl_3;A_@@gPj# zA4rLvn{ys_K*-)H_qDRK=X>QA?F@iX_$w{*lutVNE^sU=%APE-YOedXH*>z(Dc_27l)-3 zqeelVPP;b_&Kt2AAjQV9><{h>V3&u#5F$Xr>)IW3sJ6(GubfxSAyXCMiNAbym>xt6 ztRqt6d-OrnQm1ZKO(<6Q!Pfuq*j>k)t;L@%{u(=!JqKV|*v($F<+Hh!5| zZrO};WgJ5wYSt}$A_H5%sOv2O24yfdFrfXTE;EfS1M_HFm;d^H$mE)JV92bI=U zk*g^iEJ@j8QX6@1zrV@CE|=l0V${BqEY_| zv3BDB%K)#uqv@AV#9y*98~UpTDKQRKxfhn-69=saWjQaO_!VWggj`5?IQkI4>A>oH zPV;Adb_Fv_T1t<-vmRR5Q2!unyY%x4(0r=wo!tw#Fs3#rEpvERw_AAt za(?{jGD>sg9$GoFsp}N$G69X0DrptFkItuEF73Q2jwGrr!(ob#PsZ^aiQ@)=G9Kh0 zmly#?cE;Rr7H=vR5JbV(dOoHdrru-3%jGO$U-MyJu#{Q3dt898C;nO!a!DB;IdN9oJJIu_fYi^SFflYl&kT|Zs6Jun~$Ph^it zov}w4I<#;6x8^S6K??fmlY^@0L=uch+5%9MBcJ2hZj$RP4H^*xD*^KZTZ0%X%gUg(sE}>$sQ1j?Jt)K(G z%Ka2F$umOG`s9JzCsZWeJ%}#Q*P~Jp=_RlmCs+t`od@aB=R|e|)CwA?LlVxeb#da8 zMKB~?Q6EHnpN+rR@SjUS{zi;Xwa>3EWfeD>E$dm|e~@QuMYG!BE>jdKJL5zI3>qcVooK6wwhV%`1h1{0PjaPGrbp394DAF zu-kXlbdb0^_-uo#s2?`jrU9OGH_V54WPA7Ti6})PQ{z0#ak7n6fuilf&iCPIZLHbB zfR1oIIoE3^;GI+QvXsL;J07R>xC;PS3S$|zTHB{?&eXGgkSFt#2BqVKClIT&hWE>M zDDnM)_9M-}J3_yTxPE^8_VcUD6HMqVnImn?0}O3Y3|^2k6TT83w6D-E4`6uaTCzu( z!74c9(LO^AyaEm_t*flYUxv9=4!7C2NEaNlDX?ebVjfM=M~7UvVN5eeI05&Ab)_?%VlQJ;pn)bqtUYN-*x z6>%2CyRdT>e{Mtp?zvx|_=t8}Ua^+4ZDGInO`V9fk;s8{z}xf=4!?Z==`%y_45=VP zvmLO>v%*0_w~~R)KqRk9h&0S)sCZ$)FQ_)oUs!uj<%3b2Ddqs$`{0?+NhoDCWz8yF z)basj1*+I}FVYY&%5)E5J`;pZYAT^;DPY_U5jIUd9MI7-kXgS6ihudowGL>9&VFj@ zg3r##NSGAw=6L@HaGJAnJen4OrZwe;tPR8y)#{4LfLZ~`rtIs;?7s~2IFP&@AB|Vh z_yE2`FxAGnug4n2Q=S>-;WF(D5D}?csHs`XtfwyyO(3WHq7HjGxuEE9%Hd%M+gp869QQ4d9?DNNatv!ncxX<%Ysp@ZXLcVyRlhX}k_*!K0L}oGZAnm>hwdt}S^e$SN(28I zSqdj`k!?gIOr%aj7y;g2*aF{fEw!4>Sl8+TJG*cjR4BR*834H97v$~-v@1{7G8Fe( z*%z3`<%HU~IkjqU9@>WR2pX*Tm{PsS+TyaJM z!7eFP8GO0v)n;R-6-X35g+2Ge{U2yoBAaBkf=)?h&QpD*38Wtp?t^ZK&-h>#uocWr><$uI56Gb35WW#@+`%XPRE+{6#gr7SaZ|M!;rub=lH z>46F0=?CGTkAEabXO31!Z&Jq$YdB%|Prq|l{m)$f_Ws9{*X~D9YzWd8`yucwy0Qv7 z_}8n<)R&IU8YZY`EyItXqF)i3;+6Z-91ztL2?t?wYMy>qu}4sEU!T0+JA+!%z} zNHAE^udR>4LoQT@2)+mP%X~^%#(fbF9MW?QXhVJCGNsM>h!Pk(wAH zb~Z!IsSu2Lg(;)@P-d)d=a5BEh=?~p8D9^^o;0??V_jLwZsw)?Y36r6y#)3BNxQ=% zCT%nTO=JMW<^(ea17)wz)J5GcAig%AU0G2>Cr`D~q)$g3fw$Q#mW}vD+lJi{)3dXq zBdF|B4FxeF3N~SaGHfxpE}-hr{9(gS2a=3~!nadvClwX^?jWV+jbS z@5s-5ZctCd)NeqFNV#J{+EVj;OUlt#R>PF{LBOep?G(A-sQ5!19QK~uwMDcZ_Bs9hdOk1fKq z^TmOLdf=O%pBO5gvx`rDOoXH9Lx5VCNWo=|oZd$>gLSiC#V~kRxVAT_Y@nh6rUiz1#~m8J5Z5+&@cb~`u%~2%o&s{KT57_ zs>9>gM9W`L@-~tBYtz5y!nBxOdc zOS-U4(yRJBI;?ZjyMt7KB)$O(3a_wAQq4hMNiY!4qAu4;o|iVq=N}yE2B=(Ly`fj- z5n(`zsUd`}{E~w2J51m2_TvU9&5HCp9rUnfUWb(COdKr^_yXfFeeYkdfJzDmy!;HI z(gT!n3h|saHaVxhduQ=8O5I3%pee4`Akj5(Iq+5{m6l8q($-v-GsqrPP+PWJJk{ zksFv6zpLdY9=t#cFR%I0EQEfuR__XVN`NDKVQw3T9X5$kHP`MUMQFiaC zD`N1rRvbTv=?11U5eLfR>!46&X5PZ!7tpHQ=^uBzeYvsiuzGUyp+wM@O1F|;O`XG9 zufgW&TyxGF>#1~+%AP^9t%#J&Dnavk>IihxJ_V>hZX5s$6egBW0Hi)9Ys6W)o}tuf zt3A$`ZVc4qRW)R1@iZY!mZno)z+m%5KX=W%K28p91Sop)jslq?e2`Zbdt8bQ$!U1o z6_vd(J?S?43s+}x4&Iz+W%3QH`s|Tl3iNTUau}y+SM(Gst(|&44r~TB9K&GC;HWxN z2nS5xzkd1G4OB}@a)2a*jW#QyLeR{MPs>>8JG+gK*}IX3k=7Q(dDEm`L?EI@E2H_@ zb%k|0njUZ89u%~lBj*Bf0=rD+{Roig4(dE~u@v!br=$m&cLS8J6c$!iTxkVgI;PK0 zIt51th1~;Gg8Hxa<;rFHNK2}gXqC3Iy&?T!g=w8BdD|HTeN5j2>+bU{BSypL9Q_CmZCf)dylKppM>WB_=93=7gJ4q(Ww18#xs?Gq{!*7ue6C`QK$GZgt&l{l=5(cYD zdTfJEGRQIkVo&ml)3R;eLw$_Xjd(urSINa0R-fI;YU2x|pak+4j`54AR-V@d!$d;4lHdaOdavGs;D zT1v$jYYKz4zZQ^?Err;WMpZd6B= z5!}eFCd^ktSXjR2HhOK!H~WW}FhBo!WvJ3>O%Tw_%)Xl_sZ|e-mKC1XVMkO?jGKO; zysh9fu0j{bQc@A57&iU&lP4X!XECn{Y~#vUvBU>qL1~UGT=4~%MrboytbXTn^%tru zYScB!*?~nZtvtAcdLJ<(`(d@8?m?dw+efH!Wv2;tIk6Tj_7>af0>x7QU&{U8V*3Zp z?N2|bl~|Ihrt0`0L9vjLNPP2<0}GOBL%csdEVVyE(iCb5k^_P?KEI~Apuph@PCu9TDM27tmXfw$as35Py$R zgSZrz*pF$C=)uwD5s|Nw%7}q2tExaCxtO#=X^Mn6cZ}`Rvx3YcBIvhitnVL?0*l8L zy=&2Iqq|ynM>?OtY9BmSJR({lv=&n115d1R$jaoStqza~g|Z=#pPupT^Q;wGh)3re z2Bi8FRbOVoqS*UYx7)uzx`sY4ZCj?G*y0QVX%#W9pkyAgn?2*Ukk+FM`*TPtV<~Nl zC-?`Zu{dvqFF7;#t>5+c{lN5~vf&7-B9{wPQkkulK9Y_muBPtmjDBko3{dvZ8^bgr z*cl?DA~dntjU_Mm8wJarYwm~X-7X-CW0X*&7aCyE*r|$VZNsdRyX>kzfao`SK!VOe zpce3-*^&({Yxu#&vq8elmf3-R3+c;~ety4@-v*Qj$fCEFc#D*$P_`E7ed0Ah5~dcNGnQ^zB9j z04*|?kk`@_te{vU?^vNn*lb649a^~GZUAza93F;9^2Y1u;uA7SLEOZb?fg7n+wB6P z03{T|M^>cK73n}jdj{vqST)#{xdBBjm_BfnQaU(M9?3|EeX@tg66n6e}8SZ z8+#4ps8`39$!0-QUOo7R!3pe=w5wNt?X?StoUvg}_R&|@4OxYa*LlGtneEs2Vf*Wi zT)UPV&_-3gQ~FMh5rWQ?2koqO_s!gCHxL<{=+ZV6qIEbV*tmcTx!=G@!tQ(KlckfnVHc)LRZ=&@94 z46aQvnjD82OVA!u>2dCgKVRc?hXYumt=L!{;Tr)V$aKDf1Ox+TI>dpuDACu=S_70sZ4Qz7{=|oYF?VrJD4{A zTS&h@agjJeLWG=HM?6Sgb6ARj2i=U`1_igP#v!B|M_o+@lF6D_-pIKi0z zvaXU!2@rB|f0Fy?dG>k7se-c2C=T&*&~%G}vJ8@_Rd%MMpLpkY<@|ki&(>1Gn{OR( z=ENX@8bs}3_j>1r=*k&RGFB{Fb1j3kAySSxCXfz3PuVYTdu!vy5q$SOKoSf;*%q}( z^Q+RpJSe`Wlx+~Ox8M5>OmRp8qn$HWR!czCMTg%CxSX;6ZI9`ZWBD0V$+IC)=Ecg> z#&f2)z)dQ+rSoOGoQUa0{I=d!@G0{>Ca>M1mg?!*Fl=w4{u9y_Etg}I-W|_PBipbd ztJIYwBf}&&x0u$Qi#UN?qbZ6GEN3g;j~QqnBUt+-@0`j2=}xrNUZ?M4Msp!AgoTEc zL^q4cLizob&bkvW9UC)6ntT*z!!LZqcu9(er9XD%s!8Z zSTG#u_m=9e-~ajj1|6s`^TF;iE4m`k)5yoO@f&*mez*WjsUy@#TZ#?y=BU**)QVLAnu`gnqLF$)n7I zlmb~$^D??fN_J(})8y0NKEK~sO0>P56*;YT(cajHtTvAizG|FlyW>9p`1;^2?^*9g zte#v_&8!G4W$9qYgqU;gx!QK#{(dD=HZ5MHuTpahW33mn&I! zBAFnkAw)%9TzK_4(Rn1#0&;i4bmz(2!D*jDjETwV#5i7lp5 zf%vX$vR0R97*?P*LF?T9Y6qCE1WToE>ImD0;ZRf@^mz5xA+=|->w)lM4e zo+|V!rYmnxNHSo(DIV^e?+Ak7^NLE+?Uy>bvVeSBaiwF4>CRE|h3Lv^Dr<2;(+=BL z2&N8liTu(#oe=!4C*2Fvoz>*TgCb>`I*$S+&^!Wwfq~a(+n!uMG2K{Ak@ov8CUUoq zMGY!GGeV|MakjeaNDoYZu1mxzj_Ep&;2^yd+r5R%#~vX;Eb#K@i0aDxg;r)@k3Pru z;F@^pJo;P%O5Ck}9;>$-V^wQtG;^*6u{^RpK=46m8g3DKc%O!e>bDyi=H>8HLt#H1 z1_zTg@n6W`D{SC;Ky{-QJs4p4=Ah)9umS`uxTQen%h7dzM)3CMk4pm;L-6bkW~(4H zRG0gpQ5rH2NP`}N0#RMrfNXs+jmOR412T~8kPGV?ZH|?T-|D*;sw*3?glKa$*Ie>Z z79cL#Ab@a=h>_bKiUZY+MdeH2U44$VBj2e^ok?aWy*tvr>|7L+7Jsmj6xLwJg_x+t^Yj|SXzOg=}fPFq~?k=+}z=OOvDF|_;sKDs1iL`40f3@gF02rgrY(t_d zARO55imkgIM6=~%4Gt!Kym2`*3>| zDM^nVD8Rv7^fvHqnK@$Ydcka3%CY@PQsT8vie1f&cc zf;Y@dtKR<9_YVGqtb3(+ziRI?i!|#lU5*&838{A?uh70q?rGeyDQam_Lj~zAsSKZl z(PI2vxq{-_K0#rbZq$BM_)WCdMvcn{j02HWoWYoT(J4DAf!~+uhD{^JKn!-WxFnyp z99C%&jI$#i)O``b)BJj4=h!8gl9z!*z_?y}@;OyLUjbi9*v2N9bYqp0buHPIwLlA| zH}v_%g}+OA34P!4f~SxFxKY($!L?tCWJ2mMOW8UQFV?5@F+e}JCOxFSa<1bCpG$L9 zvFf8-@sVV!RnIPE~SS3O2b$|cMlfbIBuyIk%j}-*}@#=;{`i47lp88yXlK=($_1^d>w>4 z^(6qg2-RNvxn>Ij#><@6_Rj0M-6$bqUDd0Yh+Ir;(SozP-V1vNmhNk1pZk^GxjsyX zWv0rG*TMve!dJ#f!U1V`Z_<_CIj@YH3jVD;!3O++1;{%LpZ3(MZL9X4`<>o7AnYQ# zCir%AJq=-v!6rzsAG$p>dG42b=V~Tz1~&tGb8&&{GCBy{K)Hb6+p9{f)18j~fviCU zj=74rg?Qx`&YCoT%Cz0Ynb&o?vUfgL*@BP10GA9P27_bFl7YZ!F51U|ex-K~X(NF( zO$EzrrDlY1fB~J&fWGU#i592s#;t&?ka)Tjfoa1^%;#n0T0YcJ3NFKrApP+y2ee&g*oUed)`)9J|Fhyq4}#c2bH zgsd&qqCWM_%jZe+9t-po`Jm;;WO*M9=sBB`+UL45*{AMTl-uapsik0d16raG1l zuz^m9li0%O3R~+CDzEg;5!hQ7e`G2GM6fu=fc;t%j5i)iQJ(w9e_VOw9g1TYv$kH1 zX9YDGVb(IIEuQ;l`sev_rwJ>p99POorjEEIG#?seol+xtzf+s|$Nj z@*8KQ-Bj4TKddR(3h~~-f4w4J2e$?ms9qTdED5Ts!G>!O^w4HY+Z!gBbfwD>NyR6p z#3-=GmNH_3dsXQGP=_$^@$=Uk2)yUPg}~l`lbUzW*3yxM8^B4WIgU2ns0K$|;^4m1 ztY|{mj9iPw9DJZzJ#5{jfwRSyHut(?&o4JD8hOzG{6;2G z^B>{}u7#EIS!!$l=6t7Zrlu8!AqEjb5`Zq}A(h&INg%;}pXa`Odiii8S_T)Z5aR$O zpuI6KTm4m_4bfrlpXHwa_3MW#u&E&ul^)>CG60>%G--AA79;j_?WSh`^51uwvTFe$ zi9;Bm4X2;QUkdqksG;<%ZP8&q1K}q4ZVT@X(ZV0X`U|)#Y7vZA%Isng{d_ zSBgGXV+{Pk2N(Pt93h8prL?*4!Wwtfb&*XP&*1V9Y&i6pmBE{4@SzAJ?K{^m_0amw z4Oa_OnY^Etxga=6sHITZYcvig1y^KsT*cD$w2;$q#55vMMzYD?v4V{}8FfeVD@n*i zq*cI{R&EoRKoB%X3uWzFvD~OD*8`>dBsFYQ9ARnn4*yC3mLX5((DqL5MqRlEXTUjA zm)E4EV?=+=l)S)NB(?p`{J7HuT@WC3G>rvRK)~uI*BH_mLTYK>aXjucKdtWi^gfZZ zVbel&(9~uqE=OAWPL177x}!Uwon2*n0XXUMT5HK^4WkgnhbC=Jx>NRv@R)-l5+JiU z7{@2Gl}?BPy-M0<-*Krr&WDG0XlceB433G4`eeueL#Dk-5lj&NFEk z$awof0OOAKKvw*qAx3GKy)KuQq!_eOg-v;GUwXzJ?E#B$oE%rR|Ctf$OM&rP7d!zc{l1ZFPt>Rc0#GuU#B;{Oq^jfm* zrO7{jU023Rqy_eCG+oD{RD2TDw_w|_ftJ($smE=)!B}iL>FqVT2ud~tD4<=_GLQj* z6AtV2a%G*S8F12E19Y>f_5i|Quc}+6#kueE{c^{h5FqhoEjBV}LQU0P>*Po2K;#GD z^w#q+EvN@Wyu<%qn61|t1ysFluN)!$M3CH~HE&0Q&hv@dvs)i`o z7ch_`?5t%@t-d~&qNThQvD;&T>ys9}CzpZd-@>1Vp z*SB!P<%7=vR!<(%T)Mrv+>hv>T1Vu!uLFLv>qdmgz#|iRzPHd^p(Q%bZZVFG{gn1L zIr+&hy|Is#0?#BF-)+;?zA^=>0F@2oH@tmk`Q5HZ2+Gl_87Nn2DfQ_CZk9F9n)`}{ z$f4cIs#fpBQ^5bK19+rKqF54EsDvITkX_tEPGgbqk2J!7wjxa@n0GZEfmN{O)<{4$yx>HL5OA{O zLR?7Mpbr{TJO{1$&j((D-w_>N_3sy0i;aW`Z!Vp*20kuE@w{4()bySAFwPW%)`S&H zN<`+0in?gd9(Yq>^uwwfdsvrbF5GPuF!SKkABxu$45K7vzQ?QwE;Pkq4L>>(CKG)Qlf zyJIfkE1+l>oC&j}d_>HTjf6Y1L{&i3B1nw>tQUqCLiwm{Epf2D%dAV8x(_TC;%Ubb zR0)9QO+osn&9G?#`eD}%mzN}l_%tolA`Kfz4ie?))BIdv zTxZPHGoz>rFP`oC{77%fIsaHoMrPVcyR426b?`&)3zXP56)k_-b;GLJd_+A=@zKye zE!#V&S_Fj^e+fCG(@$5jBKzIBDPY7R^MN`*%n0xJ4n-}SMw}mJ-SBy!cf-bY>{s-Q z&$a6GB79~5Fy71<|8CaPtPjkzJ%;Td0JlOPELB!(EjZ3avM(qnBqO$s^mTDOYA3trStiF-^ z{>iX!H#|%z)n=eO)&B`Q9@yA)TM9mwV@^AX>}t{cl`JyBNmj$Z7jOCt=pd}Xg| z@XP0uSsyNWSE7}0?&8Q`wnMcg?$aB{BqABbqh0@V2iwmPbDr49Fea~+dTMMQCwkfF ze|@*<0pa;`c&GqeMJf3^EESjgNUrkCh_hfx$7{IXK0hM7_YRCR;6PD%)>ShyB#<;fpCAbQatIKJN#V_Gp zM#-N-aW2nX`?o81^*&FbF!iy(xPhbnX&pe(_307)&ur+o=NoR{VonSjLMj^9L^_<& zr%_lBDb{ez*1zeMC@(%f#0f374{4DG(&K8#KCxM8o53sJ&0@K-iJ%!20OR9KGYH7y zOv9;mSt>1`pJQRymGx@85I$2>;6Rsy2m47aWWcTdDvEQoD~20p!L?i+)MpOs>;q0! z^I9WH3_0cVl`717pknMDPQTj3@0aK*9L+38DK3fGTLSq$LcxbdpSZPL`mRABC&6*!?0InIl-oUI;jW*y? zi|P;sj;_rWjgDqLGA!l{16}33wlPAlaVkDBrX>kwwgudCUaSwFZtNlT(kF}%&I19g z`55Qexv#(+*^ci(54Ccfw=lcDTSt(OC5_aH!(;@k$TbSb^J0Dedgn2qLS7T)xR2c<-O6kx-dn` zAk{$89Y7*28l042<~iQqDdA1{N+gd7oD-UbH0BhXO@WE{R;sqV zn<+Jcfh)Qe1CJh=*4eBp#Gf@I(-I<+Z3C{pxAnDBQ3(xoeI=3xOo&*qCTw$p}<&jU&2&RW}f-w>hqs za?2&JU_9_gYw$sRmI@uOxt`XIC+s9V+5mXAHoSB(@EW1Ks-%_9=R)VFNAzvaR;@)? zlh~F`aUnUY895pdLXnNu5kWjXKO#SJHmmu?U^h{3To)Zd+mIy`g153C@8+K#nYj9n zyJlI7$s#Su1~4c!c!^6MDt-}tw(8Q$PaGrFk!>d6RN$*f0$?*_c5wa8VDUffde$4R zj1W;Qi1q?<{pfpR)S=f6X3dIZ14FV0g0{oZM5O_z(-lEI1iuWS3rg!?s|F-H%23#G- zyYvC(14j|c<(77vF|W?|JjUtQmn*20eAj3w+vZuUTM30ejw(XozK^xLuR&d4`;7crPTrG2Of=Jvqm2xiDPsv>+~lU>&AJ9GY>&? zFDtbPhu^CAJaiWXpSAPZIlNps@2yCR!3s&l1qZ4(EEX`ulGaV1IPb4hen26CNswHLnB(iV43)dfOrL(QeN7t z;pk6KyDUU(8mz11&wwe8oacvxLe5dT0X?)Xrt#2I77#slb#@y-%Ye^MSaqct7O}Y- zep?&kluwXEPlc`I9Qc8cg{WcIm1bBCb&!~hnpTt~?NBz#YcA)84e4>SGxwbSA5Y2imt|94F1A=+TSRAdovR0yHFmZ7N z>aqbJOjd2w=18gFZXV0suJE21;ygkr%gV-G1dNB1?@JOatNU!#{B%Vl0(WljR^Znw z9F|1F((&P<5R1%uyoR5zFzN{=)-%WZq0~|d2$h?`Fph=9#N3!7R7Kt(*HEgH;m@Owi-|IQ(Ox)FA=&SXnya>vlKB>F@pwd!2VWJYyPAr!{k7+{NCa z^i(`~-x>RO?zR4Q|%eQsKFd$>#7%bIl#4%FAYEJPG3rxTA`OPj2yR&44*#w>xMA3MW zbpS!^Z4ER%bR6Fc?2G?;#W2g8uvUZE5^%Dut?>Kstt&|XJ6f0jW7rSqOP(G6&@v+> z0-q70AL04IG^EXiOL2ZDgJmyQmW)dmwX$MdHqdEzL?+U;05QxfKeJ>nca{ujFt90? z9QwBpji=H}%+B#gwdE6*eY>(`o~Vc7ht(}o#UzJ>V&{s8-uxX|^ZzmI#*&G_r;e&X zVzXhjcG0@W(CLF(KKK6I>O=JmoRb}{j7LqKXS9cF$AW=Dj-%_p)P|a7YqP87mH>2W z$umoa7n2RYX6KhYu#OwYs{?Lv3#tKtYP#8t^W>bIi|ISl4*p@*4a^E+4cfY53>zze z^uo#F0MY}FEx#j?`S%q9b>kr)CD zt|6i1n|Vn(M#axBR}z+)r^fJ48hb?)0@`|{z#_k-a`X+b>W0e-5y4RlJXQ>91V>A> zR^d(v->9I@0_F1dgfo%w9ZN>?8GX@d=oLS{8af7OOP z1T2&k-CN@fxvpsV3BV|5(4;zpZ#Xr6sB4dgg3$(jRM(Son=;^1V6 zlijdI?3;IZ>g ze(@WRW+|_d;He^0vbgqCYdpdvjv>`c&iTPFex;IxVnk->9>jBh=a2y3+?G;)?A`FI~cn%<(Og+fyok`69Mf7)8%Lyn34lI;oVFeDm(*!`(r4;g0 zPndOMwMw~(jm zl)#40T{c&SXn5pCLRq@RtV(K1QSl6t(Lx3EndTq6;UwZwcyN9!&q!5zYh%`tSCmSm zbJzUq&5c|Uq}v{nH~tj@F8H|v90H1+le@ORtPfvrbn1qt+FUaltYe0Zl3P!dn3K^n z3fh|2npeRyq+|A6*KMNqlzr zum64xDZeWn#Bim)U1ftaaI)DahcMO=l)~KSL~`*b_^^R?Ab2tqlF%cw#O7z zexjK7l3fA>hOGqu-!TUTYll;1KE3ncW=DKK*XvJrV$lH3DK$$7q-5#9_Y3aT1tF5o zum54!4ZkW<9#89&%$ka;kB|Uy2VNbtkM|MC^2&NeeM#faPSmJ%P}-bZPnoE@Nqc5O z(UtX@Aq~-BRVd}2CMGf&!gWSru}+l*;>N?y`|Ct$4ZSHG|pbD)QoYjZkT% zx~ZIVb>A(!f~`xVF(s`1xZlID8!KiGbO?7}%c!tzh__A)WG>5&RXkSVfBZb}crwzuhIB+C79iPZq!`Jo z*D71rd5X$+%kFqGpQ|ijSJ1c}gSVqMv*D|i8xYbHmVJJ?gEByR;Y}M;pP(X%mk^wp zWtM+(#3ALNVmyl`f*`A+Eej#$jt|#l!|sUiVox zcuGHBOIURyL6()GmbNX*V>G29b)}XX@o?pHE!ao9L3*3)85KLcj8`4Cd$07U7Tunx z9N{&rx{^)oh(M7Ki%D^7VR?8+iJp6zt3M$!{(5B(xvwIeBwH^q3U{#%^`;ImYwP?n z3A3(9{`pp*2iv^b9!4H?4#;PBs@moJcJz8>6H{03`GHnxG-e9@!Lce3>nQ7q6aRWe zr&nl}mg?lycUumc1caDn0`3=WXU)G~ZzV1`D*C+TEZG?WvL(;p;qdaSdp%d7{CX>M zL7_OyB`U8#xh2ifE6^cB znz5!$dkq^IHaY->q?k&eF{MZ9Ss(OYHtqlJ;MS0QX&da8A~@zWE#&N13@OAmpH*nT zn|5Q>QqI$(+14tvKZZ9%eqS}}#_CzI?bm<3-deTB72X~JAj+^fdGmM$2lwTcTRAt} z{%P8cRnyAgv>|aszu!qK7LMF-5o#+w$UE9%+(RiBNA8(Q z^E-F5$y5P*BZEN%>QQ4{Rf2!3oa`BO=>6M&?vP#b9yLZC;I-vG`77|@ZP(jfnN-&wOZ6ozrF@Es-~l#8cQtu3md`1}C( zT~+%ILyEo>4SCa5+K3L^f?(Cd#8vZIh~>Mk_MHu_SsN!#Dfc8nzYFJZW}r*0J~2h% z^Y3?EU%~m1S|vI0CMEIH#U`b(xF(( zrwqGt0r=70I+%9%DGd~^m)0y^qbEIa0p9MU`g5~Ph)C+9Yt*PjC)G@3Ji(yO(fsXB zray#ysWDK+o-!I3Hu3POeF-uTBO(9Y3NL>Q@>A7f#q8w4#=l$EI94x~gtlMz+0?_k_P#L@_PnLDe zr-xlvUV3BF-7Mr1Z>bf~b?$+SS<_Z3=UDmq*%t0Ql#2m|cV7om5d(foXv5^{6Yl`5f6_Su+jkE86xzhBoTynG=0by*JUahrZ*xi_~STr4d7_7Qd z+hF2bl$e0L^01yk;&^w^aW45R3jXr>?bDsyBDN1mM@PY@t#9iJa8YMWAxg8Kr(}G$ z?8X5LfiH_0A(IF5dPuqP24lgS(H1q%lKI(`q|wF}z+GJ52CgoNR@{ z)P79aQG>s)F*Lo_a`y9go^}yxs0)^7Y}`g;8>#!|Z47_kpIWRNduVAO%uH(wC{TkM zg}z`4G1(PWxks}uWeyR0To48|GmEo<UC zPt4~A=eJAAFhCks4ULpMs(MK&COft11?*^@YhK@OCBtI)U7W2nTeAPB?aG$hNRI6v zUDsY&5q_a0(q@>V6k0rUpAfZVX>i2_CP>S=U+{V@i3pGl3aR=2{LZ3pAmuGUe>y_}_rm{J7{)dg#N2Y^Lp z)~vDjYhX^}tv;5sl*J0gCb>1AGl!OybY>J);6q{pl7E@zRoT57&;Du_43;5ZgE zUpJDPyTlVh6U)^c#Xh-15$WvUfGALgR0Acn3FGT>PkmH)EaxflBz>ivyyAx7XW&Hi zzO*E@87t?UM>p2ha-JeQp;f65DV=0gG${bB*m$48bF>+E))>|tWo0}ZG-c>&$VkH2 zj3a|#0VF^UjT#TD&NExSLTC4uyos$R>6Hh<>PqOf^+@AchwFJ}t7qrAD$d$uXnv~- z4x`7Yis#04Jc;_@YW>F?u?bLT3pmBeQ(By2VqFqZ>i|?;#}oS=t{&zXS8s|W@wYQ~ z1DxjA3=C9{p1K94@d>6F$vtSveDTZP-f1h#PO2vS8X{<`y}ep z7p#$TMJZ4Rm09~97~4&8)Z@AD4_AvkM^9p`VhR~rqMG7C;K>)rGSlRar0Nqg-(_I) z+!i2so}Q)Dlsj$e(Kp&UWMTIy2h8S6Zrl>cy*=hu9oMDzAt9vGlMTbW40zFAQPT@-!f3dw8**x2fFkvBsx5fbZ>cRCJF&vSTY};`+ z`E6vgAuUxMo7WyF8y#uT9RL|xVX-pa4dLEqPQZ}+ls_E-OCFGy3pbwYRVLiv0S_5 ztn3u8wVvmk)~0;TMir?<3(2C4biFK_m#Gk)<8L13BW=M*zh@JCYq8^;!ijaPuImav znvzm_JxAqBFBzK>+JpjtijpqlvC3UpV6G42mD=l7zFy6ef=i}Sms=pZ0{*1}t=14x z%2*uOarS*>O`ap*312A<2z3GxYQ4rtJ*FgHWDoVztuK{_>Tvlv{^ zO-fl?o9p%DRgc0BmG8Q2^%hM)MR3T6skv1X0`n5+V? z^=z@8qc4;0Rx{05uwXSNYnwYjBUZ}PB2>GivQfH!!jVsCRj|CCsi3wG!8Qw8Xj+m!?THKp zkk?oe{u)gx5Iu)Lg7^>|E5dqQmrl_!cw>URQcZr!o%!`FIj=Sei{{{<$U&$9vMP3$ zyyO}6FzUYV=4l*a*~u+2t2Ef4++GgQlR%H2C6jZ!JR*iQM~Gc+KRNB4q}7q+N(!;A zN(Gy0Ff{t!`R?|9j<;|C1($Fri70TOR%~oaRb7=)Q`&^C=h^d+v(VhFS#L0FS^;E> zO&znvMKWf_wZ~mq@PAh8`+Psg_-u@pVl2cCkndAw>ExzzDijnb+SvI1`0_=##T;r< zP9L#Rwr9Bn;$o2kT9x6!O|5P;l82!!XBwKwGfG%mlInHAwJ2|-ONT##2;d2?nO3u` zrc}}37@(0@!D)hl3A=Xqb1NZ@S4h0$+!o90)tBYn9K(yuO<`N<-14;4y2H&Z)L|L>;5>M$W>#ppCT+=Ui*Xz%74iIwJ;lNt!fxR9(5cE+x zlsjKF&hB`nc{Yo?hdGk($Xakm*Q>_f1M5)ao32_VkK^mdE7QuzzRWT*&zS-l50V{B zDwV2sEhTBl%J3B9wcL58Df1G#ki7-TDMhS1C@w{+0gA;Y9*xRkVDrpal-UV7CD5Rj zm2$B~(_?DlWb=gbj(NQ+{pYWLskhfFxo*7q?&+IngS`E+kaj_LTycEbX1q_f`ts_# znaAJU{^I}O_rBSiVCLcecKDO=!yiBG&vW_o_c4>;)~s{P-8c&=N1^~oYq^;rA;#~7 z_WtV%UZH=tBHu5jWk@}pY^U<%^s26LFL# zAK0f7t8JK3FsOmHLY-@H2R zF=Jz!rRi~%CW=KHxi3l5IV5E3wpT88*!=DEQ8r zy-L-q4uv7OOTjuD12&M{KKEfC;KHUo?zAX2@cRzTgABe?;0MLWmY}(~_I)Sx<=-z} z9A&eb?ulC{-aw}}#W*HC1D9$H-E5;SyH4o&<;fwiu)co+`3keflZC!5F%^@oWJ+yn zlmtKcnE3nepp3pAVX}6~@JrB&I2c(H7Me7@z-I0($89Z$9VS2gvAp?wgvr*_rnpcK z&PeQ|g`^`iO~kn|ZCgQPhsoda@_u>q=_sSUG{{Yki82VkwaODHB+y=ElLiq%jNaZ& zdd%ls2*lMpSDi#vTG0W-sB~X6mKeKtTTQh;+|>K!?ah<9Pkg`Fe9m-*_RK1t49>)A zh(V}*uWM}5RU66`Y62`_$m;r+tbzxrlB7*m1U2wAlU%UX9;y#|W?QUg@LAh(y}HVi zcJB{!48ljOCFx8voMx(Bhnh|6;GC-F!KeKL>|8$RP=g|R39xkyRQA)A}exXyQ<7kByQ)4`K06|`yeg=3vL!XEiC%XTEsQH!XH2Ze<)0l|as zw7tpQGQz*jkfuQZ`nHIlc~NgCcKCf}6@Ica+=;5vT-9l5i4cnE!9e)BGd6y+Y(4St*&m@_p93*UgVp6^>w{G7#Vpqb&)CC`*Bf;8h#44mc8v|Bso@S66&EBmos_fmTvvA^=dr`Ux(^Vl6X zZ@zm3VGy|G8b3PNwo!g_P0LA(TI$M6!&7kY0H5H9_D^|Ut*(HIUsnh3ub@Gd983cg z@kNSysO%y+xeikM;9Ng9o0rpG8$UCPkCznal1R21!^irPoK{MM1gp0H_~x6o_yTTt zsL>?B#9Dif-enk31!i-ll-LlC_TFbb#-QBV_dP2q%g|Z1tl`m>j-e%J)U+Qm#NcsA zB^{}N_Z_0GQsHb2OMx4S)LGr)1f*Ku^TEDV!?!?KcxkB-Vu;+mF5PkA3g6z{UaK|V zR6ckY3Gipv1e;QfR!fT!=_wVYu)Gh0ynFK*%k|>+aK{QppG(A2W(7(Z6BxhaW*`;G z7CrcoE9TFS^!Hy6Jh7qr^SP}}`pa89sINhR@PZyTqZM0)O}(GDfO#Jbgn%CJD$r2! zrR=BrukPjgVCdqJo3{ihaL$SVMp>o_;W8R(~E0b*Lx} zx~pA~3w=Rwm$A;+!YS~eUwbx~<<0-`l(CFW_t$$~56`vybY!BRqDD)Zp~W@+#EY9n zdx{9^)D@_L&VW5vw1RU{UP`)xuWhe2G-_K?uk&Oy}X zicd8Zr%a&A_Oh80=%x8qmxUFLbO7m9N;*@_WjtO?VZ1RG2Q0VOn3bA803?ncd<$O z33z8ifPA-nMo060X7C~Qa)IETD zKx%i8fFhxBHEj2{lk*QR-u!;>1aG2O0QdFgy`WV&DY$>#t*$}prPeO>ipa_J`QfE~ zdGY?&EZ3shnOHnD#D7*apA}tdzcj-BXMi3|IOp z=Rwo2PClIcnrUX(b&MyLG|FItiN?WeOO0sg-hm?w(}%th{j+H!TTKNV+N7Y&Kn=Q7 z$@0m2C)c3|O&|DHv;ml}HZc9T!7G5+1?VG5F;`IeTtIuP*VF@(-);8Q>Baen#ryNu zZ!Zp7?4OJqQ-D@r2&}BLNrM)_U4nz^P}r-1)AeZl^!K+Xmj}7%pNwbYrOOBz=Wv+V zhQJ_Y5*VzyQyhSlN8|V^&iSA-_LF(-qO&Fe#gvqHOgcqY(yqJIia8kYiI3(l-+XxY z@$#V8{y#5!(9(Pc2aBAJMar2L=}yT&b*pJ$qd!^ycqlXZ**az%yPc(xwFNQj)rSZ` zhYvO8*)@>e)?dE<@C&wyYOSqiSG|YRgx4~gSAY)IYwdgY+&@lF-<};f@!ONWUU4m( zr8kXq@Etp#C!l$85LybdE|_W@4PdLF`kU9Uf6;bo0CbHh_t9%9Mj4r84I~UB$q{>S z{nu?LC%IBiHJ1w5n+vIO0f>0e_JJI9hiT=(#0!9q0pk*&fH0AJJtc7mEgXLA zi}S;>rFPhMg_)8x6!Tr$YpdD`^j}(OLHVg+x^(C%+hrS|mQ`&~zQ8+Z;SgG=)f%VC z+8TzR`{c!u4(+>bxd>e(xCr43S_rI{JPqxNbY>664%$Auc=OvY+HMTbVzH~0mcnhZ zo7yvj!B`t|FaxI?w%?!s?eZ6Gd#br61}Vn#TL^ypU)HX*xvCq>{w2L19}PGS6Jj$4 zx+nAHmL6M;rwC@iNoV@k&sxWU_yRh)=a{O5qEeN+q$6qXwWR%Mki)LCrLMmhA^#Qj zBiQu^VjB=s54LO#A4;HtVNF$Hr%7)hLgstz^~Kgur(^W7(A84B%8vaSa~#8ml(L6$ zNl978txVC+E`Hv%*>Bzxb|^ofbVNEsMyl1L6o$xH7gMut;!0spFE+S`VHP1HmtxD1h3+NhlN*akh#1ptFz(JWNjCetPdH%P(n<=@0;{)DpYHX^irC+VK zG+xH9Zl=p0wmZi=P{qh{Un^5gOM|3lE;Gy*`?S@l{$ej}iZ8qWeQjmcO1895k*UcY zY@fba70VEh zW7NwR7f%kCuV0<-wuU-FpU~zuh|}mmss@fw^b7)nrCNdg>Fnj+bxmw59>AVt=;2*Z zhTU*WfP))DjmZ{XP&eN7Eug*JmQVLEMYAMc$!gS|71ml~hw0v$hjAWZVkn-x+D9es zBU>%N685vo8CwZ{$J7B`>{~PU8gYNk8-ITFFyshc9)?5@bHzp&L-J78vcRhNQRl|- zAD36#o%?-c&FTT!crZr=CIgR`1_(~8l~v+bZoQs77&@{tcT2VC4vz$Y+N}hgvE!VE zADlw}=Yyf)U>iGSz&>Y~w84R@DSlLdbT z1BgL0a)F0@j(z#y)$WbgYU~h{wPy7b){#suGqB#}I@e^-!DkPfbyT@BmDegK!FT9k zU7La}(M;Jk^I1Q+eEn$K)$Z3jO~C;t&0g=Ay!Exmu7Y);DIB{nKiV(O9{+fCzT<7` zc)bVsKx1Pv(#@z67CMK~B9|l0Kl<78JvRVHHZ6~Aty&slSUKRj+}%LYm}cQg4D(iH z{&w=;TcOM0?cwI|{?mSnH?fXHPa= z=1V@qKi)=zzW^T)=f>#~TagHk;^0WC20`s!!KqG2=^gk_XaD6k=JOq4gQ+xT zpH_j}8r5l>Gssw9J)6Vn)n&iDcn(K;wdt&Vx$F?HurULI!?nsBG{*B}xHprlnnjr0 z!JoZ&alY;C>LXx392y4j?(o~Ehm2Is7$8hlv~M9m2(fJ+XpF~qnY<#vl|H__`1|4f z<>Rw$eDxbcfQEL48B--UsSVmMxjMkABpH*!Wcfc0;p+Uw^R4$Z-x$OIcT+Y7BV#~k zj@q(R=2XA~X;|I$K|I3=cz(Xg;J;r+@kcC#_c-NXQ*2#gLb0(03;Aih;ytXJ_?Z_k zUxCbBTyEQeN5D908Pcfv7_5T+bcxwW5vEVZ{bqXK0)BM$Y}<>6(HAwRo#{%rrpmZYH;KwSz0m5p8AQhWxlke+m(*t$F9t!nfLxOuST z;8b)hh|6+f%+4MSf>c5@6SukmKfQeQWbKK;C@KemEARn4RnembUdl*dcYXQ8^8F=8Sa?7EXmyEkCm6=SliLGHW*p(+>|g=;KVJWI(*5XBgkEqpHB*LWke=ouGwTkE3MqP(=7}55gqfJPjPdKS#MTGx5cOq+nEM* z7&drFVCdf-#G_|?Lpi&8{Pghn?B%A@G#yC+9m^m{%9&{37+FUo8q-5BzTe9|nU3V* z^1F=%7Q_b=MuHJ7QCx>KH#zkY#mCepROM(akFGY>7?}>nOR^%?TIOL^U82JGP|R%; zaL710diMsiJxF>w7G0p?q6@}W>vHcYw*tw`O!a_;nvm(E5A*WrwxEIehGF^+h^(Bfd=3z%Rt?*eVjK;p!#puvLO0=t` z^k96Oy`#PS@!5+5e8n!vsFx_AtZ-0r@CJkg%U_yV(vN1u{%_|{)r?!`t-|5a<&%?` z-w|;4Ix&@3Cm5~*@>K^jKrvYh$@izG{-U51e&KeUR!!;{4osSLUw!lVH3uObZ4#sT zx({?Sfn)Z02jqvF|2wq00~d@AM2E#Mpc?q-ppB+}r;7~j&xfTiaGA_<{Z{&+UcY-^ zZV$gn+W{UtI8QAJvZ;GR!H9nYtYI#Ui<{<={gLK0-j;u!l-PO%nphD?_hh0r(s7=n zvoWzspbOBC(`2%K{qX^)BP8Ylm^KWv{=u+JfA_=6W6&1Dm6Zm>qNj#lS|6c#i_iGA39NTcf7 z@)8$PJ6j#FkB0T8gFGcBh5rTS^}n}o*dA!>bATNj!CI|cZ?L(Fi6-8JY4HZQfPNSs zM0S4OR;4o>+KN)bw%w|fI(^LROi7+=U1c1v(<3rmCeg))iI&%UD@%Zp8Jae0OtuatdRe76X{UtRjcrQ2^%+R_k+XvY~ zas%Hmvd~)Jo{qO;wo}x>3cDL&-&f`$}tVEvFxV*9!-{eplYUJ*jBe7beMxN$_h<6lAtx zqk6d2r~*!pnVTe5E4#jxU-lUZ8ov&MAF|kF0c0UyduBE`l$@JxsL!bKZaZjA7GIQM zEdnQMVILrI;8K&oNK~0pz*gS2!!PCc{m9nEY>YF>GLsL6icgVMw6XzSNKcRK=jra^ zEZ9^Ysx;LSi}P`?xs}z~Rc#F8K38_tFXjFF(`rNj!rjUr+HTraii1UeU~`s2VP3?-#$(f1H~N$? z5U|&Mn0oZ6iZh;F#MxcN$$&b`-8<3XO>3C{y7{nU(+q3$7}-S)b^Mh1RTp0z{0v_o<>*fD!J-O{&yE5W0QFD<5ES*LNC<-Q`0KsFnH*c z9V{R9y34+$9DRTT1g}DCUTJ5F8Ww+H>sl{*^~)}(yXFeUV;I#f!g@F`1emTkA94jZ zYHD@UE~xt!RWpelQs2j@;XPs9**O)8G|O;dewjhon|6Czm98(?Excya-40S|_>MH7 zSU~n5hFw|zygJm=3fdhb!WuNzP{#Q*Ub8MZwzAj}UCa0Ck$ejg>|qC@HX1smMF(RW zp#fR^cNh)j-y3Ab^ahTI!R zsy({-aQ#oJvz-=VBsMS1@GOHV!yZf?hB%4wl-{fS>of8`i#Rm1;bdTY*&^0M9S%^> zAR`CuR*QCjM&4&B0=BcOo)P&q!*N%YbW7wa*%fP7Ptj-SeSV;LR=?1?O0FS{VOtH5 zOO?$Gcr!V@Uio!5gYY9%PB=KQvet2yDf@$1ZF^h=+&4qZQlkDjbm4q|&~F*x}Hj6T_h zZENp!asL+JPC5otXCUWeDLP{hHCR5KB{mk)uB(7MS$)lH+!Tx%#`5Wfz0`)4qzu#j z<`r;(xNqm+;92&YFv91^-q{+^bhb{>U5~PQXYz0PaC28*cspM(DOQy|#Gy1(aw=IZ zf%uHU%Vphb?_((J7thG8G4#+ZE^JvpCqx^IV&}`h@>|;x!A3B{Qkl)fn^o+$R?BG|uHz{}s10T)2r3}zded}96haM0& zO7=ZgrWpjql3CirLx?kJ`t6t5e+T?b$pw~?Sc4iy4caTGX26-9&3+!d1N1Ggohu_K zfn~~|Fc~lvS;PViy|bbf6pI?uJA~y6e6KNRADytZP89DMbYingNj$rAwt2mJj9|kP z{>lJGOmS2%E%%^ccA_NjA=j#B6UNp1+f(1oR?wYek~BW{=q0gMqfbitj*Y3k4s(^X zEWxgKJ4n%m@kLdKKmzk(p0Wj&2;OFXC(j#lJ_c-eGOWVFxb;$*vj~3e2BbsLQZ3eb zUaEU}#CrEDWZ(kxc!}xN72S`j5Rn4N)w{?07nawQ2;p2le3R|9ijSd15r&^Ll}ROk#wvrBbZ zQu6@5$MHbhspkE+?@!OK_3`ry@Txi3tq0|6)m66Ew15Z%h{n79n(F#Me!HLhKAt(C zj*UZKUcTPXTb%&wbdBPxKxGjSftoYZAsFIcumyHG+7Bl_S`zm=;m{Dh1vKoSC&hOc z{6O$=#uZ>TUDsi6B&ptgnNQC@+_=Gm?GV6jVb~j=M`=<m#=}x za3C_zcjl0J!~nI{j*QQrIl#{hgn&WG8S&Qbo}2>+`V(k9KI`1!IVa0{H(j3SK_|iN)$$pZ#8qAA53-0G}!A!aNWAHiMhk zWb%w7_ucjWG7c_wBo~#&s>b0lY;Se959r~kz8-t{5`9T5=|F%H4m49dF#sRy{%cwfiv3~zV2tlV&F+N!l5O@H zDd1+?2*qS|=D@A_Xp2z7W``5N}ZKVttO z(^@2Xoj&=%o}Y-tZ=)%Q2aeS{f5KVE9y{8W8`X%7)R4jL)b?6RB<{ny+=n`cOdH1o zUZ4!G8c24Lc`XtEK0wvEODPC8jy-m=7CAop;5*x%qINJUs$xuJLAMw4F86PTtdmX` z0_tR2C|lH-&FY+-37mHiv@THN*t4sd$Z|=W_5^fA)y8OI1ArRF{lPj@{UPhk#~uqM zIVy-WSbXa|Ppnw_6tZ33Hf*`}_2_pW`0xyDz4jTS%r0r_1k!h&2xzbI_nPYtnFoE5 zvAz0avkOYV-JuDxGw*gk*3da<1-R}}*mx)UE#$N=@0 zG#Zuxx|XZ$Wy@?IR=xR+Wi4td_IIl#WRQw5kz9>&Ii#*ZmiYufeOqANjAq108Y&bf>L-ZqygiCcL-J%e5xIEUR{dyB>ymyD%s0|(6K zl}ie zft3>*C4kx{`=O)dDb1$)v)p`_aC6xHoULaUCL2U_NZ=Jv_I7$s0Gny~;V%*AxP60A z!-P7j1QQG=TI2|i`V@SKHD(56J#O3^lM&rL=qTR2N+=V|%t{8x$ax*_uZZ;o2XfXD zw_5O7ZJ(?@sM+yqLZh|ow?FQV8*jXBYaB=JBU{ro!Ki>9TSR~)Yo)R?*1Z_)Yy+~0 zJm&#rg0Ukr*tZy4UrU{Q9sfCD(VJFl^oA0!Le0^_9;FH(rzv)`jJJKX6J9$~DV<62OG9E4iU9j6D z0^W?dCj^&iQ?1z`%_H%zOWu(r+t-`P@n#x;G7i@}l}RKzp2db>`_OE#^V}Y;Jiv@M z)1HSQwiGa=mZ@6Q$jUol{Q$5x%Q_>N{`xUFpQY)-ZWceYM?jCZP`3#=9Yj&fa5|SH z4W_Zw51Gc+<_+866<+|V2)TzK-HxpSR+n)drm@funV!}3=3_%_9{{k1Qs4%}EhTu; z*T-Mv5ci)isrrA@T4S+V5yQQUqz~3lL&<+>Q{dB%X(Y5;xoN8&p{tJ&sDPV%o|z47 zb#5brmJov5>gJ=Divm10EgOkO1#TK9vw|-=Pzdip9@sPNhX%H0GTUo7jcAIgNrI$_q*f8}mjL1{ z2U0I}0xk7ga*C}bs#>%tQjl78ol5_GmIE!po_X89;7WKDn=YlWk~&vJl>X*8v5oeAJg1L)1TKG@$PagE*odzJ&yg#yE@ z*h8u{N{}NKRJN9`p)VKV>sh;SN^TQLU0VTr2v+g*nli}q0C!$TA#m4+`y0XRuO8$+ zlIR4SK^)8jOAuLra#O8YU)HYx9=x4l-vZg?=miu)0OLtwRlr^m5;=)x83&nnPl;=k+SxE35&AZhfNFa|fsZIJx>wzBf_YaOX;l>fuxt>3 zI2h7~~o93l@@u0qkeTU~L2`7sgj2O?laG6L{{ zCpLDTBxvLSkR9`XpYigW8`ZF?C9vvY6ZTHP!y|V?jjbK?|2@Hc2il1ZRKRegANGLl zY%A?pfn}PoS6cXb!oCB)bS`H6C(YX2@ySy$wHMAj@N3cbAJugS&6hEn3$=o73d_iQ z%AG@J`oJG`UEIWtw?*HhAUqYvE0WByRxw)J+q7)v=R~2oD{;=)`-Q>xXzbT%A|;(h zFy4T1b1XtGk3?Oq&RK+sY9U^|HQEhlkK5cj(y5OA>0YLvZ7A3~rT4qD!=Kmi5f zw0DDD=P8I(TTeg*-VM9c#{&Bs1Ub6@qIl{yBK83Ju&~bZEHf7iEUIhq^=r||)8`NN z-bKH{3KsxB0|*Fav}^x_ z_y>fgo}-9j5MO)96r(cD`&y!=wK~*A!{!7Bvdc0!GQwH4NCRHg3_w4gGn$t6U%(mZ zcgBhx2$+{)nq8A(T`oH22vh1>&24kwj09|1W8E8N4qO`?28lh1!0aO>TV+RL;G`66 zM56QCfmEM@@ZYd0u>wtx9i(V~51f$&Cm46=zFO+aZE_zm8-TKqS_wJqO9`Ek2d8ql zTC*uSAOSTs_MooCX0a;!TDb7C3(m-dSbwfc2NSfEn$EQakgyaGiNcs`_`i8@RxSkg z+B8P8Wyv*2nTe&an@yr1JuT75=EN!4umSlMps=tFB&s%|6^Inh02gEKN>(?MBZBw+{oMcv0y+1sVV4_oZ=vgx9!c1BK& zlEs>?c=V_yJ% zHHeTdJMd(`-4`T$rX69`ZEj1yt+wc$2YJGB1S+4v2>@#p+-lgWrA^?4wFj4Xa4bn& zO5$~@^y)*MoUzLBPf_q&%nBAUmq7LE!LdAfc?S~gNCAPN#R&BjRLXV&@yOSJFo`NG4eTc8l84A2Bh*m$y4dR07Q2r3u-Y>w;s;( zbK=_>PWX<`pcBg>NpcZ;A%n{Kdj4|tz*LqLSrih@@^wh1X8_T$&VEE9Cfs+R7wcBIQ1 z!ST1Frb$8fJv_~&aJ}?>7>{=!>yY?$9zl&6@CD&1V*$nl$ONnELP7o-dDr^Ya(jAw z9gjB*;nI-_lEClT2m^x++$Lfping|+lJ!qq{2;Y`C){dAvNrbCTrWNOnr)cilipYh ze!aX_e7=AD`OG&B7sr!1H#~w~?S23+%E;_jj>@aO{jQ^@?>Eh=>qd+dUkvei;cUy4 z9fwQ`C{tQfl$YC0;uRJVE5JKd5m&IM*tW@{a}&n;-0J5Lp7C(ggth6hY-cp4HwnFF z?LKhqw-Ak~+igtWh94d=o?{Q$O9eH?$1Tb5iZnYcX_o!>z59y4>N8DlGQ^*@8-VY` zW@lrYW&|_iWPg5&PDXS4a=_o8UM?eAw`qu1H$ERgxN~~!Q@aMl&04B-F{~Z)95uhr zB9BZW?6Udjlm8OFS#h_8?=7iQ;~X5&Z$q73iqj6I4$N>3%YC`CD0_JS?c3)u|1Z{U znZt=lRzI_}p;EElqO{zcPh(e%1AleQIKW&0!vJ#WTaSYYi083-Z(4`#<@@Ij|LCLt z8nw5Xseo$~zVM#hLD4wL7P>Z;$8sAl6iuBT_W)q&U^vf_DzeWBVG`=YhZVU_L#6yJ1v(=X4vyIXrW* z$ZBpF)=E$WWHuj{k#_MOZuFuK8rBZGwuh3Ujd%muAloQF-LB-`;m=UCddb ze4{`(Qe3Z2)Gim}d*e4gy8}iGjp`c>*wIb)J_KWO9>U} zoI|?Q0YZaQsmOK&x9+$(%L4$o$Pv7F{MUf3&^xV#3C>=WE*C4oDE zWcxldKtPq;q|}*^BHRCXyVB;Ul56>oo@-ws{6!!E@_>Z3;IO}R)Hvwyua zZwsUrRIB@Tdmv^JO>|b>TXjxm)mi*FV&!Mca7GJcA7wYTCMY)bCtm<_;XQ&;VW(|v)0$#`*JzWYH`*ii4(hc zff^?tdjJg)lfs@8VB?Ay1!2dJr3WtkNRqLVda z(lZoT4Mhq)PQ7G zGaQ4(go{h#b9w+@?}qH*;@F(k7GpqS6w`boW)AD@p)}VDnuoxPKR$22$btof>MpVU zEaj~B$zY{xFDyOO+6Kcb;2UOFuNtrhH&~^N5cxJk(RPS!$QX72Zqlyh(326{>AAyD z1`)Kk>aKByan0cQI}OXy$BiP1KAG*^(6Q2Lbds@VF!MM)*xT2mdZ=(Vy_i;2&&K3$UMyN?{9gE{tfT#FaKJc{<6)P z@&m}yjAv_k-JLY>dk_YqLrc37$hq7Y^62dB^(PtRt8H|%;iIawpjkjWtj86+#)N~PIgZ47>RaB;8`G{fsXv~|-Z z`kWQhZnT6+47oDZat!_EXtzm6L(`jiKcH#*ax*TwAgXfK)cgKCKO#T7e6bTU)r!$r zO|E8ELTptEA>nkAwgQ}IjQsBC?ELujWGD0@1doO2@MwtegZ3&x5G$;-6xM91Gr-OS zwH<3)rxty;yr?KLGqFD$8 zS<=MjsD17aZe&*naDH)mc67K0cm*acIy;f|lmq+#??`;}i5Ji=59WXV>g@7l8#^|F z&#<6bMO}S?R*H_tJ6U9HO^(owgAISOCtqBwB~wYH6_VkKep~eR{Z;JQ=P>2 zgT|4r2sSEYbmq?oaB=#}(aG_@_A>&Pa$z6121H2s#H2o1n#cPPvJH0O;n9oN2N!!8 zfG!GJD#;SC=;WPm#s#%mbD;1Qf$zJa&9cy)SszR4I?=on>{G~mBrGRgUBB=?=c zv_rAFLt}pj{hDsCQod(x?;D)OzZX|E&q3{-U7otFyd+>Nc59of)l~dqjNOQg{^yGI z!TS5O*%9_**f?>hO4Zy7k62@Xj$)7C7^@$5;w0?V^=w$Fg*35tZ1Ws*i14kA`SO){ z+e!^#Z*D&pehuJBnCC!aC3^$SIyHobL02%SNwv&&M6!;f2OmH$-d|nceA(!d;xW4K zA!#2Ao6S4fGOOGwRWcN2q{G{A;){0ud9&ll#{+Q2Lc@BkS-8847O>t~cCooM75;oG z+s)rwMsCljy6@2L<{`ribK2JnVN$0&SJwr7I(P_b@kws}$AdCh+ z^Z4-X>Dvpcf^DeUPvEO+i9Q?DNlOt;aJNReE7dyfi)2u9z2U*q%iVE6XbvB}aLde|L&;HnLOOrv#1fpCu-$9jb>TESoWq0s@d-r-i z{OzJGhv0SBAqJ>X=Dt>IvtsITgb$0|#Pv^LJMljl0b7ZC?_>-)2AG#@taiOH5nM3L zZv6^8IQ-@4pL-ZZh*fpgAgZqF28+pQhSu0>0cC#@h&OLgsTV=&&yE-1a|f5Nx85Q@9ZZ9q5-L=1dDv!FIF?Q;0cP1$(4)hm2ZMQa{PNXiZtuIV z;pt*9ScX;dHrJKVpf8OH(W>Y)kL{nb&5Prcjpo0K8hUlCfY1Zzdo7qECJ(|T@IlFP zAYmS$K7Vzvkyl!UZ7g0MYIaVr_#8-v)uv#YboDUPPr{zRIz5{)U2qsaRS;*#IF|;s z+-mmJZ7Q4lw16S**}=)njn@1sE;ytq$@`pm1p$rh0ZkL&QmREf{g^LLHq;3ZQ7yCN zq;jlkr6LbJGpqSBaI0cpt#^3vw~NbJYf2eynZ%tmC7FpmN}fR~JYy^^vEIy2u=5sG z>e5HHT>--qSWPT61D2yBta}P!y%m{oXRa#7M+7()-J%z^*Q(gWu6h7fW789c6u{3; zPdD})+>z6b5;^OVW*}3W67=sg zX6apYQn)E!33|x%B3P8MRR>X269G%UAg@&~xT$#WurY*Mc+yt=gBL>6+- zLaFBCfXJ*o*cqsQ{&Q7IYZhrQ%u;}+Vf+xZmC_Y_N|nJjxtr%4&SXIfWpLIcRT8wj z0C#FR6eVl$dcc`hp6eXcKmWPv-bf6YGun+Sa@m{@mQT>;=e6^EHe$8~}^au71A*}@d}`<@L< zu)tbfO|<3V?58>Fre&yYXnz`+(rT(=*{(vk&Q>UHfQkhR(8X`*y1s9>bATC`W?T)j zE8hzAH#K>JC}kBK*uRZ{)f{A3bc7|4kWD2!!|uZ!WV$ts$;kWW-)oWe9Axl2Z+pbf z6Y$l!Hw`1-1>{7<2ltNUG4k?D%5RL2tBaE7V5cI34q8^sKSq<-)d{~v4$3y&hw*{S zbb-6?nwI(uN8_ORvn?iT*@WSJ63@MS5w0W`#)VXtkNopuk#26@Z+OG8a@12CXtf2+ z6z3rY6&+L2uM?+3VYu>fL*u@rI?d*-Bd+Y^DPBbpj3shDAcUnYJdU z_dDo}hpatjC#3K;OabMl6_vr-GMrjz<2DBmP$wrc13HL=y<=@xz^z%8z~;uFP6k$7 z*kO9pW9S)^&UmcdD*@wCWhlLyU~~2iJF{tARr4Y8Tz?*O>_);}3ysxnVZ5QyI~!95 z3GcW;>h`p}H_8}!WIA2+oi${&lrqGc*$L0WZ?~4KU*C!J3FGzDMdjDe&W!IV`RNna zl=t62zXw0xS?djW^L#!;Sf&qZq&LSqfI-L#k zN_!5e#BmAw4Y|9+fUr^wlTsab?vNhT1nO>=n6=YCG2ge3n&kKCK><;B>Kye$)^0?p0qeuRAv*vOu&;`65oDs6T zKptl=wf82%AO*{QYeR>#gr3aOoHbTq@r7f7{j6XPL6J?-sWot$lEk?7&-5kv{l}jL z<~(5vY90qH;Iqx575F8KW%Z3khAo_KOB;(Ni3Fk&U=>WYDOAn$p{A;G!;B%wAJ$*N z*KBbi_p#SFw_B4Vln5UzF2gxOK2w6aQxxl)QQitI(-rop%Oa?*>6o$!=!b^wWr9>Ds1${d7 zakuS{FYOZ>%kOC*sz~6o3_)z5t1#f2Hy+V@7hy{Oyn)2vZDA24;UsB18ym7qW`y%( z8uC*E+2iWawPIODQjp@wyEH6Kp9(m)n%A)EeT@X1EtR%x9%>rfk#{^9Qz{;if~@ko zGM!eAb64+P3y9dwV*0Y3N8&?d!@c68v_WADTX20}V%5oKX@?8t+tb+NP>P9ATCTEy zLbae$nK?rhlAywnjT>$}TC;l`QDY$j11l!FhfxC=DaAO z`8;J+xnQ+pUJf($VpO`oV=|QciIp=IWZ2J0tYQjBD|l~7`oemik?pqGFlb%2Bt7ji$%6VDX8(bZ`J$v?r?Vz>ATlV0{(Ya28E#}sRC17bNo zckZz42&C)vPQp(X%uy>B!3Db{w3}4o=?(ardCM zD$tmxP{p?RdY9{HHT!rA6BJ{5qhmcI$Xy?E!ulD6vORlyarAC+aJXIi&tq&zL3rjM z8pN5E5sEhm-kGKf&28J@v}lQacJ$`--A?F6!6BPkQff|2+azmIgX%DF;0uGujV1c? zR}2B#3cW5q0Xt-;w^!e*GN}~Vrqt@{tdFX90oSGqHsBzZ*es33H!y-1f? zu1E2NYc2lS(aVhjmWJpR)&)euLsE&>5=IfB>qKsjIf!EP>X+yTueVAe_yN2rRzB{L zO*dSvwmaD^c@DiLHp3HBKRi45$4>ag<|I|bE>BZ$oMLqAwNfF}klY~V@ecpw^kl0@ z`Mi?1k}C*zZLBoL6myl52;slHU0G9HN0a?awJ(n>jZGK<0Z9J*)KTl07#lgXjpyIb zIk%zJc&MgtH*(k^FEY-&Rh60NROP~oDEvF6+tA-Fk8ft#`ZK9O^twQ96Ra_8I*Qbd z1vcr40}BTUDwKM6b9A!**W!~J0=}%Vb2OMYsXJh4<%4uMV}tZD%6)%*3KQE~u=C7l zNjlptMQHfx1_e&W)2prY#76CqcOCBJ6Z4X)huWJe6bZLpK{h(W%`-`kqlYD z#0C7iRa-uJlDs^>ygfiTg0_wlM(mA(?+#4F2f5WX=^E^oon8q)dw+SdxA5R04g5y{ z#;kZD`EDk5c_v(VpKO&~!ns7FvR&0+M9*v{ z*|&JnmGIl2&(CHR80F=EKgws|)|rFdIDXp-FBHt$aU_NFp|PFxK>9DMN~`1D@+e=F zY(2geP?071K1v-;GhHdi8H+lk(Uw#4#rf^sA)=Eks&;HT3`+>7W2gZj9iRnhC620I zCeeGukPX4Eq|l0B4k_GN$TA~tgQrceSRgK21RtH;oqyP0vIHzqh9(A(CZsNG;>cuZ z-(YEeo8;@Go4fO)Ss>||XuglNREy3fRH=;(HpE=9{INAzM_!Gh5kqbkN2jx}@iW=R zIua}4zuSU)A)3@=dnyQ>!c+-A1J45F zl(!x5>!aPuL7qF50_iI@(nE7KHQm^Irb=IM(j1rw0=JBM07+p{C%^282-l(!t3ke9 za3v#(L2hY{L!@=&gn2iP+>_`71bYq&uf8~dl{v^V z4q+3lv(biA0UVSz`kZtEgo$>L7rv4VtDYzM8wXNM5mT2a3Mij-DtNXG1x|D#w%`+} z=%D84_`})q=y>MWu4TeuYUU9*?5!#;mt-6K3W%=<`w62^1(`RCnf_xfGrAT_g}ho_ zO3t#&a6({Wcxq!<0-3kJ&BWYmnfR{UUBhx}pH&L1GQdZJRtll4*|N5`H!}g)TBeMm zH`ju3?9=2+z}JC9E7y&%ZdC9(?dLoKyCE|>SB$kBTj)C|WD~loU*Q^#c6D2)1Fh`WAkQoLHOb9c6oF;GZd_a3U;QEmH}Q_9b1$VL6|or z2nRlG6MBAmeRH+%wpxdH7hH}&verw*Mt==f#J4OI zn1T+$3pUr)HV)1gL?2yD2nUS$rvBX*zlbpxOQ*|)!( zUqkTK^{jxfmK&qOu{OCGA0j-K7w{kw9x}U*Uk5iLkb8Q5cDA@#T+W4+Yso6vglOke ziC){1Z55t5^F@fs%*GpieRqC!c{`i2ttE#baxp1&z>Q{A!bxY50=_*0cC`q04h#&A`Bp-Yu5rbME_JRswX5myVz>hO*+H^0Ov-`3VXDcOc7Kg7w2Znc+)1eTii!jXJ<1 zfpdLWzqY{9HK6&xc9T`~3`7JDD|F#|QykEmU(YTVbHms(u}1kU2yz>r&{+~F@TYZJ zY0jV-V3SGg+$WxAazRzQ)5%sPfdko;B?Z}33zj#LX%J6Va?dXoyY*{$QF05_Dy+2= zMu0N&iiS4?ti~~HdAvpP$<+aJ3kRc4BQi~PwwRVB$)pGgr#p zK*+C)Kjh;#Lk1=!txMB z;pCL(?3__|&{bvk+0|j+9acr_;LkPY)JMcn*deC9wNO(&8Kpp zCW0vr7=WcW$j(x>FhXvV^s^%}^1H>%EUZoE=3;?$TTsGom1Owt9PG#RklwcX^~Wop z<M!`sV7x)9`_L z6#cLDWnY${Nln@of)2pU#ikM?$!fJu4UXUK^%>at$<@1S@ReCEXG65du}g~gJ^`T8 zCivGVO3@-A%860;dy3v8Sz|-4$&S5>gw;NQ(_$x(5#$R72m=|AMoe^}i7T;U~f zW5$PqmujGK#R~yGm<6;f|kl;owXM{A{g%#D9 z(QVB2$4Y`B{4+HWxx^ko7bGWzt1tVOQsvNtZNyKn%LZ}?SDtl7A1lc0^;{0;AFMg^Q zWs$67KPLkm&gwd^5UwTQS$Ec_D85%0ZgvIYk3W3;a^LSuVuJH-Z9irRO)-}a_||dG z93PUKVCQ+5oRbECUT$jjtj*1&+SfmJs#Bh&P~oV+Bn0UbTurw*3SE3s7C5Jk`vFnN zQ(N@UU(%;HU#j3Vs2stMma!xad@qVrmFe+D$+DAX?eF_HSF8i^BSaQwyy0+L-(@4| zQvybvgWpN9)gbLR-_2-s#<7AUPl%Vz$q>DsYMez>Dea`%YS8#wt7dJHGBfATu{TSS zWUkm${GbDCvs+dB^7~Y^{zJ}L>YW2MDihTNVSY>;3a-7ftb7%_DE32+Sx5-L?Bd84 zc+fEjNegJ~X>9%W1^eSZe@dVJclpQ1v{NO<9K~vm%5wB$^#%06LPhd^3$y~7_PyD} zR>i(P{0P-tY+cvR*&(5VmjXoc;Zh^YA^x=OK7-hk!_49M-&!wteLzGl~C}X@(Umw2Q|A901 z=2qBz(Z=SM0xU5{jz?`k%^FA|Y5j_ShgW!N>G$T|%CW0o5?ufj1}&LQhkXnz=!^Q5 zU7S!&t5dALf0*=qb9WlLwo-L=*%jHtfg)0x)T*&wu%rA|1;NMeKmY!NHPoiVXXxr( z@dB7NTf@;?K2?NE8^;YmCsdI>AKVK@r_L)*mVz-y1Lr>$8#Ghet9tGpo<#ro@!NE$ zKGwDyRUFHIU4fL@HX$ND*Unls7uaYk!LNZCZT4pQe=GFv>cjEeF*EzANWuoM!AY4# zq(Cy#vT_9h0KQF)vGk*gmsfYov#a;BQl|IQ)Nrb#VwGXzlo0$w5C+IhaN2YH-Xnda z>FMJ3Zh8FvcFsf6o@>f!LM+8>QuM$M?v)P!Qk86F2xHTI)b#l1bUAaZ&WrY8i?SK4 zoGqO#Tgp2blP3BXy+4l%Pa4oT{`gqfUG)v@;}r$Ch`AE@Yh`>13ihJ1F@~>G@N;93 zeSCd!H#4VsKMf@ZB!j*IbuhQda;&3|h+ZIc#BJL(oRHRcxF*I2_kW2>1B%b z4@No%5}sWYCG%}e)SOvMD*Q`^@C845kQF>he_ecXI*8W5Ev;|?&Mbfuv#&tNOoQ5T zZ$KplMVxmk58?gfiIGahRZr?6LDNtYUS+VIgBs9sW6k zG6>%*V6bb^gz+(>iY4uKQG1w*;CwX+9V{Chv$u86Il*F;WOjrb6B??xBRD^BpKArP zF}fp;365}1E^qgX=_i7LIHi!vJasMSi@7 zAgYQ(Qf+kLt=%^jd1GXl+9$U~HEP(twTFLU6$MB%%!LisJ>a}l(K2VCbk}OOZX7kH zRZM>$>XM`7eC*~jCy@07kpXC#`3h{@AzqvS@i~2Ku!6@f#XGk0-?~h%X+hFja%dvL ztH3uK7N@HKvlS&ayXEoc_UOZcMLNrAF5$j7Wrn8EE_BXlO5hu{G+BHD;|?Kv&vB~T zHDz-CkJr%?{W=zGSTIZe2c9{fR+_8;sK#Jw(sAbF?WT^u-~ZR|t9<65wO7h^XccU5 zT6I}!wd`h>((r|GGRnh9%cNJm4fgAi~#{RvPv25xTvbx_-gDvP8TQhd+O|` zWAB`n8%?a0FVYd%PbukLPDRHMx9hmLxw+am;beCe!L`B4vNA<#SwjofN!67xNj1Gu zF7l#^cjxaGSMT>ORrsD2Q>(O5G~=@KMRx3BP(lllLo{|{(Csrn_o*!JzqCJR47%B> z#Oqq5#yV{s5GriS>|kFzYo?tn2olwguX2FS&+iT~%~@*l6_|-e??I?f-(rQ3O?B?{H2(lB;S#;?S2bwTq!!UB5iLq6Wlf1c*d3h zpRD7Hy=~o;uA0wsj7L{$-rl`C+(dRz)5zwGEn0FSu~EKeA>e9S^U-HOnpf0Z{O9`c z{I(s`1g`QTx0XZ^A$jH5joI05fxS4#>DAS|`>@-j(L)t29sIlKth7`#pUy@%)=I~` zuIR@(2P;J{u1@w>^yzZShi(Bq0liE}Mo@7*ck zYV}uwXM@f|d^FB5Y;BBxc_u-&~YT1#7@J z6)+Fe%xJV3{$K6eVVkg4!5R(pRD@_i0J4BOq+S%FfmARQ?*}S?5l*h>O>}?@g7<_4 z2<(RfZ;=2eiAA>{H2HgDyMLa9_9uzqVQyiqMCMQjNna4mbgK!T3`!$a2#7dw%R;;* zJxv@)W@UsDE^f6h=<#$0);r>Js!DF-c?>kA;ASTBV41R-sP=Xtba>aP&F7a#AKm z-fnYr3W1eKvgp>?7^0=T>Mg4>N12T`d_J%UYXJXpZ30}Gd3Cx=z$})B ztO5SF^y!{Gpf|$GexJ=q1~kD4iv5RgkS!!m7GyzAlHH2&#JR5zPf1QYr7FBAyeDV8 zWetwOjsw=gkz1zzX3KUR!x5jC!+PdnsG9e*bJ)&aK2pIX&E-t>i1SeH50Mxz_ArUJa=$5 z%P}krlAs`q=9v|7jjar7b4$DAntV!| zf8C0MTq?9M9Ml<$fDzI;-E`V6h$3S-U zYAt1j;$`R6FcuaPjJL`@{}n<%!&qhwEwe40l)=M<}A`E0UW5@v(_Ojhkx45d2Fl?)hW%K3Z-K?}k?afbcPu_k+BnL5I#2qJcN zkMk0OEzvrW4hu=^Nf3AB8DBwR^YArTrX$6u&IxFQTHg6hi+`{js`9=fyP_$@d+K%8 z)r!kCu}wvCy>qH69NW^LJw3i29^b}JFu-e=8|$XaYGq{La=FNKt+lA-%2e0WqU;Pu zjdrm!lsETq8i?w!dah%sv3;#Oob&QRQ8xv=^+A-$T)}zeo%QPBr zl5QTL9ifb5rpY~Mm1bsyHV{8kFotb2H7uFYrw}~0Vn{iUVXdk%dCG~#)S&SV0`g?* zl@*3l`PWVh!O9!x=PAdOt!gw!j+2jWXbExLoIkWHnC@B{(HaF|t~f3TcyMn9XUHKE zuP2_Js?K%-;R?G zbi43xiy?2%&wRw+3riWE*~md%3&!TincJ$i!LQAb<=U|A%YuC2KiB~Y{D=cPV@EzJ z8wV}pAwM}svE{U;Y2#tYehZSPadv`?R8xlrczI(Js6clhB-Y-X{<$-pKHyMmY!W79 zZ<)!Y7PR!iwuNpzi|;}g_rg&}gkwkO#mAK)Uqn0@Z4YpCMQ<{az40WFfKsX%+1N6w zjK()OBQdLCE%_SH%iFiH8w}}SXmF_!f(s0(`v@V9Gvq@r&bga|Klgz1?MdGr#)%_A zX{O;Vbe|6Td{}YmmSm|w4KL#{J=<)wE5XbX1__FgSd$UEoo^l zMDjTP+6ZJmJpFlGkCB=E5qMD;$&Ff8_VV=!v@ylyVg9L7z$@S9i1uS1Z%I>X$t-rA zH9JYE51(&N+S>~U{!h!qdF_6Hm&Kqn<*C#)G~o4}(N7g0UfTySAs>Z}CMq*J8*Q|Y zX+)X}>${?VtiujCq&Vyeo9*i?25ea;2tf@)IdWjGW6WhAHVdi?l3)O$S=!Bym&soFxEtB`sU~8J2ER9A z5`zFU+H|wuJUqLA&?v3?n#%~ed2r{D=kyTZ1za|^C2>A|e7B7#FplUUtO^VwWv`}o zYnZK>LpI@dyxkX$Z$MxJo0hRzT}RNZ#yMUCH)yZ*?ekC9DqjHs^#EFCfrq<`Z=$71_)O2}3i zQo|g@QHQg6rHyuS{yIovOP^{L{`E2Kln=5Ifs(EF(xYvxB%#*KF^yE%t~!L}w(N(% z<7^0ffg`@rfz2rRJpP^%b26?zp1u6B0|54?sLAVq4`c5&EPk*qj}%HV@EO+t9QFXv zTXxe#0ShY08qYV(oPC}{iWR%Gf|uR)Am-yelyPC!G1(fURR;r1t^=A~lhNG}u;vQR z0pVNmSuLfx>CCXu*oL!te#|}WfuyTTUcjzqKp^oUD(B}Q%r_j3G?v8T_{L7J@H)QU z&5GZbgS`=81FoqI-=OTXIgZ^9Y(^Qcz2p)EoNl`}Y+N8@Q)Yvw_L1F3Oh}27r_GE? z1-JH1X9)84^7?ddN!%rKvR1=>-X%b~CcYBlP~gty-|*{%z6EO`*mj=Rb*t>*uldZCWVD27Q(S$i$;;Fcec!Dz5l}Y zf}q)gFBvwU4G@gcx&~R0{a`!jxV~LEUQXU$#rd91Y?5_mW)KHRp~xCUj!#MOnfTY* zAkGW0IhoiO&}`==O>!uWu4UVTHVs+r(lv~~4ljFr-vziriRL)PYw}8`88qK=j&K< zkJWGBCK6;?&30l5Le1*hSU;Zay9RASM|oyBX-13$VF^+yTofsEmE{_|{c+50+F=6Tv|1V2O&6i6OCyq3$uZ0^Hu! zmVsqj*l>mQB93z6fnPtO{u(%1Z7?xtEVa7nb12z3mhLIMnNK(4`mV5Encshsfjv64 zyy-@)O?`AIQphh>o3k7L^05jg#LhUon9v6r->3H;jGH}&A&g!3E`fx#r7RT(KA9f7hb{`%m;~0WH|YR3 zK*+!G-mv($Bd!U@V@>x6%fdM>Zd&8u9of9xt`qiQL&u-k$%Za)(#+OQ)eia4z}Oii zV&arTVULHa3hoo0-Igbh+HvYrHHjr~3VEYVVA#r>1+#vS{zZ6Vix4w8;DkeBK;G5K znhVG+I7fRsePM50y`Qe~FwhjwgFRHqWpfFK59>`a9k zfFQE;lW>?}G~ryItLc6Ci4D1Z7YJ$*CTf5agjyZi*}#vfTwP~qwOr3IJT`Z``+?=7 zK_7dwxGbO*VIo#kLmp;*(ExhB4iX!b8`^Oo4?m=`rl<^0jap3WBggoqwz%U8E# zZ!A{&5DTj8IH`}CjR`4(;|p8N@-v=Ky7e_aE+MvbFtOkPKb{|@Vj9|_~u=)cuXID6L1ZG(%{!@gt>ZL*4PS{ZO zUe|>O$JEsJ@bKl*gm7$a=Ga=TGj#Aj&fx;l;#^Y*EThRv9M|jIp3jFGf4)6$?b+BW zzG&d;K^v+lL>4lSsT5a?yUJzG zJp-Sf|K7#VCCi$-(Ufyudv2oaF4qPACSAJ@yFl5aIUpOxCRbsg-AT)$t$^MkR5z@S zhBXEL`hF47+soi3>GS=W_8&`9;PKhVDfl3z3#e2IET4@rGY|jvwaA`mm|P!B#WHy5 z4lL7(IK-kEpycLQ21EWBZ;iL5$G)E%=b18`O^TtY_{bW#oC|zORLM(c!XM+EZ+2zH#}Gkk#SSRP8q(~kjaXY|o4KXnzd-ob z9{(ne&2|C5J~+Bo5sFI?tcAxeHD*PY8rE5d7a*62vlT~f#^mJjr_O0RD^mpw#rDim zr|Y++3y!l_-Mk#7(5D7Sc;_dl4<>=0cUY6y`r5HyU|b^JRvcg>A*GO=`q|?s-L#=K zLnfN;5O;6kIETBl}7}ui%Q%r3q|$%%w-Yz&O?nZFTP7j<>ry;_%Rb z5ID6qGb@vYO)W9QpV%cU;+TlDJ7v3xjVN$Bdr88Ux zh9dNod~Y*aHKpX>!Nz2YJ@&$_x;!iIb@sa<(P*mS68JW3YM{$FIiQ9~5rJ`jZ^yV} z4-g$MvUN=c{CJ}SgPd_DjboRu6pI&cG+d>r`yz?QE+o)*v4RY0cN2~+iAlic#H|}c z{Py(pvZIyc;eon}n-P&dU4Em!K=E;#;pXs;X)w-JcTW@K=8NKNqOI?V)U?|jHLmD7%I zADW$jz>Dgx(n6itGA#hAo@4{!9gf|4==Cdnb%rd4X1*lY4*m= z&UbA!OrQ1|*>zB6?eO{qJ9R3h z+7gj3Nc=DgNt48d9-Ivz1lptnNyqA}DW?-kA4j`anKOJlkOPwSFu^ze1Yk5Ez;1ZTJI2z1IF{r1F$FK0wskrWxx_}Gib zDQe(u*re2rv7L#fS8qNqEpYZ(6SCL=k;4c84u?f)(Bf+0WO#9Z^{RYdBw#6O3@Bs) zg^ONTcc^BDX{YifZ+%Vv`h0+;evH1{ilnMdqA6DR-Vl__l2Ub0qYl1i?N?r2pPqMw zp^?2Fd!@(gil5U zhLg8hZsZ^Au`Zw6QsVG}Ch;mM3#VaJoF!i&Q~6H2mR}#t==@u7`ri+FcLe<0o6@jJ z16(U_fJdG#S0kZV!`3`~-O%do@fU)EOBp6W8%pn-;;UuYo`*w!s*PGYZS> z(5KV(0)C|4bq{Zgby#PC{j*~re@vbp=i%OJk24yGLY8Vy_*v!jofsQvt*aq(=HvW1 zG_PR#_qv%g9+SYSnatEjnS7Z|5NJM#tB_-9tv5cmF1nkoTz1G6P2`OY(YePS+ORfC zoJO+~yEN6$7*4NlcjCZOem{vX7frQ|jSI6C!Me;+5=S=y-MR_P`+M8HkB=7sxlWit zb8SeqIh9-x4Jp=*6E*7xj0*sE1l|Zie6w}nW6VwRG6OrFv4z5j9U|5&B}hH%iwk^U3QfaOY@PBR_r<~+HiSIk z?CY914teGhOlL1E@9dJ+|JEM$VeD{s^KP)&cvhAo)_aq^2Y1aDaX$}`G`B8m}gy=`rVca^mknhp^p-|3Jf|Qub*~*^7l$kL=TNdGL}^-T z`NBXf+77FiTF&XNt_o1hg5Aha6|myUvYJmQ4e(M+F|Gq1Be;O`HrE_Yq`Sm&9#L9< z@=)MqiE`g|!a*mn@Sf$V5Y-A?IlIEquU4N=E&{*r!;4dVz6Jd5C0GFhKLAG6wR@h= zupWN*@M+(B3w=0#^-GNe+tBK5E14)X!msSc8c|EDA@t#smIv>#f5b41Y_bCFXx*8s zAxk3uGJKa>bdcYBj{QT%z|vjb*Ic4=DhJ`SRkl}y7^@K7hT!M@-BaLSzkGhFb%55} z%;Iv)1GGX0SZnqzt8C%1#s>PO@wdA{ywpBm7A1LS7z*?NcthrxMCm6gyuSZ2 z0|>1Ij6ypIPqJg_p%_7iT$3$EpUl>T^y4$W7Y+fDoK3cX$7AcBYG`9KuJxid)N>d* z?y$uVS_Zy;tWE>!1rdRT6C6WA$3<5DW;oBP4aNWau4_w{(P_9WnR^Bk5O5#D_Eb}iCWSFG z_y#QaK=LDIm_C1gYGd;U;(>el{t=eSTA0%C{w2U!fHtxI%kY%)w|BK2nA!DIYkeRy z@h+WdD7gaJRu!`|a8A;71Q0XEQpY;F_aXe5Qk`N0Y!!>}-gdBLUc`oZ8fpP9C9cQ;L3F4 zBZ)^kHak`7HWiL)99Jcb%p3^T{>-T6O$EE3aotS3(vR(8G%zP!8ZyfhVfeT_;> zzMNGh``B5%A2T&ISdTDxG70G0f$;Hgjlk_m2hi?d>fv_7b^i1DH&+h?+tON2A!nv!2gSxxU;;2? z9)%-hjjwv2B>KPpvwZsS`O_aC>+#dq58npTKBSMo0x@wk-$cE8&~xzaAN&XY{_gAl zc0v!ohs#-e&b*P7FwyGRD+`{(RF-0}>b{ihZ9>jhVOPt;<$Ax|KBR6ZvK3>8`s)KY1axPf224*Yo zOP)Ux`kHGyBQY2mOgeU0VPO;aqZnD@H3m^Z5Y$lOdULk9x}Fi)ldZnDW-`n^_`(-v zwfe+fYsKD|Q+*^7%CorHZ)Rj>onus`u<%w_w3ZIa&yGKiM?vF-U2iTHyNj#k)zsoT z89?iRppMT$x(6(0X)+NJ_e>kB?Ro>PofHbsCNq|`8fNYBWVjS~38_>RAVKbgP%Q9f zdstmwUG8TjH^=H7xyWGQWMc;?4%PDx8rV&RGLU?@-kx3UewvY}OO@71P|2e8@yTSs z>K4J*S-ssi^!SU!{o#E1dU3Ownq}fino%b9hUmqXi4|1(m||t=jD|AL&X;GasdbG) zOJFe{EhRY*YS%#0oi&1;RE83-7rV2?oX8rglFsm)xP;z9azS@vLuycJJ)Y!le-4pT zG844aiz)#Ldgw;eNShOEF#rr+Mjm&6c)i%|XN783UGE?kxeJzE00uS<%u+;_e7-M2 z@kr?Y;&L}D6e5aLB7?UAg7_?Y*E*IWdn&*}BX5M6ZnpdFVm%|%gruP_tTmxic5L~Q zTZ!FcJ5nGgY z01OCeSk|63FFj3Y-d7t&P?qWA3(1r{eAsSCQ0-MOP!ycn3Kd3z3&g+|3tIM+~k+!g~p|AkeV7#pLBcZnr zM5efOVmGh1mv0yQslC)C$zxq|V~t^L5^qaV3L^k@F>34-uD6>#>}AT+_n?>*QVOCQ zC?o)oN;GTPJA& z=3|2yws&Z5rJNIw`CP3uw;`LO-t_rpYr{mb29ST&GbEc(6!NByVL|!fa zF+~TZk=el6L_Sc|Jc|O17Ezm^l@%l1IV@MJ%j@0cl=o@1IxVtR><<;|u{wD3!D}$y z{@~K$vA%9D&llS_Gcu*a{7M2HstBL#P^mF#QA-fOn{5=Ufv6YzIftiU^9EQedmVDH zMM=Tsj_?G%fxwI;zP;S;Z{~PIHYqaQSvJG#u1pAK1EOZ{uv9giBzgVWcFNsl(A^57 zuTm)1MpQfk1Al?j1io9pFv zF*QqNKuapv0fJVL0?t5z6=?z2&WyV}MwgrQ{V#L`k#Y z4&r4#v9N&c=K!=*ZZ^UCMOUWMwIW($5W?zgZ3olNBYJ(dY7hHVsU7gi}hx`-c21X2J1`r zolR()HH0lEOgDq^$@IuMRkiiZ_E5ma(9@t*4<`AATy!vLcYly7sA4D|8c-O%{RrBKm zp{w2OIkBxW^J2f)Y$}kC1+4X@;UoSS@ntCT)n>bzJ0x+rYZfCZfOe%P;jp-#1?$;B zVQeG&!_SL7ra5Jnk+)(>A76@Q+oMgYB7ivou%1sW>}G#4x0T&TFC^Gd&)qW92_Gb@ zi>TlTEQb=`tZ$|~tULDglZcbxB8>%JU?^3S`WeLSvAnZ0J++HWAM05t9|0}lgP1;+ zrQ+jlRl_(uzrEZo-b|S!Hm*ozgEc}mYhZ~Am>?%%!D#Ccs;}Q1uJ^O_zyPYl!9Y2U zDcDjBLML|T?Z(ky#xl>Buh+}P9MfxA7q-ET2whT2A$S4>o>F|zeu%d2g)Y{=Oes+l z?6#{NP+s(imd;x6Bf-a1+NY5-xRv{QZmu50&R1s@P)~&7IEOz%Kq(%M!le-$fz0&= z+X{dw-IU`45US8zr9cfL?52Cw`BFJByJ>j!cstjNn>h_`uu~;M2yBreMUfg@IcOAE zrkNR^phYsOR7?*Neu?K`DU2xZQRa5JpA`#9R+dn!i;*>cNL(zaw)d_UKRm-YihZ@% zEzhU6wnT6-_&^OY%;?G5Yp|A1WN4i~sZl%;Qcx&~T! z(s(wz{p%^IY)TxN_~E28*%bgmVRR`LGmj>o+}GXNq{Z^_jH{J*tiAF$93P{EQYWA_ zpGMH^R)H_Jo1f<>jPt!gYLc~MdWOwcv9Kbr40=4NO1u5r%QOc!U3lG^5qc{p(p6#Y!p+@9};y7afV0>m#5EBf$qqSbgDD75zcW*aS=ToL6#2mv6 zT9FM@xxrdu(FrV(PU)o3)n<1y2PEM2y=L+Fk|N8-gBq(`0TNAx@{SPqoey5DrVcjT zu|%I}Fpy$GhOekX=%75ylX`zrk**f&Ngxak;R9%s2$l&0uo@k`Q&Ita(M-B^QYy&By~Lh9~fv)v!24v{?{5iozU>v-&Ap^JthWuD{I zbZUWbg-%&bLPV2}1=KgAjD0ZilP#T3~< z+|GQi2da^q(E`W?j+?LjmEymO*)1W;wtU zi+pQ7uQ%JN0~gTO6s2gPnb=~82)GJFr+2Ac5T|^_YJ>mGisi9@>8kPp1zR2lldXje z08}7~;jKOwda*h?yj`p=&!?u_LzPZ28zn?T7S$6()NV9j)PlF0+9w_j2Z{BW%QGABK#Bzl8~V(n2=v~;~^05=zt zt?vFU!=LHPJ3esz>!hc0MWkha$=*ODJC<1imS%8F@LR8vH6xh_wQp9-bC}cllxKEb zH)hKTjd}Z|oI_Nq2{RYH*gTx;SGnhl{bGvUMT7(ogMmWv5{_L89OAtLvx^V1^+s}U z)<3N`KTn;~`sj3btp2E}(>#h{&x)911_5&?3wb}%u!&^;cfIRzCO`l7dujaNzTwC+ zpq5?0P-Aom?;aQp6o3s<_)>BJ4w*~3*e(y}m#<$RcAJ~++469)TwQ~&KWRxHjz9$8 zOHS-&z+j%W7SNu?*I(>bHgHYXyH~qA@%zPuRPY=XqSn6l&U-MvAF#FHX9Za92T=Sd zb+camauof1sm?Vf)MCD+Nh@;jvcUb9<7-qon(Noq-v48Nobl{R6A!~U5!xHbdIE~! zO9}~qZUJ)4;C|t&^xb~@BI&8um^*vm^kkD1*lm2~Ll`Xq*uU9L`}oI)hw6MtM>Be& zFMf_h*l=ZUW(`y3?F-04s<|L$=*sS^_2H2IOz;1=UlT6GlMeu&HKquT6oE^!W#8rkmYT{`fH!*MpE*9$))Z#p~)`jU}fen$h1Kllt*vIzHP5glYiG zQg-4u0CwXvd-q5iPLJu;W`FVQF-blUR2@1Zd(noECBgC#|A3Q|wtb|*pFjP6xb0^B zd>#It%mk!?6)_Gzf|StBc+MPQ>Z4k0dNfF{es#AZM{Lb&gdG91~f#o13& zLyMw26Ts@EHZfE{V4f(p5?Cu=**0{6ch895)&HGPq3=m$N0y+Q3O!`DWGADC(G}HQ zaBN3ATo8J|!{zzY67QZhB<)IMfT}v=>OuEe7s6xLI&ea<<2^d&KL2~h)Im@?h?`15 z*J_f+z_4hIFQiMkFQ5NtOxxwvX8&(mClp&zcYF*0OakW4SC~P&zf?Q{{OUHYgZh{ zlKe+|>izh(2$0R1*CHg_pXSu_nl%>EfPL-z>o=l75@SYB^$L1kNqBfZ1DQT#;Uv<;xDanR_wHq!;~57fi|9du&(}~5ymY200Gjwn1AV)5 z$9r$)ZDDStRvAhwvWw^q{srwsf=B&Vwx$kF`cxjfF1J%XzVBSSoS8glJ9Vp_vT9l- zl%T_tK7zFPt2|k3#_0C);COF!_`l!YBa7&Z-s>z7h&DTX1&m7;?==b)#deSO4i=!L z=Umdc@yKH_NnxC9&IOwdtKDYxuKjtp#HJLy z{hUR?8@8<#m%PQWc4f5!I2|f?d}wR79a~Kww);yJC5B)?VFWT|1JX=h2ev8F-efzJ zNnyuYmEgRc)rb#=#`SFgqDMx#slWE-th7 zyt$;<#;)lYGiB+mD5)Vsbfk%@vQS&d`sL~B_1oj))!b9ti`(Lo*}>7pbbEZ>cK(juWeT$hR26N!blSJ5 z{3Nm0*laqbXT3W-Ilp`n&q~+8;4QM>n(~wGdopaF;aYIDZdvw)XUyK`dvjM=cMQ%+ zWV;0nRx_4+x`oHWi*CIO`K7JJlaB50o$^}#3#F+Ptp)DtrCHmYH)UFt?m+V0i{jgs zbx$UaA5T~N-ya>nNEiemfX+(rzF1{CfD94|QU`b$Z@Y}KDLp&c`-x%jA^{+TwIKu5 zdCw*o;LgqXz^gC#J8^qnn@{~VoD#{Rt^r$BZ>ho3WW`*M21A3HZ3dfB_aDLj)GuH% zQGI68_Ho`Pif_5rnn)g5%ka$WmUZci%ZtN@^&#FYJzSFDpY>0WlA6edj2SOg>z;EC zQC4<5N^VP{dhqY{+td9Q@eEW<BHGMEzFmQ}0Iz8&lV z@$DnmpPl`1vUl;ri@1r5m4lUdl|F((P<4e8-N_-7iAM}<=;o{Q7aBjy*6F~@N^4X_ z18S3PjHpf?Jhg3s6`$gD3e}e#y^=F{x=uz~kPR!5>`{(@W`oNmnr++3_f8%z!eroh zUIv+^Zpo{{HZ?hmJn87TM{NZEM%Az0-_-U;D~l3rs>T@W4TeF7fQp+0h)rlMlrC&_ z!{veX4*O~w7JC&PoQgs{Y){*CpH33Sg6fqX9f$p=#ih^KGKk(;U1?J~M#W2N{aSMkrMZ13;Zf3222Yp3de z2u5dKi7kYkpvsua&NkWXmiIY*O8I?#d$V3_-SOmlcZLEzndc=9Xgh`g@$JEyw>Gx9 zy{oH-k6W?=bNlPn&6Wii{`lGTm(QOuT@Ni1kKuVyh#fSQa@_*{Mc}Pk^x!Jg!Qt!G zL>gcHd^xu`KDOEf;t|C!78SCQ29>1))(NYD*p-t{L9FYm_guo-;q2v3CQ~xqv0JbS z0KTC}vU%ZJu59ro;+QxbADy1Rz1-o*&rWVB<-LI`34g=4(%8|tH#SzLET0~uga@~F z*cjZ+FXy;a#rqoqDcso*z*9r3?11{WHJPXUx_Esw^G3yPeo+-HDQdt~0Ma(;!SUpv zg3!!3>h+L%{uCdVh6yGkYm*!*HRpqt>~_Ty<4^CDx?6))?6y0Z zdF4)_%tx(+>f;WS({Qq}@q%a6HU^`jO+9f_qgn}jN&=JWVr3e(q?(@bKfBwrwOgKs zcg2HV*N8-q|C*y}6H@H(#P-MQ+pGV~JC46;4$%J~`efR7u()RQY&)*JidT+OSuRtvv6LlFDM*&%mSwjsX7& z0Sseg@8&~$zq-#j3nmTEdZ2I{!=qQyYflj|WSve;Z8Myx<@)BfEw<_`YD{Jqd!(Eo z3zAxvF@n@9%LdEip`G1uWHa3)Gqp?OE~g5<8q8cC8V_!|qdI(*zolQ7KP1M_f;~B_ zxN{A5$QzVKC8sp9LmPH2{Qdn`nQgqNVNkdLzk2Oba`TBQ)4)Tm#9_anhgS3dYVX_n zsw_5-0R>-5+1xfM|o1)z z!bn%80AG-qiig%XNn~rQ0*a8sh*BhU z6jrW*vYUI$3SnuK$Tj3_QE5lQ;rp+@+u@l9rhDX$ji&&!r1Vd&PJlBbNb&sm=V{YN z2m4=dnwP6HWv3g8s*B0<@Oq9qE5Jh&25Y_QE8f2ve(ZHR4H|t0~5$sQx4J zKr7(r;QZ@Nw+QfXuT}sOj?|RFaB9KJ7T^PEu+DaTaPjq~xwLPQq7c;DcZqb_LuC&V za60g;!FBdGN8ezYk&kO1*jbYeggize*nlL{A}`+zZnR$>9e=&)3|Q=tK(uN=5hch7 z?%aVSwL*0mnLa=M22X8)SS?km1G2WQF$x|I@=V&usB&3Ca2 zaC?e>fd6IFOp_uw-GJ<@j4lo)+|j|_gA*%E`)}h&u}Co8n*{!sC%N953Ibrd_!S2) zV#AR=etCU#F>gEnS&t;5z#8yxt-Ym~g$Hls1?}#P@uQXkk35=g`A(;$W=i{ha;d-> zx^+Fx(2@}wlcq3NOp`V6BXpAs6|u!A{l7UnI9~0YpU=G>|D^4JC)HIO2N-IoUYG%U zt7m6P1Ln2W_We z>IQ_*=Yde~6OQ~8=BYYvl0DD^rKpF8NMMt1;4W{tXB|L1(M;o}TRe@Dg5$ zDiJTaXeB8)4{joO(@EG++4OOIGKpUOaCkWLR^7%Ls)#`dB=IhJ_p4K2I)h15zNQ5? zl5n}Y`EawoTji_yhy5R0H53Z&$Qh;ZvJx0saJ5qt6c63{Xsi3)>LQB?F^DW#mFYQ0 z%Widnt-(Ey8J9d3pk61wh8oi`T>b6YggGb-Qd) z(;A-Wi`BEah6G#*1!d3&-N+5f);7++-?sH?>BH7$tnf0J&|O5zj~%(UL`-Xo>0P!; zwZP`;_V*0C3wAhi(iH!(9T-?gf#8ZQXWe;gs^;;E{B(HWLn~M5dev{P=XT8A9Brk% zU_ZjZ&}Byv-6L?2l-adbh6{TP-nQn-BH!|YhvtoK7_takZ%whh`e%bKrN`zTZLa^r zaQS7~K1=Bt5KqOR3_?aZl>o>~2Da%Kbv=w7j&kQw4}KiRdv5dh&ABCN1OR8ZM*v^T zNU9t`(~?$gt1^P6TeM8#Vm6&cvyC}#H$6$=Kb_E45jkR4U6eRdaUh_ zt0m9e44d0IU>772*}K4eGQ?AXYb@i9f~Ty{lmyvWbp*TA3Pm9pAV~+F-9S7XyQ?Or z{cvv-nC8=vFEHv-){^%ajBI-9oKrR4xR=v`^Wif;GRktaV1n6ho$bODArvpS^9o_b zkb~of9*1#U()INUx%#gCw)^3u`x9HEvq#fUpE-K;3H_!O63IOmGqt-C5T43qrKFD8 zrAEdcOK)Z*#k_a;diD15b=U=RKQantEMhJofk6GB9<>B7t#)3+epUm(O`}H#uMSUV z9l?0QYy(hBz?9hq%us9C>@o?Bq9bxCqyD!vdwO>8_T*&NMUF3TiHpa^J5USo@0yMG zN!RHTPOH8EOom}1VivsrppSR6n#gZh_0$XluR<9|&i9m3GFBlOAPXut&b_JDd#gKJ zEE1srw24yQs^G!SA`H)8!aVO+JpY_G>w5J*&D!wZuq-rQWtLh4jYsM5jK1Q3Q9#|8 z5{Ap=pDpif5zsS{uqEJeKr_n|o}EWSbaAz&;nwJvXXUp$o9!WXk5q0aU7YNr;;K%l zD5(YC56!L{zbtq_uH*ywYR1tcT|a4>KYF4Q+OM5MQ$pS9nt|DDz|!P4fOQnp6K zrjebO2qN1m3nYBuYU38r^W(hD_H(&*y@nr8=Gpc7zkb=0WAA^HGt(mM5|Op>m9pfG zNA;YnlHD=%@SgA=A3xwTZsrZxCu69Dtrrj$ltWOlENllUZALQFnlW|wczd_r-I~h| z=qC6qd;ykB8FK?<-D)amhcevqn_kTtZ{&8?X{gWkfRSwtC{ZTLW`&L@y}I&nNoC7| zA-MQA()fC}M+=lA9AS-pwuspZq``@$e^Jgqbx?k8DZhx-qtMS{McB+l*1cu0*F~QcC_+Nf#T`CMA|*qEw@S9Eg2!vNrE zV7{(e7TTzqOC9aW9I_SB*^?48&rX34>oH=*51#?7pMRf`iBRW73MauRb*V;bYhrZV zU!tb{80;f3S68+Cu}XI{BlMA304I&|hs2gerbZuS(8i-|l?dkHVGoeC7?+F=W{6oo znY~?RR%s-bf&}a`HLrtUL&@4?G?h0=N6Y;O`>W%<)9+S?Kkc*!hc~iXuWnb@tE*K3 z6PkFCkUXX7kaB7S8v-TriW*N&+h|1_xbSZ8;?42V{^9D)5p|k(^J4vlg?SgK!^Jjw zUiHHJv!I*K`$%PMHz0rSE_mhT>};n!(G9zn3Z%ZtN(FuAsECb{9+2F1;q}EWcF#`d zZLd6OS4P1#5Hc?TK$wc~Nrujrb2j3eEq3?M&S!DXFLv)9_Ix$v&2{Vn{2H{#NiT%+ zJ+#J-yMwK@cbAip{UVE@B_k^45<3-mqzxoYUNp$50LG6rn_=N;}g(BzLZFY*7wVo`we-Dj(S3tbgOBU_?$m!wsWel&G2S7)#O zXOY3ij$l<)VLB2q!H!Ck6e=EC8#!2=;i$gdZI$G+MdwsW4g917Ebs_y24TDIJDU}yQ-_s z$*eldc!&!d`+f!Jb!)*(otqEVcAm?ZsnHKe9&iW2004Z+j@#STs?jABrJE7TyBr;6 zHLJ$!cO~nH1_AQv^ViFo*?k2GBOg-AY!cs^iK04~{#Y4N&M1tL$z?H&MV0*yytvJ# zlx{2LQ1sMP*YIl;O_nXi2UzX+V=J%UTwngZW`J$?5ku^|_YYN_YL%RJXjMpY?21d zLdxz#0HuhUxdN#`P0qr$9 zFM!Wq?T-FDTGpZPAui+!T{O9mr*BplyZLl+n?CN|oc;CY z9RD({`_r=P?={HDRE#}MGDOG#6$s_&S^q!#?pz%w*Y=9iS_o9uVsw#Lk-o7Zn6Fa82##Z8 z9v*7p(aDO33We>5ovp3;3O`?*WoUg!&>bQ6agD5phgwt~a^;dTQZ>svq0n; zg(Lv~iDFzb`OkkQ)ilUO5KS_Nye0>l6E(a-R4Izto%j6r z-+o!vlzr7BHP5J(q;;>|o2s&n28)Xo&3f6Z-ubOZg0DFJ`IdkQ=PI(7no&@<&=bjc zBSM&5iW_$a`20ja-wZhDHqa9jgJW?JDXb6*z7-VBm=^qyx0Hva7)vs zRy`e?U}zs&@m_1$jVO!>ieATBk}KodivN7Ng%yPlmN&$7h{5>6>47R@9XH{0&e<6& zN7aaUiu)m5FN_U6kl1jHFty3X&eEzW#pt7f`Vyl0R)!_C0LbIy^?=rc!SE)&MMzxf zpz{=1L&=o6$&AWtf8H(|M%Y9F8PUn>;wdR@3ox7pih!lV%BW_^m;HH}|J%y#dRXBl z@A_+Q08)_Ac#B=N8bU}8uXG%8TR!a0FE9RDt!Z7ctN{~P%dskO)oO$jQMO{3tu_mI zc5%DxJm_F2$&QHySEkMNK7q8i>LK|Ydoruxh0=tG&9fS>Kq))WP308qMGnHsz}{f2 zVy?~bDrv&IxxGGHKdBP3y@aS7Yv)R>vThC&UGZB}q#NGoOpyKjGOgbqN*ASt4S~ge zKoNTq*?0+pU15@jmpK#S-C|vRIH5eV_)Ls7)T)!v!C9kVk@0;U#}U81{LrS$vh_)iB`$(9bQScVo&2L8<$s~HUUCWCbo77-lk%FWX~{PtQHO4rqv-J^w!mG zJ8F@zqi{Ib@(swWet=!6j8VGom2Uj%p7*Z)>v}*I5b>Q|wR~hrjUw0uNb=oUZ~QpO z>F;zk0WOLaK0s74w!$_(^c)VN%LcG^V@<~+d@uGLE4G}co15ivWcw$E;1H~1t4wW~ zH9JeOLQ0|7Aw!L~<~{V5JI?@yB1&bsBo$RjQ8m{i4508;hleVKgR9nUpe|^w*v=q3 ztE1~(820F*ZI3L(FkZdq+d;8C>~v*cn`KaGDA86}q}-S>B!|;`1v7iQY4z4NRW%i{ z8`rcBNfd1$mrafus&qE=^3KGcFN`-oSiv^6qNEcE3)gvodzkl{B3!8wei)2#^FydQ zXlE_fYlFjsU(K;TN^%X)0VNY@lspInmPvG znk0SJm{b>A_vU-mg{Jk3k6jHLVEmE?H2`^6z%*8~vvQMJ30r5wvZpu~XqDAFMrra& z6Rh-|nFckylk^`R?OL8r+9Z6P2ebWGtLS_)W)C_Vh!a~_9!Bz_iV3`(O(0E}sh0F*a<_o8{}AlE z)8Iznp9V$&La^#AKvj&Mb>QXwHS7LBV0~4i#XPU7dN-ewb=+;Su4ZTkiB4(B*cZqWP^$N%qW3j zR>5_f*!@OSRhZA}L(9P>uuv8?%9SO;!*ohNw!Y^S+Z$0eyU8{upkBbdvocK;tS!x& z(%3meJ=!m?cY9O3+QTtHrB#gCVvwx8#gapr!ciHPnw#A{8^>B&h1`}ZJJ@?6qF|j6 z0kY4|dD0Jw=)u`z{={!r8%6LxCit_@2CcBgAcc*Fy_aDp=M&`iptq2Ior8x#G-OT| zirDF?&b-$_g4_7j*v63G{@a8zhn+E1_y}L@c zZ&uGYB~Fwq*ayA@>TP?*E@p1huO(xrsT;h9elkg{y}^Z!AO2`q!%<(-80X+r6$pm_Mz_L;+%d(`!|xfcgH)ojyD z1<XMV7ts>STAD;lZp0(p54d2 zxj4JJYU@w)yu^DoSk0`?I1wz{sx&1f7_XV+ZMwkC1X5@Zk7vAZ)r3^K&AR%jpL%26 zu31|#4R({Es8uMQk=m)bOu?X44%n;7#EjQIdE*@SVwnXi!7~6|ql%H?k8pw_ zV2usM2t2|2E0~GD3*6Cl`-^{HO*f#TtA{1lQQKTn(~!6#Ft7j;*Xh|p7iaZqYI~4? zU(;<`ZLNf|jwx3$=}t%7oiJU)DG3;naT@R~!!bWwkJ7IAr}a5F{p=%VZYMaSNU zfK1+FTG_kSgshUTjeKns1bv72^7ZKkL|2ND&O)Ta*jBb9hB()fMNteW%OKA0epdCO zFpUF5_LXHMQ{iY#tAH;RIbqZ30wy*) z#wSnLuhbMFU~+_GhKVyWX9X4I*`3CNi-y^C^W^D&-JpFZ1qszmk<5=#OEg7qVn~E7?OTGz% z!gFN^1``CsPBr8(e$G-1!nyA^<+8izL*p8%#H{iHN`S_9m9cQ(B6}!o7c!XM2W!44 z%=iFN!uQ$MgY3fFZW{YpcnCqBtrXt}Wq-lx#qu2DwRhkdJu4QqG6Qz-W^?L)wyo(~>!` z(Qk^yC*AOeIf8SSBYXF8Z4tdWe5caO%u9dEd=HPk!-J%lolTmYdJcNZSlx`QWiHty z*Fj@3VDIq^T{&3b?o`gR1y-i4)y>FWhGH6)FoY2%IYTjl#d^<%>Tsn)Z3g~&29bZg zEAMY^FW=rhzy{amV2rqDAX2<3ywbqxf*{4#GJ2?#-e3G2d=X=tjze7mIWxk0cH99q z)TMga#&!F7qO=zIOPWI8o$WsE-tVsNQ%NiP)PSO~%yDf_C+mEUT4>WEHu=mhJK3Ec zFKWv*1aEdKoy4v@Dmn{S4?$z2$2+I=gvk&m>#nI#A)7@`JuNL)#e|U&D_j$cdD#q^yjVbWbN4A_y z72C3qV-AvZPM)0X{y08;da^39cMsNg(XD{7cQyFdoWX^JRX4148=zJ`7D;_<3n zs6Ei?BU`D0{CEI7K*PUNeeR4F4qD{|z5r1_C|69-lNYCtj(-H&#~3npT4gJ7W~D-L zg2CgfZ_@jbCk6D;FRyklUjDJH``$N@U4S94+K8H<$Q-y|FUI=lWNu9ll`iu%p8ooL z+2TGhsztkqciZ7wcu}mR4N@icL&?SlH;O8~`;6s%8UI0a+2MvaOqf_A5LQ*?sC#71Y=Wa$zrba)$ zT#YG9r$lC0GRwP2F)qV+vw4^prD&Sn@Kn`Us1m@Y2gW9f-qi3?m>2IGxsPq$Imidb ziddgY4q7uNof$)>4{sdqU*+yix~S*NN|GHQXSRSZD#Oz@mx3=Y_gtcPOuDgVh@7sj z&OdD&Ewo@_z^-M+3b=iPhRLDzq>@%)zQEnx2TjrT>t{JJc2__F=Fm`AmnlKi+&_`RK)ts?- z)A#`^JXULmQlg~u@)>t&O{PPu@1=^uWQXxaSR|J57Rrh0gDlR^*15Yg!|RQ(OP0sD zLa{jrM8EZgg;W(lv8KmEy}YV;6?0m))maHh~QcUc*T43q4ummx`udvU!UE!4S>*0z>FC*q(^VEXwDnM zU1&{>gGo5IK>YbSt+#8$P0i5p`rZI1hZCEzA{ZBeRLlqoU5 zVS-ocUYsVQ9b-*1xem;-Qy3Jt5gu}&@6^p-XGg=gz9 zUS;x*I)PR-D`vXW_NCohAFxXBDkv{ILy~k83FJKKTCpT$b>k?;cYSJ(v2tL>lxhnt zp)guj?+o^w2swAi%W+cByMF%uW>IX+-Zm>)STAa5satGupP`szE9?fuB70-3tM|*= z7(Zb3t^$~_#vHmSJfnf3MK%-d3PNW{yWjPtEt4OxOtF$>NVH}zc}N)+t(C=g2E^wy zv+9?&gWemLi%j3paF?nlRvs7h*wI8&L-F%-xDw0dBz^56bTWcgx~`>whjsx$F2~pP z?{42-Esg%zvxyyAKk5{ns->5X(S@Lq#7!%1Xt? zT+)m!SLN6MCs4FyLG=${*?C=9wb^#wca#+2&47>P7=%>gk*!}I)_^j~;*AE6^g&0J zB|J+M9yZ0uaTVFVm_j}*dx5>24f8b%eGIb+!PmRzW%Ate_|T`UlSOgtduFk+X@--5 z)wQv=C^^B(m38cgS;yx7!xl8SlE6!U4F(S56tjXf(6Ef6gxtrZ{N0DP1unp0nU=vy zeU{R)+p`nUwmozn0gYQqf9N+QU93b?wHda+a=E(fnln>r3*~}`#0uj~w|ARf95b%K z=rYrYZ5Iy9gTZnc_Ss;!kJrhjRpKiP-Fqmw9xD@F19pH5U0NUJ-rJ_v)}40jB5w;e zc=d2(5aWhzE;U4K{U2@DwjI@xWPd5|m$#9TOlvhrOd;IUeyNpLT5S-tBs}B!`q{fm zf+|BEopaQ)5JrgQio8bb$cWf6^pXFyX4evSOh_HNz*+(iWH@VZWD>!ZJ;)(G#^HDO z^?D&<6h*YI;37raooNAHjA6%A)vFAp3?5w}=+nHO(+BFRG;K5A{j5-Y^Q3QPWebc( zJ3EL1L()uk?SnbN5pzJG8ZL$JEwGz**Ud5&INLHvkyrt@r7I22W_DExobHxN!)5_n zWuZ$OwO?F;wF`h}Bmbn=xJ!Ugsp$k`qg(XMI~fRC0kr$BYiTJ^hwT0?nc<8hSDh{a z6CNZ&twGsP4PIIta%e-_*&4S(Gj^a;#pk_&pyd!-;=r*k2or&R@}}@zAFfdj0-#Nd z1g*f=mZiN)0xpp)p}}Cr2y6<48V^HAZ5z#L zIkYZ1n1GvWBwvhj^<=qXR})NOs;0`sj+Cg>xAyv?S_*tAy^M#NF zfh02p-@`<9Z@kip-3LUp;((FyJ9eA@e0}-L*_K?8Z?``$e1Cg#RB%3-{gM5SLaJ!n zB^)UD^pa&pE2wwueP zS~vR6k}~bQ%3URvFslNs>jOaGSAYDwFy@E0{b#zlzW;PPGno19Vk<|6+h~Kfw!n^s z4D<=KWL@uaqI(AvBRu7$28?7Xu=}+^l}HcgHL!xK1r76=##QM5x}9Ccbg;uo2G<$% zaIpy6wAV7{L@MagiW$2KtbSbh0?;%dV067$?KDtmgW_s@9AfQBAFm?$MV7yA2mo6c ze`XQb02c+yip`rkO`A&NXd2&AX12LJcxaP_wEo3o)uPHw)3E^>L%O7u%EOu=3d1)m z0u8tLAI7Qv{MV;a{l9(!FIAOJl4Q*L-Wg%d0V*F(4rZfay9Nmmo0HdP+jpn0cRXX; zS)7MQVu8{OnS82Z=Cp%bm0?k8B$H6@b(Gk2EOrt9?cMf%``bgWgst2qyZ~!!&G**^ z?Gd_TjjCerDIK*Ol>ofG`s*(zo9!(gV)boT0m z_H;qFocDBwSwr{3r#I$+pYM1)o3oc3&)H^kx!GPWN_3hWO@z^bsliwFY{sHo&L*cM zav@qA_=`uQIoT}gGcY-vQX3oS!1;pa@3J|Z7z;gI8a!JwY6NgJoXyF_%YWZ)1psD? zi_d=5Y@)_Sd^kcdm?d?q2bk|@Kyx|zj&6=u-Zuk?nX`aX<)~hR3XOt+Z~c$3(*6TJ zr`wrqZHojZrC1$QM8WQ~Zo6tC8#3XvY?&rGgaSXmdBHO>4>2to63!@YlJ*2jo=%j7 zrOBNXg2I$AX1nE(HfL8Sr>Dzx+LNOKcp;NlbZpUN=o-MdYZn2vtO{yOQp!=iJ^2NP z=l@}?1U79)44RpFVpMO*bq%*k(uon%YxRm9V-}AokYE>RRtIQXmAp3q+66z-s)h6| zbN)|A?tk!EAFl7#9Afrw)c7ct=V$0udCI>va-|{1`gS$h>}dZ%vjY={V&RHb5tB4* zHq9*QRK0Q4wtWrAWYOg_#4=`UdvTJ){i(9UNR9%iPsFIxc(&if-nRQyl9d89m%HY+ zWMmF3hYv+)PllK_e$xLYnVNX9SmVjm4T+f?U;-Wj%WO=Pxp@sJKhD(PhkWXNn{MYZ zcpT4`DPqp3U8ha}_~N2737cGcVkP&}VzJJ+M)Pp>q2ycx873LHAYCXx8LTbTC4(qE zjbnM=B;TdqZ`+DFcV$H=B@*mNQx$=jOU`HmY})cfQp}^|59FL(ewC`!Y<4I_sLcx< zjbW`}?M_QC(sX$bIcL`?j_frX*24~&5CO(5!IM$g?o?AlQ$WT1`OEG5wp^rR`v}Vl{9Uj3xJ&)eY>^NY zQ{AWR-QE3fGYP?t^^*fYuNJ-mgfR1P-vI&FrNWsQ_wwBXNF>hDs90U{ODRxHx0XliN1?#t zXPPIU$%L+zXep&BY}cqm4hFE?NHpMhp!1jj*PZcJr5;5snpTRDsgdyf<@&?p5yJ?MLIhMsg}CFT z|51MN=oJD0hU>=nAulb|^TBwPxO*hV*EqFzog-S$_Hqxiv{9jBB4jl}L_4$sVY_*%bMd=IRE)?kJ zo8_7-!=(tqhFEZ%5&%+yw#Ho&%qh|1YB9?Fa@TIx$}KJ=S(}9qQDc)f0~tDc$`LM( z8Pg1NiC2oWxxoWhoz!?N;_OCPBPwHrm6?T8e$3qpT(1>QEVNW>0=6-ho=dW|nG&mm zQl9jiaLF5f_5KcyLyXx^zPa47cIv}Cf~#X2XuWqWcPVv^ zF@@kmuoB102$kZvT8#H~e}Y%cv_g7gqB8im^Ksg>^iDKVgom`#2SWHNAAlw$otWkJER#qQ6i}_Q7VeK7`$dILBx73@Nq0S!)#%W^M zPV)ITg(_5GHf(0Qw%EEGku*>+JLx@ZpF>s9Qn<`bh+;FJTj289C&d4XrdIo>%d4x)*FU{kFWVVaOR?4`R=r~Sj5MfBUtfkiB0l-5Mz(LxE>35*PyOKl zprQdE6|a@*vEYIOsz=y=Tx{~DPhGG#Th`z%)$bg)v}cr*m92>mTOJfOGRcnoHr|7lA}6=o$NQ8%U72#7p9&Z-|w1s zb@3Vd3@i!s+}INw_!393%Bfv{^KSFmkaw@oFHY9$G%s4OrWXnCFpyiT zO50tkxfow3_4wtxt5@e2>os}GF+^L*lWyUIH{W2mn&=L;1lvAkt#P+5PG0?eS-#cr zio=_bL}R2ZDIyf3eKAt7_hB-9MBTYFBNu-=zgWm*b$GL}yH2oMQ?9%7##n&@QWJ2? zW13Q_FHWvr%%ZmZq2SD#PM|<7I<7P3EsbC(szSd3!%PX@oWXSdvW&j#!|mHC%T$ z+j=yTzI*>I!gcmju<#@_d{kUsIRBMR&ukug6zp*O2t-~lgfmV0tAe?2>U^V73W%kCvv!|#->cj~iL1ssE%o2g_< zweY})42h3Jd3UjbBl3qMsYOexGh8CvBoms`!b#Q$Icu^Qb5%Z$WGRLk45LXBq-M>B z=0K{l8p&53y9r*3{N(jH`>*r2vvk|h(+3}70hlJHoq5**DP`Y#FP-sm8LqJeX?wSQk0sdWDJu)a-irfr<-Ci+0+2&7X2F{M9}ndG z^yKZ!i-lY8oor^%8!e13Pe@9^{|AdGqRgnF{}I0J>C}6uJ0t@QXGgGG*Nh=be{D4fN&10A9S? zY|btgnbq$GV0*S*Yq*dwq?RQ@+ElB8a7IQm;!AxPz?)Ym7c(g(9|!OOL&$&fU^_2B z(-OlFT_w0urU&RFQc{;N09&ulf7&~em+zM0+#ie}^VtH|uEmfo+X(~uvVxH5nqk;> z;Bf>Om&+{H4+elUC;3o>i;p9yJwP{p%hH4hY#cZ}fYY;AC$pURBL##H)-|+ftyW3q zXyL|M>_yQ@vA@n!!TFhwuSYVoBehj)-Qc_#2n#(5U`XDyWQO1{;^!u z`WTvJ|EJX8Ca36vB59$6W5v^^6M^S{p_*1GXz<0sr29D2-eWL>)QXVsL zGy1X@dz)_F&r5kZddJV~O=uE{M1@sFD%cfIEoXBPaTvXLoGj(fOy4^c>j15sld(t# z&yDQ;@D#8HQe&yhI5qMyBXjxs_F5bK0GO)~e6g(5OU=j1DrUH?Po{vDe|)+5ZD!~C zBgvQ}t|zCK-pnMi>`Mg_~2n5uM8`t0z+( z+#n{w3fJ5?&i8eJce-%JrAaks*+iCbNte!JAx?c|yJRg(9*X*jbjMO&o zn)Kw(iEL!zTj?GexR&V>rJXsS)wc6^adjpA8xS)~JY9ylW98011Fns)>Z8o%;2|V< zg32^)JIfkab!Nza$k%VJhT48t6}9SyLc@m&FWmzHM*|&bu&K2r9ZAMG)sJq!s(1Hu zi**jgdIl5V?@9^mtKb7VR|2`yyoeaiWUkBuHd~GwcAa*xnFcDs=txQzCLxq8k~L*a zk#*bBP5SW1|Lza&pab0#qJfWm%Q!Wru@5So@1$gNd~0nsOgG)#O*k_LWw}lw2L>!$ z(?o*K7C>+#88yXGhK-$OR^Az#G&2+W=oqsPSb=LDBw1HvI(%(k)R?JZpNPCW zR&y)Qj>O91MDn$1C_`Sa(xDYqG?NJ}`$fLKznROacw}9@WKRl!q!?KnpCQb< z3UjVv)@Hio?LqKzsogkEHD}mX&G-o*D%rcO%6y8PCJEn3olO^fELLkQY*e}7I9HtJ zE{zUeW1C$V_q_o&{QdgwI)7Mc0Qi6x9rjW)QxrPVbN~t(IKm74L z`ORjd$;qLz3Bg7Z38(IGu{HB_CoS!>1j93DgU*=Xx+;;`#sO2uU~(nJ=Fke=9p2&X zb>IH;%g4{_+#mQ@Q88!ByXfJHWM_r6N&}^1Y*U?K;n33cdGu{>-_NWrI9_?>p}DZ{ z8QRQgIMc4fDT>KwY{75=b~5Xy#su*DFSpCpHWX&IuowTw+qE`FaV*Qf)bGbfAp|Cl zj0jmi_WiWcPf&!Ah?Ow*zrUHY5?U~`Gqd&_JHilXP1p9LDzm#Pi%1IaCg;YhJFjc$ zrsr|h^yi3id$;8(+@$5#7qa6t1z>co1w4x?1;|c=bSgM*Q%7S4mwh)ZnBVg6Tr?}g zY>&1UAT0!CfXV`#Ae@a#A1<;SXzp?}fGzG)bw#t$bMfpw5Mt?#eXV*t#IA3T9W&8y zS>C~ADtEBkXkjI3#D6Q!*Ywvsj{JdsNvdTUd^vVc${lzsfTP&L9O)Uu9z*{uX4kR3 zG3MDToaaz1#em_%A|KDD>ECg)EOMeclu^NC3f@*3L;_xs$yV5zVEl4T7t(urqZmbL# zpJRBCkF3MrJ{;kj6MTfkgxbPpD01FZE3Z3Tw38_``6&JYTevi=Ml~@Q7H4i-i(&X;Aay>GEe{aP@=~!pEdI7 z4o*Ln?prSbUdeeY%Sg(^Q}V)3XXo$E7G=1X&4)qL?BP)ek2;!|Fax4VrYSwxc1h9# zWdz;JNZ!EdPbZgGn|GIQ-d+t#W{dJBzBi$JgxRVh;wp9JU5PQ`)WT2Yq1f$^39rxI zZeCt2dbt07cmo7sLUh&@iV1Ypv@W#;FSD+FOgj2`_}4ENC47B9d{FRBnC`&z0k(Zo z2>ZNt0Duo=tgK@<{BLjGzP>zpwz*D&~&kGq+@TM-;S-wn1y%x36mCr8skcXsR&4L84EUH&r@3P1_ihBJB)vQZJ}EMZD2SV$Yo z>-)xpmnT;zn-{y>lCBEd-+SsZ0x>I< z+11xkzk#yYV+9PSyK#>i5~oi!Riv{%xPWginM)vy6@>rp(f_%w}>Cww4L|l zv&0^&*}btcT@@d~lHs$70&l^ZY@Iu3Pr0otm}CUvebW|htN5&Jw*pkHwM=aV(50!J zw8A7w%J)QO_+m}~*g^|V<`6`eDulxpwN*?CO?LZy&5D;fVuEDYcHQXuO3%2^c9p?e3MoYpcA&pj{cfp=UQ5D~1DnJx$syx0+&R)Jgo1c!pz@q9X zzEnXif>xkx^Uw(Zt|MKYBs@SZd zEOG))#-?dFNz&nP<&@Y^<|`5TPQN{Ex9P9VT}Kdq_@kBON1fW{)*&=@%Y1cfsl3{i zutivJ#~J|b5Bo8FT0AVK((;Dc3e#jv9$djzQxNuWfSdJG!`|N2wi%uwmkun4U>m>_ ziqgHZ`m_Kpsi-nLJCDC2+-~sKEL~KOE$y9VDKhpOD5bqnHRb@cEVZ;kY}9S>YUV+BVcE*G;F5v3@?t&*N2<- z=kbHbU`6v78(1l&$W91AmM&{a{qJ$%YwTRGs$r@(_n-6qU-u7fR)WUf*vxD~AeMkB zSp?8e0DV(3TmCYG{*YMmF4JeWjN0CyVA92eU}RQ4FhAY}heMo$ZbjEH`h~BDbgI!I zr(T7Ii5h(u;!meuhQ9s{%m~0GLVz|tw}wc~+tAT1vz=Yt^+cO*H`k!f zk2*X75vR+RD{#K+(v${wpc`e=l^h|?Z{NJyym-Aiy*R&E^d7Z0aEdlrUbO-hbs2jB z8nM*C^R9;AMsA=v@UA!1KN*`}HS*@C1;jEb6xAzBW{{ECJR`Tx9Q$mM7|Y&}T@<); zm!n8BsZyE$iLYr>R6XUfro0^TYT@2+ze}KT$%m6j`edWJYCVEjc7u>*nQ~U*4Uc{NKro^RwfIFP1ACP4YQJ8+`R4 zH)Ea1)d8iA)N#WDpP#(@3WSmb3nutd1)ncs=o7P4S1>6##8wY11Jo&fpzmNu z9dJ2zwe^Qhdbqor$7vRsq^oW&N$RAswRhIac2g;8@8HrV7Ve?_xx)7DhSx3L@@+_W z#a=ksMQIO$UZQ`eQvMZglPXL7eQwNgEt-CU!N2c}|MNc5Q}`S}Ls-2#ZDzwSP-U?YMZ z)+Y=t*P1x#wxA!}z(tx6S&>{cSIvpXZ3GMZGC5o!Dl>e0MyyKmb+)|j{~lw!j`%pY69 zM%_~G6>|svg~=Rm$M`gHH`j9|Cl+oxKrNA3TIsCm0%bu zz~7mqGd|ya23tqS)YBH;J@mWsc~)7(!hlgbOC@THG1%5cGSR^YD=9R^m&TutpPcdC z{aU6qr(=qMJSj^Bq|q!+NdXE_gDl(Rqz(N)FfzQ|3O<-`$be;;x{6p!=~NCFsiRlELzxXCeQ0IaYsS5Nz;l4uV?9C1O*x72N55< z&aw!r{PaQC^>mq8eZI`JSfa=JbwAW^wjO=<4ckw_$@y>yMefhq+`5N_D_SD6s)6cS zlU0QVM$q}7B$$~b$9pgD+g7*f%L>ky-FQNc&PL-TZ*{GZ%mj-bc*Kn7dhDC_;d)-f zoTW!Jur3)K7e4_ph#t$^3|1Ka4X0r`Zrwj@@BUgN-J?{ap1!FbESK>eKr!nw+C%m>d|}hILNk4?mE^3t!rTgO>c|Jo9wXmFoiJ0$?7L+*eD zR@;rf>BxeQ2#bsksv50b)2;C(rc9rge*Lidf=}G7;HHxWzmP-gO=E2`m`a6E45+Lf z6=&w0l=69d)HTG#-!5JmsH-$lc{aiLmAy z9A6YxiYh8w*GQG~^r;wnmVy7w7A9I~o&m283Zy%L>j1Ok#4@Qrq!QJhK-2+hhGo5f zxcj);bx)R{Je{580#-R%1K2D|_CYI(V9xR@E1Ot_j0(WTu{mxDPIc8avm3fI!iiZX z?nWG_!ChZe5laKxTHCc zu^wJJP2ZF4qFcS*4ZGI*dMW_{_%)ep6-KF^m6XiS6UG=Z2?QU_e4yIxS~h~+1}R&~ zit5uiyiV)VJkAOnbeM+tk2aR;E!KLynM@wc&56=2cyBQ5K%(KSEey^rPTubg$|1X0 z{D}__i`(=;_*ijj-pGPP}vhCw8{6 zy=apNe@*Hx&7R`;BnepMR?YKe+5`Nnm@?)}i;yY74GN!}R+E>^@7MR+pqmmgBu8ys zf>|JW^y3nwO1h#aS=9U0{dQ!CZXW*HD|YC0A$ojbsF97fA9#7)S=c^)TH`(vu!?Qy zWMI!#X%R!fiRDl(V*6gw!zEL8HG18k0Z zY@hK6Sh}>a86hqFA5da9(puk&Zs7Bi%zX$VGsSBbLh6JlEJCPB0QO6On#3ID8XF>A z6VsM$0rpoQa5xh(I1zg+2x2hGfK~>Po0i>%Ndh;daPxLDr|srLyMF&+1tX1iK=fWy z@JeGMb?*3Mr2+eUl488*;oFEd+zIYR{&bVdI*ii>5hW2#&56y;jDvS!A##w@k>e|H zy-)Wacc#i!wju)uJ{L`}1~D%9lGyy67_5z#KaN|u!gE8@2yg&0EJy+gWrIF2y;zcO zwHq@Ts2y{+;3<_AAn`M;+(!*7SV`6UQl(*2_#Rqk`2qr9joS5|r{DR%-mcQTb#X%l zhi3t3bjF#2NfiV1M;O$us7c53qgCJh(Pl}JE!>{~`=9{>8cJ-s|37Wl+S}Hx zZ2!>(-;a-~BR4`F+mIZ$JzoSq+W=`(Bt5Txf7jY}VpTO|ZOI1#3ZzE7Hp$`48ge)b z)BMtxra%8o<=5?R`1w@W{68>Hd}8a$W`@sVkWJKDz?7;e$hqx{b2**Ze*Eyis529e z)gXr9TqMjN<=aeQnO<+@MSt|mi60hJ>QUzmUJLpvjBT-I7+Plsjr7!nZSR@qWAS-C zp%%5Vr9P~<1gpD1q~&9gR!i$Xx@_$L@sCfl-p~GJ@^fguBBUEFizqDnHD0i}R9DT} zK0th|7d^4Ko?^R2BM<^dBe}=IgP}Q{!EKYWX#n~Kv5yZ~A08fly#U(g^yQR~NL5se zFbA(@K)+H5EwZ~iTf^{1{^06<{`Bw3ZJaXWNReuyFhu3mW+^4L)+F`stTXzaQD==$Y~BRC|pEd6S9F1&7^bEfs)Tj9tHEa-UQEkUq|s zfSo24Bsi^j zDs$Zj`_Cz0At#A3S?$>sw%Y7u>@e#J2H1kPBe3+DuKL8YITNWrD7)2GBmNeteaD6d zYd3tpt`39#`$PS6J~xjtAn<$Rk=YhX*K(-6cda?tbf6=^IY%n&ACfgYC?W=F_8*t*_dC*{;Ln+|J*tJ+=E29-1+a$^Zng!>b&x8;?Pd7aLl*yIVC^0IY z{?>qR8VVMakDt#OYwVMF8^T@D*dN{&A*2A`4vwM%LsWKIuOGh5x8BTV+t`n?`r>Pg z*r-h9f&;HtDh!)xyha_Q6qIGn3f$R)W<~5?iR~j~vqkM(6+dUiX8|`}zG;b=XH&+w zZHx_6r&Mq}AICCluT~SNd+j{DOwpzdOmZmJm0dd4sa9FWX5eQsS>GZR?s}QzP82wwE^I!3XvNPeajcqhg~%xc?{KtN z(K~06MexCt>j(Ax&H|PK*4iOrwMP;)DKO;r6w(hPV^D@OjQMo%R=fhe1lv*#4#oG*DD89zjdBb_*_WrY?sK?7cG*zQ76dF- zD(gwBc;;iL_M=12_bL}bsaKx_po?sd<3Pk z!J>eoHLm_klW<-+wAZk*09Pt>;-P`-jjg1*gXJN5zT|0MqXfb?gwMnh8mpzMP1w$Z zaZzMP^8Qqq^h_G?I`<*bBoQqKFEJNbjUtd9IOLTX>0cOr!11LOFSH2zwSD{pAM*`o zr#~2f^nYK6^xQ}u|1CTH2yWzz;Z#?hbIp)+vQ1VGT0BYp?49sUzu>4R&0N zylfdH&XnYR9`rrOFG+tK678gHkH>-af)kbIU1FDKVS4iL$Jd!dxMBU)tlVw#1$z zHU`l>R#+-zfT0gWA&9rSzdB_Jea$Y3COWve3AItSJ|Ok)9jRt`5*7VB;CgZW{V7vg zw9q~Q1?v|x7!r~n_&|Z^6?6%MUVud0oC?{D7fi7{{E}BxqY$#Qi5r07p$6(dg#2!G zT%))>z|bS>D9rSz+#AWZ*n#~~bE&nDWL>5)E-#L16SoH_8|IM@u;GxR6KrZ*Fyt6T zoWxzmfbXx5R216Z``+koD)XAGup7Jg7@fA@K@yznz%stSKB{~4{?33g*36fx*}G0j zs|IS%j0!0JjOQ$_HohWrgFVuH2AjP1@c83A@%q!$&19j{%4_XWY^t;vd{mH1-C|)M^;!Mv$Tah`z(j#*b4b1P*P#4F=%)en4Hc{}^ z#^PnD!jhF6B*naAvO7ls&y4i$dY%a0H%!$mqEl@W{+uG<(rGv#3J zGZoMNHHj%bOfM*Ggfp)o3dShWv_@JM1P|J5)`Ku|algRs+{{&4+rcd&=G3Aw9@dm& zkOoPBkJ5u0b~xJuxW_VrXK@k0;QKlo|MZOLRTGTM3w9QhG7MGrh)aFNlX0tY$hz6| z&4D0D2`VT>YOa-BO&JB23HRN4Ia5<_7dPvcl&Hb95`Y$k&mELBYVBgIgQ)#5-kTp! zUtjRsE)6BRbmd@uj4AU%#0kC$8!2>6c6HW7Bezc3b_}u@hwNI2R4UvC^39yB7|GU6 zz-L)j2FcfjYMmfpNgMW?l8A6R^&V6nIE@K-z1+ONnyH=nm%S942!W@DDRmgM;l+hy+$z)@&$S3IdMw{Lpx>ZWgDnZ*A4F<9KBf zMLk-h;3IuW>=}P}FKupbR##`ZY0DOZC4pAN-eYj^%%J;%W$NruIg*5(+}7gu&E||j zV?nJmrCIBJv?@ClSrV^f)ykwpgT7s??^cVMVz9dl?NbNOsg&h$RrMI@Ph%C7N_9?5{$ zl!J)DRukM|@Adsz9=oye7|3g^Ax%gBn(_#u!t7*}X(V|15Tb7HPT$Z?dD}xwO&h~U z0!Y_eamiKN5F6c~oAd#&smBrDonv1G z)61th27wq38{UNdK}+>bI^*;q*bEX?R+JVm&CMn2t~a;jT_Kc(n$XqmtJ zdA+$BLk1Odts>4S8>3uH?O;ZO$B;L_9V1I>O<%QA%Cu#+MU%>Xy-wE9&mE(MU|62fn&rAus)5xt!%J_MtJEU0bQJW8?G` zv#`9XxfE5#mmGqg9SZlb`S3xe3d<@6Njb7%gkLs|1KpE#sQRTlZ^G}6xi=-e!I7c_Q+ zU@$9#n;m4fJFp?LN4rqD$rf#|lb}#^PK$vHnMQlHJ|21ho}{yG$5*f$9z(=tQ_QZH zFljr7fwNv*UAtL{(x2x;T_WJ$1 z#hW*?yw)B%_;RL1Ic&?e7PC#(wwl8v*b&r0^!vpXKH!|8x2#I0$CgE@Ua)iFxOAZk zkCbs>)eqpCw>QVC?L3Q(P|TamZjre}E%??1xuQV69IWthkV8CRU%mP1IG?qD!Qrjf z;2%^V>}+8QM#6Rl@Yh9wSU!(=bGyE|-LBr<9(xqOhuX1aybq$Y(3a&Y;8#%?_|Awl z*&IZD|K=3h<4OWYccK|>tCy-~pG(r#=AygGgE0Jncq-NM;C7&?2GNMlF?$DZ!Bgqx z*ky9ytsXEhE>86s1sn&|5nKl`UiJ($Sy+_RO165$v%b#l^78(;(~kWW)ja(-RPFSx z>FnVjLqc2-1&nXBZyr#uZhoBWGCCsu?~^M0@5mQ^+qTCYtG7&w z!7`5Ot1^r5mSQL`3fJRb6};MZ3gTlP+CkQXD=orpfb`OGbOL{C0W8a zsC*ufQ^VPJqp?MeN^lI_w?Rg`KPCFezA=YCMdiS{?1D5wBHjk%x>`mo3}~YnvE=4N`~>@)baWe9E<29|qUOf0>c17;yU3eL3>x7-@q$lx7)SA<8Uq87_C+6myIyXV#~tat@Fm4~X&S>{ zD-#8C$=J?nu+UW)6-hmP36(<^tLxSE_uKXI;$}VTTx3KFkWZP=Q!+K`QdH9-A){2j z@Th8ZL$echZZJJ8W<7x^Y8Xez#q;fE3cd(cfS6=&f!EE0lWZ2!PWUj>Svh>i=pS=< zxNxmSHdQ*nm98`X@aCjRC3+uil8e=rH1$MK?^)?2OYee=qgJ?uXb|F+gNcqR$O!so zxtO`u-$0SES_%5uq(*vEQedb+Cfzbp+uRR;Uaqd^-FEJv7E_&vE!indOIt&!V0cmH z$g0Fqm;&lG>}lp+`-V!=M&S_essmwAl!a6PJwU?0d^qdDe31_vSk?FIS%+UcpzM+d zUczPdQU^1=wZ?u59X?<55jB{Gx>+47qxv`4#*rcT@c|*zI=-Nb@O7bdA^o9s-P~T? z9JO1Y+c&ZFOr?3Y;>e0`2r<(EbWu6V6pT^dE)ZttsXg!D#^5U-fjXY^HJw=g<7J_! zHU7uw{^t?*a^4~1?v8cU2JJQSM+%oCbHaa+I`vp{ROx_0Eq}r+A6L`CmMQ7I;Il51Md$~n)xSM;=_6=5GLP2$7j#ea-YOOp<&N3H=Fx3X8 zOxX2udR1^Lu%tYgG1>W|_-d-PPB96evldkjZ>|A6zx3t_H0o%h6PWGJfTw$dyP|0u z0na$PM+NBoI-_r(zSpjL?0j3@g<|7e1I}oRstkl9;bnl{E;gIHx9j&O0)uur$AfxM zq3$~d-)r)c2UA_x;jQso%F(ZnI!4{E2rr_xQ2Dl6I>W+9IL8W#OnG*MgTWEz>L1IS z%k6jAJU?tN-h%C%a`4p@;#)@=fT6Pa81_?jE&GJep!a$n`}>Q<@uYLV;64fLRl!al zU{Mwx8D6=25#XY<7*(SaadW%8IOPqHj0s6b?#0?3jc+YW7B3f1m#7Z_PVa6`KorG# zI7G~7b4JteIwZixVCar7i^qu9r$S~?otauzY84!BiTS+N2vb9@-VKbFkT;jB^>Jll z`=hj`jQaqhJD&Rzig*I)@WgS$ynRa zYJnOopun6-P-u|j2a*1a`enOYKdz4VpC@oFAUZM;L#2NQ~ zw|}~g^k1IQSS_ew;wZwDTFi7iM64)+XK8ds&!7)a2z@hsF)oAZf+l6{8z`a3QM;;y z@5UyZNA;xdpsVLwN!n#CNo6Nu&s}P0{!k+Ad=uL`WGH@=!Oy6?_?U!kO&CUdQ-nbh zYgG6Q83@5v7JYRSBcE<=d!+m6DK=G;69<3LZ!roHiqb-f5ZUE?buZmqLvs16iioX* zXZXLDJ*-p&SROK7e;}T1;PIAJP5zvf!=g4 zei@exU$?!)$C+$%%T+s7Exjc*)bbzze+PQg4fy4k`fPj;rhpRK5H(0Iva93v6=v9l z_#J4N0HpzUG05R2k53Ra30 zE=|ertd@TTyZL&2Iewivs7nzWcwe*<47B2VOM#Y2pbiSs^&05*(|&jO^71^xAbe@~ zj}FM^t{9Vora@-_|AwBDqnfLC-2L0>x0#QXj;{hfRko*iux=9}Tv^xGl2z_%-2bwA zx&030@|W#&C3DnJCL%D}0M+J;>k4r~kNWq{xR0;9d@4iAV`Y096}5eb%TqLy>{xp1 zxq}g(Jex8>n@aFY-v+q<)pfpGJwI=66RnpTLs}deT`H^S9j`f>b5LXNAITgH231#Usr;X5fM40YfyF`sqfm?0`_gSd*08Kbld8U4h8zPi)C`N z*3Q`$v`4%Kar`yx<{!*JlU5y$Ej|jdp>xxMDSBj|Kxfb>yBl>0oFVTIx7`k35~y5r zG{C`ray66=8Nd%WoK!9Cpz;Nf_m5BO&6KJGTkB9(H9^BRlT`0CBFY(ZpcON^8UQ4J z(m9!fjD{68+7%pD0dWUS#~uV6n5eLg2aV0ltXy0C^FOKfw4Ib6&I-?~7#Y~zteJ>( z65b#i39sdVAfGWG4$pVn^=Sq5{s+YL9BF0Qj;7Eo5xmCh;B=HGMW3x0T-QFXzWxmx zi>|wAG9nP008RrfEfs!q#1L%f0pQ&Z34S|6ER=EhHz=Gg0;(tL+ATf|3^wtmZB%Lt z!2Mx=>n-h1Oci?>pT}kwmd0a0L5<)arXXCl!SNyHBw!CwgzQ0%Ew8~r5?fMH%9ugr z%BV%3fS(S>!%Sv%)a6dmi&zx^;srv+SGKmzmoh1Xlz=tE}=R`&>m~2SPGZBfa-NDo6+5`timRs!MLxI)^>v z*pXPEGIRoo5Q6QN_$%r_pA&JCg9^WJZOADhq|Ux1tZ39d;at`}swh35#VN8aIdzgf zIzIOl6lAIh-C{XQ4@!@2?v^#Z@%8#ACZ>JNT4#Zcl5?`Dq{xAYp)}#tD7*o1H+MIQ zMb#oD0nO48!6V!HIK)FPr2=k{s|mP8uHH{!;;Uq=Bw-ag7*Rl|tV(2~y9sS1VU~R} zc~OU50!Ax)ij<Chdi{!DkN%!NEy7^NB=v5bbMm zd`=3t0>hlIQMl4&wFV&$grsM> zHeZQ3HvU0@m2O^InxipS3O}?UulVyrcW3^Lnt=`Mj;iJ-b_O9hR(l9D%Hj}Ol`c2iw`sDubA!6Co` zqNyq@H6UG*OY@^^vWN9@PQI*eE6)1q?p}*hgDsgBC(+Xhl3~CHqlz=5vY9o>6;ss*skf*Gb6#Quez!ba)2Dtpjd`2R9*>#U|U8-fopc+ z&3s+zG^Gu!>F!P=C;$bqAtbG=FQWnuz-^zW-hn+b2C}|_u61;#Ntqr%)y3=+edB)( z`1X8S9q9=<^&Ww>1Lx1lQ@4XN`pO=UoFT{5SWTZXH~X1QBTNJbfV7RlgPO~nkhu`s zQy1OI5ibYg=Id(8UancqVa>&A2c;ezPKnJRaz$&b>!|zf@oojSbC0bv6Ivmn3SI9F z#1sc*S}j2GRP#^=(6_@#w?filec}v@42gcZAXq{xS&$<^0~$WNw%CWhD9dNAj>paO zjF1iys~D5i(bI^<%bab3vTF%HvQq;gP0Zb4wVsOSU3tMf3Z(=s9!=tuAt-pmXK*(b zAgdF|z{5<|f`-&aHVNq?pmr)Yl%+~Y-Wj9fP)M$p*PZ>tjLgCz5uAR4ovI{ca$xT- zm@^05du4{IXSJ02Ja492zW7##P*=TJUf7ku2ijz5ADHW~p@pEw&y&80U|2}Yg1sx$ zJ+}ESRY8{2H55A}l&jPIBkxORl89^wb}d6BlUX{OmN#Efcun0$_Os_`u$jBDR1&g- zkw&nHsdm{A6FRn&Y^7b{S^UboyWP}RW@O3|q0H$Jh#&-phqdmldCplJN`uvD_40hY zt;F*Zl5IaZ#ZZN-MLXe3l|kU(bk1|U0!cM8vtMm2G?D9AUkv-P|Dwl5EQ(1Vrn63AG5EN{>Uy z>j^m^B1Nj7r`MdL7%NS8R?76-)CcqJ4pkTX>g84R+A5b>Ffx1QYq zD>M8clUjXcVb_}-pTnleNXHQoJ+}tzObLQ@?OrEs+3$3P8Qg#7hfci>InFOg9pbWq zJS*sRYdT_4r;c)-%^3^u|Jn zD->AL@V-#TEJY4h32fafklX#s9HcLiZn{=ESE5j~686hAo->l8y{_=e?fs1AiqLf6 zAlRren3N0vU60K)<-trw#VzOH^RS)j>UUN+WXvR~W@ClulUb{!IYHAbeGK_!yZ`ij zTSM(nFGAk?CLt(;1w6;Grct3%1B6}8 zp-tFPQR?9x_ew3nmhECMrzu`y1dFoh(NIHk_!p#uGa34`$K*z3et#jqU?UTKO6qpd zE)A_xT{c4Z<}>1i&kppy^iet50?pop`5N{rAUn0UDLVF`I675(k-@d2GND}qK0lD3 zCLK94GbzL`B7^iPYF$iRZ03s1G;z8DynQ*{-)2*F8KRt}lt+FsNOjdqXeX5-0;Q@+ zsxfm|FxOLiN@l{dI0H^CCPN*09j3NOifi z<#uKq-Ll#gwxcD zb)iDlh#Fi@Z;J!4i#X#}jW$rqWQ&>H60sa0*epv>#OqF*c zNp+)f4QfiKoA*m-( zL9h%s^mjwue}VaFcQ<*pCLjftF$G3ejksG7ifIun=-}f<9&+D6*PE&8B088x4}!|- z8wmy%OhAU`upTqinrF<{&C3USwEy>%Pk)~N``utv>JB{?1tOr;&No`xf=VG0_UzSY z{KgZ0)YHR_-GT#X1V2_=_FVBpr*y8@^+ID6EbVx%K|gNyA9lX}0UT*AiQuA(fjnJv zl1=EIE*dtKk(1aN9J~3q#}8R(&=>K~<-fmK{_qkU!9QAGyY3M>Nu;V>pg6T72hMZ- z!G}r$hJQh_&2W>|u1bayt;^gOni2#y?+gyt`(MBej6m`sZ=3(Y5Ae+#KsGB4Us$w6 z_|irO#A*R4t`Ijz20w=#|F@U~oh>(L?FBlyT&Yzp8dM8Mq$?;$ujL?=zpbBN_x#Bpw!054`2~6|Qr6z_ zA2Q9ZT8P>4SsH(c(4$xBGy3Z3>Bh2#0eA-&VZpBl{n7YS5L9X|G%QpIx1+0B;89UQB^UEfs9IzUgFBX6__zvXY|L_A1}v`c{5$0 z)5Fkj@<_h`_ZBKz({BMRIVC5N zPL$O+16CP1av(c{KW(08-bPuM;e!-KnAEE_Lhyv+oZ-mjE(VnG)BWKzSFiv{)q?EW zWKjccn?mrmYEE)Ap^nU&hu5aCB{n$YY~1wZxmN>g(V_ z^!at#%8+_#iO~z|TESI(8d`%KZY}HkwsqR+Ur5YpcVAx?{~6y%4%<}oHJ1Mw4e9d$G;(7U(Q?sXoS;zCuE zGJj9ScxkE!9k$hY+5=ocez?)a;+MFJv&bD&A&dPphYUcf({Bw?15xq{?rQgUmfCiq zeU{Rv(pfl4D}caev*?X3qsxi&ul(|{nHfLe7LK}$oF=3ll!o*jr%5_#bc`(dxq>?} zDeMR6AX(v*vy5y+3Zj65c@8tDQ-B;zW?P__>+-+x&AIxBGh3W>x%bd$UdkRqPJ|wf zu3CV9dwqO5yncv!`~V$!Nn(V<$;}Pn-}0u!^iJAq)W`>Zfqr{9uI@g@Hh+K?CRhi? zBN3L10O@l9d<#Lua4y_PU%YSasU8gEnZ7)yW~4iaIRs{vrDyMav7>@rURd1h$@o*} zUW+D{&=H|67#+^9=i$Lx>)J-@jfkH&yQiscbsG^Gz~0;WML@9L8e5qoXrdbq6DH(` zEg;LcfiF5(-U3BIIsxheKrchI(8$$-&J8f%CN5*XjhOM#2#e@jQkQgJG#Y!@7q5_k z_LJtxe(ek>^d1sUmoEh2wCkDTYEuFA9H*EZw++4bjbTjNWPSqy5X&akUR28LCN!X~GrLlv-I+tMq$!dT9`M^1H z>#5fxga&Jj z#S9|QJLdiNc-s`4%Lhqq5EA$pnR%gLi!Su%5F)xz>ZpYF9dtMM;>-zdR<#DMj|?gh z*h5G9Y$A1b^bV5uw_o%)bL$TNi#1Ki&{hSgMgiHLe5?ROXc$>#yhGmYe*fSUrvF0X zeAjNlI8OuRNGB45y!~(5uC+O;Bgy`ydOyCcM#x4nSRw@2p8e8Mk1QJkAp+2>cYpn! z)4)gs+}nNIQ9)n}sfjw&BlBcc=E+7r+9~DfbzO3uKR-jj{Oaar<5k6@af5W@S!m0~ zG)(q18cdDq!rG3uw6GkPHPbsbyWHkt9*x}vP7^diAy{rWGT2>gu*xtUKUwmn9Q!o3 z0DEMyn%K2fqKl&_MLlE97J3O`z|vjwi`~WZ%V*acyL!Ifefs>*WQd_nP9B^;*K9Q3 zT`e|MtUwEDxnY`OBC+W%!EWStX>d3O0cj;?5BWGqouw?8ZhL`i{DR5b4|+N9~x9A%l3%PabRt6y&B;Q z#`1ulli8kLK6!Fn4~OqcR0nnvW>b?Sbx8&mV^~Z#T#Z}0RNW7Jeg4mF>b@NuyY23F zx4ZXWVvEqVwOLrzWSNcbqcpbF%2;Sy7LM$b3nocyxl3OJP+&1E@068RgG#?cSSa6_ zc;y$18y*0hpPfJ5#Mr(=z|te$QP9zvUYWQa+2%Y_jD0bbeL%4J-Re68F{gx>9fufh zD&SD7<`|05n!z(Kyk>ks@Y~r9dk<_Pkl)V%^)`bZ-e7PTm4v{j3_c$!%dGZQ1kB@r zzxta9YzdJap~a|?0{8&)b%Qw8`>7=2(2YWT zOUX)K0Q~&>%>@o5qWoun?>MxSsf@vgYY)z6gDzC9Kqw4jXqFiLwi4=obWE66dzw!QX$CxrdWg40$3i z+gjBQ+ahO|SmBGnZ}G+H)#dKj%NLg$?_Rzcx()cg8e}N2jg~WlAXW_pg9ymjzHk%& zdFZoem#0t+R+|m*@o0nV!LrLD+bQKzBI2KiA?4lu?biYSOPf;^J`W95iW=~Q4usOf zCfQs^&W&n39RYTI=%`IB|1NLuAJW>+e&7B2>}GeOEE!W%P08>8fYxo+!aL+rwfDLB zhwe>}=b+ubzk9#?G+{Jsz=+rv3<%awXP;8v%asj@lpf4(aT?BPlK*=Kq$D9I4IGTh zt1TmX*3ZTg;kWC9&czQQO+nN^y73{qS7H~ity?>k&W{SKXn@MYib(N`TDZ`W6H7_!vaRkPjW`rQYZm7e5oeK7__phkbXX?x&6VN zq-SKqDr}~i^70YeL)*7MnTSqu1m7M3KLDbjeJ@oU*x&F$9+i0g7~SR7 zOZ;!|;)l+-tTakWZgm9g)cA(B!!u&&1nik=8=h#pECOc=8Qu?Hhel^Hn{m{0d0 znDk?C8@sV@#O6xZy;EY{@(HTfBo^mGv5;FHHHBH&b!ShGRH`_2+ci*H>$8mNHM7ul zP`l> z^>1v|BS!a;N{9lMW11YYC@+4yJhE}hiSY1s%1mH`zs3Ph)lk_&A+9Yrv-ZH5z4-n7 zV&BSU=HXzLIGc*$`=HXUwXSm`vq#MTNP6tY2%o|NG zAQH9(hk701(Z!i3qN~(oF`*;!a5%nffoB~xn0+kTk3+`g^5xaWVvCLVz#+kqw90He z!@@%=wf9u0&XKcSiKV|-m#zH?H{vsm9TN8s8Nx?GCixf`7$8?52ZycS=Ih^$0CkGR zS3ZD<>#9kG6QNjWRq(mJ9N2!ZuKxM*U(aXab2WpsD5gOtxHoCN#$>gF|3Glw{J{y_ zn4G+I|G^kD{)PXblp$E2f~lr}WZu{495B%P#&;9pQ3RPu26fkuWy*hn>_1#>YKY@Rn>3^lf5SUtK_ZhcrZtW~P&h+FTD<~|)LcdpkYxIDkO+E)Cv6`#=^#)Z=S_|^#GZH;hs znb-Rz9-z-Gn>kMP=i~#dj4Fi!Z$5j3;Rr*VFIKgYO76>7C;x$WoG$#Sz726lm)Mg| zy@ye3g`1<0vyYN$J78b_@#@8Zh}t=iBnI zw>sVt6=;0|nfIwNXIWDot)`|z>{%TOJ&qMlJ@qO`T1(X{8zLvNSXS5YU61@l%mLm^ zCD~&ic}_LW@VR^9S1i8D$}=rRd5LzPw|2ntfma=`UViEZi~#|fX%1dD3~i!R899J$ zMFi^l@V&;_&D7vGf{4bPS~VI@jxFsF$;H5`g{spb=X52wd8P$TL_ZMh_5$LpjMJ>-2+PkVpGm>>Ng@x9 za!S&>#_p-Xb>rdtLu(4QW0>}hz4*^-K)dU5(&O==(XdIVQ<7~cnvX^$4p1dtghr1U zSYej8yLWf*XCP9_cnNIip>w2SjjNr0O0YKhQPasEAo}>}uNjCmMnv?NbniQgaKzA^fZ%+i0ks)bS}cmgstIj^6e*1JR(?U&OklVzF$| zg2KWY=>Vn^d|N(Cx4YZBe@~gCfi*JwH|?rS8mvyO8t!^fq%SW=#n{>M$CR^XB$^=9 zA8e`^?GUVwg7DqgN@dZtReN_g<@h5k=kq@HjnPVi+FuQ2*MjxYWV3wja=WXOAYpkL z;~()&MhZ$ILddMFuZo?=m+8Rm?yvrF1|pmBO=!Hv3U}HrPXDd1gU{TH&|_!H``II!0juX{rv-p zTZ!5+OSgAZHg`^f@CdZXvL9k^(y+OG?>@I|R9WS1lOR!HDMmPa+nTrrH&S?;))CC5 ztjC%wx%)81-8SzNJckJ#(Kj1lJ5_RNN%&;GauE)b^lr)&!QEO@tSiYyi;!Exr5W3$ z0bw+0?YR9lXO2RI4baJ%LTcM1%dcyUBRR_os z+11)!YGcy=j;;oTCT`z(08Vz_W(D>fw#r#$*4QL5P1#S`1+0>?bSeX`gu+tzestiN zaCNIYTs}<+1N^|3G6wtmxL#|`&KIeYldj6G1}1=XH^(wbQsQ!iRbt=FWO?!IJc3*q zv9HlLK$>!W6J6BCSxaqJm8w&{c@;89Q;BJ$1CZYR-xN&E;=IQp5f&0#3bwo^I2Z1# zf*@rb(-cU&Z?iqvT%DE34uHdZhiIi@JwsZ)8{I=HGKHO(8iw`Cc5oA65_N=ODEp{4 zU|+3cni8KddC*WU$_0y)hUIcv$Dv?DLyB?jdXm#L#j6DIj>?h@E5Y1glGKR8{=={l zbvcpd^DIqSIm@JEgq4Dj&BZo!%B?o7T*cq=E0s`tOj9nq!VoijLr5~%@3GfZlNMv0 z%ZLcfDro|wDbobk<^r|tt?^jB%tB@buV?TPpT+@9Q+#h>d`66S#M9>>LF?;>-{>J4z-+umK-SUpsVf+MF<@S=X|(ZomvwjZLxrQ%Zwb zSjxJ!Fy+l0pAxWI%+jF7s$=KK>QYNu*#ehWW$nnlnF7ecdMAY60G3&Oqhb#sRog8) z_O0H)znSAt8XE_9S6~;hX08k)IA_80@sBaW8lpM3T?r)Dy9TyvC3~l6h}iYPvMps= zJO6Ly_>uu*?KG7HS_vJlZa92eRUl(>=IRVhSu=@2hmJrFzgrVE0(d3BQ61cX(ybwy z;zxRDeKdB|ZPjF#b4&(U1{kk)#V==G63~<>8leTM)+o~l7@KVaR1)?nDWweJr!_=# z?kAk_hylvz?0HFho+9Sj6>T-w*3z}A+m0!QPof0Y)m*GS}AA4%rMzO^!EzYroQ7OM> zAOE6WoEkaw18FERl zdH?tKAE&&(m3@0xkdWwx=ABJMC|MHr6?^i?+9bW7lUky)4RE&As_3Jo7_N;iM1gzr zI_foIdq0QQRsm;&X&S7t>0XKq@JGel?g9$Fwz=i6DI2N5nUy+pkzlPIft`$4y;Mi( zZnQNEFwE;Ihz5?mQ!!MJ|FjH?t&C(-dA;OTQ zNp8)(y*6VCZR4f8Yr>+-)O-!O4zS6lwe8?bYhmR597LFrjDUMkCdym5vlyhOQYi_L zyI(u~V-BL+6kjMXH_k^jz-|ScJLJGRZmj7VqDdJ+w#BSdz~r>iVx=Oa2Yb^&V#~v= z9=1sj6d)mNU0@S)`*TMy$sBB-6Apj%d2J_+Nl6M>6;H;dil(M@9aII%DKG^t+OP^~ zQkH^>)*9yiwTzDmnRn>IdfnV@Hfv$hI5H*ROH%8n|9vleC3ghVu*(Rez40wlbG8P> zJ#36r|IH1^*TMFG_v79DhjwK4=(l4Y9<)fy%J-r=Hf;@|gKdD!CX-+xn|I6pYu`NV z;>qr6o4Wn+$WlPe$fn&`A7lBdZK#xpn9-=vS8ViGWWQaUZ7Eki9$B+qG%p;xYrXg$ zlXJP`Tm@Dru3WEuMaHUzDaf)jgBqGOd%%GuipIlYn*mPChK2``Jvn>1MagZ;oWW2_ z*+)q&MJuBP%ZE5cjiMDp`I0(&7n@3xk4IH}j?7kKivcSCX|a`g3pMo?R9p_=fa=B5 zo6D;?8!QCvbSl*5?2)%Nx|)(LK5SW!ynL$!SZuGht-amxxJE(jt)<4U5f*?1U^y+{ zPIL27!s>LLD4boCPl-3hg~CJ5?`2SUQ-X6R#{5vO?&Iq&I~haTr;~E-4~>aq#sgM6 zhzE?NXimexRK?(2cX4@ruC8}4E}vZdbV}ErgQ$k5aAFVLINMdO)x%O|X1Kf9^vdPv zZH-Ra_;SRk@tfiWqotq`%pEw7FJ9iv!j)}glTz(dv;R-qmF?JdBgtP%?&RaG zMRIl5hFUDSUkY53Mq?~{#tUZp?1ewg}iseZTr2u|O zQJOhVab53fCqKpIn4R5DEduu}4W^rO+#@UN$q$~zejTsFl07MwUXeH%ahVc(N8Q;p z@tTy!yMsPt8?L9r)gBv%`Fg;)sQQ!$dqNdPX z(mg;Ydno1V3vZRWV)K1mPi>$M*VlLFd%CJlae*iFpnL&UQOfo#?_+(GUJ1>BxlESU z+2e=Pnw`8A7B(V7Old?@sDh{fPK;x137yEzcH;fR<>QH-C~r}OBl$Hr2&9^}m2d{UF zcBWjt#+(BF;c5-izZ0~%cx4=82~INQ!{y=P-Sy!#--Nf*9@fN_DJi)&ZRddLMx z73;Mzv@596=j#(Yp}u)OTX(5SYs``rb#Sr<5g$Mq!O`rXviCLmAD*5c4o{aCf^Y>q zEj@;vmzIyxTEc_TIyp!ehM`S5e!Bk}L9U*jE>Ckddvn&*a(V8kmf#^2HNNdELa)Y% zCN*P>pMf22FIEv+?1ipbj4Oh;7J3!DPFBp4RhiPpf5Velw*(-Br95{@0h5Z9g(0j? z?rfDbD(8A!)&2?KYfGn_MFCl*oFjfJ4lqi%q&7Ng5KEIHNbCZ@A6vB{LlBGEP*)Q=31la_)xVh|ffN;89bvb2NCBIGF3Am#)w&Mu z!C%wX-IA~i`KAiHW~4o~cObZ?%3ZxC>5Ej3m!5qFwa1cgp5Ox~2qnY|WKSJ(3#wAZ zYLDJX%l8R8diVHzW>(mNxWw_*2BS`64e}J{*2HzqzL+G1Yo3 zZVXcK+?dI5x0Yi=GVLu4E~UOjrj~Ft@5E=?Wffv;VS6?2lc`X|Jy@DV`w#1mS{hY( zD2D`IoC+-eK@}r*rDPfn8ZUhXwuoIg&#c8lRX4;gf()I>`e_t$DsiL6dEkZc1=pf8pk9+_+Z-j=v?UuMj$=du5-<5W=)3rJyw;on z8Iz>@K-!8$I)$znGs`-vTvK%u;q>^3uzz#E$y z?-kh|x2k54m_hl(GPY=ro~$&nKp;@$H2viT$fxqtFZI7(Z&3H#fy_Qr-l|zGMd|FV zGhA|XxjV5$=>~&yJP@2+Kb>5f@m5eSw2UdMAzBs^ z5hyRteir-5XAGD$)i4!*N2$wH#vCW?0!l9e)yX0ViFdrSwgnDJ*Ic+4G8RkyxUSw7 z`XW$972gniOvO%wK+VQl>*csa7q16>qXg8)r_=hX{s|NpB&^I(@s>Kmw7hvBuqSzm z#r8j6r+)dk|INSt{Li*40?j@yTLk86Eg7;Z7SN@Zyc9ZVhSKu`5-xtJkarJI>f3Gk z3UJDoRt+{eR9(mPL3io^aljmk&O8Bkb$$JE|NQWNmsRr|8>Dcsy*tWT+UPLiK&aY# z;B25Jb8J#3cB-ksThWyo<#90*Dv=JgYh_clatYc^w1Wm@-%jh(`C*Sro`TDI$W3B%nvxdB@qwx8QE?9-sD{>`u{{h@=cG-D99?wiQvNMk&2%s^q~-jc?K2 z9B%i7togk5&IM5{Lmy{(+{(&}mn^f;+Abq1?~_9H0Mno=z$sTReEMjJhN%<*;0US3~c z-9KI}L5KYsHRe#29+Y;?BxkgD1v8s?^xAAg_oc#fRY1wM8EH&SQta7Gj|k3QdQw1` zN%`3r-Q~yom+PxrY>pM!LTaTF^o4jFh?5{i7Hca)gh`Sa;R*Ja|LAp*uTVEKFj$+8A?ZXD9|`kkUHi7gbY+2uxs% z?fmTd>iS}9w7h1&HcCBN&dwXw*$3&!Qcbm9Opokjs4o|a6lkJU?!xQm6VRa~_ru0|z%tCi!@@+-V8 zTRfj;tMTS=lA(Be#KzD$iBAtioC*kcpeqodlW=nL{3zr0^zv?x)|`Ti*qYLkRLp~< zQ$w{4!lg+ipbLd33}B;n_s=gU`>DMdUaQ`!R;4Xqu}WE+l$73SQqFUljNRkq^}C15 zcVg+cWbnX+lRQuI&U=MHOh$(mq6w-itp?A5UxV@8Ga||x413-RuUXb!uz2K#?t4xd zG_=$lQ^#VQ?ApV_!{G<)+kMxQCxCNy>o{v|O~vLQ70d;BgCcZln@|90$iIr&6+?w1 zgT^J(3pRlc9kDJ|u>o^~BJZzB?A_Jn^*VYIl7sFd$T4GUqe$4pvhp;=?p2&5vJVee zPg@<(noI$9Su=BPM%QRsmbzlDDkLNhTL(S{Uk4AdZV`7fT|r$tAG0nlIBQz1K6o({ z^12U9mp5$h9uDs}YsNKNhmDxQBXLzL-JkQpgcIK!JHCg66N(AiDd==KJ$jy}NxcWd)1o)pe+esw|6< zDiW84s>NPlu3%Jp#_G-=Ks&ccw*nihjD!WEE?4K9sTK$*=%)wIlN0DEHiVKz!$v{* zL^X&9Kr&4WE2&maE2>ICPtGMI#63PeEW&0yf-ifg5jmVDDIG)*?$!aLZiC)rU$Kez z?7n9=C#XYg2Iq=yx@b;GXNVr>i!Hg59T+@(jw6rH_xG!!Nb9zg!mc~l74?dr1SAac zA!FjfQ}fT*4%b)jZxKlrv88U5IBR!`DMHf}u*`m0h)j`+LZ`RyGMq;$aZb-zM zJjSnKs}hG=Kul!(=IG=c?Bz65@Helz(2Ld<+f^F%Xh%b48 zUd1jzd`S+8wbTi=zdhgF-#srGG;a8^gb<^Y$@#=K$ssJhvXNCgA%uK?xPG`@65dkO z%_!eo$4*GuakpEKKf{FG+9#P|TWsGU-+x$wP2SLIM2#Fcs}h(>YglnA0Am>VB)lFj z-9IfHH)+!BrNbxKTJe-LS?K(&rEE|fC*vlkO4oPiCqA)%bIS6_13`=AY8HXKuPp$=liCTFkvK)}0lSN-^Z_ zh)M?~l3vP5_JIr3k{J|&{b{4_d80dzz78u4yj!ytH|{hSe0JHzgQYmiBCo8VbC4#E4b&!%j?U>$CtmI@2Y^GOV!lH5XwQ;Cu^`( zlPxtu?SL3}J9zc>dJg=2_U_?ubGaS1zPnzNC!n(&WL7kWE%KN2&{8?qEX@uo&o;=- z;UvrPKZ8mJ{83Xa+Ien>7aF4>MFv_&ibo3l^2?|E`yapl^Y?%4tFxJWs1(+KIhv?@ z0b6vzG;BeTTn8pujUL!I-yEJ^{&D$mw*r+sT$WZML7vHDnv!fugPgvZp19-ZL>sF2 zm$#SOE4CHTkZ}rD6x4B%;_^gNm?ck$9o7%!foHftyMMUE7QDKFYF~oR7KTvQMrla9 z5XrY-Qm?*dEw*vT&lEOvAQ(Wm0vC9MPfCnfATvwvKD2J2^EhMlz&*yec2{1^U`1!F z)FNl2nr=U<#~>*}L?QV~g}-#eqaAuM6a`)22`6 z@fFyv+&BX!uXP%km|VBckSgA$&?t!epGyM?{0*>Od2t5J2dVART4O??M5M;lJ1*9X zGq@c%627i{IZE3Bi$Dy#XC390cQNd}RFxMn=T>9?Pcig0sPm^^`NtQ0pZ{-HP@jEh zHb!T1L1O{+)@|_8{3Lrh32h||W7O5fN13I4d3Op7#6Yh7@rx~lw%yZ(uE0p8;M1ys z@Aw96)hy*E-gTm9U6PKT2v!h1I*Fy6)aZ`#jo^YflcIzb$doDB7qMy4su6W|y=w7G zl~$y#jFz<^+by-Hz@p;_?vA~mg7l~`++*OBypltndi>D;71+)T;rY@}#LZz~NIWfc z6V4zvbs)|z(V)uw>(c-3>iwR>!w^;O5s^mzfC4A26L<{P6tgut{Z%CRvF?7tG5a`K zxKU{~4T6dTLP9LkYXv{frJ8|3k+$$fp0;(;UB|>F9;dYR zm)~Fb(|`Z|uN9~&HHF#0f+d%G5BO!uNcrTD(ColLLr~RUK7HEbS2IOr@k8V-mUmjT zb&U(y>)ZoLyDEL0H43Wy+nyfUQ%uMSRjR?XVJJ)p;H094I?1g^QwDE0KVvGpY;32n zNX6nz?V1sRk~XC({4|*88zN&qUS0AT);@RL`D!n!Hr10nA@f*Q;_};blj?ctqyJgaj3Sdti$?2^ zLsee6azJ zODvs1#(M&zW2m_fwQ0SLQC|OyI$M4juSK}Dbi9J3kyzzeL)KuigWF)?#o!00!h-8} z{`KcIpj1xLBj5BcEP|DF6paM2Y#?%mpnh7Dtb6LQSuRRL7HfsSn~#h$G zOskky=W0BHyjbB{aeRnIS|e%ppb&N(+*i>o*Ciby{aI?dYGiCBjgr7eLF^k%#LoXL z;WEi!?_ffxz!(QFy*AS&|PZ@nxMNlw#?#V0naz9K#T$a^jGyHeLBK zPyg+wC72=vJcDnh$VzJsS;|td)EZ-?^h7)Su?CYZM1@JrubVCyB8X)3&l z?B0A5_-NX5SJnt4Dap;Rzg5S1z=_4vOgvqPdFXa`WIEEp-JO=~%6Z?Z0RQXjjG)FM#XbW^HrP%0%F1a-rPS(Xl4 zEyeou2_HcnYy-I;&4)%ruk>m#8Q@CwJk1;IR#jt~@AMyR1i7z=RnD|Q99nqK+81OS zWjq**Eiq24rnIYc}v za2F%B^ENjKON|Jl^C?vqfwI2pF*sVC$1;XK^j8K8b^ZbL({ z56P{Af(A(BWMdyPFga%@gwI-*tUA+imVhj0KNMF`6~Tb-@kEXm9G z$42jM=RMhCkZ?S}C1ZN6$cA;!ickHgHPhW2$G$uu#cVq+t;Gy6pBh`d?4;%QtT$Z} z9cWvJq0vc^wp2{1Dg{hb*BHFnVW96>1G8uc9SYfJmL(-jcvIsr_|chA=&mzA{=jQ% zj*=t$5t?LWm|$!35fdG6wSi^nci7${PzY4TY2LJMnJrR56rd)+X}|#oo&Z%qs=wo0 zYpr>B775U2P%E7fwP<^pS`Z-Q-7uLLT@cf`{_mP`a>&9tBl$(VFcBCL0Eb0`pp=xr zVU#H`un(fGya(wf6CIGonzR4Xip! zZVGuXWv#_~28Nm-mFcZ8Mb*zsGBR><@6e;P>~HLy2K9hXiXd94$weYUy8rR?(B3T> zDHC$WXAqr+(y1ZwdGDQ%mOG$*KF#Yz%94n{-Y*fK(k_o)3|oChD_#_+Uod8pl~1e* zzlDf@Tr#l`p%PpBxDdUuv6&vaHc)?IaMDfot4`eUcz9e>(#0LLm}mtTsvEJf^QiO6 zyT}BTCUg(5-ku+p%=l2outPZttgKq9G#yU4v#SQe>V(6bSd_O!Kd`DKRIn?jlrLRl z;^!P3LIbxxCT-=2>EW^@DeIK*{GcM7K)8bxdrDEZ5$B6_K28tsF6SSYDCH2+h~94o zWfJ0GS-;It^la!>=Yc^E)pW(IM(8cp>XG(&M3mL$3hBMo>EkBSzh9TRi2OarfxWLS zk_)u2Np__yRdq#&Zy3FYt?v{FKx}wG@V8f51y_=*kFD8=IYfqNA9QZ;wmock!=G$9?0l` z*SY<}1Fg^|{T?=4uUiUZ;{Ql}zbkCM7N#u4i8#Y39B^SUyT^;7-t1qG&ABp_r$f^3 zgLUL0|Ncr0mKBS!jLLIS8`yDvAiK0=vYqU8ei*E)Z;ly%?BW6qhYSwG7Ixh9(CN(y zFCWXc1^e`7^@i&oFJ2vLT4Qu>ti$&WAwa_LHrLcKp@Q1z?x&*o=|SFe*S?+Z<#H&9 z?|o}YbnPg^M(~ghwq~G(TN;Jcilt39dR~0{_4V_wzW(+|7n)sE64-sF;nnEb_0S_! zx{esd)>&a<6-HE7Z~l2CRPKW69(siBK54fdqcX{lXoM@z_Bzp-zkmuy`W@~Ml}-=? z*@AypuX5=I^Ls@4SsEqj>D5nEU%a_`_I$};fwZxYUdjptJjLF;lo8rU8o%tsEt0Ta zyn6Ng&GpNxLq2r7&{VeBfwN$$D-ZexqFGcJNQA~w56_?DH(#y5)FNPk3RD)qif-9K zJ9Q_69;K?zC;ao5hk9u2gG#ltg)*m7H?<5ma)}xsD~504MoLg$9$|O8kSuq)RA(sfeqHdJBMl3s+ylZ!u}1`5e~HN#_^~={soGEuvA&~bP3Vv$_3#(Z_VlruS*5RpT4R=*jVT^ZeU4FP{JV`St5phm`O>GKVDBkn|c}$Q~pe zTF-YSBFWEoR)0fw_3}Sg-yd=QNud8pK)I`}AiS6>VKezFncnI7lQu1n_j27HFE_`w zoc6x4xK!IfM%4)tH%G(UB_55z!1lX1#j79GjA;wYMQgkC69Xq1`J#ZjIIzpagw(!6N zuaUf_nZxUmvos+XLmqILxsIqSSR0d^*#G zjR({XvuFY!&F5 zL2zmjAv{14PqyO->f5UqM>dyy%DuH_k@i#bc37!&FsNpLsTK7}_sVi}bN=!A@fIPw zU*D7}H}{7Y+1_^}HVw87tQJ$H86QPCg(;5dlS76Ycyd7g@%qgdFTT9~?$vkf2J-Ui zi|2>TV|M|Dl526m0wH1=rgR6xWh+Z|9V!$1j;oh1U;pQCFTs}1rl+bMKdIbF36rzCY zm_?8z6IDc9cbD_c`N$2IU0C7=QhoFY*IJ)6a6~RCNzrFxn*_prVHIiic!|8|6@y zF2yma6(zVEjM?3i$=`%G6|o|f*TChJ^$_2*kVPU?JFqZj4Esm!0PF%oHfFO5c9Y3Q zOzSiOqtggxAbIB$*xQ@BXuKd4pcuUG#`55Gcp1D_g**_?cDdhgh}}TEu%u)835~dv_^UUX)Eu1DsWpw7A8M zUrG;_1T>@~M-ye$v>vJ^oqRD##nQm9`h2FHZXe`wq~>oI7FZxA7i~{e>>d)r(XT&L zpRgii(gu*Q+WCDw9Wt}opJD;3kllW>DcKv7!Pm1+i2O(d(1ANE00VYC9uHk-+D`yY zlxA!0XsdUUcn#C0TG;$t&&upJjsZ{~@U2Mz+M1Mgt4V@&IYpfcJq!`k;y_NAKhKNY zpKpHH=mr+|WeMMq0CLf^s#v9hk>uf(L`kDWyj>lQulsq; zifs+*zY3UIqmcs#u_BSVZXs&>#9?iFu=4hFi!g`bJKZiJlr8Jbc17CcCQwtOI679+ zCDlbU*^~Sbe?I_Q7E`1i9Xk$ zhQhc(%BY;}qyhVf9C33a?cw^za^VOri7Cn>{37WPw_+A7|0x}A%Y1j{J$lniDYZDSsT}eF}ii1C#UG!EWA12%jz*Ssw7%y z2V%DT#7snL!@N_jLHEy-#^v<( z-2=w&bm+d&e&DlUbS?@DrN_zE05HXEd*3g0~%}a z8uAGEl-`+gkC(gil5m%5t~w{x@`w=e(d5eZh~KQ|`6_QdueKk?|a^d$xvDiX{u_D7l?&o3@6c84y^)^VcY#st)x{r{@ z_X`0IyutIbA+0N;J=;FE9uaIb&t9HhAin{8U+(TW4;O;eJu;%`%0mdvL)kI9)&=>t z@n0~HFn?_T-(Jp-ch}cH^vBb+ep`HWnH^nHfDCNe;TYvx>om;1ezQw+rV3;>%2g7muR<_5AxUUSGZWtitfWj7(SM z*=nWe+$@MtupNX*<7Ex1ZlBg&ME2F|?+z8~*IWRfB!*>E`g|22IIWlou0fc~7_BCD*D=W;uLswxgD_~U)t{I`{0ZUd7QbEcq-(NZ;k}P2qp-1Y zw?Wl5z$Z=YYNlWQ7;!G;{)lMahluc;r6;yz&0DE8~kQmg+HRq8EG>%C< zBz7ndlLo#3_z^2#M;~~VjMouUG%c{By@G~NfS5*Bb~=O~AzZ{BxIw~#QDl__DbckU zunBGHE~~wouH=vKts)PjgJtDWO^vnlzOV#W5OSQ$NxMm(uRj7@#T{5xJv?36Dj0vo zRK#OW#fGRjgI^G~Lf(h!N2Q($t z414ZKf$~(vaHi0=?x;MQFPx79LeD%fEh^Kv0cS@o{_*Y6#=V`L#0@R%+j zst6&eP!zG`i9BE-tKZf!-oraa6=qRa=Q4otZcZeiO>=cQm=xJ|(Y%Luj3_LZkTzLr zVW}Dm%Uu(jopbki;`{9Q7rt{eK|*Amc6FiHR$nV!rb4@4h2pgP`@;7Jc!(r`p~7yJ zE8Ki?oTd{io_afNn%k8{-@`jc5kk#OG1C|mX52GapiPkfUf4V?`=t1tb2&v2Vz^K$ zxE8KR>9zz9TA~vU+$XAF3ju3;Ei-MmT zx7)X7J+M;KT4euf9B$VM_j=hOUtSK@Ap%z_^tv>%*0&4>A$66?9qO^C>zC*kc!y{~ zK3%XOJ zAcE&{e3x@!YjD^oJML|CrG%RNjc0d^6BwJLK$y*U(02|Qxfo~d;G)Jl^lk9YQG)0$ z${x!#D(N7?g|6CC0!A~@8|~s0BLKnUYI@|7u-%J#c&uS4-pIuj7S{`$7jy>+0p7A! z;g*#Zhdk%xKFU?`or5d9ev$v`RgUoiqgJ+fk|$0AYN>IkdhWilrZ>VnMhDCXcZpr# z^xO)du4O@3v!%}Bt*3XazJS=3vQ_vyq}~X;Wq3oJ8$_HobJQO#;}97r)~k*>63#66 z1ZFj+Q{N;kN*rFVe!PW@BU}Ku8WP)tPt1y)wya7DN3%rFvX|&#RVhbeqZz2_9TQ|sG-lu9Gj_}Y` z#u6^ThHsg=sN;bIBw6Kb@+!I=7X5(l95=|(tJ5Vb7FQ>)o{J@8p{p-myWH$!PO*b7 zDT?bMb8`~1ax3hKS)~X3=-f_?egJrk9|RC8waKmG!7A*ut^Fw2M;~*FC5+i;;=SLc0e|?^Gd|4@j*bj@qhtCTz+)^S z=6I3U0Yl(*u4V;ISb;m)C}n@Mn>oc2T!2q@ZQx(27}wTvsKj%qq;z*XzEdor_R1-O zB~}(Pl9VGnHw9}gHJew8S|7s5nT7+Ul5g!S7g>h|v$ijBArV1xm#({*w}olPSVF1X zChar@XEp-m+{*+DL>^q@+U({34d5Y`05+;Pt`T*Dxzyw;9CUIigSm2X`K|Cyu>=tL z$P}0x%SLQ$+elG;CHmyOBL&3A~|hr@}tqJH`?m z18(S|rN@=Du~%_SJm2ED{qcGPc>{Q`#=x~nStjQI+w1^05r6TCMDArbzk=4U{8dN@ zB9h^?ktogPsZ@Z-yxo-e(MArj1P^wwVqGpp>#l_vsbNw)1!yd6RI&aRM$X(N;5*>r zPCG6=YtxBTaKhF?FJnL6W#ec^BCj>5gvYT33({NaA&X>QxAmc00{sf@5Hs-jJCV{m z+pb(v@aQHBo-hxgzTkCWr#L}h%fcGqrINdwpj7b9v4cwM9Bpll;T72_Hedy0KwI_B zGMinvU&(o7Z%EDC+7|_1ksad!_&>R_YstCjs{;kCBv32Q<|M`~kAH=BjsZAbIg+G+ zpk#`QEJ5Hek>aRGEpIxuGsu#}0TMEDk4e}N*`w=hf9)>TvG4hMMRqRgQygwpFk;rP z{A@GTj=(A@&4~nPJCX3_IgZ8qBEfevrIND*uw=vY4Yh&YfirEx!7H?5k-h~GUvA8I zlgsm$4Og9q7cNvFs9Ub|W(S92{EW3l-*Z3&h%kff5uKI;pPK*|Z+M=^S_?;Rwt{m( zG{y$En_KfWgp|8Py}>>Y#dR<0Vr11;VnOy_IUi9+K+ICO+ii@RkKZ12Jl)&DE?%fD%LCeEqnk+i>1{ZKr$yM6_a_2(cOA_=UNMU>nj^r zQV|*IkY|<18Nh(AY@?3%5#PC}Uvm$FxX^?J((KvQ;t|m#a^L!%`F=RSL)L+CKnb|Y zgcUhI%(f$Uu*_P)PIc`gymRqC!uPS$Y^*t#%LbO|%cU2x59#~r#e3&+iUjzol%itS ztu_$P6;d6@SEJ+l*!@uFJAB8OKuN({Ud{*COsptZ6_*TF%zYYm>jOST2Rzuh%Z;@& zsTr>zGU=tYNG;Z8-_ltF+-xg-KZ)Xb;K-<7sU7cYX{WM~J~i1Y1*K zCP5|h-levX1L#y5Hnzp@`T0@)gxq|w8MTKXNVqqOioXLqMG#5> zy+T6PTCVvrij#aUwS)lr=dbwZ_W(cHkppZLI_El^jwqM4;Uw|-GHqF(`25ZIPDSAA zk@sj^tu%ONo5gvJEjo72N!`y3eE@i{i!U|gw4TM4BGITl%I(StsbvId-4px|R(vW7 zSK~gs%8R^&2)AmhjU^#AEY;%oEbBeOV{uq>(^4Xpi6h*!a?#A>Og>Wy;^%A>D#0j>2 zv;U9Zb?U+PHoemT8}Zp(VMSi2=w$$(s}pzF@cq-nr@NPPhU*qyyTV3r5I+kDZDn-$ zB3*F<_f3n&5I=B=w_sPI2QV|Y1S+sSTf$`$nHhBC5H=dvGKOLceK1l3T z&=_e{aKG%3EA=HnT?Ewd#UEq80sg!XM4G` z{~YlsrNJT)BB<7;CZb41@NAKx!%zPo@Z`%sSzCRbJ;ylJkhY0TF8Lk^X&ryOutj9w zR`V0zlj%3HV_~hQgn*G}S|xM~Y@3gLEv|5J9Ok$Q<3)w(`66a<|MJI?L`h_oSXRod zP$a7KRx(%7#aMBy+k32^Fuy(Azt}N|Bl{Vu;ZF_TwMI3N&MwH%Duc_7C;6Qxd1miY z$CFmtak1*bqkXdC;2x*=oNjYAe~f>!xc@r)YvvM{@(g2}^_rH78(;{t!{_XG-u%RN z5sx}j|I@)vVD3;@$*XBZ1POlO@eY~$JIbHv^!epT{ACMp<6=-e-^zX;BuB{$ z^Y)VCR}A_7a`*BGC-d;>v)x@jcH}WHYekX8b=a+P2+MG|)UY0!H<7Ldx zXI@4X9Mx87bHJ?e%qbJkGD$V<2-AC`zC7PAk9xm&lYXZ6 zHTtZLO;v{AOpOdHrOAbVho##m{P@+L#)DEqcf7zc9?e%cKU*29*+&#*aa>Shn3PL) zb!>rt*EjXar;}8Io9~O@1Khnz_Fa9b&G%6%Q0_a~*ZpVvH!${;XN|~2xz9p4+g&Oi zI9^EM4Di-_{|7ARbrbM;nBpdQtYzk-^;Mu!ST>oX)v{lZeu|8##=(~6%qB$Vwcra6 zGC{qfJmWSaMc{kY0D63SLMnBp{m*F>E=9~NAL3=Ko<-x={ZeU5ZUFE33-^P4(?g39 z%j(M^d73!1z6fZr+dhRQOSgpxV0(Ccn2(R2FGqNYEw}~O$3^_rl6c-F)q$J}p)c+O zG2k7=HWNsTjiwPm)|d_HvgNrZSSzySZG?j>ez_m7*tkpn%=DOtQ|=>&nA-}$B*IWY z2BpfX`+FKj;Pv@&yc|0{pb9w!u)iTSmF3M9%Y$+`fj2kT&{0wOa(eTxyZ_$n%O7`) zcc-oljl&bchwhj%rA8qOw+fdf`nmSaWUp-I&toU)SyGCj1h+t~0vp;Xdw%Khv9y;O z(r;hB{B`&B<>{CKTd9&M59nj&u9xJ(LM~Efl4iFgcKq$f&W`H_SMNT;A;-a{)Sx;f zX0}%Ltw`|Qm+>cc_%0FmOb^c-o$GswIOmYWI|m{VW^{{9z1!#drmDzeQ(H$aK>B4( zJd7dD+$kdO(+EY`*2857*B4@Ex`c$6%vR(iTLFdAvTt|#f$d;^F$av& zr8$#^;+qScS@Z$HmhO1pP5A@fJ*$}aaR$Tq-R~>hFh9m`f4R)IJ`A;alNuMy!9jF=@U>r-#vb}r_bZa)gL@t7y(2SVIhTZ zk!N9SjeQ1lc3pqsU&(QiaC17w#pH4lWV(`Mr4e%-I8NCTfZtG_vSL@o!7ApMKBX|~ z@G<$YhEEho-%s+qYM~y3)+BfE(XsL>O$(B6$py?*T!^#m>-=xf?%6E%_~r4%lyBvk zTfg8kHCiesKqjXtbCBev+FHJBZwcN|QXKc|%k#M?5~|Ojdt4+`3p}8PI=v6BbLwZ$ zSKc5p$o-VQJ#vhL5@kBAReY=2Apj3?wm=1Air1A!UNK%s{h4`V*o3C81!l5%l@E`T z5b`dg@cWtfACLL#SL5y4{UKSS5IHQ1)Y9qfu`;4WZ)w7ALfaRY{*LhO$h|>~Lg|y` zK>}4k=Xt9!v!4?CPJi|dB247cyLk8f^5^$MJ?6c&<&kM*mBtzKfs~WOaBbC`_YFMn zAs%6=rd(Ra9#E~K5|A6MWf3H&L@iepjeZ{A=R=3rtB)(wW@kZovmEnsnY2HFQs-?j zd9r6jI(r)~=lckIrd0WnA~xQ|;d7t@m`%?7a>Ygs&B4YSUdk=uAK(8im_1XZY(E&?5lzC^;fAL0T6B;tXC%@Egu2XX#h8)P4tecmJ>+ zk34L?hau(?Dd!Sn4KcOV3~vFm&%H<#8JHcjn9T7curD{0fkVU^qZhbw_{X4#%{N;N z683u*z9r5t zm=VrAZ?jUQ0ncwZiSNiMf*`IcwJ)o=gYJ|i>ighKU9){!C68=4x-?WA#h5!-7^N#f z7oBfn9OG4wTT=$<3U3IlkSNI=qSE5^2jw^pj3$=ZX zAxdOojP2`ZJKcl%`YE1kJ5FYxd-4EHFNjxkwIq^7i7axd6F)ISCl8FR;Cvz)x?FFK zE_+AzUT^#KV@sY2!^j}s6v4cs&G`!=Wxz+0E$9tl=&u;>pYHdFdOEJPSr2D1H636| zCNP1(7>M(_=kFJQ;EoSl>ViRCNke0+;P0c^h>Mzoz{EqHx>m;L`?uqI?(>5^if17f z6JzTsVj)KgIDVo-O;uLIx?$r3;I69b0+tYJwjo?51W;P$*&IdqpAN^k?lkxS*XJI= zn&>^;a<|h)Hq8gYq)l&{ilDS}-HY=D+m>9VPf$Vl6PD2ej$2W%ZmSoKl3g9^UZ$_$ z_MmI92(}KP=wop-Cj7NMNw}&Ad+T1h4|K0Tc+Zh5)r1N{^|NH8PhuMGo}F0XOgfEi z%feZ+HK}qVc9f*b3`P`mP6B!0>3%@mR5{&|!cp<$az6@)I&6em$Ptu!fc2lncDIT6h33K}F5D)9MW5s+Baf?& zdZxIZI{hoYr!BEee8Axw84QKh1$e!r6ThTLiL2*x*0Jlhdeq>0g>xz3rIA&71+}t4 z?Mcb$xnL%b&u?3n4g{ruzdK{`%}+J$j*gsNTqoji&Md~|$DZ;q7_EmlX;!ukI#p>% zM6#jrup0RTbX&aguqkR(k(-a$vI_{g;>t|;x7(<&Q}7=8o@-yb*_b5>lJnkrq*CCF zqa_%9O3&xmCs_Q$(QI>fd6F%@Zv^Z4kAC#5@F{}O(QSBq>pg_9?yve4=C}U51z|L? zQxH$F5FAZ6AtdC$#Y+yetgFU;@qXj-__(KhyZGX!YbiLy-566+8_dpGGAN)snQ44B zfNgr0wbFzPlO|S*Jh|J0tk>QhGLCZyUyWhe$CoWtD5e9fio~+|q{Z%jrKybp$u3&S z{z-SU?b#S^n&JJllxUrE_>-{NLe)(R%jXvH+hxy<2AigQ9MxL@(QJZRq0_)d*9sF_ z66pKC9yUf`VT9adLYZPC10vQ75ji1k>oQ|qmwg_{Hts3%p=rXpp0IlC{m9m0W97Wr z=d8XOob#kOZ_g-XNUBTNr70uEmS!TK z@X}Qsk1A`qjxQ_t^kz~qTZl^cGM$7v(qXx?nu`u43rKWW4_f#Hc>gpWe#|{tht23o z(N`YR`m9^f=B#EgX4f*WlkzVBHxlNC*dL|l*71W;lP9cTwT=)wwg?wkfs)%O$b7lk8~>8=eSq8L z{*Z=yc0MA;WpIL0RjbcfwuvM-_I2sTJ2s;&vZc*OXSNwuM7@qWt)a%vPH@dK(*PAb zgKl5rrPV5$&Pktjmf(&@^W+-$**UG%rye(NtChA(qduH3B_O^zQ*ecI=9)CEm9;;x zZ8TRfQL8+a+>#?xwMiUYnzJy=t@hue!9pIN?_Ok2HPa}gmy}Db-~>GVL{gh@1S#0O zyn3tS@*lvpg+)z@r3lwy@-M?4APchFD&!qDcv&(6Na1l4u1M1(VksluQg>5)&#%nroUS#=^Z*>#D{(VYccclL!XFKAJ`;51p^yW{G~ zfv$7tGuLAf%kvvPd;-0Dnh$$wSM0qE$u>E!8AdV4T4!yma#VT@{6b>Eu8|6I(gV&O)d-sXF-E3vX>TTrXWrowS#WSDum z=|5LiQA zB3m4`3pSsD?Y15ssH&vm!4L$PgQ@xcKLFo9KFYlB+o6+H2VtF)NA@JH4N21A-gRM}eMXKjB0FaTjYIV*wKi--mK0fQ2R;5cB#k~X zzQ`_ZKP#HwKHe`3bIB`-70-&)j>!S zyNub&RC2SepP_!ic*t69YbSzrIFlN;deEX{a%eIOCFWz`-12%y@ipG7%Y)T|-AcAP zy{qKMKwx+FRy6~yE#)V?UAcB9SG8APyi5x03EY_2`yO(hFy?i0$@9jl+T24lH7L#_ z1x>(~x)C+ZJUi&3OH}Iwp?;M zGzB9Subcvi7x3POwyor?*p#J;b1y>7A*j{DXG()S_Va`lyep3A%jNNUJGQ6SFV!r< zAg1^pq6OjwWkpIb{S0MITmA#)_0oNhT7Xh+n$t9iL5hv145ZqrRyTWF#)|*MxlI{D zY`#{7?;ANZP{JHxJCU%$Iax2;pTT?`{q0R&WbOm(XtqG$(3*0A4ISglQsQDakof!$ z_y6g2k2EKk0Zg4d*_$p%e@SLnNV!dWa4pSwMR`aIU4!x#Yj53;CJ4!h!E<^r)tH>C zu4_**FIyGA0MzGA%4J$uY;vA=HJ4CYa(2rWrzi1F&z#FEz;BzVpjq*xqKGUl4V6aV z)9~Y1)EW77%RKt1a`bgsNt0#i<0nhGspZoou6-*Ji5_a^E zvg$4b;7d+f^T^$uh=d2k@AB}x$3)b8O3{i~=#h=E1Zg#mX@6Oz+--m+KX`BV3|nsQ z`>alkMoUJ7){q&;u)r;vP;6dbihV5L(Xf4$MKYaTdAz)Aq1a%A+#^*R7CS~GZY4YW ztr@KFYb~<&zLw7KY08H?>3O!M4Y;O+5UqF825(r^*Qs4L_J1e;e3Pe%Wwgk$h5C>( zku}LWyAy8`oNv^7ZB|dW9=!eu^}{?J;~bL5*FAPQ&)B2K@2FHX|_KHt0FL&1$n?0TR9u@;bY11Ft#K$}aM*x{~0Eaja@F!<{{lUBTyHfJGh)cP} zX(L9vNk$;aANWpK>+gP=&bZhs*q*%5+7pm>+4$#zQ&=SSK?vMNfKo3f*7N=9>!Mq# z>?Mwt8UK{hSztX_Pit!QGtbIr(wQS#KV1I4``#b6KrCEoI_8n=l`u!?Tw0B8jy~+3 z;w+)K|MqofdrP;_0L~v_wg3A3#2JJG1)j{u%8G=-eV2g zr#4fQh$qhC0rEP!dK=2Fp<22!TA@PHy^e@XtEa5Fq<&&4uf41Ic*|*=qc}mHU`#yQ z6feM>K@>Snbf@kqzW1kZ`{qwknn?6=j>%%5w@wSM(Q}I_V+~JTlF6&Q{ACcQ+`+_T zyzL1#oClTWS_I?qDiTAep|Or&^G;4|^`U2R_pou4L{-ni(WWyDf;qRIt4%@}vCTm1 zR^>+%f9WqXa9SATrPSCQHk*Nlp&2r;B{=~QI_7Pqik=Zn0a_hYWrU{?p zJUlm&o4DTMpYW`L7U|X|bx3MXV8SC;P>4K7WAUXHQ!H0T6ub%2G_kgG$26Ivvr2>3 znOcf~XF_hi!IQgjd#B$~?vz4i?UCUXJ5dW>vkf{-CgvM#)bNeRgD)6&%1Do#*tkt7 z6}&qTvE9;3KyKY7hts>gud)`7#R`yOP3shm)ikk+ zZ*J&}Chs5ZjdH9jT|Ut5+FH$BB%9;~%tVmv&pty0m1uU;IM;gI*Y?co9mFwE&ZMQc zEMcBq;Q6Y(Nt#AI+d%jcCb=49-9!40a%;OtMZ((+O)>7?4Q!@y5L&QtE z+~Qy6ypSz6XZKYzoyaV%T3^drHX)%xfWhq2!& z)37<=>wCoCFm5Yck^mb9H?@~3nA+V} zwMt2BI^16&)3&Z@{et_BbMwQVb{pw1r!_GYB*e&%yN$Q&p&^0#Gl=%-7LcVkE+#WF zTTvSDEwf6A75O|CnASHR?;zhRtoGdgn+AN0h$GI3zZDWB2bU8YbGPF0GXSqI;M>+v zD-$S}PiliuqS}~QVAVcA#k#B;Qr{u&y~rG^*i0{{OM({?u&iq1@%(xk z-lsw1C$_ENP_nUZCKyeOY#!lckd<6f#eSb7T&CT!`xQziy8$aE8c~qpC#ycTIclLa zSo*r;@9RQdo_9S$Y2=&|VTVDdqa>T{04CwV8If1jburUdh?W8D@r+3DskJr{saYDs zf7=WN_AP@`Bwk;-euaqdZ-Uq)gpSoKHR}wD3}rMKRtVU@$<}i%KOpX%3qNhBQE}Ct zq$2XV5K`spYz8d0{l?q(Pp8B3_P5BM0_Zt2K9%0Byf}wk!6q8T%Cm{kDWm@1l_zHV z8LVb4!)~?*Ar%cKylPiG^@f1TC%t{S2hu%{_03Z&&O(b5?6@`ciK!!In}ieBGju<5 z1KA4EH8^gQbT(Dz>0KSkXJn{@m8Go5MSYVuwRhWH<@iOb3_;FPkx#Lu%?gQw8FT790@Z0sIbeideKU#LVe?L!+-ThUKsSFp?ip$tLe8VcG?kjh-iG7S zK($lvKDu?v`~mJSLwCLC+(KSQ>dF+wC(qtb#5#>NGkTRy2O4>zCMt?tAiY!KiiOIqpl9TAt4DMGZNJTt1h9~o5nhU{y@4t zgRa(8kA0@$VxDE%9F*n)&*;j(dAkzjHgYBTOSq4(Q2=$=+?7c`k{ZAH`^{=fvc0p> zO>YF=T=s~XPz}0Kl?ha3s@s>4|3{Rojv}IhT4~4HS>HPn5j&a^OUNc(@MkdsNUZ53 zcUm*Z3s$Z+d`jJ>!F@%T!?*lghWtExT2*ACQ`0CS2iiQX-9e=k(^9l?C6VX0&u5g& z_D%6?9 z@%0upl~Qv;(3X-aD7LjK{z;rHx-8BpNJq-0RXc$)L#bLtVjd3Zp8In->G6iHTuv%8 zBol8XJLxeK6CjYvpbf47lJB2N{T}AZ)yxw_wmK8ls341C$IR1)T(VFL2Zv{$8Qx9< z9v$&-YpyG!v)R+g=4zHG%`#ZTOR#(E8pA%B{VmL^Y@V5?`)Q5Bb!vT3SF$VCDb1NM zQnn$Ypb`JgK2Q7vbhnr5*V{*|Yiz8TxJ`>*9&U$+btsk7=|F)#&w|-lb z=|det0GA^M0RhrUO4-@RBhGyfkd!vh~)t(SjEls((fVotSiOj!mg`OCG@(fu0cI~9NV*BWo7kt!>8`xeQCuvQPO>rBK@jaLwd=nErK8RNx!G+J(RKhdr`MiZ@SaWftoQwkq%Fcv zo@mbXYiuIL^gvPo5(fiwb(jI@Xh_(|HIAOxzYm(QH4m;C6~c4%sb(OquB{8uH}jlG ze!10sJHemt;j-}T&>opYbCs4{2~tNNfDYEz4@&q%`55Q%`Zpf2-LEgf30Z8I0NW)E z=aO$BWag|$+LO#2^bcOcFRz!m<~>Y=NVfY{)DE*U!1wrBX9BAR#(5%9WBHJzO;B@9 z&(Um+Oz8&%Wz=RTD6Gj>YI9IL5DM7>Ty@g`#19B9REubLPF)WaDV4}=xVY~|_EF>P zngPFGGul}@$_P?nsYxBT60@0oa0h*s_{0WYc7bHR^V=>B_6#%ES`&K}00aDU-w)+| z<>Y$OCB=iB^x0z5#G%m`0T8f7l?>qG#(@IX7TdRR{cMlt({)Xa^IRNWwb6X{vGweT zip}JEn=uA8eFC38?vK_TDokm*Dot0j1@SrWuMzfZeo>_ zd4!m*s#dW0g9E#<{t~XWG`BtuHTSX##63+%nvjW*CZEBu%kMH(K~!w^6giXdSMNbl z`aqOXa!{t95AlBazAVbrOQGz=AeT)-1KywxGLzkNR{sQ%-;O&M$(0o8p>iBEM9u6g z&<@SqT}?gmbWdQ!cUjFxBkQte(ay662I2;qE!L-}Qf3vCacfEk5)7Ygz$od<j z6Yt<{nDWqhe7}9YtZ_e&lymUO#*e#r^`=cK$dVjW$^DuAyKR$IPG{l^Ldr2pCyl_1 zRdX_TaZwRn=ov{V>y{99|y)8gHltan8-T(XhB1=q3KG@)upV4~evo>N!rG}9s9rc=g z9C2*xx`eOVfdu#; z;i=p2a<(fzVzxq^dpQ6)KjSqR@wR4wHUs0NT1jRxDO#g0lda#DE3nv6i^*>h^4ps6 zJ23n37KfONZW|c7uklnUuBVoIO4G8RTo<{b7OUmd2?wKGickFmX^jWQaNPEdM0z)9&v75c$l@&jJBwfyW zT4VYdxI1%e(Oi-aiL>xP!W_us{Xpi-w(rN!`%A93MIA#ZgSm|Alst(2jMn84daw~A zptG=xA}-(YjKAOHjW5e&6`Ph^HTl-V3|ve`2RNts!CPbC?qhzv++=ZlST#i?Gyn_{ z=SbWYa1khWX6M6hg|;XBqi~;F&8PR1mu#@z&%?Uc75xoDC(SD;hIPJ?%CHDy1cwg0KRw5 z-Y@GKXKSqiK$ejC#z5I?g9bQi82EpX{XY5kMuMxH?J5$m;k>5RW@HpO4H65RLpf`2 z-uftkb)2c0cBROF8RfwbfHE8SVXfT395>FZe4bDEKx z%K#yf$Ssy(TBtQp2Z%LgyM15TANJ<0jc<@t>9LZU9TWBivdgHQf&@)?8;{<+%lFOS z;k>BJl#pJg)&>+Urn`Wr>+`_EIhPynFWTZ7!xuac)P=f=$dlM z6l+M)x^tE2K%MY2yzP@Er&-Acyn<`Ql(plF!%k($0aCm9|BCZP z{{4MT`%h$!cmZhu{DoR(9T|KsrUVjN@P-~oYtQ?97ul}EX}r?=S2h9bB{8%4rD;xL zPTpm@E@Ot`oyRX=pZj}hyCeH0<}Kpu_HD}~x4BO{*(_QFIiQ*fgLmZOcBvcVerh-T z^*EBfEKUKMYiodpsh93tM-IT7oPiNtYJTpUkUzq_e+~w0Z|s`ufl-^w-rV!-GO|f& zy%pP8O=!O>>>okCf}Jh7&$SyW#&3cRN_V?C!^TQZX7`EmewWinl-s@d`(C;%@frcF z1(+?V*$i?`_%gOp@S8($q9MhY-aY&WGLnF*z1?51AD?6;%W_GFp) z*W2kTH@n+kbWnhBtg(qxcbT2gtbMdHyVf)d>fm9Ze4O{Edgm$P@*D)jlA2GL%Nzi117c%@RcRa zluhT{=Dgyt*`RS?s6aoy+KuGW`10(?AI=`AnPq@dr4~r0)5uEopuOd?HaM1&t6Ac; zWR5bC2^(aFI!&3VAEf20+~2O}wE?1*u}^gZua2l*%NQZL>8v4N$HBS7{p%I=cWHc; z*c-XC>W~Mw?m+9?2zV!*1JvG)@5|-B`1ztp6em4|*g^5wSiAN9QL&yYw{PG<olU76OYKB5#0xL8*IG}szkgiL62&H>G%p3xx!brwIE-`tW&oK=6}fpH6x&C5YtI*?kuRf+NU9+#W&Ae@*gs7T0|5J}1zdN& z;C-PGhO@hknj+T_DU1rjjLcFGTGHObJIjw{DtoD#pn5lTFrei)%qVxmBK6fJ>T^n}o|jsH6k zzB=Ma4mq)K&GVDB{@#!kvGY#6RJ+)wl677W(m7Cyg72QS(RQGd@0NvOZH(F zV|t|@EZ~2@?^h}^qYKF4ZFbWR5|lkqy;Np&y01A%w;!iFeO>$pax_121qbjV!P<&> z+C@MCH)(x;htOCaUr#hgso1Zi(ljS)KaA9p%@>BbpSJHPdTWmr%w=g56H7~>08UH= zUIg&3U?+3mllal0@qSbL80}fo%ZUP9Owhw5c=})u><^yYgH{y5a?rc>zhjg&G5U&9 z3}$REU=7$WE;C-jW&+_k?sw|`BSxD&ThsTP2Dwt3$&+c}l3nuVRLnUC`NN03W<;1{ z!0y%3!8}{_F?S)5`8q&O)7+mQ{pUJb1BP9UuIa;%BUw9B$|4K~lUz{($Q`M>S@#d* zevNdUt1{Rf71M74YADquB=cZ`^`V;f!#?x-HNsWkW*Q3>_04&SsCjrQQE*4$Bs-B20RJWV6Q#QxrI9RIP<%ppVzDi{L^d zHL6Vwz3k6F;fLbyGp#x3jVSwR)Z(nk5v8G)6nnyVsK+kd4Q0k zKfGOOlN?8G{Y!Zt9~tC$%`lfza7bDEsUwjIm~GD$GegR|zuphkJqL%bn%>$dg+ioA zF$h#<0(dVIM{*-O*D^PQ=r$IY@COyQvJxk-UI%+91(ajTtw+=?K%vEs92YMwe^78s zLusQ)h}vq~l<4iK#;cC4Sdihi{LcS_lH1uz0W&u}mP)mlRE!4>H43B>{Ei=s-sT4t zw=);(y0zHYq_;syM`>~f(X3Vv$T*xb7TkQ1`4x$gMQTUZetxSq95X2(u+(0M_;JmXu^@R(V?Kr`8_Y!aXUys z$xw+jC`8+B2eGdp1)!xPwB%o@etfx<8>*?fNZu7~a~?@Asu37n(X@ZbvfM%UK~2p9 zzP`Qr+O9SOx)xlk%Wwv+U4oa2^^D0lZxD-KY2EOkCj8{qYHIse0>vu5x@;T>SJuE& zdK^W&Vf<5PbHb84ogdh@YMo%RXpND!<|h|}FG0C=7o+bM&MiOqyga0Tg1+oRNF5%& z>x?NvWXCV5;SYN)*gZ|(KjChrlCLFnamm2qf!k|=k%@~Yr`-9ZbFlp#i!Z`0hd|n% z)7H+z2vA)DZt5}mj z=wwjG?Xqo>QW>I&*%FW(H5;{N&bpq+vrS4VPew~qwN$&^Zc)hTOIm)u{DEFh zPrv>8`gUwH7^pg|o5dR9a2kf)^lpuggwCV;SBfN$dTy9B%?OS$cb|1M3v;M&NAR39 zTrM>H@-j{x6dxr1(f0Rr{lD8}t$LHRye2aF-as^cX_0ljQZSVlefeXb!fi?lz$F09 z$P7+wYtgEVBoqR6R+g(-v;*qpzTa->aGG_*b~N#pg60-^(fn?0p~A29cR4(x_pPo1 z4e3OQlF5{uG)3Bl+Mry@_^-^%b3>-VMU!c4Hn*sE1Z6${9@e1!Tw3#RDg#I?6}#NV zY3c~P>#cv~anN%cR9i<8pF=hlR4ew@+$w3FQ-UJ05bYG0N^Z;1Y3;-VhZkFBh!8l~k7h^L8 zn;nicZzw>qTwol2YAVD{7`}ROd-qp&_lHcAgG^03p|(x7PO3WAD{%HfXKZTHm6e#q zARL!hV9oLJ^v_V!cO4-Ss@{+@AVPOK%uTBvSVmiJo38D5ADZP~_y5^usJIz+ z4SEUfT?Ek1B|tZmUA8*h*OyxD;v?e2J|AhlaeHJ>Hlybn=*i^ByClTusA% z7uF^KF)x=(9`)R;b$_%te_9hXpc-qhtpQkVp=N~>U*`2M4dv!~qq}B;VG+@z2E4itTK@Hu?jpm*hP>`0^Czqnh{uD&qGx%Qp9p z5w_xpfkSS=^w>b6d}<7WN6YnUkK4VmhRrqUdI&+BdLolD0HcmbNP;CjZ5cHHP8qCQ zy}bwR%aS9Gq1S0EL1H(qI*=)BKSKEFYEDCKwo(%ukASjGOeIwOx#YX889tN30Fge$ zb~e|MH2DZFdkDLLP1Z~hnr_NKT5CULDOJa->zn)A&5mUTY|PQ=6h^AC#2AfZcqAQg zZ~CeG&0~LD%#GfReJvi$RGetLbq04ZDN-FxhrFd_mj80UH&U?!Q~=ZBP-dN%FtYa% zKsp<8P*gEhlV?es}x+y!iObMTz!*AnqGq=+QRq{b} zEKBXK+O9dd!h=lpJ)T0dj-ha)5<5GprCixLF;c`AVvy;QjT@!-IRCn5lm4{(3j|ckOPQ@*Qv(Hxf{8&DCnNU=UX8eI3B!h=r$UseMNg`?l*1o_v&% zdo%+l68?~L)WU6`T+Q-0#jYnDu~B^HR8yU%CWGT=5E(c__{m7xLZb9jBFm)S;o)x^ z9VtZ{boMmG))1rnU`D(lA46-WU6K76NmAHY#wG_iN$RZg4_)`syQCSXI`T#(d6~iZ!CA5yjvd94#HK(I%rM50 z7PEI=sCajOdo7#P=Z&Vf5(UJHGj=}vHgp;tEJsJ#rc*8)_g6Y-X17&Ou?7g?SgHl5B zKv|JtYm#K`a?+r-FxkG(|1i!Etq4X?$qAfQhRY)l5=8I5TwigVsyuD;X7%yxwdzQ7 z1B29B24zsep=nP>K(H6d!9l^}yW6DU8e0jHTB=bjAa$+ArsC>wfe}JFJM zh^L{wK*v+++Y5Qz)_!0OE(}Fp1Pk#xVWQRqU+ufMzCBUrmmfIw<Y5Bxk_Z$D_w6w0Qj{&2j`oW3NPhF>rd;_x8hUR32mCk z2z+a61(oTole2@0z~Y;@r;aNxgStBzI7$@^IsJT?Fe$atgrkgIdJ{$G= za&5m~tdpk?*;IkiN$V-Rbf9+50Va~t=w)s%?^et6r2#4e8+v^&_a#m@65YTrbP2Nt z(*Az=?QW&-nOe!0ZUIw!DjBq7*lvJVbF~!bBFPUW1M8dta3+8ozOU=Ym0(hV-z)5} z#PISnf~Pxt&9NWTY}}PzfvVB=3i|NDK)j(QqaC#1l18S!DEqSA+`#RwlWVZ89iJS_ z^kOMoGn`SdT3Zr^om=cNJ^Ja*_NqWyLZK8ukVp$bIpEhuJ116rEa%x%1wyn|WY7mr zkpQ0?k|CC$-C{d-mVGl%jf!80Y`6GJ0DdPf#;fR<^F07GYF95KrUOX=9!b#rZqg1~ zvo4}t?DpR;*4Yq{Ng}Kz;C|B%9jSvc8yv0dLF?y&%%e>FyB0bqSP7aPQam*1_{YG4 zqb8b0-G$c{`XGAELR$tR2WGKNNe*e*S*AE}&N5kfYQyyMRB0Q|)v-0{6!Hka7^)5@ z%WM$?l7Zi_KrXW~uW#0^ZXwFG)(kE@N=qyiTbd){P_%aRIp=t(=GtyoLbKd0Fz3j6 zWo6Y9>il6V*?5>S_{NOTLkHIWb!rT}I;eBeQXLpe?eNVMBch%r%Zs6u4bRBN-=bAI z>%JFsOYcFlYxvk+b&rAX4QuOROJPptC0*7cyZl#N=gy2F6#kCxRaIz_>hVl;t=nbgdQsV)@>~CAdS=m&Tj@B zEmfk;sp~Pe$t~iUL&4rUJ_VeOh^H_A3DG8t)HpN|sT$VY%-QpF;8SbuRWITt14>A7 z(I_p(VTuUtU>$%Ka}M#)O8U?cd5v3aF`B9|mAo3OG&lz;nn{326z0y;#k>Lg*tY+(-PR-3Zfs)v6bvP~4ocT=k zkE;aw&_G#z11|MU62p`h=Ydu=+c3;6@KZhGIwIK}ASnn3C+`!W3qcH?uM4 zfxNC0YI6a(>WFvI0Uib&-lpjpCh6f@F2B5)b_#i<<2c4wh z;UGY;qQOCa>Q3-NFrdpch;sMG_3fGhijI>6{M)sSyktc7q~mv!M2F~;o)ULJlJ|`+ z9xuKB`sVlDZy!GGetYxb%h?(rVGXluCM7FYUsyudDkhLhy@`J6$vr3ce63&?sxLJ< ze4o~0Cd7aS2%$}i#HAwlW zd-L|~+4=bzlvusP)&d?j=V}FfLJU&Iqtlt>iR}Em&VO4k)L78QXj_PJ9zx}#q zi?hMH6hi}I9kwJI1NiRQWQ3P8|MUIlf8XI-&pv%#^QmoA;Ko!( z?NdgS0WfdQB51&0S4yuf^KZX=c=H+iyoObeW=n;SHg0GgL;`&4nYss@1Rt68nhyu; z%f~P0IA7iTNUgFaB6&M$&3 z*CLtjR;AN!~x!$U`uy2lza4 z)RA!tw8+}p>j=e{1$lRC~HT@T?G}% z)a!XLAoZdTwm@~W8+sIb_jNC;sI8smQ|Z&CeyU_w3LqT9 z`4~cJ7B^j9-|YUe3MMuH2!_XrgJLg9`{`@OsF;X=GVcl?Z&kj$K07dgf3#MwN7^6| zu2GUzlp6n!wrg#!>qd@$3Gc^8Wh)O?ymo4LlS=Z1H2?-OZIYKEDS7?x(|t*blGZq4 zz)h7TN~Nkh_uvd>x`COVCC8(^o!6KnP-pYrAysP)EYPlC)3un4=wR2O9QO7m#TbHI zcJY8+VJ9N&DCfcq8$M#|;ZFKjB9P{& zU}lTWW0sJRzzBv?NM;@BVDIA&YgEhLR{(PmXDTOSYDDHalhY@Y=gtU@~PmT8G0D+6N zc~)DWt`!Qc&m)670%Or5!6QrH0l{#r8?|Q8t_lC?6$tAvgzl^;@0S#4D%+`eW3FU4 zPKht#deGl?pN-6`1QNU>9Y8NsR)~VcRkZ{>wl9=bzsF*Pk!m z{o8jJe|-1P-|aBjRJBMxPwL=xrs3#bcx_NXV<7Y8+x){H|8nuek3Z}@t~ae2z~C~C zbtVjCVFQfej3ZKSOCU#+e|h)a_gg_H&+Mm3ng+#28n!-`I<^||%yk*WY4RVw|M3t1 zx--(*Op0X9q}VFR{+is>0(ujq+v&{Gk3Jc7TNPN?_#+#<&YpS=;#7?qn*9>yFcwbXB#{+$M$b=P*e)MF$(8!Mb->05eH5F)4%_)carGS1jmX0PS17c34v zcLi+K27#*=z_>;o*y)t#12xAmyBo!??OxuT?cVPi_SsbAlu;Xew#v*@obT{vQ~A=D z>-_w{+lHGnTI;}T2H+F+k0%8Ej?~Q)A3s)xFYhlt+_3443VYYLr=8SFR!~_;K}F6G zhA*CpKsnRJwR&Xxjg}`TbO4uiHytxw^Ud-o4Uas_aPh$M*(B)v!%r9bKUSiRd~sri~6oFLy4C5WsLg|J6sYuBTtWa9Ravvb1AmyEOt8R zazh;drscoF@K%}s=;|ZrInZUTSo~^jpM7*QO(^x7cK3P%Ct?bS-YCI^4lV>XOJ(Vi zT=O8b%NYK-*&U!qe@>=W4V*{QiwVdb;6<%<0p9H2wEOdpRj^E(&P>(>^-g1USY1U# z?-r=`+iv}HKi%w{_<(2*?p>)}n~kFvpMgYlWShIKN3r{9JD<)C$(Ptpl$H4TdMASj zXl_-DI8w|E1~l7sO6ek)2RG8Uchy(lV$jTYpS}fv z;m*zurbRETzl@F4O~@g0ukyW5`WI$rai7YXF+td5$ z`uf9zJY0U%;RHZtsaU*s_NxlhnnF^6axDyD~|0Zf^$*$Q4pF zP(tGHOM|zwc9VS|9CI-n`x2z2d;|-hD8Timx;z%V5d-(ki&+_BOn_@oBb_SB zhlunO^Vu~Xg+tkrQw0ny9N)}6CBBqCWrU+h^5)0ZJRPDYwV{EDGY3FsN^!Hzd>%#a zH$Qdj9S|JEzIp6wahwA~ozButY0)gR)uWpsfL%@&B)@8BzrQQuugcn zBzeHY=T;{krW|n_c4vdno|~&SEDwZ93viz}g}zziDdK@d4G>#CJJYzk^}v%q{70 ze*9(k`HkU7Cf8l!WQ{x|lvqStWQZwgxt+&{>+9dRwKnZysS_`R#+V$QIHrQu#xzGr zK-qqMOeDYPbHn0>SuAs#0mPkUQ`DvJJQn2bW<9qXtjs=5=y+;D*m+*HIdoSW2iJPj zMU6@;zDdj8uO0l&h7p+IM?7>*F=Q>KI>4VW(y-P8@E`fr=DS6->}*Kw9R7rz4HRSy za8_>uly8<1^Zx%}@^8-brMjqrGt}!aoWY9?WbHT)kX;|TJb-HEHJY(D6UcSSQZGWC*5wsPZ)p;LVE;bv7@aY?9^J{INbw744Hq>^Lg77LO z^k#%-%;c7XUH!5oRPa1Tlub=(aJbspmWC(|lJ4;5s3A$OrulA{0rYM22(($n#^T`j zW&t$C3#aXRY9OU*muvlnyCZ&Ho-eTgyLVnVXmaFTN^}y>i!bl_MIhuNo%D4j`p@Dq)S~(m&6w`ZN~rVqRYDNiW0k02LzQ zx`rX*3J|%Bg!~N}($^<*=RB&{w-?F3LC6L=%d z$2MneL!uFboT4sb?*qO3KRvCpA%fS=f*se5>yf=q4tYcJn0_5R-}tn_vS7UV)|~*7 zax#f>zz=+_*O-@PJKX90XX6V`H}i5QwsAO*L!hZf!ugOY6jmSTz#Hd9!%=K|{wSpF z`@KsBZwm*{SBm@tpjuXb)LeK!U&sVk)=#&3^Tv_czq2y`+fTO?}4#Z|9w9#qTxEzZn;U^)+(8b(xba zf~GCNox`&`gZ)F=N6KCU0{YQXKaZD#uieSkou#W0K|3I7`<(e#_P#fO@W|7S@C4yrPVg+OJ5H(H!G5wgOzfzq#3~or7PwZYcOtcv(w5YHC`- z-vS_aSY~Fqf4@~63CFD&^c}Cco0?1)TRCd0aco(#>r*7!!xEEV?VKNkIuNxuVSuI0 zCQ@_0PFp5ucFD_N37epD_ZK^ZE@BA-tVK*Ra4T$C&)FausfrrPetFvbY;z|}`O?#@ zxkhc2P0OQa?~-rLSAg+#xOld?)8{yY?bU?>w3SAo{5Ht4kfl#xp2NzOc6lRrJI`q} zltRVZ*4Wj>Cg{knC+Tyt!u#;1dCw%dq85__J9DvJEcR&}X(A1362IJ|F!>xAwnj;b z_2Eoo0AmpkUC3ub-W8k1x5HvExo2d!)~&Yde7-EmmXanMD_FqaI0P{?aY5F%+PvJk zeYodc@75`2ssofw)LEdKWHhO_c53c|jC<%!w|9Db+Uma!ED;DUA@&Wxxq(cRVQ*mkomkJpy03Ju`=@F%)%c1?%=u{BUY)ic(->+a zc!SuOjHf_;whr_@7jQu2qNA0)Q~8Ay?Eb^`7Qs(&*)lW73J>4CaSql?N+ARb!hcj5 za<$#oGFwV+fZI#-uC+0gdVtuuzEU0OTLJ1*Ny?T~^=Jqb8QZ1!kiA9viKVm8#I)Sj zhj>>vr#<1>(#A{$NU7#-`atZ5H)Y9@V*{1}>PCOv?=9%bPoqZd1lzzq@n(jI4XlNg z3(IZu@#z}(C%wAeJFn`L5)s}sz)UT8pOmPW(~VvwFM-or?al_LO+xZq$UO?>Ei-}@ z0%b!yUOzA$Y1?c|N>bN>XpAe$Q$ni2a%L*qN0&?_hGHvJp7I_+X_s zqU2#s!roXl33w>eZIsXlYnoI>$viCs8b+u*Gdhmv&vYy_xGGB3d_NW58b#qg)Ngx?O#;uGT zd}SFukrOAYFP-Vd^ycV6!qjG2)D(lU3gn+!FQ9c{&Y2dEh+Af%7t@c*)jN!&c1fJz zC=Ee_QnWOWFCacP$;&1GvMyrR)26W{A|2sf8{UgzYd7QvaNAaqC0#y? zC_kLdte(ug#iV$5z~ZZU-O6u!T`d(5-UW^|wLNCdKwZcf#wq1imRa)g-1+&#ewE9I zcG{XB%A-gDL-TR4NvL%RRG(%u9;oTk{--10o#3X4kPn_7r_OHuECIkMc3&0fWVzxm z$Ikqpop7EwU&hXJ>pzlMW<_7F1&|uZWZhExV)*{%^7eMGd!#zcoA|03ALo!-Jb<7B z{7hyd_N)&jZ(eE;c3!a74A-s!_@D>!{~)D`BAfC}EH~E^{L|~(hu=7=Z)ax#2hE8^ z?g(jMi_TBwEID&__ca21GTk@dGQgj&^yT0{*b2uM+786sd!Fq0Tmz%KUmlHKjLW-+ ztpmdzBOD6uB;K2WzYDMf)>;w5%Q}|yD-~9_^q*Mb!~fl4Q4OfmDlZFF@zlPAUhDbH zbRfpAl_%u>3)?&Rml9XeDg|LC{yJtDg9Q?J>|oPjiA#Sh{+6wph^WByDOv>0)Dn_a zra-@OGc|VKt>ONokIhTH8oRdHxe06(G7ljX(7SZN1>5Yf9b0XE67p1x@aeJ^|7fzs zD&gi{D#w=;pRvcZ1#I@SkhB4VUy{40VuZiLH!#5uzywL9xL%Bun0hdP6I44H_MrFg z?=t1pjsoiCv9UYiC}Ud`g|o+AfRxua#+NsjFBjIgS0CPA?%XsDU#&^rYi@wXlS6wL zYGeSevjJjd{Xy@p-)`L)%>ZZ>ycS!|1#f(EIjYX^zocE;Ze&Mt{3E;W7r-yAAvr@2 zZy-6^wO@$3WUU7fWJ3$XhQHns%}aM{Sv}1ftR6HHR?+92tc-}NtjvH6G+pn96YEyH zY!*aZiVlx0CVAvsm_kH4?bvr}R@ME|=i-Yqx22jjB|5Y5PSJtOY$hXL`%JA%`U z^XG?O0_TnT?U)W^pT;2%6%RkQjRaKO>$!Ox9C={v{0*8dur{JABsq5A>A`Z?C4zw+ z!lpj_5WdP<*kOf7L86o7B8)h9pOpf+J6Kj$%bbQTOD~>16AUCo=-XoHCe4+|F`5;Of;$MP+(LPq%@YA*IK912Dgz+^b32%oY0%dYMfi&%0!8k-y>3 z0+fS+lvB!A&Urc_*Y_WL%_N1|w9+h-pI<;tYhsX-b3jdJt09@vcmshxi`!qCG*@?#8szqS9Uk zRh=1NQ9purGT#r_177te8A4&?-r1}MjsR{L5~8LUY_TEDCGrk=kwL_V?kjS5EHs8W zh2cU|y>U$Pk?sTgFME+cVDveFT3~@ys|xbCS~GZ$x#W6eKYtH;l|8I9PE#M8s>@bq zC8Vn3aBV0NKX1mgpHJ4fLva#cgj6VSp1Er`Sn3s&4K0eE^VWVgS!9kJd5zPuhA_2O zy~jV1ltM7v2AS^XA4K;GZwNbk`4S56h+7sU#iF%SvDhqH9XHkx zD%m=_>J;7ls_0%4S>uWZS+Jdlk*y9a2hUMEynYt*bgxf%*K1VKydc1^bPZ@SVM)>C zadK=KtdpB_)UJkPeeRgn!LW3Pm0L;Y(1PpAd6gtqKlkzb*voXmuC5s-K4w84X$iKv z_bMGyxH~iNu5tL_YrQxn6%%`C#W?8gT9LZE9*FD~x|?^<*@s@=u;N%Q_K+LAwrSbj zhHbmG)x1a9kDmyuPhW6~+Rwl*_Rpl5fmQ)zxT$2Qw1-f!RR$eeXZE>&CM~Yc<3_>>vX$*@BUpWe^ zX|U9?ob=p_1X7X2ph8v95f7VTdVFmh#*@cTao(ruAgwH(eKZ@JNno(#kl1t9y=euX zLkHB4Y+fA1_zHZ^r9n2-)?zfrU-{dEuN`|dOG5>3gH;X2G(6~o z>>tCplIPP+_Mw+aq*zwnnt?a(Dlh%pTq0*oD&Co!-~QhRUnLQwQr`!@u~)-ctw}0~ zF%_eLQ}le#Xb*dlM7Uk0TZ4&58fU9WJhvXbZc9qkNl(26n zhbKFp(4OxRER)D+y{ovzX@hsGOP8jtG3=-Pquq=b>}3)OmVK=qwaS3Cua1)s5CRBw zrJFk*Xm1a`2F?DngBM?0WySW_<+vLUc>01xs(=cym5!raGRBay)pG|rb(m1U36#;U*>bQrT5 z^O1vxJ>*p0`hLn1+k(s=hMq5Kd6Cw!Coa1nEd1moCjoTXL|F&MxK{f z7i>Cm1hAi27D;6A{z8wifLPI04c$2{*K*o&ulBg_d`&BhP9$zGJwDc`23Q$ zqfg6`9+HPKzCt3=t7x#eoPjRPCPJkm?EF@~SU2yvCgo=i%OMd=*BpdU@zPBNYj6+E z!yiBv$LX4WMqMTj?%0KpJOqDJH6g1Qco4Cv!D~V*{ODoV_RR!ZfN=$-(44jiamQXL zWk4;+e53Libp3R^Yc>H9z_KMP;z$tF-Bb}b(!8MZ8FrN>A`DHm@b8>FW+1^w1Wi*3 zcG{0AH9w;+o{2}uuK|@Ak)BcmLuDk75+F%(bAGxz_>8&gFNXLWsW5XjDmmvzd68N^x>fXrlj!lc2^IaxjgDve#Kt>`k-rONv;d0I4kQw{eJ3-Zn&UD2;m4 zsMzy-N9ZL%tR??Cbj@tf9pMqV@0zR)h4uHNDL2=YukpK*_Cv14f#xiPBxiklQ57!T z;#IRkaJo+GfByIHz5Kz^JInh|UZrLefUI}cvVU;$?CzC~8c^{kKra)3s@p>`Hr#|8 zj=>?O65DmVW=)#64?cM8wZrzt1{Gj<>mXu%GLX%#M}d&WOPJ3c*h5~w%>kLNT_13$ zYQ&*>=0Nx2*q+?wc~^x!>{UKcQRCCvltL7?p;W@j68Kxh97NTWh4!G=NTJ~4LN5ol zt80Z4UQF@Ud!3NA=GUJ0fR~GHo#jn2tyQ-j+PRyS+1&>wU5|Oe>mKqVJ@l4yw`usK z0~io*0O93iaG>un^R9XOFME+Aa%76RaDK_2+v%CNlw4q$afj}h%E|p~vgj9Br(=*n zwl_5#^c}O)0{>=N(i`hH2n%L&v@VG+t)Racz9^k8pFI}b* z^8kA}fA_*6ml5n?d>T;mH4l7sHoxP9p6M3j0s3kNucL)5gFP%@8*IR<#*dL`9dvJ> zU%Wm5UljHOR)sBHMS(YYZXmUc!4@6{%l))qTiyB@rW$xQRb4}NuR7O|0R(|r(k>23y=ES)V zzM9J+z$v~tJi}XjZzS^KS-d|KZ1a3(&H?yhHg||L$nP<#)qdO8!K%ili|iN@-E=49 zFu$zj^R6Q=AexeLl{VO`v>@WL^R4iGoEYivW%PgfXSNn$-rxS|^$)K<RBG9mS|>JKnwsjDHo!!);_tm%8Zw=GUI*%)COJZ-RT; zTwQ*?IpwYG!Ldphxe3As|8>dMB{)-|)=fn>o8O1KJlkB}T--iAZazOfT>ks{2SE$e zRYfQ?q~V;hYwQ_SK?n{~M|Pbl-v_3-*ZTvg=tc{*I{7a6r7ZRlLbyaZmz-vjGf-A2)7_`1i@UpJ+zF9JUQro7?+A2ozg(^ZCuthe65OJk&eqg`4-SI?1!$oGHuCqp}$S9DH%3kWG@ERdD^t|Rqr74RX^QcTv)UI!kty%(lHcg_ND5a zq+ml1-n6z?tp5)B^~1$7EIV06c*v2pZQU9VZxw<-hYi#0?iTtxuz$HcJAeA}%Q`kP zc&KbojtE&+R%Qfk7t?`k*S=^gB|Up^zB-)$bhETcPPZB!XHBGkstVcUZ#Tde0i zAae};;bwF9@a1+r$W0olL@Z=gq2}Qx0@S`QNwXnlx5qyA-R9HR^$?e+Q!QQ%ud*4+ zR|6sCk<}!LipQS$)9p26)5C}I_yKlfzZ}t4tHv@VubNjO@*k=UW3W zm=S8iQtFvl{pIP~4ZrjG*&^^j6nmZ(4cJ)j95}Bv90}Bl_+lp>gup)q+ndHZZoJ6` zIV{zWz%wKkO9-fX!jy!4jjoSD7kuOAwOnD!d&n&Y!Rj@w!*1oMO$2@FF=4CC1#mwW zRd0xJS<)j|NsU2It~DopLLg!p+14i148-fr{nusGEIJ0m!SmU-STiITY&Z-fB6tM?jE(P7zZql>VplTvzKH-hv2q0#o59I=-s#bvyVxTH_V8&YIHT; z1+tNh8VqvRK!P3|Q#Qr?wi-hCdQlmxKz}JUws=&f*={(QfSF>Bc=Mrry!)1Lj%_q> zui=?vFRVN7(v%Ig<~&)We66t0caI-3GH;-*csRElOHM2ib)y3_Sp*LjXm#@dBIpvL z6{op%=DRI9P&S8_0B;&>gz@vGdGWZpTnpG7DvVJLfwe7dD7@noQsA5)!+NeM2D&kpwI92! zvVXw5KmWXn31#Lq^l@-drY3Si=Lk^;Uj*-XchK_>n2-0HPirX;t`l6zn}tED_THrw zv1Hg6uchE70u_+Ip5H%w$a=j&nn=f2bobPR0g;3BFKhTlRL6hxOcaf+cgKe#H5WI(EJ9()dtMn0D=4I#tr4c zm#^P$E|)MBZ}0U~$)0dmJS7xolfr{H$owOD@A9wT*5X#{Ae{eXm0{To_)9nz8nitu zPh+Q$XZPn9aIZ_Cygn2~T#D>_!&)IPCB_gq;WOnq=;ihGDrTwR&crTSp*r0wtwoB+ zgRZ&K>pX@aM^-U&v&QJ&DtM)grpC6^zNcZetK$EkwkunT>`1b|6#Md+KvHB+CNLya zmHH(u*0wfNOKmN6&&=P?IkzZCOx#NbqF%IsO2;E^xcl)4U*_=YP%Bl0d6V#$cU!)w zS#jsI&?Xc+4SniUhNdtf*17vzKwdv=xBG{)_pP%_8$m)imQ%uOI~KGmPV2lKa(J~%)x?e!+Xym*FYJR-OdnjZLpSe^jGF9VU>VMmPo}UC_=-LU)et|h zTl#{zyxFwsaw4;(FJm7;SqF;1=QW@{BG#2>lxH% z9NC;TSVGQOiij{YWLHcD_3dE^bba?}y&nsaemndR{`$YucTLQKZ%#*pXxk$Q#9Bpa zWDLf-8TYdPa@emweZ3oUFGr|sThf~je9H@bFz!xDA!Ny{#@93E0jPl7-3`T{N2po* zT3v!2%!rXHtUoKt90(x$Jj~tyenY(+GlWN|j@6l^bQb6-BRtH%Vm2&fFwFBmA~y?O~8LJb_A3J>EXDZ+k_|6eSy` zAcTP@*J5SqazTuHbVcyd{kgpY`YD$b%_01WQ}EHyf~ z%%E^?g9Vcp3aaUoDygcd=Jj%abu-2|pCGXi1fHDGs9D76y>0>lqR!E9ro#Lh_v^dO zn9Zw)2Gn2ROTXJbP@*Wnb>i)SKvvSDo1S6rgf|?OOJ>>^vu&| zi>%28I6pgceYd^FcHiyB6zvH!S_7}nR?jZe5S@2|s{&`*6114AH13 zOks63QUp=87oc!T#K<;2&7|1c+|dH&X!_X`Vt}aok}HyW8YZ+2|h- zzpPh7Cgj)S$6HQ@#ODK?HYG!MIOx1GML<;;v6*$=Ob_)}H(w5)Z#F|uLNCCTXGaa$ zjp>>RPyq%kDj9--I-9v%yJzsxy?z0nSu`VIH^D4$a^uu5oihs?0sNV^yoC-a!OM(vB`wJ{p)%x*nI&Uu~416R<^s$ z*TD$WX}fp$48qJ^-#&fqo3S^Ym;233WgoN(f-RAX;)pfRuHvBeKFuU5JVCGa`-d?< z`2xM$oZ*ygw5*Afd~Ajh^WJ2yJA#Kd(C_blI@|u&P-4n&hw}8;16!h8hE|ypTr!Bu z94NjpBC6`=ZsqppmxsIC`@vh*BiK~om8G!YLdlpcl3+PrG;tS99Vq|T*W5%&7#{irfVC$o$N{+9#OG`vM_85GQe{m$hK6Lq_} zzJ3@=S3dr%{ngdx;;^}2zjw{iRKbq;J|kc=Hcan&wSy5LX0&$UIDdm4z1=>74v|^O zh)S!p%9b=`q;UQL=MI;-sPP#ZMtf-0KZ9rf{+$Z3Fh~pEGh$@E%xHsC2I}Ao`|-{Y zlimH{{%Uhl#l+*B z;}11kmME-uE)q}BQ2zNp5B~zC|86;^EL6mDoP>#uPE7=#L5sZ7-uoGs{M{R` zE`}~+Um!~Z%PfOp0-vy6;7oV0YTH7GWid0{dP2UuJ|Dc#dVvhx4bWi&osv9XRyJMX zmEoLY?{n|Q-`0FTn5X#y*lVoKAwG7sCM)IN(???4~kV@_J^5;7_>Y7c(!AB{;oQA%O#MVs-RU_#{NM z1%Y#(Be@gu!}VtLrR)VX$A=(9HVBO~wmKS+Uf5}ArKqvAIR{1P^PAmnJ$5DY0vcpm zcpo{hxD+ijc#!E0Tc8Eb{9LN$xBXsyUZ1b_gAauH@b||PCW{2qGuCp_TTLQLRea`L zl}4LA^PY6JIfSV&Z|G|C2-k(EGfYVpteYyl0`wvVe0kq`oV(m4E|YN|Q^bbo?Gd=Z zHXE3cE?733JNR|3HZ>eKCcn(R{{sAM!!)teYZ71Eac~Y;4JB7qdo!9h`@C>=Cx^r88r(O)e^?Pjh&He{rmb_Yrd;^? z{&4owVYEo@2s?Si$x*?A#X^pPgRX7XNg|BPHZEX)IzK;bS3li6ym#5~lZY-5LmQ)| zhu=U1?WeXnO@aC@?D%eV`zLiwb;W@P4MZg>PK4*QAiNF!>#TeTWSLqq|@vy>zzuugbV0Hus?!^I}7SS=xrem`Ws|#WbggQyv znJ;^>zT8}|59`(8YQ4Q(-%ZiQNxOVpYwU^&L7Ko$1Re1ObP9GvX%}F(=WdZ%RIvVf ze_H9rarHKK(N)pdp*h96_y#yk^?QW zo%@E5Xd|cfKL{b}qiw33qwKr3I3!xNR>MkL#s8?l93f7C!vWb5h#_E+5F2Y3XTK_a&)viM<@TiO>SGn@(8yM-=Lzy! z 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

-RXN&IV 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%0DmOsfzR( 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%0AT{>Ne2d8`W2(GpQr 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 z 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

b_v<67QiZJrRA$Cf(Mg`4lB?G} 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

0d72F0v{^hViBICzjx5YE`w(szK{KkE}Sf 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%0A+(+W}ApdZg)} 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±bgCc!TSgGDvTOcI-cn&-yt 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�`8y!6p=h9jzW?y<_2BI7+f(n2b2_(vCT25K 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%0A}F+5lE&O1{K4GR51+&fUpY{)?A_Nd2h9#< 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